菜单动态路由及头部角色切换修改
This commit is contained in:
@@ -3,14 +3,19 @@ import { permission } from '/@/api/origanizemanage';
|
|||||||
import { appConfigStore } from '/nerv-lib/saas/store/modules/app-config';
|
import { appConfigStore } from '/nerv-lib/saas/store/modules/app-config';
|
||||||
import { authorizationService } from '/nerv-base/store/modules/authorization-service';
|
import { authorizationService } from '/nerv-base/store/modules/authorization-service';
|
||||||
import { get } from 'lodash-es';
|
import { get } from 'lodash-es';
|
||||||
import { computed, ref, toRef } from 'vue';
|
import { computed, ref, toRef} from 'vue';
|
||||||
|
|
||||||
const ORGID = sessionStorage.getItem('ORGID') ? Number(sessionStorage.getItem('ORGID')) : '';
|
import { router } from '/nerv-lib/saas/router';
|
||||||
const isAdmin = sessionStorage.getItem('ISADMIN')
|
import { replyRoutesButton } from '/@/util/dynamicRoutes';
|
||||||
? Boolean(sessionStorage.getItem('ISADMIN'))
|
import { replyDynamRoutesPath } from '/nerv-lib/util/dynamicRoutesss';
|
||||||
: false;
|
import { useTags } from '/nerv-base/store/modules/tags';
|
||||||
const selectDefaultValue = ref(ORGID);
|
|
||||||
const selectDefaultDisabled = ref(isAdmin);
|
const ROLEID = sessionStorage.getItem('ROLEID') ? Number(sessionStorage.getItem('ROLEID')) : '';
|
||||||
|
// const isAdmin = sessionStorage.getItem('ISADMIN')
|
||||||
|
// ? Boolean(sessionStorage.getItem('ISADMIN'))
|
||||||
|
// : false;
|
||||||
|
const selectDefaultValue = ref(ROLEID);
|
||||||
|
// const selectDefaultDisabled = ref(isAdmin);
|
||||||
const transform = (data, map) => {
|
const transform = (data, map) => {
|
||||||
return Object.keys(map).reduce((pre, cur) => {
|
return Object.keys(map).reduce((pre, cur) => {
|
||||||
pre[cur] = data[map[cur]];
|
pre[cur] = data[map[cur]];
|
||||||
@@ -46,22 +51,25 @@ export const appConfig = {
|
|||||||
api: '/carbon-smart/user/login/logInInfo',
|
api: '/carbon-smart/user/login/logInInfo',
|
||||||
size: 'large',
|
size: 'large',
|
||||||
defaultValue: selectDefaultValue,
|
defaultValue: selectDefaultValue,
|
||||||
disabled: selectDefaultDisabled,
|
disabled:false,
|
||||||
|
// disabled: selectDefaultDisabled,
|
||||||
// autoSelectFirst: true,
|
// autoSelectFirst: true,
|
||||||
placeholder: '请选择',
|
placeholder: '请选择',
|
||||||
onSelect: async (cur, record) => {
|
onSelect: async (cur:any, record:any) => {
|
||||||
console.log(cur, record);
|
|
||||||
const configStore = appConfigStore();
|
const configStore = appConfigStore();
|
||||||
const useAuthorization = authorizationService();
|
const useAuthorization = authorizationService();
|
||||||
sessionStorage.setItem('ORGID', record.orgId);
|
sessionStorage.setItem('ORGID', record.orgId);
|
||||||
|
sessionStorage.setItem('ROLEID', record.roleId);
|
||||||
const res = await configStore.userResource({ data: record });
|
const res = await configStore.userResource({ data: record });
|
||||||
useAuthorization.updateUserResource(res.data);
|
useAuthorization.updateUserResource(res.data);
|
||||||
|
setTimeout(() => {
|
||||||
window.location.reload();
|
window.location.reload();
|
||||||
|
}, 200);
|
||||||
// value.value = cur;
|
// value.value = cur;
|
||||||
},
|
},
|
||||||
resultField: 'data.linkList',
|
resultField: 'data.userRoles',
|
||||||
labelField: 'orgName',
|
labelField: 'orgName',
|
||||||
valueField: 'orgId',
|
valueField: 'roleId',
|
||||||
immediate: true,
|
immediate: true,
|
||||||
dropdownReload: true,
|
dropdownReload: true,
|
||||||
},
|
},
|
||||||
@@ -71,15 +79,33 @@ export const appConfig = {
|
|||||||
return http.post('/carbon-smart/user/login', { ...params });
|
return http.post('/carbon-smart/user/login', { ...params });
|
||||||
},
|
},
|
||||||
userResourceApi: (params) => {
|
userResourceApi: (params) => {
|
||||||
const { orgId } = get(params, 'data') || { orgId: '' };
|
const { roleId } = get(params, 'data') || { roleId: '' };
|
||||||
const finalId = orgId || ORGID;
|
const finalId = roleId || ROLEID;
|
||||||
// 解决初始化登录select无初始值的问题
|
// 解决初始化登录select无初始值的问题
|
||||||
selectDefaultValue.value = finalId;
|
selectDefaultValue.value = finalId;
|
||||||
|
|
||||||
const userInfo = JSON.parse(sessionStorage.getItem(import.meta.env.VITE_PUBLIC_PATH)!);
|
// const userInfo = JSON.parse(sessionStorage.getItem(import.meta.env.VITE_PUBLIC_PATH)!);
|
||||||
const ownOrgInfo = userInfo.linkList?.filter(({ orgId: id }) => id === finalId)[0];
|
// const ownOrgInfo = userInfo.userRoles?.filter(({ roleId: id }) => id === finalId)[0];
|
||||||
|
// return http.post('/carbon-smart/user/login/logInPermission', ownOrgInfo).then((res) => {
|
||||||
return http.post('/carbon-smart/user/login/logInPermission', ownOrgInfo).then((res) => {
|
// return res;
|
||||||
|
// });
|
||||||
|
// 切换角色时获取新的权限菜单
|
||||||
|
return http.post('/carbon-smart/user/login/role/permission/'+finalId).then((res) => {
|
||||||
|
//切换后重新处理动态菜单数据
|
||||||
|
let resetDynamicRouteList = replyRoutesButton(res.data);
|
||||||
|
sessionStorage.setItem("dynamicRouteList",JSON.stringify(resetDynamicRouteList));
|
||||||
|
if(resetDynamicRouteList && resetDynamicRouteList.length>0){
|
||||||
|
let addDynamicRoutes = replyDynamRoutesPath(resetDynamicRouteList);
|
||||||
|
addDynamicRoutes.forEach(item => {
|
||||||
|
if (item.children && !item.component) {
|
||||||
|
item.component = () => import('/nerv-lib/saas/view/system/application.vue');//hx-ai-intelligent项目下的首页
|
||||||
|
}
|
||||||
|
router.addRoute(item);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
//删除所有已经打开的tag标签
|
||||||
|
useTags().clearTags();
|
||||||
|
router.replace({ name: 'home' });
|
||||||
return res;
|
return res;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@@ -96,16 +122,25 @@ export const appConfig = {
|
|||||||
linkList: 'linkList',
|
linkList: 'linkList',
|
||||||
permissionVos: 'permissionVos',
|
permissionVos: 'permissionVos',
|
||||||
adminFlag: 'adminFlag',
|
adminFlag: 'adminFlag',
|
||||||
|
userRoles:'userRoles',
|
||||||
});
|
});
|
||||||
sessionStorage.setItem('ORGID', info.orgId);
|
sessionStorage.setItem('ORGID', info.orgId);
|
||||||
sessionStorage.setItem('LINKLIST', JSON.stringify(info.linkList));
|
sessionStorage.setItem('LINKLIST', JSON.stringify(info.linkList));
|
||||||
sessionStorage.setItem('ISADMIN', trD?.adminFlag === '1');
|
// 头部“企业角色”切换暂不需要以下屏蔽的两个参数
|
||||||
selectDefaultDisabled.value = info?.adminFlag === '1';
|
// sessionStorage.setItem('ISADMIN', trD?.adminFlag === '1');
|
||||||
selectDefaultValue.value = info.orgId;
|
// selectDefaultDisabled.value = info?.adminFlag === '1';
|
||||||
|
if(info.userRoles && info.userRoles.length>0){
|
||||||
|
sessionStorage.setItem('ROLEID', info.userRoles[0].roleId);
|
||||||
|
sessionStorage.setItem('USERROLES', JSON.stringify(info.userRoles));
|
||||||
|
selectDefaultValue.value = info.userRoles[0].roleId;
|
||||||
|
//路由接口数据暂时组装
|
||||||
|
let getRoutesList = replyRoutesButton(info.userRoles[0].routes);
|
||||||
|
sessionStorage.setItem("dynamicRouteList",JSON.stringify(getRoutesList))
|
||||||
|
sessionStorage.setItem("isRefrech",'1')
|
||||||
|
}
|
||||||
return { data: { ...trD } };
|
return { data: { ...trD } };
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
useHistoryTag: false,
|
useHistoryTag: false,
|
||||||
// 修改密码配置
|
// 修改密码配置
|
||||||
updatePassWordInfo: {
|
updatePassWordInfo: {
|
||||||
|
44
hx-ai-intelligent/src/router/dynamicRoute.ts
Normal file
44
hx-ai-intelligent/src/router/dynamicRoute.ts
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
const sessionStoreRoute = sessionStorage.getItem("dynamicRouteList");
|
||||||
|
let getDynamicRouteList = sessionStoreRoute?JSON.parse(sessionStoreRoute):[];
|
||||||
|
let dynamicRoute:any = [];
|
||||||
|
// getDynamicRouteList.map(itemRouter => {
|
||||||
|
// if(itemRouter.children && itemRouter.children.length > 0){
|
||||||
|
// itemRouter.children.map(childRoute => {
|
||||||
|
// let modulePath0 = childRoute.component;
|
||||||
|
// childRoute.component = () => new Function(`return import('/nerv-lib/saas/view/${modulePath0}')`)();///nerv-lib/saas/view/
|
||||||
|
// if(childRoute.children && childRoute.children.length > 0){
|
||||||
|
// childRoute.children.map(child2=>{
|
||||||
|
// let modulePath = child2.component;
|
||||||
|
// child2.component = () => new Function(`return import('/@/view/${modulePath}')`)();///@/view/
|
||||||
|
// })
|
||||||
|
// }else{//如没有下一级菜单代表是一级,重新处理一级菜单路由
|
||||||
|
// childRoute.component = () => new Function(`return import('/@/view/${modulePath0}')`)();
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
// dynamicRoute.push(itemRouter)
|
||||||
|
// })
|
||||||
|
getDynamicRouteList.forEach(itemRouter => {
|
||||||
|
if (itemRouter.children && itemRouter.children.length > 0) {
|
||||||
|
itemRouter.children.forEach(childRoute => {
|
||||||
|
const modulePath0 = childRoute.component;
|
||||||
|
// 修改 component 属性
|
||||||
|
// childRoute.component = () => import(`/nerv-lib/saas/view/${modulePath0}`).then(mod => mod.default);
|
||||||
|
childRoute.component = () => new Function(`return import('/nerv-lib/saas/view/${modulePath0}')`)();
|
||||||
|
|
||||||
|
if (childRoute.children && childRoute.children.length > 0) {
|
||||||
|
childRoute.children.forEach(child2 => {
|
||||||
|
const modulePath = child2.component;
|
||||||
|
// 修改 component 属性
|
||||||
|
// child2.component = /* @vite-ignore */ () => import(`/@/view/${modulePath}`).then(mod => mod.default);
|
||||||
|
child2.component = () => new Function(`return import('/@/view/${modulePath}')`)();
|
||||||
|
});
|
||||||
|
} else { // 如果没有下一级菜单代表是一级,重新处理一级菜单路由
|
||||||
|
// childRoute.component = /* @vite-ignore */ () => import(`/@/view/${modulePath0}`).then(mod => mod.default);
|
||||||
|
childRoute.component = () => new Function(`return import('/@/view/${modulePath0}')`)();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
dynamicRoute.push(itemRouter);
|
||||||
|
});
|
||||||
|
export default dynamicRoute;
|
98
hx-ai-intelligent/src/util/dynamicRoutes.ts
Normal file
98
hx-ai-intelligent/src/util/dynamicRoutes.ts
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
/***公共方法==>处理动态路由数据 将“按钮”部分的数据追加到meta中*/
|
||||||
|
//处理路由按钮,存放在meta中
|
||||||
|
export const replyRoutesButton = (data:any) => {
|
||||||
|
if(!data) return;
|
||||||
|
return data.map(item => {
|
||||||
|
if(item.children && item.children.length > 0){
|
||||||
|
item.meta.operates = [];
|
||||||
|
item.children.map(itemChild => {
|
||||||
|
if(itemChild.type=="3"){
|
||||||
|
let operateObj = {title:'',code:''};
|
||||||
|
operateObj.title = itemChild.meta.title;
|
||||||
|
operateObj.code = itemChild.name;
|
||||||
|
item.meta.operates.push(operateObj);
|
||||||
|
item.children = item.children.filter(its => its.name != itemChild.name);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if(item.meta.operates.length == 0){
|
||||||
|
delete item.meta.operates;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...item,
|
||||||
|
children: replyRoutesButton(item.children),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return item;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// //处理路由compontent路径
|
||||||
|
// export const replyRoutesPath = (itemRouter:any) => {
|
||||||
|
// if (itemRouter.children && itemRouter.children.length > 0) {
|
||||||
|
// itemRouter.children.forEach(childRoute => {
|
||||||
|
// const modulePath0 = childRoute.component;
|
||||||
|
// // 修改 component 属性
|
||||||
|
// // childRoute.component = () => import(`/nerv-lib/saas/view/${modulePath0}`).then(mod => mod.default);
|
||||||
|
// childRoute.component = () => new Function(`return import('/nerv-lib/saas/view/${modulePath0}')`)();
|
||||||
|
|
||||||
|
// if (childRoute.children && childRoute.children.length > 0) {
|
||||||
|
// childRoute.children.forEach(child2 => {
|
||||||
|
// const modulePath = child2.component;
|
||||||
|
// // 修改 component 属性
|
||||||
|
// // child2.component = /* @vite-ignore */ () => import(`/@/view/${modulePath}`).then(mod => mod.default);
|
||||||
|
// child2.component = () => new Function(`return import('/@/view/${modulePath}')`)();
|
||||||
|
// });
|
||||||
|
// } else { // 如果没有下一级菜单代表是一级,重新处理一级菜单路由
|
||||||
|
// // childRoute.component = /* @vite-ignore */ () => import(`/@/view/${modulePath0}`).then(mod => mod.default);
|
||||||
|
// childRoute.component = () => new Function(`return import('/@/view/${modulePath0}')`)();
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
// return itemRouter;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@@ -106,7 +106,7 @@
|
|||||||
const componentIsshow = ref(false);//前端组件是否显示
|
const componentIsshow = ref(false);//前端组件是否显示
|
||||||
const redirectIsshow = ref(true);//重定向路由是否显示
|
const redirectIsshow = ref(true);//重定向路由是否显示
|
||||||
const keepAliveIsshow = ref(false);//缓存是否显示
|
const keepAliveIsshow = ref(false);//缓存是否显示
|
||||||
const hideChildrenIsshow = ref(false);//是否隐藏子级是否显示
|
const hideChildrenIsshow = ref(true);//是否隐藏子级是否显示
|
||||||
interface FormState {
|
interface FormState {
|
||||||
menuName: string;
|
menuName: string;
|
||||||
previousMenu:string;
|
previousMenu:string;
|
||||||
@@ -183,7 +183,7 @@
|
|||||||
componentIsshow.value = false;
|
componentIsshow.value = false;
|
||||||
redirectIsshow.value = true;
|
redirectIsshow.value = true;
|
||||||
keepAliveIsshow.value = false;
|
keepAliveIsshow.value = false;
|
||||||
hideChildrenIsshow.value = false;
|
hideChildrenIsshow.value = true;
|
||||||
}else if(currentType==2){//二级菜单
|
}else if(currentType==2){//二级菜单
|
||||||
menuNameIsshow.value = true;
|
menuNameIsshow.value = true;
|
||||||
preMenuIsshow.value = true;
|
preMenuIsshow.value = true;
|
||||||
@@ -244,6 +244,7 @@
|
|||||||
}
|
}
|
||||||
if(menuRadioType.value==1){
|
if(menuRadioType.value==1){
|
||||||
params.pid = currentLineData.value?currentLineData.value.pid:"root";//一级菜单pid,传'root'
|
params.pid = currentLineData.value?currentLineData.value.pid:"root";//一级菜单pid,传'root'
|
||||||
|
params.hideChildren = formState.value.hideChildren;//是否隐藏子级
|
||||||
}
|
}
|
||||||
if(addOrEditType.value==1){//新增
|
if(addOrEditType.value==1){//新增
|
||||||
http.post(menuS.queryMenuPageAdd, params).then(() => {
|
http.post(menuS.queryMenuPageAdd, params).then(() => {
|
||||||
@@ -312,7 +313,9 @@
|
|||||||
menuCode:'',
|
menuCode:'',
|
||||||
type:'',
|
type:'',
|
||||||
menuJumpUrl:'',
|
menuJumpUrl:'',
|
||||||
menuRedirect:''
|
menuRedirect:'',
|
||||||
|
keepAlive:false,
|
||||||
|
hideChildren:false
|
||||||
};
|
};
|
||||||
}else if(type==2){//编辑
|
}else if(type==2){//编辑
|
||||||
drawerTitele.value = '编辑菜单';
|
drawerTitele.value = '编辑菜单';
|
||||||
|
@@ -1,6 +1,8 @@
|
|||||||
import type { App } from 'vue';
|
import type { App } from 'vue';
|
||||||
import { createPinia } from 'pinia';
|
import { createPinia } from 'pinia';
|
||||||
const store = createPinia();
|
const store = createPinia();
|
||||||
|
// import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
|
||||||
|
// store.use(piniaPluginPersistedstate)
|
||||||
|
|
||||||
export function setupStore(app: App<Element>) {
|
export function setupStore(app: App<Element>) {
|
||||||
app.use(store);
|
app.use(store);
|
||||||
|
@@ -135,4 +135,6 @@ export const useRouteStore = defineStore({
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
// //开启数据缓存
|
||||||
|
// persist:true,
|
||||||
});
|
});
|
||||||
|
@@ -79,6 +79,7 @@
|
|||||||
import { Cookies } from '/nerv-lib/util/cookie';
|
import { Cookies } from '/nerv-lib/util/cookie';
|
||||||
import { storeToRefs } from 'pinia';
|
import { storeToRefs } from 'pinia';
|
||||||
import { NsMessage } from '/nerv-lib/component';
|
import { NsMessage } from '/nerv-lib/component';
|
||||||
|
import { replyDynamRoutesPath } from '/nerv-lib/util/dynamicRoutesss';
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'UserLogin',
|
name: 'UserLogin',
|
||||||
@@ -194,12 +195,22 @@
|
|||||||
name: initRouterList.length === 0 ? 'error403' : res.data[0]['code'],
|
name: initRouterList.length === 0 ? 'error403' : res.data[0]['code'],
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
router.replace({ name: 'root' });
|
const sessionStoreRoute = sessionStorage.getItem("dynamicRouteList");
|
||||||
|
let getDynamicRouteList = sessionStoreRoute?JSON.parse(sessionStoreRoute):[];
|
||||||
|
if(getDynamicRouteList && getDynamicRouteList.lenght>0){
|
||||||
|
let addDynamicRoutes = replyDynamRoutesPath(getDynamicRouteList);
|
||||||
|
addDynamicRoutes.forEach(item => {
|
||||||
|
if (item.children && !item.component) {
|
||||||
|
item.component = () => import('/nerv-lib/saas/view/system/application.vue');//hx-ai-intelligent项目下的首页
|
||||||
|
}
|
||||||
|
router.addRoute(item);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
router.replace({ name: 'home' });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.log(err);
|
console.log(err);
|
||||||
|
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
25
lib/util/dynamicRoutesss.ts
Normal file
25
lib/util/dynamicRoutesss.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
//处理路由compontent路径
|
||||||
|
export const replyDynamRoutesPath = (data:any) => {
|
||||||
|
return data.map(item => {
|
||||||
|
if(item.children && item.children.length > 0){
|
||||||
|
item.children.map(itemChild => {
|
||||||
|
if(itemChild.component){
|
||||||
|
const modulePath0 = itemChild.component;
|
||||||
|
itemChild.component = () => new Function(`return import('/nerv-lib/saas/view/${modulePath0}')`)();
|
||||||
|
if(itemChild.children && itemChild.children.length > 0){
|
||||||
|
itemChild.children.map(itemChildChild => {
|
||||||
|
if(itemChildChild.component){
|
||||||
|
const modulePath1 = itemChildChild.component;
|
||||||
|
itemChildChild.component = () => new Function(`return import('/@/view/${modulePath1}')`)();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}else{
|
||||||
|
itemChild.component = () => new Function(`return import('/@/view/${modulePath0}')`)();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@@ -68,6 +68,7 @@
|
|||||||
"nanoid": "^4.0.2",
|
"nanoid": "^4.0.2",
|
||||||
"path-to-regexp": "^6.2.1",
|
"path-to-regexp": "^6.2.1",
|
||||||
"pinia": "^2.0.14",
|
"pinia": "^2.0.14",
|
||||||
|
"pinia-plugin-persistedstate": "^3.2.1",
|
||||||
"pnpm": "^8.7.6",
|
"pnpm": "^8.7.6",
|
||||||
"qrcode.vue": "^3.3.3",
|
"qrcode.vue": "^3.3.3",
|
||||||
"recorder-core": "^1.3.23122400",
|
"recorder-core": "^1.3.23122400",
|
||||||
|
Reference in New Issue
Block a user