Bladeren bron

merge from 'origin'

zhangxc 6 jaren geleden
bovenliggende
commit
c7d566c1d3

+ 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;
-}
+}

+ 115 - 48
src/components/AssessResult/ScaleItem/index.jsx

@@ -1,13 +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 Notify from '@commonComp/Notify';
+import {deepClone} from '@utils/tools';
 import $ from "jquery";
 /**
  * 来源于页面选择
@@ -25,7 +24,8 @@ class ScaleItem extends Component {
       optionId:'',
       radioVal:props.radioVal||{},
       formulaId:'',
-      text:props.text
+      text:props.text,
+      formulaData:{},       //计算公式值
     };
     this.getItems = this.getItems.bind(this);
     this.getDetailItems = this.getDetailItems.bind(this);
@@ -33,6 +33,7 @@ class ScaleItem extends Component {
     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({
@@ -53,7 +54,7 @@ class ScaleItem extends Component {
     });
     this.closeOption();
   }
-  handleShowScale(item,parentId){
+  handleShowScale(item,parentId){console.log(item,parentId)
     const {showScaleFn,closeAssess} = this.props;
     closeAssess&&closeAssess();    //关闭评估弹窗
     showScaleFn&&showScaleFn(item,parentId);        //显示量表
@@ -65,35 +66,101 @@ class ScaleItem extends Component {
       radioVal:Object.assign({},radioVal,{[pIndex]: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(){
-
+    this.closeFormula();
   }
   closeFormula(){
     this.setState({
       formulaId:null
     })
   }
+  calcuFormula(j, v, i) { //计算公式计算
+    const { calcuFormula } = 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)
+    } 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,result} = this.props;
-    const {optionId,formulaId,radioVal} = this.state;
+    const {optionId,formulaId,radioVal,formulaData} = this.state;
     const possible=result&&result[item.id]&&result[item.id].possible;
-    item.details.map((it,j)=>{
+    item.details.map((its,j)=>{
       if(indexs[i]&&indexs[i].includes(j)){
-        if(it.type==1){     //量表
+        let it=null;
+        if(its.type==1){     //量表
+          it=deepClone(its);
           temp =<span className={style['scale']} onClick={()=>this.handleShowScale(it.content,item.id)}>【{it.content.name}】</span>;
-        }else if(it.type==2){      //计算公式
+        }else if(its.type==2){      //计算公式
+          it=formulaData[formulaId]||deepClone(its);
           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)}>请选择</span>
                     <img src={level1} />
                     <MiniToast title={it.content.name}
                                icon={allTableIcon}
@@ -102,59 +169,57 @@ 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>
+                        {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){
+        }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&&possible[i]?possible[i]:'请选择'}</span>
@@ -212,22 +277,24 @@ class ScaleItem extends Component {
     });
   }
   render() {
-    const {title,handleInp,disabled} = this.props;
+    const {title,handleInp,disabled,isRecommend} = 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}
                       type="text"
                       disabled={disabled}
+                      placeholder='评估描述'
                       onBlur={()=>handleInp(this.state.text)}
                       onInput={this.handleInput.bind(this)}>{this.state.text}</textarea>
-          </li>
+            <div className={style['textareaStatic']}>评估描述:{this.state.text}</div>
+          </li>}
         </ul>
       </div>
     </div>;

+ 7 - 2
src/components/AssessResult/index.jsx

@@ -74,7 +74,7 @@ class AssessResult extends Component {
     isAssessConfirm&&handleSave(this.state,readyKeepHistory());
   }
   handoutTypes(item,i){
-    const {getIndexData,indexData,timeTypes,wholeAssessData,closeAssess,showScaleFn} =this.props;
+    const {getIndexData,indexData,timeTypes,wholeAssessData,closeAssess,showScaleFn,calcuFormula,isRecommend} =this.props;
     const {chooseSelecteds,wholeAssessItems,wholeAssessText,chartTimeTypes,wholeResults} = this.state;
     const chartData = indexData;
     const name = item.regionName+":";
@@ -90,6 +90,8 @@ class AssessResult extends Component {
                           indexs={wholeAssessItems}
                           result={wholeResults}
                           showScaleFn={showScaleFn}
+                          calcuFormula={calcuFormula}
+                          isRecommend={isRecommend}
                           closeAssess={closeAssess}></ScaleItem>;
       case 1:     //数据来源于大数据
         return <ChooseItem title={name}
@@ -108,7 +110,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>

+ 20 - 2
src/components/AssessResult/index.less

@@ -146,11 +146,29 @@
     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;
+}
 @media print {
-  .printShow {
+  .printShow,.textareaStatic {
     display: block;
   }
-  .deleteIcon {
+  .deleteIcon,.edit-row {
     display: none;
   }
 }

+ 56 - 12
src/components/ChronicInfo/index.jsx

@@ -43,6 +43,9 @@ class ChronicInfo extends React.Component{
       radioVal:{},  //可能结果选择内容
       possible:{},  //可能结果
       calcuFormulaResult: {}, //量表计算公式结果
+      formulaParam: {}, //量表计算公式计算入参
+      showRecommend:false,      //显示推荐结果弹窗
+      isRecommendConfirm:false,
     };
 
     this.showInfo = this.showInfo.bind(this);
@@ -58,7 +61,8 @@ 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.handleForRadio = this.handleForRadio.bind(this);
+    this.showRecommendFn = this.showRecommendFn.bind(this);
   }
 
   onPrint() {
@@ -70,6 +74,16 @@ class ChronicInfo extends React.Component{
       printContainer: true,
       operaSupport: false,
     });
+    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){//量表按钮
@@ -153,7 +167,12 @@ class ChronicInfo extends React.Component{
       isAssessConfirm:false
     });
   }
-
+  showRecommendFn(){
+    this.setState({
+      isAssessConfirm:false,
+      showRecommend:!this.state.showRecommend,
+    });
+  }
   showFormula(id){//计算公式
     this.setState({
       formulaId:id,
@@ -206,7 +225,7 @@ class ChronicInfo extends React.Component{
     let resultText = '';
     if(v.details[1].content.result) {
       for(let i = 0; i < v.details[1].content.result.length; i++) {
-        resultText += v.details[1].content.result[i].text
+        resultText += v.details[1].content.result[i].text+" "
       }
       
     }
@@ -233,7 +252,7 @@ class ChronicInfo extends React.Component{
     
   }
   calcuFormula(it,j, v, i) { //计算公式计算
-    const { calcuFormula, data } = this.props
+    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) {  //输入框类型的有没有填值
@@ -260,9 +279,9 @@ class ChronicInfo extends React.Component{
         data: it,
         disId: v.id,
         pIndex: j,
-        ppIndex: i,
+        ppIndex: i
       }
-      calcuFormula(param)
+      calcuFormula({param,chronicPushItems})
     } else {  //不是所有值都填过了
       Notify.info('请填写计算公式内容')
     }
@@ -298,7 +317,7 @@ class ChronicInfo extends React.Component{
                           return <p>
                                 <span className={style["listName"]} onClick={this.showTable.bind(this,it.content,v.id,i)}>
                                   {'【'+it.content.name+'】'}
-                                  {formulaResult&&formulaResult[it.content.id]&&formulaResult[it.content.id].pIndex==i?<i>{'结果:'}{formulaResult[it.content.id].calcalculate&&formulaResult[it.content.id].calcalculate.result.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"]}>
@@ -343,8 +362,7 @@ class ChronicInfo extends React.Component{
                                             return <div className={style["chooseItem"]}>
                                                     <Radio label={ii.detailName}
                                                              isSelect={ii.state == 1}
-                                                             handleClick={this.handleForRadio.bind(this,ii,v,i, j,idd, ind)}> 
-                                                             >
+                                                             handleClick={this.handleForRadio.bind(this,ii,v,i, j,idd, ind)}>
                                                       </Radio>
                                                   </div>
                                           })}
@@ -448,12 +466,15 @@ class ChronicInfo extends React.Component{
       <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.showRecommendFn()}>关闭</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,parentIndex} = this.state;
+    const {chronicMagItem,tableList,saveAssessInfos,chronicDesease,formulaResult,showHide,calcuFormula} = this.props;
+    const {showAssess,isAssessConfirm,tableName,tableId,parentId,parentIndex,isRecommendConfirm,showRecommend} = this.state;
     return <div className={style["tips"]} style={{marginBottom:'15px'}}>
               <div className={`${style["tips-title"]} ${style["chronic"]}`}>
                 <div className={style["tips-name"]}>
@@ -472,6 +493,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()}
@@ -483,7 +513,7 @@ class ChronicInfo extends React.Component{
                           <span>
                             {'【'+v.name+'】'}
                             {/*{formulaResult&&formulaResult[v.id]?<i>{'结果:'+formulaResult[v.id].text}</i>:''}*/}
