From 65c67cda694ad5b1e2de194adad87c9f682b9547 Mon Sep 17 00:00:00 2001 From: yangjun <1173114630@qq.com> Date: Sun, 4 Jan 2026 15:36:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8A=A4=E7=90=86=E5=8D=95?= =?UTF-8?q?=E5=85=83=E8=8F=9C=E5=8D=95=E6=9D=83=E9=99=90=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=8F=8A=E5=91=98=E5=B7=A5=E6=9D=83=E9=99=90=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/appConfig/DataRuleList.vue | 144 ++++++++ src/views/appConfig/DataRuleModal.vue | 54 +++ src/views/appConfig/MenuDrawer.vue | 141 ++++++++ src/views/appConfig/NuAppPermission.api.ts | 144 ++++++++ src/views/appConfig/NuAppPermission.data.ts | 307 ++++++++++++++++++ src/views/appConfig/NuAppPermissionList.vue | 265 +++++++++++++++ .../components/NuAppPermissionForm.vue | 266 +++++++++++++++ .../components/NuAppPermissionModal.vue | 77 +++++ .../components/RoleDataRuleDrawer.vue | 85 +++++ src/views/appConfig/components/RoleDesc.vue | 18 + src/views/appConfig/components/RoleDrawer.vue | 53 +++ .../appConfig/components/RoleIndexModal.vue | 55 ++++ .../components/RolePermissionDrawer.vue | 304 +++++++++++++++++ .../appConfig/components/RoleUserTable.vue | 200 ++++++++++++ .../appConfig/components/UseSelectModal.vue | 67 ++++ .../bizEmployeesInfo/BizEmployeesInfo.api.ts | 29 +- .../bizEmployeesInfo/BizEmployeesInfoList.vue | 12 + .../components/RolePermissionDrawer.vue | 301 +++++++++++++++++ src/views/biz/nuBaseInfo/NuBaseInfo.api.ts | 27 ++ src/views/biz/nuBaseInfo/QyxxList.vue | 15 + .../components/RolePermissionDrawer.vue | 301 +++++++++++++++++ 21 files changed, 2864 insertions(+), 1 deletion(-) create mode 100644 src/views/appConfig/DataRuleList.vue create mode 100644 src/views/appConfig/DataRuleModal.vue create mode 100644 src/views/appConfig/MenuDrawer.vue create mode 100644 src/views/appConfig/NuAppPermission.api.ts create mode 100644 src/views/appConfig/NuAppPermission.data.ts create mode 100644 src/views/appConfig/NuAppPermissionList.vue create mode 100644 src/views/appConfig/components/NuAppPermissionForm.vue create mode 100644 src/views/appConfig/components/NuAppPermissionModal.vue create mode 100644 src/views/appConfig/components/RoleDataRuleDrawer.vue create mode 100644 src/views/appConfig/components/RoleDesc.vue create mode 100644 src/views/appConfig/components/RoleDrawer.vue create mode 100644 src/views/appConfig/components/RoleIndexModal.vue create mode 100644 src/views/appConfig/components/RolePermissionDrawer.vue create mode 100644 src/views/appConfig/components/RoleUserTable.vue create mode 100644 src/views/appConfig/components/UseSelectModal.vue create mode 100644 src/views/biz/bizEmployeesInfo/components/RolePermissionDrawer.vue create mode 100644 src/views/biz/nuBaseInfo/components/RolePermissionDrawer.vue diff --git a/src/views/appConfig/DataRuleList.vue b/src/views/appConfig/DataRuleList.vue new file mode 100644 index 0000000..d3e9a4a --- /dev/null +++ b/src/views/appConfig/DataRuleList.vue @@ -0,0 +1,144 @@ + + + diff --git a/src/views/appConfig/DataRuleModal.vue b/src/views/appConfig/DataRuleModal.vue new file mode 100644 index 0000000..7a35a92 --- /dev/null +++ b/src/views/appConfig/DataRuleModal.vue @@ -0,0 +1,54 @@ + + diff --git a/src/views/appConfig/MenuDrawer.vue b/src/views/appConfig/MenuDrawer.vue new file mode 100644 index 0000000..f5a95b1 --- /dev/null +++ b/src/views/appConfig/MenuDrawer.vue @@ -0,0 +1,141 @@ + + diff --git a/src/views/appConfig/NuAppPermission.api.ts b/src/views/appConfig/NuAppPermission.api.ts new file mode 100644 index 0000000..df8a2ff --- /dev/null +++ b/src/views/appConfig/NuAppPermission.api.ts @@ -0,0 +1,144 @@ +import { defHttp } from '/@/utils/http/axios'; +import { Modal } from 'ant-design-vue'; + +enum Api { + list = '/appConfig/nuAppPermission/list', + save = '/appConfig/nuAppPermission/add', + edit = '/appConfig/nuAppPermission/edit', + delete = '/appConfig/nuAppPermission/delete', + deleteBatch = '/appConfig/nuAppPermission/deleteBatch', + ruleList = '/appConfig/nuAppPermission/queryPermissionRule', + ruleSave = '/appConfig/nuAppPermission/addPermissionRule', + ruleEdit = '/appConfig/nuAppPermission/editPermissionRule', + ruleDelete = '/appConfig/nuAppPermission/deletePermissionRule', + checkPermDuplication = '/appConfig/nuAppPermission/checkPermDuplication', + isRoleExist = '/appConfig/nuAppPermission/checkRoleCode', +} + +/** + * 编码校验 + * @param params + */ +// update-begin--author:liaozhiyang---date:20231215---for:【QQYUN-7415】表单调用接口进行校验的添加防抖 +let timer; +export const isRoleExist = (params) => { + return new Promise((resolve, rejected) => { + clearTimeout(timer); + timer = setTimeout(() => { + defHttp + .get({ url: Api.isRoleExist, params }, { isTransformResponse: false }) + .then((res) => { + resolve(res); + }) + .catch((error) => { + rejected(error); + }); + }, 500); + }); +}; +/** + * 列表接口 + * @param params + */ +export const list = (params) => { + return defHttp.get({ url: Api.list, params }); +} + +/** + * 删除菜单 + */ +export const deleteMenu = (params, handleSuccess) => { + return defHttp.delete({ url: Api.delete, params }, { joinParamsToUrl: true }).then(() => { + handleSuccess(); + }); +}; +/** + * 批量删除菜单 + * @param params + */ +export const batchDeleteMenu = (params, handleSuccess) => { + Modal.confirm({ + title: '确认删除', + content: '是否删除选中数据', + okText: '确认', + cancelText: '取消', + onOk: () => { + return defHttp.delete({ url: Api.deleteBatch, data: params }, { joinParamsToUrl: true }).then(() => { + handleSuccess(); + }); + }, + }); +}; +/** + * 保存或者更新菜单 + * @param params + */ +export const saveOrUpdateMenu = (params, isUpdate) => { + let url = isUpdate ? Api.edit : Api.save; + return defHttp.post({ url: url, params }); +}; +/** + * 菜单数据权限列表接口 + * @param params + */ +export const dataRuleList = (params) => defHttp.get({ url: Api.ruleList, params }); +/** + * 保存或者更新数据规则 + * @param params + */ +export const saveOrUpdateRule = (params, isUpdate) => { + let url = isUpdate ? Api.ruleEdit : Api.ruleSave; + return defHttp.post({ url: url, params }); +}; + +/** + * 删除数据权限 + */ +export const deleteRule = (params, handleSuccess) => { + return defHttp.delete({ url: Api.ruleDelete, params }, { joinParamsToUrl: true }).then(() => { + handleSuccess(); + }); +}; +/** + * 根据code获取字典数值 + * @param params + */ +export const ajaxGetDictItems = (params) => defHttp.get({ url: `/sys/dict/getDictItems/${params.code}` }); + +/** + * 唯一校验 + * @param params + */ +export const getCheckPermDuplication = (params) => defHttp.get({ url: Api.checkPermDuplication, params }, { isTransformResponse: false }); + +/** + * 校验菜单是否存在 + * @param model + * @param schema + * @param required + */ +export const checkPermDuplication=(model, schema, required?)=>{ + return [ + { + validator: (_, value) => { + if (!required) { + return Promise.resolve(); + } + if (!value && required) { + return Promise.reject(`请输入${schema.label}`); + } + return new Promise((resolve, reject) => { + getCheckPermDuplication({ + id: model.id, + url:model.url, + alwaysShow:model.alwaysShow + }).then((res) => { + res.success ? resolve() : reject(res.message || '校验失败'); + }).catch((err) => { + reject(err.message || '验证失败'); + }); + }); + }, + }, + ]; +} diff --git a/src/views/appConfig/NuAppPermission.data.ts b/src/views/appConfig/NuAppPermission.data.ts new file mode 100644 index 0000000..ce139a1 --- /dev/null +++ b/src/views/appConfig/NuAppPermission.data.ts @@ -0,0 +1,307 @@ +import { BasicColumn } from '/@/components/Table'; +import { FormSchema } from '/@/components/Table'; +import { ajaxGetDictItems ,checkPermDuplication,isRoleExist } from './NuAppPermission.api'; +import { render } from '/@/utils/common/renderUtils'; + +const isDir = (type) => type === 0; +const isMenu = (type) => type === 1; +const isButton = (type) => type === 2; + +// 定义可选择的组件类型 +export enum ComponentTypes { + Default = 'layouts/default/index', + IFrame = 'sys/iframe/FrameBlank', +} + +export const columns: BasicColumn[] = [ + { + title: '菜单名称', + dataIndex: 'name', + width: 200, + align: 'left', + }, + { + title: '菜单编码', + dataIndex: 'menuCode', + width: 200, + }, + { + title: '菜单类型', + dataIndex: 'menuType', + width: 150, + customRender: ({ text }) => { + return render.renderDict(text, 'menu_type'); + }, + }, + { + title: '排序', + dataIndex: 'sortNo', + width: 50, + }, +]; + +export const searchFormSchema: FormSchema[] = [ + { + field: 'name', + label: '菜单名称', + component: 'Input', + colProps: { span: 8 }, + }, +]; + +export const formSchema: FormSchema[] = [ + { + label: 'id', + field: 'id', + component: 'Input', + show: false, + }, + { + field: 'menuType', + label: '菜单类型', + component: 'RadioButtonGroup', + defaultValue: 0, + componentProps: ({ formActionType, formModel }) => { + return { + options: [ + { label: '一级菜单', value: 0 }, + { label: '子菜单', value: 1 }, + { label: '按钮/权限', value: 2 }, + ], + onChange: (e) => { + const { updateSchema, clearValidate } = formActionType; + const label = isButton(e) ? '按钮/权限' : '菜单名称'; + //清除校验 + // clearValidate(); + updateSchema([ + { + field: 'name', + label: label, + }, + { + field: 'url', + required: !isButton(e), + }, + ]); + //update-begin---author:wangshuai ---date:20220729 for:[VUEN-1834]只有一级菜单,才默认值,子菜单的时候,清空------------ + // if (isMenu(e) && !formModel.id && (formModel.component=='layouts/default/index' || formModel.component=='layouts/RouteView')) { + // formModel.component = ''; + // } + //update-end---author:wangshuai ---date:20220729 for:[VUEN-1834]只有一级菜单,才默认值,子菜单的时候,清空------------ + }, + }; + }, + }, + { + field: 'name', + label: '菜单名称', + component: 'Input', + required: true, + }, + { + field: 'menuCode', + label: '菜单编码', + required: true, + component: 'Input', + dynamicDisabled: ({ values }) => { + return !!values.id; + }, + dynamicRules: ({ values, model }) => { + console.log('values:', values); + return [ + { + required: true, + validator: (_, value) => { + if (!value) { + return Promise.reject('请输入菜单编码'); + } + if (values) { + return new Promise((resolve, reject) => { + isRoleExist({ id: model.id, roleCode: value }) + .then((res) => { + res.success ? resolve() : reject(res.message || '校验失败'); + }) + .catch((err) => { + reject(err.message || '验证失败'); + }); + }); + } + return Promise.resolve(); + }, + }, + ]; + }, + }, + { + field: 'parentId', + label: '上级菜单', + component: 'TreeSelect', + required: true, + componentProps: { + //update-begin---author:wangshuai ---date:20230829 for:replaceFields已过期,使用fieldNames代替------------ + fieldNames: { + label: 'name', + key: 'id', + value: 'id', + }, + //update-end---author:wangshuai ---date:20230829 for:replaceFields已过期,使用fieldNames代替------------ + dropdownStyle: { + maxHeight: '50vh', + }, + getPopupContainer: (node) => node?.parentNode, + }, + ifShow: ({ values }) => !isDir(values.menuType), + }, + { + field: 'status', + label: '状态', + component: 'RadioGroup', + defaultValue: '1', + componentProps: { + options: [ + { label: '有效', value: '1' }, + { label: '无效', value: '0' }, + ], + }, + ifShow: ({ values }) => isButton(values.menuType), + }, + // { + // field: 'icon', + // label: '菜单图标', + // component: 'IconPicker', + // ifShow: ({ values }) => !isButton(values.menuType), + // }, + { + field: 'sortNo', + label: '排序', + component: 'InputNumber', + defaultValue: 1, + ifShow: ({ values }) => !isButton(values.menuType), + }, +]; + +export const dataRuleColumns: BasicColumn[] = [ + { + title: '规则名称', + dataIndex: 'ruleName', + width: 150, + }, + { + title: '规则字段', + dataIndex: 'ruleColumn', + width: 100, + }, + { + title: '规则值', + dataIndex: 'ruleValue', + width: 100, + }, +]; + +export const dataRuleSearchFormSchema: FormSchema[] = [ + { + field: 'ruleName', + label: '规则名称', + component: 'Input', + // colProps: { span: 6 }, + }, + { + field: 'ruleValue', + label: '规则值', + component: 'Input', + // colProps: { span: 6 }, + }, +]; + +export const dataRuleFormSchema: FormSchema[] = [ + { + label: 'id', + field: 'id', + component: 'Input', + show: false, + }, + { + field: 'ruleName', + label: '规则名称', + component: 'Input', + required: true, + }, + { + field: 'ruleColumn', + label: '规则字段', + component: 'Input', + ifShow: ({ values }) => { + const ruleConditions = Array.isArray(values.ruleConditions) ? values.ruleConditions[0] : values.ruleConditions; + return ruleConditions !== 'USE_SQL_RULES'; + }, + }, + { + field: 'ruleConditions', + label: '条件规则', + required: true, + component: 'ApiSelect', + componentProps: { + api: ajaxGetDictItems, + params: { code: 'rule_conditions' }, + labelField: 'text', + valueField: 'value', + getPopupContainer: (node) => document.body, + }, + }, + // update-begin--author:liaozhiyang---date:20240724---for:【TV360X-1864】添加系统变量 + { + field: 'ruleValue', + component: 'JInputSelect', + label: '规则值', + required: true, + componentProps: { + selectPlaceholder: '可选择系统变量', + inputPlaceholder: '请输入', + getPopupContainer: () => document.body, + selectWidth: '200px', + options: [ + { + label: '登录用户账号', + value: '#{sys_user_code}', + }, + { + label: '登录用户名称', + value: '#{sys_user_name}', + }, + { + label: '当前日期', + value: '#{sys_date}', + }, + { + label: '当前时间', + value: '#{sys_time}', + }, + { + label: '登录用户部门', + value: '#{sys_org_code}', + }, + { + label: '用户拥有部门', + value: '#{sys_multi_org_code}', + }, + { + label: '登录用户租户', + value: '#{tenant_id}', + }, + ], + }, + }, + // update-end--author:liaozhiyang---date:20240724---for:【TV360X-1864】添加系统变量 + { + field: 'status', + label: '状态', + component: 'RadioButtonGroup', + defaultValue: '1', + componentProps: { + options: [ + { label: '无效', value: '0' }, + { label: '有效', value: '1' }, + ], + }, + }, +]; diff --git a/src/views/appConfig/NuAppPermissionList.vue b/src/views/appConfig/NuAppPermissionList.vue new file mode 100644 index 0000000..3fd568f --- /dev/null +++ b/src/views/appConfig/NuAppPermissionList.vue @@ -0,0 +1,265 @@ + + diff --git a/src/views/appConfig/components/NuAppPermissionForm.vue b/src/views/appConfig/components/NuAppPermissionForm.vue new file mode 100644 index 0000000..c8e727e --- /dev/null +++ b/src/views/appConfig/components/NuAppPermissionForm.vue @@ -0,0 +1,266 @@ + + + + + diff --git a/src/views/appConfig/components/NuAppPermissionModal.vue b/src/views/appConfig/components/NuAppPermissionModal.vue new file mode 100644 index 0000000..7547439 --- /dev/null +++ b/src/views/appConfig/components/NuAppPermissionModal.vue @@ -0,0 +1,77 @@ + + + + + + diff --git a/src/views/appConfig/components/RoleDataRuleDrawer.vue b/src/views/appConfig/components/RoleDataRuleDrawer.vue new file mode 100644 index 0000000..a5a9091 --- /dev/null +++ b/src/views/appConfig/components/RoleDataRuleDrawer.vue @@ -0,0 +1,85 @@ + + diff --git a/src/views/appConfig/components/RoleDesc.vue b/src/views/appConfig/components/RoleDesc.vue new file mode 100644 index 0000000..094ccf5 --- /dev/null +++ b/src/views/appConfig/components/RoleDesc.vue @@ -0,0 +1,18 @@ + + diff --git a/src/views/appConfig/components/RoleDrawer.vue b/src/views/appConfig/components/RoleDrawer.vue new file mode 100644 index 0000000..5e72907 --- /dev/null +++ b/src/views/appConfig/components/RoleDrawer.vue @@ -0,0 +1,53 @@ + + diff --git a/src/views/appConfig/components/RoleIndexModal.vue b/src/views/appConfig/components/RoleIndexModal.vue new file mode 100644 index 0000000..4db89ea --- /dev/null +++ b/src/views/appConfig/components/RoleIndexModal.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/views/appConfig/components/RolePermissionDrawer.vue b/src/views/appConfig/components/RolePermissionDrawer.vue new file mode 100644 index 0000000..1dc98aa --- /dev/null +++ b/src/views/appConfig/components/RolePermissionDrawer.vue @@ -0,0 +1,304 @@ + + + + diff --git a/src/views/appConfig/components/RoleUserTable.vue b/src/views/appConfig/components/RoleUserTable.vue new file mode 100644 index 0000000..b9465a5 --- /dev/null +++ b/src/views/appConfig/components/RoleUserTable.vue @@ -0,0 +1,200 @@ + + + + diff --git a/src/views/appConfig/components/UseSelectModal.vue b/src/views/appConfig/components/UseSelectModal.vue new file mode 100644 index 0000000..3165a2e --- /dev/null +++ b/src/views/appConfig/components/UseSelectModal.vue @@ -0,0 +1,67 @@ + + diff --git a/src/views/biz/bizEmployeesInfo/BizEmployeesInfo.api.ts b/src/views/biz/bizEmployeesInfo/BizEmployeesInfo.api.ts index e446d28..cd1aeb4 100644 --- a/src/views/biz/bizEmployeesInfo/BizEmployeesInfo.api.ts +++ b/src/views/biz/bizEmployeesInfo/BizEmployeesInfo.api.ts @@ -17,6 +17,10 @@ enum Api { checkTags='/bizEmployeesInfo/nuBizEmployeesServcieTags/add', removeTags = '/bizEmployeesInfo/nuBizEmployeesServcieTags/delete', getEmployessServiceTags = '/services/serviceTag/serviceTag/getEmployessServiceTags', + queryTreeListForRole = '/employessPermission/nuAppEmployessPermission/queryTreeList', + queryRolePermission = '/employessPermission/nuAppEmployessPermission/queryEmployessPermission', + saveRolePermission = '/employessPermission/nuAppEmployessPermission/saveRolePermission', + queryDataRule = '/employessPermission/nuAppEmployessPermission/queryDataRule', } @@ -90,4 +94,27 @@ export const checkTags = (params) => { export const removeTags = (params) => { let url = Api.removeTags; return defHttp.delete({ url: url, params }, {joinParamsToUrl: true}); -} \ No newline at end of file +} + + +/** + * 根据角色查询树信息 + */ +export const queryTreeListForRole = () => defHttp.get({ url: Api.queryTreeListForRole }); +/** + * 查询角色权限 + */ +export const queryRolePermission = (params) => defHttp.get({ url: Api.queryRolePermission, params }); +/** + * 保存角色权限 + */ +export const saveRolePermission = (params) => defHttp.post({ url: Api.saveRolePermission, params }); +/** + * 查询角色数据规则 + */ +export const queryDataRule = (params) => + defHttp.get({ url: `${Api.queryDataRule}/${params.functionId}/${params.roleId}` }, { isTransformResponse: false }); +/** + * 保存角色数据规则 + */ +export const saveDataRule = (params) => defHttp.post({ url: Api.queryDataRule, params }); \ No newline at end of file diff --git a/src/views/biz/bizEmployeesInfo/BizEmployeesInfoList.vue b/src/views/biz/bizEmployeesInfo/BizEmployeesInfoList.vue index 7af2cb9..7add2ce 100644 --- a/src/views/biz/bizEmployeesInfo/BizEmployeesInfoList.vue +++ b/src/views/biz/bizEmployeesInfo/BizEmployeesInfoList.vue @@ -98,6 +98,7 @@ 编辑 服务标签 分配账号 + 分配角色 @@ -125,6 +126,8 @@ + + @@ -141,8 +144,10 @@ import { Pagination } from 'ant-design-vue'; import { useDrawer } from '/@/components/Drawer'; import UserDrawer from '/@/views/system/user/UserDrawer.vue'; import JInput from "/@/components/Form/src/jeecg/components/JInput.vue"; + import RolePermissionDrawer from './components/RolePermissionDrawer.vue'; + const [rolePermissionDrawer, { openDrawer: openRolePermissionDrawer }] = useDrawer(); const APagination = Pagination; //注册drawer const [registerDrawer, { openDrawer }] = useDrawer(); @@ -167,6 +172,13 @@ const wrapperCol = reactive({ sm: 20, }); + /** + * 角色授权弹窗 + */ + function handlePerssion(record) { + console.log("🚀 ~ handlePerssion ~ record:", record.id) + openRolePermissionDrawer(true, { roleId: record.id }); + } //当没有员工头像时,默认展示企业logo function handleHeadPath(headPath) { console.log('headPath--->', headPath); diff --git a/src/views/biz/bizEmployeesInfo/components/RolePermissionDrawer.vue b/src/views/biz/bizEmployeesInfo/components/RolePermissionDrawer.vue new file mode 100644 index 0000000..cb2ed57 --- /dev/null +++ b/src/views/biz/bizEmployeesInfo/components/RolePermissionDrawer.vue @@ -0,0 +1,301 @@ + + + + diff --git a/src/views/biz/nuBaseInfo/NuBaseInfo.api.ts b/src/views/biz/nuBaseInfo/NuBaseInfo.api.ts index dbff4d7..7be6ad0 100644 --- a/src/views/biz/nuBaseInfo/NuBaseInfo.api.ts +++ b/src/views/biz/nuBaseInfo/NuBaseInfo.api.ts @@ -8,6 +8,10 @@ enum Api { importExcel = '/nuBaseInfo/nuBaseInfo/importExcel', exportXls = '/nuBaseInfo/nuBaseInfo/exportXls', qyList = '/nuBaseInfo/nuBaseInfo/qyList', + queryTreeListForRole = '/nuidPermission/nuAppNuidPermission/queryTreeList', + queryRolePermission = '/nuidPermission/nuAppNuidPermission/queryNuidPermission', + saveRolePermission = '/nuidPermission/nuAppNuidPermission/saveRolePermission', + queryDataRule = '/nuidPermission/nuAppNuidPermission/queryDataRule', } /** @@ -37,3 +41,26 @@ export const saveOrUpdate = (params, isUpdate) => { let url = isUpdate ? Api.edit : Api.save; return defHttp.post({ url: url, params }, { isTransformResponse: false }); }; + + +/** + * 根据角色查询树信息 + */ +export const queryTreeListForRole = () => defHttp.get({ url: Api.queryTreeListForRole }); +/** + * 查询角色权限 + */ +export const queryRolePermission = (params) => defHttp.get({ url: Api.queryRolePermission, params }); +/** + * 保存角色权限 + */ +export const saveRolePermission = (params) => defHttp.post({ url: Api.saveRolePermission, params }); +/** + * 查询角色数据规则 + */ +export const queryDataRule = (params) => + defHttp.get({ url: `${Api.queryDataRule}/${params.functionId}/${params.roleId}` }, { isTransformResponse: false }); +/** + * 保存角色数据规则 + */ +export const saveDataRule = (params) => defHttp.post({ url: Api.queryDataRule, params }); \ No newline at end of file diff --git a/src/views/biz/nuBaseInfo/QyxxList.vue b/src/views/biz/nuBaseInfo/QyxxList.vue index 351624e..5014110 100644 --- a/src/views/biz/nuBaseInfo/QyxxList.vue +++ b/src/views/biz/nuBaseInfo/QyxxList.vue @@ -81,6 +81,7 @@ 二维码 + 外挂
@@ -99,6 +100,8 @@ + +
@@ -119,6 +122,11 @@ import JDictSelectTag from '/@/components/Form/src/jeecg/components/JDictSelectT import { useMessage } from '/@/hooks/web/useMessage'; import QRCodeWithLogo from './EwmImage.vue'; import { defHttp } from '/@/utils/http/axios'; +import { useDrawer } from '/@/components/Drawer'; + import RolePermissionDrawer from './components/RolePermissionDrawer.vue'; + + + const [rolePermissionDrawer, { openDrawer: openRolePermissionDrawer }] = useDrawer(); const logoUrl = 'https://www.focusnu.com/devops/resource/img/logo.png'; // 替换为你的 Logo URL @@ -143,6 +151,13 @@ const { createMessage } = useMessage(); sm: 18, }); + /** + * 角色授权弹窗 + */ + function handlePerssion(record) { + console.log("🚀 ~ handlePerssion ~ record:", record.nuId) + openRolePermissionDrawer(true, { roleId: record.nuId }); + } //查看物联设备 function handleWlsb(record) { wlsbModal.value.disableSubmit = true; diff --git a/src/views/biz/nuBaseInfo/components/RolePermissionDrawer.vue b/src/views/biz/nuBaseInfo/components/RolePermissionDrawer.vue new file mode 100644 index 0000000..92b2c80 --- /dev/null +++ b/src/views/biz/nuBaseInfo/components/RolePermissionDrawer.vue @@ -0,0 +1,301 @@ + + + +