Procházet zdrojové kódy

Merge remote-tracking branch 'origin/dev5.3.3' into testedMerge

zhouna před 5 roky
rodič
revize
de32fc1a99
100 změnil soubory, kde provedl 1066 přidání a 26220 odebrání
  1. 2 1
      build/webpack.dev.conf.js
  2. 1 0
      build/webpack.prod.conf.js
  3. binární
      favicon.ico
  4. 6 3
      src/common/components/DropList/index.jsx
  5. 10 10
      src/common/components/DropList/index.less
  6. 88 17
      src/common/components/EditableSpan/index.jsx
  7. 38 29
      src/common/components/InlineTag/index.jsx
  8. 5 4
      src/common/components/ItemBox/index.jsx
  9. 31 0
      src/common/components/LiItem/index.jsx
  10. 31 0
      src/common/components/LiItem/index.less
  11. 10 2
      src/common/components/NumberPan/index.jsx
  12. 7 5
      src/common/components/SearchBox/index.jsx
  13. 12 0
      src/common/components/Textarea/index.jsx
  14. 3 7
      src/common/less/variables.less
  15. 2 1
      src/components/AddAssistCheck/Textarea/index.jsx
  16. 4 4
      src/components/AddAssistCheck/index.jsx
  17. 5 5
      src/components/AddInspect/SlideSelect/index.jsx
  18. 3 28
      src/components/AddInspect/index.jsx
  19. 4 0
      src/components/AddInspect/index.less
  20. 2 2
      src/components/CheckBody/index.jsx
  21. 5 7
      src/components/CommonSymptom/index.less
  22. 4 4
      src/components/CurrentIll/index.jsx
  23. 2 2
      src/components/EMRContainer/index.jsx
  24. 2 2
      src/components/Emergency/HisList/index.less
  25. 26 5
      src/components/Information/index.less
  26. 131 0
      src/components/ListItem/index.jsx
  27. 47 0
      src/components/ListItem/index.less
  28. 85 0
      src/components/ListItems/index.jsx
  29. 22 0
      src/components/ListItems/index.less
  30. 6 14
      src/components/MainSuit/index.jsx
  31. 1 1
      src/components/MedicalInfo/index.jsx
  32. 2 3
      src/components/MultSpread/index.jsx
  33. 17 3
      src/components/Multiple/SlideItem/index.jsx
  34. 2 9
      src/components/Multiple/SlideItem/index.less
  35. 8 4
      src/components/Multiple/index.jsx
  36. 0 3
      src/components/Multiple/index.less
  37. 1 0
      src/components/NumberDrop/index.jsx
  38. 2 2
      src/components/OtherHistory/index.jsx
  39. 3 29
      src/components/PreviewBody/index.jsx
  40. 13 5
      src/components/PreviewBody/index.less
  41. 2 2
      src/components/PushItems/DetailsModal/index.jsx
  42. 53 8
      src/components/PushItems/RecommendInspect/index.jsx
  43. 69 54
      src/components/PushItems/RecommendInspect/index.less
  44. 2 2
      src/components/PushItems/TipsMsg/index.jsx
  45. 10 2
      src/components/PushItems/index.jsx
  46. 2 1
      src/components/RadioDrop/index.jsx
  47. 65 42
      src/components/RadioInpDrop/index.jsx
  48. 3 0
      src/components/RadioInpDrop/index.less
  49. 6 5
      src/components/SearchDrop/index.jsx
  50. 0 17
      src/components/SearchDrop/index.less
  51. 12 208
      src/components/SpreadDrop/index.jsx
  52. 2 76
      src/components/SpreadDrop/index.less
  53. 0 1
      src/containers/CheckBody.js
  54. 0 1
      src/containers/CurrentIll.js
  55. 3 2
      src/containers/EditableSpan.js
  56. 3 1
      src/containers/InlineTag.js
  57. 2 3
      src/containers/MainSuit.js
  58. 2 0
      src/containers/OperationContainer.js
  59. 0 1
      src/containers/OtherHistory.js
  60. 4 0
      src/containers/PushItemsContainer.js
  61. 4 16
      src/containers/SpreadDrop.js
  62. 7 6
      src/containers/eleType.js
  63. 37 64
      src/store/actions/checkBody.js
  64. 4 59
      src/store/actions/currentIll.js
  65. 6 29
      src/store/actions/mainSuit.js
  66. 9 49
      src/store/actions/otherHistory.js
  67. 2 0
      src/store/actions/pushMessage.js
  68. 4 3
      src/store/async-actions/fetchModules.js
  69. 7 3
      src/store/async-actions/pushMessage.js
  70. 4 4
      src/store/reducers/checkBody.js
  71. 3 4
      src/store/reducers/currentIll.js
  72. 0 1
      src/store/reducers/homePage.js
  73. 4 5
      src/store/reducers/mainSuit.js
  74. 3 5
      src/store/reducers/otherHistory.js
  75. 2 2
      src/utils/config.js
  76. 43 23
      src/utils/tools.js
  77. 44 1
      src/utils/utils.js
  78. 0 101
      static/pages/case_info.html
  79. 0 243
      static/pages/chronic-info/css/info.css
  80. binární
      static/pages/chronic-info/img/icon-2.png
  81. 0 105
      static/pages/chronic-info/index.html
  82. 0 414
      static/pages/chronic-info/js/chronic-info.js
  83. 0 1
      static/pages/chronic-info/lib/echarts.min.js
  84. 0 9597
      static/pages/chronic-info/lib/jquery-1.9.1.min.js
  85. 0 221
      static/pages/diag_push.html
  86. 0 65
      static/pages/hisLib/case_info.js
  87. 0 159
      static/pages/hisLib/diag_push.js
  88. binární
      static/pages/hisLib/img/bg.jpg
  89. binární
      static/pages/hisLib/img/hospital.png
  90. binární
      static/pages/hisLib/img/login.jpg
  91. binární
      static/pages/hisLib/img/logo.png
  92. binární
      static/pages/hisLib/img/password.png
  93. binární
      static/pages/hisLib/img/user.png
  94. 0 118
      static/pages/hisLib/info_push.js
  95. 0 115
      static/pages/hisLib/infomation.js
  96. 0 4241
      static/pages/hisLib/jquery-1.3.1.js
  97. 0 9597
      static/pages/hisLib/jquery-1.9.1.min.js
  98. 0 157
      static/pages/hisLib/login.css
  99. 0 175
      static/pages/hisLib/param.js
  100. 0 0
      static/pages/info_push.html

+ 2 - 1
build/webpack.dev.conf.js

