From 78fd99c0be305d8ae68825638fc3e8f31ead95d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=BF=E5=B0=8F=E5=A4=A9?= <1638245306@qq.com> Date: Fri, 10 Feb 2023 23:19:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=8F=98=E5=8C=96:=20?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=9D=83=E9=99=90=E7=AE=A1=E6=8E=A7=E5=AE=8C?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/dvadmin/system/views/menu_button.py | 2 +- web/.env.development | 5 ++++- web/src/router/backEnd.ts | 3 +++ web/src/views/system/login/component/account.vue | 3 ++- web/src/views/system/menu/crud.tsx | 14 ++++++++++++-- 5 files changed, 22 insertions(+), 5 deletions(-) diff --git a/backend/dvadmin/system/views/menu_button.py b/backend/dvadmin/system/views/menu_button.py index 28f55e4..4cf17a6 100644 --- a/backend/dvadmin/system/views/menu_button.py +++ b/backend/dvadmin/system/views/menu_button.py @@ -72,7 +72,7 @@ class MenuButtonViewSet(CustomModelViewSet): is_superuser = request.user.is_superuser is_admin = request.user.role.values_list('admin', flat=True) if is_superuser or True in is_admin: - queryset = MenuButton.objects.values_list('menu_button__value',flat=True) + queryset = MenuButton.objects.values_list('value',flat=True) else: role_id = request.user.role.values_list('id', flat=True) queryset = RoleMenuButtonPermission.objects.filter(role__in=role_id).values_list('menu_button__value',flat=True).distinct() diff --git a/web/.env.development b/web/.env.development index 1a627b7..bd52088 100644 --- a/web/.env.development +++ b/web/.env.development @@ -2,4 +2,7 @@ ENV = 'development' # 本地环境接口地址 -VITE_API_URL = 'http://127.0.0.1:8000/' \ No newline at end of file +VITE_API_URL = 'http://127.0.0.1:8000/' + +# 是否启用按钮权限 +VITE_PM_ENABLED = true diff --git a/web/src/router/backEnd.ts b/web/src/router/backEnd.ts index f4f057c..f225125 100644 --- a/web/src/router/backEnd.ts +++ b/web/src/router/backEnd.ts @@ -11,6 +11,7 @@ import { useRoutesList } from '/@/stores/routesList'; import { useTagsViewRoutes } from '/@/stores/tagsViewRoutes'; import { useMenuApi } from '/@/api/menu/index'; import { handleMenu } from '../utils/menu'; +import {BtnPermissionStore} from "/@/plugin/permission/store.permission"; const menuApi = useMenuApi(); @@ -102,6 +103,8 @@ export async function setAddRoute() { * @returns 返回后端路由菜单数据 */ export function getBackEndControlRoutes() { + //获取所有的按钮权限 + BtnPermissionStore().getBtnPermissionStore(); return menuApi.getSystemMenu(); } diff --git a/web/src/views/system/login/component/account.vue b/web/src/views/system/login/component/account.vue index a953220..b89adad 100644 --- a/web/src/views/system/login/component/account.vue +++ b/web/src/views/system/login/component/account.vue @@ -74,6 +74,7 @@ import { NextLoading } from '/@/utils/loading'; import * as loginApi from '/@/views/system/login/api'; import { useUserInfo } from '/@/stores/userInfo'; import { DictionaryStore } from '/@/stores/dictionary'; +import {BtnPermissionStore} from "/@/plugin/permission/store.permission"; import { Md5 } from 'ts-md5'; export default defineComponent({ @@ -139,8 +140,8 @@ export default defineComponent({ const loginSuccess = () => { //登录成功获取用户信息,获取系统字典数据 getUserInfo(); + //获取所有字典 DictionaryStore().getSystemDictionarys(); - // 初始化登录成功时间问候语 let currentTimeInfo = currentTime.value; // 登录成功,跳到转首页 diff --git a/web/src/views/system/menu/crud.tsx b/web/src/views/system/menu/crud.tsx index f18be74..9ed0073 100644 --- a/web/src/views/system/menu/crud.tsx +++ b/web/src/views/system/menu/crud.tsx @@ -3,12 +3,14 @@ import { dict, PageQuery, AddReq, DelReq, EditReq, CrudExpose, CrudOptions, } fr import { dictionary } from "/@/utils/dictionary"; import iconSelector from '/@/components/iconSelector/index.vue' import {useCompute} from '@fast-crud/fast-crud' +import {inject} from 'vue' const {compute} = useCompute() interface CreateCrudOptionsTypes { crudOptions: CrudOptions; } export const createCrudOptions = function ({ crudExpose,menuButtonRef }: { crudExpose: CrudExpose,menuButtonRef:any }): CreateCrudOptionsTypes { + const hasPermissions = inject('$hasPermissions') //验证路由地址 const validateWebPath = (rule: string, value: string, callback: Function) => { const isLink = crudExpose.getFormData().is_link @@ -67,6 +69,13 @@ export const createCrudOptions = function ({ crudExpose,menuButtonRef }: { crudE load:loadContentMethod, treeProps:{children: 'children', hasChildren: 'hasChild'} }, + actionbar: { + buttons: { + add: { + show: hasPermissions('Menu:Create') + } + } + }, rowHandle: { buttons: { custom: { @@ -77,10 +86,11 @@ export const createCrudOptions = function ({ crudExpose,menuButtonRef }: { crudE content: "按钮配置" }, show:compute(({row}:any)=>{ - if (row.web_path && !row.is_link) { - return true + if (row.web_path && !row.is_link) { + return true && hasPermissions() } return false + }), click:(context:any):void => { const {row} = context