Browse Source

Merge remote-tracking branch 'origin/innterfaceUpdate' into testedMerge

zhouna 5 years ago
parent
commit
28ba77aa38
35 changed files with 313 additions and 484 deletions
  1. 4 2
      src/common/components/EditableSpan/index.jsx
  2. 6 4
      src/common/components/Loading/index.jsx
  3. 15 1
      src/common/components/Loading/index.less
  4. BIN
      src/common/images/icon-current.png
  5. BIN
      src/common/images/wn.png
  6. 1 1
      src/components/AssessResult/ChooseItem/index.jsx
  7. 14 278
      src/components/AssessResult/ScaleItem/index.jsx
  8. 3 34
      src/components/AssessResult/index.jsx
  9. 7 9
      src/components/AssessResult/index.less
  10. 1 0
      src/components/CheckBody/index.less
  11. 11 11
      src/components/ChronicInfo/index.jsx
  12. 1 2
      src/components/CurrentIll/index.jsx
  13. 4 2
      src/components/InfoTitle/index.jsx
  14. 4 2
      src/components/MainSuit/index.jsx
  15. 14 11
      src/components/NumberDrop/index.jsx
  16. 1 1
      src/components/OtherHistory/index.jsx
  17. 1 1
      src/components/PreviewBody/ItemPart/index.jsx
  18. 14 5
      src/components/PushItems/DetailsModal/index.jsx
  19. 57 17
      src/components/PushItems/DetailsModal/index.less
  20. 2 2
      src/components/Treat/GeneralTreat/index.jsx
  21. 24 13
      src/components/TreatDesc/DrugInfo/index.jsx
  22. 67 20
      src/components/TreatDesc/DrugInfo/index.less
  23. 0 40
      src/containers/AssessResult.js
  24. 1 1
      src/containers/DiagnosticList.js
  25. 1 2
      src/containers/MedicalInfoContainer.js
  26. 1 2
      src/containers/ScaleSearchContainer.js
  27. 6 2
      src/store/actions/checkBody.js
  28. 2 1
      src/store/actions/otherHistory.js
  29. 20 2
      src/store/async-actions/patInfo.js
  30. 5 4
      src/store/async-actions/preIcss.js
  31. 5 5
      src/store/async-actions/pushMessage.js
  32. 2 0
      src/store/reducers/copyRight.js
  33. 1 1
      src/store/reducers/pushMessage.js
  34. 2 2
      src/utils/config.js
  35. 16 6
      src/utils/tools.js

+ 4 - 2
src/common/components/EditableSpan/index.jsx

@@ -54,7 +54,7 @@ class EditableSpan extends Component{
       });
     })
     
