Переглянути джерело

调整抽屉绑权限逻辑

code4eat 2 роки тому
батько
коміт
ea2cecb056

+ 47 - 54
src/pages/platform/setting/hospManage/index.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-13 15:22:48
- * @LastEditTime: 2023-03-23 15:55:50
+ * @LastEditTime: 2023-03-24 11:25:37
  * @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
@@ -12,7 +12,7 @@ import { hospManageModelState, ConnectProps, Loading, connect } from 'umi';
 import { Button, Checkbox, Divider, Drawer, Dropdown, Input, Popconfirm, Switch, Table, Tree, TreeProps } from 'antd';
 import KCTable from '@/components/kcTable';
 import type { ProColumns } from '@ant-design/pro-table';
-import { getAllHosp, getHospYoushuAccounts, getMenuRelaPerm, hospInit, saveHospMenuApiPerm, setReadOnly } from '@/service/hospList';
+import { getAllHosp, getHospOwnSys, getHospYoushuAccounts, getMenuRelaPerm, hospInit, saveHospMenuApiPerm, setReadOnly } from '@/service/hospList';
 import { TableRequestParamsType } from '@/typings';
 import ActModal from './modals/modal';
 import './style.less';
@@ -22,11 +22,11 @@ import { KCInput } from '@/components/KCInput';
 import { createFromIconfontCN, DownOutlined } from '@ant-design/icons';
 import { DrawerForm } from '@ant-design/pro-form';
 import { DataNode } from 'antd/es/tree';
-import { getTreeData, getTreeDataRespType } from '../systemNavMana/service';
+import { getTreeDataRespType } from '../systemNavMana/service';
 
 import expandedIcon from '../../../../../public/images/treenode_open.png';
 import closeIcon from '../../../../../public/images/treenode_collapse.png';
-import { getDeepestTreeData } from '@/utils';
+import { getDeepestTreeData, uniqueFunc } from '@/utils';
 import { CheckboxValueType } from 'antd/lib/checkbox/Group';
 
 export enum TableActType {
@@ -179,6 +179,8 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
 
     const [checkedTableMenuIds, set_checkedTableMenuIds] = useState<any[]>([]);
 
+    const [oldSelectedMenuIds, set_oldSelectedMenuIds] = useState<any[]>([]);
+
     const columnsData: ProColumns<TableListItem>[] = [
       {
         title: '名称',
@@ -283,8 +285,8 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
       },
     ];
 
-    const getTreeReqFunc = async (name?: string) => {
-      const resp = await getTreeData();
+    const getTreeReqFunc = async (hospId: string) => {
+      const resp = await getHospOwnSys(hospId);
       set_treeData(resp);
     }
 
@@ -373,16 +375,14 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
 
             });
 
-            set_checkBoxCodes(temp);
-            set_checkedTableMenuIds(temp.map((a: any) => a.menuId))
-
-
-            return data;
           }
 
-          setTreeRecursion(resp)
-
+          setTreeRecursion(resp);
 
+          set_checkBoxCodes(temp);
+          console.log({temp});
+          set_checkedTableMenuIds(temp.map((a: any) => a.menuId));
+          set_oldSelectedMenuIds(temp.map((a: any) => a.menuId));
 
           return {
             data: resp,
@@ -400,17 +400,23 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
 
     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.id,systemId: currentSelectedTreeNode.code }));
+      let old = oldSelectedMenuIds;
+      
+      console.log({oldSelectedMenuIds,checkBoxCodes});
+      
+      const result = checkBoxCodes.map((item: any) => {
+       
+        old.splice(old.findIndex(a=>a == item.menuId),1);
+
+        return { ...item, hospId: record.id, systemId: currentSelectedTreeNode.code }
+
+      });
+
+      const needCancelMenus = old.map(a => ({ hospId: record.id, systemId: currentSelectedTreeNode.code, function: [], menuId: a }));
 
       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 saveHospMenuApiPerm(result.length == 0 ? [{ hospId: record.id, systemId: currentSelectedTreeNode.code }] :uniqueFunc(data,'menuId') );