-                            {formulaResult&&formulaResult[v.id]?<i>{'结果:'}{formulaResult[v.id].calcalculate&&formulaResult[v.id].calcalculate.result.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>
                         })}
@@ -506,8 +536,22 @@ class ChronicInfo extends React.Component{
                 <AssessResult handleSave={saveAssessInfos}
                               closeAssess={this.showAssessFn}
                               showScaleFn={this.showTable.bind(this)}
+                              calcuFormula={calcuFormula}
                               isAssessConfirm={isAssessConfirm}></AssessResult>
               </ComplexModal>:''}
+              {showRecommend?<ComplexModal onclose={this.showRecommendFn} footer={recFooter}
+                                        title='推荐结果'
+                                        icon={manageIcon}
+                                        top={20}
+                                        bottom={20}
+                                        width={820}>
+                <AssessResult handleSave={saveAssessInfos}
+                              closeAssess={this.showRecommendFn}
+                              isRecommend={true}
+                              showScaleFn={this.showTable.bind(this)}
+                              calcuFormula={calcuFormula}
+                              isAssessConfirm={isRecommendConfirm}></AssessResult>
+              </ComplexModal>:''}
       </div>
   }
 }

+ 1 - 1
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{

+ 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

+ 57 - 45
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,parentIndex} = this.props; 
-    const {valueData,score} = this.state; 
+    const {valueData} = this.state; 
     this.setState({
       start:true
     })
