Переглянути джерело

Merge branch 'ChronicMag' of http://192.168.2.236:10080/zhouna/newICSS into ChronicMag

zhangxc 6 роки тому
батько
коміт
74e4f37315

+ 1 - 0
src/common/components/MiniToast/index.less

@@ -18,6 +18,7 @@
     .closeIcon{
       // vertical-align: middle;
       float: right;
+      cursor: pointer;
     }
   }
   .infoCon{

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

@@ -225,7 +225,7 @@ class Inspect extends React.Component {
                     value={item.value}
                     onKeyUp={(e) => { this.changeActivePart(idx, e.target.value.trim()) }}
                   />
-                  <p className={styles.unit}>{item.labelSuffix}</p>
+                  <p className={styles.unit} title={item.labelSuffix}>{item.labelSuffix}</p>
                 </span>
               </li>
             )

+ 1 - 0
src/components/AddInspect/index.less

@@ -151,6 +151,7 @@
     }
     .itemPartT {
         float: right;
+        width: 110px;
         input {
             width: 40px;
             text-align: center;

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

@@ -73,11 +73,10 @@ class AssessResultHis extends Component {
     });
   }*/
   render() {
-    const { list,inquiryId,loading } = this.props;
-    const data = list&&list[inquiryId]&&list[inquiryId].data;
+    const { loading,isChronic } = this.props;
     return <div className={style['assess-cont']}>
       <div className={style['assess-result']}>
-        <p className={style['enter']}>管理和评估结果:<a onClick={this.showAssessFn}>查看结果<img src={arrow} /></a></p>
+        <p className={style['enter']}>{isChronic?'管理和评估':'推荐'}结果:<a onClick={this.showAssessFn}>查看结果<img src={arrow} /></a></p>
       </div>
       <div className={style['assess-box']}>
         {loading?<p className={style['loading']}><img src={loadingIcon} alt='loading...'/></p>:''}

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

@@ -62,7 +62,7 @@ class ChartItem extends Component {
     if(isHour){
       for(let i=0;i<24;i++){
         temp = hour-i>-1?hour-i:hour-i+24;
-        arr.unshift(str+" "+(temp<10?'0'+temp:temp));
+        arr.unshift(str+" "+(temp<10?'0'+temp:temp)+":00:00");
       }
       return arr;
     }else{
@@ -132,9 +132,10 @@ class Chart extends Component{
     const id = endDate?'chart'+endDate+index:'chart'+index;
     let series = [],names=[],inx=-1;
     let myChart = echarts.init(document.getElementById(id) ,null, {renderer: 'svg'});
+    let xAxisArr = [...xAxis];
 
     const interval = {
-      week:24,
+      week:23,
       month:4,
       sixMonth:9,
       year:60
@@ -145,9 +146,12 @@ class Chart extends Component{
       it&&it.creatTime.map((x,i)=>{
         inx=xAxis.findIndex((a)=>{
           name=type=='week'?x.substr(0,13):x.substr(0,10);
-          return a==name;
+          return a.substr(0,13)==name;
         });     //日期对应横坐标的位置
         if(inx!=-1){
+          if(type=='week'){
+            xAxisArr[inx] = x;
+          }
           values[inx] = it.indexValue[i];       //值对应横坐标的位置
         }
       });
@@ -162,7 +166,10 @@ class Chart extends Component{
     // 指定图表的配置项和数据
     var option = {
       tooltip: {
-        trigger: 'axis'
+        trigger: 'axis',
+        textStyle:{
+          fontSize:12
+        }
       },
       legend: {
         data:names,
@@ -174,9 +181,9 @@ class Chart extends Component{
       xAxis: {
         type: 'category',
         boundaryGap: false,
-        data: xAxis,
+        data: xAxisArr,
         splitLine:{
-          show:false
+          show:true
         },
         axisPointer:{
           //show:false
@@ -190,7 +197,10 @@ class Chart extends Component{
           showMaxLabel:true,
           interval:interval[type],
           rotate:65,
-          fontSize:10
+          fontSize:10,
+          formatter: function(value,index){
+            return value.substr(0,10);
+          }
         }
       },
       yAxis: {

+ 18 - 9
src/components/AssessResult/ScaleItem/index.jsx

@@ -85,7 +85,9 @@ class ScaleItem extends Component {
   showFormula(id,it){
     const {formulaData} = this.state;
     const obj = JSON.parse(JSON.stringify(formulaData)||{});
-    obj[id] = it;
+    if(!obj[id]){
+      obj[id] = it;
+    }
     this.setState({
       formulaId:id,
       formulaData:obj
@@ -102,10 +104,12 @@ class ScaleItem extends Component {
       formulaId:null
     })
   }
-  calcuFormula(j, v, i) { //计算公式计算
+  calcuFormula(j, v, ii) { //计算公式计算
     const { calcuFormula,chronicPushItems } = this.props;
     const {formulaId,formulaData} = this.state;
     const it =formulaData&&formulaData[formulaId];
+    let pushObj = deepClone(chronicPushItems);
+    pushObj[ii].details[j]=it;
     let allHasInfo = true
     for (let i = 0; i < it.content.details.length; i++) {
       if(it.content.details[i].controlType == 2) {  //输入框类型的有没有填值
@@ -132,9 +136,9 @@ class ScaleItem extends Component {
         data: it,
         disId: v.id,
         pIndex: j,
-        ppIndex: i,
+        ppIndex: ii,
       }
-      calcuFormula({param,chronicPushItems,isPop:true})
+      calcuFormula({param,chronicPushItems:pushObj})
     } else {  //不是所有值都填过了
       Notify.info('请填写计算公式内容')
     }
@@ -152,7 +156,7 @@ class ScaleItem extends Component {
   }
   getDetailItems(item,i){
     let arr = [],temp='';
-    const {indexs,result,formulaResult,calcuResult} = this.props;
+    const {indexs,result,formulaResult,calcuResult,disabled} = this.props;
     const {optionId,formulaId,radioVal,formulaData,isFormulaConfirm} = this.state;
     const possible=result&&result.possible;
 
@@ -193,6 +197,7 @@ class ScaleItem extends Component {
                                   return <div className={style["chooseItem"]}>
                                     <Radio label={ii.detailName}
                                            isSelect={ii.state == 1}
+                                           disabled={disabled}
                                            handleClick={this.handleForRadio.bind(this,item.id,idd, ind)}>
                                       >
                                     </Radio>
@@ -206,7 +211,7 @@ class ScaleItem extends Component {
                                 <span>{'请输入'+item1.name+':'}</span>
                               </td>
                               <td>
-                                <input type="text" placeholder="请输入"  value={item1.value} onInput={(e)=>this.handleInputformula(item.id,idd,e.target.value)}/>
+                                <input type="text" disabled={disabled} placeholder="请输入"  value={item1.value} onInput={(e)=>this.handleInputformula(item.id,idd,e.target.value)}/>
                               </td>
                               <td>
                                 <span>{item1.uint}</span>
@@ -216,7 +221,7 @@ class ScaleItem extends Component {
                           }
                         })}
                       </table>
-                      <div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,j, item, i)}>计算</div>
+                      {disabled?"":<div className={style["forMulBtn"]} onClick={this.calcuFormula.bind(this,j, item, i)}>计算</div>}
                       <table>
                         {showRes && Array.isArray(showRes) &&showRes.map((itemResult, resultIndex) => {
                           return <tr>
@@ -257,13 +262,17 @@ class ScaleItem extends Component {
                     </MiniToast>
                   </div>;
         }
-        arr.push(<li>
+        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(i,j)}>
             <img className={style["deleteIcon"]} src={deleteIcon} />
           </div>
-        </li>);
+        </li>;
+        arr.push(li);
       }
     });
     return arr;

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

@@ -79,8 +79,12 @@ class AssessResult extends Component {
     isAssessConfirm&&handleSave(this.state,readyKeepHistory(),isRecommend);
   }
   handoutTypes(item,i){
-    const {getIndexData,indexData,timeTypes,wholeAssessData,closeAssess,showScaleFn,calcuFormula,isRecommend,chronicPushItems,
+    const {getIndexData,indexData,timeTypes,wholeIndexs,closeAssess,showScaleFn,calcuFormula,isRecommend,chronicPushItems,
       formulaResult,calcuResult} =this.props;
+    let obj = [];
+    Object.keys(wholeIndexs).map((i)=>{
+      obj[i]=chronicPushItems[i];
+    });
     const {chooseSelecteds,wholeAssessItems,wholeAssessText,chartTimeTypes,wholeResults} = this.state;
     const chartData = indexData;
     const name = item.regionName+":";
@@ -88,7 +92,7 @@ class AssessResult extends Component {
     switch (+item.regionType){
       case 0:     //数据来源与右侧手动添加
         return <ScaleItem title={name}
-                          data={wholeAssessData}
+                          data={obj}
                           handleRemove={this.handleScaleDel}
                           handleInp={this.handleScaleText}
                           handleRes={this.handleResult}

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

@@ -156,6 +156,7 @@
   border-radius: 4px;
   cursor: auto;
   margin-top: 15px;
+  cursor: pointer;
 }
 .textareaStatic {
   display: none;

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

@@ -328,7 +328,7 @@ class ChronicInfo extends React.Component{
                           return <div className={style["marTop"]}>
                             <span className={style["limit"]}>
                               计算公式结果:
-                              <i className={style["blue"]} onClick={this.showFormula.bind(this,v.id)}>{isFormulaConfirm&&result?result:'请选择'}</i>
+                              <i className={style["blue"]} onClick={this.showFormula.bind(this,v.id)}>{result?result:'请选择'}</i>
                               <img src={level1} />
                             </span>
                             {indexs[i]&&indexs[i].includes(j)?<span className={style["addResult"]}>

+ 1 - 0
src/components/ChronicInfo/index.less

@@ -271,4 +271,5 @@
     border-radius: 4px;
     cursor: auto;
     margin-top: 15px;
+    cursor: pointer;
   }

+ 21 - 2
src/components/CurrentIll/index.jsx

@@ -29,6 +29,7 @@ class CurrentIll extends Component{
     this.onchange = this.onchange.bind(this);
     this.handleSearchSelect = this.handleSearchSelect.bind(this);
     this.handleClick = this.handleClick.bind(this);
+    this.handleBlur = this.handleBlur.bind(this);
   }
   
   componentWillReceiveProps(nextProps){
@@ -140,6 +141,19 @@ class CurrentIll extends Component{
     })
     return list;
   }
+  handleBlur(e){
+    const {freeText} = this.props;
+    const ev = e || window.event;
+    const data = ev.target.innerText || e.target.innerHTML;
+    if(!isIE()){
+      e.target.innerText?(e.target.innerText=""):(e.target.innerHTML="")
+      freeText && freeText(data.trim());
+    }else{
+      if(datas.length==0){
+        freeText && freeText(data);
+      }
+    }
+  }
 
   render(){
     const {fuzhen,isChronic,type,fetchPushInfos,handleInput,isRead,saveText,searchData,totalHide,showArr,focusIndex,editClear,data,boxLeft,boxTop} = this.props;
@@ -156,8 +170,13 @@ class CurrentIll extends Component{
                         handleInput={handleInput}/>;
     }
     return  <div className={style['current-ill']}>
-      <ItemBox title='现病史' editable={editClear||data.length==0?true:false} handleFocus={this.handleFocus} onchange={forbidInput?(e)=>{this.onchange(e)}:''} handleClick={this.handleClick}>
-        {data.length>0?this.getInlineTag():''}
+      <ItemBox title='现病史' 
+      editable={editClear||data.length==0?true:false} 
+      handleFocus={this.handleFocus} 
+      onchange={forbidInput?(e)=>{this.onchange(e)}:''} 
+      handleClick={this.handleClick}
+      handleBlur={this.handleBlur}>
+        {data.length>0?this.getInlineTag():(saveText[0]?saveText[0]:'')}
       </ItemBox>
       {searchFlag ? <SearchDrop data={searchData} show={!totalHide} onSelect={this.handleSearchSelect} left={boxLeft} top={boxTop} />:""}
     </div>

+ 25 - 13
src/components/DiagnosticList/index.jsx

@@ -92,7 +92,7 @@ class DiagnosticList extends Component {
         getTips && getTips({id:item.id,type:7});
     }
     referRecord() {
-        const { hideReferRecord, showHistoryCaseModal ,chronicMagItem,hisTemplates,autoFillModules} = this.props
+        const { hideReferRecord, showHistoryCaseModal ,chronicMagItem,hisTemplates,autoFillModules,typeConfig} = this.props
         hideReferRecord && hideReferRecord()
         // showHistoryCaseModal && showHistoryCaseModal()
         // store.dispatch(initItemList(chronicMagItem))
@@ -102,23 +102,33 @@ class DiagnosticList extends Component {
               store.dispatch(setInitHistory(result.data));
               showHistoryCaseModal && showHistoryCaseModal();
             }else{
-              Notify.info("暂无历史病例,默认引用通用模板");
-              const timer = setTimeout(function(){
-                autoFillModules && autoFillModules();
-                clearTimeout(timer);
-              },1000) //需求要求延时
+              if(typeConfig==0){
+                Notify.info("暂无历史病例,已默认展示慢病相关内容");
+                const timer = setTimeout(function(){
+                  autoFillModules && autoFillModules();
+                  clearTimeout(timer);
+                },1000) //需求要求延时
+              }
             }
         })
     }
     noReferRecord() {
-        const { hideReferRecord ,autoFillModules} = this.props
+        const { hideReferRecord ,autoFillModules,typeConfig} = this.props
         hideReferRecord && hideReferRecord();
-        autoFillModules&&autoFillModules();
+        if(typeConfig==0){//智能推送模式才自动填充
+            autoFillModules&&autoFillModules();
+        }
+        
     }
     referCase() {
-        const { hideHistoryCaseModal, items } = this.props
+        const { hideHistoryCaseModal, items ,autoFillModules,typeConfig} = this.props
         hideHistoryCaseModal && hideHistoryCaseModal()
-        if (this.state.activeHistory === -1) {
+        if (this.state.activeHistory === -1 && typeConfig==0) {//没有选择历史病例直接点确定
+            Notify.info("未选择历史病历,已默认展示慢病相关内容");
+              const timer = setTimeout(function(){
+                autoFillModules && autoFillModules();
+                clearTimeout(timer);
+              },1000)
             return
         }
         let baseList = store.getState();
@@ -133,12 +143,14 @@ class DiagnosticList extends Component {
         })
     }
     closeHistoryCaseModal() {
-        const { hideHistoryCaseModal ,autoFillModules} = this.props
+        const { hideHistoryCaseModal ,autoFillModules,typeConfig} = this.props
         this.setState({
             activeHistory: -1
         })
         hideHistoryCaseModal && hideHistoryCaseModal()
-        autoFillModules && autoFillModules();
+        if(typeConfig==0){//智能推送模式才自动填充
+            autoFillModules&&autoFillModules();
+        }
     }
     handleQuoteClick(item, index) {
         const { handleQuoteClick } = this.props
@@ -152,7 +164,7 @@ class DiagnosticList extends Component {
         return (<div className={style['history-info']}>
             {items.map((item, index) => {
                 return<div onClick={this.handleQuoteClick.bind(this, item, index)} style={this.state.activeHistory === index ? {color: '#3B9ED0'} : ''}>
-                    <img src={this.state.activeHistory === index ? iconRadioActive : iconRadioDefault}/>{item.diagnose}
+                    <img src={this.state.activeHistory === index ? iconRadioActive : iconRadioDefault}/>{item.diagnose + '(' + item.inquiryDate + ')'}
                 </div>
             })}
         </div>)

+ 4 - 2
src/components/Operation/index.jsx

@@ -259,7 +259,7 @@ class Operation extends Component {
     }
   }
   makeSure() {
-    const { save, clear, saveDataAll,diagShowTmp } = this.props;
+    const { save, clear, saveDataAll,diagShowTmp ,chronicMagItem,chronicDesease} = this.props;
     const { type } = this.state;
     if (type == 1) {
       diagShowTmp(false)
@@ -268,7 +268,9 @@ class Operation extends Component {
     } else if (type == 2) {
       diagShowTmp(false)
       this.setState({ title: '' })
-      clear();
+      // 慢病标识
+      const chronicFlag = chronicMagItem&&chronicMagItem.name || chronicDesease&&chronicDesease.name?true:false;
+      clear(chronicFlag);
     } else if (type == 3) {
       if (this.state.title.trim() == '') {
         Notify.error('请输入模板名称')

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

@@ -76,6 +76,7 @@ class PreviewBody extends Component {
     const { show, preInfo, dataJson, dataStr, baseObj, flg ,showAssessBtn} = this.props;
     const other_yjs = filterOtherDataArr(JSON.parse(dataStr.other),dataJson.other);
     const noData = JSON.stringify(preInfo) == '{}';
+    const isChronic = (dataJson.diagChronicMagItem&&dataJson.diagChronicMagItem.name)||(dataJson.mainChronicDesease&&dataJson.mainChronicDesease.name);
     return <div className={style['content']} style={{ width: flg ? '700' : '820' }}>
       <div className={style['contents']} id="content" style={{ margin: "0 auto", maxWidth: "620px" }}>
         <Information baseObj={baseObj} preInfo={preInfo}></Information>
@@ -222,7 +223,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 inquiryId={baseObj&&baseObj.id} inquiryDate={baseObj&&baseObj.inquiryDate}></AssessResultHis>:""}
+        {showAssessBtn?<AssessResultHis isChronic={isChronic?true:false} inquiryId={baseObj&&baseObj.id} inquiryDate={baseObj&&baseObj.inquiryDate}></AssessResultHis>:""}
         
         <div onClick={() => { this.surePrint(dataStr) }} style={{
           display: show ? 'inline-block' : 'none',

+ 39 - 18
src/components/ScaleTable/index.jsx

@@ -1,6 +1,6 @@
 import React from 'react';
 import style from './index.less';
-import mocks from '../../mock/chronicTable.js'
+// import mocks from '../../mock/chronicTable.js'
 import { Radio,CheckBtn ,Notify} from '@commonComp';
  import Information from '../Information';
  import {deepClone} from '@utils/tools.js';
@@ -129,7 +129,9 @@ class ScaleTable extends React.Component{
     for(let i=0; i<group.length; i++){
       let rows = group[i].rows;
       for(let j=0; j<rows.length; j++){
-        if(rows[j].required==1&& (rows[j].row.filter((it,i)=>{return !it.isSelect})).length>0){
+        // if(rows[j].required==1&& (rows[j].row.filter((it,i)=>{return !it.isSelect})).length>0){
+        // 必填项下有一项选中既可
+        if(rows[j].required==1&& (rows[j].row.filter((it,i)=>{return it.isSelect})).length==0){
           unfinish = true;
           break;
         }
@@ -158,21 +160,33 @@ class ScaleTable extends React.Component{
       }
     })
   }
+  filterScale(data){//type=1为表格内容
+    let scale = {};
+    for(let i=0; i<data.length; i++){
+      if(data[i].type==1){
+        scale = data[i];
+      }
+    }
+    return scale;
+  }
   componentWillReceiveProps(nextProps){ 
     const {tableId} = this.props;
-    if(JSON.stringify(nextProps.scaleInfo) !== '{}'){
+    const data = nextProps.scaleInfo;
+    if(JSON.stringify(data) !== '{}' && data[tableId]){
+      let scale = this.filterScale(data[tableId]);
       this.setState({
-        // valueData:nextProps.scaleInfo[tableId].length?mocks.newData:JSON.parse(nextProps.scaleInfo[tableId].content),
-        valueData:nextProps.scaleInfo[tableId]?JSON.parse(nextProps.scaleInfo[tableId][1].content):{},
+        // valueData:JSON.parse(nextProps.scaleInfo[tableId][1].content),
+        valueData:scale.content?JSON.parse(scale.content):{}
       })
     }
   }
   componentDidMount(){
     const {tableId,scaleInfo} = this.props;
     if(scaleInfo&&scaleInfo[tableId]){
+      let scale = this.filterScale(scaleInfo[tableId]);
       this.setState({
-        // valueData:scaleInfo[tableId].length?mocks.newData:JSON.parse(scaleInfo[tableId].content)
-        valueData:JSON.parse(scaleInfo[tableId][1].content)
+        // valueData:JSON.parse(scaleInfo[tableId][1].content)
+        valueData:scale.content?JSON.parse(scale.content):{}
       })
     }  
   }
@@ -183,7 +197,12 @@ class ScaleTable extends React.Component{
     // 替换表格内容
     let allDatas = scaleInfo[tableId]?JSON.parse(JSON.stringify(scaleInfo[tableId])):'' ;
     if(allDatas){
-      allDatas[1].content = JSON.stringify(valueData);
+      // allDatas[1].content = JSON.stringify(valueData);
+      for(let i=0; i<allDatas.length; i++){
+        if(allDatas[i].type==1){
+          allDatas[i].content = JSON.stringify(valueData);
+        }
+      }
       // 需求:未点计算,直接点确定、关闭也保存选中数据 4-30
       saveScaleData&&saveScaleData({id:tableId,data:allDatas});
     }
@@ -261,26 +280,28 @@ class ScaleTable extends React.Component{
     const {title,scaleInfo,tableId,formulaResult} = this.props;
     const data = scaleInfo[tableId];
     let {selecteds,scaleResult1} = this.state;
-    const content = data && data[1].content;//表格内容
-    const preContent = data && data[0].content;//表前文字
-    const footContent = data && data[2].content; //表后文字
-    const datas = content && JSON.parse(content);
+    const scale = data && this.filterScale(data);
+    const datas = scale && scale.content && JSON.parse(scale.content);
     const scaleResult = scaleResult1 || formulaResult&&formulaResult[tableId]; //量表计算结果
     return <div className={style['tableBox']} id="printcontent">
             <div className={style['printShow']}>
               <Information></Information>
             </div> 
             <h1>{datas?datas.scaleName:''}</h1>
-            <div dangerouslySetInnerHTML={{__html:preContent}} className={style['textlh']}></div>
-            <div className={style['textContent']}>
-              {this.getContent()}
-              {datas&&datas.noCalc==0?<div className={style['total']}>
+            {data && data.map((v,i)=>{
+              if(v.type==0){
+                return <div dangerouslySetInnerHTML={{__html:v.content}} className={style['textlh']}></div>
+              }else{
+                return <div className={style['textContent']}>
+                  {this.getContent()}
+                  {datas&&datas.noCalc==0?<div className={style['total']}>
                     <span>总分:</span>
                     <span>{scaleResult&&scaleResult.calcalculate&&scaleResult.calcalculate.result&&scaleResult.calcalculate.result.value +' '+ scaleResult.calcalculate.result.text||''}</span>
                     <span className={style['totalBtn']} onClick={this.handleFormula}>得分</span>
                   </div>:''}
-            </div>
-            <div dangerouslySetInnerHTML={{__html:footContent}} className={style['textlh']}></div>
+                </div>
+              }
+            })}
           </div>
   }
 }

+ 2 - 2
src/containers/AssessResult.js

@@ -26,7 +26,7 @@ function mapStateToProps(state) {
     update:assessResult.update,     //评估数据更新
     update1:assessResult.update1,       //加入记录更新
     timeTypes:assessResult.indexTimeTypes,    //图表切换的维度
-    wholeAssessData:assessResult.wholeAssess,   //评估内容
+    //wholeAssessData:assessResult.wholeAssess,   //评估内容
     wholeIndexs:assessResult.wholeIndexs||{},      //已加入评估记录的推送项
     wholeResults:assessResult.wholeResults,     //整体评估可能结果
     chooseSelecteds:assessResult.chooseSelecteds,    //已选中的选项
@@ -35,7 +35,7 @@ function mapStateToProps(state) {
     scaleUpdate:pushMessage.scaleUpdate,
     chronicPushItems: pushMessage.chronicPushItems, //慢病右侧推送
     formulaResult:pushMessage.formulaResult,       //量表计算结果
-    calcuResult:assessResult.calcuResult,      //评估弹窗可能结果计算结果
+    calcuResult:pushMessage.calcuResult,      //评估弹窗可能结果计算结果
   }
 }
 

+ 5 - 3
src/containers/ChronicInfo.js

@@ -78,16 +78,18 @@ function mapDispatchToProps(dispatch){
           const data = chronicPushItems;
           const result = res.data.data.result;
           data[param.ppIndex].details[param.pIndex].content.result =  result;
-          if(item.isPop){
+          /*if(item.isPop){
             dispatch({
               type:SET_CHRONIC_CALCU_RESULT,
               data:deepClone(result),
               id:item.param.disId
             });
-          }
+          }*/
           dispatch({
             type: SET_CHRONIC_PUSHS,
-            data: deepClone(data)
+            data: deepClone(data),
+            result:deepClone(result),
+            id:item.param.disId
           })
         }else{
           Notify.error(res.data.msg||'计算没有结果返回');

+ 13 - 1
src/containers/CurrentIll.js

@@ -1,7 +1,7 @@
 import React from 'react';
 import { connect } from 'react-redux';
 import CurrentIll from '@components/CurrentIll';
-import {INSERT_PROCESS,SET_CURRENT_DATA,SETTEXTMODEVALUE,SET_LABEL_MODULE,SELECT_SEARCHDATA,CLEAR_CURRENT_EDIT} from '@store/types/currentIll';
+import {INSERT_PROCESS,SET_CURRENT_DATA,SETTEXTMODEVALUE,SET_LABEL_MODULE,SELECT_SEARCHDATA,CLEAR_CURRENT_EDIT,SAVE_CURR_FREE} from '@store/types/currentIll';
 import {SET_CURRENT_ILL} from '@store/types/fillInfo'
 import {pushMessage} from '../store/async-actions/pushContainer';
 import {getModules} from '../store/async-actions/fetchModules.js';
@@ -141,6 +141,18 @@ function mapDispatchToProps(dispatch) {
           left:left,
           dis:0
         })
+      },
+      freeText(item){//自由输入
+        dispatch({
+          type: SAVE_CURR_FREE,
+          data:item
+        })
+        //右侧推送
+          setTimeout(function(){ 
+            if(didPushParamChange()){
+              dispatch(billing());
+            }
+          },500);
       }
     }
 }

+ 1 - 0
src/containers/DiagnosticList.js

@@ -21,6 +21,7 @@ function mapStateToProps(state) {
         showHistoryCase: state.diagnosticList.showHistoryCase,
         items:state.historyTemplates.items,
         chronicMagItem: state.diagnosticList.chronicMagItem,
+        typeConfig: state.typeConfig.typeConfig,
     }
 }
 

+ 10 - 4
src/containers/OperationContainer.js

@@ -10,14 +10,16 @@ import {
 } from "../store/types/print";
 import {saveMessage,clearMessages} from "../store/async-actions/print";
 import {saveTemplateDetail} from '@store/async-actions/tabTemplate';
-import {saveClickNum} from '@store/async-actions/homePage';
+import {saveClickNum,getInitModules} from '@store/async-actions/homePage';
 
 // function mapStateToProps({print}) {
 function mapStateToProps(state) {
     const {print,homePage} = state;
     return ({
         print,
-        winWidth:homePage.windowWidth
+        winWidth:homePage.windowWidth,
+        chronicMagItem: state.diagnosticList.chronicMagItem,//慢病疾病
+        chronicDesease:state.mainSuit.chronicDesease,//主诉存的慢病
     });
 }
 
@@ -47,8 +49,12 @@ function mapDispatchToProps(dispatch) {
             dispatch(saveClickNum);
             dispatch(() => saveMessage())
         },
-        clear: () => {
-            clearMessages()
+        clear: (flag) => {
+            clearMessages();
+            // 清除时如果是慢病模板则重新获取模板
+            if(flag){
+                dispatch(getInitModules);
+            }
         },
         saveDataAll(val,sex){
           dispatch(saveTemplateDetail(val,sex))

+ 2 - 5
src/containers/SpreadDrop.js

@@ -140,21 +140,18 @@ function mainSuitModule(dispatch,store,params){
 // 现病史
 function currentIll(dispatch,store,params){
   const {nones,exists,withs,exclusion,excluName,ban,noneIds} = params;
-  // const ikey = params.ikey.substr(1,1);
   const index = params.ikey;
   let ikey = getLabelIndex(index);
-  // let existsId = getIds(exists);
-  // let withsId = getIds(withs);
   let existsId = exists && exists.length>0?getIds(exists):[];
   let withsId = withs && withs.length>0?getIds(withs):[];
-  // const ids = existsId.join(",")+withsId.join(",");
   const ids = (existsId.concat(withsId)).join(",");
   let has = [],wes=[];
   //获取选中项目模板
   fetchModules(ids).then((res)=>{
     if(+res.data.code===0){
       const list = res.data.data;
-      if(list&&list.length>0){
+      // if(list&&list.length>0){
+      if(list&&JSON.stringify(list) !== '{}'){
         existsId.map((i)=>{
           // has.push(...list[i].questionMapping);
           has.push(list[i]);

+ 13 - 18
src/store/actions/currentIll.js

@@ -114,24 +114,17 @@ export const setData = (state,action) =>{
   let useEmpty,mainData;
   let mainModleData = JSON.parse(JSON.stringify(action.info.mainData));//主诉模板数据
   let moduleData = JSON.parse(JSON.stringify(res.moduleData));//现病史模板
-  // let addModule = JSON.parse(JSON.stringify(res.addModule));//拷贝的模板
   let current = JSON.parse(JSON.stringify(moduleData));
   let newMain = [];
-  let mainLabelModule = res.mainLabelModule;//主诉选中的症状id获取到的模板
-  let objToArr = [];
-  let keyArr = Object.keys(mainLabelModule);
-  for(let i=0; i<keyArr.length; i++){
-    objToArr.push(mainLabelModule[JSON.parse(keyArr[i])]);
-  }
-  /*for(let m in mainLabelModule){
-    objToArr.push(mainLabelModule[m]);
-  }*/
-  // 过滤掉没有mapping的数据
-  let mainLabelModuleArr = objToArr;
-  /*let mainLabelModuleArr = objToArr.filter((item)=>{
-    return item.questionMapping.length>0;
-  })*/
-  
+  let mainLabelModule = res.mainLabelModule;//主诉选中的症状id获取到的尾巴
+  let mainLabelModuleArr = [];
+  if(mainLabelModule){
+    let keyArr = Object.keys(mainLabelModule);
+    for(let i=0; i<keyArr.length; i++){
+      mainLabelModuleArr.push(mainLabelModule[JSON.parse(keyArr[i])]);
+    }
+  }
+ 
   // 是否使用空模板:num=0时判断mainIds,num>=1,截取第一病程遍历是否有症状exist
   if(num==0){
     useEmpty = mainIds.length>0 ? false:true;
@@ -140,11 +133,13 @@ export const setData = (state,action) =>{
     // 模板也分词时得加上分词结果的判断
     let sliceIdx;
     for(let j=0; j<mainModleData.length; j++){
-      if(mainModleData[j].id==config.tongYId && mainModleData[j].pos==1){
+      // if(mainModleData[j].id==config.tongYId && mainModleData[j].pos==1){
+      if(mainModleData[j].pos==1){
         sliceIdx = j;
+        break;
       }
     }
-    mainData = mainModleData.slice(0,sliceIdx);
+    mainData = mainModleData.slice(0,sliceIdx);//截取第一病程
     let existData = mainData.filter((item)=>{
       return item.exist;
     })

+ 2 - 1
src/store/actions/mainSuit.js

@@ -360,7 +360,8 @@ export const insertSearch = (state,action)=>{
       }
     })
     // flag=1前是文本标签就替换,否则插入
-    const iftext = moduleData[inserIndx-1].tagType;
+    // const iftext = moduleData[inserIndx-1].tagType;
+    const iftext = inserIndx&&moduleData[inserIndx-1]&&moduleData[inserIndx-1].tagType;
     if(iftext==config.tagType){
        moduleData.splice(inserIndx-1,1,{id:id,name:searchData,value:searchData,tagType:config.tagType,exist:1});
      }else{

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

@@ -180,8 +180,9 @@ export function setOtherHisModule(){
   return (dispatch, getStore) => {
     const state = getStore();
     const initData = state.homePage.initData;
+    const block = Object.assign(JSON.parse(config.textLabel),{full:true});
     const mode = state.typeConfig.typeConfig;
-    const model = JSON.parse(JSON.stringify(initData.otherHisModel));     //查体模板
+    const model = JSON.parse(JSON.stringify(initData.otherHisModel || null))||[block];     //查体模板
     const arr = JSON.parse(JSON.stringify(initData.otherHis || null));        //最近其他史数据
     const arrSave = JSON.parse(JSON.stringify(initData.otherHisSave || null));    //最近其他史saveText
     const selects = JSON.parse(JSON.stringify(initData.otherSelecteds || null));  //其他史杂音类选中项

+ 7 - 3
src/store/async-actions/print.js

@@ -18,8 +18,12 @@ export const saveMessage = (bool) => {
     let jsonData = getAllDataList(baseList);
     const lisData = baseList.inspect.pushItem;
     const lisArr = transferIndexData(lisData);
+      let obj = [];
+      Object.keys(baseList.assessResult.wholeIndexs).map((i)=>{
+        obj[i]=baseList.pushMessage.chronicPushItems[i];
+      });
     const evaluation={
-      htmlContent:JSON.stringify(getEvaluations(baseList.assessResult)),
+      htmlContent:JSON.stringify(getEvaluations(baseList.assessResult,obj)),
       //scaleList:[]
     };//getEvaluation();
     //console.log(baseList)
@@ -129,12 +133,12 @@ function transferIndexData(data) {
    return arr;
 }
 
-function getEvaluations(base){
+function getEvaluations(base,added){
     return {
       data:base.data,
       chooseSelecteds:base.chooseSelecteds,
       indexTimeTypes:base.indexTimeTypes,
-      wholeAssess:base.wholeAssess,
+      wholeAssess:added,
       wholeAssessText:base.wholeAssessText,
       wholeIndexs:base.wholeIndexs
     };

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

@@ -173,7 +173,7 @@ export const getScaleInfo = (it)=>{console.log('参数:',it)
         json(api.push, params)
         .then((res)=>{
             const result = res.data;
-            if(result.code==0){
+            if(result.code==0 && result.data.scale && result.data.scale.length>0){
                 dispatch({
                     type: SET_SCALE_INFO,
                     data: result.data.scale,
@@ -185,7 +185,7 @@ export const getScaleInfo = (it)=>{console.log('参数:',it)
                     value:true
                 })
             }else{
-                Notify.info(result.msg)
+                Notify.info(result.msg||'暂无量表信息')
             }
         }).catch((e) => {
             console.log(e)

+ 5 - 1
src/store/reducers/currentIll.js

@@ -2,7 +2,7 @@
 import {SET_CURRENT,CURRENT_CONFIRM,INSERT_PROCESS,SET_CURRENT_DATA,SET_LABEL_MODULE,SETMAINCHECKBOX,
   CURRENT_RADIO,CURRENT_NUMBER,CURRENT_TEXT_LABEL,CLEAR_CURRENT_ILL,SETTEXTMODEVALUE,CURRENT_GET_BIGDATAPUSH,CURRENT_CLEAR,
   SET_CURRENT_SEARCH,SETCURRENTTEXT,CURRENT_FOCUS_INDEX,SELECT_SEARCHDATA,CLEAR_CURRENT_EDIT,CURRENTADDLABELITEM,
-  SETCURRENTINPUT,DEL_CURRENT,CURRENT_TEXT_LABEL_NUMBER,REMOVE_CURR_ID,CURRENT_MUL,DEL_CURRENT_LABLE,SET_RADIO_INPUT_VALUE,CURRENT_CHRONIC} from '../types/currentIll';
+  SETCURRENTINPUT,DEL_CURRENT,CURRENT_TEXT_LABEL_NUMBER,REMOVE_CURR_ID,CURRENT_MUL,DEL_CURRENT_LABLE,SET_RADIO_INPUT_VALUE,CURRENT_CHRONIC,SAVE_CURR_FREE} from '../types/currentIll';
 import {confirm,insertProcess,setData,setCheckBox,setRadioValue,setNumberValue,changeLabelVal,clearCurrentIll,
   setTextModeValue,setModule,bigDataSymptom,setCheckText,insertLabelData,clearCurrentEdit,addLabelItem,setInputLabel,
   backspaceText,changeNumLabelVal,removeId,multipleComfirn,delSingleLable,setRadioInputValue,fillChronicModule} from '../actions/currentIll';
@@ -81,6 +81,10 @@ export default function(state=initState,action){
       return setRadioInputValue(state,action);
     case CURRENT_CHRONIC:
       return fillChronicModule(state,action);
+    case SAVE_CURR_FREE://自由输入
+      res.saveText[0] = action.data;
+      res.update = Math.random();
+      return res;
     default:
       return state;
   }

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

@@ -27,7 +27,8 @@ const initState = {
   tableList:[],
   formulaResult:{},
   scaleInfo:{},
-  showHide:{}
+  showHide:{},
+  calcuResult:{}
 };
 export default function(state = initState, action) {
   let res = Object.assign({},state);
@@ -76,6 +77,9 @@ export default function(state = initState, action) {
       return res;
     case SET_CHRONIC_PUSHS:
       res.chronicPushItems = action.data;
+      if(action.id){
+        res.calcuResult[action.id] = action.result;
+      }
       return res;
     case SET_SCALE_INFO://量表内容-量表id
       res.scaleInfo = Object.assign({},res.scaleInfo,{[action.id]:action.data});

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

@@ -27,4 +27,5 @@ export const CURRENT_MUL = 'CURRENT_MUL';     //单列多选
 export const DEL_CURRENT_LABLE = 'DEL_CURRENT_LABLE';     //
 export const SET_RADIO_INPUT_VALUE = 'SET_RADIO_INPUT_VALUE';
 export const CURRENT_CHRONIC = 'CURRENT_CHRONIC';//慢病填充模板
+export const SAVE_CURR_FREE = 'SAVE_CURR_FREE';//自由输入
 

+ 2 - 2
src/utils/config.js

@@ -1,7 +1,7 @@
 // const host='http://192.168.3.1:5050';//赵
 // const host='http://192.168.3.100:5050';//王峰
-// const host='http://192.168.2.241:5050';//后端接口访问地址
-const host='http://192.168.2.236:5050';//后端接口访问地址
+const host='http://192.168.2.241:5050';//后端接口访问地址
+// const host='http://192.168.2.236:5050';//后端接口访问地址
 // const host='http://192.168.3.11:5050';//王宇
 //const host='http://192.168.2.164:8080';
 // const host='http://192.168.3.117:5050'; //周铁刚

+ 2 - 2
src/utils/tools.js

@@ -208,8 +208,8 @@ const getAllDataStringList =(baseList) =>{           //获取所有模块文本
     }else{
         presentData = baseList.currentIll.saveText
     }
-
-    if(baseList.otherHistory.saveText.length == 1 && baseList.otherHistory.saveText[0].trim() == ''){
+    const oText = baseList.otherHistory.saveText;
+    if(oText.length == 1 && oText[0] && oText[0].trim() == ''){
         otherData = []
     }else{
         otherData = baseList.otherHistory.saveText