瀏覽代碼

修复部分bug

code4eat 3 年之前
父節點
當前提交
4e10d9e8df
共有 36 個文件被更改,包括 2361 次插入228 次删除
  1. 74 3
      config/config.ts
  2. 3 2
      config/proxy.ts
  3. 4 3
      package.json
  4. 二進制
      src/components/NavSelecter/images/close.png
  5. 75 57
      src/components/NavSelecter/index.tsx
  6. 25 1
      src/components/NavSelecter/style.less
  7. 22 11
      src/components/topBar/index.tsx
  8. 3 1
      src/components/topBar/typings.d.ts
  9. 2 0
      src/global.less
  10. 2 2
      src/global.tsx
  11. 7 6
      src/layouts/index.tsx
  12. 3 2
      src/pages/index/components/FastEntry/index.tsx
  13. 11 4
      src/pages/index/components/MsgRecord/index.tsx
  14. 14 1
      src/pages/index/components/MsgRecord/style.less
  15. 4 2
      src/pages/index/components/RecentlyVisited/index.tsx
  16. 6 3
      src/pages/index/index.tsx
  17. 4 4
      src/pages/personalCenter/components/security.tsx
  18. 72 21
      src/pages/platform/_layout.tsx
  19. 2 1
      src/pages/platform/components/TreeEditer/index.tsx
  20. 52 10
      src/pages/platform/components/menuEditer/menu.tsx
  21. 55 29
      src/pages/platform/setting/hospManage/modals/modal.tsx
  22. 1108 0
      src/pages/platform/setting/indicatorMana/DrawerForm/drawer.tsx
  23. 20 0
      src/pages/platform/setting/indicatorMana/DrawerForm/style.less
  24. 107 0
      src/pages/platform/setting/indicatorMana/TreeDirectory/index.tsx
  25. 0 0
      src/pages/platform/setting/indicatorMana/TreeDirectory/style.less
  26. 453 0
      src/pages/platform/setting/indicatorMana/index.tsx
  27. 37 0
      src/pages/platform/setting/indicatorMana/style.less
  28. 9 24
      src/pages/platform/setting/menuManage/index.tsx
  29. 18 10
      src/pages/platform/setting/menuManage/modals/modal.tsx
  30. 3 3
      src/pages/platform/setting/userManage/index.tsx
  31. 29 20
      src/pages/platform/setting/userManage/modal.tsx
  32. 31 0
      src/service/department.ts
  33. 26 7
      src/service/dictionary.ts
  34. 67 0
      src/service/indicator.ts
  35. 1 0
      src/service/role.ts
  36. 12 1
      src/service/user.ts

+ 74 - 3
config/config.ts

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-07 10:04:20
- * @LastEditTime: 2022-07-07 18:14:23
+ * @LastEditTime: 2022-07-18 10:25:40
  * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/config/config.ts