-    const {mainSaveText,full,setFocusIndex,i,boxMark,value}= this.props;
+    const {mainSaveText,full,setFocusIndex,i,boxMark,value,handleClear}= this.props;
     let mainText = filterDataArr(mainSaveText);//主诉字数
     if(+boxMark==3||+boxMark==4){         //主诉为空,且第一次聚焦其他史查体时提示且不可输入
       if(!mainText&&full&&(value===''||value===undefined)){
@@ -63,6 +63,7 @@ class EditableSpan extends Component{
         return ;
       }
     }
+    handleClear&&handleClear({boxMark});    //点到其他自由文本标签时关闭搜索下拉
     let text = e.target.innerText || e.target.innerHTML;
     setFocusIndex&&setFocusIndex({i,boxMark,dom:this.$span});
     this.setState({
@@ -341,9 +342,10 @@ class EditableSpan extends Component{
     setSelectArea({i,boxMark,dir:'start'});
   }
   selectEnd(){
-    const {i,setSelectArea,boxMark,select_start}= this.props;
+    const {i,setSelectArea,boxMark,select_start,handleClear}= this.props;
     if(select_start!==i){     //判断不能省,否则无法聚焦
       setSelectArea({i,boxMark,dir:'end'});
+      handleClear&&handleClear({boxMark})
       window.getSelection().empty();
     }
   }

+ 6 - 4
src/common/components/Loading/index.jsx

@@ -8,7 +8,7 @@
 import React, {Component} from 'react';
 /*import PropTypes from 'prop-types';*/
 import style from './index.less';
-// import icon from './img/loading.gif';
+ import wnIcon from '@common/images/wn.png';
 import icon from '@common/images/loading.gif';
 import ReactDom from 'react-dom';
 
@@ -37,16 +37,18 @@ const defaultProps = {
 
 class Loading extends React.Component{
     render(){
-        const {text,show} = this.props;
+        const {text,show,type} = this.props;
         const domNode = document.getElementById('root');
         return ReactDom.createPortal(<React.Fragment>
             <div className={style['loading']} style={{display: show ? 'block' : 'none'}}>
                 {/*{this.props.shadeIsShow?<div className={style['cover']}/>:null}*/}
                 <div className={style['cover']}/>
-                <div className={style['info']}>
+              {type==='warning'?<div className={style['t-info']}>
+                <p><img src={wnIcon} alt=""/>{text}</p>
+              </div>:<div className={style['info']}>
                     <img src={icon}/>
                     <p>{text}</p>
-                </div>
+                </div>}
             </div>
         </React.Fragment>,domNode
         )

+ 15 - 1
src/common/components/Loading/index.less

@@ -23,8 +23,22 @@
       width: 40px;
       height: 40px;
     }
+    p{
+      color: #fff;
+    }
   }
-  p{
+  .t-info{
+    position: absolute;
+    top: 40%;
+    left: 40%;
+    background: #000;
+    opacity: 0.8;
     color: #fff;
+    padding:25px;
+    border-radius: 10px;
+    img{
+      vertical-align: middle;
+      margin-right: 10px;
+    }
   }
 }

BIN
src/common/images/icon-current.png


BIN
src/common/images/wn.png


+ 1 - 1
src/components/AssessResult/ChooseItem/index.jsx

@@ -45,7 +45,7 @@ class ChooseItem extends Component {
                                 <Radio label={i.detailName}
                                        value={i.detailName}
                                        disabled={disabled}
-                                       isSelect={selecteds&&selecteds[it.name]==i.detailName||(Object.keys(selecteds||{}).length===0&&i.state==1)}
+                                       isSelect={selecteds&&selecteds[it.name]==i.detailName||(selecteds&&!selecteds[it.name]&&i.state==1)}
                                        handleClick={this.handleRadio.bind(this,it.name,i.detailName)}></Radio>
                                 {/*{i.state?<i>(智能推荐)</i>:''}*/}
                               </div>;

+ 14 - 278
src/components/AssessResult/ScaleItem/index.jsx

@@ -2,11 +2,7 @@ import React, { Component } from "react";
 import style from "../index.less";
 import deleteIcon from '@common/images/delete.png';
 import deleteIconNo from '@common/images/delete_no.png';
-import allTableIcon from '@common/images/all-table.png';
-import level1 from "@common/images/级别1.png";
-import checkIcon from '@common/images/check.png';
 import {ComplexModal,MiniToast,Radio} from '@commonComp';
-import Notify from '@commonComp/Notify';
 import {deepClone,preventDefault} from '@utils/tools';
 import { getFormulaResult } from '@store/async-actions/fetchModules'
 /**
@@ -17,171 +13,15 @@ class ScaleItem extends Component {
   constructor(props) {
     super(props);
     this.$area = React.createRef();
-    const {result}= props;
-    let radioVal = result&&result.radioVal;
     this.state = {
-      scaleId:'',
-      scaleName:'',
-      parentId:'',
-      showScale:false,
-      optionId:'',
-      radioVal:Object.assign({},radioVal)||{},
-      formulaId:'',
       text:props.text,
-      isCalculated:false,
-      calcuValues:deepClone(props.calcuValues),   //计算公式填的值
     };
     this.getItems = this.getItems.bind(this);
     this.getDetailItems = this.getDetailItems.bind(this);
-    this.showOption = this.showOption.bind(this);
-    this.closeOption = this.closeOption.bind(this);
-    this.closeFormula = this.closeFormula.bind(this);
-    this.handleInputformula =this.handleInputformula.bind(this);
-  }
-  showOption(id){
-    this.setState({
-      optionId: id,
-      formulaId: ''
-    })
-  }
-  closeOption(){
-    const {result} = this.props;
-    const possible=result&&result.possible;
-    let {radioVal} = this.state;
-    this.setState({
-      radioVal:Object.assign({},radioVal,possible),
-      optionId:null,
-    });
-  }
-  confirmOption(){
-    const {handleRes} = this.props;
-    const {radioVal} = this.state;
-    handleRes&&handleRes({
-      possible:Object.assign({},radioVal),
-      radioVal:Object.assign({},radioVal),//不设置radioVal只有最近一次选中的值
-    });
-    this.setState({
-      optionId:null,
-    });
-  }
-  handleShowScale(item){
-    const {showScaleFn,closeAssess} = this.props;
-    //closeAssess&&closeAssess();    //关闭评估弹窗
-    showScaleFn&&showScaleFn(item,true);
-  }
-  handleRadio(item,parent){
-    let {result} = this.props;
-    let radioVal = result&&result.radioVal;
-    this.setState({
-      radioVal:Object.assign({},radioVal,{[parent.conceptId]:item.detailName})
-    })
-  }
-  handleReg(e){   //只能输入数字和特殊符号
-    const key = e.key;
-    if(key!='Backspace'&&((/[^\d|.\/%*~]/.test(key)))){
-      preventDefault(e);
-    }
-  }
-  handleInputformula(id,calcuContent,i,e) {
-    const { calcuResult,handleCalcu } = this.props;
-    const {calcuValues} = this.state;
-    let obj = deepClone(calcuValues);
-    let values = (obj&&obj[id])||deepClone(calcuContent);
-    const txt = e.target.value;
-    values[i].value = txt.replace(/[\u4e00-\u9fa5]|[^\d|.\/%*~]/g,'');       //处理中文输入法的情况
-    obj[id] = values;
-    if(/[\u4e00-\u9fa5]|[^\d|.\/%*~]/g.test(txt)){
-      e.target.value = txt.replace(/[\u4e00-\u9fa5]|[^\d|.\/%*~]/g,'');
-    }
-    this.setState({
-      isCalculated:false,
-      calcuValues:obj
-    });
-    handleCalcu&&handleCalcu(id,values,calcuResult);
-  }
-  handleForRadio(id,calcuContent,i,fidx){//计算公式
-    const { calcuValues } = this.state;
-    let obj = deepClone(calcuValues);
-    let values = (obj&&obj[id])||deepClone(calcuContent);
-    let details = values[i].details;
-    for(let x=0;x<details.length;x++){
-      if(x!=fidx){
-        details[x].state=0;
-      }else{
-        details[x].state=1;
-      }
-    }
-    obj[id] = values;
-    this.setState({
-      isCalculated:false,
-      calcuValues:obj
-    });
-  }
-  showFormula(id){
-    this.setState({
-      formulaId: id,
-      optionId: ''
-    });
-  }
-  closeFormula(){
-    if(this.state.isCalculated){
-      this.setState({
-        formulaId:null,
-      });
-    }else{
-      this.setState({
-        formulaId:null,
-        calcuValues:deepClone(this.props.calcuValues)
-      });
-    }
-  }
-  calcuFormula(item) { //计算公式计算
-    const { calcuResult,handleCalcu } = this.props;
-    const {calcuValues,formulaId} = this.state;
-    let it=calcuValues&&deepClone(calcuValues[formulaId]);
-    let allHasInfo = true;
-    for (let i = 0; i < it.length; i++) {
-      if(it[i].controlType == 2) {  //输入框类型的有没有填值
-        if(!it[i].value) {
-          allHasInfo = false
-        }
-      } else if(it[i].controlType == 0) {
-        let hasSelect = false;
-        for( let z = 0; z <it[i].details.length; z++) {
-          if(it[i].details[z].state == 1) {
-            hasSelect= true
-          }
-        }
-        if(!hasSelect) {
-          allHasInfo = false
-        }
-      }
-    }
-    const itemCopy = deepClone(item)
-    itemCopy.content.details = calcuValues[formulaId]
-    // item.content.details = calcuValues[formulaId];
-    if(allHasInfo) { //所有都有值,则计算
-      let results = deepClone(calcuResult);
-      getFormulaResult({type:2,data:itemCopy}).then((res)=>{
-        if(+res.data.code==0){
-          const result = res.data.data.result;
-          results[formulaId] = result;
-          handleCalcu&&handleCalcu(formulaId,calcuValues[formulaId],results);
-          this.setState({
-            isCalculated:true
-          });
-        }else{
-          Notify.error(res.data.msg||'计算没有结果返回');
-        }
-      })
-    } else {  //不是所有值都填过了
-      Notify.info('请填写计算公式内容')
-    }
   }
   getDetailItems(item,i){
     let arr = [],temp='';
-    const {indexs,result,formulaResult,disabled,calcuValues,calcuResult} = this.props;
-    const {optionId,formulaId,radioVal} = this.state;
+    const {indexs,result,formulaResult,disabled,calcuResult} = this.props;
     const possible=result&&result.possible;
     item.details.map((its,j)=>{
       let it=its;
@@ -189,118 +29,27 @@ class ScaleItem extends Component {
         if(its.type==1){     //量表
           let scaleRes=formulaResult&&formulaResult[it.content.conceptId]&&formulaResult[it.content.conceptId].calcalculate;
           const name = scaleRes&&scaleRes.result?(' 【'+it.content.name+'】 结果:'+scaleRes.result.value+" "+(scaleRes.result.text||'')):'【'+it.content.name+'】';
-          temp =<span className={style['scale']}
-                      title={name}
-                      onClick={this.handleShowScale.bind(this,it.content)}>
+          temp =<span className={style['scale']}>
                         {name}
                         </span>;
         }else if(its.type==2){      //计算公式
           const showRes = calcuResult&&calcuResult[item.conceptId]||it.content.result;
-          const details = calcuValues&&calcuValues[item.conceptId]||it.content.details;
-
           const cresult = showRes&&showRes[1]&&showRes[1].text;
-                    temp = <div className={style['results']}>
-                    <span>计算公式结果:</span>
-                    <span className={style["blue"]} style={disabled?{cursor:'default'}:''} onClick={disabled?'':this.showFormula.bind(this,item.conceptId,it)}>{cresult?cresult:'请选择'}</span>
-                      {disabled?'':<img src={level1} />}
-                      {disabled?'':<MiniToast title={it.content.name}
-                               confirmText='关闭'
-                               icon={allTableIcon}
-                               show={formulaId&&formulaId==item.conceptId?true:false}
-                               close={this.closeFormula}
-                               confirm={this.closeFormula}
-                               footer="true">
-                      <table>
-                        {details.map((item1,idd)=>{
-                          if(item1.controlType==0){//单选
-                            return <tr>
-                              <td>
-                                <span>{item1.isShow == '0' ? item1.name+':' : '请选择'+item1.name+':'}</span>
-                              </td>
-                              <td>
-                              {Array.isArray(item1.details)&&item1.isShow == '0'&&item1.details.map((ii,ind)=>{
-                                return ii.state == 1 && <div className={style["chooseItem"]}>
-                                          {ii.detailName}
-                                      </div>
-                              })}
-                              {Array.isArray(item1.details)&&item1.isShow != '0'&&item1.details.map((ii,ind)=>{
-                                return <div className={style["chooseItem"]}>
-                                        <Radio label={ii.detailName}
-                                                  isSelect={ii.state == 1}
-                                                  handleClick={this.handleForRadio.bind(this,item.conceptId,details,idd,ind)}>
-                                          </Radio>
-                                      </div>
-                              })}          
-                                
-
-                               
-                              </td>
-                            </tr>
-                          }else if(item1.controlType==2){//输入框
-                            
-                            return <tr>
-                              <td>
-                                <span>{item1.isShow == '0' ? item1.name+':':'请输入'+item1.name+':'}</span>
-                              </td>
-                              <td>
-                                {item1.isShow == '0' ? item1.value + ' ' +item1.uint : <input type="text" placeholder="请输入"  value={item1.value} onKeyDown={this.handleReg.bind(this)} onInput={(e)=>this.handleInputformula(item.conceptId,details,idd,e)}/>}
-                              </td>
-                              <td>
-                                {item1.isShow != '0'&&<span>{item1.uint}</span>}  
-                              </td>
-
-                            </tr>
-                          }
-                        })}
-                      </table>
-                      <div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,its)}>计算</div>
-                      <table>
-                        {showRes && Array.isArray(showRes) &&showRes.map((itemResult) => {
-                          return <tr>
-                            <td>
-                              <span>{itemResult.name+':'}</span>
-                            </td>
-                            <td>
-                              <span>{itemResult.text}</span>
-                            </td>
-                          </tr>
-                        })}
-                      </table>
-                    </MiniToast>}
-                </div>
+                    temp = <span className={style['results']}>
+                    患者可能有:
+                    <i className={style["blue"]}>{cresult}</i>
+                </span>
         }else if(its.type==3){
           temp = <div className={style['results']}>
                     <span>可能结果:</span>
-                    <span onClick={disabled?'':this.showOption.bind(this,item.conceptId)} style={disabled?{cursor:'default'}:''} className={style["blue"]}>{possible&&possible[item.conceptId]?possible[item.conceptId]:'请选择'}</span>
-                    {disabled?'':<img src={level1} />}
-                    {disabled?'':<MiniToast title='结果选择'
-                         icon={checkIcon}
-                         show={optionId&&optionId==item.conceptId?true:false}
-                         close={this.closeOption}
-                         confirm={this.confirmOption.bind(this,item.conceptId)}
-                         footer={true}>
-                        <div className={style["infoOption"]}>
-                          <span>{it.content.name?it.content.name+':':''}</span>
-                          {it.content.details&&it.content.details.map((lis,ind)=>{
-                            return <div className={style["chooseItem"]}>
-                              <Radio label={lis.detailName}
-                                     isSelect={radioVal&&radioVal[item.conceptId]==lis.detailName||(Object.keys(radioVal).length===0&&lis.state==1)}
-                                     handleClick={this.handleRadio.bind(this,lis,item,i)}>
-                              </Radio>
-                              {/*{lis.state==1?<span className={style['recomand']}>(智能推荐)</span>:''}*/}
-                            </div>
-                          })}
-                        </div>
-                    </MiniToast>}
+                    <span className={style["blue"]}>{possible[item.conceptId]}</span>
                   </div>;
         }
         const passId = item.details[j].type==1?item.details[j].content.conceptId:undefined;
         const li = disabled?<li>