@@ -73,7 +73,8 @@ module.exports = merge(baseWebpackConfig, {
         new HtmlWebpackPlugin({
             filename: 'index.html',
             template: 'index.html',
-            inject: 'body'
+            inject: 'body',
+          favicon:'./favicon.ico',
         }),
         new FriendlyErrorsPlugin()
     ]

+ 1 - 0
build/webpack.prod.conf.js

@@ -119,6 +119,7 @@ const webpackConfig = merge(baseWebpackConfig, {
             filename: config.build.index,
             template: 'index.html',
             inject: 'body',
+            favicon:'./favicon.ico',
             minify: {
                 removeComments: true,
                 collapseWhitespace: true,

binární
favicon.ico


+ 6 - 3
src/common/components/DropList/index.jsx

@@ -1,4 +1,5 @@
 import React,{Component} from 'react';
+import LiItem from '@common/components/LiItem';
 import classNames from 'classnames';
 
 import style from "./index.less";
@@ -39,10 +40,12 @@ class DropList extends Component{
     return <div className={this.getClass()} contentEditable='false'>
         <ul>
           {data&&data.map((it)=>{
-            /*return <li onClick={(e)=>this.handleSelect(e,it)} className={it.selected||(it.selected!==false&&+it.defaultSelect===1)?style['selected']:''}>{it.labelPrefix}{it.questionDetailList&&it.questionDetailList.length>0?it.questionDetailList[0].name:it.name}{it.labelSuffix}</li>*/
-            return <li onClick={(e)=>this.handleSelect(e,it)} className={it.selected||(boxMark!=1&&!hideTag&&it.selected!==false&&+it.defaultSelect===1)?style['selected']:''}>{it.labelPrefix}{it.name}{it.labelSuffix}</li>
+            return <LiItem handleClick={(e)=>this.handleSelect(e,it)}
+                            type='border'
+                            selected={it.selected||(boxMark!=1&&!hideTag&&it.selected!==false&&+it.defaultSelect===1)}
+                            >{it.labelPrefix}{it.name}{it.labelSuffix}</LiItem>
           })}
-          <li onClick={(e)=>this.handleClear(e)} className='red'>清空选项</li>
+          <li onClick={(e)=>this.handleClear(e)} className={style['mclear']}>清空选项</li>
         </ul>
       </div>;
   }

+ 10 - 10
src/common/components/DropList/index.less

@@ -3,16 +3,16 @@
   .pop;
   padding: 0 0 10px;
   color: @text-color;
-  li{
-    line-height: 35px;
-    border:1px #fff solid;
-    padding: 0 15px;
-    white-space: nowrap;
-    cursor: pointer;
-  }
-  li:hover,.selected{
-    border-color:#3B9ED0;
-  }
+}
+.mclear{
+  height: 32px;
+  line-height: 32px;
+  border:1px #fff solid;
+  padding: 0 20px;
+  white-space: nowrap;
+  text-align: center;
+  cursor: pointer;
+  color: @red;
 }
 .hide{
   display: none;

+ 88 - 17
src/common/components/EditableSpan/index.jsx

@@ -17,6 +17,7 @@ import $ from 'jquery';
  * * text:标签内文字
  *
  * ****/
+let indexNum = '';
 
 class EditableSpan extends Component{
   constructor(props){
@@ -48,8 +49,10 @@ class EditableSpan extends Component{
       setTimeout(function(){
         txt = that.$span.current.innerText||that.$span.current.innerHTML;
         that.$span.current.innerHTML = txt;
+        that.moveEnd($(that.$span.current)[0]);     //光标落到最后去
       });
     })
+    
     const {mainSaveText,full,setFocusIndex,i,boxMark,value}= this.props;
     let mainText = filterDataArr(mainSaveText);//主诉字数
     if(+boxMark==3||+boxMark==4){         //主诉为空,且第一次聚焦其他史查体时提示且不可输入
@@ -79,6 +82,7 @@ class EditableSpan extends Component{
       if(mainText.length >= config.limited){
         if(text1.length > labelVal.length){
           e.target.innerHTML = labelVal;    //innerHTML兼容FF26
+          e.target.blur();
           Notify.info(config.limitText);
           return
         }else if(text1.length == labelVal.length){
@@ -134,17 +138,27 @@ class EditableSpan extends Component{
     $(this.$span.current).off("paste");
   }
 
-  moveEnd(obj) {
+  moveEnd(obj,flg) {
     if(window.getSelection){//ie11 10 9 ff safari
-      obj.focus(); //解决ff不获取焦点无法定位问题
-      var range = window.getSelection();//创建range
-      range.selectAllChildren(obj);//range 选择obj下所有子内容
-      range.collapseToEnd();//光标移至最后
+      setTimeout(() => {
+        obj.focus(); //解决ff不获取焦点无法定位问题
+        var range = window.getSelection();//创建range
+        range.selectAllChildren(obj);//range 选择obj下所有子内容
+        if(flg){
+          range.collapseToStart();//光标移至开头
+        }else{
+          range.collapseToEnd();//光标移至最后
+        }
+      }, 0);
     }
     else if (document.selection) {//ie10 9 8 7 6 5
       var range = document.selection.createRange();//创建选择对象
       range.moveToElementText(obj);//range定位到obj
-      range.collapse(false);//光标移至最后
+      if(flg){
+        range.collapse(true);//光标移至开头
+      }else{
+        range.collapse(false);//光标移至最后
+      }
       range.select();
     }
   }
@@ -163,32 +177,35 @@ class EditableSpan extends Component{
         preVal:innerVal
       })
     }
+
     let range = window.getSelection();
     let textIndex = range.focusOffset;
-    let textLength = range.anchorNode.length;
-    if(ev.keyCode==37&& i!=0){//向左
+    let textLength = range.anchorNode&&range.anchorNode.length;
+    let preObj = $(this.$span.current).prev();
+    if(ev.keyCode==37){//向左
       let preObj = $(this.$span.current).prev();
       let obj = preObj[0]&&preObj[0].nodeName=="DIV"?preObj.prev():preObj;
       if(textIndex == 0){
         preventDefault(ev);
         if(obj){
-          this.moveEnd(obj[0]);
+          obj[0]&&this.moveEnd(obj[0]);
         }
       }
     }
     if(ev.keyCode==39){//向右
+      let curObj = $(this.$span.current)
       let nextObj = $(this.$span.current).next();
       let obj = nextObj[0]&&nextObj[0].nodeName=="DIV"?nextObj.next():nextObj;
       if(textIndex == textLength || textLength==undefined || (textIndex == 0 && textLength==1)){
         preventDefault(ev);
         if(obj){
-          obj.focus();
+          obj[0]&&obj.focus();
         }
       }
     }
   }
   handleKeyup(e){
-    const {boxMark,handleKeydown,removeId,handleClear,removeSpan} = this.props;
+    const {boxMark,handleKeydown,removeId,handleClear,removeSpan,handleChange} = this.props;
     const {preVal,index} = this.state;
     const ev = e||window.event;
     const target = ev.target||ev.srcElement;
@@ -200,13 +217,24 @@ class EditableSpan extends Component{
     if(ev.keyCode==46){//delete
       //判断nexObj
       // let nextObj = $(this.$span.current).next();
+      // ||textIndex ==innerVal.length&&preObj[0].nodeName=="DIV"
+      let range = window.getSelection();
+      let textIndex = range.focusOffset;
+
       let nextObj = $(this.$span.current);
+      let nexObj = $(this.$span.current).next();
+      let nexObjN = nexObj.next();
+      let preObj = $(this.$span.current).prev();
+      let nexVal = nexObj[0]&&nexObj[0].innerText || nexObj[0]&&nexObj[0].innerHTML; 
       if(preVal.trim().length==1&& !innerVal){
         removeId && removeId({boxMark,i:index,text:"",flag:'del'});
         handleClear && handleClear({boxMark});//删除最后一个字时清空搜索结果,避免现病史搜索框不立即消失的情况
         //如果后一个不是标签,则光标移到最前
         if(nextObj && nextObj[0].nodeName !=="DIV"){
-          nextObj.focus();
+          // nextObj.focus();
+          this.moveEnd(nextObj[0],1)
+        }else{
+          this.moveEnd(preObj[0])
         }
       }
       //action里往后删除
@@ -214,14 +242,32 @@ class EditableSpan extends Component{
         let data = innerVal.trim();
         if(nextObj && !config.punctuationReg.test(data) || data=='<br>'){
           handleKeydown&&handleKeydown({boxMark,i:index,text:data,flag:'del'});
-          // nextObj.focus();  
           if(nextObj && nextObj[0] && nextObj[0].nodeName !=="DIV"){
             // IE浏览器focus光标在最后,其他浏览器在最前
-            nextObj.focus();
+            // nextObj.focus();
+            if(boxMark==2&&this.props.data[index+1]&&this.props.data[index+1].flag==3){
+              this.moveEnd(nexObjN[0],1);
+            }else{
+              this.moveEnd(nextObj[0],1);
+            }
           }
           /*this.setState({
             index: null
           })*/
+        }else if(indexNum ==innerVal.length&&nexObj[0]&&nexObj[0].nodeName=="DIV"){//span最后一位后面为div标签
+          handleKeydown&&handleKeydown({boxMark,i:index+1,text:data,flag:'del'});
+          this.moveEnd(nextObj[0]);
+        }else if(nexObj[0]&&nexObj[0].nodeName=="SPAN"){
+          if(nexVal.length <= 1){//为空或者一个字delete时候
+            removeId && removeId({boxMark,i:index+1,text:"",flag:'del'});
+            handleClear && handleClear({boxMark});
+            this.moveEnd(nexObj[0])
+          }else if(nexVal.length > 1){
+            let tmpVal = nexVal.substr(1,data.length)
+            handleChange&&handleChange({text1:tmpVal,boxMark,i:index+1});
+            nexObj.html(tmpVal)
+            this.moveEnd(nexObj[0],1)
+          }
         }
       }
     }
@@ -230,6 +276,7 @@ class EditableSpan extends Component{
       // 主诉现病史去重:删除最后一个字的时候移除该数据(将name、id和value替换成空)并移除id
       // 前面是标签,内容为空时再删一次才移除标签;前面是文本,则直接移除;
       let preObj = $(this.$span.current).prev();
+      let curObj = $(this.$span.current);
       if(index!==0&&preVal.trim().length==1&& !innerVal){
         removeId && removeId({boxMark,i:index,text:""});
         handleClear && handleClear({boxMark});//删除最后一个字时清空搜索结果,避免现病史搜索框不立即消失的情况
@@ -238,8 +285,10 @@ class EditableSpan extends Component{
         }
       }
 
+      let range = window.getSelection();
+      let textIndex = range.focusOffset;
       if(innerVal !== preVal){
-
+        
       }else{
         // 中英文数字和下划线--单独删除标签
         /*const reg = new RegExp("([\u4E00-\uFA29]|[\uE7C7-\uE7F3]|[a-zA-Z0-9_])");
@@ -256,7 +305,7 @@ class EditableSpan extends Component{
         // let pattern = new RegExp(/^\,?$|^\,?$|^\.?$|^\。?$|^\、?$|^\;?$|^\;?$|^\:?$|^\:?$|\s/);
         // if(index!==0 && pattern.test(data)){
         // 后半段是处理IE
-        if(index!==0 && !config.punctuationReg.test(data) || index!==0 && data=='<br>'){
+        if(index!==0 && !config.punctuationReg.test(data) || index!==0 && data=='<br>'||indexNum == 0&&preObj[0]&&preObj[0].nodeName=="DIV"){
           // let preObj = $(this.$span.current).prev();
           let obj = preObj[0].nodeName=="DIV"?preObj.prev():preObj;
           handleKeydown&&handleKeydown({boxMark,i:index,text:data,flag:'backsp'});
@@ -264,6 +313,26 @@ class EditableSpan extends Component{
           this.setState({
             index: null
           })
+        }else if(textIndex == 0&&preObj[0]&&preObj[0].nodeName=="SPAN"){
+          let data = preObj[0].innerText || preObj[0].innerHTML;
+          if(data.length == 1){//span只有一个文本,删除后移除检索
+            removeId && removeId({boxMark,i:index-1,text:""});
+            handleClear && handleClear({boxMark});
+            if(preObj[0].nodeName !=="DIV"){
+              if(boxMark==2){
+                this.moveEnd(preObj[0],1);
+              }else{
+                this.moveEnd(preObj[0]);
+              }
+            }
+          }else{
+            let tmpVal = data.substr(0,data.length-1)
+            handleChange&&handleChange({text1:tmpVal,boxMark,i:index});
+            preObj.html(tmpVal)
+            if(preObj[0].nodeName !=="DIV"){
+              this.moveEnd(preObj[0]);
+            }
+          }
         }
       }
       // 主诉使用模板删除最后一个空span时移除
@@ -271,7 +340,6 @@ class EditableSpan extends Component{
         removeSpan();
       }
     }
-
   }
   componentWillReceiveProps(next){
     const isRead = this.props.isRead;
@@ -281,6 +349,9 @@ class EditableSpan extends Component{
   }
   handleClick(e){
     $(this.$span.current).attr({"contentEditable":true}).focus()
+    let range = window.getSelection();
+    let textIndex = range.focusOffset;
+    indexNum = textIndex
   }
   componentDidMount(){
     const {value} = this.props;

+ 38 - 29
src/common/components/InlineTag/index.jsx

@@ -1,6 +1,8 @@
 import React, { Component } from "react";
 import style from "./index.less";
 import classNames from 'classnames';
+import Notify from '@commonComp/Notify';
+import config from '@config/index';
 /***
  * 标签组件
  * author:zn@2018-11-08
@@ -17,7 +19,7 @@ class InlineTag extends Component {
     this.$span = React.createRef();
     this.state = {
       value:props.value||'',
-      placeholder:props.placeholder||''
+      over:false
     };
     this.handleBlur = this.handleBlur.bind(this);
     this.handleInput = this.handleInput.bind(this);
@@ -26,35 +28,51 @@ class InlineTag extends Component {
   }
   handleInput(e){       //输入时保存临时值,在修改灰显为黑色时判断用
     e.stopPropagation();
-    const value = e.target.innerText||e.target.innerHTML.replace(/&nbsp;$|^&nbsp;/,'');//兼容firefox26
+    const {mainSaveText,ikey,prefix,suffix,value,boxMark} = this.props;
+    const val = e.target.innerText||e.target.innerHTML.replace(/&nbsp;$|^&nbsp;/,'');//兼容firefox26
+    const myval = prefix+val+suffix;
+    const i = ikey.split("-")[1];
+    const tempArr = [...mainSaveText];
+    tempArr.splice(i,1);
+    let lefts = tempArr.join("");
+    if(boxMark==='1'&&(lefts+myval).length>config.limited) {      //主诉超过字数限制提示并禁止输入
+      e.target.innerHTML = value||'';
+      Notify.info(config.limitText);
+      this.setState({
+        over:true
+      });
+      return;
+    }
     this.setState({
-      value:value
-    })
+      value:val,
+      over:false
+    });
   }
   handleBlur(e){         //鼠标离开是保存值到store中
     e.stopPropagation(); //不阻止会触发外层div的失焦事件
-    const value = e.target.innerText||e.target.innerHTML.replace(/&nbsp;$|^&nbsp;/,'');;
-    const {handleInput,ikey,prefix,suffix,placeholder} = this.props;
-    if(!value.trim()){
+    const val = e.target.innerText||e.target.innerHTML.replace(/&nbsp;$|^&nbsp;/,'');
+    const {handleInput,ikey,prefix,suffix,placeholder,value,boxMark} = this.props;
+    if(!val.trim()){
       this.setState({
-        placeholder:placeholder,
         value:''
       });
+      e.target.innerHTML = placeholder;
+      return;
     }
-    //this.$span.current.innerText?(this.$span.current.innerText=''):(this.$span.current.innerHTML='');      //修改生成文字变成输入的2倍bug
-    handleInput&&handleInput({text:value.trim(),ikey,prefix,suffix});
-    this.setState({
-      value:value.trim()
-    });
+    if(boxMark==='1'&&this.state.over){     //超过字数限制,显示输入前的值
+      e.target.innerHTML = value||'';
+      return;
+    }
+    //主诉未超过字数限制,保存值
+    e.target.innerHTML = val.trim();
+    handleInput&&handleInput({text:val.trim(),ikey,prefix,suffix});
   }
   handleFocus(e){
     e.stopPropagation();
-    const text = e.target.innerText || e.target.innerHTML.replace(/&nbsp;$|^&nbsp;/,'');;
+    const text = e.target.innerText || e.target.innerHTML.replace(/&nbsp;$|^&nbsp;/,'');
     const {placeholder} = this.props;
     if(text.trim()==placeholder){
-      this.setState({
-        placeholder:''
-      });
+      e.target.innerHTML = '';
     }
   }
   getStyle(){
@@ -91,21 +109,12 @@ class InlineTag extends Component {
   }
   componentDidMount(){
     //设置最小宽度避免输入后宽度跳动
+    this.$span.current.innerHTML=this.props.placeholder;
     const spanWidth = window.getComputedStyle(this.$span.current).width;
     this.$span.current.style.minWidth=spanWidth;
   }
-  componentWillReceiveProps(nextProps){
-    if((nextProps.placeholder == this.props.placeholder)&&(nextProps.value == this.props.value)){
-      return
-    }
-    this.setState({
-      placeholder:nextProps.placeholder,
-      value:nextProps.value
-    })
-  }
   render(){
-    const {prefix,suffix,value} = this.props;
-    const {placeholder} = this.state;
+    const {prefix,suffix} = this.props;
     return <div className={this.getStyle()}
                 onClick={this.handleFixClick}>
                 <span>{prefix}</span>
@@ -115,7 +124,7 @@ class InlineTag extends Component {
                       onInput={this.handleInput}
                       onFocus={this.handleFocus}
                       onClick={(e)=>{e.stopPropagation();}}
-                      ref={this.$span}>&nbsp;{value||placeholder}</span>
+                      ref={this.$span}></span>
                 <span>{suffix}</span>
             </div>;
     }

+ 5 - 4
src/common/components/ItemBox/index.jsx

@@ -33,14 +33,15 @@ class ItemBox extends Component {
     handleClick && handleClick(e);//为了获取鼠标位置,显示搜索结果框;
   }
   handleInput(e){
-    const {onchange,data} = this.props;
+    const {handleChange,data} = this.props;
     if(!data || (data.length==0)){//避免结构化下触发onchange,导致下拉要点两下
-      onchange&&onchange(e)
+      handleChange&&handleChange(e)
     }
   }
 
   componentDidMount(){
     const {setRef} = this.props;
+    this.$div.current.innerHTML='';     //bug2276,FF26初始光标位置问题
     setRef&&setRef(this.$div);
     if(isIE()){
       $(this.$div.current).onIe8Input(function(e){
@@ -58,10 +59,10 @@ componentWillReceiveProps(nextP){
     }
 }
   render(){
-    const {title,children,editable,className,handleFocus,onchange,fuzhen,border,handleBlur,titleTop,backgroundColor,boxId} = this.props;
+    const {title,children,editable,className,handleFocus,fuzhen,border,handleBlur,titleTop,backgroundColor,boxId} = this.props;
     return <div className={style["box"]+" "+"clearfix"} >
       <div className={style["title"] + ' '+(className||'')} style={{marginTop:titleTop?'22px':''}}>{title}</div>
-      <div ref={this.$div} className={`${style["content"]} ${border?style["border"]:''} ${backgroundColor?style["noBorder"]:''}`} contentEditable={editable} style={this.getBoxStyle()} onFocus={handleFocus} onInput={this.handleInput} onClick={(e)=>{this.handleClick(e);}} onBlur={handleBlur} id={boxId} onkeydown={handleEnter}>
+      <div ref={this.$div} className={`${style["content"]} ${border?style["border"]:''} ${backgroundColor?style["noBorder"]:''}`} contentEditable={editable} style={this.getBoxStyle()} onFocus={editable?handleFocus:null} onInput={this.handleInput} onClick={(e)=>{this.handleClick(e);}} onBlur={handleBlur} id={boxId} onkeydown={handleEnter}>
         {fuzhen?children||fuzhen:children}
       </div>
     </div>

+ 31 - 0
src/common/components/LiItem/index.jsx

@@ -0,0 +1,31 @@
+import classNames from 'classnames';
+import styles from './index.less';
+/**
+ * 单/多选列表的一行
+ * selected:是否被选中
+ * noHover:是否有hover状态
+ * noDot:无最大宽度缩略...样式
+ * disabled:灰色样式,与selected,noHover互斥
+ * handleClick:点击事件
+ * title,style:原生属性
+ * type: border边框选中样式,check蓝色对勾选中样式(默认),noneCheck黑色对勾选中样式
+ *
+ * **/
+function LiItem(props){
+  const {children,handleClick,title,style,noHover,selected,disabled,noDot} = props;
+  const type = props.type||'check';     //选中样式默认多选选中样式
+  const dot = noDot?styles['no-dot']:'';
+  if(disabled){
+    return <li onClick={handleClick} className={classNames(styles["disabled"],dot,styles["li-item"])} title={title} style={style}>{children}</li>;
+  }
+  const typeMap = {
+    border:'border-selected',
+    check:'check-selected',
+    noneCheck:'black-selected',
+  };
+  const hover = noHover?'':styles['hoverable'];
+  const select = selected?styles[typeMap[type]]:'';
+  return <li onClick={handleClick} className={classNames(hover,select,dot,styles["li-item"])} title={title} style={style}>{children}</li>;
+};
+
+export default LiItem;

+ 31 - 0
src/common/components/LiItem/index.less

@@ -0,0 +1,31 @@
+@import "~@less/mixin.less";
+
+.li-item{
+  height:30px;
+  line-height: 30px;
+  padding: 0 18px 0 22px;
+  border:1px #fff solid;
+  text-align: left;
+  white-space: nowrap;
+  max-width: 100%;
+  text-overflow: ellipsis;
+  overflow: hidden;
+  cursor: pointer;
+}
+.hoverable:hover,.border-selected{
+  border-color:#3B9ED0;
+}
+.check-selected,.black-selected{
+  .select-li;
+}
+.black-selected{
+  background-image:url('@common/images/then.png');
+}
+.disabled{
+  color: @disable-color;
+}
+.no-dot{
+  /*max-width:100%;
+  width: unset;
+  text-overflow: unset;*/
+}

+ 10 - 2
src/common/components/NumberPan/index.jsx

@@ -22,7 +22,7 @@ class NumberPan extends Component{
     onSelect&&onSelect(value+text);
   }
   handleClear(e){
-    e.stopPropagation();
+    e&&e.stopPropagation();
     const onSelect = this.props.handleSelect;
     this.setState({
       value: ''
@@ -57,6 +57,14 @@ class NumberPan extends Component{
       display:show?'table':'none'        //table onBlur阻止冒泡是为了修复multSpread中数字键盘点击触发最外层数字组件onBlur事件
     }
   }
+  componentWillReceiveProps(next){
+    //超过范围后重新打开下拉点删除,显示原值bug修改
+    if(next.toClear&&!this.props.toClear){
+      this.setState({
+        value: this.props.value
+      });
+    }
+  }
   render(){
     const select = this.handleSelect;
     const noString=this.props.noString;
@@ -77,7 +85,7 @@ class NumberPan extends Component{
           <td><button onMouseUp={select}>4</button></td>
           <td><button onMouseUp={select}>5</button></td>
           <td><button onMouseUp={select}>6</button></td>
-          <td><button onMouseUp={this.handleBack.bind(this)}><img src={backspace} onClick={this.handleBack.bind(this)} /></button></td>
+          <td><button onMouseUp={this.handleBack.bind(this)}><img src={backspace} /></button></td>
         </tr>
         <tr>
           <td><button onMouseUp={select}>7</button></td>

+ 7 - 5
src/common/components/SearchBox/index.jsx

@@ -4,7 +4,7 @@ import clear from './imgs/clear.png';
 import search from './imgs/search.png';
 import config from '@config/index';
 import classNames from 'classnames';
-import SearchDrop from '@components/SearchDrop';
+import LiItem from '@common/components/LiItem';
 import ScrollArea from 'react-scrollbar';
 /**
  * 主诉“添加症状”下拉中的:搜索框(含结果下拉)
@@ -25,7 +25,7 @@ class SearchBox extends React.Component {
         this.handleFocus = this.handleFocus.bind(this);
         this.handleBlur = this.handleBlur.bind(this);
         this.clickIcon = this.clickIcon.bind(this);
-        this.handleSearchSelect = this.handleSearchSelect.bind(this);
+        //this.handleSearchSelect = this.handleSearchSelect.bind(this);
         this.reset = this.reset.bind(this);
     }
     handleClearVal(){
@@ -37,7 +37,7 @@ class SearchBox extends React.Component {
         });
         clearSearch&&clearSearch();
     }
-    handleSearchSelect(e,item){
+    handleSearchSelect(item,e){
       e.stopPropagation();
       e.preventDefault();
       const {clearSearch,onSelect} = this.props;
@@ -70,7 +70,7 @@ class SearchBox extends React.Component {
         });
     }
     handleFocus(e){//聚焦时边框变蓝色
-      e.stopPropagation();
+      //e.stopPropagation();
       e.preventDefault();
       this.setState({border:true})
     }
@@ -149,7 +149,9 @@ class SearchBox extends React.Component {
                       <ul>
                         {mainSearchData&&mainSearchData.map((it)=>{
                           litext = it.showType==1?it.name:it.name+'('+it.retrievalName+')';
-                          return <li key={it.conceptId} onClick={(e)=>this.handleSearchSelect(e,it)} title={litext}>{litext}</li>
+                          return <LiItem key={it.conceptId}
+                                         handleClick={this.handleSearchSelect.bind(this,it)}
+                                         title={litext}>{litext}</LiItem>
                         })}
                       </ul>
                     </ScrollArea>

+ 12 - 0
src/common/components/Textarea/index.jsx

@@ -26,6 +26,16 @@ class Textarea extends Component {
   }
   handleFocus(e){            //初始显示props中的值,focus已经显示输入的值,避免值更新闪烁
     const {handleFocus,fuzhen,handleInput,isChronic,hasMain,boxMark} = this.props;
+    //黏贴时去掉html格式
+    const that = this;
+    let txt = '';
+    $(this.$dom.current).on("paste",function(e){
+      setTimeout(function(){
+        txt = that.$dom.current.innerText||that.$dom.current.innerHTML;
+        that.$dom.current.innerHTML = txt;
+        that.moveEnd($(that.$dom.current)[0]);     //光标落到最后去
+      });
+    });
     //const {inpText} = this.state;console.log(inpText,boxMark,hasMain)
     if(boxMark!='1'&&!hasMain&&!e.target.innerText){
       //现病史、其他史无主诉且本身无内容是聚焦提示无法操作
@@ -104,6 +114,8 @@ class Textarea extends Component {
   handleBlur(e){
     const {saveChronic} = this.props;
     const text = e.target.innerText || e.target.innerHTML;
+    //解除绑定事件
+    $(this.$dom.current).off("paste");
     getFeature(text).then((res)=>{
       if(res.data.code==0){
         const result = res.data.data;

+ 3 - 7
src/common/less/variables.less

@@ -18,7 +18,7 @@
 
 @btn-text-color: #fff;
 @text-color: #333;
-@placeholder-color: #bfbfbf;
+@placeholder-color: #716e6e;
 
 @link-hover-decoration: underline;
 
@@ -90,14 +90,10 @@
   width: 100%;
   font-size: 14px;
   text-align: left;
-  border: none;
   color:#000000;
-  /*padding-left: 40px;*/
+  border: 1px solid #fff;
   cursor: pointer;
-  background: rgba(59,158,208,0.1);
-  background-image: url(../images/first.png);
-  background-repeat: no-repeat;
-  background-position: 0px 10px;
+  background:url(../images/first.png) rgba(59,158,208,0.1) 5px 8px no-repeat;
 }
 .clear{
   width: 60px;

+ 2 - 1
src/components/AddAssistCheck/Textarea/index.jsx

@@ -18,7 +18,7 @@ class Textarea extends Component {
   }
   handleInput(e){
     const {handleChangeAssistValue,idx,handlePush} = this.props;
-    const text = (e.target.innerHTML || e.target.innerText);
+    const text = (e.target.innerText || e.target.innerHTML||e.target.textContent);
     $(e.target).find('img').remove();
     this.context.scrollArea.scrollBottom();       //避免滚动条上移不见
     // e.target.innerHTML = e.target.textContent
@@ -35,6 +35,7 @@ class Textarea extends Component {
     }else{
       e.target.nextSibling.innerText?(e.target.nextSibling.innerText = '报告描述或意见'):(e.target.nextSibling.innerHTML = '报告描述或意见')
     }
+    $(".TextareaRsize").css({marginTop:0});
     this.setState({
       timer
     });

+ 4 - 4
src/components/AddAssistCheck/index.jsx

@@ -85,6 +85,7 @@ class AddAssistCheck extends React.Component {
   delConfirm(type) {
     const { handleDelAssist, handlePush } = this.props;
     const { id,activeName } = this.state;
+    $(".TextareaRsize").css({marginTop:0});
     handleDelAssist && handleDelAssist(id,activeName,type);
     handlePush && handlePush();           //右侧推送
     this.setState({
@@ -195,7 +196,6 @@ class AddAssistCheck extends React.Component {
       width:'8px',
       background:'#f1f1f1'};
     const barStyle={background:'#777',width:'100%'};
-    $(".TextareaRsize").css({marginTop:0})
     return <React.Fragment>
       {
         checkedListImport.map((part,index)=>{
@@ -324,9 +324,9 @@ class AddAssistCheck extends React.Component {
             {
               (list && list.length>0) || (assistVal != '') || (assistList&&assistList.length==0)?'':<div>
                 <p style={{padding:'5px 30px',color:'#bfbfbf'}}>常用辅检项</p>
-                <ScrollArea speed={0.8}
+                {assistList.length>6?<ScrollArea speed={0.8}
                             horizontal={false}
-                            stopScrollPropagation={assistList.length>6?true:false}
+                            stopScrollPropagation={true}
                             style={{height:'225px'}}
                             className={styles["area"]}
                             verticalContainerStyle={contStyle}
@@ -335,7 +335,7 @@ class AddAssistCheck extends React.Component {
                 {
                   this.getCommonList()
                 }
-                </ScrollArea>
+                </ScrollArea>:this.getCommonList()}
               </div>
             }
           </SearchOption> : ''}

+ 5 - 5
src/components/AddInspect/SlideSelect/index.jsx

@@ -156,7 +156,7 @@ class SlideSelect extends Component {
                                     <td style={{width:'30%'}}>
                                       <span className={styles.tagSpan}>
                                         {val.name}
-                                        <span className={styles.imgInfo1} title='点击i图标可查看详细说明' onClick={()=>getInfomation({name:val.uniqueName || '', position: 1, type: 12})}></span>                                        
+                                        <span className={styles.imgInfo1} title='点击i图标可查看详细说明' onClick={()=>getInfomation({name:val.uniqueName || '', position: 1, type: 12,showName:item.name+'('+val.name+')'})}></span>                                        
                                       </span>
                                     </td>
                                     {showDetails(val)}
@@ -174,7 +174,7 @@ class SlideSelect extends Component {
                                     <td style={{width:'30%'}}>
                                       <span className={styles.tagSpan}>
                                         {val.name}
-                                        <span className={styles.imgInfo1} title='点击i图标可查看详细说明' onClick={()=>getInfomation({name:val.uniqueName || '', position: 1, type: 12})}></span>
+                                        <span className={styles.imgInfo1} title='点击i图标可查看详细说明' onClick={()=>getInfomation({name:val.uniqueName || '', position: 1, type: 12,showName:item.name+'('+val.name+')'})}></span>
                                       </span>
                                     </td>
                                     {showDetails(val)}
@@ -233,16 +233,16 @@ class SlideSelect extends Component {
                             </div>
                         </div>
                             {/* 填写单内容显示 */}
-                      <ScrollArea speed={0.8}
+                      {stopScroll?<ScrollArea speed={0.8}
                                   horizontal={false}
-                                  stopScrollPropagation={stopScroll}
+                                  stopScrollPropagation={true}
                                   style={{maxHeight:'358px'}}
                                   className={styles["area"]}
                                   verticalContainerStyle={contStyle}
                                   verticalScrollbarStyle={barStyle}
                                   contentClassName="content">
                             { getItemList() }
-                      </ScrollArea>
+                      </ScrollArea>:getItemList()}
                     </InspectCommon>
                 : null
             }

+ 3 - 28
src/components/AddInspect/index.jsx

@@ -2,7 +2,7 @@ import React from 'react';
 import { SearchOption, InspectCommon, Calendar, Notify, ConfirmModal, Add, DelToast } from '@commonComp';
 import SlideExcel from './SlideExcel';
 import SlideSelect from './SlideSelect';
-import { deepClone, getPageCoordinate, getStatusImg ,getCurrentDate,setPosition,getCalendarDate} from '@utils/tools';
+import { deepClone, getPageCoordinate, getStatusImg,getDomUpDown ,getCurrentDate,setPosition,getCalendarDate} from '@utils/tools';
 import styles from './index.less';
 import ScrollArea from 'react-scrollbar';
 import store from '@store';
@@ -316,33 +316,8 @@ class Inspect extends React.Component {
   }
   showDetails(val) {
     let min = val.minValue, max = val.maxValue, value = val.value, dom = '';
-    if(min == null&&max == null||min == undefined&&max == undefined||min == ''&&max == ''){
-      dom = getStatusImg(0, value, 1)
-    }else if (!isNaN(min) && !isNaN(max)) {//有最大值最小值
-      if (isNaN(value)) {//输入的不是数据
-        dom = getStatusImg(1, value, 1)
-      } else if (value <= min) {//下降
-        dom = getStatusImg(3, value, 1)
-      } else if (value >= max) {//上升
-        dom = getStatusImg(2, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else if (isNaN(min) && !isNaN(max)) {//有最大值无最小值
-      if (value >= max) {//上升
-        dom = getStatusImg(2, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else if (!isNaN(min) && isNaN(max)) {//有最小值无最大值
-      if (value <= min) {//下降
-        dom = getStatusImg(3, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else {//无最大最小值
-      dom = getStatusImg(1, value, 1)
-    }
+    dom = getDomUpDown(min,max,value)
+    
     if (val.questionDetailList.length > 0) {
       return val.questionDetailList.map((item) => {
         if (val.value == item.name) {

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

@@ -159,10 +159,14 @@
             text-align: center;
             float: left;
             margin-right: 10px;
+            height: 28px;
+            line-height: 28px;
         }
         .unit {
             display: inline-block;
             width: 70px;
+            height: 28px;
+            line-height: 28px;
             overflow: hidden;
             text-overflow: ellipsis;
             white-space: nowrap;

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

@@ -44,7 +44,7 @@ class CheckBody extends Component{
     return false;
   }
   getLabels(){
-    const {data,showArr,saveText,selecteds,importLabel,setHighter} = this.props;
+    const {data,showArr,saveText,importLabel,setHighter} = this.props;
     let arr = [],list=[];
     const {boxMark,showAll} = this.state;
     const moreNum =data.length-[...data].reverse().findIndex((it)=>it.showInCheck)-1;//被隐藏的位置
@@ -62,7 +62,7 @@ class CheckBody extends Component{
       arr = list.map((it,i)=>{
         const preIsExt = list[i-1]&&list[i-1].specFlag===4?true:false;//前一个标签是否为体征标签
         const afterIsExt = list[i+1]&&list[i+1].specFlag===4?true:false;//后一个标签是否为体征标签
-        return chooseType({item:it,preIsExt,afterIsExt,boxMark,i,showArr,saveText,selecteds,importLabel,setHighter});
+        return chooseType({item:it,preIsExt,afterIsExt,boxMark,i,showArr,saveText,importLabel,setHighter});
       });
     }
     showMoreBtn&&arr.push(more);      //是否显示收起展开按钮

+ 5 - 7
src/components/CommonSymptom/index.less

@@ -21,19 +21,17 @@
     text-indent: 15px;
   }
   li{
-    width: 85px;
+    width: 92px;
     line-height: 30px;
-    padding-left: 15px;
-    margin-right: 5px;
+    padding-left: 20px;
+    /*margin-right: 5px;*/
+    border:1px solid #fff;
     cursor: pointer;
     display: inline-block;
   }
-  li:hover{
-    border-color:#3B9ED0;
-  }
   .selected{
     .select-li;
-    width: 85px;
+    width: 92px;
   }
   .clear{
     .btnCom;

+ 4 - 4
src/components/CurrentIll/index.jsx

@@ -89,14 +89,14 @@ class CurrentIll extends Component{
   }
 
   getInlineTag(){
-    const {data,showArr,selecteds,saveText,insertProcess,symptomIds,allModules} = this.props;
+    const {data,showArr,saveText,insertProcess,symptomIds,allModules} = this.props;
     const boxMark = '2';
 
     let list = data&&data.map((item,i)=>{
       if(item.flag && item.flag==3){
         return <TailInlineTag {...item} showText={item.relationModuleName} handleTailClick={(obj)=>{insertProcess(obj,allModules)}}></TailInlineTag>
       }else {
-        return chooseType({item,boxMark,i,hideTag:false,showArr,selecteds,saveText,mainIds:symptomIds});
+        return chooseType({item,boxMark,i,hideTag:false,showArr,saveText,mainIds:symptomIds});
       }
     })
     return list;
@@ -142,8 +142,8 @@ class CurrentIll extends Component{
     return  <div className={style['current-ill']}>
       <ItemBox title='现病史' 
       editable={editClear||data.length==0?true:false} 
-      handleFocus={this.handleFocus} 
-      onchange={forbidInput?this.onchange:''} 
+      handleFocus={this.handleFocus}
+      handleChange={forbidInput?this.onchange:''}
       handleClick={this.handleClick}
       handleBlur={this.handleBlur}>
         {data.length>0?this.getInlineTag():(saveText[0]?saveText[0]:'')}

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

@@ -55,13 +55,13 @@ class EMRContainer extends Component {
         const barStyle={background:'#777',width:'100%',marginLeft:'0'};
         return <div className={style['EMR-container']}
                     ref={this.$cont} id="addScrollEvent">
+            <InfoTitle></InfoTitle>
           <ScrollArea speed={1}
                       horizontal={false}
                       className={style["area"]}
                       verticalContainerStyle={contStyle}
                       verticalScrollbarStyle={barStyle}
                       contentClassName="content">
-            <InfoTitle></InfoTitle>
             <div className={style['inner']} id="EmrContainer" ref={this.$div}>
                 <MainSuit></MainSuit>
                 <CurrentIll></CurrentIll>
@@ -74,8 +74,8 @@ class EMRContainer extends Component {
                 <Diagnosis setHighter={this.setHighter}></Diagnosis>
                 <AdviceContainer></AdviceContainer>
             </div>
+    </ScrollArea>
             <OperationContainer></OperationContainer>
-          </ScrollArea>
         </div>
     }
 }

+ 2 - 2
src/components/Emergency/HisList/index.less

@@ -114,13 +114,13 @@
       margin: 0 8px 0 0;
     }
     .export{
-      color: #E2EFF6;
+      color: #a3c9de;
       display: inline-block;
       width: 92px;
       height: 30px;
       line-height: 30px;
       text-align: center;
-      border: 1px solid #E2EFF6;
+      border: 1px solid #a3c9de;
       border-radius: 4px;
       margin-left: 136px;
       cursor: pointer;

+ 26 - 5
src/components/Information/index.less

@@ -1,18 +1,39 @@
 .title {
   clear: both;
-  font-size: 24px;
-  margin-bottom: 30px;
+  font-size: 22px;
+  margin-bottom: 15px;
   text-align:center;
   padding-top: 15px;
 }
 .patInfo {
-  margin: 0px 0px 30px 0px;
+  margin: 0px 0px 15px 0px;
   td {
     border: 1px solid #aaa;
-    padding: 8px 10px;
+    padding: 4px 8px;
     font-size: 14px;
   }
   tr td:first-child{
-    width: 31%;
+    width: 35%;
   }
 }
+@media print{
+  .title {
+    clear: both;
+    font-size: 22px;
+    margin-bottom: 15px;
+    text-align:center;
+    padding-top: 15px;
+  }
+  .patInfo {
+    margin: 0px 0px 15px 0px;
+    td {
+      border: 1px solid #aaa;
+      padding: 2px 8px;
+      font-size: 12px;
+    }
+    tr td:first-child{
+      width: 36%;
+    }
+  }
+}
+

+ 131 - 0
src/components/ListItem/index.jsx

@@ -0,0 +1,131 @@
+import classNames from "classnames";
+import {Component} from "react";
+import ScrollArea from 'react-scrollbar';
+import {getIds} from '@utils/tools.js';
+import LiItem from '@common/components/LiItem';
+import style from './index.less';
+
+class ListItem extends Component{
+  constructor(props){
+    super(props);
+    this.getData = this.getData.bind(this);
+    this.getLis = this.getLis.bind(this);
+  }
+  handleClick(item,i,e){
+    e.stopPropagation();
+    // window.event? window.event.cancelBubble = true : e.stopPropagation();
+    const {handleClick,isExclu,isRadio,data,exists,noneIds,withs,joint,listIndex} = this.props;
+    const index=listIndex+''+i;
+    //列单选处理
+    if(isRadio){
+      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,questionId:selected.questionId});
+      }else{
+        handleClick&&handleClick(item,isExclu,joint,index);
+      }
+      return;
+    }
+    handleClick&&handleClick(item,isExclu,joint,index);
+  }
+  getLis(){
+    const {exclusion,noneIds,exists,withs,ban,isSpecialPos,datas} = this.props;
+    let type='';    //选中样式类型
+    let selected = false;  //是否选中
+    const list = Object.keys(ban).length>0?[...exists,...withs,ban]:[...exists,...withs];
+    const arrs = [...noneIds,...getIds(list)];   //非无殊选中项id集合
+    return datas&&datas.map((it,i)=>{
+      if(isSpecialPos){
+        //无殊部分,非无殊项有选中,则无殊项灰显(仍可点,选中非无殊项取消选中,反之亦然)
+        selected = exclusion===it.id;
+        return <LiItem handleClick={this.handleClick.bind(this,it,i)}
+                       key={it.id}
+                       noHover={true}
+                       selected={selected}
+                       noDot={true}
+                       disabled={(exclusion&&!selected)||arrs.length>0}
+                       type='check'
+                       >{it.name}</LiItem>
+      }
+      //非无殊项,有无殊项被选中,则灰显,“无”选中黑√随后选中的项也黑√选中,
+      type = noneIds.includes(it.id)?'noneCheck':'check';
+      selected = arrs.includes(it.id);
+      return <LiItem handleClick={this.handleClick.bind(this,it,i)}
+                     key={it.id}
+                     type={type}
+                     noHover={true}
+                     selected={selected}
+                     disabled={exclusion}
+                     title={it.name.length>8?it.name:''}>{it.name&&it.name.length>8?it.name.slice(0,8)+'...':it.name}</LiItem>
+    })
+  }
+  getData(){
+    const {datas} = this.props;
+    const contStyle={
+      opacity:'0.4',
+      right:'0',
+      top:'1px',
+      zIndex:'15',
+      width:'6px',
+      background:'#f1f1f1'};
+    const barStyle={background:'#777',width:'100%'};
+    if(!datas||datas.length===0){
+      return <li className={style['no-push-data']}>暂无推送</li>
+    }
+    const liArr = this.getLis();
+    if(datas&&datas.length>11){
+      //超过最多显示条数,添加自定义滚动条,不能全部添加,不需要滚动条时不能阻止外部滚动条滚动事件
+      return <ScrollArea speed={0.8}
+                         horizontal={false}
+                         stopScrollPropagation={true}
+                         style={{maxHeight:'330px'}}
+                         className={style["area"]}
+                         verticalContainerStyle={contStyle}
+                         verticalScrollbarStyle={barStyle}
+                         contentClassName="content">
+        {liArr}
+      </ScrollArea>;
+    }
+    return liArr;
+  }
+
+  getMainData(){//主诉添加症状-带搜索框
+    const {exists,withs,ban,datas} = this.props;
+    if(!datas||datas.length===0){
+      return <li className={style['no-push-data']}>暂无推送数据,可通过搜索查找更多内容~ </li>
+    }
+    const arrs = getIds([...exists,...withs,ban]);   //非无殊选中项id集合
+    return datas&&datas.map((it,i)=>{
+      return <LiItem handleClick={this.handleClick.bind(this,it,i)}
+                 key={it.id}
+                 noHover={true}
+                 selected={arrs.includes(it.id)}
+                 title={it.name.length>4?it.name:''}
+                 style={{'width':'58px','display':'inline-block'}}>
+        {it.name&&it.name.length>4?it.name.slice(0,4)+'...':it.name}
+      </LiItem>
+    });
+  }
+
+  render(){
+    const {isSpecialPos,boxMark,tagType,listIndex,isSingle,pos} = this.props;
+    const posit = isSpecialPos?style['independent']:'';
+    const ifMainSear = boxMark==1 && tagType==11 && !pos?true:false;
+    // 单列直接设置宽度,多列则第二列设置(伴字ul不设置宽度)
+    const main = ifMainSear&&!isSingle&&listIndex==1?style['mainUl']:(ifMainSear&&isSingle?style['mainUl']:'');
+    return  <ul className={classNames(style['row'],posit,main)} onBlur={(e)=>e.stopPropagation()}>
+      {ifMainSear?this.getMainData():this.getData()}
+    </ul>
+  }
+}
+
+export default ListItem;

+ 47 - 0
src/components/ListItem/index.less

@@ -0,0 +1,47 @@
+@import "~@less/mixin.less";
+
+.row{
+  display: inline-block;
+  vertical-align: top;
+  margin-left: 8px;
+  max-height: 330px;
+  overflow-y: auto;
+}
+.independent{
+  display: block;
+  width: 100%;
+  border-bottom: 1px @disable-border-color solid;
+}
+.mainUl{
+  width: 495px;
+  white-space: normal;
+  li{
+    width: 99px !important;
+  }
+  .no-push-data{
+    color:@disable-color;
+    width: auto !important;
+  }
+}
+.no-push-data{
+  color:@disable-color;
+}
+.tag,.selected-tag{
+  cursor: pointer;
+  line-height: 20px;
+  &.ext{
+    color: @extBlue;
+  }
+}
+
+.selected-tag{
+  padding: 0;
+  color: @text-color;
+  border-bottom: 1px @border-color solid;
+  line-height: 22px;
+  word-break: break-all;
+}
+.orderTips{
+  color: #bfbfbf;
+  margin:0 0 0 28px;
+}

+ 85 - 0
src/components/ListItems/index.jsx

@@ -0,0 +1,85 @@
+import React, {Component} from "react";
+import SearchBox from '@containers/SearchBox'
+import ListItem from '@components/ListItem';
+import style from './index.less';
+
+class ListItems extends Component{
+  constructor(props){
+    super(props);
+    this.$cont = React.createRef();
+    this.clickConfirm = this.clickConfirm.bind(this);
+  }
+  getLabels(){
+    const {data,handleSelect} = this.props;
+    let detail = [];
+    let isSpecialPos = false;       //是否特殊位置(单行在上面,如无殊)
+    let isExclu = false;      //是否与其他互斥
+    let isRadio;      //是否为单选列,默认多选列
+    let isSingle = data.length == 1?true:false; //是否为单列,无伴的情况
+    const list = data&&data.map((it,i)=>{
+      isSpecialPos = (+it.formPosition === 1);
+      isExclu = (+it.exclusionType===1);
+      isRadio = (+it.tagType ===1&&+it.controlType === 1);
+      if(+it.controlType===0){
+        detail = it.questionMapping;
+      }else{
+        detail = it.questionDetailList;
+      }
+      return <ListItem datas={detail}
+                       isRadio={isRadio}
+                       isSingle={isSingle}
+                       joint={it.joint}
+                       listIndex={i}
+                       isSpecialPos={isSpecialPos}
+                       isExclu={isExclu}
+                       handleClick={handleSelect}
+                       {...this.props}></ListItem>;
+    });
+    return list;
+  }
+  clickConfirm(){
+    const {handleConfirm} = this.props;
+    this.child&&this.child.reset();//重置搜索框中的数据
+    handleConfirm();
+  }
+  getStyle(){
+    const {show,left} = this.props;
+    return {
+      display:show?'block':'none',
+      left:left
+    }
+  }
+  searchSelect(item){
+    const {handleSelect,handleConfirm} = this.props;
+    //添加id字段,用于调尾巴
+    const it = Object.assign({id:item.questionId},item);
+    handleSelect&&handleSelect(it);     //添加到大数据推送一起选中
+    handleConfirm&&handleConfirm();       //确定事件
+  }
+  getPushItemIds(list){         //获取推送症状的id数组,去重用
+    return list&&list.map((it)=>{
+      return it.conceptId;
+    })||[];
+  }
+  render (){
+    const {handleClear,order,parDiv,boxMark,tagType,show,data,pos} = this.props;
+    const pushUl = data.find((it)=>it.controlType===99);
+    const pushList = pushUl&&pushUl.questionDetailList;
+    //推送标签没有推送结果时不显示顺序说明
+    const noPush = tagType===11&&(!pushList||pushList.length===0);
+    const noSearch = boxMark==1 && tagType==11 && !pos;       //非第一病程添加症状标签不显示搜索
+    return <div className={style["drop-list"]} ref={parDiv} style={this.getStyle()} contentEditable="false" onClick={(e)=>{e.stopPropagation();}}>
+      {noPush?'':<p className={style['orderTips']}>按{order?'从左到右从上到下':'点击'}顺序成文</p>}
+      {this.getLabels()}
+      {noSearch && <div className="search">
+        <SearchBox show={show} pushIds={this.getPushItemIds(pushList)} onSelect={this.searchSelect.bind(this)} onRef={(child)=>{this.child = child;}}/>
+      </div>}
+      <div className="oper clearfix">
+        <span className={style['clear']} onClick={handleClear}>清空选项</span>
+        <span className={style['confirm']} onClick={this.clickConfirm}>确定</span>
+      </div>
+    </div>
+  }
+}
+
+export default ListItems;

+ 22 - 0
src/components/ListItems/index.less

@@ -0,0 +1,22 @@
+@import "~@less/mixin.less";
+.drop-list{
+  .pop;
+  padding:8px 20px 25px 0;
+}
+.orderTips{
+  color: #bfbfbf;
+  margin:0 0 0 28px;
+}
+.clear{
+  .btnCom;
+  .clear;
+  height: auto;
+  line-height: unset;
+}
+.confirm{
+  .btnCom;
+  .confirm;
+  height: auto;
+  line-height: unset;
+  width: 60px;
+}

+ 6 - 14
src/components/MainSuit/index.jsx

@@ -13,7 +13,6 @@ class MainSuit extends Component{
   constructor(props){
     super(props);
     this.state = {
-      boxEditable:true,
       boxLeft:null,
       boxTop:null,
       symptom:false,
@@ -22,7 +21,6 @@ class MainSuit extends Component{
       clearTimer:null,
       overFlag:false,
     };
-    this.toggleEditable = this.toggleEditable.bind(this);
     this.handleFocus = this.handleFocus.bind(this);
     this.handleSelect = this.handleSelect.bind(this);
     this.handleSearchSelect = this.handleSearchSelect.bind(this);
@@ -30,21 +28,15 @@ class MainSuit extends Component{
     this.handleClick = this.handleClick.bind(this);
     this.handleBlur = this.handleBlur.bind(this);
   }
-  toggleEditable(){
-    this.setState({
-      boxEditable:!this.state.boxEditable
-    })
-  }
-
 
   getInlineTag(){
-    const {datas,showArr,handleTailClick,selecteds,saveText,mainIds,allModules} = this.props;
+    const {datas,showArr,handleTailClick,saveText,mainIds,allModules} = this.props;
     const boxMark = '1';
     let list = datas&&datas.map((item,i)=>{
       if(item.flag && item.flag==3){
         return <TailInlineTag {...item} showText={item.relationModuleName} handleTailClick={(obj)=>{handleTailClick(obj,saveText,allModules)}}></TailInlineTag>
       }else {
-        return chooseType({item,boxMark,i,hideTag:false,showArr,selecteds,saveText,mainIds});
+        return chooseType({item,boxMark,i,hideTag:false,showArr,saveText,mainIds});
       }
 
     })
@@ -53,7 +45,7 @@ class MainSuit extends Component{
 
 
   handleFocus(e){
-    e.stopPropagation();
+    //e.stopPropagation();
     const {getCommonSymptoms,datas,clearDiagnose} = this.props;
     let innerText = e.target.innerText || e.target.innerHTML;//兼容火狐43
     clearDiagnose&&clearDiagnose();//清除复诊数据
@@ -296,13 +288,13 @@ class MainSuit extends Component{
       title='主诉' 
       editable={editClear||datas.length==0?true:false} 
       boxLineHeight="24px"
-      handleFocus={this.handleFocus} 
-      onchange={this.handleChange} 
+      handleFocus={this.handleFocus}
+      handleChange={this.handleChange}
       handleClick={this.handleClick} 
       handleBlur={this.handleBlur}
       data={datas}
       boxId="mainSuit">
-        {datas.length>0?<div style={{display:'inline-block'}}>{this.getInlineTag()}</div>:(saveText[0]?saveText[0]:'')}
+        {''}{datas.length>0?<div style={{display:'inline-block'}}>{this.getInlineTag()}</div>:(saveText[0]?saveText[0]:'')}
       </ItemBox>
       {/*没有推送结果就不显示*/}
       {symptomFlag && !searchFlag ? <CommonSymptom data={CommonSymptoms} show={!totalHide&&symptom} onSelect={this.handleSelect} /> : ( searchFlag ? <SearchDrop data={searchData} show={!commSymHide} onSelect={this.handleSearchSelect} left={boxLeft1} top={boxTop1} mainEmpty={datas.length==0?true:false}/>:"")}

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

@@ -31,7 +31,7 @@ class MedicalInfo extends Component {
         return searchResult && searchResult.map((item) => {
           return <li key={item.conceptId}
                      title='点击查看详情'
-                     onClick={() => getAllConceptDetail({name: item.name, type: item.type, uname: item.uniqueName,position:0})}>
+                     onClick={() => getAllConceptDetail({name: item.name, type: item.type, uname: item.uniqueName,position:0,showName:item.name})}>
             <span>{item.name}</span>
             <i>( {item.libTypeName} )</i>
             {item.retrievalName?<p>• {item.retrievalName}</p>:''}

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

@@ -23,7 +23,6 @@ import NumberUnitDrop from '@containers/NumberUnitDrop';
  * ikey:当前组件唯一标识,由模块index+标签index+标签内index三个组成的字符串
  * boxMark:当前所在的模块
  * isImports:是否高亮(仅查体使用)
- * selecteds:选中项数据(仅多选子组件用)
  * saveText:该模块的预览数据
  * textPrefix:前缀
  * textSuffix:后缀
@@ -135,7 +134,7 @@ class MultSpread extends Component{
     }
   }
   getLabels(){
-    const {data,ikey,showArr,copyId,selecteds,boxMark,isExtBlue} = this.props;
+    const {data,ikey,showArr,copyId,boxMark,isExtBlue} = this.props;
     const {wrBmi,bmi} = this.state;
     let show = false;
     let inx = '',count=0;
@@ -165,7 +164,7 @@ class MultSpread extends Component{
                            isExtBlue={isExtBlue}
                            value={it.value}
                            copyType={it.copyType}
-                           selecteds={selecteds ?selecteds[i]:[]}
+                           selecteds={it.selecteds}
                            show={showArr&&showArr[inx]}
                            order={it.textGenerate}
                            type={boxMark}

+ 17 - 3
src/components/Multiple/SlideItem/index.jsx

@@ -2,6 +2,7 @@ import react from "react";
 import style from "./index.less";
 import classNames from 'classnames';
 import {deepClone} from '@utils/tools.js';
+import LiItem from '@common/components/LiItem';
 /**
   单列多选组件下拉 2019-2-20 By_liucf
   接收参数:
@@ -30,13 +31,13 @@ class SlideItem extends react.Component{
     return classNames(style['list'],isHide);
   }
 
-  getSeleStyle(id){
+  /*getSeleStyle(id){
     const {seleId} = this.state;
     if(seleId.includes(id)){
       return style['selected'];
     }
     return '';
-  }
+  }*/
 
   handleSelect(e,item){
     e&&e.stopPropagation();
@@ -75,12 +76,25 @@ class SlideItem extends react.Component{
     const params = this.state;
     handleConfirm&&handleConfirm(params);
   }
+  componentWillReceiveProps(next){
+    if(this.props.show!==next.show){
+      const seleData = deepClone(this.props.seleData||[]);
+      const seleId = deepClone(this.props.seleId||[]);
+      this.setState({
+        seleData:seleData||"",
+        seleId:seleId||[]
+      });
+    }
+  }
   render(){
     const {data} = this.props;
+    const {seleId} = this.state;
     return <div className={this.getListClass()} style={this.getStyle()} contentEditable="false">
         <ul>
           {data&&data.map((it)=>{
-          return <li onClick={(e)=>this.handleSelect(e,it)} className={this.getSeleStyle(it.id)} title={it.name.length>8?it.name:''}>{it.name&&it.name.length>8?it.name.slice(0,8)+'...':it.name}</li>
+          return <LiItem handleClick={(e)=>this.handleSelect(e,it)}
+                         selected={seleId.includes(it.id)}
+                         title={it.name.length>8?it.name:''}>{it.name&&it.name.length>8?it.name.slice(0,8)+'...':it.name}</LiItem>
         })}
           <li onClick={this.handleClear} className={style['mClear']}>清空选项</li>
           <li onClick={this.handleClick} className={style['mConfirm']}>确定</li>

+ 2 - 9
src/components/Multiple/SlideItem/index.less

@@ -1,23 +1,17 @@
 @import "~@less/mixin.less";
-.selected{
-    .select-li;
-  }
 .list{
   .pop;
   padding: 0 0 10px;
   color: @text-color;
-  li{
+  .mClear,.mConfirm{
     height: 32px;
     line-height: 32px;
     border:1px #fff solid;
     padding: 0 20px;
     white-space: nowrap;
+    text-align: center;
     cursor: pointer;
   }
-  // li:hover,.selected{
-  li:hover{
-    border-color:#3B9ED0;
-  }
 }
 .hide{
   display: none;
@@ -28,7 +22,6 @@
 }
 .mConfirm{
   color: #3B9ED0;
-  text-align: center;
   border: 1px solid #3B9ED0;
 
 }

+ 8 - 4
src/components/Multiple/index.jsx

@@ -40,13 +40,14 @@ class Multiple extends react.Component{
     const {show,value,hideTag,isImports,isExtBlue} = this.props;
     const orgBorder = isImports&&!value?style['orange-border']:'';
     const ext = isExtBlue?style['ext']:'';
+    const editBorder = this.state.editable?style['blue-border']:'';
     if(show){
       $(this.$div.current).addClass(style['borderd']);
     }else{
       $(this.$div.current).removeClass(style['borderd']);
     }
     if(value){
-      return hideTag?classNames(style['hide-tag'],orgBorder):classNames(style['selected-tag'],orgBorder);
+      return hideTag?classNames(style['hide-tag'],orgBorder):classNames(style['selected-tag'],orgBorder,editBorder);
     }
     return hideTag?'':classNames(style['tag'],orgBorder,ext);
   }
@@ -84,6 +85,7 @@ class Multiple extends react.Component{
   changeToEdit(e){//双击
     const {value,id,placeholder,handleDbclick,handleHide} = this.props;
     let text = e.target.innerText || e.target.innerHTML;
+    window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();
     handleHide&&handleHide();       //展开情况下双击收起
     // clearTimeout(this.state.timer);//取消延时的单击事件
     e.stopPropagation();
@@ -92,7 +94,9 @@ class Multiple extends react.Component{
         labelVal:text,
         editable:true
       });
-      e.target.focus();
+      /*setTimeout(()=>{
+        e.target.focus();
+      })*/
       handleDbclick && handleDbclick({value,id,placeholder});
     }
   }
@@ -166,13 +170,13 @@ class Multiple extends react.Component{
       onKeyDown={handleEnter}
       contentEditable={editable}>{value||placeholder}</div>
       <div className={this.getListClass()} contentEditable="false">
-        <SlideItem 
+        <SlideItem
           show={show}
           data={data} 
           seleData={seleData} 
           seleId={seleId} 
           handleConfirm={(obj)=>this.handleConfirm(obj)}
-          ></SlideItem>
+          ></SlideItem >
       </div>
     </div>
   }

+ 0 - 3
src/components/Multiple/index.less

@@ -3,9 +3,6 @@
   display: inline-block;
   cursor: pointer;
 }
-/* .selected{
-    .select-li;
-  } */
 .tag,.selected-tag{
   cursor: pointer;
   line-height: 20px;

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

@@ -264,6 +264,7 @@ class NumberDrop extends Component{
       <NumberPan handleSelect={this.select.bind(this)}
                  noString={formulaCode?true:false}
                  onClose={handleHide}
+                 value={this.state.value}
                  show={show}
                  toClear={!hasSelect}/>
     </div>

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

@@ -25,10 +25,10 @@ class OtherHistory extends Component{
     fetchModules&&fetchModules({id:questionId,index:focusTextIndex,name,span,searchInEnd});
   }
   getLabels(){
-    const {data,showArr,selecteds,saveText} = this.props;
+    const {data,showArr,saveText} = this.props;
     const {boxMark} = this.state;
     let list = data.map((item,i)=>{
-      return chooseType({item,boxMark,i,hideTag:false,showArr,selecteds,saveText});
+      return chooseType({item,boxMark,i,hideTag:false,showArr,saveText});
     });
     return list;
   }

+ 3 - 29
src/components/PreviewBody/index.jsx

@@ -1,12 +1,12 @@
 import React, { Component } from "react";
 import style from "./index.less";
-import { getStatusImg, filterDataArr, filterOtherDataArr,timestampToTime } from '@utils/tools';
+import { getStatusImg,getDomUpDown, filterDataArr, filterOtherDataArr,timestampToTime } from '@utils/tools';
 import Notify from '@commonComp/Notify';
 import Information from '../Information';
 import PreviewInspect from './Inspect';
 import ItemPart from './ItemPart';
 import $ from "jquery";
-import AssessResultHis from '@containers/AssessResultHis'
+import AssessResultHis from '@containers/AssessResultHis';
 
 class PreviewBody extends Component {
   constructor(props) {
@@ -52,33 +52,7 @@ class PreviewBody extends Component {
   }
   showDetails(val) {
     let min = val.minValue, max = val.maxValue, value = val.value, dom = '';
-    if(min == null&&max == null||min == undefined&&max == undefined||min == ''&&max == ''){
-      dom = getStatusImg(0, value, 1)
-    }else if (!isNaN(min) && !isNaN(max)) {//有最大值最小值
-      if (isNaN(value)) {//输入的不是数据
-        dom = getStatusImg(1, value, 1)
-      } else if (value <= min) {//下降
-        dom = getStatusImg(3, value, 1)
-      } else if (value >= max) {//上升
-        dom = getStatusImg(2, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else if (isNaN(min) && !isNaN(max)) {//有最大值无最小值
-      if (value >= max) {//上升
-        dom = getStatusImg(2, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else if (!isNaN(min) && isNaN(max)) {//有最小值无最大值
-      if (value <= min) {//下降
-        dom = getStatusImg(3, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else {//无最大最小值
-      dom = getStatusImg(1, value, 1)
-    }
+    dom = getDomUpDown(min,max,value)
     if (val.questionDetailList.length > 0) {
       return val.questionDetailList.map((item) => {
         if (val.value == item.name) {

+ 13 - 5
src/components/PreviewBody/index.less

@@ -147,11 +147,7 @@ table{
     border-bottom: 1px solid #333;
   }
 }
-@media print{
-  .printBtn {
-    display: none !important;
-  }
-}
+
 .printBtn {
   padding: 10px 20px;
   float: right;
@@ -162,4 +158,16 @@ table{
   cursor: pointer;
   position: absolute;
   right: -40px;
+}
+@media print{
+  .printBtn {
+    display: none !important;
+  }
+  .infos {
+    td {
+      font-size: 12px !important;
+      padding: 4px 5px 4px 0px !important;
+      line-height: 18px !important;
+    }
+  }
 }

+ 2 - 2
src/components/PushItems/DetailsModal/index.jsx

@@ -52,13 +52,13 @@ class DetailsModal extends Component {
     }
     
     render() {
-        const {showTipsDetails, tipsDetails} = this.props;
+        const {showTipsDetails, tipsDetails,showAllName} = this.props;
         const { currentIndex } = this.state
       return <NewPortal visible = {showTipsDetails}>
 
                 <div className={styles['details-wrapper']}>
                     <div className={styles['details-content-wrapper']} id="detailsContentWrap">
-                        <h1 id="detailsContentTitle" className={`${styles['details-content-name']} drag-title`} >{tipsDetails && tipsDetails.name} <img className={styles['details-close']} onClick={this.hideTips} src={close} /></h1>
+                        <h1 id="detailsContentTitle" className={`${styles['details-content-name']} drag-title`} >{tipsDetails && showAllName ? showAllName : tipsDetails &&tipsDetails.name} <img className={styles['details-close']} onClick={this.hideTips} src={close} /></h1>
                         <div className={styles['details-content']} id= 'detailsContent' onScroll={this.handleScrollModal.bind(this, tipsDetails)}>
                             {tipsDetails && tipsDetails.details && tipsDetails.details.map((item, index) => {
                                 return (<div id={item.title}>

+ 53 - 8
src/components/PushItems/RecommendInspect/index.jsx

@@ -2,14 +2,19 @@ import React, {Component} from 'react';
 import style from './index.less'
 import showImg from "@common/images/show.png";
 import hideImg from "@common/images/close.png";
+import infoShow from '@common/images/info-show.png';
+import infoMove from '@common/images/info-move.png';
 
 
 class RecommendInspect extends Component {
     constructor(props) {
         super(props)
         this.state = {
-            showAll: false
+          showAll: false,
+          hasEnterItem: -1,
+          hasEnterImg: false
         }
+       
         this.renderItem = this.renderItem.bind(this)
     }
     changeShowFlag() {
@@ -17,9 +22,15 @@ class RecommendInspect extends Component {
         showAll: !this.state.showAll
       })
     }
+    getTips(item) {
+      const { getInfomation, type } = this.props
+      const name = type === 12 ? item.uniqueName :item.name
+      getInfomation && getInfomation({ name: name || '', type: type, position: 1 })
+    }
     
-    renderItem(item) {
-      const { changeFlag } = this.props
+    renderItem(item, index) {
+      const { changeFlag,getInfomation } = this.props
+      const { hasEnterItem,hasEnterImg  } = this.state
       return <span className={style['itemLabelBox']} title={item.name}>
           <input
             id={item.id + item.name}
@@ -27,15 +38,49 @@ class RecommendInspect extends Component {
             type="checkbox"
             checked={item.checked}
           />
-          <label  for={item.id + item.name}>{item.name}</label>
+          <span className={style['itemLabelNameBox']}
+              onMouseEnter={this.handleMouseEnterDrug.bind(this , index)}
+              onMouseLeave = {this.handleMouseLeaveDrug.bind(this, index)}
+          >
+            <label className={style['itemLabel']}  for={item.id + item.name}>{item.name}</label>
+            <img 
+              className={style['info-img']} 
+              title='点击i图标可查看详细说明'
+              style ={hasEnterItem ===index  ? {display: "inline-block"} : {display: "none"}}
+              src={hasEnterImg ? infoMove : infoShow} 
+              onMouseEnter={this.handleMouseEnterImg.bind(this)}
+              onMouseLeave = {this.handleMouseLeaveImg.bind(this)}
+              onClick={this.getTips.bind(this,item)}
+             />
+          </span>
       </span>
     }
+    handleMouseEnterDrug(index) {
+      this.setState({
+          hasEnterItem: index, 
+      })
+    }
+    handleMouseLeaveDrug() {
+      this.setState({
+          hasEnterItem: -1, 
+      })
+    }
+    handleMouseEnterImg() {
+      this.setState({
+        hasEnterImg: true
+      })
+    }
+    handleMouseLeaveImg() {
+      this.setState({
+        hasEnterImg: false
+      })
+    }
 
     render() {
       const { title,list, changeFlag, border } = this.props
       const { showAll } = this.state
-      const listAll = list.map(item => {
-          return this.renderItem(item)
+      const listAll = list.map((item,index) => {
+          return this.renderItem(item,index)
       });
       let firstLineNum = 0;   //第一行字数
       let secondLineNum = 0;      //第二行字数
@@ -53,11 +98,11 @@ class RecommendInspect extends Component {
           if(secondLineNum > 20) {
             return;
           } else {
-            return this.renderItem(item)
+            return this.renderItem(item, index)
           }
         } else {
 
-          return this.renderItem(item)
+          return this.renderItem(item, index)
         }
       });
 

+ 69 - 54
src/components/PushItems/RecommendInspect/index.less

@@ -2,57 +2,72 @@
 
     
         
-        .inspectItem{
-          padding: 10px 0px 4px 0px;
-          overflow: hidden;
-          .title{
-            float: left;
-            height: 26px;
-            line-height: 26px;
-            padding: 0px 0px 0px 0px ;
-          }
-          .content{
-            float: left;
-            width: 349px;
-            line-height: 26px;
-            padding: 0px 0px 0px 0px;
-            span{
-              .ellipsis;
-              font-size: 14px;
-              line-height: 14px;
-              display: inline-block;
-              margin: 6px;
-              max-width: 280px;
-              cursor: pointer;
-              input[type='checkbox']{
-                float: left;
-                width: 14px;
-                height: 14px;
-                margin-right: 2px;
-                background-color: #fff;
-                -webkit-appearance:none;
-                border: 1px solid #c9c9c9;
-                border-radius: 2px;
-                outline: none;
-                cursor: pointer;
-              }
-              input[type=checkbox]:checked{
-                background: url("../../../common/images/checked.png")no-repeat center;
-                background-size: 12px 12px;
-              }
-              label {
-                cursor: pointer;
-              }
-            }
-          }
-        }
-        .show {
-            float: right;
-            color:  #58ACD7;;
-            font-size: 14px;
-            cursor: pointer;
-            img {
-              width: 12px;
-              height: 12px;
-            }
-          }
+.inspectItem{
+padding: 10px 0px 4px 0px;
+overflow: hidden;
+.title{
+  float: left;
+  height: 26px;
+  line-height: 26px;
+  padding: 0px 0px 0px 0px ;
+}
+.content{
+  float: left;
+  width: 349px;
+  line-height: 26px;
+  padding: 0px 0px 0px 0px;
+  span{
+   
+    font-size: 14px;
+    line-height: 14px;
+    display: inline-block;
+    margin: 0 6px 6px 6px;
+    cursor: pointer;
+    input[type='checkbox']{
+      float: left;
+      width: 14px;
+      height: 14px;
+      margin-right: 2px;
+      background-color: #fff;
+      -webkit-appearance:none;
+      border: 1px solid #c9c9c9;
+      border-radius: 2px;
+      outline: none;
+      cursor: pointer;
+    }
+    input[type=checkbox]:checked{
+      background: url("../../../common/images/checked.png")no-repeat center;
+      background-size: 12px 12px;
+    }
+    label {
+      .ellipsis;
+      display: inline-block;
+      cursor: pointer;
+      max-width: 260px;
+    }
+  }
+}
+}
+.show {
+  float: right;
+  color:  #58ACD7;;
+  font-size: 14px;
+  cursor: pointer;
+  img {
+    width: 12px;
+    height: 12px;
+  }
+}
+.itemLabelNameBox{
+  position: relative;
+}
+.info-img {
+  display: none;
+  position: absolute;
+  width: 15px;
+  top: -14px;
+  left: 50%;
+  margin-left: -7px;
+  cursor: pointer;
+  z-index: 2;
+}

+ 2 - 2
src/components/PushItems/TipsMsg/index.jsx

@@ -17,7 +17,7 @@ class TipsMsg extends Component {
     }
 
     render() {
-        const { tips, showTips, tipsDiscalimer, tipsImg, tmpFlg} = this.props;
+        const { tips, showTips, tipsDiscalimer, tipsImg, tmpFlg,showPartName} = this.props;
         return <div id="tipsMsg" className={style["tips"]}>
         <h1>
           <img src={tipsImg} />
@@ -27,7 +27,7 @@ class TipsMsg extends Component {
           {tips && tips.details ? (
             <div>
               <div className={style["title"]}>
-                {tips.name}
+                {showPartName ? showPartName : tips.name}
                 <span
                   className={style["tips-details"]}
                   onClick={() => showTips()}

+ 10 - 2
src/components/PushItems/index.jsx

@@ -127,7 +127,7 @@ class PushItems extends Component {
 
   showTips() {
     const { getTipsDetails, showTipsDetailsModal, clickDiag } = this.props;
-    getTipsDetails && getTipsDetails({name: clickDiag.name, type: clickDiag.type,position:0});
+    getTipsDetails && getTipsDetails({name: clickDiag.name, type: clickDiag.type,position:0,showName:clickDiag.showName });
     //showTipsDetailsModal && showTipsDetailsModal()
   }
   hideTips() {
@@ -162,8 +162,10 @@ class PushItems extends Component {
       showTipsDetails,
       tipsDetails,
       tmpFlg,
+      showPartName,
+      showAllName
     } = this.props.pushMessage;
-    const { tipsDiscalimer,chronicPushItems,wholeIndexs,setPushEmergencyIdx,sysConfig,windowHeight,hideAllDrop} = this.props;
+    const { tipsDiscalimer,chronicPushItems,wholeIndexs,setPushEmergencyIdx,sysConfig,windowHeight,hideAllDrop,getInfomation} = this.props;
     const {
       billing,
       changeCheck,
@@ -249,12 +251,16 @@ class PushItems extends Component {
                       list = {assay}
                       changeFlag = {changeAssay}
                       border = "true"
+                      type = {12}
+                      getInfomation = {getInfomation}
                     >
                     </RecommendInspect>
                     <RecommendInspect
                       title = '检查'
                       list = {check}
+                      type = {6}
                       changeFlag = {changeCheck}
+                      getInfomation = {getInfomation}
                     >
                     </RecommendInspect>
                   </ul>)}
@@ -271,6 +277,7 @@ class PushItems extends Component {
               tips = {tips}
               showTips = {showTips}
               tipsDiscalimer = {tipsDiscalimer}
+              showPartName = {showPartName}
             ></TipsMsg>
           </div>
          {tipsDiscalimer.data && <div  className={style['disTips']} dangerouslySetInnerHTML={{__html: tipsDiscalimer.data.data &&tipsDiscalimer.data.data.find(item => item.disclaimerCode == '2')&&tipsDiscalimer.data.data.find(item => item.disclaimerCode == '2').description}}></div>}
@@ -278,6 +285,7 @@ class PushItems extends Component {
         {showTipsDetails && <DetailsModal  
             showTipsDetails = {showTipsDetails}
             hideTips = {this.hideTips}
+            showAllName = {showAllName}
             tipsDetails = {tipsDetails}/>}
             
             {

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

@@ -37,6 +37,7 @@ class RadioDrop extends Component{
     const {value,hideTag,show,isImports,isExtBlue} = this.props;
     const ext = isExtBlue?style['ext']:'';
     const orgBorder = isImports?style['orange-border']:'';      //橙色框高亮
+    const editBorder = this.state.editable?style['blue-border']:'';
     if(show){
       $(this.$cont.current).addClass(style['borderd']);
     }else{
@@ -46,7 +47,7 @@ class RadioDrop extends Component{
       return classNames(style['no-tag'],ext);
     }
     if(value){
-      return style['selected-tag'];
+      return classNames(style['selected-tag'],editBorder);
     }
     return classNames(style['tag'],orgBorder,ext);
   }

+ 65 - 42
src/components/RadioInpDrop/index.jsx

@@ -21,14 +21,13 @@ class RadioInpDrop extends Component{
     super(props);
     this.state={
       texts:props.vals||{0:props.value||props.placeholder},
-      over:false,
     };
     this.$cont = React.createRef();
     this.isIE = navigator.appName=="Microsoft Internet Explorer" && navigator.appVersion.split(";")[1].replace(/[ ]/g,"")=="MSIE8.0";
     this.handleSelect = this.handleSelect.bind(this);
     this.handleShow = this.handleShow.bind(this);
     this.parseInputDom = this.parseInputDom.bind(this);
-    this.handleInnerInp = this.handleInnerInp.bind(this);
+    this.handleInnerBlur = this.handleInnerBlur.bind(this);
   }
   getClass(){
     const {value,hideTag,show,isImports,isExtBlue} = this.props;
@@ -83,45 +82,31 @@ class RadioInpDrop extends Component{
       })
     },$("#addScrollEvent")[0])
   }
-  handleInnerInp(i,val){
+  handleInnerBlur(i,val){
     const {ikey,boxMark,handleSaveInp,mainSaveText} = this.props;
-    let vals = this.state.texts; 
-
-    // 主诉字数限制
-    if(boxMark==1){
-      let preText = vals[i].value;
-      let mainText = filterDataArr(mainSaveText);
-      let lengths = 0;
-      if(preText){
-        lengths = mainText.length + (val.length - preText.length);
-      }else{
-        lengths = mainText.length + val.length;
-      }
-      //console.log("val:",val,"preVal:",preText,"mainText:",mainText,"lengths:",lengths,this.state.texts)
-      if(lengths >= config.limited){
-        Notify.info(config.limitText);
-        this.setState({
-          over:true
-        });
-        return
-      }
-    }
-    
+    let vals = this.state.texts;
     vals[i].value=val;
     this.setState({
       texts:vals,
-      over:false
     });
     handleSaveInp({values:vals,ikey,boxMark,mainSaveText});
   }
   parseInputDom(){
-    const {value,placeholder} = this.props;
-    const {texts,over} = this.state;
+    const {mainSaveText,ikey,boxMark} = this.props;
+    const {texts} = this.state;
+    const inx = ikey.split("-")[1];
     let temp='',list=[];
     for(let i in texts){
       temp = texts[i];
       if(typeof temp=='object'){
-        list.push(<InputComp handleInp={this.handleInnerInp} index={i} value={temp.value} over={over}></InputComp>);
+        list.push(<InputComp handleBlur={this.handleInnerBlur}
+                             mainSaveText={mainSaveText}
+                             index={i}
+                             inx = {inx}
+                             texts={texts}
+                             boxMark={boxMark}
+                             value={temp.value}
+                             ></InputComp>);
       }else{
         list.push(<span>&nbsp;{temp}</span>);
       }
@@ -147,34 +132,72 @@ class InputComp extends Component{
     super(props);
     this.$inp = React.createRef();
     this.handleBlur = this.handleBlur.bind(this);
+    this.handleInp = this.handleInp.bind(this);
   }
   handleBlur(e){
     e.stopPropagation();
+    if(this.over){
+      return;
+    }
     // FF26 只有innerHTML
     const text = e.target.innerText || e.target.innerHTML;
-    const {handleInp,index,value} = this.props;
-    e.target.innerText?(e.target.innerText = ''):(e.target.innerHTML = '');
+    const {handleBlur,index} = this.props;
+    e.target.innerHTML = '';
     // FF26 会把&nbsp; 也获取到
-    handleInp(index,text.replace('&nbsp;',''));
+    handleBlur(index,text.replace('&nbsp;',''));
   }
-  componentWillReceiveProps(next){
-    if(next.over&&!this.props.over){
-      const inp = this.$inp.current;
-      const value = this.props.value;
-      setTimeout(function(){
-        inp.innerText?(inp.innerText = ''):(inp.innerHTML = '');
-        inp.innerText?(inp.innerText = value):(inp.innerHTML = value);
-      })
+  getTextVal(obj=[],index){
+    let str = '';
+    Object.keys(obj).map((it)=>{
+      if(typeof obj[it]==='string'){
+        str += obj[it];
+      }else{
+        if(it!==index){       //当前输入框文字不记录,避免重复计算
+          str += obj[it].value;
+        }
+      }
+    });
+    return str;
+  }
+  handleInp(e){
+    const val = e.target.innerText||e.target.innerHTML;
+    const {mainSaveText,value,index,texts,inx,boxMark} = this.props;
+    if(boxMark==='1'){
+      const textVal = this.getTextVal(texts,index);    //已存的单选含自由输入生成的文字
+      const tempArr = [...mainSaveText];
+      tempArr.splice(inx,1);
+      const otherVal = tempArr.join("");      //主诉其他的已填文字
+      //console.log(textVal,otherVal,val)
+      //超出主诉限制提示并不可继续输入
+      if((textVal+otherVal+val).length>config.limited){
+        e.target.innerHTML=value||'';
+        this.over=true;
+        //e.target.blur();
+        Notify.info(config.limitText);
+        return;
+      }
+      this.over=false;
     }
+    this.over=false;
+  }
+  componentWillReceiveProps(next){
+    //超过限制时,再点开下拉被删除的输入文字又出现bug修改
+    const inp = this.$inp.current;
+    const value = next.value;
+    inp.innerHTML = '';
+    setTimeout(function(){
+      inp.innerHTML = value;
+    });
   }
   render(){
     const {value} = this.props;
     return <span contentEditable={true}
-                          ref={this.$inp}
+                 ref={this.$inp}
                  className={style['inner-inp']}
                  onClick={(e)=>{e.stopPropagation()}}
                  onFocus={(e)=>{e.stopPropagation()}}
-                 onBlur={this.handleBlur}>&nbsp;{value}</span>
+                 onInput={this.handleInp}
+                 onBlur={this.handleBlur}>&nbsp;</span>
   }
 }
 

+ 3 - 0
src/components/RadioInpDrop/index.less

@@ -30,4 +30,7 @@
   min-width:30px;
   text-align:center;
   word-break: break-all;
+  /**ff26必需**/
+  min-height: 22px;
+  vertical-align: middle;
 }

+ 6 - 5
src/components/SearchDrop/index.jsx

@@ -1,5 +1,6 @@
 import React,{Component} from 'react';
 import classNames from 'classnames';
+import LiItem from '@common/components/LiItem';
 import ScrollArea from 'react-scrollbar';
 
 import style from "./index.less";
@@ -47,7 +48,7 @@ class SearchDrop extends Component{
       top:top?top+'px':''
     }
   }
-  handleSelect(e,item){
+  handleSelect(item,e){
     // onClick事件换成onmouseup--点击清除后谷歌下搜索结果点击不上去的情况
     e.stopPropagation();
     const {onSelect,onShow} = this.props;
@@ -70,7 +71,7 @@ class SearchDrop extends Component{
         <ScrollArea speed={0.8}
                     horizontal={false}
                     stopScrollPropagation={data.length>6?true:false}
-                    style={{maxHeight:'225px'}}
+                    style={{maxHeight:'180px'}}
                     className={style["area"]}
                     verticalContainerStyle={contStyle}
                     verticalScrollbarStyle={barStyle}
@@ -78,7 +79,7 @@ class SearchDrop extends Component{
           <ul>
             {data&&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 <LiItem handleClick={this.handleSelect.bind(this,it)} title={litext}>{litext}</LiItem>
             })}
           </ul>
         </ScrollArea>
@@ -89,7 +90,7 @@ class SearchDrop extends Component{
         <ScrollArea speed={0.8}
                     horizontal={false}
                     stopScrollPropagation={data.length>6?true:false}
-                    style={{maxHeight:'225px'}}
+                    style={{maxHeight:'180px'}}
                     className={style["area"]}
                     verticalContainerStyle={contStyle}
                     verticalScrollbarStyle={barStyle}
@@ -97,7 +98,7 @@ class SearchDrop extends Component{
           <ul>
             {data&&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 <LiItem handleClick={this.handleSelect.bind(this,it)} title={litext}>{litext}</LiItem>
             })}
           </ul>
         </ScrollArea>

+ 0 - 17
src/components/SearchDrop/index.less

@@ -5,21 +5,4 @@
   overflow-x: hidden;
   .pop;
   padding: 0 0 10px;
-  li{
-    width: 200px;
-    line-height: 35px;
-    border:1px #fff solid;
-    padding: 0 20px 0 30px;
-    white-space: nowrap;
-    text-overflow: ellipsis;
-    overflow: hidden;
-    cursor: pointer;
-  }
-  li:hover{
-    border-color:#3B9ED0;
-  }
 }
-/*
-.hide{
-  display: none;
-}*/

+ 12 - 208
src/components/SpreadDrop/index.jsx

@@ -2,10 +2,9 @@ import React,{Component} from 'react';
 import classNames from 'classnames';
 import config from '@config/index.js';
 import style from './index.less';
-import {setPosition,deepClone,filterArr,handleEnter,isIE,windowEventHandler,filterDataArr,getIds,getPageCoordinate} from '@utils/tools.js';
+import {setPosition,deepClone,handleEnter,isIE,windowEventHandler,filterDataArr,getIds,getPageCoordinate} from '@utils/tools.js';
 import {Notify} from '@commonComp';
-import ScrollArea from 'react-scrollbar';
-import SearchBox from '@containers/SearchBox'
+import ListItems from '@components/ListItems';
 import $ from 'jquery';
 /****
  * 标签组合下拉,选中的项目展开
@@ -16,7 +15,7 @@ import $ from 'jquery';
  * placeholder:灰显文字
  * ikey:当前标签的index
  * copyType:选中后是否复制本身(仅展开类型使用)
- * selecteds:选中选项(仅展开类型使用)
+ * data.selecteds:选中选项(仅展开类型使用)
  * show:是否显示下拉
  * order:成文顺序,0点选顺序,1从上到下从左到右
  * isImports:是否高亮显示(仅查体中使用)
@@ -24,6 +23,7 @@ import $ from 'jquery';
  * tagType:标签类型
  * id:id
  * flag:仅主诉中使用
+ * isExtBlue:是否为查体生命体征标签蓝色显示
  *
  * ***/
 
@@ -73,9 +73,14 @@ class SpreadDrop extends Component{
       }
     });
     const listWidth = 30+$(this.$list.current).width();
-    if(num >= 5 && windowWidth-getPageCoordinate(e).boxLeft < listWidth){
+    const wleft = getPageCoordinate(e).boxLeft;
+    if(num >= 4 && windowWidth-wleft < listWidth){
       this.setState({
-        left:windowWidth-listWidth-150
+        left:windowWidth-wleft-listWidth-50
+      })
+    }else{
+      this.setState({
+        left:'auto'
       })
     }
     //高度超出时,增加左侧大容器padding
@@ -212,8 +217,6 @@ class SpreadDrop extends Component{
   }
   handleSelect(item,isExclu,joint,listIndex,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)*/
     const id = item.id;
     const linkStr = joint||'';
     const name = item.name+linkStr;
@@ -368,7 +371,7 @@ class SpreadDrop extends Component{
     }
     const {editable} = this.state;
     return  <div className={style['container']}
-              onFocus={(e)=>e.stopPropagation()}
+              /*onFocus={(e)=>e.stopPropagation()}*/
               onBlur={(e)=>e.stopPropagation()}
               onInput={(e)=>e.stopPropagation()}>
         <div
@@ -387,203 +390,4 @@ class SpreadDrop extends Component{
   }
 }
 
-class ListItems extends Component{
-  constructor(props){
-    super(props);
-    this.$cont = React.createRef();
-    this.clickConfirm = this.clickConfirm.bind(this);
-  }
-  getLabels(){
-    const {data,handleSelect} = this.props;
-    let detail = [];
-    let isSpecialPos = false;       //是否特殊位置(单行在上面,如无殊)
-    let isExclu = false;      //是否与其他互斥
-    let isRadio;      //是否为单选列,默认多选列
-    let isSingle = data.length == 1?true:false; //是否为单列,无伴的情况
-    const list = data&&data.map((it,i)=>{
-      isSpecialPos = (+it.formPosition === 1);
-      isExclu = (+it.exclusionType===1);
-      isRadio = (+it.tagType ===1&&+it.controlType === 1);
-      if(+it.controlType===0){
-        detail = it.questionMapping;
-      }else{
-        detail = it.questionDetailList;
-      }
-      return <ListItem datas={detail}
-                       isRadio={isRadio}
-                       isSingle={isSingle}
-                       joint={it.joint}
-                       listIndex={i}
-                       isSpecialPos={isSpecialPos}
-                       isExclu={isExclu}
-                       handleClick={handleSelect}
-                       {...this.props}></ListItem>;
-    });
-    return list;
-  }
-  clickConfirm(){
-    const {handleConfirm} = this.props;
-    this.child&&this.child.reset();//重置搜索框中的数据
-    handleConfirm();   
-  }
-  getStyle(){
-    const {show,left} = this.props;
-    return {
-      display:show?'block':'none',
-      left:left
-    }
-  }
-  searchSelect(item){
-    const {handleSelect,handleConfirm} = this.props;
-    //添加id字段,用于调尾巴
-    const it = Object.assign({id:item.questionId},item);
-    handleSelect&&handleSelect(it);     //添加到大数据推送一起选中
-    handleConfirm&&handleConfirm();       //确定事件
-  }
-  getPushItemIds(list){         //获取推送症状的id数组,去重用
-    return list&&list.map((it)=>{
-      return it.conceptId;
-    })||[];
-  }
-  render (){
-    const {handleClear,order,parDiv,boxMark,tagType,show,data,pos} = this.props;
-    const pushUl = data.find((it)=>it.controlType===99);
-    const pushList = pushUl&&pushUl.questionDetailList;
-    //推送标签没有推送结果时不显示顺序说明
-    const noPush = tagType===11&&(!pushList||pushList.length===0);
-    const noSearch = boxMark==1 && tagType==11 && !pos;       //非第一病程添加症状标签不显示搜索
-    return <div className={style["drop-list"]} ref={parDiv} style={this.getStyle()} contentEditable="false" onClick={(e)=>{e.stopPropagation();}}>
-      {noPush?'':<p className={style['orderTips']}>按{order?'从左到右从上到下':'点击'}顺序成文</p>}
-        {this.getLabels()}
-        {noSearch && <div className="search">
-          <SearchBox show={show} pushIds={this.getPushItemIds(pushList)} onSelect={this.searchSelect.bind(this)} onRef={(child)=>{this.child = child;}}/>
-        </div>}
-        <div className="oper clearfix">
-          <span className={style['clear']} onClick={handleClear}>清空选项</span>
-          <span className={style['confirm']} onClick={this.clickConfirm}>确定</span>
-        </div>
-      </div>
-  }
-}
-
-class ListItem extends Component{
-  constructor(props){
-    super(props);
-    this.getData = this.getData.bind(this);
-  }
-  handleClick(e,item,i){
-    e.stopPropagation();
-    // window.event? window.event.cancelBubble = true : e.stopPropagation();
-    const {handleClick,isExclu,isRadio,data,exists,noneIds,withs,joint,listIndex} = this.props;
-    const index=listIndex+''+i;
-    //列单选处理
-    if(isRadio){
-      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,questionId:selected.questionId});
-      }else{
-        handleClick&&handleClick(item,isExclu,joint,index);
-      }
-      return;
-    }
-    handleClick&&handleClick(item,isExclu,joint,index);
-  }
-  getClass(id){     //无之后显示黑色,之前显示蓝色
-    const {exclusion,nones,noneIds,exists,withs,isExclu,ban} = this.props;
-    if(exclusion!=''){
-      if(+id===+exclusion){
-        return style['selected'];
-      }else{
-        return style['exclusion'];
-      }
-    }else{
-      if(isExclu&&([...noneIds,...exists,...withs].length>0||ban.id)){
-        return style['exclusion'];
-      }
-      if(noneIds.includes(id)){
-        return style['none-selected'];
-      }
-      let existsIds = getIds(exists);
-      let withsIds = getIds(withs);
-      // if(existsIds.includes(id)||withsIds.includes(id)){
-      if(existsIds.includes(id)||withsIds.includes(id)||ban.id && ban.id==id){
-        return style['selected'];
-      }
-
-      return '';
-    }
-  }
-  getData(){
-    const {datas,isSpecialPos} = this.props;
-    const contStyle={
-      opacity:'0.4',
-      right:'0',
-      top:'1px',
-      zIndex:'15',
-      width:'6px',
-      background:'#f1f1f1'};
-    const barStyle={background:'#777',width:'100%'};
-    if(!datas||datas.length===0){
-      return <li className={style['no-push-data']}>暂无推送</li>
-    }
-    if(datas&&datas.length>11){
-      return <ScrollArea speed={0.8}
-                    horizontal={false}
-                    stopScrollPropagation={true}
-                    style={{maxHeight:'330px'}}
-                    className={style["area"]}
-                    verticalContainerStyle={contStyle}
-                    verticalScrollbarStyle={barStyle}
-                    contentClassName="content">
-          {datas&&datas.map((it,i)=>{
-            if(isSpecialPos){
-              return <li onClick={(e)=>this.handleClick(e,it,i)} className={this.getClass(it.id)}>{it.name}</li>
-            }
-            return <li onClick={(e)=>this.handleClick(e,it,i)} className={this.getClass(it.id)} title={it.name.length>8?it.name:''}>{it.name&&it.name.length>8?it.name.slice(0,8)+'...':it.name}</li>
-          })}
-        </ScrollArea>;
-    }
-    return datas&&datas.map((it,i)=>{
-      if(isSpecialPos){
-        return <li onClick={(e)=>this.handleClick(e,it,i)} className={this.getClass(it.id)}>{it.name}</li>
-      }
-      return <li onClick={(e)=>this.handleClick(e,it,i)} className={this.getClass(it.id)} title={it.name.length>8?it.name:''}>{it.name&&it.name.length>8?it.name.slice(0,8)+'...':it.name}</li>
-    });
-  }
-
-  getMainData(){//主诉添加症状-带搜索框
-    const {datas,isSpecialPos} = this.props;
-    if(!datas||datas.length===0){
-      return <li className={style['no-push-data']}>暂无推送数据,可通过搜索查找更多内容~ </li>
-    }
-    return datas&&datas.map((it,i)=>{
-      return <li onClick={(e)=>this.handleClick(e,it,i)} 
-            className={this.getClass(it.id)} 
-            title={it.name.length>4?it.name:''}
-            style={{'width':'55px','display':'inline-block'}}>
-            {it.name&&it.name.length>4?it.name.slice(0,4)+'...':it.name}
-          </li>
-    });
-  }
-
-  render(){
-    const {datas,isSpecialPos,boxMark,tagType,listIndex,isSingle,pos} = this.props;
-    const posit = isSpecialPos?style['independent']:'';
-    const ifMainSear = boxMark==1 && tagType==11 && !pos?true:false;
-    // 单列直接设置宽度,多列则第二列设置(伴字ul不设置宽度)
-    const main = ifMainSear&&!isSingle&&listIndex==1?style['mainUl']:(ifMainSear&&isSingle?style['mainUl']:'');
-    return  <ul className={classNames(style['row'],posit,main)} onBlur={(e)=>e.stopPropagation()}>
-      {ifMainSear?this.getMainData():this.getData()}
-    </ul>
-  }
-}
 export default SpreadDrop;

+ 2 - 76
src/components/SpreadDrop/index.less

@@ -1,83 +1,9 @@
 @import "~@less/mixin.less";
 
 .container{
-  /*position: relative;*/
+  position: relative;
   display: inline-block;
-}
-.drop-list{
-  .pop;
-  padding:8px 20px 25px 0;
-  .row{
-    display: inline-block;
-    // width: 200px;
-    vertical-align: top;
-    margin-left: 8px;
-    max-height: 330px;
-    overflow-y: auto;
-  }
-  .independent{
-    display: block;
-    width: 100%;
-    border-bottom: 1px @disable-border-color solid;
-  }
-  .mainUl{
-    width: 495px;
-    white-space: normal;
-    li{
-      width: 99px !important;
-    }
-    .no-push-data{
-      color:@disable-color;
-      width: auto !important;
-    }
-  }
-  li{
-    padding-left: 20px;
+  .selected-tag{
     cursor: pointer;
-    .mult-li;
-    height: 30px;
-    line-height: 30px;
-  }
-  .selected{
-    .select-li;
   }
-  .none-selected{
-    .select-li;
-    background-image: url(../../common/images/then.png);
-  }
-  .no-push-data,.exclusion{
-    color:@disable-color;
-  }
-}
-.tag,.selected-tag{
-  cursor: pointer;
-  line-height: 20px;
-  &.ext{
-    color: @extBlue;
-  }
-}
-
-.selected-tag{
-  padding: 0;
-  color: @text-color;
-  border-bottom: 1px @border-color solid;
-  line-height: 22px;
-  word-break: break-all;
-}
-.orderTips{
-  color: #bfbfbf;
-  margin:0 0 0 28px;
-}
-.clear{
-  .btnCom;
-  .clear;
-  height: auto;
-  line-height: unset;
-}
-.confirm{
-  .btnCom;
-  .confirm;
-  height: auto;
-  line-height: unset;
-  width: 60px;
 }

+ 0 - 1
src/containers/CheckBody.js

@@ -22,7 +22,6 @@ function mapStateToProps(state){
     focusTextIndex:checkBody.focusIndex,    //聚焦的自由文本标签index
     span:checkBody.span,
     searchInEnd:checkBody.searchInEnd,      //是否在搜索末尾插入结果
-    selecteds:checkBody.selecteds,       //普通多选选中状态
     importLabel:checkBody.importLabel,    //需高亮的标签id
   }
 }

+ 0 - 1
src/containers/CurrentIll.js

@@ -31,7 +31,6 @@ function mapStateToProps(state) {
         mainTailIds:mainSuit.mainTailIds,//主诉症状选中的id(去重用)
         totalHide: homePage.totalHide,
         saveText:currentIll.saveText,
-        selecteds:currentIll.selecteds,       //普通多选选中状态
         editClear:currentIll.editClear,
         symptomIds:currentIll.symptomIds,//症状id,去重用
         isRead:homePage.isRead,

+ 3 - 2
src/containers/EditableSpan.js

@@ -14,6 +14,7 @@ function mapStateToProps(state){//console.log(state)
   return {
     mainSaveText:state.mainSuit.saveText,
     isRead:state.homePage.isRead,
+    data:state.currentIll.data
   }
 }
 
@@ -228,10 +229,10 @@ function mapDispatchToProps(dispatch,state) {
           dispatch({type:DEL_CURRENT,delIndex:obj.i,text:obj.text,flag:obj.flag});
           break;
         case 3:
-          dispatch({type:DEL_OTHERHIS,delIndex:obj.i,flag:obj.flag});
+          dispatch({type:DEL_OTHERHIS,delIndex:obj.i,flag:obj.flag,text:obj.text});
           break;
         case 4:
-          dispatch({type:DEL_CHECKBODY,delIndex:obj.i,flag:obj.flag});
+          dispatch({type:DEL_CHECKBODY,delIndex:obj.i,flag:obj.flag,text:obj.text});
           break;
         default:
           break;

+ 3 - 1
src/containers/InlineTag.js

@@ -8,7 +8,9 @@ import InlineTag from "../common/components/InlineTag";
 import {getLabelIndex} from '@utils/tools.js';
 
 function mapStateToProps(state){
-  return {}
+  return {
+    mainSaveText:state.mainSuit.saveText,
+  }
 }
 
 const tagInpActions = {

+ 2 - 3
src/containers/MainSuit.js

@@ -14,14 +14,13 @@ import {getInitModules} from '@store/async-actions/homePage.js';
 import {SHOW_REFER_RECORD} from '@store/types/diagnosticList';
 import { SET_READ_MODE } from "@store/types/typeConfig";
 
-function mapStateToProps(state) {//console.log(state)
+function mapStateToProps(state) {
   const {mainSuit,homePage,diagnosticList,typeConfig} = state;
   return {
-    showDrop:mainSuit.showDrop,//用于更新
+    //showDrop:mainSuit.showDrop,//用于更新
     update:mainSuit.update,
     CommonSymptoms:mainSuit.CommonSymptoms,//常见症状
     datas:mainSuit.data,//数据源
-    selecteds:mainSuit.selecteds,//数据源
     saveText:mainSuit.saveText,
 	  searchData:mainSuit.searchDatas,//搜索结果
     type: typeConfig.typeConfig,

+ 2 - 0
src/containers/OperationContainer.js

@@ -83,6 +83,7 @@ function mapDispatchToProps(dispatch) {
                '4':RECOVER_TAG_CHECK
             };
             const deledTags = localStorage.getItem('deletedTags')?JSON.parse(localStorage.getItem('deletedTags')):[];
+            const deledSelects = localStorage.getItem('deletedSelects')?JSON.parse(localStorage.getItem('deletedSelects')):[];
             if(deledTags.length===0){
               Notify.info('暂无标签可还原');
               return ;
@@ -91,6 +92,7 @@ function mapDispatchToProps(dispatch) {
             dispatch({
               type:maps[arr[0]],
               data:deledTags[0],
+              select:deledSelects[0],
               index:arr[1]
             });
           dispatch({

+ 0 - 1
src/containers/OtherHistory.js

@@ -24,7 +24,6 @@ function mapStateToProps(state){
     focusTextIndex:otherHistory.focusIndex,    //聚焦的自由文本标签index
     span:otherHistory.span,
     searchInEnd:otherHistory.searchInEnd,      //是否在搜索末尾插入结果
-    selecteds:otherHistory.selecteds,       //普通多选选中状态
     editClear:otherHistory.editClear,       //编辑状态
     isRead:state.homePage.isRead,
     readMode:typeConfig.readMode,       //回读回来的模式(与当前模式并存)

+ 4 - 0
src/containers/PushItemsContainer.js

@@ -6,6 +6,7 @@ import { ADD_DIAGNOSTIC, GET_DIAGNOSTIC_STR } from '@store/types/diagnosticList'
 import {billing, getAllConceptDetail} from '../store/async-actions/pushMessage';
 import { isAddMainSuit } from '@store/async-actions/diagnosticList';
 import { HIDEDROP } from '@store/types/homePage.js';
+import { getConceptDetail } from '@store/async-actions/pushMessage';
 
 function mapStateToProps(state) {//console.log(state)
   const {pushMessage,diagnosticList,inspect} = state;
@@ -56,6 +57,9 @@ function mapDispatchToProps(dispatch) {
                 check: checkedCheck,
             })
         },
+        getInfomation(item){
+            dispatch(getConceptDetail(item))
+        },
         getTipsDetails: (item) => {
             dispatch(getAllConceptDetail(item))
         },

+ 4 - 16
src/containers/SpreadDrop.js

@@ -316,21 +316,14 @@ function mainSuitCheck(dispatch,store,params){
   let withsName = getNames(withs);
   let labelInx = getLabelIndex(ikey);
   let text = filterDataArr(mainSaveText);
-  /*if(text.length >= config.limited){
-    Notify.info(config.limitText);
-    return
-  }*/
-  // let lengths = text.length + existsName.length;
   let lengths = value?(text.length - value.length + existsName.length):(text.length + existsName.length);
   if(lengths > config.limited){
     Notify.info(config.limitText);
     return
   }
-  // const index = params.ikey;
-  // let ikey = getLabelIndex(index);
+  delete params.mainData;       //不需要保存该数据,删除避免死循环
   dispatch({
     type: COMM_CONFIRM,
-    // data: {exists:exists,existsName:existsName,ikey}
     data:Object.assign({},params,{existsName,withsName,labelInx})
   });
   dispatch({//隐藏下拉
@@ -340,7 +333,7 @@ function mainSuitCheck(dispatch,store,params){
 
 //现病史普通多选确定
 function currentCheck(dispatch,store,params){
-  const {ikey,exclusion,excluName,nones,exists,noneIds,noneOn,nowOn,withOn,withs,order} = params;
+  const {ikey,exists,withs,order} = params;
   let existsName = getNames(exists,order);
   let withsName = getNames(withs);
   let labelInx = getLabelIndex(ikey);
@@ -358,6 +351,7 @@ function checkBodyCheck(dispatch,store,params){
   let existsName = getNames(exists,order);
   let withsName = getNames(withs);
   let labelInx = getLabelIndex(ikey);
+  delete params.mainData;     //该数据不用保存到state,删除避免死循环
   dispatch({
     type:SETCHECKBOX,
     // data:{labelInx,ikey,exclusion,excluName,nones,exists,existsName,noneIds,noneOn,nowOn,withOn,withs,withsName}
@@ -372,20 +366,14 @@ function otherHisCheck(dispatch,store,params){
   let labelInx = getLabelIndex(ikey);
   dispatch({
     type:SETOTHERCHECKBOX,
-    // data:{labelInx,ikey,exclusion,excluName,nones,exists,existsName,noneIds,noneOn,nowOn,withOn,withs,withsName}
     data:Object.assign({},params,{existsName,withsName,labelInx})
   })
 }
 
 function handleCheckBox(dispatch,store,params){
-  const {type,mainSaveText} = params;
+  const {type} = params;
   switch (+type){
     case 1:
-      /*let text = filterDataArr(mainSaveText);
-      if(text.length >= config.limited){
-        Notify.info(config.limitText);
-        return
-      }*/
       mainSuitCheck(dispatch,store,params);
       break;
     case 2:

+ 7 - 6
src/containers/eleType.js

@@ -20,7 +20,7 @@ import Multiple from '@containers/Multiple';
 //单选类型
 export function singleRadio(params){
   const data = params.item;
-  const {i,hideTag,boxMark,showArr,selecteds,importLabel} = params;
+  const {i,hideTag,boxMark,showArr,importLabel} = params;
   let isHigh=importLabel&&importLabel.includes(data.id);
   let NumberUnitDropIsHigh =(boxMark ==1 &&data.specFlag == 1)
   const showInx = boxMark+'-'+i+'-0';    //单括号多标签的情况下需要识别同一个标签内多个下拉组件的显示状态
@@ -47,7 +47,7 @@ export function singleRadio(params){
                      value={data.value}
                      copyType={data.copyType}
                      isExtBlue={data.specFlag===4?true:false}
-                     selecteds={selecteds ?selecteds[i]:[]}
+                     selecteds={data.selecteds}
                      show={showArr&&showArr[showInx]}
                      order={data.textGenerate}
                      type={boxMark}
@@ -73,6 +73,7 @@ export function singleRadio(params){
     case 6:
       return <InlineTag prefix={data.labelPrefix}
                         suffix={data.labelSuffix}
+                        boxMark={boxMark}
                         placeholder={data.name}
                         isExtBlue={data.specFlag===4?true:false}
                         value={data.value}
@@ -117,7 +118,7 @@ export function singleRadio(params){
 //多标签组合型
 function multLabels(params){
   const data = params.item;
-  const {i,boxMark,showArr,saveText,selecteds,importLabel} = params;
+  const {i,boxMark,showArr,saveText,importLabel} = params;
   let isHigh=importLabel&&importLabel.includes(data.id);
   return <MultSpread data={data.questionMapping}
                      showAdd = {+data.showAdd===1}
@@ -129,7 +130,7 @@ function multLabels(params){
                      boxMark={boxMark}
                      isImports={isHigh}
                      ikey={boxMark+'-'+i}
-                     selecteds={selecteds&&selecteds[i]}
+                     selecteds={data.selecteds}
                      saveText={saveText}
                      textPrefix={data.prefix}
                      textSuffix={data.suffix}></MultSpread>
@@ -138,7 +139,7 @@ function multLabels(params){
 //多选标签展开型
 function multCheckLabels(params,tagType){
   const data = params.item;
-  const {i,boxMark,showArr,selecteds,importLabel,setHighter} = params;
+  const {i,boxMark,showArr,importLabel,setHighter} = params;
   let isHigh=importLabel&&importLabel.includes(data.id);
   const showInx = boxMark+"-"+i+'-0';
   return <SpreadDrop data={data.questionMapping}
@@ -149,7 +150,7 @@ function multCheckLabels(params,tagType){
                      value={data.value}
                      copyType={data.copyType}
                      isExtBlue={data.specFlag===4?true:false}
-                     selecteds={selecteds ?selecteds[i]:[]}
+                     selecteds={data.selecteds}
                      show={showArr&&showArr[showInx]}
                      order={data.textGenerate}
                      isImports={isHigh}

+ 37 - 64
src/store/actions/checkBody.js

@@ -1,5 +1,6 @@
 import config from '@config/index.js';
-import {formatContinueDots,getLabelIndex,checkFullfillText,handleLocalDelTag,shiftLocalDelTag} from '@utils/tools.js';
+import {formatContinueDots,getLabelIndex,handleLocalDelTag,checkFullfillText} from '@utils/tools.js';
+import {shiftLocalDelTag} from "../../utils/tools";
 
 export function preSetCheckbody(state,action) {
   let res = Object.assign({},state);
@@ -36,16 +37,16 @@ export const confirm = (state,action) =>{
   const items = [...exists||[],...withs||[]];
   if((!exists||!withs||items.length==0)&&!nones&&!exclusion){       //取消无殊的选中,空白提交
     arr[ikey].value = '';
+    arr[ikey].selecteds = {};
     res.saveText[ikey] = '';
-    res.selecteds.splice(ikey,1);
     res.update=Math.random();
     return res;
   }
   //选中互斥项
   if(exclusion){
     arr[ikey].value = excluName;
+    arr[ikey].selecteds = action.data;
     res.saveText[ikey] = excluName;
-    res.selecteds[ikey] = action.data;
     res.update=Math.random();
     return res;
   }
@@ -59,7 +60,6 @@ export const confirm = (state,action) =>{
   if(items.length==0&&nones){
     arr[ikey-1].value = newPreText;
     res.saveText[ikey-1] = newPreText;
-    res.selecteds[ikey] = null;       //无殊选中状态遗留bug修改
     res.update=Math.random();
     return res;
   }
@@ -81,32 +81,6 @@ export const confirm = (state,action) =>{
   return res;
 };
 
-//复制标签(如血压)事件
-export function addLabelItem(state,action){
-  let res = Object.assign({},state);
-  const {data,i} = action;
-  const textLabel = Object.assign({},JSON.parse(config._textLabel),{showInCheck:JSON.parse(data).showInCheck});
-  //使用Object.assign({},data)拷贝操作时复制项和原项会同步修改
-  if(!data) return res;
-  res.data.splice(+i+2,0,JSON.parse(data),textLabel);
-  res.saveText.splice(+i+2,0,'','');
-  res.selecteds.splice(+i+2,0,null,null);
-  res.update = Math.random();
-  return res;
-}
-//自由文本
-export function setCheckText(state,action) {
-  let res = Object.assign({},state);
-  const {i,text} = action;
-  if(res.data[i]){
-    res.data[i].value=text;
-    //res.data[i].name='';      //默认显示的文字
-  }
-  res.saveText[i] = text;
-  res.update = Math.random();
-  return res;
-}
-
 //多选文字,如杂音
 export function setCheckBoxValue(state,action) {
   let res = Object.assign({},state);
@@ -118,7 +92,7 @@ export function setCheckBoxValue(state,action) {
     showText = showText.substr(0,showText.length-1);
   }
   res.data[labelInx].value = showText;
-  res.selecteds[labelInx] = action.data;
+  res.data[labelInx].selecteds = action.data;
   res.saveText = checkFullfillText(res.data).saveText;
   res.update = Math.random();
   return res;
@@ -156,13 +130,9 @@ export function insertLabelData(state,action){
     if(searchInEnd){
       res.data.splice(index,1,pText,...spreadLabels,text);
       res.saveText = checkFullfillText(res.data).saveText;
-      //res.saveText.splice(index,1,newText,'','');
-      res.selecteds.splice(index,1,null,...new Array(spreadLabels.length).fill(null),null);
     }else{
       res.data.splice(index,1,text,...spreadLabels,pText);
       res.saveText = checkFullfillText(res.data).saveText;
-      //res.saveText.splice(index,1,'','',newText);
-      res.selecteds.splice(index,1,null,...new Array(spreadLabels.length).fill(null),null);
     }
 
   }else{
@@ -170,11 +140,9 @@ export function insertLabelData(state,action){
     if(searchInEnd){
       res.data.splice(index+1,0,spreadLabels,text);
       res.saveText.splice(index+1,0,'','');
-      res.selecteds.splice(index+1,0,null,null);
     }else{
       res.data.splice(index,0,text,spreadLabels);
       res.saveText.splice(index,0,'','');
-      res.selecteds.splice(index,0,null,null);
     }
   }
   res.searchData = [];    //选中清空搜索内容(即关闭搜索弹窗)
@@ -233,7 +201,6 @@ export const changeLabelVal = (state,action)=>{//双击标签输入改变值
     const num = nextIsDot?2:1;
     handleLocalDelTag('4',index,res.data[index]);
     res.data.splice(index,num);
-    res.selecteds.splice(index,num);//杂音类样式选中状态对应
     res.saveText = checkFullfillText(res.data).saveText;
   }
   res.update = Math.random();
@@ -250,7 +217,6 @@ export function clearCheckBody(state,action){  //清空
   res.preData = [];
   res.saveText = action.saveText;
   res.isEmpty = action.isEmpty;
-  res.selecteds = action.selecteds?action.selecteds:[];
   if(action.flg){res.showAll = true}
   return res;
 }
@@ -260,39 +226,40 @@ export function backspaceText(state,action){
   let res = Object.assign({},state);
   const {delIndex,flag} = action;
   const data = res.data;
+  let inx = delIndex-1;     //要删除的(非文本)标签的index
   if(flag == 'backsp'){
     // 前一个是文本标签或者子模板,只改变值
-    if(data[delIndex-1].flag&&data[delIndex-1].flag==3){//子模板不删  
+    if(data[inx].flag&&data[inx].flag==3){//子模板不删
       // data[delIndex].value = text;
-    }else if(data[delIndex-1].tagType==8){
+    }else if(data[inx].tagType==8){
       data.splice(delIndex,1);
-      res.selecteds.splice(delIndex,1);      //杂音类样式选中状态对应
       res.saveText.splice(delIndex,1);
-    }
-    else{
-      handleLocalDelTag(4,delIndex-1,data[delIndex-1]);
-      data.splice(delIndex-1,2);
-      res.selecteds.splice(delIndex-1,2); 
-      res.saveText.splice(delIndex-1,2);
+    }else{
+      handleLocalDelTag(4,inx,data[inx]);
+      let n = ''
+      if(action.text=='&nbsp;'){
+        n = 2
+      }else if(action.text.length>0&&(config.punctuationReg.test(action.text))){
+        n = 1
+      }else{
+        n = 2
+      }
+      data.splice(inx,n);
+      res.saveText.splice(inx,n);
     }
   }else if(flag == 'del'){
-    if(data[delIndex+1] && data[delIndex+1].flag&&data[delIndex+1].flag==3){//子模板不删  
+    inx = delIndex+1;
+    if(!data[inx]||(data[inx] && data[inx].flag&&data[inx].flag==3)){//子模板不删
       
-    }else if(data[delIndex+1] && data[delIndex+1].tagType==8){
+    }else if(data[inx] && data[inx].tagType==8){
       data.splice(delIndex,1);
-      res.selecteds.splice(delIndex,1);      //杂音类样式选中状态对应
       res.saveText.splice(delIndex,1);
-    }else if(!data[delIndex+1]){//最后一个文本标签不删除
-      
-    }
-    else{
-      handleLocalDelTag(4,delIndex,data[delIndex+1]);
+    }else{
+      handleLocalDelTag(4,delIndex,data[inx]);
       data.splice(delIndex,2);
-      res.selecteds.splice(delIndex,2);  
       res.saveText.splice(delIndex,2);
     }
   }
-  // res.saveText = fullfillText(data).saveText;
   res.update = Math.random();
   return res;
 }
@@ -307,6 +274,7 @@ export function multipleComfirn(state,action){
     let item = data[ikey].questionMapping;
     let arr=[];
     item[index].value = seleData;
+    item[index].selecteds = action.data;
     item.map((it)=>{
       if(it.value){
         arr.push(it.labelPrefix+it.value+it.labelSuffix);
@@ -314,12 +282,11 @@ export function multipleComfirn(state,action){
     });
     res.saveText[ikey] = arr.join("");
     res.update = Math.random();
-    res.selecteds[ikey] = {[index]:action.data};
     return res;
   }
   data[ikey].value = seleData;
+  data[ikey].selecteds = action.data;
   res.saveText[ikey] = seleData;
-  res.selecteds[ikey] = action.data;
   res.update = Math.random();
   return res;
 }
@@ -346,14 +313,20 @@ export function setImportCheckbodyLabel(state,action) {
   res.update = Math.random();
   return res;
 }
+
 //恢复已删除的标签
 export function recoveTag(state,action) {
   let res = Object.assign({},state);
   let arr = [...res.data];
-  const text = Object.assign({showInCheck:action.data.showInCheck},JSON.parse(config.textLabel));
-  arr.splice(action.index,0,action.data,text);
-  res.data = checkFullfillText(arr).newArr;
-  res.saveText = checkFullfillText(arr).saveText;
+  arr.splice(action.index,0,action.data);
+  const dataArr = checkFullfillText(arr);
+  let nextLabel = dataArr.newArr[(+action.index)+1];
+  //展开收起状态
+  if(nextLabel.tagType==8){
+    nextLabel.showInCheck=action.data.showInCheck;
+  }
+  res.data = dataArr.newArr;
+  res.saveText = dataArr.saveText;
   shiftLocalDelTag();
   res.update = Math.random();
   return res;

+ 4 - 59
src/store/actions/currentIll.js

@@ -401,8 +401,8 @@ export const setCheckBox = (state,action)=>{
     showText = showText.substr(0,showText.length-1);
   }
   res.data[labelInx].value = showText;
+  res.data[labelInx].selecteds = action.data;
   res.saveText[labelInx] = showText;
-  res.selecteds[labelInx] = action.data;
   res.update=Math.random();
   return res;
 }
@@ -479,7 +479,6 @@ export const clearCurrentIll = (state,action)=>{
   const res = Object.assign({},state);
   res.data = action.data;
   res.saveText = action.saveText;
-  res.selecteds = action.selecteds?action.selecteds:[];
   res.symptomIds = action.symptomIds;
   res.currReadSonM = action.currReadSonM||[];
   if(action.editClear){
@@ -521,21 +520,6 @@ export const bigDataSymptom = (state,action) => {
   return res;
 }
 
-
-//自由文本
-export function setCheckText(state,action) {
-  let res = Object.assign({},state);
-  const {i,text} = action;
-  if(res.data[i]){
-    res.data[i].value=text;
-    //res.data[i].name='';      //默认显示的文字
-  }
-  res.saveText[i] = text;
-  res.update = Math.random();
-  return res;
-}
-
-
 //搜索 插入标签数据
 export function insertLabelData(state,action){
   let res = Object.assign({},state); 
@@ -583,32 +567,26 @@ export function insertLabelData(state,action){
         if(strIndex < 1){//前
           res.data.splice(index,1,text,...(FilteredDotMapping1),pText);
           res.saveText = fullfillText(res.data).saveText;
-          res.selecteds.splice(index,1,null,...new Array(FilteredDotMapping1.length).fill(null),null);
         }else{
           res.data.splice(index,1,pText,text,...(FilteredDotMapping1));
           res.saveText = fullfillText(res.data).saveText;
-          res.selecteds.splice(index,1,null,null,...new Array(FilteredDotMapping1.length).fill(null));
         }
       }else{
         if(focusIndex > banIdx){//伴后
           if(strIndex < 1){//前
             res.data.splice(index,1,text,...(FilteredDotMapping2),pText);
             res.saveText = fullfillText(res.data).saveText;
-            res.selecteds.splice(index,1,null,...new Array(FilteredDotMapping2.length).fill(null),null);
           }else{
             res.data.splice(index,1,pText,text,...(FilteredDotMapping2));
             res.saveText = fullfillText(res.data).saveText;
-            res.selecteds.splice(index,1,null,null,...new Array(FilteredDotMapping2.length).fill(null));
           }
         }else{//伴前
           if(strIndex < 1){//前
             res.data.splice(index,1,text,...(FilteredDotMapping1),pText);
             res.saveText = fullfillText(res.data).saveText;
-            res.selecteds.splice(index,1,null,...new Array(FilteredDotMapping1.length).fill(null),null);
           }else{
             res.data.splice(index,1,pText,text,...(FilteredDotMapping1));
             res.saveText = fullfillText(res.data).saveText;
-            res.selecteds.splice(index,1,null,null,...new Array(FilteredDotMapping1.length).fill(null));
           }
         }
       }
@@ -623,11 +601,9 @@ export function insertLabelData(state,action){
         if(preItem&&preItem.tagType==8){
           res.data.splice(index,1,...spreadLabels,pText);
           res.saveText = fullfillText(res.data).saveText;
-          res.selecteds.splice(index,1,...new Array(spreadLabels.length).fill(null),null);
         }else{
           res.data.splice(index,1,textEmpty,...spreadLabels,pText);
           res.saveText = fullfillText(res.data).saveText;
-          res.selecteds.splice(index,1,null,...new Array(spreadLabels.length).fill(null),null);
         }
         // res.data.splice(focusIndex,0,data,textEmpty);
         
@@ -637,11 +613,9 @@ export function insertLabelData(state,action){
         if(afterItem&&afterItem.tagType==8){
           res.data.splice(index,1,pText,...spreadLabels);
           res.saveText = fullfillText(res.data).saveText;
-          res.selecteds.splice(index,1,null,...new Array(spreadLabels.length).fill(null));
         }else{
           res.data.splice(index,1,pText,...spreadLabels,textEmpty);
           res.saveText = fullfillText(res.data).saveText;
-          res.selecteds.splice(index,1,null,...new Array(spreadLabels.length).fill(null),null);
         }   
       }
     }
@@ -656,19 +630,6 @@ export const clearCurrentEdit = (state,action)=>{
     res.editClear = action.editClear
     return res;
   }
-//复制标签(如血压)事件
-export function addLabelItem(state,action){
-  let res = Object.assign({},state);
-  const {data,i} = action;
-  const textLabel = Object.assign({},JSON.parse(config._textLabel),{showInCheck:JSON.parse(data).showInCheck});
-  //使用Object.assign({},data)拷贝操作时复制项和原项会同步修改
-  if(!data) return res;
-  res.data.splice(+i+2,0,JSON.parse(data),textLabel);
-  res.saveText.splice(+i+2,0,'','');
-  res.selecteds.splice(+i+2,0,null,null);
-  res.update = Math.random();
-  return res;
-}
 
 // backspace删除
 export function backspaceText(state,action){
@@ -682,13 +643,11 @@ export function backspaceText(state,action){
       // data[delIndex].value = text;
     }else if(data[delIndex-1].tagType==8){
       data.splice(delIndex,1);
-      res.selecteds.splice(delIndex,1);      //杂音类样式选中状态对应
       res.saveText.splice(delIndex,1);
     }
     else{
       handleLocalDelTag(2,delIndex-1,data[delIndex-1]);
-      data.splice(delIndex-1,2);
-      res.selecteds.splice(delIndex-1,2); 
+      data.splice(delIndex-1,action.text.length>0&&(config.punctuationReg.test(action.text))?1:2);
       res.saveText.splice(delIndex-1,2);
     }
   }else if(flag == 'del'){
@@ -696,7 +655,6 @@ export function backspaceText(state,action){
       
     }else if(data[delIndex+1] && data[delIndex+1].tagType==8){
       data.splice(delIndex,1);
-      res.selecteds.splice(delIndex,1);      //杂音类样式选中状态对应
       res.saveText.splice(delIndex,1);
     }else if(!data[delIndex+1]){//最后一个文本标签不删除
       // console.log("删除最后一个啦");
@@ -704,7 +662,6 @@ export function backspaceText(state,action){
     else{
       handleLocalDelTag(2,delIndex,data[delIndex+1]);
       data.splice(delIndex,2);
-      res.selecteds.splice(delIndex,2);  
       res.saveText.splice(delIndex,2);
     }
   }
@@ -760,6 +717,7 @@ export function multipleComfirn(state,action){
     let item = data[ikey].questionMapping;
     let arr=[];
     item[index].value = seleData;
+    item[index].selecteds = action.data;
     item.map((it)=>{
       if(it.value){
         arr.push(it.labelPrefix+it.value+it.labelSuffix);
@@ -767,12 +725,11 @@ export function multipleComfirn(state,action){
     });
     res.saveText[ikey] = arr.join("");
     res.update = Math.random();
-    res.selecteds[ikey] = {[index]:action.data};
     return res;
   }
   data[ikey].value = seleData;
+  data[ikey].selecteds = action.data;
   res.saveText[ikey] = seleData;
-  res.selecteds[ikey] = action.data;
   return res;
 }
 
@@ -791,16 +748,4 @@ export function delSingleLable(state,action){
   }
   res.update = Math.random();
   return res;
-}
-//恢复已删除的标签
-export function recoveTag(state,action) {
-  let res = Object.assign({},state);
-  let arr = [...res.data];
-  //const text = Object.assign({},JSON.parse(config.textLabel));
-  arr.splice(action.index,0,action.data);
-  res.data = fullfillText(arr).newArr;
-  res.saveText = fullfillText(arr).saveText;
-  shiftLocalDelTag();
-  res.update = Math.random();
-  return res;
 }

+ 6 - 29
src/store/actions/mainSuit.js

@@ -387,8 +387,8 @@ export const commConfirm=(state,action)=>{
     showText = showText.substr(0,showText.length-1);
   }
   res.data[labelInx].value = showText;
+  res.data[labelInx].selecteds = action.data;
   res.saveText[labelInx] = showText;
-  res.selecteds[labelInx] = action.data;
   res.update=Math.random();
   return res;
 }
@@ -594,7 +594,6 @@ export const changeLabelVal = (state,action)=>{
     const num = nextIsDot?2:1;
     handleLocalDelTag('1',index,res.data[index]);
     res.data.splice(index,num);
-    res.selecteds.splice(index,num);//杂音类样式选中状态对应
     res.saveText = fullfillText(res.data).saveText;
   }
   res.update = Math.random();//console.log(222,res);
@@ -620,17 +619,11 @@ export const clearMainSuit = (state,action)=>{//回读和清除
   const res = Object.assign({},state);
   res.data = action.data;
   res.saveText = action.saveText;
-  // res.saveText = fullfillText(action.data).saveText;//解决删除data里的值保存,回读后页面上有内容saveText里没有的情况
-  res.selecteds = action.selecteds?action.selecteds:[];
   res.mainIds = action.mainIds;
   res.mainTailIds = action.mainTailIds || [];
   res.chronicDesease = action.chronicDesease;//慢病疾病字段
   res.mainReadSonM = action.mainReadSonM || [];//子模板
   res.moduleNum.num = 0; //恢复子模板点击次数
-  /*const readModule = action.mainReadSonM;
-  if(readModule&&readModule.length>0){//有回读子模板,则覆盖
-    res.addSmoduleData = readModule;
-  }*/
   if(action.editClear){
     res.editClear = action.editClear;
   }
@@ -675,7 +668,6 @@ export function addLabelItem(state,action){
   if(!data) return res;
   res.data.splice(+i+2,0,JSON.parse(data),textLabel);
   res.saveText.splice(+i+2,0,'','');
-  res.selecteds.splice(+i+2,0,null,null);
   res.update = Math.random();
   return res;
 }
@@ -687,20 +679,20 @@ export function backspaceText(state,action){
   const data = res.data;
   if(flag == 'backsp'){
     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){
       // 前一个是文本标签或者子模板 不做处理
-    }else if(data[delIndex-1].tagType==8){
+    }else if(data[delIndex-1]&&data[delIndex-1].tagType==8){
       data.splice(delIndex,1);
       res.saveText.splice(delIndex,1);
     }
     else{
       handleLocalDelTag(1,delIndex-1,data[delIndex-1]);
-      data.splice(delIndex-1,2);
-      res.saveText.splice(delIndex-1,2);
+      data.splice(delIndex-1,action.text.length>0&&(config.punctuationReg.test(action.text))?1:2);//data不为空不能清除
+      res.saveText.splice(delIndex-1,action.text.length>0?1:2);
     }
   }else if(flag == 'del'){
     if(data[delIndex+1] && data[delIndex+1].flag&&data[delIndex+1].flag==3){
       // 后一个是文本标签或者子模板 不做处理
+
     }else if(data[delIndex+1] && data[delIndex+1].tagType==8){
       data.splice(delIndex,1);
       res.saveText.splice(delIndex,1);
@@ -714,8 +706,6 @@ export function backspaceText(state,action){
       res.saveText.splice(delIndex,2);
     }
   }
-  
-  // res.saveText = fullfillText(data).saveText;
   res.update = Math.random();
   return res;
 }
@@ -767,8 +757,8 @@ export function multipleComfirn(state,action){
   const {ikey,seleData} = action.data;
   let data = res.data;
   data[ikey].value = seleData;
+  data[ikey].selecteds = action.data;
   res.saveText[ikey] = seleData;
-  res.selecteds[ikey] = action.data;
   res.update = Math.random();
   return res;
 }
@@ -807,16 +797,3 @@ export function getSymptomFeature(state,action){
   res.update = Math.random();
   return res;
 }
-
-//恢复已删除的标签
-export function recoveTag(state,action) {
-  let res = Object.assign({},state);
-  let arr = [...res.data];
-  //const text = Object.assign({},JSON.parse(config.textLabel));
-  arr.splice(action.index,0,action.data);
-  res.data = fullfillText(arr).newArr;
-  res.saveText = fullfillText(arr).saveText;
-  shiftLocalDelTag();
-  res.update = Math.random();
-  return res;
-}

+ 9 - 49
src/store/actions/otherHistory.js

@@ -9,16 +9,16 @@ export const confirm = (state,action) =>{
   const items = [...exists||[],...withs||[]];
   if((!exists||!withs||items.length==0)&&!nones&&!exclusion){       //取消无殊的选中,空白提交
     arr[ikey].value = '';
+    arr[ikey].selecteds = {};
     res.saveText[ikey] = '';
-    res.selecteds.splice(ikey,1);
     res.update=Math.random();
     return res;
   }
   //选中互斥项
   if(exclusion){
     arr[ikey].value = excluName;
+    arr[ikey].selecteds = action.data;
     res.saveText[ikey] = excluName;
-    res.selecteds[ikey] = action.data;
     res.update=Math.random();
     return res;
   }
@@ -32,7 +32,6 @@ export const confirm = (state,action) =>{
   if(items.length==0&&nones){
     arr[ikey-1].value = newPreText;
     res.saveText[ikey-1] = newPreText;
-    res.selecteds[ikey] = null;       //无殊选中状态遗留bug修改
     res.update=Math.random();
     return res;
   }
@@ -75,8 +74,8 @@ export function setCheckBoxValue(state,action) {
     showText = showText.substr(0,showText.length-1);
   }
   res.data[labelInx].value = showText;
+  res.data[labelInx].selecteds = action.data;
   res.saveText[labelInx] = showText;
-  res.selecteds[labelInx] = action.data;
   res.update=Math.random();
   return res;
 }
@@ -106,23 +105,18 @@ 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);
+      res.saveText = fullfillText(res.data).saveText;
     }
   }else{
     span.current.innerText?(span.current.innerText = ' '):(span.current.innerHTML = ' ');
     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));
     }
 
   }
@@ -188,7 +182,6 @@ export function changeTextLabel(state,action) {
       res[res.data[index].formulaCode]=undefined;
     }
     res.data.splice(index,num);
-    res.selecteds.splice(index,num);//杂音类样式选中状态对应
     res.saveText = fullfillText(res.data).saveText;
   }
   res.update = Math.random();//console.log(888,res,action);
@@ -206,11 +199,6 @@ export function clearOtherHistory(state,action){       //清空数据
       res[it] = action[it];
     }
   }
-  /*res.data = action.data;
-  res.saveText = action.saveText;
-  res.selecteds = action.selecteds;
-  res.editClear = action.editClear;
-  res.isEmpty = action.isEmpty;*/
   return res;
 }
 //文本模式下值保存
@@ -256,19 +244,6 @@ export function setNumberValue(state,action){
   return res;
 }
 
-//复制标签(如血压)事件
-export function addLabelItem(state,action){
-  let res = Object.assign({},state);
-  const {data,i} = action;
-  const textLabel = Object.assign({},JSON.parse(config._textLabel),{showInCheck:JSON.parse(data).showInCheck});
-  //使用Object.assign({},data)拷贝操作时复制项和原项会同步修改
-  if(!data) return res;
-  res.data.splice(+i+2,0,JSON.parse(data),textLabel);
-  res.saveText.splice(+i+2,0,'','');
-  res.selecteds.splice(+i+2,0,null,null);
-  res.update = Math.random();
-  return res;
-}
 export const otherEditClear = (state,action)=>{
   const res = Object.assign({},state);
   res.editClear = action.bool;
@@ -286,7 +261,6 @@ export function backspaceText(state,action){
       // 前一个是文本标签或者子模板 不做处理
     }else if(data[delIndex-1].tagType==8){
       data.splice(delIndex,1);
-      res.selecteds.splice(delIndex,1);      //杂音类样式选中状态对应
       res.saveText.splice(delIndex,1);
     }
     else{
@@ -294,17 +268,16 @@ export function backspaceText(state,action){
       if(data[delIndex-1].formulaCode){
         res[data[delIndex-1].formulaCode]=undefined;
       }
+      const n = action.text.length>0&&(config.punctuationReg.test(action.text))?1:2;
       handleLocalDelTag(3,delIndex-1,data[delIndex-1]);      //记录被删除的标签
-      data.splice(delIndex-1,2);
-      res.selecteds.splice(delIndex-1,2);      //杂音类样式选中状态对应
-      res.saveText.splice(delIndex-1,2);
+      data.splice(delIndex-1,n);
+      res.saveText.splice(delIndex-1,n);
     }
   }else if(flag == 'del'){
     if(data[delIndex+1] && data[delIndex+1].flag&&data[delIndex+1].flag==3){//子模板不删  
       
     }else if(data[delIndex+1] && data[delIndex+1].tagType==8){
       data.splice(delIndex,1);
-      res.selecteds.splice(delIndex,1);      //杂音类样式选中状态对应
       res.saveText.splice(delIndex,1);
     }else if(!data[delIndex+1]){//最后一个文本标签不删除
       
@@ -316,7 +289,6 @@ export function backspaceText(state,action){
       }
       handleLocalDelTag(3,delIndex,data[delIndex+1]);
       data.splice(delIndex,2);
-      res.selecteds.splice(delIndex,2);  
       res.saveText.splice(delIndex,2);
     }
   }
@@ -357,6 +329,7 @@ export function multipleComfirn(state,action){
     let item = data[ikey].questionMapping;
     let arr=[];
     item[index].value = seleData;
+    item[index].selecteds= {[index]:action.data};
     item.map((it)=>{
       if(it.value){
         arr.push(it.labelPrefix+it.value+it.labelSuffix);
@@ -364,12 +337,11 @@ export function multipleComfirn(state,action){
     });
     res.saveText[ikey] = arr.join("");
     res.update = Math.random();
-    res.selecteds[ikey] = {[index]:action.data};
     return res;
   }
   data[ikey].value = seleData;
+  data[ikey].selecteds = action.data;
   res.saveText[ikey] = seleData;
-  res.selecteds[ikey] = action.data;
   return res;
 }
 
@@ -387,16 +359,4 @@ export function delSingleLable(state,action){
   }
   res.update = Math.random();
   return res;
-}
-//恢复已删除的标签
-export function recoveTag(state,action) {
-  let res = Object.assign({},state);
-  let arr = [...res.data];
-  //const text = Object.assign({},JSON.parse(config.textLabel));
-  arr.splice(action.index,0,action.data);
-  res.data = fullfillText(arr).newArr;
-  res.saveText = fullfillText(arr).saveText;
-  shiftLocalDelTag();
-  res.update = Math.random();
-  return res;
 }

+ 2 - 0
src/store/actions/pushMessage.js

@@ -182,6 +182,7 @@ export const setTips = (state, action) => {
   const res = Object.assign({}, state)
   res.tips = action.tips;
   res.tmpFlg = action.tmpFlg
+  res.showPartName = action.showPartName
   return res;
 }
 
@@ -189,6 +190,7 @@ export const setTips = (state, action) => {
 export const setTipsDetails = (state, action) => {
   const res = Object.assign({}, state)
   res.tipsDetails = action.tipsDetails;
+  res.showAllName = action.showAllName
   return res;
 }
 

+ 4 - 3
src/store/async-actions/fetchModules.js

@@ -191,11 +191,11 @@ export function setOtherHisModule(){
     const initData = state.homePage.initData;
     const otherModel = initData.otherHisModel;
     const block = Object.assign(JSON.parse(config.textLabel),{full:true});
-    const mode = state.typeConfig.typeConfig;
+    const readMode = state.typeConfig.readMode;     //数据实际模式
+    const mode = readMode!==-1&&readMode!==null?readMode:state.typeConfig.typeConfig;
     const model = otherModel&&otherModel.length>0?deepClone(otherModel):[block];     //其他史模板,没有模板数据则显示一个空文本标签
     const arr = deepClone(initData.otherHis);        //最近其他史数据
     const arrSave = deepClone(initData.otherHisSave);    //最近其他史saveText
-    const selects = initData.otherSelecteds?[...initData.otherSelecteds]:[];  //其他史杂音类选中项
     const isHis = initData.otherIsHis;     //是否是历史数据
     const onlyOneText = arr && arr.length == 1 && arr[0].tagType == 8 && !arr[0].value;    //是否只有一个空的自由文本标签
     //是历史数据且不为空则显示历史数据,否则显示模板
@@ -206,7 +206,6 @@ export function setOtherHisModule(){
     dispatch({
       type: SETDATA,
       data: listObj.newArr,
-      selecteds: selects,
       period: initData.period,
       save: listObj.saveText,
       isEmpty: false
@@ -250,6 +249,8 @@ export function getAssessData(disId,disName){
       lis:emrData.lis,
       sex:emrData.sex,
       age:emrData.age,
+      pacs:emrData.pacs,
+      vital:emrData.vital,
       symptom:emrData.current + emrData.main
     };
     return json(api.getAssess,param);

+ 7 - 3
src/store/async-actions/pushMessage.js

@@ -144,7 +144,8 @@ export const getConceptDetail = (item,noTips,noDetails,noNotify) => {
                         dispatch({
                             type: SET_TIPS,
                             tips: res.data.data,
-                            tmpFlg:'midPart'
+                            tmpFlg:'midPart',
+                            showPartName: item.showName
                         })
                     } else {
                         dispatch({
@@ -161,7 +162,8 @@ export const getConceptDetail = (item,noTips,noDetails,noNotify) => {
                     if(!noDetails) {
                       dispatch({
                         type: SET_TIPS_DETAILS,
-                        tipsDetails: res.data.data
+                        tipsDetails: res.data.data,
+                        showAllName: item.showName
                       })
                       dispatch({
                         type: SHOW_TIPS_DETAILS
@@ -190,6 +192,7 @@ export const getConceptDetail = (item,noTips,noDetails,noNotify) => {
 }
 
 export const getAllConceptDetail = (item) => {
+
     return(dispatch, getState) => {
         const state = getState();
       let params = {
@@ -215,7 +218,8 @@ export const getAllConceptDetail = (item) => {
               }
               dispatch({
                 type: SET_TIPS_DETAILS,
-                tipsDetails: res.data.data
+                tipsDetails: res.data.data,
+                showAllName: item.showName
               })
             } else {
                 Notify.info('提示信息未维护');

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

@@ -2,10 +2,10 @@ import {RECOVER_TAG_CHECK,SET,SETNUMBER4,SETSELECTED4,SETCHECKBOX,ADDLABELITEM,S
   SELECTSEARCHDATA,CHANGECHECKTEXTLABEL,CLEARCHECKBODY,CHECK_FOCUS_INDEX,CHECKBODY_CLEAR,
   SETCHECKINPUT,DEL_CHECKBODY,CHECKCONFIRMSELECTED,
   CHECKBODY_MUL,DEL_CHECKBODY_LABLE,SET_CK_RADIO_INPUT_VAL,SET_IMPORT_CHECKBODY_LABEL,PRESET} from '../types/checkBody.js';
-import {recoveTag,set,setCheckBoxValue,addLabelItem,setCheckText,
+import {recoveTag,set,setCheckBoxValue,
   setSearchData,insertLabelData,changeLabelVal,clearCheckBody,backspaceText
   ,confirm,multipleComfirn,delSingleLable,setImportCheckbodyLabel,preSetCheckbody} from '../actions/checkBody.js';
-import {setRadioInputValue,setRadioValue,setNumberValue,setInputLabel} from '@utils/utils';
+import {setRadioInputValue,setRadioValue,setNumberValue,setCheckText,addLabelItem,setInputLabel} from '@utils/utils';
 import config from '@config/index.js';
 
 const block = Object.assign(JSON.parse(config.textLabel),{full:true});//空白时保留一个自由文本标签
@@ -13,7 +13,7 @@ const initState = {
                 data:[block],
                 saveText:[],    //saveText为生成的纯文本
                 searchData:[],
-                selecteds:[],
+                //selecteds:[],
                 focusIndex:'',
                 isEmpty:true,      //是否为空白,需要请求数据
                 showSearchBox:false,
@@ -32,7 +32,7 @@ export default function(state=initState,action){
     case SETSELECTED4:
       return setRadioValue(state,action);
     case ADDLABELITEM:
-      return addLabelItem(state,action);
+      return addLabelItem(state,action,'4');
     case SETCHECKTEXT:
       return setCheckText(state,action);
     case SETSEARCHDATA:

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

@@ -3,16 +3,15 @@ import {RECOVER_TAG_CURRENT,SET_CURRENT,CURRENT_CONFIRM,INSERT_PROCESS,SET_CURRE
   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,REMOVE_CURR_ID,CURRENT_MUL,DEL_CURRENT_LABLE,SET_RADIO_INPUT_VALUE,CURRENT_CHRONIC,SAVE_CURR_FREE} from '../types/currentIll';
-import {recoveTag,confirm,insertProcess,setData,setCheckBox,changeLabelVal,clearCurrentIll,
-  setTextModeValue,setModule,bigDataSymptom,setCheckText,insertLabelData,clearCurrentEdit,addLabelItem,
+import {confirm,insertProcess,setData,setCheckBox,changeLabelVal,clearCurrentIll,
+  setTextModeValue,setModule,bigDataSymptom,insertLabelData,clearCurrentEdit,
   backspaceText,removeId,multipleComfirn,delSingleLable,fillChronicModule} from '../actions/currentIll';
-import {setRadioInputValue,setRadioValue,setNumberValue,setInputLabel} from '@utils/utils';
+import {recoveTag,setRadioInputValue,setRadioValue,setNumberValue,setCheckText,addLabelItem,setInputLabel} from '@utils/utils';
 
 const initState = {
   moduleData:[],
   data:[],
   saveText:[],
-  selecteds:[],
   searchDatas:[],//搜索结果
   editClear:true,
   addModule:[],

+ 0 - 1
src/store/reducers/homePage.js

@@ -53,7 +53,6 @@ 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;
       res.initData.period = action.period;
       return res;

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

@@ -3,11 +3,11 @@ import {RECOVER_TAG_MAIN,COMM_SYMPTOMS,CLEAR_COMSYMPTOMS,SHOW_TAIL,INSERT_MAIN,
   RADIO_SELECT,COMM_CONFIRM,CHANGE_LABELVAL,SAVE_FREE,CLEAR_MAIN_SUIT,SET_DATA,
   INSERT_SEARCH,MAIN_FOCUS_INDEX,SETTEXTMODEVALUE,SETMAINTEXT,MAINADDLABELITEM,SETMAININPUT,DEL_MAIN,
   REMOVE_MAIN_ID,MAINSUIT_MUL,DEL_MAIN_LABLE,SET_FEATURE,SET_MS_RADIO_INPUT_VAL,SAVE_CHRONIC,MAIN_REMOVE_SPAN,SET_ADD_SEARCH,CLEAR_ADD_SEARCH} from '../types/mainSuit'
-import {recoveTag,getCommSymptoms,handleTailClick,insertMain,setSearch,getBigSymptom,setMainMoudle,confirm,
-  commConfirm,changeLabelVal,saveFreeVal,clearMainSuit,insertSearch,setTextModeValue,setCheckText,
-  addLabelItem,backspaceText,removeId,multipleComfirn,delSingleLable,
+import {getCommSymptoms,handleTailClick,insertMain,setSearch,getBigSymptom,setMainMoudle,confirm,
+  commConfirm,changeLabelVal,saveFreeVal,clearMainSuit,insertSearch,setTextModeValue,
+  backspaceText,removeId,multipleComfirn,delSingleLable,
   getSymptomFeature} from '../actions/mainSuit'
-import {setRadioInputValue,setNumberValue,setRadioValue,setInputLabel} from '@utils/utils';
+import {recoveTag,setRadioInputValue,setNumberValue,setRadioValue,setCheckText,addLabelItem,setInputLabel} from '@utils/utils';
 
 const initState = {
   showDrop:false,
@@ -18,7 +18,6 @@ const initState = {
   addSmoduleData:[],//添加病情变化模板
   data:[],//主诉使用的模板数据
   saveText:[],//主诉框内的值
-  selecteds:[],
   moduleNum:{num:0},//点了几次添加病情变化
   focusIndex:'',
   mainIds:[], //选中的主症状和伴随的id(搜索去重)

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

@@ -1,10 +1,10 @@
 import {RECOVER_TAG_OTHER,SETDATA,CONFIRMSELECTED,SETRADIO,SETNUMBER,SETOTHERCHECKBOX,SETOTHERTEXT,SETOTHERSEARCHDATA,
   SELECTOTHERSEARCHDATA,CLEAROTHERHISTORY,CHANGEOTHERTEXTLABEL,SETOTHERINPUT,SETTEXTMODEVALUE,OTHER_FOCUS_INDEX,OTHERHIS_CLEAR,
   OTHERADDLABELITEM,OTHEREDICLEAR,DEL_OTHERHIS,OTHERHIS_MUL,REMOVE_OTHER_ID,DEL_OTHERHIS_LABLE,SET_OT_RADIO_INPUT_VAL} from '../types/otherHistory';
-import {recoveTag,confirm,setCheckBoxValue,setCheckText,setSearchData,insertLabelData,clearOtherHistory,
-  changeTextLabel,setTextModeValue,addLabelItem,setNumberValue,otherEditClear,backspaceText,multipleComfirn,
+import {confirm,setCheckBoxValue,setSearchData,insertLabelData,clearOtherHistory,
+  changeTextLabel,setNumberValue,setTextModeValue,otherEditClear,backspaceText,multipleComfirn,
   removeId,delSingleLable} from '../actions/otherHistory';
-import {setRadioInputValue,setRadioValue,setInputLabel} from '@utils/utils';
+import {recoveTag,setRadioInputValue,setRadioValue,addLabelItem,setCheckText,setInputLabel} from '@utils/utils';
 import config from '@config/index';
 
 const block = Object.assign(JSON.parse(config.textLabel),{full:true});//空白时保留一个自由文本标签
@@ -12,7 +12,6 @@ const initState = {
                     data:[block],
                     isEmpty:true,
                     saveText:[],
-                    selecteds:[],
                     deledTags:{},
                     focusIndex:'',
                     editClear:true};
@@ -22,7 +21,6 @@ export default function(state=initState,action){//console.log(state)
   switch (action.type){
     case SETDATA:
       res.data = action.data;
-      res.selecteds = action.selecteds||[];
       const period = action.period;
       if(period){
         res.yjs_1=period.yjs_1;

+ 2 - 2
src/utils/config.js

@@ -1,13 +1,13 @@
 // const host='http://192.168.3.1:5050';//赵
 // const host='http://192.168.3.100:5050';//王峰
 // const host='http://192.168.2.121:5050';//后端接口访问地址
-// const host='http://192.168.2.121:5050';//后端接口访问地址
+// const host='http://192.168.2.236:5050';//后端接口访问地址
 const host='http://192.168.2.241:5050';//后端接口访问地址
 // const host='http://192.168.3.11:5050';//王宇
 //const host='http://192.168.2.164:8080';
 // const host='http://192.168.3.117:5050'; //周铁刚
 // const newIcssVisitUrl = '223.93.170.82:13000';    //icss服务访问地址(跳转目的地),不能加http://
-const imageUrlPrefix = 'http://192.168.2.121:82';
+const imageUrlPrefix = 'http://192.168.2.236:82';
 module.exports={
     host,
     prefix:'/api/icss',            //带权限验证的api

+ 43 - 23
src/utils/tools.js

@@ -94,10 +94,6 @@ const getAllDataList =(baseList) =>{           //获取所有模块结构化的
     jsonData.pacs = baseList.assistCheck.assistLabel;     //辅检
     jsonData.diag = baseList.diagnosticList.diagnosticList;      //诊断
     jsonData.advice = baseList.pushMessage.advice;       //医嘱
-    jsonData.mainSuitSelecteds = baseList.mainSuit.selecteds;      //主诉选中状态保存
-    jsonData.currentIllSelecteds = baseList.currentIll.selecteds;      //主诉选中状态保存
-    jsonData.otherHistorySelecteds = baseList.otherHistory.selecteds;      //主诉选中状态保存
-    jsonData.checkBodySelecteds = baseList.checkBody.selecteds;      //主诉选中状态保存
     //jsonData.addItems = baseList.homePage.addItems||{};
     jsonData.mainsuitIds = baseList.mainSuit.mainIds;      //主诉去重
     jsonData.mainChronicDesease = baseList.mainSuit.chronicDesease;      //主诉慢病{}
@@ -162,10 +158,10 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
       //清除已删除标签记录
       localStorage.removeItem('deletedTags');
       store.dispatch({type: SET_READ_MODE, readMode: -1});      //清除回读模式值
-      store.dispatch({type: CLEAR_MAIN_SUIT,data:[],saveText:[],selecteds:[],editClear:true,mainIds:[],mainTailIds:[],clearAction:true,symptomFeature:[],chronicDesease:null,mainReadSonM:[]});
-        store.dispatch({type: CLEAR_CURRENT_ILL,data:[],saveText:[],selecteds:[],editClear:true,symptomIds:[],currReadSonM:[]});
-        store.dispatch({type: CLEAROTHERHISTORY,data:[block],isEmpty:true,saveText:[],selecteds:[],editClear:true,yjs_1:'',yjs_2:'',yjs_3:'',yjs_4:''});
-        store.dispatch({type: CLEARCHECKBODY,data:[block],isEmpty:true,saveText:[],selecteds:[]});
+      store.dispatch({type: CLEAR_MAIN_SUIT,data:[],saveText:[],editClear:true,mainIds:[],mainTailIds:[],clearAction:true,symptomFeature:[],chronicDesease:null,mainReadSonM:[]});
+        store.dispatch({type: CLEAR_CURRENT_ILL,data:[],saveText:[],editClear:true,symptomIds:[],currReadSonM:[]});
+        store.dispatch({type: CLEAROTHERHISTORY,data:[block],isEmpty:true,saveText:[],editClear:true,yjs_1:'',yjs_2:'',yjs_3:'',yjs_4:''});
+        store.dispatch({type: CLEARCHECKBODY,data:[block],isEmpty:true,saveText:[]});
         store.dispatch({type:SETREADDITEMS});     //清空已存的血压加号项
         store.dispatch(clearAssistData([],'',[]));
         store.dispatch(clearAllLabel([],[],''));
@@ -248,7 +244,6 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
                 store.dispatch({
                     type: CLEAR_MAIN_SUIT,
                     data:dataJson.chief,
-                    selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[],
                     saveText:JSON.parse(dataJsonStr.chief),
                     mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[],
                     chronicDesease:dataJson.mainChronicDesease,
@@ -257,7 +252,6 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
                 store.dispatch({
                     type: CLEAR_CURRENT_ILL,
                     data:dataJson.present,
-                    selecteds:dataJson.currentIllSelecteds?dataJson.currentIllSelecteds:[],
                     saveText:JSON.parse(dataJsonStr.present),
                     symptomIds:dataJson.currentIds?dataJson.currentIds:[],
                     currReadSonM:dataJson.currReadSonM
@@ -269,7 +263,6 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
                     yjs_2:dataJson.yjs_2,
                     yjs_3:dataJson.yjs_3,
                     yjs_4:dataJson.yjs_4,
-                    selecteds:dataJson.otherHistorySelecteds?dataJson.otherHistorySelecteds:[],
                     isEmpty:onlyOneText?true:false,//dataJson.otherHistoryIsEmpty,
                     saveText:JSON.parse(dataJsonStr.other),
                     editClear:dataJson.other.length>0?false:true
@@ -277,7 +270,6 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
                 store.dispatch({
                     type: CLEARCHECKBODY,
                     data:dataJson.vital,
-                    selecteds:dataJson.checkBodySelecteds?dataJson.checkBodySelecteds:[],
                     isEmpty:dataJson.checkBodyIsEmpty,
                     saveText:JSON.parse(dataJsonStr.vital)
                 });
@@ -310,14 +302,10 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
               //tab跳回辅助信息
               store.dispatch(tabChange('0'));
             }else{    //结构化历史病历回读
-                /*let dataJson = JSON.parse(reData.dataJson);*/
                 let dataJsonStr = reData.detailList;
-              // console.log(dataJsonStr,'结构化历史病历回读')
-                // console.log(dataJson.mainSuitSelecteds,7887)
                 store.dispatch({
                     type: CLEAR_MAIN_SUIT,
                     data:dataJson.chief,
-                    selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[],
                     saveText:dataJsonStr[0].content ? JSON.parse(dataJsonStr[0].content) :[],
                     mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[],
                     chronicDesease:dataJson.mainChronicDesease,
@@ -326,7 +314,6 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
                 store.dispatch({
                     type: CLEAR_CURRENT_ILL,
                     data:dataJson.present,
-                    selecteds:dataJson.currentIllSelecteds?dataJson.currentIllSelecteds:[],
                     saveText:dataJsonStr[1].content ? JSON.parse(dataJsonStr[1].content):[],
                     symptomIds:dataJson.currentIds?dataJson.currentIds:[],
                     currReadSonM:dataJson.currReadSonM
@@ -338,7 +325,6 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
                     yjs_2:dataJson.yjs_2,
                     yjs_3:dataJson.yjs_3,
                     yjs_4:dataJson.yjs_4,
-                    selecteds:dataJson.otherHistorySelecteds?dataJson.otherHistorySelecteds:[],
                     saveText:dataJsonStr[2].content ? JSON.parse(dataJsonStr[2].content):[],
                     isEmpty:onlyOneText?true:false,//dataJson.otherHistoryIsEmpty,回读回来后判断是否只有一个空标签,是的话要使用模板
                     editClear:dataJson.other.length>0?false:true
@@ -346,7 +332,6 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
                 store.dispatch({
                     type: CLEARCHECKBODY,
                     data:dataJson.vital,
-                    selecteds:dataJson.checkBodySelecteds?dataJson.checkBodySelecteds:[],
                     isEmpty:dataJson.checkBodyIsEmpty,
                     saveText:dataJsonStr[3].content ? JSON.parse(dataJsonStr[3].content):[]
                 });
@@ -1129,7 +1114,41 @@ function getStatusImg(type,val,status){
     }
   }
 }
-
+function getDomUpDown(min,max,value){
+  let dom = '';
+  if(min == null&&max == null||min == undefined&&max == undefined||min == ''&&max == ''){
+    dom = getStatusImg(0, value, 1)
+  }else if (!isNaN(min) && !isNaN(max) &&min!=null&&max!=null) {//有最大值最小值
+    if (isNaN(value)) {//输入的不是数据
+      dom = getStatusImg(1, value, 1)
+    } else if (value <= min) {//下降
+      dom = getStatusImg(3, value, 1)
+    } else if (value >= max) {//上升
+      dom = getStatusImg(2, value, 1)
+    } else {//正常
+      dom = getStatusImg(0, value, 1)
+    }
+  } else if (min==null && !isNaN(max)&&max!=null) {//有最大值无最小值
+    if (value >= max) {//上升
+      dom = getStatusImg(2, value, 1)
+    } else if(isNaN(value)){
+      dom = getStatusImg(1, value, 1)
+    }else {//正常
+      dom = getStatusImg(0, value, 1)
+    }
+  } else if (!isNaN(min) && max==null&&min!=null) {//有最小值无最大值
+    if (value <= min) {//下降
+      dom = getStatusImg(3, value, 1)
+    } else if(isNaN(value)){
+      dom = getStatusImg(1, value, 1)
+    }else {//正常
+      dom = getStatusImg(0, value, 1)
+    }
+  } else {//无最大最小值(中文))
+    dom = getStatusImg(1, value, 1)
+  }
+  return dom;
+}
 //键值对转换
 function parseNameVal(arr){
   let obj = {};
@@ -1282,7 +1301,7 @@ function resetTagtype(data){
 //记录最近3次被删除的标签
 function handleLocalDelTag(mark,index,tag){
   const deledTag =  localStorage.getItem('deletedTags')?JSON.parse(localStorage.getItem('deletedTags')):[];
-  deledTag.unshift(Object.assign({delIndex:mark+'-'+index},tag));
+  deledTag.unshift(Object.assign({},tag,{delIndex:mark+'-'+index}));
   deledTag.length = deledTag.length>config.recoverTagNum?config.recoverTagNum:deledTag.length;
   localStorage.setItem('deletedTags',JSON.stringify(deledTag));
 }
@@ -1303,7 +1322,7 @@ function setPosition (e,dom,setHighter){
     let btmHt = wrapHt-(clickHt-111)-scrollHt;//点击位置距离底部的距离
     // console.log(wrapHt,clickHt,scrollHt,btmHt,contHt)
     if(btmHt<contHt){
-      setHighter(contHt-btmHt+20);
+      setHighter&&setHighter(contHt-btmHt+20);
     }else{
       setHighter&&setHighter(48);       //标签填写单连续点击弹出,未超出需要恢复
     }
@@ -1358,5 +1377,6 @@ module.exports = {
     handleLocalDelTag,
     shiftLocalDelTag,
     setPosition,
-    isAllPartClear
+    isAllPartClear,
+    getDomUpDown
 };

+ 44 - 1
src/utils/utils.js

@@ -1,4 +1,5 @@
-import {getLabelIndex,getEMRParams,storageLocal} from './tools';
+import config from '@config/index.js';
+import {getLabelIndex,checkFullfillText,fullfillText,shiftLocalDelTag,getEMRParams,storageLocal} from './tools';
 import { json } from "./ajax";
 /**
  * 各类标签统一的处理函数
@@ -135,6 +136,48 @@ export const setRadioInputValue = (state,action)=>{
   return res;
 }
 
+//恢复已删除的标签
+export function recoveTag(state,action) {
+  let res = Object.assign({},state);
+  let arr = [...res.data];
+  arr.splice(action.index,0,action.data);
+  const dataArr = fullfillText(arr);
+  res.data = dataArr.newArr;
+  res.saveText = dataArr.saveText;
+  shiftLocalDelTag();
+  res.update = Math.random();
+  return res;
+}
+
+
+//自由文本存值
+export function setCheckText(state,action) {
+  let res = Object.assign({},state);
+  const {i,text} = action;
+  if(res.data[i]){
+    res.data[i].value=text;
+  }
+  res.saveText[i] = text;
+  res.update = Math.random();
+  return res;
+}
+
+//复制标签(如血压)事件
+export function addLabelItem(state,action,boxMark){
+  let res = Object.assign({},state);
+  const {data,i} = action;
+  const item = JSON.parse(data);
+  const textL = JSON.parse(config.textLabel);
+  //查体添加的自由文本标签需要逗号,且要设置隐藏状态
+  const textLabel = boxMark==='4'?Object.assign({},textL,{showInCheck:item.showInCheck,name:','}):textL;console.log(textLabel)
+  //使用Object.assign({},data)拷贝操作时复制项和原项会同步修改
+  if(!data) return res;
+  res.data.splice(+i+2,0,item,textLabel);
+  res.saveText.splice(+i+2,0,'','');
+  res.update = Math.random();
+  return res;
+}
+
 //文本输入标签inlineTag值保存
 export function setInputLabel(state,action){
   let res = Object.assign({}, state);

+ 0 - 101
static/pages/case_info.html

@@ -1,101 +0,0 @@
-<!DOCTYPE html>
-<!–[if IE 8]>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
-<![endif]–>
-<html>
-<head>
-    <meta charset="utf-8">
-    <meta name="renderer" content="ie-stand">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
-    <!–[if IE 8]>
-    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8">
-    <![endif]–>
-    <meta http-equiv="Expires" content="0">
-    <meta http-equiv="Pragma" content="no-cache">
-    <meta http-equiv="Cache-control" content="no-cache">
-    <meta http-equiv="Cache" content="no-cache">
-
-    <title>诊断依据</title>
-    <link rel="shortcut icon" href="./favicon.ico" />
-    <style>
-        body,div,p,h2{
-            padding: 0;
-            margin: 0;
-            font-family: 'Microsoft YaHei', arial, tahoma, sans-serif;
-        }
-        .container{
-            width: 600px;
-            padding: 10px;
-            background: #fff;
-            margin: 0 auto;
-        }
-        h1{
-            text-align: center;
-            font-size: 18px;
-        }
-        h2{
-            font-size: 14px;
-            margin-bottom: 10px;
-            display: inline-block;
-            background: #fff;
-            z-index: 1;
-            position: relative;
-            padding-right: 5px;
-        }
-        .information{
-            margin-bottom: 10px;
-            font-size: 13px;
-            position: relative;
-        }
-        .context{
-            position: relative;
-        }
-        p{
-            text-indent: 25px;
-            margin-bottom: 5px;
-        }
-        .more{
-            font-size: 13px;
-            color: #1c8bb7;
-            position: absolute;
-            top: -28px;
-            right: 0;
-            z-index: 2;
-            background: #fff;
-            text-indent: 8px;
-            cursor: pointer;
-        }
-        .more a{
-            color: #0088be;
-            text-decoration: none;
-        }
-        .line{
-            border-top: 1px #ccc dashed;
-            position: absolute;
-            top: -19px;
-            width: 100%;
-        }
-        .content{
-            font-size: 13px;
-        }
-    </style>
-</head>
-<body>
-<div class="container">
-    <h1></h1>
-    <h2>诊断依据</h2>
-    <div class="information">
-        <p class="line"></p>
-    </div>
-    <h2>摘要</h2>
-    <div class="context">
-        <p class="line"></p>
-        <p class="more"><a id="more" href="##" target="_blank">查看更多>></a></p>
-        <div class="content"></div>
-    </div>
-</div>
-</body>
-
-<script src="./hisLib/jquery-1.9.1.min.js"></script>
-<script  src="./hisLib/case_info.js"></script>

+ 0 - 243
static/pages/chronic-info/css/info.css

@@ -1,243 +0,0 @@
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center, dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend, table,
-caption, tbody, tfoot, thead, tr, th, td,
-article, aside, canvas, details, embed,
-figure, figcaption, footer, header,
-menu, nav, output, ruby, section, summary,
-time, mark, audio, video {
-    margin: 0;
-    padding: 0;
-    border: 0;
-    font: inherit;
-    font-size: 12px;
-}
-html, body {
-    width: 100%;
-    height: 100%;
-    padding: 0;
-    margin: 0;
-    background-color: #fff;
-    color: #33475f;
-    font-family: 'Microsoft YaHei', '宋体', sans-serif;
-    overflow-x: auto;
-}
-body{
-    overflow-y: auto;
-    min-width: 848px;
-
-}
-.d-n{
-    display: none;
-}
-
-.container {
-    max-width: 1440px;
-    height: auto;
-    margin: 0 auto;
-    padding: 15px 20px;
-}
-
-.container>.title {
-    margin-bottom: 10px;
-    font-size: 14px;
-    line-height: 16px;
-    width: 100%;
-}
-.container>.wrapper {
-    width: 98%;
-    padding: 0 1%;
-    overflow-x: auto;
-}
-
-.container>.title .icon {
-    display: inline-block;
-    background: url("../img/icon-2.png") no-repeat center;
-    width: 14px;
-    height: 16px;
-    vertical-align: bottom;
-}
-
-.container>.title .text {
-    display: inline-block;
-    font-weight: bold;
-    margin: 0;
-    height: 100%;
-    vertical-align: bottom;
-}
-
-.container .wrapper .table-wrapper {
-    border-radius: 5px;
-    width: 100%;
-    border: 2px solid #c9c9c9;
-}
-
-.container .wrapper table {
-    width: 100%;
-    font-size: 12px;
-    border-collapse: collapse;
-    border: none;
-    table-layout: fixed;
-}
-
-.container .wrapper table tr {
-    vertical-align: middle;
-    border-bottom: 1px solid #c9c9c9;
-}
-
-.container .wrapper table tr:last-child {
-    border-bottom: none;
-}
-
-.container .wrapper table tr td {
-    height: 30px;
-    border-right: 1px solid #c9c9c9;
-    padding: 0 5px;
-}
-
-.container .wrapper table tr td:last-child {
-    border: none;
-}
-
-.container .wrapper table tr:first-child {
-    border-top-left-radius: 5px;
-    border-top-right-radius: 5px;
-}
-
-.container .wrapper table tr:first-child td:first-child {
-    border-top-left-radius: 5px;
-}
-
-.container .wrapper table tr:first-child td:last-child {
-    border-top-right-radius: 5px;
-}
-
-.container .wrapper table tr:last-child {
-    border-bottom-left-radius: 5px;
-    border-bottom-right-radius: 5px;
-}
-
-.container .wrapper table tr:last-child td:first-child {
-    border-bottom-left-radius: 5px;
-}
-
-.container .wrapper table tr:last-child td:last-child {
-    border-bottom-right-radius: 5px;
-}
-
-
-.container .wrapper .canvas-wrapper .row {
-    width: 100%;
-    height: 200px;
-    padding-bottom: 10px;
-}
-.container .wrapper .canvas-wrapper .row:last-child {
-    padding-bottom: 0;
-}
-.container .wrapper .draw-wrapper {
-    height: 200px;
-    background-color: #eee;
-    border-radius: 5px;
-    display: inline-block;
-    float: left;
-}
-.container .wrapper .canvas-wrapper .row .draw-wrapper:last-child {
-    float: right;
-}
-
-.container .wrapper .draw-wrapper.blood-sugar {
-    width: 100%;
-}
-.container .wrapper .draw-wrapper.protein {
-    width: 49%;
-}
-
-
-
-
-.container .wrapper .recording-wrapper{
-    width: 100%;
-    overflow-x: auto;
-    font-size:0;
-}
-.container .wrapper .recording-info{
-    width: 100%;
-    height: auto;
-    max-height:170px;
-    border-radius: 5px;
-    background-color: #e5e5e5;
-    margin-bottom: 10px;
-}
-.container .wrapper .recording-info .date-title p{
-    width: 95px;
-    height: 20px;
-    border-top-left-radius: 5px;
-    border-bottom-right-radius: 25px;
-    background-color: #accae4;
-    font-size: 12px;
-    padding-left: 15px;
-    line-height: 20px;
-}
-.container .wrapper .recording-info>.content {
-    font-size: 13px;
-    height: auto;
-    padding: 0 2% 10px;
-    max-height: 130px;
-    overflow-y:auto;
-    width: 96%;
-    position: relative;
-    border-radius: 0 0 5px 5px;
-
-}
-#medical-records>.wrapper::-webkit-scrollbar{
-    height: 8px;
-}
-#medical-records>.wrapper::-webkit-scrollbar-thumb{
-    border-radius: 0 3px;
-    background: #ccc;
-}
-.container .wrapper .recording-info>.content::-webkit-scrollbar {
-    width: 6px;
-}
-.container .wrapper .recording-info>.content::-webkit-scrollbar-thumb {
-    border-radius: 0 3px;
-    background: #ccc;
-}
-.container .wrapper .recording-info>.content div.group{
-    padding: 2px 0;
-    position: relative;
-}
-
-.container .wrapper .recording-info>.content div.group.assay>p.content{
-    background-color: #fff;
-    max-height: 60px;
-    overflow-y: auto;
-}
-.container .wrapper .recording-info>.content div.group.assay>p.content::-webkit-scrollbar {
-    width: 6px;
-}
-.container .wrapper .recording-info>.content div.group.assay>p.content::-webkit-scrollbar-thumb {
-    border-radius: 0 3px;
-    background: #ccc;
-}
-
-.container .wrapper .recording-info>.content p span.space{
-    display: inline-block;
-    width: 20px;
-    height: 10px;
-}
-
-.container .wrapper .recording-info>.content div.group>p.title{
-    display: inline-block;
-    float: left;
-}
-.container .wrapper .recording-info>.content div.group>p.content{
-    min-height: 17px;
-}
-.container .wrapper .recording-info>.content div.group.assay>p.content>p{
-    padding: 1px 8px;
-}

binární
static/pages/chronic-info/img/icon-2.png


+ 0 - 105
static/pages/chronic-info/index.html

@@ -1,105 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <link rel="stylesheet" href="./css/info.css">
-    <title>个人信息</title>
-</head>
-<body>
-<div id="personal" class="container">
-    <div class="title">
-        <i class="icon"></i>
-        <p class="text">个人基本信息</p>
-    </div>
-    <div class="wrapper">
-        <div class="table-wrapper">
-            <table>
-                <tbody>
-                <tr>
-                    <td colspan="1" align="center">姓名</td>
-                    <td colspan="2" data-type="name"></td>
-                    <td colspan="1" align="center">性别</td>
-                    <td colspan="2" data-type="sex"></td>
-                    <td colspan="1" align="center">出生日期</td>
-                    <td colspan="2" data-type="birthday"></td>
-                </tr>
-                <tr>
-                    <td colspan="1" align="center">身份证号</td>
-                    <td colspan="2" data-type="identity"></td>
-                    <td colspan="1" align="center">联系电话</td>
-                    <td colspan="2" data-type="phone"></td>
-                    <td colspan="1" align="center">身高/体重/BMI</td>
-                    <td colspan="2" data-type="body"></td>
-                </tr>
-                <tr>
-                    <td colspan="1" align="center">工作单位</td>
-                    <td colspan="4" data-type="work-unit"></td>
-                    <td colspan="1" align="center">居住地址</td>
-                    <td colspan="3" data-type="live-address"></td>
-                </tr>
-                </tbody>
-            </table>
-        </div>
-    </div>
-</div>
-<div id="indicator" class="container d-n">
-    <div class="title">
-        <i class="icon"></i>
-        <p class="text">指标信息</p>
-    </div>
-    <div class="wrapper">
-        <div class="canvas-wrapper"></div>
-    </div>
-</div>
-<div id="medical-history" class="container d-n">
-    <div class="title">
-        <i class="icon"></i>
-        <p class="text">病史信息</p>
-    </div>
-    <div class="wrapper">
-        <div class="table-wrapper">
-            <table>
-                <tbody>
-                <tr>
-                    <td colspan="1" align="center">既往史</td>
-                    <td colspan="6" data-type="post"></td>
-                </tr>
-                <tr>
-                    <td colspan="1" align="center">家族史</td>
-                    <td colspan="6" data-type="family"></td>
-                </tr>
-                <tr>
-                    <td colspan="1" align="center">过敏史</td>
-                    <td colspan="6" data-type="allergy"></td>
-                </tr>
-                <tr>
-                    <td colspan="1" align="center">其他史</td>
-                    <td colspan="6" data-type="other"  ></td>
-                </tr>
-                <tr>
-                    <td colspan="1" align="center">用药史</td>
-                    <td colspan="6" data-type="medication"></td>
-                </tr>
-                <tr>
-                    <td colspan="1" align="center">主要问题</td>
-                    <td colspan="6" data-type="main-question"></td>
-                </tr>
-                </tbody>
-            </table>
-        </div>
-    </div>
-</div>
-<div id="medical-records" class="container d-n">
-    <div class="title">
-        <i class="icon"></i>
-        <p class="text">就诊记录</p>
-    </div>
-    <div class="wrapper">
-        <div class="recording-wrapper"></div>
-    </div>
-</div>
-<script src="./lib/jquery-1.9.1.min.js"></script>
-<script src="./lib/echarts.min.js"></script>
-<script src="./js/chronic-info.js"></script>
-</body>
-</html>

+ 0 - 414
static/pages/chronic-info/js/chronic-info.js

@@ -1,414 +0,0 @@
-(function ($) {
-    var HOST = '/icss-web';
-    // var HOST = 'http://192.168.3.12:8080/icss-web';
-    // var HOST = 'http://192.168.2.165:8080/icss-web';
-    // var HOST = 'http://192.168.2.164:8080/icss-web';
-    // var HOST = 'http://192.168.3.12:8080/icss-web';
-
-    var draw_tmpl = {
-        tooltip: {
-            trigger: 'axis'
-        },
-        grid: {
-            left: '3%',
-            right: '4%',
-            bottom: '3%',
-            containLabel: true
-        },
-        yAxis: {
-            type: 'value'
-        },
-        xAxis: {
-            type: 'time',
-            boundaryGap: ['10%', '10%']
-        }
-    };
-
-    //绘制
-    function draw($wrapper, option) {
-        var eChart = echarts.init($wrapper[0]);
-        eChart.setOption(option);
-        $(window).resize(function () {
-            eChart.resize();
-        });
-    }
-
-    function _genOneDrawData(obj) {
-        if (!obj) {
-            return null;
-        }
-        var draw_option = {
-            legend: {
-                data: []
-            },
-            series: []
-        };
-        $.each(obj, function (k, v) {
-            if(!v || !v.length){
-                return;
-            }
-            var _data = v[0],
-                name = _data.itemName,
-                data = [];
-            draw_option.legend.data.push(name);
-            $.each(v, function (i, item) {
-                data.push([parseInt(item.itemTime), item.itemValue]);
-            });
-            data.sort(function (item1, item2) {
-                return new Date(item1[0]) - new Date(item2[0]);
-            });
-            draw_option.series.push({
-                type: 'line',
-                name: name,
-                smooth: true,
-                smoothMonotone: 'x',
-                data: data
-            });
-        });
-        return $.extend(true, draw_option, draw_tmpl);
-    }
-
-    function genDrawData(data) {
-        var return_data = [],
-            draw_data;
-
-        for (var i = 1; i < 4; i++) {
-            draw_data = _genOneDrawData(data[i]);
-            if (draw_data) {
-                return_data.push(draw_data);
-            }
-        }
-        return return_data;
-    }
-
-    function genIndicatorInfo(data) {
-        var $indicator = $('#indicator'),
-            $wrapper = $indicator.find('.canvas-wrapper'),
-            $proteins,$blood_sugar,is_odd,dif=0;
-        var len = data.length;
-        if (len === 0) {
-            return;
-        }
-        $indicator.show();
-        is_odd=len % 2 === 1;
-        if (is_odd) {
-            $wrapper.append('<div class="row"><div class="blood-sugar draw-wrapper"></div></div>');
-        }
-        for (var i = 1; i < len; i++) {
-            $wrapper.append('<div class="row"><div class="protein draw-wrapper"></div><div class="protein draw-wrapper"></div></div>');
-        }
-        i=0;
-        $proteins=$wrapper.find('.protein');
-        if(is_odd){
-            $blood_sugar=$wrapper.find('.blood-sugar');
-            draw($blood_sugar, data[0]);
-            i=1;
-            dif=1;
-        }
-        for (; i < len; i++) {
-            draw($proteins.eq(i-dif), data[i]);
-        }
-    }
-
-    function addInfo(data) {
-        return data ? data : '';
-    }
-
-    function genPersonInfoData(data) {
-        var sex_map = {
-                '1': '男',
-                '2': '女'
-            },
-            birthday = new Date(data.cusBrithday),
-            year = birthday.getFullYear(),
-            month = birthday.getMonth() + 1,
-            day = birthday.getDate(),
-            now = new Date(),
-            now_year = now.getFullYear(),
-            now_month = now.getMonth() + 1,
-            now_day = now.getDate(),
-            age;
-        age = now_year - year;
-        if (now_month > month) {
-            age += 1;
-        } else if (now_month === month) {
-            if (now_day >= day) {
-                age += 1;
-            }
-        }
-
-        return {
-            'name': data.cusName,
-            'sex': sex_map[data.cusSex] ? sex_map[data.cusSex] : '未知',
-            'identity': data.cusIdentity,
-            'phone': data.cusPhone,
-            'birthday': year + '-' + month + '-' + day + '|' + age + '岁',
-            'body': (data.cusHeight ? (data.cusHeight + 'cm|') : '') + (data.cusWeight ? (data.cusWeight + 'kg|') : '') + data.cusBim,
-            'liveAddress': data.cusLiveAddress,
-            'workUnit': data.cusWork
-        }
-    }
-
-    //初始化个人基本信息
-    function initPersonInfo(data) {
-        var $personal = $('#personal'),
-            $tds = $personal.children('.wrapper').find('td');
-        $tds.filter('[data-type=name]').text(addInfo(data.name));
-        $tds.filter('[data-type=sex]').text(addInfo(data.sex));
-        $tds.filter('[data-type=birthday]').text(addInfo(data.birthday));
-        $tds.filter('[data-type=identity]').text(addInfo(data.identity));
-        $tds.filter('[data-type=phone]').text(addInfo(data.phone));
-        $tds.filter('[data-type=body]').text(addInfo(data.body));
-        $tds.filter('[data-type=work-unit]').text(addInfo(data.workUnit));
-        $tds.filter('[data-type=live-address]').text(addInfo(data.liveAddress));
-    }
-
-    function genMedHistoryInfoData(data) {
-        return {
-            'pastInfo': data.pastInfoList,
-            'medicineInfo': data.medicineInfoList,
-            'mainQuestion': data.complicatInfoList
-        }
-    }
-
-    function separate(str) {
-        return str.replace(/;;|;;/,';');
-    }
-    
-    //初始化病史信息
-    function initMedHistoryInfo(data) {
-        var $medical_history = $('#medical-history'),
-            $tds = $medical_history.children('.wrapper').find('td'),
-            arr = [undefined, [], [], [], []],
-            medication = [],
-            main_question = [];
-        if (!data.pastInfo && !data.medicineInfo && !data.mainQuestion) {
-            return;
-        }
-
-        $.each(data.pastInfo, function (i, v) {
-            var date='';
-            if(v.recordDate){
-                var data=new Date(v.recordDate);
-                date+='('+data.getFullYear()+'-'+(data.getMonth()+1)+'-'+data.getDate()+')';
-            }
-            arr[v.pastType].push(date+v.pastSummary);
-        });
-        $.each(data.medicineInfo, function (i, v) {
-            medication.push(v.drugName);
-        });
-        $.each(data.mainQuestion, function (i, v) {
-            main_question.push(v.disName);
-        });
-        $tds.filter('[data-type=post]').text(separate((addInfo(arr[1].join(';')))));
-        $tds.filter('[data-type=family]').text(separate(addInfo(arr[2].join(';'))));
-        $tds.filter('[data-type=allergy]').text(separate(addInfo(arr[3].join(';'))));
-        $tds.filter('[data-type=other]').text(separate(addInfo(arr[4].join(';'))));
-        $tds.filter('[data-type=medication]').text(separate(addInfo(medication.join(';'))));
-        $tds.filter('[data-type=main-question]').text(separate(addInfo(main_question.join(';'))));
-        $medical_history.show();
-    }
-
-    //初始化就诊记录
-    function initMedRec(data) {
-        var $recording = $('<div class="recording-info"><div class="date-title"><p>' + data.time.split(' ')[0] + '</p></div></div>'),
-            $content = $('<div class="content"></div>'),
-            $group, $group_content;
-
-        if (data.hpis.length) {
-            $group = $('<div class="group"></div>');
-            $group.append('<p class="title">' + '【现病史】' + '</p>');
-            var str = '';
-            $.each(data.hpis, function (i, v) {
-                str += v;
-            });
-            $group.append('<p class="content" style="margin-left: ' + (byteLen('【现病史】') * 6) + 'px">' + str.replace(/#/g,'') + '</p>');
-            $content.append($group);
-        }
-
-        if (data.vitals.length) {
-            $group = $('<div class="group"></div>');
-            $group.append('<p class="title">' + '【体征】' + '</p>');
-            str = '';
-            $.each(data.vitals, function (i, v) {
-                str += v;
-            });
-            $group.append('<p class="content" style="margin-left: ' + (byteLen('【体征】') * 6) + 'px">' + str.replace(/#/g,'') + '</p>');
-            $content.append($group);
-        }
-
-        // if (data.lisesStr.length) {
-        //     $group = $('<div class="group assay"></div>');
-        //     $group.append('<p class="title">' + '【化验】' + '</p>');
-        //     $group_content = $('<p class="content" style="margin-left: ' + (byteLen('【化验】') * 6) + 'px"></p>');
-        //     $group.append($group_content);
-        //     $.each(data.lisesStr, function (i, v) {
-        //         if (v.type === '1') {
-        //             $group_content.append('<p>' + v.name + '<span class="space"></span>' + v.val + v.unit + '<span class="space"></span>(正常值:' + Number(v.minVal).toFixed(2) + '--' + Number(v.maxVal).toFixed(2) + ')</p>');
-        //         } else if (v.type === '2') {
-        //             $group_content.append('<p>' + v.name + '<span class="space"></span>' + v.val + '<span class="space"></span></p>');
-        //         }
-        //     });
-        //     $content.append($group);
-        // }
-
-        if (data.lisesStr.length) {
-            $group = $('<div class="group"></div>');
-            $group.append('<p class="title">' + '【化验】' + '</p>');
-            $.each(data.lisesStr, function (i, v) {
-                $group.append('<p class="content" style="margin-left: ' + (byteLen('【化验】') * 6) + 'px">' + v.replace(/#/g,'') + '</p>');
-            });
-            $content.append($group);
-        }
-
-
-        if (data.pacses.length) {
-            $group = $('<div class="group"></div>');
-            $group.append('<p class="title">' + '【辅检】' + '</p>');
-            $group_content = $('<p class="content" style="margin-left: ' + (byteLen('【辅检】') * 6) + 'px"></p>');
-            $group.append($group_content);
-            $.each(data.pacses, function (i, v) {
-                $group_content.append('<p>' + v + '</p>');
-            });
-            $content.append($group);
-        }
-
-        $recording.append($content);
-        if (data.intervenes) {
-            var arr = data.intervenes.split('#');
-            arr.pop();
-            $group = $('<div class="group"></div>');
-            $group.append('<p class="title">' + '【干预建议】' + '</p>');
-            $group_content = $('<p class="content" style="margin-left: ' + (byteLen('【干预建议】') * 6) + 'px"></p>');
-            $group.append($group_content);
-            $.each(arr, function (i, v) {
-                var one_arr = v.split(':'),
-                    title_w = byteLen(one_arr[0]) * 7,
-                    $title = $('<p data-re="y" style="position: absolute;left: 72px;">' + one_arr[0] + ':</p>'),
-                    str = '';
-                $group_content.append($title);
-                if (one_arr.length > 1) {
-                    var son_arr = one_arr[1].split('&&');
-                    for (var i = 0, len = son_arr.length; i < len; i++) {
-                        var _str = son_arr[i];
-                        str += _str + '<br/>';
-                    }
-                }
-                $group_content.append('<p style="padding-left: ' + title_w + 'px">' + str + '</p>');
-            });
-            $content.append($group);
-        }
-        return $recording;
-
-
-        function byteLen(target) {
-            var byteLength = target.length, i = 0;
-            for (; i < byteLength; i++) {
-                if (target.charCodeAt(i) > 255) {
-                    byteLength++;
-                }
-            }
-            return byteLength;
-        }
-    }
-
-
-    //创建就诊信息
-    function genMedInfo(data) {
-        var $medical_records = $('#medical-records'),
-            $recordings = $(),
-            $wrapper = $medical_records.find('.recording-wrapper');
-        if (data.length === 0) {
-            return;
-        }
-        $.each(data, function (i, v) {
-            $recordings = $recordings.add(initMedRec(v));
-        });
-
-        $wrapper.append($recordings);
-        $medical_records.show();
-        $recordings.find('p[data-re=y]').each(function () {
-            var $p = $(this);
-            $p.css('top', $p.next().position().top);
-        });
-    }
-
-    function initMedRec2(details, time) {
-        if (!details.length) {
-            return null;
-        }
-        var arr = [[], [], [], [], [], [], [], [], [], []];
-        var title_arr = ['【主诉】', '【现病史】', '【既往史】', '【其他史】', '【体征】', '【化验】', '【辅检】', '【诊断】', '【治疗】', '【干预建议】']
-        var date = new Date(time);
-        var $recording = $('<div class="recording-info"><div class="date-title"><p>' + (date.getFullYear() + '/' + (date.getMonth() + 1) + '/' + date.getDate()) + '</p></div></div>'),
-            $content = $('<div class="content"></div>');
-        $.each(details, function (i, v) {
-            arr[v.type].push(v.itemDescribe);
-        });
-        $.each(arr, function (i, v) {
-            if (!v.length) {
-                return;
-            }
-            $content.append('<div class="group"><p class="title">' + title_arr[i] + '</p><p class="content">' + v.join(';') + '</p></div>')
-        });
-        $recording.append($content);
-        return $recording;
-    }
-
-    function genMedInfo2(data) {
-        var $medical_records = $('#medical-records'),
-            $recordings = $(),
-            $wrapper = $medical_records.find('.recording-wrapper');
-        if (data.length === 0) {
-            return;
-        }
-        $.each(data, function (i, v) {
-            $recordings = $recordings.add(initMedRec2(v.details, v.clinicTime));
-        });
-        $wrapper.append($recordings);
-        $medical_records.show();
-    }
-
-    //初始化整个页面
-    function init() {
-        var url_obj = (function () {
-            var r = window.location.search.substr(1).split("&"),
-                obj = {};
-            $.each(r, function (i, v) {
-                if (v) {
-                    var arr = v.split("=");
-                    obj[arr[0]] = arr[1];
-                }
-            });
-            return obj;
-        })();
-
-        $.getJSON(HOST + '/ch/customer/get_customer_info_by_patient_id', {
-            patientId: url_obj.patientId,
-            hospitalId: url_obj.hospitalId
-        }, function (res) {
-            var data = res.data;
-            initPersonInfo(genPersonInfoData(data));
-            initMedHistoryInfo(genMedHistoryInfoData(data));
-            genIndicatorInfo(genDrawData(data.map));
-        });
-
-
-        $.getJSON(HOST + '/chronic_controller/get_record_info', {
-            patId: url_obj.patientId,
-            hospitalId: url_obj.hospitalId
-        }, function (res) {
-            var data = res.data;
-            if (data.recodeType === 1) {
-                genMedInfo(data.recodeList);
-            } else if (data.recodeType === 2) {
-                genMedInfo2(data.recodeList);
-            }
-
-        });
-    }
-
-    init();
-
-
-})(jQuery);

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
static/pages/chronic-info/lib/echarts.min.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 9597
static/pages/chronic-info/lib/jquery-1.9.1.min.js


+ 0 - 221
static/pages/diag_push.html

@@ -1,221 +0,0 @@
-<!DOCTYPE html>
-<!–[if IE 8]>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
-<![endif]–>
-<html>
-<head>
-    <meta charset="utf-8">
-    <meta name="renderer" content="ie-stand">
-    <meta name="renderer" content="webkit">
-    <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
-    <!–[if IE 8]>
-    <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8">
-    <![endif]–>
-    <meta http-equiv="Expires" content="0">
-    <meta http-equiv="Pragma" content="no-cache">
-    <meta http-equiv="Cache-control" content="no-cache">
-    <meta http-equiv="Cache" content="no-cache">
-
-    <title>诊断推送</title>
-    <style>
-        div,p,a,b,i,label,td,tr{
-            margin: 0;
-            padding: 0;
-        }
-        .container{
-            /*width: 690px;
-            max-height:180px;
-            border:1px #828790 solid;*/
-            font-size: 13px;
-            font-family: 'Microsoft YaHei', arial, tahoma, sans-serif;
-        }
-        tr{
-            line-height: 30px;
-        }
-        td{
-            vertical-align: top;
-        }
-        .container label{
-            display: inline-block;
-            width: 80px;
-            margin-left: 5px;
-        }
-        a{
-            color: blue;
-            cursor: default;
-            cursor: pointer;
-            text-decoration: underline;
-        }
-        a.info{
-            margin-right: 10px;
-            display: inline-block;
-            width:14px;
-            height: 14px;
-            line-height: 14px;
-            background: #66afe9;
-            border-radius: 50%;
-            color: #fff;
-            text-align: center;
-            text-decoration: none;
-            margin-left: 3px;
-        }
-        .hide{
-            display: none!important;
-        }
-        a.more{
-            display: inline-block;
-            height: 15px;
-            line-height: 10px;
-            width: 16px;
-            text-align: center;
-            background: #66afe9;
-            color: #fff;
-            text-decoration: none;
-            border-radius: 3px;
-            cursor: pointer;
-        }
-        .clearfix{
-            zoom: 1;
-        }
-        .clearfix:after{
-            content: '';
-            display: block;
-            clear: both;
-            overflow: hidden;
-            visibility: hidden;
-        }
-        .vertical,.horizontal{
-             display: none;
-         }
-        .item-title{
-            font-weight: bold;
-            font-size: 14px;
-            line-height: 30px;
-            border-bottom: 1px #ccc solid;
-        }
-        .item-content{
-            font-size: 13px;
-            line-height: 30px;
-        }
-        .little{
-            float: left;
-        }
-        .info-item .title,.info-item .content{
-            float: left;
-        }
-        .box7,.box8,.box9{
-            display: none;
-        }
-        .item-content .inner-item{
-            display: inline-block;
-           white-space:nowrap;
-        }
-    </style>
-</head>
-<body>
-<table class="container horizontal" cellspacing="0">
-    <tbody>
-    <tr class="item-box box7">
-        <!--<td rowspan="5">
-            <div class="clearfix">
-                <span class="little" style="margin-top: 17px;">智<br/>能<br/>推<br/>送</span>
-                <span class="little">︵<br/>仅<br/>供<br/>参<br/>考<br/>︶</span>
-            </div>
-        </td>-->
-        <td>
-            <label>>初步诊断:</label>
-        </td>
-        <td class="item-content">
-        </td>
-    </tr>
-    <tr class="item-box box8">
-        <td>
-            <label>>疑似诊断:</label>
-        </td>
-        <td>
-            <div class="item-content">
-            </div>
-        </td>
-    </tr>
-    <tr class="item-box box9">
-        <td>
-            <label>>警惕:</label>
-        </td>
-        <td>
-            <div class="item-content">
-            </div>
-        </td>
-    </tr>
-    <tr class="item-box box5">
-        <td>
-            <label>>建议化验:</label>
-        </td>
-        <td>
-            <div class="item-content">
-            </div>
-        </td>
-    </tr>
-    <tr class="item-box box6">
-        <td>
-            <label>>建议辅检:</label>
-        </td>
-        <td>
-            <div class="item-content">
-            </div>
-        </td>
-    </tr>
-    <tr class="item-box box">
-        <td style="vertical-align: text-bottom;">
-            <label>>治疗建议:</label>
-        </td>
-        <td>
-            <div class="item-content box">
-                无
-            </div>
-        </td>
-    </tr>
-    <tr class="item-box box0">
-        <td style="vertical-align: text-bottom;">
-            <label>>提示信息:</label>
-        </td>
-        <td>
-            <div class="item-content box0">
-            </div>
-        </td>
-    </tr>
-    </tbody>
-</table>
-<div class="container vertical">
-    <div class="title">智能推送(仅供参考)</div>
-    <div class="item-box box7">
-        <div class="item-title">初步诊断</div>
-        <div class="item-content"></div>
-    </div>
-    <div class="item-box box8">
-        <div class="item-title">疑似诊断</div>
-        <div class="item-content"></div>
-    </div>
-    <div class="item-box box9">
-        <div class="item-title">警惕</div>
-        <div class="item-content"></div>
-    </div>
-    <div class="item-box box5">
-        <div class="item-title">建议化验</div>
-        <div class="item-content"></div>
-    </div>
-    <div class="item-box box6">
-        <div class="item-title">建议辅检</div>
-        <div class="item-content"></div>
-    </div>
-    <div class="item-box box">
-        <div class="item-title">治疗建议</div>
-        <div class="item-content">无</div>
-    </div>
-    <div class="item-box box0">
-        <div class="item-title">提示信息</div>
-        <div class="item-content"></div>
-    </div>
-</div>
-<script src="./hisLib/jquery-1.3.1.js"></script>
-<script  src="./hisLib/diag_push.js"></script>
-</body>

+ 0 - 65
static/pages/hisLib/case_info.js

@@ -1,65 +0,0 @@
-(function($){
-    var urls = {
-        url:{
-            'host':"/icss-web",
-            'start_drug': '/rule_controller/start_drug_title',
-            'get_diagnose_extend':'/kl/diagnose/get_diagnose_extend',
-            'get_by_itemidAndType': '/kl/introduce/get_by_itemidAndType'
-        }
-    };
-    getCaseInfo();
-    function getCaseInfo(){
-        var host = urls.url.host;
-        var url = host + urls.url.get_diagnose_extend;
-        var txtUrl = host + urls.url.get_by_itemidAndType;
-        var diseaseId = parseUrl().diseaseId;
-        var moreUrl = "/static/pages/information.html?type=7&diseaseId=" + diseaseId;
-        $("#more").attr("href",moreUrl);
-        //获取诊断依据
-        $.get(url,{diseaseId:diseaseId},function(data){
-            if(data.status=="OK"){
-                var dom = jointData(data.data);
-                $(".information").html('<p class="line"></p>'+dom);
-            }
-        });
-        //获取摘要
-        $.get(txtUrl,{type:7,itemId:diseaseId},function(data){
-            if(data.status=="OK"){
-                $("h1").text(data.data.shortName);
-                fillContext(data.data);
-            }
-        });
-    }
-    function parseUrl(){
-        var r = window.location.search.substr(1).split("&"),
-            obj = {};
-        $.each(r, function (i, v) {
-            if (v) {
-                var arr = v.split("=");
-                obj[arr[0]] = encodeURI(arr[1]);
-            }
-        });
-        return obj;
-    }
-    function jointData(data) {
-        var str = "",extend="",prefix,name,suffix;
-        for(var i=0;i<data.length;i++){
-            str += "<p>"+(i+1)+".";
-            extend = data[i].diagnoseExtendWrapperList;
-            for(var j=0;j<extend.length;j++){
-                suffix = extend[j].suffix||'';
-                name = extend[j].name||'';
-                prefix = extend[j].prefix||'';
-                str +=  prefix +  name + suffix;
-            }
-            str += "</p>";
-        }
-        return str;
-    }
-    function fillContext(data){
-        var content = data.introduceDetailList[0];
-        if(content){
-            $(".context .content").html(content.description);
-        }
-    }
-})(jQuery);

+ 0 - 159
static/pages/hisLib/diag_push.js

@@ -1,159 +0,0 @@
-(function ($) {
-  var urls = {
-    //His推送接口
-    'get_push':'http://192.168.2.236/api/icss/emr/pushEMR',
-    'get_info':'http://192.168.2.236/api/icss/emr/getIntroduceByEMR'
-  };
-  $.support.cors = true;
-  var config = {
-    width:'560px',      //推送内容显示的宽度
-    num:'11',         //每行显示的最大个数
-    mode:'horizontal',  //布局模式水平horizontal,垂直vertical,
-    models:[5,6,7]       //需要显示的推送模块,主诉-诊断1-7
-  };
-  var urlSearch = parseUrl();
-  handleConfig();
-  //getPushData();
-
-  function parseUrl() {
-    var r = window.location.search.substr(1).split("&"),
-      obj = {};
-    $.each(r, function (i, v) {
-      if (v) {
-        var arr = v.split("=");
-        obj[arr[0]] = arr[1]?decodeURI(arr[1]):'';
-      }
-    });
-    return obj;
-  };
-
-  function handleConfig(){
-    $(".container").css({'width':'560px'});
-    getPushData();
-    $('.'+config.mode).show();
-
-  }
-  function getPushData(){
-    var url = urls.get_push;
-    var myParam = {
-      symptom: urlSearch.symptomJson||"",
-      past: urlSearch.pastJson||"",
-      other: urlSearch.otherJson||"",
-      vital: urlSearch.vitalsJson||"",
-      lis: JSON.parse(urlSearch.labsJson||null),
-      pacs: urlSearch.pacsJson||"",
-      diag: urlSearch.disJson||"",
-      featureType: config.models.join(","),
-      hosCode:'A001',
-      age:urlSearch.age,
-      sex:urlSearch.sexType
-    };
-
-    $.ajax({
-      url: url,
-      type:'post',
-      dataType: "json",
-      cache:false,
-      contentType:"application/json",
-      data:JSON.stringify(myParam),
-      success:function(response){
-        var data = response.data;
-        if(response.code=='0'){
-          fillPushData(data);
-        }
-      },
-      error:function(error){
-        console.log("error:"+error);
-      },
-      complete:function(){
-        console.log("complete")
-      }
-    });
-  }
-
-  function getTreatInfo(type,name,detailName){
-    var url = urls.get_info;
-    var myParam = {
-      icdCode:urlSearch.icd,
-      type:type,
-      name:name,
-      detailName:detailName,
-      hosCode:'A001',
-      age:urlSearch.age,
-      sex:urlSearch.sexType
-    };
-
-    $.ajax({
-      url: url,
-      type:'post',
-      dataType: "json",
-      cache:false,
-      contentType:"application/json",
-      data:JSON.stringify(myParam),
-      success:function(response){
-        var data = response.data;
-        if(response.code=='0'){
-          fillInfomation(data);
-        }
-      },
-      error:function(error){
-        console.log("error:"+error);
-      },
-      complete:function(){
-        console.log("complete")
-      }
-    });
-  }
-
-  //填入提示信息
-  function fillInfomation(data){
-    var dom='';
-    for(var i=0;i<data.length;i++){
-      dom+='<div class="info-item clearfix"><span class="title">'+data[i].title+':</span><p class="content">'+data[i].text+'</p></div>';
-    }
-    $(".box0 .item-content").html(dom);
-  }
-
-  //填入推送信息
-  function fillPushData(data){
-    if(!data||JSON.stringify(data)=='{}'){
-      console.warn("获取推送数据为空!");
-      return ;
-    }
-    var key='',modeClass='.'+config.mode;
-    mapItem(modeClass+" .box5", data['lisList'],5);   //化验
-    mapItem(modeClass+" .box6", data['pacsList'],6);   //辅捡
-    data['dis']['可能诊断']&&data['dis']['可能诊断'].length>0&&mapItem(modeClass+" .box7", data['dis']['可能诊断'],7);   //初步诊断
-    data['dis']['确诊']&&data['dis']['确诊'].length>0&&mapItem(modeClass+" .box8", data['dis']['确诊'],7);   //疑似诊断
-    data['dis']['警惕']&&data['dis']['警惕'].length>0&&mapItem(modeClass+" .box9", data['dis']['警惕'],7);   //警惕
-
-    $("a.info").click(function(e){
-      getTreatInfo($(e.target).attr('type'),$(e.target).attr('name'),$(e.target).attr('detailName'))
-    });
-
-    //$(modeClass+" .box .item-content").html(str);         //治疗建议
-  }
-  //遍历数据
-  function mapItem(dom,item,type){
-    var itemDom = '';
-    if(item){
-      for(var i=0;i<item.length;i++){
-        if(i>config.num-1){
-          itemDom += '<p class="inner-item"><a href="##" class="hide">'+(item[i].name||item[i].uniqueName)+'</a><a class="info hide" target="_blank name="'+item[i].name+'" type='+type+' detail="'+item[i].detailName+'>i</a></p>';
-        }else{
-          itemDom += '<p class="inner-item"><a href="##">'+(item[i].name||item[i].uniqueName)+'</a><a class="info" target="_blank" name='+item[i].name+' type="'+type+'" detail="'+item[i].detailName+'">i</a></p>';
-        }
-      }
-    }
-    $(dom+" .item-content").html(itemDom||"无");
-    $(dom).show();
-    var hide = $(dom).find(".hide")[0];
-    if(hide){
-      $("<a class='more'>...</a>").insertBefore(hide);
-      $(".more").click(function(e){
-        $(e.target).siblings(".hide").removeClass("hide");
-        $(e.target).hide();
-      });
-    }
-  }
-})(jQuery);

binární
static/pages/hisLib/img/bg.jpg


binární
static/pages/hisLib/img/hospital.png


binární
static/pages/hisLib/img/login.jpg


binární
static/pages/hisLib/img/logo.png


binární
static/pages/hisLib/img/password.png


binární
static/pages/hisLib/img/user.png


+ 0 - 118
static/pages/hisLib/info_push.js

@@ -1,118 +0,0 @@
-(function ($) {
-  var urls = {
-    'host':"/icss-web",
-    //His推送接口
-    'get_push':'http://192.168.2.234:8080/web/doc/algorithm/neural'
-  };
-  $.support.cors = true;
-  var config = {
-    width:'560px',      //推送内容显示的宽度
-    num:'11',         //每行显示的最大个数
-    mode:'horizontal'  //布局模式水平horizontal,垂直vertical
-  };
-  var urlSearch = parseUrl();
-  handleConfig();
-  getPushData();
-
-  function parseUrl() {
-    var r = window.location.search.substr(1).split("&"),
-      obj = {};
-    $.each(r, function (i, v) {
-      if (v) {
-        var arr = v.split("=");
-        obj[arr[0]] = arr[1]?decodeURI(arr[1]):'';
-      }
-    });
-    return obj;
-  };
-
-  function handleConfig(){
-    $("tr td:last-child,.item-box").css({width:config.width});
-    $('.'+config.mode).show();
-  }
-  function getPushData(){
-    var url = urls.get_push;
-    var myParam = {
-      symptom: urlSearch.symptomJson||"",
-      past: urlSearch.pastJson||"",
-      other: urlSearch.otherJson||"",
-      vital: urlSearch.vitalsJson||"",
-      lis: urlSearch.labsJson||"",
-      pacs: urlSearch.pacsJson||"",
-      diag: urlSearch.disJson||"",
-      featureType: "1,4,7"
-    };
-
-    $.ajax({
-      url: url,
-      type:'post',
-      dataType: "json",
-      contentType:"application/json",
-      data:JSON.stringify(myParam),
-      success:function(response){
-        var data = response.data;
-        if(response.ret=='0'){
-          fillPushData(data);
-        }
-      },
-      error:function(error){
-        console.log("error:"+error);
-      },
-      complete:function(){
-        console.log("complete")
-      }
-    });
-  }
-
-  //填入推送信息
-  function fillPushData(data){
-    if(!data||JSON.stringify(data)=='{}'){
-      console.warn("获取推送数据为空!");
-      return ;
-    }
-    var past = [];
-    /*for(var p = 0;p <data.past.length; p++){
-        past.push(data.past[p].name);
-    }*/     //大数据推送没有现病史
-    var body = [];
-    for(var n = 0;n <data.vitals.length; n++){
-      body.push(data.vitals[n].featureName);
-    }
-    var symptom = [];
-    for(var x = 0;x <data.symptom.length; x++){
-      symptom.push(data.symptom[x].featureName);
-    }
-    var dis = data.dis;
-    var infoUrl,str='';
-    var modeClass = '.'+config.mode;
-
-    for(var i=0;i<dis.length;i++){
-      infoUrl="./case_info.html?diseaseId="+dis[i].id;
-      str += '<a>'+dis[i].featureName+'</a>';
-    }
-    mapItem(modeClass+" .main-suit",symptom);
-    mapItem(modeClass+" .past-item", past);
-    mapItem(modeClass+" .body-item", body);
-    $(modeClass+" .treatment").html(str);
-  }
-  //遍历数据
-  function mapItem(dom,item){
-    var itemDom = '';
-    for(var i=0;i<item.length;i++){
-      if(i>config.num-1){
-        itemDom += '<a href="##" class="hide">'+item[i]+'</a>';
-      }else{
-        itemDom += '<a href="##">'+item[i]+'</a>';
-      }
-    }
-    $(dom).html(itemDom||"无");
-    var hide = $(dom).find(".hide")[0];
-    if(hide){
-      $("<a class='more'>...</a>").insertBefore(hide);
-      $(".more").click(function(e){
-        $(e.target).siblings(".hide").removeClass("hide");
-        $(e.target).hide();
-      })
-    }
-  }
-})(jQuery);

+ 0 - 115
static/pages/hisLib/infomation.js

@@ -1,115 +0,0 @@
-import { imageUrlPrefix } from '@utils/config.js';
-(function($){
-    getInfomation();
-    function getInfomation(){
-        // var infoUrl ="http://" + window.location.host+'/icss-web/kl/introduce/get_by_itemidAndType';
-        // var infoUrl ="http://" + window.location.host+'/api/icss/introduceInfo/getByQuestionId';
-        var infoUrl ='/api/icss/introduceInfo/getByQuestionId'
-        // var imageUrlPrefix = 'http://192.168.2.241:82'
-        var urlParam = parseUrlParams();
-        console.log(urlParam)
-        var param = {
-            "type": urlParam.type,
-            "questionId": urlParam.questionId,
-            position:2
-        };
-        $.ajax({
-            type: 'POST',
-            url: infoUrl,
-            data: JSON.stringify(param),
-            headers: {
-                // 'Accept': 'application/json, text/plain, */*',
-                'Content-Type':'application/json; charset=utf-8'
-            },
-            success: function(res) {
-                   console.log(res) 
-                   var str='',anchors='',item='';
-                if(!res.data){
-                    $("h1").html("暂时没有数据");
-                    return;
-                }
-                var list  = res.data.introduceDetailList;
-                $("h1").html(res.data.tagName);
-                //list.map((item,i) =>{
-                for(var i=0;i<list.length;i++) {
-                    item = list[i];
-                    item.content = item.content.replace(/{imageUrlPrefix}/g, imageUrlPrefix)
-                    anchors = '<li><i></i><a href="#anchor' + i +
-                        '">' + item.title + '</a></li><li class="anchor-line"></li>';
-                    str = '<div class="title"><h2 id="anchor' + i +
-                        '">' + item.title +
-                        '</h2><div class="line"></div></div>' +
-                        '<div>' + item.content + '<div>';
-                    $(".infos").append(str);
-                    $(".anchors ul").append(anchors);
-                    //});
-                }
-                addLinkClickEvent();
-                adjustHeight();
-
-            }
-        })
-
-        // $.post(infoUrl,param,function(res){
-        //     console.log('resssss', res)
-        //     if(res.ret == 0){
-        //         var str='',anchors='',item='';
-        //         if(!res.data){
-        //             $("h1").html("暂时没有数据");
-        //             return;
-        //         }
-        //         var list  = res.data.introduceDetailList;
-        //         $("h1").html(res.data.shortName);
-        //         //list.map((item,i) =>{
-        //         for(var i=0;i<list.length;i++) {
-        //             item = list[i];
-        //             anchors = '<li><i></i><a href="#anchor' + i +
-        //                 '">' + item.title + '</a></li><li class="anchor-line"></li>';
-        //             str = '<div class="title"><h2 id="anchor' + i +
-        //                 '">' + item.title +
-        //                 '</h2><div class="line"></div></div>' +
-        //                 '<div>' + item.description + '<div>';
-        //             $(".infos").append(str);
-        //             $(".anchors ul").append(anchors);
-        //             //});
-        //         }
-        //         addLinkClickEvent();
-        //         adjustHeight();
-        //     }else{
-        //         $(".container").html(res.msg);
-        //     }
-        // }
-        // );
-
-    }
-
-    function parseUrlParams(){
-        var url = window.location.search;
-        var params = url.substring(1).split("&");
-        var tmp = '',obj = {},it={};
-        //params.map((it) =>{
-        for(var i=0;i<params.length;i++) {
-            it = params[i];
-            tmp = it.split("=");
-            if (tmp[0] && tmp[1]) {
-                obj[tmp[0]] = tmp[1];
-            }
-        }
-        //});
-        return obj;
-    }
-
-    function addLinkClickEvent(){
-        $("li:first").addClass("active");
-        $("li>a").on("click",function(){
-            $(".active").removeClass('active');
-            $(this).parent().addClass("active");
-        });
-    }
-
-    function adjustHeight(){
-        var ht = window.innerHeight;
-        $(".content").height(ht-145+"px");
-    }
-
-})(jQuery);

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 4241
static/pages/hisLib/jquery-1.3.1.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 9597
static/pages/hisLib/jquery-1.9.1.min.js


+ 0 - 157
static/pages/hisLib/login.css

@@ -1,157 +0,0 @@
-*,html,body{
-    padding: 0;
-    margin: 0;
-    width: 100%;
-    height: 100%;
-}
-
-body{
-    background-image: url("img/bg.jpg");
-    background-repeat: no-repeat;
-    background-size: 100% 100%;
-    position: relative;
-    font-family: 'Microsoft YaHei',arial,tahoma,sans-serif;
-}
-
-.login-center{
-    position: relative;
-    top: 42%;
-    left: 50%;
-    margin-top: -200px;
-    margin-left: -200px;
-    width: 360px;
-    height:400px ;
-}
-
-.login{
-    height: 400px;
-    background-color: #fff;
-    background-color: rgba(255,255,255,0.5);
-    filter:Alpha(opacity=50);
-    border-radius:5px;
-    margin-top: 20px;
-    position: relative;
-}
-
-.logo{
-    position: relative;
-    width: 100%;
-    height: 50px;
-    background-image: url("img/logo.png");
-    background-repeat: no-repeat;
-    background-position: center;
-    background-size: 240px 48px;
-}
-
-.font-center{
-    text-align: center;
-    font-size: 25px;
-    font-weight: bold;
-    padding-top: 20px;
-    height: 25px;
-}
-
-.username{
-    position: relative;
-    top: 30px;
-    text-align: center;
-    height: 54px;
-}
-
-.password{
-    position: relative;
-    top: 60px;
-    text-align: center;
-    height: 54px;
-}
-
-.unitId{
-    position: relative;
-    top: 90px;
-    text-align: center;
-    height: 54px;
-}
-
-input{
-    border: none;
-    height: 50px;
-    width: 200px;
-    border: 2px solid #000;
-    border-radius: 8px;
-    font-size: 25px;
-    padding-left: 50px;
-    line-height: 50px;
-}
-
-select{
-    border: none;
-    height: 50px;
-    width: 250px;
-    border: 2px solid #000;
-    border-radius: 8px;
-    font-size: 25px;
-    padding-left: 50px;
-    line-height: 50px;
-}
-
-input:focus{
-    border-color: #66afe9;
-    outline: 0;
-    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-    box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);
-}
-
-.confirm{
-    height: 50px;
-    width: 100%;
-    position: relative;
-    opacity: 1;
-    top:125px;
-    text-align: center;
-}
-
-.confirm button{
-    box-shadow: none;
-    opacity: 2;
-    width: 200px;
-    font-size: 20px;
-    line-height: 45px;
-    background-color: #337ab7;
-    color: #fff;
-    border-radius: 6px;
-    border:1px solid #2e6da4;
-    cursor: pointer;
-    user-select: none;
-    -webkit-user-select: none;
-
-}
-
-.confirm button:focus{
-    outline: thin dotted;
-    outline: 5px auto -webkit-focus-ring-color;
-    outline-offset: -2px;
-    text-decoration: none;
-}
-
-.confirm button:active{
-    background-image: none;
-    outline: 0;
-    box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);
-}
-
-.confirm button:hover{
-    color: #fff;
-    background-color: #286090;
-    border-color: #204d74;
-}
-
-.img{
-    width: 30px;
-    height: 30px;
-    position: absolute;
-    top: 13px;
-    left: 67px;
-    user-select: none;
-    -webkit-user-select: none;
-}

+ 0 - 175
static/pages/hisLib/param.js

@@ -1,175 +0,0 @@
-var Param = {
-
-	host_url : "/icss-web",
-
-    /**
-	 * 应用名
-	 */
-	ctx : "/icss-web",
-	/**
-	 * 页面缓存对象
-	 */
-	storage : window.localStorage,
-	/**
-	 * uri所有参数Json方式存储
-	 */
-	uriParams : {},
-	/**
-	 * 缺省读取问诊信息请求URI
-	 */
-	questionInitActionUri : "",
-	/**
-	 * 缺省读取问诊信息
-	 */
-	methodType : "new",
-	/**
-	 * 用户相关信息
-	 */
-	user : {
-		loginId: "",
-		name: "",
-		appId: null,
-		resource: "pc",
-		token:""
-	},
-	/**
-	 * 列表属性设置
-	 */
-	lang : {
-		"sProcessing": "处理中...",
-		"sLengthMenu": "每页 _MENU_ 项",
-		"sZeroRecords": "没有匹配结果",
-		"sInfo": "当前显示第 _START_ 至 _END_ 项,共 _TOTAL_ 项。",
-		"sInfoEmpty": "当前显示第 0 至 0 项,共 0 项",
-		"sInfoFiltered": "(由 _MAX_ 项结果过滤)",
-		"sInfoPostFix": "",
-		"sSearch": "搜索:",
-		"sUrl": "",
-		"sEmptyTable": "表中数据为空",
-		"sLoadingRecords": "载入中...",
-		"sInfoThousands": ",",
-		"oPaginate": {
-			"sFirst": "首页",
-			"sPrevious": "上页",
-			"sNext": "下页",
-			"sLast": "末页",
-			"sJump": "跳转"
-		},
-		"oAria": {
-			"sSortAscending": ": 以升序排列此列",
-			"sSortDescending": ": 以降序排列此列"
-		}
-	},
-		  
-	/**
-	 * 初始化请求uri参数
-	 */
-	initUriParam : function (uri) {
-		Param.uriParams = {};
-		Param.uriParamSplit(uri);
-	},
-
-	/**
-	 * 初始化页面参数
-	 */
-	initPageParam : function() {
-		var uri = window.parent.location.search;
-		Param.indexUriParamSplit(uri);
-	},
-/**
-	 * 表单ajax提交参数定义
-	 */
-	formPost : {
-		isToken: true,
-		formName: '.form-horizontal',
-		url: '',
-		callback: {}
-	},
-	/**
-	 * 一般ajax提交参数定义
-	 */
-	normalPost : {
-		isToken: true,
-		p: {},
-		url: '',
-		callback: {}
-	},
-	
-	/**
-	 * uri参数转Json对象
-	 */
-	indexUriParamSplit : function (uri) {
-		if (uri.indexOf("?") == -1) return;
-		uri = uri.substr(uri.indexOf("?") + 1);
-		var uriParamArray = uri.split("&");
-
-		var p = {};
-		var p_json = {};
-		$.each(uriParamArray, function(i, item) {
-			p = item.split("=");
-			p_json[p[0]]=p[1];
-			Param.uriParams = $.extend(Param.uriParams, p_json);
-		});
-	},
-	
-	/**
-	 * uri参数转Json对象
-	 */
-	uriParamSplit : function (uri) {
-		if (uri.indexOf("?") == -1) return;
-		uri = uri.substr(uri.indexOf("?") + 1);
-		var uriParamArray = uri.split("&");
-		var p = {};
-		var p_json = {};
-		$.each(uriParamArray, function(i, item) {
-			p = item.split("=");
-			p_json[p[0]]=p[1];
-			var contentId = getContentId();
-			if (contentId == "") {
-				Param.uriParams = $.extend(Param.uriParams, p_json)
-			} else{
-				!Param.uriParams[contentId] && (Param.uriParams[contentId]={});
-				Param.uriParams[contentId] = $.extend(Param.uriParams[contentId], p_json);
-			}
-			
-		});
-	},
-	
-	clear : function(id){
-		if(Param.uriParams[id]){
-      delete Param.uriParams[id];
-		}
-	},
-	
-	copy : function(param,id){
-		Param.uriParams[id] = param;
-	},
-	
-	getParam : function(paramName,contentId){
-		!contentId&&(contentId = getContentId());
-		if (Param.uriParams[contentId] && paramName in Param.uriParams[contentId]){
-			return Param.uriParams[contentId][paramName];
-		}else{
-			return Param.uriParams[paramName];
-		}
-	},
-	
-	setParam : function(param,contentId){
-		!contentId&&(contentId = getContentId());
-		!Param.uriParams[contentId] && (Param.uriParams[contentId]={});
-		$.extend(Param.uriParams[contentId],param);
-	},
-	
-	/**
-	 * 登录后页面保存返回信息
-	 * @param data
-	 */
-	initPageUser : function (data) {
-		Param.user.loginId = data.loginId;
-		Param.user.name = data.name;
-		Param.user.appId = data.appId;
-		Param.user.resource = data.resource;
-		Param.user.token = data.token;
-        Param.user.loginUnitId = data.loginUnitId;
-	},
-};

+ 0 - 0
static/pages/info_push.html


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů