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 @@
+
+
+
+
+
+
+
+ {{ item.ruleName }}
+
+
+
+
+
+
+
+ 无配置信息!
+
+
+
+
+
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 @@
+
+
+
+ 角色权限配置
+
+
+
+
+ 选择全部
+ 取消选择
+
+ 展开全部
+ 折叠全部
+
+ 层级关联
+ 层级独立
+
+
+
+
+
+
+ {{ slotTitle }}
+
+
+
+
+
+
+ 取消
+ 仅保存
+ 保存并关闭
+
+
+
+
+
+
+
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 @@
+
+
+
+ 角色权限配置
+
+
+
+
+ 选择全部
+ 取消选择
+
+ 展开全部
+ 折叠全部
+
+ 层级关联
+ 层级独立
+
+
+
+
+
+
+ {{ slotTitle }}
+
+
+
+
+
+
+ 取消
+ 仅保存
+ 保存并关闭
+
+
+
+
+
+
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 @@
+
+
+
+ 角色权限配置
+
+
+
+
+ 选择全部
+ 取消选择
+
+ 展开全部
+ 折叠全部
+
+ 层级关联
+ 层级独立
+
+
+
+
+
+
+ {{ slotTitle }}
+
+
+
+
+
+
+ 取消
+ 仅保存
+ 保存并关闭
+
+
+
+
+
+