+      const resp = await saveHospMenuApiPerm(result.length == 0 ? [{ hospId: record.id, systemId: currentSelectedTreeNode.code }] : data);
 
       if (resp) {
         set_drawerTablereload(true);
@@ -450,7 +456,7 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
 
     useEffect(() => {
       if (currentSelectedTreeNode) {
-        set_drawerTableDataFilterParams({ ...tableDataFilterParams, systemId: currentSelectedTreeNode.code })
+        set_drawerTableDataFilterParams({ ...drawerTableDataFilterParams, systemId: currentSelectedTreeNode.code })
       }
 
       //切换系统清空数据
@@ -477,7 +483,7 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
 
 
     useEffect(() => {
-      getTreeReqFunc();
+      getTreeReqFunc(record.id);
 
     }, []);
 
@@ -485,7 +491,7 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
     return (
       <DrawerForm
         trigger={
-          <a key="link3" onClick={(e) => { set_drawerVisible(true); }}>接口</a>
+          <a key="link3" onClick={(e) => { set_drawerVisible(true); }}>功能</a>
         }
         width={908}
         // visible={drawerVisible}
@@ -621,7 +627,7 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
                   onSelect: (record, selected, selectedRows, nativeEvent) => {
                     //console.log({ record, selected, selectedRows, nativeEvent });
                     let checkedData = checkBoxCodes;
-                    let needCancel = needCancelCheckedMenus;
+
                     if (selected) {
                       //选中
                       selectedRows.forEach(a => {
@@ -631,53 +637,40 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
                             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]);
 
                       }
+
+                      set_checkBoxCodes([...uniqueFunc(checkedData,'menuId')]);
+
                     } else {
-                      let needCancelCheckedRow = [];   //需要取消勾选的表格行
-                      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);
-                          });
-                        }
 
-                        const ids = record.children.map((item: any) => item.menuId);
-                        const leftIds = checkedTableMenuIds.filter((id: number) => !ids.includes(id)); //筛选出剩余选中项
-                        set_checkedTableMenuIds([...leftIds]);
+                      let _tempCheckedCodes = checkBoxCodes;
 
-                      } else if (record.type == 1) {
-                        //菜单
-                        needCancelCheckedRow.push(record.menuId);
-                        const temp = checkedTableMenuIds;
-                        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 leftCheckedMenuIds = selectedRows.map(a => a.menuId);
 
-                        set_needCancelCheckedMenus([...needCancelCheckedMenus, ...needCancelCheckedRow]);
+                      const filtedCheckCodes = _tempCheckedCodes.filter(a => (leftCheckedMenuIds.includes(a.menuId)));
 
-                      }
-                    }
+                      set_checkedTableMenuIds([...leftCheckedMenuIds]);
+
+                      set_checkBoxCodes([...uniqueFunc(filtedCheckCodes, 'menuId')]);
 
-                    //console.log({ checkedData });
-                    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)} />}
 

+ 3 - 2
src/pages/platform/setting/hospManage/modals/modal.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-12 17:11:11
- * @LastEditTime: 2023-03-23 11:29:24
+ * @LastEditTime: 2023-03-23 17:50:10
  * @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/userManage/modal.tsx
@@ -218,7 +218,7 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
       width={tableAct == TableActType.EDITMENU?800:800}
       initialValues={setInitialValues()}
       title={setModalTitle()}