-            <span className={style['s-title']}>{item.name}:</span>
-            <div className={style['row']}>{temp}</div>
+            <div className={style['s-title']}>{item.name}:{temp}</div>
           </li>:<li>
-          <span className={style['s-title']}>{item.name}:</span>
-          <div className={style['row']}>{temp}</div>
+          <span className={style['s-title']}>{item.name}:{temp}</span>
           <div className={style["recommend"]} onClick={this.props.handleRemove.bind(this,false,i,passId,j)}>
             <img className={style["deleteIconNo"]} src={deleteIconNo} />
             <img className={style["deleteIcon"]} src={deleteIcon} />
@@ -317,16 +66,6 @@ class ScaleItem extends Component {
       return this.getDetailItems(it,i);
     });
   }
-  getScaleContent(data){
-    if(!data){
-      return null;
-    }
-    const item = data&&data.find((it)=>{
-      return it.type==1;
-    });
-    const content = JSON.parse(item.content||null);
-    return {conceptId:item.conceptId,content,name:content.scaleName};
-  }
   getScales(){
     const {scaleItems,disabled,formulaResult} = this.props;
     let li='',temp='',arr=[],it={};
@@ -334,20 +73,17 @@ class ScaleItem extends Component {
       return '';
     };
     for( let i in scaleItems){
-      it = {conceptId:i,name:scaleItems[i].name};//this.getScaleContent(scaleItems[i].data);
+      it = {conceptId:i,name:scaleItems[i].name};
       if(!it) continue;
       let scaleRes=formulaResult&&formulaResult[it.conceptId]&&formulaResult[it.conceptId].calcalculate;
       const name = scaleRes&&scaleRes.result?(' 【'+scaleItems[i].name+'】 结果:'+scaleRes.result.value+" "+(scaleRes.result.text||'')):'【'+scaleItems[i].name+'】';
       //这里onClick不能用箭头函数,用箭头函数会一直绑定for的最后一个it
-      temp =<span className={style['scale']}
-                  title={name}
-                  onClick={this.handleShowScale.bind(this,it)}>{name}</span>;
+      temp =<i className={style['scale']}>{name}</i>;
       li = disabled?<li>
-        <span className={style['s-title']}>相关量表:</span>
-        <div className={style['row']}>{temp}</div>
+        <span className={style['s-title']}>相关量表:{temp}</span>
       </li>:<li>
-        <span className={style['s-title']}>相关量表:</span>
-        <div className={style['row']}>{temp}</div>
+        <span className={style['s-title']}>相关量表:{temp}</span>
+        {/*<div className={style['row']}>{temp}</div>*/}
         <div className={style["recommend"]} onClick={this.props.handleRemove.bind(this,true,it.conceptId)}>
           <img className={style["deleteIconNo"]} src={deleteIconNo} />
           <img className={style["deleteIcon"]} src={deleteIcon} />

+ 3 - 34
src/components/AssessResult/index.jsx

@@ -25,19 +25,12 @@ class AssessResult extends Component {
       wholeAssessText:props.wholeAssessText||{},     //整体评估补充说明
       wholeResults: wholeResults,
       calcuResult:props.calcuResult,     //计算公式结果
-      calcuValues:props.calcuValues,    //计算公式填的值
       addedScaleIds:props.addedScaleIds,    //已加入量表的id
     };
     this.handleChooseChange = this.handleChooseChange.bind(this);
     this.handleScaleDel = this.handleScaleDel.bind(this);
     this.handleScaleText = this.handleScaleText.bind(this);
-    this.handleResult = this.handleResult.bind(this);
   }
-  /*componentWillMount(){
-    const {disId,disName,getAssess} = this.props;
-    //获取评估
-    getAssess&&getAssess(disId,disName);
-  }*/
   handleScaleText(text){
     const {disName} = this.props;
     const obj = Object.assign({},this.state.wholeAssessText);
@@ -70,15 +63,6 @@ class AssessResult extends Component {
       });
     }
   }
