Browse Source

Merge branch 'master' into style0419

# Conflicts:
#	src/components/DiagManager/MatchDiag.js
#	src/components/DiagManager/index.js
#	src/components/DocTemplate/index.js
#	src/components/DrugManager/MatchDrug.js
#	src/components/DrugManager/index.js
#	src/components/DutyRecord/index.js
#	src/components/SurgeryManager/MatchSurg.js
#	src/components/SurgeryManager/index.js
1178232204@qq.com 3 năm trước cách đây
mục cha
commit
197a3edd40
33 tập tin đã thay đổi với 1494 bổ sung1412 xóa
  1. 3 5
      src/api/index.js
  2. 2 1
      src/api/request.js
  3. 11 0
      src/common/common.less
  4. 68 27
      src/components/AHeader/index.js
  5. 4 0
      src/components/AHeader/index.less
  6. 16 6
      src/components/AMenu/index.js
  7. 1 0
      src/components/ATabs/index.js
  8. 62 46
      src/components/BlockLossManage/editBlock.js
  9. 76 49
      src/components/BlockLossManage/index.js
  10. 5 0
      src/components/BlockLossManage/index.less
  11. 0 4
      src/components/DiagManager/Diag-context.js
  12. 175 138
      src/components/DiagManager/addDiag.js
  13. 107 60
      src/components/DiagManager/index.js
  14. 8 2
      src/components/DiagManager/index.less
  15. 22 11
      src/components/DocTemplate/index.js
  16. 0 4
      src/components/DrugManager/Drug-context.js
  17. 0 120
      src/components/DrugManager/addDrug.js
  18. 228 276
      src/components/DrugManager/index.js
  19. 70 22
      src/components/DutyRecord/index.js
  20. 65 42
      src/components/FieldProblem/editProblem.js
  21. 104 67
      src/components/FieldProblem/index.js
  22. 56 27
      src/components/FieldRules/addRules.js
  23. 63 46
      src/components/FieldRules/index.js
  24. 1 1
      src/components/MedicalTeam/index.js
  25. 3 3
      src/components/OrgManager/index.js
  26. 27 12
      src/components/RegularManage/addRegular.js
  27. 44 18
      src/components/RegularManage/index.js
  28. 0 124
      src/components/SurgeryManager/addSurg.js
  29. 205 271
      src/components/SurgeryManager/index.js
  30. 0 4
      src/components/SurgeryManager/surg-context.js
  31. 8 9
      src/components/SysChoose/index.js
  32. 52 16
      src/store/reducers/userInfo.js
  33. 8 1
      src/utils/index.js

+ 3 - 5
src/api/index.js

@@ -1,8 +1,7 @@
 import api from './request';
-import { getCookie,setCookie } from '@utils/index'
 import { Modal } from 'antd';
 const axios=require('axios');
