From 86a6c31b604a8f8b33f8da47e34c3db1e49be065 Mon Sep 17 00:00:00 2001 From: yujialong <479214531@qq.com> Date: Fri, 11 Mar 2022 18:07:49 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9D=83=E9=99=90=E6=B7=BB=E5=8A=A0=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E7=BA=A7=E5=88=AB=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/Sidebar.vue | 19 ++++++++--------- src/directive/auth/index.js | 27 +++++++++++++++++++++++++ src/directive/index.js | 12 +++++++++++ src/libs/auth/generateBtnPermission.js | 7 +++++-- src/libs/route/addRoutes.js | 5 +---- src/libs/route/generateRoutes.js | 2 +- src/main.js | 3 ++- src/utils/api.js | 5 +++-- src/views/course/Curriculum.vue | 13 ++++++------ src/views/course/contentSettings.vue | 20 +++++++++--------- src/views/customer/customer.vue | 14 ++++++------- src/views/data/Data.vue | 16 ++++++++++++++- src/views/data/Framework.vue | 18 ++++++++--------- src/views/data/Introduce.vue | 2 +- src/views/data/Product.vue | 12 +++++------ src/views/order/Order.vue | 12 +++++------ src/views/serve/Configure.vue | 6 +++--- src/views/serve/backstage/modelType.vue | 16 +++++++++++++-- src/views/system/index.vue | 24 +++++++++++----------- src/views/system/log.vue | 2 +- src/views/system/manageLog.vue | 8 ++++---- src/views/system/role.vue | 10 ++++----- src/views/user/User.vue | 12 +++++------ 23 files changed, 167 insertions(+), 98 deletions(-) create mode 100644 src/directive/auth/index.js create mode 100644 src/directive/index.js diff --git a/src/components/Sidebar.vue b/src/components/Sidebar.vue index 07b9de7..cd7e4fa 100644 --- a/src/components/Sidebar.vue +++ b/src/components/Sidebar.vue @@ -59,37 +59,37 @@ export default { menuList: [ { icon: 'el-icon-school', - index: 'customer', + index: '/customer', title: '客户管理' }, { icon: 'el-icon-user', - index: 'user', + index: '/user', title: '用户管理' }, { icon: 'el-icon-shopping-bag-2', - index: 'order', + index: '/order', title: '订单管理' }, { icon: 'el-icon-document-checked', - index: 'curriculum', + index: '/curriculum', title: '课程管理' }, { icon: 'el-icon-notebook-2', - index: 'data', + index: '/data', title: '数据管理' }, { icon: 'el-icon-office-building', - index: 'configure', + index: '/configure', title: '服务配置' }, { icon: 'el-icon-office-building', - index: 'system', + index: '/system', title: '系统配置' }, ], @@ -118,10 +118,11 @@ export default { }, initMenu() { if (Setting.dynamicRoute) { - const routes = this.routes + const routes = this.$store.state.routes + console.log("🚀 ~ file: Sidebar.vue ~ line 122 ~ initMenu ~ routes", routes) const menus = [] this.menuList.map(e => { - routes.find(n => n.name === e.index) && menus.push(e) + routes.find(n => n.path === e.index) && menus.push(e) }) this.menus = menus } else { diff --git a/src/directive/auth/index.js b/src/directive/auth/index.js new file mode 100644 index 0000000..a5ba3b1 --- /dev/null +++ b/src/directive/auth/index.js @@ -0,0 +1,27 @@ +/** + * @description 鉴权指令 + * 当传入的权限当前用户没有时,会移除该组件 + * 用例:text 或者:text + * */ +import store from '@/store' + +export default { + inserted (el, binding, vnode) { + let btnText = '' + // 如果有传值,就取传的值,否则,就取页面路由和按钮名字拼接起来 + if(binding.value){ + btnText = binding.value + }else{ + btnText = `${vnode.context.$route.path}:${el.innerText}` + } + const btnPermissions = store.state.btns + console.log("🚀 ~ file: index.js ~ line 18 ~ inserted ~ btnPermissions", btnPermissions, btnText) + if (btnText && btnPermissions && btnPermissions.length) { + const isPermission = btnPermissions.includes(btnText) + // 如果按钮集合里没有该权限,就把该按钮给去除 + if (!isPermission) { + el.parentNode && el.parentNode.removeChild(el) + } + } + } +} diff --git a/src/directive/index.js b/src/directive/index.js new file mode 100644 index 0000000..49d418c --- /dev/null +++ b/src/directive/index.js @@ -0,0 +1,12 @@ +/** + * 插件 + * */ + +import directiveAuth from './auth' + +export default { + async install (Vue) { + // 指令 + Vue.directive('auth', directiveAuth) + } +} \ No newline at end of file diff --git a/src/libs/auth/generateBtnPermission.js b/src/libs/auth/generateBtnPermission.js index 195f554..9433f81 100644 --- a/src/libs/auth/generateBtnPermission.js +++ b/src/libs/auth/generateBtnPermission.js @@ -8,14 +8,17 @@ export default function(data){ data.map(e => { e.children.map(n => { if(n.children.length){ - result.push(`${e.name}:${n.name}`) + result.push(`${e.path}:${n.name}`) n.children.map(j => { e.path ? result.push(`${e.path}:${n.name}:${j.name}`) : result.push(`${n.path}:${j.name}`) + j.children.map(k => { + e.path ? result.push(`${e.path}:${n.name}:${j.name}:${k.name}`) : result.push(`${n.path}:${j.name}:${k.name}`) + }) }) }else{ result.push(`${e.path}:${n.name}`) } }) }) - store.dispatch('auth/addBtnAuth',result) + store.commit('addBtnAuth', result) } diff --git a/src/libs/route/addRoutes.js b/src/libs/route/addRoutes.js index caf6e9e..63fddf1 100644 --- a/src/libs/route/addRoutes.js +++ b/src/libs/route/addRoutes.js @@ -1,5 +1,4 @@ import store from '@/store'; -import router from '@/router'; import generateBtnPermission from '../auth/generateBtnPermission'; const newRoutes = [] @@ -14,7 +13,6 @@ function createRoute(data){ if(e.path){ let meta = createMeta(e) newRoutes.push({ - name: e.path, path: e.path, meta }) @@ -27,6 +25,5 @@ function createRoute(data){ export default function(data,path){ generateBtnPermission(data) createRoute(data) - console.log('route', newRoutes) - // store.dispatch('addRoutes',newRoutes) + store.commit('addRoutes',newRoutes) } \ No newline at end of file diff --git a/src/libs/route/generateRoutes.js b/src/libs/route/generateRoutes.js index 638f846..02362a4 100644 --- a/src/libs/route/generateRoutes.js +++ b/src/libs/route/generateRoutes.js @@ -3,7 +3,7 @@ import router from '@/router'; export default function(){ setTimeout(() => { - let routes = store.state.auth.routes + let routes = store.state.routes routes.forEach(e => { if(e.path == '/'){ e.component = () => import('@/layouts/home/index.vue') diff --git a/src/main.js b/src/main.js index f51f298..af2eeec 100644 --- a/src/main.js +++ b/src/main.js @@ -14,6 +14,7 @@ import store from './store' import { systemStatus, systemTypeStatus, systemAttributionStatus, courseTypeStatus, hoursStatus, roleStatus, orderTypeFn, orderStatusFn, orderNatureFn, Percentage, removeByValue, isIE, encodeString, formatDate, downloadFile } from './utils/core'; import preventReClick from './utils/preventReClick' //防多次点击,重复提交 +import plugins from '@/directive'; Vue.prototype.api = api; @@ -41,7 +42,7 @@ Vue.prototype.downloadFile = downloadFile; Vue.config.productionTip = false; Vue.use(ElementUI, { size: 'small' }); - +Vue.use(plugins); new Vue({ router, diff --git a/src/utils/api.js b/src/utils/api.js index b95d153..0b47056 100644 --- a/src/utils/api.js +++ b/src/utils/api.js @@ -5,8 +5,8 @@ const host1 = 'http://192.168.31.137:9000' export default { - logins: `users/users/user/login`, //登录 - verification: `users/users/user/captcha`,// 验证码图片 + logins: `${host1}/users/users/user/login`, //登录 + verification: `${host1}/users/users/user/captcha`,// 验证码图片 bindPhoneOrEmail: `users/users/userAccount/bindPhoneOrEmail`,// 绑定手机 sendPhoneOrEmailCode: `users/users/userAccount/sendPhoneOrEmailCode`,// 手机验证码 @@ -110,6 +110,7 @@ export default { saveReferenceDemo: `nakadai/model/reference/demo/saveReferenceDemo`, referenceDemoList: `nakadai/model/reference/demo/referenceDemoList`, getAllModelList: `nakadai/model/reference/demo/getAllModelList`, + synchronizationMdel: `nakadai/model/reference/demo/synchronizationMdel`, deleteSourceModelCategory: `nakadai/model/category/deleteSourceModelCategory`, categorySave: `nakadai/model/category/save`, diff --git a/src/views/course/Curriculum.vue b/src/views/course/Curriculum.vue index aab3df3..860608b 100644 --- a/src/views/course/Curriculum.vue +++ b/src/views/course/Curriculum.vue @@ -72,8 +72,8 @@ 课程列表
- 新建课程 - 批量删除 + 新增课程 + 批量删除
+ @change="changeSwitch($event, scope.row)" + v-auth="'/curriculum:上下架'"> diff --git a/src/views/course/contentSettings.vue b/src/views/course/contentSettings.vue index b360446..7d58b63 100644 --- a/src/views/course/contentSettings.vue +++ b/src/views/course/contentSettings.vue @@ -12,8 +12,8 @@
内容设置