Pārlūkot izejas kodu

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

zhouna 6 gadi atpakaļ
vecāks
revīzija
b33aa13447

BIN
src/common/images/1.png


BIN
src/common/images/2.png


BIN
src/common/images/3.png


BIN
src/common/images/4.png


BIN
src/common/images/5.png


BIN
src/common/images/6.png


BIN
src/common/images/7.png


BIN
src/common/images/8.png


+ 1 - 1
src/common/js/func.js

@@ -125,7 +125,7 @@ export const fullfillText = (arr,noPre=false,noEnd=false,ifEmpty=true)=>{
       }
     }else{
       pre = arr[i-1];
-      item = !ifEmpty&&cNum<config.showCheckNum?Object.assign({},it,{showInCheck:true}):it;
+      item = !ifEmpty&&cNum<config.showCheckNum+1?Object.assign({},it,{showInCheck:true}):it;
       //判断单选项是否有默认选中,位置在隐藏区域时,查体所有标签展示
       if(!ifEmpty&&!checkHiddenDefault&&cNum>config.showCheckNum&&+it.tagType===1&&(+it.controlType===0||+it.controlType===1)){
         if(it.questionDetailList.find((it)=>it.defaultSelect=='1')){

+ 27 - 11
src/components/AssessResult/ChartItem/index.jsx

@@ -81,17 +81,28 @@ class ChartItem extends Component {
     }
     handleChange&&handleChange(Object.assign(temp,{[i]:type}));
   }
-  getContainers(){
+  getContainers(obj){
     const timeTypes = this.props.timeTypes;
-    const range = this.getXAxisArr(config.chartDismen);
-    const obj = this.props.data[range[0]+range[range.length-1]];
     const {endDate} = this.props;
-    let arr = [];
+    let len = 1,idx=0;    //单个图表第一条线的在所有线中的index,用于显示不同的形状,打印使用
+    let arr = [],keys = Object.keys(obj||{});
     for(let i in obj){
-      arr.push(<Chart data={obj[i]} endDate={endDate} type={timeTypes&&timeTypes[i]} index={i} getXAxisArr={this.getXAxisArr} handleRangeChange={this.rangChange}/>)
+      idx = keys.findIndex((t)=>{return t==i});
+      len = idx==0?0:len+obj[keys[idx-1]].length;
+      arr.push(<Chart data={obj[i]} len={len} endDate={endDate} type={timeTypes&&timeTypes[i]} index={i} getXAxisArr={this.getXAxisArr} handleRangeChange={this.rangChange}/>)
     }
     return arr.length>0?arr:<p style={{color:'#acacac'}}>该模块暂无数据</p>;
   }
+  getLegends(obj){
+    let arr = [],temp='',doms=[];
+    for(let i in obj){
+      arr = [...arr,...obj[i]];
+    }
+    arr.map((it,ix)=>{
+      doms.push(<div><img src={require('@common/images/'+(ix+1)+'.png')} /><span>{it}</span></div>);
+    });
+    return doms;
+  }
   componentDidMount(){
     const {initFn,pindex} = this.props;
     const type = config.chartDismen;
@@ -102,11 +113,17 @@ class ChartItem extends Component {
     initFn&&initFn({range,rangeType:type,pindex,getNew:true});
   }
   render() {
-    const {title} = this.props;
+    const {title,data,names} = this.props;
+    const range = this.getXAxisArr(config.chartDismen);
+    const obj = data[range[0]+range[range.length-1]];
+    const nameObj = names[range[0]+range[range.length-1]];
     return <div className={style['assess-item']}>
       <h2>{title}</h2>
+      <div className={style['legend']}>
+        {this.getLegends(nameObj)}
+      </div>
       <div className={style['item-content']}>
-        {this.getContainers()}
+        {this.getContainers(obj)}
       </div>
     </div>;
   }
@@ -127,7 +144,7 @@ class Chart extends Component{
     this.timeSwitch = this.timeSwitch.bind(this);
   }
   drawChart(){
-    const {index,data,getXAxisArr,type,endDate} = this.props;
+    const {index,data,getXAxisArr,type,endDate,len} = this.props;
     const xAxis = getXAxisArr(type);
     const id = endDate?'chart'+endDate+index:'chart'+index;
     let series = [],names=[],inx=-1;
@@ -139,7 +156,6 @@ class Chart extends Component{
       sixMonth:9,
       year:60
     };
-
     data&&data.map((it,j)=>{
       let values=new Array();
       let name='';
@@ -161,10 +177,10 @@ class Chart extends Component{
         type: 'line',
         data: values,
         showAllSymbol:true,
-        symbol:config.chartSymbols[j%7],
+        symbol:config.chartSymbols[(len+j)%8],
         symbolSize:7,
         itemStyle:{
-          color:config.chartColors[j%7]
+          color:config.chartColors[(len+j)%8]
         }
       });
     });

+ 14 - 6
src/components/AssessResult/ScaleItem/index.jsx

@@ -70,8 +70,10 @@ class ScaleItem extends Component {
   }
   handleForRadio(id,idd, ind){
     const {formulaData} = this.state;
-    const obj = JSON.parse(JSON.stringify(formulaData));
+    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;
@@ -84,7 +86,7 @@ class ScaleItem extends Component {
   }
   showFormula(id,it){
     const {formulaData} = this.state;
-    const obj = JSON.parse(JSON.stringify(formulaData)||{});
+    const obj = deepClone(formulaData)||{};
     if(!obj[id]){
       obj[id] = it;
     }
@@ -105,12 +107,16 @@ class ScaleItem extends Component {
     })
   }
   calcuFormula(j, v, ii) { //计算公式计算
-    const { calcuFormula,chronicPushItems } = this.props;
+    const { calcuFormula,chronicPushItems,calcuValues } = this.props;
     const {formulaId,formulaData} = this.state;
-    const it =formulaData&&formulaData[formulaId];
+    let it=formulaData&&formulaData[formulaId];
+    const rst = calcuValues&&calcuValues[formulaId];
+    if(rst){
+      it.content = rst;
+    }
     let pushObj = deepClone(chronicPushItems);
     pushObj[ii].details[j]=it;
-    let allHasInfo = true
+    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) {
@@ -145,8 +151,10 @@ class ScaleItem extends Component {
   }
   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;
     }
@@ -173,7 +181,7 @@ class ScaleItem extends Component {
         }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]||it.content.details;
+          const details = calcuValues&&calcuValues[item.id]&&calcuValues[item.id].details||it.content.details;
           const cresult = showRes&&showRes[1]&&showRes[1].text;
                     temp = <div className={style['results']}>
                     <span>计算公式结果:</span>

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

@@ -80,7 +80,7 @@ class AssessResult extends Component {
   }
   handoutTypes(item,i){
     const {getIndexData,indexData,timeTypes,wholeIndexs,closeAssess,showScaleFn,calcuFormula,isRecommend,chronicPushItems,
-      formulaResult,calcuResult,calcuValues} =this.props;
+      formulaResult,calcuResult,calcuValues,indexNames} =this.props;
     let obj = [];
     Object.keys(wholeIndexs).map((i)=>{
       obj[i]=chronicPushItems[i];
@@ -115,6 +115,7 @@ class AssessResult extends Component {
       case 10:   //数据来源于后台
         return <ChartItem title={name}
                           data={chartData||{}}
+                          names={indexNames||{}}
                           timeTypes={JSON.stringify(chartTimeTypes)=='{}'?timeTypes&&timeTypes[i]:chartTimeTypes[i]}
                           pindex={i}
                           initFn={getIndexData}

+ 17 - 1
src/components/AssessResult/index.less

@@ -73,7 +73,7 @@
     min-width: 302px;
     width: 49%;
     height: 250px;
-    margin-bottom: 20px;
+    margin: 15px 0 5px;
     position: relative;
     .chart-box{
       width: 100%;
@@ -168,6 +168,22 @@
   border-radius: 4px;
   padding: 5px;
 }
+.legend{
+  padding: 0 36px;
+  /*margin-bottom: 15px;*/
+  &>div{
+    display: inline-block;
+    margin-top: 10px;
+  }
+  span{
+    margin-right: 20px;
+  }
+  img{
+    vertical-align: middle;
+    width: 18px;
+    margin-right: 3px;
+  }
+}
 @media print {
   .printShow,.textareaStatic {
     display: block;

+ 31 - 42
src/components/ChronicInfo/index.jsx

@@ -76,16 +76,6 @@ class ChronicInfo extends React.Component{
       printContainer: true,
       operaSupport: false,
     });
-    // setTimeout(() => {//把生成的图片和iframe删掉
-    //   let imgLis = document.querySelectorAll('.canvasImg')
-    //   let iframe = document.getElementsByTagName('iframe')
-    //   for(let i = 0;i < imgLis.length;i++){
-    //     imgLis[i].remove()
-    //   }
-    //   for(let i = 0;i < iframe.length;i++){
-    //     iframe[i].remove()
-    //   }
-    // }, 500);
   }
   
   showTableList(id){//量表按钮
@@ -112,9 +102,6 @@ class ChronicInfo extends React.Component{
       type:22,
     }
     getInfomation&&getInfomation(param);
-    /*this.setState({
-      infoId:id
-    })*/
   }
   closeInfo(){//关闭静态知识
     this.setState({
@@ -209,27 +196,31 @@ class ChronicInfo extends React.Component{
     });
   }
   handleInputformula(v,i, j,idd,  e) {
-    const { data, setChronicPush } = this.props;
+    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 (data[i].details) {
-      data[i].details[j].content.details[idd].value = text
-    } 
-    
-    const data1 = JSON.parse(JSON.stringify(data));
-    
-    setChronicPush(data1)
+    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 } = this.props;
-    if (data[i].details) {
-      for(let z = 0; z <  data[i].details[j].content.details[idd].details.length; z++) {
-        data[i].details[j].content.details[idd].details[z].state = 0
-      }
-      data[i].details[j].content.details[idd].details[ind].state = 1
-    } 
-    
+    const { data, setChronicPush,calcuValues } = this.props;
     const data1 = JSON.parse(JSON.stringify(data));
-    setChronicPush(data1)
+    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
+      }
+      data1[i].details[j].content.details[idd].details[ind].state = 1
+    }
+    setChronicPush(data1,data1[i].id,data1[i].details[j].content);
   }
   confirmFormula(){//计算公式确定
     this.setState({
@@ -259,8 +250,13 @@ class ChronicInfo extends React.Component{
       radioVal:Object.assign({},obj.radioVal),//不设置radioVal只有最近一次选中的值
     })
   }
-  calcuFormula(it,j, v, i) { //计算公式计算
-    const { calcuFormula, data ,chronicPushItems} = this.props;
+  calcuFormula(item,j, v, i) { //计算公式计算
+    const { calcuFormula, data ,chronicPushItems,calcuValues} = this.props;
+    let pushObj = deepClone(chronicPushItems);
+    if(calcuValues&&calcuValues[pushObj[i].id]){
+      pushObj[i].details[j].content=calcuValues&&calcuValues[pushObj[i].id];
+    }
+    let it = pushObj[i].details[j];
     let allHasInfo = true;
     for (let i = 0; i < it.content.details.length; i++) {
       if(it.content.details[i].controlType == 2) {  //输入框类型的有没有填值
@@ -281,15 +277,14 @@ class ChronicInfo extends React.Component{
 
     }
     if(allHasInfo) { //所有都有值,则计算
-      // delete it.content.resultz
       let param = {
         type: 2,
         data: it,
         disId: v.id,
         pIndex: j,
         ppIndex: i
-      }
-      calcuFormula({param,chronicPushItems})
+      };
+      calcuFormula({param,chronicPushItems:pushObj})
     } else {  //不是所有值都填过了
       Notify.info('请填写计算公式内容')
     }
@@ -304,12 +299,6 @@ class ChronicInfo extends React.Component{
                                 <img src={infoPic} className={style["infoPic"]} onClick={this.showInfo.bind(this,v.id)}/>
                               </p>:''}
-                      {/*<MiniToast title='静态知识'
-                                icon={allTableIcon}
-                                show={infoId&&infoId==v.id?true:false}
-                                close={this.closeInfo}>
-                          {pureText}
-                      </MiniToast>*/}
                       {v.details&&v.details.map((it,j)=>{
                         if(it.type==1){
                           return <p>
@@ -329,7 +318,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 = it.content.details;
+                          const details = calcuValues&&calcuValues[v.id]&&calcuValues[v.id].details||it.content.details;
                           return <div className={style["marTop"]}>
                             <span className={style["limit"]}>
                               计算公式结果:

+ 3 - 2
src/containers/AssessResult.js

@@ -23,6 +23,7 @@ function mapStateToProps(state) {
   return {
     data:assessResult.data,
     indexData:assessResult.indexData,
+    indexNames:assessResult.indexNames,
     update:assessResult.update,     //评估数据更新
     update1:assessResult.update1,       //加入记录更新
     timeTypes:assessResult.indexTimeTypes,    //图表切换的维度
@@ -94,7 +95,7 @@ function mapDispatchToProps(dispatch) {
 
 function parseChartData(indexData){
   let arr=[],obj={},temp={};
-  let nameArr=[],nameObj={};  //暂弃
+  let nameArr=[],nameObj={};
   if(!indexData){
     return [];
   }
@@ -106,7 +107,7 @@ function parseChartData(indexData){
     nameObj[temp.indexDesc]=[...nameArr,it.itemName];
   });
   //nameObj,obj;
-  return obj;
+  return {nameObj,obj};
 }
 const AssessResultContainer = connect(mapStateToProps, mapDispatchToProps)(AssessResult);
 

+ 7 - 12
src/containers/ChronicInfo.js

@@ -8,6 +8,7 @@ import {saveClickNum} from '@store/async-actions/homePage';
 import { getFormulaResult } from '@store/async-actions/fetchModules'
 import {deepClone} from '@utils/tools';
 import Notify from '@commonComp/Notify';
+import {SET_CALCU_VALUES} from "../store/types/pushMessage";
 
 function mapStateToProps(state){
   const {pushMessage,assessResult} = state;
@@ -20,6 +21,7 @@ function mapStateToProps(state){
     scaleInfo: pushMessage.scaleInfo,//量表内容
     chronicDesease:state.mainSuit.chronicDesease,//主诉存的慢病
     update:assessResult.update1,
+    cupdate:pushMessage.update,
     formulaResult:pushMessage.formulaResult, //量表信息
     indexs:assessResult.wholeIndexs,
     wholeResults:assessResult.wholeResults,     //整体评估可能结果
@@ -71,10 +73,12 @@ function mapDispatchToProps(dispatch){
       })
     },
     //设置量表推送内容
-    setChronicPush(data) {
+    setChronicPush(data,id,calcuItem) {
       dispatch({
         type: SET_CHRONIC_PUSHS,
-        data: data
+        data: data,
+        calcuItem,
+        id
       })
     },
     // 计算公式计算
@@ -87,18 +91,9 @@ function mapDispatchToProps(dispatch){
           const result = res.data.data.result;
           const content = data[param.ppIndex].details[param.pIndex].content;
           content.result =  result;
-          /*if(item.isPop){
-            dispatch({
-              type:SET_CHRONIC_CALCU_RESULT,
-              data:deepClone(result),
-              id:item.param.disId
-            });
-          }*/
           dispatch({
-            type: SET_CHRONIC_PUSHS,
-            data: deepClone(data),
+            type: SET_CALCU_VALUES,
             result:deepClone(result),
-            values:deepClone(content.details),
             id:item.param.disId
           })
         }else{

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

@@ -5,6 +5,7 @@ import config from "@config";
 const init = {
   data:[],        //评估模块数据
   indexData:{},     //评估图表数据
+  indexNames:{},
   indexTimeTypes:{},    //单个图表选中的维度
   wholeAssess:[],     //整体评估数据
   wholeIndexs:{},     //已加入的评估数据的index,加入按钮状态用
@@ -24,8 +25,9 @@ export default (state=init,action)=>{
       res.data = action.data;
       return res;
     case SET_INDEX_DATA:
-      res.indexData[range[0]+range[1]] = data;
-      Object.keys(data).map((i)=>{
+      res.indexData[range[0]+range[1]] = data.obj;
+      res.indexNames[range[0]+range[1]] = data.nameObj;
+      Object.keys(data.obj).map((i)=>{
         if(getNew){
           res.indexTimeTypes[pindex]=Object.assign({},res.indexTimeTypes[pindex],{[i]:config.chartDismen});
         }else{

+ 8 - 10
src/store/reducers/pushMessage.js

@@ -2,7 +2,7 @@ import {CHANGE_ASSAY, CHANGE_CHECK, BILLING_ADVICE, ADD_SCHEME, SET_TIPS,  SET_T
         SET_CHANGE_ADVICE_TREATMENT, SET_CHANGE_ADVICE_ASSAY, SET_CHANGE_ADVICE_CHECK, ADD_BILLING,
         CLEAR_ALL_PUSH_MESSAGE,SHOW_TIPS_DETAILS, HIDE_TIPS_DETAILS, SET_COMMONTREATMENT, IS_FIRST_MAIN_DIAG, 
         SET_ADVICE_INPUT ,SET_CHRONIC_TABLELIST,SHOW_TABLE_LIST,SET_SCALE_INFO,SET_CHRONIC_PUSHS,
-        SAVE_TABLE_RESULT, SAVE_FOLLOW_UP, DEL_FOLLOW_UP} from '../types/pushMessage';
+        SAVE_TABLE_RESULT, SAVE_FOLLOW_UP, DEL_FOLLOW_UP,SET_CALCU_VALUES} from '../types/pushMessage';
 import {changeAssay, changeCheck, setAdvice, addScheme, setTips, setTipsDetails, setChangeAdviceTreatment, 
         setChangeAdviceAssay, setChangeAdviceCheck, addBilling, clearAllPushMessage, showTipsDetails, hideTipsDetails, 
         setCommontreatment, isFirstMainDiag, setAdviceInput, saveFollowUp, delFollowUp } from '../actions/pushMessage';
@@ -16,12 +16,7 @@ const initState = {
   check: [ //辅检
   ],
   tips: {},
-  advice: {
-    // assay: '', 
-    // check: '',
-    // scheme: [],
-    // adviceStr: '' 
-  },
+  advice: {},
   AdviceStr: '',
   tmpFlg:'',
   tableList:[],
@@ -29,7 +24,7 @@ const initState = {
   scaleInfo:{},
   showHide:{},
   calcuResult:{},
-  calcuValues:[]
+  calcuValues:{}
 };
 export default function(state = initState, action) {
   let res = Object.assign({},state);
@@ -79,10 +74,13 @@ export default function(state = initState, action) {
     case SET_CHRONIC_PUSHS:
       res.chronicPushItems = action.data;
       if(action.id){
-        res.calcuResult[action.id] = action.result;
-        res.calcuValues[action.id] = action.values;
+        res.calcuValues[action.id] = action.calcuItem;
       }
       return res;
+    case SET_CALCU_VALUES:
+      res.calcuResult[action.id] = action.result;
+      res.update = Math.random();
+      return res;
     case SET_SCALE_INFO://量表内容-量表id
       res.scaleInfo = Object.assign({},res.scaleInfo,{[action.id]:action.data});
       return res;

+ 1 - 0
src/store/types/pushMessage.js

@@ -22,5 +22,6 @@ export const SET_SCALE_INFO = 'SET_SCALE_INFO' ; //量表明细
 export const SAVE_TABLE_RESULT = 'SAVE_TABLE_RESULT' ; //量表计算结果
 export const SAVE_FOLLOW_UP = 'SAVE_FOLLOW_UP'  //保存回访时间
 export const DEL_FOLLOW_UP = 'DEL_FOLLOW_UP'  //保存回访时间
+export const SET_CALCU_VALUES = 'SET_CALCU_VALUES';  //保存计算公式数据