-  handleResult(opt){
-    const {wholeResults} = this.state.wholeResults;
-    const {savePossibleRes} = this.props;
-    const res = Object.assign({},wholeResults,opt);
-    this.setState({
-      wholeResults:res
-    });
-    savePossibleRes && savePossibleRes(res);
-  }
   handleChooseChange(i,selects){
     const {chooseSelecteds} = this.state;
     this.setState({
@@ -91,15 +75,6 @@ class AssessResult extends Component {
       chartTimeTypes:Object.assign(chartTimeTypes,{[i]:selects})
     });
   }
-  handleCalcu(id,values,ret){
-    const {saveCalcuValue,saveCalcuResult}=this.props;
-    this.setState({
-      calcuResult:ret,
-      calcuValues:{[id]:values}
-    });
-    saveCalcuResult&&saveCalcuResult(ret);
-    saveCalcuValue&&saveCalcuValue(values, id);
-  }
   componentWillUnmount(){
     //点确定关闭弹窗时把参数传到父组件去
     const {saveAssessInfos,isAssessConfirm,clearChartData} = this.props;
@@ -121,13 +96,13 @@ class AssessResult extends Component {
     }
   }
   handoutTypes(item,i){
-    const {getIndexData,indexData,timeTypes,wholeIndexs,closeAssess,showScaleFn,chronicPushItems,
+    const {getIndexData,indexData,timeTypes,wholeIndexs,chronicPushItems,
       formulaResult,indexNames,disName} =this.props;
     let obj = [];
     Object.keys(wholeIndexs).map((i)=>{
       obj[i]=chronicPushItems[i];
     });
-    const {chooseSelecteds,wholeAssessItems,wholeScaleItems,wholeAssessText,chartTimeTypes,wholeResults,calcuResult,calcuValues} = this.state;
+    const {chooseSelecteds,wholeAssessItems,wholeScaleItems,wholeAssessText,chartTimeTypes,wholeResults,calcuResult} = this.state;
     const chartData = indexData;
     const name = item.regionName+":";
     const list = item.data&&item.data.rows;
@@ -137,18 +112,12 @@ class AssessResult extends Component {
                           data={obj}
                           handleRemove={this.handleScaleDel}
                           handleInp={this.handleScaleText}
-                          handleRes={this.handleResult}
-                          handleCalcu={this.handleCalcu.bind(this)}
                           text={wholeAssessText[disName]}
                           indexs={wholeAssessItems}
                           scaleItems ={wholeScaleItems}
                           result={wholeResults}
-                          showScaleFn={showScaleFn}
                           calcuResult={calcuResult}
-                          calcuValues={calcuValues}
-                          formulaResult={formulaResult}
-                          chronicPushItems={chronicPushItems}
-                          closeAssess={closeAssess}></ScaleItem>;
+                          formulaResult={formulaResult}></ScaleItem>;
       case 1:     //数据来源于大数据
         return <ChooseItem title={name}
                            data={list}

+ 7 - 9
src/components/AssessResult/index.less

@@ -34,10 +34,10 @@
   }
   li {
     line-height: 35px;
-    .row{
+    /*.row{
       display: inline-block;
       max-width: 86%;
-    }
+    }*/
     .results{
       position: relative;
     }
@@ -50,23 +50,21 @@
       }
     }
     .s-title{
-      display: inline-block;
+      /*display: inline-block;
       max-width: 100px;
-      vertical-align: top;
+      vertical-align: top;*/
     }
     .scale{
-      display: inline-block;
+      /*display: inline-block;*/
       color: @blue;
-      cursor: pointer;
-      white-space: nowrap;
+      /*white-space: nowrap;
       max-width: 100%;
       overflow: hidden;
       text-overflow: ellipsis;
-      vertical-align: top;
+      vertical-align: top;*/
     }
     .blue{
       color:#3B9ED0;
-      cursor: pointer;
     }
     .blue + img{
       vertical-align: middle;

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

@@ -18,4 +18,5 @@
   position: absolute;
   right: 0;
   top: 9px;
+  cursor: pointer;
 }

+ 11 - 11
src/components/ChronicInfo/index.jsx

@@ -156,8 +156,8 @@ class ChronicInfo extends React.Component{
   // 量表明细-关闭,isClose是否是点击关闭按钮
   closeTable(isClose){
     const {scaleParam} = this.state;
-    const {showHide,chronicMagItem} = this.props;
-    if(!showHide.isPop){
+    const {chronicMagItem} = this.props;
+    //if(!showHide.isPop){    //管理评估中点开的量表,按钮显示为确定,不可加入病例
       //量表结果,判断需要计算并且dom中有值才能加入病例记录
       // innerHTML 兼容FF26
       const res = this.$result.current&&(this.$result.current.innerText||this.$result.current.innerHTML);
@@ -165,11 +165,11 @@ class ChronicInfo extends React.Component{
         Notify.info("请先计算量表结果!");
         return ;
       }
-      !isClose&&chronicMagItem&&this.handleAddAssessItem(scaleParam.v,scaleParam.i,scaleParam.j);   //是慢病流程才能加入病例
+      !isClose&&chronicMagItem&&this.handleAddAssessItem(scaleParam.v,scaleParam.i,scaleParam.j);
       this.setState({
         scaleParam:{}
       });
-    }
+    //}
     this.props.hideList({name:'showTable',value:false});
   }
   // 非计分量表确定-延时关闭->量表存值
@@ -248,7 +248,7 @@ class ChronicInfo extends React.Component{
     addAssessItem(v,pIndex,i);
   }
   addFormula(it,v,pIndex,i){
-    const {chronicMagItem, setCalcuInfo} = this.props;
+    const {chronicMagItem,setCalcuInfo} = this.props;
     this.closeFormula(it);
     const itCopy = deepClone(it)
     const vCopy = deepClone(v)
@@ -296,7 +296,7 @@ class ChronicInfo extends React.Component{
   }
   confirmOption(parent,pIndex,i){//可能结果确定
     const {radioVal,possible} = this.state;
-    const {savePossibleResult,chronicMagItem} = this.props;
+    const {chronicMagItem,savePossibleResult} = this.props;
     if(Object.keys(radioVal).length===0){     //初始状态,可能有推荐选项
       const defaulted = parent.details[i].content.details.filter((it)=>+it.state===1);
       if(defaulted.length>0){
@@ -387,8 +387,8 @@ class ChronicInfo extends React.Component{
     return hasCritical
   }
   getDetail(){
-    const {data,formulaResult,calcuResult,chronicMagItem} = this.props;
-    const {formulaId,optionId,possible,radioVal,calcuValues,currentIndex,hasEnterImg} = this.state;
+    const {data,formulaResult,chronicMagItem} = this.props;
+    const {formulaId,optionId,possible,radioVal,currentIndex,hasEnterImg} = this.state;
     /*let names = [];*/
     let list = data&&data.map((v,i)=>{
                     /*if(this.getCritical(v)&&names.includes(v.name)){    //重复项
@@ -443,7 +443,7 @@ class ChronicInfo extends React.Component{
                             </span>
                             {formulaId&&formulaId==v.conceptId&&<MiniToast title={it.content.name}
                                 icon={allTableIcon}
-                                confirmText={chronicMagItem?'加入病历记录':'确定'}
+                                confirmText={chronicMagItem?'加入管理评估':'确定'}
                                 show={formulaId&&formulaId==v.conceptId?true:false}
                                 close={this.closeFormula.bind(this,it)}
                                 confirm={this.addFormula.bind(this,it,v,i,j)}
@@ -512,7 +512,7 @@ class ChronicInfo extends React.Component{
                             </span>
                             <MiniToast title='结果选择'
                                 icon={checkIcon}
-                                confirmText={chronicMagItem?'加入病历记录':'确定'}
+                                confirmText={chronicMagItem?'加入管理评估':'确定'}
                                 show={optionId&&optionId==v.conceptId?true:false}
                                 close={this.closeOption}
                                 confirm={this.confirmOption.bind(this,v,i,j)}
@@ -572,7 +572,7 @@ class ChronicInfo extends React.Component{
     const {comfirnFlag,flag,ff} = this.state;
     const {chronicMagItem,chronicDesease,data,showHide,slideUp} = this.props;
     const scaleFooter = <Footer print={true}
-                                footText={showHide.isPop||!chronicMagItem?"确定":"加入病历记录"}
+                                footText={chronicMagItem?'加入管理评估':'确定'}
                                 handlePrint={this.onPrint}
                                 handleConfirm={this.comfirnTable}/>;
     if(data&&data.length>0){

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

@@ -4,7 +4,6 @@ import {ItemBox,Notify,Textarea,TailInlineTag} from '@commonComp';
 import chooseType from '@containers/eleType.js';
 import SearchDrop from '@components/SearchDrop';
 import {filterDataArr,getPageCoordinate,windowEventHandler,isIE} from '@utils/tools'
-import $ from 'jquery';
 
 class CurrentIll extends Component{
   constructor(props){
@@ -75,7 +74,7 @@ class CurrentIll extends Component{
     const ele = document.activeElement;
     const height = ele.offsetHeight;
     let boxTop = (+(ele.offsetTop)+height);
-    let boxLeft = ele.offsetLeft;
+    let boxLeft = ele.offsetLeft+70;
     this.setState({
       boxLeft:boxLeft,
       boxTop:boxTop

+ 4 - 2
src/components/InfoTitle/index.jsx

@@ -50,7 +50,7 @@ class InfoTitle extends Component {
         }
     }
     render() {
-        const {disVisible,copyVisible,winWidth,loading} = this.props;
+        const {loading,loadingText,loadingType} = this.props;
         const {le} = this.state;
         return <div className={style['title-wrapper']}  style={{left:le}}>
             <PatInfoContainer />
@@ -63,7 +63,7 @@ class InfoTitle extends Component {
                 </div>
             </div>
             <HistoryCases></HistoryCases>
-            <Loading show={loading}/>
+            <Loading show={loading} text={loadingText} type={loadingType}/>
         </div>;
     }
 }
@@ -73,6 +73,8 @@ function mapStateToProps(state) {
     copyVisible:state.copyRight.copyVisible,
     winWidth:state.homePage.windowWidth,
     loading:state.copyRight.loading,
+    loadingText:state.copyRight.loadingText,
+    loadingType:state.copyRight.loadingType
   }
 }
 

+ 4 - 2
src/components/MainSuit/index.jsx

@@ -131,7 +131,7 @@ class MainSuit extends Component{
     let boxTop = (+(ele.offsetTop)+height);
     let boxLeft = ele.offsetLeft;
     this.setState({
-      boxLeft:boxLeft,
+      boxLeft:boxLeft+50,
       boxTop:boxTop
     });
   }
@@ -276,6 +276,8 @@ class MainSuit extends Component{
     const boxTop1 = datas.length>0?boxTop:45;
     const boxLeft1 = datas.length>0?boxLeft:85;
     const mode = readMode===null||readMode===-1?type:readMode;
+    const textDom=document.getElementById("mainSuit");    //主诉有输入时不显示常见
+    const hasText = saveText&&saveText.join("")||(textDom&&textDom.innerText);
     if(+mode===1){      //文本模式
       return <Textarea title='主诉' boxMark='1' isRead={isRead} value={saveText[0]} handlePush={fetchPushInfos} handleInput={handleInput} />;
     }
@@ -295,7 +297,7 @@ class MainSuit extends Component{
         {''}{datas.length>0?<div style={{display:'inline-block'}}>{this.getInlineTag()}</div>:(saveText[0]?saveText[0]:'')}
       </ItemBox>
       {/*没有推送结果就不显示*/}
-      {symptomFlag && !searchFlag&&datas.length===0 ? <CommonSymptom data={CommonSymptoms} show={!totalHide&&showArr['common']} onSelect={this.handleSelect} /> : ( searchFlag ? <SearchDrop data={searchData} show={!commSymHide} onSelect={this.handleSearchSelect} left={boxLeft1} top={boxTop1} mainEmpty={datas.length==0?true:false}/>:"")}
+      {symptomFlag && !searchFlag&&datas.length===0&&!hasText ? <CommonSymptom data={CommonSymptoms} show={!totalHide&&showArr['common']} onSelect={this.handleSelect} /> : ( searchFlag ? <SearchDrop data={searchData} show={!commSymHide} onSelect={this.handleSearchSelect} left={boxLeft1} top={boxTop1} mainEmpty={datas.length==0?true:false}/>:"")}
     </div>
   }
 }

+ 14 - 11
src/components/NumberDrop/index.jsx

@@ -92,24 +92,25 @@ class NumberDrop extends Component{
     this.emitBMIData('');
     this.setState({
       placeholder:this.props.placeholder,
-      hasSelect:false
+      hasSelect:false,
+      value:''
     });
   }
-  handleNumFocus(e){console.log('focus')
+  handleNumFocus(e){
     const {placeholder} = this.state;
-    const val = e.target.innerText.trim();//console.log(33,e.target.innerText,placeholder,e.target.innerText.trim() == placeholder)
+    const val = this.$span.current.innerText.trim();//console.log(33,e.target.innerText,placeholder,e.target.innerText.trim() == placeholder)
     if(val!=''&&val == placeholder){
       this.setState({
         placeholder:''
       });
     }
-    e.stopPropagation();
+    e&&e.stopPropagation();
     const {show,handleShow,ikey,id,patId,handleHide} = this.props;
     if(show) {
       handleHide && handleHide();
       return;
     }else{
-      this.$span.current.focus();
+      //this.$span.current.focus();
       this.setState({
         hasSelect:false,
         placeholder:''      //火狐26placeholder点击不隐藏bug修改
@@ -125,8 +126,10 @@ class NumberDrop extends Component{
       handleHide && handleHide();
     }
   }
-  handleNumClick(e){     //数字框不可编辑的状态时点击事件,点击将数字框变为可输入且下拉不再显示直到失焦后再次聚集
+  handleNumClick(e){    //数字框不可编辑的状态时点击事件,点击将数字框变为可输入且下拉不再显示直到失焦后再次聚集
     e.stopPropagation();
+    this.$span.current.focus();
+    //this.handleNumFocus();
     /*const {show,handleShow,ikey,id,patId,handleHide} = this.props;
     if(show) {
       handleHide && handleHide();
@@ -255,7 +258,7 @@ class NumberDrop extends Component{
     if(wrBmi!==nextProps.wrBmi&&(formulaCode==="BMI_SG"||formulaCode==="BMI_TZ")){
       handleSelect&&handleSelect({ikey,text:'',suffix,prefix,mainSaveText,formulaCode});
     }
-
+    
     if((nextProps.placeholder == this.props.placeholder)&&(nextProps.value == this.props.value)){
       return
     }
@@ -270,12 +273,12 @@ class NumberDrop extends Component{
     const {placeholder,hasSelect} = this.state;
     return <div className={this.getClasses(nospecial)}
                 style={{position:'relative'}}
-                onClick={allClick?this.handleNumClick:null}
+                /*onClick={allClick?this.handleNumClick:null}*/
                 onMouseUp={()=>handleMouseUp({select_start,i,boxMark})}
                 onMouseDown={this.handleMouseDown.bind(this)}>
-      <span className={`${setFontColorSize(val?'':isSelectAll?2:isExtBlue?2:1)} prefixUnset`}>{prefix}</span>
+      <span onClick={allClick?this.handleNumClick:null} className={`${setFontColorSize(val?'':isSelectAll?2:isExtBlue?2:1)} prefixUnset`}>{prefix}</span>
       <span onFocus={this.handleNumFocus}
-            onClick={allClick?null:this.handleNumClick}
+            onClick={e=>e.stopPropagation()}
             contentEditable={true}
             style={{minWidth:'10px',display:'inline-block',textAlign:'center'}}
             ref = {this.$span}
@@ -286,7 +289,7 @@ class NumberDrop extends Component{
             onInput={this.handleSpanInp}
             className={`${this.getSpanClass(nospecial)}`}
             >&nbsp;{val||placeholder}</span>
-      <span className={`${setFontColorSize(val?'':isSelectAll?2:isExtBlue?2:1)} prefixUnset`}>{suffix}</span>
+      <span onClick={allClick?this.handleNumClick:null} className={`${setFontColorSize(val?'':isSelectAll?2:isExtBlue?2:1)} prefixUnset`}>{suffix}</span>
       <NumberPan handleSelect={this.select.bind(this)}
                  noString={formulaCode?true:false}
                  onClose={handleHide}

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

@@ -49,7 +49,7 @@ class OtherHistory extends Component{
     let boxTop = (+(ele.offsetTop)+height);
     let boxLeft = ele.offsetLeft;
     this.setState({
-      boxLeft:boxLeft,
+      boxLeft:boxLeft+50,
       boxTop:boxTop
     });
     //若使用e.target,因为是onClick事件中,值可能是itembox的而不是span因此会有bug

+ 1 - 1
src/components/PreviewBody/ItemPart/index.jsx

@@ -4,7 +4,7 @@ import { filterDataArr } from '@utils/tools';
 const ItemPart = (props) => {
   let {dataStr,title,type,dataJson,other_yjs,lastDot} = props;
   if(lastDot){
-    dataStr=dataStr.trim().replace(/;$/g,'');
+    dataStr=dataStr.trim().replace(/;$/g,'');
   }
   return <tr className={style['patInfoFst']}>
     <td className={style['patInfoSec']}>{title}</td>

+ 14 - 5
src/components/PushItems/DetailsModal/index.jsx

@@ -2,6 +2,7 @@ import React, { Component } from "react";
 import styles from "./index.less";
 import NewPortal from './NewPortal'
 import close from "./../img/close.png";
+import imgCurrent from '@common/images/icon-current.png';
 import $ from "jquery";
 import { imageUrlPrefix } from '@utils/config.js';
 import { dragBox } from '@utils/drag';
@@ -69,10 +70,10 @@ class DetailsModal extends Component {
                         <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}>
+                                return (<div id={item.title} class={styles['details-content-box']}>
                                     <div className={styles['details-content-title-box']} >
                                         <span className={styles['details-content-title-name']}>{item.title}</span>
-                                        <div className={styles['details-content-title-line']}></div>
+                                        <div className={styles['details-content-title-circle-box']}><span className={styles['details-content-title-circle']}></span></div>
                                     </div>
                                     <pre dangerouslySetInnerHTML ={{__html: item.content.replace(/{imageUrlPrefix}/g, imageUrlPrefix)}}></pre>
                                 </div>)
@@ -82,16 +83,24 @@ class DetailsModal extends Component {
                         <div className={styles['content-menu-box']}>
                             <div className={styles['content-menu-wrapper']}>
                                 <div className={styles['content-menu']}>
-                                    {tipsDetails && tipsDetails.details && tipsDetails.details.map((item, index) => {
-                                            return (<div>
+                                    <div className={styles['content-menu-border']}>    
+                                        {tipsDetails && tipsDetails.details && tipsDetails.details.map((item, index) => {
+                                            return (<div class={styles['details-menu-title-wrapper']}>
                                                 <div className={styles['details-menu-title-box']}>
                                                     {index === 0 ? '' : <div className={styles['details-content-menu-line']}></div>}
                                                     <span onClick={this.handleClickMenu.bind(this, index, item, tipsDetails)} className={styles['details-content-menu-name']} style = {index === currentIndex ? {color:'#0089be'} : ''}>
-                                                        <span className={styles['details-content-menu-circle']} style = {index === currentIndex ? {background:'#0089be'} : ''}></span>{item.title}
+                                                        <div className={styles['details-content-menu-circle-box']}>
+                                                            {index !== currentIndex&&<span className={styles['details-content-menu-circle']} ></span>}
+                                                            {index === currentIndex&&<img className={styles['details-content-menu-img']} src ={imgCurrent}/>}
+                                                        </div>
+                                                        {item.title}
                                                     </span>
                                                 </div>
                                             </div>)
                                         })}
+
+                                    </div>
+                                   
                                 </div>
 
                             </div>

+ 57 - 17
src/components/PushItems/DetailsModal/index.less

@@ -38,7 +38,8 @@
     padding: 0 40px;
     height: 50px;
     line-height: 50px;
-    font-size: 24px;
+    font-size: 32px;
+    font-weight: bold;
 }
 
 .details-content-title-box {
@@ -47,22 +48,21 @@
     line-height: 40px;
     font-size: 20px;
 }
+.details-menu-title-wrapper {
+    padding: 0 0 0 15px;
+    position: relative;
+}
 
 .details-content-title-name {
     position: absolute;
+    font-weight: bold;
     background: #fff;
     padding-right: 5px;
-    font-size: 20px;
+    font-size: 22px;
     z-index: 10;
 }
 
-.details-content-title-line {
-    position: absolute;
-    width: 100%;
-    height: 20px;
-    top: 0;
-    border-bottom: 1px dashed #ccc;
-}
+
 .details-close {
     position: absolute;
     right: 0;
@@ -101,32 +101,46 @@
 }
 .content-menu {
     
-    background: #eee;
-    border: 1px solid #eee;
+    background: #F5F6F7;
+    border: 1px solid #F5F6F7;
     width: 160px;
     padding: 15px 18px;
 }
 .details-content-menu-line {
     height: 15px;
     width: 0;
-    border: 1px solid #ccc;
-    background-color: #ccc;
-    margin-left: 4px
+    background-color: #E0E2E3;
+    margin-left: 0px
 }
 .details-content-menu-name {
-    color: #33475f;
+    position: relative;
+    color: #777777;
     font-size: 13px;
     cursor: pointer;
 }
+.details-content-menu-circle-box {
+    display:inline-block;
+    position: absolute;
+    left: -20px;
+    background: #F5F6F7;
+
+}
 .details-content-menu-circle {
+    position: relative;
     display: inline-block;
     width: 8px;
     height: 8px;
     border-radius: 5px;
-    border: 1px solid #ccc;
     margin-top: 5px;
-    background-color: #eee;
+    background-color: #E0E2E3;
     margin-right: 10px;
+   
+}
+.details-content-menu-img {
+    position: relative;
+    z-index: 20;
+    left: -3px;
+    top: 0;
 }
 .details-mask {
     position: fixed;
@@ -139,8 +153,34 @@
     filter:alpha(opacity=60);
     -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=60);";
 }
+.details-content-box {
+    border-left: 1px solid #969C9F;
+    padding: 0 0 0 20px;
+}
+.details-content-title-circle-box {
+   position: absolute;
+   z-index: 10;
+   background: #fff;
+   left: -27px;
+   height: 32px;
+   top: 0px;
+}
+.details-content-title-circle {
+    display: inline-block;
+    width: 12px;
+    height: 12px;
+    border-radius: 50%;
+    background: #3B9ED0;
+    position: relative;
+    top: 2px;
+}
+.content-menu-border{
+    border-left: 2px solid #E0E2E3;
+}
 pre {
     white-space: pre-wrap;
     word-wrap: break-word;
     font-family: inherit;
+    color: #333;
+    margin: 10px 0;
   }

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

@@ -9,7 +9,7 @@ class GeneralTreat extends Component {
     constructor(props){
         super(props);
         this.state = {
-            slideUp: false
+            slideUp: true
         }
         this.$content = React.createRef();
     }
@@ -33,7 +33,7 @@ class GeneralTreat extends Component {
                     {title}
                     {hasFold && <img  className={style['slide-toggle']} src={slideUp?up:down} alt="展开/收起"/>}
                 </div>
-                <div ref={this.$content} className={hasFold?style['general-item-hide']:style['general-item-show']}  dangerouslySetInnerHTML={{__html: generalTreat.content}}>
+                <div ref={this.$content} className={hasFold?style['general-item-show']:style['general-item-hide']}  dangerouslySetInnerHTML={{__html: generalTreat.content}}>
                 </div>
 
             </div>

+ 24 - 13
src/components/TreatDesc/DrugInfo/index.jsx

@@ -1,6 +1,7 @@
 import React, { Component } from 'react';
 import style from './index.less';
 import close from './../img/close.png';
+import imgCurrent from '@common/images/icon-current.png';
 import $ from "jquery";
 import {dragBoxs} from '@utils/drag'
 import { imageUrlPrefix } from '@utils/config.js';
@@ -56,28 +57,38 @@ class DrugInfo extends Component {
         const { currentIndex } = this.state
         return (<div className={style['drug-info-wrapper']} id="drugWrapper">
                 <img src={close} onClick={hideDrugInfo} className={style['close-drug-desc']}/>
-                <h3 onMouseDown={this.setDragBox} id="drugTitle" className={style['drug-title']}>{drugInfo.tagType == 8 ? drugInfo.title+'说明书' : drugInfo.tagType == 10 ? drugInfo.title+ '说明': ''}</h3>
+                <h1 onMouseDown={this.setDragBox} id="drugTitle" className={style['drug-title']}>{drugInfo.tagType == 8 ? drugInfo.title+'说明书' : drugInfo.tagType == 10 ? drugInfo.title+ '说明': ''}</h1>
                 { drugInfo && drugInfo.drugDesc.length > 0 && <div className={style['drug-desc-wrapper']} id='drugDesc' onScroll={this.handleScrollModal.bind(this,  drugInfo.drugDesc)}>
-                    <div className={style['drug-title1']} >{drugInfo.tagType == 8 ? drugInfo.title+'说明书' : drugInfo.tagType == 10 ? drugInfo.title+ '说明': ''}</div>
+                    {/* <div className={style['drug-title1']} >{drugInfo.tagType == 8 ? drugInfo.title+'说明书' : drugInfo.tagType == 10 ? drugInfo.title+ '说明': ''}</div> */}
                     {drugInfo.drugDesc.map((item, index) =>{
                         return <div className={style['drug-desc-item']} id={item.title.trim()}>
-                            <div className={style['drug-desc-title']} >{item.title.trim()}</div> 
+                            <div className={style['details-content-title-box']} >
+                                <span className={style['details-content-title-name']}>{item.title}</span>
+                                <div className={style['details-content-title-circle-box']}><span className={style['details-content-title-circle']}></span></div>
+                            </div>
                             <pre className={style['drug-desc-content']} dangerouslySetInnerHTML ={{__html: item.content.replace(/{imageUrlPrefix}/g, imageUrlPrefix)}}></pre> 
                         </div>
                     })}
                     <div className={style['content-menu-box']}>
                         <div className={style['content-menu-wrapper']}>
                             <div className={style['content-menu']}>
-                                {drugInfo.drugDesc.map((item, index) => {
-                                    return (<div >
-                                        <div className={style['details-menu-title-box']}>
-                                            {index === 0 ? '' : <div className={style['details-content-menu-line']}></div>}
-                                            <span onClick={this.handleClickMenu.bind(this, index, item, drugInfo.drugDesc)} className={style['details-content-menu-name']} style = {index === currentIndex ? {color:'#0089be'} : ''}>
-                                                <span className={style['details-content-menu-circle']} style = {index === currentIndex ? {background:'#0089be'} : ''}></span>{item.title}
-                                            </span>
-                                        </div>
-                                    </div>)
-                                })}
+                                <div className={style['content-menu-border']}> 
+                                    {drugInfo.drugDesc.map((item, index) => {
+                                        return (<div class={style['details-menu-title-wrapper']}>
+                                            <div className={style['details-menu-title-box']}>
+                                                {index === 0 ? '' : <div className={style['details-content-menu-line']}></div>}
+                                                <span onClick={this.handleClickMenu.bind(this, index, item, drugInfo.drugDesc)} className={style['details-content-menu-name']} style = {index === currentIndex ? {color:'#0089be'} : ''}>
+                                                    <div className={style['details-content-menu-circle-box']}>
+                                                        {index !== currentIndex&&<span className={style['details-content-menu-circle']} ></span>}
+                                                        {index === currentIndex&&<img className={style['details-content-menu-img']} src ={imgCurrent}/>}
+                                                    </div>
+                                                    {item.title}
+                                                </span>
+                                            </div>
+                                        </div>)
+                                    })}
+                                </div>
+                                
                             </div>
                         </div>
                     </div>

+ 67 - 20
src/components/TreatDesc/DrugInfo/index.less

@@ -9,7 +9,7 @@
     top: 10%;
     margin-left: -475px;
     background: #fff;
-    padding: 40px 0 60px;
+    padding: 50px 0 60px;
     box-shadow: 0px 0px 5px -2px #7d7c7c;
     word-break: break-all;
     max-width: 100%;
@@ -35,10 +35,11 @@
     position: absolute;
     top: 0;
     width: 100%;
-    height: 40px;
-    line-height: 40px;
+    height: 50px;
+    line-height: 50px;
+    font-size: 32px;
+    font-weight: bold;
     padding: 0 40px;
-    border-bottom: 1px solid #979797;
     cursor: move;
     moz-user-select: -moz-none;
     -moz-user-select: none;
@@ -48,6 +49,7 @@
     -ms-user-select:none;
     user-select:none;
 }
+
 .close-drug-desc {
     .contentZIndex1;
     position: absolute;
@@ -58,7 +60,8 @@
 }
 .drug-desc-item {
     zoom: 1;
-    padding: 5px 0;
+    border-left: 1px solid #969C9F;
+    padding: 0 0 0 20px;
     &:after{
         content: "";
         display: block;
@@ -70,19 +73,14 @@
 .drug-desc-title {
     display: inline-block;
     font-weight: bold;
-    font-size: 14px;
+    font-size: 22px;
     // height: 100%;
     // float: left;
     // width: 190px;
     // text-align-last:justify;    /*chrome*/
     // text-justify: distribute;   /*ff*/
 }
-.drug-desc-title::before {
-    content: '【'
-}
-.drug-desc-title::after {
-    content: '】'
-}
+
 .drug-title1 {
     height: 60px;
     line-height: 60px;
@@ -92,7 +90,7 @@
 }
 .drug-desc-content {
     /*width: 100%;*/
-    margin: 0px 160px 0px 10px;
+    margin: 10px 160px 10px 10px;
 }
 
 .content-menu-box {
@@ -109,37 +107,86 @@
     height: 100%;
     overflow-y: auto;
 }
+.content-menu-border{
+    border-left: 2px solid #E0E2E3;
+    padding: 0 0 0 15px;
+}
 .content-menu {
     
-    background: #eee;
-    border: 1px solid #eee;
+    background: #F5F6F7;
+    border: 1px solid #F5F6F7;
     width: 160px;
     padding: 15px 18px;
 }
 .details-content-menu-line {
     height: 15px;
     width: 0;
-    border: 1px solid #ccc;
-    background-color: #ccc;
     margin-left: 4px
 }
 .details-content-menu-name {
-    color: #33475f;
+    position: relative;
+    color: #777777;
     font-size: 13px;
     cursor: pointer;
 }
+.details-content-menu-circle-box {
+    display:inline-block;
+    position: absolute;
+    left: -20px;
+    background: #F5F6F7;
+
+}
 .details-content-menu-circle {
+    position: relative;
     display: inline-block;
     width: 8px;
     height: 8px;
     border-radius: 5px;
-    border: 1px solid #ccc;
     margin-top: 5px;
-    background-color: #eee;
+    background-color: #E0E2E3;
     margin-right: 10px;
+   
+}
+.details-content-menu-img {
+    position: relative;
+    z-index: 20;
+    left: -3px;
+    top: 0;
+}
+.details-content-title-circle-box {
+    position: absolute;
+    z-index: 10;
+    background: #fff;
+    left: -27px;
+    height: 32px;
+    top: 0px;
+ }
+ .details-content-title-circle {
+     display: inline-block;
+     width: 12px;
+     height: 12px;
+     border-radius: 50%;
+     background: #3B9ED0;
+     position: relative;
+     top: 2px;
+ }
+ .details-content-title-box {
+    position: relative;
+    height: 40px;
+    line-height: 40px;
+    font-size: 20px;
+}
+.details-content-title-name {
+    position: absolute;
+    font-weight: bold;
+    background: #fff;
+    padding-right: 5px;
+    font-size: 22px;
+    z-index: 10;
 }
 pre {
     white-space: pre-wrap;
     word-wrap: break-word;
     font-family: inherit;
+    color: #333;
   }

+ 0 - 40
src/containers/AssessResult.js

@@ -70,33 +70,6 @@ function mapDispatchToProps(dispatch) {
         type:CLEAR_INDEX_DATA
       })
     },
-    saveCalcuResult(data){
-      dispatch({
-        type: SET_CHRONIC_CALCU_RESULT,
-        data:deepClone(data)
-      })
-    },
-    // setCalcuInfo(id, calcuVal, calcuResult) {
-    //   dispatch({
-    //     type: SET_CHRONIC_CALCU_RESULT,
-    //     result:calcuResult,
-    //     id:id
-    //   });
-    //   dispatch({
-    //     type:SET_CALCU_VALUES,
-    //     data:deepClone(calcuVal),
-    //     id:id
-    //   })
-    // },
-    showScaleFn(item,isPop){
-      dispatch({
-        type:SHOW_TABLE_LIST,
-        name:'showTable',
-        value:true,
-        isPop,
-        item:Object.assign({},item)
-      });
-    },
     //保存管理评估
     saveAssessInfos(obj,flg,noSave){     //noSave未true则不调页面保存接口
       dispatch(Object.assign({},obj,{type:SET_SAVE_ASSESS_DATA}));
@@ -107,19 +80,6 @@ function mapDispatchToProps(dispatch) {
         }
       }
     },
-    savePossibleRes(data) {
-      dispatch({
-        type: 'SAVE_POSSIBLE_RESULT',
-        wholeResults: data
-      })
-    },
-    saveCalcuValue(data,id){
-      dispatch({
-        type:SET_CALCU_VALUES,
-        data,
-        id
-      })
-    }
   }
 }
 

+ 1 - 1
src/containers/DiagnosticList.js

@@ -27,7 +27,7 @@ function mapStateToProps(state) {
       //wholeResults:assessResult.wholeResults,
         scaleInfo: pushMessage.scaleInfo,//量表内容
         showHide: pushMessage.showHide,
-        loading: diagnosticList.loading,
+        loading: diagnosticList.loading&&!state.copyRight.loading,
         windowWidth: state.homePage.windowWidth
     }
 }

+ 1 - 2
src/containers/MedicalInfoContainer.js

@@ -32,12 +32,11 @@ function mapDispatchToProps(dispatch) {
                 type:CLEAR_INFO_SEARCH_LIST
               })
         },
-        showScaleFn(item,isPop){
+        showScaleFn(item){
           dispatch({
             type:SHOW_TABLE_LIST,
             name:'showTable',
             value:true,
-            isPop,
             item:Object.assign({},item)
           });
         },

+ 1 - 2
src/containers/ScaleSearchContainer.js

@@ -23,12 +23,11 @@ function mapDispatchToProps(dispatch) {
         getScale(item) {
             dispatch(getScaleInfo(item))
         },
-        showScaleFn(item,isPop){
+        showScaleFn(item){
           dispatch({
             type:SHOW_TABLE_LIST,
             name:'showTable',
             value:true,
-            isPop,
             item:Object.assign({},item)
           });
         },

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

@@ -1,5 +1,5 @@
 import config from '@config/index.js';
-import {formatContinueDots,getLabelIndex,handleLocalDelTag,checkFullfillText,shiftLocalDelTag,getLifeLabels,getValuedLabels,removeRepeat} from '@utils/tools.js';
+import {formatContinueDots,getLabelIndex,handleLocalDelTag,checkFullfillText,shiftLocalDelTag,getLifeLabels,getValuedLabels,removeRepeat,getIds} from '@utils/tools.js';
 
 export function preSetCheckbody(state,action) {
   let res = Object.assign({},state);
@@ -345,7 +345,11 @@ export function reflashLabels(state,action) {
   const oldValuedLabels = getValuedLabels(res.data);    //旧已填值标签
   const lifeLabels = removeRepeat(newLifeLabels,oldLifeLabels);   //将被保留的生命体征标签
   const newUnlifeLabels = getLifeLabels(action.data,true);    //新非生命体征标签
-  const addTextsArr = checkFullfillText([...lifeLabels,...oldValuedLabels,...newUnlifeLabels]);
+  const ids = getIds(oldValuedLabels);
+  const stayUnlifeLabels = newUnlifeLabels.filter((it)=>{   //已填值的相同标签已被移到上面,这里去重
+    return !ids.includes(it.id);
+  });
+  const addTextsArr = checkFullfillText([...lifeLabels,...oldValuedLabels,...stayUnlifeLabels]);
   res.data = addTextsArr.newArr;
   res.saveText = addTextsArr.saveText;
   res.update = Math.random();

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

@@ -169,7 +169,8 @@ export function changeTextLabel(state,action) {
           localStorage.setItem('radio'+item.id,JSON.stringify([li]));
         }
         //取消原选中状态
-        item.questionDetailList.find((it)=>it.selected==true).selected=false;
+        const sltItem = item.questionDetailList.find((it)=>it.selected==true);
+        sltItem?sltItem.selected=false:'';
       }
       item.labelPrefix = prefix||'';
       item.labelSuffix = suffix||'';

+ 20 - 2
src/store/async-actions/patInfo.js

@@ -9,6 +9,7 @@ import {ISREAD,MODI_LOADING,SETPRE,SETPREDATA,SETADMIN} from "../types/homePage"
 import { initItemList } from '@store/async-actions/tabTemplate';
 import config from '@config/index';
 import {Notify} from '@commonComp';
+import {SHOW_LOADING} from '@store/types/copyRight.js';
 
 const api = {
     getPatInfo: '/patientInfo/getTopPatientInfo',
@@ -176,6 +177,7 @@ export async function getPatientMessage(dispatch, getState){
     patientCode:urlDatas.patientNo,
     recordId:urlDatas.recordId
   };
+
   let res1 = await json(api.getPatInfo, params);
   /*console.log(res1);
   console.log(1);*/
@@ -185,12 +187,28 @@ export async function getPatientMessage(dispatch, getState){
   let data1 = {},data2 = {};
   if(res1.data.code=='0'){
     data1 = res1.data.data;
-    getDoctorConfig(data1.doctorId,dispatch);
+    data1.doctorId&&getDoctorConfig(data1.doctorId,dispatch);
+  }else{
+    dispatch({type:MODI_LOADING,flag:false});
+    dispatch({type:SHOW_LOADING,flag:true,text:res1.data.msg,lType:'warning'});
+    return;
   }
   if(res2.data.code=='0'){
     data2 = res2.data.data;
+  }else{
+    dispatch({type:MODI_LOADING,flag:false});
+    dispatch({type:SHOW_LOADING,flag:true,text:res2.data.msg,lType:'warning'});
+    return;
+  }
+  //患者或医生信息有误,禁止操作
+  if(Object.keys(data1).length>0&&Object.keys(data2).length>0&&data1.doctorId){
+    dispatch({type:SHOW_LOADING,flag:false});
+  }else{
+    dispatch({type:MODI_LOADING,flag:false});
+    dispatch({type:SHOW_LOADING,flag:true,text:"获取医生信息失败",lType:'warning'});
+    return;
   }
-  getAdminCheckout(data1.doctorId,data1.hospitalId,dispatch)
+  getAdminCheckout(data1.doctorId,data1.hospitalId,dispatch);
   dispatch({
     type: GET_PATIENT_MESSAGE,
     data:Object.assign(data1,data2)

+ 5 - 4
src/store/async-actions/preIcss.js

@@ -5,7 +5,7 @@ import { GET_PREC_LIST,SET_PREC_SHOW } from "../types/preIcss";
 import config from '@config/index';
 import {Notify} from '@commonComp';
 
-export const getPreMsg = () => {
+export const getPreMsg = (sign) => {
     let baseList = store.getState().patInfo.message;
     json('/api/prec/inquiryInfo/hisInquirysForIcss', {
         "isHaveDetail":1,
@@ -18,9 +18,10 @@ export const getPreMsg = () => {
         if (data.code == 0) {
             let result = data.data;
             if(result.length > 0){
-              store.dispatch({type:SET_PREC_SHOW})
+                !sign&&store.dispatch({type:SET_PREC_SHOW})
             }else{
-              Notify.info('暂无预问诊信息');
+                sign&&store.dispatch({type:SET_PREC_SHOW})
+                !sign&&Notify.info('暂无预问诊信息');
             }
             store.dispatch({type:GET_PREC_LIST,preData:result});
         } else {
@@ -55,6 +56,6 @@ export const tellPred = () => {
         "patientSex": idcon.patientSex=='男'?1:idcon.patientSex=='女'?2:3,
         "patientBirthday": idcon.birthday
     },true).then((res) => {
-      
+        getPreMsg(1)
     })
 }

+ 5 - 5
src/store/async-actions/pushMessage.js

@@ -21,13 +21,13 @@ export const billing = (mdata,boxMark) => {
   const state = getState();
    const checkBody = state.checkBody.data;
    let diagMain = state.diagnosticList.diagnosticList.length>0&&state.diagnosticList.diagnosticList[0]
-   let getCheck = boxMark==2&&!(checkBody&&checkBody.length>0&&!checkBody[0].full);
+   //let getCheck = boxMark==2&&!(checkBody&&checkBody.length>0&&!checkBody[0].full);
   const emrData = getEMRParams();
   //mdata为主诉无标签直接输入时的内容,symptom参数传主诉+现病史文本
   const mainData =  mdata?(emrData.current + mdata):(emrData.current + emrData.main);
-  const feaType = getCheck?"42,41,5,6,7":"42,5,6,7";    //41只返回查体模板,4只返回查体高亮
+  const feaType = "42,5,6,7";    //41只返回查体模板,4只返回查体高亮
    getBigPush(feaType,mainData,true).then((data) => {
-        let {dis, lab, pacs,vitalIds,moduleVital} = data.data.data||{};
+        let {dis, lab, pacs,vitalIds} = data.data.data||{};
         lab = lab||[];
         pacs = pacs||[];
         // console.log('推送数据', data.data.data);
@@ -88,10 +88,10 @@ export const billing = (mdata,boxMark) => {
             setPushEmergency: setPushEmergency||[],
             setPushEmergencyIdx:setPushEmergencyIdx
         });
-        dispatch({
+        /*dispatch({
           type:PRESET,
           data:moduleVital
-        });
+        });*/
         //查体高亮标签
         dispatch({
           type:SET_IMPORT_CHECKBODY_LABEL,

+ 2 - 0
src/store/reducers/copyRight.js

@@ -29,6 +29,8 @@ export default function(state = initState, action) {
       return getVersion(state, action);
     case SHOW_LOADING:
       res.loading = action.flag;
+      res.loadingText=action.text;
+      res.loadingType=action.lType;
       return res;
     default:
       return state;

+ 1 - 1
src/store/reducers/pushMessage.js

@@ -67,7 +67,7 @@ export default function(state = initState, action) {
       res.tableList = action.data;
       return res;
     case SHOW_TABLE_LIST://显示、隐藏量表列表
-      res.showHide = Object.assign({},res.showHide,{[action.name]:action.value,isPop:action.isPop},action.item);
+      res.showHide = Object.assign({},res.showHide,{[action.name]:action.value},action.item);
       return res;
     case SET_CHRONIC_PUSHS:
       res.chronicPushItems = action.data;

+ 2 - 2
src/utils/config.js

@@ -1,8 +1,8 @@
 // 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.236:5050';//后端接口访问地址
-// const host='http://192.168.2.241: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'; //周铁刚

+ 16 - 6
src/utils/tools.js

@@ -1,8 +1,8 @@
 import store from '@store';
-import {CLEAR_MAIN_SUIT} from '@store/types/mainSuit';
-import {CLEAR_CURRENT_ILL} from '@store/types/currentIll';
-import {CLEAROTHERHISTORY} from '@store/types/otherHistory';
-import {CLEARCHECKBODY,SET} from '@store/types/checkBody';
+import {CLEAR_MAIN_SUIT,CLEAR_SEARCH} from '@store/types/mainSuit';
+import {CLEAR_CURRENT_ILL,CURRENT_CLEAR} from '@store/types/currentIll';
+import {CLEAROTHERHISTORY,OTHERHIS_CLEAR} from '@store/types/otherHistory';
+import {CLEARCHECKBODY,SET,CHECKBODY_CLEAR} from '@store/types/checkBody';
 import {clearAssistData,addAssistLabel} from '@store/actions/assistCheck';
 import {clearAllLabel,addLabel} from '@store/actions/inspect';
 import {CLEAR_ALL_DIAG} from '@store/types/diagnosticList';
@@ -18,7 +18,6 @@ import down from '@images/down.png';
 import $ from 'jquery';
 import {CLEAR_SEARCH_PARAM} from "../store/types/print";
 
-
 /***
  * 工具函数
  *
@@ -957,8 +956,9 @@ function dateParser(timestamp,link = '-'){
 
 //获取组合组件已填文字填入saveText
 function getSaveText(data){//console.log(data)
+  const hasValue = data.questionMapping.findIndex((it)=>it.value!==undefined)!==-1;   //有值时血压类型中文本标签要加入值
   const arr = data.questionMapping.map((it)=>{
-    return it.value?(it.labelPrefix||'')+(it.value||'')+(it.labelSuffix||''):'';
+    return it.value?(it.labelPrefix||'')+(it.value||'')+(it.labelSuffix||''):(hasValue&&!notTextLabel(it)?it.name:'');
   });
   return arr.join('');
 }
@@ -1627,6 +1627,16 @@ function handleMouseUp(param){
       type:SET_SELECTED_AREA,
       data:{i,boxMark,dir:'end'}
     });
+    //清空搜索结果以关闭搜索弹窗
+    const map = {
+      '1':CLEAR_SEARCH,
+      '2':CURRENT_CLEAR,
+      '3':OTHERHIS_CLEAR,
+      '4':CHECKBODY_CLEAR
+    };
+    store.dispatch({
+      type:map[boxMark]
+    });
     window.getSelection().empty();
   }
 }