Prechádzať zdrojové kódy

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

zhouna 6 rokov pred
rodič
commit
bbc38343b8

+ 9 - 2
src/common/components/InlineTag/index.jsx

@@ -32,6 +32,11 @@ class InlineTag extends Component {
   }
   changeToEdit(e){
     const {handledbClick,id} = this.props;
+    // 输入框有值才可以双击编辑
+    const text = this.$span.current.innerText;
+    if(!text.trim()){
+      return
+    }
     this.setState({
       editable:true
     });
@@ -64,6 +69,7 @@ class InlineTag extends Component {
    // e.target.innerText = text;  
   }
   handleBlur(e){         //鼠标离开是保存值到store中
+    e.stopPropagation(); //不阻止会触发外层div的失焦事件
     const {value} = this.state;
     const {handleInput,ikey,prefix,suffix} = this.props;
     this.$span.current.innerText?(this.$span.current.innerText=''):(this.$span.current.innerHTML='');      //修改生成文字变成输入的2倍bug
@@ -118,12 +124,13 @@ class InlineTag extends Component {
   }
   render(){
     const {placeholder,value,prefix,suffix} = this.props;
+    const {editable} = this.state;
     const inp = this.state.value;
     return <div className={this.getStyle()}
                  onDoubleClick={this.changeToEdit}
-                  onClick={this.handleFixClick}
+                  onClick={!editable?this.handleFixClick:''}
                  onkeydown={handleEnter}
-                 onBlur={this.changeToClick} ref={this.$box} contentEditable={this.state.editable}>
+                 onBlur={this.changeToClick} ref={this.$box} contentEditable={editable}>
                 {prefix}
                 <span className={style['free-in']}
                       contentEditable={true}

+ 3 - 2
src/common/components/MiniToast/index.jsx

@@ -8,6 +8,7 @@ import close from "../../images/close-icon.png";
 *children:弹窗内容
 *show:弹窗显示
 *footer:是否显示底部“确定”按钮,默认不显示
+*confirmText:确认按钮文字
 *close:关闭弹窗事件
 *confirm:确定事件
 *使用时,父元素需要加相对定位position: relative;
@@ -29,7 +30,7 @@ class MiniToast extends React.Component{
 
 
   render(){
-    const {show,title,icon,children,footer} = this.props;
+    const {show,title,icon,children,footer,confirmText} = this.props;
     return <div className={style["infoBox"]} style={{display:show?'block':'none'}}>
               <p className={style["infoTitle"]}>
                 {icon?<img src={icon} />:''}
@@ -38,7 +39,7 @@ class MiniToast extends React.Component{
               </p>
               <div className={style["infoCon"]}>{children}</div>
               <div className={style["infoFoot"]} style={{display:footer?'block':'none'}}>
-                <span onClick={this.confirm.bind(this)}>确定</span>
+                <span onClick={this.confirm.bind(this)}>{confirmText?confirmText:'确定'}</span>
               </div>
             </div>
   }

+ 16 - 10
src/components/AssessResult/AssessHis/index.jsx

@@ -42,7 +42,7 @@ class AssessResultHis extends Component {
       this.props.getAssessHis(this.props.inquiryId);
     }
   }
-  handoutTypes(obj,item,i){
+  handoutTypes(obj,item,i,id){
     const {wholeAssess,wholeIndexs,chooseSelecteds,scaleResult,wholeResults,wholeAssessText,calcuResult,calcuValues,scaleItems} =obj;
     const {getIndexData,inquiryDate,indexData,timeTypes,indexNames} = this.props;
     const {chartTimeTypes} = this.state;
@@ -61,8 +61,7 @@ class AssessResultHis extends Component {
                           scaleItems={scaleItems}
                           result={wholeResults}
                           disabled={true}
-                          text={wholeAssessText}
-                          isRecommend={item.isRecommend}></ScaleItem>;
+                          text={wholeAssessText[id]}></ScaleItem>;
       case 1:     //数据来源于大数据
         return <ChooseItem title={name} data={list} selecteds={chooseSelecteds&&chooseSelecteds[i]} disabled={true}></ChooseItem>;
       case 10:    //数据来源于后台
@@ -78,19 +77,26 @@ class AssessResultHis extends Component {
         return '';
     }
   }
-  getAssessContent(){
+  getMultAssess(){
     const { list,inquiryId } = this.props;
     const obj = list&&list[inquiryId];
-    const data = obj&&obj.data;
+    const items = obj&&obj.data;
+    let arr = [];
+    for(let name in items){
+      arr.push(<div className={style['dis-item']}><p>{name}:</p>{this.getAssessContent(items[name],obj,name)}</div>)
+    }
+    return arr;
+  }
+  getAssessContent(data,obj,name){
     if(data&&data.length>0){
       return data.map((it,i)=>{
-        return this.handoutTypes(obj,it,i);
+        return this.handoutTypes(obj,it,i,name);
       });
     }else{
       return data===null||(data&&data.length==0)?<p className={style['no-data']}>没有历史评估记录!</p>:'';
     }
   }
-  showScaleFn(item,pid){
+  showScaleFn(item){
     const { list,inquiryId } = this.props;
     const obj = list&&list[inquiryId];
     if(item&&item.id&&!(obj.scaleInfo&&obj.scaleInfo[item.id])){
@@ -127,7 +133,7 @@ class AssessResultHis extends Component {
     }
   }
   render() {
-    const { loading,isChronic, list,inquiryId } = this.props;
+    const { loading, list,inquiryId } = this.props;
     const {tableName,tableId,showScale,showAssess} = this.state;
     const obj = list&&list[inquiryId];
     const scaleFooter = <div className={style['footer']}>
@@ -136,12 +142,12 @@ class AssessResultHis extends Component {
     </div>;
     return <div className={style['assess-cont']}>
       <div className={style['assess-result']}>
-        <p className={style['enter']}>{isChronic?'管理和评估':'推荐'}结果:{showAssess?<a onClick={this.showAssessFn}>收起结果<img src={arrowDown} /></a>:<a onClick={this.showAssessFn}>查看结果<img src={arrow} /></a>}</p>
+        <p className={style['enter']}>管理和评估结果:{showAssess?<a onClick={this.showAssessFn}>收起结果<img src={arrowDown} /></a>:<a onClick={this.showAssessFn}>查看结果<img src={arrow} /></a>}</p>
       </div>
       <div className={style['assess-box']} style={{display:showAssess?'block':'none'}}>
         {loading?<p className={style['loading']}><img src={loadingIcon} alt='loading...'/></p>:''}
         {/*以下必须做判断再执行getAssessContent,否则再次打开评估历史时图表显示有问题,因为提前渲染*/}
-        {showAssess?this.getAssessContent():''}
+        {showAssess?<div className='his-item'>{this.getMultAssess()}</div>:''}
       </div>
       {showScale?<ComplexModal onclose={this.showScaleFn} footer={scaleFooter}
                                           title={tableName}

+ 8 - 0
src/components/AssessResult/AssessHis/index.less

@@ -65,4 +65,12 @@
     float: right;
     margin-right: 20px;
   }
+}
+.dis-item{
+  p{
+    padding-left: 15px;
+    line-height: 30px;
+    background: #e4e4e4;
+    font-weight: bold;
+  }
 }

+ 71 - 78
src/components/AssessResult/ScaleItem/index.jsx

@@ -27,8 +27,8 @@ class ScaleItem extends Component {
       radioVal:Object.assign({},radioVal)||{},
       formulaId:'',
       text:props.text,
-      formulaData:{},       //计算公式值
-      isFormulaConfirm:false,
+      isCalculated:false,
+      calcuValues:deepClone(props.calcuValues),   //计算公式填的值
     };
     this.getItems = this.getItems.bind(this);
     this.getDetailItems = this.getDetailItems.bind(this);
@@ -62,15 +62,10 @@ class ScaleItem extends Component {
       optionId:null,
     });
   }
-  handleShowScale(item,parentId,pIndex){
-    const {showScaleFn,closeAssess,showListScale} = this.props;
+  handleShowScale(item){
+    const {showScaleFn,closeAssess} = this.props;
     closeAssess&&closeAssess();    //关闭评估弹窗
-    if(!parentId){                //显示量表
-      showListScale&&showListScale(item);
-    }else{
-      showScaleFn&&showScaleFn(item,parentId,pIndex);
-    }
-
+    showScaleFn&&showScaleFn(item);
   }
   handleRadio(item,parent){
     let {result} = this.props;
@@ -79,58 +74,66 @@ class ScaleItem extends Component {
       radioVal:Object.assign({},radioVal,{[parent.id]:item.detailName})
     })
   }
-  handleForRadio(id,idd, ind){
-    const {formulaData} = this.state;
-    const {calcuValues} = this.props;
-    const obj = deepClone(formulaData);
-    const data = obj&&obj[id];
-    data.content = calcuValues&&calcuValues[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;
-    };
+  handleInputformula(id,calcuContent,i,e) {
+    const {calcuValues} = this.state;
+    let obj = deepClone(calcuValues);
+    let values = (obj&&obj[id])||deepClone(calcuContent);
+    values[i].value = e.target.value;
+    obj[id] = values;
     this.setState({
-      formulaData:obj
+      isCalculated:false,
+      calcuValues:obj
     });
   }
-  showFormula(id,it){
-    const {formulaData} = this.state;
-    const obj = deepClone(formulaData)||{};
-    if(!obj[id]){
-      obj[id] = it;
+  handleForRadio(id,calcuContent,i,fidx){//计算公式
+    const { calcuValues } = this.state;
+    let obj = deepClone(calcuValues);
+    let values = (obj&&obj[id])||deepClone(calcuContent);
+    let details = values[i].details;
+    for(let x=0;x<details.length;x++){
+      if(x!=fidx){
+        details[x].state=0;
+      }else{
+        details[x].state=1;
+      }
     }
+    obj[id] = values;
     this.setState({
-      formulaId:id,
-      formulaData:obj
+      isCalculated:false,
+      calcuValues:obj
     });
   }
-  confirmFormula(){//计算公式确定
+  showFormula(id){
     this.setState({
-      isFormulaConfirm:true,
-      formulaId:null
+      formulaId:id
     });
   }
   closeFormula(){
-    this.setState({
-      formulaId:null
-    })
+    if(this.state.isCalculated){
+      this.setState({
+        formulaId:null,
+      });
+    }else{
+      this.setState({
+        formulaId:null,
+        calcuValues:deepClone(this.props.calcuValues)
+      });
+    }
   }
-  calcuFormula() { //计算公式计算
+  calcuFormula(item) { //计算公式计算
     const { calcuResult,handleCalcu } = this.props;
-    const {formulaId,formulaData} = this.state;
-    let it=formulaData&&formulaData[formulaId];
+    const {formulaId,calcuValues} = this.state;
+    let it=calcuValues&&calcuValues[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) {
+    for (let i = 0; i < it.length; i++) {
+      if(it[i].controlType == 2) {  //输入框类型的有没有填值
+        if(!it[i].value) {
           allHasInfo = false
         }
-      } else if(it.content.details[i].controlType == 0) {
+      } else if(it[i].controlType == 0) {
         let hasSelect = false;
-        for( let z = 0; z <it.content.details[i].details.length; z++) {
-          if(it.content.details[i].details[z].state == 1) {
+        for( let z = 0; z <it[i].details.length; z++) {
+          if(it[i].details[z].state == 1) {
             hasSelect= true
           }
         }
@@ -138,15 +141,18 @@ class ScaleItem extends Component {
           allHasInfo = false
         }
       }
-
     }
+    item.content.details = calcuValues[formulaId];
     if(allHasInfo) { //所有都有值,则计算
       let results = deepClone(calcuResult);
-      getFormulaResult({type:2,data:it}).then((res)=>{
+      getFormulaResult({type:2,data:item}).then((res)=>{
         if(+res.data.code==0){
           const result = res.data.data.result;
           results[formulaId] = result;
-          handleCalcu&&handleCalcu(results);
+          handleCalcu&&handleCalcu(calcuValues,results);
+          this.setState({
+            isCalculated:true
+          });
         }else{
           Notify.error(res.data.msg||'计算没有结果返回');
         }
@@ -155,49 +161,35 @@ class ScaleItem extends Component {
       Notify.info('请填写计算公式内容')
     }
   }
-  handleInputformula(id,idd,text) {
-    const {formulaData} = this.state;
-    const {calcuValues} = this.props;
-    const obj = deepClone(formulaData);
-    const data = obj&&obj[id];
-    data.content = calcuValues&&calcuValues[id];
-    if (data) {
-      data.content.details[idd].value = text;
-    }
-    this.setState({
-      formulaData:obj
-    });
-  }
   getDetailItems(item,i){
     let arr = [],temp='';
-    const {indexs,result,formulaResult,calcuValues,disabled,calcuResult} = this.props;
-    const {optionId,formulaId,radioVal,formulaData} = this.state;
+    const {indexs,result,formulaResult,disabled,calcuResult} = this.props;
+    const {optionId,formulaId,radioVal,calcuValues} = this.state;
     const possible=result&&result.possible;
 
     item.details.map((its,j)=>{
+      let it=its;
       if(indexs[i]&&indexs[i].includes(j)){
-        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,i)}>
+                      onClick={()=>this.handleShowScale(it.content)}>
                         {scaleRes&&scaleRes.result?(' 【'+it.content.name+'】 结果:'+scaleRes.result.value+" "+(scaleRes.result.text||'')):'【'+it.content.name+'】'}
                         </span>;
         }else if(its.type==2){      //计算公式
-          it=formulaData[formulaId]||deepClone(its);
           const showRes = calcuResult&&calcuResult[item.id]||it.content.result;
-          const details = calcuValues&&calcuValues[item.id]&&calcuValues[item.id].details||it.content.details;
+          const details = calcuValues&&calcuValues[item.id]||it.content.details;
           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,it)}>{cresult?cresult:'请选择'}</span>
                     <img src={level1} />
                     <MiniToast title={it.content.name}
+                               confirmText='关闭'
                                icon={allTableIcon}
                                show={formulaId&&formulaId==item.id?true:false}
                                close={this.closeFormula}
-                               confirm={this.confirmFormula.bind(this,item,i)}
+                               confirm={this.closeFormula}
                                footer="true">
                       <table>
                         {details.map((item1,idd)=>{
@@ -212,7 +204,7 @@ class ScaleItem extends Component {
                                     <Radio label={ii.detailName}
                                            isSelect={ii.state == 1}
                                            disabled={disabled}
-                                           handleClick={this.handleForRadio.bind(this,item.id,idd, ind)}>
+                                           handleClick={this.handleForRadio.bind(this,item.id,details,idd,ind)}>
                                       >
                                     </Radio>
                                   </div>
@@ -225,7 +217,7 @@ class ScaleItem extends Component {
                                 <span>{'请输入'+item1.name+':'}</span>
                               </td>
                               <td>
-                                {disabled?item1.value:<input type="text" placeholder="请输入"  value={item1.value} onInput={(e)=>this.handleInputformula(item.id,idd,e.target.value)}/>}
+                                {disabled?item1.value:<input type="text" placeholder="请输入"  value={item1.value} onInput={(e)=>this.handleInputformula(item.id,details,idd,e)}/>}
                               </td>
                               <td>
                                 <span>{item1.uint}</span>
@@ -235,7 +227,7 @@ class ScaleItem extends Component {
                           }
                         })}
                       </table>
-                      {disabled?"":<div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this)}>计算</div>}
+                      {disabled?"":<div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,its)}>计算</div>}
                       <table>
                         {showRes && Array.isArray(showRes) &&showRes.map((itemResult) => {
                           return <tr>
@@ -251,7 +243,6 @@ class ScaleItem extends Component {
                     </MiniToast>
                 </div>
         }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[item.id]?possible[item.id]:'请选择'}</span>
@@ -267,6 +258,7 @@ class ScaleItem extends Component {
                           {it.content.details&&it.content.details.map((lis,ind)=>{
                             return <div className={style["chooseItem"]}>
                               <Radio label={lis.detailName}
+                                     disabled={disabled}
                                      isSelect={radioVal&&radioVal[item.id]==lis.detailName}
                                      handleClick={this.handleRadio.bind(this,lis,item,i)}>
                               </Radio>
@@ -277,13 +269,14 @@ class ScaleItem extends Component {
                     </MiniToast>
                   </div>;
         }
+        const passId = item.details[j].type==1?item.details[j].content.id:undefined;
         const li = disabled?<li>
             <span>{item.name}:</span>
             <div className={style['row']}>{temp}</div>
           </li>:<li>
           <span>{item.name}:</span>
           <div className={style['row']}>{temp}</div>
-          <div className={style["recommend"]} onClick={()=>this.props.handleRemove(false,i,j)}>
+          <div className={style["recommend"]} onClick={()=>this.props.handleRemove(false,i,j,passId)}>
             <img className={style["deleteIcon"]} src={deleteIcon} />
           </div>
         </li>;
@@ -336,9 +329,9 @@ class ScaleItem extends Component {
     }
   }
   render() {
-    const {title,handleInp,disabled,isRecommend} = this.props;
+    const {title,handleInp,disabled} = this.props;
     return <div className={style['assess-item']}>
-      {isRecommend?'':<h2>{title}</h2>}
+      <h2>{title}</h2>
       <div className={style['item-content']}>
         <ul>
           {
@@ -347,7 +340,7 @@ class ScaleItem extends Component {
           {
             this.getScales()
           }
-          {isRecommend?'':<li>
+          <li>
             <textarea className={style['edit-row']}
                       ref={this.$area}
                       type="text"
@@ -356,7 +349,7 @@ class ScaleItem extends Component {
                       onBlur={()=>handleInp(this.state.text)}
                       onInput={this.handleInput.bind(this)}>{this.state.text}</textarea>
             <div className={style['textareaStatic']}>评估描述:{this.state.text}</div>
-          </li>}
+          </li>
         </ul>
       </div>
     </div>;

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

@@ -21,12 +21,14 @@ class AssessResult extends Component {
       chartTimeTypes:{},      //图表模块
       wholeAssessItems:wholeIndexs,     //整体评估模块
       wholeScaleItems:wholeScale,
-      wholeAssessText:props.wholeAssessText||'',     //整体评估补充说明
+      wholeAssessText:props.wholeAssessText||{},     //整体评估补充说明
       wholeResults:{
         possible:props.possible,
         radioVal:props.radioVal
       },
       calcuResult:props.calcuResult,     //计算公式结果
+      calcuValues:props.calcuValues,    //计算公式填的值
+      addedScaleIds:props.addedScaleIds,    //已加入量表的id
     };
     this.handleChooseChange = this.handleChooseChange.bind(this);
     this.handleScaleDel = this.handleScaleDel.bind(this);
@@ -34,30 +36,41 @@ class AssessResult extends Component {
     this.handleResult = this.handleResult.bind(this);
   }
   componentWillMount(){
+    const {disId,disName,getAssess} = this.props;
     //获取评估
-    this.props.getAssess(this.props.isRecommend);
+    getAssess&&getAssess(disId,disName);
   }
   handleScaleText(text){
+    const {disName} = this.props;
+    const obj = Object.assign({},this.state.wholeAssessText);
+    obj[disName] = text;
       this.setState({
-        wholeAssessText:text
+        wholeAssessText:obj
       })
   }
-  handleScaleDel(isList,i,j){
+  handleScaleDel(isList,i,j,id){
+    let ids = [],idIndex='';
+    if(id){
+      ids = [...this.state.addedScaleIds||[]];
+      idIndex = ids.findIndex((ii)=>id==ii);
+      ids.splice(idIndex,1);
+    }
     if(isList){         //删除全部量表中的项目
       const items = [...this.state.wholeScaleItems];
       items.splice(i,1);
       this.setState({
-        wholeScaleItems: items
+        wholeScaleItems: items,
+        addedScaleIds:ids
       });
     }else{
       const items = Object.assign({},this.state.wholeAssessItems);
       const inx = items[i].findIndex(x=>x==j);
       items[i].splice(inx,1);
       this.setState({
-        wholeAssessItems: items
+        wholeAssessItems: items,
+        addedScaleIds:ids
       });
     }
-
   }
   handleResult(opt){
     const {wholeResults} = this.state.wholeResults;
@@ -78,35 +91,34 @@ class AssessResult extends Component {
       chartTimeTypes:Object.assign(chartTimeTypes,{[i]:selects})
     });
   }
-  handleCalcu(ret){
+  handleCalcu(values,ret){
     this.setState({
-      calcuResult:ret
+      calcuResult:ret,
+      calcuValues:values
     });
   }
   componentWillUnmount(){
     //点确定关闭弹窗时把参数传到父组件去
-    const {handleSave,isAssessConfirm,clearChartData,handleSaveCalcu,isRecommend,saveCalcuResult} = this.props;
+    const {saveAssessInfos,isAssessConfirm,clearChartData,handleSavePossible} = this.props;
     clearChartData&&clearChartData();
-    if(!isRecommend&&isAssessConfirm && readyKeepHistory() == 1){
+    if(isAssessConfirm && readyKeepHistory() == 1){
       Notify.error("主诉不能为空");
-    }else if(!isRecommend&&isAssessConfirm && readyKeepHistory() == 2){
+    }else if(isAssessConfirm && readyKeepHistory() == 2){
       Notify.info('诊断不能为空');
     }
-    handleSaveCalcu&&handleSaveCalcu(this.state.wholeResults);
+    handleSavePossible&&handleSavePossible(this.state.wholeResults);
     if(isAssessConfirm){
-      handleSave(this.state,readyKeepHistory(),isRecommend);
-    }else{
-      saveCalcuResult&&saveCalcuResult(this.state.calcuResult);
+      saveAssessInfos(this.state,readyKeepHistory());
     }
   }
   handoutTypes(item,i){
-    const {getIndexData,indexData,timeTypes,wholeIndexs,closeAssess,showScaleFn,isRecommend,chronicPushItems,
-      formulaResult,calcuValues,indexNames,showListScale} =this.props;
+    const {getIndexData,indexData,timeTypes,wholeIndexs,closeAssess,showScaleFn,chronicPushItems,
+      formulaResult,indexNames,disName} =this.props;
     let obj = [];
     Object.keys(wholeIndexs).map((i)=>{
       obj[i]=chronicPushItems[i];
     });
-    const {chooseSelecteds,wholeAssessItems,wholeScaleItems,wholeAssessText,chartTimeTypes,wholeResults,calcuResult} = this.state;
+    const {chooseSelecteds,wholeAssessItems,wholeScaleItems,wholeAssessText,chartTimeTypes,wholeResults,calcuResult,calcuValues} = this.state;
     const chartData = indexData;
     const name = item.regionName+":";
     const list = item.data&&item.data.rows;
@@ -118,16 +130,14 @@ class AssessResult extends Component {
                           handleInp={this.handleScaleText}
                           handleRes={this.handleResult}
                           handleCalcu={this.handleCalcu.bind(this)}
-                          text={wholeAssessText}
+                          text={wholeAssessText[disName]}
                           indexs={wholeAssessItems}
                           scaleItems ={wholeScaleItems}
                           result={wholeResults}
                           showScaleFn={showScaleFn}
-                          showListScale={showListScale}
                           calcuResult={calcuResult}
                           calcuValues={calcuValues}
                           formulaResult={formulaResult}
-                          isRecommend={isRecommend}
                           chronicPushItems={chronicPushItems}
                           closeAssess={closeAssess}></ScaleItem>;
       case 1:     //数据来源于大数据
@@ -148,10 +158,8 @@ class AssessResult extends Component {
     }
   }
   render() {
-    //const {data} =this.props;
-    let { isRecommend } = this.props;
-    const wholeItems = [{regionName: "整体评估",regionType: "0"}];
-    const data = isRecommend?wholeItems:this.props.data;
+    const {disName} =this.props;
+    const data = this.props.data&&this.props.data[disName];
     return <div className={style['assess-cont']} id="AssistResult">
       <div className={style['printShow']}>
         <Information></Information>

+ 87 - 175
src/components/ChronicInfo/index.jsx

@@ -4,14 +4,12 @@ import infoPic from "../../common/images/info-pic.png";
 import chronicPic from "../../common/images/chronic.png";
 import level1 from "../../common/images/级别1.png";
 import printIcon from '@common/images/team.png';
-import manageIcon from '@common/images/manage.png';
 import tableIcon from '@common/images/table.png';
 import allTableIcon from '@common/images/all-table.png';
 import add from '@common/images/add-result.png';
 import added from '@common/images/first.png';
 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 {deepClone} from '@utils/tools';
@@ -37,16 +35,11 @@ class ChronicInfo extends React.Component{
       formulaId:null, //计算公式
       optionId:null,  //可能结果,
       isAssessConfirm:false,    //是否点击评估弹窗确定按钮
-      tableName:'' , //点击的量表名称
-      tableId:null ,//点击的量表id
-      parentId:null ,
-      parentIndex:null,
       radioVal:{},  //可能结果选择内容
       possible:{},  //可能结果
       formulaParam: {}, //量表计算公式计算入参
-      showRecommend:false,      //显示推荐结果弹窗
-      isRecommendConfirm:false,   //推荐结果确定
-      isFormulaConfirm:false,     //计算公式确定
+      isCalculated:false,     //是否刚计算过,关闭时值与结果对应
+      calcuValues:deepClone(props.calcuValues),       //计算公式填的值
     };
 
     this.showInfo = this.showInfo.bind(this);
@@ -55,15 +48,12 @@ class ChronicInfo extends React.Component{
     this.closeOption = this.closeOption.bind(this);
     this.showTable = this.showTable.bind(this);//显示量表弹窗
     this.closeTable = this.closeTable.bind(this);//关闭量表弹窗
-    this.showAssessFn = this.showAssessFn.bind(this); //开关评估弹窗
     this.close = this.close.bind(this); //关闭量表列表
     this.showFormula = this.showFormula.bind(this); //打开计算公式
     this.closeFormula = this.closeFormula.bind(this); //关闭计算公式
     this.handleAddAssessItem = this.handleAddAssessItem.bind(this);   //加入病例记录
-    this.handleSaveAssess = this.handleSaveAssess.bind(this);       //评估弹窗确定
-    this.onPrint = this.onPrint.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);     //保存评估修改的计算和可能结果
     this.getAddBtnState = this.getAddBtnState.bind(this);
   }
@@ -129,8 +119,8 @@ class ChronicInfo extends React.Component{
       });
     } 
   }
-  showTable(it,parentId,parentIndex){
-    const {formulaResult,scaleInfo} = this.props;
+  showTable(it){
+    const {scaleInfo} = this.props;
     // 密西根糖尿病周围神经病评分(MDNS), id:40744
     const item = {
       id:it.id,
@@ -138,40 +128,19 @@ class ChronicInfo extends React.Component{
     };
     // 判断:store里已经有该量表就无需重新调接口
     if(scaleInfo&&scaleInfo[it.id]){
-      this.props.hideList({name:'showTable',value:true});
+      this.props.hideList({name:'showTable',value:true},it);
     }else{
       this.props.getScaleInfo(item);
     }
 
     this.setState({
-      tableName:it.name,
-      tableId:it.id,
-      parentId:parentId,
-      parentIndex:parentIndex,
       formulaId:null, //关闭计算公式和可能结果弹窗
       optionId:null
     })
   }
   closeTable(){
-    this.setState({
-      tableName:'',
-      tableId:null,
-      parentId:null,
-    })
     this.props.hideList({name:'showTable',value:false});
   }
-  showAssessFn(){
-    this.setState({
-      showAssess:!this.state.showAssess,
-      isAssessConfirm:false
-    });
-  }
-  showRecommendFn(){
-    this.setState({
-      isRecommendConfirm:false,
-      showRecommend:!this.state.showRecommend,
-    });
-  }
   showFormula(id){//计算公式
     this.setState({
       formulaId:id,
@@ -179,63 +148,48 @@ class ChronicInfo extends React.Component{
     })
   }
   closeFormula(){
-    this.setState({
-      formulaId:null
-    })
+    if(this.state.isCalculated){
+      this.setState({
+        formulaId:null,
+      });
+    }else{
+      this.setState({
+        formulaId:null,
+        calcuValues:deepClone(this.props.calcuValues)
+      });
+    }
   }
   handleAddAssessItem(v,pIndex,i){
     const {addAssessItem} = this.props;
     addAssessItem(v,pIndex,i);
   }
-  handleSaveRecommend(){
-    this.setState({
-      isRecommendConfirm:true
-    });
-    const that=this;
-    setTimeout(()=>{
-      that.showRecommendFn();
-    });
-  }
-  handleSaveAssess(){
+  handleInputformula(id,calcuContent,i,e) {
+    const {calcuValues} = this.state;
+    let obj = deepClone(calcuValues);
+    let values = (obj&&obj[id])||deepClone(calcuContent);
+    values[i].value = e.target.value;
+    obj[id] = values;
     this.setState({
-      isAssessConfirm:true
-    });
-    const that=this;
-    setTimeout(()=>{
-      that.showAssessFn();
+      isCalculated:false,
+      calcuValues:obj
     });
   }
-  handleInputformula(v,i, j,idd,  e) {
-    const { data, setChronicPush,calcuValues } = this.props;
-    let data1 = JSON.parse(JSON.stringify(data));
-    if(calcuValues&&calcuValues[data1[i].id]){
-      data1[i].details[j].content=calcuValues&&calcuValues[data1[i].id];
-    }
-    const text = e.target.value;
-    if (data1[i].details) {
-      data1[i].details[j].content.details[idd].value = text
-    }
-
-    setChronicPush(data1,data1[i].id,data1[i].details[j].content)
-  }
-  handleForRadio(ii,v,i, j,idd, ind){//计算公式
-    const { data, setChronicPush,calcuValues } = this.props;
-    const data1 = JSON.parse(JSON.stringify(data));
-    if(calcuValues&&calcuValues[data1[i].id]){
-      data1[i].details[j].content=calcuValues&&calcuValues[data1[i].id];
-    }
-    if (data1[i].details) {
-      for(let z = 0; z <  data1[i].details[j].content.details[idd].details.length; z++) {
-        data1[i].details[j].content.details[idd].details[z].state = 0
+  handleForRadio(id,calcuContent,i,fidx){//计算公式
+    const { calcuValues } = this.state;
+    let obj = deepClone(calcuValues);
+    let values = (obj&&obj[id])||deepClone(calcuContent);
+    let details = values[i].details;
+    for(let x=0;x<details.length;x++){
+      if(x!=fidx){
+        details[x].state=0;
+      }else{
+        details[x].state=1;
       }
-      data1[i].details[j].content.details[idd].details[ind].state = 1
     }
-    setChronicPush(data1,data1[i].id,data1[i].details[j].content);
-  }
-  confirmFormula(){//计算公式确定
+    obj[id] = values;
     this.setState({
-      isFormulaConfirm:true,
-      formulaId:null
+      isCalculated:false,
+      calcuValues:obj
     });
   }
   handleRadio(item,parent){//可能结果
@@ -260,51 +214,55 @@ class ChronicInfo extends React.Component{
       radioVal:Object.assign({},obj.radioVal),//不设置radioVal只有最近一次选中的值
     })
   }
-  calcuFormula(item,j, v, i) { //计算公式计算
-    const { calcuFormula ,data,calcuValues} = this.props;
-    let pushObj = deepClone(data);
-    if(calcuValues&&calcuValues[pushObj[i].id]){
-      pushObj[i].details[j].content=calcuValues&&calcuValues[pushObj[i].id];
-    }
-    let it = pushObj[i].details[j];
+  calcuFormula(id,it) { //计算公式计算
+    const { calcuFormula } = this.props;
+    let item = deepClone(it);
+    const values = this.state.calcuValues;
+    const calcuValues = Object.keys(values).length&&values[id]?values[id]:item.content.details;
     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
+    for (let i = 0; i < calcuValues.length; i++) {
+      if(calcuValues[i].controlType == 2) {  //输入框类型的有没有填值
+        if(!calcuValues[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
+      } else if(calcuValues[i].controlType == 1) {
+        let hasSelect = false;
+        for( let z = 0; z <calcuValues[i].details.length; z++) {
+          if(calcuValues[i].details[z].state == 1) {
+            hasSelect= true;
           }
         }
         if(!hasSelect) {
-          allHasInfo = false
+          allHasInfo = false;
         }
       }
-
     }
+    item.content.details = calcuValues;
     if(allHasInfo) { //所有都有值,则计算
       let param = {
         type: 2,
-        data: it,
-        disId: v.id,
-        pIndex: j,
-        ppIndex: i
+        data: item,
+        disId: id
       };
-      calcuFormula({param,chronicPushItems:pushObj})
+      calcuFormula(param);
+      this.setState({
+        isCalculated:true
+      });
     } else {  //不是所有值都填过了
       Notify.info('请填写计算公式内容')
     }
   }
   getAddBtnState(flag,v,i,j){
-    const {indexs,wholeScaleItems,addScaleItems} = this.props;
-    let btn = '';
+    const {indexs,wholeScaleItems,addScaleItems,chronicMagItem,chronicDesease,addedScaleIds} = this.props;
+    let btn = '',reCheck=false;
+    let show = chronicMagItem&&chronicMagItem.name||chronicDesease&&chronicDesease.name;
+    if(!show){
+      return '';
+    }
     if(flag){     //有结果
       if(j!==undefined){
-        btn = indexs[i]&&indexs[i].includes(j)?<span className={style["add-record"]}>
+        reCheck = addedScaleIds.includes(v.details[j].content.id);      //列表中是否加入同一量表
+        btn = indexs[i]&&indexs[i].includes(j)||reCheck?<span className={style["add-record"]}>
                    <img src={added} />
                    已加入
                  </span>:<span className={style["listResult"]} onClick={()=>this.handleAddAssessItem(v,i,j)}>
@@ -312,7 +270,8 @@ class ChronicInfo extends React.Component{
                    加入病历记录
                  </span>;
       }else{
-        btn = wholeScaleItems&&wholeScaleItems[i]?<span className={style["add-record"]}>
+        reCheck = addedScaleIds.includes(v.id);         //推送中是否加入同一量表
+        btn = wholeScaleItems&&wholeScaleItems[i]||reCheck?<span className={style["add-record"]}>
                    <img src={added} />
                    已加入
                  </span>:<span className={style["listResult"]} onClick={()=>addScaleItems(v,i)}>
@@ -331,8 +290,8 @@ class ChronicInfo extends React.Component{
     return btn;
   }
   getDetail(){
-    const {data,formulaResult,calcuResult,calcuValues} = this.props;
-    const {formulaId,optionId,possible,radioVal} = this.state;
+    const {data,formulaResult,calcuResult} = this.props;
+    const {formulaId,optionId,possible,radioVal,calcuValues} = this.state;
     let list = data&&data.map((v,i)=>{
                     return <div className={style["list"]}>
                       {v.name?<p>
@@ -354,7 +313,7 @@ class ChronicInfo extends React.Component{
                         }else if(it.type==2){
                           const cres = calcuResult&&calcuResult[v.id]||it.content.result;
                           const result = cres&&cres[1]&&cres[1].text;
-                          const details = calcuValues&&calcuValues[v.id]&&calcuValues[v.id].details||it.content.details;
+                          const details = calcuValues&&calcuValues[v.id]||it.content.details;
                           return <div className={style["marTop"]}>
                             <span className={style["limit"]}>
                               计算公式结果:
@@ -366,9 +325,10 @@ class ChronicInfo extends React.Component{
                             }
                             {formulaId&&formulaId==v.id&&<MiniToast title={it.content.name}
                                 icon={allTableIcon}
+                                confirmText='关闭'
                                 show={formulaId&&formulaId==v.id?true:false}
                                 close={this.closeFormula}
-                                confirm={this.confirmFormula.bind(this,v,i)}
+                                confirm={this.closeFormula}
                                 footer="true">
                                 <table>
                                 {details.map((item,idd)=>{
@@ -382,7 +342,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,v.id,details,idd,ind)}>
                                                       </Radio>
                                                   </div>
                                           })}
@@ -394,7 +354,7 @@ class ChronicInfo extends React.Component{
                                           <span>{'请输入'+item.name+':'}</span>
                                         </td>
                                         <td>
-                                          <input type="text" placeholder="请输入"  value={item.value} onInput={this.handleInputformula.bind(this,v,i, j,idd)}/>
+                                          <input type="text" placeholder="请输入"  value={item.value} onInput={this.handleInputformula.bind(this,v.id,details,idd)}/>
                                         </td>
                                         <td>
                                           <span>{item.uint}</span>
@@ -404,7 +364,7 @@ class ChronicInfo extends React.Component{
                                     }
                                 })}
                                 </table>
-                                <div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,it,j, v, i)}>计算</div>
+                                <div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,v.id,it)}>计算</div>
                                 <table>
                                   {cres && Array.isArray(cres) &&cres.map((itemResult, resultIndex) => {
                                     return <tr>
@@ -456,21 +416,19 @@ class ChronicInfo extends React.Component{
                   })
     return list;
   }
-
+  componentWillReceiveProps(next){
+    if(JSON.stringify(next.calcuValues)!=JSON.stringify(this.props.calcuValues)){
+      this.setState({
+        calcuValues:next.calcuValues
+      })
+    }
+  }
   render(){
-    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,tableList,saveAssessInfos,chronicDesease,formulaResult,showHide} = this.props;
-    const {showAssess,isAssessConfirm,tableName,tableId,parentId,parentIndex,isRecommendConfirm,showRecommend,radioVal,possible} = this.state;
+    const {chronicMagItem,tableList,chronicDesease,formulaResult,showHide} = this.props;
     return <div className={style["tips"]} style={{marginBottom:'15px'}}>
               <div className={`${style["tips-title"]} ${style["chronic"]}`}>
                 <div className={style["tips-name"]}>
@@ -479,25 +437,9 @@ class ChronicInfo extends React.Component{
                   <span className={style["redTips"]}>(页面信息有更新可能影响评估结果)</span>
                 </div>
                 <div className={style["tips-btn"]} style={{display:chronicMagItem&&chronicMagItem.name||chronicDesease&&chronicDesease.name?'block':'none'}}>
-                  <span
-                    className={style["tipsDetails"]}
-                    style={{width:'70px'}}
-                    onClick={this.showAssessFn}
-                  >
-                    管理和评估
-                  </span>
                   <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()}
@@ -518,42 +460,12 @@ class ChronicInfo extends React.Component{
                       </ul>
               </ConfirmModal>
               {showHide&&showHide.showTable?<ComplexModal onclose={this.closeTable} footer={scaleFooter}
-                      title={tableName}
+                      title={showHide.name}
                       icon={tableIcon}
                       top={20}
                       bottom={20}
                       width={820}>
-                <ScaleTable title={tableName} tableId={tableId} parentId={parentId} parentIndex={parentIndex}></ScaleTable>
-              </ComplexModal>:''}
-              {showAssess?<ComplexModal onclose={this.showAssessFn} footer={footer}
-                      title='管理和评估'
-                      icon={manageIcon}
-                      top={'3%'}
-                      bottom={'3%'}
-                      width={820}>
-                <AssessResult handleSave={saveAssessInfos}
-                              handleSaveCalcu={this.handleSaveCalcu}
-                              closeAssess={this.showAssessFn}
-                              showScaleFn={this.showTable.bind(this)}
-                              showListScale={this.handleListClick.bind(this)}
-                              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)}
-                              radioVal={radioVal}
-                              possible={possible}
-                              isAssessConfirm={isRecommendConfirm}></AssessResult>
+                <ScaleTable title={showHide.name} tableId={showHide.id}></ScaleTable>
               </ComplexModal>:''}
       </div>
   }

+ 90 - 24
src/components/DiagnosticList/index.jsx

@@ -3,16 +3,18 @@ import style from './index.less';
 import del_icon from './img/delete.png'
 import diagUp from './img/diagUp.png'
 import diagDown from './img/diagDown.png'
-import {ConfirmModal, Message} from '@commonComp';
+import printIcon from '@common/images/team.png';
+import manageIcon from '@common/images/manage.png';
+import {ConfirmModal, Message,ComplexModal} from '@commonComp';
 import Notify from '@commonComp/Notify';
 import Treat from '@containers/Treat'
 import store from '@store';
 import { initItemList ,setInitHistory} from '@store/async-actions/historyTemplates';
-import { pushAllDataList,inspectAndAssist } from '@utils/tools';
+import { pushAllDataList,inspectAndAssist ,deepClone} from '@utils/tools';
 import iconRadioDefault from '@common/images/icon-radio-default.png'
 import iconRadioActive from '@common/images/icon-radio-active.png'
+import AssessResult from '@containers/AssessResult';
 import tableIcon from '@common/images/table.png';
-import { delFollowUp } from '../../store/actions/treat';
 import { CONFIRM_TYPE } from "@store/types/typeConfig";
 
 class DiagnosticList extends Component {
@@ -23,7 +25,13 @@ class DiagnosticList extends Component {
             delItem: {},
             treatTitle: '',
             activeHistory: -1,
-            sign:-1
+            sign:-1,
+            showAssess:false,
+            assessId:'',
+            disName:'',
+            isAssessConfirm:false,
+            radioVal:{},  //可能结果选择内容
+            possible:{},  //可能结果
         }
         this.deleteItem = this.deleteItem.bind(this);
         this.cancel = this.cancel.bind(this);
@@ -35,15 +43,9 @@ class DiagnosticList extends Component {
         this.getHistoryCase = this.getHistoryCase.bind(this);
         this.closeHistoryCaseModal = this.closeHistoryCaseModal.bind(this);
         this.referCase = this.referCase.bind(this);
+        this.handleSaveAssess = this.handleSaveAssess.bind(this);       //评估弹窗确定
+        this.handleSavePossible = this.handleSavePossible.bind(this);
     }
-
-    componentWillReceiveProps(nextprops) {
-        if (this.props.diagnosticStr != nextprops.diagnosticStr) {
-            this.props.getBilling();
-        }
-        
-    }
-
     upDiagnostic(index) {
         const { upDiagnostic } = this.props;
         upDiagnostic && upDiagnostic(index)
@@ -56,8 +58,8 @@ class DiagnosticList extends Component {
         const { delItem } = this.state;
         const { delDiagnostic, delReact,delFollowUp } = this.props;
         delDiagnostic && delDiagnostic(delItem);
-        delReact && delReact(delItem)
-        delFollowUp && delFollowUp(delItem)
+        delReact && delReact(delItem);
+        delFollowUp && delFollowUp(delItem);
         this.setState({
             visible: false,
         })
@@ -177,19 +179,65 @@ class DiagnosticList extends Component {
             })}
         </div>)
     }
-    
-    
-
+    showAssessFn(item){
+        if(item&&item.id){         //显示评估弹窗
+          this.setState({
+            showAssess:true,
+            isAssessConfirm:false,
+            assessId:item.id,
+            disName:item.name
+          });
+        }else{          //关闭评估弹窗
+            this.setState({
+              showAssess:false,
+              isAssessConfirm:false,
+            });
+        }
+    }
+    handleSavePossible(obj){
+      this.setState({
+        possible:Object.assign({},obj.possible),
+        radioVal:Object.assign({},obj.radioVal),//不设置radioVal只有最近一次选中的值
+      })
+    }
+    handleSaveAssess(){
+      this.setState({
+        isAssessConfirm:true
+      });
+      const that=this;
+      setTimeout(()=>{
+        that.setState({
+          showAssess:false
+        });
+      });
+    }
+    componentWillReceiveProps(nextprops) {
+      if (this.props.diagnosticStr != nextprops.diagnosticStr) {
+        this.props.getBilling();
+      }
+      if(deepClone(nextprops.wholeResults)!=deepClone(this.props.wholeResults)){
+          this.setState({
+            radioVal:Object.assign({},nextprops.wholeResults.radioVal),
+            possible:Object.assign({},nextprops.wholeResults.possible),
+          })
+      }
+    }
     render(){
-        const { list, treatment, showReferRecord, showHistoryCase } = this.props
-        const { visible, treatTitle } = this.state
-        const lastIndex = list.length -1;
+        const { list, treatment, showReferRecord, showHistoryCase ,chronicMagItem} = this.props;
+        const { visible, treatTitle ,showAssess, isAssessConfirm, radioVal, possible,assessId,disName} = this.state;
+        const chronicList = JSON.parse(localStorage.getItem('chronic')||null);
+        const chronicLine = chronicMagItem&&chronicMagItem.name;     //当前是否走的慢病流程
+        let isChronic = false;      //是否要显示管理评估
+        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>;
         return(
                 <div className={style['diaglist-wrap']}>
                     {list && (list.length > 0) && list.map((item, index) => {
                         const hasTreat = item.treat && (item.treat.commonTreatment.content || item.treat.surgeryTreatment.content || item.treat.treatment.length>0 ||(item.adverseReactions&&item.adverseReactions.length > 0)
-                           || (item.drugHistory && item.drugHistory['慢病用药内容'] &&  item.drugHistory['慢病用药内容'].length > 0) || (item.drugHistory &&item.drugHistory['普通病用药内容'] &&  item.drugHistory['普通病用药内容'].length > 0) ||item.follow) 
-                        // const hasTreat= true;
+                           || (item.drugHistory && item.drugHistory['慢病用药内容'] &&  item.drugHistory['慢病用药内容'].length > 0) || (item.drugHistory &&item.drugHistory['普通病用药内容'] &&  item.drugHistory['普通病用药内容'].length > 0) ||item.follow)
+                        isChronic = chronicLine&&item.type==2&&chronicList.findIndex((it)=>it.id==item.id)!=-1;
                         return (<div draggable={true} className={style['diag-box'] + ' clearfix'}  key={item.id} >
                                     {index === 0 ? '' : <span className={style['diag-up']} onClick={() => {this.upDiagnostic(index)}}><img className={style["diag-up"]} src={diagUp}/></span>}
                                     {list.length === 1 ? '' : index !== 0 ? '' : <span onClick={() => {this.downDiagnostic(index)}} className={style['diag-down']}><img className={style["diag-down"]} src={diagDown}/></span>}
@@ -197,15 +245,33 @@ class DiagnosticList extends Component {
                                     <span className={style['diag-name']} onClick={()=>{this.handleClickDiag(item)}}>{item.name}<span></span></span> 
                                     {item.type === 1 ? <span className={style['diag-first']}>初诊</span> :<span className={style['diag-second']}> 复诊</span>}
                                     <span className={style['treat']}
-                                        //   style ={{ color: hasTreat ?'' : 'gray', border: hasTreat ?'1px solid #3B9ED0' : '1px solid gray', cursor: hasTreat ? '' : 'text'}}
-                                          style ={hasTreat ? '' : { color: 'gray', border: '1px solid gray', cursor: 'text'}}
+                                          style ={hasTreat ? '' : { color: 'gray', cursor: 'text'}}
                                           onClick={() =>{hasTreat && this.showTreat(item, index)}}>
                                           治疗方案
                                     </span>
+                                    {isChronic?<span className={style['assess']}
+                                          onClick={this.showAssessFn.bind(this,item)}>
+                                        管理评估
+                                    </span>:''}
                                     <img className={style['diag-del']} src={del_icon} onClick={()=>{this.handleDeleteItem(item)}}/>
                         </div>)
                     })}
                      {treatment&&<Treat title={treatTitle}></Treat>}
+                     {showAssess?<ComplexModal onclose={this.showAssessFn.bind(this)} footer={footer}
+                                               title='管理和评估'
+                                               icon={manageIcon}
+                                               top={'3%'}
+                                               bottom={'3%'}
+                                               width={820}>
+                       <AssessResult handleSavePossible={this.handleSavePossible}
+                                     closeAssess={this.showAssessFn.bind(this)}
+                                     disId={assessId}
+                                     disName={disName}
+                                     radioVal={radioVal}
+                                     possible={possible}
+                                     isAssessConfirm={isAssessConfirm}
+                                     ></AssessResult>
+                      </ComplexModal>:''}
                     <ConfirmModal visible={visible} 
                                   okText='删除' 
                                   cancelText='取消' 

+ 39 - 3
src/components/DiagnosticList/index.less

@@ -81,11 +81,47 @@
     position: absolute;
     right: 40px;
     top: 11px;
-    border: 1px solid #3B9ED0;
-    border-radius: 4px;
     cursor: pointer;
 }
-
+.footer{
+    .print{
+        width: 111px;
+        height: 34px;
+        line-height: 34px;
+        outline: none;
+        border-radius: 4px;
+        /*color: #3B9ED0;*/
+        border: 0 none;
+        cursor: pointer;
+        background: #fff;
+        margin-right: 20px;
+        img{
+            width: 20px;
+            vertical-align: middle;
+            margin-right: 4px;
+        }
+    }
+    .okBtn{
+        width: 80px;
+        height: 34px;
+        line-height: 32px;
+        text-align: center;
+        outline: none;
+        border-radius: 4px;
+        cursor: pointer;
+        border: 1px solid #3B9ED0;
+        box-sizing: border-box;
+        margin-left: 20px;
+        background: #3B9ED0;
+        color: #fff;
+        float: right;
+        margin-right: 20px;
+    }
+}
+.assess{
+    .treat;
+    right: 106px;
+}
 .diag-del {
     position: absolute;
     right: 0;

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

@@ -226,7 +226,7 @@ class PreviewBody extends Component {
           </tr>
         </table>
         <p style={{textAlign:'right',marginTop:'15px'}}>医生签名:<span style={{minWidth: '60px',padding: '0 5px 2px 5px',borderBottom: '1px solid #333',}}>{baseObj ? baseObj.doctorName : (noData ? '' : preInfo.doctorName)}</span></p>
-        {showAssessBtn?<AssessResultHis showHistoryCases={showHistoryCases} isChronic={isChronic?true:false} inquiryId={baseObj&&baseObj.id} inquiryDate={baseObj&&baseObj.inquiryDate}></AssessResultHis>:""}
+        {showAssessBtn&&isChronic?<AssessResultHis showHistoryCases={showHistoryCases} inquiryId={baseObj&&baseObj.id} inquiryDate={baseObj&&baseObj.inquiryDate}></AssessResultHis>:""}
         
         <div onClick={() => { this.surePrint(dataStr) }} style={{
           display: show ? 'inline-block' : 'none',

+ 3 - 8
src/components/ScaleTable/index.jsx

@@ -132,8 +132,7 @@ class ScaleTable extends React.Component{
   }
 
   handleFormula(data){//得分计算
-    const {tableId,parentId,scaleInfo,parentIndex} = this.props; 
-    const {valueData} = this.state; 
+    const {valueData} = this.state;
     this.setState({
       start:true
     })
@@ -158,10 +157,7 @@ class ScaleTable extends React.Component{
     // 将计算结果存在state,防止页面跳动问题
     const params = {
       type:1,
-      data:valueData,
-      pId:parentId,
-      id:tableId,
-      pIndex:parentIndex
+      data:valueData
     }
     const that = this;
     getFormulaResult(params).then((res)=>{
@@ -206,7 +202,7 @@ class ScaleTable extends React.Component{
   }
   componentWillUnmount(){
     // 储存计算结果和选择后的data
-    const {tableId,getResult,parentId,parentIndex,scaleInfo,saveScaleData,formulaResult} = this.props; 
+    const {tableId,getResult,scaleInfo,saveScaleData,formulaResult} = this.props;
     const {valueData,scaleResult1,start} = this.state; 
     // 替换表格内容--1)没有点计算且没有计算结果;2)点了计算
     const scaleResult = scaleResult1 || formulaResult&&formulaResult[tableId]; //量表计算结果
@@ -228,7 +224,6 @@ class ScaleTable extends React.Component{
         type:1,
         data:scaleResult1,
         id:tableId,
-        pIndex:parentIndex
       }
       getResult&&getResult(params);
     }  

+ 28 - 16
src/containers/AssessResult.js

@@ -6,6 +6,10 @@ 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,SET_CHRONIC_CALCU_RESULT} from '@types/assessResult';
 import {parseChartData,deepClone} from '@utils/tools';
+import {SHOW_TABLE_LIST,HIDE_TABLE_LIST} from '@store/types/pushMessage';
+import {saveMessage} from "../store/async-actions/print";
+import {SET_SAVE_ASSESS_DATA} from "@types/assessResult";
+import {saveClickNum} from '@store/async-actions/homePage';
 
 /***
  * 管理评估逻辑:
@@ -28,6 +32,7 @@ function mapStateToProps(state) {
     timeTypes:assessResult.indexTimeTypes,    //图表切换的维度
     //wholeAssessData:assessResult.wholeAssess,   //评估内容
     wholeIndexs:assessResult.wholeIndexs||{},      //已加入评估记录的推送项
+    addedScaleIds:assessResult.addedScaleIds,      //已进入量表的id
     wholeResults:assessResult.wholeResults,     //整体评估可能结果
     chooseSelecteds:assessResult.chooseSelecteds,    //已选中的选项
     wholeAssessText:assessResult.wholeAssessText,     //整体评估补充说明
@@ -42,24 +47,13 @@ function mapStateToProps(state) {
 
 function mapDispatchToProps(dispatch) {
   return {
-    getAssess(isRecommend){        //获取评估内容数据
-      if(isRecommend){
-        const data = {
-          regionName: "整体评估",
-          regionType: "0",
-          isRecommend:true
-        };
-        dispatch({
-          type:SET_ASSESS_DATA,
-          data:[data]
-        });
-        return;
-      }
-      dispatch(getAssessData()).then((res)=>{
+    getAssess(disId,disName){        //获取评估内容数据
+      dispatch(getAssessData(disId,disName)).then((res)=>{
         if(res.data.code=='0'){
           dispatch({
             type:SET_ASSESS_DATA,
-            data:res.data.data
+            data:res.data.data,
+            name:disName
           })
         }
       }).catch(error=>{
@@ -94,7 +88,25 @@ function mapDispatchToProps(dispatch) {
         type: SET_CHRONIC_CALCU_RESULT,
         data:deepClone(data)
       })
-    }
+    },
+    showScaleFn(item){
+      dispatch({
+        type:SHOW_TABLE_LIST,
+        name:'showTable',
+        value:true,
+        item:Object.assign({},item)
+      });
+    },
+    //保存管理评估
+    saveAssessInfos(obj,flg,noSave){     //noSave未true则不调页面保存接口
+      dispatch(Object.assign({},obj,{type:SET_SAVE_ASSESS_DATA}));
+      if(!noSave){
+        dispatch(saveClickNum);
+        if(flg != 1 && flg != 2){
+          dispatch(() => saveMessage())
+        }
+      }
+    },
   }
 }
 

+ 15 - 8
src/containers/ChronicInfo.js

@@ -26,6 +26,7 @@ function mapStateToProps(state){
     calcuResult:assessResult.calcuResult,      //计算公式结果
     calcuValues:assessResult.calcuValues,      //计算公式填的值
     wholeScaleItems:assessResult.wholeScaleItems,     //全部量表中已加入病例的量表
+    addedScaleIds:assessResult.addedScaleIds,      //已加入的量表id
   }
 }
 
@@ -35,11 +36,12 @@ function mapDispatchToProps(dispatch){
       dispatch(getTableList(id))
       // dispatch({type:SHOW_TABLE_LIST})
     },
-    hideList(item){
+    hideList(param,item){
       dispatch({
         type:SHOW_TABLE_LIST,
-        name:item.name,
-        value:item.value
+        name:param.name,
+        value:param.value,
+        item:item?Object.assign({},item):undefined
       })
     },
     getScaleInfo(item){
@@ -47,12 +49,13 @@ function mapDispatchToProps(dispatch){
     },
     addAssessItem(row,pIndex,i){         //加入评估记录
       let obj = Object.assign({},row);
-      //obj.details[i].add=true;
+      const it = obj.details[i];
       dispatch({
         type:ADD_ASSESS_ITEMS,
         data:obj,
         index:pIndex,
-        subIndex:i
+        subIndex:i,
+        id:it.type==1?it.content.id:undefined,      //只有量表需要记录id,去重用
       })
     },
     addScaleItems(obj,i){
@@ -91,15 +94,19 @@ function mapDispatchToProps(dispatch){
       });
     },
     // 计算公式计算
-    calcuFormula(item) {
-      const {param} = item;
+    calcuFormula(param) {
       getFormulaResult(param).then((res)=>{
         if(+res.data.code==0){
           const result = res.data.data.result;
           dispatch({
             type: SET_CHRONIC_CALCU_RESULT,
             result:deepClone(result),
-            id:item.param.disId
+            id:param.disId
+          });
+          dispatch({
+            type:SET_CALCU_VALUES,
+            data:param.data.content.details,
+            id:param.disId
           })
         }else{
           Notify.error(res.data.msg||'计算没有结果返回');

+ 5 - 2
src/containers/DiagnosticList.js

@@ -13,7 +13,7 @@ import { initItemList } from '@store/async-actions/historyTemplates';
 import {MODI_LOADING} from '@store/types/homePage.js';
 
 function mapStateToProps(state) {
-    const {diagnosticList} = state;
+    const {diagnosticList,assessResult,pushMessage } = state;
     let diagnC = diagnosticList.chronicMagItem;
     return {
         list: diagnosticList.diagnosticList,
@@ -25,6 +25,9 @@ function mapStateToProps(state) {
         items:state.historyTemplates.items,
         chronicMagItem: diagnC&&diagnC.name?diagnC:state.mainSuit.chronicDesease,
         typeConfig: state.typeConfig.typeConfig,
+        wholeResults:assessResult.wholeResults,
+        scaleInfo: pushMessage.scaleInfo,//量表内容
+        showHide: pushMessage.showHide,
     }
 }
 
@@ -109,7 +112,7 @@ function mapDispatchToProps(dispatch) {
         },
         autoFillModules(){
             dispatch(autoFillModules())//自动分发模板
-        },  
+        },
     }
 }
 

+ 4 - 4
src/store/async-actions/fetchModules.js

@@ -230,14 +230,14 @@ export function saveMode(mode){
 }
 
 //慢病-获取管理评估
-export function getAssessData(){
+export function getAssessData(disId,disName){
   return ()=>{
     const emrData = getEMRParams();
     const param = {
-      diseaseId:21773,
+      diseaseId:disId,
       disType:1,
-      diag:'糖尿病',
-      diseaseName:'糖尿病',
+      diag:disName,
+      diseaseName:disName,
       featureType:11,
       lis:emrData.lis,
       sex:emrData.sex,

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

@@ -186,7 +186,8 @@ export const getScaleInfo = (it)=>{
                 dispatch({
                     type:SHOW_TABLE_LIST,
                     name:'showTable',
-                    value:true
+                    value:true,
+                    item:Object.assign({},it)
                 })
             }else{
                 Notify.info(result.msg||'暂无量表信息')

+ 10 - 6
src/store/reducers/assessResult.js

@@ -3,13 +3,13 @@ import {SET_ASSESS_DATA,SET_INDEX_DATA,SET_SAVE_ASSESS_DATA,SET_INDEX_SUB_TYPE,A
 import config from "@config";
 
 const init = {
-  data:[],        //评估模块数据
+  data:{},        //评估模块数据
   indexData:{},     //评估图表数据
   indexNames:{},
   indexTimeTypes:{},    //单个图表选中的维度
   wholeAssess:[],     //整体评估数据
   wholeIndexs:{},     //已加入的评估数据的index,加入按钮状态用
-  wholeAssessText:'',   //整体评估补充说明
+  wholeAssessText:{},   //整体评估补充说明
   chooseSelecteds:{},   //选项勾选状态
   wholeResults:{
     possible:{},
@@ -18,13 +18,15 @@ const init = {
   calcuResult:{},       //计算公式结果
   calcuValues:{},       //计算公式填的值
   wholeScaleItems:[],   //全部量表中添加的整体评估项
+  addedScaleIds:[]
 };
 export default (state=init,action)=>{
   const res = Object.assign({},state);
   const {data,range,index,rangeType,pindex,getNew} = action;
   switch (action.type){
     case SET_ASSESS_DATA:
-      res.data = action.data;
+      res.data[action.name] = action.data;
+      res.update1 = Math.random();
       return res;
     case SET_INDEX_DATA:
       res.indexData[range[0]+range[1]] = data.obj;
@@ -56,28 +58,30 @@ export default (state=init,action)=>{
       return res;
     case SET_SAVE_ASSESS_DATA:
       res.wholeIndexs = action.wholeAssessItems||{};
+      res.addedScaleIds = action.addedScaleIds||[];
       res.wholeResults = action.wholeResults||{};
       res.wholeScaleItems = action.wholeScaleItems||[];
-      res.wholeAssessText = action.wholeAssessText||'';
+      res.wholeAssessText = action.wholeAssessText||{};
       res.chooseSelecteds = action.chooseSelecteds||{};
       res.calcuResult = action.calcuResult||{};
+      res.calcuValues = action.calcuValues||{};
       return res;
-    //case CLEAR_ASSESS_DATA:
     case ADD_ASSESS_ITEMS:
       res.wholeAssess[action.index] = action.data;
       let arr = res.wholeIndexs[action.index];
       res.wholeIndexs[action.index] = arr?[...arr,action.subIndex]:[action.subIndex];
+      action.id?res.addedScaleIds.push(action.id):'';
       res.update1 = Math.random();   //对象更新,与其他字段名不同因为绑定在pushItems,避免不必要的渲染
       return res;
     case ADD_WHOLE_SCALE_ITEMS:
       res.wholeScaleItems[action.index] = action.data;
+      res.addedScaleIds.push(action.data.id);
       res.update1 = Math.random();
       return res;
     case REMOVE_ASSESS_ITEMS:
       const {index,pIndex} = action;
       const temp =[...res.wholeIndexs[pIndex]];
       res.wholeIndexs[pIndex].splice(temp.findIndex((i)=>i==index),1);
-      //res.wholeAssess[pIndex].details[index].add=false;
       return res;
     case SET_CHRONIC_CALCU_RESULT:
       if(action.id){

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

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