From c2b0c3f25baa8bf8d5ff7cd2e35350096e179f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=B0=8F=E6=B6=9B?= <1537080775@qq.com> Date: Fri, 28 Jun 2024 23:35:05 +0800 Subject: [PATCH 1/2] =?UTF-8?q?feat(role=5Fmenu=5F20240628):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9D=83=E9=99=90=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复无法保存菜单授权bug - 列权限增加禁用状态的逻辑判断 --- .../views/role_menu_button_permission.py | 41 ++++++++++-------- .../components/PermissionComNew/index.vue | 39 +++++++++-------- .../role/components/PermissionComNew/types.ts | 43 ++++++++----------- 3 files changed, 62 insertions(+), 61 deletions(-) diff --git a/backend/dvadmin/system/views/role_menu_button_permission.py b/backend/dvadmin/system/views/role_menu_button_permission.py index 94012541..9ab1a95e 100644 --- a/backend/dvadmin/system/views/role_menu_button_permission.py +++ b/backend/dvadmin/system/views/role_menu_button_permission.py @@ -209,23 +209,24 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet): menu_list = RoleMenuPermission.objects.filter(role__in=role_id_list).values_list('menu__id', flat=True) # 当前角色已授权的菜单 - menu_queryset = Menu.objects.filter(id__in=menu_list).prefetch_related('menuPermission').prefetch_related('menufield_set') + menu_queryset = Menu.objects.filter(id__in=menu_list).prefetch_related('menuPermission').prefetch_related( + 'menufield_set') result = [] for menu_item in menu_queryset: isCheck = RoleMenuPermission.objects.filter( - menu_id=menu_item.id, - role_id=current_role - ).exists() + menu_id=menu_item.id, + role_id=current_role + ).exists() dicts = { 'name': menu_item.name, 'id': menu_item.id, 'parent': menu_item.parent.id if menu_item.parent else None, - 'isCheck':isCheck, + 'isCheck': isCheck, 'btns': [], 'columns': [] } for mb_item in menu_item.menuPermission.all(): - rolemenubuttonpermission_queryset =RoleMenuButtonPermission.objects.filter( + rolemenubuttonpermission_queryset = RoleMenuButtonPermission.objects.filter( menu_button_id=mb_item.id, role_id=current_role ).first() @@ -240,22 +241,27 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet): 'isCheck': bool(rolemenubuttonpermission_queryset), } ) + for column_item in menu_item.menufield_set.all(): fieldpermission_queryset = column_item.menu_field.filter(role_id=current_role).first() + query = fieldpermission_queryset.is_query if fieldpermission_queryset else None + create = fieldpermission_queryset.is_create if fieldpermission_queryset else None + update = fieldpermission_queryset.is_update if fieldpermission_queryset else None dicts['columns'].append({ - 'id':column_item.id, - 'field_name':column_item.field_name, - 'title':column_item.title, - 'is_query':fieldpermission_queryset.is_query, - 'is_create':fieldpermission_queryset.is_create, - 'is_update':fieldpermission_queryset.is_update - }) + 'id': column_item.id, + 'field_name': column_item.field_name, + 'title': column_item.title, + 'is_query': query, + 'is_create': create, + 'is_update': update, + 'query_disabled': False if is_superuser else not query, + 'create_disabled': False if is_superuser else not create, + 'update_disabled': False if is_superuser else not update, + }) + print(dicts['columns']) result.append(dicts) return DetailResponse(data=result) - - - @action(methods=['PUT'], detail=True, permission_classes=[IsAuthenticated]) def set_role_premission(self, request, pk): """ @@ -268,7 +274,7 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet): RoleMenuPermission.objects.filter(role=pk).delete() RoleMenuButtonPermission.objects.filter(role=pk).delete() for item in body: - for menu in item["menus"]: + for menu in item["children"]: if menu.get('isCheck'): menu_parent = Menu.get_all_parent(menu.get('id')) role_menu_permission_list = [] @@ -283,6 +289,7 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet): data_range=data_range) instance.dept.set(btn.get('dept', [])) for col in menu.get('columns'): + print(col) FieldPermission.objects.update_or_create(role_id=pk, field_id=col.get('id'), defaults={ 'is_query': col.get('is_query'), diff --git a/web/src/views/system/role/components/PermissionComNew/index.vue b/web/src/views/system/role/components/PermissionComNew/index.vue index 7c5f681d..c90c3f1f 100644 --- a/web/src/views/system/role/components/PermissionComNew/index.vue +++ b/web/src/views/system/role/components/PermissionComNew/index.vue @@ -20,7 +20,7 @@ - + 页面显示权限
@@ -55,7 +55,8 @@
  • {{ c_item.title }}
    - +
  • @@ -99,7 +100,7 @@ import { setRolePremission, setBtnDatarange, } from './api'; -import { MenuDataType, MenusType, DataPermissionRangeType, CustomDataPermissionDeptType } from './types'; +import { MenuDataType, DataPermissionRangeType, CustomDataPermissionDeptType } from './types'; import { ElMessage } from 'element-plus' const props = defineProps({ @@ -159,6 +160,7 @@ let customDataPermission = ref([]); const getMenuBtnPermission = async () => { const resMenu = await getRolePermission({ role: props.roleId }) menuData.value = resMenu + } // 获取按钮的数据权限下拉选项 const getDataPermissionRangeLable = async () => { @@ -166,9 +168,9 @@ const getDataPermissionRangeLable = async () => { dataPermissionRangeLabel.value = resRange.data; } -const fetchData = async (btnId:number) => { +const fetchData = async (btnId: number) => { try { - const resRange = await getDataPermissionRange({menu_button:btnId}); + const resRange = await getDataPermissionRange({ menu_button: btnId }); if (resRange?.code === 2000) { dataPermissionRange.value = resRange.data; } @@ -186,16 +188,16 @@ const fetchData = async (btnId:number) => { * @param record 当前菜单 * @param btnType 按钮类型 */ -const handleSettingClick = (record: MenusType, btn: MenusType['btns'][number]) => { +const handleSettingClick = (record: MenuDataType, btn: MenuDataType['btns'][number]) => { menuCurrent.value = record; menuBtnCurrent.value = btn.id; dialogVisible.value = true; - dataPermission.value =btn.data_range; + dataPermission.value = btn.data_range; handlePermissionRangeChange(btn.data_range) - fetchData( btn.id) + fetchData(btn.id) }; -const handleColumnChange = (val: boolean, record: MenusType, btnType: string) => { +const handleColumnChange = (val: boolean, record: MenuDataType, btnType: string) => { for (const iterator of record.columns) { iterator[btnType] = val; } @@ -203,8 +205,8 @@ const handleColumnChange = (val: boolean, record: MenusType, btnType: string) => const handlePermissionRangeChange = async (val: number) => { if (val === 4) { - const res = await getDataPermissionDept({ role: props.roleId,menu_button:menuBtnCurrent.value }); - const depts = XEUtils.toArrayTree(res.data.depts, { parentKey: 'parent', strict: false }); + const res = await getDataPermissionDept({ role: props.roleId, menu_button: menuBtnCurrent.value }); + const depts = XEUtils.toArrayTree(res.data.depts, { parentKey: 'parent', strict: false }); deptData.value = depts; customDataPermission.value = res.data.dept_checked; } @@ -218,10 +220,8 @@ const handleDialogConfirm = () => { errorNotification('请选择'); return; } - - //if (dataPermission.value !== 4) {} for (const item of menuData.value) { - for (const iterator of item.menus) { + for (const iterator of item.children) { if (iterator.id === menuCurrent.value.id) { for (const btn of iterator.btns) { if (btn.id === menuBtnCurrent.value) { @@ -243,7 +243,7 @@ const handleDialogClose = () => { dataPermission.value = null; }; -//保存权限 +//保存菜单授权 const handleSavePermission = () => { setRolePremission(props.roleId, menuData.value).then((res: any) => { ElMessage({ @@ -254,10 +254,11 @@ const handleSavePermission = () => { } const column = reactive({ - header: [{ value: 'is_create', label: '新增可见' }, { value: 'is_update', label: '编辑可见' }, { - value: 'is_query', - label: '列表可见' - }] + header: [ + { value: 'is_create', label: '新增可见',disabled:'create_disabled'}, + { value: 'is_update', label: '编辑可见' ,disabled:'update_disabled'}, + { value: 'is_query', label: '列表可见',disabled:'query_disabled' } + ] }) onMounted(() => { diff --git a/web/src/views/system/role/components/PermissionComNew/types.ts b/web/src/views/system/role/components/PermissionComNew/types.ts index 64268103..5afc5c0d 100644 --- a/web/src/views/system/role/components/PermissionComNew/types.ts +++ b/web/src/views/system/role/components/PermissionComNew/types.ts @@ -1,36 +1,29 @@ export interface DataPermissionRangeType { - label: string; - value: number; + label: string; + value: number; } export interface CustomDataPermissionDeptType { - id: number; - name: string; - patent: number; - children: CustomDataPermissionDeptType[] + id: number; + name: string; + patent: number; + children: CustomDataPermissionDeptType[]; } export interface CustomDataPermissionMenuType { - id: number; - name: string; - is_catalog: boolean; - menuPermission: { id: number; name: string; value: string }[] | null; - columns: { id: number; name: string; title: string }[] | null; - children: CustomDataPermissionMenuType[] -} - -export interface MenusType{ - id: string; - name: string; - isCheck: boolean; - radio: string; - btns: { id:number,name: string; value: string; isCheck: boolean; data_range: number; dept:object; name:string }[]; - columns: { [key: string]: boolean | string; }[] + id: number; + name: string; + is_catalog: boolean; + menuPermission: { id: number; name: string; value: string }[] | null; + columns: { id: number; name: string; title: string }[] | null; + children: CustomDataPermissionMenuType[]; } export interface MenuDataType { - id: string; - name: string; - menus:MenusType[]; + id: string; + name: string; + isCheck: boolean; + btns: { id: number; name: string; value: string; isCheck: boolean; data_range: number; dept: object }[]; + columns: { [key: string]: boolean | string; }[]; + children: MenuDataType[]; } - -- Gitee From 314d7d79c2237ee92c8decba74a79425597c9182 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=B0=8F=E6=B6=9B?= <1537080775@qq.com> Date: Fri, 28 Jun 2024 23:46:26 +0800 Subject: [PATCH 2/2] =?UTF-8?q?feat(role=5Fmenu=5F20240628):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E6=9D=83=E9=99=90=E9=85=8D=E7=BD=AE=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 清除后端打印 - 统一变量名 --- .../dvadmin/system/views/role_menu_button_permission.py | 8 +++----- .../system/role/components/PermissionComNew/index.vue | 6 +++--- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/backend/dvadmin/system/views/role_menu_button_permission.py b/backend/dvadmin/system/views/role_menu_button_permission.py index 9ab1a95e..6be6a471 100644 --- a/backend/dvadmin/system/views/role_menu_button_permission.py +++ b/backend/dvadmin/system/views/role_menu_button_permission.py @@ -254,11 +254,10 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet): 'is_query': query, 'is_create': create, 'is_update': update, - 'query_disabled': False if is_superuser else not query, - 'create_disabled': False if is_superuser else not create, - 'update_disabled': False if is_superuser else not update, + 'disabled_query': False if is_superuser else not query, + 'disabled_create': False if is_superuser else not create, + 'disabled_update': False if is_superuser else not update, }) - print(dicts['columns']) result.append(dicts) return DetailResponse(data=result) @@ -289,7 +288,6 @@ class RoleMenuButtonPermissionViewSet(CustomModelViewSet): data_range=data_range) instance.dept.set(btn.get('dept', [])) for col in menu.get('columns'): - print(col) FieldPermission.objects.update_or_create(role_id=pk, field_id=col.get('id'), defaults={ 'is_query': col.get('is_query'), diff --git a/web/src/views/system/role/components/PermissionComNew/index.vue b/web/src/views/system/role/components/PermissionComNew/index.vue index c90c3f1f..31ca9541 100644 --- a/web/src/views/system/role/components/PermissionComNew/index.vue +++ b/web/src/views/system/role/components/PermissionComNew/index.vue @@ -255,9 +255,9 @@ const handleSavePermission = () => { const column = reactive({ header: [ - { value: 'is_create', label: '新增可见',disabled:'create_disabled'}, - { value: 'is_update', label: '编辑可见' ,disabled:'update_disabled'}, - { value: 'is_query', label: '列表可见',disabled:'query_disabled' } + { value: 'is_create', label: '新增可见',disabled:'disabled_create'}, + { value: 'is_update', label: '编辑可见' ,disabled:'disabled_update'}, + { value: 'is_query', label: '列表可见',disabled:'disabled_query' } ] }) -- Gitee