Browse Source

Merge remote-tracking branch 'origin/formulaCalcu' into CommonTemplate

zhouna 5 years ago
parent
commit
d347214488

+ 13 - 8
src/components/AssessResult/ScaleItem/index.jsx

@@ -83,6 +83,7 @@ class ScaleItem extends Component {
     }
   }
   handleInputformula(id,calcuContent,i,e) {
+    const { calcuResult,handleCalcu } = this.props;
     const {calcuValues} = this.state;
     let obj = deepClone(calcuValues);
     let values = (obj&&obj[id])||deepClone(calcuContent);
@@ -96,6 +97,7 @@ class ScaleItem extends Component {
       isCalculated:false,
       calcuValues:obj
     });
+    handleCalcu&&handleCalcu(id,values,calcuResult);
   }
   handleForRadio(id,calcuContent,i,fidx){//计算公式
     const { calcuValues } = this.state;
@@ -135,8 +137,8 @@ class ScaleItem extends Component {
   }
   calcuFormula(item) { //计算公式计算
     const { calcuResult,handleCalcu } = this.props;
-    const {formulaId,calcuValues} = this.state;
-    let it=calcuValues&&calcuValues[formulaId];
+    const {calcuValues,formulaId} = this.state;
+    let it=calcuValues&&deepClone(calcuValues[formulaId]);
     let allHasInfo = true;
     for (let i = 0; i < it.length; i++) {
       if(it[i].controlType == 2) {  //输入框类型的有没有填值
@@ -155,14 +157,16 @@ class ScaleItem extends Component {
         }
       }
     }
-    item.content.details = calcuValues[formulaId];
+    const itemCopy = deepClone(item)
+    itemCopy.content.details = calcuValues[formulaId]
+    // item.content.details = calcuValues[formulaId];
     if(allHasInfo) { //所有都有值,则计算
       let results = deepClone(calcuResult);
-      getFormulaResult({type:2,data:item}).then((res)=>{
+      getFormulaResult({type:2,data:itemCopy}).then((res)=>{
         if(+res.data.code==0){
           const result = res.data.data.result;
           results[formulaId] = result;
-          handleCalcu&&handleCalcu(calcuValues,results);
+          handleCalcu&&handleCalcu(formulaId,calcuValues[formulaId],results);
           this.setState({
             isCalculated:true
           });
@@ -176,10 +180,9 @@ class ScaleItem extends Component {
   }
   getDetailItems(item,i){
     let arr = [],temp='';
-    const {indexs,result,formulaResult,disabled,calcuResult} = this.props;
-    const {optionId,formulaId,radioVal,calcuValues} = this.state;
+    const {indexs,result,formulaResult,disabled,calcuValues,calcuResult} = this.props;
+    const {optionId,formulaId,radioVal} = this.state;
     const possible=result&&result.possible;
-
     item.details.map((its,j)=>{
       let it=its;
       if(indexs[i]&&indexs[i].includes(j)){
@@ -194,6 +197,7 @@ class ScaleItem extends Component {
         }else if(its.type==2){      //计算公式
           const showRes = calcuResult&&calcuResult[item.conceptId]||it.content.result;
           const details = calcuValues&&calcuValues[item.conceptId]||it.content.details;
+
           const cresult = showRes&&showRes[1]&&showRes[1].text;
                     temp = <div className={style['results']}>
                     <span>计算公式结果:</span>
@@ -233,6 +237,7 @@ class ScaleItem extends Component {
                               </td>
                             </tr>
                           }else if(item1.controlType==2){//输入框
+                            
                             return <tr>
                               <td>
                                 <span>{item1.isShow == '0' ? item1.name+':':'请输入'+item1.name+':'}</span>

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

@@ -91,14 +91,14 @@ class AssessResult extends Component {
       chartTimeTypes:Object.assign(chartTimeTypes,{[i]:selects})
     });
   }
-  handleCalcu(values,ret){
+  handleCalcu(id,values,ret){
     const {saveCalcuValue,saveCalcuResult}=this.props;
     this.setState({
       calcuResult:ret,
-      calcuValues:values
+      calcuValues:{[id]:values}
     });
     saveCalcuResult&&saveCalcuResult(ret);
-    saveCalcuValue&&saveCalcuValue(values);
+    saveCalcuValue&&saveCalcuValue(values, id);
   }
   componentWillUnmount(){
     //点确定关闭弹窗时把参数传到父组件去

+ 29 - 21
src/components/ChronicInfo/index.jsx

@@ -228,24 +228,27 @@ class ChronicInfo extends React.Component{
     addAssessItem(v,pIndex,i);
   }
   addFormula(it,v,pIndex,i){
-    const {chronicMagItem} = this.props;
+    const {chronicMagItem, setCalcuInfo} = this.props;
     this.closeFormula(it);
-    chronicMagItem&&this.handleAddAssessItem(v,pIndex,i);
+    const itCopy = deepClone(it)
+    const vCopy = deepClone(v)
+    setCalcuInfo && setCalcuInfo(v.conceptId,itCopy.content.details,itCopy.content.result)
+    chronicMagItem&&this.handleAddAssessItem(vCopy,pIndex,i);
   }
-  handleInputformula(id,calcuContent,i,e) {
-    const {calcuValues} = this.state;
-    let obj = deepClone(calcuValues);
-    let values = (obj&&obj[id])||deepClone(calcuContent);
+  handleInputformula(id,calcuContent,i,j,idd,cres,e) {
+    // const {calcuValues} = this.state;
+    const {calcuResult,calcuValues,setCalcuInfo,data,setChronicPush} = this.props;
+    const dataCopy = deepClone(data)
+      let obj = deepClone(dataCopy[i].details[j].content.details);
+    let values = deepClone(obj);
     const txt = e.target.value;
-    values[i].value = txt.replace(/[\u4e00-\u9fa5]|[^\d.]/g,'');       //处理中文输入法的情况
-    obj[id] = values;
+    values[idd].value = txt.replace(/[\u4e00-\u9fa5]|[^\d.]/g,'');       //处理中文输入法的情况
     if(/[\u4e00-\u9fa5]|[^\d.]/g.test(txt)){
       e.target.value = txt.replace(/[\u4e00-\u9fa5]|[^\d.]/g,'');
     }
-    this.setState({
-      isCalculated:false,
-      calcuValues:obj
-    });
+  
+    dataCopy[i].details[j].content.details = values
+    setChronicPush&&setChronicPush(dataCopy)
   }
   handleForRadio(id,calcuContent,i,fidx){//计算公式
     const { calcuValues } = this.state;
@@ -295,11 +298,10 @@ class ChronicInfo extends React.Component{
       radioVal:Object.assign({},obj.radioVal),//不设置radioVal只有最近一次选中的值
     })
   }
-  calcuFormula(id,it) { //计算公式计算
-    const { calcuFormula } = this.props;
+  calcuFormula(id,it,i,j) { //计算公式计算
+    const {calcuFormula, data } = this.props;
     let item = deepClone(it);
-    const values = this.state.calcuValues;
-    const calcuValues = Object.keys(values).length&&values[id]?values[id]:item.content.details;
+    const calcuValues = item.content.details
     let allHasInfo = true;
     for (let i = 0; i < calcuValues.length; i++) {
       if(calcuValues[i].controlType == 2) {  //输入框类型的有没有填值
@@ -325,7 +327,7 @@ class ChronicInfo extends React.Component{
         data: item,
         disId: id
       };
-      calcuFormula(param);
+      calcuFormula(param,data,i, j);
       this.setState({
         isCalculated:true
       });
@@ -404,9 +406,15 @@ class ChronicInfo extends React.Component{
                                 </span>
                               </p>
                         }else if(it.type==2){
-                          const cres = calcuResult&&calcuResult[v.conceptId]||it.content.result;
+                          //如果保存过,则使用保存内容
+                          // const cres = calcuResult&&calcuResult[v.conceptId]||it.content.result;
+                          //每次都取最新推送内容
+                          const cres = it.content.result || [];
                           const result = cres&&cres[1]&&cres[1].text;
-                          const details = calcuValues&&calcuValues[v.conceptId]||it.content.details;
+                          //如果保存过,则使用保存内容
+                          // const details = calcuValues&&calcuValues[v.conceptId]||it.content.details;
+                          //每次都取最新推送内容
+                          const details = it.content.details || [];
                           return <div className={style["marTop"]}>
                             <span className={style["limit"]}>
                               计算公式结果:
@@ -449,7 +457,7 @@ class ChronicInfo extends React.Component{
                                           <span>{item.isShow == '0' ? item.name+':':'请输入'+item.name+':'}</span>
                                         </td>
                                         <td>
-                                          {item.isShow == '0' ? item.value + ' ' +item.uint : <input type="text" className={style['itemInp']} placeholder="请输入"  value={item.value} onInput={this.handleInputformula.bind(this,v.conceptId,details,idd)}/>}
+                                          {item.isShow == '0' ? item.value + ' ' +item.uint : <input type="text" className={style['itemInp']} placeholder="请输入"  value={item.value} onInput={this.handleInputformula.bind(this,v.conceptId,details,i,j,idd,cres)}/>}
                                         </td>
                                         <td>
                                           {item.isShow != '0'&&<span>{item.uint}</span>}
@@ -459,7 +467,7 @@ class ChronicInfo extends React.Component{
                                     }
                                 })}
                                 </table>
-                                <div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,v.conceptId,it)}>计算</div>
+                                <div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,v.conceptId,it,i,j)}>计算</div>
                                 <table>
                                   {cres && Array.isArray(cres) &&cres.map((itemResult, resultIndex) => {
                                     return <tr>

+ 15 - 2
src/containers/AssessResult.js

@@ -76,6 +76,18 @@ function mapDispatchToProps(dispatch) {
         data:deepClone(data)
       })
     },
+    // setCalcuInfo(id, calcuVal, calcuResult) {
+    //   dispatch({
+    //     type: SET_CHRONIC_CALCU_RESULT,
+    //     result:calcuResult,
+    //     id:id
+    //   });
+    //   dispatch({
+    //     type:SET_CALCU_VALUES,
+    //     data:deepClone(calcuVal),
+    //     id:id
+    //   })
+    // },
     showScaleFn(item,isPop){
       dispatch({
         type:SHOW_TABLE_LIST,
@@ -101,10 +113,11 @@ function mapDispatchToProps(dispatch) {
         wholeResults: data
       })
     },
-    saveCalcuValue(data){
+    saveCalcuValue(data,id){
       dispatch({
         type:SET_CALCU_VALUES,
-        data
+        data,
+        id
       })
     }
   }

+ 26 - 12
src/containers/ChronicInfo.js

@@ -99,27 +99,41 @@ function mapDispatchToProps(dispatch){
         type: SET_CHRONIC_PUSHS,
         data: data
       });
+     
+    },
+    setCalcuInfo(id, calcuVal, calcuResult) {
       dispatch({
-        type:SET_CALCU_VALUES,
-        data:calcuItem,
-        id
+        type: SET_CHRONIC_CALCU_RESULT,
+        result:calcuResult,
+        id:id
       });
+      dispatch({
+        type:SET_CALCU_VALUES,
+        data:deepClone(calcuVal),
+        id:id
+      })
     },
     // 计算公式计算
-    calcuFormula(param) {
+    calcuFormula(param,data,i, j) {
       getFormulaResult(param).then((res)=>{
         if(+res.data.code==0){
           const result = res.data.data.result;
+          const dataCopy = deepClone(data)
+          dataCopy[i].details[j].content.result = result
           dispatch({
-            type: SET_CHRONIC_CALCU_RESULT,
-            result:deepClone(result),
-            id:param.disId
+            type: SET_CHRONIC_PUSHS,
+            data: dataCopy
           });
-          dispatch({
-            type:SET_CALCU_VALUES,
-            data:param.data.content.details,
-            id:param.disId
-          })
+          // dispatch({
+          //   type: SET_CHRONIC_CALCU_RESULT,
+          //   result:deepClone(result),
+          //   id:param.disId
+          // });
+          // dispatch({
+          //   type:SET_CALCU_VALUES,
+          //   data:param.data.content.details,
+          //   id:param.disId
+          // })
         }else{
           Notify.error(res.data.msg||'计算没有结果返回');
         }

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

@@ -22,7 +22,6 @@ export const clearTreat = (state, action) => {
     res.adversReactionList=[];
     res.hasFollowUp = false;
     res.followUp = '';
-    console.log('res', res)
     return res
 }