Files
SaaS-lib/hx-ai-intelligent/src/view/organizationManage/departmentManage/index.vue

842 lines
24 KiB
Vue
Raw Normal View History

2024-05-22 11:23:13 +08:00
<!-- @format -->
<template>
<div class="main">
<div class="left">
2024-06-26 10:32:45 +08:00
<div class="ns-table-title ns-title-extra-box">部门管理</div>
2024-05-22 11:23:13 +08:00
<a-row>
2024-06-26 10:32:45 +08:00
<a-col :span="8" class="tree">
2024-06-04 10:54:02 +08:00
<a-tree
2024-06-26 10:32:45 +08:00
ref="treeRef"
2024-06-19 15:20:04 +08:00
v-if="deptTreeData?.length"
:tree-data="deptTreeData"
:selectedKeys="deptTreeSelectedKeys"
2024-06-26 10:32:45 +08:00
blockNode
2024-06-04 10:54:02 +08:00
defaultExpandAll
@select="SelectApartmentTree">
<template #title="data">
2024-06-26 10:32:45 +08:00
<div style="display: flex; justify-content: space-between; align-items: center">
<span>{{ data.deptInfo?.deptName }}</span>
<a-dropdown>
<ns-icon name="actionMore" size="14" class="actionMore" />
<template #overlay>
<a-menu>
<a-menu-item
v-for="(action, index) in filterAction(data, dropActions)"
:key="index"
@click="action.func(data)">
<span>{{ action.title }}</span>
</a-menu-item>
</a-menu>
</template>
</a-dropdown>
</div>
2024-05-22 11:23:13 +08:00
</template>
</a-tree>
2024-06-26 10:32:45 +08:00
<a-empty style="margin-top: 120px" v-else />
2024-05-22 11:23:13 +08:00
</a-col>
2024-06-26 10:32:45 +08:00
<a-col :span="16" class="list">
<div class="pane">
<a-tabs v-model:activeKey="activeKey">
<a-tab-pane :key="1" tab="部门信息">
<ns-form
ref="formRef"
:schemas="formSchema"
:wrapperCol="{ span: 19 }"
:labelCol="{ span: 5 }"
:model="formData"
formLayout="vertical"
class="form" />
</a-tab-pane>
<a-tab-pane :key="2" :disabled="selectRef?.hasOwnProperty('orgInfo')" tab="部门权限">
<a-tree
v-if="deptPermissionTreeData?.length"
:tree-data="deptPermissionTreeData"
:fieldNames="{ children: 'menus', title: 'label', key: 'permissionId' }"
v-model:checkedKeys="deptcheckedKeys"
checkable
:selectable="false"
defaultExpandAll
@check="deptCheck">
<template #title="data"> {{ data.label }}</template>
</a-tree>
<a-empty style="margin-top: 120px" v-else />
</a-tab-pane>
</a-tabs>
<a-space v-if="activeKey === 1 || deptPermissionTreeData?.length">
<ns-button type="primary" @click="CancelApartment">取消 </ns-button>
<ns-button v-show="disabled" type="primary" @click="pipe(deptEdit, true, false)">
编辑
</ns-button>
<ns-button v-show="!disabled" type="primary" @click="deptSure">确定</ns-button>
</a-space>
</div>
2024-05-22 16:31:55 +08:00
</a-col>
</a-row>
</div>
<div class="right">
2024-06-26 10:32:45 +08:00
<div class="ns-table-title ns-title-extra-box">角色管理</div>
2024-05-22 16:31:55 +08:00
<a-row>
2024-06-26 10:32:45 +08:00
<a-col :span="8" class="tree">
<a-space wrap style="margin-bottom: 16px">
<ns-button type="primary" @click="rolePipe(addUser, true)"> 新增角色 </ns-button>
<ns-button type="primary" @click="rolePipe(addUserSon)">新增子角色</ns-button>
<ns-button type="primary" @click="rolePipe(deleteUser)"> 删除 </ns-button>
</a-space>
2024-06-04 19:22:11 +08:00
<a-tree
2024-06-19 15:20:04 +08:00
v-if="roleTreeData.length"
:tree-data="roleTreeData"
:selectedKeys="roleTreeSelectedKeys"
2024-06-26 10:32:45 +08:00
blockNode
2024-06-04 19:22:11 +08:00
defaultExpandAll
@select="SelectUserTree">
2024-06-04 10:54:02 +08:00
<template #title="data">
2024-06-26 10:32:45 +08:00
<div style="display: flex; justify-content: space-between; align-items: center">
<span> {{ data.zhName }}</span>
<!-- <a-dropdown>
<ns-icon name="actionMore" size="14" class="actionMore" />
<template #overlay>
<a-menu>
<a-menu-item
v-for="(action, index) in dropRoleActions"
:key="index"
@click="action.func(data)">
<span>{{ action.title }}</span>
</a-menu-item>
</a-menu>
</template>
</a-dropdown> -->
</div>
2024-05-22 16:31:55 +08:00
</template>
</a-tree>
2024-06-26 10:32:45 +08:00
<a-empty style="margin-top: 120px" v-else />
2024-05-22 16:31:55 +08:00
</a-col>
2024-06-26 10:32:45 +08:00
<a-col :span="16" class="list">
<div class="pane">
<a-tabs v-model:activeKey="roleActiveKey">
<a-tab-pane :key="1" tab="角色信息">
<ns-form
ref="formRoleRef"
:schemas="formSchema2"
:model="roleFormData"
:labelCol="{ span: 5 }"
:wrapperCol="{ span: 19 }"
formLayout="vertical"
class="form" />
</a-tab-pane>
<a-tab-pane :key="2" tab="角色权限">
<a-tree
v-if="rolePermissionTreeData?.length"
:tree-data="rolePermissionTreeData"
v-model:checkedKeys="roleCheckedKeys"
defaultExpandAll
:fieldNames="{ children: 'menus', title: 'label', key: 'permissionId' }"
:selectable="false"
checkable
@check="roleCheck" />
<a-empty style="margin-top: 120px" v-else />
</a-tab-pane>
</a-tabs>
<a-space v-if="activeKey === 1 || rolePermissionTreeData?.length">
<ns-button type="primary" @click="CancelUser">取消</ns-button>
<ns-button
v-show="roleDisabled"
type="primary"
@click="rolePipe(roleEdit, false, false)">
编辑
</ns-button>
<ns-button v-show="!roleDisabled" type="primary" @click="roleSure"> 确定 </ns-button>
</a-space>
</div>
2024-05-22 11:23:13 +08:00
</a-col>
</a-row>
</div>
</div>
</template>
2024-06-14 18:27:07 +08:00
<script lang="ts" setup>
import { createVNode, ref, watchEffect } from 'vue';
2024-05-22 16:31:55 +08:00
import { Modal } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
2024-05-22 11:23:13 +08:00
import { http } from '/nerv-lib/util/http';
2024-06-07 14:14:21 +08:00
import { cloneDeep, get } from 'lodash-es';
2024-05-28 11:08:57 +08:00
import { formConfig, formConfig2 } from './config';
2024-06-04 10:54:02 +08:00
import { department } from '/@/api/origanizemanage';
2024-06-04 19:22:11 +08:00
import { permission } from '/@/api/origanizemanage';
import { NsMessage } from '/nerv-lib/component';
2024-06-04 10:54:02 +08:00
2024-06-14 18:27:07 +08:00
defineOptions({
2024-05-24 09:44:08 +08:00
name: 'AuthorityManageIndex',
2024-06-14 18:27:07 +08:00
});
2024-06-07 14:14:21 +08:00
2024-06-14 18:27:07 +08:00
const formRef = ref();
const formRoleRef = ref();
let formData = ref({});
let roleFormData = ref({});
const activeKey = ref(1);
const roleActiveKey = ref(1);
const disabled = ref(true);
const roleDisabled = ref(true);
2024-06-19 15:20:04 +08:00
const deptTreeSelectedKeys = ref([]);
const roleTreeSelectedKeys = ref([]);
const deptcheckedKeys = ref<string[]>([]);
const roleCheckedKeys = ref<string[]>([]);
2024-06-14 18:27:07 +08:00
const currentOrgRef = ref();
const selectKey = ref();
const selectRef = ref();
const selectRoleKey = ref();
const selectRoleRef = ref();
const formSchema = formConfig(disabled as any);
const formSchema2 = formConfig2(roleDisabled as any);
2024-06-19 15:20:04 +08:00
const { orgName, projectId, orgId } = JSON.parse(sessionStorage.getItem('userInfo'));
// const orgId = JSON.parse(sessionStorage.getItem('ORGID'));
const roleTreeData = ref([]);
const rolePermissionTreeData = ref([]);
const deptTreeData = ref([]);
const deptPermissionTreeData = ref([]);
2024-06-14 18:27:07 +08:00
// 包含半选状态的权限数据
const deptTotalCheckedKeys = ref([]);
const roleTotalCheckedKeys = ref([]);
// 禁用权限树
const disabledTree = (data, disabled = true) => {
data.map((item) => {
item['disabled'] = disabled;
if (item.menus) {
disabledTree(item.menus, disabled);
}
});
};
watchEffect(() => {
2024-06-19 15:20:04 +08:00
disabledTree(deptPermissionTreeData.value, disabled.value);
disabledTree(rolePermissionTreeData.value, roleDisabled.value);
2024-06-14 18:27:07 +08:00
});
2024-05-24 09:44:08 +08:00
2024-06-14 18:27:07 +08:00
/**操作拦截 */
2024-06-19 15:20:04 +08:00
const pipe = (func: Function, flag = false, toggle = true) => {
if (toggle) activeKey.value = 1;
if (flag) {
// 只有部门的操作
if (selectRef.value?.hasOwnProperty('orgInfo') || !selectRef.value?.deptInfo) {
NsMessage.error('请先选择相关部门');
return;
}
} else {
if (!selectRef.value?.hasOwnProperty('orgInfo')) {
NsMessage.error('请先选择相关企业');
return;
}
2024-06-14 18:27:07 +08:00
}
2024-06-19 15:20:04 +08:00
2024-06-14 18:27:07 +08:00
func && func();
};
2024-06-19 15:20:04 +08:00
const rolePipe = (func: Function, linkDept = false, toggle = true) => {
2024-06-14 18:27:07 +08:00
console.log(selectRoleRef.value);
2024-06-19 15:20:04 +08:00
if (toggle) roleActiveKey.value = 1;
2024-06-14 18:27:07 +08:00
// 需要先选择部门
if ((linkDept && !selectRef.value?.deptInfo) || selectRef.value?.hasOwnProperty('own')) {
NsMessage.error('请先选择相关部门');
return;
}
if (!linkDept && !selectRoleRef.value) {
NsMessage.error('请先选择相关角色');
return;
}
func && func();
};
/**操作拦截 */
2024-06-19 18:23:49 +08:00
// 部门权限树
2024-06-14 18:27:07 +08:00
const getPermissionTree = (params) => {
return http.post(permission.queryOrgPermission, params).then((res) => {
2024-06-19 15:20:04 +08:00
deptPermissionTreeData.value = get(res, 'data');
2024-06-14 18:27:07 +08:00
});
};
2024-06-19 18:23:49 +08:00
// 子级部门权限树
const getDeptsonPermissionTree = (params) => {
return http.post(permission.queryDeptPermissionFilter, params).then((res) => {
deptPermissionTreeData.value = get(res, 'data');
});
};
// 角色权限树
2024-06-14 18:27:07 +08:00
const getRolePermissionTree = (params) => {
return http.post(permission.queryFilterDeptPermission, params).then((res) => {
2024-06-19 15:20:04 +08:00
rolePermissionTreeData.value = get(res, 'data');
2024-06-14 18:27:07 +08:00
});
};
2024-06-19 18:23:49 +08:00
// 子级角色权限树
const getRolesonPermissionTree = (params) => {
return http.post(permission.queryRolePermissionFilter, params).then((res) => {
rolePermissionTreeData.value = get(res, 'data');
});
};
2024-06-14 18:27:07 +08:00
getPermissionTree({ projectId, orgId });
2024-06-26 10:32:45 +08:00
// 选中自己的第一个部门
const initDept = () => {
if (!deptTreeData.value?.length || !deptTreeData.value[0]?.children?.length) return;
const info = {
node: { key: '0-0-0', dataRef: { deptInfo: deptTreeData.value[0]?.children[0].deptInfo } },
};
SelectApartmentTree(['0-0-0'], info);
};
2024-06-14 18:27:07 +08:00
// 部门树
const getDepartList = (params) => {
return http.post(department.queryDeptTree, params).then((res) => {
const result = res.data.map((item, index) => {
item['deptInfo'] = item.orgInfo;
item['deptInfo'] = item.orgInfo;
item['deptInfo']['deptName'] = item?.orgInfo?.orgName;
item['own'] = !index;
item['children'] = item.deptTrees;
return item;
2024-06-04 19:22:11 +08:00
});
2024-05-24 09:44:08 +08:00
2024-06-14 18:27:07 +08:00
return result;
});
};
getDepartList({ orgId }).then((res) => {
2024-06-19 15:20:04 +08:00
deptTreeData.value = res;
2024-06-26 10:32:45 +08:00
initDept();
2024-06-14 18:27:07 +08:00
});
2024-06-14 11:49:51 +08:00
2024-06-14 18:27:07 +08:00
// 获取部门树
const getTree = () => {
getDepartList({ orgId }).then((res) => {
2024-06-19 15:20:04 +08:00
deptTreeData.value = res;
2024-06-14 18:27:07 +08:00
NsMessage.success('操作成功');
});
};
// 获取角色树
const getUserTree = (params = { deptId: selectRef.value?.deptInfo?.deptId }) => {
2024-06-26 10:32:45 +08:00
return http.post(department.queryRoleTree, params).then((res) => {
2024-06-19 15:20:04 +08:00
roleTreeData.value = res.data;
2024-06-14 18:27:07 +08:00
});
};
// 根据依赖刷新角色树
watchEffect(() => {
if (selectRef.value) {
2024-06-26 10:32:45 +08:00
getUserTree().then(() => {
return;
if (!roleTreeData.value?.length) {
selectRoleRef.value = {};
roleFormData.value = {};
}
const info = {
node: { key: '0-0', dataRef: { ...roleTreeData.value[0] } },
};
SelectUserTree(['0-0'], info);
});
2024-06-14 18:27:07 +08:00
}
});
2024-06-04 19:22:11 +08:00
2024-06-14 18:27:07 +08:00
const opMap: any = {
type: 'add',
fuc: () => {},
record: {},
callback: null,
};
2024-06-26 10:32:45 +08:00
const addApartment = (data) => {
const { deptInfo } = data;
2024-06-14 18:27:07 +08:00
disabled.value = false;
opMap.type = 'addDept';
formData.value = {};
let sourceOrgId = '';
2024-06-26 10:32:45 +08:00
if (deptInfo.orgId !== orgId) {
// 此处为给关联企业加部门
2024-06-14 18:27:07 +08:00
sourceOrgId = orgId;
}
opMap.fuc = (params) => {
return formRef.value.triggerSubmit().then(() => {
return http.post(department.deptSave, {
...params,
2024-06-26 10:32:45 +08:00
orgId: deptInfo?.orgId,
2024-06-14 18:27:07 +08:00
sourceOrgId,
projectId,
orgName,
2024-06-04 19:22:11 +08:00
});
2024-06-14 18:27:07 +08:00
});
};
};
const addApartmentSon = () => {
disabled.value = false;
opMap.type = 'addson';
formData.value = {};
let sourceOrgId = '';
2024-06-19 18:23:49 +08:00
if (!currentOrgRef.value?.own && orgId !== selectRef.value.deptInfo?.orgId) {
2024-06-14 18:27:07 +08:00
sourceOrgId = orgId;
}
opMap.fuc = (params) => {
return formRef.value.triggerSubmit().then(() => {
return http.post(department.deptSave, {
...params,
orgId,
projectId,
pdeptId: selectRef.value.deptInfo.deptId,
sourceOrgId,
// deptName: selectRef.value.deptInfo.deptName,
2024-06-04 19:22:11 +08:00
});
2024-06-06 16:56:34 +08:00
});
2024-06-14 18:27:07 +08:00
};
};
const addUser = () => {
roleDisabled.value = false;
opMap.type = 'addUser';
roleFormData.value = {};
opMap.fuc = (params) => {
delete params.roleId;
return formRoleRef.value.triggerSubmit().then(() => {
return http.post(department.addRole, {
...params,
orgId,
projectId,
deptId: selectRef.value.deptInfo.deptId,
deptName: selectRef.value.deptInfo.deptName,
});
2024-06-14 18:27:07 +08:00
});
};
};
const addUserSon = () => {
roleDisabled.value = false;
opMap.type = 'addUserSon';
roleFormData.value = {};
opMap.fuc = (params) => {
delete params.roleId;
return formRoleRef.value.triggerSubmit().then(() => {
return http.post(department.addRole, {
...params,
orgId,
projectId,
proleId: selectRoleRef.value.roleId,
deptId: selectRef.value.deptInfo.deptId,
deptName: selectRef.value.deptInfo.deptName,
});
2024-06-14 18:27:07 +08:00
});
};
};
2024-06-26 10:32:45 +08:00
const deleteDept = (data) => {
console.log(data);
2024-06-14 18:27:07 +08:00
// 删除逻辑
Modal.confirm({
title: '是否确认删除',
onOk() {
2024-06-26 10:32:45 +08:00
http.post(department.deptDel, { deptId: data.deptInfo.deptId }).then(() => {
2024-06-14 18:27:07 +08:00
getTree();
clearDeptData();
2024-06-19 15:20:04 +08:00
// 清空select树
2024-06-26 10:32:45 +08:00
if (data.selected) {
// 删除选中的数据需要清空
deptTreeSelectedKeys.value = [];
selectRef.value = '';
}
2024-05-22 16:31:55 +08:00
});
2024-06-14 18:27:07 +08:00
},
onCancel() {
console.log('Cancel');
},
});
};
const deleteUser = () => {
Modal.confirm({
title: '是否确认删除',
onOk() {
http.post(department.delRole, { roleId: selectRoleRef.value.roleId }).then(() => {
getUserTree({ deptId: selectRef.value.deptInfo.deptId });
2024-06-19 15:20:04 +08:00
clearRoleData();
// 清空select树
roleTreeSelectedKeys.value = [];
selectRoleRef.value = '';
NsMessage.success('操作成功');
2024-05-22 16:31:55 +08:00
});
2024-06-14 18:27:07 +08:00
},
});
};
2024-06-19 15:20:04 +08:00
watchEffect(() => {
console.log(deptTreeSelectedKeys.value, 'deptTreeData.value');
});
2024-06-14 18:27:07 +08:00
const clearDeptData = () => {
formData.value = {};
opMap.type = '';
opMap.fuc = '';
};
const clearRoleData = () => {
roleFormData.value = {};
opMap.type = '';
opMap.fuc = '';
};
// 部门权限选择
const deptCheck = (checked, { halfCheckedKeys }) => {
console.log(checked, halfCheckedKeys);
const result = checked.map((item) => {
return {
halfCheck: false,
permissionId: item,
};
});
const finalResult = halfCheckedKeys
.map((item) => {
return {
halfCheck: true,
permissionId: item,
};
})
.concat(result);
2024-06-07 14:14:21 +08:00
2024-06-14 18:27:07 +08:00
deptTotalCheckedKeys.value = finalResult;
};
2024-06-14 11:49:51 +08:00
2024-06-14 18:27:07 +08:00
// 角色权限选择
const roleCheck = (checked, { halfCheckedKeys }) => {
console.log(checked, halfCheckedKeys);
2024-06-14 11:49:51 +08:00
2024-06-14 18:27:07 +08:00
const result = checked.map((item) => {
return {
halfCheck: false,
permissionId: item,
};
});
const finalResult = halfCheckedKeys
.map((item) => {
return {
halfCheck: true,
permissionId: item,
};
})
.concat(result);
roleTotalCheckedKeys.value = finalResult;
};
// 保存部门权限
const deptPermission = () => {
return http
.post(department.addPermission, {
deptId: selectRef.value?.deptInfo.deptId,
projectId,
permissionVoList: deptTotalCheckedKeys.value,
})
.then(() => {
NsMessage.success('保存成功');
});
};
// 保存角色权限
const rolePermission = () => {
http
.post(department.addRolePermission, {
// deptId: selectRef.value?.deptInfo.deptId,
roleId: selectRoleRef.value?.roleId,
projectId,
permissionVoList: roleTotalCheckedKeys.value,
})
.then(() => {
NsMessage.success('保存成功');
});
};
// 获取部门拥有的权限
const getDeptPermission = () => {
http
.post(permission.queryDeptPermission, { deptId: selectRef.value?.deptInfo.deptId })
.then((res) => {
2024-06-19 15:20:04 +08:00
deptcheckedKeys.value = res.data
2024-06-14 18:27:07 +08:00
?.filter((item) => !item.halfCheck)
2024-06-14 11:49:51 +08:00
.map((item) => {
2024-06-14 18:27:07 +08:00
return item.permissionId;
2024-06-07 14:14:21 +08:00
});
2024-06-14 18:27:07 +08:00
deptTotalCheckedKeys.value = res.data;
});
};
// 获取角色拥有的权限
const getRolePermission = () => {
http
.post(permission.queryRolePermission, { roleId: selectRoleRef.value?.roleId })
.then((res) => {
2024-06-19 15:20:04 +08:00
roleCheckedKeys.value = res.data
2024-06-14 18:27:07 +08:00
?.filter((item) => !item.halfCheck)
.map((item) => {
return item.permissionId;
2024-06-07 14:14:21 +08:00
});
2024-06-14 18:27:07 +08:00
roleTotalCheckedKeys.value = res.data;
});
};
/**
* 默认选中视为编辑部门
* type editDpet
*/
const apartmentChoose = () => {
opMap.type = 'editDpet';
opMap.fuc = (params) => {
return http.post(department.deptEdit, params);
};
};
// 部门编辑
const deptEdit = () => {
disabled.value = false;
apartmentChoose();
};
// 部门选择
const SelectApartmentTree = (selectedKeys: any, info: any) => {
console.log(info);
// 部门切换需要调整角色tab
roleActiveKey.value = 1;
const { selected } = info;
if (!selectedKeys?.length) return;
2024-06-19 15:20:04 +08:00
deptTreeSelectedKeys.value = [info.node.key];
2024-06-14 18:27:07 +08:00
selectRef.value = info.node.dataRef;
// 确定是否是企业
2024-06-19 18:23:49 +08:00
if (!selectRef.value.hasOwnProperty('own') && !selectRef.value.hasOwnProperty('orgInfo')) {
// 部门
2024-06-14 18:27:07 +08:00
formData.value = cloneDeep(info.node.dataRef.deptInfo);
} else {
2024-06-19 15:20:04 +08:00
activeKey.value = 1;
2024-06-14 18:27:07 +08:00
currentOrgRef.value = selectRef.value;
formData.value = {};
}
2024-06-19 18:23:49 +08:00
if (selectRef.value.deptInfo?.pdeptId) {
// 查询子部门
getDeptsonPermissionTree({ deptId: selectRef.value.deptInfo?.pdeptId });
} else {
getPermissionTree({ projectId, orgId });
}
2024-06-14 18:27:07 +08:00
getDeptPermission();
2024-06-19 18:23:49 +08:00
// 切换部门重置逻辑
2024-06-19 15:20:04 +08:00
deptcheckedKeys.value = [];
2024-06-19 18:23:49 +08:00
rolePermissionTreeData.value = [];
roleCheckedKeys.value = [];
roleTreeSelectedKeys.value = [];
2024-06-14 18:27:07 +08:00
};
/**
* 默认选中视为编辑角色
* type editDpet
*/
const roleChoose = () => {
opMap.type = 'editRole';
opMap.fuc = (params) => {
return http.post(department.editRole, params);
};
};
const roleEdit = () => {
roleDisabled.value = false;
roleChoose();
};
// 角色选择
const SelectUserTree = (selectedKeys: any, info: any) => {
const { selected } = info;
// roleDisabled.value = !selected;
if (!selectedKeys?.length) return;
2024-06-19 15:20:04 +08:00
roleTreeSelectedKeys.value = [info.node.key];
2024-06-14 18:27:07 +08:00
selectRoleRef.value = info.node.dataRef;
roleFormData.value = cloneDeep(info.node.dataRef);
2024-06-19 15:20:04 +08:00
roleCheckedKeys.value = [];
2024-06-19 18:23:49 +08:00
if (selectRoleRef.value?.proleId) {
// 查询子部门
getRolesonPermissionTree({ roleId: selectRoleRef.value?.proleId });
} else {
getRolePermissionTree({ deptId: selectRef.value.deptInfo.deptId });
}
2024-06-14 18:27:07 +08:00
getRolePermission();
};
const CancelApartment = () => {
disabled.value = true;
// 清楚校验错误信息
formRef.value.formElRef.clearValidate();
2024-06-14 18:27:07 +08:00
};
const CancelUser = () => {
roleDisabled.value = true;
// 清楚校验错误信息
formRoleRef.value.formElRef.clearValidate();
2024-06-14 18:27:07 +08:00
};
// 部门确定
const deptSure = () => {
const opArr = ['addDept', 'editDpet', 'addson'];
if (activeKey.value === 1) {
if (opArr.includes(opMap.type)) {
console.log(formRef.value, formData);
opMap.fuc &&
opMap.fuc(formData.value).then(() => {
getTree();
2024-06-19 15:20:04 +08:00
opMap.type !== 'editDpet' && clearDeptData();
2024-06-14 18:27:07 +08:00
disabled.value = true;
2024-06-07 14:14:21 +08:00
});
2024-06-14 18:27:07 +08:00
}
} else {
deptPermission().then(() => {
clearDeptData();
2024-05-24 09:44:08 +08:00
disabled.value = true;
2024-06-14 18:27:07 +08:00
});
}
};
// 角色确定
2024-06-19 15:20:04 +08:00
const roleSure = () => {
2024-06-14 18:27:07 +08:00
const typeArr = ['addUserSon', 'addUser', 'editRole'];
if (roleActiveKey.value === 1) {
if (typeArr.includes(opMap.type)) {
opMap.fuc &&
opMap.fuc(roleFormData.value).then(() => {
getUserTree();
2024-06-19 15:20:04 +08:00
opMap.type !== 'editRole' && clearRoleData();
roleDisabled.value = !roleDisabled.value;
2024-06-19 15:20:04 +08:00
NsMessage.success('操作成功');
2024-06-14 18:27:07 +08:00
});
}
} else {
rolePermission();
}
};
2024-06-26 10:32:45 +08:00
// 部门区域的dropdown
const dropActions = ref([
{ title: '新增部门', func: addApartment, key: 'addDept' },
{ title: '新增子部门', func: addApartmentSon, key: 'addDeptSon' },
{ title: '删除', func: deleteDept, key: 'deleteDept' },
// { title: '新增角色', func: addUser, key: 'addUser' },
]);
const filterAction = (data, actions) => {
if (data.hasOwnProperty('orgInfo')) {
// 企业节点
return actions.filter(({ key }) => key === 'addDept');
}
return actions;
};
// 角色区域的dropdown
const dropRoleActions = ref([
{ title: '新增角色', func: addUser, key: 'addUser' },
{ title: '新增子角色', func: addUserSon, key: 'addUserSon' },
{ title: '删除', func: deleteUser, key: 'deleteUser' },
]);
const treeRef = ref();
console.log(treeRef);
2024-05-22 11:23:13 +08:00
</script>
2024-06-14 18:27:07 +08:00
<style lang="less" scoped>
2024-06-26 10:32:45 +08:00
:deep(.ns-form::after) {
display: none;
}
.actionMore {
display: none;
}
:deep(.ant-row) {
height: calc(100% - 44px);
}
:deep(.ant-tree-node-content-wrapper) {
&:hover {
.actionMore {
display: block;
}
}
}
:deep(.ant-tabs-nav-wrap) {
padding: 0;
}
2024-06-14 18:27:07 +08:00
:deep(.ant-tabs-tabpane) {
2024-06-26 10:32:45 +08:00
padding-top: @ns-gap;
2024-06-14 18:27:07 +08:00
.form {
margin: 0 !important;
}
}
2024-06-26 10:32:45 +08:00
:deep(.ant-space) {
justify-content: flex-end;
}
2024-06-14 18:27:07 +08:00
2024-05-22 11:23:13 +08:00
.main {
display: flex;
2024-06-26 10:32:45 +08:00
height: 100%;
background-color: @ns-content-bg;
> div:first-child {
margin-right: @ns-gap;
}
2024-05-22 11:23:13 +08:00
}
2024-06-04 19:22:11 +08:00
2024-06-26 10:32:45 +08:00
.left,
.right {
2024-05-22 11:23:13 +08:00
width: 50%;
2024-06-26 10:32:45 +08:00
height: 100%;
padding: @ns-gap;
background-color: @white;
border-radius: @ns-border-radius;
box-shadow: @ns-content-box-shadow;
2024-05-22 11:23:13 +08:00
}
2024-06-04 19:22:11 +08:00
2024-05-22 16:31:55 +08:00
.tree {
2024-06-26 10:32:45 +08:00
height: 100%;
overflow: hidden;
overflow-y: auto;
border-radius: @ns-border-radius;
border: 1px solid #ebeef5;
padding: 16px;
2024-05-22 11:23:13 +08:00
}
2024-06-26 10:32:45 +08:00
.list {
padding-left: @ns-gap;
height: 100%;
.pane {
padding-left: @ns-gap;
border-left: 1px solid #ebeef5;
height: 100%;
display: flex;
flex-direction: column;
justify-content: space-between;
:deep(.ant-tabs-content) {
height: 100%;
.ant-tree {
height: 100%;
overflow-y: scroll;
}
}
}
2024-05-22 11:23:13 +08:00
}
2024-06-04 19:22:11 +08:00
2024-05-22 11:23:13 +08:00
.ns-table-title {
text-align: left;
2024-06-26 10:32:45 +08:00
font-size: 16px;
2024-05-22 11:23:13 +08:00
font-weight: bold;
user-select: text;
width: 100%;
2024-06-26 10:32:45 +08:00
margin-bottom: @ns-gap;
2024-05-22 11:23:13 +08:00
}
2024-06-04 19:22:11 +08:00
2024-05-22 11:23:13 +08:00
.admin {
text-align: left;
height: 42px;
line-height: 42px;
font-size: 16px;
font-weight: bold;
user-select: text;
padding-left: 16px;
width: calc(100% + 32px);
}
2024-06-04 19:22:11 +08:00
2024-05-22 11:23:13 +08:00
.form {
2024-05-22 17:43:25 +08:00
margin: 20px;
2024-05-22 11:23:13 +08:00
}
</style>