|
@@ -1,7 +1,7 @@
|
|
|
/*
|
|
|
* @Author: your name
|
|
|
* @Date: 2022-01-13 15:22:48
|
|
|
- * @LastEditTime: 2023-03-23 15:48:17
|
|
|
+ * @LastEditTime: 2023-03-24 10:34:30
|
|
|
* @LastEditors: code4eat awesomedema@gmail.com
|
|
|
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
|
|
* @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/hospManage/index.tsx
|
|
@@ -22,7 +22,7 @@ import { createFromIconfontCN, DownOutlined } from '@ant-design/icons';
|
|
|
|
|
|
|
|
|
import { CheckboxValueType } from 'antd/lib/checkbox/Group';
|
|
|
-import { getDeepestTreeData } from '@/utils';
|
|
|
+import { getDeepestTreeData, uniqueFunc } from '@/utils';
|
|
|
import { DrawerForm } from '@ant-design/pro-form';
|
|
|
import { DataNode } from 'antd/es/tree';
|
|
|
|
|
@@ -30,6 +30,7 @@ import expandedIcon from '../../../../../public/images/treenode_open.png';
|
|
|
import closeIcon from '../../../../../public/images/treenode_collapse.png';
|
|
|
import DirectoryTree from 'antd/es/tree/DirectoryTree';
|
|
|
import { getTreeData, getTreeDataRespType } from '../systemNavMana/service';
|
|
|
+import { getHospOwnSys } from '@/service/hospList';
|
|
|
|
|
|
export enum TableActType {
|
|
|
NOACT,
|
|
@@ -142,13 +143,12 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
|
|
|
const [checkBoxCodes, set_checkBoxCodes] = useState<any[]>([]);
|
|
|
|
|
|
- const [needCancelCheckedMenus,set_needCancelCheckedMenus] = useState<any[]>([]);
|
|
|
-
|
|
|
-
|
|
|
const [drawerTableDataSearchKeywords, set_drawerTableDataSearchKeywords] = useState<string>('');
|
|
|
|
|
|
const [checkedTableMenuIds, set_checkedTableMenuIds] = useState<any[]>([]);
|
|
|
|
|
|
+ const [oldSelectedMenuIds,set_oldSelectedMenuIds] = useState<any[]>([]);
|
|
|
+
|
|
|
const columnsData: ProColumns<TableListItem>[] = [
|
|
|
{
|
|
|
title: '名称',
|
|
@@ -253,8 +253,8 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
},
|
|
|
];
|
|
|
|
|
|
- const getTreeReqFunc = async (name?: string) => {
|
|
|
- const resp = await getTreeData();
|
|
|
+ const getTreeReqFunc = async (hospId: string) => {
|
|
|
+ const resp = await getHospOwnSys(hospId);
|
|
|
set_treeData(resp);
|
|
|
}
|
|
|
|
|
@@ -320,9 +320,9 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
|
|
|
|
|
|
const getTableData = async (params: any, sort: any, filter: any) => {
|
|
|
-
|
|
|
+
|
|
|
set_drawerTablereload(false);
|
|
|
- if (currentSelectedTreeNode) {
|
|
|
+ if (currentSelectedTreeNode&&record.hospId&&record.roleId) {
|
|
|
// console.log({params,record});
|
|
|
const resp = await getRolePermRelaMenu({ ...params, hospId: record.hospId,roleId:record.roleId});
|
|
|
if (resp) {
|
|
@@ -344,13 +344,14 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
}
|
|
|
|
|
|
});
|
|
|
-
|
|
|
- set_checkBoxCodes(temp);
|
|
|
- set_checkedTableMenuIds(temp.map((a: any) => a.menuId));
|
|
|
- return data;
|
|
|
}
|
|
|
|
|
|
- setTreeRecursion(resp)
|
|
|
+ setTreeRecursion(resp);
|
|
|
+
|
|
|
+ set_checkBoxCodes(temp);
|
|
|
+
|
|
|
+ set_checkedTableMenuIds(temp.map((a: any) => a.menuId));
|
|
|
+ set_oldSelectedMenuIds(temp.map((a: any) => a.menuId));
|
|
|
|
|
|
return {
|
|
|
data: resp,
|
|
@@ -363,22 +364,34 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
}
|
|
|
}
|
|
|
return []
|
|
|
+
|
|
|
}
|
|
|
|
|
|
const saveResult = async () => {
|
|
|
- const needCancelMenus = needCancelCheckedMenus.map(a=>({hospId: record.id ,systemId: currentSelectedTreeNode.code,function:[],menuId:a}));
|
|
|
- const result = checkBoxCodes.map((item: any) => ({ ...item, hospId: record.hospId,roleId:record.roleId,systemId: currentSelectedTreeNode.code }));
|
|
|
|
|
|
+ let old = oldSelectedMenuIds;
|
|
|
+ //const needCancelMenus = needCancelCheckedMenus.map(a=>({hospId: record.id ,systemId: currentSelectedTreeNode.code,function:[],menuId:a}));
|
|
|
+ const result = checkBoxCodes.map((item: any) => {
|
|
|
+ old.splice(old.findIndex(a=>a == item.menuId),1);
|
|
|
+ return { ...item, hospId: record.hospId,roleId:record.roleId,systemId: currentSelectedTreeNode.code }
|
|
|
+ });
|
|
|
+
|
|
|
+
|
|
|
+ const needCancelMenus = old.map(a => ({
|
|
|
+ hospId: record.hospId,
|
|
|
+ systemId: currentSelectedTreeNode.code,
|
|
|
+ menuId:a,
|
|
|
+ roleId:record.roleId, function: [],
|
|
|
+ }));
|
|
|
+
|
|
|
const data = [...result, ...needCancelMenus];
|
|
|
|
|
|
- function uniqueFunc(arr:any[], uniId:string){
|
|
|
- const res = new Map();
|
|
|
- return arr.filter((item) => !res.has(item[uniId]) && res.set(item[uniId], 1));
|
|
|
- }
|
|
|
-
|
|
|
- const resp = await saveRoleRelaApiPerm(result.length == 0?[{hospId: record.hospId,roleId:record.roleId,systemId: currentSelectedTreeNode.code}]:uniqueFunc(data,'menuId'));
|
|
|
+
|
|
|
+ const resp = await saveRoleRelaApiPerm(result.length == 0?[{hospId: record.hospId,roleId:record.roleId,systemId: currentSelectedTreeNode.code}]:data);
|
|
|
if (resp) {
|
|
|
set_drawerTablereload(true);
|
|
|
+ set_checkBoxCodes([]);
|
|
|
+ set_checkedTableMenuIds([]);
|
|
|
}
|
|
|
|
|
|
}
|
|
@@ -412,13 +425,13 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
|
|
|
useEffect(() => {
|
|
|
if (currentSelectedTreeNode) {
|
|
|
- set_drawerTableDataFilterParams({ ...tableDataFilterParams, systemId: currentSelectedTreeNode.code })
|
|
|
+ set_drawerTableDataFilterParams({ ...drawerTableDataFilterParams, systemId: currentSelectedTreeNode.code })
|
|
|
}
|
|
|
|
|
|
//切换系统清空数据
|
|
|
set_checkBoxCodes([]);
|
|
|
set_checkedTableMenuIds([]);
|
|
|
- set_needCancelCheckedMenus([]);
|
|
|
+
|
|
|
|
|
|
}, [currentSelectedTreeNode]);
|
|
|
|
|
@@ -439,7 +452,7 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
- getTreeReqFunc();
|
|
|
+ getTreeReqFunc(record.hospId);
|
|
|
|
|
|
}, []);
|
|
|
|
|
@@ -570,7 +583,7 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
// 注释该行则默认不显示下拉选项
|
|
|
checkStrictly: false,
|
|
|
onChange(selectedRowKeys, selectedRows, info) {
|
|
|
- //console.log({selectedRowKeys, selectedRows, info});
|
|
|
+ // console.log({selectedRowKeys, selectedRows, info});
|
|
|
if (selectedRowKeys.length == 0) {
|
|
|
set_checkedTableMenuIds([]);
|
|
|
}
|
|
@@ -581,9 +594,10 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
selectedRowKeys: checkedTableMenuIds,
|
|
|
selections: [Table.SELECTION_ALL, Table.SELECTION_INVERT],
|
|
|
onSelect: (record, selected, selectedRows, nativeEvent) => {
|
|
|
- //console.log({ record, selected, selectedRows, nativeEvent });
|
|
|
+ console.log({ record, selected, selectedRows, nativeEvent });
|
|
|
+
|
|
|
let checkedData = checkBoxCodes;
|
|
|
- let needCancel = needCancelCheckedMenus;
|
|
|
+
|
|
|
if (selected) {
|
|
|
//选中
|
|
|
selectedRows.forEach(a => {
|
|
@@ -591,54 +605,41 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
checkedData.push({
|
|
|
menuId: a.menuId,
|
|
|
function: a.functionList
|
|
|
- })
|
|
|
+ });
|
|
|
+
|
|
|
}
|
|
|
- needCancel.splice(needCancel.findIndex(id=>id == a.menuId),1);
|
|
|
+
|
|
|
});
|
|
|
//更新表格row选中状态
|
|
|
if (record.type == 0) {
|
|
|
//选中的是目录
|
|
|
const ids = record.children.map((item: any) => item.menuId);
|
|
|
- set_checkedTableMenuIds([...checkedTableMenuIds, ...ids]);
|
|
|
+ const totalData = Array.from(new Set([...checkedTableMenuIds, ...ids]));
|
|
|
+
|
|
|
+ set_checkedTableMenuIds([...totalData]);
|
|
|
}
|
|
|
if (record.type == 1) {
|
|
|
//菜单
|
|
|
set_checkedTableMenuIds([...checkedTableMenuIds, record.menuId]);
|
|
|
|
|
|
}
|
|
|
- } else {
|
|
|
|
|
|
- let needCancelCheckedRow = []; //需要取消勾选的表格行
|
|
|
+ set_checkBoxCodes([...checkedData]);
|
|
|
|
|
|
- if (record.type == 0) {
|
|
|
- //目录
|
|
|
- if (record.children) {
|
|
|
- record.children.forEach((element: any) => {
|
|
|
- const index = checkedData.findIndex((item) => item.menuId == record.menuId);
|
|
|
- needCancelCheckedRow.push(record.menuId);
|
|
|
- checkedData.splice(index, 1);
|
|
|
- });
|
|
|
- }
|
|
|
+ } else {
|
|
|
|
|
|
- const ids = record.children.map((item: any) => item.menuId);
|
|
|
- const leftIds = checkedTableMenuIds.filter((id: number) => !ids.includes(id)); //筛选出剩余选中项
|
|
|
- set_checkedTableMenuIds([...leftIds]);
|
|
|
+ //取消勾选\
|
|
|
+ let _tempCheckedCodes = checkBoxCodes;
|
|
|
+
|
|
|
+ const leftCheckedMenuIds = selectedRows.map(a=>a.menuId);
|
|
|
|
|
|
- } else if (record.type == 1) {
|
|
|
- //菜单
|
|
|
- const temp = checkedTableMenuIds;
|
|
|
- needCancelCheckedRow.push(record.menuId);
|
|
|
- const index = checkedData.findIndex((item) => item.menuId == record.menuId);
|
|
|
- const menuIdIndex = checkedTableMenuIds.findIndex((item) => item == record.menuId);
|
|
|
- checkedData.splice(index, 1);
|
|
|
- temp.splice(menuIdIndex, 1);
|
|
|
- set_checkedTableMenuIds([...temp]);
|
|
|
- }
|
|
|
- }
|
|
|
+ const filtedCheckCodes = _tempCheckedCodes.filter(a=>(leftCheckedMenuIds.includes(a.menuId)));
|
|
|
|
|
|
- //console.log({ checkedData });
|
|
|
+ set_checkedTableMenuIds([...leftCheckedMenuIds]);
|
|
|
+
|
|
|
+ set_checkBoxCodes([...uniqueFunc(filtedCheckCodes,'menuId')]);
|
|
|
|
|
|
- set_checkBoxCodes([...checkedData]);
|
|
|
+ }
|
|
|
}
|
|
|
}}
|
|
|
pagination={false} reload={drawerTablereload} newVer params={drawerTableDataFilterParams} rowKey='menuId' columns={columnsData as ProColumns[]} request={(params: any, sort: any, filter: any) => getTableData(params, sort, filter)} />}
|
|
@@ -734,7 +735,7 @@ const RoleManage: FC<PageProps> = ({ roleManageModel: state, dispatch }) => {
|
|
|
});
|
|
|
dispatch &&
|
|
|
dispatch({
|
|
|
- type: 'roleManageModel/reloadTable',
|
|
|
+ type: 'roleManageModel/edit',
|
|
|
payload: {
|
|
|
data: { ...record, bindUserIds: userIds, allUsers: users },
|
|
|
act: TableActType.EDITRELAUSER,
|