From 108d13b89601884a61fdda9298f157a1e16763ea Mon Sep 17 00:00:00 2001 From: YunaiV Date: Mon, 31 Mar 2025 15:47:48 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E8=A7=92=E8=89=B2=20role=20?= =?UTF-8?q?=E7=9A=84=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=2050%?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/api/system/role/index.ts | 8 +- apps/web-antd/src/views/system/role/data.ts | 68 +++++++- apps/web-antd/src/views/system/role/index.vue | 27 +++- .../modules/assign-data-permission-form.vue | 149 ++++++++++++++++++ 4 files changed, 242 insertions(+), 10 deletions(-) create mode 100644 apps/web-antd/src/views/system/role/modules/assign-data-permission-form.vue diff --git a/apps/web-antd/src/api/system/role/index.ts b/apps/web-antd/src/api/system/role/index.ts index f470eeaa7..6caa33a3f 100644 --- a/apps/web-antd/src/api/system/role/index.ts +++ b/apps/web-antd/src/api/system/role/index.ts @@ -1,5 +1,5 @@ import { requestClient } from '#/api/request'; -import type { PageParam } from '@vben/request'; +import type { PageParam, PageResult } from '@vben/request'; export namespace SystemRoleApi { /** 角色信息 */ @@ -18,17 +18,17 @@ export namespace SystemRoleApi { /** 查询角色列表 */ export function getRolePage(params: PageParam) { - return requestClient.get('/system/role/page', { params }); + return requestClient.get>('/system/role/page', { params }); } /** 查询角色(精简)列表 */ export function getSimpleRoleList(): Promise { - return requestClient.get('/system/role/simple-list'); + return requestClient.get('/system/role/simple-list'); } /** 查询角色详情 */ export function getRole(id: number) { - return requestClient.get(`/system/role/get?id=${id}`); + return requestClient.get(`/system/role/get?id=${id}`); } /** 新增角色 */ diff --git a/apps/web-antd/src/views/system/role/data.ts b/apps/web-antd/src/views/system/role/data.ts index 7671bf531..32ca1e264 100644 --- a/apps/web-antd/src/views/system/role/data.ts +++ b/apps/web-antd/src/views/system/role/data.ts @@ -3,8 +3,9 @@ import type { OnActionClickFn, VxeTableGridOptions } from '#/adapter/vxe-table'; import type { SystemRoleApi } from '#/api/system/role'; import { DICT_TYPE, getDictOptions } from '#/utils/dict'; -import { CommonStatusEnum } from '#/utils/constants'; +import { CommonStatusEnum, SystemDataScopeEnum } from '#/utils/constants'; +/** 新增/修改的表单 */ export function useFormSchema(): VbenFormSchema[] { return [ { @@ -59,6 +60,60 @@ export function useFormSchema(): VbenFormSchema[] { ]; } +/** 分配数据权限的表单 */ +export function useAssignDataPermissionFormSchema(): VbenFormSchema[] { + return [ + { + component: 'Input', + fieldName: 'id', + label: 'id', + dependencies: { + triggerFields: [''], + show: () => false, + }, + }, + { + component: 'Input', + fieldName: 'name', + label: '角色名称', + componentProps: { + disabled: true, + } + }, + { + component: 'Input', + fieldName: 'code', + label: '角色标识', + componentProps: { + disabled: true, + } + }, + { + component: 'Select', + fieldName: 'dataScope', + label: '权限范围', + componentProps: { + class: 'w-full', + options: getDictOptions(DICT_TYPE.SYSTEM_DATA_SCOPE, 'number'), + } + }, + { + component: 'Input', + fieldName: 'dataScopeDeptIds', + label: '部门范围', + // dependencies: { + // triggerFields: ['dataScope'], + // show: (values) => { + // return values.dataScope === SystemDataScopeEnum.DEPT_CUSTOM; + // } + // }, + formItemClass: 'items-start', // TODO @芋艿: + modelPropName: 'modelValue', // TODO @芋艿: + } + ] +} + +/** 列表的搜索表单 */ export function useGridFormSchema(): VbenFormSchema[] { return [ { @@ -88,6 +143,7 @@ export function useGridFormSchema(): VbenFormSchema[] { ]; } +/** 列表的字段 */ export function useGridColumns( onActionClick: OnActionClickFn, ): VxeTableGridOptions['columns'] { @@ -150,11 +206,19 @@ export function useGridColumns( onClick: onActionClick, }, name: 'CellOperation', + options: [ + 'edit', // 默认的编辑按钮 + 'delete', // 默认的删除按钮 + { + code: 'assign-data-permission', + text: '数据权限', + }, + ], }, field: 'operation', fixed: 'right', title: '操作', - width: 130, + width: 220, }, ]; } diff --git a/apps/web-antd/src/views/system/role/index.vue b/apps/web-antd/src/views/system/role/index.vue index 75992e08b..eaf0f9d30 100644 --- a/apps/web-antd/src/views/system/role/index.vue +++ b/apps/web-antd/src/views/system/role/index.vue @@ -15,6 +15,7 @@ import { Plus, Download } from '@vben/icons'; import { useGridColumns, useGridFormSchema } from './data'; import Form from './modules/form.vue'; +import AssignDataPermissionForm from './modules/assign-data-permission-form.vue'; import { downloadByData } from '#/utils/download'; const [FormModal, formModalApi] = useVbenModal({ @@ -22,6 +23,11 @@ const [FormModal, formModalApi] = useVbenModal({ destroyOnClose: true, }); +const [AssignDataPermissionFormModel, assignDataPermissionFormApi] = useVbenModal({ + connectedComponent: AssignDataPermissionForm, + destroyOnClose: true, +}); + /** 编辑角色 */ function onEdit(row: SystemRoleApi.SystemRole) { formModalApi.setData(row).open(); @@ -51,15 +57,27 @@ async function onDelete(row: SystemRoleApi.SystemRole) { } } +/** 分配角色的数据权限 */ +function onAssignDataPermission(row: SystemRoleApi.SystemRole) { + assignDataPermissionFormApi.setData(row).open(); +} + /** 表格操作按钮的回调函数 */ -function onActionClick(e: OnActionClickParams) { - switch (e.code) { +function onActionClick({ + code, + row +}: OnActionClickParams) { + switch (code) { case 'delete': { - onDelete(e.row); + onDelete(row); break; } case 'edit': { - onEdit(e.row); + onEdit(row); + break; + } + case 'assign-data-permission': { + onAssignDataPermission(row); break; } } @@ -110,6 +128,7 @@ async function onExport() {