From 043265de0da38fcc727bcc60d7c88da4c3c3513f Mon Sep 17 00:00:00 2001 From: Your Name <123456> Date: 星期二, 28 六月 2022 18:50:14 +0800 Subject: [PATCH] '菜单' --- src/views/system/role/index.vue | 1 src/utils/request.ts | 8 src/router/frontEnd.ts | 2 src/router/backEnd.ts | 8 src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue | 13 + src/stores/userInfo.ts | 89 +++--- src/views/system/menu/index.vue | 156 ++++++----- src/stores/loginInfo.ts | 20 + src/views/doublePreventSystem/riskLevelManage/riskControlManage/index.vue | 13 + src/views/home/index.vue | 25 - src/stores/interface/index.ts | 11 src/views/doublePreventSystem/riskLevelManage/index.vue | 13 + src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue | 13 + src/views/login/component/account.vue | 11 src/router/index.ts | 1 src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue | 13 + src/views/system/menu/component/menuDialog.vue | 348 +++++++++++++------------- 17 files changed, 424 insertions(+), 321 deletions(-) diff --git a/src/router/backEnd.ts b/src/router/backEnd.ts index 6d7f365..5cb3d0d 100644 --- a/src/router/backEnd.ts +++ b/src/router/backEnd.ts @@ -29,8 +29,6 @@ export async function initBackEndControlRoutes() { if (window.nextLoading === undefined) NextLoading.start(); if (!Session.get('token')) return false; - useUserInfo().setUserInfos(); - // if(Session.get('ifMenu')) const res = await getBackEndControlRoutes(Session.get('projectId')); useRequestOldRoutes().setRequestOldRoutes(JSON.parse(JSON.stringify(res.data.data))); dynamicRoutes[0].children = await backEndComponent(res.data.data); @@ -67,9 +65,9 @@ export async function getBackEndControlRoutes(value : string) { - const stores = useUserInfo(pinia); - const { userInfos } = storeToRefs(stores); - const auth = userInfos.value.roles[0]; + // const stores = useUserInfo(pinia); + // const { userInfos } = storeToRefs(stores); + // const auth = userInfos.value.roles[0]; return menuApi.getMenuAdmin(value); } diff --git a/src/router/frontEnd.ts b/src/router/frontEnd.ts index af8432b..f672db5 100644 --- a/src/router/frontEnd.ts +++ b/src/router/frontEnd.ts @@ -13,7 +13,7 @@ export async function initFrontEndControlRoutes() { if (window.nextLoading === undefined) NextLoading.start(); if (!Session.get('token')) return false; - useUserInfo(pinia).setUserInfos(); + // useUserInfo(pinia).setUserInfos(); await setAddRoute(); await setFilterMenuAndCacheTagsViewRoutes(); } diff --git a/src/router/index.ts b/src/router/index.ts index c789ab0..112fa0f 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -10,6 +10,7 @@ import { staticRoutes } from '/@/router/route'; import { initFrontEndControlRoutes } from '/@/router/frontEnd'; import { initBackEndControlRoutes } from '/@/router/backEnd'; +import {useUserInfo} from "/@/stores/userInfo"; diff --git a/src/stores/interface/index.ts b/src/stores/interface/index.ts index 994b9a5..25c6fd4 100644 --- a/src/stores/interface/index.ts +++ b/src/stores/interface/index.ts @@ -10,7 +10,8 @@ roles: string[]; time: number; userName: string; - sign:string; + uid:string; + projectId:string; } export interface UserInfosStates { userInfos: UserInfosState; @@ -41,6 +42,14 @@ projectId:string, } +export interface loginInfoState { + loginUser:{ + projectId:string, + token:string, + uid:string, + } +} + // 布局配置 export interface ThemeConfigState { isDrawer: boolean; diff --git a/src/stores/loginInfo.ts b/src/stores/loginInfo.ts new file mode 100644 index 0000000..4cc51ce --- /dev/null +++ b/src/stores/loginInfo.ts @@ -0,0 +1,20 @@ +import { defineStore } from 'pinia'; +import { loginInfoState } from './interface'; + +/** + * 路由列表 + * @methods setRoutesList 设置路由数据 + * @methods setColumnsMenuHover 设置分栏布局菜单鼠标移入 boolean + * @methods setColumnsNavHover 设置分栏布局最左侧导航鼠标移入 boolean + */ +export const useLoginInfo = defineStore('loginInfo', { + state: (): loginInfoState => ({ + loginUser:{ + projectId:'', + token:'', + uid:'', + } + }), + actions: { + }, +}); diff --git a/src/stores/userInfo.ts b/src/stores/userInfo.ts index 97176a8..f04e50b 100644 --- a/src/stores/userInfo.ts +++ b/src/stores/userInfo.ts @@ -15,51 +15,56 @@ time: 0, roles: [], authBtnList: [], - sign:'', + uid:'', + projectId:'' }, }), actions: { - async setUserInfos() { - const userName = Cookies.get('userName'); - // 模拟数据 - let defaultRoles: Array<string> = []; - let defaultAuthBtnList: Array<string> = []; - // admin 页面权限标识,对应路由 meta.roles,用于控制路由的显示/隐藏 - let adminRoles: Array<string> = ['admin']; - // admin 按钮权限标识 - let adminAuthBtnList: Array<string> = ['btn.add', 'btn.del', 'btn.edit', 'btn.link']; - // test 页面权限标识,对应路由 meta.roles,用于控制路由的显示/隐藏 - let testRoles: Array<string> = ['common']; - // test 按钮权限标识 - let testAuthBtnList: Array<string> = ['btn.add', 'btn.link']; - // 不同用户模拟不同的用户权限 - if (userName === 'admin') { - defaultRoles = adminRoles; - defaultAuthBtnList = adminAuthBtnList; - } else { - defaultRoles = testRoles; - defaultAuthBtnList = testAuthBtnList; - } - // 用户信息模拟数据 - const userInfos = { - userName: userName, - photo: - userName === 'admin' - ? 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1813762643,1914315241&fm=26&gp=0.jpg' - : 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=317673774,2961727727&fm=26&gp=0.jpg', - time: new Date().getTime(), - roles: defaultRoles, - authBtnList: defaultAuthBtnList, - sign:'', - }; - // 存储用户信息到浏览器缓存 - Session.set('userInfo', userInfos); - - if (Session.get('userInfo')) { - this.userInfos = Session.get('userInfo'); - } else { - this.userInfos = userInfos; - } + async setUserInfos(value: any) { + this.userInfos.userName = value.username + this.userInfos.uid = value.id + this.userInfos.roles = value.role + // const userName = Cookies.get('userName'); + // // 模拟数据 + // let defaultRoles: Array<string> = []; + // let defaultAuthBtnList: Array<string> = []; + // // admin 页面权限标识,对应路由 meta.roles,用于控制路由的显示/隐藏 + // let adminRoles: Array<string> = ['admin']; + // // admin 按钮权限标识 + // let adminAuthBtnList: Array<string> = ['btn.add', 'btn.del', 'btn.edit', 'btn.link']; + // // test 页面权限标识,对应路由 meta.roles,用于控制路由的显示/隐藏 + // let testRoles: Array<string> = ['common']; + // // test 按钮权限标识 + // let testAuthBtnList: Array<string> = ['btn.add', 'btn.link']; + // // 不同用户模拟不同的用户权限 + // if (userName === 'admin') { + // defaultRoles = adminRoles; + // defaultAuthBtnList = adminAuthBtnList; + // } else { + // defaultRoles = testRoles; + // defaultAuthBtnList = testAuthBtnList; + // } + // // 用户信息模拟数据 + // const userInfos = { + // userName: userName, + // photo: + // userName === 'admin' + // ? 'https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1813762643,1914315241&fm=26&gp=0.jpg' + // : 'https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=317673774,2961727727&fm=26&gp=0.jpg', + // time: new Date().getTime(), + // roles: defaultRoles, + // authBtnList: defaultAuthBtnList, + // uid:'', + // projectId:'', + // }; + // // 存储用户信息到浏览器缓存 + // Session.set('userInfo', userInfos); + // + // if (Session.get('userInfo')) { + // this.userInfos = Session.get('userInfo'); + // } else { + // this.userInfos = userInfos; + // } }, }, }); diff --git a/src/utils/request.ts b/src/utils/request.ts index 146e09b..aeac64a 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -1,6 +1,8 @@ import axios from 'axios'; import { ElMessage, ElMessageBox } from 'element-plus'; import { Session } from '/@/utils/storage'; +import {useUserInfo} from "/@/stores/userInfo"; +import {storeToRefs} from "pinia"; // 配置新建一个 axios 实例 const service = axios.create({ @@ -13,8 +15,10 @@ (config) => { // 在发送请求之前做些什么 token if (Session.get('token')) { + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); (<any>config.headers).common['Authorization'] = `${Session.get('token')}`; - (<any>config.headers).common['uid'] = `${Session.get('sign')}`; + (<any>config.headers).common['uid'] = `${Session.get('uid')}`; } return config; }, @@ -28,7 +32,7 @@ (response) => { // 对响应数据做点什么 - if(response.data.code && (response.data.code ==='A0215' || response.data.code === 'A0214')){ + if(response.data.code && (response.data.code ==='A0215' || response.data.code === 'A0214' || response.data.code === 'A0213')){ Session.clear() window.location.href = '/' return Promise.reject(response) diff --git a/src/views/doublePreventSystem/riskLevelManage/index.vue b/src/views/doublePreventSystem/riskLevelManage/index.vue new file mode 100644 index 0000000..ea834ff --- /dev/null +++ b/src/views/doublePreventSystem/riskLevelManage/index.vue @@ -0,0 +1,13 @@ +<template> + <router-view></router-view> +</template> + +<script> + export default { + name: "index" + } +</script> + +<style scoped> + +</style> diff --git a/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue b/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue new file mode 100644 index 0000000..b562500 --- /dev/null +++ b/src/views/doublePreventSystem/riskLevelManage/productionDevice/index.vue @@ -0,0 +1,13 @@ +<template> + <div>1</div> +</template> + +<script> + export default { + name: "index" + } +</script> + +<style scoped> + +</style> diff --git a/src/views/doublePreventSystem/riskLevelManage/riskControlManage/index.vue b/src/views/doublePreventSystem/riskLevelManage/riskControlManage/index.vue new file mode 100644 index 0000000..d129686 --- /dev/null +++ b/src/views/doublePreventSystem/riskLevelManage/riskControlManage/index.vue @@ -0,0 +1,13 @@ +<template> + <div>4</div> +</template> + +<script> + export default { + name: "index" + } +</script> + +<style scoped> + +</style> diff --git a/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue b/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue new file mode 100644 index 0000000..f665f5a --- /dev/null +++ b/src/views/doublePreventSystem/riskLevelManage/safetyRiskAnalyseUnit/index.vue @@ -0,0 +1,13 @@ +<template> + <div>2</div> +</template> + +<script> + export default { + name: "index" + } +</script> + +<style scoped> + +</style> diff --git a/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue b/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue new file mode 100644 index 0000000..81e1b9c --- /dev/null +++ b/src/views/doublePreventSystem/riskLevelManage/safetyRiskEvent/index.vue @@ -0,0 +1,13 @@ +<template> + <div>3</div> +</template> + +<script> + export default { + name: "index" + } +</script> + +<style scoped> + +</style> diff --git a/src/views/home/index.vue b/src/views/home/index.vue index 45dd9ce..563a41f 100644 --- a/src/views/home/index.vue +++ b/src/views/home/index.vue @@ -50,16 +50,11 @@ </template> <script lang="ts"> -import { toRefs, reactive, defineComponent, onMounted, ref, watch, nextTick, onActivated } from 'vue'; -import * as echarts from 'echarts'; +import { toRefs, reactive, defineComponent, } from 'vue'; import { storeToRefs } from 'pinia'; -import { useThemeConfig } from '/@/stores/themeConfig'; -import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes'; import { initBackEndControlRoutes } from '/@/router/backEnd'; -import {Session} from "/@/utils/storage"; -import {useRoutesList} from "/@/stores/routesList"; -import pinia from "/@/stores"; - +import {useUserInfo} from "/@/stores/userInfo"; +import { Session } from '/@/utils/storage'; let global: any = { homeChartOne: null, homeChartTwo: null, @@ -68,7 +63,6 @@ }; interface stateType { - projectId:string, homeOne: Array <type> } interface type { @@ -78,18 +72,15 @@ export default defineComponent({ name: 'home', setup() { - const storesRoutesList = useRoutesList(pinia); - const { routesList } = storeToRefs(storesRoutesList); - // const storesTagsViewRoutes = useTagsViewRoutes(); - // const storesThemeConfig = useThemeConfig(); + const userInfo = useUserInfo() + const { userInfos } = storeToRefs(userInfo); const state = reactive<stateType>({ - projectId:'', - homeOne:[{id:1,name:'基础数据权限管理系统'},{id:2,name:'系统1'},{id:3,name:'系统2'},{id:4,name:'系统3'},{id:5,name:'系统4'}], + homeOne:[{id:1,name:'基础数据权限管理系统'},{id:2,name:'双重预防系统'},{id:3,name:'系统2'},{id:4,name:'系统3'},{id:5,name:'系统4'}], }); // 折线图 const renderMenu = async (value: string) => { - state.projectId = value - Session.set('projectId',value) + Session.set('projectId',value) + userInfos.value.projectId = value await initBackEndControlRoutes(); }; return { diff --git a/src/views/login/component/account.vue b/src/views/login/component/account.vue index 29b40dd..7dea861 100644 --- a/src/views/login/component/account.vue +++ b/src/views/login/component/account.vue @@ -76,9 +76,6 @@ setup() { const { t } = useI18n(); const userInfo = useUserInfo() - const { userInfos } = storeToRefs(userInfo); - const storesThemeConfig = useThemeConfig(); - const { themeConfig } = storeToRefs(storesThemeConfig); const route = useRoute(); const router = useRouter(); const state = reactive({ @@ -101,11 +98,11 @@ // 存储 token 到浏览器缓存 let res = await useLoginApi().signIn(state.ruleForm) if(res.data.code === '200'){ - Session.set('ifMenu',false) - Session.set('projectId','') + userInfo.setUserInfos(res.data.data) Session.set('token', res.data.data.accessToken); - Session.set('sign',res.data.data.id) - await initFrontEndControlRoutes(); + Session.set('projectId',''); + Session.set('uid',res.data.data.id); + await initBackEndControlRoutes(); signInSuccess(); }else{ state.loading.signIn = false diff --git a/src/views/system/menu/component/menuDialog.vue b/src/views/system/menu/component/menuDialog.vue index 61dfd84..500a948 100644 --- a/src/views/system/menu/component/menuDialog.vue +++ b/src/views/system/menu/component/menuDialog.vue @@ -6,12 +6,12 @@ <el-col :xs="24" :sm="24" :md="24" :lg="24" :xl="24" class="mb20"> <el-form-item label="上级菜单"> <el-cascader - :options="menuData" - :props="{ checkStrictly: true, value: 'id', label: 'title' }" - placeholder="请选择上级菜单" - clearable - class="w100" - v-model="ruleForm.menuSuperior" + :options="menuData" + :props="{ checkStrictly: true, value: 'id', label: 'title' }" + placeholder="请选择上级菜单" + clearable + class="w100" + v-model="ruleForm.menuSuperior" > </el-cascader> </el-form-item> @@ -56,12 +56,12 @@ </el-col> <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12" class="mb20"> <el-form-item label="项目名"> - <el-select v-model="ruleForm.projectId" controls-position="right" placeholder="请输入排序" class="w100"> + <el-select @change="handelMenu" v-model="ruleForm.projectId" controls-position="right" placeholder="请输入排序" class="w100"> <el-option - v-for="item in projectList" - :key="item.key" - :value="item.id" - :label="item.name" + v-for="item in projectList" + :key="item.key" + :value="item.id" + :label="item.name" > </el-option> </el-select> @@ -93,179 +93,175 @@ </template> <script lang="ts"> -import { reactive, toRefs, onMounted, defineComponent } from 'vue'; -import { storeToRefs } from 'pinia'; -import { useRoutesList } from '/@/stores/routesList'; -import { i18n } from '/@/i18n/index'; -import IconSelector from '/@/components/iconSelector/index.vue'; -import { useMenuApi } from '/@/api/menu/index' -import { ElMessageBox, ElMessage } from 'element-plus'; -import {Session} from "/@/utils/storage"; -// import { setBackEndControlRefreshRoutes } from "/@/router/backEnd"; + import { reactive, toRefs, onMounted, defineComponent } from 'vue'; + import { storeToRefs } from 'pinia'; + import { useRoutesList } from '/@/stores/routesList'; + import { i18n } from '/@/i18n/index'; + import IconSelector from '/@/components/iconSelector/index.vue'; + import { useMenuApi } from '/@/api/menu/index' + import { ElMessageBox, ElMessage } from 'element-plus'; + import {Session} from "/@/utils/storage"; + // import { setBackEndControlRefreshRoutes } from "/@/router/backEnd"; -export default defineComponent({ - name: 'systemAddMenu', - components: { IconSelector }, - setup(props,context) { - const stores = useRoutesList(); - const { routesList } = storeToRefs(stores); - const state = reactive({ - isShowDialog: false, - title:'', - buttonName:'', - // 参数请参考 `/src/router/route.ts` 中的 `dynamicRoutes` 路由菜单格式 - ruleForm: { - projectId:'', - parentId:0, - menuSuperior: [], // 上级菜单 - menuType: 'menu', // 菜单类型 - name: '', // 路由名称 - component: '', // 组件路径 - priority: 0, // 菜单排序 - path: '', // 路由路径 - redirect: '', // 路由重定向,有子集 children 时 - meta: { - title: '', // 菜单名称 - icon: '', // 菜单图标 - isHide: false, // 是否隐藏 - isKeepAlive: true, // 是否缓存 - isAffix: false, // 是否固定 - isLink: '', // 外链/内嵌时链接地址(http:xxx.com),开启外链条件,`1、isLink: 链接地址不为空` - isIframe: false, // 是否内嵌,开启条件,`1、isIframe:true 2、isLink:链接地址不为空` - roles: '', // 权限标识,取角色管理 - }, - btnPower: '', // 菜单类型为按钮时,权限标识 - }, - menuData: [], // 上级菜单数据 - projectList:[ - {id:'1',name:'基础数据权限管理系统',key:0}, - {id:'2',name:'系统1',key:1}, - {id:'3',name:'系统2',key:2}, - {id:'4',name:'系统3',key:3}, - {id:'5',name:'系统4',key:4}, - {id:'6',name:'应急管理系统',key:5}, - {id:'7',name:'目标责任管理系统',key:6}, - {id:'8',name:'事故管理系统',key:7}, - {id:'9',name:'设备综合管控系统',key:8}, - ], - }); - // 获取 vuex 中的路由 - const getMenuList = (routes: any) => { - const arr: any = []; - routes.map((val: any) => { - val['title'] = val.meta.title; - val['id'] = val.id - arr.push(val); - if (val.children) getMenuList(val.children); - }); - return arr; - }; - // 打开弹窗 - const openDialog = (type:string,value:any) => { - state.isShowDialog = true; - if(type === '新增菜单'){ - state.buttonName = '新增' - state.title = '新增菜单' - state.ruleForm = { + export default defineComponent({ + name: 'systemAddMenu', + components: { IconSelector }, + setup(props,context) { + const stores = useRoutesList(); + const { routesList } = storeToRefs(stores); + const state = reactive({ + isShowDialog: false, + title:'', + buttonName:'', + // 参数请参考 `/src/router/route.ts` 中的 `dynamicRoutes` 路由菜单格式 + ruleForm: { projectId:'', parentId:0, - menuSuperior: [], - menuType: 'menu', - name: '', - component: '', - priority: 0, - path: '', - redirect: '', + menuSuperior: [], // 上级菜单 + menuType: 'menu', // 菜单类型 + name: '', // 路由名称 + component: '', // 组件路径 + priority: 0, // 菜单排序 + path: '', // 路由路径 + redirect: '', // 路由重定向,有子集 children 时 meta: { - title: '', - icon: '', - isHide: false, - isKeepAlive: true, - isAffix: false, - isLink: '', - isIframe: false, - roles: '', + title: '', // 菜单名称 + icon: '', // 菜单图标 + isHide: false, // 是否隐藏 + isKeepAlive: true, // 是否缓存 + isAffix: false, // 是否固定 + isLink: '', // 外链/内嵌时链接地址(http:xxx.com),开启外链条件,`1、isLink: 链接地址不为空` + isIframe: false, // 是否内嵌,开启条件,`1、isIframe:true 2、isLink:链接地址不为空` + roles: '', // 权限标识,取角色管理 }, - btnPower: '', - } - }else{ - state.buttonName = '修改' - state.title = '修改菜单' - state.ruleForm = JSON.parse(JSON.stringify(value)) - } - }; - // 关闭弹窗 - const closeDialog = () => { - state.isShowDialog = false; - }; - // 是否内嵌下拉改变 - // const onSelectIframeChange = () => { - // if (state.ruleForm.meta.isIframe) state.ruleForm.isLink = true; - // else state.ruleForm.isLink = false; - // }; - // 取消 - const onCancel = () => { - closeDialog(); - }; - // 新增 - const onSubmit = async () => { - if(state.ruleForm.menuSuperior && state.ruleForm.menuSuperior !== []){ - let menuId = JSON.parse(JSON.stringify(state.ruleForm.menuSuperior)) - state.ruleForm.parentId = menuId[menuId.length - 1] - } - if(state.title === '新增菜单'){ - let res = await useMenuApi().addMenu(state.ruleForm) - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'菜单新增成功', - duration:2000 - }) - closeDialog(); - context.emit('getMenuList') + btnPower: '', // 菜单类型为按钮时,权限标识 + }, + menuData: [], // 上级菜单数据 + projectList:[ + ], + }); + // 获取 vuex 中的路由 + const getMenuList = (routes: any) => { + const arr: any = []; + routes.map((val: any) => { + val['title'] = val.meta.title; + val['id'] = val.id + arr.push(val); + if (val.children) getMenuList(val.children); + }); + return arr; + }; + // 打开弹窗 + const openDialog = (type:string,value:any,projectList: any,projectId:string) => { + state.projectList = JSON.parse(JSON.stringify(projectList)) + state.isShowDialog = true; + if(type === '新增'){ + state.buttonName = '新增' + state.title = '新增菜单' + state.ruleForm = { + projectId:projectId, + parentId:0, + menuSuperior: [], + menuType: 'menu', + name: '', + component: '', + priority: 0, + path: '', + redirect: '', + meta: { + title: '', + icon: '', + isHide: false, + isKeepAlive: true, + isAffix: false, + isLink: '', + isIframe: false, + roles: '', + }, + btnPower: '', + } }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) + state.buttonName = '修改' + state.title = '修改菜单' + state.ruleForm = JSON.parse(JSON.stringify(value)) + state.ruleForm.projectId = projectId.toString() } - }else{ - let res = await useMenuApi().modMenu(state.ruleForm) - if(res.data.code === '200'){ - ElMessage({ - type:'success', - message:'菜单修改成功', - duration:2000 - }) - closeDialog(); - context.emit('getMenuList') + handelMenu() + }; + // 关闭弹窗 + const closeDialog = () => { + state.isShowDialog = false; + }; + // 是否内嵌下拉改变 + // const onSelectIframeChange = () => { + // if (state.ruleForm.meta.isIframe) state.ruleForm.isLink = true; + // else state.ruleForm.isLink = false; + // }; + // 取消 + const onCancel = () => { + closeDialog(); + }; + // 新增 + const onSubmit = async () => { + if(state.ruleForm.menuSuperior && state.ruleForm.menuSuperior !== []){ + let menuId = JSON.parse(JSON.stringify(state.ruleForm.menuSuperior)) + state.ruleForm.parentId = menuId[menuId.length - 1] + } + if(state.title === '新增菜单'){ + let res = await useMenuApi().addMenu(state.ruleForm) + if(res.data.code === '200'){ + ElMessage({ + type:'success', + message:'菜单新增成功', + duration:2000 + }) + closeDialog(); + context.emit('getMenuList') + }else{ + ElMessage({ + type:'warning', + message:res.data.msg + }) + } }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) + let res = await useMenuApi().modMenu(state.ruleForm) + if(res.data.code === '200'){ + ElMessage({ + type:'success', + message:'菜单修改成功', + duration:2000 + }) + closeDialog(); + context.emit('getMenuList') + }else{ + ElMessage({ + type:'warning', + message:res.data.msg + }) + } } + + // closeDialog(); // 关闭弹窗 + // setBackEndControlRefreshRoutes() // 刷新菜单,未进行后端接口测试 + }; + + const handelMenu = async () => { + let res = await useMenuApi().getMenuAdmin(state.ruleForm.projectId) + state.menuData = JSON.parse(JSON.stringify(getMenuList(res.data.data))) } - - // closeDialog(); // 关闭弹窗 - // setBackEndControlRefreshRoutes() // 刷新菜单,未进行后端接口测试 - }; - - const show = () => { - console.log(JSON.parse(JSON.stringify(state.ruleForm.menuSuperior))); - } - // 页面加载时 - onMounted(async () => { - let res = await useMenuApi().getMenuAdmin(Session.get('projectId')) - state.menuData = JSON.parse(JSON.stringify(getMenuList(res.data.data))) - }); - return { - openDialog, - closeDialog, - onCancel, - onSubmit, - ...toRefs(state), - }; - }, -}); + // 页面加载时 + onMounted(async () => { + // let res = await useMenuApi().getMenuAdmin(Session.get('projectId')) + // state.menuData = JSON.parse(JSON.stringify(getMenuList(res.data.data))) + }); + return { + openDialog, + closeDialog, + onCancel, + onSubmit, + handelMenu, + ...toRefs(state), + }; + }, + }); </script> diff --git a/src/views/system/menu/index.vue b/src/views/system/menu/index.vue index 2197f6a..46b65b0 100644 --- a/src/views/system/menu/index.vue +++ b/src/views/system/menu/index.vue @@ -2,8 +2,16 @@ <div class="system-menu-container"> <el-card shadow="hover"> <div class="system-menu-search mb15"> - <el-input size="default" placeholder="请输入菜单名称" style="max-width: 180px"> </el-input> - <el-button size="default" type="primary" class="ml10"> + <el-select size="default" v-model="projectId" placeholder="请选择项目名称" style="max-width: 180px" @change="getMenuList()"> + <el-option + v-for="item in projectList" + :key="item.key" + :value="item.id" + :label="item.name" + > + </el-option> + </el-select> + <el-button size="default" type="primary" class="ml10" @click="getMenuList"> <el-icon> <ele-Search /> </el-icon> @@ -48,7 +56,7 @@ <template #default="scope"> <el-button size="small" text type="primary" @click="onOpenMenuDialog('新增')">新增</el-button> <el-button size="small" text type="primary" @click="onOpenMenuDialog('修改',scope.row)">修改</el-button> - <el-button size="small" text type="primary" @click="onTabelRowDel(scope.row)">删除</el-button> +<!-- <el-button size="small" text type="primary" @click="onTabelRowDel(scope.row)">删除</el-button>--> </template> </el-table-column> </el-table> @@ -58,71 +66,81 @@ </template> <script lang="ts"> -import { ref, toRefs, reactive, computed, onMounted, defineComponent } from 'vue'; -import { RouteRecordRaw } from 'vue-router'; -import { ElMessageBox, ElMessage } from 'element-plus'; -import { storeToRefs } from 'pinia'; -import { useRoutesList } from '/@/stores/routesList'; -import menuDialog from '/@/views/system/menu/component/menuDialog.vue'; -import {useMenuApi} from "/@/api/menu"; -import {Session} from "/@/utils/storage"; -import pinia from "/@/stores"; -import {dynamicRoutes} from "/@/router/route"; + import { ref, toRefs, reactive, computed, onMounted, defineComponent } from 'vue'; + import { RouteRecordRaw } from 'vue-router'; + import { ElMessageBox, ElMessage } from 'element-plus'; + import { storeToRefs } from 'pinia'; + import { useRoutesList } from '/@/stores/routesList'; + import menuDialog from '/@/views/system/menu/component/menuDialog.vue'; + import {useMenuApi} from "/@/api/menu"; + import {Session} from "/@/utils/storage"; + import pinia from "/@/stores"; + import {dynamicRoutes} from "/@/router/route"; + import {useUserInfo} from "/@/stores/userInfo"; -export default defineComponent({ - name: 'systemMenu', - components: { menuDialog }, - setup() { - const stores = useRoutesList(); - const { routesList } = storeToRefs(stores); - const menuDialog = ref(); - const state = reactive({ - menuData:[], - }); - // 获取 vuex 中的路由 - const menuTableData = computed(() => { - return routesList.value; - }); - // 打开新增菜单弹窗 - const onOpenMenuDialog = (type: string,value: any) => { - debugger - menuDialog.value.openDialog(type,value); - }; - // 打开编辑菜单弹窗 - // 删除当前行 - const onTabelRowDel = (row: RouteRecordRaw) => { - ElMessageBox.confirm(`此操作将永久删除路由:${row.path}, 是否继续?`, '提示', { - confirmButtonText: '删除', - cancelButtonText: '取消', - type: 'warning', - }).then(() => { - ElMessage.success('删除成功'); - }).catch(() => {}); - }; - const getMenuList = async () => { - let res = await useMenuApi().getMenuAdmin(Session.get('projectId')) - if(res.data.code === '200'){ - // state.menuData = res.data.data - const storesRoutesList = useRoutesList(pinia); - storesRoutesList.setRoutesList(res.data.data); - }else{ - ElMessage({ - type:'warning', - message:res.data.msg - }) - } - }; - onMounted( () => { - getMenuList() - }); - return { - getMenuList, - menuDialog, - onOpenMenuDialog, - menuTableData, - onTabelRowDel, - ...toRefs(state), - }; - }, -}); + export default defineComponent({ + name: 'systemMenu', + components: { menuDialog }, + setup() { + const menuDialog = ref(); + const state = reactive({ + projectId:'1', + menuData:[], + menuTableData:[], + projectList:[ + {id:'1',name:'基础数据权限管理系统',key:0}, + {id:'2',name:'双重预防系统',key:1}, + {id:'3',name:'系统2',key:2}, + {id:'4',name:'系统3',key:3}, + {id:'5',name:'系统4',key:4}, + {id:'6',name:'应急管理系统',key:5}, + {id:'7',name:'目标责任管理系统',key:6}, + {id:'8',name:'事故管理系统',key:7}, + {id:'9',name:'设备综合管控系统',key:8}, + ], + }); + // // 获取 vuex 中的路由 + // const menuTableData = computed(() => { + // return routesList.value; + // }); + // 打开新增菜单弹窗 + const onOpenMenuDialog = (type: string,value: any) => { + menuDialog.value.openDialog(type,value,state.projectList,state.projectId); + }; + // 打开编辑菜单弹窗 + // 删除当前行 + const onTabelRowDel = (row: RouteRecordRaw) => { + ElMessageBox.confirm(`此操作将永久删除路由:${row.path}, 是否继续?`, '提示', { + confirmButtonText: '删除', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + ElMessage.success('删除成功'); + }).catch(() => {}); + }; + const getMenuList = async () => { + let res = await useMenuApi().getMenuAdmin(state.projectId) + if(res.data.code === '200'){ + state.menuTableData = res.data.data + // const storesRoutesList = useRoutesList(pinia); + // storesRoutesList.setRoutesList(res.data.data); + }else{ + ElMessage({ + type:'warning', + message:res.data.msg + }) + } + }; + onMounted( () => { + getMenuList() + }); + return { + getMenuList, + menuDialog, + onOpenMenuDialog, + onTabelRowDel, + ...toRefs(state), + }; + }, + }); </script> diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue index 7835197..93ec4b2 100644 --- a/src/views/system/role/index.vue +++ b/src/views/system/role/index.vue @@ -136,7 +136,6 @@ .catch(() => {}); }; const handleSearch = () => { - debugger initTableData() } // 分页改变 -- Gitblit v1.9.2