@@ -30,10 +30,12 @@ export default defineConfig({
     },
   },
   lessLoader: {
-    modifyVars: { '@ant-prefix': 'kcmp-ant' },
+    modifyVars: { '@ant-prefix': 'kcmp-ant','root-entry-name': 'default' },
   }, //
   theme: {
     '@primary-color': '#3376FE',
+    '@primary-color-hover':'#3376FE',
+    // '@root-entry-name':'root-entry-name'
   },
   routes: [
     {
@@ -78,11 +80,80 @@ export default defineConfig({
               path: '/platform/setting/roleManage',
               component: '@/pages/platform/setting/roleManage/index.tsx',
             },
+            // {
+            //   path: '/platform/setting/reports',
+            //   component: '@/pages/platform/setting/reports/index.tsx',
+            // },
             {
-              path: '/platform/setting/reports',
+              path: '/platform/setting/indicatorMana',
+              component: '@/pages/platform/setting/indicatorMana/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/0',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/1',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/2',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/3',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/4',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/5',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/6',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/7',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/8',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/9',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/10',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/11',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/12',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/13',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/14',
+              component: '@/pages/platform/setting/reports/index.tsx',
+            },
+            {
+              path: '/platform/setting/reports/15',
               component: '@/pages/platform/setting/reports/index.tsx',
             },
           ],
+          
         },
         {
           path: '/personalCenter',

+ 3 - 2
config/proxy.ts

@@ -1,8 +1,8 @@
 /*
  * @Author: your name
  * @Date: 2022-01-07 10:00:52
- * @LastEditTime: 2022-04-27 16:17:04
- * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2022-07-26 09:31:13
+ * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/config/proxy.ts
  */
@@ -16,6 +16,7 @@ const proxy: { [key: string]: any } = {
   dev: {
     '/master': {
       target: 'http://112.124.59.133:7001/',
+      // target: 'http://112.124.59.133:7002/',
       changeOrigin: true,
       pathRewrite: { '^/master': '' },
     },

+ 4 - 3
package.json

@@ -25,8 +25,8 @@
     "@ant-design/icons": "^4.5.0",
     "@ant-design/pro-card": "^1.14.17",
     "@ant-design/pro-descriptions": "^1.6.8",
-    "@ant-design/pro-form": "^1.18.3",
-    "@ant-design/pro-layout": "^6.15.3",
+    "@ant-design/pro-form": "^1.70.3",
+    "@ant-design/pro-layout": "^6.38.13",
     "@ant-design/pro-table": "^2.30.8",
     "@monaco-editor/react": "^4.4.5",
     "cross-env": "^7.0.3",
@@ -34,7 +34,8 @@
     "react": "16.x",
     "react-dev-inspector": "^1.1.1",
     "react-dom": "16.x",
-    "umi": "^3.5.20"
+    "umi": "^3.5.20",
+    "antd":"^4.21.6"
   },
   "devDependencies": {
     "@types/express": "^4.17.13",

二進制
src/components/NavSelecter/images/close.png


+ 75 - 57
src/components/NavSelecter/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-06-29 11:05:04
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2022-07-01 11:07:09
+ * @LastEditTime: 2022-07-14 15:37:31
  * @FilePath: /KC-MiddlePlatform/src/components/NavSelecter/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -20,46 +20,48 @@ const { TabPane } = Tabs;
 
 export type NavSelecterItemType = {
     name: string;
-    menuId: number|string;
-    path:string;
-    systemId:string;
+    menuId: number | string;
+    path: string;
+    type: number;
+    systemId: string;
 }
 
 
 export type NavSelecterData = {
     name: string;
-    menuId: number|string;
-    path:string;
-    systemId:string;
+    menuId: number | string;
+    path: string;
+    systemId: string;
+    type: number;
     child?: NavSelecterData[]
 }
 
 export interface NavSelecter {
     onVisibleChange?: (t: boolean) => void;
-    onChecked?:(t:NavSelecterItemType[]) => void;
-    value?:NavSelecterItemType[];
+    onChecked?: (t: NavSelecterItemType[]) => void;
+    value?: NavSelecterItemType[];
     data?: NavSelecterData[];
 }
 
 const NavSelecter = (props: NavSelecter) => {
 
-    const { onVisibleChange, data,value=[],onChecked } = props;
-    const [checkedIds,set_checkedIds] = useState<(string|number)[]>([]);
-    const [checkedItems,set_checkedItems] = useState<NavSelecterItemType[]>([]);
+    const { onVisibleChange, data, value = [], onChecked } = props;
+    const [checkedIds, set_checkedIds] = useState<(string | number)[]>([]);
+    const [checkedItems, set_checkedItems] = useState<NavSelecterItemType[]>([]);
 
 
-    const onChange = (tab:NavSelecterItemType) => {
-        
+    const onChange = (tab: NavSelecterItemType) => {
+
         let _checkedIds = checkedIds;
-        let _checkedItems = [...checkedItems]; 
+        let _checkedItems = [...checkedItems];
 
-        if(_checkedIds.includes(tab.menuId)){
-            _checkedIds.splice(checkedIds.indexOf(tab.menuId),1);
-            _checkedItems.splice(_checkedItems.findIndex(t=>t.menuId == tab.menuId),1);
+        if (_checkedIds.includes(tab.menuId)) {
+            _checkedIds.splice(checkedIds.indexOf(tab.menuId), 1);
+            _checkedItems.splice(_checkedItems.findIndex(t => t.menuId == tab.menuId), 1);
             set_checkedIds([..._checkedIds]);
             set_checkedItems([..._checkedItems]);
-        }else{
-            
+        } else {
+
             _checkedIds.push(tab.menuId);
             _checkedItems.push(tab);
             set_checkedItems([..._checkedItems]);
@@ -72,63 +74,79 @@ const NavSelecter = (props: NavSelecter) => {
         onVisibleChange && onVisibleChange(false);
     }
 
-    const onCommit = ()=>{
-        onChecked&&onChecked(checkedItems);
+    const onCommit = () => {
+        onChecked && onChecked(checkedItems);
         onVisibleChange && onVisibleChange(false);
     }
 
-    const onReset = ()=>{
+    const onReset = () => {
         set_checkedItems([]);
         set_checkedIds([]);
     }
 
-    useEffect(()=>{
+    useEffect(() => {
 
-        set_checkedIds(value?.map(t=>t.menuId));
+        set_checkedIds(value?.map(t => t.menuId));
         set_checkedItems(value);
 
-    },[value]);
+    }, [value]);
 
 
     return (
         <div className="navSelecter" onClick={(e) => onMaskClick(e)}>
             <div className='container'>
+                <div className='closeBtn' onClick={(e) => onMaskClick(e)}>
+                    <img src={require('./images/close.png')} />
+                </div>
                 <div className='content' onClick={(e) => e.stopPropagation()}>
-                    <Tabs defaultActiveKey="1" >
-                        {
-                            data?.map((val) => (
-                                <TabPane tab={val.name} key={val.menuId}>
-                                    {
-                                        val.child?.map((item) => (
-                                            <div className='row' key={item.menuId}>
-                                                <div className='rowName'>{item.name}</div>
-                                                <div className='rowWrap'>
-                                                    {
-                                                        item.child?.map(a => (
-                                                            <div className='tab' key={a.menuId}>
-                                                                <Checkbox onChange={() => onChange({
-                                                                       name: a.name,
-                                                                       menuId:a.menuId ,
-                                                                       path:a.path,
-                                                                       systemId:a.systemId
-                                                                })} checked={checkedIds.includes(a.menuId)} ></Checkbox>
-                                                                <span style={{ marginLeft: 8 }}>{a.name}</span>
-                                                            </div>
-                                                        ))
-                                                    }
-                                                </div>
+                    <div>
+                        <Tabs defaultActiveKey="1" >
+
+                            {
+                                data?.map((val) => (
+                                    
+                                        <TabPane tab={val.name} key={val.menuId}>
+                                            <div className='contentInner'>
+                                            {
+                                                val.child?.map((item) => (
+                                                    <div className='row' key={item.menuId}>
+                                                        <div className='rowName'>{item.name}</div>
+                                                        <div className='rowWrap'>
+                                                            {
+                                                                item.child?.map(a => {
+                                                                    if (a.type == 3) {
+                                                                        return (
+                                                                            <div className='tab' key={a.menuId}>
+                                                                                <Checkbox onChange={() => onChange({
+                                                                                    name: a.name,
+                                                                                    menuId: a.menuId,
+                                                                                    path: a.path,
+                                                                                    type: a.type,
+                                                                                    systemId: a.systemId
+                                                                                })} checked={checkedIds.includes(a.menuId)} ></Checkbox>
+                                                                                <span style={{ marginLeft: 8 }}>{a.name}</span>
+                                                                            </div>
+                                                                        )
+                                                                    }
+                                                                })
+                                                            }
+                                                        </div>
+                                                    </div>
+                                                ))
+                                            }
                                             </div>
-                                        ))
-                                    }
-                                </TabPane>
-                            ))
-                        }
-                    </Tabs>
+                                        </TabPane>
+                                    
+                                ))
+                            }
+
+                        </Tabs>
+                    </div>
                 </div>
-                <div className='footer' onClick={e=>e.stopPropagation()}>
+                <div className='footer' onClick={e => e.stopPropagation()}>
                     <span className='count'>{`已选中${checkedIds.length}项`}</span>
                     <div className='btnGroup'>
-                        <Button style={{marginRight:8}} onClick={onReset}>重置</Button>
+                        <Button style={{ marginRight: 8 }} onClick={onReset}>重置</Button>
                         <Button type="primary" onClick={onCommit}>确定</Button>
                     </div>
                 </div>

+ 25 - 1
src/components/NavSelecter/style.less

@@ -11,6 +11,7 @@
   background-color: rgba(41, 44, 51, 0.5);
 
   .container {
+    position: relative;
     width: 70%;
     height: 60%;
     padding-top: 12px;
@@ -18,9 +19,32 @@
     border-radius: 4px;
     border: 1px solid #CFD6E6;
 
+    .closeBtn {
+      display: flex;
+      justify-content: center;
+      align-items: center;
+      position: absolute;
+      right: 20px;
+      top: 10px;
+      width: 30px;
+      height: 30px;
+      cursor: pointer;
+
+      &>img {
+        width: 10px;
+        height: 10px;
+      }
+    }
+
     .content {
-        padding: 24px;
+      padding: 24px;
       height: calc(100% - 56px);
+      overflow-y: hidden;
+
+      .contentInner {
+          height:368px;
+          overflow-y: scroll;
+      }
       .row {
         margin-bottom: 16px;
 

+ 22 - 11
src/components/topBar/index.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2021-11-16 09:12:37
- * @LastEditTime: 2022-07-11 15:56:52
+ * @LastEditTime: 2022-07-14 16:07:56
  * @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
@@ -18,7 +18,7 @@ import logo from '../../../public/images/kc-logo.png';
 import platFormMenuIcon from '../../../public/images/platformMenu.png';
 import tabCloseIcon from '../../../public/images/tabCloseIcon.png';
 
-import { history } from 'umi';
+import { history, useModel } from 'umi';
 import { Divider } from 'antd';
 import { addFastEntry, getUserPlatformNav } from '@/service/menu';
 import { NavSelecterData } from '../NavSelecter';
@@ -35,9 +35,6 @@ interface TopBarType {
 }
 
 
-const localSavedTab = localStorage.getItem('currentSelectedTab');
-const currentSelectedTabFromLocal = localSavedTab ? JSON.parse(localSavedTab) : {};
-
 const TopBar: React.FC<TopBarType> = (props) => {
   const { onTabChange, userPannelTabClick, onCloseTab, onTabClick, userData, navData,currentTab } = props;
   const [systemTabs, setSystemTabs] = useState<TopBar.Tab[]>([]); //已打开的tab
@@ -48,9 +45,14 @@ const TopBar: React.FC<TopBarType> = (props) => {
   const [currentActivedBlockIndex, set_currentActivedBlockIndex] = useState(0);
   const [panelData, set_panelData] = useState<TopBar.PanelData[]>([]);
 
+
+  const localSavedTab = localStorage.getItem('currentSelectedTab');
+
+  const currentSelectedTabFromLocal = localSavedTab ? JSON.parse(localSavedTab) : {};
+
   const _systemTabClickHandle = (item: TopBar.Tab) => {
     //导航栏tab点击
-    console.log('_systemTabClickHandle')
+    console.log('_systemTabClickHandle',item);
     onTabClick && onTabClick(item);
     localStorage.setItem('currentSelectedTab', JSON.stringify(item));
     setCurrentSelectedTab(item);
@@ -148,7 +150,8 @@ const TopBar: React.FC<TopBarType> = (props) => {
        if(panelData[currentActivedBlockIndex]){
             const result:TopBar.TypeBlock[] = panelData[currentActivedBlockIndex].child.filter(t=>(t.name == name));
             if(result.length>0){
-                history.push(result[0].path)
+              _systemTabClickHandle(Object.assign(result[0]))
+                // history.push(result[0].path)
             }
        }
   }
@@ -161,7 +164,6 @@ const TopBar: React.FC<TopBarType> = (props) => {
 
   const reSetNav = (_panelData: TopBar.PanelData[], cur: TopBar.Tab) => {
     
-
     if (!(_panelData.length > 0)) return
 
     if (JSON.stringify(cur) != '{}') {
@@ -174,6 +176,7 @@ const TopBar: React.FC<TopBarType> = (props) => {
 
       one: for (let index = 0; index < _panelData.length; index++) {
         blockIndex = index;
+    
         if (_panelData[index] && _panelData[index].child) {
           two: for (let i = 0; i < _panelData[index].child.length; i++) {
 
@@ -183,7 +186,7 @@ const TopBar: React.FC<TopBarType> = (props) => {
               if (_systems && _systems.length > 0) {
                 for (let k = 0; k < _systems.length; k++) {
                   if (_systems[k].menuId == _currentSelectedTabFromLocal.menuId) {
-
+                    set_currentActivedBlockIndex(blockIndex);
                      set_pageTitle(_panelData[blockIndex].child[channelIndex].name); //设置体系标题
                      
                     break one;
@@ -200,7 +203,8 @@ const TopBar: React.FC<TopBarType> = (props) => {
         setSystemTabs(_panelData[blockIndex].child[channelIndex].child);  //恢复体系列表
       }
 
-      // _systemTabClickHandle(_currentSelectedTabFromLocal);  //恢复选中的tab
+      _systemTabClickHandle(_currentSelectedTabFromLocal);  //恢复选中的tab
+  
 
     }
   }
@@ -217,8 +221,15 @@ const TopBar: React.FC<TopBarType> = (props) => {
   useEffect(()=>{
 
     if(currentTab)reSetNav(panelData,currentTab);
+ 
     
-  },[currentTab])
+  },[currentTab]);
+
+  // useEffect(()=>{
+  //   if(currentSelectedSys){
+  //     onTabClickHandle(currentSelectedSys);
+  //   }
+  // },[currentSelectedSys])
   
 
   useEffect(() => {

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

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-10 13:56:19
- * @LastEditTime: 2022-07-08 18:47:38
+ * @LastEditTime: 2022-07-11 18:12:01
  * @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
@@ -27,6 +27,8 @@ declare namespace TopBar {
     menuId: number | string;
     path: string;
     type:number;
+    contentType:string;
+    systemId: string;
     child: Tab[]
   }
 

+ 2 - 0
src/global.less

@@ -16,4 +16,6 @@ input {
   max-width: 100%;
 }
 
+
+
 //--------------------

+ 2 - 2
src/global.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2021-12-21 11:05:37
- * @LastEditTime: 2022-07-11 09:41:40
+ * @LastEditTime: 2022-07-13 10:49:58
  * @LastEditors: code4eat awesomedema@gmail.com
  * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  * @FilePath: /KC-MiddlePlatform/src/global.tsx
@@ -22,7 +22,7 @@ export const logoutHandle = async () => {
   localStorage.removeItem('initialState');
   localStorage.removeItem('currentSelectedTab');
   localStorage.removeItem('isChildShowMenu');
-  localStorage.removeItem('visitedTabs');
+  // localStorage.removeItem('visitedTabs');
 };
 
 (function () {

+ 7 - 6
src/layouts/index.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2021-11-09 13:56:33
- * @LastEditTime: 2022-07-11 17:10:18
+ * @LastEditTime: 2022-07-12 09:24:24
  * @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
@@ -16,22 +16,20 @@ import { getPlatformMenu, getSpecifyMenuDetail, getUserPlatformNav } from '@/ser
 import { NavSelecterData } from '@/components/NavSelecter';
 
 
-let emptyContent = '';
 
 const TopHoc = ({ currentSelectedSys, openedSysLists, navData,set_emptyPageContent }: {set_emptyPageContent:any; 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) => {
+    // console.log({data});
     if(JSON.stringify(data) != '{}'){
       await setInitialState((s) => ({ ...s, currentSelectedSys: data }));
-      // history.push(`${data.path}${data.contentType == '4' ? `?isEmpty=true&menuId=${data.menuId}` : ''}` || '/');
-
+  
       if(data.contentType == '4'){
           //空白页面
           if(data.isSetupMenu){
@@ -79,6 +77,9 @@ const TopHoc = ({ currentSelectedSys, openedSysLists, navData,set_emptyPageConte
     }
   };
 
+  
+ 
+
   return (
     <TopBar
       navData={navData}

+ 3 - 2
src/pages/index/components/FastEntry/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-05-27 14:17:59
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2022-07-04 17:36:12
+ * @LastEditTime: 2022-07-12 09:48:06
  * @FilePath: /KC-MiddlePlatform/src/pages/index/components/FastEntry/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -25,6 +25,7 @@ export type FastEntryTabType = {
     name: string;
     path: string;
     systemId:string;
+    type:number;
     menuId:number|string;
 }
 export interface FastEntryType {
@@ -41,7 +42,7 @@ export const FastEntry = (props: FastEntryType) => {
   
 
     const tabClickHandle = async (tab: FastEntryTabType) => {
-        await setInitialState((s) => ({ ...s, currentSelectedSys:tab,currentTab:tab})); 
+        await setInitialState((s) => ({ ...s, currentSelectedSys:tab as any,currentTab:tab})); 
     }
 
     

+ 11 - 4
src/pages/index/components/MsgRecord/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-05-30 09:50:41
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2022-07-01 10:57:09
+ * @LastEditTime: 2022-07-14 17:04:40
  * @FilePath: /KC-MiddlePlatform/src/pages/index/components/RecentlyVisited/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -21,6 +21,9 @@ import { Empty } from 'antd';
 export type MsgRecordItemType = {
       title:string;
       date:string;
+      resolveTime:string;
+      isProcess:number;
+      content:string;
 }
 
 export interface MsgRecordType {
@@ -38,7 +41,7 @@ export const MsgRecord = (props:MsgRecordType) => {
     },[props])
 
     return (
-        <div className='RecentlyVisited'>
+        <div className='msgRecord'>
                 <div className='topTitle'>
                     <span className='name'>消息记录</span>
                 </div>
@@ -46,8 +49,12 @@ export const MsgRecord = (props:MsgRecordType) => {
                     {
                         list.map((val,index)=>(
                               <div className='list' key={index}>
-                                    <div className='msgTitle'>{val.title}</div>
-                                    <div className='msgDate'>{val.date}</div>
+                                    <div className='msgTitle' dangerouslySetInnerHTML={{__html:val.content}}></div>
+                                    {/* <div className='msgTitle'>{`${val.title}审核${val.isProcess?'已通过':'未通过'}`}</div> */}
+                                    <div className='msgDate'>
+                                        <span>{val.resolveTime}</span>
+                                        <span>{`审核${val.isProcess?'已通过':'未通过'}`}</span>
+                                    </div>
                               </div>
                         ))
                     }

+ 14 - 1
src/pages/index/components/MsgRecord/style.less

@@ -1,4 +1,4 @@
-.RecentlyVisited {
+.msgRecord {
   width: 30%;
   min-height: 153px;
   background: #FFFFFF;
@@ -40,6 +40,7 @@
       margin-bottom: 24px;
       cursor: pointer;
       .msgTitle {
+        width: 300px;
         height: 14px;
         line-height: 14px;
         font-size: 14px;
@@ -47,9 +48,21 @@
         font-weight: 400;
         color: #17181A;
         margin-bottom: 8px;
+        overflow: hidden;
+        text-overflow: ellipsis;
+        white-space:nowrap;
+
+        &>span {
+          font-weight: bold;
+          color: #17181A;
+        }
       }
 
       .msgDate {
+        display: flex;
+        flex-direction: row;
+        justify-content: space-between;
+        align-items: center;
         height: 12px;
         line-height: 12px;
         font-size: 12px;

+ 4 - 2
src/pages/index/components/RecentlyVisited/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-05-30 09:50:41
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2022-07-01 00:23:36
+ * @LastEditTime: 2022-07-12 09:46:26
  * @FilePath: /KC-MiddlePlatform/src/pages/index/components/RecentlyVisited/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -24,6 +24,7 @@ export type RecentlyVisitedItemsType = {
         name:string;
         path:string;
         menuId:string;
+        type:number;
         systemId:string;
 }
 export interface RecentlyVisitedPropsType {
@@ -40,7 +41,8 @@ export const RecentlyVisited = (props:RecentlyVisitedPropsType) => {
 
     const clickHandle = async (val:NavSelecterItemType)=>{
         //更新currentSelectedSys/currentTab触发导航跳转
-        await setInitialState((s) => ({ ...s, currentSelectedSys:val,currentTab:val})); 
+        console.log({val});
+        await setInitialState((s) => ({ ...s, currentSelectedSys:val as any,currentTab:val})); 
     }
 
     useEffect(()=>{

+ 6 - 3
src/pages/index/index.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2021-11-10 09:33:30
- * @LastEditTime: 2022-07-07 17:53:03
+ * @LastEditTime: 2022-07-14 16:41: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/index.tsx
@@ -75,7 +75,10 @@ const IndexPage: React.FC<IndexPageType> = ({ location }) => {
 
           set_msgRecord(resp.messageRecords.map((t:any)=>({
                 title:t.recordTitle,
-                date:t.createDate
+                date:t.createDate,
+                resolveTime:t.resolveTime,
+                isProcess:t.isProcess,
+                content:t.content
           })));
         }
   }
@@ -136,7 +139,7 @@ const IndexPage: React.FC<IndexPageType> = ({ location }) => {
                     <Divider type="vertical" className='Divider' />
                     <div className='staffBaseInfoSpan'>
                       <span className='spanName'>进院日期</span>
-                      <span className='spanValue'>{userInfo?.entryTime?userInfo?.entryTime:'-'}</span>
+                      <span className='spanValue'>{userInfo?.entryTime?`${new Date(userInfo?.entryTime).getFullYear()}-${(new Date(userInfo?.entryTime).getMonth()+1)>10?(new Date(userInfo?.entryTime).getMonth()+1):'0'+(new Date(userInfo?.entryTime).getMonth()+1)}-${(new Date(userInfo?.entryTime).getDate())>10?(new Date(userInfo?.entryTime).getDate()):'0'+(new Date(userInfo?.entryTime).getDate())}`:'-'}</span>
                     </div>
 
                   </div>

+ 4 - 4
src/pages/personalCenter/components/security.tsx

@@ -1,8 +1,8 @@
 /*
  * @Author: your name
  * @Date: 2022-03-03 17:42:10
- * @LastEditTime: 2022-03-09 16:45:48
- * @LastEditors: Please set LastEditors
+ * @LastEditTime: 2022-07-21 16:13: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/personalCenter/components/security.tsx
  */
@@ -12,7 +12,7 @@ import KCModal from '@/components/KCModal';
 import { ProFormText } from '@ant-design/pro-form';
 import { Form, Alert, Progress, notification, Modal } from 'antd';
 import PasswordQualityCalculator from 'password-quality-calculator';
-import { editUsers } from '@/service/user';
+import { editUsers, editUsersPsd } from '@/service/user';
 import { useModel } from 'umi';
 
 type Unpacked<T> = T extends (infer U)[] ? U : T;
@@ -95,7 +95,7 @@ const SecurityView: React.FC = () => {
     const userData = localStorage.getItem('userData');
 
     if (userData) {
-      const resp = await editUsers({
+      const resp = await editUsersPsd({
         id: JSON.parse(userData).userId,
         password: newPassword,
       });

+ 72 - 21
src/pages/platform/_layout.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-06 15:25:39
- * @LastEditTime: 2022-07-11 17:10:52
+ * @LastEditTime: 2022-07-19 10:09:28
  * @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
@@ -15,6 +15,8 @@ import './index.less';
 import { TreeItemType } from '@/utils';
 import { SpacicalPageParamsType } from '@/typings';
 import { Key, useEffect, useState } from 'react';
+import IconFont from '@ant-design/icons/lib/components/IconFont';
+import { FileOutlined, FolderOutlined, SmileOutlined } from '@ant-design/icons';
 
 export default function Layout({ children, location, route, history, match, ...rest }: IRouteComponentProps) {
   const { initialState, setInitialState } = useModel('@@initialState');
@@ -22,6 +24,7 @@ export default function Layout({ children, location, route, history, match, ...r
   const [selectedKeys, set_selectedKeys] = useState<string[]>([]);
   const [emptyPageContent, set_emptyPageContent] = useState('');
   const [isShowPageMenu,set_isShowPageMenu] = useState(true);
+  const [isEmpty,set_isEmpty] = useState(false);
 
   //const isShowMenu = localStorage.getItem('isChildShowMenu');
   // console.log({ children, location, route, history, match});
@@ -36,27 +39,45 @@ export default function Layout({ children, location, route, history, match, ...r
     set_emptyPageContent(menuItem.description);
   }
 
+  useEffect(()=>{
+
+    const isShowMenu = localStorage.getItem('isChildShowMenu');
+    set_isShowPageMenu(isShowMenu == 'true')
+  });
+
+  useEffect(()=>{
+
+    // console.log({location});
+    // console.log(location.query.isEmpty == 'true');
+
+    if(location.query.menuId){
+      setEmptyPageContent(location.query.menuId as string);   
+    } 
+    
+    set_isEmpty(location.query.isEmpty == 'true');
+  },[location])
+
 
   return (
     <ProLayout
       style={{
         height: 'calc(100vh - 50px)',
       }}
+      iconfontUrl="//at.alicdn.com/t/font_8d5l8fzk5b87iudi.js"
       logoStyle={{
         display: 'none',
       }}
       location={{
 
       }}
-      // siderWidth={isShowPageMenu? 220 : 0}
+      siderWidth={isShowPageMenu? 220 : 0}
       pageTitleRender={false}
       disableContentMargin
       menuItemRender={(item, dom) => {
+  
         return (
           <a
             onClick={() => {
-              // console.log('_layout',item);
-              setEmptyPageContent(item.key as string);
               history.push(`${item.path}${item.contentType == '4' ? `?isEmpty=true&menuId=${item.key}` : ''}` || '/');
             }}
           >
@@ -80,27 +101,30 @@ export default function Layout({ children, location, route, history, match, ...r
           initialState
         },
         request: async () => {
-          if (initialState) {
-            const systemId = initialState.currentSelectedSys?.menuId;
-            if (systemId) {
-              const menuData = await getPlatformMenu(systemId);
-              // console.log({menuData});
-              if (menuData.length > 0) {
-                set_openKeys([menuData[0].key]);
-                set_selectedKeys([menuData[0].key]);
-              }
+        
+          if (initialState&&initialState.currentSelectedSys) {
+            const {systemId,menuId} = initialState.currentSelectedSys;
+            if (systemId||menuId) {
+              //只有当存在systemId
+              const menuData = await getPlatformMenu(systemId||menuId);
+              let homePage:TreeItemType|undefined;
+      
 
               const getVFromTree = (data: TreeItemType[], key: string) => {
                 let result: SpacicalPageParamsType[] = [];
                 function looper(data: TreeItemType[], key: string) {
                   data.forEach((t) => {
-                    if (t[key] && t[key] != 0) {
+                    if(t.isHomepage){
+                      homePage = t;
+                    }
+                    if (t[key] && t[key] == 1) {
                       //非一般页面
                       result.push({
                         contentType: t[key],
                         path: t['path'],
                         reportId: t['reportId'],
                         url: t['youshuUrl'],
+                        
                       });
                     }
                     if (t.children && t.children.length > 0) {
@@ -114,12 +138,39 @@ export default function Layout({ children, location, route, history, match, ...r
 
               const _menu = getVFromTree(menuData, 'contentType');
 
-              setInitialState((t) => ({ ...t, spacicalPageParamsType: _menu }));
+              // console.log({_menu});
 
-              return [...menuData, {
-                name: 'SQL编辑器',
-                path: '/platform/sqlEditer'
-              }];
+              setInitialState((t) => ({ ...t, spacicalPageParamsType: _menu }));
+              
+              if(homePage){
+                // console.log({homePage});
+                set_openKeys([homePage.key]);
+                set_selectedKeys([homePage.key]); 
+                history.push(homePage.path)
+              }else{
+                set_openKeys([menuData[0].key]);
+                set_selectedKeys([menuData[0].key]);
+                history.push(menuData[0].path)
+              }
+              
+              // console.log({homePage})
+              // return [...menuData, {
+              //   name: 'SQL编辑器',
+              //   path: '/platform/sqlEditer'
+              // }];
+
+              const addIcon = (arr:any) => arr.map((item:any) => (item.children?{
+                ...item,
+                icon: <FolderOutlined />,
+                children: addIcon(item.children)
+              }:{
+                ...item,
+                icon:<FileOutlined />,
+              }))
+               
+              const result = addIcon(menuData);
+
+              return [...result];
 
 
             }
@@ -134,14 +185,14 @@ export default function Layout({ children, location, route, history, match, ...r
       navTheme="light"
     >
       {
-        location.query.isEmpty == 'true' && (
+        isEmpty&& (
           <div className='emptyContainer' style={{ textAlign: 'center', paddingTop: 100 }}>
             <h1>{emptyPageContent}</h1>
           </div>
         )
       }
       {
-        location.query.isEmpty != 'true' && (
+        !isEmpty&& (
           <PageContainer
             className="kcmpPageContainer"
             header={{

+ 2 - 1
src/pages/platform/components/TreeEditer/index.tsx

@@ -2,7 +2,7 @@
  * @Author: code4eat awesomedema@gmail.com
  * @Date: 2022-07-06 09:31:32
  * @LastEditors: code4eat awesomedema@gmail.com
- * @LastEditTime: 2022-07-06 17:47:20
+ * @LastEditTime: 2022-07-12 16:57:30
  * @FilePath: /KC-MiddlePlatform/src/pages/platform/components/TreeEditer/index.tsx
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -80,6 +80,7 @@ function TreeEditer(props: TreeEditerPropsType) {
     // };
 
     const onSelect = (selectedKeysValue: React.Key[], info: any) => {
+      
         setSelectedKeys(selectedKeysValue);
         onChange && onChange({actType,selectedKeysValue});
     };

+ 52 - 10
src/pages/platform/components/menuEditer/menu.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-14 14:03:42
- * @LastEditTime: 2022-07-08 11:14:25
+ * @LastEditTime: 2022-07-21 15:01:36
  * @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
@@ -44,7 +44,7 @@ const MenuEditer: React.FC<MenuEditerType> = ({ value = [], onChange, noAction =
       
         const convertData = (data: Array<any>) => {
           data.forEach((item) => {
-              item.children = item.child;  
+              item.children = item.child;
               if (item.child) {
                   convertData(item.child);
               }
@@ -68,6 +68,10 @@ const MenuEditer: React.FC<MenuEditerType> = ({ value = [], onChange, noAction =
 
   const [targetKeys, setTargetKeys] = useState<string[]>([]);
 
+  const [_selectedKeys,set__selectedKeys] = useState<string[]>([]);
+
+  const [sourceSelectedKeys,set_sourceSelectedKeys] = useState<string[]>([]);
+
   const onTransFerChange = (keys: string[]) => {
     let _keys = Array.from(new Set(keys));
     setTargetKeys(_keys);
@@ -82,14 +86,23 @@ const MenuEditer: React.FC<MenuEditerType> = ({ value = [], onChange, noAction =
   
 
   const isChecked = (selectedKeys:(string|number)[], eventKeys: (string|number)[]) => {
-    
+
+    // console.log({selectedKeys,eventKeys});
+
     const isIncludesFunc = (arr1:(string|number)[],arr2:(string|number)[])=>{
-           
+
+          if(arr2.length == 0){
+            return true;
+          }
           return arr2.every((item)=>arr1.includes(item))
     }
+
+
     return isIncludesFunc(selectedKeys,eventKeys)
   }
 
+
+
   const generateTree = (treeNodes: MenuItemDataType[] = [], checkedKeys: string[] = []): any[] => {
 
       return treeNodes.map(({ children,menuId,name, ...props }) => ({
@@ -102,6 +115,13 @@ const MenuEditer: React.FC<MenuEditerType> = ({ value = [], onChange, noAction =
   
 
   }
+
+  const onSelectChangeHandle = (_sourceSelectedKeys:Key[], targetSelectedKeys:Key[])=>{
+        console.log({_sourceSelectedKeys,targetSelectedKeys});
+        set_sourceSelectedKeys(_sourceSelectedKeys as string[]);
+        // set_selectedKeysVal(sourceSelectedKeys as string[]);
+        // setTargetKeys(targetSelectedKeys as string[]);
+  }
     
 
 
@@ -121,10 +141,13 @@ const MenuEditer: React.FC<MenuEditerType> = ({ value = [], onChange, noAction =
     return (
       <Transfer
         {...restProps}
+        listStyle={{width:100,height:600}}
         targetKeys={targetKeys}
         rowKey={record => record.menuId}
         dataSource={transferDataSource}
         className="tree-transfer"
+        // onSelectChange={onSelectChangeHandle}
+        // selectedKeys={_selectedKeys}
         render={item => item.name!}
         showSelectAll={true}
       >
@@ -137,15 +160,34 @@ const MenuEditer: React.FC<MenuEditerType> = ({ value = [], onChange, noAction =
                 checkable
                 checkStrictly={false}
                 defaultExpandAll
-        
+                height={600}
+
                 checkedKeys={checkedKeys}
                 treeData={generateTree(dataSource, targetKeys)}
-                onCheck={(keys,{ node: { key } }) => {
-                  onItemSelectAll(keys as string[], !isChecked(checkedKeys, keys as Key[]));
-                }}
-                onSelect={(keys, { node: { key } }) => {
-                  onItemSelectAll(keys as string[], !isChecked(checkedKeys, keys));
+                onCheck={(keys,{node}) => {
+                 
+                  // 差集
+                  let difference = (keys as Key[]).filter(v => !targetKeys.includes(v as string) );
+                  const map = (list:any, cb:any) => {
+                    return list.reduce((res:any, v:any) => {
+                        res.push(cb(v));
+                        if(Array.isArray(v.child)) res = res.concat(map(v.child, cb))
+                        return res;
+                    }, []);
+                  }
+                  
+
+                  if(!node.checked){
+                         //选中
+                         onItemSelectAll(difference as string[],true);
+                  }else{
+                         //取消勾选
+                         const cancelKeys = map(node.children,(v:any)=>v.key);
+                         onItemSelectAll([node.key,...cancelKeys] as string[],false)
+                  }
+                  
                 }}
+                onSelect={(keys, { node: { key } }) => {}}
               />
             );
           }

+ 55 - 29
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-08 18:08:32
+ * @LastEditTime: 2022-07-13 11:23:50
  * @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
@@ -16,12 +16,12 @@ import { ProFormText, ProFormRadio, ProFormDependency, ProFormDigit } from '@ant
 import type { ProColumns } from '@ant-design/pro-table';
 import { EditableProTable } from '@ant-design/pro-table';
 import { getHospList, getHospYoushuAccounts, getMainHosp, YoushuAccountsType } from '@/service/hospList';
-import type { AddUsersDataType } from '@/service/user';
+import type { AddUsersDataType, UserRelaSeletDataListType } from '@/service/user';
 import { randomString } from '@/utils';
 import { TableActType } from '..';
 import { Form } from 'antd';
 import MenuEditer from '@/pages/platform/components/menuEditer/menu';
-import { getPlatformDictionary } from '@/service/dictionary';
+import { getPlatformDictionary, PlatformPubDirDataType } from '@/service/dictionary';
 
 interface ActModalProps extends hospManageModelState {
   dispatch: Dispatch | undefined;
@@ -33,6 +33,8 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
   const [editableKeys, setEditableRowKeys] = useState<React.Key[]>([]);
   const [dataSource, setDataSource] = useState<DataSourceType[]>([]);
 
+  const [dirData,set_dirData] = useState<PlatformPubDirDataType[]>([]);
+
   const columns: ProColumns<DataSourceType>[] = [
     {
       title: 'id',
@@ -93,7 +95,7 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
   };
 
   const onFinishHandle = (data: any & AddUsersDataType) => {
-    console.log({ data });
+
     if (tableAct == TableActType.ADD) {
       dispatch &&
         dispatch({
@@ -139,7 +141,13 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
       };
     }
     if (tableAct == TableActType.ADD) {
-      return { hospSign: randomString(16), isDataShare: 0 };
+      return { 
+        hospSign: randomString(16),
+        isDataShare: 0,
+        hospitalLevel:setSelectorData('HOSPITAL_LEVEL').defaultvalue,
+        hospitalType:setSelectorData('HOSPITAL_TYPE').defaultvalue,
+        hospitalNature:setSelectorData('HOSPITAL_NATURE').defaultvalue
+      };
     }
     if (tableAct == TableActType.EDITMENU) {
       return { ...currentEdit };
@@ -152,6 +160,39 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
     }
   };
 
+  const getDirecData = async (key?: string) => {
+
+    const data = await getPlatformDictionary();
+    if (data) {
+      set_dirData(data);
+    }
+  }
+
+  const setSelectorData = (key: string) => {
+    let result = dirData.filter((t: any) => (t.code == key));
+
+    if (result.length > 0) {
+      
+      let dataArr = result[0].dataVoList;
+
+      let defaultValue = dataArr.filter(t=>t.defaultValue == 1);
+
+      dataArr.sort((prev:any,next:any)=>{
+        return prev.sort - next.sort;
+      });
+
+      return {
+           defaultvalue:defaultValue[0]?defaultValue[0].value:'',
+           list:dataArr.map(t=>({label:t.code,value:t.value,defaultValue:t.defaultValue}))
+      }
+    }
+    return {
+      defaultvalue:'',
+      list:[]
+    };
+  }
+
+
   useEffect(() => {
     //加装key字段
     const fixedDataSource = currentEdit?.youshuUsers
@@ -163,6 +204,12 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
     setDataSource(fixedDataSource);
   }, [currentEdit]);
 
+
+
+  useEffect(()=>{
+    getDirecData();
+  },[])
+
   return (
     <KCModal
       visible={isShowModal}
@@ -254,14 +301,7 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
             width="md"
             name="hospitalLevel"
             request={async () => {
-              const resp = await getPlatformDictionary('HOSPITAL_LEVEL');
-              if (resp) {
-                return resp[0].dataVoList.map((t) => ({
-                  label: t.code,
-                  value: t.value,
-                }));
-              }
-              return [];
+              return setSelectorData('HOSPITAL_LEVEL').list;    
             }}
             rules={[
               {
@@ -275,14 +315,7 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
             width="md"
             name="hospitalType"
             request={async () => {
-              const resp = await getPlatformDictionary('HOSPITAL_TYPE');
-              if (resp) {
-                return resp[0].dataVoList.map((t) => ({
-                  label: t.code,
-                  value: t.value,
-                }));
-              }
-              return [];
+              return setSelectorData('HOSPITAL_TYPE').list;
             }}
             rules={[
               {
@@ -296,14 +329,7 @@ const ActModal: React.FC<ActModalProps> = ({ dispatch, isShowModal, tableAct, cu
             width="md"
             name="hospitalNature"
             request={async () => {
-              const resp = await getPlatformDictionary('HOSPITAL_NATURE');
-              if (resp) {
-                return resp[0].dataVoList.map((t) => ({
-                  label: t.code,
-                  value: t.value,
-                }));
-              }
-              return [];
+              return setSelectorData('HOSPITAL_NATURE').list;
             }}
             rules={[
               {

+ 1108 - 0
src/pages/platform/setting/indicatorMana/DrawerForm/drawer.tsx

@@ -0,0 +1,1108 @@
+/*
+ * @Author: code4eat awesomedema@gmail.com
+ * @Date: 2022-07-13 15:27:51
+ * @LastEditors: code4eat awesomedema@gmail.com
+ * @LastEditTime: 2022-07-21 15:26:14
+ * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/indicatorMana/drawer.tsx
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+
+import React, { useEffect, useRef, useState } from 'react'
+import { Drawer, Cascader, Button, Form } from 'antd'
+import ProForm, { ProFormCascader, ProFormDependency, ProFormDigit, ProFormInstance, ProFormRadio, ProFormSelect, ProFormText, ProFormTextArea } from '@ant-design/pro-form';
+
+import './style.less';
+import { getIndicatorDictionary, IndicatorDictionaryDataType } from '@/service/dictionary';
+import { DefaultOptionType } from 'antd/lib/select';
+import { getHospDepartment } from '@/service/department';
+import { getUsers } from '@/service/user';
+import { addIndicatorManaList } from '@/service/indicator';
+
+
+
+export interface IndicatorDrawerForm {
+    visible: boolean;
+    record?: any;
+    onVisibleChange?: (bool: boolean) => void;
+    onFinish?: (formData: any) => void;
+    onChange?: (data: any) => void;
+    actType: 'EDIT' | 'ADD'
+
+}
+
+
+
+const DrawerForm = (props: IndicatorDrawerForm) => {
+
+    const { visible = false, onChange, onFinish, record, onVisibleChange, actType } = props;
+
+    const [_visible, _setVisible] = useState(false);
+
+    const [renderType, set_renderType] = useState<'ADD' | 'EDIT'>('ADD');
+
+    const [dirData, set_dirData] = useState<IndicatorDictionaryDataType[]>([]);
+
+    const baseInfoformRef = useRef<ProFormInstance>();
+    const manaInfoformRef = useRef<ProFormInstance>();
+    const showSetInfoformRef = useRef<ProFormInstance>();
+    const adminInfoformRef = useRef<ProFormInstance>();
+
+    const showDrawer = () => {
+        _setVisible(true);
+        onVisibleChange && onVisibleChange(true);
+    };
+
+    const onClose = () => {
+        _setVisible(false);
+        onVisibleChange && onVisibleChange(false);
+    };
+
+
+    const commitHandle = () => {
+        let commitData: any[] = [];
+        if (baseInfoformRef.current && baseInfoformRef.current.validateFieldsReturnFormatValue) {
+            baseInfoformRef.current?.validateFieldsReturnFormatValue().then(val => {
+                // console.log('baseInfoformRef',val);
+                commitData.push({
+                    baseInfoformRef: val
+                })
+            })
+
+        }
+        if (manaInfoformRef.current && manaInfoformRef.current.validateFieldsReturnFormatValue) {
+            manaInfoformRef.current?.validateFieldsReturnFormatValue().then(val => {
+                console.log('manaInfoformRef', val);
+                //_indicatorTypeList
+                // manaInfoformRef.current?.getFieldsValue();
+                // console.log('w',manaInfoformRef.current?.getFieldValue('_indicatorTypeList'))
+                const _indicatorTypeLists = manaInfoformRef.current?.getFieldValue('_indicatorTypeList');
+                const _indicatorExternalList = manaInfoformRef.current?.getFieldValue('_indicatorExternalList');
+
+                // console.log({_indicatorTypeLists,_indicatorExternalList});
+
+
+                commitData.push({
+                    manaInfoformRef: {
+                        ...val,
+                        indicatorTypeList: _indicatorTypeLists ? _indicatorTypeLists : val.indicatorTypeList ? val.indicatorTypeList.map((t: any) => t[t.length - 1]) : [],
+                        indicatorExternalList: _indicatorExternalList ? _indicatorExternalList : val.indicatorExternalList ? val.indicatorExternalList.map((t: any) => t[t.length - 1]) : [],
+                    }
+                })
+            })
+
+        }
+        if (showSetInfoformRef.current && showSetInfoformRef.current.validateFieldsReturnFormatValue) {
+            showSetInfoformRef.current?.validateFieldsReturnFormatValue().then(val => {
+                // console.log('showSetInfoformRef',val);
+                commitData.push({
+                    showSetInfoformRef: val
+                })
+            })
+
+        }
+        if (adminInfoformRef.current && adminInfoformRef.current.validateFieldsReturnFormatValue) {
+            adminInfoformRef.current?.validateFieldsReturnFormatValue().then(val => {
+
+                const _indicatorMenuList = adminInfoformRef.current?.getFieldValue('_indicatorMenuList');
+                if (val.indicatorMenuList) {
+                    commitData.push({
+                        adminInfoformRef: {
+                            ...val,
+                            indicatorMenuList: _indicatorMenuList ? _indicatorMenuList : val.indicatorMenuList ? val.indicatorMenuList.map((t: any) => t[t.length - 1]) : []
+                        },
+
+                    })
+                }
+            })
+
+        }
+
+        setTimeout(() => {
+            console.log({ commitData });
+            onFinish && onFinish(commitData);
+        }, 1000)
+
+    }
+
+    const getDataFromDir = async () => {
+        const dirData = await getIndicatorDictionary();
+        set_dirData(dirData);
+    }
+
+    const getSelectorData = (code: string, type?: 'Cascader') => {
+        const result = dirData.filter(t => t.code == code);
+
+        if (type == 'Cascader' && result.length > 0) {
+            return result[0].children
+        }
+
+
+        if (result.length > 0) {
+            return result[0].children.map(t => ({ label: t.name, value: t.code }))
+        }
+        return [];
+    }
+
+
+
+    const setFormInit = (key: string) => {
+
+        if (key == 'indicatorTypeList') {
+            if (record && record.indicatorTypeList) {
+                const indicatorTypeListVal = record.indicatorTypeList ? record.indicatorTypeList.map((t: string) => t.split('/')) : [];
+                const _indicatorTypeList = indicatorTypeListVal.map((t: any) => t.slice(1, t.length));
+                // console.log({indicatorTypeListVal,_indicatorTypeList})
+                return _indicatorTypeList
+            }
+        }
+        if (key == 'indicatorMenuList') {
+            if (record && record.indicatorMenuList) {
+                const a = record.indicatorMenuList ? record.indicatorMenuList.map((t: string) => t.split('/')) : [];
+                const b = a.map((t: any) => t.slice(1, t.length));
+                // console.log({a,b})
+                return b
+            }
+        }
+
+        if (key == 'indicatorExternalList') {
+            if (record && record.indicatorExternalList) {
+                const a = record.indicatorExternalList ? record.indicatorExternalList.map((t: string) => t.split('/')) : [];
+                const b = a.map((t: any) => t.slice(1, t.length));
+                // console.log({a,b})
+                return b
+            }
+        }
+    }
+
+
+    useEffect(() => {
+        if (visible) {
+            getDataFromDir();
+        }
+        _setVisible(visible);
+    }, [visible]);
+
+    useEffect(() => {
+        set_renderType(actType);
+    }, [actType]);
+
+
+
+    return (
+        <div >
+            <Drawer
+                className='DrawerForm'
+                width={1000} title={renderType == 'ADD' ? '新增指标' : '管理信息'}
+                placement="right"
+                onClose={onClose}
+                visible={_visible}
+                destroyOnClose
+                footer={
+                    <div>
+                        <Button style={{ marginRight: 20 }} onClick={() => onClose()}>取消</Button>
+                        <Button type="primary" onClick={() => commitHandle()}>确定</Button>
+                    </div>
+                }
+                bodyStyle={{ background: 'rgba(153, 166, 191, 0.1)', padding: 0, scrollbarWidth: 'thin' }}
+            >
+
+                <div className='card'>
+                    <div className='cardTitle' >指标基本信息</div>
+                    <div className='formContent'>
+                        <ProForm
+                            layout={'vertical'}
+                            formRef={baseInfoformRef}
+                            grid={true}
+                            initialValues={renderType == 'ADD' ? { attributeType: 1 } : { ...record }}
+                            rowProps={{
+                                gutter: [16, 16],
+                            }}
+                            submitter={{
+                                render: () => null
+                            }}
+                        >
+
+
+                            <ProFormText colProps={{ md: 12, xl: 8 }} name="name" label="指标名称" placeholder="请输入" fieldProps={{}} rules={[{ required: true, message: '这是必填项' }]} />
+                            <ProFormText colProps={{ md: 12, xl: 8 }} name="code" label="指标编码" placeholder="请输入" rules={[{ required: true, message: '这是必填项' }]} />
+                            <ProFormText colProps={{ md: 12, xl: 8 }} name="nationalCode" label="国家编码" placeholder="请输入" />
+
+
+
+                            <ProFormRadio.Group
+                                name="attributeType"
+                                label="指标属性"
+                                colProps={{ md: 12, xl: 8 }}
+                                options={[
+                                    {
+                                        label: '定性',
+                                        value: 1,
+                                    },
+                                    {
+                                        label: '定量',
+                                        value: 2,
+                                    },
+                                ]}
+                            />
+                            <ProFormTextArea colProps={{ md: 12, xl: 8 }}
+                                name="targetDefinition" label="指标定义" placeholder="请输入"
+                                rules={[{ required: true, message: '这是必填项' }]}
+                                fieldProps={{
+                                    allowClear: true,
+                                    autoSize: true
+                                }}
+                            />
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="dimension"
+                                label="指标维度"
+                                options={[
+                                    {
+                                        label: '结构面',
+                                        value: 1,
+                                    },
+                                    {
+                                        label: '过程面',
+                                        value: 2,
+                                    },
+                                    {
+                                        label: '结果面',
+                                        value: 3,
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+                            <ProFormDependency name={['attributeType']}>
+                                {
+                                    ({ attributeType }) => {
+                                        if (attributeType == 2) {
+                                            return (
+                                                <>
+                                                    <ProFormSelect
+                                                        colProps={{ md: 12, xl: 8 }}
+                                                        name="directionType"
+                                                        label="管理指向"
+                                                        options={[
+                                                            {
+                                                                label: '正向',
+                                                                value: 1,
+                                                            },
+                                                            {
+                                                                label: '负向',
+                                                                value: 2,
+                                                            },
+                                                            {
+                                                                label: '区间',
+                                                                value: 3,
+                                                            },
+                                                            {
+                                                                label: '监测达标',
+                                                                value: 4,
+                                                            },
+                                                            {
+                                                                label: '监测比较',
+                                                                value: 5,
+                                                            },
+                                                        ]}
+                                                        placeholder="请选择"
+                                                    />
+                                                    <ProForm.Group colProps={{ md: 12, xl: 8 }}>
+                                                        <div style={{ display: 'flex', flexDirection: 'row', justifyContent: 'center', alignItems: 'center' }}>
+                                                            <div>
+                                                                <ProFormDigit
+                                                                    label="指标区间"
+                                                                    name="lowerLimit"
+                                                                    min={0}
+                                                                    max={10000}
+                                                                    placeholder='最小值'
+                                                                    fieldProps={{ precision: 3 }}
+                                                                />
+                                                            </div>
+                                                            -
+                                                            <div style={{ position: 'relative', top: 15 }}>
+                                                                <ProFormDigit
+                                                                    name="upperLimit"
+                                                                    min={0}
+                                                                    max={10000}
+                                                                    placeholder='最大值'
+                                                                    fieldProps={{ precision: 3 }}
+                                                                />
+                                                            </div>
+                                                        </div>
+                                                    </ProForm.Group>
+
+                                                    <ProFormSelect
+                                                        colProps={{ md: 12, xl: 8 }}
+                                                        name="unit"
+                                                        label="单位"
+                                                        request={async () => {
+                                                            const dirData = await getIndicatorDictionary();
+                                                            const result = dirData.filter(t => t.code == 'Department');
+
+                                                            if (result.length > 0) {
+                                                                return result[0].children.map(t => ({ label: t.name, value: t.code }))
+                                                            }
+                                                            return []
+                                                        }}
+                                                        placeholder="请选择"
+                                                    />
+
+                                                    <ProFormDependency name={['unit']}>
+                                                        {
+                                                            ({ unit }) => {
+                                                                return (unit == '173' || unit == '326') ? (
+                                                                    <ProForm.Group colProps={{ md: 12, xl: 8 }}>
+                                                                        <div style={{ display: 'flex', flexDirection: 'row', justifyContent: 'center', alignItems: 'center' }}>
+                                                                            <div>
+                                                                                <ProFormText name="molecule" label='公式' width={120} placeholder="请输入分子" />
+                                                                            </div>
+
+                                                                            /
+                                                                            <div style={{ position: 'relative', top: 15 }}>
+                                                                                <ProFormText width={120} name="denominator" placeholder="请输入分母" />
+                                                                            </div>
+                                                                            {unit == '173'?`*100%`:`‰`}
+
+                                                                        </div>
+                                                                    </ProForm.Group>
+                                                                ) : (
+                                                                    <ProForm.Group colProps={{ md: 12, xl: 8 }}>
+                                                                        <ProFormText name="molecule" label='公式' placeholder="请输入公式" />
+                                                                    </ProForm.Group>
+                                                                )
+                                                            }
+                                                        }
+                                                    </ProFormDependency>
+
+                                                    <ProFormSelect
+                                                        colProps={{ md: 12, xl: 8 }}
+                                                        name="moleculeSourcType"
+                                                        label="分子数据来源"
+                                                        options={[
+                                                            {
+                                                                label: '定期填报',
+                                                                value: 1,
+                                                            },
+                                                            {
+                                                                label: '表单导入',
+                                                                value: 2,
+                                                            },
+                                                            {
+                                                                label: '系统导入',
+                                                                value: 3,
+                                                            },
+                                                            {
+                                                                label: '异动时填报',
+                                                                value: 4,
+                                                            },
+                                                        ]}
+                                                        placeholder="请选择"
+                                                    />
+                                                    <ProFormSelect
+                                                        colProps={{ md: 12, xl: 8 }}
+                                                        name="denominatorSourceType"
+                                                        label="分母数据来源"
+                                                        options={[
+                                                            {
+                                                                label: '定期填报',
+                                                                value: 1,
+                                                            },
+                                                            {
+                                                                label: '表单导入',
+                                                                value: 2,
+                                                            },
+                                                            {
+                                                                label: '系统导入',
+                                                                value: 3,
+                                                            },
+                                                            {
+                                                                label: '异动时填报',
+                                                                value: 4,
+                                                            },
+                                                        ]}
+                                                        placeholder="请选择"
+                                                    />
+                                                    {/* <ProFormText colProps={{ md: 12, xl: 8 }} name="moleculeSourcDesc" label='分子来源说明' placeholder="请输入" /> */}
+                                                    <ProFormTextArea colProps={{ md: 12, xl: 8 }}
+                                                        name="moleculeSourcDesc" label="分子来源说明" placeholder="请输入"
+                                                        fieldProps={{
+                                                            allowClear: true,
+                                                            autoSize: true
+                                                        }}
+                                                    />
+                                                    {/* <ProFormText colProps={{ md: 12, xl: 8 }} name="denominatorSourceDesc" label='分母来源说明' placeholder="请输入" /> */}
+                                                    <ProFormTextArea colProps={{ md: 12, xl: 8 }}
+                                                        name="denominatorSourceDesc" label="分母来源说明" placeholder="请输入"
+                                                        fieldProps={{
+                                                            allowClear: true,
+                                                            autoSize: true
+                                                        }}
+                                                    />
+
+                                                </>
+                                            )
+                                        }
+                                    }
+                                }
+                            </ProFormDependency>
+                        </ProForm>
+                    </div>
+                </div>
+
+
+                <div className='card'>
+                    <div className='cardTitle' >指标管理信息</div>
+                    <div className='formContent'>
+                        <ProForm
+                            formRef={manaInfoformRef}
+                            layout={'vertical'}
+                            autoFocusFirstInput={false}
+                            grid={true}
+                            initialValues={renderType == 'ADD' ? { indicatorTypeList: [], indicatorExternalList: [] } : {
+                                ...record,
+                                indicatorMenuList: setFormInit('indicatorMenuList'),
+                                // indicatorTypeList:record.indicatorTypeList?record.indicatorTypeList.map((t:string)=>t.split('/')).slice(1,record.indicatorTypeList.map((t:string)=>t.split('/')).length - 1):[],
+                                indicatorTypeList: setFormInit('indicatorTypeList'),
+                                indicatorExternalList: setFormInit('indicatorExternalList'),
+                                // indicatorCommitteeList:record.indicatorCommitteeList[0]?record.indicatorCommitteeList[0].split('/'):[]
+
+                            }}
+                            rowProps={{
+                                gutter: [16, 16],
+                            }}
+                            submitter={{
+                                render: () => null
+                            }}
+                        >
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="divisionId"
+                                label="负责科室"
+                                request={async () => {
+                                    const data = await getHospDepartment();
+                                    return data.map(t => ({ label: t.name, value: t.code }))
+                                }}
+                                placeholder="请选择"
+                            />
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="principalId"
+                                label="负责人"
+                                request={async () => {
+                                    const data = await getUsers({ pageSize: 1000, current: 1 });
+                                    return data.list.map(t => ({ label: t.name, value: t.code }))
+                                }}
+                                placeholder="请选择"
+                            />
+                            {/* <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="principalId"
+                                label="负责人"
+                                request={async ()=>{
+                                    const data = await getUsers({pageSize:1000,current:1});
+                                       return data.list.map(t=>({label:t.name,value:t.code}))
+                                }}
+                                placeholder="请选择"
+                            /> */}
+
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="manageLevel"
+                                label="指标管理级别"
+                                fieldProps={{
+                                    // mode: 'multiple',
+                                    maxTagCount: 'responsive'
+                                }}
+                                options={[
+                                    {
+                                        label: '院级指标/日常',
+                                        value: 0,
+                                    },
+                                    {
+                                        label: '院级指标/重点监测',
+                                        value: 1,
+                                    },
+                                    {
+                                        label: '科级指标/日常',
+                                        value: 2,
+                                    },
+                                    {
+                                        label: '科级指标/重点监测',
+                                        value: 3,
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="analysisType"
+                                label="分析方式"
+                                options={[
+                                    {
+                                        label: '数值',
+                                        value: 1,
+                                    },
+                                    {
+                                        label: '监测比较',
+                                        value: 2,
+                                    },
+                                    {
+                                        label: '目标值达标分析',
+                                        value: 3,
+                                    },
+                                    {
+                                        label: '数值趋势分析',
+                                        value: 4,
+                                    },
+                                    {
+                                        label: '标准差异常分析',
+                                        value: 5,
+                                    },
+                                    {
+                                        label: '四分位数值分析',
+                                        value: 6,
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+                            {/* <Form.Item  >
+                                    <DiyFormCascader data={getSelectorData('IndicatorType', 'Cascader')} />
+                            </Form.Item> */}
+
+                            <ProFormCascader
+                                colProps={{ md: 12, xl: 8 }}
+                                name="indicatorTypeList"
+                                label="指标类别"
+                                fieldProps={{
+                                    maxTagCount: 'responsive',
+                                    multiple: true,
+                                    showCheckedStrategy: 'SHOW_CHILD',
+                                    fieldNames: { label: 'name', value: 'code', children: 'children' },
+                                    options: getSelectorData('IndicatorType', 'Cascader'),
+                                    onChange(value, selectOptions) {
+                                        console.log({ value, selectOptions });
+
+                                        var nodes: any[] = [];
+
+                                        function parseTreeJson(array: any[]) {
+                                            if (!array) return [];
+                                            for (let index = 0; index < array.length; index++) {
+                                                const element = array[index];
+                                                // 判断element.children是对象
+                                                if (element.children && typeof (element.children) == 'object') {
+                                                    parseTreeJson(element.children)
+                                                } else {
+                                                    // 判断是否为子节点
+                                                    if (!(element.children || typeof (element.children) == 'object')) {
+                                                        // 获得符合的 node
+                                                        nodes.push(element);
+                                                    }
+                                                }
+                                            }
+                                        }
+
+                                        if (value.length > 0) {
+                                            for (let index = 0; index < value.length; index++) {
+
+                                                let current = value[index];
+                                                let key = current[current.length - 1];
+                                                const result = selectOptions[index].filter((t: any) => t.code == key);
+
+                                                if (result[0].children) {
+                                                    //非直接叶子节点
+                                                    parseTreeJson(result[0].children);
+                                                }
+                                                if (!result[0].children) {
+                                                    //直接叶子节点
+                                                    nodes.push({ code: result[0].code })
+                                                }
+
+                                            }
+                                        }
+
+                                        const codes = nodes.map((t) => t.code);
+                                        manaInfoformRef.current?.setFieldsValue({ '_indicatorTypeList': codes });
+                                    },
+                                }}
+
+                            />
+                            <ProFormText
+                                label="管理目标值"
+                                colProps={{ md: 12, xl: 8 }}
+                                name="targetValue"
+                            />
+
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="indicatorDepartmentList"
+                                label="职能科室归属"
+                                fieldProps={{
+                                    mode: 'multiple',
+                                    maxTagCount: 'responsive'
+                                }}
+                                options={getSelectorData('IndicatorDepartment') as DefaultOptionType[]}
+                                placeholder="请选择"
+                            />
+
+                            <ProFormDigit colProps={{ md: 12, xl: 8 }} name="reference" label="同级参考值" placeholder="请输入" />
+                            {/* <ProFormText colProps={{ md: 12, xl: 8 }} name="referenceDesc" label="参考值来源说明" placeholder="请输入" /> */}
+                            <ProFormTextArea colProps={{ md: 12, xl: 8 }}
+                                name="referenceDesc" label="参考值来源说明" placeholder="请输入"
+                                fieldProps={{
+                                    allowClear: true,
+                                    autoSize: true
+                                }}
+                            />
+
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="indicatorCommitteeList"
+                                label="委员会归属"
+                                fieldProps={{
+                                    mode: 'multiple',
+                                    maxTagCount: 'responsive'
+                                }}
+                                options={getSelectorData('IndicatorCommittee') as DefaultOptionType[]}
+                                placeholder="请选择"
+                            />
+
+                            <ProFormCascader
+                                colProps={{ md: 12, xl: 8 }}
+                                name="indicatorExternalList"
+                                label="外部指标"
+                                fieldProps={{
+                                    multiple: true,
+                                    maxTagCount: 'responsive',
+                                    fieldNames: { label: 'name', value: 'code', children: 'children' },
+                                    options: getSelectorData('IndicatorExternal', 'Cascader'),
+                                    onChange(value, selectOptions) {
+                                        // console.log({ value, selectOptions });
+
+                                        var nodes: any[] = [];
+
+                                        function parseTreeJson(array: any[]) {
+                                            if (!array) return [];
+                                            for (let index = 0; index < array.length; index++) {
+                                                const element = array[index];
+                                                // 判断element.children是对象
+                                                if (element.children && typeof (element.children) == 'object') {
+                                                    parseTreeJson(element.children)
+                                                } else {
+                                                    // 判断是否为子节点
+                                                    if (!(element.children || typeof (element.children) == 'object')) {
+                                                        // 获得符合的 node
+                                                        nodes.push(element);
+                                                    }
+                                                }
+                                            }
+                                        }
+
+
+                                        if (value.length > 0) {
+                                            for (let index = 0; index < value.length; index++) {
+
+                                                let current = value[index];
+                                                let key = current[current.length - 1];
+                                                const result = selectOptions[index].filter((t: any) => t.code == key);
+                                                console.log({ result });
+                                                if (result[0].children) {
+                                                    //非直接叶子节点
+                                                    parseTreeJson(result[0].children);
+                                                }
+                                                if (!result[0].children) {
+                                                    //直接叶子节点
+                                                    nodes.push({ code: result[0].code })
+                                                }
+
+                                            }
+                                        }
+
+
+                                        const codes = nodes.map((t) => t.code);
+                                        manaInfoformRef.current?.setFieldsValue({ '_indicatorExternalList': codes });
+                                    },
+                                }}
+                            />
+                            {/* <ProFormText colProps={{ md: 12, xl: 8 }} name="remark" label="其他备注" placeholder="请输入" /> */}
+                            <ProFormTextArea colProps={{ md: 12, xl: 8 }}
+                                name="remark" label="其他备注" placeholder="请输入"
+                                fieldProps={{
+                                    allowClear: true,
+                                    autoSize: true
+                                }}
+                            />
+                        </ProForm>
+                    </div>
+                </div>
+
+
+                <div className='card'>
+                    <div className='cardTitle' >指标展示设定</div>
+                    <div className='formContent'>
+                        <ProForm
+                            formRef={showSetInfoformRef}
+                            layout={'vertical'}
+                            grid={true}
+                            autoFocusFirstInput={false}
+                            rowProps={{
+                                gutter: [16, 16],
+                            }}
+                            initialValues={renderType == 'ADD' ? {} : renderType == 'EDIT' && record ? {
+                                ...record,
+                                caseBreakdown: record.caseBreakdown ? record.caseBreakdown.split('/') : [],
+                                chartType: record.chartType ? record.chartType.split('/') : [],
+                                dataDownload: record.dataDownload ? record.dataDownload.split('/') : [],
+                                dataSum: record.dataSum ? record.dataSum.split('/') : [],
+                                drillLevel: record.drillLevel ? record.drillLevel.split('/') : [],
+                            } : {}}
+                            submitter={{
+                                render: () => null
+                            }}
+                        >
+
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="appearDate"
+                                label="呈现期间"
+                                options={[
+                                    {
+                                        label: '年',
+                                        value: '年',
+                                    },
+                                    {
+                                        label: '季',
+                                        value: '季',
+                                    },
+                                    {
+                                        label: '月',
+                                        value: '月',
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="chartType"
+                                label="图表形态"
+                                fieldProps={{
+                                    mode: 'multiple',
+                                    maxTagCount: 'responsive'
+                                }}
+                                options={[
+                                    {
+                                        label: '统计表',
+                                        value: '统计表',
+                                    },
+                                    {
+                                        label: '直方图',
+                                        value: '直方图',
+                                    },
+                                    {
+                                        label: '趋势图',
+                                        value: '趋势图',
+                                    },
+                                    {
+                                        label: '其他',
+                                        value: '其他',
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="dataSum"
+                                label="数据汇总呈现"
+                                fieldProps={{
+                                    mode: 'multiple',
+                                    maxTagCount: 'responsive'
+                                }}
+                                options={[
+                                    { label: '全院', value: '全院' },
+                                    { label: '分院', value: '分院' },
+                                ]}
+                                placeholder="请选择"
+                            />
+
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="drillLevel"
+                                label="资料下钻层级"
+                                fieldProps={{
+                                    mode: 'multiple',
+                                    maxTagCount: 'responsive'
+                                }}
+                                options={[
+                                    {
+                                        label: '全院',
+                                        value: '全院',
+                                    },
+                                    {
+                                        label: '分院区',
+                                        value: '分院区',
+                                    },
+                                    {
+                                        label: '科别',
+                                        value: '科别',
+                                    },
+                                    {
+                                        label: '医师别',
+                                        value: '医师别',
+                                    },
+                                    {
+                                        label: '个案',
+                                        value: '个案',
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="dataDownload"
+                                label="资料下载"
+                                fieldProps={{
+                                    mode: 'multiple',
+                                    maxTagCount: 'responsive'
+                                }}
+                                options={[
+                                    {
+                                        label: '全院',
+                                        value: '全院',
+                                    },
+                                    {
+                                        label: '分院区',
+                                        value: '分院区',
+                                    },
+                                    {
+                                        label: '科别',
+                                        value: '科别',
+                                    },
+                                    {
+                                        label: '医师别',
+                                        value: '医师别',
+                                    },
+                                    {
+                                        label: '个案数',
+                                        value: '个案数',
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="caseBreakdown"
+                                label="个案明细字段"
+                                fieldProps={{
+                                    mode: 'multiple',
+                                    maxTagCount: 'responsive'
+                                }}
+                                options={[
+                                    {
+                                        label: '看诊科别',
+                                        value: '看诊科别',
+                                    },
+                                    {
+                                        label: '就诊日期',
+                                        value: '就诊日期',
+                                    },
+                                    {
+                                        label: '住院科别',
+                                        value: '住院科别',
+                                    },
+                                    {
+                                        label: '出院科别',
+                                        value: '出院科别',
+                                    },
+                                    {
+                                        label: '病历号',
+                                        value: '病历号',
+                                    },
+                                    {
+                                        label: '住院日期时间',
+                                        value: '住院日期时间',
+                                    },
+                                    {
+                                        label: '转出日期',
+                                        value: '转出日期',
+                                    },
+                                    {
+                                        label: '出院日期时间',
+                                        value: '出院日期时间',
+                                    },
+                                    {
+                                        label: '出院类别',
+                                        value: '出院类别',
+                                    },
+                                    {
+                                        label: '出院诊断码',
+                                        value: '出院诊断码',
+                                    },
+                                    {
+                                        label: '合并症码',
+                                        value: '合并症码',
+                                    },
+                                    {
+                                        label: '死亡原因',
+                                        value: '死亡原因',
+                                    },
+                                    {
+                                        label: '手术代码',
+                                        value: '手术代码',
+                                    },
+                                    {
+                                        label: '其他',
+                                        value: '其他',
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+
+
+                        </ProForm>
+                    </div>
+                </div>
+
+                <div className='card'>
+                    <div className='cardTitle' >管理员维护信息</div>
+                    <div className='formContent'>
+                        <ProForm
+                            formRef={adminInfoformRef}
+                            layout={'vertical'}
+                            grid={true}
+                            autoFocusFirstInput={false}
+                            initialValues={renderType == 'ADD' ? { isPublic: 1 } : renderType == 'EDIT' && record ? {
+                                ...record,
+                                indicatorMenuList: setFormInit('indicatorMenuList'),
+                            } : {}}
+                            rowProps={{
+                                gutter: [16, 16],
+                            }}
+                            submitter={{
+                                render: () => null
+                            }}
+                        >
+
+                            <ProFormCascader
+                                colProps={{ md: 12, xl: 8 }}
+                                name="indicatorMenuList"
+                                label="指标目录"
+                                rules={[{ required: true, message: '这是必填项' }]}
+                                fieldProps={{
+                                    multiple: true,
+                                    fieldNames: { label: 'name', value: 'code' },
+                                    onChange(value: any, selectOptions: any) {
+                                        console.log({ value, selectOptions });
+
+                                        var nodes: any[] = [];
+
+                                        function parseTreeJson(array: any[]) {
+                                            if (!array) return [];
+                                            for (let index = 0; index < array.length; index++) {
+                                                const element = array[index];
+                                                // 判断element.children是对象
+                                                if (element.children && typeof (element.children) == 'object') {
+                                                    parseTreeJson(element.children)
+                                                } else {
+                                                    // 判断是否为子节点
+                                                    if (!(element.children || typeof (element.children) == 'object')) {
+                                                        // 获得符合的 node
+                                                        nodes.push(element);
+                                                    }
+                                                }
+                                            }
+                                        }
+
+                                        if (value.length > 0) {
+                                            for (let index = 0; index < value.length; index++) {
+
+                                                let current = value[index];
+                                                let key = current[current.length - 1];
+                                                const result = selectOptions[index].filter((t: any) => t.code == key);
+                                                // console.log({result});
+                                                if (result[0].children) {
+                                                    //非直接叶子节点
+                                                    parseTreeJson(result[0].children);
+                                                }
+                                                if (!result[0].children) {
+                                                    //直接叶子节点
+                                                    nodes.push({ code: result[0].code })
+                                                }
+
+                                            }
+                                        }
+
+
+                                        const codes = nodes.map((t) => t.code);
+                                        console.log({ codes, nodes });
+                                        adminInfoformRef.current?.setFieldsValue({ '_indicatorMenuList': codes });
+                                    },
+                                }}
+                                request={async () => {
+                                    if (location.search.length > 0) {
+                                        const id = (location.search.split('='))[1];
+                                        if (id) {
+                                            const dirData = await getIndicatorDictionary();
+                                            if (dirData) {
+                                                const result = dirData.filter(t => t.code == id);
+
+                                                if (result.length > 0) {
+                                                    return result[0].children
+                                                }
+                                            }
+                                            return []
+                                        }
+
+                                    }
+
+                                    return []
+                                }}
+                                placeholder="请选择"
+                            />
+
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="isPublic"
+                                label="是否公开"
+                                options={[
+                                    {
+                                        label: '是',
+                                        value: 1,
+                                    },
+                                    {
+                                        label: '否',
+                                        value: 0,
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+                            <ProFormSelect
+                                colProps={{ md: 12, xl: 8 }}
+                                name="version"
+                                label="版本"
+                                options={[
+                                    {
+                                        label: '版本1',
+                                        value: 1,
+                                    },
+                                    {
+                                        label: '版本2',
+                                        value: 2,
+                                    },
+                                    {
+                                        label: '版本3',
+                                        value: 3,
+                                    },
+                                ]}
+                                placeholder="请选择"
+                            />
+
+                        </ProForm>
+                    </div>
+                </div>
+            </Drawer>
+        </div>
+    )
+}
+
+export default DrawerForm

+ 20 - 0
src/pages/platform/setting/indicatorMana/DrawerForm/style.less

@@ -0,0 +1,20 @@
+
+
+
+.DrawerForm {
+      .card {
+        padding:24px;
+        margin:10px;
+        background: #FFFFFF;
+        border-radius: 4px;
+        .cardTitle {
+            height: 16px;
+            font-size: 16px;
+            font-family: SourceHanSansCN-Medium, SourceHanSansCN;
+            font-weight: 500;
+            color: #17181A;
+            line-height: 16px;
+            margin-bottom: 24px;
+        }
+      }
+}

+ 107 - 0
src/pages/platform/setting/indicatorMana/TreeDirectory/index.tsx

@@ -0,0 +1,107 @@
+/*
+ * @Author: code4eat awesomedema@gmail.com
+ * @Date: 2022-07-16 14:33:12
+ * @LastEditors: code4eat awesomedema@gmail.com
+ * @LastEditTime: 2022-07-19 11:23:19
+ * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/indicatorMana/TreeDirectory/index.tsx
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+import { Divider, Tree } from 'antd';
+import { DataNode, DirectoryTreeProps } from 'antd/es/tree';
+import React, { Key, useEffect, useState } from 'react'
+
+import './style.less';
+
+const { DirectoryTree } = Tree;
+
+
+
+
+
+
+
+
+
+const TreeDirectory = ({ data,onSelectChange }: { data: any[];onSelectChange?:(selectedNode:any)=>void }) => {
+
+
+    const [defaultExpandedKeys,set_defaultExpandedKeys] = useState<Key[]>([]);
+    const [defaultSelectedKeys,set_defaultSelectedKeys] = useState<string[]>([]);
+
+
+    const onSelect: DirectoryTreeProps['onSelect'] = (keys, info) => {
+        // console.log('Trigger Select', keys, info);
+        onSelectChange&&onSelectChange(info.node);
+    };
+
+    const onExpand: DirectoryTreeProps['onExpand'] = (keys, info) => {
+        // console.log('Trigger Expand', keys, info);
+        set_defaultExpandedKeys(keys)
+    };
+
+
+    useEffect(()=>{
+
+        const getName:any = (obj:any)=>{
+            let isArr = Array.isArray(obj);
+            let reslut = [];
+            if(isArr){
+                obj.forEach((item: any) => {
+                    reslut.push(...getName(item));
+                });
+            }else{
+                reslut.push(obj.code)
+                if(obj.children){
+                    reslut.push(...getName(obj.children));
+                }
+            }
+            return reslut;
+        }
+
+            
+           if(data.length>0){
+                 const keys = getName(data);               
+                 set_defaultExpandedKeys(keys);
+                 set_defaultSelectedKeys([data[0].children[0].code]);
+                 onSelectChange&&onSelectChange({code:data[0].children[0].code});
+           } 
+    },[data]);
+
+
+    useEffect(()=>{
+           console.log({defaultExpandedKeys});
+    },[defaultExpandedKeys])
+
+
+    return (
+        <div className='TreeDirectory'>
+            {
+                (data.length > 0&&defaultExpandedKeys.length>0) && (
+                    <DirectoryTree
+                        // multiple
+                        blockNode
+                        height={750}
+                        rootStyle={{overflow:'hidden',whiteSpace: 'nowrap', textOverflow: 'ellipsis',width:'100%'}}
+                        fieldNames={{ title: 'name', key: 'code' }}
+                        expandedKeys={defaultExpandedKeys}
+                        // defaultExpandedKeys={defaultExpandedKeys}
+                        defaultSelectedKeys={defaultSelectedKeys}
+                        // expandedKeys={defaultExpandedKeys}
+                        onSelect={onSelect}
+                        onExpand={onExpand}
+                        treeData={data}
+                        // titleRender={(nodeData) => {
+                        //     return (
+                        //         <span style={{ display: 'inline-block', overflow: 'hidden', whiteSpace: 'nowrap', textOverflow: 'ellipsis', width: '70%',height:30 }}>{nodeData.name}</span>
+                        //     )
+                        // }}
+                    />
+                )
+            }
+        </div>
+    )
+}
+
+export default TreeDirectory

+ 0 - 0
src/pages/platform/setting/indicatorMana/TreeDirectory/style.less


+ 453 - 0
src/pages/platform/setting/indicatorMana/index.tsx

@@ -0,0 +1,453 @@
+/*
+ * @Author: code4eat awesomedema@gmail.com
+ * @Date: 2022-07-12 11:14:21
+ * @LastEditors: code4eat awesomedema@gmail.com
+ * @LastEditTime: 2022-07-20 10:44:16
+ * @FilePath: /KC-MiddlePlatform/src/pages/platform/setting/indicatorMana/index.tsx
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+
+import KCTable from '@/components/kcTable';
+import { ActionType, ProColumns } from '@ant-design/pro-table';
+import React, { useEffect, useRef, useState } from 'react'
+import { Button, Drawer, Popconfirm } from 'antd'
+import Divider from '@ant-design/pro-card/lib/components/Divider';
+import DrawerForm from './DrawerForm/drawer';
+import ProForm from '@ant-design/pro-form/lib/layouts/ProForm';
+import { addIndicatorManaList, delIndicatorManaList, editIndicatorManaList, getIndicatorCateList, getIndicatorManaList, IndicatorManaItemType } from '@/service/indicator';
+import TreeDirectory from './TreeDirectory';
+
+import './style.less';
+import { getIndicatorDictionary, IndicatorDictionaryDataType } from '@/service/dictionary';
+import { useLocation } from 'umi';
+
+
+const IndicatorMana = () => {
+
+  const [reloadTable, set_reloadTable] = useState(false);
+  const [drawerVisible, set_drawerVisible] = useState(false);
+  const [indicateType, set_indicateType] = useState<IndicatorDictionaryDataType[]>([]);
+  const [currentEditRowData, set_currentEditRowData] = useState<any | undefined>(undefined);
+  const [indicatorCateTreeData, set_indicatorCateTreeData] = useState<any[]>([]);
+  const [defaultExpandedRowKeys, set_defaultExpandedRowKeys] = useState<string[]>([]);
+  const [tableData, set_tableData] = useState<any[]>([]);
+  const [cateId, set_cateId] = useState<string>();
+
+
+  const [drawerActype, set_drawerActype] = useState<'ADD' | 'EDIT'>('ADD');
+
+  const indicatorTableRef = useRef<ActionType>();
+
+
+  const columns: ProColumns<any>[] = [
+    {
+      title: '指标名称',
+      dataIndex: 'name',
+      hideInSearch: false,
+      width: '30%',
+      ellipsis: true,
+
+    },
+    // {
+    //   title: '指标编码',
+    //   dataIndex: 'code',
+    //   ellipsis: true,
+    //   render: (text, record) => {
+    //     if (record) {
+    //       const { indicatorBoolean, code } = record;
+    //       return indicatorBoolean ? code : ''
+    //     } else {
+    //       return ''
+    //     }
+
+    //   }
+    // },
+    {
+      title: '指标类别',
+      dataIndex: 'indicatorType',
+      hideInSearch:true,
+      ellipsis: true,
+      hideInTable: true,
+      valueType: 'select',
+      request: async () => {
+        const resp = await getIndicatorDictionary();
+        if (resp) {
+          const data = resp.filter(t => t.code == 'IndicatorType');
+          if (data.length > 0) {
+            return data[0].children.map(t => ({ label: t.name, value: t.code }))
+          }
+        }
+        return []
+      },
+      render: (text, record) => {
+        if (record) {
+          const { indicatorBoolean, indicatorTypeList } = record;
+          return indicatorBoolean && indicatorTypeList ? (indicatorTypeList.map((t: any) => t.name)).join('/') : ''
+        } else {
+          return ''
+        }
+
+      }
+    },
+    {
+      title: '外部指标',
+      dataIndex: 'outsideIndexes',
+      hideInSearch: true,
+      ellipsis: true,
+      hideInTable: true,
+      valueType: 'cascader',
+      fieldProps: {
+        fieldNames: { label: 'name', value: 'code' },
+        placeholder: '请选择'
+      },
+
+      request: async () => {
+        const resp = await getIndicatorDictionary();
+        if (resp) {
+          const data = resp.filter(t => t.code == 'IndicatorExternal');
+          if (data.length > 0) {
+            return data[0].children
+          }
+        }
+        return []
+      },
+      render: (text, record) => {
+        if (record) {
+          const { indicatorBoolean, indicatorExternalList } = record;
+          return indicatorBoolean ? indicatorExternalList ? (indicatorExternalList.map((t: any) => t.name)).join('/') : '-' : ''
+        } else {
+          return ''
+        }
+
+      }
+    },
+    {
+      title: '指标编码',
+      dataIndex: 'code',
+      hideInSearch:true,
+      width: '10%',
+      ellipsis: true,
+
+    },
+    {
+      title: '指标定义',
+      dataIndex: 'targetDefinition',
+      hideInSearch:true,
+      width: '30%',
+      ellipsis: true,
+
+    },
+
+    {
+      title: '操作',
+      width: 200,
+      key: 'option',
+      valueType: 'option',
+      render: (text, record) => {
+
+
+        if (record && record.indicatorBoolean) {
+          return (
+            [
+              <a key="linka" href={record.indicatorPath} target='_blank'>
+                数据展示
+              </a>,
+              <a key="link3" onClick={() => actionHandle('EDIT', record)}>
+                管理信息
+              </a>,
+              <Popconfirm
+                title="是否确定删除?"
+                onConfirm={() => delHandle(record)}
+                okText="确定"
+                cancelText="取消"
+                key="link2"
+              >
+                <a>删除</a>
+              </Popconfirm>,
+            ]
+          )
+        }
+
+        return []
+      }
+      ,
+    },
+  ];
+
+
+  const getIndicatorDir = async () => {
+    const resp = await getIndicatorDictionary();
+    if (resp) {
+      set_indicateType(resp);
+    }
+  }
+
+  const getData = async (params: any) => {
+    const { current = 1, name, indicatorType, outsideIndexes } = params;
+
+    console.log({params});
+    if(cateId){
+      const resp = await getIndicatorManaList({
+        current:1,
+        pageSize:0,
+        menuCode: cateId as string,
+        indicatorName: name,
+        indicatorType: indicatorType,
+        outsideIndexes: outsideIndexes && outsideIndexes.length > 0 ? outsideIndexes[outsideIndexes.length - 1] : ''
+      });
+  
+      if (resp&&resp[0]) {
+  
+        const getName:any = (obj:any)=>{
+
+          let isArr = Array.isArray(obj);
+          let reslut = [];
+          if(isArr){
+              obj.forEach((item: any) => {
+                  reslut.push(...getName(item));
+              });
+          }else{
+              reslut.push(obj.menuId)
+
+              if(obj.children){
+                  reslut.push(...getName(obj.children));
+              }
+          }
+          return reslut;
+        }
+  
+        set_tableData(resp[0].children as unknown as []);
+  
+  
+        set_defaultExpandedRowKeys(getName(resp[0].children));
+  
+        return {
+          data: resp[0].children as unknown as [],
+          success: true,
+          total: 1,
+        };
+      } else {
+        return {
+          data: [],
+          success: true,
+          total: 0,
+        };
+      }
+    }
+
+    return {
+          data: [],
+          success: false,
+          total: 0,
+    }
+    
+  }
+
+
+  const getIndicatorCateTree = async () => {
+    // console.log(location.search);
+    let menuId = '';
+    if (location.search.length > 0) {
+      const searchArr = location.search.split('=');
+      // console.log({ searchArr });
+      if(searchArr[1]){
+        const resp = await getIndicatorCateList({ menuCode: searchArr[1] });
+        if (resp) {
+          set_indicatorCateTreeData(resp);
+        }
+      }
+
+    }
+
+  }
+
+
+
+  const actionHandle = async (key: 'EDIT' | 'DEL', record: IndicatorDictionaryDataType) => {
+    set_currentEditRowData(record);
+    if (key == 'EDIT') {
+      set_drawerActype('EDIT');
+      set_drawerVisible(true);
+    }
+  }
+
+  const addHandle = () => {
+    set_drawerActype('ADD');
+    set_currentEditRowData(undefined);
+    set_drawerVisible(true);
+  }
+
+  const delHandle = async (record: IndicatorDictionaryDataType) => {
+
+    const resp = await delIndicatorManaList({ id: record.id });
+    if (resp) {
+      indicatorTableRef.current?.reload();
+    }
+  }
+
+  const onVisibleChangeHandle = (bool: boolean) => {
+
+    if (!bool) {
+      set_drawerVisible(false);
+    }
+    if (bool) {
+      set_drawerVisible(true);
+    }
+  }
+
+  const drawerFormCommitHanndle = async (data: any) => {
+    // const formData = Object.assign({}, data[0].baseInfoformRef, data[1].manaInfoformRef, data[2].showSetInfoformRef, data[3].adminInfoformRef);
+    //const _formData = {...data[0].baseInfoformRef,...data[1].manaInfoformRef,...data[2].showSetInfoformRef,...data[3].adminInfoformRef}
+  
+    let formData:any;
+    data.forEach((element:any) => {
+         if(element.baseInfoformRef){
+            formData = {...formData,...element.baseInfoformRef}
+         }
+         if(element.manaInfoformRef){
+          formData = {...formData,...element.manaInfoformRef}
+         }
+         if(element.showSetInfoformRef){
+          formData = {...formData,...element.showSetInfoformRef}
+         }
+         if(element.adminInfoformRef){
+          formData = {...formData,...element.adminInfoformRef}
+         }
+    });
+ 
+
+    if (drawerActype == 'ADD') {
+      const resp = await addIndicatorManaList({
+        ...formData,
+        caseBreakdown: formData.caseBreakdown ? formData.caseBreakdown.join('/') : '',
+        dataDownload: formData.dataDownload ? formData.dataDownload.join('/') : '',
+        drillLevel: formData.drillLevel ? formData.drillLevel.join('/') : '',
+        dataSum: formData.dataSum ? formData.dataSum.join('/') : '',
+        chartType: formData.chartType ? formData.chartType.join('/') : '',
+
+        indicatorMenuList: formData.indicatorMenuList ? formData.indicatorMenuList : [],
+        indicatorTypeList: formData.indicatorTypeList ? formData.indicatorTypeList : [],
+        indicatorExternalList: formData.indicatorExternalList ? formData.indicatorExternalList : [],
+        divisionId: `${formData.divisionId}`,
+
+      });
+
+      if (resp) {
+        set_drawerVisible(false);
+        indicatorTableRef.current?.reload();
+      }
+    }
+
+    if (drawerActype == 'EDIT') {
+      const resp = await editIndicatorManaList({
+        ...currentEditRowData,
+        ...formData,
+        caseBreakdown: formData.caseBreakdown ? formData.caseBreakdown.join('/') : '',
+        dataDownload: formData.dataDownload ? formData.dataDownload.join('/') : '',
+        drillLevel: formData.drillLevel ? formData.drillLevel.join('/') : '',
+        dataSum: formData.dataSum ? formData.dataSum.join('/') : '',
+        chartType: formData.chartType ? formData.chartType.join('/') : '',
+      });
+      if (resp) {
+        set_drawerVisible(false);
+        indicatorTableRef.current?.reload();
+      }
+    }
+
+  }
+
+
+  const onSelectChangehandle = (currentSelected: any) => {
+    // console.log({ currentSelected });
+    set_cateId(currentSelected.code);
+  }
+
+  useEffect(() => {
+    if (tableData) {
+      const keys = tableData.map((t: any) => t ? t.code : '');
+ 
+    }
+  }, [tableData]);
+
+
+  useEffect(() => {
+    // console.log({ cateId });
+    // set_reloadTable(true);
+    indicatorTableRef.current?.reload();
+  }, [cateId]);
+
+
+  useEffect(() => {
+    getIndicatorCateTree();
+  }, [location.search]);
+
+
+  useEffect(() => {
+    getIndicatorDir();
+    getIndicatorCateTree();
+  }, [])
+
+  return (
+    <div className='IndicatorMana'>
+      <DrawerForm actType={drawerActype} visible={drawerVisible} onVisibleChange={onVisibleChangeHandle} onFinish={data => drawerFormCommitHanndle(data)} record={currentEditRowData} />
+      <div className='content'>
+        <div className='left'>
+          <TreeDirectory data={indicatorCateTreeData} onSelectChange={(info) => onSelectChangehandle(info)} />
+        </div>
+        <div className='right'>
+          {
+            cateId && (
+              <KCTable
+                className='indicatorTable'
+                rowKey="menuId"
+                headerTitle="指标管理"
+                columns={columns}
+                actionRef={indicatorTableRef}
+                expandable={{
+                      expandedRowKeys:defaultExpandedRowKeys,
+                      onExpand:(expanded, record)=>{
+                              // console.log({expanded, record});
+                              let _expandedKeys = [...defaultExpandedRowKeys];
+                              if(expanded){
+                                _expandedKeys.push(record.menuId)
+                              }else{
+                                const index = _expandedKeys.findIndex(t=>t==`${record.menuId}`);
+                                if(index != -1){
+                                  _expandedKeys.splice(index,1);
+                                }
+                              }
+                              set_defaultExpandedRowKeys([..._expandedKeys]);
+                      }
+
+                }}
+                reload={reloadTable}
+                search={{
+                  span: 8
+                }}
+                tableStyle={{ height: 600, overflow: 'scroll' }}
+                pagination={{pageSize:100}}
+                toolBarRender={() => [
+                  // <Button key="1" onClick={addHandle}>
+                  //   上传
+                  // </Button>,
+                  // <Button key="2" onClick={addHandle}>
+                  //   下载
+                  // </Button>,
+                  <Button key="3" type="primary" onClick={addHandle}>
+                    新增
+                  </Button>,
+                ]}
+                request={(params) => getData(params)}
+              />
+            )
+          }
+        </div>
+      </div>
+
+    </div>
+  )
+}
+
+export default IndicatorMana

+ 37 - 0
src/pages/platform/setting/indicatorMana/style.less

@@ -0,0 +1,37 @@
+
+
+
+.IndicatorMana {
+     .content {
+        display: flex;
+        flex: 1;
+        flex-direction: row;
+        justify-content: space-between;
+        align-items:flex-start;
+
+        .left {
+             position: sticky;
+             top:0px;
+             width:23%;
+             height: 785px;
+             padding: 5px;
+             padding-top: 30px;
+             background-color: #fff;
+        }
+        .right {
+            width: 76%;
+            // overflow-y: hidden;
+            .indicatorTable {
+                  td {
+                       &>span {
+                           &.kcmp-ant-typography-ellipsis {
+                                display:inline;
+                           }
+                       }
+                  }
+            }
+        }
+     }
+
+
+}

+ 9 - 24
src/pages/platform/setting/menuManage/index.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-13 15:22:48
- * @LastEditTime: 2022-07-07 18:03:47
+ * @LastEditTime: 2022-07-18 09:27: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/platform/setting/hospManage/index.tsx
@@ -105,10 +105,10 @@ const MenuManage: FC<PageProps> = ({ menuManageModel: state, dispatch }) => {
               设为首页
             </a>,
             <Divider key="1" type="vertical" style={{ margin: '0 1px'}} />,
-            <a key="link" onClick={() => editHandle(record)}>
+            <a key="link0" onClick={() => editHandle(record)}>
               编辑
             </a>,
-            <Divider key="1" type="vertical" style={{ margin: '0 1px'}} />,
+            <Divider key="11" type="vertical" style={{ margin: '0 1px'}} />,
             <Popconfirm
               title="是否确定删除?"
               onConfirm={() => delHandle(record)}
@@ -123,27 +123,27 @@ const MenuManage: FC<PageProps> = ({ menuManageModel: state, dispatch }) => {
             <a key="link3" onClick={() => addHandle(record.menuId, record)}>
               添加
             </a>,
-            <Divider key="1" type="vertical" style={{ margin: '0 1px' }} />,
-             <a key="link3" onClick={() => moveAndCopy(record)}>
+            <Divider key="100" type="vertical" style={{ margin: '0 1px' }} />,
+             <a key="link4" onClick={() => moveAndCopy(record)}>
                复制/移动
              </a>,
           ]:[
-            <a key="link" onClick={() => editHandle(record)}>
+            <a key="link12" onClick={() => editHandle(record)}>
               编辑
             </a>,
-            <Divider key="1" type="vertical" style={{ margin: '0 1px' }} />,
+            <Divider key="10" type="vertical" style={{ margin: '0 1px' }} />,
             <Popconfirm
               title="是否确定删除?"
               onConfirm={() => delHandle(record)}
               // onCancel={cancel}
               okText="确定"
               cancelText="取消"
-              key="link2"
+              key="link23"
             >
               <a>删除</a>
             </Popconfirm>,
             <Divider key="2" type="vertical" style={{ margin: '0 1px' }} />,
-            <a key="link3" onClick={() => addHandle(record.menuId, record)}>
+            <a key="link5" onClick={() => addHandle(record.menuId, record)}>
               添加
             </a>,
           ]
@@ -177,21 +177,6 @@ const MenuManage: FC<PageProps> = ({ menuManageModel: state, dispatch }) => {
 
     if (name) {
       //搜索菜单
-      // const deeper = (data: MenuItemDataType[], keyword: string) => {
-      //   let result: MenuItemDataType[] = [];
-
-      //   data.forEach((t, index) => {
-      //     if (t.name.includes(keyword)) {
-      //       result.push({ ...t, children: [] }); //不带出子集
-      //     } else {
-      //       if (t.children && t.children.length > 0) {
-      //         result.push({ ...t, children: deeper(t.children, keyword) });
-      //       }
-      //     }
-      //   });
-      //   return result;
-      // };
-
       let deeper = (data: MenuItemDataType[], keyword: string) => {
         let newarr:MenuItemDataType[] = [];
         data.forEach(element => {

+ 18 - 10
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-11 15:34:44
+ * @LastEditTime: 2022-07-21 16:56:55
  * @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
@@ -54,7 +54,7 @@ const ActModal: React.FC<ActModalProps> = ({
   };
 
   const onFinishHandle = (data: any & AddUsersDataType) => {
-    console.log({currentEdit});
+    console.log({ currentEdit });
     if (tableAct == TableActType.ADD) {
       dispatch &&
         dispatch({
@@ -99,7 +99,7 @@ const ActModal: React.FC<ActModalProps> = ({
 
     if (record?.type == 6) {
       //中心层
-      return MenuTypes.filter((t) => t.label != '中心层');
+      return MenuTypes.filter((t) => t.label == '体系');
     }
 
     if (record?.type == 5) {
@@ -138,7 +138,7 @@ const ActModal: React.FC<ActModalProps> = ({
       initialValues={
         tableAct == TableActType.EDIT
           ? { ...currentEdit }
-          : { 
+          : {
             hospSign: randomString(16), isDataShare: 0, isHomepage: 0,
           }
       }
@@ -215,10 +215,10 @@ const ActModal: React.FC<ActModalProps> = ({
               ]}
             />
 
-            <ProFormDependency name={['type','contentType']}>
+            <ProFormDependency name={['type', 'contentType']}>
               {
-                ({ type,contentType }) => {
-                  if (type == 1&&contentType != 4) {
+                ({ type, contentType }) => {
+                  if (type == 1 && contentType != 4) {
                     return (
                       <ProFormText
                         width="md"
@@ -233,17 +233,17 @@ const ActModal: React.FC<ActModalProps> = ({
                         ]}
                       />
                     )
-                  }else{
+                  } else {
                     return (
                       <ProFormText
                         width="md"
                         name="path"
                         label="PATH"
-                        initialValue={tableAct == TableActType.ADD?'/platform':''}
+                        initialValue={tableAct == TableActType.ADD ? '/platform' : ''}
                         placeholder="请输入"
                         rules={[
                           {
-                            required:false,
+                            required: false,
                             message: '请输入!',
                           },
                         ]}
@@ -253,6 +253,14 @@ const ActModal: React.FC<ActModalProps> = ({
                 }
               }
             </ProFormDependency>
+            <ProFormDigit
+              label="排序号"
+              name="orderNum"
+              min={0}
+              width="md"
+              max={1000}
+              fieldProps={{ precision: 0 }}
+            />
             <ProFormText width="md" name="icon" label="icon" placeholder="请输入" />
             <ProFormDependency name={['type']}>
               {({ type }) => {

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

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-11 09:43:18
- * @LastEditTime: 2022-07-01 09:53:01
+ * @LastEditTime: 2022-07-14 08:59:21
  * @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
@@ -180,7 +180,7 @@ const UserManage: FC<PageProps> = ({ userManageModel: state, dispatch }) => {
 
   return (
     <div className="UserManage">
-      <ActModal {...state} dispatch={dispatch} />
+      <ActModal  {...state} dispatch={dispatch} />
 
       <KCTable
         rowKey="id"
@@ -191,7 +191,7 @@ const UserManage: FC<PageProps> = ({ userManageModel: state, dispatch }) => {
           <KCUpload
             title="导入数据"
             fieldProps={{
-              onChange: ({ file, fileList }) => {
+              onChange: ({ file, fileList }:{file:any,fileList:any}) => {
                 if (file.status == 'done') {
                   importUserHandle(file.originFileObj);
                 }

+ 29 - 20
src/pages/platform/setting/userManage/modal.tsx

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-12 17:11:11
- * @LastEditTime: 2022-07-08 18:53:21
+ * @LastEditTime: 2022-07-14 16:27: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
@@ -179,7 +179,7 @@ const ActModal: React.FC<ActModalProps> = ({
                     {loadAvatar && <Spin className='spin' indicator={antIcon} />}
                   </div>
                   <Upload {...props} className='UploadBtn'>
-                    <Button icon={<UploadOutlined />}>上传照片(100*130)</Button>
+                    <Button icon={<UploadOutlined />}>上传照片</Button>
                   </Upload>
                 </div>
                 <div className='formItem'>
@@ -228,7 +228,7 @@ const ActModal: React.FC<ActModalProps> = ({
                   <ProFormText name="idCardNum" label="身份证号:" placeholder="请输入" />
                 </div>
                 <div className='formItem'>
-                  <ProFormText name="phoneNum" label="手机号:" placeholder="请输入" />
+                  <ProFormText name="phoneNumber" label="手机号:" placeholder="请输入" />
                 </div>
                 <div className='formItem'>
                   <ProFormText name="qualificationCertificateNo" label="资格证号:" placeholder="请输入" />
@@ -241,14 +241,7 @@ const ActModal: React.FC<ActModalProps> = ({
                     placeholder="请选择"
                   />
                 </div>
-                <div className='formItem'>
-                  <ProFormSelect
-                    name="practiceSubject"
-                    label="执业科目:"
-                    options={setSelectorData('PROCESSIONAL_SUBJECTS_TYPE').list}
-                    placeholder="请选择"
-                  />
-                </div>
+                
               </div>
               <div className='right'>
                 <div className='formItem'>
@@ -261,17 +254,17 @@ const ActModal: React.FC<ActModalProps> = ({
                   <ProFormSelect
                     name="gender"
                     label="性别:"
-                    request={async () => [
-                      { label: '男', value: '男' },
-                      { label: '女', value: '女' },
+                    options={[
+                      { label: '男', value: 1 },
+                      { label: '女', value: 2 },
                     ]}
                     placeholder="请选择"
                     rules={[{ required: true, message: '请选择性别!' }]}
                   />
                 </div>
-                <div className='formItem'>
-                  <ProFormText name="text" label="科室:" placeholder="请输入" rules={[{ required: true, message: '请输入工号!' }]} />
-                </div>
+                {/* <div className='formItem'>
+                  <ProFormText name="departmentId" label="科室:" placeholder="请输入" rules={[{ required: true, message: '请选择!' }]} />
+                </div> */}
                 <div className='formItem'>
                   <ProFormSelect
                     name="title"
@@ -282,7 +275,7 @@ const ActModal: React.FC<ActModalProps> = ({
                   />
                 </div>
                 <div className='formItem'>
-                  <ProFormDateTimePicker name="entryTime" label="入职时间" placeholder={'请选择日期'} />
+                  <ProFormDateTimePicker name="entryTime" width={282} label="入职时间" placeholder={'请选择日期'} />
                 </div>
                 <div className='formItem'>
                   <ProFormText name="practiceCertificateNo" label="执业证号:" placeholder="请输入" />
@@ -303,14 +296,30 @@ const ActModal: React.FC<ActModalProps> = ({
                     placeholder="请选择"
                   />
                 </div>
+                <div className='formItem'>
+                  <ProFormSelect
+                    name="departmentId"
+                    label="科室:"
+                    options={setSelectorData('PRACTICE_DEPARTMENT_TYPE').list}
+                    placeholder="请选择"
+                  />
+                </div>
+                <div className='formItem'>
+                  <ProFormSelect
+                    name="practiceSubject"
+                    label="执业科目:"
+                    options={setSelectorData('PROCESSIONAL_SUBJECTS_TYPE').list}
+                    placeholder="请选择"
+                  />
+                </div>
               </div>
             </div>
 
             <div style={{display:'flex',flexDirection:'row',width:'100%'}}>
-              <div style={{paddingLeft:36}}>备注:</div>
+              <div style={{paddingLeft:36,whiteSpace:'nowrap'}}>备注:</div>
               <ProFormTextArea
                 name="remark"
-                width='xl'
+                width={877}
                 placeholder="请输入备注"
               />
             </div>

+ 31 - 0
src/service/department.ts

@@ -0,0 +1,31 @@
+/*
+ * @Author: code4eat awesomedema@gmail.com
+ * @Date: 2022-07-16 10:01:55
+ * @LastEditors: code4eat awesomedema@gmail.com
+ * @LastEditTime: 2022-07-16 10:12:03
+ * @FilePath: /KC-MiddlePlatform/src/service/department.ts
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+
+//科室相关
+
+import { request } from 'umi';
+
+//获取医院科室
+
+export type DepartmentItemType = {
+      id:number;
+      hospId:string;
+      code:string;//科室代码
+      name:string;
+      parentId:number;
+      computeId:number;
+      delFlag:number;
+}
+export const getHospDepartment = async () => {
+    return request<DepartmentItemType[]>('/master/centerSys/sysdepartment/getDepartmentUser', {
+      method: 'GET',
+    });
+};

+ 26 - 7
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-08 17:28:34
+ * @LastEditTime: 2022-07-15 16:13:42
  * @FilePath: /KC-MiddlePlatform/src/service/dictionary.ts
  * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  */
@@ -13,10 +13,29 @@
 import { request } from 'umi';
 
 //获取平台字典
+export type PlatformPubDirDataType = { code: string; value: string | number; dataVoList: { code: string; value: string | number; sort: number; defaultValue: number }[] }
 
-export const getPlatformDictionary = async (key:string) => {
-    return request<{code:string;value:string|number;dataVoList:{code:string;value:string|number;sort:number}[]}[]>('/master/centerSys/sysdictdata/getDictData', {
-      method: 'GET',
-      params: { dictType:key },
-    });
-};
+export const getPlatformDictionary = async (key?: string) => {
+  return request<PlatformPubDirDataType[]>('/master/centerSys/sysdictdata/getDictData', {
+    method: 'GET',
+    params: { dictType: key },
+  });
+};
+
+
+//获取指标相关字典
+export type IndicatorDictionaryDataType = {
+  type:number;
+  status:string;
+  parentId:number;
+  name:string;
+  id:number;
+  dictSort:number;
+  code:string;
+  children:IndicatorDictionaryDataType[]
+}
+export const getIndicatorDictionary = async () => {
+  return request<IndicatorDictionaryDataType[]>('/master/centerSys/indicator/getDict', {
+    method: 'GET',
+  });
+};

+ 67 - 0
src/service/indicator.ts

@@ -0,0 +1,67 @@
+/*
+ * @Author: code4eat awesomedema@gmail.com
+ * @Date: 2022-07-15 10:13:10
+ * @LastEditors: code4eat awesomedema@gmail.com
+ * @LastEditTime: 2022-07-18 22:13:36
+ * @FilePath: /KC-MiddlePlatform/src/service/indicator.ts
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
+
+
+import { request } from 'umi';
+
+//获取指标列表
+
+export type IndicatorManaItemType = {
+    [x: string]: any;
+    current: number;
+    pageSize: number;
+    totalCount: number;
+    totalPage: number;
+    list?: any[];
+}
+export const getIndicatorManaList = async (params: {
+    current: number;
+    pageSize: number;
+    menuCode:string;
+    [key:string]:any;
+  }) => {
+    return request<IndicatorManaItemType>('/master/centerSys/indicator/getIndicatorList', {
+      method: 'GET',
+      params:{...params,pageSize:100}
+    });
+};
+
+//添加指标信息
+export const addIndicatorManaList = async (data:any) => {
+  return request('/master/centerSys/indicator/addIndicator', {
+    method: 'POST',
+    data:data
+  });
+};
+
+//编辑指标信息
+export const editIndicatorManaList = async (data:any) => {
+  return request('/master/centerSys/indicator/editIndicator', {
+    method: 'POST',
+    data:data
+  });
+};
+
+
+//删除指标
+export const delIndicatorManaList = async (params:{id:number}) => {
+  return request('/master/centerSys/indicator/deleteIndicator', {
+    method: 'POST',
+    params:params
+  });
+};
+
+//获取指标目录
+
+export const getIndicatorCateList = async (params?:{menuCode:string}) => {
+  return request<any[]>('/master/centerSys/indicator/getIndicatorMenu', {
+    method: 'GET',
+    params:params
+  });
+};

+ 1 - 0
src/service/role.ts

@@ -13,6 +13,7 @@ import { request } from 'umi';
 //获取所有角色
 
 export type RoleItemType = {
+  allUsers: any;
   roleId: number;
   roleName: string;
   hospName: string;

+ 12 - 1
src/service/user.ts

@@ -1,7 +1,7 @@
 /*
  * @Author: your name
  * @Date: 2022-01-12 09:55:49
- * @LastEditTime: 2022-07-08 17:41:50
+ * @LastEditTime: 2022-07-21 16:11: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/user.ts
@@ -74,6 +74,17 @@ export const delUsers = async (data: number[]) => {
   });
 };
 
+
+//修改用户密码
+export const editUsersPsd = async (params:{id:number,password:string}) => {
+  return request('/master/centerSys/user/updatePassword', {
+    method: 'POST',
+    params:params
+  });
+};
+
+
+//获取用户模板
 export const getUsertemplate = async () => {
   return request<string>('/master/centerSys/pfmfiledata/getUserTemplateFileUrl', {
     method: 'GET',