Sfoglia il codice sorgente

评估中计算公式bug修改,数据同步中

zhouna 6 anni fa
parent
commit
05cc3e9d52

+ 113 - 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,22 @@ 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}
                       onBlur={()=>handleInp(this.state.text)}
                       onInput={this.handleInput.bind(this)}>{this.state.text}</textarea>
-          </li>
+          </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>

+ 11 - 0
src/components/AssessResult/index.less

@@ -146,6 +146,17 @@
     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;
+}
 @media print {
   .printShow {
     display: block;

+ 40 - 7
src/components/ChronicInfo/index.jsx

@@ -43,6 +43,8 @@ class ChronicInfo extends React.Component{
       radioVal:{},  //可能结果选择内容
       possible:{},  //可能结果
       formulaParam: {}, //量表计算公式计算入参
+      showRecommend:false,      //显示推荐结果弹窗
+      isRecommendConfirm:false,
     };
 
     this.showInfo = this.showInfo.bind(this);
@@ -58,7 +60,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() {
@@ -122,11 +125,11 @@ class ChronicInfo extends React.Component{
     const item = {
       id:it.id,
       name:it.name
-    };console.log(it,parentId)
+    };
     // 判断:store里已经有该量表就无需重新调接口
     if(scaleInfo&&scaleInfo[it.id]){
       this.props.hideList({name:'showTable',value:true});
-    }else{console.log('调接口')
+    }else{
       this.props.getScaleInfo(item);
     }
 
@@ -153,7 +156,12 @@ class ChronicInfo extends React.Component{
       isAssessConfirm:false
     });
   }
-
+  showRecommendFn(){
+    this.setState({
+      isAssessConfirm:false,
+      showRecommend:!this.state.showRecommend,
+    });
+  }
   showFormula(id){//计算公式
     this.setState({
       formulaId:id,
@@ -425,12 +433,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"]}>
@@ -449,6 +460,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()}
@@ -466,7 +486,6 @@ class ChronicInfo extends React.Component{
                         })}
                       </ul>
               </ConfirmModal>
-      {console.log(showHide)}
               {showHide&&showHide.showTable?<ComplexModal onclose={this.closeTable} footer={scaleFooter}
                       title={tableName}
                       icon={tableIcon}
@@ -484,8 +503,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/store/async-actions/fetchModules.js

@@ -294,7 +294,7 @@ export const getFormulaResult = (item)=>{
         }
         
       }else{
-        console.log(res.msg)
+        Notify.error(res.data.msg);
       }
     })
   }

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