Kaynağa Gözat

Merge remote-tracking branch 'origin/ChronicMag' into dev/new1

zhouna 6 yıl önce
ebeveyn
işleme
3afe909677
41 değiştirilmiş dosya ile 743 ekleme ve 435 silme
  1. 1 1
      src/common/less/base.less
  2. 1 1
      src/common/less/variables.less
  3. 2 2
      src/components/Advice/index.jsx
  4. 2 1
      src/components/AssessResult/ChartItem/index.jsx
  5. 162 113
      src/components/AssessResult/ScaleItem/index.jsx
  6. 44 13
      src/components/AssessResult/index.jsx
  7. 25 1
      src/components/AssessResult/index.less
  8. 193 50
      src/components/ChronicInfo/index.jsx
  9. 3 2
      src/components/ChronicInfo/index.less
  10. 1 1
      src/components/CurrentIll/index.jsx
  11. 0 1
      src/components/DiagnosticList/index.jsx
  12. 1 2
      src/components/MainSuit/index.jsx
  13. 9 17
      src/components/Operation/index.jsx
  14. 0 12
      src/components/PrintPreview/index.jsx
  15. 1 1
      src/components/PushItems/index.jsx
  16. 62 48
      src/components/ScaleTable/index.jsx
  17. 1 3
      src/components/Treat/AdverseReactions/index.jsx
  18. 4 0
      src/components/Treat/AdverseReactions/index.less
  19. 2 3
      src/components/Treat/DrugHistory/index.jsx
  20. 4 4
      src/components/Treat/FollowUp/index.jsx
  21. 1 1
      src/components/Treat/index.jsx
  22. 3 4
      src/containers/AdviceContainer.js
  23. 9 18
      src/containers/AssessResult.js
  24. 56 13
      src/containers/ChronicInfo.js
  25. 0 1
      src/containers/CurrentIll.js
  26. 4 2
      src/containers/DiagnosticList.js
  27. 2 16
      src/containers/MainSuit.js
  28. 0 2
      src/containers/PushItemsContainer.js
  29. 8 10
      src/containers/ScaleTable.js
  30. 1 1
      src/modules/HomePage/index.jsx
  31. 1 12
      src/store/actions/currentIll.js
  32. 0 1
      src/store/actions/mainSuit.js
  33. 18 9
      src/store/async-actions/diagnosticList.js
  34. 57 30
      src/store/async-actions/fetchModules.js
  35. 5 8
      src/store/async-actions/homePage.js
  36. 1 1
      src/store/async-actions/pushMessage.js
  37. 18 10
      src/store/async-actions/treat.js
  38. 11 1
      src/store/reducers/assessResult.js
  39. 2 1
      src/store/types/assessResult.js
  40. 14 12
      src/utils/jqprint.js
  41. 14 6
      src/utils/tools.js

+ 1 - 1
src/common/less/base.less

@@ -63,4 +63,4 @@ html,body {
 }
 :global(.mainsuit-box) {
     
-}
+}

+ 1 - 1
src/common/less/variables.less

@@ -183,4 +183,4 @@
 .orange-border{
   border:1px solid @import-color;
   //color: @import-color!important;
-}
+}

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

