feat: 补充角色权限
This commit is contained in:
@@ -28,4 +28,7 @@ export enum department {
|
|||||||
addRole = `${BASE_URL}/api/dept/addRole`,
|
addRole = `${BASE_URL}/api/dept/addRole`,
|
||||||
editRole = `${BASE_URL}/api/dept/editRole`,
|
editRole = `${BASE_URL}/api/dept/editRole`,
|
||||||
queryRoleTree = `${BASE_URL}/api/dept/queryRoleTree`,
|
queryRoleTree = `${BASE_URL}/api/dept/queryRoleTree`,
|
||||||
|
|
||||||
|
queryDeptPermission = `${BASE_URL}/api/dept/queryDeptPermission`,
|
||||||
|
queryRolePermission = `${BASE_URL}/api/dept/queryRolePermission`,
|
||||||
}
|
}
|
||||||
|
@@ -83,11 +83,11 @@ const organizationManage = {
|
|||||||
name: 'AuthorityManage',
|
name: 'AuthorityManage',
|
||||||
meta: { title: '部门/权限', hideChildren: true, icon: 'dicizhishou' },
|
meta: { title: '部门/权限', hideChildren: true, icon: 'dicizhishou' },
|
||||||
component: Base,
|
component: Base,
|
||||||
redirect: { name: 'authorityManageIndex' },
|
redirect: { name: 'AuthorityManageIndex' },
|
||||||
children: [
|
children: [
|
||||||
{
|
{
|
||||||
path: 'index',
|
path: 'index',
|
||||||
name: 'authorityManageIndex',
|
name: 'AuthorityManageIndex',
|
||||||
component: () => import('/@/view/organizationManage/departmentManage/index.vue'),
|
component: () => import('/@/view/organizationManage/departmentManage/index.vue'),
|
||||||
meta: {
|
meta: {
|
||||||
title: '部门/权限',
|
title: '部门/权限',
|
||||||
@@ -97,7 +97,6 @@ const organizationManage = {
|
|||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
||||||
],
|
],
|
||||||
};
|
};
|
||||||
export default organizationManage;
|
export default organizationManage;
|
||||||
|
@@ -39,21 +39,28 @@
|
|||||||
formLayout="vertical"
|
formLayout="vertical"
|
||||||
class="form" />
|
class="form" />
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane key="2" tab="部门权限">
|
<a-tab-pane key="2" :disabled="disabled" tab="部门权限">
|
||||||
<a-tree
|
<a-tree
|
||||||
:tree-data="apartmentAdminTreeData"
|
:tree-data="apartmentAdminTreeData"
|
||||||
|
:fieldNames="{ children: 'menus', title: 'label', key: 'permissionId' }"
|
||||||
v-model:checkedKeys="ApartcheckedKeys"
|
v-model:checkedKeys="ApartcheckedKeys"
|
||||||
checkable
|
checkable
|
||||||
|
:selectable="false"
|
||||||
defaultExpandAll
|
defaultExpandAll
|
||||||
@select="ApartmentSelect">
|
@select="ApartmentSelect">
|
||||||
<template #title="{ title }">
|
<template #title="data"> {{ data.label }}</template>
|
||||||
{{ title }}
|
|
||||||
</template>
|
|
||||||
</a-tree>
|
</a-tree>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
<ns-button style="margin: 20px" type="primary" @click="CancelApartment">取消</ns-button>
|
<div v-show="activeKey === '1'">
|
||||||
<ns-button type="primary" @click="ApartmentSure">确定</ns-button>
|
<ns-button style="margin: 16px" type="primary" @click="CancelApartment">取消</ns-button>
|
||||||
|
<ns-button type="primary" :disabled="disabled" @click="ApartmentSure">确定</ns-button>
|
||||||
|
</div>
|
||||||
|
<div v-show="activeKey === '2'">
|
||||||
|
<ns-button style="margin-left: 16px" type="primary" @click="apartmentPermission"
|
||||||
|
>确定</ns-button
|
||||||
|
>
|
||||||
|
</div>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</div>
|
</div>
|
||||||
@@ -61,9 +68,7 @@
|
|||||||
<div class="ns-table-title">角色管理</div>
|
<div class="ns-table-title">角色管理</div>
|
||||||
<a-row>
|
<a-row>
|
||||||
<a-col :span="12" class="tree">
|
<a-col :span="12" class="tree">
|
||||||
<ns-button :disabled="disabled2" style="margin: 10px" type="primary" @click="addUser"
|
<ns-button style="margin: 10px" type="primary" @click="addUser">新增角色</ns-button>
|
||||||
>新增角色</ns-button
|
|
||||||
>
|
|
||||||
<ns-button :disabled="disabled2" type="primary" @click="addUserSon">新增子角色</ns-button>
|
<ns-button :disabled="disabled2" type="primary" @click="addUserSon">新增子角色</ns-button>
|
||||||
<ns-button :disabled="disabled2" style="margin: 10px" type="primary" @click="deleteUser"
|
<ns-button :disabled="disabled2" style="margin: 10px" type="primary" @click="deleteUser"
|
||||||
>删除</ns-button
|
>删除</ns-button
|
||||||
@@ -87,21 +92,25 @@
|
|||||||
formLayout="vertical"
|
formLayout="vertical"
|
||||||
class="form" />
|
class="form" />
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
<a-tab-pane key="2" tab="角色权限">
|
<a-tab-pane key="2" :disabled="disabled2" tab="角色权限">
|
||||||
<a-tree
|
<a-tree
|
||||||
|
v-if="userAdminTreeData?.length"
|
||||||
:tree-data="userAdminTreeData"
|
:tree-data="userAdminTreeData"
|
||||||
v-model:checkedKeys="UsercheckedKeys"
|
v-model:checkedKeys="UsercheckedKeys"
|
||||||
defaultExpandAll
|
defaultExpandAll
|
||||||
|
:fieldNames="{ children: 'menus', title: 'label', key: 'permissionId' }"
|
||||||
|
:selectable="false"
|
||||||
checkable
|
checkable
|
||||||
@select="UserSelect">
|
@select="UserSelect" />
|
||||||
<template #title="{ title }">
|
|
||||||
{{ title }}
|
|
||||||
</template>
|
|
||||||
</a-tree>
|
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
</a-tabs>
|
</a-tabs>
|
||||||
<ns-button style="margin: 20px" type="primary" @click="CancelUser">取消</ns-button>
|
<div v-show="activeKey2 === '1'">
|
||||||
<ns-button type="primary" @click="UserSure"> 确定</ns-button>
|
<ns-button style="margin: 16px" type="primary" @click="CancelUser">取消</ns-button>
|
||||||
|
<ns-button type="primary" :disabled="disabled2" @click="UserSure"> 确定</ns-button>
|
||||||
|
</div>
|
||||||
|
<div v-show="activeKey2 === '2'">
|
||||||
|
<ns-button style="margin: 16px" type="primary" @click="rolePermission"> 确定</ns-button>
|
||||||
|
</div>
|
||||||
</a-col>
|
</a-col>
|
||||||
</a-row>
|
</a-row>
|
||||||
</div>
|
</div>
|
||||||
@@ -112,7 +121,7 @@
|
|||||||
import { Modal } from 'ant-design-vue';
|
import { Modal } from 'ant-design-vue';
|
||||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||||
import { http } from '/nerv-lib/util/http';
|
import { http } from '/nerv-lib/util/http';
|
||||||
import { cloneDeep } from 'lodash-es';
|
import { cloneDeep, get } from 'lodash-es';
|
||||||
import { formConfig, formConfig2 } from './config';
|
import { formConfig, formConfig2 } from './config';
|
||||||
import { department } from '/@/api/origanizemanage';
|
import { department } from '/@/api/origanizemanage';
|
||||||
import { permission } from '/@/api/origanizemanage';
|
import { permission } from '/@/api/origanizemanage';
|
||||||
@@ -140,34 +149,18 @@
|
|||||||
const projectId = JSON.parse(sessionStorage.getItem('userInfo')).projectId;
|
const projectId = JSON.parse(sessionStorage.getItem('userInfo')).projectId;
|
||||||
const userAdminTreeData = ref([]);
|
const userAdminTreeData = ref([]);
|
||||||
const apartmentTreeData = ref([]);
|
const apartmentTreeData = ref([]);
|
||||||
|
const apartmentAdminTreeData = ref([]);
|
||||||
|
|
||||||
const userTreeData = ref([]);
|
const userTreeData = ref([]);
|
||||||
const getPermissionTree = (params) => {
|
const getPermissionTree = (params) => {
|
||||||
return http.post(permission.permissionTree, params);
|
return http.post(permission.permissionTree, params).then((res) => {
|
||||||
|
apartmentAdminTreeData.value = get(res, 'data.data');
|
||||||
|
userAdminTreeData.value = get(res, 'data.data');
|
||||||
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
getPermissionTree({ projectId });
|
getPermissionTree({ projectId });
|
||||||
|
|
||||||
const apartmentAdminTreeData = [
|
|
||||||
{
|
|
||||||
title: '首页',
|
|
||||||
key: '0-0',
|
|
||||||
children: [
|
|
||||||
{
|
|
||||||
title: '控制台',
|
|
||||||
key: '0-0-0',
|
|
||||||
children: [
|
|
||||||
{ title: 'leaf', key: '0-0-0-0' },
|
|
||||||
{ title: 'leaf', key: '0-0-0-1' },
|
|
||||||
],
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: '用户管理',
|
|
||||||
key: '0-0-1',
|
|
||||||
children: [{ key: '0-0-1-0', title: 'sss' }],
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
];
|
|
||||||
watch(ApartcheckedKeys, () => {
|
watch(ApartcheckedKeys, () => {
|
||||||
console.log('checkedKeys', ApartcheckedKeys.value);
|
console.log('checkedKeys', ApartcheckedKeys.value);
|
||||||
});
|
});
|
||||||
@@ -183,6 +176,7 @@
|
|||||||
apartmentTreeData.value = res.data;
|
apartmentTreeData.value = res.data;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// 获取部门树
|
||||||
const getTree = () => {
|
const getTree = () => {
|
||||||
getDepartList({ orgId }).then((res) => {
|
getDepartList({ orgId }).then((res) => {
|
||||||
apartmentTreeData.value = res.data;
|
apartmentTreeData.value = res.data;
|
||||||
@@ -190,14 +184,17 @@
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
const getUserTree = (params = { deptId: selectRef.value.deptInfo.deptId }) => {
|
// 获取角色树
|
||||||
|
const getUserTree = (params = { deptId: selectRef.value?.deptInfo?.deptId }) => {
|
||||||
http.post(department.queryRoleTree, params).then((res) => {
|
http.post(department.queryRoleTree, params).then((res) => {
|
||||||
userTreeData.value = res.data;
|
userTreeData.value = res.data;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
// 根据依赖刷新角色树
|
// 根据依赖刷新角色树
|
||||||
watchEffect(() => {
|
watchEffect(() => {
|
||||||
if (selectRef.value) getUserTree();
|
if (selectRef.value) {
|
||||||
|
getUserTree();
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const opMap: any = {
|
const opMap: any = {
|
||||||
@@ -284,7 +281,7 @@
|
|||||||
onOk() {
|
onOk() {
|
||||||
http.post(department.deptDel, { deptId: selectRef.value.deptInfo.deptId }).then(() => {
|
http.post(department.deptDel, { deptId: selectRef.value.deptInfo.deptId }).then(() => {
|
||||||
getTree();
|
getTree();
|
||||||
clearData();
|
clearApartData();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
onCancel() {
|
onCancel() {
|
||||||
@@ -307,13 +304,78 @@
|
|||||||
class: 'test',
|
class: 'test',
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
const clearData = () => {
|
|
||||||
|
const clearApartData = () => {
|
||||||
selectRef.value = {};
|
selectRef.value = {};
|
||||||
formData.value = {};
|
formData.value = {};
|
||||||
opMap.type = '';
|
opMap.type = '';
|
||||||
opMap.fuc = '';
|
opMap.fuc = '';
|
||||||
selectKey.value = '';
|
selectKey.value = '';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// 保存部门权限
|
||||||
|
const apartmentPermission = () => {
|
||||||
|
http
|
||||||
|
.post(department.addPermission, {
|
||||||
|
deptId: selectRef.value?.deptInfo.deptId,
|
||||||
|
projectId,
|
||||||
|
permissionVoList: ApartcheckedKeys.value.map((item) => {
|
||||||
|
return { permissionId: item };
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
NsMessage.success('保存成功');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 保存角色权限
|
||||||
|
const rolePermission = () => {
|
||||||
|
http
|
||||||
|
.post(department.addRolePermission, {
|
||||||
|
// deptId: selectRef.value?.deptInfo.deptId,
|
||||||
|
roleId: selectRef2.value?.roleId,
|
||||||
|
projectId,
|
||||||
|
permissionVoList: UsercheckedKeys.value.map((item) => {
|
||||||
|
return { permissionId: item };
|
||||||
|
}),
|
||||||
|
})
|
||||||
|
.then(() => {
|
||||||
|
NsMessage.success('保存成功');
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取部门拥有的权限
|
||||||
|
const getDeptPermission = () => {
|
||||||
|
http
|
||||||
|
.post(department.queryDeptPermission, { deptId: selectRef.value?.deptInfo.deptId })
|
||||||
|
.then((res) => {
|
||||||
|
ApartcheckedKeys.value = res.data.map((item) => {
|
||||||
|
return item.permissionId;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// 获取角色拥有的权限
|
||||||
|
const getRolePermission = () => {
|
||||||
|
http
|
||||||
|
.post(department.queryRolePermission, { roleId: selectRef2.value?.roleId })
|
||||||
|
.then((res) => {
|
||||||
|
UsercheckedKeys.value = res.data.map((item) => {
|
||||||
|
return item.permissionId;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认选中视为编辑部门
|
||||||
|
* type editDpet
|
||||||
|
*/
|
||||||
|
const apartmentChoose = () => {
|
||||||
|
opMap.type = 'editDpet';
|
||||||
|
opMap.fuc = (params) => {
|
||||||
|
return http.post(department.deptEdit, params);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
// 部门选择
|
// 部门选择
|
||||||
const SelectApartmentTree = (selectedKeys: any, info: any) => {
|
const SelectApartmentTree = (selectedKeys: any, info: any) => {
|
||||||
const { selected } = info;
|
const { selected } = info;
|
||||||
@@ -322,12 +384,21 @@
|
|||||||
selectKey.value = selectedKeys[0];
|
selectKey.value = selectedKeys[0];
|
||||||
selectRef.value = info.node.dataRef;
|
selectRef.value = info.node.dataRef;
|
||||||
formData.value = cloneDeep(info.node.dataRef.deptInfo);
|
formData.value = cloneDeep(info.node.dataRef.deptInfo);
|
||||||
|
apartmentChoose();
|
||||||
|
ApartcheckedKeys.value.splice(0);
|
||||||
|
getDeptPermission();
|
||||||
|
// getUserTree({ deptId: selectRef.value.deptInfo.deptId });
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认选中视为编辑角色
|
||||||
|
* type editDpet
|
||||||
|
*/
|
||||||
|
const roleChoose = () => {
|
||||||
opMap.type = 'editDpet';
|
opMap.type = 'editDpet';
|
||||||
opMap.fuc = (params) => {
|
opMap.fuc = (params) => {
|
||||||
return http.post(department.deptEdit, params);
|
return http.post(department.deptEdit, params);
|
||||||
};
|
};
|
||||||
|
|
||||||
// getUserTree({ deptId: selectRef.value.deptInfo.deptId });
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// 角色选择
|
// 角色选择
|
||||||
@@ -339,14 +410,15 @@
|
|||||||
selectKey2.value = selectedKeys[0];
|
selectKey2.value = selectedKeys[0];
|
||||||
selectRef2.value = info.node.dataRef;
|
selectRef2.value = info.node.dataRef;
|
||||||
formData2.value = cloneDeep(info.node.dataRef);
|
formData2.value = cloneDeep(info.node.dataRef);
|
||||||
opMap.type = 'editRole';
|
roleChoose();
|
||||||
opMap.fuc = (params) => {
|
UsercheckedKeys.value.splice(0);
|
||||||
return http.post(department.editRole, params);
|
getRolePermission();
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const CancelApartment = () => {
|
const CancelApartment = () => {
|
||||||
disabled.value = true;
|
disabled.value = true;
|
||||||
|
// 取消视为转入编辑状态
|
||||||
|
// clearApartData();
|
||||||
};
|
};
|
||||||
|
|
||||||
const CancelUser = () => {
|
const CancelUser = () => {
|
||||||
@@ -382,10 +454,9 @@
|
|||||||
opMap.fuc && opMap.fuc({ ...formData.value, selectRef: selectRef.value });
|
opMap.fuc && opMap.fuc({ ...formData.value, selectRef: selectRef.value });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const UserSure = () => {
|
const UserSure = () => {
|
||||||
disabled2.value = !disabled2.value;
|
disabled2.value = !disabled2.value;
|
||||||
console.log(formData2.value, 'formData2');
|
|
||||||
console.log(opMap.type, 'opMap.type');
|
|
||||||
const typeArr = ['addUserSon', 'addUser', 'editRole'];
|
const typeArr = ['addUserSon', 'addUser', 'editRole'];
|
||||||
if (typeArr.includes(opMap.type)) {
|
if (typeArr.includes(opMap.type)) {
|
||||||
opMap.fuc &&
|
opMap.fuc &&
|
||||||
@@ -403,7 +474,6 @@
|
|||||||
else {
|
else {
|
||||||
console.log('ss');
|
console.log('ss');
|
||||||
}
|
}
|
||||||
formData2.value = {};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -436,6 +506,8 @@
|
|||||||
UsercheckedKeys,
|
UsercheckedKeys,
|
||||||
UserSelect,
|
UserSelect,
|
||||||
formRef,
|
formRef,
|
||||||
|
apartmentPermission,
|
||||||
|
rolePermission,
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
@@ -12,7 +12,7 @@ const proxy = {
|
|||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
},
|
},
|
||||||
'/carbon-smart': {
|
'/carbon-smart': {
|
||||||
target: 'http://123.60.103.97:8224',
|
target: 'http://192.168.112.144:8224',
|
||||||
changeOrigin: true,
|
changeOrigin: true,
|
||||||
rewrite: (path) => path.replace(/^\/carbon-smart/, ''),
|
rewrite: (path) => path.replace(/^\/carbon-smart/, ''),
|
||||||
},
|
},
|
||||||
|
Reference in New Issue
Block a user