Browse Source

量表与评估中联动

zhouna 6 years atrás
parent
commit
8f1f52a56e

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

@@ -23,14 +23,11 @@ class ScaleItem extends Component {
       parentId:'',
       showScale:false,
       optionId:'',
-      possible:props.possible||{},
       radioVal:props.radioVal||{},
       formulaId:''
     };
     this.getItems = this.getItems.bind(this);
     this.getDetailItems = this.getDetailItems.bind(this);
-    this.showScaleFn = this.showScaleFn.bind(this);
-    this.closeScaleFn = this.closeScaleFn.bind(this);
     this.showOption = this.showOption.bind(this);
     this.closeOption = this.closeOption.bind(this);
     this.closeFormula = this.closeFormula.bind(this);
@@ -46,13 +43,20 @@ class ScaleItem extends Component {
       optionId:null
     })
   }
-  confirmOption(parent,pIndex){
+  confirmOption(parentId){
+    const {handleRes} = this.props;
     const {radioVal,possible} = this.state;
-    this.setState({
+    handleRes&&handleRes(parentId,{
       possible:Object.assign({},possible,radioVal),
       radioVal:Object.assign({},possible,radioVal),//不设置radioVal只有最近一次选中的值
-      optionId:null
-    })
+    });
+    this.closeOption();
+  }
+  handleShowScale(item,parentId){
+    const {showScaleFn,closeAssess} = this.props;
+    closeAssess&&closeAssess();    //关闭评估弹窗
+    showScaleFn&&showScaleFn(item,parentId);        //显示量表
+
   }
   handleRadio(item,parent,pIndex){
     let {radioVal} = this.props;
@@ -78,12 +82,13 @@ class ScaleItem extends Component {
   }
   getDetailItems(item,i){
     let arr = [],temp='';
-    const {indexs} = this.props;
-    const {optionId,radioVal,possible,formulaId} = this.state;
+    const {indexs,result} = this.props;
+    const {optionId,formulaId,radioVal} = this.state;
+    const possible=result&&result[item.id]&&result[item.id].possible;
     item.details.map((it,j)=>{
       if(indexs[i]&&indexs[i].includes(j)){
         if(it.type==1){     //量表
-          temp =<span className={style['scale']} onClick={()=>this.showScaleFn(it.content.name,it.content.id,item.id)}>【{it.content.name}】</span>;
+          temp =<span className={style['scale']} onClick={()=>this.handleShowScale(it.content,item.id)}>【{it.content.name}】</span>;
         }else if(it.type==2){      //计算公式
           temp = <div className={style['results']}>
                     <span>计算公式:</span>
@@ -151,20 +156,20 @@ class ScaleItem extends Component {
         }else if(it.type==3){
           temp = <div className={style['results']}>
                     <span>可能结果:</span>
-                    <span onClick={this.showOption.bind(this,item.id)} className={style["blue"]}>{possible[i]?possible[i]:'请选择'}</span>
+                    <span onClick={this.showOption.bind(this,item.id)} className={style["blue"]}>{possible&&possible[i]?possible[i]:'请选择'}</span>
                     <img src={level1} />
                     <MiniToast title='结果选择'
                          icon={checkIcon}
                          show={optionId&&optionId==item.id?true:false}
                          close={this.closeOption}
-                         confirm={this.confirmOption.bind(this,item,i)}
+                         confirm={this.confirmOption.bind(this,item.id)}
                          footer="true">
                         <div className={style["infoOption"]}>
                           <span>{it.content.name?it.content.name+':':''}</span>
                           {it.content.details&&it.content.details.map((lis,ind)=>{
                             return <div className={style["chooseItem"]}>
                               <Radio label={lis.detailName}
-                                     isSelect={radioVal[i]==lis.detailName}
+                                     isSelect={radioVal&&radioVal[i]==lis.detailName}
                                      handleClick={this.handleRadio.bind(this,lis,item,i)}>
                               </Radio>
                             </div>
@@ -190,23 +195,6 @@ class ScaleItem extends Component {
       return this.getDetailItems(it,i);
     });
   }
-  showScaleFn(name,id,pid){
-    const {getScaleData,scaleInfo} = this.props;
-    this.setState({
-      scaleId:id,
-      scaleName:name,
-      parentId:pid,
-      showScale:true
-    });
-    if(!scaleInfo[id]){
-      getScaleData&&getScaleData({id,name});
-    }
-  }
-  closeScaleFn(){
-    this.setState({
-      showScale:false
-    })
-  }
   onPrint() {
     let dom = this.state.showTable?$("#printcontent"):$("#AssistResult");
     dom.jqprint({
@@ -222,16 +210,7 @@ class ScaleItem extends Component {
     }
   }
   render() {
-    const {title,handleInp,scaleInfo,disabled} = this.props;
-    const {scaleName,scaleId,parentId,showScale} = this.state;
-    const footer = <div className={style['footer']}>
-      <span className={style['print']} onClick={this.onPrint}><img src={printIcon} alt=""/>打印</span>
-      <span className={style['okBtn']} onClick={()=>{}}>确定</span>
-    </div>;
-    const 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 {title,handleInp,disabled} = this.props;
     return <div className={style['assess-item']}>
       <h2>{title}</h2>
       <div className={style['item-content']}>
@@ -248,14 +227,6 @@ class ScaleItem extends Component {
           </li>
         </ul>
       </div>
-      {showScale?<ComplexModal onclose={this.closeScaleFn} footer={scaleFooter}
-                               title={scaleName}
-                               icon={tableIcon}
-                               top={20}
-                               bottom={20}
-                               width={820}>
-        <ScaleTable title={scaleName} tableId={scaleId} parentId={parentId}></ScaleTable>
-      </ComplexModal>:''}
     </div>;
   }
 }

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

@@ -11,15 +11,18 @@ class AssessResult extends Component {
     super(props);
     const chooseSelecteds = JSON.parse(JSON.stringify(props.chooseSelecteds)||{});
     const wholeIndexs = JSON.parse(JSON.stringify(props.wholeIndexs)||{});      //深度复制,Object.assgin为浅复制,下下级会同源
+    const wholeResults = JSON.parse(JSON.stringify(props.wholeResults)||{});
     this.state={
       chooseSelecteds:chooseSelecteds,     //大数据选择模块
       chartTimeTypes:{},      //图表模块
       wholeAssessItems:wholeIndexs,     //整体评估模块
-      wholeAssessText:props.wholeAssessText||''     //整体评估补充说明
+      wholeAssessText:props.wholeAssessText||'',     //整体评估补充说明
+      wholeResults:wholeResults,
     }
     this.handleChooseChange = this.handleChooseChange.bind(this);
     this.handleScaleDel = this.handleScaleDel.bind(this);
     this.handleScaleText = this.handleScaleText.bind(this);
+    this.handleResult = this.handleResult.bind(this);
   }
   componentWillMount(){
     //获取评估
@@ -38,6 +41,13 @@ class AssessResult extends Component {
       wholeAssessItems: items
     });
   }
+  handleResult(pid,opt){
+    const {wholeResults} = this.state.wholeResults;
+    const res = Object.assign({},wholeResults,{[pid]:opt});
+    this.setState({
+      wholeResults:res
+    });
+  }
   handleChooseChange(i,selects){
     const {chooseSelecteds} = this.state;
     this.setState({
@@ -57,8 +67,8 @@ class AssessResult extends Component {
     isAssessConfirm&&handleSave(this.state);
   }
   handoutTypes(item,i){
-    const {getIndexData,indexData,timeTypes,wholeAssessData,scaleInfo,getScaleInfo,possible,radioVal} =this.props;
-    const {chooseSelecteds,wholeAssessItems,wholeAssessText,chartTimeTypes} = this.state;
+    const {getIndexData,indexData,timeTypes,wholeAssessData,closeAssess,showScaleFn} =this.props;
+    const {chooseSelecteds,wholeAssessItems,wholeAssessText,chartTimeTypes,wholeResults} = this.state;
     const chartData = indexData;
     const name = item.regionName+":";
     const list = item.data&&item.data.rows;
@@ -68,12 +78,12 @@ class AssessResult extends Component {
                           data={wholeAssessData}
                           handleRemove={this.handleScaleDel}
                           handleInp={this.handleScaleText}
+                          handleRes={this.handleResult}
                           text={wholeAssessText}
                           indexs={wholeAssessItems}
-                          scaleInfo={scaleInfo}
-                          possible={possible}
-                          radioVal={radioVal}
-                          getScaleData={getScaleInfo}></ScaleItem>;
+                          result={wholeResults}
+                          showScaleFn={showScaleFn}
+                          closeAssess={closeAssess}></ScaleItem>;
       case 1:     //数据来源于大数据
         return <ChooseItem title={name}
                            data={list}

+ 6 - 5
src/components/ChronicInfo/index.jsx

@@ -119,11 +119,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{
+    }else{console.log('调接口')
       this.props.getScaleInfo(item);
     }
 
@@ -389,6 +389,7 @@ class ChronicInfo extends React.Component{
                         })}
                       </ul>
               </ConfirmModal>
+      {console.log(showHide)}
               {showHide&&showHide.showTable?<ComplexModal onclose={this.closeTable} footer={scaleFooter}
                       title={tableName}
                       icon={tableIcon}
@@ -404,9 +405,9 @@ class ChronicInfo extends React.Component{
                       bottom={20}
                       width={820}>
                 <AssessResult handleSave={saveAssessInfos}
-                              isAssessConfirm={isAssessConfirm}
-                              possible={possible}
-                              radioVal={radioVal}></AssessResult>
+                              closeAssess={this.showAssessFn}
+                              showScaleFn={this.showTable.bind(this)}
+                              isAssessConfirm={isAssessConfirm}></AssessResult>
               </ComplexModal>:''}
       </div>
   }

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

@@ -242,7 +242,7 @@ class ScaleTable extends React.Component{
   }
 
   render(){
-    const {title,scaleInfo,tableId,formulaResult} = this.props;
+    const {title,scaleInfo,tableId,formulaResult} = this.props;console.log('量表渲染:',scaleInfo,tableId)
     const data = scaleInfo[tableId];
     let {selecteds,totalScore} = this.state;
     const content = data && data[1].content;//表格内容

+ 2 - 12
src/containers/AssessResult.js

@@ -2,7 +2,7 @@ import React from 'react';
 import {connect} from 'react-redux';
 import AssessResult from '@components/AssessResult';
 import {ISREAD} from '@store/types/homePage.js';
-import {billing,getScaleInfo} from '@store/async-actions/pushMessage';
+import {billing} from '@store/async-actions/pushMessage';
 import {getAssessData,getIndexData} from '@store/async-actions/fetchModules';
 import {SET_ASSESS_DATA,SET_INDEX_DATA,SET_INDEX_SUB_TYPE,REMOVE_ASSESS_ITEMS,CLEAR_INDEX_DATA} from '@types/assessResult';
 import store from '@store';
@@ -30,6 +30,7 @@ function mapStateToProps(state) {
     timeTypes:assessResult.indexTimeTypes,    //图表切换的维度
     wholeAssessData:assessResult.wholeAssess,   //评估内容
     wholeIndexs:assessResult.wholeIndexs||{},      //已加入评估记录的推送项
+    wholeResults:assessResult.wholeResults,     //整体评估可能结果
     chooseSelecteds:assessResult.chooseSelecteds,    //已选中的选项
     wholeAssessText:assessResult.wholeAssessText,     //整体评估补充说明
     scaleInfo: state.pushMessage.scaleInfo,//量表内容
@@ -74,17 +75,6 @@ function mapDispatchToProps(dispatch) {
         type:CLEAR_INDEX_DATA
       })
     },
-    getScaleInfo(it){         //获取量表内容
-      dispatch(getScaleInfo(it))
-
-    },
-    /*removeAssessResult(pIndex,i){
-      dispatch({
-        type:REMOVE_ASSESS_ITEMS,
-        pIndex,
-        index:i
-      });
-    }*/
   }
 }
 

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

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

+ 2 - 0
src/store/reducers/assessResult.js

@@ -9,6 +9,7 @@ const init = {
   wholeIndexs:{},     //已加入的评估数据的index,加入按钮状态用
   wholeAssessText:'',   //整体评估补充说明
   chooseSelecteds:{},   //选项勾选状态
+  wholeResults:{},    //可能结果
 };
 export default (state=init,action)=>{
   const res = Object.assign({},state);
@@ -43,6 +44,7 @@ export default (state=init,action)=>{
       return res;
     case SET_SAVE_ASSESS_DATA:
       res.wholeIndexs = action.wholeAssessItems||{};
+      res.wholeResults = action.wholeResults||{};
       //res.indexTimeTypes = action.chartTimeTypes;
       res.wholeAssessText = action.wholeAssessText||'';
       res.chooseSelecteds = action.chooseSelecteds||{};