|
@@ -1,7 +1,7 @@
|
|
|
/*
|
|
/*
|
|
|
* @Author: your name
|
|
* @Author: your name
|
|
|
* @Date: 2022-01-13 15:22:48
|
|
* @Date: 2022-01-13 15:22:48
|
|
|
- * @LastEditTime: 2023-10-26 13:31:16
|
|
|
|
|
|
|
+ * @LastEditTime: 2024-01-10 17:18:42
|
|
|
* @LastEditors: code4eat awesomedema@gmail.com
|
|
* @LastEditors: code4eat awesomedema@gmail.com
|
|
|
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
|
* @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
|
|
* @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/hospManage/index.tsx
|
|
* @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/hospManage/index.tsx
|
|
@@ -56,11 +56,7 @@ interface TreeNode {
|
|
|
children?: TreeNode[];
|
|
children?: TreeNode[];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-export function findParents(
|
|
|
|
|
- nodes: TreeNode[],
|
|
|
|
|
- targetId: string,
|
|
|
|
|
- path: TreeNode[] = []
|
|
|
|
|
-): TreeNode[] | null {
|
|
|
|
|
|
|
+export function findParents(nodes: TreeNode[], targetId: string, path: TreeNode[] = []): TreeNode[] | null {
|
|
|
for (const node of nodes) {
|
|
for (const node of nodes) {
|
|
|
if (node.menuId == targetId) {
|
|
if (node.menuId == targetId) {
|
|
|
return path;
|
|
return path;
|
|
@@ -91,10 +87,7 @@ export function extractAttributeValues(tree: TreeNode, attributeName: keyof Tree
|
|
|
return values;
|
|
return values;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
const DrawerActBtn = ({ record }: { record: any }) => {
|
|
const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
-
|
|
|
|
|
const [treeData, set_treeData] = useState<getTreeDataRespType[]>([]);
|
|
const [treeData, set_treeData] = useState<getTreeDataRespType[]>([]);
|
|
|
const [currentSelectedTreeNode, set_currentSelectedTreeNode] = useState<any | undefined>(undefined);
|
|
const [currentSelectedTreeNode, set_currentSelectedTreeNode] = useState<any | undefined>(undefined);
|
|
|
const [drawerTablereload, set_drawerTablereload] = useState(false);
|
|
const [drawerTablereload, set_drawerTablereload] = useState(false);
|
|
@@ -110,22 +103,22 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
|
|
|
|
|
const [oldSelectedMenuIds, set_oldSelectedMenuIds] = useState<any[]>([]);
|
|
const [oldSelectedMenuIds, set_oldSelectedMenuIds] = useState<any[]>([]);
|
|
|
|
|
|
|
|
- const [checkedMenuParentsIds, set_checkedMenuParentsIds] = useState<Key[]>([]); //所有需要保存的菜单id
|
|
|
|
|
|
|
+ const [checkedMenuParentsIds, set_checkedMenuParentsIds] = useState<Key[]>([]); //所有需要保存的菜单id
|
|
|
|
|
|
|
|
const [drawerVisible, set_drawerVisible] = useState(false);
|
|
const [drawerVisible, set_drawerVisible] = useState(false);
|
|
|
|
|
|
|
|
const [ifFrozze, set_ifFrozze] = useState(false); //冻结勾选菜单及功能操作
|
|
const [ifFrozze, set_ifFrozze] = useState(false); //冻结勾选菜单及功能操作
|
|
|
|
|
|
|
|
- const [hospAllMenuTree, set_hospAllMenuTree] = useState<any[]>([]); //医院全量菜单
|
|
|
|
|
|
|
+ const [hospAllMenuTree, set_hospAllMenuTree] = useState<any[]>([]); //医院全量菜单
|
|
|
|
|
|
|
|
- const [expandedRowKeys,set_expandedRowKeys] = useState<Key[]>([]);
|
|
|
|
|
|
|
+ const [expandedRowKeys, set_expandedRowKeys] = useState<Key[]>([]);
|
|
|
|
|
|
|
|
const columnsData: ProColumns<TableListItem>[] = [
|
|
const columnsData: ProColumns<TableListItem>[] = [
|
|
|
{
|
|
{
|
|
|
title: '名称',
|
|
title: '名称',
|
|
|
dataIndex: 'name',
|
|
dataIndex: 'name',
|
|
|
width: 300,
|
|
width: 300,
|
|
|
- ellipsis: true
|
|
|
|
|
|
|
+ ellipsis: true,
|
|
|
},
|
|
},
|
|
|
{
|
|
{
|
|
|
title: '类型',
|
|
title: '类型',
|
|
@@ -136,21 +129,21 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
//console.log({ record });
|
|
//console.log({ record });
|
|
|
switch (record.type) {
|
|
switch (record.type) {
|
|
|
case 0:
|
|
case 0:
|
|
|
- return '目录'
|
|
|
|
|
|
|
+ return '目录';
|
|
|
case 1:
|
|
case 1:
|
|
|
- return '菜单'
|
|
|
|
|
|
|
+ return '菜单';
|
|
|
case 2:
|
|
case 2:
|
|
|
- return 'api'
|
|
|
|
|
|
|
+ return 'api';
|
|
|
case 3:
|
|
case 3:
|
|
|
- return '系统'
|
|
|
|
|
|
|
+ return '系统';
|
|
|
case 4:
|
|
case 4:
|
|
|
- return '有数bi'
|
|
|
|
|
|
|
+ return '有数bi';
|
|
|
case 5:
|
|
case 5:
|
|
|
- return '体系'
|
|
|
|
|
|
|
+ return '体系';
|
|
|
case 6:
|
|
case 6:
|
|
|
- return '中心层'
|
|
|
|
|
|
|
+ return '中心层';
|
|
|
case 7:
|
|
case 7:
|
|
|
- return '平台层'
|
|
|
|
|
|
|
+ return '平台层';
|
|
|
default:
|
|
default:
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
@@ -161,18 +154,15 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
dataIndex: 'deptName',
|
|
dataIndex: 'deptName',
|
|
|
key: 'deptName',
|
|
key: 'deptName',
|
|
|
render: (_: any, record: any) => {
|
|
render: (_: any, record: any) => {
|
|
|
-
|
|
|
|
|
if (record.functionList) {
|
|
if (record.functionList) {
|
|
|
- const options = record.functionList.map((item: any, index: number) => ({ label: item.name, value: item.code }))
|
|
|
|
|
|
|
+ const options = record.functionList.map((item: any, index: number) => ({ label: item.name, value: item.code }));
|
|
|
|
|
|
|
|
- const needItem = checkBoxCodes.filter(a => a.menuId == record.menuId);
|
|
|
|
|
|
|
+ const needItem = checkBoxCodes.filter((a) => a.menuId == record.menuId);
|
|
|
|
|
|
|
|
- const codes = (needItem && needItem.length > 0 && needItem[0].function) ? needItem[0].function.map((a: any) => a.code) : [];
|
|
|
|
|
|
|
+ const codes = needItem && needItem.length > 0 && needItem[0].function ? needItem[0].function.map((a: any) => a.code) : [];
|
|
|
|
|
|
|
|
const onCheckGroupChange = (checkedValue: CheckboxValueType[]) => {
|
|
const onCheckGroupChange = (checkedValue: CheckboxValueType[]) => {
|
|
|
-
|
|
|
|
|
if (checkedValue.length > 0) {
|
|
if (checkedValue.length > 0) {
|
|
|
-
|
|
|
|
|
const _temp = [...checkBoxCodes];
|
|
const _temp = [...checkBoxCodes];
|
|
|
const index = checkBoxCodes.findIndex((item) => item.menuId == record.menuId);
|
|
const index = checkBoxCodes.findIndex((item) => item.menuId == record.menuId);
|
|
|
const needed = options.filter((item: any) => checkedValue.includes(item.value));
|
|
const needed = options.filter((item: any) => checkedValue.includes(item.value));
|
|
@@ -185,7 +175,7 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
|
|
|
|
|
_temp.push({
|
|
_temp.push({
|
|
|
menuId: record.menuId,
|
|
menuId: record.menuId,
|
|
|
- function: transfered
|
|
|
|
|
|
|
+ function: transfered,
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
const thisParents = findParents(hospAllMenuTree, record.menuId);
|
|
const thisParents = findParents(hospAllMenuTree, record.menuId);
|
|
@@ -194,7 +184,7 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
|
|
|
|
|
set_checkedMenuParentsIds([...checkedMenuParentsIds, ...ids, record.menuId]);
|
|
set_checkedMenuParentsIds([...checkedMenuParentsIds, ...ids, record.menuId]);
|
|
|
|
|
|
|
|
- set_checkedTableMenuIds([...checkedMenuParentsIds, ...ids, record.menuId])
|
|
|
|
|
|
|
+ set_checkedTableMenuIds([...checkedMenuParentsIds, ...ids, record.menuId]);
|
|
|
|
|
|
|
|
set_checkBoxCodes([..._temp]);
|
|
set_checkBoxCodes([..._temp]);
|
|
|
} else {
|
|
} else {
|
|
@@ -207,24 +197,13 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
// const menuIdsArr = _temp.map((item: any) => item.menuId);
|
|
// const menuIdsArr = _temp.map((item: any) => item.menuId);
|
|
|
// set_checkedTableMenuIds([...menuIdsArr])
|
|
// set_checkedTableMenuIds([...menuIdsArr])
|
|
|
set_checkBoxCodes([..._temp]);
|
|
set_checkBoxCodes([..._temp]);
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- return (
|
|
|
|
|
- <Checkbox.Group
|
|
|
|
|
- options={options}
|
|
|
|
|
- value={codes}
|
|
|
|
|
- disabled={ifFrozze}
|
|
|
|
|
- onChange={checkedValue => onCheckGroupChange(checkedValue)}
|
|
|
|
|
- />
|
|
|
|
|
- )
|
|
|
|
|
|
|
+ return <Checkbox.Group options={options} value={codes} disabled={ifFrozze} onChange={(checkedValue) => onCheckGroupChange(checkedValue)} />;
|
|
|
}
|
|
}
|
|
|
- return '-'
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ return '-';
|
|
|
|
|
+ },
|
|
|
},
|
|
},
|
|
|
];
|
|
];
|
|
|
|
|
|
|
@@ -233,7 +212,7 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
const resp = await getHospOwnSys(hospId);
|
|
const resp = await getHospOwnSys(hospId);
|
|
|
set_treeData(resp);
|
|
set_treeData(resp);
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const onSelect: TreeProps['onSelect'] = (selectedKeys, info) => {
|
|
const onSelect: TreeProps['onSelect'] = (selectedKeys, info) => {
|
|
|
//console.log('selected', selectedKeys, info);
|
|
//console.log('selected', selectedKeys, info);
|
|
@@ -248,7 +227,7 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
for (let i = 0; i < tree.length; i++) {
|
|
for (let i = 0; i < tree.length; i++) {
|
|
|
const node = tree[i];
|
|
const node = tree[i];
|
|
|
if (node.children) {
|
|
if (node.children) {
|
|
|
- if (node.children.some((item: { code: React.Key; }) => item.code === key)) {
|
|
|
|
|
|
|
+ if (node.children.some((item: { code: React.Key }) => item.code === key)) {
|
|
|
parentKey = node.code;
|
|
parentKey = node.code;
|
|
|
} else if (getParentKey(key, node.children)) {
|
|
} else if (getParentKey(key, node.children)) {
|
|
|
parentKey = getParentKey(key, node.children);
|
|
parentKey = getParentKey(key, node.children);
|
|
@@ -258,25 +237,21 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
return parentKey!;
|
|
return parentKey!;
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-
|
|
|
|
|
const onTreeSearchKeyChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
const onTreeSearchKeyChange = (e: React.ChangeEvent<HTMLInputElement>) => {
|
|
|
-
|
|
|
|
|
const { value } = e.target;
|
|
const { value } = e.target;
|
|
|
- const newExpandedKeys = dataList
|
|
|
|
|
- .map((item) => {
|
|
|
|
|
- if (item.name.indexOf(value) > -1) {
|
|
|
|
|
- return getParentKey(item.code, treeData);
|
|
|
|
|
- }
|
|
|
|
|
- return null;
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ const newExpandedKeys = dataList.map((item) => {
|
|
|
|
|
+ if (item.name.indexOf(value) > -1) {
|
|
|
|
|
+ return getParentKey(item.code, treeData);
|
|
|
|
|
+ }
|
|
|
|
|
+ return null;
|
|
|
|
|
+ });
|
|
|
|
|
|
|
|
const b = newExpandedKeys.filter((item, i, self) => item && self.indexOf(item) === i);
|
|
const b = newExpandedKeys.filter((item, i, self) => item && self.indexOf(item) === i);
|
|
|
|
|
|
|
|
setExpandedKeys(newExpandedKeys as React.Key[]);
|
|
setExpandedKeys(newExpandedKeys as React.Key[]);
|
|
|
setSearchValue(value);
|
|
setSearchValue(value);
|
|
|
setAutoExpandParent(true);
|
|
setAutoExpandParent(true);
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const onExpand = (newExpandedKeys: React.Key[]) => {
|
|
const onExpand = (newExpandedKeys: React.Key[]) => {
|
|
|
setExpandedKeys(newExpandedKeys);
|
|
setExpandedKeys(newExpandedKeys);
|
|
@@ -295,34 +270,29 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
};
|
|
};
|
|
|
generateList(treeData as any);
|
|
generateList(treeData as any);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
const setInitCheckData = async () => {
|
|
const setInitCheckData = async () => {
|
|
|
-
|
|
|
|
|
set_drawerTablereload(false);
|
|
set_drawerTablereload(false);
|
|
|
if (currentSelectedTreeNode) {
|
|
if (currentSelectedTreeNode) {
|
|
|
const resp = await getMenuRelaPerm({ hospId: record.id, systemId: currentSelectedTreeNode.code });
|
|
const resp = await getMenuRelaPerm({ hospId: record.id, systemId: currentSelectedTreeNode.code });
|
|
|
if (resp) {
|
|
if (resp) {
|
|
|
- const {checkAll = 0,menuList=[]} = resp;
|
|
|
|
|
- let temp: { menuId: any; function: any; }[] = [];
|
|
|
|
|
|
|
+ const { checkAll = 0, menuList = [] } = resp;
|
|
|
|
|
+ let temp: { menuId: any; function: any }[] = [];
|
|
|
|
|
|
|
|
const setTreeRecursion = (data: any) => {
|
|
const setTreeRecursion = (data: any) => {
|
|
|
data.map((item: any, index: number) => {
|
|
data.map((item: any, index: number) => {
|
|
|
-
|
|
|
|
|
if (item.type == 1) {
|
|
if (item.type == 1) {
|
|
|
//菜单
|
|
//菜单
|
|
|
temp.push({
|
|
temp.push({
|
|
|
menuId: item.menuId,
|
|
menuId: item.menuId,
|
|
|
- function: item.functionCheckList
|
|
|
|
|
|
|
+ function: item.functionCheckList,
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (item.children && item.children.length != 0) {
|
|
if (item.children && item.children.length != 0) {
|
|
|
setTreeRecursion(item.children);
|
|
setTreeRecursion(item.children);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
let initCheckedMenuIds: any[] = [];
|
|
let initCheckedMenuIds: any[] = [];
|
|
|
|
|
|
|
@@ -332,9 +302,9 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
set_checkedMenuParentsIds(initCheckedMenuIds);
|
|
set_checkedMenuParentsIds(initCheckedMenuIds);
|
|
|
-
|
|
|
|
|
|
|
+
|
|
|
setTreeRecursion(menuList);
|
|
setTreeRecursion(menuList);
|
|
|
- set_ifFrozze(checkAll?true:false);
|
|
|
|
|
|
|
+ set_ifFrozze(checkAll ? true : false);
|
|
|
|
|
|
|
|
set_checkBoxCodes(temp);
|
|
set_checkBoxCodes(temp);
|
|
|
set_checkedTableMenuIds(temp.map((a: any) => a.menuId));
|
|
set_checkedTableMenuIds(temp.map((a: any) => a.menuId));
|
|
@@ -343,78 +313,73 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
return {
|
|
return {
|
|
|
data: resp,
|
|
data: resp,
|
|
|
success: true,
|
|
success: true,
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
}
|
|
}
|
|
|
return {
|
|
return {
|
|
|
data: [],
|
|
data: [],
|
|
|
- success: true
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ success: true,
|
|
|
|
|
+ };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return []
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return [];
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const getTableData = async (params: any, sort: any, filter: any) => {
|
|
const getTableData = async (params: any, sort: any, filter: any) => {
|
|
|
-
|
|
|
|
|
set_drawerTablereload(false);
|
|
set_drawerTablereload(false);
|
|
|
if (currentSelectedTreeNode) {
|
|
if (currentSelectedTreeNode) {
|
|
|
const resp = await getTableDataRequest({ ...params, systemId: currentSelectedTreeNode.code });
|
|
const resp = await getTableDataRequest({ ...params, systemId: currentSelectedTreeNode.code });
|
|
|
if (resp) {
|
|
if (resp) {
|
|
|
- let expandKeys:Key[] = [];
|
|
|
|
|
|
|
+ let expandKeys: Key[] = [];
|
|
|
set_hospAllMenuTree(resp);
|
|
set_hospAllMenuTree(resp);
|
|
|
|
|
|
|
|
const getParentsIds = (data: any) => {
|
|
const getParentsIds = (data: any) => {
|
|
|
data.map((item: any, index: number) => {
|
|
data.map((item: any, index: number) => {
|
|
|
-
|
|
|
|
|
- if(item.type == 0){
|
|
|
|
|
- expandKeys.push(item.menuId)
|
|
|
|
|
|
|
+ if (item.type == 0) {
|
|
|
|
|
+ expandKeys.push(item.menuId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
if (item.children && item.children.length != 0) {
|
|
if (item.children && item.children.length != 0) {
|
|
|
getParentsIds(item.children);
|
|
getParentsIds(item.children);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
getParentsIds(resp);
|
|
getParentsIds(resp);
|
|
|
set_expandedRowKeys(expandKeys);
|
|
set_expandedRowKeys(expandKeys);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
return {
|
|
return {
|
|
|
data: resp,
|
|
data: resp,
|
|
|
success: true,
|
|
success: true,
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
}
|
|
}
|
|
|
return {
|
|
return {
|
|
|
data: [],
|
|
data: [],
|
|
|
- success: true
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ success: true,
|
|
|
|
|
+ };
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return []
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return [];
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const saveResult = async () => {
|
|
const saveResult = async () => {
|
|
|
-
|
|
|
|
|
let old = [...oldSelectedMenuIds];
|
|
let old = [...oldSelectedMenuIds];
|
|
|
|
|
|
|
|
const result = checkBoxCodes.map((item: any) => {
|
|
const result = checkBoxCodes.map((item: any) => {
|
|
|
|
|
+ old.splice(
|
|
|
|
|
+ old.findIndex((a) => a == item.menuId),
|
|
|
|
|
+ 1,
|
|
|
|
|
+ );
|
|
|
|
|
|
|
|
- old.splice(old.findIndex(a => a == item.menuId), 1);
|
|
|
|
|
-
|
|
|
|
|
- return { ...item, hospId: record.id, systemId: currentSelectedTreeNode.code }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ return { ...item, hospId: record.id, systemId: currentSelectedTreeNode.code };
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
- const needCancelMenus = old.map(a => ({ hospId: record.id, systemId: currentSelectedTreeNode.code, function: [], menuId: a }));
|
|
|
|
|
|
|
+ const needCancelMenus = old.map((a) => ({ hospId: record.id, systemId: currentSelectedTreeNode.code, function: [], menuId: a }));
|
|
|
|
|
|
|
|
const data = {
|
|
const data = {
|
|
|
hospId: record.id,
|
|
hospId: record.id,
|
|
|
systemId: currentSelectedTreeNode.code,
|
|
systemId: currentSelectedTreeNode.code,
|
|
|
menuIds: [...new Set([...checkedMenuParentsIds])],
|
|
menuIds: [...new Set([...checkedMenuParentsIds])],
|
|
|
- functionRequestList: checkedMenuParentsIds.length == 0 ? [] : [...result, ...needCancelMenus]
|
|
|
|
|
|
|
+ functionRequestList: checkedMenuParentsIds.length == 0 ? [] : [...result, ...needCancelMenus],
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
const resp = await saveHospMenuApiPerm(data);
|
|
const resp = await saveHospMenuApiPerm(data);
|
|
@@ -424,26 +389,24 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
set_checkBoxCodes([]);
|
|
set_checkBoxCodes([]);
|
|
|
set_checkedTableMenuIds([]);
|
|
set_checkedTableMenuIds([]);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const onCancel = () => {
|
|
const onCancel = () => {
|
|
|
set_drawerVisible(false);
|
|
set_drawerVisible(false);
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const drawerTableDataSearchHandle = (paramName: string) => {
|
|
const drawerTableDataSearchHandle = (paramName: string) => {
|
|
|
set_drawerTableDataFilterParams({
|
|
set_drawerTableDataFilterParams({
|
|
|
...drawerTableDataFilterParams,
|
|
...drawerTableDataFilterParams,
|
|
|
- [`${paramName}`]: drawerTableDataSearchKeywords
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ [`${paramName}`]: drawerTableDataSearchKeywords,
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const clearFunction = () => {
|
|
const clearFunction = () => {
|
|
|
if (ifFrozze) return;
|
|
if (ifFrozze) return;
|
|
|
let emptyFunc = checkBoxCodes.map((a) => ({ ...a, function: [] }));
|
|
let emptyFunc = checkBoxCodes.map((a) => ({ ...a, function: [] }));
|
|
|
set_checkBoxCodes(emptyFunc);
|
|
set_checkBoxCodes(emptyFunc);
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const oneKeySetAll = async (bool: boolean) => {
|
|
const oneKeySetAll = async (bool: boolean) => {
|
|
|
set_ifFrozze(bool);
|
|
set_ifFrozze(bool);
|
|
@@ -451,7 +414,7 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
const data = {
|
|
const data = {
|
|
|
hospId: record.id,
|
|
hospId: record.id,
|
|
|
systemId: currentSelectedTreeNode.code,
|
|
systemId: currentSelectedTreeNode.code,
|
|
|
- type: bool ? '1': '0'
|
|
|
|
|
|
|
+ type: bool ? '1' : '0',
|
|
|
};
|
|
};
|
|
|
const resp = await setIfCheckAll(data);
|
|
const resp = await setIfCheckAll(data);
|
|
|
// if (resp) {
|
|
// if (resp) {
|
|
@@ -459,8 +422,7 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
// set_checkBoxCodes([]);
|
|
// set_checkBoxCodes([]);
|
|
|
// set_checkedTableMenuIds([]);
|
|
// set_checkedTableMenuIds([]);
|
|
|
// }
|
|
// }
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
if (currentSelectedTreeNode && !currentSelectedTreeNode.children) {
|
|
if (currentSelectedTreeNode && !currentSelectedTreeNode.children) {
|
|
@@ -469,14 +431,12 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
set_checkBoxCodes([]);
|
|
set_checkBoxCodes([]);
|
|
|
set_checkedTableMenuIds([]);
|
|
set_checkedTableMenuIds([]);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
}, [currentSelectedTreeNode]);
|
|
}, [currentSelectedTreeNode]);
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
//初始化左侧树结构数据后
|
|
//初始化左侧树结构数据后
|
|
|
|
|
|
|
|
if (treeData?.length > 0) {
|
|
if (treeData?.length > 0) {
|
|
|
-
|
|
|
|
|
if (treeData[0].children && treeData[0].children.length > 0) {
|
|
if (treeData[0].children && treeData[0].children.length > 0) {
|
|
|
const [node, nodeParent] = getDeepestTreeData(treeData[0], 'children');
|
|
const [node, nodeParent] = getDeepestTreeData(treeData[0], 'children');
|
|
|
|
|
|
|
@@ -487,8 +447,6 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
}
|
|
}
|
|
|
}, [treeData]);
|
|
}, [treeData]);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
useEffect(() => {
|
|
useEffect(() => {
|
|
|
if (drawerVisible) {
|
|
if (drawerVisible) {
|
|
|
getTreeReqFunc(record.id);
|
|
getTreeReqFunc(record.id);
|
|
@@ -500,11 +458,17 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
}
|
|
}
|
|
|
}, [drawerVisible]);
|
|
}, [drawerVisible]);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
return (
|
|
return (
|
|
|
<DrawerForm
|
|
<DrawerForm
|
|
|
trigger={
|
|
trigger={
|
|
|
- <a key="link3" onClick={(e) => { set_drawerVisible(true); }}>菜单</a>
|
|
|
|
|
|
|
+ <a
|
|
|
|
|
+ key="link3"
|
|
|
|
|
+ onClick={(e) => {
|
|
|
|
|
+ set_drawerVisible(true);
|
|
|
|
|
+ }}
|
|
|
|
|
+ >
|
|
|
|
|
+ 菜单
|
|
|
|
|
+ </a>
|
|
|
}
|
|
}
|
|
|
width={908}
|
|
width={908}
|
|
|
// visible={drawerVisible}
|
|
// visible={drawerVisible}
|
|
@@ -513,223 +477,233 @@ const DrawerActBtn = ({ record }: { record: any }) => {
|
|
|
closable: false,
|
|
closable: false,
|
|
|
destroyOnClose: true,
|
|
destroyOnClose: true,
|
|
|
extra: <div>anniu</div>,
|
|
extra: <div>anniu</div>,
|
|
|
-
|
|
|
|
|
}}
|
|
}}
|
|
|
submitter={false}
|
|
submitter={false}
|
|
|
>
|
|
>
|
|
|
- <div className='setApiPermDrawer'>
|
|
|
|
|
- <div className='topbar'>
|
|
|
|
|
- <div className='title'>{`院区菜单权限设置(${record.hospName})`}</div>
|
|
|
|
|
- <div className='btnGroup'>
|
|
|
|
|
- <span className={ifFrozze ? 'clearBtn disabled' : 'clearBtn'} onClick={() => clearFunction()}>清除功能权限</span>
|
|
|
|
|
- <span className='cancel' onClick={() => onCancel()}>取消</span>
|
|
|
|
|
- <span className='save' onClick={() => saveResult()}>保存</span>
|
|
|
|
|
|
|
+ <div className="setApiPermDrawer">
|
|
|
|
|
+ <div className="topbar">
|
|
|
|
|
+ <div className="title">{`院区菜单权限设置(${record.hospName})`}</div>
|
|
|
|
|
+ <div className="btnGroup">
|
|
|
|
|
+ <span className={ifFrozze ? 'clearBtn disabled' : 'clearBtn'} onClick={() => clearFunction()}>
|
|
|
|
|
+ 清除功能权限
|
|
|
|
|
+ </span>
|
|
|
|
|
+ <span className="cancel" onClick={() => onCancel()}>
|
|
|
|
|
+ 取消
|
|
|
|
|
+ </span>
|
|
|
|
|
+ <span className="save" onClick={() => saveResult()}>
|
|
|
|
|
+ 保存
|
|
|
|
|
+ </span>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div className='content'>
|
|
|
|
|
- <div className='leftTree'>
|
|
|
|
|
- <div className='search'>
|
|
|
|
|
- <Input
|
|
|
|
|
- className='searchInput'
|
|
|
|
|
- placeholder="请输入"
|
|
|
|
|
- size='small'
|
|
|
|
|
- allowClear
|
|
|
|
|
- style={{ marginBottom: 16 }}
|
|
|
|
|
- onChange={onTreeSearchKeyChange}
|
|
|
|
|
- suffix={
|
|
|
|
|
- <SearchIcon type='iconsousuo' />
|
|
|
|
|
- }
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <div className="content">
|
|
|
|
|
+ <div className="leftTree">
|
|
|
|
|
+ <div className="search">
|
|
|
|
|
+ <Input className="searchInput" placeholder="请输入" size="small" allowClear style={{ marginBottom: 16 }} onChange={onTreeSearchKeyChange} suffix={<SearchIcon type="iconsousuo" />} />
|
|
|
</div>
|
|
</div>
|
|
|
- {
|
|
|
|
|
- treeData && treeData.length > 0 && (
|
|
|
|
|
- <DirectoryTree
|
|
|
|
|
- fieldNames={{ title: 'name', key: 'code' }}
|
|
|
|
|
- rootStyle={{ height: '100%', paddingBottom: 50, overflowY: 'scroll', overflowX: 'hidden' }}
|
|
|
|
|
- onSelect={onSelect}
|
|
|
|
|
- onExpand={onExpand}
|
|
|
|
|
- expandedKeys={expandedKeys}
|
|
|
|
|
- autoExpandParent={autoExpandParent}
|
|
|
|
|
- selectedKeys={currentSelectedTreeNode ? [currentSelectedTreeNode.code] : []}
|
|
|
|
|
- blockNode={true}
|
|
|
|
|
- icon={() => null}
|
|
|
|
|
- titleRender={
|
|
|
|
|
- (nodeData: any) => {
|
|
|
|
|
-
|
|
|
|
|
- const strTitle = nodeData.name as string;
|
|
|
|
|
- const index = strTitle.indexOf(searchValue);
|
|
|
|
|
- const beforeStr = strTitle.substring(0, index);
|
|
|
|
|
- const afterStr = strTitle.slice(index + searchValue.length);
|
|
|
|
|
- const title =
|
|
|
|
|
- index > -1 ? (
|
|
|
|
|
- <span>
|
|
|
|
|
- {beforeStr}
|
|
|
|
|
- <span className="site-tree-search-value" style={{ color: 'red', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>{searchValue}</span>
|
|
|
|
|
- {afterStr}
|
|
|
|
|
- </span>
|
|
|
|
|
- ) : (
|
|
|
|
|
- <span className='strTitle'>{strTitle}</span>
|
|
|
|
|
- );
|
|
|
|
|
- return <div style={{
|
|
|
|
|
- display: 'flex', flexDirection: 'row',
|
|
|
|
|
|
|
+ {treeData && treeData.length > 0 && (
|
|
|
|
|
+ <DirectoryTree
|
|
|
|
|
+ fieldNames={{ title: 'name', key: 'code' }}
|
|
|
|
|
+ rootStyle={{ height: '100%', paddingBottom: 50, overflowY: 'scroll', overflowX: 'hidden' }}
|
|
|
|
|
+ onSelect={onSelect}
|
|
|
|
|
+ key={'code'}
|
|
|
|
|
+ onExpand={onExpand}
|
|
|
|
|
+ expandedKeys={expandedKeys}
|
|
|
|
|
+ autoExpandParent={autoExpandParent}
|
|
|
|
|
+ selectedKeys={currentSelectedTreeNode ? [currentSelectedTreeNode.code] : []}
|
|
|
|
|
+ blockNode={true}
|
|
|
|
|
+ icon={() => null}
|
|
|
|
|
+ titleRender={(nodeData: any) => {
|
|
|
|
|
+ const strTitle = nodeData.name as string;
|
|
|
|
|
+ const index = strTitle.indexOf(searchValue);
|
|
|
|
|
+ const beforeStr = strTitle.substring(0, index);
|
|
|
|
|
+ const afterStr = strTitle.slice(index + searchValue.length);
|
|
|
|
|
+ const title =
|
|
|
|
|
+ index > -1 ? (
|
|
|
|
|
+ <span>
|
|
|
|
|
+ {beforeStr}
|
|
|
|
|
+ <span className="site-tree-search-value" style={{ color: 'red', overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>
|
|
|
|
|
+ {searchValue}
|
|
|
|
|
+ </span>
|
|
|
|
|
+ {afterStr}
|
|
|
|
|
+ </span>
|
|
|
|
|
+ ) : (
|
|
|
|
|
+ <span className="strTitle">{strTitle}</span>
|
|
|
|
|
+ );
|
|
|
|
|
+ return (
|
|
|
|
|
+ <div
|
|
|
|
|
+ style={{
|
|
|
|
|
+ display: 'flex',
|
|
|
|
|
+ flexDirection: 'row',
|
|
|
width: '100%',
|
|
width: '100%',
|
|
|
- justifyContent: 'flex-start', alignItems: 'center', height: 32,
|
|
|
|
|
|
|
+ justifyContent: 'flex-start',
|
|
|
|
|
+ alignItems: 'center',
|
|
|
|
|
+ height: 32,
|
|
|
borderRadius: '4px',
|
|
borderRadius: '4px',
|
|
|
overflow: 'hidden',
|
|
overflow: 'hidden',
|
|
|
color: '#17181A',
|
|
color: '#17181A',
|
|
|
textOverflow: 'ellipsis',
|
|
textOverflow: 'ellipsis',
|
|
|
- whiteSpace: 'nowrap'
|
|
|
|
|
-
|
|
|
|
|
- }}>{title}</div>
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- defaultSelectedKeys={[treeData[0].children[0].code]}
|
|
|
|
|
- treeData={treeData as unknown as DataNode[]}
|
|
|
|
|
- switcherIcon={(props: any) => {
|
|
|
|
|
- const { expanded } = props;
|
|
|
|
|
- //return <button className='site-table-row-expand-icon site-table-row-expand-icon-expanded'></button>
|
|
|
|
|
- return !expanded ? <img style={{ width: 20, height: 20, position: 'relative', top: 5 }} src={expandedIcon} /> : <img style={{ width: 20, height: 20, position: 'relative', top: 5 }} src={closeIcon} />
|
|
|
|
|
- }}
|
|
|
|
|
- />
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ whiteSpace: 'nowrap',
|
|
|
|
|
+ }}
|
|
|
|
|
+ >
|
|
|
|
|
+ {title}
|
|
|
|
|
+ </div>
|
|
|
|
|
+ );
|
|
|
|
|
+ }}
|
|
|
|
|
+ defaultSelectedKeys={[treeData[0].children[0].code]}
|
|
|
|
|
+ treeData={treeData as unknown as DataNode[]}
|
|
|
|
|
+ switcherIcon={(props: any) => {
|
|
|
|
|
+ const { expanded } = props;
|
|
|
|
|
+ //return <button className='site-table-row-expand-icon site-table-row-expand-icon-expanded'></button>
|
|
|
|
|
+ return !expanded ? (
|
|
|
|
|
+ <img style={{ width: 20, height: 20, position: 'relative', top: 5 }} src={expandedIcon} />
|
|
|
|
|
+ ) : (
|
|
|
|
|
+ <img style={{ width: 20, height: 20, position: 'relative', top: 5 }} src={closeIcon} />
|
|
|
|
|
+ );
|
|
|
|
|
+ }}
|
|
|
|
|
+ />
|
|
|
|
|
+ )}
|
|
|
</div>
|
|
</div>
|
|
|
{/* <div style={{width:16,height:'92vh',background:'#F5F7FA'}}></div> */}
|
|
{/* <div style={{width:16,height:'92vh',background:'#F5F7FA'}}></div> */}
|
|
|
- <div className='rightContent'>
|
|
|
|
|
- <div className='tableToolbar'>
|
|
|
|
|
- <div className='filter'>
|
|
|
|
|
- <div className='filterItem'>
|
|
|
|
|
- <span className='label'>检索:</span>
|
|
|
|
|
- <KCInput placeholder={'请输入'} style={{ width: 160 }} search allowClear
|
|
|
|
|
|
|
+ <div className="rightContent">
|
|
|
|
|
+ <div className="tableToolbar">
|
|
|
|
|
+ <div className="filter">
|
|
|
|
|
+ <div className="filterItem">
|
|
|
|
|
+ <span className="label">检索:</span>
|
|
|
|
|
+ <KCInput
|
|
|
|
|
+ placeholder={'请输入'}
|
|
|
|
|
+ style={{ width: 160 }}
|
|
|
|
|
+ search
|
|
|
|
|
+ allowClear
|
|
|
onChange={(e) => {
|
|
onChange={(e) => {
|
|
|
set_drawerTableDataSearchKeywords(e.target.value);
|
|
set_drawerTableDataSearchKeywords(e.target.value);
|
|
|
if (e.target.value.length == 0) {
|
|
if (e.target.value.length == 0) {
|
|
|
set_drawerTableDataFilterParams({
|
|
set_drawerTableDataFilterParams({
|
|
|
...drawerTableDataFilterParams,
|
|
...drawerTableDataFilterParams,
|
|
|
- name: ''
|
|
|
|
|
|
|
+ name: '',
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
}}
|
|
}}
|
|
|
onSearch={() => drawerTableDataSearchHandle('name')}
|
|
onSearch={() => drawerTableDataSearchHandle('name')}
|
|
|
-
|
|
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
|
|
<div className={'btnGroup'}>
|
|
<div className={'btnGroup'}>
|
|
|
- <a style={{ color: '#17181A' }}><Switch checked={ifFrozze} style={{ position: 'relative', marginRight: 4 }} size='small' onChange={(bool) => oneKeySetAll(bool)} />全部</a>
|
|
|
|
|
|
|
+ {currentSelectedTreeNode && currentSelectedTreeNode.type != 1 && (
|
|
|
|
|
+ <a style={{ color: '#17181A' }}>
|
|
|
|
|
+ <Switch checked={ifFrozze} style={{ position: 'relative', marginRight: 4 }} size="small" onChange={(bool) => oneKeySetAll(bool)} />
|
|
|
|
|
+ 全部
|
|
|
|
|
+ </a>
|
|
|
|
|
+ )}
|
|
|
{/* <UpDataActBtn key={'act'} record={undefined} type='ADD' /> */}
|
|
{/* <UpDataActBtn key={'act'} record={undefined} type='ADD' /> */}
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
</div>
|
|
</div>
|
|
|
- {currentSelectedTreeNode && <KCTable
|
|
|
|
|
- tableAlertRender={false}
|
|
|
|
|
- scroll={{y:`calc(100vh - 150px)`}}
|
|
|
|
|
- onLoad={() => setInitCheckData()}
|
|
|
|
|
- expandable={{
|
|
|
|
|
- expandedRowKeys:expandedRowKeys,
|
|
|
|
|
- onExpandedRowsChange(expandedKeys) {
|
|
|
|
|
- set_expandedRowKeys(expandedKeys as Key[])
|
|
|
|
|
- },
|
|
|
|
|
- }}
|
|
|
|
|
- rowSelection={{
|
|
|
|
|
- // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
|
|
|
|
|
- // 注释该行则默认不显示下拉选项
|
|
|
|
|
- checkStrictly: false,
|
|
|
|
|
- hideSelectAll: true,
|
|
|
|
|
- onChange(selectedRowKeys, selectedRows, info) {
|
|
|
|
|
- //console.log({selectedRowKeys, selectedRows, info});
|
|
|
|
|
- if (selectedRowKeys.length == 0) {
|
|
|
|
|
- set_checkedTableMenuIds([]);
|
|
|
|
|
- }
|
|
|
|
|
- if (selectedRows.length == 0) {
|
|
|
|
|
- set_checkBoxCodes([]);
|
|
|
|
|
- }
|
|
|
|
|
- },
|
|
|
|
|
- selectedRowKeys: checkedTableMenuIds,
|
|
|
|
|
- onSelect: (record, selected, selectedRows, nativeEvent) => {
|
|
|
|
|
- // console.log({ record, selected, selectedRows, nativeEvent });
|
|
|
|
|
-
|
|
|
|
|
- if (ifFrozze) return;
|
|
|
|
|
-
|
|
|
|
|
- let checkedData = [...checkBoxCodes];
|
|
|
|
|
-
|
|
|
|
|
- if (selected) {
|
|
|
|
|
- //选中
|
|
|
|
|
-
|
|
|
|
|
- const parents = findParents(hospAllMenuTree, record.menuId);
|
|
|
|
|
- const ids = (parents as TreeNode[]).map((a) => a.menuId);
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
- if (record.children) {
|
|
|
|
|
- const childIds = extractAttributeValues(record, 'menuId');
|
|
|
|
|
- set_checkedMenuParentsIds([...checkedMenuParentsIds, ...ids, ...childIds, record.menuId]);
|
|
|
|
|
- } else {
|
|
|
|
|
- set_checkedMenuParentsIds([...checkedMenuParentsIds, ...ids, record.menuId]);
|
|
|
|
|
|
|
+ {currentSelectedTreeNode && (
|
|
|
|
|
+ <KCTable
|
|
|
|
|
+ tableAlertRender={false}
|
|
|
|
|
+ scroll={{ y: `calc(100vh - 150px)` }}
|
|
|
|
|
+ onLoad={() => setInitCheckData()}
|
|
|
|
|
+ expandable={{
|
|
|
|
|
+ expandedRowKeys: expandedRowKeys,
|
|
|
|
|
+ onExpandedRowsChange(expandedKeys) {
|
|
|
|
|
+ set_expandedRowKeys(expandedKeys as Key[]);
|
|
|
|
|
+ },
|
|
|
|
|
+ }}
|
|
|
|
|
+ rowSelection={{
|
|
|
|
|
+ // 自定义选择项参考: https://ant.design/components/table-cn/#components-table-demo-row-selection-custom
|
|
|
|
|
+ // 注释该行则默认不显示下拉选项
|
|
|
|
|
+ checkStrictly: false,
|
|
|
|
|
+ hideSelectAll: true,
|
|
|
|
|
+ onChange(selectedRowKeys, selectedRows, info) {
|
|
|
|
|
+ //console.log({selectedRowKeys, selectedRows, info});
|
|
|
|
|
+ if (selectedRowKeys.length == 0) {
|
|
|
|
|
+ set_checkedTableMenuIds([]);
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- selectedRows.forEach(a => {
|
|
|
|
|
- if (a.functionList) {
|
|
|
|
|
- checkedData.push({
|
|
|
|
|
- menuId: a.menuId,
|
|
|
|
|
- function: a.functionList
|
|
|
|
|
- });
|
|
|
|
|
- } else {
|
|
|
|
|
- checkedData.push({
|
|
|
|
|
- menuId: a.menuId,
|
|
|
|
|
- function: []
|
|
|
|
|
- });
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- });
|
|
|
|
|
-
|
|
|
|
|
- //更新表格row选中状态
|
|
|
|
|
- if (record.type == 0) {
|
|
|
|
|
- //选中的是目录
|
|
|
|
|
- const ids = record.children?record.children.map((item: any) => item.menuId):[record.menuId];
|
|
|
|
|
- const totalData = Array.from(new Set([...checkedTableMenuIds, ...ids]));
|
|
|
|
|
-
|
|
|
|
|
- set_checkedTableMenuIds([...totalData]);
|
|
|
|
|
|
|
+ if (selectedRows.length == 0) {
|
|
|
|
|
+ set_checkBoxCodes([]);
|
|
|
}
|
|
}
|
|
|
- if (record.type == 1) {
|
|
|
|
|
- //菜单
|
|
|
|
|
- set_checkedTableMenuIds([...checkedTableMenuIds, record.menuId]);
|
|
|
|
|
|
|
+ },
|
|
|
|
|
+ selectedRowKeys: checkedTableMenuIds,
|
|
|
|
|
+ onSelect: (record, selected, selectedRows, nativeEvent) => {
|
|
|
|
|
+ // console.log({ record, selected, selectedRows, nativeEvent });
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if (ifFrozze) return;
|
|
|
|
|
|
|
|
- set_checkBoxCodes([...uniqueFunc(checkedData, 'menuId')]);
|
|
|
|
|
|
|
+ let checkedData = [...checkBoxCodes];
|
|
|
|
|
|
|
|
- } else {
|
|
|
|
|
|
|
+ if (selected) {
|
|
|
|
|
+ //选中
|
|
|
|
|
|
|
|
- const ids = extractAttributeValues(record, 'menuId');
|
|
|
|
|
|
|
+ const parents = findParents(hospAllMenuTree, record.menuId);
|
|
|
|
|
+ const ids = (parents as TreeNode[]).map((a) => a.menuId);
|
|
|
|
|
|
|
|
- const filtedMenuIds = checkedMenuParentsIds.filter((a) => !ids.includes(a));
|
|
|
|
|
- set_checkedMenuParentsIds(filtedMenuIds);
|
|
|
|
|
-
|
|
|
|
|
- let _tempCheckedCodes = [...checkBoxCodes];
|
|
|
|
|
|
|
+ if (record.children) {
|
|
|
|
|
+ const childIds = extractAttributeValues(record, 'menuId');
|
|
|
|
|
+ set_checkedMenuParentsIds([...checkedMenuParentsIds, ...ids, ...childIds, record.menuId]);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ set_checkedMenuParentsIds([...checkedMenuParentsIds, ...ids, record.menuId]);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- const leftCheckedMenuIds = selectedRows.map(a => a.menuId);
|
|
|
|
|
|
|
+ selectedRows.forEach((a) => {
|
|
|
|
|
+ if (a.functionList) {
|
|
|
|
|
+ checkedData.push({
|
|
|
|
|
+ menuId: a.menuId,
|
|
|
|
|
+ function: a.functionList,
|
|
|
|
|
+ });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ checkedData.push({
|
|
|
|
|
+ menuId: a.menuId,
|
|
|
|
|
+ function: [],
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ //更新表格row选中状态
|
|
|
|
|
+ if (record.type == 0) {
|
|
|
|
|
+ //选中的是目录
|
|
|
|
|
+ const ids = record.children ? record.children.map((item: any) => item.menuId) : [record.menuId];
|
|
|
|
|
+ const totalData = Array.from(new Set([...checkedTableMenuIds, ...ids]));
|
|
|
|
|
+
|
|
|
|
|
+ set_checkedTableMenuIds([...totalData]);
|
|
|
|
|
+ }
|
|
|
|
|
+ if (record.type == 1) {
|
|
|
|
|
+ //菜单
|
|
|
|
|
+ set_checkedTableMenuIds([...checkedTableMenuIds, record.menuId]);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- const filtedCheckCodes = _tempCheckedCodes.filter(a => (leftCheckedMenuIds.includes(a.menuId)));
|
|
|
|
|
|
|
+ set_checkBoxCodes([...uniqueFunc(checkedData, 'menuId')]);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ const ids = extractAttributeValues(record, 'menuId');
|
|
|
|
|
|
|
|
- set_checkedTableMenuIds([...leftCheckedMenuIds]);
|
|
|
|
|
- set_checkBoxCodes([...uniqueFunc(filtedCheckCodes, 'menuId')]);
|
|
|
|
|
|
|
+ const filtedMenuIds = checkedMenuParentsIds.filter((a) => !ids.includes(a));
|
|
|
|
|
+ set_checkedMenuParentsIds(filtedMenuIds);
|
|
|
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ let _tempCheckedCodes = [...checkBoxCodes];
|
|
|
|
|
|
|
|
|
|
+ const leftCheckedMenuIds = selectedRows.map((a) => a.menuId);
|
|
|
|
|
|
|
|
- }}
|
|
|
|
|
- pagination={false} reload={drawerTablereload} newVer params={drawerTableDataFilterParams} rowKey='menuId' columns={columnsData as ProColumns[]} request={(params: any, sort: any, filter: any) => getTableData(params, sort, filter)} />}
|
|
|
|
|
|
|
+ const filtedCheckCodes = _tempCheckedCodes.filter((a) => leftCheckedMenuIds.includes(a.menuId));
|
|
|
|
|
|
|
|
|
|
+ set_checkedTableMenuIds([...leftCheckedMenuIds]);
|
|
|
|
|
+ set_checkBoxCodes([...uniqueFunc(filtedCheckCodes, 'menuId')]);
|
|
|
|
|
+ }
|
|
|
|
|
+ },
|
|
|
|
|
+ }}
|
|
|
|
|
+ pagination={false}
|
|
|
|
|
+ reload={drawerTablereload}
|
|
|
|
|
+ newVer
|
|
|
|
|
+ params={drawerTableDataFilterParams}
|
|
|
|
|
+ rowKey="menuId"
|
|
|
|
|
+ columns={columnsData as ProColumns[]}
|
|
|
|
|
+ request={(params: any, sort: any, filter: any) => getTableData(params, sort, filter)}
|
|
|
|
|
+ />
|
|
|
|
|
+ )}
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
-
|
|
|
|
|
</DrawerForm>
|
|
</DrawerForm>
|
|
|
- )
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
|
|
+ );
|
|
|
|
|
+};
|
|
|
|
|
|
|
|
const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
|
|
const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
|
|
|
const { reloadTable } = state;
|
|
const { reloadTable } = state;
|
|
@@ -738,13 +712,9 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
|
|
|
const [tableDataSearchKeywords, set_tableDataSearchKeywords] = useState<string>('');
|
|
const [tableDataSearchKeywords, set_tableDataSearchKeywords] = useState<string>('');
|
|
|
const [tabIds, set_tabIds] = useState<Key[]>([]);
|
|
const [tabIds, set_tabIds] = useState<Key[]>([]);
|
|
|
const [open, set_open] = useState(false);
|
|
const [open, set_open] = useState(false);
|
|
|
- const [currentEditHosp,set_currentEditHosp] = useState<undefined|any>(undefined);
|
|
|
|
|
|
|
+ const [currentEditHosp, set_currentEditHosp] = useState<undefined | any>(undefined);
|
|
|
const [navSelecterData, set_navSelecterData] = useState<NavSelecterData[]>([]);
|
|
const [navSelecterData, set_navSelecterData] = useState<NavSelecterData[]>([]);
|
|
|
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
const columns: ProColumns<TableListItem>[] = [
|
|
const columns: ProColumns<TableListItem>[] = [
|
|
|
{
|
|
{
|
|
|
title: '院区ID',
|
|
title: '院区ID',
|
|
@@ -822,7 +792,14 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
|
|
|
// >
|
|
// >
|
|
|
// <a>删除</a>
|
|
// <a>删除</a>
|
|
|
// </Popconfirm>,
|
|
// </Popconfirm>,
|
|
|
- <a onClick={() => { editHospSystemPermissions(record); set_open(true); }}>系统</a>,
|
|
|
|
|
|
|
+ <a
|
|
|
|
|
+ onClick={() => {
|
|
|
|
|
+ editHospSystemPermissions(record);
|
|
|
|
|
+ set_open(true);
|
|
|
|
|
+ }}
|
|
|
|
|
+ >
|
|
|
|
|
+ 系统
|
|
|
|
|
+ </a>,
|
|
|
<Divider key="2" type="vertical" style={{ margin: '0 1px' }} />,
|
|
<Divider key="2" type="vertical" style={{ margin: '0 1px' }} />,
|
|
|
<DrawerActBtn record={record} />,
|
|
<DrawerActBtn record={record} />,
|
|
|
<Divider key="3" type="vertical" style={{ margin: '0 1px' }} />,
|
|
<Divider key="3" type="vertical" style={{ margin: '0 1px' }} />,
|
|
@@ -837,20 +814,47 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
|
|
|
<a>删除</a>
|
|
<a>删除</a>
|
|
|
</Popconfirm>,
|
|
</Popconfirm>,
|
|
|
<Divider key="10" type="vertical" style={{ margin: '0 1px' }} />,
|
|
<Divider key="10" type="vertical" style={{ margin: '0 1px' }} />,
|
|
|
- <Dropdown key='4' menu={{
|
|
|
|
|
- items: [
|
|
|
|
|
- { key: '1', label: <a key="link4" onClick={() => youshuAccountBind(record)}>报告</a> },
|
|
|
|
|
- // { key: '2', label: <DrawerActBtn record={record} /> },
|
|
|
|
|
- // { key: '3', label: <a key="link5" onClick={() => initHospData(record)}>初始化</a> },
|
|
|
|
|
- { key: '4', label: <a key="link6" onClick={() => setOnlyRead(record)}>按系统初始化</a> },
|
|
|
|
|
- {
|
|
|
|
|
- key: '6', label: <a key="link5" onClick={() => initHospData(record)}>按菜单初始化</a>,
|
|
|
|
|
- },
|
|
|
|
|
- {
|
|
|
|
|
- key: '5', label: <a key="link7" onClick={() => editHandle(record)}>编辑</a>,
|
|
|
|
|
- },
|
|
|
|
|
- ]
|
|
|
|
|
- }}>
|
|
|
|
|
|
|
+ <Dropdown
|
|
|
|
|
+ key="4"
|
|
|
|
|
+ menu={{
|
|
|
|
|
+ items: [
|
|
|
|
|
+ {
|
|
|
|
|
+ key: '1',
|
|
|
|
|
+ label: (
|
|
|
|
|
+ <a key="link4" onClick={() => youshuAccountBind(record)}>
|
|
|
|
|
+ 报告
|
|
|
|
|
+ </a>
|
|
|
|
|
+ ),
|
|
|
|
|
+ },
|
|
|
|
|
+ // { key: '2', label: <DrawerActBtn record={record} /> },
|
|
|
|
|
+ // { key: '3', label: <a key="link5" onClick={() => initHospData(record)}>初始化</a> },
|
|
|
|
|
+ {
|
|
|
|
|
+ key: '4',
|
|
|
|
|
+ label: (
|
|
|
|
|
+ <a key="link6" onClick={() => setOnlyRead(record)}>
|
|
|
|
|
+ 按系统初始化
|
|
|
|
|
+ </a>
|
|
|
|
|
+ ),
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ key: '6',
|
|
|
|
|
+ label: (
|
|
|
|
|
+ <a key="link5" onClick={() => initHospData(record)}>
|
|
|
|
|
+ 按菜单初始化
|
|
|
|
|
+ </a>
|
|
|
|
|
+ ),
|
|
|
|
|
+ },
|
|
|
|
|
+ {
|
|
|
|
|
+ key: '5',
|
|
|
|
|
+ label: (
|
|
|
|
|
+ <a key="link7" onClick={() => editHandle(record)}>
|
|
|
|
|
+ 编辑
|
|
|
|
|
+ </a>
|
|
|
|
|
+ ),
|
|
|
|
|
+ },
|
|
|
|
|
+ ],
|
|
|
|
|
+ }}
|
|
|
|
|
+ >
|
|
|
<a>
|
|
<a>
|
|
|
更多 <DownOutlined />
|
|
更多 <DownOutlined />
|
|
|
</a>
|
|
</a>
|
|
@@ -859,7 +863,6 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
|
|
|
},
|
|
},
|
|
|
];
|
|
];
|
|
|
|
|
|
|
|
-
|
|
|
|
|
const getHospData = async (params: TableRequestParamsType) => {
|
|
const getHospData = async (params: TableRequestParamsType) => {
|
|
|
const { current = 1, pageSize = 10, hospName: hospitalName } = params;
|
|
const { current = 1, pageSize = 10, hospName: hospitalName } = params;
|
|
|
const resp = await getAllHosp({
|
|
const resp = await getAllHosp({
|
|
@@ -922,7 +925,6 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
|
|
|
});
|
|
});
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-
|
|
|
|
|
//编辑系统权限
|
|
//编辑系统权限
|
|
|
const editHospSystemPermissions = async (record: TableListItem) => {
|
|
const editHospSystemPermissions = async (record: TableListItem) => {
|
|
|
const { selectedMenuIds, allMenuVO } = await getSpacifyHospMenu({ hospId: record.id });
|
|
const { selectedMenuIds, allMenuVO } = await getSpacifyHospMenu({ hospId: record.id });
|
|
@@ -938,8 +940,7 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
|
|
|
act: TableActType.EDITMENU,
|
|
act: TableActType.EDITMENU,
|
|
|
},
|
|
},
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const editMenuBind = async (record: TableListItem) => {
|
|
const editMenuBind = async (record: TableListItem) => {
|
|
|
//编辑菜单绑定关系
|
|
//编辑菜单绑定关系
|
|
@@ -981,84 +982,68 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
|
|
|
type: 'hospManageModel/reloadTable',
|
|
type: 'hospManageModel/reloadTable',
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const initHospData = async (record: TableListItem) => {
|
|
const initHospData = async (record: TableListItem) => {
|
|
|
const resp = await hospInit(record.id);
|
|
const resp = await hospInit(record.id);
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const tableDataSearchHandle = (paramName: string) => {
|
|
const tableDataSearchHandle = (paramName: string) => {
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
set_tableDataFilterParams({
|
|
set_tableDataFilterParams({
|
|
|
...tableDataFilterParams,
|
|
...tableDataFilterParams,
|
|
|
- [`${paramName}`]: tableDataSearchKeywords
|
|
|
|
|
- })
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ [`${paramName}`]: tableDataSearchKeywords,
|
|
|
|
|
+ });
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
const onCheckedHandle = async (data: NavSelecterItemType[]) => {
|
|
const onCheckedHandle = async (data: NavSelecterItemType[]) => {
|
|
|
-
|
|
|
|
|
dispatch &&
|
|
dispatch &&
|
|
|
dispatch({
|
|
dispatch({
|
|
|
type: 'hospManageModel/postEditData',
|
|
type: 'hospManageModel/postEditData',
|
|
|
- payload: { bindMenuIds: data.map(a => a.menuId) },
|
|
|
|
|
|
|
+ payload: { bindMenuIds: data.map((a) => a.menuId) },
|
|
|
});
|
|
});
|
|
|
-
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ };
|
|
|
|
|
|
|
|
return (
|
|
return (
|
|
|
<div className="HospManage">
|
|
<div className="HospManage">
|
|
|
<ActModal {...state} dispatch={dispatch} />
|
|
<ActModal {...state} dispatch={dispatch} />
|
|
|
- {
|
|
|
|
|
- open && (
|
|
|
|
|
- <NavSelecter title={`系统权限设置(${currentEditHosp?.hospName})`} data={navSelecterData} onVisibleChange={(bool) => set_open(bool)} value={tabIds} onChecked={onCheckedHandle} />
|
|
|
|
|
- )
|
|
|
|
|
- }
|
|
|
|
|
- <div className='toolBar'>
|
|
|
|
|
- <div className='filter'>
|
|
|
|
|
- <div className='filterItem'>
|
|
|
|
|
- <span className='label'>检索:</span>
|
|
|
|
|
- <KCInput placeholder={'请输入院区名称'} style={{ width: 160 }} search allowClear
|
|
|
|
|
|
|
+ {open && <NavSelecter title={`系统权限设置(${currentEditHosp?.hospName})`} data={navSelecterData} onVisibleChange={(bool) => set_open(bool)} value={tabIds} onChecked={onCheckedHandle} />}
|
|
|
|
|
+ <div className="toolBar">
|
|
|
|
|
+ <div className="filter">
|
|
|
|
|
+ <div className="filterItem">
|
|
|
|
|
+ <span className="label">检索:</span>
|
|
|
|
|
+ <KCInput
|
|
|
|
|
+ placeholder={'请输入院区名称'}
|
|
|
|
|
+ style={{ width: 160 }}
|
|
|
|
|
+ search
|
|
|
|
|
+ allowClear
|
|
|
onChange={(e) => {
|
|
onChange={(e) => {
|
|
|
set_tableDataSearchKeywords(e.target.value);
|
|
set_tableDataSearchKeywords(e.target.value);
|
|
|
if (e.target.value.length == 0) {
|
|
if (e.target.value.length == 0) {
|
|
|
set_tableDataFilterParams({
|
|
set_tableDataFilterParams({
|
|
|
...tableDataFilterParams,
|
|
...tableDataFilterParams,
|
|
|
- hospName: ''
|
|
|
|
|
|
|
+ hospName: '',
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
}}
|
|
}}
|
|
|
onSearch={() => tableDataSearchHandle('hospName')}
|
|
onSearch={() => tableDataSearchHandle('hospName')}
|
|
|
-
|
|
|
|
|
/>
|
|
/>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <div className='btnGroup'>
|
|
|
|
|
- <span className='add' onClick={addHandle}>新增</span>
|
|
|
|
|
|
|
+ <div className="btnGroup">
|
|
|
|
|
+ <span className="add" onClick={addHandle}>
|
|
|
|
|
+ 新增
|
|
|
|
|
+ </span>
|
|
|
</div>
|
|
</div>
|
|
|
</div>
|
|
</div>
|
|
|
- <KCTable
|
|
|
|
|
- newVer
|
|
|
|
|
- rowKey="id"
|
|
|
|
|
- columns={columns}
|
|
|
|
|
- reload={reloadTable}
|
|
|
|
|
- options={false}
|
|
|
|
|
- params={tableDataFilterParams}
|
|
|
|
|
- request={(params) => getHospData(params)}
|
|
|
|
|
- />
|
|
|
|
|
|
|
+ <KCTable newVer rowKey="id" columns={columns} reload={reloadTable} options={false} params={tableDataFilterParams} request={(params) => getHospData(params)} />
|
|
|
</div>
|
|
</div>
|
|
|
);
|
|
);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-export default connect(
|
|
|
|
|
- ({ hospManageModel, loading }: { hospManageModel: hospManageModelState; loading: Loading }) => {
|
|
|
|
|
- // console.log({userManageModel});
|
|
|
|
|
- return {
|
|
|
|
|
- hospManageModel,
|
|
|
|
|
- loading: loading.models.hospManageModel,
|
|
|
|
|
- };
|
|
|
|
|
- },
|
|
|
|
|
-)(HospManage);
|
|
|
|
|
|
|
+export default connect(({ hospManageModel, loading }: { hospManageModel: hospManageModelState; loading: Loading }) => {
|
|
|
|
|
+ // console.log({userManageModel});
|
|
|
|
|
+ return {
|
|
|
|
|
+ hospManageModel,
|
|
|
|
|
+ loading: loading.models.hospManageModel,
|
|
|
|
|
+ };
|
|
|
|
|
+})(HospManage);
|