6.11
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
const BASE_URL = '/carbon-smart';
|
||||
export enum permission {
|
||||
add = `${BASE_URL}/admin/permission/save`,
|
||||
permissionTree = `${BASE_URL}/api/dept/permissionTree`,
|
||||
}
|
||||
|
||||
export enum origanizemanage {
|
||||
@@ -27,4 +28,7 @@ export enum department {
|
||||
addRole = `${BASE_URL}/api/dept/addRole`,
|
||||
editRole = `${BASE_URL}/api/dept/editRole`,
|
||||
queryRoleTree = `${BASE_URL}/api/dept/queryRoleTree`,
|
||||
|
||||
queryDeptPermission = `${BASE_URL}/api/dept/queryDeptPermission`,
|
||||
queryRolePermission = `${BASE_URL}/api/dept/queryRolePermission`,
|
||||
}
|
||||
|
@@ -38,6 +38,41 @@ const organizationManage = {
|
||||
meta: {
|
||||
title: '用户管理',
|
||||
keepAlive: true,
|
||||
operates: [
|
||||
{ title: '新增', code: 'userAdd' },
|
||||
{
|
||||
title: '导入',
|
||||
code: 'userImport',
|
||||
},
|
||||
{
|
||||
title: '模板下载',
|
||||
code: 'userTemDownload',
|
||||
},
|
||||
{
|
||||
title: '导出',
|
||||
code: 'userExports',
|
||||
},
|
||||
{
|
||||
title: '批量删除',
|
||||
code: 'userBatchDel',
|
||||
},
|
||||
{
|
||||
title: '编辑',
|
||||
code: 'userEdit',
|
||||
},
|
||||
{
|
||||
title: '冻结',
|
||||
code: 'userFrozen',
|
||||
},
|
||||
{
|
||||
title: '重置密码',
|
||||
code: 'userCodeReset',
|
||||
},
|
||||
{
|
||||
title: '删除',
|
||||
code: 'userDelete',
|
||||
},
|
||||
],
|
||||
// backApi: [],
|
||||
},
|
||||
},
|
||||
@@ -48,11 +83,11 @@ const organizationManage = {
|
||||
name: 'AuthorityManage',
|
||||
meta: { title: '部门/权限', hideChildren: true, icon: 'dicizhishou' },
|
||||
component: Base,
|
||||
redirect: { name: 'authorityManageIndex' },
|
||||
redirect: { name: 'AuthorityManageIndex' },
|
||||
children: [
|
||||
{
|
||||
path: 'index',
|
||||
name: 'authorityManageIndex',
|
||||
name: 'AuthorityManageIndex',
|
||||
component: () => import('/@/view/organizationManage/departmentManage/index.vue'),
|
||||
meta: {
|
||||
title: '部门/权限',
|
||||
@@ -62,7 +97,6 @@ const organizationManage = {
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
],
|
||||
};
|
||||
export default organizationManage;
|
||||
|
@@ -860,6 +860,8 @@
|
||||
status: "待执行",
|
||||
},
|
||||
]);
|
||||
const columns1 = [
|
||||
]);
|
||||
const columns1 = [
|
||||
{
|
||||
title: "序号",
|
||||
|
@@ -116,7 +116,7 @@ export const formConfig2 = (disabled2: Boolean) => {
|
||||
// },
|
||||
{
|
||||
label: '节点编码',
|
||||
field: 'code',
|
||||
field: 'roleCode',
|
||||
component: 'NsInput',
|
||||
componentProps: {
|
||||
disabled: disabled2,
|
||||
@@ -132,22 +132,22 @@ export const formConfig2 = (disabled2: Boolean) => {
|
||||
},
|
||||
{
|
||||
label: '是否部门领导',
|
||||
field: 'isleader',
|
||||
field: 'isLeader',
|
||||
component: 'NsRadioGroup',
|
||||
componentProps: {
|
||||
disabled: disabled2,
|
||||
radioType: 'radio',
|
||||
options: [
|
||||
{ label: '是', value: 1 },
|
||||
{ label: '否', value: 2 },
|
||||
],
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请选择是否部门领导',
|
||||
},
|
||||
{ label: '是', value: 0 },
|
||||
{ label: '否', value: 1 },
|
||||
],
|
||||
},
|
||||
rules: [
|
||||
{
|
||||
required: true,
|
||||
message: '请选择是否部门领导',
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
field: 'remark',
|
||||
|
@@ -6,9 +6,7 @@
|
||||
<div class="ns-table-title">部门管理</div>
|
||||
<a-row>
|
||||
<a-col :span="12" class="tree">
|
||||
<ns-button :disabled="disabled" style="margin: 10px" type="primary" @click="addApartment"
|
||||
>新增部门</ns-button
|
||||
>
|
||||
<ns-button style="margin: 10px" type="primary" @click="addApartment">新增部门</ns-button>
|
||||
<ns-button :disabled="disabled" type="primary" @click="addApartmentSon"
|
||||
>新增子部门</ns-button
|
||||
>
|
||||
@@ -39,21 +37,28 @@
|
||||
formLayout="vertical"
|
||||
class="form" />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="2" tab="部门权限">
|
||||
<a-tab-pane key="2" :disabled="disabled" tab="部门权限">
|
||||
<a-tree
|
||||
:tree-data="apartmentAdminTreeData"
|
||||
:fieldNames="{ children: 'menus', title: 'label', key: 'permissionId' }"
|
||||
v-model:checkedKeys="ApartcheckedKeys"
|
||||
checkable
|
||||
:selectable="false"
|
||||
defaultExpandAll
|
||||
@select="ApartmentSelect">
|
||||
<template #title="{ title }">
|
||||
{{ title }}
|
||||
</template>
|
||||
<template #title="data"> {{ data.label }}</template>
|
||||
</a-tree>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
<ns-button style="margin: 20px" type="primary" @click="CancelApartment">取消</ns-button>
|
||||
<ns-button type="primary" @click="ApartmentSure">确定</ns-button>
|
||||
<div v-show="activeKey === '1'">
|
||||
<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-row>
|
||||
</div>
|
||||
@@ -61,9 +66,7 @@
|
||||
<div class="ns-table-title">角色管理</div>
|
||||
<a-row>
|
||||
<a-col :span="12" class="tree">
|
||||
<ns-button :disabled="disabled2" style="margin: 10px" type="primary" @click="addUser"
|
||||
>新增角色</ns-button
|
||||
>
|
||||
<ns-button style="margin: 10px" type="primary" @click="addUser">新增角色</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
|
||||
@@ -87,32 +90,36 @@
|
||||
formLayout="vertical"
|
||||
class="form" />
|
||||
</a-tab-pane>
|
||||
<a-tab-pane key="2" tab="角色权限">
|
||||
<a-tab-pane key="2" :disabled="disabled2" tab="角色权限">
|
||||
<a-tree
|
||||
v-if="userAdminTreeData?.length"
|
||||
:tree-data="userAdminTreeData"
|
||||
v-model:checkedKeys="UsercheckedKeys"
|
||||
defaultExpandAll
|
||||
:fieldNames="{ children: 'menus', title: 'label', key: 'permissionId' }"
|
||||
:selectable="false"
|
||||
checkable
|
||||
@select="UserSelect">
|
||||
<template #title="{ title }">
|
||||
{{ title }}
|
||||
</template>
|
||||
</a-tree>
|
||||
@select="UserSelect" />
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
<ns-button style="margin: 20px" type="primary" @click="CancelUser">取消</ns-button>
|
||||
<ns-button type="primary" @click="UserSure">{{ disabled2 ? '编辑' : '确定' }}</ns-button>
|
||||
<div v-show="activeKey2 === '1'">
|
||||
<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-row>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { createVNode, defineComponent, reactive, ref, watch } from 'vue';
|
||||
import { createVNode, defineComponent, reactive, ref, watch, watchEffect } from 'vue';
|
||||
import { Modal } from 'ant-design-vue';
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { http } from '/nerv-lib/util/http';
|
||||
import { cloneDeep } from 'lodash-es';
|
||||
import { cloneDeep, get } from 'lodash-es';
|
||||
import { formConfig, formConfig2 } from './config';
|
||||
import { department } from '/@/api/origanizemanage';
|
||||
import { permission } from '/@/api/origanizemanage';
|
||||
@@ -140,30 +147,18 @@
|
||||
const projectId = JSON.parse(sessionStorage.getItem('userInfo')).projectId;
|
||||
const userAdminTreeData = ref([]);
|
||||
const apartmentTreeData = ref([]);
|
||||
const apartmentAdminTreeData = ref([]);
|
||||
|
||||
const userTreeData = ref([]);
|
||||
const getPermissionTree = (params) => {
|
||||
return http.post(permission.permissionTree, params).then((res) => {
|
||||
apartmentAdminTreeData.value = get(res, 'data.data');
|
||||
userAdminTreeData.value = get(res, 'data.data');
|
||||
});
|
||||
};
|
||||
|
||||
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, () => {
|
||||
console.log('checkedKeys', ApartcheckedKeys.value);
|
||||
});
|
||||
@@ -179,6 +174,7 @@
|
||||
apartmentTreeData.value = res.data;
|
||||
});
|
||||
|
||||
// 获取部门树
|
||||
const getTree = () => {
|
||||
getDepartList({ orgId }).then((res) => {
|
||||
apartmentTreeData.value = res.data;
|
||||
@@ -186,12 +182,19 @@
|
||||
});
|
||||
};
|
||||
|
||||
const getUserTree = (params = { deptId: 2 }) => {
|
||||
// 获取角色树
|
||||
const getUserTree = (params = { deptId: selectRef.value?.deptInfo?.deptId }) => {
|
||||
http.post(department.queryRoleTree, params).then((res) => {
|
||||
userTreeData.value = res.data;
|
||||
});
|
||||
};
|
||||
getUserTree({ deptId: 2 });
|
||||
// 根据依赖刷新角色树
|
||||
watchEffect(() => {
|
||||
if (selectRef.value) {
|
||||
getUserTree();
|
||||
}
|
||||
});
|
||||
|
||||
const opMap: any = {
|
||||
type: 'add',
|
||||
fuc: () => {},
|
||||
@@ -234,15 +237,14 @@
|
||||
const addUser = () => {
|
||||
disabled2.value = false;
|
||||
opMap.type = 'addUser';
|
||||
formData.value = {};
|
||||
formData2.value = {};
|
||||
opMap.fuc = (params) => {
|
||||
delete params.roleId;
|
||||
return http.post(department.addRole, {
|
||||
...params,
|
||||
orgId,
|
||||
projectId,
|
||||
enName: 'leader',
|
||||
roleNote: 'wqe',
|
||||
deptId: selectRef.value.deptInfo.deptId,
|
||||
});
|
||||
};
|
||||
};
|
||||
@@ -250,17 +252,15 @@
|
||||
const addUserSon = () => {
|
||||
disabled.value = false;
|
||||
opMap.type = 'addUserSon';
|
||||
formData.value = {};
|
||||
formData2.value = {};
|
||||
opMap.fuc = (params) => {
|
||||
delete params.roleId;
|
||||
delete params.proleId;
|
||||
return http.post(department.addRole, {
|
||||
...params,
|
||||
proleId: 4,
|
||||
orgId,
|
||||
projectId,
|
||||
enName: 'leader',
|
||||
roleNote: 'wqe',
|
||||
proleId: selectRef2.value.roleId,
|
||||
deptId: selectRef.value.deptInfo.deptId,
|
||||
});
|
||||
};
|
||||
};
|
||||
@@ -279,7 +279,7 @@
|
||||
onOk() {
|
||||
http.post(department.deptDel, { deptId: selectRef.value.deptInfo.deptId }).then(() => {
|
||||
getTree();
|
||||
clearData();
|
||||
clearApartData();
|
||||
});
|
||||
},
|
||||
onCancel() {
|
||||
@@ -295,20 +295,85 @@
|
||||
content: createVNode('div', { style: 'color:red;' }, ''),
|
||||
onOk() {
|
||||
http.post(department.delRole, { roleId: selectRef2.value.roleId }).then(() => {
|
||||
getUserTree();
|
||||
getUserTree({ deptId: selectRef.value.deptInfo.deptId });
|
||||
});
|
||||
},
|
||||
|
||||
class: 'test',
|
||||
});
|
||||
};
|
||||
const clearData = () => {
|
||||
|
||||
const clearApartData = () => {
|
||||
selectRef.value = {};
|
||||
formData.value = {};
|
||||
opMap.type = '';
|
||||
opMap.fuc = '';
|
||||
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 { selected } = info;
|
||||
@@ -317,12 +382,21 @@
|
||||
selectKey.value = selectedKeys[0];
|
||||
selectRef.value = info.node.dataRef;
|
||||
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.fuc = (params) => {
|
||||
return http.post(department.deptEdit, params);
|
||||
};
|
||||
|
||||
getUserTree({ deptId: selectRef.value.deptInfo.deptId });
|
||||
};
|
||||
|
||||
// 角色选择
|
||||
@@ -334,10 +408,15 @@
|
||||
selectKey2.value = selectedKeys[0];
|
||||
selectRef2.value = info.node.dataRef;
|
||||
formData2.value = cloneDeep(info.node.dataRef);
|
||||
roleChoose();
|
||||
UsercheckedKeys.value.splice(0);
|
||||
getRolePermission();
|
||||
};
|
||||
|
||||
const CancelApartment = () => {
|
||||
disabled.value = true;
|
||||
// 取消视为转入编辑状态
|
||||
// clearApartData();
|
||||
};
|
||||
|
||||
const CancelUser = () => {
|
||||
@@ -373,13 +452,15 @@
|
||||
opMap.fuc && opMap.fuc({ ...formData.value, selectRef: selectRef.value });
|
||||
}
|
||||
};
|
||||
|
||||
const UserSure = () => {
|
||||
disabled2.value = !disabled2.value;
|
||||
console.log(formData2.value, 'formData2');
|
||||
console.log(opMap.type, 'opMap.type');
|
||||
const typeArr = ['addUserSon', 'addUser'];
|
||||
const typeArr = ['addUserSon', 'addUser', 'editRole'];
|
||||
if (typeArr.includes(opMap.type)) {
|
||||
opMap.fuc && opMap.fuc(formData2.value);
|
||||
opMap.fuc &&
|
||||
opMap.fuc(formData2.value).then(() => {
|
||||
getUserTree();
|
||||
});
|
||||
} else if (selectRef2.value && opMap.type === 'addson')
|
||||
selectRef2.value['children'] = [
|
||||
{
|
||||
@@ -391,7 +472,6 @@
|
||||
else {
|
||||
console.log('ss');
|
||||
}
|
||||
formData2.value = {};
|
||||
};
|
||||
|
||||
return {
|
||||
@@ -424,6 +504,8 @@
|
||||
UsercheckedKeys,
|
||||
UserSelect,
|
||||
formRef,
|
||||
apartmentPermission,
|
||||
rolePermission,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
@@ -222,7 +222,7 @@
|
||||
headerActions: [
|
||||
{
|
||||
label: '新增',
|
||||
name: 'RoleTypeAdd',
|
||||
name: 'userAdd',
|
||||
type: 'primary',
|
||||
handle: () => {
|
||||
opMap.type = 'add';
|
||||
@@ -239,19 +239,19 @@
|
||||
{
|
||||
label: '导入',
|
||||
type: 'primary',
|
||||
name: 'RoleTypeAdd',
|
||||
name: 'userImport',
|
||||
handle: () => {},
|
||||
},
|
||||
{
|
||||
label: '模板下载',
|
||||
type: 'primary',
|
||||
name: 'RoleTypeAdd',
|
||||
name: 'userTemDownload',
|
||||
handle: () => {},
|
||||
},
|
||||
{
|
||||
label: '导出',
|
||||
type: 'primary',
|
||||
name: 'exports',
|
||||
name: 'userExports',
|
||||
},
|
||||
{
|
||||
label: '批量删除',
|
||||
@@ -345,7 +345,7 @@
|
||||
actions: [
|
||||
{
|
||||
label: '编辑',
|
||||
name: 'RoleTypeEdit',
|
||||
name: 'userEdit',
|
||||
// dynamicParams: 'uuid',
|
||||
handle: (record: any) => {
|
||||
userAuthList.value.splice(0);
|
||||
|
Reference in New Issue
Block a user