-      labelCol={{
+      labelCol={{ 
         span: 7,
       }}
       wrapperCol={{ span: 12 }}
@@ -389,6 +389,7 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
             label="报告项目Id"
             name="reportId"
             min={0}
+            width={328}
             fieldProps={{ precision: 0 }}
             rules={[
               {

+ 3 - 3
src/pages/platform/setting/notificationTemplate/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2023-03-03 11:30:33
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-03-23 14:12:13
+ * @LastEditTime: 2023-03-23 17:54:17
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/pubDicTypeMana/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -186,7 +186,7 @@ export default function PubDicTypeMana() {
         return (
             <ModalForm
                 title={`${type == 'EDIT' ? '编辑' : '新增'}消息模板`}
-                width={688}
+                width={700}
                 initialValues={type == 'EDIT' ? { 
                     ...record,
                     systemId:record.systemPath?record.systemPath.split(','):[]
@@ -216,7 +216,7 @@ export default function PubDicTypeMana() {
                 <ProFormSelect
                     name="hospId"
                     label="院区:"
-                    disabled={type == 'EDIT'}
+                    // disabled={type == 'EDIT'}
                     placeholder="请选择院区"
                     rules={[{ required: true, message: '院区不能为空!' }]}
                     request={async () => {

+ 60 - 59
src/pages/platform/setting/roleManage/index.tsx

@@ -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,

+ 113 - 95
src/pages/platform/setting/systemNavMana/index.tsx

@@ -4,7 +4,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-12-16 09:42:52
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2023-03-21 10:17:27
+ * @LastEditTime: 2023-03-23 17:33:53
  * @FilePath: /BudgetManaSystem/src/pages/budgetMana/monthlySet/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -169,7 +169,7 @@ const MonthlyInfoCheck: React.FC = () => {
             title: '操作',
             key: 'option',
             width: 120,
-            fixed:'right',
+            fixed: 'right',
             valueType: 'option',
             render: (_: any, record: any) => {
                 return record.type != 1 && record.type != 2 && record.type != 4 ? [
@@ -245,9 +245,9 @@ const MonthlyInfoCheck: React.FC = () => {
     }
 
 
-    const delMenuHandle = async (record:any) => {
-         const resp = await delData(record.menuId);
-         resp&&set_reload(true);
+    const delMenuHandle = async (record: any) => {
+        const resp = await delData(record.menuId);
+        resp && set_reload(true);
     }
 
     interface DataType {
@@ -278,11 +278,11 @@ const MonthlyInfoCheck: React.FC = () => {
             if (resp) {
 
                 set_datasource(resp);
-              
+
                 if (record && record.functionList) {
 
                     const defaultSelctedkeys = record.functionList.map((item: any) => item.code);
-                   
+
                     setTargetKeys(defaultSelctedkeys);
                 }
 
@@ -301,11 +301,11 @@ const MonthlyInfoCheck: React.FC = () => {
         useImperativeHandle(ref, () => ({
             save: async () => {
 
-                const data = datasource.filter(item=>targetKeys.includes(item.code));
-             
+                const data = datasource.filter(item => targetKeys.includes(item.code));
+
                 const resp = await updateFuncDic({
-                       menuId:record.menuId,
-                       function:data
+                    menuId: record.menuId,
+                    function: data
                 });
                 if (resp) {
                     set_reload(true);
@@ -332,8 +332,8 @@ const MonthlyInfoCheck: React.FC = () => {
                 targetKeys={targetKeys}
                 selectedKeys={selectedKeys}
                 filterOption={(inputValue, item) => {
-                   return  item.name!.indexOf(inputValue) !== -1
-                
+                    return item.name!.indexOf(inputValue) !== -1
+
                 }}
             >
                 {({
@@ -385,7 +385,7 @@ const MonthlyInfoCheck: React.FC = () => {
     })
 
 
-    
+
 
     const dataList: any[] = [];
 
@@ -457,29 +457,29 @@ const MonthlyInfoCheck: React.FC = () => {
     }
 
 
-    const updateTable = async (type: 'EDIT' | "ADD",formVal: any,record:any) => {
+    const updateTable = async (type: 'EDIT' | "ADD", formVal: any, record: any) => {
 
 
 
         if (type == 'ADD') {
             let data = undefined;
-            if(record){
-                  //添加操作
-                  data = {...formVal,parentId:record.menuId,systemId:record.systemId}
-            }else{
-                 //新增
-                 data = {...formVal,parentId:currentSelectedTreeNode.code,systemId:currentSelectedTreeNode.code}
+            if (record) {
+                //添加操作
+                data = { ...formVal, parentId: record.menuId, systemId: record.systemId }
+            } else {
+                //新增
+                data = { ...formVal, parentId: currentSelectedTreeNode.code, systemId: currentSelectedTreeNode.code }
             }
 
-            const resp = await addData({ ...data});
+            const resp = await addData({ ...data });
 
             if (resp) {
                 set_reload(true);
             }
         }
         if (type == 'EDIT') {
-            
-            const resp = await editData({...record,...formVal});
+
+            const resp = await editData({ ...record, ...formVal });
             if (resp) {
                 set_reload(true);
             }
@@ -508,8 +508,8 @@ const MonthlyInfoCheck: React.FC = () => {
                 onFinish={(val) => {
                     set_currentOperateRow(record);
 
-                    return updateTable(type,val,record)
-                       
+                    return updateTable(type, val, record)
+
                 }}
             >
                 <ProFormText
@@ -532,10 +532,6 @@ const MonthlyInfoCheck: React.FC = () => {
                         {
                             label: '菜单',
                             value: 2
-                        },
-                        {
-                            label: '有数bi',
-                            value: 4
                         }
                     ]}
                     rules={[{ required: true, message: '类型不能为空!' }]}
@@ -562,68 +558,90 @@ const MonthlyInfoCheck: React.FC = () => {
                     colProps={{ span: 12 }}
                 //rules={[{ required: true, message: '类型代码不能为空!' }]}
                 />
-                <ProFormRadio.Group
-                    name="isHomepage"
-                    label="是否首页:"
-                    width={'xs'}
-                    placeholder="请选择"
-                    colProps={{ span: 12 }}
-                    rules={[{ required: true, message: '是否为首页不能为空!' }]}
-                    options={[
-                        {
-                            label: '是',
-                            value: 1,
-                        },
-                        {
-                            label: '否',
-                            value: 0,
-                        },
-                    ]}
-                //rules={[{ required: true, message: '类型代码不能为空!' }]}
-                />
-                <ProForm.Group colProps={{ span: 12 }} align='start'>
-                    <ProFormSelect
-                        name="contentType"
-                        label="内容类型:"
-                        placeholder="请输入"
-                        width={100}
-                        colProps={{ span: 8 }}
-                        options={[
-                            { label: '一般', value: 0 },
-                            { label: '报告', value: 1 },
-                            { label: '大屏', value: 2 },
-                            { label: '填报', value: 3 },
-                            { label: '空白', value: 4 },
-                        ]}
-                        rules={[{ required: true, message: '类型不能为空!' }]}
-                    />
-                    <ProFormDependency name={['contentType']}>
-                        {
-                            ({ contentType }) => {
-                                return contentType == 1 && (
-                                    <div style={{ position: 'relative', top: 24 }}>
-                                        <ProFormText
-                                            noStyle
-                                            width={210}
-                                            className='reportId'
-                                            name="reportId"
-                                            placeholder="请输入报告Id"
-                                            colProps={{ span: 16 }}
-                                        //rules={[{ required: true, message: '类型代码不能为空!' }]}
-                                        />
-                                    </div>
-                                )
-                            }
-                        }
-                    </ProFormDependency>
-                </ProForm.Group>
-                <ProFormText
-                    name="url"
-                    label="URL:"
-                    placeholder="请输入"
-                    colProps={{ span: 12 }}
-                //rules={[{ required: true, message: '类型代码不能为空!' }]}
-                />
+                <ProFormDependency name={['type']}>
+                    {
+                        ({ type }) => type == 2 && (
+                            <ProFormRadio.Group
+                                name="isHomepage"
+                                label="是否首页:"
+                                width={'xs'}
+                                placeholder="请选择"
+                                colProps={{ span: 12 }}
+                                rules={[{ required: true, message: '是否为首页不能为空!' }]}
+                                options={[
+                                    {
+                                        label: '是',
+                                        value: 1,
+                                    },
+                                    {
+                                        label: '否',
+                                        value: 0,
+                                    },
+                                ]}
+                            //rules={[{ required: true, message: '类型代码不能为空!' }]}
+                            />
+                        )
+                    }
+                </ProFormDependency>
+
+                <ProFormDependency name={['type']}>
+                    {
+                        ({ type }) => type == 2 && (
+                            <ProForm.Group colProps={{ span: 12 }} align='start'>
+                                <ProFormSelect
+                                    name="contentType"
+                                    label="内容类型:"
+                                    placeholder="请输入"
+                                    width={100}
+                                    colProps={{ span: 8 }}
+                                    options={[
+                                        { label: '一般', value: 0 },
+                                        { label: '报告', value: 1 },
+                                        { label: '大屏', value: 2 },
+                                        { label: '填报', value: 3 },
+                                        { label: '空白', value: 4 },
+                                    ]}
+                                    rules={[{ required: true, message: '类型不能为空!' }]}
+                                />
+                                <ProFormDependency name={['contentType']}>
+                                    {
+                                        ({ contentType }) => {
+                                            return contentType == 1 && (
+                                                <div style={{ position: 'relative', top: 24 }}>
+                                                    <ProFormText
+                                                        noStyle
+                                                        width={210}
+                                                        className='reportId'
+                                                        name="reportId"
+                                                        placeholder="请输入报告Id"
+                                                        colProps={{ span: 16 }}
+                                                    //rules={[{ required: true, message: '类型代码不能为空!' }]}
+                                                    />
+                                                </div>
+                                            )
+                                        }
+                                    }
+                                </ProFormDependency>
+                            </ProForm.Group>
+                        )
+                    }
+                </ProFormDependency>
+
+                <ProFormDependency name={['type']}>
+                    {
+                        ({ type }) => type == 2 && (
+                            <ProFormText
+                                name="url"
+                                label="URL:"
+                                placeholder="请输入"
+                                colProps={{ span: 12 }}
+                            //rules={[{ required: true, message: '类型代码不能为空!' }]}
+                            />
+                        )
+                    }
+                </ProFormDependency>
+
+
                 <ProFormTextArea
                     name="description"
                     label="描述:"
@@ -642,7 +660,7 @@ const MonthlyInfoCheck: React.FC = () => {
         if (currentSelectedTreeNode) {
             set_tableDataFilterParams({ ...tableDataFilterParams, systemId: currentSelectedTreeNode.code })
         }
-       
+
     }, [currentSelectedTreeNode]);
 
 
@@ -755,7 +773,7 @@ const MonthlyInfoCheck: React.FC = () => {
                                         });
                                     }
                                 }}
-                            onSearch={() => tableDataSearchHandle('name')}
+                                onSearch={() => tableDataSearchHandle('name')}
 
                             />
                         </div>
@@ -766,7 +784,7 @@ const MonthlyInfoCheck: React.FC = () => {
                     </div>
 
                 </div>
-                {currentSelectedTreeNode && <KCTable pagination={false} reload={reload} newVer params={tableDataFilterParams}  rowKey='menuId' columns={columns as ProColumns[]} request={(params: any, sort: any, filter: any) => getTableData(params, sort, filter)} />}
+                {currentSelectedTreeNode && <KCTable pagination={false} reload={reload} newVer params={tableDataFilterParams} rowKey='menuId' columns={columns as ProColumns[]} request={(params: any, sort: any, filter: any) => getTableData(params, sort, filter)} />}
 
             </div>
         </div>

+ 11 - 8
src/pages/platform/setting/userManage/index.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-11 09:43:18
- * @LastEditTime: 2023-03-23 15:05:03
+ * @LastEditTime: 2023-03-23 19:28:47
  * @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/userManage/index.tsx
@@ -104,12 +104,15 @@ const UserManage: FC<PageProps> = ({ userManageModel: state, dispatch }) => {
   ];
 
   const getUserData = async (params: TableRequestParamsType) => {
-    const { current = 1, pageSize = 10, name = undefined, account = undefined } = params;
+  
+    const { current = 1, pageSize = 10, name = undefined, account = undefined,departmentId=undefined} = params;
+
 
     const resp = await getUsers({
       current,
       pageSize,
       keyword: name ? name : account,
+      departmentId
     });
 
     //获取万最新数据取消重置reload
@@ -277,17 +280,17 @@ const UserManage: FC<PageProps> = ({ userManageModel: state, dispatch }) => {
           <div className='filterItem' style={{ marginRight: 16}}>
             <span className='label'>科室:</span>
             <ProFormSelect
-                    name="name"
+                    name="departmentId"
                     noStyle
                     style={{width:160}}
                     options={setSelectorData('PRACTICE_DEPARTMENT_TYPE').list}
                     placeholder="请选择"
                     fieldProps={{
                       onChange:(val) => {
-                        console.log({val});
+                        console.log('departmentId',val);
                         set_tableDataFilterParams({
                           ...tableDataFilterParams,
-                          name:val
+                          departmentId:val
                         });
                       }
                     }}
@@ -295,17 +298,17 @@ const UserManage: FC<PageProps> = ({ userManageModel: state, dispatch }) => {
           </div>
           <div className='filterItem'>
             <span className='label'>检索:</span>
-            <KCInput placeholder={'请输入工号'} style={{ width: 160 }} search allowClear
+            <KCInput placeholder={'请输入姓名/工号'} style={{ width: 160 }} search allowClear
               onChange={(e) => {
                 set_tableDataSearchKeywords(e.target.value);
                 if (e.target.value.length == 0) {
                   set_tableDataFilterParams({
                     ...tableDataFilterParams,
-                    account: ''
+                    name: ''
                   });
                 }
               }}
-              onSearch={() => tableDataSearchHandle('account')}
+              onSearch={() => tableDataSearchHandle('name')}
 
             />
           </div>

+ 37 - 24
src/pages/platform/setting/userManage/modal.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-12 17:11:11
- * @LastEditTime: 2023-03-23 16:28:54
+ * @LastEditTime: 2023-03-23 17:51:52
  * @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/userManage/modal.tsx
@@ -126,8 +126,8 @@ const ActModal: React.FC<ActModalProps> = ({
 
       return {
         defaultvalue: defaultValue[0] ? defaultValue[0].value : '',
-        list: dataArr.map(t =>{
-             return ({ label: t.value, value: t.code })
+        list: dataArr.map(t => {
+          return ({ label: t.value, value: t.code })
         })
       }
     }
@@ -166,11 +166,11 @@ const ActModal: React.FC<ActModalProps> = ({
           title: setSelectorData('TITLE_TYPE').defaultvalue,
           practiceCate: setSelectorData('JOB_TYPE').defaultvalue,
           practiceStatus: setSelectorData('PROFESSIONAL_STATUS_TYPE').defaultvalue,
-          position:setSelectorData('POSITION').defaultvalue,
-          departmentId:setSelectorData('PRACTICE_DEPARTMENT_TYPE').defaultvalue,
-          userCate:setSelectorData('PERSONNEL_CATEGORY').defaultvalue,
-          degree:setSelectorData('EDUCATION').defaultvalue,
-          
+          position: setSelectorData('POSITION').defaultvalue,
+          departmentId: setSelectorData('PRACTICE_DEPARTMENT_TYPE').defaultvalue,
+          userCate: setSelectorData('PERSONNEL_CATEGORY').defaultvalue,
+          degree: setSelectorData('EDUCATION').defaultvalue,
+
         }
       }
       title={tableAct == TableActType.EDIT ? '编辑用户' : '新增用户'}
@@ -316,7 +316,7 @@ const ActModal: React.FC<ActModalProps> = ({
                 </ProFormDependency>
 
                 <div className='formItem'>
-                  <ProFormText name="graduateSchool" label="毕业院校:" placeholder="请输入" rules={[{ required: true, message: '请输入院校!' }]} />
+                  <ProFormText name="graduateSchool" label="毕业院校:" placeholder="请输入" rules={[{ required: false, message: '请输入院校!' }]} />
                 </div>
 
                 <div className='formItem'>
@@ -330,29 +330,42 @@ const ActModal: React.FC<ActModalProps> = ({
                 </div>
 
                 <div className='formItem'>
-                  <ProFormText name="major" label="所学专业:" placeholder="请输入" rules={[{ required: true, message: '请输入专业!' }]} />
-                </div>
-
-                <div className='formItem' >
                   <ProFormSelect
-                    name="practiceCate"
-                    label="执业类别:"
-                    options={setSelectorData('JOB_TYPE').list}
+                    name="major"
+                    label="所学专业:"
+                    options={setSelectorData('PROFESSIONAL_TYPE').list}
                     placeholder="请选择"
+                    rules={[{ required: true, message: '请选择专业!' }]}
                   />
                 </div>
 
+                <div className='formItem' >
+                  <ProFormText name="idCardNum" label="身份证号:" placeholder="请输入" rules={[{ required:false, message: '请选择!' }]} />
+                </div>
+
                 <div className='formItem'>
                   <ProFormText name="phoneNumber" label="手机号:" placeholder="请输入" />
                 </div>
 
-                <div className='formItem' style={{position:'relative',left:-175}}>
-                      <ProFormText name="idCardNum" label="身份证号:" placeholder="请输入" rules={[{ required: true, message: '请选择!' }]} />
-                </div>
 
                 <ProFormDependency name={['userCate']}>
                   {({ userCate }) => (userCate == 6 || userCate == 5) && (
-                    <div className='formItem' style={{position:'relative',left:-175}}>
+                    <div className='formItem' style={{ position: 'relative', left: -175 }}>
+                      <ProFormSelect
+                        name="practiceCate"
+                        label="执业类别:"
+                        options={setSelectorData('JOB_TYPE').list}
+                        placeholder="请选择"
+                      />
+                    </div>
+                  )}
+                </ProFormDependency>
+
+
+
+                <ProFormDependency name={['userCate']}>
+                  {({ userCate }) => (userCate == 6 || userCate == 5) && (
+                    <div className='formItem' style={{ position: 'relative', left: -175 }}>
                       <ProFormSelect
                         name="practiceSubject"
                         label="执业科目:"
@@ -366,7 +379,7 @@ const ActModal: React.FC<ActModalProps> = ({
 
                 <ProFormDependency name={['userCate']}>
                   {({ userCate }) => (userCate == 6 || userCate == 5) && (
-                    <div className='formItem' style={{position:'relative',left:-175}}>
+                    <div className='formItem' style={{ position: 'relative', left: -175 }}>
                       <ProFormText name="practiceCertificateNo" label="执业证号:" placeholder="请输入" rules={[{ required: true, message: '请选择!' }]} />
                     </div>
                   )}
@@ -374,7 +387,7 @@ const ActModal: React.FC<ActModalProps> = ({
 
                 <ProFormDependency name={['userCate']}>
                   {({ userCate }) => (userCate == 6 || userCate == 5) && (
-                    <div className='formItem' style={{position:'relative',left:-175}}>
+                    <div className='formItem' style={{ position: 'relative', left: -175 }}>
                       <ProFormSelect
                         name="practiceStatus"
                         label="执业状态:"
@@ -388,7 +401,7 @@ const ActModal: React.FC<ActModalProps> = ({
 
                 <ProFormDependency name={['userCate']}>
                   {({ userCate }) => (userCate == 6 || userCate == 5) && (
-                    <div className='formItem' style={{position:'relative',left:-175}}>
+                    <div className='formItem' style={{ position: 'relative', left: -175 }}>
                       <ProFormText name="qualificationCertificateNo" label="资格证号:" placeholder="请输入" rules={[{ required: true, message: '请输入!' }]} />
                     </div>
                   )}
@@ -396,7 +409,7 @@ const ActModal: React.FC<ActModalProps> = ({
 
                 <ProFormDependency name={['userCate']}>
                   {({ userCate }) => (userCate == 6 || userCate == 5) && (
-                    <div className='formItem' style={{position:'relative',top:-62}}>
+                    <div className='formItem' style={{ position: 'relative', top: -62 }}>
                       <ProFormSelect
                         name="doctorLevel"
                         label="医师:"

+ 10 - 1
src/service/hospList.ts

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-13 09:15:59
- * @LastEditTime: 2023-03-17 11:21:54
+ * @LastEditTime: 2023-03-23 18:20:48
  * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/src/service/hospList.ts
@@ -202,4 +202,13 @@ export const setReadOnly = async (hospId:string) => {
   return request(`/centerSys/role/initReadOnly?hospId=${hospId}`, {
     method: 'POST'
   });
+};
+
+
+
+//获取当前院的系统列表
+export const getHospOwnSys = async (hospId:string) => {
+  return request(`/centerSys/hospital/getSystemList?hospId=${hospId}`, {
+    method: 'GET'
+  });
 };

+ 2 - 1
src/service/user.ts

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-12 09:55:49
- * @LastEditTime: 2023-03-20 10:47:52
+ * @LastEditTime: 2023-03-23 18:30:03
  * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/src/service/user.ts
@@ -15,6 +15,7 @@ export type getUsersParams = {
   current: number;
   pageSize: number;
   keyword?: string;
+  departmentId?:string;
 };
 
 type paginationDefaultType = {

+ 9 - 1
src/utils.ts

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-13 17:09:05
- * @LastEditTime: 2023-03-14 10:08:32
+ * @LastEditTime: 2023-03-24 09:23:30
  * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/src/utils.js
@@ -95,6 +95,14 @@ export const getDeepestTreeData:any= (tree:any,childrenName:string)=>{
 
 
 
+export const  uniqueFunc = (arr:any[], uniId:string) => {
+  const res = new Map();
+  return arr.filter((item) => !res.has(item[uniId]) && res.set(item[uniId], 1));
+}
+
+
+
+