@@ -66,7 +66,7 @@ class Advice extends Component{
 
   render(){
     const {advice} = this.props.pushMessage;
-    const {isRead, isFirstMainDiag, followUp, hasFollowUp, setFollowUp} = this.props
+    const {isRead, isFirstMainDiag, followUp, hasFollowUp, saveFollowUp} = this.props
     let scheme = advice.scheme && advice.scheme.map((item, index) => {
       return <p>{item.treatment.map((it,ii) =>{
         return(it.treatmentStr && it.treatmentStr.length > 0 ? 
@@ -93,7 +93,7 @@ class Advice extends Component{
             {/* {advice.commontreatment && <div className={style['treat-input']}  onInput={this.handleComTreatInput}  contentEditable={true} style = {{outline: 'none'}}></div>} */}
             {<Textarea value={advice.commontreatment} isRead={isRead} handleChangeAssistValue={this.handleComTreatInput} ></Textarea>}
         </div>}
-        {!isFirstMainDiag && <FollowUp  noTitle="true"   setFollowUp={setFollowUp} followUp = {followUp} isRead={isRead}></FollowUp>}
+        {!isFirstMainDiag &&<div><FollowUp  noHeader="true" textStyle={{padding: '0 10px'}}  setFollowUp={saveFollowUp} followUp = {followUp} isRead={isRead}></FollowUp></div>}
         {advice.scheme && advice.scheme.length > 0 &&<div contentEditable='false' className={style['scheme']}>
           {advice.scheme && advice.scheme.length > 0  && <h1>治疗方案</h1>}
           {scheme}

+ 2 - 1
src/components/AssessResult/ChartItem/index.jsx

@@ -3,6 +3,7 @@ import style from "../index.less";
 import { Radio} from '@commonComp';
 import echarts from 'echarts';
 import config from "@config";
+import 'zrender/lib/svg/svg';
 /**
  * 来源于后台数据
  * 图表类型
@@ -130,7 +131,7 @@ class Chart extends Component{
     const xAxis = getXAxisArr(type);
     const id = endDate?'chart'+endDate+index:'chart'+index;
     let series = [],names=[],inx=-1;
-    let myChart = echarts.init(document.getElementById(id));
+    let myChart = echarts.init(document.getElementById(id) ,null, {renderer: 'svg'});
 
     const interval = {
       week:24,

+ 162 - 113
src/components/AssessResult/ScaleItem/index.jsx

@@ -1,14 +1,12 @@
 import React, { Component } from "react";
 import style from "../index.less";
 import deleteIcon from '@common/images/delete.png';
-import tableIcon from '@common/images/table.png';
-import printIcon from '@common/images/team.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 ScaleTable from '@containers/ScaleTable';
-import $ from "jquery";
+import Notify from '@commonComp/Notify';
+import {deepClone} from '@utils/tools';
 /**
  * 来源于页面选择
  *
@@ -17,24 +15,26 @@ 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:'',
-      possible:props.possible||{},
-      radioVal:props.radioVal||{},
-      formulaId:''
+      radioVal:Object.assign({},radioVal)||{},
+      formulaId:'',
+      text:props.text,
+      formulaData:{},       //计算公式值
+      isFormulaConfirm:false,
     };
     this.getItems = this.getItems.bind(this);
     this.getDetailItems = this.getDetailItems.bind(this);
-    this.showScaleFn = this.showScaleFn.bind(this);
-    this.closeScaleFn = this.closeScaleFn.bind(this);
     this.showOption = this.showOption.bind(this);
     this.closeOption = this.closeOption.bind(this);
     this.closeFormula = this.closeFormula.bind(this);
-    this.onPrint = this.onPrint.bind(this);
+    this.handleInputformula =this.handleInputformula.bind(this);
   }
   showOption(id){
     this.setState({
@@ -46,48 +46,134 @@ class ScaleItem extends Component {
       optionId:null
     })
   }
-  confirmOption(parent,pIndex){
+  confirmOption(){
+    const {handleRes} = this.props;
     const {radioVal,possible} = this.state;
-    this.setState({
+    handleRes&&handleRes({
       possible:Object.assign({},possible,radioVal),
       radioVal:Object.assign({},possible,radioVal),//不设置radioVal只有最近一次选中的值
-      optionId:null
-    })
+    });
+    this.closeOption();
   }
-  handleRadio(item,parent,pIndex){
-    let {radioVal} = this.props;
+  handleShowScale(item,parentId){
+    const {showScaleFn,closeAssess} = this.props;
+    closeAssess&&closeAssess();    //关闭评估弹窗
+    showScaleFn&&showScaleFn(item,parentId);        //显示量表
+
+  }
+  handleRadio(item,parent){
+    let {result} = this.props;
+    let radioVal = result&&result.radioVal;
     this.setState({
-      radioVal:Object.assign({},radioVal,{[pIndex]:item.detailName})
+      radioVal:Object.assign({},radioVal,{[parent.id]:item.detailName})
     })
   }
-  handleForRadio(){
-
+  handleForRadio(id,idd, ind){
+    const {formulaData} = this.state;
+    const obj = JSON.parse(JSON.stringify(formulaData));
+    const data = obj&&obj[id];
+    if (data) {
+      for(let z = 0; z <  data.content.details[idd].details.length; z++) {
+        data.content.details[idd].details[z].state = 0;
+      }
+      data.content.details[idd].details[ind].state = 1;
+    };
+    this.setState({
+      formulaData:obj
+    });
   }
-  showFormula(id){
+  showFormula(id,it){
+    const {formulaData} = this.state;
+    const obj = JSON.parse(JSON.stringify(formulaData)||{});
+    obj[id] = it;
     this.setState({
-      formulaId:id
-    })
+      formulaId:id,
+      formulaData:obj
+    });
   }
-  confirmFormula(){
-
+  confirmFormula(){//计算公式确定
+    this.setState({
+      isFormulaConfirm:true,
+      formulaId:null
+    });
   }
   closeFormula(){
     this.setState({
       formulaId:null
     })
   }
+  calcuFormula(j, v, i) { //计算公式计算
+    const { calcuFormula,chronicPushItems } = this.props;
+    const {formulaId,formulaData} = this.state;
+    const it =formulaData&&formulaData[formulaId];
+    let allHasInfo = true
+    for (let i = 0; i < it.content.details.length; i++) {
+      if(it.content.details[i].controlType == 2) {  //输入框类型的有没有填值
+        if(!it.content.details[i].value) {
+          allHasInfo = false
+        }
+      } else if(it.content.details[i].controlType == 1) {
+        let hasSelect = false
+        for( let z = 0; z <it.content.details[i].details.length; z++) {
+          if(it.content.details[i].details[z].state == 1) {
+            hasSelect= true
+          }
+        }
+        if(!hasSelect) {
+          allHasInfo = false
+        }
+      }
+
+    }
+    if(allHasInfo) { //所有都有值,则计算
+      // delete it.content.resultz
+      let param = {
+        type: 2,
+        data: it,
+        disId: v.id,
+        pIndex: j,
+        ppIndex: i,
+      }
+      calcuFormula({param,chronicPushItems,isPop:true})
+    } else {  //不是所有值都填过了
+      Notify.info('请填写计算公式内容')
+    }
+  }
+  handleInputformula(id,idd,text) {
+    const {formulaData} = this.state;
+    const obj = deepClone(formulaData);
+    const data = obj&&obj[id];
+    if (data) {
+      data.content.details[idd].value = text;
+    }
+    this.setState({
+      formulaData:obj
+    });
+  }
   getDetailItems(item,i){
     let arr = [],temp='';
-    const {indexs} = this.props;
-    const {optionId,radioVal,possible,formulaId} = this.state;
-    item.details.map((it,j)=>{
+    const {indexs,result,formulaResult,calcuResult} = this.props;
+    const {optionId,formulaId,radioVal,formulaData,isFormulaConfirm} = this.state;
+    const possible=result&&result.possible;
+
+    item.details.map((its,j)=>{
       if(indexs[i]&&indexs[i].includes(j)){
-        if(it.type==1){     //量表
-          temp =<span className={style['scale']} onClick={()=>this.showScaleFn(it.content.name,it.content.id,item.id)}>【{it.content.name}】</span>;
-        }else if(it.type==2){      //计算公式
-          temp = <div className={style['results']}>
+        let it=null;
+        if(its.type==1){     //量表
+          it=deepClone(its);
+          let scaleRes=formulaResult&&formulaResult[it.content.id]&&formulaResult[it.content.id].calcalculate;
+
+          temp =<span className={style['scale']}
+                      onClick={()=>this.handleShowScale(it.content,item.id)}>
+                        {scaleRes&&scaleRes.result?('结果:'+scaleRes.result.value+" "+scaleRes.result.text+' 【'+it.content.name+'】'):'【'+it.content.name+'】'}
+                        </span>;
+        }else if(its.type==2){      //计算公式
+          it=formulaData[formulaId]||deepClone(its);
+          const showRes = calcuResult[item.id]||it.content.result;
+          const cresult = showRes&&showRes[1]&&showRes[1].text;
+                    temp = <div className={style['results']}>
                     <span>计算公式:</span>
-                    <span className={style["blue"]} onClick={this.showFormula.bind(this,item.id)}>请选择</span>
+                    <span className={style["blue"]} onClick={this.showFormula.bind(this,item.id,it)}>{cresult?cresult:'请选择'}</span>
                     <img src={level1} />
                     <MiniToast title={it.content.name}
                                icon={allTableIcon}
@@ -96,75 +182,73 @@ class ScaleItem extends Component {
                                confirm={this.confirmFormula.bind(this,item,i)}
                                footer="true">
                       <table>
-                        {it.content.details.map((item,idd)=>{
-                          if(item.controlType==0){//单选
+                        {it.content.details.map((item1,idd)=>{
+                          if(item1.controlType==1){//单选
                             return <tr>
                               <td>
-                                <span>{'请选择'+item.name+':'}</span>
+                                <span>{'请选择'+item1.name+':'}</span>
                               </td>
                               <td>
-                                {item.details.map((ii,ind)=>{
+                                {item1.details.map((ii,ind)=>{
                                   return <div className={style["chooseItem"]}>
                                     <Radio label={ii.detailName}
-                                           isSelect={radioVal[i]==ii.detailName}
-                                           handleClick={this.handleForRadio.bind(this,ii,item,i)}>
+                                           isSelect={ii.state == 1}
+                                           handleClick={this.handleForRadio.bind(this,item.id,idd, ind)}>
+                                      >
                                     </Radio>
                                   </div>
                                 })}
                               </td>
                             </tr>
-                          }else if(item.controlType==1){//多选
-
-                          }else if(item.controlType==2){//输入框
+                          }else if(item1.controlType==2){//输入框
                             return <tr>
                               <td>
-                                <span>{'请输入'+item.name+':'}</span>
-                              </td>
-                              <td>
-                                <input type="text" placeholder="请输入"/>
+                                <span>{'请输入'+item1.name+':'}</span>
                               </td>
-
-                            </tr>
-                          }else if(item.controlType==3){//下拉
-                            return <tr>
                               <td>
-                                <span>{'请选择'+item.name+':'}</span>
+                                <input type="text" placeholder="请输入"  value={item1.value} onInput={(e)=>this.handleInputformula(item.id,idd,e.target.value)}/>
                               </td>
                               <td>
-                                {item.details.map((ii,ind)=>{
-                                  return <div className={style["chooseItem"]}>
-                                    <Radio label={ii.detailName}
-                                           isSelect={radioVal[i]==ii.detailName}
-                                           handleClick={this.handleForRadio.bind(this,ii,item,i)}>
-                                    </Radio>
-                                  </div>
-                                })}
+                                <span>{item1.uint}</span>
                               </td>
 
                             </tr>
                           }
                         })}
                       </table>
-                      <div className={style["forMulBtn"]}>计算</div>
+                      <div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,j, item, i)}>计算</div>
+                      <table>
+                        {showRes && Array.isArray(showRes) &&showRes.map((itemResult, resultIndex) => {
+                          return <tr>
+                            <td>
+                              <span>{itemResult.name+':'}</span>
+                            </td>
+                            <td>
+                              <span>{itemResult.text}</span>
+                            </td>
+                          </tr>
+                        })}
+                      </table>
                     </MiniToast>
                 </div>
-        }else if(it.type==3){
+        }else if(its.type==3){
+          it=deepClone(its);
           temp = <div className={style['results']}>
                     <span>可能结果:</span>
-                    <span onClick={this.showOption.bind(this,item.id)} className={style["blue"]}>{possible[i]?possible[i]:'请选择'}</span>
+                    <span onClick={this.showOption.bind(this,item.id)} className={style["blue"]}>{possible&&possible[item.id]?possible[item.id]:'请选择'}</span>
                     <img src={level1} />
                     <MiniToast title='结果选择'
                          icon={checkIcon}
                          show={optionId&&optionId==item.id?true:false}
                          close={this.closeOption}
-                         confirm={this.confirmOption.bind(this,item,i)}
+                         confirm={this.confirmOption.bind(this,item.id)}
                          footer="true">
                         <div className={style["infoOption"]}>
-                          <span>是否贫血:</span>
+                          <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[i]==lis.detailName}
+                                     isSelect={radioVal&&radioVal[item.id]==lis.detailName}
                                      handleClick={this.handleRadio.bind(this,lis,item,i)}>
                               </Radio>
                             </div>
@@ -177,7 +261,7 @@ class ScaleItem extends Component {
           <span>{item.name}:</span>
           <div className={style['row']}>{temp}</div>
           <div className={style["recommend"]} onClick={()=>this.props.handleRemove(i,j)}>
-            <img src={deleteIcon} />
+            <img className={style["deleteIcon"]} src={deleteIcon} />
           </div>
         </li>);
       }
@@ -190,68 +274,33 @@ class ScaleItem extends Component {
       return this.getDetailItems(it,i);
     });
   }
-  showScaleFn(name,id,pid){
-    const {getScaleData,scaleInfo} = this.props;
-    this.setState({
-      scaleId:id,
-      scaleName:name,
-      parentId:pid,
-      showScale:true
-    });
-    if(!scaleInfo[id]){
-      getScaleData&&getScaleData({id,name});
-    }
-  }
-  closeScaleFn(){
+  handleInput(e){
+    const text = e.target.value;
     this.setState({
-      showScale:false
-    })
-  }
-  onPrint() {
-    let dom = this.state.showTable?$("#printcontent"):$("#AssistResult");
-    dom.jqprint({
-      debug: false,
-      importCSS: true,
-      printContainer: true,
-      operaSupport: false,
+      text
     });
   }
-  componentDidMount(){
-    if(this.props.text){
-      this.$area.current.value = this.props.text;
-    }
-  }
   render() {
-    const {title,handleInp,scaleInfo,disabled} = this.props;
-    const {scaleName,scaleId,parentId,showScale} = this.state;
-    const footer = <div className={style['footer']}>
-      <span className={style['print']} onClick={this.onPrint}><img src={printIcon} alt=""/>打印</span>
-      <span className={style['okBtn']} onClick={()=>{}}>确定</span>
-    </div>;
+    const {title,handleInp,disabled,isRecommend,formulaResult} = this.props;
     return <div className={style['assess-item']}>
-      <h2>{title}</h2>
+      {isRecommend?'':<h2>{title}</h2>}
       <div className={style['item-content']}>
         <ul>
           {
             this.getItems()
           }
-          <li>
+          {isRecommend?'':<li>
             <textarea className={style['edit-row']}
                       ref={this.$area}
-                      name="supplement"
-                      rows="6"
-                      placeholder='评估描述' onBlur={disabled?null:(e)=>handleInp(e.target.value)} disabled={disabled}></textarea>
-          </li>
+                      type="text"
+                      disabled={disabled}
+                      placeholder='评估描述'
+                      onBlur={()=>handleInp(this.state.text)}
+                      onInput={this.handleInput.bind(this)}>{this.state.text}</textarea>
+            <div className={style['textareaStatic']}>评估描述:{this.state.text}</div>
+          </li>}
         </ul>
       </div>
-      {showScale?<ComplexModal onclose={this.closeScaleFn} footer={footer}
-                               title={scaleName}
-                               icon={tableIcon}
-                               top={20}
-                               bottom={20}
-                               width={820}>
-        <ScaleTable data={scaleInfo[scaleId]} title={scaleName} tableId={scaleId} parentId={parentId}></ScaleTable>
-      </ComplexModal>:''}
     </div>;
   }
 }

+ 44 - 13
src/components/AssessResult/index.jsx

@@ -5,21 +5,30 @@ import ChooseItem from "./ChooseItem";
 import ScaleItem from "./ScaleItem";
 import Information from '../Information'
 import ChartItem from "./ChartItem";
+import Notify from '@commonComp/Notify';
+import {readyKeepHistory} from '@utils/tools';
 
 class AssessResult extends Component {
   constructor(props) {
     super(props);
-    const chooseSelecteds = JSON.parse(JSON.stringify(props.chooseSelecteds));
-    const wholeIndexs = JSON.parse(JSON.stringify(props.wholeIndexs));      //深度复制,Object.assgin为浅复制,下下级会同源
+    const chooseSelecteds = JSON.parse(JSON.stringify(props.chooseSelecteds)||{});
+    const wholeIndexs = JSON.parse(JSON.stringify(props.wholeIndexs)||{});      //深度复制,Object.assgin为浅复制,下下级会同源
+    //const wholeResults = JSON.parse(JSON.stringify(props.wholeResults)||{});
+
     this.state={
       chooseSelecteds:chooseSelecteds,     //大数据选择模块
       chartTimeTypes:{},      //图表模块
       wholeAssessItems:wholeIndexs,     //整体评估模块
-      wholeAssessText:props.wholeAssessText||''     //整体评估补充说明
-    }
+      wholeAssessText:props.wholeAssessText||'',     //整体评估补充说明
+      wholeResults:{
+        possible:Object.assign({},props.possible),
+        radioVal:Object.assign({},props.radioVal)
+      },
+    };
     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(){
     //获取评估
@@ -38,6 +47,13 @@ class AssessResult extends Component {
       wholeAssessItems: items
     });
   }
+  handleResult(opt){
+    const {wholeResults} = this.state.wholeResults;
+    const res = Object.assign({},wholeResults,opt);
+    this.setState({
+      wholeResults:res
+    });
+  }
   handleChooseChange(i,selects){
     const {chooseSelecteds} = this.state;
     this.setState({
@@ -52,13 +68,20 @@ class AssessResult extends Component {
   }
   componentWillUnmount(){
     //点确定关闭弹窗时把参数传到父组件去
-    const {handleSave,isAssessConfirm,clearChartData} = this.props;
+    const {handleSave,isAssessConfirm,clearChartData,handleSaveCalcu,isRecommend} = this.props;
     clearChartData&&clearChartData();
-    isAssessConfirm&&handleSave(this.state);
+    if(!isRecommend&&isAssessConfirm && readyKeepHistory() == 1){
+      Notify.error("主诉不能为空");
+    }else if(!isRecommend&&isAssessConfirm && readyKeepHistory() == 2){
+      Notify.info('诊断不能为空');
+    }
+    handleSaveCalcu&&handleSaveCalcu(this.state.wholeResults);
+    isAssessConfirm&&handleSave(this.state,readyKeepHistory(),isRecommend);
   }
   handoutTypes(item,i){
-    const {getIndexData,indexData,timeTypes,wholeAssessData,scaleInfo,getScaleInfo,possible,radioVal} =this.props;
-    const {chooseSelecteds,wholeAssessItems,wholeAssessText,chartTimeTypes} = this.state;
+    const {getIndexData,indexData,timeTypes,wholeAssessData,closeAssess,showScaleFn,calcuFormula,isRecommend,chronicPushItems,
+      formulaResult,calcuResult} =this.props;
+    const {chooseSelecteds,wholeAssessItems,wholeAssessText,chartTimeTypes,wholeResults} = this.state;
     const chartData = indexData;
     const name = item.regionName+":";
     const list = item.data&&item.data.rows;
@@ -68,12 +91,17 @@ class AssessResult extends Component {
                           data={wholeAssessData}
                           handleRemove={this.handleScaleDel}
                           handleInp={this.handleScaleText}
+                          handleRes={this.handleResult}
                           text={wholeAssessText}
                           indexs={wholeAssessItems}
-                          scaleInfo={scaleInfo}
-                          possible={possible}
-                          radioVal={radioVal}
-                          getScaleData={getScaleInfo}></ScaleItem>;
+                          result={wholeResults}
+                          showScaleFn={showScaleFn}
+                          calcuFormula={calcuFormula}
+                          calcuResult={calcuResult}
+                          formulaResult={formulaResult}
+                          isRecommend={isRecommend}
+                          chronicPushItems={chronicPushItems}
+                          closeAssess={closeAssess}></ScaleItem>;
       case 1:     //数据来源于大数据
         return <ChooseItem title={name}
                            data={list}
@@ -91,7 +119,10 @@ class AssessResult extends Component {
     }
   }
   render() {
-    const { onClose, data } = this.props;
+    //const {data} =this.props;
+    let { isRecommend } = this.props;
+    const wholeItems = [{regionName: "整体评估",regionType: "0"}];
+    const data = isRecommend?wholeItems:this.props.data;
     return <div className={style['assess-cont']} id="AssistResult">
       <div className={style['printShow']}>
         <Information></Information>

+ 25 - 1
src/components/AssessResult/index.less

@@ -146,8 +146,32 @@
     margin-right: 20px;
   }
 }
+.forMulBtn{
+  height: 32px;
+  line-height: 32px;
+  text-align: center;
+  color: #fff;
+  // background: #DBDBDB;
+  background: #DFEAFE;
+  border-radius: 4px;
+  cursor: auto;
+  margin-top: 15px;
+}
+.textareaStatic {
+  display: none;
+  line-height: 20px;
+  white-space: pre;
+  *white-space: pre;
+  *word-wrap: break-word;
+  border: 1px solid #bfbfbf;
+  border-radius: 4px;
+  padding: 5px;
+}
 @media print {
-  .printShow {
+  .printShow,.textareaStatic {
     display: block;
   }
+  .deleteIcon,.edit-row {
+    display: none;
+  }
 }

+ 193 - 50
src/components/ChronicInfo/index.jsx

@@ -13,6 +13,7 @@ import checkIcon from '@common/images/check.png';
 import {ComplexModal,ConfirmModal,MiniToast, Radio,CheckBtn} from '@commonComp';
 import AssessResult from '@containers/AssessResult';
 import ScaleTable from '@containers/ScaleTable';
+import Notify from '@commonComp/Notify';
 import $ from 'jquery';
 
 /***
@@ -38,10 +39,14 @@ class ChronicInfo extends React.Component{
       tableName:'' , //点击的量表名称
       tableId:null ,//点击的量表id
       parentId:null ,
+      parentIndex:null,
       radioVal:{},  //可能结果选择内容
       possible:{},  //可能结果
+      formulaParam: {}, //量表计算公式计算入参
+      showRecommend:false,      //显示推荐结果弹窗
+      isRecommendConfirm:false,   //推荐结果确定
+      isFormulaConfirm:false,     //计算公式确定
     };
-    this.$content = React.createRef();
 
     this.showInfo = this.showInfo.bind(this);
     this.closeInfo = this.closeInfo.bind(this);
@@ -56,6 +61,9 @@ class ChronicInfo extends React.Component{
     this.handleAddAssessItem = this.handleAddAssessItem.bind(this);   //加入病例记录
     this.handleSaveAssess = this.handleSaveAssess.bind(this);       //评估弹窗确定
     this.onPrint = this.onPrint.bind(this); 
+    this.handleForRadio = this.handleForRadio.bind(this);
+    this.showRecommendFn = this.showRecommendFn.bind(this);
+    this.handleSaveCalcu = this.handleSaveCalcu.bind(this);     //保存评估修改的计算和可能结果
   }
 
   onPrint() {
@@ -67,14 +75,20 @@ class ChronicInfo extends React.Component{
       printContainer: true,
       operaSupport: false,
     });
-  }
-  componentWillReceiveProps() {
-    $(this.$content.current)[0].scrollIntoView(true);
+    // setTimeout(() => {//把生成的图片和iframe删掉
+    //   let imgLis = document.querySelectorAll('.canvasImg')
+    //   let iframe = document.getElementsByTagName('iframe')
+    //   for(let i = 0;i < imgLis.length;i++){
+    //     imgLis[i].remove()
+    //   }
+    //   for(let i = 0;i < iframe.length;i++){
+    //     iframe[i].remove()
+    //   }
+    // }, 500);
   }
   
   showTableList(id){//量表按钮
-    const {getTableList,questionId} = this.props;
-    // getTableList(questionId&&questionId.id);
+    const {getTableList} = this.props;
     if(id){
       getTableList(id);
     }
@@ -88,12 +102,12 @@ class ChronicInfo extends React.Component{
     this.close()
   }
 
-  showInfo(id){//显示静态知识
+  showInfo(id){
     // 静态知识显示在提示信息里(4-18)
     const {getInfomation} = this.props;
     const param = {
-      // id:id,
-      id:40738,
+      id:id,
+      // id:40738, //目前只有“肾功能不全”有数据
       type:22,
     }
     getInfomation&&getInfomation(param);
@@ -108,7 +122,8 @@ class ChronicInfo extends React.Component{
   }
   showOption(id){
     this.setState({
-      optionId:id
+      optionId:id,
+      formulaId:null //关闭计算公式
     })
   }
   closeOption(){
@@ -116,13 +131,13 @@ class ChronicInfo extends React.Component{
       optionId:null
     })
   }
-  showTable(it,parentId){
+  showTable(it,parentId,parentIndex){
     const {formulaResult,scaleInfo} = this.props;
-    // 密西根糖尿病周围神经病评分(MDNS) 为例 id:40744
+    // 密西根糖尿病周围神经病评分(MDNS), id:40744
     const item = {
       id:it.id,
       name:it.name
-    }
+    };
     // 判断:store里已经有该量表就无需重新调接口
     if(scaleInfo&&scaleInfo[it.id]){
       this.props.hideList({name:'showTable',value:true});
@@ -133,7 +148,10 @@ class ChronicInfo extends React.Component{
     this.setState({
       tableName:it.name,
       tableId:it.id,
-      parentId:parentId
+      parentId:parentId,
+      parentIndex:parentIndex,
+      formulaId:null, //关闭计算公式和可能结果弹窗
+      optionId:null
     })
   }
   closeTable(){
@@ -150,10 +168,16 @@ class ChronicInfo extends React.Component{
       isAssessConfirm:false
     });
   }
-
+  showRecommendFn(){
+    this.setState({
+      isRecommendConfirm:false,
+      showRecommend:!this.state.showRecommend,
+    });
+  }
   showFormula(id){//计算公式
     this.setState({
-      formulaId:id
+      formulaId:id,
+      optionId:null  //关闭可能结果
     })
   }
   closeFormula(){
@@ -165,6 +189,15 @@ class ChronicInfo extends React.Component{
     const {addAssessItem} = this.props;
     addAssessItem(v,pIndex,i);
   }
+  handleSaveRecommend(){
+    this.setState({
+      isRecommendConfirm:true
+    });
+    const that=this;
+    setTimeout(()=>{
+      that.showRecommendFn();
+    });
+  }
   handleSaveAssess(){
     this.setState({
       isAssessConfirm:true
@@ -173,18 +206,40 @@ class ChronicInfo extends React.Component{
     setTimeout(()=>{
       that.showAssessFn();
     });
-
   }
-  handleForRadio(item,parent,pIndex){//计算公式
-
+  handleInputformula(v,i, j,idd,  e) {
+    const { data, setChronicPush } = this.props
+    const text = e.target.value
+    if (data[i].details) {
+      data[i].details[j].content.details[idd].value = text
+    } 
+    
+    const data1 = JSON.parse(JSON.stringify(data))
+    
+    setChronicPush(data1)
+  }
+  handleForRadio(ii,v,i, j,idd, ind){//计算公式
+    const { data, setChronicPush } = this.props
+    if (data[i].details) {
+      for(let z = 0; z <  data[i].details[j].content.details[idd].details.length; z++) {
+        data[i].details[j].content.details[idd].details[z].state = 0
+      }
+      data[i].details[j].content.details[idd].details[ind].state = 1
+    } 
+    
+    const data1 = JSON.parse(JSON.stringify(data))
+    setChronicPush(data1)
   }
   confirmFormula(){//计算公式确定
-
+    this.setState({
+      isFormulaConfirm:true,
+      formulaId:null
+    });
   }
-  handleRadio(item,parent,pIndex){//可能结果
+  handleRadio(item,parent){//可能结果
     let {radioVal} = this.props;
     this.setState({
-      radioVal:Object.assign({},radioVal,{[pIndex]:item.detailName})
+      radioVal:Object.assign({},radioVal,{[parent.id]:item.detailName})
     })
   }
   confirmOption(parent,pIndex){//可能结果确定
@@ -194,18 +249,58 @@ class ChronicInfo extends React.Component{
       radioVal:Object.assign({},possible,radioVal),//不设置radioVal只有最近一次选中的值
       optionId:null
     })
-    
+  }
+  handleSaveCalcu(obj){
+    this.setState({
+      possible:Object.assign({},obj.possible),
+      radioVal:Object.assign({},obj.radioVal),//不设置radioVal只有最近一次选中的值
+    })
+  }
+  calcuFormula(it,j, v, i) { //计算公式计算
+    const { calcuFormula, data ,chronicPushItems} = this.props
+    let allHasInfo = true
+    for (let i = 0; i < it.content.details.length; i++) {
+      if(it.content.details[i].controlType == 2) {  //输入框类型的有没有填值
+        if(!it.content.details[i].value) {
+          allHasInfo = false
+        }
+      } else if(it.content.details[i].controlType == 1) {
+        let hasSelect = false
+        for( let z = 0; z <it.content.details[i].details.length; z++) {
+          if(it.content.details[i].details[z].state == 1) {
+            hasSelect= true
+          }
+        }
+        if(!hasSelect) {
+          allHasInfo = false
+        }
+      }
+
+    }
+    if(allHasInfo) { //所有都有值,则计算
+      // delete it.content.resultz
+      let param = {
+        type: 2,
+        data: it,
+        disId: v.id,
+        pIndex: j,
+        ppIndex: i
+      }
+      calcuFormula({param,chronicPushItems})
+    } else {  //不是所有值都填过了
+      Notify.info('请填写计算公式内容')
+    }
   }
   getDetail(){
-    const {data,indexs,scaleInfo,formulaResult} = this.props;
-    const {showInfo,showOption,infoId,formulaId,optionId,possible,radioVal} = this.state;
+    const {data,indexs,formulaResult} = this.props;
+    const {formulaId,optionId,possible,radioVal,isFormulaConfirm} = this.state;
     let list = data&&data.map((v,i)=>{
                     return <div className={style["list"]}>
-                      <p ref={this.$content}>
-                        <span>{'患者可能有'+v.name}</span>
-                        <img src={infoPic} className={style["infoPic"]} onClick={this.showInfo.bind(this,v.id)}/>
-                        :
-                      </p>
+                      {v.name?<p>
+                                <span>{'患者可能有'+v.name}</span>
+                                <img src={infoPic} className={style["infoPic"]} onClick={this.showInfo.bind(this,v.id)}/>
+                                
+                              </p>:''}
                       {/*<MiniToast title='静态知识'
                                 icon={allTableIcon}
                                 show={infoId&&infoId==v.id?true:false}
@@ -215,10 +310,10 @@ class ChronicInfo extends React.Component{
                       {v.details&&v.details.map((it,j)=>{
                         if(it.type==1){
                           return <p>
-                                <span className={style["listName"]} onClick={this.showTable.bind(this,it.content,v.id)}>
+                                <span className={style["listName"]} onClick={this.showTable.bind(this,it.content,v.id,i)}>
                                   {'【'+it.content.name+'】'}
-                                  {formulaResult&&formulaResult[it.content.id]?<i>{'结果:'+ formulaResult[it.content.id].text}</i>:''}
-
+                                  {formulaResult&&formulaResult[it.content.id]&&formulaResult[it.content.id].pIndex==i?<i>{'结果:'}{formulaResult[it.content.id].calcalculate&&formulaResult[it.content.id].calcalculate.result.value +' '+ formulaResult[it.content.id].calcalculate.result.text}</i>:''}
+                                  
                                 </span>
                                 {indexs[i]&&indexs[i].includes(j)?<span className={style["addResult"]}>
                                   <img src={added} />
@@ -230,10 +325,11 @@ class ChronicInfo extends React.Component{
                                 }
                               </p>
                         }else if(it.type==2){
+                          const result = it.content.result&&it.content.result[1]&&it.content.result[1].text;
                           return <div className={style["marTop"]}>
                             <span className={style["limit"]}>
                               计算公式结果:
-                              <i className={style["blue"]} onClick={this.showFormula.bind(this,v.id)}>请选择</i>
+                              <i className={style["blue"]} onClick={this.showFormula.bind(this,v.id)}>{isFormulaConfirm&&result?result:'请选择'}</i>
                               <img src={level1} />
                             </span>
                             {indexs[i]&&indexs[i].includes(j)?<span className={style["addResult"]}>
@@ -252,7 +348,7 @@ class ChronicInfo extends React.Component{
                                 footer="true">
                                 <table>
                                 {it.content.details.map((item,idd)=>{
-                                    if(item.controlType==0){//单选
+                                    if(item.controlType==1){//单选
                                       return <tr>
                                         <td>
                                           <span>{'请选择'+item.name+':'}</span>
@@ -261,8 +357,8 @@ class ChronicInfo extends React.Component{
                                           {item.details.map((ii,ind)=>{
                                             return <div className={style["chooseItem"]}>
                                                     <Radio label={ii.detailName}
-                                                             isSelect={radioVal[i]==ii.detailName}
-                                                             handleClick={this.handleForRadio.bind(this,ii,v,i)}>
+                                                             isSelect={ii.state == 1}
+                                                             handleClick={this.handleForRadio.bind(this,ii,v,i, j,idd, ind)}>
                                                       </Radio>
                                                   </div>
                                           })}
@@ -276,7 +372,7 @@ class ChronicInfo extends React.Component{
                                           <span>{'请输入'+item.name+':'}</span>
                                         </td>
                                         <td>
-                                          <input type="text" placeholder="请输入" value={item.value}/>
+                                          <input type="text" placeholder="请输入"  value={item.value} onInput={this.handleInputformula.bind(this,v,i, j,idd)}/>
                                         </td>
                                         <td>
                                           <span>{item.uint}</span>
@@ -292,7 +388,8 @@ class ChronicInfo extends React.Component{
                                           {item.details.map((ii,ind)=>{
                                             return <div className={style["chooseItem"]}>
                                                     <Radio label={ii.detailName}
-                                                            isSelect={radioVal[i]==ii.detailName}
+                                                            // isSelect={radioVal[i]==ii.detailName}
+                                                            isSelect={ii.state == 1}
                                                             handleClick={this.handleForRadio.bind(this,ii,v,i)}>
                                                     </Radio>
                                                   </div>
@@ -303,14 +400,27 @@ class ChronicInfo extends React.Component{
                                     }
                                 })}
                                 </table>
-                                <div className={style["forMulBtn"]}>计算</div>
+                                <div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,it,j, v, i)}>计算</div>
+                                <table>
+                                  {it.content.result && Array.isArray(it.content.result) &&it.content.result.map((itemResult, resultIndex) => {
+                                    return <tr>
+                                        <td>
+                                            <span>{itemResult.name+':'}</span>
+                                        </td>
+                                        <td>
+                                            <span>{itemResult.text}</span>
+                                        </td>
+                                    </tr>
+                                  })}
+                                </table>
+                                
                             </MiniToast>
                           </div>
                         }else if(it.type==3){
                           return <div className={style["marTop"]}>
                             <span className={style["limit"]}>
                               可能结果:
-                              <i onClick={this.showOption.bind(this,v.id)} className={style["blue"]}>{possible[i]?possible[i]:'请选择'}</i>
+                              <i onClick={this.showOption.bind(this,v.id)} className={style["blue"]}>{possible[v.id]?possible[v.id]:'请选择'}</i>
                               <img src={level1} />
                             </span>
                             {indexs[i]&&indexs[i].includes(j)?<span className={style["addResult"]}>
@@ -332,8 +442,8 @@ class ChronicInfo extends React.Component{
                                   {it.content.details&&it.content.details.map((lis,ind)=>{
                                     return <div className={style["chooseItem"]}>
                                       <Radio label={lis.detailName}
-                                               isSelect={radioVal[i]==lis.detailName}
-                                               handleClick={this.handleRadio.bind(this,lis,v,i)}>
+                                               isSelect={radioVal[v.id]==lis.detailName}
+                                               handleClick={this.handleRadio.bind(this,lis,v)}>
                                         </Radio>
                                     </div>
                                   })}
@@ -347,17 +457,20 @@ class ChronicInfo extends React.Component{
     return list;
   }
 
-  render(){
+  render(){console.log('chronic更新')
     const footer = <div className={style['footer']}>
       <span className={style['print']} onClick={this.onPrint}><img src={printIcon} alt=""/>打印</span>
       <span className={style['okBtn']} onClick={()=>this.handleSaveAssess()}>确定</span>
     </div>;
+    const recFooter =<div className={style['footer']}>
+      <span className={style['okBtn']} onClick={()=>this.handleSaveRecommend()}>关闭</span>
+    </div>;
     const scaleFooter = <div className={style['footer']}>
       <span className={style['print']} onClick={this.onPrint}><img src={printIcon} alt=""/>打印</span>
       <span className={style['okBtn']} onClick={()=>this.closeTable()}>确定</span>
     </div>;
-    const {chronicMagItem,showList,tableList,scaleInfo,data,saveAssessInfos,chronicDesease,formulaResult,showHide} = this.props;
-    const {showInfo,showOption,showAssess,isAssessConfirm,tableName,tableId,parentId,possible,radioVal} = this.state;
+    const {chronicMagItem,tableList,saveAssessInfos,chronicDesease,formulaResult,showHide,calcuFormula} = this.props;
+    const {showAssess,isAssessConfirm,tableName,tableId,parentId,parentIndex,isRecommendConfirm,showRecommend,radioVal,possible} = this.state;
     return <div className={style["tips"]} style={{marginBottom:'15px'}}>
               <div className={`${style["tips-title"]} ${style["chronic"]}`}>
                 <div className={style["tips-name"]}>
@@ -376,6 +489,15 @@ class ChronicInfo extends React.Component{
                   <span className={style["tipsDetails"]} onClick={() => this.showTableList(chronicDesease&&chronicDesease.id||chronicMagItem&&chronicMagItem.id)}>量表
                   </span>
                 </div>
+                <div className={style["tips-btn"]} style={{display:chronicMagItem&&chronicMagItem.name||chronicDesease&&chronicDesease.name?'none':'block'}}>
+                <span
+                  className={style["tipsDetails"]}
+                  style={{width:'70px'}}
+                  onClick={this.showRecommendFn}
+                >
+                    推荐结果
+                  </span>
+                </div>
               </div>
               <div className={style["content"]}> 
                   {this.getDetail()}
@@ -386,7 +508,8 @@ class ChronicInfo extends React.Component{
                           return <li onClick={this.handleListClick.bind(this,v)}>
                           <span>
                             {'【'+v.name+'】'}
-                            {formulaResult&&formulaResult[v.id]?<i>{'结果:'+formulaResult[v.id].text}</i>:''}
+                            {/*{formulaResult&&formulaResult[v.id]?<i>{'结果:'+formulaResult[v.id].text}</i>:''}*/}
+                            {formulaResult&&formulaResult[v.id]?<i>{'结果:'}{formulaResult[v.id].calcalculate&&formulaResult[v.id].calcalculate.result.value+' '+ formulaResult[v.id].calcalculate.result.text}</i>:''}
                           </span>
                           </li>
                         })}
@@ -398,7 +521,7 @@ class ChronicInfo extends React.Component{
                       top={20}
                       bottom={20}
                       width={820}>
-                <ScaleTable title={tableName} tableId={tableId} parentId={parentId}></ScaleTable>
+                <ScaleTable title={tableName} tableId={tableId} parentId={parentId} parentIndex={parentIndex}></ScaleTable>
               </ComplexModal>:''}
               {showAssess?<ComplexModal onclose={this.showAssessFn} footer={footer}
                       title='管理和评估'
@@ -407,9 +530,29 @@ class ChronicInfo extends React.Component{
                       bottom={20}
                       width={820}>
                 <AssessResult handleSave={saveAssessInfos}
-                              isAssessConfirm={isAssessConfirm}
+                              handleSaveCalcu={this.handleSaveCalcu}
+                              closeAssess={this.showAssessFn}
+                              showScaleFn={this.showTable.bind(this)}
+                              calcuFormula={calcuFormula}
+                              radioVal={radioVal}
+                              possible={possible}
+                              isAssessConfirm={isAssessConfirm}></AssessResult>
+              </ComplexModal>:''}
+              {showRecommend?<ComplexModal onclose={this.showRecommendFn} footer={recFooter}
+                                        title='推荐结果'
+                                        icon={manageIcon}
+                                        top={20}
+                                        bottom={20}
+                                        width={820}>
+                <AssessResult handleSave={saveAssessInfos}
+                              handleSaveCalcu={this.handleSaveCalcu}
+                              closeAssess={this.showRecommendFn}
+                              isRecommend={true}
+                              showScaleFn={this.showTable.bind(this)}
+                              calcuFormula={calcuFormula}
+                              radioVal={radioVal}
                               possible={possible}
-                              radioVal={radioVal}></AssessResult>
+                              isAssessConfirm={isRecommendConfirm}></AssessResult>
               </ComplexModal>:''}
       </div>
   }

+ 3 - 2
src/components/ChronicInfo/index.less

@@ -209,7 +209,7 @@
       line-height: 24px;
       font-size: 14px;
       // margin-top: 15px;
-      height: 222px;
+      height: 325px;
       overflow-y: auto;
       padding: 10px 0 0 10px;
       li{
@@ -265,7 +265,8 @@
     line-height: 32px;
     text-align: center;
     color: #fff;
-    background: #DBDBDB;
+    // background: #DBDBDB;
+    background: #DFEAFE;
     border-radius: 4px;
     cursor: auto;
     margin-top: 15px;

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

@@ -128,7 +128,7 @@ class CurrentIll extends Component{
   }
 
   getInlineTag(){  
-    const {data,showArr,selecteds,processModuleName,saveText,insertProcess,symptomIds,allModules} = this.props;
+    const {data,showArr,selecteds,saveText,insertProcess,symptomIds,allModules} = this.props;
     const boxMark = '2';
 
     let list = data&&data.map((item,i)=>{

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

@@ -101,7 +101,6 @@ class DiagnosticList extends Component {
     noReferRecord() {
         const { hideReferRecord } = this.props
         hideReferRecord && hideReferRecord()
-        inspectAndAssist()//化验辅检模板
     }
     referCase() {
         const { hideHistoryCaseModal, items } = this.props

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

@@ -62,11 +62,10 @@ class MainSuit extends Component{
 
 
   getInlineTag(){
-    const {datas,showArr,handleTailClick,selecteds,saveText,addModuleName,mainIds,allModules} = this.props;
+    const {datas,showArr,handleTailClick,selecteds,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={addModuleName} handleTailClick={(obj)=>{handleTailClick(obj,saveText)}}></TailInlineTag>*/
         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});

+ 9 - 17
src/components/Operation/index.jsx

@@ -8,7 +8,7 @@ import PreviewContainer from '@containers/PreviewContainer';
 import { ConfirmModal, Notify } from '@commonComp';
 import check_circle from './img/check-circle.png';
 import check_right from './img/check-right.png';
-import {getAllDataList,getAllDataStringList,isAllClear,filterDataArr} from '@utils/tools';
+import {getAllDataList,getAllDataStringList,isAllClear,filterDataArr,readyKeepHistory} from '@utils/tools';
 import store from '@store';
 import $ from 'jquery';
 
@@ -67,8 +67,14 @@ class Operation extends Component {
   }
 
   saveAll(type) {
-    let flg = this.keepHistory();
-    if(flg){
+    let keepState = readyKeepHistory();
+    if(keepState == 1){
+        Notify.info('主诉不能为空');
+        return;
+    }else if(keepState == 2){
+        Notify.info('诊断不能为空');
+        return;
+    }else{
       this.setState({
         type: type,
         okText: '保存',
@@ -81,20 +87,6 @@ class Operation extends Component {
       this.props.diagShowTmp(true)
     }
   }
-  keepHistory(){
-    let baseList = store.getState();
-    let jsonStr = getAllDataStringList(baseList);
-    // console.log(jsonStr)
-    if(filterDataArr(JSON.parse(jsonStr.chief)) == ''){
-        Notify.info('主诉不能为空');
-        return false;
-    }else if(!jsonStr.diag || jsonStr.diag.trim().length < 1){
-        Notify.info('诊断不能为空');
-        return false;
-    }else{
-      return true;
-    }
-  }
   clearAll(type) {
     let baseList = store.getState();
     let jsonData = getAllDataList(baseList);

+ 0 - 12
src/components/PrintPreview/index.jsx

@@ -11,18 +11,6 @@ class PrintPreview extends Component {
     constructor(props) {
         super(props)
     }
-    surePrint(jsonStr){
-        if(filterDataArr(JSON.parse(jsonStr.chief)) == ''){
-          Notify.info('主诉不能为空');
-            return false;
-        }else if(!jsonStr.diag || jsonStr.diag.trim().length < 1){
-            Notify.info('诊断不能为空');
-            return false;
-        }else{
-            this.onPrint();
-            this.props.save(true)
-        }
-    }
     render() {
         const { onClose, visible, preInfo,save } = this.props;
         let baseList = store.getState();

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

@@ -410,7 +410,7 @@ class PushItems extends Component {
                 )}
               </div>
             </div>
-            {chronicPushItems&&chronicPushItems.length>0?<ChronicInfo data={chronicPushItems} indexs={wholeIndexs}></ChronicInfo>:''}
+            {chronicPushItems&&chronicPushItems.length>0?<ChronicInfo data={chronicPushItems}></ChronicInfo>:''}
             <div className={style["tips"]}>
               <h1>
                 <img src={tipsImg} />

+ 62 - 48
src/components/ScaleTable/index.jsx

@@ -4,6 +4,7 @@ import mocks from '../../mock/chronicTable.js'
 import { Radio,CheckBtn ,Notify} from '@commonComp';
  import Information from '../Information';
  import {deepClone} from '@utils/tools.js';
+ import {getFormulaResult} from '@store/async-actions/fetchModules.js';
 /**
 *量表 具体信息页面
 *title:量表标题/scaleName
@@ -18,17 +19,15 @@ class ScaleTable extends React.Component{
       selecteds:{},  //当前页面的选中标识,保存后使用select标识
       valueData:{},
       start:false,   //点击计算
-      score:{},  //选中的分数
-      totalScore:0  //前端计算结果
+      scaleResult1:null
     }
   }
-  // handleRadio(groupName,name,value){
+  
   handleRadio(groupName,name,item){
-    const {selecteds,valueData,score} = this.state;
+    const {selecteds,valueData} = this.state;
     const value = item.detailName;
     this.setState({
-      selecteds:Object.assign({},selecteds,{[name]:value}),
-      score:Object.assign({},score,{[name]:item.score})
+      selecteds:Object.assign({},selecteds,{[name]:value})
     })
     const datas = JSON.parse(JSON.stringify(valueData));
     const group = datas.group;
@@ -64,7 +63,7 @@ class ScaleTable extends React.Component{
       valueData:datas
     })
   }
-  // handleCheckbox(name,value){
+  
   handleCheckbox(groupName,name,item){
     let {selecteds,valueData} = this.state;
     const value = item.detailName;
@@ -112,11 +111,14 @@ class ScaleTable extends React.Component{
         }
       }
     }
+    this.setState({
+      valueData:datas
+    })
   }
 
   handleFormula(data){//得分计算
-    const {tableId,getResult,parentId,scaleInfo} = this.props; 
-    const {valueData,score} = this.state; 
+    const {tableId,getResult,parentId,scaleInfo,parentIndex} = this.props; 
+    const {valueData} = this.state; 
     this.setState({
       start:true
     })
@@ -136,46 +138,37 @@ class ScaleTable extends React.Component{
       Notify.info("请先将量表内容选择完整");
       return
     }
-    // 前端计算分数
-    let totalScore = 0;
-    for(let i in score){
-      totalScore += parseFloat(score[i])
-    }
-    this.setState({
-      totalScore:totalScore
-    })
-    const range = valueData&&valueData.calculate?valueData.calculate.range:'';
-    let resultText;
-    if(range){
-      for(let k=0; k<range.length; k++){
-        if(parseFloat(range[k].min) < totalScore && totalScore > parseFloat(range[k].max)){
-          resultText = range[k].text;
-        }
-      }
-    }
-    const result = {
-      score:totalScore,
-      text:resultText
-    }
 
     const params = {
       type:1,
-      content:JSON.stringify(valueData), //选择后的数据--字符串形式
-      id:parentId,
-      scaleId:tableId,
+      // data:JSON.stringify(valueData), //选择后的数据--字符串形式
+      data:valueData,
+      pId:parentId,
+      id:tableId,
+      pIndex:parentIndex
     } 
     // 替换表格内容
-    let allDatas = JSON.parse(JSON.stringify(scaleInfo[tableId])) ;
-     allDatas[1].content = JSON.stringify(valueData);
+    // let allDatas = JSON.parse(JSON.stringify(scaleInfo[tableId])) ;
+    //  allDatas[1].content = JSON.stringify(valueData);
     // 计算接口
-    getResult&&getResult({params,allDatas,result});
+    // getResult&&getResult({params,allDatas});
+
+    // 将计算结果存在state,防止页面跳动问题
+    const that = this;
+    getFormulaResult(params).then((res)=>{
+      if(+res.data.code==0){
+        that.setState({
+          scaleResult1:res.data.data
+        })
+      }
+    })
   }
   componentWillReceiveProps(nextProps){ 
     const {tableId} = this.props;
     if(JSON.stringify(nextProps.scaleInfo) !== '{}'){
       this.setState({
         // valueData:nextProps.scaleInfo[tableId].length?mocks.newData:JSON.parse(nextProps.scaleInfo[tableId].content),
-        valueData:JSON.parse(nextProps.scaleInfo[tableId][1].content),
+        valueData:nextProps.scaleInfo[tableId]?JSON.parse(nextProps.scaleInfo[tableId][1].content):{},
       })
     }
   }
@@ -186,11 +179,27 @@ class ScaleTable extends React.Component{
         // valueData:scaleInfo[tableId].length?mocks.newData:JSON.parse(scaleInfo[tableId].content)
         valueData:JSON.parse(scaleInfo[tableId][1].content)
       })
+    }  
+  }
+  componentWillUnmount(){
+    // 储存计算结果和选择后的data
+    const {tableId,getResult,parentId,parentIndex,scaleInfo} = this.props; 
+    const {valueData,scaleResult1} = this.state; 
+    // 替换表格内容
+    let allDatas = JSON.parse(JSON.stringify(scaleInfo[tableId])) ;
+     allDatas[1].content = JSON.stringify(valueData);
+    const params = {
+      type:1,
+      data:scaleResult1,
+      id:tableId,
+      pIndex:parentIndex
     }
-    
+    getResult&&getResult({params,allDatas});
   }
   getContent(){ 
-    let {selecteds,valueData,start} = this.state;
+    let {selecteds,valueData,start,scaleResult1} = this.state;
+    const {tableId,formulaResult} = this.props;
+    const scaleResult = scaleResult1 || formulaResult&&formulaResult[tableId]; //量表计算结果
     // const datas = valueData&&valueData.group?valueData:mocks.newData;
     const datas = valueData&&valueData.group?valueData:'';
     let content =  datas&&datas.group&&datas.group.map((v,i)=>{
@@ -233,8 +242,13 @@ class ScaleTable extends React.Component{
                     </div>
                   })}
                   {v.groupCalculate.isShow==1?<p className={style['subTotal']}>
-                    <span>计分</span>
-                    <span>{v.groupCalculate.result.value}</span>
+                    <span>计分:</span>
+                    {/*<span>{v.groupCalculate.result.value}</span>*/}
+                    <span>{scaleResult&&scaleResult.group.map((m,ii)=>{
+                      if(m.groupName==v.groupName){
+                        return m.groupCalculate.result.value;
+                      }
+                    })}</span>
                   </p>:''}  
                 </div>
               })
@@ -244,12 +258,12 @@ class ScaleTable extends React.Component{
   render(){
     const {title,scaleInfo,tableId,formulaResult} = this.props;
     const data = scaleInfo[tableId];
-    let {selecteds,totalScore} = this.state;
+    let {selecteds,scaleResult1} = this.state;
     const content = data && data[1].content;//表格内容
     const preContent = data && data[0].content;//表前文字
     const footContent = data && data[2].content; //表后文字
     const datas = content && JSON.parse(content);
-    const scaleResult = formulaResult&&formulaResult[tableId]; //量表计算结果
+    const scaleResult = scaleResult1 || formulaResult&&formulaResult[tableId]; //量表计算结果
     return <div className={style['tableBox']} id="printcontent">
             <div className={style['printShow']}>
               <Information></Information>
@@ -258,11 +272,11 @@ class ScaleTable extends React.Component{
             <div dangerouslySetInnerHTML={{__html:preContent}} className={style['textlh']}></div>
             <div className={style['textContent']}>
               {this.getContent()}
-              <div className={style['total']}>
-                <span>总分:</span>
-                <span>{scaleResult&&scaleResult.score||totalScore||''}</span>
-                <span className={style['totalBtn']} onClick={this.handleFormula.bind(this)}>得分</span>
-              </div>
+              {datas&&datas.noCalc==0?<div className={style['total']}>
+                    <span>总分:</span>
+                    <span>{scaleResult&&scaleResult.calcalculate.result&&scaleResult.calcalculate.result.value +' '+ scaleResult.calcalculate.result.text||''}</span>
+                    <span className={style['totalBtn']} onClick={this.handleFormula.bind(this)}>得分</span>
+                  </div>:''}
             </div>
             <div dangerouslySetInnerHTML={{__html:footContent}} className={style['textlh']}></div>
           </div>

+ 1 - 3
src/components/Treat/AdverseReactions/index.jsx

@@ -18,12 +18,10 @@ class AdverseReactions extends Component {
         const { icon, titleStyle,titleBg, filter, title,  adversReactionList } = this.props
         return(
             <div className={style['last-treat-wrapper']}>
-                { console.log('adversReactionList', adversReactionList) }
                 <div className={style['last-treat-title-box']} style={titleStyle}></div>
                 <div className={style['last-treat-title']} ><img className={style['last-treat-icon']} src={icon}/>{title}</div>
                 {adversReactionList.map((item, index) => {
-                    return (<div key={item.id}><span>{item.tagName}:</span>
-                        {console.log('item.details', item.details)}
+                    return (<div key={item.id}><span className={style['last-treat-name-box']}>{item.tagName}:</span>
                         {item.details.map((it, idx) => {
                             return <span key={item.id + it.name}>
                                 <input type="checkbox" checked={it.checked} id={item.id + it.name} onChange={this.changeReact.bind(this, it, index)}/>

+ 4 - 0
src/components/Treat/AdverseReactions/index.less

@@ -23,5 +23,9 @@
     float: left;
     margin: 10px;
 }
+.last-treat-name-box {
+    display: inline-block;
+    width: 150px;
+}
 
 

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

@@ -16,14 +16,13 @@ class DrugHistory extends Component {
 
     render() {
         const { icon, titleStyle,titleBg, filter, title, drugHistory, showDrugInfo, setDrugInfo } = this.props
-        console.log('1111111111111111')
         return(
             (drugHistory['慢病用药内容'] && drugHistory['慢病用药内容'].length > 0 || drugHistory['普通病用药内容'] && drugHistory['普通病用药内容'].length > 0) &&
             <div className={style['last-treat-wrapper']}>
                 <div className={style['last-treat-title-box']} style={titleStyle}></div>
                 <div className={style['last-treat-title']} ><img className={style['last-treat-icon']} src={icon}/>{title}</div>
-                {drugHistory['慢病用药内容'].length > 0 && <LastDrug title='普通病用药内容' lastDrugList = {drugHistory['慢病用药内容']}  showDrugInfo={showDrugInfo} setDrugInfo={setDrugInfo}></LastDrug>}
-                {drugHistory['普通病用药内容'].length > 0 && <LastDrug title='慢病用药内容' lastDrugList = {drugHistory['普通病用药内容']}  showDrugInfo={showDrugInfo} setDrugInfo={setDrugInfo}></LastDrug>}
+                {drugHistory['慢病用药内容'] && drugHistory['慢病用药内容'].length > 0 && <LastDrug title='普通病用药内容' lastDrugList = {drugHistory['慢病用药内容']}  showDrugInfo={showDrugInfo} setDrugInfo={setDrugInfo}></LastDrug>}
+                {drugHistory['普通病用药内容'] &&drugHistory['普通病用药内容'].length > 0 && <LastDrug title='慢病用药内容' lastDrugList = {drugHistory['普通病用药内容']}  showDrugInfo={showDrugInfo} setDrugInfo={setDrugInfo}></LastDrug>}
             </div>
         )
     }

+ 4 - 4
src/components/Treat/FollowUp/index.jsx

@@ -16,16 +16,16 @@ class FollowUp extends Component {
     }
 
     render() {
-        const { icon, titleStyle,titleBg, filter, title, followUp, isRead, noTitle } = this.props
+        const { icon, titleStyle,titleBg, filter, title, followUp, isRead, noHeader, noTitle, textStyle} = this.props
         return(
             <div className={style['general-wrapper']}>
-                {noTitle? '': <div>
+                {noHeader? '': <div>
                     <div className={style['general-title-box']} style={titleStyle}></div>
                     <div className={style['general-title']} ><img className={style['general-icon']} src={icon}/>{title}</div>
                 </div>}
                 
-                <div>回访时间: 
-                    <Textarea value={followUp} handleInputFollowUp={this.handleInputFollowUp} isRead={isRead}></Textarea>后回访,不适随诊
+                <div style={textStyle}>
+                    {noTitle?'': '回访时间:'}<Textarea value={followUp} handleInputFollowUp={this.handleInputFollowUp} isRead={isRead}></Textarea>后回访,不适随诊
                 </div>
             </div>
         )

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

@@ -75,7 +75,7 @@ class Treat extends Component {
 
                     <div className={style['treat-inner-box']}>
                         <GeneralTreat icon={generalIcon} title='一般治疗'   generalTreat={generalTreat}></GeneralTreat>
-                        {hasFollowUp && <FollowUp icon={followUpIcon} title='回访时间'   setFollowUp={setFollowUp} followUp = {followUp} isRead={isRead}></FollowUp>}
+                        {hasFollowUp && <FollowUp icon={followUpIcon} title='回访时间' noTitle='true'  setFollowUp={setFollowUp} followUp = {followUp} isRead={isRead}></FollowUp>}
                         {/* 回访时间 */}
                         {/* {followUp && <div>回访时间: 
                             <span  className={style['follow-up-box']}

+ 3 - 4
src/containers/AdviceContainer.js

@@ -1,8 +1,7 @@
 import React from 'react';
 import {connect} from 'react-redux';
 import Advice from '../components/Advice'
-import { SET_CHANGE_ADVICE_TREATMENT, SET_CHANGE_ADVICE_ASSAY, SET_CHANGE_ADVICE_CHECK, SET_COMMONTREATMENT ,SET_ADVICE_INPUT} from '@store/types/pushMessage';
-import { SET_FOLLOW_UP } from '@store/types/treat.js';
+import { SET_CHANGE_ADVICE_TREATMENT, SET_CHANGE_ADVICE_ASSAY, SET_CHANGE_ADVICE_CHECK, SET_COMMONTREATMENT ,SET_ADVICE_INPUT, SAVE_FOLLOW_UP} from '@store/types/pushMessage';
 
 function mapStateToProps(state) {
     return ({
@@ -49,9 +48,9 @@ function mapDispatchToProps(dispatch) {
                 adviceInput: text,
             })
         },
-        setFollowUp: (followUp) => {
+        saveFollowUp: (followUp) => {
             dispatch({
-                type: SET_FOLLOW_UP,
+                type: SAVE_FOLLOW_UP,
                 followUp: followUp
             })
         },

+ 9 - 18
src/containers/AssessResult.js

@@ -2,7 +2,7 @@ import React from 'react';
 import {connect} from 'react-redux';
 import AssessResult from '@components/AssessResult';
 import {ISREAD} from '@store/types/homePage.js';
-import {billing,getScaleInfo} from '@store/async-actions/pushMessage';
+import {billing} from '@store/async-actions/pushMessage';
 import {getAssessData,getIndexData} from '@store/async-actions/fetchModules';
 import {SET_ASSESS_DATA,SET_INDEX_DATA,SET_INDEX_SUB_TYPE,REMOVE_ASSESS_ITEMS,CLEAR_INDEX_DATA} from '@types/assessResult';
 import store from '@store';
@@ -19,21 +19,23 @@ import {SET_SCALE_INFO} from "../store/types/pushMessage";
  * ***/
 
 function mapStateToProps(state) {
-  const {assessResult} = state;
+  const {assessResult,pushMessage} = state;
   return {
     data:assessResult.data,
     indexData:assessResult.indexData,
-    saveIndexData:assessResult.saveIndexData,
-    saveData:assessResult.saveData,
     update:assessResult.update,     //评估数据更新
     update1:assessResult.update1,       //加入记录更新
     timeTypes:assessResult.indexTimeTypes,    //图表切换的维度
     wholeAssessData:assessResult.wholeAssess,   //评估内容
-    wholeIndexs:assessResult.wholeIndexs,      //已加入评估记录的推送项
+    wholeIndexs:assessResult.wholeIndexs||{},      //已加入评估记录的推送项
+    wholeResults:assessResult.wholeResults,     //整体评估可能结果
     chooseSelecteds:assessResult.chooseSelecteds,    //已选中的选项
     wholeAssessText:assessResult.wholeAssessText,     //整体评估补充说明
-    scaleInfo: state.pushMessage.scaleInfo,//量表内容
-    scaleUpdate:state.pushMessage.scaleUpdate,
+    scaleInfo: pushMessage.scaleInfo,//量表内容
+    scaleUpdate:pushMessage.scaleUpdate,
+    chronicPushItems: pushMessage.chronicPushItems, //慢病右侧推送
+    formulaResult:pushMessage.formulaResult,       //量表计算结果
+    calcuResult:assessResult.calcuResult,      //评估弹窗可能结果计算结果
   }
 }
 
@@ -74,17 +76,6 @@ function mapDispatchToProps(dispatch) {
         type:CLEAR_INDEX_DATA
       })
     },
-    getScaleInfo(it){         //获取量表内容
-      dispatch(getScaleInfo(it))
-
-    },
-    /*removeAssessResult(pIndex,i){
-      dispatch({
-        type:REMOVE_ASSESS_ITEMS,
-        pIndex,
-        index:i
-      });
-    }*/
   }
 }
 

+ 56 - 13
src/containers/ChronicInfo.js

@@ -1,22 +1,28 @@
 import {connect} from 'react-redux';
 import ChronicInfo from '../components/ChronicInfo';
-import {SHOW_TABLE_LIST} from '@store/types/pushMessage';
+import {SHOW_TABLE_LIST,HIDE_TABLE_LIST, SET_CHRONIC_PUSHS} from '@store/types/pushMessage';
 import {getTableList,getScaleInfo,getTips} from '../store/async-actions/pushMessage';
-import {ADD_ASSESS_ITEMS,SET_SAVE_ASSESS_DATA} from "@types/assessResult";
+import {ADD_ASSESS_ITEMS,SET_SAVE_ASSESS_DATA,SET_CHRONIC_CALCU_RESULT} from "@types/assessResult";
 import {saveMessage} from "../store/async-actions/print";
 import {saveClickNum} from '@store/async-actions/homePage';
+import { getFormulaResult } from '@store/async-actions/fetchModules'
+import {deepClone} from '@utils/tools';
+import Notify from '@commonComp/Notify';
 
 function mapStateToProps(state){
+  const {pushMessage,assessResult} = state;
   return{
-    chronicMagItem: state.diagnosticList.chronicMagItem,
-    questionId: state.diagnosticList.clickDiag,
-    tableList: state.pushMessage.tableList,
-    showList: state.pushMessage.showList,
-    showHide: state.pushMessage.showHide,
-    scaleInfo: state.pushMessage.scaleInfo,//量表内容
+    chronicMagItem: state.diagnosticList.chronicMagItem,//慢病疾病
+    chronicPushItems: pushMessage.chronicPushItems, //慢病右侧推送
+    tableList: pushMessage.tableList,
+    showList: pushMessage.showList,
+    showHide: pushMessage.showHide,
+    scaleInfo: pushMessage.scaleInfo,//量表内容
     chronicDesease:state.mainSuit.chronicDesease,//主诉存的慢病
-    update:state.assessResult.update1,
-    formulaResult:state.pushMessage.formulaResult //量表信息
+    update:assessResult.update1,
+    formulaResult:pushMessage.formulaResult, //量表信息
+    indexs:assessResult.wholeIndexs,
+    wholeResults:assessResult.wholeResults,     //整体评估可能结果
   }
 }
 
@@ -47,10 +53,47 @@ function mapDispatchToProps(dispatch){
       })
     },
     //保存管理评估
-    saveAssessInfos(obj){
+    saveAssessInfos(obj,flg,noSave){     //noSave未true则不调页面保存接口
       dispatch(Object.assign({},obj,{type:SET_SAVE_ASSESS_DATA}));
-      dispatch(saveClickNum);
-      dispatch(() => saveMessage())
+      if(!noSave){
+        dispatch(saveClickNum);
+        if(flg != 1 && flg != 2){
+          dispatch(() => saveMessage())
+        }
+      }
+    },
+    //设置量表推送内容
+    setChronicPush(data) {
+      dispatch({
+        type: SET_CHRONIC_PUSHS,
+        data: data
+      })
+    },
+    // 计算公式计算
+    calcuFormula(item) {
+      // dispatch(getFormulaResult(item))
+      const {param,chronicPushItems} = item;
+      getFormulaResult(param).then((res)=>{
+        if(+res.data.code==0){
+          const data = chronicPushItems;
+          const result = res.data.data.result;
+          data[param.ppIndex].details[param.pIndex].content.result =  result;
+          if(item.isPop){
+            dispatch({
+              type:SET_CHRONIC_CALCU_RESULT,
+              data:deepClone(result),
+              id:item.param.disId
+            });
+          }
+          dispatch({
+            type: SET_CHRONIC_PUSHS,
+            data: deepClone(data)
+          })
+        }else{
+          Notify.error(res.data.msg||'计算没有结果返回');
+        }
+      })
+
     },
     // 获取量表静态知识
     getInfomation(item){

+ 0 - 1
src/containers/CurrentIll.js

@@ -20,7 +20,6 @@ function mapStateToProps(state) { //console.log(111,state);
         searchData:state.currentIll.searchDatas,//搜索结果
         focusIndex:state.currentIll.focusIndex,
         processModule:state.currentIll.processModule,//病程变化模板
-        processModuleName:state.currentIll.processModuleName,//病程变化模板名称
         showArr:homePage.showDrop,
         span:state.currentIll.span,
         update:state.currentIll.update,//用于更新

+ 4 - 2
src/containers/DiagnosticList.js

@@ -7,8 +7,8 @@ import { SHOW_TREAT, DEL_REACT, DEL_FOLLOW_UP } from '@store/types/treat.js';
 import {billing, getTips} from '../store/async-actions/pushMessage';
 import {keepPushData} from '@store/actions/tabTemplate';
 import { showHistory,sortHistory,activeHistory,visibleHistory } from '@store/actions/historyTemplates'
-
-
+import {CURRENT_CHRONIC} from '@store/types/currentIll';
+import {autoFillModules} from '@store/async-actions/fetchModules';
 
 
 function mapStateToProps(state) {
@@ -86,6 +86,7 @@ function mapDispatchToProps(dispatch) {
             dispatch({
                 type: HIDE_REFER_RECORD
             })
+            dispatch(autoFillModules())//自动分发模板
         },
         showHistoryCaseModal: ()=> {
             dispatch({
@@ -96,6 +97,7 @@ function mapDispatchToProps(dispatch) {
             dispatch({
                 type: HIDE_HISTORY_CASE
             })
+            dispatch(autoFillModules())//自动分发模板
         },
         handleQuoteClick(data){
             

+ 2 - 16
src/containers/MainSuit.js

@@ -6,7 +6,7 @@ import {RESET,CLICKCOUNT,ISREAD,SEARCH_DROP_LOCATION,MODI_LOADING} from '@store/
 import {getCommSymptoms,getCommSymptomPush} from '@store/async-actions/mainSuit.js'
 import {SET_MAIN_SUIT} from '@store/types/fillInfo';
 import {CLEAR_DIAGNOSE} from '@store/types/diagnosticList';
-import {getSearch,getFeature,setOtherHisModule} from '@store/async-actions/fetchModules';
+import {getSearch,getFeature,setOtherHisModule,autoFillModules} from '@store/async-actions/fetchModules';
 import {billing} from '@store/async-actions/pushMessage';
 import {didPushParamChange,filterDataArr,inspectAndAssist} from '@utils/tools.js';
 import config from '@config/index.js';
@@ -31,7 +31,6 @@ function mapStateToProps(state) {//console.log(11,state);
     focusIndex:state.mainSuit.focusIndex,
     fuzhen:state.diagnosticList.mainSuitStr,//诊断第一个复诊值
     span:state.mainSuit.span,
-    addModuleName:state.mainSuit.addModuleName,//添加病情变化模板名称
     editClear:state.mainSuit.editClear,
     clearAction:state.mainSuit.clearAction,//清除
     mainIds:state.mainSuit.mainIds,//选中症状的id,搜索去重用
@@ -221,20 +220,7 @@ function mapDispatchToProps(dispatch) {
         dispatch(billing())
       },
       autoFillMoudles() {//自动填充模板
-        dispatch({type: CURRENT_CHRONIC})//现病史
-        //其他史模板填充-先去历史,无历史用模板
-        inspectAndAssist()//化验辅检
-        dispatch(setOtherHisModule());
-        //查体模板填充
-        dispatch((dispatch, getStore) => {
-          const state = getStore();
-          const initData = state.homePage.initData;
-          dispatch({
-            type: SET,
-            data: [...initData.checkbody],
-            isEmpty:false
-          });
-        });
+        dispatch(autoFillModules())
       }
     }
 }

+ 0 - 2
src/containers/PushItemsContainer.js

@@ -16,8 +16,6 @@ function mapStateToProps(state) {
         tableList: pushMessage.tableList,
         showList: pushMessage.showList,
         chronicPushItems: pushMessage.chronicPushItems,
-        wholeIndexs:state.assessResult.wholeIndexs,
-        update:state.assessResult.update1
     }
 }
 

+ 8 - 10
src/containers/ScaleTable.js

@@ -13,20 +13,18 @@ function mapStateToProps (state){//console.log(state);
 function mapDispatchToProps (dispatch){
   return {
     getResult(obj){//计算结果
-      const {params,allDatas,result} = obj;
-      // dispatch(getFormulaResult(obj.params));
+      const {params,allDatas} = obj;
+      // dispatch(getFormulaResult(params));
       dispatch({
         type:SET_SCALE_INFO,
         data:allDatas,
-        id:params.scaleId //量表id
+        id:params.id //量表id
+      })
+      dispatch({
+        type:SAVE_TABLE_RESULT,
+        id:params.id,  //量表id
+        data:Object.assign({},params.data,{pIndex:params.pIndex})
       })
-      if(result&&result.text){
-        dispatch({
-          type:SAVE_TABLE_RESULT,
-          id:params.scaleId,  
-          data:result
-        })
-      }
     }
   }
 }

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

@@ -45,7 +45,7 @@ class HomePage extends Component {
             if(ev.keyCode==8){
                 const elem = ev.srcElement || ev.target;
                 const nodeN = elem.nodeName;
-                if(nodeN != "SPAN" && nodeN != "DIV" && nodeN != "INPUT"){
+                if(nodeN != "SPAN" && nodeN != "DIV" && nodeN != "INPUT" && nodeN != "TEXTAREA"){
                     return false;
                 }
             } 

+ 1 - 12
src/store/actions/currentIll.js

@@ -48,7 +48,6 @@ export const setModule = (state,action)=>{
   // res.processModule = action.processModule;//病程变化模板
   res.moduleData = spreadLabels;
   res.processModule = sonSpreadLabels;//病程变化模板
-  res.processModuleName = action.processModuleName;//模板名称
   res.emptyData = action.emptyData;//空模板
   let data = action.data;
   let sliceIdx;
@@ -133,16 +132,6 @@ export const setData = (state,action) =>{
     return item.questionMapping.length>0;
   })*/
   
-
-  // 是慢病,暂且使用现病史慢病模板,不区分空模板
-  /*if(isChronic){
-    res.data = fullfillText(moduleData).newArr;
-    res.saveText = fullfillText(res.data).saveText;
-    res.update=Math.random();
-    return res;
-  }*/
-
-  /****************************************/
   // 是否使用空模板:num=0时判断mainIds,num>=1,截取第一病程遍历是否有症状exist
   if(num==0){
     useEmpty = mainIds.length>0 ? false:true;
@@ -164,7 +153,7 @@ export const setData = (state,action) =>{
   
   if (useEmpty) {
     // res.data = res.emptyData;
-    res.data = JSON.parse(JSON.stringify(res.emptyData));
+    res.data = res.emptyData&&res.emptyData.length>0?JSON.parse(JSON.stringify(res.emptyData)):moduleData;
   } else {
     if(mainData&&mainData.length>0){//主诉使用模板
       // 目前只需要将第一个主诉病程移植到现病史

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

@@ -52,7 +52,6 @@ export const setMainMoudle = (state,action) => {
   // res.saveText = res.save||[];
   res.saveText = res.save||res.saveText;//慢病
   res.addSmoduleData = sonSpreadLabels;
-  res.addModuleName = action.addModuleName;
   res.update=Math.random();
   return res;
 }

+ 18 - 9
src/store/async-actions/diagnosticList.js

@@ -3,7 +3,7 @@ import {getAllDataList,getAllDataStringList,isAllClear,filterDataArr} from '@uti
 import {getChronic,getInitModules} from '@store/async-actions/homePage.js';
 import {storageLocal} from '@utils/tools'
 import { SAVE_FREE } from '@store/types/mainSuit';
-import {ISREAD} from "../types/homePage";
+import {ISREAD,MODI_LOADING} from "../types/homePage";
 export const isAddMainSuit = () =>{
     return (dispatch, getState) => {
         const state = getState();
@@ -51,11 +51,15 @@ export const isChronicMag = (item) => {
                                 type: SET_CHRONIC_MAG_ITEM,
                                 chronicMagItem: item
                             })
+                            // loading
+                            dispatch({type:MODI_LOADING,flag:true});
                             // 获取慢病模板
-                            dispatch(getInitModules);
-                            dispatch({
-                                type: SHOW_REFER_RECORD
-                            })
+                            dispatch(getInitModules).then(()=>{
+                                dispatch({type:MODI_LOADING,flag:false});
+                                dispatch({
+                                    type: SHOW_REFER_RECORD
+                                })
+                            });
                         }
                     }
                  });
@@ -68,11 +72,16 @@ export const isChronicMag = (item) => {
                             type: SET_CHRONIC_MAG_ITEM,
                             chronicMagItem: item
                         })
+                        // loading
+                        dispatch({type:MODI_LOADING,flag:true});
                         // 获取慢病模板
-                        dispatch(getInitModules);
-                        dispatch({
-                            type: SHOW_REFER_RECORD
-                        })
+                        dispatch(getInitModules).then(()=>{
+                            dispatch({type:MODI_LOADING,flag:false});
+                            dispatch({
+                                type: SHOW_REFER_RECORD
+                            })
+                        });
+                        
                     }
                 }
              }

+ 57 - 30
src/store/async-actions/fetchModules.js

@@ -3,12 +3,13 @@ import {SET} from '@types/checkBody.js';
 import {fullfillText,_fullfillText} from '@common/js/func';
 import {SETDATA} from '@store/types/otherHistory';
 import store from '@store';
-import {getEMRParams,didPushParamChange} from '@utils/tools.js';
+import {getEMRParams,didPushParamChange,inspectAndAssist} from '@utils/tools.js';
 import {Notify} from '@commonComp';
 import {billing} from '@store/async-actions/pushMessage';
 import {SETOTHERHISTORY,ISREAD} from "../types/homePage";
-import {SAVE_TABLE_RESULT} from "../types/pushMessage";
+import {SAVE_TABLE_RESULT,SET_CHRONIC_PUSHS} from "../types/pushMessage";
 import config from "@config/index";
+import {CURRENT_CHRONIC} from '@store/types/currentIll';
 
 const api={
   getSpreadModule:'/questionInfo/getByIds',
@@ -20,7 +21,8 @@ const api={
   getSymptomFeature:'/feature/getSymptomFeature',
   getAssess:'/evaluationModuleMapping/getEvaluationModules',    //获取管理评估-慢病
   getIndexData:'/indexData/getIndexDatas',    //获取指标数据-图表-慢病
-  getFormulaResult:'/push/calculate',  // 计算接口
+  // getFormulaResult:'/push/calculate',  // 计算接口
+  getFormulaResult:'/calc/calculate',  // 计算接口
   getAssessHis:'/inquiryInfo/getEvaluations',   //历史评估记录
 };
 
@@ -264,39 +266,64 @@ export function getIndexData(range){
 }
 
 // 计算接口
-export const getFormulaResult = (item)=>{
-  // type:1-量表 11-计算公式
+/*export const getFormulaResult = (item)=>{
+  // type:1-量表 2-计算公式
   const type = item.type;
-  const id = item.id;//计算量表的id
-  let param;
-  if(type==1){
-    param = {
-      type:type,
-      scale:item.content
-    }
-  }else if(type==11){
-    param = {
+  let param = {
       type:type,
-      formula:item.content
+      data:item.data
     }
-  }
-  return (dispatch) => {
+  return (dispatch,getState) => {
+    const state = getState();
     json(api.getFormulaResult,param).then((res)=>{
       if(+res.data.code==0){
-        dispatch({
-          type:SAVE_TABLE_RESULT,
-          // id:id, //外层疾病id
-          id:item.scaleId,  //量表id
-          data:{
-            data:item.content, //量表内容
-            // id:item.scaleId,  //量表id
-            type:type,
-            result:res.data.data, //计算结果
-          }
-        })
+        if(type==1){//量表
+          dispatch({
+            type:SAVE_TABLE_RESULT,
+            // id:item.pId, //外层疾病id
+            id:item.id,  //量表id
+            data:Object.assign({},res.data.data,{pIndex:item.pIndex})
+          })
+        }else if(type==2){//计算公式
+          const data = state.pushMessage.chronicPushItems
+          data[item.ppIndex].details[item.pIndex].content.result =  res.data.data.result
+          dispatch({
+            type: SET_CHRONIC_PUSHS,
+            data: JSON.parse(JSON.stringify(data))
+          })
+          console.log('resss', res)
+        }
+        
       }else{
-        console.log(res.msg)
+        Notify.error(res.data.msg);
       }
     })
   }
-}
+}*/
+export const getFormulaResult = (item)=>{
+  // type:1-量表 2-计算公式
+  const type = item.type;
+  let param = {
+      type:type,
+      data:item.data
+    }
+  return json(api.getFormulaResult,param);
+}
+
+// 自动分发模板
+export function autoFillModules (){
+  return (dispatch,getStore)=>{
+    const state = getStore();
+    const initData = state.homePage.initData;
+    dispatch({type: CURRENT_CHRONIC})//现病史
+    //其他史模板填充-先去历史,无历史用模板
+    inspectAndAssist()//化验辅检
+    dispatch(setOtherHisModule());
+    //查体模板填充
+    dispatch({
+      type: SET,
+      data: [...initData.checkbody],
+      isEmpty:false
+    });
+  }
+}

+ 5 - 8
src/store/async-actions/homePage.js

@@ -32,10 +32,10 @@ export const getInitModules= (dispatch,getStore)=>{
   const state = getStore();
   const {message} = state.patInfo;
   const {allModules} = state.homePage;
-  // const chronicMagItem = state.diagnosticList.chronicMagItem;
-  // const chronicId = chronicMagItem?chronicMagItem.id:'';//诊断为慢病复诊时储存慢病信息到store
-  const chronicMagItem = state.mainSuit.chronicDesease;
-  const chronicId = chronicMagItem?chronicMagItem.id:'';//诊断为慢病复诊时储存慢病信息到store
+  const chronicMagItem = state.diagnosticList.chronicMagItem;//诊断入口
+  // const chronicId = chronicMagItem?chronicMagItem.id:'';
+  const chronicDesease = state.mainSuit.chronicDesease; //主诉入口
+  const chronicId = chronicDesease&&chronicDesease.id||chronicMagItem&&chronicMagItem.id||'';
   const param = {
     age:message.patientAge,
     sexType:message.sex,
@@ -65,7 +65,6 @@ export const getInitModules= (dispatch,getStore)=>{
             type:SET_MAINSUIT,
             data:fullfillText(initData.mainSuit).newArr,
             addSymptom:fullfillText(initData.addSymptom).newArr,
-            // addModuleName:initModuleName.addSymptom,//模板名称
             save:initSaveText.mainSuit
           });
           dispatch({
@@ -73,7 +72,6 @@ export const getInitModules= (dispatch,getStore)=>{
             data:formatContinueDots(initData.current),
             save:initSaveText.current,
             processModule:formatContinueDots(initData.process),//病程变化
-            processModuleName:initModuleName.process,//病程变化模板名称
             saveProcess:initSaveText.process,
             emptyData:formatContinueDots(initData.currentEmpty),//现病史空模板
             saveEmpty:initSaveText.currentEmpty,
@@ -84,11 +82,10 @@ export const getInitModules= (dispatch,getStore)=>{
             data:formatContinueDots(initData.current),
             save:initSaveText.current,
             processModule:formatContinueDots(initData.process),//病程变化
-            processModuleName:initModuleName.process,//病程变化模板名称
             // saveProcess:initSaveText.process,
+            // 慢病现病史没有空模板
           });
         }
-
         dispatch(getOtherHisRecord());          //获取其他史最近记录
       }
     })

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

@@ -158,7 +158,7 @@ export const getTableList = (id)=>{
 }
 
 // 量表明细
-export const getScaleInfo = (it)=>{
+export const getScaleInfo = (it)=>{console.log('参数:',it)
     return (dispatch,getState)=>{
         const emrData = getEMRParams();
           const params = {

+ 18 - 10
src/store/async-actions/treat.js

@@ -51,14 +51,14 @@ export const addDiagnostic = (item) => {
                 "patientId": emrData.patientId,
             };
             //判断是否走慢病系统
-            // const isChronic = state.diagnosticList.chronicMagItem && state.diagnosticList.chronicMagItem.name||state.mainSuit.chronicDesease && state.mainSuit.chronicDesease.name;
-            const isChronic = true
+            const isChronic = state.diagnosticList.chronicMagItem && state.diagnosticList.chronicMagItem.name||state.mainSuit.chronicDesease && state.mainSuit.chronicDesease.name;
+            // const isChronic = true
             if (isChronic) {
                 let chronicList = JSON.parse(storageLocal.get('chronic'));
                 if(!chronicList){
                     getChronic().then(() =>{
                     chronicList = JSON.parse(storageLocal.get('chronic'));
-                    for(let i=0; i<chronicList.length; i++){
+                        for(let i=0; i<chronicList.length; i++){
                             if(chronicList[i].id==item.id&&chronicList[i].name==item.name){ //判断某个病是否为慢病
                                 params.disType = 1
                             }
@@ -160,8 +160,8 @@ export const getTreatResult = (item) =>{
         //         "symptom": "恶心,呕吐",
         //         "vital": ""
         // }
-        // const isChronic = state.diagnosticList.chronicMagItem && state.diagnosticList.chronicMagItem.name||state.mainSuit.chronicDesease && state.mainSuit.chronicDesease.name;
-        const isChronic = true
+        const isChronic = state.diagnosticList.chronicMagItem && state.diagnosticList.chronicMagItem.name||state.mainSuit.chronicDesease && state.mainSuit.chronicDesease.name;
+        // const isChronic = true
         if (isChronic) {
             let chronicList = JSON.parse(storageLocal.get('chronic'));
             if(!chronicList){
@@ -172,7 +172,7 @@ export const getTreatResult = (item) =>{
                             params.disType = 1
                         }
                     }
-                    getTreatment(item, dispatch, state, url,params)
+                    getTreatment(item, dispatch, state, url,params, isChronic)
 
                 });
             } else {
@@ -181,10 +181,10 @@ export const getTreatResult = (item) =>{
                         params.disType = 1
                     }
                 }
-                getTreatment(item, dispatch, state,url,params)
+                getTreatment(item, dispatch, state,url,params, isChronic)
             }
         } else {
-            getTreatment(item, dispatch, state,url,params)
+            getTreatment(item, dispatch, state,url,params, isChronic)
         }
         
     }
@@ -192,7 +192,7 @@ export const getTreatResult = (item) =>{
 } 
 
 //获取治疗方案
-function getTreatment(item, dispatch, state,url,params) {
+function getTreatment(item, dispatch, state,url,params, isChronic) {
     json(url, params).then((data) =>{
         let treat;
         if(data.data.data) {
@@ -226,7 +226,15 @@ function getTreatment(item, dispatch, state,url,params) {
             } else {
                 adverseReactions = []
             }
-            followUp = '2周';
+            if(isChronic) {
+                let chronicList = JSON.parse(storageLocal.get('chronic'));
+                for(let i=0; i<chronicList.length; i++){
+                    if(chronicList[i].id==item.id&&chronicList[i].name==item.name){ //判断某个病是否为慢病
+                        followUp = '2周';
+                    }
+                }
+                
+            }
             if(followUp) {  
                 const followUpList = state.treat.followUpList
                 if(followUpList) {  //判断之前有没有报存过的回访时间,如果有替换掉

+ 11 - 1
src/store/reducers/assessResult.js

@@ -1,4 +1,5 @@
-import {SET_ASSESS_DATA,SET_INDEX_DATA,SET_SAVE_ASSESS_DATA,SET_INDEX_SUB_TYPE,ADD_ASSESS_ITEMS,REMOVE_ASSESS_ITEMS,CLEAR_INDEX_DATA} from '@types/assessResult';
+import {SET_ASSESS_DATA,SET_INDEX_DATA,SET_SAVE_ASSESS_DATA,SET_INDEX_SUB_TYPE,ADD_ASSESS_ITEMS,
+  REMOVE_ASSESS_ITEMS,CLEAR_INDEX_DATA,SET_CHRONIC_CALCU_RESULT} from '@types/assessResult';
 import config from "@config";
 
 const init = {
@@ -9,6 +10,11 @@ const init = {
   wholeIndexs:{},     //已加入的评估数据的index,加入按钮状态用
   wholeAssessText:'',   //整体评估补充说明
   chooseSelecteds:{},   //选项勾选状态
+  wholeResults:{
+    possible:{},
+    radioVal:{}
+  },    //可能结果
+  calcuResult:{}
 };
 export default (state=init,action)=>{
   const res = Object.assign({},state);
@@ -43,6 +49,7 @@ export default (state=init,action)=>{
       return res;
     case SET_SAVE_ASSESS_DATA:
       res.wholeIndexs = action.wholeAssessItems||{};
+      res.wholeResults = action.wholeResults||{};
       //res.indexTimeTypes = action.chartTimeTypes;
       res.wholeAssessText = action.wholeAssessText||'';
       res.chooseSelecteds = action.chooseSelecteds||{};
@@ -60,6 +67,9 @@ export default (state=init,action)=>{
       res.wholeIndexs[pIndex].splice(temp.findIndex((i)=>i==index),1);
       //res.wholeAssess[pIndex].details[index].add=false;
       return res;
+    case SET_CHRONIC_CALCU_RESULT:
+      res.calcuResult[action.id] = action.data;
+      return res;
     default:
       return res;
   }

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

@@ -4,4 +4,5 @@ export const SET_SAVE_ASSESS_DATA = 'SET_SAVE_ASSESS_DATA';  //保存的评估
 export const SET_INDEX_SUB_TYPE = 'SET_INDEX_SUB_TYPE';   //保存单个图表时间维度
 export const ADD_ASSESS_ITEMS = 'ADD_ASSESS_ITEMS';     //加入评估
 export const REMOVE_ASSESS_ITEMS = 'REMOVE_ASSESS_ITEMS';  //整体评估删除
-export const CLEAR_INDEX_DATA = 'CLEAR_INDEX_DATA';     //删除图表数据
+export const CLEAR_INDEX_DATA = 'CLEAR_INDEX_DATA';     //删除图表数据
+export const SET_CHRONIC_CALCU_RESULT = 'SET_CHRONIC_CALCU_RESULT';   //保存评估中计算结果

+ 14 - 12
src/utils/jqprint.js

@@ -10,7 +10,7 @@ import $ from 'jquery';
       tab.document.open();
       var doc = tab.document;
     }else {
-      var $iframe = $("<iframe  />");
+      var $iframe = $("<iframe />");
       if (!opt.debug) { $iframe.css({ position: "absolute", width: "0px", height: "0px", left: "-300px", top: "-300px" }); }
       $iframe.appendTo("body");
       var doc = $iframe[0].contentWindow.document;
@@ -34,18 +34,19 @@ import $ from 'jquery';
         });
       }
     }
+    // var canvasLis = $(this).find('canvas');//页面有canvas需要转换为图片
+    // if (!canvasLis) {
+    //   return
+    // } else {
+    //   $("img").remove('.canvasImg')//删除已添加的图片避免多张图片重叠
+    //   for (var k = 0; k < canvasLis.length; k++) {
+    //     var canvas = canvasLis[k];
 
-    var canvasLis = $(this).find('canvas');//页面有canvas需要转换为图片
-    if (!canvasLis) {
-      return
-    } else {
-      $("img").remove('.canvasImg')//删除已添加的图片避免多张图片重叠
-      for (var k = 0; k < canvasLis.length; k++) {
-        var canvasSrc = canvasLis[k].toDataURL();
-        let canvasImg = "<img class='canvasImg' src='" + canvasSrc + "'>"
-        $(canvasLis[k]).parent().append(canvasImg)
-      }
-    }
+    //     var canvasSrc = canvas.toDataURL();
+    //     let canvasImg = "<img class='canvasImg' src='" + canvasSrc + "'>"
+    //     $(canvasLis[k]).parent().append(canvasImg)
+    //   }
+    // }
 
     if (opt.printContainer) { doc.write($element.outer()); }
     else { $element.each(function () { doc.write($(this).html()); }); }
@@ -66,4 +67,5 @@ import $ from 'jquery';
   $.fn.outer = function () {
     return $($('<div></div>').html(this.clone())).html();
   }
+
 })($);

+ 14 - 6
src/utils/tools.js

@@ -138,7 +138,7 @@ const isIE  = () => { //ie?
 }
 
 const deepClone = (data)=>{
-    return JSON.parse(JSON.stringify(data))
+    return JSON.parse(JSON.stringify(data)||null)||{};
 };
 
 const getUrlArgObject = (parm) => {  
@@ -856,12 +856,10 @@ function inspectAndAssist(){
   const state = store.getState();
   let mainType = state.typeConfig.typeConfig
   if(mainType == 1){return}//文本模式不放化验辅检的模板
-
   let tmpAll = state.homePage.allModules;
   let tmpInspected = state.inspect.labelList;
   let tmpAssisted = state.assistCheck.assistLabel;
   let tmpInspect = [],tmpAssist = [],assayArr = [],tmpDetail=[],checkArr = [];
-
   for(let i = 0;i < tmpAll.length;i++){
     let tmpItem = tmpAll[i];
     if(tmpItem.type == 5){
@@ -877,7 +875,6 @@ function inspectAndAssist(){
       questionId: '',
       showType: 1,
     }
-    // let tmpObj = JSON.parse(JSON.stringify(obj));
     if (tmpInspect[i].controlType == 0) {
       tmpDetail = tmpInspect[i].questionMapping
     }else if(tmpInspect[i].controlType == 1 || tmpInspect[i].controlType == 6){
@@ -896,7 +893,6 @@ function inspectAndAssist(){
       time:getCurrentDate(),
       value:''
     }
-    // let tmpObj = JSON.parse(JSON.stringify(obj1));
     tmpObj.questionId = tmpAssist[i].id
     tmpObj.name = tmpAssist[i].name
     checkArr.push(tmpObj)
@@ -908,6 +904,17 @@ function inspectAndAssist(){
     store.dispatch(addAssistLabel(checkArr))
   }
 }
+function readyKeepHistory(){
+  let baseList = store.getState();
+  let jsonStr = getAllDataStringList(baseList);
+  if(filterDataArr(JSON.parse(jsonStr.chief)) == ''){
+      return 1;//主诉不能为空
+  }else if(!jsonStr.diag || jsonStr.diag.trim().length < 1){
+      return 2;//诊断不能为空
+  }else{
+    return 3;
+  }
+}
 module.exports = {
     checkType: Type.checkType,
     regexp,
@@ -941,5 +948,6 @@ module.exports = {
     formatContinueDots,
     inspectAndAssist,
     getCurrentDate,
-    ifOtherClear
+    ifOtherClear,
+    readyKeepHistory,
 };