ソースを参照

添加院区初始化/体系菜单和空白界面逻辑

code4eat 3 年 前
コミット
7fb369b57f

+ 5 - 3
src/app.tsx

@@ -1,7 +1,7 @@
 import { useState } from 'react';
 import { PageLoading } from '@ant-design/pro-layout';
 import { notification, Modal } from 'antd';
-import { RequestConfig, history } from 'umi';
+import { RequestConfig, history, useModel } from 'umi';
 import type { RequestOptionsInit } from 'umi-request';
 import { getHospSubSystemList, UserDataType } from '@/service/login';
 
@@ -33,6 +33,7 @@ type InitialStateType = {
   openedSysLists?: TopBar.Tab[]; //当前已打开的系统列表
   currentSelectedSys?: TopBar.Tab; //当前选中的tab
   logout?: () => Promise<boolean>;
+  childAppIsShowMenu?:boolean; 
   spacicalPageParamsType?: SpacicalPageParamsType[];
   getHospSubSystemListFunc?: () => Promise<any[]>;
 };
@@ -230,9 +231,9 @@ export const qiankun = fetch('/config').then(() => ({
   apps: [
     {
       name: 'app1', // 唯一 id
-      entry: '//112.124.59.133:8804',  //测试
+      //entry: '//112.124.59.133:8804',  //测试
       // entry: '//118.31.245.65:8804', //线上
-      //entry: '//localhost:8804', // 开发
+      entry: '//localhost:8804', // 开发
     },
   ],
   // 完整生命周期钩子请看 https://qiankun.umijs.org/zh/api/#registermicroapps-apps-lifecycles
@@ -244,6 +245,7 @@ export const qiankun = fetch('/config').then(() => ({
 
 //向子应用透传
 export function useQiankunStateForSlave() {
+  
   const [masterState, setMasterState] = useState({});
 
   return {

+ 5 - 6
src/components/topBar/index.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2021-11-16 09:12:37
- * @LastEditTime: 2022-07-05 09:32:13
+ * @LastEditTime: 2022-07-08 11:47:42
  * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/src/pages/index/components/topBar/index.tsx
@@ -62,7 +62,6 @@ const TopBar: React.FC<TopBarType> = (props) => {
     //导航栏系统菜单列表点击回调
     if (currentSelectedTab?.menuId == data.menuId) return;
 
-    
       //临时保存衣打开过的菜单
     const t = localStorage.getItem('visitedTabs');
 
@@ -82,7 +81,7 @@ const TopBar: React.FC<TopBarType> = (props) => {
     set_pageTitle(panelData[currentActivedBlockIndex].child[index].name)
 
     if (panelData[currentActivedBlockIndex].child[index].child) {
-      console.log([...panelData[currentActivedBlockIndex].child[index].child])
+      // console.log([...panelData[currentActivedBlockIndex].child[index].child])
       setSystemTabs([...panelData[currentActivedBlockIndex].child[index].child]);
     }
     setIfOpenPannel(false);
@@ -130,9 +129,9 @@ const TopBar: React.FC<TopBarType> = (props) => {
     );
   };
 
-  const goChannelIndex = () => {
+  const goChannelIndex = (menuData:any) => {
     setIfOpenPannel(false);
-    history.push('/channelIndex/channelIndexOne')
+    onTabClick&&onTabClick(menuData)
   }
 
   const goToHome = () => {
@@ -302,7 +301,7 @@ const TopBar: React.FC<TopBarType> = (props) => {
                     <div className='row' key={index}>
                       <img className='channelIcon' src={require('../../../public/images/zhilianganquan.png')} alt="" />
                       <div className='rowDetail'>
-                        <div className='channelName' onClick={() => goChannelIndex()}>{item.name}</div>
+                        <div className='channelName' onClick={() => goChannelIndex(item)}>{item.name}</div>
                         <div className='channelList'>
                           {
                             item.child && item.child.length > 0 && item.child.map((val, i: number) => {

+ 5 - 1
src/components/topBar/typings.d.ts

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-10 13:56:19
- * @LastEditTime: 2022-07-01 11:09:54
+ * @LastEditTime: 2022-07-08 16:16:41
  * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/src/components/topBar/typings.d.ts
@@ -15,6 +15,8 @@ declare namespace TopBar {
     icon?: string;
     url?: string;
     path: string;
+    type:number;
+    isSetupMenu?:number;
   };
 
 
@@ -23,6 +25,7 @@ declare namespace TopBar {
     name: string;
     menuId: number | string;
     path: string;
+    type:number;
     child: Tab[]
   }
 
@@ -32,6 +35,7 @@ declare namespace TopBar {
     path: string;
     icon?: string;
     systemId: string;
+    type:number;
     child: TypeBlock[]
   }
 

+ 66 - 22
src/layouts/index.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2021-11-09 13:56:33
- * @LastEditTime: 2022-07-04 16:44:54
+ * @LastEditTime: 2022-07-08 16:35:31
  * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/src/layouts/index.tsx
@@ -15,18 +15,33 @@ import { useEffect, useState } from 'react';
 import { getPlatformMenu, getUserPlatformNav } from '@/service/menu';
 import { NavSelecterData } from '@/components/NavSelecter';
 
-const TopHoc = ({ currentSelectedSys,openedSysLists,navData }: { currentSelectedSys: TopBar.Tab | undefined ,openedSysLists:TopBar.Tab[],navData:TopBar.PanelData[]}) => {
+const TopHoc = ({ currentSelectedSys, openedSysLists, navData }: { currentSelectedSys: TopBar.Tab | undefined, openedSysLists: TopBar.Tab[], navData: TopBar.PanelData[] }) => {
   const { initialState, setInitialState } = useModel('@@initialState');
 
-  
+
   const onTabChangeHandle = async (data: TopBar.Tab[]) => {
     // await setInitialState((s) => ({ ...s, openedSysLists: [...data] }));
     // localStorage.setItem('initialState', JSON.stringify(initialState)); //缓存tab状态,防止刷新丢失
   };
 
   const onTabClickHandle = async (data: TopBar.Tab) => {
+ 
     await setInitialState((s) => ({ ...s, currentSelectedSys: data }));
-    history.push(data.path);
+    console.log({data});
+    if(data.type == 4){
+        //空白页面
+        history.push(`${data.path}?isEmpty=true&menuId=${data.menuId}`);
+    }else{
+      if(data.isSetupMenu){
+        //体系菜单掩藏子应用的menu
+        localStorage.setItem('isChildShowMenu','false');
+      }else{
+        localStorage.setItem('isChildShowMenu','true');
+      }
+
+      history.push(data.path);
+    }
+   
   };
 
   const userPannelTabClickhandle = (tag: string) => {
@@ -45,7 +60,8 @@ const TopHoc = ({ currentSelectedSys,openedSysLists,navData }: { currentSelected
             name: '个人中心',
             icon: '',
             url: '',
-            systemId:'-1',
+            systemId: '-1',
+            type:1,
             path: '/personalCenter',
           },
         }));
@@ -69,52 +85,80 @@ const TopHoc = ({ currentSelectedSys,openedSysLists,navData }: { currentSelected
 
 export default function Layout({ children, location, route, history, match }: IRouteComponentProps) {
   const { initialState, setInitialState } = useModel('@@initialState');
-  const [navData,set_navData] = useState<TopBar.PanelData[]>([]);
-  
+  const [navData, set_navData] = useState<TopBar.PanelData[]>([]);
+  const [emptyPageContent, set_emptyPageContent] = useState('');
+  const [isEmpty,set_isEmpty] = useState(false);
+
   const getNavData = async () => {
     const nav = await getUserPlatformNav();
     if (nav) {
       set_navData(nav);
 
-    } 
+    }
   }
 
-  useEffect(()=>{
-    if(location.pathname != '/login'){
+  useEffect(() => {
+    if (location.pathname != '/login') {
       getNavData();
     }
-  },[])
-  
+  }, [])
+
+  useEffect(()=>{
+    set_isEmpty(location.query.isEmpty == 'true');
+  })
+
   if (location.pathname == '/login') {
     return <div>{children}</div>;
   }
-  
+
   return (
     <ProLayout
       layout="top"
       contentStyle={{
         margin: 0,
       }}
+      menuItemRender={(item, dom) => {
+        return (
+          <a
+            onClick={() => {
+              set_emptyPageContent(item.description);
+              history.push(`${item.path}${item.contentType == 4 ? `?isEmpty=true&menuId=${item.key}` : ''}` || '/');
+            }}
+          >
+            {dom}
+          </a>
+        )
+      }}
       menu={{
-        request:async ()=>{
-            return [{
-                path:'/index',
-                name:'欢迎进入医管平台'
-            }]
+
+        request: async () => {
+          return [
+            {
+              path: '/index',
+              name: '欢迎进入医管平台'
+            }
+          ]
         },
       }}
       pageTitleRender={false}
       headerRender={() =>
         initialState && (
-          <TopHoc 
-            navData = {navData}
+          <TopHoc
+            navData={navData}
             currentSelectedSys={initialState.currentSelectedSys}
-            openedSysLists={initialState.openedSysLists?initialState.openedSysLists:[]}
+            openedSysLists={initialState.openedSysLists ? initialState.openedSysLists : []}
           />
         )
       }
     >
-      <div style={{ height: `calc(100vh - 48px)`, overflowY: 'scroll' }}>{children}</div>
+      {
+        isEmpty&& (
+          <div style={{ textAlign: 'center', paddingTop: 100,height:'93vh' }}>
+            <h1>{emptyPageContent}</h1>
+          </div>
+        )
+      }
+      {!isEmpty&&(<div style={{ height: `calc(100vh - 48px)`, overflowY: 'scroll' }}>{children}</div>)}
     </ProLayout>
   );
 }

+ 47 - 34
src/pages/platform/_layout.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-06 15:25:39
- * @LastEditTime: 2022-07-07 18:19:42
+ * @LastEditTime: 2022-07-08 16:29:17
  * @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/_layout.tsx
@@ -14,13 +14,17 @@ import { getPlatformMenu } from '@/service/menu';
 import './index.less';
 import { TreeItemType } from '@/utils';
 import { SpacicalPageParamsType } from '@/typings';
-import { useState } from 'react';
+import { useEffect, useState } from 'react';
 
 export default function Layout({ children, location, route, history, match, ...rest }: IRouteComponentProps) {
   const { initialState, setInitialState } = useModel('@@initialState');
   const [openKeys, set_openKeys] = useState<string[]>([]);
   const [selectedKeys, set_selectedKeys] = useState<string[]>([]);
+  const [emptyPageContent, set_emptyPageContent] = useState('');
+  const isShowMenu = localStorage.getItem('isChildShowMenu');
   // console.log({ children, location, route, history, match});
+
+
   return (
     <ProLayout
       style={{
@@ -32,17 +36,22 @@ export default function Layout({ children, location, route, history, match, ...r
       location={{
 
       }}
+      siderWidth={isShowMenu == 'true' ? 220 : 0}
       pageTitleRender={false}
       disableContentMargin
-      menuItemRender={(item, dom) => (
-        <a
-          onClick={() => {
-            history.push( `${item.path}${item.contentType == 4?'?isEmpty=true':''}` || '/');
-          }}
-        >
-          {dom}
-        </a>
-      )}
+      menuItemRender={(item, dom) => {
+        return (
+          <a
+            onClick={() => {
+              // console.log('_layout',item);
+              set_emptyPageContent(item.description);
+              history.push(`${item.path}${item.contentType == 4 ? `?isEmpty=true&menuId=${item.key}` : ''}` || '/');
+            }}
+          >
+            {dom}
+          </a>
+        )
+      }}
       menuProps={{
         openKeys: [...openKeys],
         selectedKeys: [...selectedKeys],
@@ -95,9 +104,9 @@ export default function Layout({ children, location, route, history, match, ...r
 
               setInitialState((t) => ({ ...t, spacicalPageParamsType: _menu }));
 
-              return [...menuData,{
-                name:'SQL编辑器',
-                path:'/platform/sqlEditer'
+              return [...menuData, {
+                name: 'SQL编辑器',
+                path: '/platform/sqlEditer'
               }];
 
 
@@ -113,30 +122,34 @@ export default function Layout({ children, location, route, history, match, ...r
       navTheme="light"
     >
       {
-        location.query.isEmpty == 'true'&&(
-             <div>
-                  <h1>空白</h1>
-             </div>
+        location.query.isEmpty == 'true' && (
+          <div style={{ textAlign: 'center', paddingTop: 100 }}>
+            <h1>{emptyPageContent}</h1>
+          </div>
         )
       }
-      <PageContainer
-        className="kcmpPageContainer"
-        header={{
-          title: false,
-        }}
-        style={{
-          margin: 0,
-        }}
-      >
+      {
+        location.query.isEmpty != 'true' && (
+          <PageContainer
+            className="kcmpPageContainer"
+            header={{
+              title: false,
+            }}
+            style={{
+              margin: 0,
+            }}
+          >
 
-        <Helmet>
-          <title>精益管理中台</title>
-        </Helmet>
+            <Helmet>
+              <title>精益管理中台</title>
+            </Helmet>
 
-        <div className="page" style={{ height: 'calc(100vh - 98px)', overflowY: 'scroll' }}>
-          {children}
-        </div>
-      </PageContainer>
+            <div className="page" style={{ height: 'calc(100vh - 98px)', overflowY: 'scroll' }}>
+              {children}
+            </div>
+          </PageContainer>
+        )
+      }
     </ProLayout>
   );
 }

+ 4 - 3
src/pages/platform/components/menuEditer/menu.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-14 14:03:42
- * @LastEditTime: 2022-07-07 10:03:07
+ * @LastEditTime: 2022-07-08 11:14:25
  * @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/modals/menu.tsx
@@ -69,8 +69,9 @@ const MenuEditer: React.FC<MenuEditerType> = ({ value = [], onChange, noAction =
   const [targetKeys, setTargetKeys] = useState<string[]>([]);
 
   const onTransFerChange = (keys: string[]) => {
-    setTargetKeys(keys);
-    onChange&&onChange(keys)
+    let _keys = Array.from(new Set(keys));
+    setTargetKeys(_keys);
+    onChange&&onChange(_keys)
   };
   
   interface TreeTransferProps {

+ 20 - 13
src/pages/platform/setting/hospManage/index.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-13 15:22:48
- * @LastEditTime: 2022-07-06 11:37:25
+ * @LastEditTime: 2022-07-08 18:05: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/hospManage/index.tsx
@@ -12,7 +12,7 @@ import { hospManageModelState, ConnectProps, Loading, connect } from 'umi';
 import { Button, Divider, Popconfirm } from 'antd';
 import KCTable from '@/components/kcTable';
 import type { ProColumns } from '@ant-design/pro-table';
-import { getAllHosp, getHospYoushuAccounts } from '@/service/hospList';
+import { getAllHosp, getHospYoushuAccounts, hospInit } from '@/service/hospList';
 import { TableRequestParamsType } from '@/typings';
 import ActModal from './modals/modal';
 import './style.less';
@@ -70,18 +70,18 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
       title: '医院等级',
       dataIndex: 'hospitalLevel',
     },
-    {
-      title: '医院类型',
-      dataIndex: 'hospitalType',
-    },
+    // {
+    //   title: '医院类型',
+    //   dataIndex: 'hospitalType',
+    // },
     {
       title: '医院性质',
       dataIndex: 'hospitalNature',
     },
-    {
-      title: '医院编码',
-      dataIndex: 'hospitalCode',
-    },
+    // {
+    //   title: '医院编码',
+    //   dataIndex: 'hospitalCode',
+    // },
     {
       title: '系统名称',
       dataIndex: 'systemName',
@@ -96,7 +96,7 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
     // },
     {
       title: '操作',
-      width: 250,
+      width: 300,
       key: 'option',
       valueType: 'option',
       render: (text, record) => [
@@ -118,10 +118,13 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
         <a key="link3" onClick={() => editMenuBind(record)}>
           菜单
         </a>,
-        <Divider key="2" type="vertical" style={{ margin: '0 1px' }} />,
-        <a key="link3" onClick={() => youshuAccountBind(record)}>
+        <Divider key="3" type="vertical" style={{ margin: '0 1px' }} />,
+        <a key="link4" onClick={() => youshuAccountBind(record)}>
           报告
         </a>,
+        <a key="link5" onClick={() => initHospData(record)}>
+          初始化
+        </a>,
       ],
     },
   ];
@@ -220,6 +223,10 @@ const HospManage: FC<PageProps> = ({ hospManageModel: state, dispatch }) => {
     }
   };
 
+  const initHospData = async (record: TableListItem)=>{
+        const resp = await hospInit(record.id);
+  }
+
   return (
     <div className="HospManage">
       <ActModal {...state} dispatch={dispatch} />

+ 16 - 4
src/pages/platform/setting/hospManage/modals/modal.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-12 17:11:11
- * @LastEditTime: 2022-07-07 16:26:50
+ * @LastEditTime: 2022-07-08 18:08:32
  * @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
@@ -312,11 +312,23 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
               },
             ]}
           />
-          
+
           <ProFormText width="md" name="hospSign" label="医院标识" disabled />
-          <ProFormText width="md" name="hospAbbreviation" label="简称" placeholder="请输入" />
+          <ProFormText width="md" name="hospAbbreviation" label="简称" placeholder="请输入"
+            rules={[
+              {
+                required: true,
+              },
+            ]} />
+          
+          <ProFormText width="md" name="systemName" label="系统名称" placeholder="请输入"
+            rules={[
+              {
+                required: true,
+              },
+            ]}
+          />
           <ProFormText width="md" name="hospitalCode" label="编码" placeholder="请输入" />
-          <ProFormText width="md" name="systemName" label="系统名称" placeholder="请输入" />
           <ProFormRadio.Group
             name="isDataShare"
             label="是否数据分享"

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

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-12 17:11:11
- * @LastEditTime: 2022-07-07 16:22:10
+ * @LastEditTime: 2022-07-08 16:42:29
  * @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
@@ -138,7 +138,7 @@ const ActModal: React.FC<ActModalProps> = ({
       initialValues={
         tableAct == TableActType.EDIT
           ? { ...currentEdit }
-          : { hospSign: randomString(16), isDataShare: 0 }
+          : { hospSign: randomString(16), isDataShare: 0,isHomepage:0 }
       }
       // title={tableAct == TableActType.EDIT ? '编辑菜单' : tableAct == TableActType.SET ? '设为首页' : '新增菜单'}
       title={setModalFormTitle(tableAct)}

+ 44 - 18
src/pages/platform/setting/userManage/modal.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-12 17:11:11
- * @LastEditTime: 2022-07-06 15:14:25
+ * @LastEditTime: 2022-07-08 18:00:41
  * @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
@@ -13,7 +13,7 @@ import KCProSelect from '@/components/KCProSelect';
 import { message, Button, Spin, Upload } from 'antd';
 import { userManageModelState, Dispatch } from 'umi';
 import { ProFormDateTimePicker, ProFormSelect, ProFormText, ProFormTextArea } from '@ant-design/pro-form';
-import { getHospList } from '@/service/hospList';
+import { getShareHospList } from '@/service/hospList';
 import { AddUsersDataType, getUserRelaSeletData, UserRelaSeletDataListType, UserRelaSeletDataType } from '@/service/user';
 import { LoadingOutlined, UploadOutlined } from '@ant-design/icons';
 // import { TableActType } from "./typings";
@@ -114,13 +114,29 @@ const ActModal: React.FC<ActModalProps> = ({
   }
 
   const setSelectorData = (key: string) => {
-    const result = dirData.filter((t: any) => (t.code == key));
+    let result = dirData.filter((t: any) => (t.code == key));
+
     if (result.length > 0) {
-      return result[0].dataVoList.map((t: any) => ({
-        label: t.code, value: t.value
-      }))
+      
+      let dataArr = result[0].dataVoList;
+
+      let defaultValue = dataArr.filter(t=>t.defaultValue == 1);
+
+      dataArr.sort((prev:UserRelaSeletDataListType,next:UserRelaSeletDataListType)=>{
+        return next.sort - prev.sort;
+      });
+
+      // console.log({dataArr,defaultValue});
+
+      return {
+           defaultvalue:defaultValue[0]?defaultValue[0].value:'',
+           list:dataArr.map(t=>({label:t.code,value:t.value}))
+      }
     }
-    return [];
+    return {
+      defaultvalue:'',
+      list:[]
+    };
   }
 
   useEffect(() => {
@@ -134,7 +150,16 @@ const ActModal: React.FC<ActModalProps> = ({
       layout="horizontal"
       className='ProfileModal'
       initialValues={
-        tableAct == TableActType.EDIT ? { ...currentEditUser } : undefined
+        tableAct == TableActType.EDIT ? { ...currentEditUser } : {
+               //设置当新增时的默认值
+               major:(setSelectorData('PROFESSIONAL_TYPE')).defaultvalue,
+               jobTitle:(setSelectorData('POSITION_TYPE')).defaultvalue,
+               doctorLevel:(setSelectorData('PHYSICIAN_TYPE')).defaultvalue,
+               practiceSubject:setSelectorData('PROCESSIONAL_SUBJECTS_TYPE').defaultvalue,
+               title:setSelectorData('TITLE_TYPE').defaultvalue,
+               practiceCate:setSelectorData('JOB_TYPE').defaultvalue,
+               practiceStatus:setSelectorData('PROFESSIONAL_STATUS_TYPE').defaultvalue
+        }
       }
       title={tableAct == TableActType.EDIT ? '编辑用户' : '新增用户'}
       labelCol={{ span: 5 }}
@@ -163,7 +188,7 @@ const ActModal: React.FC<ActModalProps> = ({
                     width="md"
                     name="hospId"
                     request={async () => {
-                      const hospList = await getHospList();
+                      const hospList = await getShareHospList();
                       if (hospList) {
                         return hospList.map((t) => ({
                           label: t.name,
@@ -184,7 +209,8 @@ const ActModal: React.FC<ActModalProps> = ({
                   <ProFormSelect
                     name="major"
                     label="所学专业:"
-                    request={async () => setSelectorData('PROFESSIONAL_TYPE')}
+                    
+                    options={(setSelectorData('PROFESSIONAL_TYPE')).list}
                     placeholder="请选择"
                     rules={[{ required: true, message: '请选择专业!' }]}
                   />
@@ -193,7 +219,7 @@ const ActModal: React.FC<ActModalProps> = ({
                   <ProFormSelect
                     name="jobTitle"
                     label="职务:"
-                    request={async () => setSelectorData('POSITION_TYPE')}
+                    options={setSelectorData('POSITION_TYPE').list}
                     placeholder="请选择"
                     rules={[{ required: true, message: '请选择职务!' }]}
                   />
@@ -211,15 +237,15 @@ const ActModal: React.FC<ActModalProps> = ({
                   <ProFormSelect
                     name="doctorLevel"
                     label="医师级别:"
-                    request={async () => setSelectorData('PHYSICIAN_TYPE')}
+                    options={setSelectorData('PHYSICIAN_TYPE').list}
                     placeholder="请选择"
                   />
                 </div>
                 <div className='formItem'>
                   <ProFormSelect
-                    name="a"
+                    name="practiceSubject"
                     label="执业科目:"
-                    request={async () => setSelectorData('PROCESSIONAL_SUBJECTS_TYPE')}
+                    options={setSelectorData('PROCESSIONAL_SUBJECTS_TYPE').list}
                     placeholder="请选择"
                   />
                 </div>
@@ -233,7 +259,7 @@ const ActModal: React.FC<ActModalProps> = ({
                 </div>
                 <div className='formItem'>
                   <ProFormSelect
-                    name="b"
+                    name="gender"
                     label="性别:"
                     request={async () => [
                       { label: '男', value: '男' },
@@ -250,7 +276,7 @@ const ActModal: React.FC<ActModalProps> = ({
                   <ProFormSelect
                     name="title"
                     label="职称:"
-                    request={async () => setSelectorData('TITLE_TYPE')}
+                    options={setSelectorData('TITLE_TYPE').list}
                     placeholder="请选择"
                     rules={[{ required: true, message: '请选择职称!' }]}
                   />
@@ -265,7 +291,7 @@ const ActModal: React.FC<ActModalProps> = ({
                   <ProFormSelect
                     name="practiceCate"
                     label="执业类别:"
-                    request={async () => setSelectorData('JOB_TYPE')}
+                    options={setSelectorData('JOB_TYPE').list}
                     placeholder="请选择"
                   />
                 </div>
@@ -273,7 +299,7 @@ const ActModal: React.FC<ActModalProps> = ({
                   <ProFormSelect
                     name="practiceStatus"
                     label="执业状态:"
-                    request={async () => setSelectorData('PROFESSIONAL_STATUS_TYPE')}
+                    options={setSelectorData('PROFESSIONAL_STATUS_TYPE').list}
                     placeholder="请选择"
                   />
                 </div>

+ 83 - 10
src/pages/platform/sqlediter/index.tsx

@@ -2,24 +2,97 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-07-06 15:29:43
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2022-07-06 15:43:19
+ * @LastEditTime: 2022-07-08 10:25:02
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/sqlediter/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
 
 
 
-import React from 'react'
-import Editor from "@monaco-editor/react";
+import React, { useRef, useState } from 'react'
+import Editor, { useMonaco } from "@monaco-editor/react";
+
 
 function SQLEditer() {
-    return (
-        <Editor
-          height="60vh"
-          defaultLanguage="sql"
-          defaultValue="// some comment"
-        />
-    );
+
+  const editorRef = useRef(null);
+  const monaco = useMonaco();
+  const [suggestions, set_suggestions] = useState([]);
+  const [currentText, set_currentText] = useState('');
+
+  // const changeModelContent = (e:any) => {
+  //   console.log('内容改变', editorRef.current.getValue());
+
+  // };
+
+  const handleEditorDidMount = (editor: any, monaco: any) => {
+    console.log({ editor, monaco })
+    editorRef.current = editor;
+
+    // editor.onDidChangeModelContent(changeModelContent);
+
+    // this.editor = editor;
+    // this.monaco = monaco;
+    // 注册自定义语言
+    // monaco.languages.register({ id: 'mylan' });
+
+    // 为该语言注册一个语言提示器--联想
+    monaco.languages.registerCompletionItemProvider('sql', {
+      provideCompletionItems: () => {
+        // this.suggestions 根据输入内容的不同发生变化
+        return { suggestions: suggestions };
+      },
+    });
+
+
+  }
+
+  const onChangeHandle = (value: string | undefined, ev: any) => {
+    // console.log({ value, ev });
+    monaco.caretOffset = ev.changes[0].rangeOffset; //获取光标位置
+    fetchSuggestions();
+  }
+
+  const fetchSuggestions = () => {
+
+    let str = currentText.substr(0, monaco.caretOffset + 1);
+
+    let reg = /薪资.$/;
+    if (reg.test(str)) {
+      const suggestions = [{
+        label: '一月工资',
+        insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
+        kind: monaco.languages.CompletionItemKind.Function,
+        insertText: '一月工资',
+        detail: '一月工资',
+      }];
+
+    } else {
+      const suggestions = [
+        {
+          label: 'sum',
+          kind: monaco.languages.CompletionItemKind.Function,
+          insertTextRules: monaco.languages.CompletionItemInsertTextRule.InsertAsSnippet,
+          insertText: 'sum(${1:})',
+          detail: '计算所有参数数值的和',
+        }];
+    }
+    if(editorRef.current){
+      console.log('editorRef.current',editorRef.current)
+      // editorRef.current.trigger('提示', 'editor.action.triggerSuggest', {});
+    }
+    
+  }
+
+  return (
+    <Editor
+      height="60vh"
+      defaultLanguage="sql"
+      defaultValue="// some comment"
+      onChange={onChangeHandle}
+      onMount={handleEditorDidMount}
+    />
+  );
 }
 
 export default SQLEditer

+ 2 - 2
src/service/dictionary.ts

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-07-06 11:46:24
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2022-07-06 14:27:48
+ * @LastEditTime: 2022-07-08 17:28:34
  * @FilePath: /KC-MiddlePlatform/src/service/dictionary.ts
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -15,7 +15,7 @@ import { request } from 'umi';
 //获取平台字典
 
 export const getPlatformDictionary = async (key:string) => {
-    return request<{code:string;value:string|number;dataVoList:{code:string;value:string|number;}[]}[]>('/master/centerSys/sysdictdata/getDictData', {
+    return request<{code:string;value:string|number;dataVoList:{code:string;value:string|number;sort:number}[]}[]>('/master/centerSys/sysdictdata/getDictData', {
       method: 'GET',
       params: { dictType:key },
     });

+ 23 - 1
src/service/hospList.ts

@@ -1,15 +1,29 @@
 /*
  * @Author: your name
  * @Date: 2022-01-13 09:15:59
- * @LastEditTime: 2022-07-07 10:55:13
+ * @LastEditTime: 2022-07-08 18:11:11
  * @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
  */
 
+import { Key } from 'react';
 import { request } from 'umi';
 
 //获取当前登陆院区以及互通的院区列表
+export const getShareHospList = async () => {
+  return request<
+    {
+      id: number;
+      name: string;
+    }[]
+  >('/master/centerSys/hospital/currentAndShareHosp', {
+    method: 'GET',
+  });
+};
+
+
+//获取所有院区
 export const getHospList = async () => {
   return request<
     {
@@ -153,3 +167,11 @@ export const hospBindYoushuAccount = async (data: HospBindYoushuAccountReqBodyTy
     data: data,
   });
 };
+
+//院区初始化
+export const hospInit = async (hospId:Key) => {
+  return request('/master/centerSys/role/init', {
+    method: 'POST',
+    params:{hospId},
+  });
+};

+ 12 - 1
src/service/menu.ts

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-10 10:27:15
- * @LastEditTime: 2022-07-07 09:44:15
+ * @LastEditTime: 2022-07-08 14:39:55
  * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/src/service/hospInfo.ts
@@ -32,7 +32,9 @@ export interface MenuItemDataType {
   type: number;
   url?: string;
   key?:string;
+  systemId?:string;
   isHomepage:number;
+  description:string;
   modifyTime: string;
   children: MenuItemDataType[];
 }
@@ -194,3 +196,12 @@ export const transformMenu = async (type:'MOVE'|'COPY',menuId:Key,catalogId:Key)
   }
 
 }
+
+//通过ID获取指定菜单的详情
+
+export const getSpecifyMenuDetail = async () => {
+  return request<MenuItemDataType>('/master/centerSys/menu/getMenuDetail', {
+    method: 'GET',
+  });   
+
+}

+ 3 - 1
src/service/user.ts

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-12 09:55:49
- * @LastEditTime: 2022-07-01 11:56:01
+ * @LastEditTime: 2022-07-08 17:41:50
  * @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
@@ -117,6 +117,8 @@ export const getYoushuUsers = async () => {
 export type UserRelaSeletDataListType = {
       code:string;
       value:string;
+      sort:number;
+      defaultValue:number;
 }
 export interface UserRelaSeletDataType {
   code:string;