Pārlūkot izejas kodu

Merge branch 'dev/new1' into dev/byll

Luolei 6 gadi atpakaļ
vecāks
revīzija
a759daeed6
55 mainītis faili ar 599 papildinājumiem un 355 dzēšanām
  1. 20 5
      src/common/components/EditableSpan/index.jsx
  2. BIN
      src/common/images/loading.gif
  3. 22 69
      src/components/DiagResultSearch/index.jsx
  4. 30 33
      src/components/DiagResultSearch/index.less
  5. 2 2
      src/components/EMRContainer/index.jsx
  6. 3 3
      src/components/EMRContainer/index.less
  7. 1 1
      src/components/InfoTitle/index.jsx
  8. 1 0
      src/components/Inspect/index.less
  9. 21 8
      src/components/MainSuit/index.jsx
  10. 6 1
      src/components/MultSpread/index.jsx
  11. 3 0
      src/components/NumberDrop/index.jsx
  12. 8 7
      src/components/NumberDrop/index.less
  13. 4 1
      src/components/NumberUnitDrop/index.jsx
  14. 2 2
      src/components/Operation/index.jsx
  15. 1 1
      src/components/Operation/index.less
  16. 2 2
      src/components/PatInfo/index.jsx
  17. 5 1
      src/components/PatInfo/index.less
  18. 14 1
      src/components/PrintPreview/index.jsx
  19. 7 3
      src/components/PushItems/index.jsx
  20. 4 0
      src/components/RadioDrop/index.jsx
  21. 2 1
      src/components/SearchDrop/index.jsx
  22. 20 10
      src/components/SpreadDrop/index.jsx
  23. 6 5
      src/components/Treat/DrugTreat/index.jsx
  24. 2 2
      src/components/Treat/index.jsx
  25. 31 29
      src/components/TreatDesc/DrugInfo/index.jsx
  26. 3 2
      src/components/TreatDesc/index.jsx
  27. 2 1
      src/config/index.js
  28. 4 0
      src/containers/CurrentIll.js
  29. 3 3
      src/containers/DiagResultSearch.js
  30. 25 4
      src/containers/EditableSpan.js
  31. 10 0
      src/containers/MainSuit.js
  32. 2 0
      src/containers/OtherHistory.js
  33. 59 9
      src/containers/SpreadDrop.js
  34. 6 1
      src/modules/HomePage/index.jsx
  35. 19 0
      src/modules/HomePage/index.less
  36. 20 2
      src/store/actions/checkBody.js
  37. 42 8
      src/store/actions/currentIll.js
  38. 60 23
      src/store/actions/mainSuit.js
  39. 24 2
      src/store/actions/otherHistory.js
  40. 22 57
      src/store/async-actions/diagnosticSearch.js
  41. 27 8
      src/store/async-actions/fetchModules.js
  42. 3 2
      src/store/async-actions/homePage.js
  43. 4 2
      src/store/reducers/checkBody.js
  44. 4 2
      src/store/reducers/currentIll.js
  45. 5 1
      src/store/reducers/diagnosticList.js
  46. 7 2
      src/store/reducers/homePage.js
  47. 4 2
      src/store/reducers/mainSuit.js
  48. 5 2
      src/store/reducers/otherHistory.js
  49. 2 1
      src/store/types/checkBody.js
  50. 1 0
      src/store/types/currentIll.js
  51. 2 1
      src/store/types/diagnosticList.js
  52. 2 1
      src/store/types/homePage.js
  53. 1 0
      src/store/types/mainSuit.js
  54. 2 1
      src/store/types/otherHistory.js
  55. 12 31
      src/utils/tools.js

+ 20 - 5
src/common/components/EditableSpan/index.jsx

@@ -28,7 +28,7 @@ class EditableSpan extends Component{
       labelVal:'',  //存放标签原有的值--主诉字数限制用
       preVal:'',
       index:null,
-      searchPre:''
+      searchPre:'',
     };
     this.$span = React.createRef();
     this.handleFocus = this.handleFocus.bind(this);
