feat: 权限逻辑处理

This commit is contained in:
xuziqiang
2024-06-14 11:49:51 +08:00
parent 08972bfbfb
commit da3d5840df
9 changed files with 201 additions and 111 deletions

View File

@@ -12,7 +12,7 @@
<a-tree
v-if="apartmentTreeData?.length"
:tree-data="apartmentTreeData"
:checkedKeys="['0-0']"
v-model:checkedKeys="deptTreeCheckedKeys"
defaultExpandAll
@select="SelectApartmentTree">
<template #title="data">
@@ -29,8 +29,13 @@
:model="formData"
formLayout="vertical"
class="form" />
<!-- <ns-button style="margin: 16px" type="primary" @click="CancelApartment"
>取消
</ns-button>
<ns-button v-show="disabled" type="primary" @click="deptEdit">编辑</ns-button>
<ns-button v-show="!disabled" type="primary" @click="ApartmentSure">确定</ns-button> -->
</a-tab-pane>
<a-tab-pane key="2" :disabled="disabled" tab="部门权限">
<a-tab-pane key="2" :disabled="!selectKey?.length" tab="部门权限">
<a-tree
:tree-data="apartmentAdminTreeData"
:fieldNames="{ children: 'menus', title: 'label', key: 'permissionId' }"
@@ -38,21 +43,18 @@
checkable
:selectable="false"
defaultExpandAll
@check="deptCheck"
@select="ApartmentSelect">
<template #title="data"> {{ data.label }}</template>
</a-tree>
<ns-button style="margin-left: 16px" type="primary" @click="apartmentPermission"
>确定
</ns-button>
</a-tab-pane>
</a-tabs>
<div v-show="activeKey === '1'">
<ns-button style="margin: 16px" type="primary" @click="CancelApartment">取消</ns-button>
<ns-button v-show="disabled" type="primary" @click="deptEdit">编辑</ns-button>
<ns-button v-show="!disabled" type="primary" @click="ApartmentSure">确定</ns-button>
</div>
<div v-show="activeKey === '2'">
<ns-button style="margin-left: 16px" type="primary" @click="apartmentPermission"
>确定</ns-button
>
</div>
<ns-button style="margin: 16px" type="primary" @click="CancelApartment">取消 </ns-button>
<ns-button v-show="disabled" type="primary" @click="deptEdit">编辑</ns-button>
<ns-button v-show="!disabled" type="primary" @click="ApartmentSure">确定</ns-button>
</a-col>
</a-row>
</div>
@@ -60,7 +62,13 @@
<div class="ns-table-title">角色管理</div>
<a-row>
<a-col :span="12" class="tree">
<ns-button style="margin: 10px" type="primary" @click="addUser">新增角色</ns-button>
<ns-button
:disabled="!selectKey?.length"
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
@@ -83,31 +91,25 @@
:model="formData2"
formLayout="vertical"
class="form" />
<ns-button style="margin: 16px" type="primary" @click="CancelUser">取消</ns-button>
<ns-button v-show="disabled2" type="primary" @click="roleEdit"> 编辑 </ns-button>
<ns-button v-show="!disabled2" type="primary" @click="UserSure"> 确定 </ns-button>
</a-tab-pane>
<a-tab-pane key="2" :disabled="disabled2" tab="角色权限">
<a-tab-pane key="2" :disabled="!selectKey2?.length" 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
@check="roleCheck"
@select="UserSelect" />
<ns-button style="margin: 16px" type="primary" @click="rolePermission">
确定
</ns-button>
</a-tab-pane>
</a-tabs>
<div v-show="activeKey2 === '1'">
<ns-button style="margin: 16px" type="primary" @click="CancelUser">取消</ns-button>
<ns-button v-show="disabled2" type="primary" :disabled="disabled2" @click="UserSure">
确定</ns-button
>
<ns-button v-show="!disabled2" 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>
@@ -134,6 +136,7 @@
const activeKey2 = ref('1');
const disabled = ref(true);
const disabled2 = ref(true);
const deptTreeCheckedKeys = ref(['0-0-0']);
const ApartcheckedKeys = ref<string[]>([]);
const UsercheckedKeys = ref<string[]>([]);
const selectKey = ref();
@@ -148,9 +151,13 @@
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');
return http.post(permission.queryOrgPermission, params).then((res) => {
apartmentAdminTreeData.value = get(res, 'data');
});
};
const getRolePermissionTree = (params) => {
return http.post(permission.queryFilterDeptPermission, params).then((res) => {
userAdminTreeData.value = get(res, 'data');
});
};
@@ -165,16 +172,27 @@
// 部门树
const getDepartList = (params) => {
return http.post(department.dartList, 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;
});
return result;
});
};
getDepartList({ orgId }).then((res) => {
apartmentTreeData.value = res.data;
apartmentTreeData.value = res;
});
// 获取部门树
const getTree = () => {
getDepartList({ orgId }).then((res) => {
apartmentTreeData.value = res.data;
apartmentTreeData.value = res;
NsMessage.success('操作成功');
});
};
@@ -199,18 +217,19 @@
callback: null,
};
function fetch(api, params) {
return http.post(api, params);
}
const addApartment = () => {
disabled.value = false;
opMap.type = 'addDept';
formData.value = {};
let sourceOrgId = '';
if (!selectRef.value.own) {
sourceOrgId = orgId;
}
opMap.fuc = (params) => {
return http.post(department.deptSave, {
...params,
orgId,
orgId: selectRef.value.deptInfo?.orgId,
sourceOrgId,
projectId,
orgName,
});
@@ -222,13 +241,22 @@
disabled.value = false;
opMap.type = 'addson';
formData.value = {};
let sourceOrgId = '';
if (!selectRef.value.own) {
sourceOrgId = orgId;
}
opMap.fuc = (params) => {
if (!selectRef.value?.deptInfo?.deptId) {
NsMessage.warn('请选择部门');
return;
}
return http.post(department.deptSave, {
...params,
orgId,
projectId,
pdeptId: selectRef.value.deptInfo.deptId,
deptName: selectRef.value.deptInfo.deptName,
sourceOrgId,
// deptName: selectRef.value.deptInfo.deptName,
});
};
};
@@ -311,6 +339,58 @@
opMap.fuc = '';
selectKey.value = '';
};
const clearRoleData = () => {
selectRef2.value = {};
formData2.value = {};
opMap.type = '';
opMap.fuc = '';
selectKey2.value = '';
};
const deptTotalCheckedKeys = ref([]);
const roleTotalCheckedKeys = ref([]);
// 部门权限选择
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);
deptTotalCheckedKeys.value = finalResult;
};
// 角色权限选择
const roleCheck = (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);
roleTotalCheckedKeys.value = finalResult;
};
// 保存部门权限
const apartmentPermission = () => {
@@ -318,9 +398,7 @@
.post(department.addPermission, {
deptId: selectRef.value?.deptInfo.deptId,
projectId,
permissionVoList: ApartcheckedKeys.value.map((item) => {
return { permissionId: item };
}),
permissionVoList: deptTotalCheckedKeys.value,
})
.then(() => {
NsMessage.success('保存成功');
@@ -333,9 +411,7 @@
// deptId: selectRef.value?.deptInfo.deptId,
roleId: selectRef2.value?.roleId,
projectId,
permissionVoList: UsercheckedKeys.value.map((item) => {
return { permissionId: item };
}),
permissionVoList: roleTotalCheckedKeys.value,
})
.then(() => {
NsMessage.success('保存成功');
@@ -345,22 +421,28 @@
// 获取部门拥有的权限
const getDeptPermission = () => {
http
.post(department.queryDeptPermission, { deptId: selectRef.value?.deptInfo.deptId })
.post(permission.queryDeptPermission, { deptId: selectRef.value?.deptInfo.deptId })
.then((res) => {
ApartcheckedKeys.value = res.data.map((item) => {
return item.permissionId;
});
ApartcheckedKeys.value = res.data
?.filter((item) => !item.halfCheck)
.map((item) => {
return item.permissionId;
});
deptTotalCheckedKeys.value = res.data;
});
};
// 获取角色拥有的权限
const getRolePermission = () => {
http
.post(department.queryRolePermission, { roleId: selectRef2.value?.roleId })
.post(permission.queryRolePermission, { roleId: selectRef2.value?.roleId })
.then((res) => {
UsercheckedKeys.value = res.data.map((item) => {
return item.permissionId;
});
UsercheckedKeys.value = res.data
?.filter((item) => !item.halfCheck)
.map((item) => {
return item.permissionId;
});
roleTotalCheckedKeys.value = res.data;
});
};
@@ -377,6 +459,7 @@
// 部门编辑
const deptEdit = () => {
disabledTree();
disabled.value = false;
apartmentChoose();
};
@@ -404,24 +487,27 @@
* type editDpet
*/
const roleChoose = () => {
opMap.type = 'editDpet';
opMap.type = 'editRole';
opMap.fuc = (params) => {
return http.post(department.deptEdit, params);
return http.post(department.editRole, params);
};
};
const roleEdit = () => {
disabled2.value = false;
roleChoose();
};
// 角色选择
const SelectUserTree = (selectedKeys: any, info: any) => {
const { selected } = info;
disabled2.value = !selected;
console.log(selectedKeys, 'selectedKeys');
console.log(info, 'info');
// disabled2.value = !selected;
if (!selectedKeys?.length) return;
selectKey2.value = selectedKeys[0];
selectRef2.value = info.node.dataRef;
formData2.value = cloneDeep(info.node.dataRef);
roleChoose();
UsercheckedKeys.value.splice(0);
getRolePermission();
getRolePermissionTree({ deptId: selectRef.value.deptInfo.deptId });
};
const CancelApartment = () => {
@@ -452,6 +538,7 @@
opMap.fuc &&
opMap.fuc(formData.value).then(() => {
getTree();
clearApartData();
disabled.value = true;
});
} else if (opMap.type === 'deptDelete') {
@@ -466,6 +553,7 @@
opMap.fuc &&
opMap.fuc(formData2.value).then(() => {
getUserTree();
clearRoleData();
});
} else if (selectRef2.value && opMap.type === 'addson')
selectRef2.value['children'] = [
@@ -480,6 +568,13 @@
}
};
const disabledTree = (data, disabled) => {
console.log(userAdminTreeData.value, 'userAdminTreeData.value');
userAdminTreeData.value.map((item) => {
item['disabled'] = disabled;
});
};
return {
disabled,
disabled2,
@@ -513,6 +608,12 @@
apartmentPermission,
rolePermission,
deptEdit,
selectKey,
selectKey2,
deptTreeCheckedKeys,
deptCheck,
roleCheck,
roleEdit,
};
},
});