徐景良 2025-02-22 09:48:41 +08:00
commit 055775db14
6 changed files with 167 additions and 6 deletions

View File

@ -17,6 +17,8 @@ enum Api {
getData = '/api/goview/project/getData', getData = '/api/goview/project/getData',
saveData = '/api/goview/project/save/data', saveData = '/api/goview/project/save/data',
projectFile = '/api/goview/project/uploadFile', projectFile = '/api/goview/project/uploadFile',
SetMainPage = '/api/goview/project/mainPage/set',
GetMainPage = '/api/goview/project/mainPage/get',
} }
// * 项目列表 // * 项目列表
export const projectListApi = (params?: ProjectItem) => export const projectListApi = (params?: ProjectItem) =>
@ -101,3 +103,14 @@ export function projectUploadFile(
// httpErrorHandle(); // httpErrorHandle();
// } // }
// }; // };
// 设置系统主页面
export function setMainPage(params) {
console.log(params);
return defHttp.post({
url: Api.SetMainPage,
params,
});
}
// 获取系统主页面
export const getMainPage = () => defHttp.get({ url: Api.GetMainPage });

View File

@ -7,6 +7,11 @@ import { mainOutRoutes } from './mainOut';
import { PageEnum } from '@/enums/pageEnum'; import { PageEnum } from '@/enums/pageEnum';
import { t } from '@/hooks/web/useI18n'; import { t } from '@/hooks/web/useI18n';
import { projectRoutes, chartRoutes, previewRoutes, editRoutes } from '@/router/disposition/index'; import { projectRoutes, chartRoutes, previewRoutes, editRoutes } from '@/router/disposition/index';
import { router } from '@/router';
import { usePermissionStore } from '@/store/modules/permission';
import { getMainPage } from '@/api/path/project.api';
import { usePermissionStore } from '@/store/modules/permission';
import { useUserStore } from '@/store/modules/user';
// import.meta.glob() 直接引入所有的模块 Vite 独有的功能 // import.meta.glob() 直接引入所有的模块 Vite 独有的功能
const modules = import.meta.glob('./modules/**/*.ts', { eager: true }); const modules = import.meta.glob('./modules/**/*.ts', { eager: true });
@ -34,10 +39,51 @@ export const asyncRoutes = [
export const RootRoute: AppRouteRecordRaw = { export const RootRoute: AppRouteRecordRaw = {
path: '/', path: '/',
name: 'Root', name: 'Root',
redirect: PageEnum.BASE_HOME, // redirect: PageEnum.BASE_HOME,
// redirect: (to) => {
// const permissionStore = usePermissionStore();
// console.log(permissionStore.homePage);
// const userStore = useUserStore();
// console.log(userStore.userInfo);
// // const page = getMainPage().then((res) => {
// // console.log(res);
// // if (res) {
// // return res.split('#')[1];
// // } else {
// // return PageEnum.BASE_HOME;
// // }
// // });
// // console.log(page);
// // return page;
// return '/chart/preview/f0adeb4b-8f11-4cbb-84e3-7e03de472a7b';
// // const permissionStore = usePermissionStore();
// // console.log(permissionStore.getHomePage);
// // const mainPage = getMainPage();
// // console.log(mainPage);
// // console.log(mainPage.split('#'));
// // if (mainPage) {
// // return mainPage.split('#')[1];
// // return '/chart/preview/f0adeb4b-8f11-4cbb-84e3-7e03de472a7b';
// // } else {
// // return PageEnum.BASE_HOME;
// // }
// },
meta: { meta: {
title: 'Root', title: 'Root',
}, },
beforeEnter: async (to, from, next) => {
const mainPage = await getMainPage();
if (to.fullPath == '/') {
if (mainPage) {
next(mainPage.split('#')[1]);
} else {
next();
}
} else {
next();
}
},
}; };
export const LoginRoute: AppRouteRecordRaw = { export const LoginRoute: AppRouteRecordRaw = {

View File

@ -27,6 +27,7 @@ import { PageEnum } from '@/enums/pageEnum';
import { router } from '@/router'; import { router } from '@/router';
import { LAYOUT } from '@/router/constant'; import { LAYOUT } from '@/router/constant';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { getMainPage } from '@/api/path/project.api';
interface PermissionState { interface PermissionState {
// Permission code list // Permission code list
@ -44,6 +45,7 @@ interface PermissionState {
// 菜单列表 // 菜单列表
frontMenuList: Menu[]; frontMenuList: Menu[];
changeMenu: number; changeMenu: number;
homePage: string;
} }
export const usePermissionStore = defineStore({ export const usePermissionStore = defineStore({
@ -64,6 +66,8 @@ export const usePermissionStore = defineStore({
// 菜单列表 // 菜单列表
frontMenuList: [], frontMenuList: [],
changeMenu: dayjs().valueOf(), changeMenu: dayjs().valueOf(),
// 主页面
homePage: '',
}), }),
getters: { getters: {
getChangeMenu(state): number { getChangeMenu(state): number {
@ -84,8 +88,14 @@ export const usePermissionStore = defineStore({
getIsDynamicAddedRoute(state): boolean { getIsDynamicAddedRoute(state): boolean {
return state.isDynamicAddedRoute; return state.isDynamicAddedRoute;
}, },
getHomePage(state) {
return state.homePage;
},
}, },
actions: { actions: {
async setHomePage() {
this.homePage = await getMainPage();
},
setPermCodeList(codeList: string[]) { setPermCodeList(codeList: string[]) {
this.permCodeList = codeList; this.permCodeList = codeList;
}, },
@ -360,7 +370,7 @@ export const usePermissionStore = defineStore({
/** /**
* @description pathroutesaffix * @description pathroutesaffix
* */ * */
const patchHomeAffix = (routes: AppRouteRecordRaw[]) => { const patchHomeAffix = async (routes: AppRouteRecordRaw[]) => {
if (!routes || routes.length === 0) return; if (!routes || routes.length === 0) return;
let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME; let homePath: string = userStore.getUserInfo.homePath || PageEnum.BASE_HOME;
@ -382,7 +392,12 @@ export const usePermissionStore = defineStore({
} }
try { try {
const homePage = await getMainPage();
if (hoemPage) {
window.open(hoemPage, '_self');
} else {
patcher(routes); patcher(routes);
}
} catch (e) { } catch (e) {
// 已处理完毕跳出循环 // 已处理完毕跳出循环
} }

View File

@ -25,6 +25,7 @@ import { isArray } from '@/utils/is';
import { h } from 'vue'; import { h } from 'vue';
import md5 from 'js-md5'; import md5 from 'js-md5';
import { useMultipleTabStore } from '@/store/modules/multipleTab'; import { useMultipleTabStore } from '@/store/modules/multipleTab';
import { getMainPage } from '@/api/path/project.api';
interface UserState { interface UserState {
userInfo: Nullable<UserInfo>; userInfo: Nullable<UserInfo>;
@ -93,6 +94,7 @@ export const useUserStore = defineStore({
setAuthCache(SUBJECT_LOGO_TITLE, logoTitle); setAuthCache(SUBJECT_LOGO_TITLE, logoTitle);
if (subject != undefined) { if (subject != undefined) {
const permissionStore = usePermissionStore(); const permissionStore = usePermissionStore();
await permissionStore.setHomePage();
await permissionStore.buildRoutesAction(); await permissionStore.buildRoutesAction();
const tabStore = useMultipleTabStore(); const tabStore = useMultipleTabStore();
tabStore.resetState(); tabStore.resetState();
@ -163,9 +165,15 @@ export const useUserStore = defineStore({
router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw); router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw);
permissionStore.setDynamicAddedRoute(true); permissionStore.setDynamicAddedRoute(true);
} }
const homePage = await getMainPage();
// 配置主页面后,进入主页面
if (homePage) {
router.replace(homePage.split('#')[1]);
} else {
goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME)); goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME));
// goHome && (await router.replace(userInfo?.homePath || PageEnum.SUBJECT_HOME)); // goHome && (await router.replace(userInfo?.homePath || PageEnum.SUBJECT_HOME));
} }
}
return userInfo; return userInfo;
}, },
async getUserInfoAction(): Promise<UserInfo | null> { async getUserInfoAction(): Promise<UserInfo | null> {

View File

@ -0,0 +1,80 @@
<template>
<PageWrapper contentBackground contentClass="p-4">
<a-form ref="formRef" :model="formState" :label-col="labelCol" :wrapper-col="wrapperCol">
<a-form-item label="页面">
<a-select v-model:value="formState.page" placeholder="请选择页面">
<a-select-option v-for="(item, index) in publishOptions" :key="index" :value="item.value">
{{ item.label }}</a-select-option
>
</a-select>
</a-form-item>
<a-form-item :wrapper-col="{ span: 14, offset: 4 }">
<a-button type="primary" @click="onSubmit"></a-button>
</a-form-item>
</a-form>
</PageWrapper>
</template>
<script lang="ts" setup>
import { nextTick, onMounted, ref, reactive } from 'vue';
import { PageWrapper } from '@/components/Page';
import { useMessage } from '@/hooks/web/useMessage';
import { BasicForm, useForm } from '@/components/Form';
import { projectListApi, setMainPage, getMainPage } from '@/api/path/project.api';
import { previewPath } from '@/utils';
const { createConfirm, createMessage } = useMessage();
const labelCol = ref({ span: 4 });
const wrapperCol = ref({ span: 14 });
const publishOptions = ref([]);
onMounted(() => {
getPublishedPageList();
getPage();
});
const formRef = ref();
const formState = reactive({
page: '',
});
const onSubmit = () => {
formRef.value
.validate()
.then(() => {
console.log('values', formState.page);
setMainPage({ mainPage: formState.page })
.then((res) => {
createMessage.success('设置成功');
})
.catch((error) => {
console.log('error', error);
});
})
.catch((error) => {
console.log('error', error);
});
};
//
const getPublishedPageList = async () => {
const data = await projectListApi({
state: 1,
page: 1,
limit: 1000,
});
publishOptions.value = data.items.map((item) => {
return {
label: item.projectName,
value: previewPath(item.id),
};
});
};
const getPage = () => {
getMainPage().then((res) => {
formState.page = res;
});
};
</script>
<style lang="less" scoped>
.demo {
background-color: @component-background;
}
</style>

View File

@ -73,7 +73,6 @@
required: true, required: true,
}, },
}); });
console.log(props.groupData);
// //
const clickElementItem = ref([]); const clickElementItem = ref([]);
// //