@@ -136,27 +138,6 @@ 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,
@@ -167,17 +148,27 @@ class ScaleTable extends React.Component{
       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):{},
       })
     }
   }
@@ -188,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)=>{
@@ -235,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,14 +256,14 @@ class ScaleTable extends React.Component{
   }
 
   render(){
-    const {title,scaleInfo,tableId,formulaResult} = this.props;console.log('量表渲染:',scaleInfo,tableId)
+    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>
@@ -260,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.calcalculate.result&&scaleResult.calcalculate.result.value||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>

+ 17 - 2
src/containers/ChronicInfo.js

@@ -9,7 +9,8 @@ import { getFormulaResult } from '@store/async-actions/fetchModules'
 
 function mapStateToProps(state){
   return{
-    chronicMagItem: state.diagnosticList.chronicMagItem,
+    chronicMagItem: state.diagnosticList.chronicMagItem,//慢病疾病
+    chronicPushItems: state.pushMessage.chronicPushItems, //慢病右侧推送
     tableList: state.pushMessage.tableList,
     showList: state.pushMessage.showList,
     showHide: state.pushMessage.showHide,
@@ -64,7 +65,21 @@ function mapDispatchToProps(dispatch){
     },
     // 计算公式计算
     calcuFormula(item) {
-      dispatch(getFormulaResult(item))
+      // dispatch(getFormulaResult(item))
+      const {param,chronicPushItems} = item;
+      getFormulaResult(param).then((res)=>{
+        if(+res.data.code==0){
+          const data = chronicPushItems;
+          data[param.ppIndex].details[param.pIndex].content.result =  res.data.data.result;
+          dispatch({
+            type: SET_CHRONIC_PUSHS,
+            data: JSON.parse(JSON.stringify(data))
+          })
+        }else{
+          console.log(res);
+        }
+      })
+
     },
     // 获取量表静态知识
     getInfomation(item){

+ 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 - 15
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';
@@ -220,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())
       }
     }
 }

+ 7 - 10
src/containers/ScaleTable.js

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

+ 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
+                            })
+                        });
+                        
                     }
                 }
              }

+ 32 - 4
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,SET_CHRONIC_PUSHS} from "../types/pushMessage";
 import config from "@config/index";
+import {CURRENT_CHRONIC} from '@store/types/currentIll';
 
 const api={
   getSpreadModule:'/questionInfo/getByIds',
@@ -265,7 +266,7 @@ export function getIndexData(range){
 }
 
 // 计算接口
-export const getFormulaResult = (item)=>{
+/*export const getFormulaResult = (item)=>{
   // type:1-量表 2-计算公式
   const type = item.type;
   let param = {
@@ -294,8 +295,35 @@ export const getFormulaResult = (item)=>{
         }
         
       }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
+    });
+  }
+}

+ 0 - 1
src/store/async-actions/homePage.js

@@ -86,7 +86,6 @@ export const getInitModules= (dispatch,getStore)=>{
             // 慢病现病史没有空模板
           });
         }
-
         dispatch(getOtherHisRecord());          //获取其他史最近记录
       }
     })

+ 4 - 3
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,14 +34,14 @@ 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 canvasSrc = canvasLis[k].toDataURL();
+        var context = canvasLis[k];
+        var canvasSrc = context.toDataURL();
         let canvasImg = "<img class='canvasImg' src='" + canvasSrc + "'>"
         $(canvasLis[k]).parent().append(canvasImg)
       }
@@ -66,4 +66,5 @@ import $ from 'jquery';
   $.fn.outer = function () {
     return $($('<div></div>').html(this.clone())).html();
   }
+
 })($);

+ 1 - 5
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)