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