2023-05-24 11:08:08 +08:00
|
|
|
|
<template>
|
|
|
|
|
<a-config-provider :locale="locale">
|
|
|
|
|
<router-view />
|
2023-09-04 11:59:50 +08:00
|
|
|
|
<!-- <global-setting /> -->
|
2023-05-24 11:08:08 +08:00
|
|
|
|
</a-config-provider>
|
|
|
|
|
</template>
|
|
|
|
|
|
|
|
|
|
<script lang="ts" setup>
|
2023-09-07 11:39:54 +08:00
|
|
|
|
import { computed, onBeforeMount, onMounted } from 'vue';
|
2023-10-17 10:35:21 +08:00
|
|
|
|
import { useRoute, useRouter } from 'vue-router';
|
|
|
|
|
import { useEventListener, useWindowSize } from '@vueuse/core';
|
|
|
|
|
|
2024-01-24 21:53:12 +08:00
|
|
|
|
import { getProjectInfo } from '@/api/modules/project-management/basicInfo';
|
2023-10-17 10:35:21 +08:00
|
|
|
|
import { saveBaseUrl } from '@/api/modules/setting/config';
|
|
|
|
|
import { GetPlatformIconUrl } from '@/api/requrls/setting/config';
|
2023-09-04 11:59:50 +08:00
|
|
|
|
// import GlobalSetting from '@/components/pure/global-setting/index.vue';
|
2023-05-24 11:08:08 +08:00
|
|
|
|
import useLocale from '@/locale/useLocale';
|
2024-01-29 12:08:30 +08:00
|
|
|
|
import { NO_PROJECT_ROUTE_NAME, WHITE_LIST } from '@/router/constants';
|
2023-09-04 11:59:50 +08:00
|
|
|
|
import { useUserStore } from '@/store';
|
2023-08-02 14:18:24 +08:00
|
|
|
|
import useAppStore from '@/store/modules/app';
|
2023-08-18 15:55:25 +08:00
|
|
|
|
import useLicenseStore from '@/store/modules/setting/license';
|
2023-09-04 11:59:50 +08:00
|
|
|
|
import { getLocalStorage, setLocalStorage } from '@/utils/local-storage';
|
2023-10-17 10:35:21 +08:00
|
|
|
|
import { setFavicon, watchStyle, watchTheme } from '@/utils/theme';
|
|
|
|
|
|
2023-09-12 12:28:47 +08:00
|
|
|
|
import { getPublicKeyRequest } from './api/modules/user';
|
2024-01-31 16:48:15 +08:00
|
|
|
|
import { getFirstRouteNameByPermission } from './utils/permission';
|
2023-10-17 10:35:21 +08:00
|
|
|
|
import enUS from '@arco-design/web-vue/es/locale/lang/en-us';
|
|
|
|
|
import zhCN from '@arco-design/web-vue/es/locale/lang/zh-cn';
|
2023-08-02 14:18:24 +08:00
|
|
|
|
|
|
|
|
|
const appStore = useAppStore();
|
2023-08-23 11:24:26 +08:00
|
|
|
|
const userStore = useUserStore();
|
2023-08-18 15:55:25 +08:00
|
|
|
|
const licenseStore = useLicenseStore();
|
2023-08-24 19:11:17 +08:00
|
|
|
|
const router = useRouter();
|
2023-09-15 17:57:35 +08:00
|
|
|
|
const route = useRoute();
|
2023-05-24 11:08:08 +08:00
|
|
|
|
|
|
|
|
|
const { currentLocale } = useLocale();
|
|
|
|
|
const locale = computed(() => {
|
|
|
|
|
switch (currentLocale.value) {
|
|
|
|
|
case 'zh-CN':
|
|
|
|
|
return zhCN;
|
|
|
|
|
case 'en-US':
|
|
|
|
|
return enUS;
|
|
|
|
|
default:
|
|
|
|
|
return zhCN;
|
|
|
|
|
}
|
|
|
|
|
});
|
2023-07-28 16:34:32 +08:00
|
|
|
|
|
2023-08-07 13:47:04 +08:00
|
|
|
|
// 初始化平台风格和主题色
|
|
|
|
|
watchStyle(appStore.pageConfig.style, appStore.pageConfig);
|
|
|
|
|
watchTheme(appStore.pageConfig.theme, appStore.pageConfig);
|
2023-08-08 16:28:44 +08:00
|
|
|
|
setFavicon(GetPlatformIconUrl);
|
2023-08-07 13:47:04 +08:00
|
|
|
|
|
2023-07-28 16:34:32 +08:00
|
|
|
|
onBeforeMount(async () => {
|
|
|
|
|
try {
|
2024-01-29 15:08:55 +08:00
|
|
|
|
await appStore.initSystemVersion(); // 初始化系统版本
|
|
|
|
|
// 企业版才校验license
|
|
|
|
|
if (appStore.packageType === 'enterprise') {
|
|
|
|
|
licenseStore.getValidateLicense();
|
|
|
|
|
}
|
2024-01-25 11:26:52 +08:00
|
|
|
|
if (licenseStore.hasLicense()) {
|
|
|
|
|
appStore.initPageConfig(); // 初始化页面配置
|
|
|
|
|
}
|
2023-08-02 14:18:24 +08:00
|
|
|
|
// 项目初始化时需要获取基础设置信息,看当前站点 url是否为系统内置默认地址,如果是需要替换为当前项目部署的 url 地址
|
2023-07-28 16:34:32 +08:00
|
|
|
|
const isInitUrl = getLocalStorage('isInitUrl'); // 是否已经初始化过 url
|
|
|
|
|
if (isInitUrl === 'true') return;
|
2023-09-15 17:57:35 +08:00
|
|
|
|
await saveBaseUrl(window.location.origin);
|
2023-08-24 16:01:55 +08:00
|
|
|
|
setLocalStorage('isInitUrl', 'true'); // 设置已经初始化过 url,避免重复初始化
|
2023-07-28 16:34:32 +08:00
|
|
|
|
} catch (error) {
|
2023-08-23 11:24:26 +08:00
|
|
|
|
// eslint-disable-next-line no-console
|
2023-07-28 16:34:32 +08:00
|
|
|
|
console.log(error);
|
|
|
|
|
}
|
|
|
|
|
});
|
2023-08-24 19:11:17 +08:00
|
|
|
|
const checkIsLogin = async () => {
|
|
|
|
|
const isLogin = await userStore.isLogin();
|
2023-09-15 17:57:35 +08:00
|
|
|
|
const isLoginPage = route.name === 'login';
|
2024-01-29 12:08:30 +08:00
|
|
|
|
if (isLogin && appStore.currentProjectId && appStore.currentProjectId !== 'no_such_project') {
|
2024-01-23 20:04:41 +08:00
|
|
|
|
// 当前为登陆状态,且已经选择了项目,初始化当前项目配置
|
2024-01-24 21:53:12 +08:00
|
|
|
|
try {
|
|
|
|
|
const res = await getProjectInfo(appStore.currentProjectId);
|
2024-02-04 15:21:16 +08:00
|
|
|
|
if (res && (res.deleted || !res.enable)) {
|
2024-01-24 21:53:12 +08:00
|
|
|
|
// 如果项目被删除或者被禁用,跳转到无项目页面
|
2024-01-29 12:08:30 +08:00
|
|
|
|
router.push(NO_PROJECT_ROUTE_NAME);
|
2024-01-24 21:53:12 +08:00
|
|
|
|
return;
|
|
|
|
|
}
|
2024-02-04 15:21:16 +08:00
|
|
|
|
appStore.setCurrentMenuConfig(res?.moduleIds || []);
|
2024-01-24 21:53:12 +08:00
|
|
|
|
} catch (err) {
|
|
|
|
|
appStore.setCurrentMenuConfig([]);
|
|
|
|
|
// eslint-disable-next-line no-console
|
|
|
|
|
console.log(err);
|
|
|
|
|
}
|
2024-01-23 20:04:41 +08:00
|
|
|
|
}
|
2024-02-02 17:00:02 +08:00
|
|
|
|
if (isLoginPage && isLogin) {
|
|
|
|
|
// 当前页面为登录页面,且已经登录,跳转到首页
|
|
|
|
|
const currentRouteName = getFirstRouteNameByPermission(router.getRoutes());
|
|
|
|
|
router.push({ name: currentRouteName });
|
|
|
|
|
}
|
2023-08-24 19:11:17 +08:00
|
|
|
|
};
|
2023-09-12 12:28:47 +08:00
|
|
|
|
// 获取公钥
|
|
|
|
|
const getPublicKey = async () => {
|
|
|
|
|
const publicKey = await getPublicKeyRequest();
|
|
|
|
|
setLocalStorage('salt', publicKey);
|
|
|
|
|
};
|
2023-09-11 17:40:56 +08:00
|
|
|
|
|
2023-08-24 19:11:17 +08:00
|
|
|
|
onMounted(async () => {
|
2023-09-12 12:28:47 +08:00
|
|
|
|
await getPublicKey();
|
2023-09-25 11:21:45 +08:00
|
|
|
|
if (WHITE_LIST.find((el) => el.path === window.location.hash.split('#')[1]) === undefined) {
|
2023-09-11 17:40:56 +08:00
|
|
|
|
await checkIsLogin();
|
|
|
|
|
}
|
2023-09-13 18:54:24 +08:00
|
|
|
|
const { height } = useWindowSize();
|
|
|
|
|
appStore.innerHeight = height.value;
|
2024-02-02 18:48:48 +08:00
|
|
|
|
userStore.getAuthentication();
|
2023-09-13 18:54:24 +08:00
|
|
|
|
});
|
|
|
|
|
/** 屏幕大小改变时重新赋值innerHeight */
|
|
|
|
|
useEventListener(window, 'resize', () => {
|
|
|
|
|
const { height } = useWindowSize();
|
|
|
|
|
appStore.innerHeight = height.value;
|
2023-08-23 11:24:26 +08:00
|
|
|
|
});
|
2023-05-24 11:08:08 +08:00
|
|
|
|
</script>
|