@@ -96,8 +96,12 @@ class EditableSpan extends Component{
       temp = newText.replace(searchPre,'');
       isEnd = !(newText.indexOf(searchPre)>0);
       search = temp.replace(/[(^\s*)|(\s*$)|(^\,*)|(\,*$)]/g,'');
+      // if(!search&&searchPre){
+      if(!temp&&searchPre){
+        search = searchPre;
+      }
       //console.log(labelVal,'旧:',searchPre,'新:',newText,'搜索:',search);
-      if(config.punctuationReg.test(search)){     //只有标点符号时不搜索
+      if(config.punctuationReg.test(search)){    //只有标点符号时不搜索
         handleSearch&&handleSearch({text:search,isEnd,boxMark,mainIds});
       }else{//只有标点符号时要清空搜索结果
         handleClear && handleClear({boxMark})
@@ -156,7 +160,7 @@ class EditableSpan extends Component{
 
   }
   handleKeyup(e){
-    const {boxMark,handleKeydown,i,value,removeId,handleClear} = this.props;
+    const {boxMark,handleKeydown,i,value,removeId,handleClear,delSingleLable} = this.props;
     const {preVal,index} = this.state;
     const ev = e||window.event;
     const target = ev.target||ev.srcElement;
@@ -164,16 +168,27 @@ class EditableSpan extends Component{
     if(ev.keyCode==8){
       // 主诉现病史去重:删除最后一个字的时候移除该数据(将name、id和value替换成空)并移除id
       // 前面是标签,内容为空时再删一次才移除标签;前面是文本,则直接移除;
+      // console.log(77,innerVal,preVal);
       let preObj = $(this.$span.current).prev();
-      if(index!==0&&preVal.trim().length==1){
+      if(index!==0&&preVal.trim().length==1&& !innerVal){
           removeId && removeId({boxMark,i:index,text:""});
           handleClear && handleClear({boxMark});//删除最后一个字时清空搜索结果,避免现病史搜索框不立即消失的情况
           if(preObj[0].nodeName !=="DIV"){
             this.moveEnd(preObj[0]);
           }
         }
-      
+
       if(innerVal !==preVal){return false}
+      // 中英文数字和下划线--单独删除标签
+      /*const reg = new RegExp("([\u4E00-\uFA29]|[\uE7C7-\uE7F3]|[a-zA-Z0-9_])");
+      if(index!==0 && reg.test(innerVal)){
+        let obj = preObj[0].nodeName=="DIV"?preObj.prev():preObj;
+        delSingleLable && delSingleLable({boxMark,i:index});
+        this.moveEnd(obj[0]);  
+        this.setState({
+          index: null
+        })
+      }*/
       let data = innerVal.trim();
       //判断是否为空、中英文:, 。、;,且不是第一位
       let pattern = new RegExp(/^\,?$|^\,?$|^\.?$|^\。?$|^\、?$|^\;?$|^\;?$|^\:?$|^\:?$\s/);

BIN
src/common/images/loading.gif


+ 22 - 69
src/components/DiagResultSearch/index.jsx

@@ -3,29 +3,20 @@ import style from './index.less';
 import close from './img/close.png'
 import search from './img/search.png'
 import DiagnosticItem from '@containers/DiagnosticItem'
+import { SearchOption} from '@commonComp';
 import config from '@config/index';
 import $ from 'jquery';
 class DiagResultSearch extends Component {
     constructor(props) {
         super(props);
         this.state = {
-            showClose: false,
-            focus: true,
-            timer:null
+           
         };
-        this.searchInput = React.createRef();
-        this.handleInput = this.handleInput.bind(this);
-        this.clearInput = this.clearInput.bind(this);
-        this.handleFocus = this.handleFocus.bind(this);
-        this.handleBlur = this.handleBlur.bind(this);
+      
+        this.getSearchList =  this.getSearchList.bind(this)
 
     }
-    componentWillReceiveProps(){
-        const { searchResult, clearSearchResult } = this.props;
-        this.setState({focus: true})
-        if( searchResult && searchResult.length > 0) {
-            clearSearchResult();//清除上次搜索结果
-        }
+    componentWillReceiveProps(nextProps){
     }
     componentDidMount () {
         const that = this
@@ -38,10 +29,6 @@ class DiagResultSearch extends Component {
                     
                 } else {
                     if (e.target!= diagSearch && e.target!= addDiag && e.target.parentNode!= addDiag && !$.contains(diagSearch, e.target) ) {
-                        that.setState({
-                            showSearch: !that.props.showSearch
-                        });
-                        that.clearInput()
                         that.props.hideSearch();
                     }
 
@@ -53,63 +40,29 @@ class DiagResultSearch extends Component {
         })
     }
 
-    handleInput(value) {
-        const {  setSearchValue, getSearchResult } = this.props;
-        value.length > 0 ? this.setState({showClose: true}) : this.setState({showClose: false});
-        clearTimeout(this.state.timer);
-        let timer = setTimeout(()=>{
-            clearTimeout(this.state.timer);
-          if(value.trim() == ''){
-            return  getSearchResult('');
-          }
-          getSearchResult(value.trim());
-        },config.delayTime);
-        this.setState({
-          timer
-        });
-    }
-    clearInput() {
-        const {  setSearchValue, getSearchResult } = this.props;
-        this.searchInput.current.value = '';
-        getSearchResult('');
-        this.setState({showClose: false})
-    }
-
-    handleFocus() {
-        this.setState({focus: true})
-    }
-    handleBlur() {
-        this.setState({focus: false})
+    getSearchList(searchResult) {
+        return <div className={style['search-result']}>
+                    
+        {
+            searchResult && searchResult.map((item) => {
+                return(<div  key={item.id} className={style['search-result-item']}><DiagnosticItem title={true} item={item} clearInput={this.clearInput}/></div>)
+            })
+        }
+    </div>
     }
    
     render(){
-        const { showClose } = this.state
-        const  { show, searchResult, getSearchResult } = this.props
+        const  { show, searchResult, getSearchResult, handleChangeValue } = this.props
+       
         return(
-            show && <div id='diagSearch' className={style['search-box']}>
-                <div className={style['search']}>
-                    <input ref={this.searchInput} 
-                        type="text" 
-                        placeholder='搜索'
-                        onFocus={this.handleFocus}
-                        onBlur = {this.handleBlur}
-                        className={style['search-input']}   
-                        style = {this.state.focus ? {border: '1px solid #3B9ED0'} :{border: '1px solid #979797'}}
-                        onInput={(e)=>this.handleInput(e.target.value)}
-                        onPropertyChange={(e)=>this.handleInput(e.target.value)} 
-                        />
-                    <img  className={style['search-img']} src={search} alt="搜索"/>
-                    <img className={style['search-close']} onClick={this.clearInput} style={showClose ? '': {display: 'none'}} src={close} alt=""/>
-                </div>
-                <div className={style['search-result']}>
-                    {
-                        searchResult && searchResult.map((item) => {
-                            return(<div  key={item.id} className={style['search-result-item']}><DiagnosticItem title={true} item={item} clearInput={this.clearInput}/></div>)
-                        })
-                    }
-                </div>
+            show&&<div id='diagSearch' className={style['search-box']}>
+                <SearchOption handleChangeValue={handleChangeValue} visible={true}>
+                    {this.getSearchList(searchResult)}
+                </SearchOption>
             </div>
         )
+       
+       
     }
 }
 

+ 30 - 33
src/components/DiagResultSearch/index.less

@@ -1,51 +1,48 @@
 @import "~@less/variables.less";
 .search-box {
     position: absolute;
+    top: 30px;
     width: 316px;
     margin: 0 10px 10px;
-    padding: 0 8px;
     // box-shadow: 0 6px 20px 0 #989DA3;
     background: #fff;
     z-index: 99;
     margin-bottom: 80px;
-    .llStyle;
     
 }
-.search {
-    width: 100%;
-    position: relative;
-    height: 44px;
-    padding: 10px 0px 0px 0px;
-}
-.search-input {
-    width: 300px;
-    height: 34px;
-    line-height: 34px;
-    position: relative;
-    padding: 0  30px;
-}
-.search-btn {
-    position: absolute;
-    right: 0;
-}
-.search-close {
-    position: absolute;
-    top: 17px;
-    right: 5px;
-    cursor: pointer;
+// .search {
+//     width: 100%;
+//     position: relative;
+//     height: 44px;
+//     padding: 10px 0px 0px 0px;
+// }
+// .search-input {
+//     width: 300px;
+//     height: 34px;
+//     line-height: 34px;
+//     position: relative;
+//     padding: 0  30px;
+// }
+// .search-btn {
+//     position: absolute;
+//     right: 0;
+// }
+// .search-close {
+//     position: absolute;
+//     top: 17px;
+//     right: 5px;
+//     cursor: pointer;
     
-}
-.search-img {
-    position: absolute;
-    top: 17px;
-    left: 5px;
-    cursor: pointer;
-}
+// }
+// .search-img {
+//     position: absolute;
+//     top: 17px;
+//     left: 5px;
+//     cursor: pointer;
+// }
 
 .search-result {
     max-height: 266px;
-    min-height: 80px;
-    overflow-y: auto;
 }
 
 .search-result-item {

+ 2 - 2
src/components/EMRContainer/index.jsx

@@ -22,12 +22,12 @@ class EMRContainer extends Component {
     componentDidMount(){
         // const {initHospital} = this.props;
         // initHospital()
-        const height = getWindowInnerHeight() - 115;
+        const height = getWindowInnerHeight() - 175;
         const width = getWindowInnerWidth() - 480;
         this.$cont.current.style.height = height+"px";
         this.$cont.current.style.width = width + "px";
         windowEventHandler('resize', ()=>{
-          const height = getWindowInnerHeight() - 115;
+          const height = getWindowInnerHeight() - 175;
           const width = getWindowInnerWidth() - 480;
           this.$cont.current.style.height = height + "px";
           this.$cont.current.style.width = width + "px";

+ 3 - 3
src/components/EMRContainer/index.less

@@ -1,7 +1,7 @@
 @import "~@less/variables.less";
 .EMR-container{
   background: #fff;
-//   margin-top: 10px;
+  margin-top: 60px;
   // margin-right:@push-width + 10px;
   padding: 0px 0 10px 0 ;
   box-sizing: border-box;
@@ -13,8 +13,8 @@
   overflow-x: hidden;
 }
 .inner{
-  padding-top:80px;
-  padding-bottom: 80px;
+  padding-top:20px;
+  padding-bottom: 20px;
 }
 .keep {
     position: absolute;

+ 1 - 1
src/components/InfoTitle/index.jsx

@@ -38,7 +38,7 @@ class InfoTitle extends Component {
         const {disVisible,copyVisible,winWidth} = this.props;
         const {le} = this.state;
         return <div className={style['title-wrapper']} style={{zIndex:disVisible||copyVisible?40:204,left:le}}>
-            <PatInfoContainer sizeFlag={winWidth <= 1035?true:false}/>
+            <PatInfoContainer sizeFlag={winWidth <= 1065?true:false}/>
             <div className={style["operations"]} onClick={this.showHistoryBox}>
                 <span><img src={historyCase} />&nbsp;历史病历</span>
             </div>

+ 1 - 0
src/components/Inspect/index.less

@@ -21,6 +21,7 @@
         border-radius: 5px;
         border: 1px solid @template-color;
         overflow: hidden;
+        margin-top: -3px;
     }
     .disabledBtn{
         float: right;

+ 21 - 8
src/components/MainSuit/index.jsx

@@ -6,7 +6,7 @@ import SearchDrop from '@components/SearchDrop';
 import CommonSymptom from '@components/CommonSymptom';
 import chooseType from '@containers/eleType.js';
 import config from "@config/index";
-import {isIE,getPageCoordinate,windowEventHandler} from "@utils/tools.js"
+import {isIE,getPageCoordinate,windowEventHandler,filterDataArr} from "@utils/tools.js"
 import $ from 'jquery';
 
 class MainSuit extends Component{
@@ -54,6 +54,7 @@ class MainSuit extends Component{
       }else {
         return chooseType({item,boxMark,i,hideTag:false,showArr,selecteds,saveText,mainIds});
       }
+
     })
     return list;
   }
@@ -61,13 +62,15 @@ class MainSuit extends Component{
 
   handleFocus(e){
     e.stopPropagation();
-    const {getCommonSymptoms,datas} = this.props;
-    let innerText = e.target.innerText;
+    const {getCommonSymptoms,datas,clearDiagnose} = this.props;
+    let innerText = e.target.innerText || e.target.innerHTML;//兼容火狐43
+    clearDiagnose&&clearDiagnose();//清除复诊数据
     if(!isIE()){//IE会触发onfocus和onblur事件
       if(!innerText.trim()){//有内容就走搜索接口
         getCommonSymptoms && getCommonSymptoms();
         this.setState({
-          symptom:true
+          symptom:true,
+          inpText:innerText
         })    
       }else{
         this.setState({
@@ -111,7 +114,15 @@ class MainSuit extends Component{
 
 
   handleSearchSelect(item){
-    const {clearSearch,insertSearch,datas,span} = this.props;
+    const {clearSearch,insertSearch,datas,span,saveText} = this.props;
+    let mainText = filterDataArr(saveText);//主诉字数
+    const itemL = item.name.length;
+    let lengths = mainText.length + itemL;
+    if(lengths>config.limited){
+      Notify.info(config.limitText);
+      clearSearch && clearSearch();
+      return
+    }
     clearTimeout(this.state.timer);
     if(datas.length==0){//没有使用模板时点击搜索结构要展开模板
       insertSearch &&insertSearch({item,span});
@@ -161,7 +172,7 @@ class MainSuit extends Component{
   handleChange(e){
     const ev = e || window.event;
     const data = ev.target.innerText;
-    const {getSearchData,searchData,datas,pushMessage,reTotalHide} = this.props;
+    const {getSearchData,searchData,datas,pushMessage,reTotalHide,saveText} = this.props;
     const {overFlag,inpText} = this.state;
     reTotalHide && reTotalHide();//重置homePage中的控制项
     const that = this;
@@ -210,11 +221,12 @@ class MainSuit extends Component{
   }
 
   handleBlur(e){//隐藏常见症状下拉、存自由输入的值
-    const {freeText,saveText,datas} = this.props;
+    const {freeText,saveText,datas,clearSearch} = this.props;
     const that = this;
     let data = this.state.inpText;
     if(!isIE()){
       e.target.innerText="";
+      e.target.innerHTML="";//兼容火狐43
       freeText && freeText(data.trim());
     }else{
       if(datas.length==0){
@@ -224,9 +236,10 @@ class MainSuit extends Component{
         freeText && freeText(data);
       }
     }
-    // 延时关闭常见症状下拉,不延时会影响选中
+    // 延时关闭常见症状下拉、清空搜索结果,不延时会影响选中
       clearTimeout(this.state.clearTimer);
       const clearTimer = setTimeout(function(){
+        clearSearch && clearSearch();
         that.setState({
           symptom:false
         })

+ 6 - 1
src/components/MultSpread/index.jsx

@@ -26,6 +26,7 @@ class MultSpread extends Component{
     this.state = {
       editable: false,
     };
+    this.$cont = React.createRef();
     this.changeToEdit = this.changeToEdit.bind(this);
     this.handleEdit = this.handleEdit.bind(this);
   }
@@ -103,7 +104,10 @@ class MultSpread extends Component{
       this.setState({
         editable: true
       });
-      //e.target.focus();
+      //失焦关闭编辑状态
+      setTimeout(()=>{
+        this.$cont.current.focus();
+      });
       //双击埋点记录
       handleDbclick && handleDbclick({id:copyId});
     }
@@ -135,6 +139,7 @@ class MultSpread extends Component{
     return (<div className={this.getContClass()}
                  style={{display:'inline-block'}}
                  onDoubleClick={this.changeToEdit}
+                 ref = {this.$cont}
                  contentEditable={this.state.editable}
                  onBlur={this.handleEdit}
                  onkeydown={tools.handleEnter}>

+ 3 - 0
src/components/NumberDrop/index.jsx

@@ -81,6 +81,9 @@ class NumberDrop extends Component{
   }
   numInpBlur(e){        //数字框失焦,保存值到store中
     e.stopPropagation();
+    if(this.props.show){      //修改清空后第一次点击键盘不触发click事件bug
+      return;
+    }
     this.setState({
       hasSelect:false
     });

+ 8 - 7
src/components/NumberDrop/index.less

@@ -1,9 +1,10 @@
 @import "~@less/variables.less";
 .container{
   .tag;
-}
-.no-tag{
-  .no-tag;
+  .blued{
+    background: @blue;
+    color: #fff;
+  }
 }
 .selected{
   .selected-tag;
@@ -13,8 +14,8 @@
   &:after{
     content: unset;
   }
-}
-.blued{
-  background: @blue;
-  color: #fff;
+  .blued{
+    background: @blue;
+    color: #fff;
+  }
 }

+ 4 - 1
src/components/NumberUnitDrop/index.jsx

@@ -151,7 +151,10 @@ class NumberUnitDrop extends Component{
         editable: true,
         labelVal:text
       });
-      e.target.focus();
+      //失焦关闭编辑状态
+      setTimeout(()=>{
+        e.target.focus();
+      })
       //双击埋点记录
       handleDbclick && handleDbclick({id:patId||id});
     }

+ 2 - 2
src/components/Operation/index.jsx

@@ -305,8 +305,8 @@ class Operation extends Component {
       <span className={style['button']} onClick={showPrint}><img src={printImg} /> 打印病历</span>
       <span className={style['preButton']} onClick={showPreview}><img src={preview} /> 预览</span>
       <span className={style['preButton']} onClick={() => { this.saveHis(3) }}><img src={saveHistory} /> 保存病历模板</span>
-      <span className={winWidth<=1082?`${style['saveButton']} ${style['b1024']}`: style['saveButton']} onClick={() => { this.saveAll(1) }}>保存</span>
-      <span className={winWidth<=1082?`${style['clearButton']} ${style['saveButton']} ${style['b1024']}`:`${style['clearButton']} ${style['saveButton']}`} onClick={() => { this.clearAll(2) }}>清除</span>
+      <span className={winWidth<=1082?`${style['saveButton']} ${style['minstyle']}`: style['saveButton']} onClick={() => { this.saveAll(1) }}>保存</span>
+      <span className={winWidth<=1082?`${style['clearButton']} ${style['saveButton']} ${style['minstyle']}`:`${style['clearButton']} ${style['saveButton']}`} onClick={() => { this.clearAll(2) }}>清除</span>
       <PrintPreviewContainer visible={visible} onClose={closePrint} />
       <PreviewContainer visible={preVisible} onClose={closePreview} />
       <ConfirmModal

+ 1 - 1
src/components/Operation/index.less

@@ -67,7 +67,7 @@
         background-color: #fff;
         color: #000;
     }
-    .b1024{
+    .minstyle{
         width: 60px;
         margin-left: 15px;
         margin-right: 10px;

+ 2 - 2
src/components/PatInfo/index.jsx

@@ -16,14 +16,14 @@ class PatInfo extends Component {
      return <table className={sizeFlag?`${style["table"]} ${style["newSize"]}`:style["table"]}>
       <tr>
         <td key='1' className={`${style.tdBorderB} ${style.tdBorderR}`}>卡号:{message.patientIdNo && message.patientIdNo}</td>
-        <td key='2' className={`${style.tdBorderB} ${style.tdBorderR}`}>姓名:{message.patientName && message.patientName}</td>
+        <td key='2' className={`${style.tdBorderB} ${style.tdBorderR}`} title={sizeFlag&&message.patientName&&message.patientName.length>3?message.patientName:''}>姓名:{sizeFlag&&message.patientName && message.patientName.length>3?message.patientName.slice(0,3)+'...':message.patientName}</td>
         <td key='3' className={`${style.tdBorderB} ${style.tdBorderR}`}>年龄:{message.patientAge && message.patientAge}</td>
         <td key='4' className={`${style.tdBorderB} ${style.tdBorderR}`}>性别:{message.patientSex && message.patientSex}</td>
       </tr>
       <tr>
         <td key='5' className={`${style.tdBorderR}`} style={{whiteSpace: 'nowrap'}}>就诊时间:{message.systemTime&&message.systemTime.substring(0, 10)}</td>
         <td key='6' className={`${style.tdBorderR}`}>科室:{message.hospitalDeptName && message.hospitalDeptName}</td>
-        <td key='7' className={`${style.tdBorderR}`}>医生:{message.doctorName && message.doctorName}</td>
+        <td key='7' className={`${style.tdBorderR}`} title={sizeFlag&&message.doctorName&&message.doctorName.length>3?message.doctorName:''}>医生:{sizeFlag&&message.doctorName && message.doctorName.length>3?message.doctorName.slice(0,3)+'...':message.doctorName}</td>
         <td key='8' className={`${style.tdBorderR}`}>门诊号:{message.recordId && message.recordId}</td>
       </tr>
     </table>;

+ 5 - 1
src/components/PatInfo/index.less

@@ -9,6 +9,7 @@
     line-height: 30px;
     padding-left: 10px;
     width: 200px;
+    white-space: nowrap;
   }
   .tdBorderB {
       border-bottom: 1px solid @person-table-color;
@@ -19,6 +20,9 @@
 }
 .newSize{
   td{
-  font-size: 13px;
+    overflow: hidden;
+    font-size: 13px;
+    white-space: nowrap;
+    text-overflow: ellipsis;
   }
 }

+ 14 - 1
src/components/PrintPreview/index.jsx

@@ -1,8 +1,9 @@
 import React, { Component } from "react";
-import { getAllDataList, getAllDataStringList } from '@utils/tools';
+import { getAllDataList, getAllDataStringList,filterDataArr } from '@utils/tools';
 import style from "./index.less";
 import PreviewBody from "../PreviewBody";
 import store from '@store';
+import Notify from '@commonComp/Notify';
 import close from '../../common/images/icon_close.png';
 
 
@@ -10,6 +11,18 @@ class PrintPreview extends Component {
     constructor(props) {
         super(props)
     }
+    surePrint(jsonStr){
+        if(filterDataArr(JSON.parse(jsonStr.chief)) == ''){
+          Notify.info('主诉不能为空');
+            return false;
+        }else if(!jsonStr.diag || jsonStr.diag.trim().length < 1){
+            Notify.info('诊断不能为空');
+            return false;
+        }else{
+            this.onPrint();
+            this.props.save(true)
+        }
+    }
     render() {
         const { onClose, visible, preInfo,save } = this.props;
         let baseList = store.getState();

+ 7 - 3
src/components/PushItems/index.jsx

@@ -47,12 +47,11 @@ class PushItems extends Component {
     const checkedCheck = check.filter(item => item.checked);
     this.props.billing(checkedAssay, checkedCheck);
     if(checkedAssay.length > 0 || checkedCheck.length > 0) {
-      console.log('checkedCheck',checkedAssay, checkedCheck)
       const Height = $(".src-components-BodyContainer-2SgEx").height();
       const adviceHeight = $(".src-common-components-ItemBox-1Bpz3").height();
       const winHeight = window.innerHeight;
       const scrollTop = Height;
-      document.documentElement.scrollTop = 10000;
+      $('#addScrollEvent').scrollTop(100000)
     }
     
   }
@@ -230,7 +229,12 @@ class PushItems extends Component {
             <div className={style["recommend"]}>
               <h1>
                 <img src={recommendImg} />
-                推荐检验检查<div className={style["billing"]}  onClick={billing}>开单</div>
+                推荐检验检查
+                <div className={style["billing"]} 
+                     style={assay.length === 0 && check.length === 0 ? {color: 'gray', border: '1px solid gray'} : ''} 
+                     onClick={assay.length === 0 && check.length === 0 ? '' : billing}>
+                    开单
+                </div>
               </h1>
               <div>
                 {assay.length === 0 && check.length === 0 ? (

+ 4 - 0
src/components/RadioDrop/index.jsx

@@ -135,6 +135,10 @@ class RadioDrop extends Component{
         editable: true
       });
     };
+    //失焦关闭编辑状态
+    setTimeout(()=>{
+      e.target.focus();
+    })
     handleDbclick&&handleDbclick({id:patId||id});
   }
   render(){

+ 2 - 1
src/components/SearchDrop/index.jsx

@@ -47,6 +47,7 @@ class SearchDrop extends Component{
   }
 
   handleSelect(e,item){
+    // onClick事件换成onmouseup--点击清除后谷歌下搜索结果点击不上去的情况
     e.stopPropagation();
     const {onSelect,onShow} = this.props;
     onSelect&&onSelect(item);
@@ -60,7 +61,7 @@ class SearchDrop extends Component{
         <ul>
           {this.props.data&&this.props.data.map((it)=>{
             litext = it.showType==1?it.name:it.name+'('+it.retrievalName+')';
-            return <li onClick={(e)=>this.handleSelect(e,it)} title={litext}>{litext}</li>
+            return <li onmouseup={(e)=>this.handleSelect(e,it)} title={litext}>{litext}</li>
           })}
         </ul>
       </div>

+ 20 - 10
src/components/SpreadDrop/index.jsx

@@ -104,7 +104,10 @@ class SpreadDrop extends Component{
         labelVal:text,
         editable:true
       });
-      e.target.focus();
+      //失焦关闭编辑状态
+      setTimeout(()=>{
+        e.target.focus();
+      })
       handleDbclick && handleDbclick({value,id,placeholder});
     }
   }
@@ -190,14 +193,14 @@ class SpreadDrop extends Component{
   }
   handleConfirm(e){
     e.stopPropagation();
-    const {handleConfirm,ikey,type,tagType,order,mainSaveText,copyType,value} = this.props;
-    const params = Object.assign({},this.state,{ikey,type,tagType,order,mainSaveText,copyType,value});
+    const {handleConfirm,ikey,type,tagType,order,mainSaveText,copyType,value,mainData} = this.props;
+    const params = Object.assign({},this.state,{ikey,type,tagType,order,mainSaveText,copyType,value,mainData});
     handleConfirm&&handleConfirm(params);
 	this.btnClickFlag = true;
     //点确定后隐藏弹窗
     this.props.handleHide();
   }
-  handleSelect(item,isExclu,joint,listIndex,selected){
+  handleSelect(item,isExclu,joint,listIndex,selected){//console.log(item,selected)
     let {withOn,withs,noneOn,exclusion,exists,nowOn,nones,noneIds,ban} = this.state;
     /*if(this.props.selecteds)
     console.log(exists,this.props.selecteds.exists,exists===this.props.selecteds.exists)*/
@@ -222,9 +225,9 @@ class SpreadDrop extends Component{
     }
     //操作单选项
     if(selected){
-      const tIndex= exists.findIndex((it)=>it.id===selected.id);
+      const tIndex= exists.findIndex((it)=>it.questionId===item.questionId);
       if(tIndex!=-1){
-        exists.splice(tIndex,1,{id,name,listIndex});
+        exists.splice(tIndex,1,item);
         this.setState({
           exists,
         })
@@ -286,7 +289,7 @@ class SpreadDrop extends Component{
       }else if(nowOn=='with'){
         withs.push({id:id,name:name});
       }else{
-        exists.push({id:id,name:name,listIndex});
+        exists.push({id:id,name:name,listIndex,questionId:item.questionId});
       }
     }
     this.setState({
@@ -407,9 +410,16 @@ class ListItem extends Component{
     const index=listIndex+''+i;
     //列单选处理
     if(isRadio){
-      const selected = data.find((it)=>{
-        return exists.findIndex((i)=>i.id===it.id)!==-1||noneIds.includes(it.id)||withs.findIndex((i)=>i.id===it.id)!==-1;
+      let selected = exists.find((i)=>{
+        return i.questionId===item.questionId;
+      })||withs.find((i)=>{
+        return i.questionId===item.questionId;
+      })||noneIds.find((i)=>{
+        return i.id===item.questionId;
       });
+      /*const selected = data.find((it)=>{console.log(exists)
+        return exists.findIndex((i)=>i.questionId===it.id)!==-1||noneIds.includes(it.id)||withs.findIndex((i)=>i.questionId===it.id)!==-1;
+      });*/
       if(selected&&selected.id!=item.id){     //该列已有选中项,传回已选中的id,name取消选中
         handleClick&&handleClick(item,isExclu,joint,index,{id:selected.id,name:selected.name});
       }else{
@@ -428,7 +438,7 @@ class ListItem extends Component{
         return style['exclusion'];
       }
     }else{
-      if(isExclu&&[...noneIds,...exists,...withs].length>0){
+      if(isExclu&&([...noneIds,...exists,...withs].length>0||ban.id)){
         return style['exclusion'];
       }
       if(noneIds.includes(id)){

+ 6 - 5
src/components/Treat/DrugTreat/index.jsx

@@ -16,7 +16,7 @@ class DrugTreat extends Component {
         this.setOtherRecommend = this.setOtherRecommend.bind(this);
         this.setDrugInfo = this.setDrugInfo.bind(this);
         this.showTreatDesc = this.showTreatDesc.bind(this);
-        this.handleMouseLeaveImg = this.handleMouseLeaveImg.bind(this)
+        this.handleMouseLeaveImg = this.handleMouseLeaveImg.bind(this);
     }
 
     handleSelect(index,ii) {
@@ -72,12 +72,12 @@ class DrugTreat extends Component {
         return(
             treatment && treatment.length > 0 && <div className={style['drug-box']}>
                 <h3 className={style['drug-title']}><img className={style['drug-icon']} src={drugIcon}/> 常用药物治疗</h3>
-                {/* 查看药物说明书 */}
-                <div> <input onInput={this.handleInputDrug.bind(this)} style={{border:'1px solid #000'}} type="text"/><button onClick = {this.searchDrug.bind(this)}>搜索药品说明</button></div>
+                {/* 查看药物说明书 (添加数据查看数据用)*/}
+                {/* <div> <input onInput={this.handleInputDrug.bind(this)} style={{border:'1px solid #000'}} type="text"/><button onClick = {this.searchDrug.bind(this)}>搜索药品说明</button></div> */}
                 {treatment.map((item, index) => {
                     return(<div className={style['drug-content']}>
                         <div  className={style['drug-name-box']}>
-                            <span>{index + 1 + '. ' }{item.bigdrugsName}<span>({item.subdrugsName})</span>:&nbsp;</span>
+                            <span style={item.drugsForbidden === '2'? {opacity: '0.3', filter:'alpha(opacity=30)',filter:'progid:DXImageTransform.Microsoft.Alpha(opacity=30)'} : ''}>{index + 1 + '. ' }{item.bigdrugsName}<span>({item.subdrugsName})</span>:&nbsp;</span>
                             {item.medicitionsList.map((it, ii) => {
                                 return ((it.isShow == 1 || it.selected) && <span >
                                         {ii === 0 ? '' : ', '}
@@ -93,7 +93,8 @@ class DrugTreat extends Component {
                                               onMouseEnter={this.handleMouseEnterImg.bind(this, ii, index)}
                                               onMouseLeave = {this.handleMouseLeaveImg}
                                               onClick={() =>{this.setDrugInfo(it);showDrugInfo();}}/>}
-                                        {it.forbidden === '1' ? <span className={style['info-flag']} style={{opacity: '0.3',border: '1px solid #F4C051', background: '#F4C051',marginLeft: '5px'}}>慎用</span>: it.forbidden === '2' ? <span className={style['info-flag']} style={{opacity: '0.3',filter:'alpha(opacity=30)',filter:'progid:DXImageTransform.Microsoft.Alpha(opacity=30)',border: '1px solid #000',marginLeft: '5px'}}>禁用</span> : ''}, 使用率{it.rate}
+                                        {it.forbidden === '1' ? <span className={style['info-flag']} style={{border: '1px solid #F4C051', background: '#F4C051',marginLeft: '5px'}}>慎用</span>: it.forbidden === '2' ? <span className={style['info-flag']} style={{opacity: '0.3',filter:'alpha(opacity=30)',filter:'progid:DXImageTransform.Microsoft.Alpha(opacity=30)',border: '1px solid #000',marginLeft: '5px'}}>禁用</span> : ''}, 
+                                        <span  style={it.forbidden === '2' ? {opacity: '0.3', filter:'alpha(opacity=30)',filter:'progid:DXImageTransform.Microsoft.Alpha(opacity=30)'} : ''}> 使用率{it.rate}</span>
                                         
                                     </span>)
                             })}

+ 2 - 2
src/components/Treat/index.jsx

@@ -76,9 +76,9 @@ class Treat extends Component {
                 </div>
                 
                 
-                {/* {showDrug && drugInfo && <DrugInfo drugInfo = {drugInfo} hideDrugInfo = {hideDrugInfo}></DrugInfo>} */}
+                {showDrug && drugInfo && <DrugInfo drugInfo = {drugInfo} hideDrugInfo = {hideDrugInfo}></DrugInfo>}
                 {/* 查询多个药品说明书 (添加数据查看药品说明书用)*/}
-                {showDrug && <DrugInfo drugInfoList = {drugInfoList} hideDrugInfoMore = {hideDrugInfoMore}></DrugInfo>}
+                {/* {showDrug && <DrugInfo drugInfoList = {drugInfoList} hideDrugInfoMore = {hideDrugInfoMore}></DrugInfo>} */}
             </div>
                 
             

+ 31 - 29
src/components/TreatDesc/DrugInfo/index.jsx

@@ -9,44 +9,46 @@ class DrugInfo extends Component {
 
     render() {
         const { drugInfo, hideDrugInfo, drugInfoList,hideDrugInfoMore } = this.props
-        // return (<div className={style['drug-info-wrapper']}>
-        //         <h3 className={style['drug-title']}>{drugInfo.title}说明书  <img src={close} onClick={hideDrugInfo} className={style['close-drug-desc']}/> </h3>
-        //         { drugInfo && drugInfo.drugDesc.length > 0 && <div className={style['drug-desc-wrapper']}>
-        //             <div className={style['drug-title1']}>{drugInfo.title}说明书</div>
-        //             {drugInfo.drugDesc.map((item, index) =>{
-        //                 return <div className={style['drug-desc-item']}><span className={style['drug-desc-title']}>{item.title.trim()}</span> <div className={style['drug-desc-content']} dangerouslySetInnerHTML ={{__html: item.content}}></div> </div>
-        //             })}
-        //         </div> }
-        //         { !drugInfo || (drugInfo && drugInfo.drugDesc.length === 0) && <div className={style['drug-desc-wrapper']}>
-        //             <div>
-        //                 该药品暂无说明
-        //             </div>
+        return (<div className={style['drug-info-wrapper']}>
+                <h3 className={style['drug-title']}>{drugInfo.title}说明书  <img src={close} onClick={hideDrugInfo} className={style['close-drug-desc']}/> </h3>
+                { drugInfo && drugInfo.drugDesc.length > 0 && <div className={style['drug-desc-wrapper']}>
+                    <div className={style['drug-title1']}>{drugInfo.title}说明书</div>
+                    {drugInfo.drugDesc.map((item, index) =>{
+                        return <div className={style['drug-desc-item']}><span className={style['drug-desc-title']}>{item.title.trim()}</span> <div className={style['drug-desc-content']} dangerouslySetInnerHTML ={{__html: item.content}}></div> </div>
+                    })}
+                </div> }
+                { !drugInfo || (drugInfo && drugInfo.drugDesc.length === 0) && <div className={style['drug-desc-wrapper']}>
+                    <div>
+                        该药品暂无说明
+                    </div>
                     
-        //         </div> }
+                </div> }
 
-        // </div>)
+        </div>)
 
-         return (<div className={style['drug-info-wrapper']}>
-                <h3 className={style['drug-title']}>说明书  <img src={close} onClick={hideDrugInfoMore} className={style['close-drug-desc']}/> </h3>
-                { drugInfoList && drugInfoList.length > 0 && <div className={style['drug-desc-wrapper']}>
-                    {drugInfoList.map((item,index) => {
-                        return <div>
-                            <h3 style={{height:' 50px', fontSize:'40px', fontWeight: '800'}}>{'【'+item.id+'】'}{item.name}说明书  </h3>
-                            {item.introduceDetailList&&item.introduceDetailList.length>0&&item.introduceDetailList.map((it, index) =>{
-                                return <div className={style['drug-desc-item']}><span className={style['drug-desc-title']}>{it.title.trim()}</span> <div className={style['drug-desc-content']} dangerouslySetInnerHTML ={{__html: it.content}}></div> </div>
-                            })}
-                             <br/>
-                            <br/> <br/> <br/> <br/>
-                        </div>
+
+        //多个药品药品说明书(添加数据时查看药品说明书用)
+        //  return (<div className={style['drug-info-wrapper']}>
+        //         <h3 className={style['drug-title']}>说明书  <img src={close} onClick={hideDrugInfoMore} className={style['close-drug-desc']}/> </h3>
+        //         { drugInfoList && drugInfoList.length > 0 && <div className={style['drug-desc-wrapper']}>
+        //             {drugInfoList.map((item,index) => {
+        //                 return <div>
+        //                     <h3 style={{height:' 50px', fontSize:'40px', fontWeight: '800'}}>{'【'+item.id+'】'}{item.name}说明书  </h3>
+        //                     {item.introduceDetailList&&item.introduceDetailList.length>0&&item.introduceDetailList.map((it, index) =>{
+        //                         return <div className={style['drug-desc-item']}><span className={style['drug-desc-title']}>{it.title.trim()}</span> <div className={style['drug-desc-content']} dangerouslySetInnerHTML ={{__html: it.content}}></div> </div>
+        //                     })}
+        //                      <br/>
+        //                     <br/> <br/> <br/> <br/>
+        //                 </div>
                         
                        
 
-                    })}
+        //             })}
                    
-                </div> }
+        //         </div> }
                
 
-        </div>)
+        // </div>)
 
 
     }

+ 3 - 2
src/components/TreatDesc/index.jsx

@@ -53,7 +53,7 @@ class TreatDesc extends Component {
                     
                 </div> } */}
                 { otherDrugIndex > -1 && <div  className={style['similar-drug']}>
-                    <h3 className={style['drug-desc-title']}><span className={style['drug-desc-class-title']} title={'同类药物(' + treatment[otherDrugIndex].drugsName + ')'}>同类药物({treatment[otherDrugIndex].drugsName})</span>  <img src={close} onClick={this.hideTreatDesc} className={style['close-drug-desc']} /></h3>
+                    <h3 className={style['drug-desc-title']}><span className={style['drug-desc-class-title']} title={'同类药物(' + treatment[otherDrugIndex].drugsName + ')'}>同类药物({treatment[otherDrugIndex].bigdrugsName})</span>  <img src={close} onClick={this.hideTreatDesc} className={style['close-drug-desc']} /></h3>
                     {treatment[otherDrugIndex].medicitionsList.map((item, index) =>{
                         return (<span >
                         {index === 0 ? '' : ', '}     
@@ -73,7 +73,8 @@ class TreatDesc extends Component {
                             onMouseEnter={this.handleMouseEnterImg.bind(this, index)}
                             onMouseLeave = {this.handleMouseLeaveImg}
                             onClick={() =>{setDrugInfo(item);showDrugInfo();}}/>}
-                        {item.forbidden === '1' ? <span className={style['info-flag']} style={{border: '1px solid #F4C051', background: '#F4C051',marginLeft: '5px'}}>慎用</span>: item.forbidden === '2' ? <span className={style['info-flag']} style={{opacity: '0.3', filter:'alpha(opacity=30)',filter:'progid:DXImageTransform.Microsoft.Alpha(opacity=30)',border: '1px solid #000',marginLeft: '5px'}}>禁用</span> : ''}, 使用率{item.rate}
+                        {item.forbidden === '1' ? <span className={style['info-flag']} style={{border: '1px solid #F4C051', background: '#F4C051',marginLeft: '5px'}}>慎用</span>: item.forbidden === '2' ? <span className={style['info-flag']} style={{opacity: '0.3', filter:'alpha(opacity=30)',filter:'progid:DXImageTransform.Microsoft.Alpha(opacity=30)',border: '1px solid #000',marginLeft: '5px'}}>禁用</span> : ''},
+                        <span  style={item.forbidden === '2' ? {opacity: '0.3', filter:'alpha(opacity=30)',filter:'progid:DXImageTransform.Microsoft.Alpha(opacity=30)'} : ''}> 使用率{item.rate}</span>
                         
                     </span>)
                     })}

+ 2 - 1
src/config/index.js

@@ -30,7 +30,8 @@ export default {
     delayTime:500,      //延迟搜索的时间
     delayPushTime:1000,    //延迟推送时间
     pushDelay:1000,
-    punctuationReg:/[^,,.。;;、]/g,       //正则表达式,全局查找不是括号内标点的字符
+    punctuationReg:/[^,,.。::"“?”;;、!!]/g,       //正则表达式,全局查找不是括号内标点的字符
+    punReg:/[,,.。::"“?”;;、!!]+/g,
     currentText:"患者XX因XX诊断为(**),经XX治疗后,目前XX症状已缓解,仍有XX,各项指标情况:XX,辅助检查:XX。今来复诊,进一步治疗",
     timeUnit:{
       minute:"分",

+ 4 - 0
src/containers/CurrentIll.js

@@ -115,6 +115,10 @@ function mapDispatchToProps(dispatch) {
                   })
                 }
             });
+          //右侧推送
+          setTimeout(function(){ 
+            dispatch(billing());
+          },200);
         },
         changeEditIll(bool){
             dispatch({

+ 3 - 3
src/containers/DiagResultSearch.js

@@ -1,7 +1,7 @@
 import React from 'react';
 import { connect } from 'react-redux';
 import { SHOW_SEARCH,  HIDE_SEARCH, GET_SEARCH_RESULT } from '@store/types/diagnosticSearch';
-import { getSearchResult } from '@store/async-actions/diagnosticSearch';
+import { getSearchResult, getSearchList } from '@store/async-actions/diagnosticSearch';
 import DiagResultSearch from '@components/DiagResultSearch';
 
 function mapStateToProps(state) {
@@ -30,8 +30,8 @@ function mapDispatchToProps(dispatch) {
                 searchResult: []
             })
         },
-        getSearchResult:(value)=>{
-            dispatch(getSearchResult(value))
+        handleChangeValue: (val)=>{
+            dispatch(getSearchList(val))
         }
     }
 }

+ 25 - 4
src/containers/EditableSpan.js

@@ -1,9 +1,9 @@
 import {connect} from 'react-redux';
 import {EditableSpan} from '@commonComp';
-import {SETCHECKTEXT,SETSEARCHDATA,CHECK_FOCUS_INDEX,CHECKBODY_CLEAR,DEL_CHECKBODY} from '@types/checkBody';
-import {SET_SEARCH,MAIN_FOCUS_INDEX,CLEAR_SEARCH,SETMAINTEXT,DEL_MAIN,REMOVE_MAIN_ID} from '@types/mainSuit';
-import {SETOTHERTEXT,SETOTHERSEARCHDATA,OTHER_FOCUS_INDEX,OTHERHIS_CLEAR,DEL_OTHERHIS,REMOVE_OTHER_ID} from '@types/otherHistory';
-import {SET_CURRENT_SEARCH,CURRENT_CLEAR,SETCURRENTTEXT,CURRENT_FOCUS_INDEX,DEL_CURRENT,REMOVE_CURR_ID} from '@types/currentIll';
+import {SETCHECKTEXT,SETSEARCHDATA,CHECK_FOCUS_INDEX,CHECKBODY_CLEAR,DEL_CHECKBODY,DEL_CHECKBODY_LABLE} from '@types/checkBody';
+import {SET_SEARCH,MAIN_FOCUS_INDEX,CLEAR_SEARCH,SETMAINTEXT,DEL_MAIN,REMOVE_MAIN_ID,DEL_MAIN_LABLE} from '@types/mainSuit';
+import {SETOTHERTEXT,SETOTHERSEARCHDATA,OTHER_FOCUS_INDEX,OTHERHIS_CLEAR,DEL_OTHERHIS,REMOVE_OTHER_ID,DEL_OTHERHIS_LABLE} from '@types/otherHistory';
+import {SET_CURRENT_SEARCH,CURRENT_CLEAR,SETCURRENTTEXT,CURRENT_FOCUS_INDEX,DEL_CURRENT,REMOVE_CURR_ID,DEL_CURRENT_LABLE} from '@types/currentIll';
 import {getSearch} from '@store/async-actions/fetchModules.js';
 import {billing} from '@store/async-actions/pushMessage';
 import {didPushParamChange} from '@utils/tools.js';
@@ -253,6 +253,27 @@ function mapDispatchToProps(dispatch,state) {
     dispatch({
       type:ISREAD
     })
+    },
+    delSingleLable(obj){//光标在第一位时 只删除标签
+      switch (+obj.boxMark){
+        case 1:
+          dispatch({type:DEL_MAIN_LABLE,index:obj.i,text:obj.text});
+          break;
+        case 2:
+          dispatch({type:DEL_CURRENT_LABLE,index:obj.i});
+          break;
+        case 3:
+          dispatch({type:DEL_OTHERHIS_LABLE,index:obj.i});
+          break;
+        case 4:
+          dispatch({type:DEL_CHECKBODY_LABLE,index:obj.i});
+          break;
+        default:
+          break;
+      }
+      dispatch({
+        type:ISREAD
+      })
     }
   }
 }

+ 10 - 0
src/containers/MainSuit.js

@@ -5,6 +5,7 @@ import {CLEAR_COMSYMPTOMS,SHOW_TAIL,INSERT_MAIN,CLEAR_SEARCH,SET_SEARCH,SAVE_FRE
 import {RESET,CLICKCOUNT,ISREAD} from '@store/types/homePage.js';
 import {getCommSymptoms,getCommSymptomPush} from '@store/async-actions/mainSuit.js'
 import {SET_MAIN_SUIT} from '@store/types/fillInfo';
+import {CLEAR_DIAGNOSE} from '@store/types/diagnosticList';
 import {getSearch} from '@store/async-actions/fetchModules';
 import {billing} from '@store/async-actions/pushMessage';
 import {filterArr,didPushParamChange,filterDataArr} from '@utils/tools.js';
@@ -118,6 +119,10 @@ function mapDispatchToProps(dispatch) {
         dispatch({
           type:ISREAD
         })
+        //右侧推送
+        setTimeout(function(){ 
+          dispatch(billing());
+        },200);
       },
       clearSearch:()=>{
         dispatch({
@@ -147,6 +152,11 @@ function mapDispatchToProps(dispatch) {
             text:obj.text
           })
       },
+      clearDiagnose(){//清除复诊
+        dispatch({
+            type:CLEAR_DIAGNOSE,
+          })
+      }
     }
 }
 

+ 2 - 0
src/containers/OtherHistory.js

@@ -40,11 +40,13 @@ function mapDispatchToProps(dispatch,store){
         const model = JSON.parse(JSON.stringify(initData.otherHisModel));
         const arr = JSON.parse(JSON.stringify(initData.otherHis||null));
         const arrSave = JSON.parse(JSON.stringify(initData.otherHisSave||null));
+        const selects = JSON.parse(JSON.stringify(initData.otherSelecteds||null));
         const isHis = initData.otherIsHis;
         const listObj = isHis?{newArr:arr,saveText:arrSave||[]}:fullfillText(model);
         dispatch({
           type:SETDATA,
           data:listObj.newArr,
+          selecteds:selects,
           save:listObj.saveText,
           isEmpty:false
         });

+ 59 - 9
src/containers/SpreadDrop.js

@@ -15,9 +15,10 @@ import {Notify} from '@commonComp';
 import {filterArr,didPushParamChange,filterDataArr} from '@utils/tools.js';
 import config from '@config/index.js';
 
-function mapStateToProps(state) {
+function mapStateToProps(state) {//console.log(state);
   return {
     mainSaveText:state.mainSuit.saveText,
+    mainData:state.mainSuit.data,
   }
 }
 
@@ -35,33 +36,82 @@ function getNames(data,order){//从exist withs 中获取name字段
   return nameData;
 }
 
+function addPoint(data,num){//给伴随添加顿号
+  for(let i=num; i<data.length; i++){
+    data[i].name = '、'+ data[i].name;
+  }
+  return data;
+}
 
 /***********************标签展开确定事件***************************/
 
 // 主诉--不用展开标签
 function mainSuitModule(dispatch,store,params){
-  const {nones,exists,withs,exclusion,excluName,ban,mainSaveText} = params;
-  let existsName = getNames(exists);
-  let withsName = getNames(withs);
-  let banName = ban.name;
+  const {nones,exists,withs,exclusion,excluName,ban,mainSaveText,mainData} = params;
   let text = filterDataArr(mainSaveText);
   if(text.length >= config.limited){
     Notify.info(config.limitText);
     return
   }
+  // let existsName = getNames(exists);
+  // let withsName = getNames(withs);
+  const copExists = JSON.parse(JSON.stringify(exists));
+  const copWiths = JSON.parse(JSON.stringify(withs)); 
+  let banName = ban.name;
+  const index = params.ikey;
+  let ikey = getLabelIndex(index);
+  let num = 0;
+  let existNum = 0;
+  let forwardId;
+  let mainText;
+  for(let n=ikey-1; n>0; n--){
+    if(mainData[n].flag && mainData[n].flag==1){
+      forwardId = n;
+      continue;
+    }
+  }
+  
+  if(forwardId){
+    mainText = mainSaveText.slice(forwardId,ikey);
+    const mainSlice = mainData.slice(forwardId,ikey);
+    let banIndex = mainText.indexOf('伴'); 
+    if(banIndex==-1){
+      num = 1;
+    }
+    console.log(11,exists,mainSlice);
+    // ikey前的data里没有exist=1的数据,则existNum=1
+    if(exists.length>0){
+      for(let i=0; i<mainSlice.length; i++){
+        if(!mainSlice[i].exist && mainSlice[i].exist!==1){
+          existNum = 1;
+          continue;
+        }
+      }
+    }
+    
+  }else{
+    let banIndex = mainSaveText.indexOf("伴");
+    if(banIndex==-1){
+      num = 1;
+    }
+  }
+  let withsName = getNames(addPoint(copWiths,num));
+  let existsName = getNames(addPoint(copExists,existNum));
   let names;
   if(banName){
     names = existsName + banName + withsName;
   }else{
     names = existsName + withsName;
-  }  
-  let lengths = text.length + names.length;
+  } 
+  // num==0 说明有“伴”,减1;
+  let lengths = num==0?text.length + names.length - 1:text.length + names.length;
+  // console.log(5656,num,existNum,text,text.length,names,lengths);
   if(lengths > config.limited){
     Notify.info(config.limitText);
     return
   }
-  const index = params.ikey;
-  let ikey = getLabelIndex(index);
+  // const index = params.ikey;
+  // let ikey = getLabelIndex(index);
   dispatch({
     type: MIX_CONFIRM,
     data: {exists:exists,withs:withs,withsName:withsName,existsName:existsName,ikey,ban}

+ 6 - 1
src/modules/HomePage/index.jsx

@@ -9,6 +9,7 @@ import style from './index.less';
 /*import {getInitModules} from '@store/async-actions/homePage.js';*/
 import { getUrlArgObject } from "@utils/tools";
 import $ from 'jquery';
+import loading from '@common/images/loading.gif';
 class HomePage extends Component {
     constructor() {
         super();
@@ -40,17 +41,21 @@ class HomePage extends Component {
 
     }
     render() {
+        const {flag} = this.props;
         return <div className={style['home-page']} onClick={this.props.hideAllDrop}>
             <BannerContainer />
             {/* <InfoTitle /> */}
             <BodyContainer></BodyContainer>
+            <div className={style['mask']} style={{display:flag?"block":"none"}}>
+                <img src={loading} className={style['load']}/>
+            </div>
         </div>;
     }
 }
 
 const mapStateToProps = function (state) {
   return {
-
+    flag:state.homePage.loadingFlag
   }
 };
 const mapDispatchToProps = function (dispatch) {

+ 19 - 0
src/modules/HomePage/index.less

@@ -0,0 +1,19 @@
+.mask {
+    position: fixed;
+    top: 0;
+    left: 0;
+    right: 0;
+    bottom: 0;
+    background: #000;
+    opacity: .4;
+    filter:alpha(opacity=40);
+    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=40);";
+    z-index: 9998;
+}
+.load{
+    position: absolute;
+    top: 50%;
+    left:50%;
+    margin-top: -64px;
+    margin-left: -64px;
+}

+ 20 - 2
src/store/actions/checkBody.js

@@ -203,12 +203,12 @@ export function insertLabelData(state,action){
       res.data.splice(index,1,pText,...spreadLabels,text);
       res.saveText = fullfillText(res.data).saveText;
       //res.saveText.splice(index,1,newText,'','');
-      res.selecteds.splice(index,1,null,new Array(spreadLabels.length).fill(null),null);
+      res.selecteds.splice(index,1,null,...new Array(spreadLabels.length).fill(null),null);
     }else{
       res.data.splice(index,1,text,...spreadLabels,pText);
       res.saveText = fullfillText(res.data).saveText;
       //res.saveText.splice(index,1,'','',newText);
-      res.selecteds.splice(index,1,null,new Array(spreadLabels.length).fill(null),null);
+      res.selecteds.splice(index,1,null,...new Array(spreadLabels.length).fill(null),null);
     }
 
   }else{
@@ -251,6 +251,7 @@ export const changeLabelVal = (state,action)=>{//双击标签输入改变值
   }else{//删除完标签内容则删除该标签
     const num = nextIsDot?2:1;
     res.data.splice(index,num);
+    res.selecteds.splice(index,num);//杂音类样式选中状态对应
     res.saveText = fullfillText(res.data).saveText;
   }
   res.update = Math.random();
@@ -278,6 +279,7 @@ export const changeNumLabelVal = (state,action)=>{
   }else{//删除完标签内容则删除该标签
     const num = nextIsDot?2:1;
     res.data.splice(index,num);
+    res.selecteds.splice(index,num);      //杂音类样式选中状态对应
     res.saveText = fullfillText(res.data).saveText;
   }
 
@@ -348,4 +350,20 @@ export function multipleComfirn(state,action){
   res.selecteds[ikey] = action.data;
   res.update = Math.random();
   return res;
+}
+
+export function delSingleLable(state,action){
+  let res = Object.assign({},state);
+  const {index} = action;
+  let data = res.data;
+  // 前一个不是文本标签 并且不是子模板,则删除
+  if(data[index-1].flag&&data[index-1].flag==3){
+
+  }
+  else if(data[index-1].tagType != 8){
+    data.splice(index-1,1);
+    res.saveText.splice(index-1,1);
+  }
+  res.update = Math.random();
+  return res;
 }

+ 42 - 8
src/store/actions/currentIll.js

@@ -135,16 +135,24 @@ export const setData = (state,action) =>{
       // 主症状添加tongYong标签选中文字
       let tongYText = tongYong?{name:tongYong,value:tongYong,tagType:config.tagType}:'';
       let mainCopy = JSON.parse(JSON.stringify(main));
-      if(tongYText){
-        /*for(let j=0; j<main.length; j++){
-          mainCopy.splice(j*2,0,tongYText);
-        }*/
+      /*if(tongYText){
         for(let j=0; j<mainCopy.length; j++){
-          mainCopy[j].name = tongYong + mainCopy[j].name;
-          mainCopy[j].value = tongYong + mainCopy[j].value;
+          mainCopy[j].name = tongYong + (mainCopy[j].name).replace('、',"");
+          mainCopy[j].value = tongYong + (mainCopy[j].value).replace('、',"");
         }
+      }*/
+      for(let j=0; j<mainCopy.length; j++){
+        if(tongYText){
+          mainCopy[j].name = tongYong + (mainCopy[j].name).replace('、',"");
+          mainCopy[j].value = tongYong + (mainCopy[j].value).replace('、',"");
+        }else{
+          mainCopy[j].name = (mainCopy[j].name).replace('、',"");
+          mainCopy[j].value = (mainCopy[j].value).replace('、',"");
+        }
+        
       }
 
+
        // 将ids接口获取到的模板匹配到对应主症状后面
       // 主症状
       let newMainCopy = JSON.parse(JSON.stringify(mainCopy));
@@ -173,11 +181,20 @@ export const setData = (state,action) =>{
         })
       }
       // 伴随
-      let newWiths = JSON.parse(JSON.stringify(withs));
+      // 去掉顿号
+     /* for(let b=0; b<withs.length; b++){
+        withs[b].name = withs[b].name.replace('、',"");
+      }*/
+      // let newWiths = JSON.parse(JSON.stringify(withs));console.log(123,withs,newWiths);
+      let newWiths = [];
       if(withs.length>0){
+        for(let b=0; b<withs.length; b++){
+          withs[b].name = withs[b].name.replace('、',"");
+          withs[b].value = withs[b].value.replace('、',"");
+        }
+        newWiths = JSON.parse(JSON.stringify(withs));
         let withInd = 0;
         let withInsertInd = 0;
-        // let withPreLength = 0;
         let withLengArr=[];
         for(let d=0; d <withs.length;d++){
           mainLabelModuleArr.map((v,i)=>{
@@ -697,4 +714,21 @@ export function multipleComfirn(state,action){
   res.selecteds[ikey] = action.data;
   res.update = Math.random();
   return res;
+}
+
+
+export function delSingleLable(state,action){
+  let res = Object.assign({},state);
+  const {index} = action;
+  let data = res.data;
+  // 前一个不是文本标签 并且不是子模板,则删除
+  if(data[index-1].flag&&data[index-1].flag==3){
+
+  }
+  else if(data[index-1].tagType != 8){
+    data.splice(index-1,1);
+    res.saveText.splice(index-1,1);
+  }
+  res.update = Math.random();
+  return res;
 }

+ 60 - 23
src/store/actions/mainSuit.js

@@ -121,6 +121,13 @@ function getTextLabel(id,name,flag){
   return {id:id,name:name,value:name,tagType:config.tagType,exist:flag};
 }
 
+function addPoint(data,num){//给伴随添加顿号
+  for(let i=num; i<data.length; i++){
+    data[i].name = '、'+ data[i].name;
+  }
+  return data;
+}
+
 //多选标签选中确定处理
 export const confirm = (state,action) =>{
   const res = Object.assign({},state);
@@ -141,7 +148,8 @@ export const confirm = (state,action) =>{
   let forwardId;
   let text;
   for(let n=labelIndx-1; n>0; n--){
-    if(arr[n].id==8){
+    // if(arr[n].id==8){
+    if(arr[n].flag && arr[n].flag==1){//添加症状打标flag=1
       forwardId = n;
       continue;
     }
@@ -151,14 +159,16 @@ export const confirm = (state,action) =>{
     let index = text.indexOf('伴');
     if(index==-1){//没有伴,直接插入ikey前
       if(exists.length > 0){
-        for(let i=0; i<exists.length; i++){
+        let withsAddP = addPoint(exists,1);
+        for(let i=0; i<withsAddP.length; i++){
           let pos = labelIndx + i;
-          arr.splice(pos,0,getTextLabel(exists[i].id,exists[i].name,1));
-          res.saveText[pos] = exists[i].name;
+          arr.splice(pos,0,getTextLabel(withsAddP[i].id,withsAddP[i].name,1));
+          res.saveText[pos] = withsAddP[i].name;
         }
       }
       if(withs.length > 0){
-        let newWiths = JSON.parse(JSON.stringify(withs));
+        let withsAddP = addPoint(withs,1);
+        let newWiths = JSON.parse(JSON.stringify(withsAddP));
         if(banText){
          newWiths.unshift(banText);
        }
@@ -172,17 +182,18 @@ export const confirm = (state,action) =>{
       if(exists.length > 0){
         for(let i=0; i<exists.length; i++){
           let pos = index + i;
-          arr.splice(pos,0,getTextLabel(exists[i].id,exists[i].name,1));
+          arr.splice(pos,0,getTextLabel(exists[i].id,'、'+exists[i].name,1));
           res.saveText[pos] = exists[i].name;
         }
       }
       
-      if(withs.length>0){//有伴插到ikey前既可     
-        for(let j=0; j<withs.length; j++){
+      if(withs.length>0){//有伴插到ikey前既可
+        let withsAddP = addPoint(withs,0);     
+        for(let j=0; j<withsAddP.length; j++){
           // let withsPos = labelIndx + j;
           let withsPos = labelIndx +length + j;
-          arr.splice(withsPos,0,getTextLabel(withs[j].id,withs[j].name,2));
-          res.saveText[withsPos] = withs[j].name;
+          arr.splice(withsPos,0,getTextLabel(withsAddP[j].id,withsAddP[j].name,2));
+          res.saveText[withsPos] = withsAddP[j].name;
         }
       }
     }
@@ -193,12 +204,16 @@ export const confirm = (state,action) =>{
       if(exists.length > 0){
         for(let i=0; i<exists.length; i++){
           let pos = labelIndx + i;
-          arr.splice(pos,0,getTextLabel(exists[i].id,exists[i].name,1));
+          arr.splice(pos,0,getTextLabel(exists[i].id,'、'+exists[i].name,1));
           res.saveText[pos] = exists[i].name;
         }
       }
       if(withs.length > 0){
-        let newWiths = JSON.parse(JSON.stringify(withs));
+        /*for(let k=1; k<withs.length; k++){
+          withs[k].name = '、'+ withs[k].name;
+        }*/
+        let withsAddP = addPoint(withs,1);
+        let newWiths = JSON.parse(JSON.stringify(withsAddP));
         if(banText){
          newWiths.unshift(banText);
        }
@@ -212,17 +227,18 @@ export const confirm = (state,action) =>{
       if(exists.length > 0){
         for(let i=0; i<exists.length; i++){
           let pos = index + i;
-          arr.splice(pos,0,getTextLabel(exists[i].id,exists[i].name,1));
+          arr.splice(pos,0,getTextLabel(exists[i].id,'、'+exists[i].name,1));
           res.saveText[pos] = exists[i].name;
         }
       }
       
-      if(withs.length>0){//有伴插到ikey前既可     
-        for(let j=0; j<withs.length; j++){
+      if(withs.length>0){//有伴插到ikey前既可
+        let withsAddP = addPoint(withs,0);     
+        for(let j=0; j<withsAddP.length; j++){
           // let withsPos = labelIndx + j;
           let withsPos = labelIndx +length + j;
-          arr.splice(withsPos,0,getTextLabel(withs[j].id,withs[j].name,2));
-          res.saveText[withsPos] = withs[j].name;
+          arr.splice(withsPos,0,getTextLabel(withsAddP[j].id,withsAddP[j].name,2));
+          res.saveText[withsPos] = withsAddP[j].name;
         }
       }
     }
@@ -231,7 +247,7 @@ export const confirm = (state,action) =>{
     
     res.data = arr;
     res.saveText = fullfillText(arr).saveText;
-    res.update=Math.random();
+    res.update=Math.random();console.log(789,res);
     return res;
   };
 
@@ -346,10 +362,15 @@ export const insertSearch = (state,action)=>{
     const value = innerText.replace(searchStr,"");
     let index = innerText.indexOf(searchStr);
     if(index < 1){//前
-      res.data.splice(focusIndex,0,nText);
-      res.saveText.splice(focusIndex,0,searchData);
-      res.data[focusIndex+1].value = value;
-      res.saveText[focusIndex+1] = value;
+      if(data[focusIndex].value==searchStr){//为空标签则替换
+        res.data.splice(focusIndex,1,nText);
+        res.saveText.splice(focusIndex,1,searchData);
+      }else{
+        res.data.splice(focusIndex,0,nText);
+        res.saveText.splice(focusIndex,0,searchData);
+        res.data[focusIndex+1].value = value;
+        res.saveText[focusIndex+1] = value;
+      }  
     }else{
       res.data.splice(focusIndex+1,0,nText);
       res.saveText.splice(focusIndex+1,0,searchData);
@@ -641,6 +662,22 @@ export function multipleComfirn(state,action){
   data[ikey].value = seleData;
   res.saveText[ikey] = seleData;
   res.selecteds[ikey] = action.data;
-  res.update = Math.random();console.log(123,action,res);
+  res.update = Math.random();
+  return res;
+}
+
+export function delSingleLable(state,action){
+  let res = Object.assign({},state);
+  const {index} = action;
+  let data = res.data;
+  // 前一个不是文本标签 并且不是子模板,则删除
+  if(data[index-1].flag&&data[index-1].flag==3){
+
+  }
+  else if(data[index-1].tagType != 8){
+    data.splice(index-1,1);
+    res.saveText.splice(index-1,1);
+  }
+  res.update = Math.random();
   return res;
 }

+ 24 - 2
src/store/actions/otherHistory.js

@@ -192,19 +192,23 @@ export function insertLabelData(state,action){
     if(searchInEnd){
       res.data.splice(index,1,pText,...spreadLabels,text);
       res.saveText = fullfillText(res.data).saveText;
+      res.selecteds.splice(index,1,null,...new Array(spreadLabels.length).fill(null),null);
       //res.saveText.splice(index,1,newText,'','');
     }else{
       res.data.splice(index,1,...spreadLabels,pText,text);
       res.saveText = fullfillText(res.data).saveText;//.splice(index,1,'',newText,'');
+      res.selecteds.splice(index,1,...new Array(spreadLabels.length).fill(null),null,null);
     }
   }else{
     span.current.innerText = ' ';
     if(searchInEnd){
       res.data.splice(index+1,0,spreadLabels,text);
       res.saveText.splice(index+1,0,'','');
+      res.selecteds.splice(index+1,0,...new Array(spreadLabels.length).fill(null),null);
     }else{
       res.data.splice(index,0,text,spreadLabels);
       res.saveText.splice(index,0,'','');
+      res.selecteds.splice(index,0,null,...new Array(spreadLabels.length).fill(null));
     }
 
   }
@@ -234,6 +238,7 @@ export function changeTextLabel(state,action) {
   }else{//删除完标签内容则删除该标签
     const num = nextIsDot?2:1;
     res.data.splice(index,num);
+    res.selecteds.splice(index,num);//杂音类样式选中状态对应
     res.saveText = fullfillText(res.data).saveText;
   }
   res.update = Math.random();
@@ -262,6 +267,7 @@ export const changeNumLabelVal = (state,action)=>{
   }else{//删除完标签内容则删除该标签
     const num = nextIsDot?2:1;
     res.data.splice(index,num);
+    res.selecteds.splice(index,num);//杂音类样式选中状态对应
     res.saveText = fullfillText(res.data).saveText;
   };
   res.update = Math.random();
@@ -307,7 +313,7 @@ export function backspaceText(state,action){
   const {delIndex} = action;
   const data = res.data;
   if(data[delIndex-1].flag&&data[delIndex-1].flag==3){
-    // if(data[delIndex-1].tagType==8 ||data[delIndex-1].flag&&data[delIndex-1].flag==3){
+  // if(data[delIndex-1].tagType==8 ||data[delIndex-1].flag&&data[delIndex-1].flag==3){
     // 前一个是文本标签或者子模板 不做处理
   }else if(data[delIndex-1].tagType==8){
     data.splice(delIndex,1);
@@ -330,7 +336,7 @@ export function removeId(state,action){
   if(!data[index].value && data[index-1].tagType==8){
     data.splice(index,1);
     res.saveText.splice(index,1);
-  }
+  } 
   res.update = Math.random();
   return res;
 }
@@ -345,4 +351,20 @@ export function multipleComfirn(state,action){
   res.selecteds[ikey] = action.data;
   res.update = Math.random();
   return res;
+}
+
+export function delSingleLable(state,action){
+  let res = Object.assign({},state);
+  const {index} = action;
+  let data = res.data;
+  // 前一个不是文本标签 并且不是子模板,则删除
+  if(data[index-1].flag&&data[index-1].flag==3){
+
+  }
+  else if(data[index-1].tagType != 8){
+    data.splice(index-1,1);
+    res.saveText.splice(index-1,1);
+  }
+  res.update = Math.random();
+  return res;
 }

+ 22 - 57
src/store/async-actions/diagnosticSearch.js

@@ -1,66 +1,31 @@
 import { json } from "@utils/ajax";
-import { GET_SEARCH_RESULT, SET_SEARCH_VALUE } from '@store/types/diagnosticSearch';
+import { GET_SEARCH_RESULT } from '@store/types/diagnosticSearch';
 
-export const getSearchResult = (value) =>{
-    
+
+export const getSearchList = (val) => {
+    if(val.trim() == ''){
+        const data = [];
+        return (dispatch) =>  dispatch({
+            type: GET_SEARCH_RESULT,
+            searchResult: []
+        })
+    }
+   
     return (dispatch, getState) => {
         const state = getState();
-        const url = '/api/icss/retrieval/getTagInfos'
-        const param={
-            type: 7,
-            age: state.patInfo.message.patientAge,
-            inputStr: value,
+        json('/api/icss/retrieval/getTagInfos',{
+            type:'6',
+            age:state.patInfo.message.patientAge,
+            inputStr:val,
             sexType: state.patInfo.message.sex
-        }
-        if(value === state.diagnosticSearch.searchValue) {
-            return
-        } else {
+        })
+        .then((res)=>{
+            const data = res.data.data;
             dispatch({
-                type: SET_SEARCH_VALUE,
-                searchValue: value
-            })
-            //如果搜索值为空,则直接将搜索结果设为空
-            if(value === '') {
-                dispatch({
-                    type: GET_SEARCH_RESULT,
-                    searchResult: []
-                })
-                return
-            }
-            json(url, param).then((data)=>{
-                const searchRes = data.data.data;
-                const diagList = state.diagnosticList.diagnosticList;
-                let searchResult = [];
-                if(searchRes) {
-                    for(let i = 0; i < searchRes.length; i++) {
-                        let repeat = false;
-                        for (let j = 0; j < diagList.length; j++) {
-                            if(searchRes[i].questionId === diagList[j].id) {
-                                repeat = true;
-                            } 
-                        }
-                        if(!repeat) {
-                            searchResult.push(searchRes[i])
-                        }
-                    }
-                    dispatch({
-                        type: GET_SEARCH_RESULT,
-                        searchResult: searchResult
-                    })
-                } else {
-                    dispatch({
-                        type: GET_SEARCH_RESULT,
-                        searchResult: []
-                    })
-                }
-               
-            }).catch((e)=>{
-                console.log(e)
+                type: GET_SEARCH_RESULT,
+                searchResult: data
             })
-
-
-        }
-        
+        })
     }
+};
 
-}

+ 27 - 8
src/store/async-actions/fetchModules.js

@@ -45,8 +45,8 @@ export const getSearch = (param)=>{
     const params = {
       "age": patInfo.message.patientAge,
       "inputIds":mainIds&&mainIds.length>0?mainIds:[],//主诉去重
-      // "inputStr": inpStr.trim(),
-      "inputStr": inpStr,
+      "inputStr": inpStr.trim(),
+      // "inputStr": inpStr,
       "sexType": patInfo.message.sex,
       "type": boxMark //1为搜症状
     };
@@ -71,15 +71,34 @@ export const getOtherHisRecord = ()=>{
         const objStr = JSON.parse(data.otherStr||'[]');
         let arr = [];
         if((!obj||!obj.other||obj.other.length==0)&&!objStr[0]){        //无其他史历史记录用默认模板
+          if(mode=='1'){      //文本模式
+            dispatch({
+              type:SETOTHERHISTORY,
+              data:[],
+              selecteds:[],
+              save:[]
+            });
+          }
+
           //console.log('其他史最近数据无')
           //arr = state.homePage.initData.otherHis;
         }else{
           arr = obj.other;
-          dispatch({
-            type:SETOTHERHISTORY,
-            data:arr,
-            save:objStr
-          });
+          if(mode =='1'){     //文本模式
+            dispatch({
+              type:SETOTHERHISTORY,
+              data:[],
+              selecteds:[],
+              save:[objStr[0]]
+            });
+          }else{
+            dispatch({
+              type:SETOTHERHISTORY,
+              data:arr,
+              selecteds:obj.otherHistorySelecteds,
+              save:objStr
+            });
+          }
         }
       }
     });
@@ -99,7 +118,7 @@ export function getInitData(){
       pacs: emrData.pacs,
       sex: emrData.sex,
       vital:emrData.vital,
-      symptom: emrData.current||emrData.main
+      symptom: emrData.current+emrData.main
     };
     json(api.getBigPush,param).then((res)=>{
       if(+res.data.code === 0){

+ 3 - 2
src/store/async-actions/homePage.js

@@ -1,5 +1,5 @@
 import {post,json} from '@utils/ajax.js';
-import {SETINITDATA} from '@store/types/homePage.js';
+import {SETINITDATA,MODI_LOADING} from '@store/types/homePage.js';
 import {SET_CURRENT} from '@store/types/currentIll';
 import {SET_MAINSUIT} from '@store/types/mainSuit';
 import config from '@config/index.js';
@@ -28,7 +28,8 @@ export const getInitModules= (dispatch,getStore)=>{
   const state = getStore();
   const {message} = state.patInfo;
   dispatch(initHistoryDetails(message));      //历史病历回读
-  return json(api.getModules,{age:message.patientAge,sexType:message.sex}).then((res) => {
+  return json(api.getModules,{age:message.patientAge,sexType:message.sex}).then((res) => {console.log("模板请求成功",res);
+      dispatch({type:MODI_LOADING});
       if (res.data.code == '0') {
         const newObj = modulesParseJson(res.data.data);
         const initData = newObj.json;

+ 4 - 2
src/store/reducers/checkBody.js

@@ -1,9 +1,9 @@
 import {SET,SETNUMBER4,SETSELECTED4,SETCHECKBOX,ADDLABELITEM,SETCHECKTEXT,SETSEARCHDATA,
   SELECTSEARCHDATA,CHANGECHECKTEXTLABEL,CLEARCHECKBODY,CHECK_FOCUS_INDEX,CHECKBODY_CLEAR,
-  SETCHECKINPUT,DEL_CHECKBODY,CHANGECHECKTEXTLABEL_NUMBER,CHECKCONFIRMSELECTED,CHECKBODY_MUL} from '../types/checkBody.js';
+  SETCHECKINPUT,DEL_CHECKBODY,CHANGECHECKTEXTLABEL_NUMBER,CHECKCONFIRMSELECTED,CHECKBODY_MUL,DEL_CHECKBODY_LABLE} from '../types/checkBody.js';
 import {set,setNumberValue,setRadioValue,setCheckBoxValue,addLabelItem,setCheckText,
   setSearchData,insertLabelData,changeLabelVal,clearCheckBody,setInputLabel,backspaceText,
-  changeNumLabelVal,confirm,multipleComfirn} from '../actions/checkBody.js';
+  changeNumLabelVal,confirm,multipleComfirn,delSingleLable} from '../actions/checkBody.js';
 import config from '@config/index.js';
 
 const block = Object.assign(JSON.parse(config.textLabel),{full:true});//空白时保留一个自由文本标签
@@ -55,6 +55,8 @@ export default function(state=initState,action){
       return backspaceText(state,action);
     case CHECKBODY_MUL:
       return multipleComfirn(state,action);
+    case DEL_CHECKBODY_LABLE:
+      return delSingleLable(state,action);
     default:
       return res;
   }

+ 4 - 2
src/store/reducers/currentIll.js

@@ -1,9 +1,9 @@
 // 现病史
 import {SET_CURRENT,CURRENT_CONFIRM,INSERT_PROCESS,SET_CURRENT_DATA,SET_LABEL_MODULE,SETMAINCHECKBOX,
   CURRENT_RADIO,CURRENT_NUMBER,CURRENT_TEXT_LABEL,CLEAR_CURRENT_ILL,SETTEXTMODEVALUE,CURRENT_GET_BIGDATAPUSH,CURRENT_CLEAR,
-  SET_CURRENT_SEARCH,SETCURRENTTEXT,CURRENT_FOCUS_INDEX,SELECT_SEARCHDATA,CLEAR_CURRENT_EDIT,CURRENTADDLABELITEM,SETCURRENTINPUT,DEL_CURRENT,CURRENT_TEXT_LABEL_NUMBER,REMOVE_CURR_ID,CURRENT_MUL} from '../types/currentIll';
+  SET_CURRENT_SEARCH,SETCURRENTTEXT,CURRENT_FOCUS_INDEX,SELECT_SEARCHDATA,CLEAR_CURRENT_EDIT,CURRENTADDLABELITEM,SETCURRENTINPUT,DEL_CURRENT,CURRENT_TEXT_LABEL_NUMBER,REMOVE_CURR_ID,CURRENT_MUL,DEL_CURRENT_LABLE} from '../types/currentIll';
 import {confirm,insertProcess,setData,setCheckBox,setRadioValue,setNumberValue,changeLabelVal,clearCurrentIll,
-  setTextModeValue,setModule,bigDataSymptom,setCheckText,insertLabelData,clearCurrentEdit,addLabelItem,setInputLabel,backspaceText,changeNumLabelVal,removeId,multipleComfirn} from '../actions/currentIll';
+  setTextModeValue,setModule,bigDataSymptom,setCheckText,insertLabelData,clearCurrentEdit,addLabelItem,setInputLabel,backspaceText,changeNumLabelVal,removeId,multipleComfirn,delSingleLable} from '../actions/currentIll';
 
 const initState = {
   moduleData:[],
@@ -73,6 +73,8 @@ export default function(state=initState,action){
       return removeId(state,action);
     case CURRENT_MUL://单列多选
       return multipleComfirn(state,action);
+    case DEL_CURRENT_LABLE:
+      return delSingleLable(state,action);
     default:
       return state;
   }

+ 5 - 1
src/store/reducers/diagnosticList.js

@@ -1,4 +1,4 @@
-import { ADD_DIAGNOSTIC,  DEL_DIAGNOSTIC, UP_DIAGNOSTIC, DOWN_DIAGNOSTIC, SET_TREAT, GET_DIAGNOSTIC_STR, SET_DIAG_TO_MAINSUIT, GET_IS_FIRST,CLEAR_ALL_DIAG, SET_CLICK_DIAG } from '../types/diagnosticList';
+import { ADD_DIAGNOSTIC,  DEL_DIAGNOSTIC, UP_DIAGNOSTIC, DOWN_DIAGNOSTIC, SET_TREAT, GET_DIAGNOSTIC_STR, SET_DIAG_TO_MAINSUIT, GET_IS_FIRST,CLEAR_ALL_DIAG, SET_CLICK_DIAG ,CLEAR_DIAGNOSE} from '../types/diagnosticList';
 import { addDiagnostic,  delDiagnostic, upDiagnostic, downDiagnostic, setTreat, getDiagnosticStr, setDiagToMainSuit, getIsFirst,clearAllDiag, setClickDiag} from '../actions/diagnosticList';
 
 const initState = {
@@ -35,6 +35,7 @@ const initState = {
 }
 
 export default function (state=initState, action) {
+    const res = Object.assign({},state);
     switch(action.type) {
         case ADD_DIAGNOSTIC:
             return addDiagnostic(state, action);
@@ -56,6 +57,9 @@ export default function (state=initState, action) {
             return clearAllDiag(state, action);
         case SET_CLICK_DIAG: 
             return setClickDiag(state, action);
+        case CLEAR_DIAGNOSE: 
+            res.mainSuitStr = "";
+            return res;
         default:
             return state;
     }

+ 7 - 2
src/store/reducers/homePage.js

@@ -1,5 +1,5 @@
 import {HIDE,RESET,SETINITDATA,SETDROPSHOW,SETADDITEMINIT,SETT0EDIT,SETREADDITEMS,
-  HIDEDROP,CLICKCOUNT,ISREAD,SETOTHERHISTORY,SETMINSCREEN} from '../types/homePage.js';
+  HIDEDROP,CLICKCOUNT,ISREAD,SETOTHERHISTORY,SETMINSCREEN,MODI_LOADING} from '../types/homePage.js';
 import {showDrop,setAddItemInit,setLabelToEdit,confirmHide,clickNum} from '../actions/homePage.js';
 
 const initState = {
@@ -9,7 +9,8 @@ const initState = {
   focusTextIndex:'',
   clickData:[],
   addItems:{},
-  commSymHide:false
+  commSymHide:false,
+  loadingFlag:true
 };
 
 export default function (state=initState,action) {
@@ -44,6 +45,7 @@ export default function (state=initState,action) {
     case SETOTHERHISTORY:
       res.initData.otherHis = action.data;
       res.initData.otherHisSave = action.save;
+      res.initData.otherSelecteds = action.selecteds||[];
       res.initData.otherIsHis = action.otherIsHis!=undefined?action.otherIsHis:true;
       return res;
     /*case SETTEXTFOCUS:
@@ -54,6 +56,9 @@ export default function (state=initState,action) {
       res.windowWidth = action.obj.width;
       res.windowHeight = action.obj.height;
       return res;
+    case MODI_LOADING:
+      res.loadingFlag = false;
+      return res;
     default:
       return res;
   }

+ 4 - 2
src/store/reducers/mainSuit.js

@@ -1,9 +1,9 @@
 import {COMM_SYMPTOMS,CLEAR_COMSYMPTOMS,SHOW_TAIL,INSERT_MAIN,
   SET_SEARCH,CLEAR_SEARCH,GET_BIGDATAPUSH,SET_MAINSUIT,MIX_CONFIRM,NUMBER_SELECT,
   RADIO_SELECT,COMM_CONFIRM,CHANGE_LABELVAL,SAVE_FREE,CLEAR_MAIN_SUIT,SET_DATA,
-  INSERT_SEARCH,MAIN_FOCUS_INDEX,SETTEXTMODEVALUE,SETMAINTEXT,MAINADDLABELITEM,SETMAININPUT,DEL_MAIN,CHANGE_LABELVAL_NUMBER,REMOVE_MAIN_ID,MAINSUIT_MUL} from '../types/mainSuit'
+  INSERT_SEARCH,MAIN_FOCUS_INDEX,SETTEXTMODEVALUE,SETMAINTEXT,MAINADDLABELITEM,SETMAININPUT,DEL_MAIN,CHANGE_LABELVAL_NUMBER,REMOVE_MAIN_ID,MAINSUIT_MUL,DEL_MAIN_LABLE} from '../types/mainSuit'
 import {getCommSymptoms,handleTailClick,insertMain,setSearch,getBigSymptom,setMainMoudle,confirm,
-  setNumberValue,setRadioValue,commConfirm,changeLabelVal,saveFreeVal,clearMainSuit,insertSearch,setTextModeValue,setCheckText,changeEditClear,addLabelItem,setInputLabel,backspaceText,changeNumLabelVal,removeId,multipleComfirn} from '../actions/mainSuit'
+  setNumberValue,setRadioValue,commConfirm,changeLabelVal,saveFreeVal,clearMainSuit,insertSearch,setTextModeValue,setCheckText,changeEditClear,addLabelItem,setInputLabel,backspaceText,changeNumLabelVal,removeId,multipleComfirn,delSingleLable} from '../actions/mainSuit'
 
 
 const initState = {
@@ -86,6 +86,8 @@ export default function(state=initState,action){
       return removeId(state,action);
     case MAINSUIT_MUL://单列多选
       return multipleComfirn(state,action);
+    case DEL_MAIN_LABLE://单独删除标签
+      return delSingleLable(state,action);
     default:
       return state;
   }

+ 5 - 2
src/store/reducers/otherHistory.js

@@ -1,6 +1,6 @@
 import {SETDATA,CONFIRMSELECTED,SETRADIO,SETNUMBER,SETOTHERCHECKBOX,SETOTHERTEXT,SETOTHERSEARCHDATA,
-  SELECTOTHERSEARCHDATA,CLEAROTHERHISTORY,CHANGEOTHERTEXTLABEL,SETOTHERINPUT,SETTEXTMODEVALUE,OTHER_FOCUS_INDEX,OTHERHIS_CLEAR,OTHERADDLABELITEM,OTHEREDICLEAR,DEL_OTHERHIS,CHANGEOTHERTEXTLABEL_NUMBER,OTHERHIS_MUL,REMOVE_OTHER_ID} from '../types/otherHistory';
-import {confirm,setRadioValue,setNumberValue,setCheckBoxValue,setCheckText,setSearchData,insertLabelData,clearOtherHistory,changeTextLabel,setOtherInput,setTextModeValue,addLabelItem,otherEditClear,backspaceText,changeNumLabelVal,multipleComfirn,removeId} from '../actions/otherHistory';
+  SELECTOTHERSEARCHDATA,CLEAROTHERHISTORY,CHANGEOTHERTEXTLABEL,SETOTHERINPUT,SETTEXTMODEVALUE,OTHER_FOCUS_INDEX,OTHERHIS_CLEAR,OTHERADDLABELITEM,OTHEREDICLEAR,DEL_OTHERHIS,CHANGEOTHERTEXTLABEL_NUMBER,OTHERHIS_MUL,REMOVE_OTHER_ID,DEL_OTHERHIS_LABLE} from '../types/otherHistory';
+import {confirm,setRadioValue,setNumberValue,setCheckBoxValue,setCheckText,setSearchData,insertLabelData,clearOtherHistory,changeTextLabel,setOtherInput,setTextModeValue,addLabelItem,otherEditClear,backspaceText,changeNumLabelVal,multipleComfirn,removeId,delSingleLable} from '../actions/otherHistory';
 import config from '@config/index.js';
 
 const block = Object.assign(JSON.parse(config.textLabel),{full:true});//空白时保留一个自由文本标签
@@ -17,6 +17,7 @@ export default function(state=initState,action){//console.log(state)
   switch (action.type){
     case SETDATA:
       res.data = action.data;
+      res.selecteds = action.selecteds||[];
       res.saveText = action.save||[];
       res.isEmpty = action.isEmpty;
       return res;
@@ -60,6 +61,8 @@ export default function(state=initState,action){//console.log(state)
         return multipleComfirn(state,action);
     case REMOVE_OTHER_ID:
         return removeId(state,action);
+    case DEL_OTHERHIS_LABLE:
+        return delSingleLable(state,action);
     default:
       return res;
   }

+ 2 - 1
src/store/types/checkBody.js

@@ -15,4 +15,5 @@ export const SETCHECKINPUT = 'set_check_body_input_label';
 export const DEL_CHECKBODY = 'DEL_CHECKBODY';//backspace
 export const CHANGECHECKTEXTLABEL_NUMBER = 'CHANGECHECKTEXTLABEL_NUMBER';//数字键盘
 export const CHECKCONFIRMSELECTED = 'spread_check_body_labels';
-export const CHECKBODY_MUL = 'CHECKBODY_MUL';//单列多选
+export const CHECKBODY_MUL = 'CHECKBODY_MUL';//单列多选
+export const DEL_CHECKBODY_LABLE = 'DEL_CHECKBODY_LABLE';

+ 1 - 0
src/store/types/currentIll.js

@@ -24,4 +24,5 @@ export const DEL_CURRENT = 'DEL_CURRENT';     //backspace删除
 export const CURRENT_TEXT_LABEL_NUMBER = 'CURRENT_TEXT_LABEL_NUMBER';     //数字键盘输入
 export const REMOVE_CURR_ID = 'REMOVE_CURR_ID';     //删除后移除id
 export const CURRENT_MUL = 'CURRENT_MUL';     //单列多选
+export const DEL_CURRENT_LABLE = 'DEL_CURRENT_LABLE';     //
 

+ 2 - 1
src/store/types/diagnosticList.js

@@ -8,4 +8,5 @@ export const GET_DIAGNOSTIC_STR = 'GET_DIAGNOSTIC_STR';
 export const SET_DIAG_TO_MAINSUIT = 'SET_DIAG_TO_MAINSUIT'; //判断第一次添加诊断是否添加到主诉
 export const GET_IS_FIRST = 'GET_IS_FIRST'; //判断是否第一次添加诊断
 export const CLEAR_ALL_DIAG = 'CLEAR_ALL_DIAG'; //清除所有诊断
-export const SET_CLICK_DIAG = 'SET_CLICK_DIAG' //设置点击的诊断,获取提示详情时需要
+export const SET_CLICK_DIAG = 'SET_CLICK_DIAG' //设置点击的诊断,获取提示详情时需要
+export const CLEAR_DIAGNOSE = 'CLEAR_DIAGNOSE' //

+ 2 - 1
src/store/types/homePage.js

@@ -10,4 +10,5 @@ export const HIDEDROP = 'set_box_drop_hide';//点击确定隐藏
 export const CLICKCOUNT = 'click_count';//埋点
 export const ISREAD = 'is_history_or_template';     //是否回读或模板数据
 export const SETOTHERHISTORY = 'set_otherHis_history';    //其他史历史数据暂存
-export const SETMINSCREEN = 'SETMINSCREEN';    //1024标识
+export const SETMINSCREEN = 'SETMINSCREEN';    //1024标识
+export const MODI_LOADING = 'MODI_LOADING';    //1024标识

+ 1 - 0
src/store/types/mainSuit.js

@@ -25,3 +25,4 @@ export const DEL_MAIN = 'DEL_MAIN';     //删除标签
 export const CHANGE_LABELVAL_NUMBER = 'CHANGE_LABELVAL_NUMBER';     //数字键盘输入存值
 export const REMOVE_MAIN_ID = 'REMOVE_MAIN_ID';     //移除id
 export const MAINSUIT_MUL = 'MAINSUIT_MUL';     //单列多选
+export const DEL_MAIN_LABLE = 'DEL_MAIN_LABLE';     

+ 2 - 1
src/store/types/otherHistory.js

@@ -19,4 +19,5 @@ export const OTHEREDICLEAR = 'OTHEREDICLEAR';    //文本框是否可以编辑
 export const DEL_OTHERHIS = 'DEL_OTHERHIS';    //backspace
 export const CHANGEOTHERTEXTLABEL_NUMBER = 'CHANGEOTHERTEXTLABEL_NUMBER';    //数字键盘
 export const OTHERHIS_MUL = 'OTHERHIS_MUL';    //单列多选
-export const REMOVE_OTHER_ID = 'REMOVE_OTHER_ID';    
+export const REMOVE_OTHER_ID = 'REMOVE_OTHER_ID';    
+export const DEL_OTHERHIS_LABLE = 'DEL_OTHERHIS_LABLE';    

+ 12 - 31
src/utils/tools.js

@@ -490,37 +490,18 @@ function filterArr(arr){
 
 function filterDataArr(arrTmp){   //数据处理
     let tmpArr = [];
-    let arr = arrTmp.join('').split('');
-    for(let i = 0;i < arr.length;i++){
-        if(!(arr[i].match(config.punctuationReg)||arr[i-1])){        //只有标点符号或者前一个标签无值是(说明本标点灰显,不显示在预览中)
-            arr.splice(i,1,'');
-        }
-        if(arr[i] && arr[i].indexOf('undefined') == -1){
-            if(tmpArr[tmpArr.length-1] != ',' && tmpArr[tmpArr.length-1] != ',' ){
-                tmpArr.push(arr[i])
-            }else if((tmpArr[tmpArr.length-1] == ',' && (arr[i] != ',' || arr[i] != ',')) || (tmpArr[tmpArr.length-1] == ',' && (arr[i] != ',' || arr[i] != ','))) {
-              if(arr[i] == '。'){     //前面逗号后面句号 [',','。']
-                tmpArr.pop();
-                tmpArr.push(arr[i]);
-              }else if(tmpArr[tmpArr.length-2] == '。' && (tmpArr[tmpArr.length-1] == ',' || tmpArr[tmpArr.length-1] == ',')){//前面句号后面逗号 ['。',',']
-                tmpArr.pop();
-                tmpArr.push(arr[i]);
-              }else if(arr[i] == ',' || arr[i] == ','){    //  中英文逗号交替[',',',']
-                tmpArr.pop();
-                tmpArr.push(arr[i]);
-              }else if(arr[i] == '、'){    //前面逗号后面句号 [',','、']
-                tmpArr.pop();
-                tmpArr.push(arr[i]);
-              }else if(tmpArr[tmpArr.length-2] == '、' && (tmpArr[tmpArr.length-1] == ',' || tmpArr[tmpArr.length-1] == ',')){    //前面逗号后面句号 ['、',',']
-                tmpArr.splice(tmpArr.length-2,1);
-                tmpArr.push(arr[i]);
-              }else{
-                tmpArr.push(arr[i]);
-              }
-            }
-        }
-    }
-    return (tmpArr.join('')).replace(/^,+/,"").replace(/,+$/,"").replace(/^,+$/,"").replace(/,+$/,"").replace(/^。+/,"").replace(/。+$/,"。");
+    tmpArr = arrTmp.map((it,i)=>{     //连续的标点符号保留第一个
+      if(!it.match(config.punctuationReg)&&!arrTmp[i-1]){        //只有标点符号或者前一个标签无值是(说明本标点灰显,不显示在预览中)
+          return '';
+      }
+      return it.replace(config.punReg,function(word){
+        return word.substr(0,1);
+      });
+    });
+
+    return tmpArr.join('').replace(config.punReg,function(word){
+      return word.substr(0,1);
+    }).replace(/^[,,.。::"“?”;;、!!]+/,'');      //去掉开头的标点符号,最后的标点保留第一个,中间连续的保留第一个
 }
 // 取消默认行为
 function preventDefault(event) {