-//axios.defaults.baseURL = 'http://192.168.2.237:8871';//'http://192.168.2.237:8871/';
+// axios.defaults.baseURL = 'http://192.168.2.237:8871';//'http://192.168.2.237:8871/';
 const CancelToken = axios.CancelToken;
 const source = CancelToken.source();
 const post=(url,data)=>{
@@ -47,8 +46,8 @@ function interceptors(){
 //拦截所有请求添加token
     axios.interceptors.request.use(function (config) {
         const tokenStr = localStorage.getItem('token');
-        const sysId = getCookie('systemId');
-        const hisId = getCookie('hospitalId');
+        const sysId = localStorage.getItem('systemId');
+        const hisId = localStorage.getItem('hospitalId');
 	    const isOverTime = localStorage.getItem("overTime");
         if(isOverTime){
 		  config.cancelToken = source.token;
@@ -73,7 +72,6 @@ function interceptors(){
             localStorage.removeItem("systemId");
             localStorage.removeItem("hospitalId");
             localStorage.removeItem("software");
-		    setCookie();
 		    const isOverTime = localStorage.getItem("overTime");
 		    if(!isOverTime){
 			  /*   console.log(444,res)

+ 2 - 1
src/api/request.js

@@ -90,7 +90,7 @@ const request = {
     termMatching:'/mdsp-service/term/termMatching',             //术语匹配搜索(与药品,手术公用)
     saveOrUpdateRecord:'/mdsp-service/tran/mappingConfig/saveOrUpdateRecord',  //匹配关系保存(与药品,手术公用)
     deleteRecord:'/mdsp-service/tran/mappingConfig/deleteRecord',   //删除术语(与药品,手术公用)
-	
+	index:'/mdsp-service/demo/retrieval/index',//术语检索
 	/*//药品管理
 	getDrugPage:'/daqe-center/drugManage/getDrugPage',//获取药品分页列表
 	delDrugById:'/daqe-center/drugManage/delDrugById',//通过id删除药品
@@ -138,6 +138,7 @@ const request = {
     addRegular:'/daqe-center/regularManage/addRegular',//新增正则
     upRegularById:'/daqe-center/regularManage/upRegularById',//修改正则
     delRegularById:'/daqe-center/regularManage/delRegularById',//删除正则
+    isRelation:'/daqe-center/regularManage/isRelation',//判断正则是否关联
     
 }
 

+ 11 - 0
src/common/common.less

@@ -63,6 +63,9 @@ body {
     }
   }
 }
+.ant-table-body {
+  overflow: auto !important
+}
 .ant-table-pagination-right {
   justify-content: flex-start;
 }
@@ -229,4 +232,12 @@ body {
   .logoT{
     display: none;
   }
+}
+.ant-picker-footer{
+  display: none;
+}
+.times{
+  display: inline-block;
+  width: 120px;
+  margin-right: 0;
 }

+ 68 - 27
src/components/AHeader/index.js

@@ -2,9 +2,10 @@ import { Layout, Dropdown, Menu, Modal, Input, Form, Space, Button } from 'antd'
 import { withRouter } from 'react-router'
 import { useState, useEffect } from 'react';
 import { useSelector, useDispatch } from 'react-redux';
+import { RedoOutlined } from '@ant-design/icons';
 import MyMessage from "../MyMessage";
 import { panesNow } from '@reducers/tabPanes.js';
-import { getTimeDetail,getCookie,setCookie } from '@utils/index';
+import { getTimeDetail } from '@utils/index';
 import logo from '@images/logo.png';
 import msg from '@images/msg.png';
 import me from '@images/me.png';
@@ -12,7 +13,7 @@ import down from '@images/down.png';
 import './index.less'
 import { message } from "antd/lib/index";
 import { add, active } from '@reducers/tabPanes'
-import { setUnReadNum} from '@reducers/userInfo.js';
+import { setUnReadNum, setRegularNum, setRulerNum, setProblemNum, setLossNum, setDiagNum, setDocNum, setDrugNum, setDutyNum, setSurgeryNum } from '@reducers/userInfo.js';
 import apiObj from '@api/index';
 
 const { post, api, xPost } = apiObj;
@@ -24,20 +25,20 @@ const { Header } = Layout;
 
 function AHeader({ history, hideName }) {
     const dispatch = useDispatch();//当前选中的菜单
-    const { panes } = useSelector(state => {
+    const { panes, activeTab } = useSelector(state => {
         return state.tabPanes;
     });
     const [form] = Form.useForm();
     const [dateTime, setDateTime] = useState('');
     const [visible, setVisible] = useState(false);
     //const [unReadNum,setUnReadNum] = useState(0);
-    const [systemName,setSystemName] = useState("");
+    const [systemName, setSystemName] = useState("");
     //const [userName,setUserName] = useState("");
-    const userName = getCookie("userName");
-    const hospitalId = getCookie("hospitalId");
+    const userName = localStorage.getItem("userName");
+    const hospitalId = localStorage.getItem("hospitalId");
     const softwareArr = JSON.parse(localStorage.getItem("software"));
 
-    const { user, unReadNum } = useSelector((state) => {
+    const { user, unReadNum, regularNum, rulerNum, problemNum, lossNum, diagNum, docNum, drugNum, dutyNum, surgeryNum } = useSelector((state) => {
         return state.userInfo;
     });
     //退出
@@ -46,18 +47,58 @@ function AHeader({ history, hideName }) {
         localStorage.removeItem("systemId");
         localStorage.removeItem("hospitalId");
         localStorage.removeItem("software")
-        setCookie();
         dispatch(panesNow([]));
         history.push('/login');
     }
+    function getRefresh() {
+        console.log(activeTab);
+        let count
+        if (activeTab.split('&')[0] == "SJZL-ZZSWH") {
+            count = regularNum
+            count++
+            dispatch(setRegularNum(count));
+        } else if (activeTab.split('&')[0] == "SJZL-ZDJYGZWH") {
+            count = rulerNum
+            count++
+            dispatch(setRulerNum(count));
+        } else if (activeTab.split('&')[0] == "SJZL-ZDJYWTMX") {
+            count = problemNum
+            count++
+            dispatch(setProblemNum(count));
+        } else if (activeTab.split('&')[0] == "SJZL-BLSJDSMX") {
+            count = lossNum
+            count++
+            dispatch(setLossNum(count));
+        } else if (activeTab.split('&')[0] == "JCSJ-ZDXXWH") {
+            count = diagNum
+            count++
+            dispatch(setDiagNum(count));
+        } else if (activeTab.split('&')[0] == "JCSJ-WSMBWH") {
+            count = docNum
+            count++
+            dispatch(setDocNum(count));
+        } else if (activeTab.split('&')[0] == "JCSJ-YPXXWH") {
+            count = drugNum
+            count++
+            dispatch(setDrugNum(count));
+        } else if (activeTab.split('&')[0] == "JCSJ-ZWZCBGJL") {
+            count = dutyNum
+            count++
+            dispatch(setDutyNum(count));
+        } else if (activeTab.split('&')[0] == "JCSJ-SSXXWH") {
+            count = surgeryNum
+            count++
+            dispatch(setSurgeryNum(count));
+        }
+    }
     //获取未读消息数量
-    function getNotNoticeCount(){
+    function getNotNoticeCount() {
         xPost(api.getNotNoticeCount).then((res) => {
             if (res.data.code === 200) {
-                const data = res.data.data||{};
+                const data = res.data.data || {};
                 let count = data.count;
-                count = count>99?'99+':count;
-			  	dispatch(setUnReadNum(count));
+                count = count > 99 ? '99+' : count;
+                dispatch(setUnReadNum(count));
                 initWebsocket(count);
             } else {
                 //message.warning(res.data.msg || '请求失败');
@@ -65,38 +106,38 @@ function AHeader({ history, hideName }) {
         })
     }
     //未读消息页面显示并带入未读筛选条件
-    function showMyMsgPage(){
+    function showMyMsgPage() {
         const pageKey = 'ZNTZ-WDTZ&我的通知';
         const item = panes.find((it) => it.key === pageKey);
         if (item) {   //已存在当前tab,则定位即可不增加
-            dispatch(active({idName:pageKey,isUnRead:true}));
+            dispatch(active({ idName: pageKey, isUnRead: true }));
             return;
         }
         dispatch(
-            add({ title: '我的通知', content: <MyMessage />, key: pageKey,isUnRead:true})
+            add({ title: '我的通知', content: <MyMessage />, key: pageKey, isUnRead: true })
         )
     }
-    async function initWebsocket(num){
+    async function initWebsocket(num) {
         const mqtt = require('mqtt');
-        const client  = mqtt.connect(api.websocketUrl);
+        const client = mqtt.connect(api.websocketUrl);
         //const hisId = getCookie("hospitalId");
         client.on('connect', function () {
-            client.subscribe(hospitalId+"-"+user.id, function (err) {
+            client.subscribe(hospitalId + "-" + user.id, function (err) {
                 if (!err) {
-                    console.log(hospitalId+"-"+user.id+"订阅成功")
+                    console.log(hospitalId + "-" + user.id + "订阅成功")
                 }
             })
         })
 
         client.on('message', function (topic, message) {
-            let n = num>unReadNum?num:unReadNum;
+            let n = num > unReadNum ? num : unReadNum;
             setUnReadNum(+n)
-            console.log('收到消息+1:',message.toString())
+            console.log('收到消息+1:', message.toString())
         })
     }
     //获取系统、用户名称用于页头显示
-    function getSysName(){
-		setSystemName(getCookie("systemName"));
+    function getSysName() {
+        setSystemName(localStorage.getItem("systemName"));
     }
     /*function handleUserInfo(data){
         const { userInfo, software } = data;
@@ -140,7 +181,7 @@ function AHeader({ history, hideName }) {
         })
     }
     useEffect(() => {
-	    getSysName();
+        getSysName();
         countTime();
         getNotNoticeCount();
         return function clearUp() {
@@ -160,13 +201,13 @@ function AHeader({ history, hideName }) {
         <Header className='page-header'>
             <img className='logo' src={logo} alt="" />
             {hideName ? '' : <><span className='break-line'>|</span>
-                <span className='sys-name'>{systemName}</span></>}
+                <span className='sys-name'>{systemName}<span className='refresh' onClick={getRefresh}><RedoOutlined /></span></span></>}
             <div className='infos'>
                 <span className='time'>{dateTime}</span>
                 <span className='break-line'>|</span>
                 <div className="unRead-msg-cont" onClick={showMyMsgPage}>
-                    <img className='msg-icon' src={msg} alt="未读消息"/>
-                    {unReadNum?<span className='unRead-msg'>{unReadNum}</span>:''}
+                    <img className='msg-icon' src={msg} alt="未读消息" />
+                    {unReadNum ? <span className='unRead-msg'>{unReadNum}</span> : ''}
                 </div>
                 <div className="user">
                     <Dropdown overlay={menu} trigger={['click']}>

+ 4 - 0
src/components/AHeader/index.less

@@ -56,4 +56,8 @@
   display: inline-block;
   margin-right: 18px;
   vertical-align: middle;
+}
+.refresh{
+  margin-left: 10px;
+  cursor: pointer;
 }

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 16 - 6
src/components/AMenu/index.js


+ 1 - 0
src/components/ATabs/index.js

@@ -26,6 +26,7 @@ function ATabs(){
     }
     //关闭当前tab
     function onDelTab(activeKey){
+        console.log(activeKey);
         if(panes.length===1){
             message.warning("至少保留一个标签哦~",1);
             return;

+ 62 - 46
src/components/BlockLossManage/editBlock.js

@@ -6,22 +6,27 @@ import apiObj from '@api/index';
 import BlockContext from './block-context';
 import moment from "moment";
 import "moment/locale/zh-cn"
-import { getCookie } from '@utils/index'
-const { RangePicker } = DatePicker;
+import { disabledDate, getDaysBetween, getValueFromEvent } from '@utils/index'
 const { post, api, xPost } = apiObj;
 const { TextArea } = Input;
 function EditBlock(props) {
     useEffect(() => {
-        if(type == 2){
-            setLimit(true)
-        }
     }, []);
     const [form] = Form.useForm();
-    const [dates, setDates] = useState([]);
+    const [disable, setDisable] = useState(true);
     const [limit, setLimit] = useState(false);
     const { blockDetail, type } = useContext(BlockContext);
     const initialValues = blockDetail;
     const onFinish = values => {
+        values.startDate = values.startDate ? moment(values.startDate).format('YYYY-MM-DD 00:00:00') : null;
+        values.endDate = values.endDate ? moment(values.endDate).format('YYYY-MM-DD 23:59:59') : null;
+        if (values.startDate > values.endDate) {
+            message.warning('开始时间不能大于结束时间');
+            return
+        } else if (!limit && getDaysBetween(values.startDate, values.endDate) > 29) {
+            message.warning('开始时间与结束时间相差不能超过30天');
+            return
+        }
         if (type == 1) {
             dataRepari(values)
         } else if (type == 2) {
@@ -29,18 +34,20 @@ function EditBlock(props) {
         } else {
             editBlock(values)
         }
-
     };
     function change(e) {
+        const formData = form.getFieldsValue();
         const { value } = e.target;
-        if (type == 1) {
-            if (value) {
-                setLimit(true)
-            } else {
-                setLimit(false)
-            }
+        if (value) {
+            setLimit(true)
+        } else {
+            setLimit(false)
+        }
+        if (formData.behospitalCode || (formData.startDate != undefined && formData.endDate != undefined)) {
+            setDisable(false)
+        } else {
+            setDisable(true)
         }
-
     }
     function editBlock(values) {
         let params = {
@@ -50,7 +57,7 @@ function EditBlock(props) {
         }
         post(api.upBlockLossById, params).then((res) => {
             if (res.data.code === 200) {
-                props.userChange()
+                props.userChange(2)
                 message.success(res.data.message);
                 form.resetFields();
             } else {
@@ -58,31 +65,33 @@ function EditBlock(props) {
             }
         })
     }
-    function disabledDate(current) {
-        if (!dates || dates.length === 0) {
-            return current && current >= moment().endOf('day');
+    function onStartChange(val) {
+        const formData = form.getFieldsValue();
+        if (formData.behospitalCode || (formData.startDate != undefined && formData.endDate != undefined)) {
+            setDisable(false)
+        } else {
+            setDisable(true)
         }
-        const tooLate = dates[0] && current.diff(dates[0], 'days') > 29;
-        const tooEarly = dates[1] && dates[1].diff(current, 'days') > 29;
-        if (!limit) {
-            return current && current >= moment().endOf('day') || tooEarly || tooLate;
+    }
+    function onEndChange(val) {
+        const formData = form.getFieldsValue();
+        if (formData.behospitalCode || (formData.startDate != undefined && formData.endDate != undefined)) {
+            setDisable(false)
         } else {
-            return current && current >= moment().endOf('day');
+            setDisable(true)
         }
-    };
+    }
     //数据补录
     function dataRepari(values) {
-        values.startDate = moment(values.time[0]).format('YYYY-MM-DD 00:00:00');
-        values.endDate = moment(values.time[1]).format('YYYY-MM-DD 23:23:59');
         let params = {
             behospitalCode: values.behospitalCode,
             endDate: values.endDate,
             startDate: values.startDate,
-            isPlacefile:getCookie('isPlacefile')
+            isPlacefile: localStorage.getItem('isPlacefile')
         }
         post(api.dataRepari, params).then((res) => {
             if (res.data.code === 200) {
-                props.userChange()
+                props.userChange(1)
                 message.success(res.data.message);
                 form.resetFields();
             } else {
@@ -92,8 +101,6 @@ function EditBlock(props) {
     }
     //数据对比
     function dataCompare(values) {
-        values.startDate = moment(values.time[0]).format('YYYY-MM-DD 00:00:00');
-        values.endDate = moment(values.time[1]).format('YYYY-MM-DD 23:23:59');
         let params = {
             behospitalCode: values.behospitalCode,
             endDate: values.endDate,
@@ -101,7 +108,7 @@ function EditBlock(props) {
         }
         post(api.dataCompare, params).then((res) => {
             if (res.data.code === 200) {
-                props.userChange()
+                props.userChange(2)
                 message.success(res.data.message);
                 form.resetFields();
             } else {
@@ -110,7 +117,7 @@ function EditBlock(props) {
         })
     }
     function cancel() {
-        props.userChange()
+        props.cancel()
     }
     return (
         <>
@@ -193,7 +200,7 @@ function EditBlock(props) {
                         name="lossCause"
                         label="丢失原因"
                         wrapperCol={{ span: 18 }}
-						rules={[{ max: 200,message:'丢失原因不能超过200个字符' }]}
+                        rules={[{ max: 200, message: '丢失原因不能超过200个字符' }]}
                     >
                         <TextArea
                             autoSize={{ minRows: 5, maxRows: 5 }}
@@ -205,18 +212,28 @@ function EditBlock(props) {
 
                 <Col span={24} hidden={type == 3}>
                     {type != 3 ?
-                        <Form.Item label="日期" name="time" rules={[{ required: true }]} labelAlign="right">
-                            <RangePicker
-                            allowClear={false}
-                                placeholder={['开始时间', '结束时间']}
-                                disabledDate={disabledDate}
-                                onCalendarChange={val => setDates(val)}
-                            />
+                        <Form.Item label="日期" >
+                            <Form.Item name="startDate" className='times'>
+                                <DatePicker
+                                    disabledDate={disabledDate}
+                                    placeholder="请选择开始日期"
+                                    onChange={onStartChange}
+                                />
+
+                            </Form.Item>
+                            <span style={{ margin: '0 5px', position: 'relative', top: '2px' }}>-</span>
+                            <Form.Item name="endDate" className='times'>
+                                <DatePicker
+                                    disabledDate={disabledDate}
+                                    placeholder="请选择结束日期"
+                                    onChange={onEndChange}
+                                />
+                            </Form.Item>
                         </Form.Item>
                         : ''}
                 </Col>
                 <Col span={24} hidden={type == 3} style={{ marginTop: 15 }}>
-                    <Form.Item label="住院序号" name="behospitalCode" rules={[{ max: 30,message:'住院序号不能超过30个字符' }]}>
+                    <Form.Item label="住院序号" name="behospitalCode" rules={[{ max: 30, message: '住院序号不能超过30个字符' }]} getValueFromEvent={getValueFromEvent}>
                         <Input placeholder="请输入" autoComplete='off' onChange={change} />
                     </Form.Item>
                 </Col>
@@ -224,23 +241,22 @@ function EditBlock(props) {
                     type == 1 ?
                         <div style={{ color: '#1690FF' }}>
                             提示:<br />
-                            1、补录时间范围限制为30天,每一天数据量的同步时间约为1分钟。<br />
-                            时间范围以患者入院时间为准。<br />
+                            1、数据补录时间较长,请耐心等待。<br />
                             2、当输入住院序号时,补录将不受时间范围限制。<br />
                         </div>
                         :
                         type == 2 ?
                             <div style={{ color: '#1690FF' }}>
-                                提示:将比对所有【已丢失】状态数据和患者入院在时间范围内的数据
+                                提示:当输入住院序号时,对比将不受时间范围限制
                             </div>
                             : ''
                 }
                 <Form.Item wrapperCol={type == 3 ? { offset: 24, span: 16 } : { offset: 8, span: 16 }} style={{ marginTop: 15 }}>
                     <Space size="middle" >
                         <Button htmlType="button" onClick={e => cancel()}>
-                            取消
+                            关闭
                         </Button>
-                        <Button type="primary" htmlType="submit">
+                        <Button type="primary" htmlType="submit" disabled={disable && type != 3}>
                             {type == 3 ? '保存' : '确定'}
                         </Button>
                     </Space>

+ 76 - 49
src/components/BlockLossManage/index.js

@@ -1,5 +1,6 @@
 import React, { useState, useEffect, useRef } from 'react';
-import { Form, Input, Button, Table, Row, Col, Select, Modal, DatePicker, Space, message } from 'antd';
+import { useSelector, useDispatch } from 'react-redux';
+import { Form, Input, Button, Table, Row, Col, Select, Modal, DatePicker, Space, message, Spin } from 'antd';
 import moment from "moment";
 import "moment/locale/zh-cn"
 import '@common/common.less';
@@ -7,21 +8,17 @@ import './index.less'
 import apiObj from '@api/index';
 import EditBlock from './editBlock';
 import BlockContext from './block-context';
-import { getValueFromEvent } from '@utils/index'
+import { getValueFromEvent, disabledDate, getDaysBetween } from '@utils/index'
 const { post, api, xPost } = apiObj;
-const { RangePicker } = DatePicker;
 const { Option } = Select;
 function BlockLossManage() {
-    useEffect(() => {
-        getBlockLossPage();
-        blockLossTypeGather(date)
-    }, []);
+
     const [blockList, setBlockList] = useState([]);
     const [total, setTotal] = useState(0);
     const [title, setTitle] = useState(0);
     const [visible, setVisible] = useState(false);
     const [size, setSize] = useState(15);
-    const [dates, setDates] = useState([]);
+    const [loading, setLoading] = useState(false);
     const [current, setCurrent] = useState(1);
     const [type, setType] = useState(null);
     const [blockData, setBlockData] = useState({});
@@ -33,30 +30,44 @@ function BlockLossManage() {
         asc: ['status'],
         desc: ['gmt_modified'],
         startDate: getCurrentDataFront().split('/').join('-') + ' 00:00:00',
-        endDate: getCurrentData().split('/').join('-') + ' 23:23:59'
+        endDate: getCurrentData().split('/').join('-') + ' 23:59:59'
     });
     const [form] = Form.useForm();
     let data = {
         pages: 1,
         current: 1,
-        size: size,
+        size: 15,
         asc: ['status'],
         desc: ['gmt_modified'],
         startDate: getCurrentDataFront().split('/').join('-') + ' 00:00:00',
-        endDate: getCurrentData().split('/').join('-') + ' 23:23:59'
+        endDate: getCurrentData().split('/').join('-') + ' 23:59:59'
     }
     let date = {
         startDate: getCurrentDataFront().split('/').join('-') + ' 00:00:00',
-        endDate: getCurrentData().split('/').join('-') + ' 23:23:59'
+        endDate: getCurrentData().split('/').join('-') + ' 23:59:59'
     }
+    const { lossNum } = useSelector((state) => {
+        return state.userInfo;
+    });
+    useEffect(() => {
+        setCurrent(1)
+        setParams(data)
+        form.resetFields();
+        getBlockLossPage(data);
+        blockLossTypeGather(date)
+    }, [lossNum]);
     //表格数据
     function getBlockLossPage(param) {
+        const hide = message.loading('加载中...', 0);
         post(api.getBlockLossPage, param || params).then((res) => {
+            hide()
             if (res.data.code === 200) {
                 const data = res.data.data;
                 setBlockList(data.records);
                 setTotal(data.total)
-            }
+            } 
+        }).catch((err) => {
+            hide()
         })
     }
     //丢失量分类汇总
@@ -68,14 +79,6 @@ function BlockLossManage() {
             }
         })
     }
-    function disabledDate(current) {
-        if (!dates || dates.length === 0) {
-            return current && current >= moment().endOf('day');
-        }
-        const tooLate = dates[0] && current.diff(dates[0], 'days') > 364;
-        const tooEarly = dates[1] && dates[1].diff(current, 'days') > 364;
-        return current && current >= moment().endOf('day') || tooEarly || tooLate;
-    };
     //修改
     function showModal(title, row, type) {
         setVisible(true)
@@ -89,7 +92,6 @@ function BlockLossManage() {
         setSize(pageSize)
         setCurrent(current)
         setParams(params)
-        getBlockLossPage()
     }
     function changePage(page, pageSize) {
         params.current = page
@@ -104,20 +106,30 @@ function BlockLossManage() {
         setVisible(false)
         setBlockDetail(null)
     }
-    function userChange() {
+    function userChange(type) {
+        if (type == 2) {
+            params.current = 1
+            setParams(params)
+            setCurrent(1)
+            getBlockLossPage();
+        }
         setVisible(false)
-        getBlockLossPage();
         blockLossTypeGather({ startDate: params.startDate, endDate: params.endDate })
         setBlockDetail(null)
     }
     const onFinish = (value) => {
-        if (value.time) {
-            value.startDate = moment(value.time[0]).format('YYYY-MM-DD 00:00:00');
-            value.endDate = moment(value.time[1]).format('YYYY-MM-DD 23:23:59');
+        value.startDate = moment(value.startDate).format('YYYY-MM-DD 00:00:00');
+        value.endDate = moment(value.endDate).format('YYYY-MM-DD 23:59:59');
+        if (value.startDate > value.endDate) {
+            message.warning('开始时间不能大于结束时间');
+            return
+        } else if (getDaysBetween(value.startDate, value.endDate) > 364) {
+            message.warning('开始时间与结束时间相差不能超过一年');
+            return
         }
-        delete value.time
+        params.current = 1
         const param = {
-            ...data,
+            ...params,
             ...value,
         }
         setCurrent(1)
@@ -127,6 +139,7 @@ function BlockLossManage() {
     };
     const onReset = () => {
         setCurrent(1)
+        setSize(15)
         setParams(data)
         form.resetFields();
         getBlockLossPage(data);
@@ -144,8 +157,16 @@ function BlockLossManage() {
     const columns = [
         { title: '序号', dataIndex: 'index', render: (text, record, index) => (current - 1) * params.size + index + 1 },
         { title: '住院序号', dataIndex: 'behospitalCode', key: 'behospitalCode' },
-        { title: '文书编号', dataIndex: 'recId', key: 'recId' },
-        { title: '文书标题', dataIndex: 'recTitle', key: 'recTitle' },
+        {
+            title: '文书编号', dataIndex: 'recId', key: 'recId', render: (text, record) => {
+                return record.recId || '-';
+            }
+        },
+        {
+            title: '文书标题', dataIndex: 'recTitle', key: 'recTitle', render: (text, record) => {
+                return record.recTitle || '-';
+            }
+        },
         {
             title: '丢失原因', dataIndex: 'lossCause', key: 'lossCause', render: (text, record) => {
                 return record.lossCause ? record.lossCause.length > 15 ? <span title={record.lossCause}>{record.lossCause.substring(0, 15) + '...'}</span> : record.lossCause : '-';
@@ -184,7 +205,6 @@ function BlockLossManage() {
             )
         }
     ];
-
     return (
         <div className="wrapper">
             <div className="filter-box">
@@ -192,39 +212,48 @@ function BlockLossManage() {
                     form={form}
                     name="normal_login"
                     onFinish={onFinish}
-                    initialValues={{ lossType: '', lossWay: '', isAudited: '', status: '', time: [moment(getCurrentDataFront()), moment(getCurrentData())] }}
+                    initialValues={{ lossType: '', lossWay: '', isAudited: '', status: '', startDate: moment(getCurrentDataFront()), endDate: moment(getCurrentData()) }}
                 >
                     <Row gutter={24}>
-                        <Col span={6} key={0}>
-                            <Form.Item label="日期" name="time">
-                                <RangePicker
-                                    allowClear={false}
-                                    disabledDate={disabledDate} // 限制日期不可选
-                                    placeholder={['开始时间', '结束时间']}
-                                    onCalendarChange={val => setDates(val)}
-                                />
+                        <Col span={7} key={0}>
+                            <Form.Item label="日期" >
+                                <Form.Item name="startDate" className='times'>
+                                    <DatePicker
+                                        allowClear={false}
+                                        disabledDate={disabledDate}
+                                        placeholder="请选择开始日期"
+                                    />
+
+                                </Form.Item>
+                                <span style={{ margin: '0 5px', position: 'relative', top: '2px' }}>-</span>
+                                <Form.Item name="endDate" className='times'>
+                                    <DatePicker
+                                        allowClear={false}
+                                        disabledDate={disabledDate}
+                                        placeholder="请选择结束日期"
+                                    />
+                                </Form.Item>
                             </Form.Item>
                         </Col>
                         <Col span={5} key={1}>
                             <Form.Item label="住院序号" name="behospitalCode" getValueFromEvent={getValueFromEvent}>
-                                <Input placeholder="住院序号" autoComplete='off' allowClear maxLength='30' />
+                                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
                             </Form.Item>
                         </Col>
                         <Col span={5} key={2}>
                             <Form.Item label="文书编号" name="recId" getValueFromEvent={getValueFromEvent}>
-                                <Input placeholder="文书编号" autoComplete='off' allowClear maxLength='30' />
+                                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
                             </Form.Item>
                         </Col>
                         <Col span={5} key={3}>
                             <Form.Item label="文书标题" name="recTitle" getValueFromEvent={getValueFromEvent}>
-                                <Input placeholder="文书标题" autoComplete='off' allowClear maxLength='30' />
+                                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
                             </Form.Item>
                         </Col>
                         <Col span={5} key={4}>
                             <Form.Item label="丢失类型" name="lossType">
                                 <Select
                                     placeholder="请选择"
-                                    allowClear
                                 >
                                     <Option value="" key={3}>全部</Option>
                                     <Option value="0" key={0}>文书丢失</Option>
@@ -237,7 +266,6 @@ function BlockLossManage() {
                             <Form.Item label="丢失途径" name="lossWay">
                                 <Select
                                     placeholder="请选择"
-                                    allowClear
                                 >
                                     <Option value="" key={2}>全部</Option>
                                     <Option value="0" key={0}>外部丢失</Option>
@@ -249,7 +277,6 @@ function BlockLossManage() {
                             <Form.Item label="核查结果" name="isAudited">
                                 <Select
                                     placeholder="请选择"
-                                    allowClear
                                 >
                                     <Option value="" key={3}>全部</Option>
                                     <Option value="0" key={0}>核查未通过</Option>
@@ -262,7 +289,6 @@ function BlockLossManage() {
                             <Form.Item label="状态" name="status">
                                 <Select
                                     placeholder="请选择"
-                                    allowClear
                                 >
                                     <Option value="" key={3}>全部</Option>
                                     <Option value="0" key={0}>已丢失</Option>
@@ -365,6 +391,7 @@ function BlockLossManage() {
                         total: total,
                         showQuickJumper:true,
                     }} />
+
             </div>
             {visible && blockDetail ?
                 <Modal
@@ -379,7 +406,7 @@ function BlockLossManage() {
                     maskClosable={false}
                 >
                     <BlockContext.Provider value={{ blockDetail, type }}>
-                        <EditBlock userChange={userChange} />
+                        <EditBlock cancel={cancel} userChange={userChange} />
                     </BlockContext.Provider>
 
                 </Modal>

+ 5 - 0
src/components/BlockLossManage/index.less

@@ -68,3 +68,8 @@
     width: 70px;
   }
 }
+.times{
+  display: inline-block;
+  width: 120px;
+  margin-right: 0;
+}

+ 0 - 4
src/components/DiagManager/Diag-context.js

@@ -1,4 +0,0 @@
-import { createContext } from 'react';
-const DiagContext = createContext(null);
-
-export default DiagContext;

+ 175 - 138
src/components/DiagManager/addDiag.js

@@ -1,159 +1,196 @@
 import React, {
-  useState,useContext,useEffect
+	useState, useContext, useEffect
 } from 'react';
 import { Form, Input, Select, message } from 'antd';
 import apiObj from '@api/index';
-import { getCookie,setCookie } from '@utils/index';
-import DiagContext from './Diag-context';
-/*import { useSelector } from 'react-redux'*/
+import { getValueFromEvent } from '@utils/index'
 import './index.less'
-import {Modal} from "antd/lib/index";
+import { Modal } from "antd/lib/index";
+import {
+	LinkOutlined
+} from '@ant-design/icons';
 const { post, api } = apiObj;
 
-function AddDiag({matchChange,visible,cancel,onOk,title}) {
-  const [form] = Form.useForm();
-  const { formData } = useContext(DiagContext);
-  const { Option } = Select;
-  const [unsaved, setUnsaved] = useState(false);//修改未保存弹窗
-  const [icdcode,setIcdcode] = useState((formData||{}).code);
-  const [dataList, setDataList] = useState([]);//当前页列表数据
-  const [source, setSource] = useState(0);//来源
-  //const TREMTYPE=100;			//常亮,术语类型1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作
-  //const initialValues = formData;
 
-  useEffect(() => {
-	form.setFieldsValue(formData)
-  }, [formData]);
-  //标准术语搜索
-  function handleSearch(val){
-    const txt = val.trim();
-	if(txt===""){
-		const list = []
-		setDataList(list);
-	}else{
-		post(api.termMatching, {inputStr:txt,type:100}).then((res) => {
-		if (res.data.code === "0") {
-			const list = res.data.data||[];
+function AddDiag({ formData, matchChange, visible, cancel, onOk, title, termSType, termType, flag }) {
+	const [form] = Form.useForm();
+	const { Option } = Select;
+	const [unsaved, setUnsaved] = useState(false);//修改未保存弹窗
+	const [icdcode, setIcdcode] = useState((formData || "").code);
+	const [dataList, setDataList] = useState([]);//当前页列表数据
+	const [formList, setFormList] = useState([]);//当前页列表数据
+	const [source, setSource] = useState(0);//来源
+	//const TREMTYPE=100;			//常亮,术语类型1-化验大项、2-化验小项、3-辅检、4-诊断、5-药品、6-手术和操作
+	const hospitalId = localStorage.getItem('hospitalId')
+	useEffect(() => {
+		setIcdcode(formData.code)
+		form.setFieldsValue(formData)
+	}, [formData]);
+	//标准术语搜索
+	function handleSearch(val) {
+		const txt = val.trim();
+		if (txt === "") {
+			const list = []
 			setDataList(list);
+		} else {
+			post(api.index, { inputStr: txt, type: termSType}).then((res) => {
+				if (res.data.code === "0") {
+					const list = res.data.data.nameList || [];
+					setDataList(list);
+				}
+			})
 		}
+	}
+	//剂型搜索
+	function handleSearch1(val) {
+		const txt = val.trim();
+		if (txt === "") {
+			const list = []
+			setFormList(list);
+		} else {
+			post(api.index, { inputStr: txt, type: 15}).then((res) => {
+				if (res.data.code === "0") {
+					const list = res.data.data.nameList || [];
+					setFormList(list);
+				}
+			})
+		}
+	}
+	//选中(修改)标准词时
+	function handleChange(val, item) {
+		console.log(33, item)
+		setSource(item.source)
+		setIcdcode(item.code);
+	}
+	//保存匹配,先验证输入
+	function saveMatching() {
+		form.validateFields().then(function (values) {
+			console.log('values:', values, form.getFieldsValue())
+			const param = {
+				conceptId: parseFloat(values.uniqueName) || formData.conceptId,
+				formConceptId: parseFloat(values.form) || formData.formConceptId,
+				type: termType,
+				hospitalId: parseInt(hospitalId),
+				source: source == 0 ? formData.source : source,
+				hisName: values.hisName
+			}
+			if (flag === 3) {
+				param.id = formData.id
+			}
+			console.log(param)
+			onOk(param)
 		})
 	}
-  }
-  //选中(修改)标准词时
-  function handleChange(val,item){
-	console.log(33,item)
-	setSource(item.source)
-	setIcdcode(item.code);
-  }
-  //保存匹配,先验证输入
-  function saveMatching(){
-	form.validateFields().then(function(values){
-	  console.log('values:',values,form.getFieldsValue())
-	  onOk({...values,type:4,hospitalId:form.hospitalId,source:source})
-	})
-  }
-  //关闭新增/编辑弹窗
-  function saveCancel(){
-    //有未保存修改时弹窗提醒
-    const isChange = form.isFieldsTouched(['hisName','conceptId']);
-    if(isChange){
-	  setUnsaved(true);
-	}else{
-	  cancel();
+	//关闭新增/编辑弹窗
+	function saveCancel() {
+		//有未保存修改时弹窗提醒
+		// const newFormData = form.getFieldsValue();
+		//    const isChange = newFormData.hisName!==formData.hisName||newFormData.conceptId!==formData.conceptId;//form.isFieldsTouched(['hisName','conceptId']);
+		//    if(isChange){
+		//   setUnsaved(true);
+		// }else{
+		cancel();
+		form.resetFields();	//清空表单值
+		// }
 	}
-  }
-  //不保存当前修改,退出弹窗
-  function unsavedOk() {
-	setUnsaved(false);
-	cancel();	//关闭新增/修改弹窗
-	form.resetFields();	//清空表单值
-  }
-  //未保存提醒弹窗关闭
-  function unsavedCancel() {
-	setUnsaved(false)
-  }
-  return (
-	  <Modal
-		  title={title}
-		  okText='确定'
-		  cancelText='关闭'
-		  width={'65%'}
-		  visible={visible}
-		  onOk={saveMatching}
-		  onCancel={saveCancel}
-		  forceRender={true}
-		  initialValues={formData}
-	  >
-	  <Form
-		  labelCol={{ span: 7 }}
-		  wrapperCol={{ span: 15 }}
-		  className='clearfix'
-		  form={form}
-		  name="register"
-	  >
-
-		<div className="his-info info-box">
-			<p className='title'>医院术语</p>
-		  	<div className="item-box">
-			  <Form.Item
-				  name="hisName"
-				  label="医院诊断名称"
-				  rules={[
-					{
-					  required: true,
-					  message: '请输入医院诊断名称',
-					},{ max: 30,message:'医院诊断名称不能超过30个字符'}
-				  ]}
-			  >
-				<Input placeholder="请输入" autoComplete='off'/>
-			  </Form.Item>
-			</div>
-		</div>
-		<div className="lt-info info-box">
-		  <p className='title'>标准术语</p>
-		  <div className="item-box">
-			<Form.Item
-				name="uniqueName"
-				label="标准诊断名称"
-				rules={[
-				  {
-					required: true,
-					message: '请输入标准诊断名称',
-				  },{ max: 30,message:'标准诊断名称不能超过30个字符'}
-				]}
-			>
-			  <Select placeholder="请输入"
-					  autoComplete='off'
-					  onSearch={handleSearch}
-					  onChange={handleChange}
-					  filterOption={false}
-					  showSearch>
-				{dataList.map(d => <Option key={d.id} source={d.source} code={d.code}>{d.name}</Option>)}
-			  </Select>
-			</Form.Item>
-			<Form.Item
-				label="ICD-10编码"
-			>
-			  {icdcode}
-			</Form.Item>
-		  </div>
-		</div>
-		<p className='linked-term'>已关联标准术语:{(formData||{}).uniqueName}</p>
-	  </Form>
+	//不保存当前修改,退出弹窗
+	//  function unsavedOk() {
+	// setUnsaved(false);
+	// cancel();	//关闭新增/修改弹窗
+	// form.resetFields();	//清空表单值
+	//  }
+	//未保存提醒弹窗关闭
+	//  function unsavedCancel() {
+	// setUnsaved(false)
+	//  }
+	return (
 		<Modal
-			maskClosable={false}
-			title="提示"
+			title={title}
 			okText='确定'
 			cancelText='关闭'
-			width={400}
-			visible={unsaved}
-			onOk={unsavedOk}
-			onCancel={unsavedCancel}
+			width={'65%'}
+			visible={visible}
+			onOk={saveMatching}
+			onCancel={saveCancel}
+			forceRender={true}
+			initialValues={formData}
+			maskClosable={false}
 		>
-		  <p>当前数据未保存 是否确认关闭?</p>
+			<Form
+				labelCol={{ span: 7 }}
+				wrapperCol={{ span: 15 }}
+				className='clearfix'
+				form={form}
+				name="register"
+			>
+
+				<div className="his-info info-box">
+					<p className='title'>医院术语</p>
+					<div className="item-box">
+						<Form.Item
+							name="hisName"
+							getValueFromEvent={getValueFromEvent}
+							label={termType == 4 ? '医院诊断名称' : termType == 5 ? '医院药品名称' : '手术/操作名称'}
+							rules={[
+								{
+									required: true,
+									message: '不能为空',
+								}, { max: 30, message: '不能超过30个字符' }
+							]}
+						>
+							<Input placeholder="请输入" autoComplete='off' />
+						</Form.Item>
+					</div>
+				</div>
+				<div className="info-p">
+					<LinkOutlined />
+					<p>相互关联</p>
+				</div>
+				<div className="lt-info info-box">
+					<p className='title'>标准术语</p>
+					<div className="item-box">
+						<Form.Item
+							name="uniqueName"
+							label={termType == 4 ? '标准诊断名称' : termType == 5 ? '标准药品名称' : '手术/操作名称'}
+							rules={[
+								{
+									required: true,
+									message: '不能为空',
+								}, { max: 30, message: '不能超过30个字符' }
+							]}
+						>
+							<Select placeholder="请输入"
+								autoComplete='off'
+								onSearch={handleSearch}
+								onChange={handleChange}
+								filterOption={false}
+								showSearch>
+								{dataList.map(d => <Option key={d.id} source={d.source} code={d.code}>{d.name}</Option>)}
+							</Select>
+						</Form.Item>
+						{termType == 5 ?
+							<Form.Item
+								name="form"
+								label="药品剂型"
+							>
+								<Select placeholder="请输入"
+									autoComplete='off'
+									onSearch={handleSearch1}
+									filterOption={false}
+									showSearch>
+									{formList.map(d => <Option key={d.id} source={d.source} code={d.code}>{d.name}</Option>)}
+								</Select>
+							</Form.Item>
+							:
+							<Form.Item label={termType == 4 ? 'ICD-10编码' : '手术/操作代码'}>
+								{icdcode}
+							</Form.Item>}
+					</div>
+				</div>
+				<p className='linked-term'>已关联标准术语:{(formData || {}).uniqueName}</p>
+			</Form>
 		</Modal>
-	  </Modal>
-  );
+	);
 }
 
 export default AddDiag;

+ 107 - 60
src/components/DiagManager/index.js

@@ -1,24 +1,31 @@
 import React, { useState, useEffect } from 'react';
-import { Form, Input, Button, Table, Select, Space, Modal, message, Row, Col } from 'antd';
+import { Empty, ConfigProvider, Spin, Form, Input, Button, Table, Select, Space, Modal, message, Row, Col } from 'antd';
 import { PlusOutlined } from '@ant-design/icons';
+import { useSelector } from 'react-redux';
 import AddDiag from './addDiag'
-import MatchDiag from './MatchDiag.js'
 import '@common/common.less';
 import apiObj from '@api/index';
-import DiagContext from './Diag-context';
 
 const { post, api } = apiObj;
 const { Option } = Select;
 //获取列表
 function DiagManager() {
+  const { diagNum } = useSelector((state) => {
+    return state.userInfo;
+  });
   useEffect(() => {
+    setSize(15)
+    setCurrent(1)
+    form.resetFields();
     getDiseasePage();
-  }, []);
+  }, [diagNum]);
   const [DiagList, setDiagList] = useState([]);//当前页列表数据
   const [Diagid, setDiagid] = useState([]);//当前操作行id
   const [title, setTitle] = useState("");//新增/修改的弹窗标题
   const [visible, setVisible] = useState(false);//新增修改 弹窗
+  const [flag, setFlag] = useState(false);//新增1或修改3
   const [delvisible, setDelvisible] = useState(false);//删除 弹窗
+  const [loading, setloading] = useState(true);//是否显示加载中
   const [formData, setFormData] = useState({});//当前行数据
   const [size, setSize] = useState(15);//每页显示条数
   const [total, setTotal] = useState(0);
@@ -33,40 +40,57 @@ function DiagManager() {
   let data = {
     pages: 1,
     current: 1,
-    size: size
+    size: 15
   }
   //新增/修改 弹窗flag=1新增,3修改
-  const showModal = (name, flag, Diagrow) => {
+  const showModal = (name, flag1, Diagrow) => {
     setVisible(true);
-    setTitle(name);console.log(flag)
-    if (flag === 1) {
+    setFlag(flag1)
+    setTitle(name);
+    if (flag1 === 1) {
       setFormData({
-        status: 1
+        status: 1,
+        uniqueName: '',
+        hisName: ''
       })
-    }else if (flag === 3) {
-      console.log(33,Diagrow)
+    } else if (flag1 === 3) {
+      console.log(33, Diagrow)
       setFormData(Diagrow)
     }
   }
   //表格数据
   function getDiseasePage(param) {  //type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作
-    post(api.getTermPage, {...(param || params),type:4}).then((res) => {
+    const hide = message.loading('加载中...', 0);
+    const hospitalId = localStorage.getItem('hospitalId')
+    setloading(true)
+    post(api.getTermPage, { ...(param || params), type: 4, hospitalId: hospitalId }).then((res) => {
+      hide()
       if (res.data.code === 200) {
         const data = res.data.data;
         setDiagList(data.records);
         setTotal(data.total)
+        setloading(false)
       }
     })
+
   }
-  function showDelModal(id){
-	setDelvisible(true);
-	setDiagid(id);
+  function showDelModal(id) {
+    setDelvisible(true);
+    setDiagid(id);
   }
   //删除
   function delDiseaseById() {
     post(api.deleteRecord, { id: Diagid }).then((res) => {
-	  setDelvisible(false);
+      setDelvisible(false);
       if (res.data.code === 200) {
+        //刷新列表
+        const totalPage = Math.ceil((total - 1) / size);
+        //将当前页码与删除数据之后的总页数进行比较,避免当前页码不存在
+        const pagenum =
+          params.current > totalPage ? totalPage : params.current;
+        //避免pagenum变为0
+        params.current = pagenum < 1 ? 1 : pagenum;
+        setParams(params)
         getDiseasePage();
         setDiagid("");
         message.success("删除成功");
@@ -85,7 +109,6 @@ function DiagManager() {
     setSize(pageSize)
     setCurrent(current)
     setParams(params)
-    getDiseasePage()
   }
   //翻页
   function changePage(page, pageSize) {
@@ -97,8 +120,9 @@ function DiagManager() {
   }
   //筛选查询
   const onFinish = (value) => {
+    params.current = 1
     const param = {
-      ...data,
+      ...params,
       ...value
     }
     setCurrent(1)
@@ -108,6 +132,7 @@ function DiagManager() {
   //重置
   const onReset = () => {
     setCurrent(1)
+    setSize(15)
     setParams(data)
     form.resetFields();
     getDiseasePage(data);
@@ -120,7 +145,8 @@ function DiagManager() {
 
   //新增修改 取消或关闭
   function cancel() {
-      setVisible(false)
+    setVisible(false)
+    setFormData([])
   }
 
   function saveMatching(saveParams) {
@@ -128,6 +154,7 @@ function DiagManager() {
       if (res.data.code === 200) {
         message.success("匹配成功");
         setVisible(false);
+        setFormData([])
         getDiseasePage();
       } else {
         message.warning(res.data.message || "匹配失败,请重试");
@@ -136,24 +163,36 @@ function DiagManager() {
       message.warning(error.message || "接口出错,请重试",);
     })
   }
-
+  const renderEmpty = () => (
+    <Empty
+      imageStyle={{
+        height: 0,
+      }}
+      description={<span></span>}
+    >
+    </Empty>
+  )
   const columns = [
     { title: '序号', dataIndex: 'index', render: (text, record, index) => (current - 1) * params.size + index + 1 },
-	{ title: '操作时间', dataIndex: 'gmtModified', },
+    { title: '操作时间', dataIndex: 'gmtModified', },
     { title: '医院诊断名称', dataIndex: 'hisName', },
     { title: 'ICD-10编码', dataIndex: 'code', },
     { title: '标准诊断名称', dataIndex: 'uniqueName', },
-	{ title: '标准术语状态', dataIndex: 'status',render: (text, record) => {
-      return record.status===1?'启用':'禁用';
-    }},
-    { title: '是否匹配', dataIndex: 'isMatch',render: (text, record) => {
-        return record.isMatch===1?'已匹配':'未匹配';
-      }},
+    {
+      title: '标准术语状态', dataIndex: 'status', render: (text, record) => {
+        return record.status === 1 ? '启用' : record.status === 0 ? '禁用' : '';
+      }
+    },
+    {
+      title: '是否匹配', dataIndex: 'isMatch', render: (text, record) => {
+        return record.isMatch === 1 ? '已匹配' : '未匹配';
+      }
+    },
     {
       title: '操作', dataIndex: 'key', render: (text, record) => (
         <Space size="middle">
-          <a onClick={e => showModal('修改诊断信息',3, record)}>修改</a>
-          <a onClick={() => showDelModal(record.id)}>删除</a>
+          <a onClick={e => showModal('修改诊断信息', 3, record)}>修改</a>
+          <a style={{ color: "#FF4D4D" }} onClick={() => showDelModal(record.id)}>删除</a>
         </Space>
       )
     }
@@ -169,20 +208,15 @@ function DiagManager() {
           <Row gutter={24}>
             <Col span={5} key={0}>
               <Form.Item label="医院诊断名称" name="hisName">
-                <Input placeholder="请输入" autoComplete='off' allowClear/>
+                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
               </Form.Item>
             </Col>
             <Col span={5} key={1}>
-              <Form.Item label="ICD-10编码" name="hisCode">
-                <Input placeholder="请输入" autoComplete='off' allowClear/>
-              </Form.Item>
-            </Col>
-            <Col span={5} key={2}>
               <Form.Item label="标准诊断名称" name="uniqueName">
-                <Input placeholder="请输入" autoComplete='off' allowClear/>
+                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
               </Form.Item>
             </Col>
-            <Col span={4} key={3}>
+            <Col span={5} key={2}>
               <Form.Item id="groupTypeval" label="是否匹配" name="isMatch">
                 <Select
                   showSearch
@@ -197,7 +231,20 @@ function DiagManager() {
                 </Select>
               </Form.Item>
             </Col>
-            <Col span={5} key={4}>
+            <Col span={5} key={3}>
+              <Form.Item label="标准术语状态" name="status">
+                <Select
+                  showSearch
+                  optionFilterProp="children"
+                  placeholder="全部"
+                >
+                  <Option value={''} key={-1}>全部</Option>
+                  <Option value={0} key={0}>禁用</Option>
+                  <Option value={1} key={1}>启用</Option>
+                </Select>
+              </Form.Item>
+            </Col>
+            <Col span={4} key={4}>
               <Form.Item>
                 <Button type="primary" htmlType="submit">
                   查询
@@ -216,32 +263,32 @@ function DiagManager() {
           <h2 className="table-title">诊断信息维护</h2>
           <Row gutter={12}>
             <Col key={0}>
-              <Button type="primary" icon={<PlusOutlined />} onClick={e => showModal('新增诊断信息',1)}>新增</Button>
+              <Button type="primary" icon={<PlusOutlined />} onClick={e => showModal('新增诊断信息', 1)}>新增</Button>
             </Col>
           </Row>
         </div>
-
-        <Table
-          /*rowSelection={{ type: 'checkbox', ...rowSelection, }}*/
-          columns={columns}
-          dataSource={DiagList}
-          rowKey={record => record.id}
-          pagination={{
-            current: current,
-            pageSize: size,
-            size: 'small',
-            showSizeChanger: true,
-            pageSizeOptions: ['15', '30', '60', '120'],
-            showTotal: (total, range) => `第${range[0]}-${range[1]} 条/共 ${total} 条数据`,
-            onShowSizeChange: (current, pageSize) => onSizeChange(current, pageSize), // 改变每页数量时更新显示
-            onChange: (page, pageSize) => changePage(page, pageSize),//点击页码事件
-            total: total,
-            showQuickJumper:true,
-          }} />
+          <Table
+            /*rowSelection={{ type: 'checkbox', ...rowSelection, }}*/
+            columns={columns}
+            scroll={{ y: 'calc(100vh - 400px)' }}
+            dataSource={DiagList}
+            rowKey={record => record.id}
+            pagination={{
+              current: current,
+              pageSize: size,
+              size: 'small',
+              showSizeChanger: true,
+              pageSizeOptions: ['15', '30', '60', '120'],
+              showTotal: (total, range) => `第${range[0]}-${range[1]} 条/共 ${total} 条数据`,
+              onShowSizeChange: (current, pageSize) => onSizeChange(current, pageSize), // 改变每页数量时更新显示
+              onChange: (page, pageSize) => changePage(page, pageSize),//点击页码事件
+              total: total,
+              showQuickJumper: true,
+            }} />
       </div>
-      <DiagContext.Provider value={{ formData }}>
-        <AddDiag onOk={saveMatching} title={title} visible={visible} cancel={cancel} />
-      </DiagContext.Provider>
+      {/*<DiagContext.Provider value={{ formData }}>*/}
+      <AddDiag formData={formData} termSType={4} termType={4} onOk={saveMatching} title={title} visible={visible} cancel={cancel} flag={flag} />
+      {/*</DiagContext.Provider>*/}
       <Modal
         maskClosable={false}
         title="删除诊断信息"

+ 8 - 2
src/components/DiagManager/index.less

@@ -1,13 +1,13 @@
 @import "@common/common.less";
 
 .info-box{
-  width: 48%;
+  width: 46%;
   float: left;
   .title{
 	font-weight: bold;
   }
   &:first-child{
-	margin-right: 4%;
+	// margin-right: 4%;
   }
   .item-box{
 	border:1px #ccc solid;
@@ -19,4 +19,10 @@
 .linked-term{
   clear: both;
   white-space: nowrap;
+}
+.info-p{
+	width: 8%;
+	float: left;
+	text-align: center;
+	margin-top: 80px;
 }

+ 22 - 11
src/components/DocTemplate/index.js

@@ -1,13 +1,20 @@
 import React, { useState, useEffect } from 'react';
 import { Form, Input, Button, Table, Modal, Row, Col,message } from 'antd';
 import '@common/common.less';
+import { useSelector } from 'react-redux';
 import apiObj from '@api/index';
 import "moment/locale/zh-cn"
 const { post, api } = apiObj;
 function DocTemplate() {
+  const { docNum } = useSelector((state) => {
+  	return state.userInfo;
+  });
   useEffect(() => {
-	getDocTemplate();
-  }, []);
+	  setSize(15)
+	  setCurrent(1)
+      form.resetFields();
+      getDocTemplate();
+  }, [docNum]);
   const [logList, setLogList] = useState([]);
   const [total, setTotal] = useState(0);
   const [size, setSize] = useState(15);
@@ -24,11 +31,13 @@ function DocTemplate() {
   let data = {
 	pages: 1,
 	current: 1,
-	size: size
+	size: 15
   }
   //表格数据
   function getDocTemplate(param) {
+	const hide = message.loading('加载中...',0);
 	post(api.getRecordTemplatePage, param || params).then((res) => {
+	  hide()
 	  if (res.data.code === 200) {
 		const data = res.data.data;
 		setLogList(data.records);
@@ -47,9 +56,10 @@ function DocTemplate() {
 	  hide();
 	  if (res.data.code === 200) {
 		const data = res.data.data;
-		if(+data.type===2){					//模板类型,0:未知,1:html,2:xml
+		if(data.type==="2"){					//模板类型,0:未知,1:html,2:xml
 		  setVisible(flag);
 		  setTmplInfo(data);
+		  console.log(data.content)
 		}else{
 		  const myWindow=window.open('','','width=800,height=600');
 		  myWindow.document.write(data.content);
@@ -64,7 +74,6 @@ function DocTemplate() {
 	setSize(pageSize)
 	setCurrent(current)
 	setParams(params)
-	getDocTemplate()
   }
   function changePage(page, pageSize) {
 	params.current = page
@@ -80,8 +89,9 @@ function DocTemplate() {
 	}
   }*/
   const onFinish = (value) => {
+	params.current = 1
 	const param = {
-	  ...data,
+	  ...params,
 	  ...value,
 	}
 	setCurrent(1)
@@ -89,6 +99,7 @@ function DocTemplate() {
 	getDocTemplate(param);
   };
   const onReset = () => {
+	setSize(15)
 	setCurrent(1)
 	setParams(data)
 	form.resetFields();
@@ -116,22 +127,22 @@ function DocTemplate() {
 			<Row gutter={24}>
 			  <Col span={5} key={0}>
 				<Form.Item label="医院模板ID" name="code">
-				  <Input placeholder="请输入" autoComplete='off' allowClear/>
+				  <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
 				</Form.Item>
 			  </Col>
 			  <Col span={5} key={1}>
 				<Form.Item label="医院模板名称" name="name">
-				  <Input placeholder="请输入" autoComplete='off' allowClear/>
+				  <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
 				</Form.Item>
 			  </Col>
 			  <Col span={5} key={2}>
 				<Form.Item label="医院父类模板ID" name="parentCode">
-				  <Input placeholder="请输入" autoComplete='off' allowClear/>
+				  <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
 				</Form.Item>
 			  </Col>
 			  <Col span={5} key={4}>
 				<Form.Item label="医院父类模板名称" name="parentName">
-				  <Input placeholder="请输入" autoComplete='off' allowClear/>
+				  <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
 				</Form.Item>
 			  </Col>
 			  <Col span={4} key={5}>
@@ -176,7 +187,7 @@ function DocTemplate() {
 			footer={[<Button key={1} type="primary" onClick={()=>setVisible(false)}>
 			  关闭
 			</Button>]}
-			width="80%"
+			width="90%"
 			visible={visible}
 			onCancel={()=>setVisible(false)}
 		>

+ 0 - 4
src/components/DrugManager/Drug-context.js

@@ -1,4 +0,0 @@
-import { createContext } from 'react';
-const DrugContext = createContext(null);
-
-export default DrugContext;

+ 0 - 120
src/components/DrugManager/addDrug.js

@@ -1,120 +0,0 @@
-import React, {
-   useContext
-} from 'react';
-import { Form, Input, Button,  message, Space } from 'antd';
-import apiObj from '@api/index';
-import { getCookie,setCookie } from '@utils/index';
-import DrugContext from './Drug-context';
-const { post, api } = apiObj;
-
-function AddDrug(props) {
-  
-  const [form] = Form.useForm();
-  const { type, formData} = useContext(DrugContext);
-  const initialValues = formData;
-
-  const onFinish = values => {
-    let params = values
-    if (type == 3) {
-	  params.id=initialValues.id
-      upDrugById(params)
-    } else {
-      addDrug(params)
-    }
-
-  };
-  function addDrug(param) {
-    const hisId = getCookie("hospitalId");
-	const params ={
-		hospitalId:hisId,
-		...param
-	}
-	post(api.addDrug, params).then((res) => {
-      if (res.data.code === 200) {
-        props.DrugChange()
-        message.success(res.data.message);
-      } else {
-        message.error(res.data.message);
-      }
-    })
-  }
-  function upDrugById(param) {
-	  const hisId = getCookie("hospitalId");
-	  const params ={
-	  	hospitalId:hisId,
-	  	...param
-	  }
-    post(api.upDrugById, params).then((res) => {
-      if (res.data.code === 200) {
-        props.DrugChange()
-        message.success(res.data.message);
-      } else {
-        message.error(res.data.message);
-      }
-    })
-  }
-  function cancel() {
-  	props.cancel()
-  }
-  
-  function onValuesChange() {
-  	props.isChange(form.isFieldsTouched())
-  }
-
-  return (
-    <>
-      <Form
-        labelCol={{ span: 6 }}
-        wrapperCol={{ span: 16 }}
-        form={form}
-        name="register"
-        onFinish={onFinish}
-        initialValues={initialValues}
-		onValuesChange={onValuesChange}
-      >
-
-        <Form.Item
-          name="name"
-          label="医院药品名称"
-          rules={[
-            {
-              required: true,
-              message: '请输入医院药品名称',
-            },
-          ]}
-        >
-          {type == 3 ?
-		    <Input  autoComplete='off'/>
-            :
-            <Input placeholder="请输入" autoComplete='off'/>
-          }
-
-        </Form.Item>
-		<Form.Item
-		  name="approvalNum"
-		  label="国药准字"
-		>
-		  {type == 3 ?
-		    <Input  autoComplete='off'/>
-		    :
-		    <Input placeholder="请输入" autoComplete='off'/>
-		  }
-		
-		</Form.Item>
-          <Form.Item wrapperCol={{ offset: 8, span: 16 }}>
-            <Space size="middle">
-              <Button htmlType="button" onClick={e => cancel()}>
-                取消
-            </Button>
-              <Button type="primary" htmlType="submit">
-                保存
-            </Button>
-            </Space>
-          </Form.Item>
-
-      </Form>
-    </>
-  );
-}
-
-export default AddDrug;

+ 228 - 276
src/components/DrugManager/index.js

@@ -1,328 +1,281 @@
 import React, { useState, useEffect } from 'react';
-import { Form, Input, Button, Table, Select, Space, Modal, message, Row, Col, Upload } from 'antd';
+import { Empty,ConfigProvider,Spin,Form, Input, Button, Table, Select, Space, Modal, message, Row, Col } from 'antd';
 import { PlusOutlined } from '@ant-design/icons';
-import AddDrug from './addDrug'
-import MatchDrug from './MatchDrug.js'
+import AddTerm from '../DiagManager/addDiag'
+import { useSelector } from 'react-redux';
 import '@common/common.less';
 import apiObj from '@api/index';
-import DrugContext from './Drug-context';
 
 const { post, api } = apiObj;
 const { Option } = Select;
 //获取列表
 function DrugManager() {
+  const { drugNum } = useSelector((state) => {
+  	return state.userInfo;
+  });
   useEffect(() => {
-    getDrugPage();
-  }, []);
+	  setSize(15)
+	  setCurrent(1)
+      form.resetFields();
+      getDrugeryPage();
+  }, [drugNum]);
   const [DrugList, setDrugList] = useState([]);//当前页列表数据
-  const [Drugid, setDrugid] = useState([]);//当前列表id
-  const [title, setTitle] = useState("");//数据总量
+  const [Drugid, setDrugid] = useState([]);//当前操作行id
+  const [title, setTitle] = useState("");//新增/修改的弹窗标题
   const [visible, setVisible] = useState(false);//新增修改 弹窗
-  const [msvisible, setMsvisible] = useState(false);//删除 弹窗
-  const [visible1, setvisible1] = useState(false);//导入 弹窗
-  const [visible2, setvisible2] = useState(false);//匹配 弹窗
-  const [unsaved, setUnsaved] = useState(false);//修改未保存弹窗
-  const [revise, setRevise] = useState(false);//是否修改 新增修改内容
-  const [type, setType] = useState("");
-  const [formData, setFormData] = useState(null);//当前行数据
+  const [delvisible, setDelvisible] = useState(false);//删除 弹窗
+  const [loading, setloading] = useState(true);//是否显示加载中
+  const [flag, setFlag] = useState(false);//新增1或修改3
+  const [formData, setFormData] = useState({});//当前行数据
   const [size, setSize] = useState(15);//每页显示条数
   const [total, setTotal] = useState(0);
   const [current, setCurrent] = useState(1);//当前页
-  const [uploadStatus, setUploadStatus] = useState(0);//导入状态,0初始,1成功,2格式错误,3导入数据错误
-  const [uploadTip, setUploadTip] = useState("");		//导入状态提示语
-  const [saveParams, setSaveParams] = useState({});		//匹配药品选中
   const [params, setParams] = useState({
-    pages: 1,
-    current: 1,
-    size: 15
+	pages: 1,
+	current: 1,
+	size: 15
   });
   const [form] = Form.useForm();
-  const tipMap = {
-    0: '提示:EXCEL导入,模板样式及数据请在【朗通云平台-CDSS数据维护-医学术语关联维护】中导出获取。',
-    2: "模板格式错误,模板样式及数据请在【朗通云平台-CDSS数据维护-医学术语关联维护】中导出获取",
-    3: '模板导入失败,失败原因已在Excel中标识并自动下载,请检查后重新导入',
-  };
 
   let data = {
-    pages: 1,
-    current: 1,
-    size: size
+	pages: 1,
+	current: 1,
+	size: 15
   }
-  //新增 弹窗
-  const showModal = (name, type, flag, Drugrow) => {
-    setVisible(type);
-    setTitle(name);
-    setType(flag)
-    if (flag == 1) {
-      setFormData({
-        status: '1'
-      })
-    }
-    if (flag == 3) {
-      setFormData(Drugrow)
-      getDrugPage()
-    }
+  //新增/修改 弹窗flag=1新增,3修改
+  const showModal = (name, flag1, Drugrow) => {
+	setVisible(true);
+	setTitle(name);
+	setFlag(flag1)
+	if (flag1 === 1) {
+	  setFormData({
+		status: 1,
+		hisName:'',
+		uniqueName:'',
+		form:''
+	  })
+	}else if (flag1 === 3) {
+	  console.log(33,Drugrow)
+	  setFormData(Drugrow)
+	}
   }
   //表格数据
-  function getDrugPage(param) {
-    post(api.getDrugPage, param || params).then((res) => {
-      if (res.data.code === 200) {
-        const data = res.data.data;
-        setDrugList(data.records);
-        setTotal(data.total)
-      }
-    })
+  function getDrugeryPage(param) {  //type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作
+	const hide = message.loading('加载中...',0);
+	const hospitalId = localStorage.getItem('hospitalId')
+	setloading(true)
+	post(api.getTermPage, {...(param || params),type:5,hospitalId:hospitalId}).then((res) => {
+	  hide()
+	  if (res.data.code === 200) {
+		const data = res.data.data;
+		setDrugList(data.records);
+		setTotal(data.total)
+		setloading(false)
+	  }
+	})
+  }
+  function showDelModal(id){
+	setDelvisible(true);
+	setDrugid(id);
   }
-
   //删除
-  function delDrugById() {
-    post(api.delDrugById, { ids: Drugid }).then((res) => {
-      setMsvisible(false);
-      if (res.data.code === 200) {
-        getDrugPage();
-        setDrugid([])
-        message.success("操作成功");
-      } else {
-        message.warning(res.data.msg || '操作失败');
-      }
-    }).catch(() => {
-      setMsvisible(false);
-      message.error("接口出错");
-    });
+  function delDrugeryById() {
+	post(api.deleteRecord, { id: Drugid }).then((res) => {
+	  setDelvisible(false);
+	  if (res.data.code === 200) {
+		//刷新列表
+		const totalPage = Math.ceil((total-1) / size);
+		//将当前页码与删除数据之后的总页数进行比较,避免当前页码不存在
+		const pagenum =
+		     params.current > totalPage ? totalPage : params.current;
+		//避免pagenum变为0
+		params.current = pagenum < 1 ? 1 : pagenum;
+		setParams(params)
+		getDrugeryPage();
+		setDrugid("");
+		message.success("删除成功");
+	  } else {
+		message.warning(res.data.msg || '操作失败');
+	  }
+	}).catch(() => {
+	  setDelvisible(false);
+	  message.error("接口出错");
+	});
   }
   //每页显示条数切换
   function onSizeChange(current, pageSize) {
-    params.current = current
-    params.size = pageSize
-    setSize(pageSize)
-    setCurrent(current)
-    setParams(params)
-    getDrugPage()
+	params.current = current
+	params.size = pageSize
+	setSize(pageSize)
+	setCurrent(current)
+	setParams(params)
   }
   //翻页
   function changePage(page, pageSize) {
-    params.current = page
-    params.size = pageSize
-    setCurrent(page)
-    setParams(params)
-    getDrugPage()
+	params.current = page
+	params.size = pageSize
+	setCurrent(page)
+	setParams(params)
+	getDrugeryPage()
   }
+  //筛选查询
   const onFinish = (value) => {
-    const param = {
-      ...data,
-      ...value
-    }
-    setCurrent(1)
-    setParams(param)
-    getDrugPage(param);
+	params.current = 1
+	const param = {
+	  ...params,
+	  ...value
+	}
+	console.log(param)
+	setCurrent(1)
+	setParams(param)
+	getDrugeryPage(param);
   };
   //重置
   const onReset = () => {
-    setCurrent(1)
-    setParams(data)
-    form.resetFields();
-    getDrugPage(data);
+	setSize(15)
+	setCurrent(1)
+	setParams(data)
+	form.resetFields();
+	getDrugeryPage(data);
   };
-  //打开导入弹窗
-  const ImportBox = () => {
-    setvisible1(true)
-  }
-  //导入弹窗取消或关闭
-  function handleCancel1() {
-    setvisible1(false);
-    setUploadStatus(0);
-  }
-  //打开匹配弹窗
-  function match(row) {
-    setvisible2(true)
-    setFormData(row)
-  }
-  //导入弹窗取消或关闭
-  function handleCancel2() {
-    setvisible2(false);
-  }
-  const messageBox = () => {
-    if (!Drugid.length) {
-      message.warning("请先选择要删除的记录~", 1);
-      return;
-    }
-    setMsvisible(true)
-  }
+
   //删除 提示框取消或关闭
   function handleCancel() {
-    setMsvisible(false);
+	setDelvisible(false);
   }
 
   //新增修改 取消或关闭
   function cancel() {
-    if (revise) {
-      setUnsaved(true)
-    } else {
-      setVisible(false)
-      setFormData(null)
-    }
-  }
-
-  function isChange(a) {
-    setRevise(a)
-  }
-
-  function addCancel() {
-    setRevise(false)
-    setVisible(false)
-    setUnsaved(false)
-    setFormData(null)
+	setVisible(false)
+	setFormData([])
   }
 
-  function unsavedCancel() {
-    setUnsaved(false)
+  function saveMatching(saveParams) {
+	post(api.saveOrUpdateRecord, saveParams).then((res) => {
+	  if (res.data.code === 200) {
+		message.success("匹配成功");
+		setVisible(false);
+		setFormData([])
+		getDrugeryPage();
+	  } else {
+		message.warning(res.data.message || "匹配失败,请重试");
+	  }
+	}).catch((error) => {
+	  message.warning(error.message || "接口出错,请重试",);
+	})
   }
+  const renderEmpty = () => (
+        <Empty
+            imageStyle={{
+                height: 0,
+            }}
+  		  description={<span></span>}
+  		  >
+        </Empty>
+    )
 
-  //新增修改 保存
-  function DrugChange() {
-    setRevise(false)
-    setVisible(false)
-    getDrugPage();
-  }
-  function saveMatching() {
-    post(api.matchingDrug, saveParams).then((res) => {
-      setvisible2(false);
-      if (res.data.code === 200) {
-        message.success("匹配成功");
-        getDrugPage();
-      } else {
-        message.warning(res.data.message || "匹配失败,请重试");
-      }
-    }).catch((error) => {
-      message.warning(error.message || "接口出错,请重试",);
-    })
-  }
-  const rowSelection = {
-    onChange: (selectedRowKeys, selectedRows) => {
-      console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
-      setDrugid(selectedRowKeys)
-    }
-  };
-  //导入模板
-  const props = {
-    name: 'file',
-    accept: ".xls",
-    showUploadList: false,
-    action: api.importDrug,
-    headers: {
-      authorization: 'authorization-text',
-    },
-    onChange(info) {
-      const { response, status } = info.file;
-      if (status === 'done') {
-        if (response.code === 200) {
-          getDrugPage();		//刷新列表
-          //setvisible1(false);			//关闭导入弹窗
-          //message.success(`${info.file.name} 导入成功`);
-          setUploadStatus(1);
-          setUploadTip(response.data);
-        } else {
-          //message.error(`${info.file.name} 导入失败.`);
-          setUploadStatus(2);
-        }
-      } else if (status === 'error') {
-        setUploadStatus(3);
-      }
-    },
-  };
-  function matchChange(data) {
-    setSaveParams(data);
-  }
   const columns = [
-    { title: '序号', dataIndex: 'index', render: (text, record, index) => (current - 1) * params.size + index + 1 },
-    { title: '医院药品名称', dataIndex: 'name', },
-    { title: '国药准字', dataIndex: 'approvalNum', },
-    { title: '药品剂型', dataIndex: 'dosageForm', },
-    { title: '标准药品名称', dataIndex: 'standard', },
-    { title: '是否匹配', dataIndex: 'isMapping', },
-    {
-      title: '操作', dataIndex: 'key', render: (text, record) => (
-        <Space size="middle">
-          <a onClick={e => showModal('修改字典', true, 3, record)}>修改</a>
-          <a onClick={e => match(record)}>匹配</a>
-        </Space>
-      )
-    }
+	{ title: '序号', dataIndex: 'index', render: (text, record, index) => (current - 1) * params.size + index + 1 },
+	{ title: '操作时间', dataIndex: 'gmtModified', },
+	{ title: '医院药品名称', dataIndex: 'hisName', },
+	{ title: '标准药品名称', dataIndex: 'uniqueName', },
+	{ title: '药品剂型', dataIndex: 'form', },
+	{ title: '标准术语状态', dataIndex: 'status',render: (text, record) => {
+		return record.status===1?'启用':record.status===0?'禁用':'';
+	  }},
+	{ title: '剂型术语状态', dataIndex: 'formStatus',render: (text, record) => {
+		return record.formStatus===1?'启用':record.formStatus===0?'禁用':'';
+	  }},
+	{ title: '是否匹配', dataIndex: 'isMatch',render: (text, record) => {
+		return record.isMatch===1?'已匹配':'未匹配';
+	  }},
+	{
+	  title: '操作', dataIndex: 'key', render: (text, record) => (
+		  <Space size="middle">
+			<a onClick={e => showModal('修改药品信息',3, record)}>修改</a>
+			<a style={{color:"#FF4D4D"}} onClick={() => showDelModal(record.id)}>删除</a>
+		  </Space>
+	  )
+	}
   ]
   return (
-    <div className="wrapper">
-      <div className="filter-box">
-        <Form
-          form={form}
-          name="normal_login"
-          onFinish={onFinish}
-          initialValues={{ isMapping: '' }}
-        >
-          <Row gutter={24}>
-            <Col span={5} key={0}>
-              <Form.Item label="医院药品名称" name="name">
-                <Input placeholder="请输入" autoComplete='off' allowClear />
-              </Form.Item>
-            </Col>
-            <Col span={5} key={1}>
-              <Form.Item label="国药准字" name="approvalNum">
-                <Input placeholder="请输入" autoComplete='off' allowClear />
-              </Form.Item>
-            </Col>
-            <Col span={5} key={2}>
-              <Form.Item label="药品剂型" name="dosageForm">
-                <Input placeholder="请选择" autoComplete='off' allowClear />
-              </Form.Item>
-            </Col>
-            <Col span={5} key={3}>
-              <Form.Item label="标准药品名称" name="standard">
-                <Input placeholder="请输入" autoComplete='off' allowClear />
-              </Form.Item>
-            </Col>
-            <Col span={4} key={4}>
-              <Form.Item id="groupTypeval" label="是否匹配" name="isMapping">
-                <Select
-                  showSearch
-                  optionFilterProp="children"
-                  // onSearch={onSearch}
-                  // onFocus={onFocus}
-                  placeholder="全部"
-                >
-                  <Option value={''} key={-1}>全部</Option>
-                  <Option value={0} key={0}>未匹配</Option>
-                  <Option value={1} key={1}>已匹配</Option>
-                </Select>
-              </Form.Item>
-            </Col>
-            <Col span={5} key={5}>
-              <Form.Item>
-                <Button type="primary" htmlType="submit">
-                  查询
-                </Button>
-                <Button onClick={onReset}>
-                  重置
-                </Button>
-              </Form.Item>
-            </Col>
-          </Row>
-        </Form>
-      </div>
-
-      <div className="table">
-        <div className="table-header">
-          <h2 className="table-title">药品信息维护</h2>
-          <Row gutter={12}>
-            <Col key={0}>
-              <Button type="primary" icon={<PlusOutlined />} onClick={e => showModal('新增', true, 1)}>新增</Button>
-            </Col>
-            <Col key={1}>
-              <Button onClick={e => messageBox()} type="primary" danger>删除</Button>
-            </Col>
-            <Col key={2}>
-              <Button type="primary" onClick={e => ImportBox()}>导入</Button>
-            </Col>
-          </Row>
-        </div>
+	  <div className="wrapper">
+		<div className="filter-box">
+		  <Form
+			  form={form}
+			  name="normal_login"
+			  onFinish={onFinish}
+		  >
+			<Row gutter={24}>
+			  <Col span={5} key={0}>
+				<Form.Item label="医院药品名称" name="hisName">
+				  <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
+				</Form.Item>
+			  </Col>
+			  <Col span={5} key={1}>
+				<Form.Item label="标准药品名称" name="uniqueName">
+				  <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
+				</Form.Item>
+			  </Col>
+			  <Col span={5} key={2}>
+				<Form.Item label="药品剂型" name="form">
+				  <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
+				</Form.Item>
+			  </Col>
+			  <Col span={5} key={3}>
+				<Form.Item id="groupTypeval" label="是否匹配" name="isMatch">
+				  <Select
+					  showSearch
+					  optionFilterProp="children"
+                      // onSearch={onSearch}
+                      // onFocus={onFocus}
+					  placeholder="全部"
+				  >
+					<Option value={''} key={-1}>全部</Option>
+					<Option value={0} key={0}>未匹配</Option>
+					<Option value={1} key={1}>已匹配</Option>
+				  </Select>
+				</Form.Item>
+			  </Col>
+			  <Col span={5} key={4}>
+			  	<Form.Item  label="标准术语状态" name="status">
+			  		<Select
+			  		  showSearch
+			  		  optionFilterProp="children"
+			  		  placeholder="全部"
+			  		>
+			  		<Option value={''} key={-1}>全部</Option>
+			  		<Option value={0} key={0}>禁用</Option>
+			  		<Option value={1} key={1}>启用</Option>
+			  		</Select>
+			  	</Form.Item>
+			  </Col>
+			  <Col span={5} key={5}>
+			  	<Form.Item label="剂型术语状态" name="formStatus">
+			  		<Select
+			  			showSearch
+			  			optionFilterProp="children"
+			  			placeholder="全部"
+			  		>
+			  		<Option value={''} key={-1}>全部</Option>
+			  		<Option value={0} key={0}>禁用</Option>
+			  		<Option value={1} key={1}>启用</Option>
+			  		</Select>
+			  	</Form.Item>
+			  </Col>
+			  <Col span={5} key={6}>
+				<Form.Item>
+				  <Button type="primary" htmlType="submit">
+					查询
+				  </Button>
+				  <Button onClick={onReset}>
+					重置
+				  </Button>
+				</Form.Item>
+			  </Col>
+			</Row>
+		  </Form>
+		</div>
 
         <Table
           rowSelection={{ type: 'checkbox', ...rowSelection, }}
@@ -341,7 +294,6 @@ function DrugManager() {
             total: total,
             showQuickJumper:true,
           }} />
-      </div>
       {visible && formData ?
         <Modal
           title={title}

+ 70 - 22
src/components/DutyRecord/index.js

@@ -1,18 +1,28 @@
 import React, { useState, useEffect, useRef } from 'react';
 import { Form, Input, Button, Table, Pagination, Row, Col, Select, Modal, DatePicker } from 'antd';
+import { useSelector } from 'react-redux';
 import '@common/common.less';
 import apiObj from '@api/index';
 import moment from "moment";
 import "moment/locale/zh-cn"
 import { message } from "antd/lib/index";
-import { disabledDate } from '@utils/index'
+import { disabledDate,getDaysBetween } from '@utils/index'
 const { post, api, xPost } = apiObj;
 const { RangePicker } = DatePicker;
 const { Option } = Select;
 function DutyRecord() {
+	const { dutyNum } = useSelector((state) => {
+		return state.userInfo;
+	});
 	useEffect(() => {
-		getDutyRecord();
-	}, []);
+		setSize(15)
+		setCurrent(1)
+		setSelectedRowKeys([])
+	    form.resetFields();
+	    getDutyRecord();
+	}, [dutyNum]);
+	let today = getNowFormatDate()
+	let lastmonthday= getlastmonthday()
 	const [logList, setLogList] = useState([]);
 	const [total, setTotal] = useState(0);
 	const [visible, setVisible] = useState(false);
@@ -20,6 +30,8 @@ function DutyRecord() {
 	const [current, setCurrent] = useState(1);
 	const [selectedRowKeys, setSelectedRowKeys] = useState([]);
 	const [params, setParams] = useState({
+		changeTimeEnd:today.split('/').join('-') + ' 23:59:59',
+		changeTimeStart:lastmonthday.split('/').join('-') + ' 00:00:00',
 		pages: 1,
 		current: 1,
 		size: 15
@@ -30,13 +42,26 @@ function DutyRecord() {
 		'2': '职称变更'
 	};
 	let data = {
+		changeTimeEnd:today.split('/').join('-') + ' 23:59:59',
+		changeTimeStart:lastmonthday.split('/').join('-') + ' 00:00:00',
 		pages: 1,
 		current: 1,
-		size: size
+		size: 15
 	}
+	
+	function getlastmonthday(){
+		let time = new Date((new Date() - 30 * 24 * 3600 * 1000)).toLocaleDateString()
+		return time
+	}
+	function getNowFormatDate() {
+	      let time = new Date().toLocaleDateString()
+	      return time
+	    }
 	//表格数据
 	function getDutyRecord(param) {
+		const hide = message.loading('加载中...',0);
 		post(api.getOfficialCapacityPage, param || params).then((res) => {
+			hide()
 			if (res.data.code === 200) {
 				const data = res.data.data;
 				setLogList(data.records);
@@ -48,6 +73,14 @@ function DutyRecord() {
 	function delRecord() {
 		post(api.delOfficialCapacityPage, { id: selectedRowKeys }).then((res) => {
 			if (res.data.code === 200) {
+				//刷新列表
+				const totalPage = Math.ceil((total - selectedRowKeys.length) / size);
+				//将当前页码与删除数据之后的总页数进行比较,避免当前页码不存在
+				const pagenum =
+				    params.current > totalPage ? totalPage : params.current;
+				//避免pagenum变为0
+				params.current = pagenum < 1 ? 1 : pagenum;
+				setParams(params)
 				//刷新列表
 				getDutyRecord()
 			} else {
@@ -72,7 +105,6 @@ function DutyRecord() {
 		setSize(pageSize)
 		setCurrent(current)
 		setParams(params)
-		getDutyRecord()
 	}
 	function changePage(page, pageSize) {
 		params.current = page
@@ -85,19 +117,25 @@ function DutyRecord() {
 		setSelectedRowKeys(selectedRowKeys);
 	};
 	const onFinish = (value) => {
-		if (value.changeTime) {
-			value.changeTimeStart = moment(value.changeTime[0]).format('YYYY-MM-DD 00:00:00')
-			value.changeTimeEnd = moment(value.changeTime[1]).format('YYYY-MM-DD 23:23:59')
+		value.changeTimeStart = moment(value.changeTimeStart).format('YYYY-MM-DD 00:00:00');
+		value.changeTimeEnd = moment(value.changeTimeEnd).format('YYYY-MM-DD 23:59:59');
+		if (value.changeTimeStart > value.changeTimeEnd) {
+		    message.warning('开始时间不能大于结束时间');
+		    return
 		}
+		params.current = 1
 		const param = {
-			...data,
+			...params,
 			...value,
 		}
+		setSelectedRowKeys([])
 		setCurrent(1)
 		setParams(param)
 		getDutyRecord(param);
 	};
 	const onReset = () => {
+		setSize(15)
+		setSelectedRowKeys([])
 		setCurrent(1)
 		setParams(data)
 		form.resetFields();
@@ -126,34 +164,33 @@ function DutyRecord() {
 					form={form}
 					name="normal_login"
 					onFinish={onFinish}
-					initialValues={{ type: '' }}
+					initialValues={{ type: '', changeTimeStart: moment(lastmonthday), changeTimeEnd: moment(today) }}
 				>
 					<Row gutter={24}>
 						<Col span={5} key={0}>
 							<Form.Item label="医生姓名" name="doctorName">
-								<Input placeholder="请输入" autoComplete='off' allowClear/>
+								<Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
 							</Form.Item>
 						</Col>
 						<Col span={5} key={1}>
 							<Form.Item label="科室" name="deptName">
-								<Input placeholder="请输入" autoComplete='off' allowClear/>
+								<Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
 							</Form.Item>
 						</Col>
 						<Col span={5} key={2}>
 							<Form.Item label="工号" name="doctorCode">
-								<Input placeholder="请输入" autoComplete='off' allowClear/>
+								<Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
 							</Form.Item>
 						</Col>
 						<Col span={5} key={3}>
 							<Form.Item label="职务/职称名称" name="name">
-								<Input placeholder="请输入" autoComplete='off' allowClear/>
+								<Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
 							</Form.Item>
 						</Col>
 						<Col span={5} key={4}>
 							<Form.Item label="变更类型" name="type">
 								<Select
 									placeholder="请选择"
-									allowClear
 								>
 									<Option value="" key={0}>全部</Option>
 									<Option value="1" key={1}>{typeMap['1']}</Option>
@@ -161,12 +198,23 @@ function DutyRecord() {
 								</Select>
 							</Form.Item>
 						</Col>
-						<Col span={7} key={5}>
-							<Form.Item label="变更时间" name="changeTime">
-								<RangePicker
-									disabledDate={disabledDate}
-									placeholder={['开始时间', '结束时间']}
-								/>
+						<Col span={8} key={5}>
+							<Form.Item label="变更时间" style={{height:'32px'}}>
+								<Form.Item name="changeTimeStart" className='times'>
+								    <DatePicker
+								        allowClear={false}
+								        disabledDate={disabledDate}
+								        placeholder="请选择开始日期"
+								    />
+								</Form.Item>
+								<span style={{ margin: '0 5px', position: 'relative', top: '2px' }}>-</span>
+								<Form.Item name="changeTimeEnd" className='times'>
+								    <DatePicker
+								        allowClear={false}
+								        disabledDate={disabledDate}
+								        placeholder="请选择结束日期"
+								    />
+								</Form.Item>
 							</Form.Item>
 						</Col>
 						<Col span={6} key={6}>
@@ -210,7 +258,7 @@ function DutyRecord() {
 			<Modal
 				title="删除职务职称变更记录"
 				okText='确定'
-				cancelText='取消'
+				cancelText='关闭'
 				width={400}
 				visible={visible}
 				onOk={delRecord}

+ 65 - 42
src/components/FieldProblem/editProblem.js

@@ -6,33 +6,64 @@ import apiObj from '@api/index';
 import BlockContext from './problem-context';
 import moment from "moment";
 import "moment/locale/zh-cn"
-import { getCookie } from '@utils/index'
-const { RangePicker } = DatePicker;
+import { disabledDate, getDaysBetween, getValueFromEvent } from '@utils/index'
 const { post, api, xPost } = apiObj;
 const { TextArea } = Input;
 function EditBlock(props) {
     useEffect(() => {
     }, []);
     const [form] = Form.useForm();
-    const [dates, setDates] = useState([]);
+    const [disable, setDisable] = useState(true);
     const [limit, setLimit] = useState(false);
     const { problemDetail, type } = useContext(BlockContext);
     const initialValues = problemDetail;
     const onFinish = values => {
+        values.startDate = values.startDate ? moment(values.startDate).format('YYYY-MM-DD 00:00:00') : null;
+        values.endDate = values.endDate ? moment(values.endDate).format('YYYY-MM-DD 23:59:59') : null;
+        if (values.startDate > values.endDate) {
+            message.warning('开始时间不能大于结束时间');
+            return
+        } else if (!limit && getDaysBetween(values.startDate, values.endDate) > 29) {
+            message.warning('开始时间与结束时间相差不能超过30天');
+            return
+        }
         if (type == 1) {
             dataCheck(values)
         } else {
             editProblem(values)
         }
 
-    };
+    }
+
     function change(e) {
+        const formData = form.getFieldsValue();
         const { value } = e.target;
         if (value) {
             setLimit(true)
         } else {
             setLimit(false)
         }
+        if (formData.behospitalCode || (formData.startDate != undefined && formData.endDate != undefined)) {
+            setDisable(false)
+        } else {
+            setDisable(true)
+        }
+    }
+    function onStartChange(val) {
+        const formData = form.getFieldsValue();
+        if (formData.behospitalCode || (formData.startDate != undefined && formData.endDate != undefined)) {
+            setDisable(false)
+        } else {
+            setDisable(true)
+        }
+    }
+    function onEndChange(val) {
+        const formData = form.getFieldsValue();
+        if (formData.behospitalCode || (formData.startDate != undefined && formData.endDate != undefined)) {
+            setDisable(false)
+        } else {
+            setDisable(true)
+        }
     }
     function editProblem(values) {
         let params = {
@@ -51,17 +82,15 @@ function EditBlock(props) {
     }
     //数据对比
     function dataCheck(values) {
-        values.startDate = moment(values.time[0]).format('YYYY-MM-DD 00:00:00');
-        values.endDate = moment(values.time[1]).format('YYYY-MM-DD 23:23:59');
         let params = {
             behospitalCode: values.behospitalCode,
             dateEnd: values.endDate,
             dateStart: values.startDate,
-            isPlacefile:getCookie('isPlacefile')
+            isPlacefile: localStorage.getItem('isPlacefile')
         }
         post(api.dataCheck, params).then((res) => {
             if (res.data.code === 200) {
-                props.userChange()
+                props.userChange(1)
                 message.success(res.data.message);
                 form.resetFields();
             } else {
@@ -69,19 +98,7 @@ function EditBlock(props) {
             }
         })
     }
-    function disabledDate(current) {
-        if (!dates || dates.length === 0) {
-            return current && current >= moment().endOf('day');
-        }
-        const tooLate = dates[0] && current.diff(dates[0], 'days') > 29;
-        const tooEarly = dates[1] && dates[1].diff(current, 'days') > 29;
-        if(!limit){
-            return current && current >= moment().endOf('day') || tooEarly || tooLate;
-        }else{
-            return current && current >= moment().endOf('day');
-        }
-        
-    };
+
     function cancel() {
         props.cancel()
     }
@@ -166,13 +183,12 @@ function EditBlock(props) {
 
                     </Form.Item>
                 </Col>
-                <Col span={12} hidden={type != 3}>
+                <Col span={24} hidden={type != 3}>
                     <Form.Item
                         name="tableVal"
                         label="上传字段值"
                     >
-                        <span>{initialValues.tableVal}</span>
-
+                        <span>{initialValues.tableVal ? initialValues.tableVal.length > 15 ? <span title={initialValues.tableVal}>{initialValues.tableVal.substring(0, 15) + '...'}</span> : initialValues.tableVal : '-'}</span>
                     </Form.Item>
                 </Col>
                 <Col span={12} hidden={type != 3}>
@@ -184,12 +200,12 @@ function EditBlock(props) {
 
                     </Form.Item>
                 </Col>
-                <Col span={24} hidden={type != 3}>
+                <Col span={12} hidden={type != 3}>
                     <Form.Item
                         name="status"
                         label="状态"
                     >
-                        <span>{initialValues.isSolved == 1 ? "已解决" : "未解决"}</span>
+                        <span>{initialValues.isSolved == 1 ? "已处理" : "未处理"}</span>
 
                     </Form.Item>
                 </Col>
@@ -198,7 +214,7 @@ function EditBlock(props) {
                         name="description"
                         label="备注"
                         wrapperCol={{ span: 18 }}
-						rules={[{ max: 200,message:'备注不能超过200个字符' }]}
+                        rules={[{ max: 200, message: '备注不能超过200个字符' }]}
                     >
                         <TextArea
                             autoSize={{ minRows: 5, maxRows: 5 }}
@@ -207,39 +223,46 @@ function EditBlock(props) {
                 </Col>
                 <Col span={24} hidden={type == 3}>
                     {type != 3 ?
-                        <Form.Item label="日期" name="time" rules={[{ required: true }]} labelAlign="right">
-                            <RangePicker
-                            allowClear={false}
-                                placeholder={['开始时间', '结束时间']}
-                                disabledDate={disabledDate}
-                                onCalendarChange={val => setDates(val)}
-                            />
+                        <Form.Item label="日期" >
+                            <Form.Item name="startDate" className='times'>
+                                <DatePicker
+                                    disabledDate={disabledDate}
+                                    placeholder="请选择开始日期"
+                                    onChange={onStartChange}
+                                />
+
+                            </Form.Item>
+                            <span style={{ margin: '0 5px', position: 'relative', top: '2px' }}>-</span>
+                            <Form.Item name="endDate" className='times'>
+                                <DatePicker
+                                    disabledDate={disabledDate}
+                                    placeholder="请选择结束日期"
+                                    onChange={onEndChange}
+                                />
+                            </Form.Item>
                         </Form.Item>
                         : ''}
                 </Col>
                 <Col span={24} hidden={type == 3} style={{ marginTop: 15 }}>
-                    <Form.Item label="住院序号" name="behospitalCode" rules={[{ max: 30,message:'住院序号不能超过30个字符' }]}>
-                        <Input placeholder="请输入" autoComplete='off' onChange={change}/>
+                    <Form.Item label="住院序号" name="behospitalCode" rules={[{ max: 30, message: '住院序号不能超过30个字符' }]} getValueFromEvent={getValueFromEvent}>
+                        <Input placeholder="请输入" autoComplete='off' onChange={change} />
                     </Form.Item>
                 </Col>
                 {
                     type == 1 ?
                         <div style={{ color: '#1690FF' }}>
                             提示:<br />
-                            1、校验时间范围限制为30天,每一天数据量的校验时间约为1分钟。<br />
-                            时间范围以患者入院时间为准。<br />
+                            1、数据校验时间较长,请耐心等待。<br />
                             2、当输入住院序号时,校验将不受时间范围限制。<br />
                         </div>
                         : ''
                 }
-
-
                 <Form.Item wrapperCol={type == 3 ? { offset: 24, span: 16 } : { offset: 8, span: 16 }} style={{ marginTop: 15 }}>
                     <Space size="middle" >
                         <Button htmlType="button" onClick={e => cancel()}>
-                            取消
+                            关闭
                         </Button>
-                        <Button type="primary" htmlType="submit">
+                        <Button type="primary" htmlType="submit" disabled={disable && type == 1}>
                             {type == 1 ? '确定' : '保存'}
                         </Button>
                     </Space>

+ 104 - 67
src/components/FieldProblem/index.js

@@ -1,6 +1,6 @@
 import React, { useState, useEffect, useRef } from 'react';
-import { Form, Input, Button, Table, Row, Col, Select, Modal, DatePicker, Space, message } from 'antd';
-import { getCookie, disabledDate } from '@utils/index'
+import { useSelector, useDispatch } from 'react-redux';
+import { Form, Input, Button, Table, Row, Col, Select, Modal, DatePicker, Space, message, Spin } from 'antd';
 import '@common/common.less';
 import moment from "moment";
 import "moment/locale/zh-cn"
@@ -8,22 +8,18 @@ import './index.less'
 import apiObj from '@api/index';
 import EditProblem from './editProblem';
 import ProblemContext from './problem-context';
-import { getValueFromEvent } from '@utils/index'
+import { getValueFromEvent, disabledDate, getDaysBetween } from '@utils/index'
 const { post, api, xPost } = apiObj;
-const { RangePicker } = DatePicker;
 const { Option } = Select;
 function FieldProblem() {
-    useEffect(() => {
-        getColumnResultPage();
-        getColumnResultNumber(date)
-        getModeName()
-    }, []);
+
     const [logList, setLogList] = useState([]);
     const [total, setTotal] = useState(0);
     const [type, setType] = useState(0);//1新增 2修改
     const [visible, setVisible] = useState(false);
     const [size, setSize] = useState(15);
     const [current, setCurrent] = useState(1);
+    const [loading, setLoading] = useState(false);
     const [probleData, setProbleData] = useState({});
     const [problemDetail, setProblemDetail] = useState(null);//详情数据
     const [title, setTitle] = useState();//正则式数据
@@ -32,38 +28,55 @@ function FieldProblem() {
         pages: 1,
         current: 1,
         size: 15,
-        asc:['isSolved'],
-        desc: ['solveTime'],
+        asc: ['isSolved'],
+        desc: ['solveTime', 'behospitalCode'],
         behospitalStartDate: getCurrentDataFront().split('/').join('-') + ' 00:00:00',
-        behospitalEndDate: getCurrentData().split('/').join('-') + ' 23:23:59'
+        behospitalEndDate: getCurrentData().split('/').join('-') + ' 23:59:59'
     });
     const [form] = Form.useForm();
     let data = {
         pages: 1,
         current: 1,
-        size: size,
-        asc:['isSolved'],
-        desc: ['solveTime'],
+        size: 15,
+        asc: ['isSolved'],
+        desc: ['solveTime', 'behospitalCode'],
         behospitalStartDate: getCurrentDataFront().split('/').join('-') + ' 00:00:00',
-        behospitalEndDate: getCurrentData().split('/').join('-') + ' 23:23:59'
+        behospitalEndDate: getCurrentData().split('/').join('-') + ' 23:59:59'
     }
     let date = {
         behospitalStartDate: getCurrentDataFront().split('/').join('-') + ' 00:00:00',
-        behospitalEndDate: getCurrentData().split('/').join('-') + ' 23:23:59'
+        behospitalEndDate: getCurrentData().split('/').join('-') + ' 23:59:59'
     }
+    const { problemNum } = useSelector((state) => {
+        return state.userInfo;
+    });
+    useEffect(() => {
+        setCurrent(1)
+        setSize(15)
+        setParams(data)
+        form.resetFields();
+        getColumnResultPage(data);
+        getColumnResultNumber(date)
+        getModeName()
+    }, [problemNum]);
     //表格数据
     function getColumnResultPage(param) {
+        const hide = message.loading('加载中...', 0);
         post(api.getColumnResultPage, param || params).then((res) => {
+            hide()
             if (res.data.code === 200) {
                 const data = res.data.data;
                 setLogList(data.records);
                 setTotal(data.total)
+                setLoading(false)
             }
+        }).catch((err) => {
+            hide()
         })
     }
     function getColumnResultNumber(param) {
         post(api.getColumnResultNumber, {
-            hospitalId: getCookie('hospitalId'),
+            hospitalId: localStorage.getItem('hospitalId'),
             ...param
         }).then((res) => {
             if (res.data.code === 200) {
@@ -85,7 +98,6 @@ function FieldProblem() {
     function onSearch(val) {
         getModeName(val)
     }
-    //修改
     function showModal(title, row, type) {
         setVisible(true)
         setProblemDetail(row)
@@ -98,6 +110,9 @@ function FieldProblem() {
         setProblemDetail(null)
     }
     function userChange() {
+        params.current = 1
+        setParams(params)
+        setCurrent(1)
         setVisible(false)
         getColumnResultPage();
         getColumnResultNumber({ behospitalStartDate: params.behospitalStartDate, behospitalEndDate: params.behospitalEndDate })
@@ -109,7 +124,6 @@ function FieldProblem() {
         setSize(pageSize)
         setCurrent(current)
         setParams(params)
-        getColumnResultPage()
     }
     function changePage(page, pageSize) {
         params.current = page
@@ -119,13 +133,18 @@ function FieldProblem() {
         getColumnResultPage()
     }
     const onFinish = (value) => {
-        if (value.time) {
-            value.behospitalStartDate = moment(value.time[0]).format('YYYY-MM-DD 00:00:00');
-            value.behospitalEndDate = moment(value.time[1]).format('YYYY-MM-DD 23:23:59');
+        value.behospitalStartDate = moment(value.behospitalStartDate).format('YYYY-MM-DD 00:00:00');
+        value.behospitalEndDate = moment(value.behospitalEndDate).format('YYYY-MM-DD 23:59:59');
+        if (value.behospitalStartDate > value.behospitalEndDate) {
+            message.warning('开始时间不能大于结束时间');
+            return
+        } else if (getDaysBetween(value.behospitalStartDate, value.behospitalEndDate) > 364) {
+            message.warning('开始时间与结束时间相差不能超过一年');
+            return
         }
-        delete value.time
+        params.current = 1
         const param = {
-            ...data,
+            ...params,
             ...value,
         }
         setCurrent(1)
@@ -135,6 +154,7 @@ function FieldProblem() {
     };
     const onReset = () => {
         setCurrent(1)
+        setSize(15)
         setParams(data)
         form.resetFields();
         getColumnResultPage(data);
@@ -152,8 +172,16 @@ function FieldProblem() {
     const columns = [
         { title: '序号', dataIndex: 'index', render: (text, record, index) => (current - 1) * params.size + index + 1 },
         { title: '住院序号', dataIndex: 'behospitalCode', key: 'behospitalCode' },
-        { title: '文书编号', dataIndex: 'hosptialDatatmpCode', key: 'hosptialDatatmpCode' },
-        { title: '文书标题', dataIndex: 'hosptialDatatmpName', key: 'hosptialDatatmpName' },
+        {
+            title: '文书编号', dataIndex: 'hosptialDatatmpCode', key: 'hosptialDatatmpCode', render: (text, record) => {
+                return record.hosptialDatatmpCode || '-';
+            }
+        },
+        {
+            title: '文书标题', dataIndex: 'hosptialDatatmpName', key: 'hosptialDatatmpName', render: (text, record) => {
+                return record.hosptialDatatmpName || '-';
+            }
+        },
         { title: '质控模块名称', dataIndex: 'modeName', key: 'modeName' },
         { title: '表名称(中文)', dataIndex: 'tableCname', key: 'tableCname' },
         { title: '表名称(英文)', dataIndex: 'tableEname', key: 'tableEname' },
@@ -161,7 +189,7 @@ function FieldProblem() {
         { title: '字段名称(英文)', dataIndex: 'columnEname', key: 'columnEname' },
         {
             title: '上传字段值', dataIndex: 'tableVal', key: 'tableVal', render: (text, record) => {
-                return record.tableVal || '-';
+                return record.tableVal ? record.tableVal.length > 8 ? <span title={record.tableVal}>{record.tableVal.substring(0, 8) + '...'}</span> : record.tableVal : '-';
             }
         },
         {
@@ -175,8 +203,8 @@ function FieldProblem() {
             }
         },
         {
-            title: '更新时间', dataIndex: 'solveTime', key: 'solveTime', render: (text, record) => {
-                return record.solveTime || '-';
+            title: '更新时间', dataIndex: 'gmtModified', key: 'gmtModified', render: (text, record) => {
+                return record.gmtModified || '-';
             }
         },
         {
@@ -201,59 +229,67 @@ function FieldProblem() {
                     name="normal_login"
                     onFinish={onFinish}
                     initialValues={{
-                        isSolved: '', type: '', time: [moment(getCurrentDataFront()), moment(getCurrentData())]
+                        isSolved: '', type: '', behospitalStartDate: moment(getCurrentDataFront()), behospitalEndDate: moment(getCurrentData())
                     }}
                 >
                     <Row gutter={24}>
-                        <Col span={6} key={0}>
-                            <Form.Item label="日期" name="time">
-                                <RangePicker
-                                    allowClear={false}
-                                    disabledDate={disabledDate}
-                                    placeholder={['开始时间', '结束时间']}
-                                />
+                        <Col span={7} key={0}>
+                            <Form.Item label="日期" >
+                                <Form.Item name="behospitalStartDate" className='times'>
+                                    <DatePicker
+                                        allowClear={false}
+                                        disabledDate={disabledDate}
+                                        placeholder="请选择开始日期"
+                                    />
+
+                                </Form.Item>
+                                <span style={{ margin: '0 5px', position: 'relative', top: '2px' }}>-</span>
+                                <Form.Item name="behospitalEndDate" className='times'>
+                                    <DatePicker
+                                        allowClear={false}
+                                        disabledDate={disabledDate}
+                                        placeholder="请选择结束日期"
+                                    />
+                                </Form.Item>
                             </Form.Item>
                         </Col>
                         <Col span={5} key={1}>
                             <Form.Item label="住院序号" name="behospitalCode" getValueFromEvent={getValueFromEvent}>
-                                <Input placeholder="住院序号" autoComplete='off' allowClear maxLength='30' />
+                                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
                             </Form.Item>
                         </Col>
                         <Col span={5} key={2}>
                             <Form.Item label="文书编号" name="hosptialDatatmpCode" getValueFromEvent={getValueFromEvent}>
-                                <Input placeholder="文书编号" autoComplete='off' allowClear maxLength='30' />
+                                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
                             </Form.Item>
                         </Col>
                         <Col span={5} key={3}>
                             <Form.Item label="文书标题" name="hosptialDatatmpName" getValueFromEvent={getValueFromEvent}>
-                                <Input placeholder="文书标题" autoComplete='off' allowClear maxLength='30' />
-                            </Form.Item>
-                        </Col>
-                        <Col span={5} key={4}>
-                            <Form.Item label="质控模块名称" name="modeName" >
-                                <Select showSearch allowClear onSearch={onSearch} placeholder="请选择">
-                                    {modeList.map((item, i) => {
-                                        return (
-                                            <Option value={item} key={i}>{item}</Option>
-                                        )
-                                    })}
-                                </Select>
+                                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
                             </Form.Item>
                         </Col>
-                        <Col span={5} key={5}>
-                            <Form.Item label="问题类型" name="type">
-                                <Select
-                                    placeholder="请选择"
-                                    allowClear
-                                >
-                                    <Option value="" key={0}>全部</Option>
-                                    <Option value="1" key={1}>数据缺失</Option>
-                                    <Option value="2" key={2}>非标准值</Option>
-                                    <Option value="3" key={3}>正则校验失败</Option>
-                                </Select>
-                            </Form.Item>
-                        </Col>
-                        <Col span={5} key={7}>
+                        <Form.Item label="质控模块名称" name="modeName" >
+                            <Select showSearch allowClear onSearch={onSearch} placeholder="请选择" style={{ width: '159px' }}>
+                                {modeList.map((item, i) => {
+                                    return (
+                                        <Option value={item} key={i}>{item}</Option>
+                                    )
+                                })}
+                            </Select>
+                        </Form.Item>
+                        <Form.Item label="问题类型" name="type" style={{ marginLeft: '15px' }}>
+                            <Select
+                                placeholder="请选择"
+                                allowClear
+                                style={{ width: '159px' }}
+                            >
+                                <Option value="" key={0}>全部</Option>
+                                <Option value="1" key={1}>数据缺失</Option>
+                                <Option value="2" key={2}>非标准值</Option>
+                                <Option value="3" key={3}>正则校验失败</Option>
+                            </Select>
+                        </Form.Item>
+                        <Col span={4} key={7}>
                             <Form.Item label="状态" name="isSolved">
                                 <Select
                                     placeholder="请选择"
@@ -283,7 +319,7 @@ function FieldProblem() {
                 <div className="table-header">
                     <h2 className="table-title">字段校验问题明细</h2>
                     <Space size="middle">
-                        <Button type="primary" onClick={() => showModal('数据校验设置', { behospitalCode: '', time: '' }, 1)}>数据校验</Button>
+                        <Button type="primary" onClick={() => showModal('数据校验设置', { behospitalCode: '', startDate: null,endDate:null }, 1)}>数据校验</Button>
                     </Space>
 
                 </div>
@@ -341,6 +377,7 @@ function FieldProblem() {
                         total: total,
                         showQuickJumper:true,
                     }} />
+
             </div>
 
             {visible && problemDetail ?

+ 56 - 27
src/components/FieldRules/addRules.js

@@ -12,7 +12,7 @@ const { Option } = Select;
 const { TextArea } = Input;
 function AddRules(props) {
     const [form] = Form.useForm();
-    const { back,userChange } = props;
+    const { back, userChange } = props;
     const [visible, setVisible] = useState(false);
     const { type } = useContext(FiledContext);
     function handleOk() {
@@ -61,14 +61,18 @@ function ContentForm(props) {
     const [tableList, setTableList] = useState([]);//表名称
     const [colList, setColList] = useState([[]]);//字段名称
     const [list, setList] = useState([]);
+    const [tableCname, setTableCname] = useState();
+    const [tableEname, setTableEname] = useState();
+    const [columnCname, setcolumnCname] = useState();
+    const [columnEname, setcolumnEname] = useState();
     const [disable, seDisable] = useState([true]);
     const { type, detail } = useContext(FiledContext);
     const { back, form, cancel } = props;
     const initialValues = detail
+    console.log(type);
     const vilidateRules = {
         required: '${label}不能为空!',
     };
-    console.log(initialValues);
     //获取正则式名称
     function getRegular(name) {
         const param = {
@@ -81,13 +85,13 @@ function ContentForm(props) {
             }
         })
     }
-    function getAddUpColumnName(tableCname, tableEname, columnCname, columnEname) {
+    function getAddUpColumnName() {
         post(api.getAddUpColumnName, {
             tableCname: tableCname,
             tableEname: tableEname,
+            columnId: type == 2 ? detail.columnId : null,
             columnCname: columnCname,
             columnEname: columnEname,
-
         }).then((res) => {
             if (res.data.code === 200) {
                 const data = res.data.data;
@@ -114,7 +118,7 @@ function ContentForm(props) {
         })
     }
     //表选择
-    function tablechange(i, value, options,ins) {
+    function tablechange(i, value, options, ins) {
         const formData = form.getFieldsValue();
         if (value) {
             colList[i] = list[options.key].getColumnNameDTOList
@@ -126,28 +130,49 @@ function ContentForm(props) {
             disable[i] = true
             seDisable([...disable])
             setColList([...colList])
+            getAddUpColumnName()
         }
         let columnList = formData.columnList;
-        if(ins == 1){
-            columnList[i].tableEname = options.val
-        }else{
-            columnList[i].tableCname = options.val
+        if (ins == 1) {
+            if (value) {
+                columnList[i].tableEname = options.val
+            } else {
+                columnList[i].tableEname = undefined
+            }
+        } else {
+            if (value) {
+                columnList[i].tableCname = options.val
+            } else {
+                columnList[i].tableCname = undefined
+            }
         }
         columnList[i].columnCname = undefined
         columnList[i].columnEname = undefined
         form.setFieldsValue({
             columnList: columnList
         });
-        console.log(form.getFieldsValue());
     }
-    function colchange(i, value, options,ins) {
+    function colchange(i, value, options, ins) {
         const formData = form.getFieldsValue();
         let columnList = formData.columnList;
-        columnList[i].id = options.key
-        if(ins == 1){
-            columnList[i].columnEname = options.val
-        }else{
-            columnList[i].columnCname = options.val
+        if (value) {
+            columnList[i].id = options.key
+        } else {
+            columnList[i].id = undefined
+        }
+
+        if (ins == 1) {
+            if (value) {
+                columnList[i].columnEname = options.val
+            } else {
+                columnList[i].columnEname = undefined
+            }
+        } else {
+            if (value) {
+                columnList[i].columnCname = options.val
+            } else {
+                columnList[i].columnCname = undefined
+            }
         }
         form.setFieldsValue({
             columnList: columnList
@@ -155,19 +180,23 @@ function ContentForm(props) {
     }
     //表名称搜索(中文)
     function cnameSearch(val) {
-        getAddUpColumnName(val, '', '', '')
+        setTableCname(val)
+        getAddUpColumnName()
     }
     //表名称搜索(英文)
     function enameSearch(val) {
-        getAddUpColumnName('', val, '', '')
+        setTableEname(val)
+        getAddUpColumnName()
     }
     //字段名称搜索(中文)
     function colmeSearch(val) {
-        getAddUpColumnName(val, '', '', '')
+        setcolumnCname(val)
+        getAddUpColumnName()
     }
     //字段名称搜索(英文)
     function coleneSearch(val) {
-        getAddUpColumnName('', val, '', '')
+        setcolumnEname(val)
+        getAddUpColumnName()
     }
     //表字段添加
     function modifyData(i) {
@@ -192,7 +221,7 @@ function ContentForm(props) {
         setColList([...colList])
         disable[index] = true
         seDisable([...disable])
-        
+
     }
     //标准值维护
     function modifyStand(i) {
@@ -294,7 +323,7 @@ function ContentForm(props) {
                                     <div className='item'>
                                         <div className='item-box'>
                                             <Form.Item label="表名称(中文)" rules={[{ required: true }]} style={{ width: '50%' }} name={['columnList', i, 'tableCname']} labelAlign="right" >
-                                                <Select allowClear showSearch onChange={(value, option) => tablechange(i, value, option,1)} onSearch={cnameSearch} style={{ width: 160 }} placeholder="请选择">
+                                                <Select allowClear showSearch onChange={(value, option) => tablechange(i, value, option, 1)} onSearch={cnameSearch} style={{ width: 160 }} placeholder="请选择" disabled={type ==2}>
                                                     {tableList.map((item) => {
                                                         return (
                                                             <Option value={item.tableCname} val={item.tableEname} key={item.index}>{item.tableCname}</Option>
@@ -303,7 +332,7 @@ function ContentForm(props) {
                                                 </Select>
                                             </Form.Item>
                                             <Form.Item label="表名称(英文)" rules={[{ required: true }]} name={['columnList', i, 'tableEname']} labelAlign="right">
-                                                <Select allowClear showSearch onChange={(value, option) => tablechange(i, value, option,2)} onSearch={enameSearch} style={{ width: 160 }} placeholder="请选择" >
+                                                <Select allowClear showSearch onChange={(value, option) => tablechange(i, value, option, 2)} onSearch={enameSearch} style={{ width: 160 }} placeholder="请选择" disabled={type ==2}>
                                                     {tableList.map((item) => {
                                                         return (
                                                             <Option value={item.tableEname} val={item.tableCname} key={item.index}>{item.tableEname}</Option>
@@ -314,7 +343,7 @@ function ContentForm(props) {
                                         </div>
                                         <div className='item-box'>
                                             <Form.Item label="字段名称(中文)" rules={[{ required: true }]} style={{ width: '50%' }} name={['columnList', i, 'columnCname']} labelAlign="right">
-                                                <Select allowClear showSearch onChange={(value, option) => colchange(i, value, option,1)} onSearch={colmeSearch} style={{ width: 160 }} placeholder="请选择" disabled={disable[i]}>
+                                                <Select allowClear showSearch onChange={(value, option) => colchange(i, value, option, 1)} onSearch={colmeSearch} style={{ width: 160 }} placeholder="请选择" disabled={disable[i] || type == 2}>
                                                     {colList[i].map((item) => {
                                                         return (
                                                             <Option value={item.columnCname} val={item.columnEname} key={item.id} index={i}>{item.columnCname}</Option>
@@ -323,7 +352,7 @@ function ContentForm(props) {
                                                 </Select>
                                             </Form.Item>
                                             <Form.Item label="字段名称(英文)" rules={[{ required: true }]} name={['columnList', i, 'columnEname']} labelAlign="right">
-                                                <Select allowClear showSearch onChange={(value, option) => colchange(i, value, option,2)} onSearch={coleneSearch} style={{ width: 160 }} placeholder="请选择" disabled={disable[i]}>
+                                                <Select allowClear showSearch onChange={(value, option) => colchange(i, value, option, 2)} onSearch={coleneSearch} style={{ width: 160 }} placeholder="请选择" disabled={disable[i] || type == 2}>
                                                     {colList[i].map((item) => {
                                                         return (
                                                             <Option value={item.columnEname} val={item.columnCname} key={item.id} index={i}>{item.columnEname}</Option>
@@ -336,7 +365,7 @@ function ContentForm(props) {
                                             </Form.Item>
                                         </div>
                                     </div>
-                                    <img onClick={() => modifyData(i)} src={i == 0 ? add : del} />
+                                    <img onClick={() => modifyData(i)} src={i == 0 ? add : del} hidden={type == 2} />
                                 </div>
 
                             )
@@ -387,7 +416,7 @@ function ContentForm(props) {
                 </Form.Item>
             </Form>
             <div className="button-box">
-                <Button onClick={back}>取消</Button>
+                <Button onClick={back}>关闭</Button>
                 <Button onClick={handleSave} type='primary'>保存</Button>
             </div>
         </>

+ 63 - 46
src/components/FieldRules/index.js

@@ -1,18 +1,16 @@
 import React, { useState, useEffect, useRef } from 'react';
-import { Form, Input, Button, Table, Row, Col, Select, Modal, DatePicker, Space, message } from 'antd';
-import { DeleteOutlined, PlusOutlined } from '@ant-design/icons';
+import { useSelector, useDispatch } from 'react-redux';
+import { Form, Input, Button, Table, Row, Col, Select, Modal, Spin, Space, message } from 'antd';
+import { PlusOutlined } from '@ant-design/icons';
 import '@common/common.less';
 import apiObj from '@api/index';
 import AddRules from './addRules';
 import FiledContext from './filed-context';
 import { getValueFromEvent } from '@utils/index'
 const { post, api, xPost } = apiObj;
-const { RangePicker } = DatePicker;
 const { Option } = Select;
 
 function FieldRules() {
-
-
     const [addVisible, setAddVisible] = useState(false);         //新增页面显示
     const [logList, setLogList] = useState([]);
     const [total, setTotal] = useState(0);
@@ -20,6 +18,7 @@ function FieldRules() {
     const [visible, setVisible] = useState(false);
     const [size, setSize] = useState(15);
     const [current, setCurrent] = useState(1);
+    const [loading, setLoading] = useState(false);
     const [regularList, setRegularList] = useState([]);//正则式数据
     const [selectedRowKeys, setSelectedRowKeys] = useState([]);
     const [tableList, setTableList] = useState([]);//表名称
@@ -38,23 +37,36 @@ function FieldRules() {
     let data = {
         pages: 1,
         current: 1,
-        size: size,
+        size: 15,
         desc: ['gmt_create']
     }
+    const { rulerNum } = useSelector((state) => {
+        return state.userInfo;
+    });
     useEffect(() => {
+        setCurrent(1)
+        setSize(15)
+        setParams(data)
+        form.resetFields();
         getRegular()
         getTableName()
         getColumnName('', '', '', '')
-        getColumnVerifyPage();
-    }, []);
+        getColumnVerifyPage(data);
+        setSelectedRowKeys([])
+        setDisable(true)
+    }, [rulerNum]);
     //表格数据
     function getColumnVerifyPage(param) {
+        const hide = message.loading('加载中...', 0);
         post(api.getColumnVerifyPage, param || params).then((res) => {
+            hide()
             if (res.data.code === 200) {
                 const data = res.data.data;
                 setLogList(data.records);
                 setTotal(data.total)
             }
+        }).catch((err) => {
+            hide()
         })
     }
     //获取正则式名称
@@ -107,11 +119,13 @@ function FieldRules() {
     }
     //字段名称搜索(中文)
     function colmeSearch(val) {
-        getColumnName(val, '', tableCname, '')
+        const formData = form.getFieldsValue();
+        getColumnName(val, '', formData.tableCname, '')
     }
     //字段名称搜索(英文)
     function coleneSearch(val) {
-        getColumnName('', val, '', tableEname)
+        const formData = form.getFieldsValue();
+        getColumnName('', val, '', formData.tableEname)
     }
     //正则式名称搜索
     function onSearch(val) {
@@ -122,13 +136,12 @@ function FieldRules() {
         post(api.delColumnVerify, { ids: selectedRowKeys }).then((res) => {
             if (res.data.code === 200) {
                 //刷新列表
-                const totalPage = Math.ceil((total - 1) / 15);
+                const totalPage = Math.ceil((total - selectedRowKeys.length) / 15);
                 //将当前页码与删除数据之后的总页数进行比较,避免当前页码不存在
                 const pagenum =
                     params.current > totalPage ? totalPage : params.current;
                 //避免pagenum变为0
                 params.current = pagenum < 1 ? 1 : pagenum;
-                console.log(pagenum < 1 ? 1 : pagenum);
                 setParams(params)
                 getColumnVerifyPage()
                 message.success(res.data.message);
@@ -137,6 +150,7 @@ function FieldRules() {
             }
         });
         showDelModal(false);
+        setSelectedRowKeys([])
     }
     //删除弹窗确认
     function showDelModal(flag) {
@@ -211,8 +225,6 @@ function FieldRules() {
         setSize(pageSize)
         setCurrent(current)
         setParams(params)
-        getColumnVerifyPage()
-        setSelectedRowKeys([])
     }
     function changePage(page, pageSize) {
         params.current = page
@@ -226,13 +238,13 @@ function FieldRules() {
         setSelectedRowKeys(selectedRowKeys);
     };
     function tableCnameChange(value, option) {
-        const formData = form.getFieldsValue();
         setTableCname(value)
-
         getColumnName('', '', value, '')
         if (value) {
             form.setFieldsValue({
-                tableEname: option.val
+                tableEname: option.val,
+                columnCname: undefined,
+                columnEname: undefined,
             });
             setDisable(false)
         } else {
@@ -242,6 +254,7 @@ function FieldRules() {
                 columnEname: undefined,
             })
             setDisable(true)
+            getTableName()
         }
 
     }
@@ -250,7 +263,9 @@ function FieldRules() {
         getColumnName('', '', '', value)
         if (value) {
             form.setFieldsValue({
-                tableCname: option.val
+                tableCname: option.val,
+                columnCname: undefined,
+                columnEname: undefined,
             });
             setDisable(false)
         } else {
@@ -260,6 +275,7 @@ function FieldRules() {
                 columnEname: undefined,
             })
             setDisable(true)
+            getTableName()
         }
     }
     function colchange(value, option, ins) {
@@ -272,6 +288,7 @@ function FieldRules() {
                 form.setFieldsValue({
                     columnEname: undefined
                 })
+                getColumnName('', '', '', '')
             }
         } else {
             if (value) {
@@ -282,6 +299,7 @@ function FieldRules() {
                 form.setFieldsValue({
                     columnCname: undefined
                 })
+                getColumnName('', '', '', '')
             }
         }
     }
@@ -297,8 +315,9 @@ function FieldRules() {
         setSelectedRowKeys([])
     }
     const onFinish = (value) => {
+        params.current = 1
         const param = {
-            ...data,
+            ...params,
             ...value,
         }
         setCurrent(1)
@@ -308,10 +327,15 @@ function FieldRules() {
     };
     const onReset = () => {
         setCurrent(1)
+        setSize(15)
         setParams(data)
         form.resetFields();
+        getRegular()
+        getTableName()
+        getColumnName('', '', '', '')
         getColumnVerifyPage(data);
         setSelectedRowKeys([])
+        setDisable(true)
     };
     const columns = [
         { title: '序号', dataIndex: 'index', render: (text, record, index) => (current - 1) * params.size + index + 1, width: 60 },
@@ -368,9 +392,9 @@ function FieldRules() {
                     initialValues={{ lossType: '', lossWay: '', isRequired: '' }}
                 >
                     <Row gutter={24}>
-                        <Col span={6} key={0}>
+                        <Space size="middle">
                             <Form.Item label="表名称(中文)" name="tableCname">
-                                <Select showSearch allowClear onChange={(value, option) => tableCnameChange(value, option)} onSearch={cnameSearch} placeholder="请选择">
+                                <Select showSearch allowClear onChange={(value, option) => tableCnameChange(value, option)} onSearch={cnameSearch} style={{ width: '159px' }} placeholder="请选择">
                                     {tableList.map((item) => {
                                         return (
                                             <Option value={item.tableCname} val={item.tableEname} key={item.tableCname}>{item.tableCname}</Option>
@@ -378,10 +402,9 @@ function FieldRules() {
                                     })}
                                 </Select>
                             </Form.Item>
-                        </Col>
-                        <Col span={6} key={1}>
+
                             <Form.Item label="表名称(英文)" name="tableEname">
-                                <Select showSearch allowClear onChange={(value, option) => tableEnameChange(value, option)} onSearch={enameSearch} placeholder="请选择">
+                                <Select showSearch allowClear onChange={(value, option) => tableEnameChange(value, option)} onSearch={enameSearch} style={{ width: '159px' }} placeholder="请选择">
                                     {tableList.map((item) => {
                                         return (
                                             <Option value={item.tableEname} val={item.tableCname} key={item.tableEname}>{item.tableEname}</Option>
@@ -389,10 +412,8 @@ function FieldRules() {
                                     })}
                                 </Select>
                             </Form.Item>
-                        </Col>
-                        <Col span={6} key={2}>
                             <Form.Item label="字段名称(中文)" name="columnCname">
-                                <Select showSearch allowClear onChange={(value, option) => colchange(value, option, 1)} onSearch={colmeSearch} placeholder="请选择" disabled={disable}>
+                                <Select showSearch allowClear onChange={(value, option) => colchange(value, option, 1)} onSearch={colmeSearch} style={{ width: '159px' }} placeholder="请选择" disabled={disable}>
                                     {colList.map((item, i) => {
                                         return (
                                             <Option value={item.columnCname} val={item.columnEname} key={item.columnCname}>{item.columnCname}</Option>
@@ -400,10 +421,8 @@ function FieldRules() {
                                     })}
                                 </Select>
                             </Form.Item>
-                        </Col>
-                        <Col span={6} key={3}>
                             <Form.Item label="字段名称(英文)" name="columnEname">
-                                <Select showSearch allowClear onChange={(value, option) => colchange(value, option, 2)} onSearch={coleneSearch} placeholder="请选择" disabled={disable}>
+                                <Select showSearch allowClear onChange={(value, option) => colchange(value, option, 2)} onSearch={coleneSearch} placeholder="请选择" style={{ width: '159px' }} disabled={disable}>
                                     {colList.map((item, i) => {
                                         return (
                                             <Option value={item.columnEname} val={item.columnCname} key={item.columnEname}>{item.columnEname}</Option>
@@ -411,7 +430,7 @@ function FieldRules() {
                                     })}
                                 </Select>
                             </Form.Item>
-                        </Col>
+                        </Space>
                         <Col span={5} key={4}>
                             <Form.Item label="是否必填" name="isRequired">
                                 <Select
@@ -426,20 +445,18 @@ function FieldRules() {
                         </Col>
                         <Col span={5} key={5}>
                             <Form.Item label="标准值" name="standardValue" getValueFromEvent={getValueFromEvent}>
-                                <Input placeholder="标准值" autoComplete='off' allowClear maxLength='30' />
-                            </Form.Item>
-                        </Col>
-                        <Col span={5} key={6}>
-                            <Form.Item label="正则名称" name="regularName">
-                                <Select showSearch allowClear onSearch={onSearch} placeholder="请选择">
-                                    {regularList.map((item) => {
-                                        return (
-                                            <Option value={item.name} key={item.id}>{item.name}</Option>
-                                        )
-                                    })}
-                                </Select>
+                                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
                             </Form.Item>
                         </Col>
+                        <Form.Item label="正则名称" name="regularName">
+                            <Select showSearch allowClear onSearch={onSearch} placeholder="请选择" style={{ width: '159px' }}>
+                                {regularList.map((item) => {
+                                    return (
+                                        <Option value={item.name} key={item.id}>{item.name}</Option>
+                                    )
+                                })}
+                            </Select>
+                        </Form.Item>
                         <Col span={6} key={7}>
                             <Form.Item>
                                 <Button type="primary" htmlType="submit">
@@ -463,7 +480,6 @@ function FieldRules() {
                     </Space>
 
                 </div>
-
                 <Table
                     columns={columns}
                     rowSelection={rowSelection}
@@ -481,11 +497,12 @@ function FieldRules() {
                         total: total,
                         showQuickJumper:true,
                     }} />
+
             </div>
             <Modal
                 title="删除字段校验规则"
                 okText='确定'
-                cancelText='取消'
+                cancelText='关闭'
                 width={400}
                 visible={visible}
                 onOk={delColumnVerify}
@@ -493,7 +510,7 @@ function FieldRules() {
                 onCancel={() => showDelModal(false)}
                 maskClosable={false}
             >
-                <p>字段校验规则删除后将无法恢复,确认删除这{selectedRowKeys.length}条变更记录?</p>
+                <p>字段校验规则删除后将无法恢复,确认删除这{selectedRowKeys.length}条数据?</p>
             </Modal>
         </div >
     )

+ 1 - 1
src/components/MedicalTeam/index.js

@@ -143,7 +143,7 @@ function MedicalTeam() {
 	const onFinish = (value) => {
 		if (value.time) {
 			value.startDate = moment(value.time[0]).format('YYYY-MM-DD 00:00:00');
-			value.endDate = moment(value.time[1]).format('YYYY-MM-DD 23:23:59');
+			value.endDate = moment(value.time[1]).format('YYYY-MM-DD 23:59:59');
 		}
 		const param = {
 			...data,

+ 3 - 3
src/components/OrgManager/index.js

@@ -6,7 +6,7 @@ import AddSubOrg from './AddSubOrg';
 import './index.less';
 import apiObj from '@api/index';
 import OrgContext from './org-context';
-import { pickCheckedTreeIds, getValueFromEvent, getCookie } from '@utils/index'
+import { pickCheckedTreeIds, getValueFromEvent } from '@utils/index'
 
 const { post, api, xPost } = apiObj;
 const { Option } = Select;
@@ -18,7 +18,7 @@ function OrgManager() {
         //     setTableHt(window.innerHeight - 260);
         // });
         //刷新列表
-        setOrgType(getCookie('hosType'))
+        setOrgType(localStorage.getItem('hosType'))
         getTableData();
         //解绑事件
         // return function clear() {
@@ -39,7 +39,7 @@ function OrgManager() {
     const [orgName, setOrgName] = useState('');      //上级组织名称,新增修改用
     const [orgDetail, setOrgDetail] = useState(null);
     const [typeId, setTypeId] = useState('');
-    const [orgType, setOrgType] = useState(getCookie('hosType'));
+    const [orgType, setOrgType] = useState(localStorage.getItem('hosType'));
     // const [hisTypeList, setHisTypeList] = useState([]);
     const [type, setType] = useState('');
     //从state中取出状态、类型列表

+ 27 - 12
src/components/RegularManage/addRegular.js

@@ -12,26 +12,38 @@ function EditBlock(props) {
     }, []);
     const [form] = Form.useForm();
     const [visible, setVisible] = useState(false);
+    const [title, setTitle] = useState();
+    const [data, setData] = useState(null);
     const { regularDetail, type, flag } = useContext(RegularContext);
     const initialValues = regularDetail;
     const onFinish = values => {
-        console.log(flag);
         if (flag == 1) {
+            setData(values)
             setVisible(true)
+            setTitle('该正则式关联字段校验规则,修改后将同步更新,确认修改?')
         } else {
             addRegular(values)
         }
+
     };
     //添加
-    function addRegular(params) {
+    function addRegular(values) {
         let url
+        let param
         if (type == 1) {
             url = api.addRegular
+            param = values
         } else {
+            if (flag == 1) {
+                param = data
+            } else {
+                param = values
+            }
+
             url = api.upRegularById
-            params.id = regularDetail.id
+            param.id = regularDetail.id
         }
-        post(url, params).then((res) => {
+        post(url, param).then((res) => {
             if (res.data.code === 200) {
                 props.userChange()
                 message.success(res.data.message);
@@ -45,6 +57,9 @@ function EditBlock(props) {
     function cancel() {
         props.cancel()
     }
+    function onCancel() {
+        setVisible(false)
+    }
     return (
         <>
             <Form
@@ -56,16 +71,16 @@ function EditBlock(props) {
                 onFinish={onFinish}
                 initialValues={initialValues}
             >
-                <Form.Item label="正则式名称" name="name" getValueFromEvent={getValueFromEvent} rules={[{ required: true,message:'请输入正则式名称'},{ max: 30,message:'正则式名称不能超过30个字符' },{ pattern: /^[^\s]*$/,message: '请输入正则式名称',}]}>
-                    <Input placeholder="请输入" autoComplete='off'/>
+                <Form.Item label="正则式名称" name="name" getValueFromEvent={getValueFromEvent} rules={[{ required: true, message: '请输入正则式名称' }, { max: 30, message: '正则式名称不能超过30个字符' }]}>
+                    <Input placeholder="请输入" autoComplete='off' />
                 </Form.Item>
-                <Form.Item label="正则式值" name="val" getValueFromEvent={getValueFromEvent} rules={[{ required: true,message:'请输入正则式值'},{ max: 512,message:'正则式值不能超过512个字符' },{ pattern: /^[^\s]*$/,message: '请输入正则式值',}]}>
+                <Form.Item label="正则式值" name="val" getValueFromEvent={getValueFromEvent} rules={[{ required: true, message: '请输入正则式值' }, { max: 512, message: '正则式值不能超过512个字符' }]}>
                     <TextArea
                         autoSize={{ minRows: 5, maxRows: 5 }}
                         placeholder="请输入"
                     />
                 </Form.Item>
-                <Form.Item label="说明" name="description" getValueFromEvent={getValueFromEvent} rules={[{ max: 200,message:'说明不能超过200个字符' }]}>
+                <Form.Item label="说明" name="description" getValueFromEvent={getValueFromEvent} rules={[{ max: 200, message: '说明不能超过200个字符' }]}>
                     <TextArea
                         autoSize={{ minRows: 5, maxRows: 5 }}
                         placeholder="请输入"
@@ -74,7 +89,7 @@ function EditBlock(props) {
                 <Form.Item wrapperCol={{ offset: 8, span: 16 }} style={{ marginTop: 15 }}>
                     <Space size="middle" >
                         <Button htmlType="button" onClick={e => cancel()}>
-                            取消
+                            关闭
                         </Button>
                         <Button type="primary" htmlType="submit">
                             保存
@@ -85,15 +100,15 @@ function EditBlock(props) {
             <Modal
                 title="提示"
                 okText='确定'
-                cancelText='取消'
+                cancelText='关闭'
                 width={400}
                 visible={visible}
                 onOk={addRegular}
                 /*confirmLoading={confirmLoading}*/
-                onCancel={() => cancel()}
+                onCancel={onCancel}
                 maskClosable={false}
             >
-                <p>该正则式关联字段校验规则,修改后将同步更新,确认修改?</p>
+                <p>{title}</p>
             </Modal>
         </>
     );

+ 44 - 18
src/components/RegularManage/index.js

@@ -1,7 +1,7 @@
 import React, { useState, useEffect, useRef } from 'react';
-import { Form, Input, Button, Table, Row, Col, Select, Modal, DatePicker, Space } from 'antd';
-import { DeleteOutlined, PlusOutlined } from '@ant-design/icons';
-import { getCookie } from '@utils/index'
+import { useSelector } from 'react-redux';
+import { Form, Input, Button, Table, Row, Col, Spin, Modal, Space } from 'antd';
+import { PlusOutlined } from '@ant-design/icons';
 import { getValueFromEvent } from '@utils/index'
 import '@common/common.less';
 import apiObj from '@api/index';
@@ -9,17 +9,14 @@ import AddRegular from './addRegular';
 import RegularContext from './regular-context';
 import { message } from "antd/lib/index";
 const { post, api, xPost } = apiObj;
-const { RangePicker } = DatePicker;
-const { Option } = Select;
 function RegularManage() {
-    useEffect(() => {
-        getRegularPage();
-    }, []);
+
     const [regularList, setRegularList] = useState([]);
     const [total, setTotal] = useState(0);
     const [title, setTitle] = useState();
     const [tip, setTip] = useState();
     const [flag, setFlag] = useState(0);
+    const [loading, setLoading] = useState(false);
     const [type, setType] = useState(0);//1新增 2修改
     const [visible, setVisible] = useState(false);
     const [delvisible, setDelVisible] = useState(false);
@@ -37,17 +34,46 @@ function RegularManage() {
     let data = {
         pages: 1,
         current: 1,
-        size: size,
+        size: 15,
         desc: ['dri.gmt_create']
     }
+    const { regularNum } = useSelector((state) => {
+        return state.userInfo;
+    });
+    useEffect(() => {
+        setCurrent(1)
+        setSize(15)
+        setParams(data)
+        form.resetFields();
+        setSelectedRowKeys([])
+        getRegularPage(data);
+    }, [regularNum]);
     //表格数据
     function getRegularPage(param) {
+        setLoading(true)
+        const hide = message.loading('加载中...', 0);
         post(api.getRegularPage, param || params).then((res) => {
+            hide()
             if (res.data.code === 200) {
                 const data = res.data.data;
                 setRegularList(data.records);
                 setTotal(data.total)
             }
+        }).catch((err) => {
+            hide()
+        })
+    }
+    //判断正则是否关联
+    function isRelation(param) {
+        post(api.isRelation, {
+            id: param.id,
+            name: param.name,
+            val: param.val,
+        }).then((res) => {
+            if (res.data.code === 200) {
+                const data = res.data.data;
+                setFlag(data ? 1 : 0)
+            }
         })
     }
     //删除弹窗确认
@@ -67,13 +93,14 @@ function RegularManage() {
         post(api.delRegularById, { ids: arr }).then((res) => {
             if (res.data.code === 200) {
                 //刷新列表
-                const totalPage = Math.ceil((total - 1) / 15);
+                const totalPage = Math.ceil((total - selectedRowKeys.length) / 15);
                 //将当前页码与删除数据之后的总页数进行比较,避免当前页码不存在
                 const pagenum =
                     params.current > totalPage ? totalPage : params.current;
                 //避免pagenum变为0
                 params.current = pagenum < 1 ? 1 : pagenum;
                 setParams(params)
+                console.log(params.current);
                 getRegularPage()
                 message.success(res.data.message);
             } else {
@@ -91,7 +118,7 @@ function RegularManage() {
         setRegularDetail(record)
         setFlag(0)
         if (type == 2) {
-            setFlag(record.relation)
+            isRelation(record)
         }
     }
     function cancel() {
@@ -110,8 +137,6 @@ function RegularManage() {
         setSize(pageSize)
         setCurrent(current)
         setParams(params)
-        getRegularPage()
-        setSelectedRowKeys([])
     }
     function changePage(page, pageSize) {
         params.current = page
@@ -139,8 +164,9 @@ function RegularManage() {
         setSelectedRowKeys(selectedRowKeys);
     };
     const onFinish = (value) => {
+        params.current = 1
         const param = {
-            ...data,
+            ...params,
             ...value,
         }
         setCurrent(1)
@@ -150,6 +176,7 @@ function RegularManage() {
     };
     const onReset = () => {
         setCurrent(1)
+        setSize(15)
         setParams(data)
         form.resetFields();
         getRegularPage(data);
@@ -188,7 +215,7 @@ function RegularManage() {
                     <Row gutter={24}>
                         <Col span={5} key={0}>
                             <Form.Item label="正则式名称" name="name" getValueFromEvent={getValueFromEvent}>
-                                <Input placeholder="正则式名称" autoComplete='off' allowClear maxLength='30' />
+                                <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30' />
                             </Form.Item>
                         </Col>
 
@@ -215,7 +242,6 @@ function RegularManage() {
                     </Space>
 
                 </div>
-
                 <Table
                     columns={columns}
                     rowSelection={rowSelection}
@@ -239,7 +265,7 @@ function RegularManage() {
                 <Modal
                     title={title}
                     okText='确定'
-                    cancelText='取消'
+                    cancelText='关闭'
                     width="500px"
                     visible={visible}
                     onCancel={cancel}
@@ -257,7 +283,7 @@ function RegularManage() {
             <Modal
                 title="删除正则式"
                 okText='确定'
-                cancelText='取消'
+                cancelText='关闭'
                 width={400}
                 visible={delvisible}
                 onOk={delRegularById}

+ 0 - 124
src/components/SurgeryManager/addSurg.js

@@ -1,124 +0,0 @@
-import React, { useContext} from 'react';
-import { Form, Input, Button, message, Space } from 'antd';
-import apiObj from '@api/index';
-import { getCookie,setCookie } from '@utils/index';
-import SurgContext from './surg-context';
-const { post, api } = apiObj;
-
-function AddSurg(props) {
-  const [form] = Form.useForm();
-  const { type, formData} = useContext(SurgContext);
-  const initialValues = formData;
-
-  const onFinish = values => {
-	  values.status ? values.status=1:values.status=0
-    let params = values
-    if (type == 3) {
-	  params.id=initialValues.id
-      upSurgById(params)
-    } else {
-      addSurg(params)
-    }
-
-  };
-  function addSurg(param) {
-    const hisId = getCookie("hospitalId");
-	const params ={
-		hospitalId:hisId,
-		...param
-	}
-	post(api.addOperation, params).then((res) => {
-      if (res.data.code === 200) {
-        props.SurgChange()
-        message.success(res.data.message);
-      } else {
-        message.error(res.data.message);
-      }
-    })
-  }
-  function upSurgById(param) {
-	  const hisId = getCookie("hospitalId");
-	  const params ={
-	  	hospitalId:hisId,
-	  	...param
-	  }
-    post(api.upOperationById, params).then((res) => {
-      if (res.data.code === 200) {
-        props.SurgChange()
-        message.success(res.data.message);
-      } else {
-        message.error(res.data.message);
-      }
-    })
-  }
-  function cancel() {
-  	props.cancel()
-  }
-  
-  function onValuesChange() {
-  	props.isChange(form.isFieldsTouched())
-  }
-
-  return (
-    <>
-      <Form
-        labelCol={{ span: 7 }}
-        wrapperCol={{ span: 16 }}
-        form={form}
-        name="register"
-        onFinish={onFinish}
-        initialValues={initialValues}
-		onValuesChange={onValuesChange}
-      >
-
-        <Form.Item
-          name="name"
-          label="医院手术/操作名称"
-          rules={[
-            {
-              required: true,
-              message: '请输入医院手术/操作名称',
-            },
-          ]}
-        >
-          {type == 3 ?
-		    <Input  autoComplete='off'/>
-            :
-            <Input placeholder="请输入" autoComplete='off'/>
-          }
-
-        </Form.Item>
-		<Form.Item
-		  name="code"
-		  label="手术和操作代码"
-		  rules={[
-		    {
-		      required: true,
-		      message: '请输入手术和操作代码',
-		    },
-		  ]}
-		>
-		  {type == 3 ?
-		    <Input  autoComplete='off'/>
-		    :
-		    <Input placeholder="请输入" autoComplete='off'/>
-		  }
-		
-		</Form.Item>
-          <Form.Item wrapperCol={{ offset: 8, span: 16 }}>
-            <Space size="middle">
-              <Button htmlType="button" onClick={e => cancel()}>
-                取消
-            </Button>
-              <Button type="primary" htmlType="submit">
-                保存
-            </Button>
-            </Space>
-          </Form.Item>
-
-      </Form>
-    </>
-  );
-}
-
-export default AddSurg;

+ 205 - 271
src/components/SurgeryManager/index.js

@@ -1,323 +1,258 @@
 import React, { useState, useEffect } from 'react';
-import { Form, Input, Button, Table, Select, Pagination, Space, Modal, message, Row, Col, Upload } from 'antd';
+import { useSelector } from 'react-redux';
+import { Empty,ConfigProvider,Form, Input, Button, Table, Select, Space, Modal, message, Row, Col } from 'antd';
 import { PlusOutlined } from '@ant-design/icons';
-import AddSurg from './addSurg'
-import MatchSurg from './MatchSurg.js'
+import AddTerm from '../DiagManager/addDiag'
 import '@common/common.less';
 import apiObj from '@api/index';
-import SurgContext from './surg-context';
 
 const { post, api } = apiObj;
 const { Option } = Select;
 //获取列表
 function SurgManager() {
+  const { surgeryNum } = useSelector((state) => {
+  	return state.userInfo;
+  });
   useEffect(() => {
-    getOperationPage();
-  }, []);
+	  setSize(15)
+	  setCurrent(1)
+      form.resetFields();
+      getSurgeryPage();
+  }, [surgeryNum]);
   const [SurgList, setSurgList] = useState([]);//当前页列表数据
-  const [Surgid, setSurgid] = useState([]);//当前列表id
-  const [title, setTitle] = useState("");//数据总量
+  const [Surgid, setSurgid] = useState([]);//当前操作行id
+  const [title, setTitle] = useState("");//新增/修改的弹窗标题
   const [visible, setVisible] = useState(false);//新增修改 弹窗
-  const [msvisible, setMsvisible] = useState(false);//删除 弹窗
-  const [visible1, setvisible1] = useState(false);//导入 弹窗
-  const [visible2, setvisible2] = useState(false);//匹配 弹窗
-  const [unsaved, setUnsaved] = useState(false);//修改未保存弹窗
-  const [revise, setRevise] = useState(false);//是否修改 新增修改内容
-  const [type, setType] = useState("");
-  const [formData, setFormData] = useState(null);//当前行数据
+  const [loading, setloading] = useState(true);//是否显示加载中
+  const [flag, setFlag] = useState(false);//新增1或修改3
+  const [delvisible, setDelvisible] = useState(false);//删除 弹窗
+  const [formData, setFormData] = useState({});//当前行数据
   const [size, setSize] = useState(15);//每页显示条数
   const [total, setTotal] = useState(0);
   const [current, setCurrent] = useState(1);//当前页
-  const [uploadStatus, setUploadStatus] = useState(0);//导入状态,0初始,1成功,2格式错误,3导入数据错误
-  const [uploadTip, setUploadTip] = useState("");		//导入状态提示语
-  const [saveParams, setSaveParams] = useState({});		//匹配诊断选中
   const [params, setParams] = useState({
-    pages: 1,
-    current: 1,
-    size: 15
+	pages: 1,
+	current: 1,
+	size: 15
   });
   const [form] = Form.useForm();
-  const tipMap = {
-    0: '提示:EXCEL导入,模板样式及数据请在【朗通云平台-CDSS数据维护-医学术语关联维护】中导出获取。',
-    2: "模板格式错误,模板样式及数据请在【朗通云平台-CDSS数据维护-医学术语关联维护】中导出获取",
-    3: '模板导入失败,失败原因已在Excel中标识并自动下载,请检查后重新导入',
-  };
 
   let data = {
-    pages: 1,
-    current: 1,
-    size: size
+	pages: 1,
+	current: 1,
+	size: 15
   }
-  //新增 弹窗
-  const showModal = (name, type, flag, Surgrow) => {
-    setVisible(type);
-    setTitle(name);
-    setType(flag)
-    if (flag == 1) {
-      setFormData({
-        status: '1'
-      })
-    }
-    if (flag == 3) {
-      setFormData(Surgrow)
-      getOperationPage()
-    }
+  //新增/修改 弹窗flag=1新增,3修改
+  const showModal = (name, flag1, Surgrow) => {
+	setVisible(true);
+	setFlag(flag1)
+	setTitle(name);console.log(flag)
+	if (flag1 === 1) {
+	  setFormData({
+		status: 1,
+		uniqueName:'',
+		hisName:''
+	  })
+	}else if (flag1 === 3) {
+	  console.log(33,Surgrow)
+	  setFormData(Surgrow)
+	}
   }
   //表格数据
-  function getOperationPage(param) {
-    post(api.getOperationPage, param || params).then((res) => {
-      if (res.data.code === 200) {
-        const data = res.data.data;
-        setSurgList(data.records);
-        setTotal(data.total)
-      }
-    })
+  function getSurgeryPage(param) {  //type(必填): 类型:1-化验、3-辅检、4-诊断、5-药品、6-手术和操作
+  const hospitalId = localStorage.getItem('hospitalId')
+  setloading(true)
+  const hide = message.loading('加载中...',0);
+	post(api.getTermPage, {...(param || params),type:6,hospitalId:hospitalId}).then((res) => {
+	  hide()
+	  if (res.data.code === 200) {
+		const data = res.data.data;
+		setSurgList(data.records);
+		setTotal(data.total)
+		setloading(false)
+	  }
+	})
+  }
+  function showDelModal(id){
+	setDelvisible(true);
+	setSurgid(id);
   }
-
   //删除
-  function delOperationById() {
-    post(api.delOperationById, { ids: Surgid }).then((res) => {
-      setMsvisible(false);
-      if (res.data.code === 200) {
-        getOperationPage();
-        setSurgid([])
-        message.success("操作成功");
-      } else {
-        message.warning(res.data.msg || '操作失败');
-      }
-    }).catch(() => {
-      setMsvisible(false);
-      message.error("接口出错");
-    });
+  function delSurgeryById() {
+	post(api.deleteRecord, { id: Surgid }).then((res) => {
+	  setDelvisible(false);
+	  if (res.data.code === 200) {
+		//刷新列表
+		const totalPage = Math.ceil((total-1) / size);
+		//将当前页码与删除数据之后的总页数进行比较,避免当前页码不存在
+		const pagenum =
+		    params.current > totalPage ? totalPage : params.current;
+		//避免pagenum变为0
+		params.current = pagenum < 1 ? 1 : pagenum;
+		setParams(params)
+		getSurgeryPage();
+		setSurgid("");
+		message.success("删除成功");
+	  } else {
+		message.warning(res.data.msg || '操作失败');
+	  }
+	}).catch(() => {
+	  setDelvisible(false);
+	  message.error("接口出错");
+	});
   }
   //每页显示条数切换
   function onSizeChange(current, pageSize) {
-    params.current = current
-    params.size = pageSize
-    setSize(pageSize)
-    setCurrent(current)
-    setParams(params)
-    getOperationPage()
+	params.current = current
+	params.size = pageSize
+	setSize(pageSize)
+	setCurrent(current)
+	setParams(params)
   }
   //翻页
   function changePage(page, pageSize) {
-    params.current = page
-    params.size = pageSize
-    setCurrent(page)
-    setParams(params)
-    getOperationPage()
+	params.current = page
+	params.size = pageSize
+	setCurrent(page)
+	setParams(params)
+	getSurgeryPage()
   }
+  //筛选查询
   const onFinish = (value) => {
-    const param = {
-      ...data,
-      ...value
-    }
-    setCurrent(1)
-    setParams(param)
-    getOperationPage(param);
+	params.current = 1
+	const param = {
+	  ...params,
+	  ...value
+	}
+	setCurrent(1)
+	setParams(param)
+	getSurgeryPage(param);
   };
   //重置
   const onReset = () => {
-    setCurrent(1)
-    setParams(data)
-    form.resetFields();
-    getOperationPage(data);
+	setSize(15)
+	setCurrent(1)
+	setParams(data)
+	form.resetFields();
+	getSurgeryPage(data);
   };
-  //打开导入弹窗
-  const ImportBox = () => {
-    setvisible1(true)
-  }
-  //导入弹窗取消或关闭
-  function handleCancel1() {
-    setvisible1(false);
-    setUploadStatus(0);
-  }
-  //打开匹配弹窗
-  function match(row) {
-    setvisible2(true)
-    setFormData(row)
-  }
-  //导入弹窗取消或关闭
-  function handleCancel2() {
-    setvisible2(false);
-  }
-  const messageBox = () => {
-    if (!Surgid.length) {
-      message.warning("请先选择要删除的记录~", 1);
-      return;
-    }
-    setMsvisible(true)
-  }
+
   //删除 提示框取消或关闭
   function handleCancel() {
-    setMsvisible(false);
+	setDelvisible(false);
   }
 
   //新增修改 取消或关闭
   function cancel() {
-    if (revise) {
-      setUnsaved(true)
-    } else {
-      setVisible(false)
-      setFormData(null)
-    }
-  }
-
-  function isChange(a) {
-    setRevise(a)
+	setVisible(false)
+	setFormData([])
   }
 
-  function addCancel() {
-    setRevise(false)
-    setVisible(false)
-    setUnsaved(false)
-    setFormData(null)
+  function saveMatching(saveParams) {
+	post(api.saveOrUpdateRecord, saveParams).then((res) => {
+	  if (res.data.code === 200) {
+		message.success("匹配成功");
+		setVisible(false);
+		setFormData([])
+		getSurgeryPage();
+	  } else {
+		message.warning(res.data.message || "匹配失败,请重试");
+	  }
+	}).catch((error) => {
+	  message.warning(error.message || "接口出错,请重试",);
+	})
   }
+  const renderEmpty = () => (
+        <Empty
+            imageStyle={{
+                height: 0,
+            }}
+  		  description={<span></span>}
+  		  >
+        </Empty>
+    )
 
-  function unsavedCancel() {
-    setUnsaved(false)
-  }
-
-  //新增修改 保存
-  function SurgChange() {
-    setRevise(false)
-    setVisible(false)
-    getOperationPage();
-  }
-  const rowSelection = {
-    onChange: (selectedRowKeys, selectedRows) => {
-      console.log(`selectedRowKeys: ${selectedRowKeys}`, 'selectedRows: ', selectedRows);
-      setSurgid(selectedRowKeys)
-    }
-  };
-  //导入模板
-  const props = {
-    name: 'file',
-    accept: ".xls",
-    showUploadList: false,
-    action: api.importOperation,
-    headers: {
-      authorization: 'authorization-text',
-    },
-    onChange(info) {
-      const { response, status } = info.file;
-      if (status === 'done') {
-        if (response.code === 200) {
-          getOperationPage();		//刷新列表
-          //setvisible1(false);			//关闭导入弹窗
-          //message.success(`${info.file.name} 导入成功`);
-          setUploadStatus(1);
-          setUploadTip(response.data);
-        } else {
-          //message.error(`${info.file.name} 导入失败.`);
-          setUploadStatus(2);
-        }
-      } else if (status === 'error') {
-        setUploadStatus(3);
-      }
-    },
-  };
-
-  function saveMatching() {
-    post(api.matchingOperation, saveParams).then((res) => {
-      setvisible2(false);
-      if (res.data.code === 200) {
-        message.success("匹配成功");
-        getOperationPage();
-      } else {
-        message.warning(res.data.message || "匹配失败,请重试");
-      }
-    }).catch((error) => {
-      message.warning(error.message || "接口出错,请重试",);
-    })
-  }
-  function matchChange(data) {
-    setSaveParams(data);
-  }
   const columns = [
-    { title: '序号', dataIndex: 'index', render: (text, record, index) => (current - 1) * params.size + index + 1 },
-    { title: '医院手术/操作名称', dataIndex: 'name', },
-    { title: '手术和操作代码', dataIndex: 'code', },
-    { title: '标准手术/操作名称', dataIndex: 'standard', },
-    { title: '是否匹配', dataIndex: 'isMapping', },
-    {
-      title: '操作', dataIndex: 'key', render: (text, record) => (
-        <Space size="middle">
-          <a onClick={e => showModal('修改字典', true, 3, record)}>修改</a>
-          <a onClick={e => match(record)}>匹配</a>
-        </Space>
-      )
-    }
+	{ title: '序号', dataIndex: 'index', render: (text, record, index) => (current - 1) * params.size + index + 1 },
+	{ title: '操作时间', dataIndex: 'gmtModified', },
+	{ title: '医院手术/操作名称', dataIndex: 'hisName', },
+	{ title: '手术/操作代码', dataIndex: 'code', },
+	{ title: '标准手术/操作名称', dataIndex: 'uniqueName', },
+	{ title: '标准术语状态', dataIndex: 'status',render: (text, record) => {
+		return record.status===1?'启用':record.status===0?'禁用':'';
+	  }},
+	{ title: '是否匹配', dataIndex: 'isMatch',render: (text, record) => {
+		return record.isMatch===1?'已匹配':'未匹配';
+	  }},
+	{
+	  title: '操作', dataIndex: 'key', render: (text, record) => (
+		  <Space size="middle">
+			<a onClick={e => showModal('修改手术/操作信息',3, record)}>修改</a>
+			<a style={{color:"#FF4D4D"}} onClick={() => showDelModal(record.id)}>删除</a>
+		  </Space>
+	  )
+	}
   ]
   return (
-    <div className="wrapper">
-      <div className="filter-box">
-        <Form
-          form={form}
-          name="normal_login"
-          onFinish={onFinish}
-          initialValues={{ isMapping: '' }}
-        >
-          <Row gutter={24}>
-            <Col span={5} key={0}>
-              <Form.Item label="医院手术/操作名称" name="name">
-                <Input placeholder="请输入" autoComplete='off' allowClear />
-              </Form.Item>
-            </Col>
-            <Col span={5} key={1}>
-              <Form.Item label="手术和操作代码" name="code">
-                <Input placeholder="请输入" autoComplete='off' allowClear />
-              </Form.Item>
-            </Col>
-            <Col span={5} key={2}>
-              <Form.Item label="标准手术/操作名称" name="standard">
-                <Input placeholder="请输入" autoComplete='off' allowClear />
-              </Form.Item>
-            </Col>
-            <Col span={4} key={3}>
-              <Form.Item id="groupTypeval" label="是否匹配" name="isMapping">
-                <Select
-                  showSearch
-                  optionFilterProp="children"
-                  // onSearch={onSearch}
-                  // onFocus={onFocus}
-                  placeholder="全部"
-                >
-                  <Option value={''} key={-1}>全部</Option>
-                  <Option value={0} key={0}>未匹配</Option>
-                  <Option value={1} key={1}>已匹配</Option>
-                </Select>
-              </Form.Item>
-            </Col>
-            <Col span={5} key={4}>
-              <Form.Item>
-                <Button type="primary" htmlType="submit">
-                  查询
-                </Button>
-                <Button onClick={onReset}>
-                  重置
-                </Button>
-              </Form.Item>
-            </Col>
-          </Row>
-        </Form>
-      </div>
-
-      <div className="table">
-        <div className="table-header">
-          <h2 className="table-title">手术信息维护</h2>
-          <Row gutter={12}>
-            <Col key={0}>
-              <Button type="primary" icon={<PlusOutlined />} onClick={e => showModal('新增', true, 1)}>新增</Button>
-            </Col>
-            <Col key={1}>
-              <Button onClick={e => messageBox()} type="primary" danger>删除</Button>
-            </Col>
-            <Col key={2}>
-              <Button type="primary" onClick={e => ImportBox()}>导入</Button>
-            </Col>
-          </Row>
-        </div>
+	  <div className="wrapper">
+		<div className="filter-box">
+		  <Form
+			  form={form}
+			  name="normal_login"
+			  onFinish={onFinish}
+		  >
+			<Row gutter={24}>
+			  <Col span={5} key={0}>
+				<Form.Item label="医院手术/操作名称" name="hisName">
+				  <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
+				</Form.Item>
+			  </Col>
+			  <Col span={5} key={1}>
+				<Form.Item label="标准手术/操作名称" name="uniqueName">
+				  <Input placeholder="请输入" autoComplete='off' allowClear maxLength='30'/>
+				</Form.Item>
+			  </Col>
+			  <Col span={5} key={2}>
+				<Form.Item id="groupTypeval" label="是否匹配" name="isMatch">
+				  <Select
+					  showSearch
+					  optionFilterProp="children"
+                      // onSearch={onSearch}
+                      // onFocus={onFocus}
+					  placeholder="全部"
+				  >
+					<Option value={''} key={-1}>全部</Option>
+					<Option value={0} key={0}>未匹配</Option>
+					<Option value={1} key={1}>已匹配</Option>
+				  </Select>
+				</Form.Item>
+			  </Col>
+			  <Col span={5} key={3}>
+			  	<Form.Item  label="标准术语状态" name="status">
+			  		<Select
+			  		  showSearch
+			  		  optionFilterProp="children"
+			  		  placeholder="全部"
+			  		>
+			  		<Option value={''} key={-1}>全部</Option>
+			  		<Option value={0} key={0}>禁用</Option>
+			  		<Option value={1} key={1}>启用</Option>
+			  		</Select>
+			  	</Form.Item>
+			  </Col>
+			  <Col span={4} key={4}>
+				<Form.Item>
+				  <Button type="primary" htmlType="submit">
+					查询
+				  </Button>
+				  <Button onClick={onReset}>
+					重置
+				  </Button>
+				</Form.Item>
+			  </Col>
+			</Row>
+		  </Form>
+		</div>
 
         <Table
           rowSelection={{ type: 'checkbox', ...rowSelection, }}
@@ -336,7 +271,6 @@ function SurgManager() {
             total: total,
             showQuickJumper:true,
           }} />
-      </div>
       {visible && formData ?
         <Modal maskClosable={false}
           title={title}

+ 0 - 4
src/components/SurgeryManager/surg-context.js

@@ -1,4 +0,0 @@
-import { createContext } from 'react';
-const SurgContext = createContext(null);
-
-export default SurgContext;

+ 8 - 9
src/components/SysChoose/index.js

@@ -8,7 +8,6 @@ import iconLb from '@images/lb.png';
 import iconHis from '@images/his.png';
 import rightIcon from '@images/right.png';
 import {message} from "antd/lib/index";
-import { getCookie,setCookie } from "@utils/index";
 import apiObj from '@api/index';
 
 const {api,xPost,interceptors} = apiObj;
@@ -42,7 +41,7 @@ function SysChoose({history}) {
         setSysId(id);		////选中的平台id
         setHisList(his);		//医院列表
         setSysName(checkOrg.name);	//选中的平台名称
-        setCookie('isPlacefile',id == 2?0:1);
+        localStorage.setItem('isPlacefile',id == 2?0:1);
     }
     //获取组织列表
     function getOrgList(){
@@ -53,9 +52,9 @@ function SysChoose({history}) {
                 setOrgList(software);
                 setSysName(software[0].name);
                 setSysId(software[0].id);
-                setCookie('userId',userInfo.id);
-			    setCookie('userName',userInfo.name);
-                setCookie('isPlacefile',userInfo.id == 2?0:1);
+                localStorage.setItem('userId',userInfo.id);
+			    localStorage.setItem('userName',userInfo.name);
+                localStorage.setItem('isPlacefile',userInfo.id == 2?0:1);
                 dispatch(setUser(userInfo));
                 localStorage.setItem('software', JSON.stringify(software));
                 //默认显示第一个系统的组织
@@ -74,10 +73,10 @@ function SysChoose({history}) {
     //点击进入
     function getIn(id, type, sysid){
         dispatch(setSys({sysId,sysName,hisId:id}));
-        setCookie('systemId', sysId || sysid);
-        setCookie('hospitalId',id);
-	    setCookie('systemName',sysName);
-        setCookie('hosType', type);
+        localStorage.setItem('systemId', sysId || sysid);
+        localStorage.setItem('hospitalId',id);
+	    localStorage.setItem('systemName',sysName);
+        localStorage.setItem('hosType', type);
         interceptors();
         history.push("/manage");
     }

+ 52 - 16
src/store/reducers/userInfo.js

@@ -3,31 +3,67 @@ import { createSlice } from '@reduxjs/toolkit';
 export const slice = createSlice({
     name: 'userInfo',
     initialState: {
-        tokenInfo:null,
-        user:{}
+        tokenInfo: null,
+        user: {},
+        regularNum: 0,
+        rulerNum: 0,
+        problemNum: 0,
+        lossNum: 0,
+		diagNum: 0,
+		docNum: 0,
+		drugNum: 0,
+		dutyNum: 0,
+		surgeryNum: 0
     },
     reducers: {
-        add: (state,action) => {        //添加token
-            state.tokenInfo=action.payload;
+        add: (state, action) => {        //添加token
+            state.tokenInfo = action.payload;
         },
         remove: (state) => {        //删除token
-            state.tokenInfo=null;
+            state.tokenInfo = null;
         },
-        setSys:(state,action) => {        //选中的系统和医院id
-            const {sysId,sysName,hisId} = action.payload;
-            state.sysId=sysId;
-            state.sysName=sysName;
-            state.hisId=hisId;
+        setSys: (state, action) => {        //选中的系统和医院id
+            const { sysId, sysName, hisId } = action.payload;
+            state.sysId = sysId;
+            state.sysName = sysName;
+            state.hisId = hisId;
         },
-        setUser:(state,action) => {        //删除token
-            state.user=action.payload;
+        setUser: (state, action) => {        //删除token
+            state.user = action.payload;
         },
-        setUnReadNum(state,action){     //未读消息数量
-            state.unReadNum=action.payload;
-        }
+        setUnReadNum(state, action) {     //未读消息数量
+            state.unReadNum = action.payload;
+        },
+        setRegularNum(state, action) {
+            state.regularNum = action.payload;
+        },
+        setRulerNum(state, action) {
+            state.rulerNum = action.payload;
+        },
+        setProblemNum(state, action) {
+            state.problemNum = action.payload;
+        },
+        setLossNum(state, action) {
+            state.lossNum = action.payload;
+        },
+		setDiagNum(state, action) {
+		    state.diagNum = action.payload;
+		},
+		setDocNum(state, action) {
+		    state.docNum = action.payload;
+		},
+		setDrugNum(state, action) {
+		    state.drugNum = action.payload;
+		},
+		setDutyNum(state, action) {
+		    state.dutyNum = action.payload;
+		},
+		setSurgeryNum(state, action) {
+		    state.surgeryNum = action.payload;
+		}
     },
 });
 
-export const { remove, add, setSys, setUser,setUnReadNum } = slice.actions;
+export const { remove, add, setSys, setUser, setUnReadNum, setRegularNum, setRulerNum, setProblemNum, setLossNum, setDiagNum, setDocNum, setDrugNum, setDutyNum, setSurgeryNum } = slice.actions;
 
 export default slice.reducer;

+ 8 - 1
src/utils/index.js

@@ -66,7 +66,7 @@ export function getTimeDetail() {
     return str;
 }
 export function getValueFromEvent(e) {
-    return e.target.value.replace(/\s*/g,"");
+    return e.target.value.replace(/\s*/g, "");
 }
 //存取cookie
 export function setCookie(cname, cvalue) {
@@ -103,4 +103,11 @@ export function filterIds(arr, str) {    //arr需遍历的数组;str需拼接
 
 export function disabledDate(current) {
     return current && current >= moment().endOf('day'); // 选择时间要大于等于当前天。若今天不能被选择,去掉等号即可。
+}
+
+export function getDaysBetween(dateString1, dateString2) {
+    var startDate = Date.parse(dateString1)
+    var endDate = Date.parse(dateString2)
+    var days = Math.floor((endDate - startDate) / (1 * 24 * 60 * 60 * 1000))
+    return days
 }