Pārlūkot izejas kodu

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

Luolei 6 gadi atpakaļ
vecāks
revīzija
d2d7c4dae8

+ 2 - 1
src/common/components/CheckBtn/index.jsx

@@ -16,7 +16,8 @@ class CheckBtn extends React.Component {
   }
 
   handleClick(id){
-    this.props.handleClick(id);
+    const {handleClick} = this.props;
+    handleClick&&handleClick(id);
   }
 
   getStyle(){

+ 4 - 3
src/common/components/NumberUnitPan/index.jsx

@@ -92,7 +92,7 @@ class NumberUnitPan extends Component{
           <td><span onClick={this.handleSelect}>5</span></td>
           <td><span onClick={this.handleSelect}>6</span></td>
           <td><span onClick={this.handleSelect}>小时</span></td>
-          <td><span onClick={this.handleSelect}></span></td>
+          <td><span onClick={this.handleSelect}></span></td>
           <td><span onClick={this.handleSelect}>次</span></td> 
         </tr>
         <tr>
@@ -100,7 +100,7 @@ class NumberUnitPan extends Component{
           <td><span onClick={this.handleSelect}>8</span></td>
           <td><span onClick={this.handleSelect}>9</span></td>
           <td><span onClick={this.handleSelect}>天</span></td>
-          <td><span onClick={this.handleSelect}></span></td>
+          <td><span onClick={this.handleSelect}></span></td>
           <td><span onClick={this.handleSelect}>岁</span></td> 
         </tr>
         <tr>
@@ -108,7 +108,8 @@ class NumberUnitPan extends Component{
           <td><span onClick={this.handleSelect}>0</span></td>
           <td><span onClick={this.handleSelect}>~</span></td>
           <td><span onClick={this.handleSelect}>/</span></td>
-          <td colspan="2" className={style['imgN']}><img src={backspace} onClick={this.handleBack.bind(this)} /></td>
+          <td><span onClick={this.handleSelect}>日</span></td>
+          <td className={style['imgN']}><img src={backspace} onClick={this.handleBack.bind(this)} /></td>
         </tr>
         <tr>
           <td colspan="3"><span onClick={this.handleClear.bind(this)} className={style['clearN']}>清空</span></td>

+ 2 - 1
src/common/components/Radio/index.jsx

@@ -18,7 +18,8 @@ class Radio extends React.Component {
   }
 
   handleClick(id){
-    this.props.handleClick(id);
+    const {handleClick} = this.props;
+    handleClick&&handleClick(id);
   }
 
   getStyle(){

+ 7 - 5
src/common/js/func.js

@@ -95,12 +95,14 @@ export const fullfillText = (arr,noPre=false,noEnd=false,ifEmpty=true)=>{
       tempText = '',
       value = '',
       item={},
-      checkHiddenDefault=false;
+      cNum = 0,
+      checkHiddenDefault=false;//console.log(arr)
   arr&&arr.map((it,i)=>{
     notText = notTextLabel(it);
+    cNum = i;
     value = it.value||'';
     textLabel = !ifEmpty&&i==0?Object.assign({},JSON.parse(config.textLabel),{showInCheck:true}):JSON.parse(config.textLabel);
-    _textLabel = !ifEmpty&&i<config.showCheckNum+1?Object.assign({},JSON.parse(config._textLabel),{showInCheck:true}):JSON.parse(config._textLabel);
+    _textLabel = !ifEmpty&&cNum<config.showCheckNum+1?Object.assign({},JSON.parse(config._textLabel),{showInCheck:true}):JSON.parse(config._textLabel);
     if(i===0){
       //第一个标签不是文本标签时在前面添加文本标签
       if(!noPre&&notText){
@@ -118,9 +120,9 @@ export const fullfillText = (arr,noPre=false,noEnd=false,ifEmpty=true)=>{
       saveText.push(tempText);
     }else{
       pre = arr[i-1];
-      item = !ifEmpty&&i<config.showCheckNum?Object.assign({},it,{showInCheck:true}):it;
+      item = !ifEmpty&&cNum<config.showCheckNum?Object.assign({},it,{showInCheck:true}):it;
       //判断单选项是否有默认选中,位置在隐藏区域时,查体所有标签展示
-      if(!ifEmpty&&!checkHiddenDefault&&i>config.showCheckNum&&+it.tagType===1&&(+it.controlType===0||+it.controlType===1)){
+      if(!ifEmpty&&!checkHiddenDefault&&cNum>config.showCheckNum&&+it.tagType===1&&(+it.controlType===0||+it.controlType===1)){
         if(it.questionDetailList.find((it)=>it.defaultSelect=='1')){
           checkHiddenDefault=true;
         }
@@ -148,7 +150,7 @@ export const fullfillText = (arr,noPre=false,noEnd=false,ifEmpty=true)=>{
       }
       if(notText&&!noEnd&&i===arr.length-1){//最后一个非文本标签,后面添加一个文本标签
         //不能用上面的变量textLabel,因为上一个if可能也进了,这样就是同一个对象,值改变时会同步
-        newArr.push(JSON.parse(config.textLabel));
+        newArr.push(ifEmpty?textLabel:_textLabel);
         saveText.push("");
       }
     }

+ 54 - 7
src/components/AssessResult/AssessHis/index.jsx

@@ -1,20 +1,28 @@
 import React, { Component } from "react";
 import style from "./index.less";
-import { Radio} from '@commonComp';
+import { Radio,ComplexModal} from '@commonComp';
 import arrow from '@common/images/icon_tri_blue.png';
 import loadingIcon from '@common/images/loading.gif';
 import ChooseItem from "../ChooseItem";
 import ScaleItem from "../ScaleItem";
 import ChartItem from "../ChartItem";
+import printIcon from '@common/images/team.png';
+import tableIcon from '@common/images/table.png';
+import ScaleTableHis from '@components/ScaleTableHis';
+import $ from "jquery";
 
 class AssessResultHis extends Component {
   constructor(props) {
     super(props);
     this.state={
       chartTimeTypes:{},      //图表模块
+      tableName:'',
+      tableId:'',
+      parentIndex:0
     };
     this.showAssessFn = this.showAssessFn.bind(this);
     this.getAssessContent = this.getAssessContent.bind(this);
+    this.showScaleFn = this.showScaleFn.bind(this);
   }
   handleChartChange(i,selects){
     const {chartTimeTypes} = this.state;
@@ -27,8 +35,8 @@ class AssessResultHis extends Component {
     this.props.getAssessHis(this.props.inquiryId);
   }
   handoutTypes(obj,item,i){
-    const {wholeAssess,wholeIndexs,chooseSelecteds} =obj;
-    const {getIndexData,inquiryDate,indexData,inquiryId,timeTypes} = this.props;
+    const {wholeAssess,wholeIndexs,chooseSelecteds,scaleResult,wholeResults} =obj;
+    const {getIndexData,inquiryDate,indexData,timeTypes} = this.props;
     const {chartTimeTypes} = this.state;
     const name = item.regionName+":";
     const list = item.data&&item.data.rows;
@@ -36,7 +44,10 @@ class AssessResultHis extends Component {
       case 0:     //数据来源与右侧手动添加
         return <ScaleItem title={name}
                           data={wholeAssess}
+                          showScaleFn={this.showScaleFn}
                           indexs={wholeIndexs}
+                          formulaResult={scaleResult}
+                          result={wholeResults}
                           disabled={true}
                           isRecommend={item.isRecommend}></ScaleItem>;
       case 1:     //数据来源于大数据
@@ -72,19 +83,55 @@ class AssessResultHis extends Component {
       chartTimeTypes:indexTimeTypes
     });
   }*/
+  showScaleFn(item,pid){
+    const { list,inquiryId } = this.props;
+    const obj = list&&list[inquiryId];
+    if(item){
+      this.setState({
+        tableName:item.name,
+        tableId:item.id,
+        showScale:!this.state.showScale
+      });
+    }else{
+      this.setState({
+        showScale:!this.state.showScale
+      });
+    }
+
+  }
+  onPrint(){
+    let dom = $("#printcontent");
+    dom.jqprint({
+      debug: false,
+      importCSS: true,
+      printContainer: true,
+      operaSupport: false,
+    });
+  }
   render() {
-    const { loading,isChronic } = this.props;
+    const { loading,isChronic, list,inquiryId } = this.props;
+    const {tableName,tableId,showScale} = this.state;
+    const obj = list&&list[inquiryId];
+    const scaleFooter = <div className={style['footer']}>
+      <span className={style['print']} onClick={this.onPrint}><img src={printIcon} alt=""/>打印</span>
+      <span className={style['okBtn']} onClick={()=>this.showScaleFn()}>关闭</span>
+    </div>;
     return <div className={style['assess-cont']}>
       <div className={style['assess-result']}>
         <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>:''}
-        {/*{data?data.map((it,i)=>{
-          return this.handoutTypes(it,i);
-        }):data===null?<p className={style['no-data']}>没有历史评估记录!</p>:''}*/}
         {this.getAssessContent()}
       </div>
+      {showScale?<ComplexModal onclose={this.showScaleFn} footer={scaleFooter}
+                                          title={tableName}
+                                          icon={tableIcon}
+                                          top={20}
+                                          bottom={20}
+                                          width={820}>
+        <ScaleTableHis title={tableName} tableId={tableId} result={obj.scaleResult&&obj.scaleResult[tableId]} data={obj.scaleInfo&&obj.scaleInfo[tableId]}></ScaleTableHis>
+      </ComplexModal>:''}
     </div>;
   }
 }

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

@@ -29,4 +29,39 @@
   img{
     width: 30px;
   }
+}
+.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;
+  }
 }

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

@@ -48,17 +48,17 @@ class ScaleItem extends Component {
   }
   confirmOption(){
     const {handleRes} = this.props;
-    const {radioVal,possible} = this.state;
+    const {radioVal} = this.state;
     handleRes&&handleRes({
-      possible:Object.assign({},possible,radioVal),
-      radioVal:Object.assign({},possible,radioVal),//不设置radioVal只有最近一次选中的值
+      possible:Object.assign({},radioVal),
+      radioVal:Object.assign({},radioVal),//不设置radioVal只有最近一次选中的值
     });
     this.closeOption();
   }
-  handleShowScale(item,parentId){
+  handleShowScale(item,parentId,pIndex){
     const {showScaleFn,closeAssess} = this.props;
     closeAssess&&closeAssess();    //关闭评估弹窗
-    showScaleFn&&showScaleFn(item,parentId);        //显示量表
+    showScaleFn&&showScaleFn(item,parentId,pIndex);        //显示量表
 
   }
   handleRadio(item,parent){
@@ -166,9 +166,8 @@ class ScaleItem extends Component {
         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)}>
+                      onClick={()=>this.handleShowScale(it.content,item.id,i)}>
                         {scaleRes&&scaleRes.result?(' 【'+it.content.name+'】 结果:'+scaleRes.result.value+" "+scaleRes.result.text):'【'+it.content.name+'】'}
                         </span>;
         }else if(its.type==2){      //计算公式
@@ -211,7 +210,7 @@ class ScaleItem extends Component {
                                 <span>{'请输入'+item1.name+':'}</span>
                               </td>
                               <td>
-                                <input type="text" disabled={disabled} 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,idd,e.target.value)}/>}
                               </td>
                               <td>
                                 <span>{item1.uint}</span>

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

@@ -21,8 +21,8 @@ class AssessResult extends Component {
       wholeAssessItems:wholeIndexs,     //整体评估模块
       wholeAssessText:props.wholeAssessText||'',     //整体评估补充说明
       wholeResults:{
-        possible:Object.assign({},props.possible),
-        radioVal:Object.assign({},props.radioVal)
+        possible:props.possible,
+        radioVal:props.radioVal
       },
     };
     this.handleChooseChange = this.handleChooseChange.bind(this);

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

@@ -31,7 +31,7 @@ class CheckBody extends Component{
   }
   getLabels(){
     const {data,showArr,saveText,selecteds,importLabel} = this.props;
-    let arr = [],list=[];//console.log(data,saveText)
+    let arr = [],list=[];
     const {boxMark,showAll} = this.state;
     const moreNum =data.length-[...data].reverse().findIndex((it)=>it.showInCheck)-1;//被隐藏的位置
     const moreText = filterDataArr([...saveText].splice(moreNum+1));     //被收起的标签中是否有有值得,有则不能再收起showMoreBtn?more:''

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

@@ -7,6 +7,7 @@
   /*float: right;*/
   position: absolute;
   right: 0;
+  background: #fff;
   img{
     vertical-align: text-top;
     width: 15px;

+ 13 - 10
src/components/ChronicInfo/index.jsx

@@ -208,18 +208,18 @@ class ChronicInfo extends React.Component{
     });
   }
   handleInputformula(v,i, j,idd,  e) {
-    const { data, setChronicPush } = this.props
-    const text = e.target.value
+    const { data, setChronicPush } = this.props;
+    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))
+    const data1 = JSON.parse(JSON.stringify(data));
     
     setChronicPush(data1)
   }
   handleForRadio(ii,v,i, j,idd, ind){//计算公式
-    const { data, setChronicPush } = this.props
+    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
@@ -227,7 +227,7 @@ class ChronicInfo extends React.Component{
       data[i].details[j].content.details[idd].details[ind].state = 1
     } 
     
-    const data1 = JSON.parse(JSON.stringify(data))
+    const data1 = JSON.parse(JSON.stringify(data));
     setChronicPush(data1)
   }
   confirmFormula(){//计算公式确定
@@ -244,11 +244,13 @@ class ChronicInfo extends React.Component{
   }
   confirmOption(parent,pIndex){//可能结果确定
     const {radioVal,possible} = this.state;
+    const {savePossibleResult} = this.props;
     this.setState({
       possible:Object.assign({},possible,radioVal),
       radioVal:Object.assign({},possible,radioVal),//不设置radioVal只有最近一次选中的值
-      optionId:null
-    })
+      optionId:null,
+    });
+    savePossibleResult&&savePossibleResult({possible:Object.assign({},possible,radioVal),radioVal:Object.assign({},possible,radioVal)})
   }
   handleSaveCalcu(obj){
     this.setState({
@@ -257,8 +259,8 @@ class ChronicInfo extends React.Component{
     })
   }
   calcuFormula(it,j, v, i) { //计算公式计算
-    const { calcuFormula, data ,chronicPushItems} = this.props
-    let allHasInfo = true
+    const { calcuFormula, data ,chronicPushItems} = this.props;
+    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) {
@@ -444,6 +446,7 @@ class ChronicInfo extends React.Component{
                                                isSelect={radioVal[v.id]==lis.detailName}
                                                handleClick={this.handleRadio.bind(this,lis,v)}>
                                         </Radio>
+                                        {lis.state==1?<span className={style['recomand']}>(智能推荐)</span>:''}
                                     </div>
                                   })}
                                 </div>
@@ -508,7 +511,7 @@ class ChronicInfo extends React.Component{
                           <span>
                             <i onClick={this.handleListClick.bind(this,v)}>{'【'+v.name+'】'}</i>
                             {/*{formulaResult&&formulaResult[v.id]?<i>{'结果:'+formulaResult[v.id].text}</i>:''}*/}
-                            {formulaResult&&formulaResult[v.id]?<i className={style['res']}>{'结果:'}{formulaResult[v.id].calcalculate&&formulaResult[v.id].calcalculate.result.value+' '+ formulaResult[v.id].calcalculate.result.text}</i>:''}
+                            {formulaResult&&formulaResult[v.id]?<i className={style['res']}>{'结果:'}{formulaResult[v.id].calcalculate&&formulaResult[v.id].calcalculate.result.value+' '+ (formulaResult[v.id].calcalculate.result.text?formulaResult[v.id].calcalculate.result.text:'')}</i>:''}
                           </span>
                           </li>
                         })}

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

@@ -272,4 +272,7 @@
     cursor: auto;
     margin-top: 15px;
     cursor: pointer;
+  }
+  .recomand{
+    color:#3B9ED0;
   }

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

@@ -46,18 +46,18 @@ class CurrentIll extends Component{
     // 判断主诉是否为空
     const {mainData,mainText,setData,moduleNum,mainIds,data,changeEditIll,editClear,symptomFeature,isChronic} = this.props;
     const that = this;
+    const ev = e || window.event;
+    const text = ev.target.innerText||ev.target.innerHTML;
     let {setDataTimer} = this.state; 
     let mainFinallyText = filterDataArr(mainText);
-    // if(mainData.length == 0 && !mainText[0]){
     if(!mainFinallyText){
       //弹窗提醒
       Notify.error("无法操作,请先输入主诉");
       this.setState({
         forbidInput:true
       })
-    }else {
+    }else if(!text) {//现病史框里没有内容时才设置模板
       let num = moduleNum.num;//主诉使用了几个模板
-        // isChronic为一个对象
       if(data.length==0 && !isChronic || !isChronic.name ){
         clearTimeout(setDataTimer);
         setDataTimer = setTimeout(function(){//延时,等待主诉失焦数据返回
@@ -74,15 +74,6 @@ class CurrentIll extends Component{
           setDataTimer
       })
       changeEditIll(false)
-      /*const showTimer = setTimeout(function(){
-        that.setState({
-          showMoudle:true,
-          forbidInput:false,
-          boxEditable:false,
-        })
-        changeEditIll(false)
-      },150)
-      clearTimeout(showTimer);*/
     }
 
   }
@@ -142,15 +133,15 @@ 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);
+    const {freeText,data} = this.props;
+    if(data&&data.length==0){//无模板纯手动输入时存值
+      const ev = e || window.event;
+      const innerData = ev.target.innerText || e.target.innerHTML;
+      if(!isIE()){
+        e.target.innerText?(e.target.innerText=""):(e.target.innerHTML="")
+        freeText && freeText(innerData.trim());
+      }else{
+          freeText && freeText(innerData);
       }
     }
   }

+ 2 - 2
src/components/DiagnosticItem/index.jsx

@@ -50,7 +50,7 @@ class DiagnosticItem extends Component{
        
     }
     addDiagodal(diagType){
-        const {item, isChronicMag} = this.props;
+        const {item, isChronicMag,mode} = this.props;
         item.type = diagType;
         // setTimeout(()=>{
         //     this.setState({
@@ -63,7 +63,7 @@ class DiagnosticItem extends Component{
                 //         return
                 //     }
                 // }
-                if(item.type == 2) {
+                if(item.type == 2&&mode==0) {
                     isChronicMag(item);
                 }
                 // 从缓存取慢病列表

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

@@ -262,7 +262,8 @@ class NumberDrop extends Component{
                 onClick={allClick?this.handleNumClick:null}
                 contentEditable={editable}
                 onBlur={this.handleBlur}
-                onkeydown={handleEnter}>
+                onkeydown={handleEnter}
+                onFocus={(e)=>{e.stopPropagation()}}>
       <span ref = {this.$pre}>&nbsp;{prefix}</span>
       <span onFocus={this.handleNumFocus}
             onClick={allClick?null:this.handleNumClick}

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

@@ -410,7 +410,8 @@ class PushItems extends Component {
                 )}
               </div>
             </div>
-            {chronicPushItems&&chronicPushItems.length>0?<ChronicInfo data={chronicPushItems}></ChronicInfo>:''}
+            {/*{chronicPushItems&&chronicPushItems.length>0?<ChronicInfo data={chronicPushItems}></ChronicInfo>:''}*/}
+            {<ChronicInfo data={chronicPushItems}></ChronicInfo>}
             <div className={style["tips"]}>
               <h1>
                 <img src={tipsImg} />

+ 1 - 0
src/components/RadioDrop/index.jsx

@@ -152,6 +152,7 @@ class RadioDrop extends Component{
            onBlur={this.handleEditLabel}
            contentEditable={this.state.editable}
            onDoubleClick={this.handledbClick}
+           onFocus={(e)=>{e.stopPropagation()}}
            onClick={(e)=>this.handleShow(e,true)}
            onkeydown={handleEnter}>
         {value||placeholder}

+ 29 - 12
src/components/ScaleTable/index.jsx

@@ -24,7 +24,7 @@ class ScaleTable extends React.Component{
     this.handleFormula = this.handleFormula.bind(this);
   }
   
-  handleRadio(groupName,name,item){
+  handleRadio(groupName,name,item,indexId){
     const {selecteds,valueData} = this.state;
     const value = item.detailName;
     this.setState({
@@ -43,13 +43,27 @@ class ScaleTable extends React.Component{
     if(rows){
       for(let j=0; j<rows.length; j++){
         let row = rows[j].row;
-        for(let k=0;k < row.length; k++){
-          if(row[k].name==name){
-            details = row[k].details;
+        let required = rows[j].required;
+        let rowsId = rows[j].indexId;
+        // 必填项处理
+        if(required==1&&rowsId==indexId){
+          for(let k=0;k < row.length; k++){
             row[k].isSelect = true;
-            break;
+            if(row[k].name==name){
+              details = row[k].details;
+              // break;
+            }
+          }
+        }else{
+          for(let k=0;k < row.length; k++){
+            if(row[k].name==name){
+              details = row[k].details;
+              row[k].isSelect = true;
+              break;
+            }
           }
         }
+        
       }
     }
     if(details){
@@ -221,22 +235,25 @@ class ScaleTable extends React.Component{
     let {selecteds,valueData,start,scaleResult1} = this.state;
     const {tableId,formulaResult} = this.props;
     const scaleResult = scaleResult1 || formulaResult&&formulaResult[tableId]; //量表计算结果
-    // const datas = valueData&&valueData.group?valueData:mocks.newData;
-    const datas = valueData&&valueData.group?valueData:'';
+    const datas = valueData&&valueData.group?valueData:'';//console.log(666,datas);
     let content =  datas&&datas.group&&datas.group.map((v,i)=>{
                 return <div className={style['group']}>
                   <p className={style['groupName']}>{v.groupName}</p>
                   {v.rows&&v.rows.map((it,ind)=>{
-                    return <div>
+                    return <div style={{borderBottom:'1px solid #EBEBEB'}}>
                       {it.row.map((item,index)=>{
                         if(item.controlType==0){
                           return <div className={style['block']} style={{border:it.required==1&&!item.isSelect&&start?'1px solid #f00':'none'}}>
-                              <p className={style['miniName']}>{item.name}</p>
+                              {/*<p className={style['miniName']}>{item.name}</p>*/}
+                              <p className={style['miniName']}> 
+                                <i>{index==0?it.indexId + '.':''}</i> 
+                                {item.name}
+                              </p>
                               {item.details&&item.details.map((vv,ii)=>{
                                 return <div className={style['item']}>
                                         <Radio label={vv.detailName+'('+vv.score+')'}
                                            isSelect={vv.select==1||selecteds[item.name]==vv.detailName}
-                                           handleClick={this.handleRadio.bind(this,v.groupName,item.name,vv)}>
+                                           handleClick={this.handleRadio.bind(this,v.groupName,item.name,vv,it.indexId)}>
                                         </Radio>
                                         {vv.state==1?<span className={style['recomand']}>(智能推荐)</span>:''}
                                     </div>
@@ -294,9 +311,9 @@ class ScaleTable extends React.Component{
               }else{
                 return <div className={style['textContent']}>
                   {this.getContent()}
-                  {datas&&datas.noCalc==0?<div className={style['total']}>
+                  {datas&&datas.Calc==1?<div className={style['total']}>
                     <span>总分:</span>
-                    <span>{scaleResult&&scaleResult.calcalculate&&scaleResult.calcalculate.result&&scaleResult.calcalculate.result.value +' '+ scaleResult.calcalculate.result.text||''}</span>
+                    <span>{scaleResult&&scaleResult.calcalculate&&scaleResult.calcalculate.result&&scaleResult.calcalculate.result.value +' '+ (scaleResult.calcalculate.result.text?scaleResult.calcalculate.result.text:'')}</span>
                     <span className={style['totalBtn']} onClick={this.handleFormula}>得分</span>
                   </div>:''}
                 </div>

+ 11 - 5
src/components/ScaleTable/index.less

@@ -32,14 +32,20 @@ strong{
     }
     .block{
       margin-top: 20px;
-      padding-top: 5px;
+      padding: 5px 0 0 30px;
     }
     .redBorder{
       border: 1px solid #f00;
     }
-    // .miniName{
-    //   margin-top: 25px;
-    // }
+    .miniName{
+      margin-left: -30px;
+      i{
+        display: inline-block;
+        width: 25px;
+        text-align: center;
+        margin-right: 5px;
+      }
+    }
   }
   .groupName{
     font-size: 14px;
@@ -50,7 +56,7 @@ strong{
   .subTotal{
     height: 49px;
     line-height: 49px;
-    border-top: 1px solid #EBEBEB;
+    // border-top: 1px solid #EBEBEB;
     text-align: right;
     margin-top: 10px;
   }

+ 111 - 0
src/components/ScaleTableHis/index.jsx

@@ -0,0 +1,111 @@
+import React from 'react';
+import style from './index.less';
+// import mocks from '../../mock/chronicTable.js'
+import { Radio,CheckBtn ,Notify} from '@commonComp';
+ import Information from '../Information';
+ import {deepClone} from '@utils/tools.js';
+ import {getFormulaResult} from '@store/async-actions/fetchModules.js';
+/**
+*量表 具体信息页面
+*title:量表标题/scaleName
+*data:量表内容:scaleName量表标题,calculate量表计算结果,group分组,
+*
+*
+**/
+class ScaleTableHis extends React.Component{
+  constructor(props){
+    super(props);
+  }
+  filterScale(data){//type=1为表格内容
+    let scale = {};
+    for(let i=0; i<data.length; i++){
+      if(data[i].type==1){
+        scale = data[i];
+      }
+    }
+    return scale;
+  }
+
+  getContent(datas){
+    const {title,formulaResult,data} = this.props;
+    // const datas = valueData&&valueData.group?valueData:mocks.newData;
+    let content =  datas&&datas.group&&datas.group.map((v,i)=>{
+                return <div className={style['group']}>
+                  <p className={style['groupName']}>{v.groupName}</p>
+                  {v.rows&&v.rows.map((it,ind)=>{
+                    return <div>
+                      {it.row.map((item,index)=>{
+                        if(item.controlType==0){
+                          return <div className={style['block']} style={{border:it.required==1&&!item.isSelect&&start?'1px solid #f00':'none'}}>
+                              <p className={style['miniName']}>{item.name}</p>
+                              {item.details&&item.details.map((vv,ii)=>{
+                                return <div className={style['item']}>
+                                        <Radio label={vv.detailName+'('+vv.score+')'}
+                                           isSelect={vv.select==1}
+                                               disabled={true}>
+                                        </Radio>
+                                        {vv.state==1?<span className={style['recomand']}>(智能推荐)</span>:''}
+                                    </div>
+                              })}
+                              
+                            </div>
+                          }else{
+                            return <div className={style['block']}>
+                                <p className={style['miniName']}>{item.name}</p>
+                                  {item.details&&item.details.map((vv,ii)=>{
+                                    return <div className={style['item']}>
+                                    <CheckBtn value={vv.detailName}
+                                                    label={vv.detailName}
+                                                    disabled={true}
+                                                    isSelect={vv.select==1}>
+                                          </CheckBtn>
+                                    {vv.state==1?<span className={style['recomand']}>(智能推荐)</span>:''}
+                                    </div>
+                                  })}
+                            </div>
+                          }
+                        
+                      })}
+                    </div>
+                  })}
+                  {v.groupCalculate.isShow==1?<p className={style['subTotal']}>
+                    <span>计分:</span>
+                    {/*<span>{v.groupCalculate.result.value}</span>*/}
+                    <span>{scaleResult&&scaleResult.group.map((m,ii)=>{
+                      if(m.groupName==v.groupName){
+                        return m.groupCalculate.result.value;
+                      }
+                    })}</span>
+                  </p>:''}  
+                </div>
+              })
+    return content;
+  }
+
+  render(){
+    const {title,data,result} = this.props;console.log(this.props)
+    const scale = data && this.filterScale(data);
+    const datas = scale && scale.content && JSON.parse(scale.content);
+    const scaleResult = datas; //量表计算结果
+    return <div className={style['tableBox']} id="printcontent">
+            <div className={style['printShow']}>
+              <Information></Information>
+            </div> 
+            <h1>{datas?datas.scaleName:''}</h1>
+            {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&&datas.Calc==1?<div className={style['total']}>
+                    <span>总分:</span>
+                    <span>{result&&result.calcalculate&&result.calcalculate.result&&result.calcalculate.result.value +' '+ result.calcalculate.result.text||''}</span>
+                  </div>:''}
+                </div>
+              }
+            })}
+          </div>
+  }
+}
+export default ScaleTableHis;

+ 83 - 0
src/components/ScaleTableHis/index.less

@@ -0,0 +1,83 @@
+.tableBox{
+  // height: 690px;
+  overflow-y: auto;
+  padding: 30px;
+  h1{
+    font-size: 16px;
+    font-weight: bold;
+    margin: 10px 0 30px;
+    text-align: center;
+  }
+}
+strong{
+  font-weight: bold;
+}
+.textlh{
+  p{
+    line-height: 22px;
+  }
+}
+.textContent{
+  margin: 40px 0 30px;
+  .group{
+    border-bottom: 4px solid #EBEBEB;
+    padding-bottom: 10px;
+    margin-top: 25px;
+    .item{
+      display: inline-block;
+      margin-right: 24px;
+    }
+    .recomand{
+      color:#3B9ED0;
+    }
+    .block{
+      margin-top: 20px;
+      padding-top: 5px;
+    }
+    .redBorder{
+      border: 1px solid #f00;
+    }
+    // .miniName{
+    //   margin-top: 25px;
+    // }
+  }
+  .groupName{
+    font-size: 14px;
+    font-weight: bold;
+    color:#000;
+    margin: 25px 0;
+  }
+  .subTotal{
+    height: 49px;
+    line-height: 49px;
+    border-top: 1px solid #EBEBEB;
+    text-align: right;
+    margin-top: 10px;
+  }
+  .total{
+    height: 72px;
+    line-height: 72px;
+    border-bottom: 10px solid #EBEBEB;
+    text-align: right;
+    .totalBtn{
+      display: inline-block;
+      width: 64px;
+      height: 32px;
+      line-height: 32px;
+      color:#3B9ED0;
+      border: 1px solid #3B9ED0;
+      border-radius: 4px;
+      margin-left: 40px;
+      text-align: center;
+      cursor: pointer;
+    }
+  }
+}
+.printShow {
+  display: none;
+}
+@media print {
+  .printShow {
+    display: block;
+  }
+}

+ 0 - 7
src/containers/AssessResultHis.js

@@ -6,7 +6,6 @@ import {billing} from '@store/async-actions/pushMessage';
 import {getAssessHis,getIndexData} from '@store/async-actions/fetchModules';
 import {SET_ASSESS_DATA,SET_INDEX_DATA} from '@types/assessResult';
 import {SET_ASSESS_HISTORY_DATA,SET_ASSESS_HISTORY_LOADING} from '@types/assessResultHis';
-import store from '@store';
 
 /***
  * 管理评估逻辑:
@@ -25,12 +24,6 @@ function mapStateToProps(state) {
     indexData:assessResult.indexData,
     loading:assessResultHis.loading,
     timeTypes:assessResult.indexTimeTypes,    //图表切换的维度
-    /*data:assessResultHis.data,
-    timeTypes:assessResultHis.indexTimeTypes,    //图表切换的维度
-    wholeAssessData:assessResultHis.wholeAssess,   //评估内容
-    wholeIndexs:assessResultHis.wholeIndexs,      //已加入评估记录的推送项
-    chooseSelecteds:assessResultHis.chooseSelecteds,    //已选中的选项
-    wholeAssessText:assessResultHis.wholeAssessText,     //整体评估补充说明*/
   }
 }
 

+ 6 - 0
src/containers/ChronicInfo.js

@@ -62,6 +62,12 @@ function mapDispatchToProps(dispatch){
         }
       }
     },
+    savePossibleResult(data){
+      dispatch({
+        type: 'SAVE_POSSIBLE_RESULT',
+        wholeResults: data
+      })
+    },
     //设置量表推送内容
     setChronicPush(data) {
       dispatch({

+ 2 - 1
src/containers/DiagnosticItem.js

@@ -11,7 +11,8 @@ import {billing, getTips} from '../store/async-actions/pushMessage';
 
 function mapStateToProps(state) {
     return {
-        diagnosticList: state.diagnosticList.diagnosticList
+        diagnosticList: state.diagnosticList.diagnosticList,
+        mode:state.typeConfig.typeConfig
     }
 }
 

+ 50 - 62
src/store/actions/currentIll.js

@@ -156,50 +156,41 @@ export const setData = (state,action) =>{
       let main = [];//主症状
       let withs = [];//伴随
       let firstT = 0;
-      for(let i=0; i<mainData.length; i++){
-          if(mainData[i].id==config.tongYId && !mainData[i].pos){//第一个通用特征描述
-            if(mainData[i].value){
-              tongYong = mainData[i].value;
-            }
-          }       
-          else if(mainData[i].exist){
-            mainData[i].exist==1?main.push(mainData[i]):withs.push(mainData[i])
-          }
-          
-          // 处理时间和主诉通用症状--现病史模板无“主诉通用症状” 1-7
-          for(let j=0; j<current.length; j++){
-            if(mainData[i].id==current[j].id && mainData[i].controlType==5){//处理时间,避免手动输入的值
-              firstT++
-              if(mainData[i].value && firstT==1){
-                current[j] = {id:mainData[i].id,name:mainData[i].value,value:mainData[i].value,tagType:config.tagType}
-              }
-            }  
-          }
-        }
+      mainData.map((v,i)=>{
+        // 主诉通用症状描述
+        if(v.id==config.tongYId && v.value && !v.pos){tongYong = v.value;}
+        if(v.exist){v.exist==1?main.push(v):withs.push(v)}
+        // 时间单位
+        if(v.controlType==5&&v.value){
+          firstT++;
+          current.map((it,ii)=>{
+            if(it.id==v.id&& firstT==1){it.value=v.value}
+          })
+        } 
+      })
       
       // 主症状添加tongYong标签选中文字
-      let tongYText = tongYong?{name:tongYong,value:tongYong,tagType:config.tagType}:'';
       let mainCopy = JSON.parse(JSON.stringify(main));
       let manInput = [];
       // 去掉主诉添加的顿号 
-      for(let j=0; j<mainCopy.length; j++){
-        if(tongYText){
-          mainCopy[j].name = tongYong + (mainCopy[j].name).replace('、',"");
-          mainCopy[j].value = tongYong + (mainCopy[j].value).replace('、',"");
+      mainCopy.map((ele,ind)=>{
+        if(tongYong){
+          ele.name = tongYong + (ele.name).replace('、',"");
+          ele.value = tongYong + (ele.value).replace('、',"");
         }else{
-          mainCopy[j].name = (mainCopy[j].name).replace('、',"");
-          mainCopy[j].value = (mainCopy[j].value).replace('、',"");
-        }  
+          ele.name = (ele.name).replace('、',"");
+          ele.value = (ele.value).replace('、',"");
+        }
         //查询是否有手动输入--输入的内容放到最后(3-27)
-        if(mainCopy[j].name != mainCopy[j].value){
-          const inputText = mainCopy[j].value.replace(mainCopy[j].name,"");
+        if(ele.name != ele.value){
+          const inputText = ele.value.replace(ele.name,"");
           const textObj = Object.assign({},JSON.parse(config.textLabel),{name:inputText});
           if(config.textReg.test(inputText)){//包含中英文或数字->即不全是标点符号才插入
              manInput.push(textObj);
           }
-          mainCopy[j].value = mainCopy[j].name;
+          ele.value = ele.name;
         }
-      }
+      })
 
        // 将ids接口获取到的模板匹配到对应主症状后面
       // 主症状
@@ -220,16 +211,10 @@ export const setData = (state,action) =>{
               if(items.length==0){//没有尾巴时给症状后加逗号(3.5)
                 for(let j=0; j<newMainCopy.length; j++){
                   if(newMainCopy[j].id==mainCopy[k].id){
-                    // newMainCopy[j].value = newMainCopy[j].name = mainCopy[k].value+',';
-                    newMainCopy[j].value = newMainCopy[j].name = mainCopy[k].value||mainCopy[k].name+',';
+                    newMainCopy[j].value = newMainCopy[j].name = (mainCopy[k].value||mainCopy[k].name)+',';
                   }
                 }
-              }       
-              /*if(ind==1){
-                preLength = items.length;
-              }else{
-                insertInd += preLength;
-              }*/
+              } 
               if(ind>1){
                 insertInd += lengArr[k-1];
               }
@@ -265,17 +250,11 @@ export const setData = (state,action) =>{
               let items = v.questionMapping.filter((item)=>{
                               return item.symptomType==0||item.symptomType==2;
                             })
-              /*if(withInd==1){
-                withPreLength = items.length;
-              }else{
-                withInsertInd += withPreLength;
-              }*/
               withLengArr[d] = items.length;
               if(items.length==0){//没有尾巴时给症状后加逗号(3.5)
                 for(let j=0; j<newWiths.length; j++){
                   if(newWiths[j].id==withs[d].id){
-                    // newWiths[j].value = newWiths[j].name = withs[d].value+',';
-                    newWiths[j].value = newWiths[j].name = withs[d].value||withs[d].name+',';
+                    newWiths[j].value = newWiths[j].name = (withs[d].value||withs[d].name)+',';
                   }
                 }
               }
@@ -289,18 +268,21 @@ export const setData = (state,action) =>{
       }
       
       let symptomArr = newMainCopy.concat(manInput,newWiths,manWithInput);
-      let newSymptomArr = formatContinueDots(JSON.parse(JSON.stringify(symptomArr)));   //过来连续标点
-      //组装好的主症状和伴随症状插入现病史模板(flag=4前)
-      let insertIdx = null;
-      for(let j=0; j<current.length; j++){
+      let newSymptomArr = formatContinueDots(JSON.parse(JSON.stringify(symptomArr)));   //过滤连续标点
+      //组装好的主症状和伴随症状插入现病史模板(flag=4前)--现病史是否有模板
+      if(moduleData&&moduleData.length>0){
+        let insertIdx = null;
+        for(let j=0; j<current.length; j++){
           if(current[j].flag && current[j].flag==4){
             insertIdx = j;  
           }
         }
-   
-      for(let k=0; k<newSymptomArr.length; k++){
-        let pos = insertIdx+k;
-        current.splice(pos,0,newSymptomArr[k]);
+        for(let k=0; k<newSymptomArr.length; k++){
+          let pos = insertIdx+k;
+          current.splice(pos,0,newSymptomArr[k]);
+        }
+      }else{//现病史没有模板
+        current = newSymptomArr;
       }
       let currentData = JSON.parse(JSON.stringify(current));
       res.data = fullfillText(currentData).newArr;
@@ -335,16 +317,19 @@ export const setData = (state,action) =>{
         }
         //组装好的主症状和伴随症状插入现病史模板(flag=4前)
         let endFeatureData = JSON.parse(JSON.stringify(featureData));
-        let insertIdx = null;
-        for(let j=0; j<current.length; j++){
+        if(moduleData&&moduleData.length>0){
+          let insertIdx = null;
+          for(let j=0; j<current.length; j++){
             if(current[j].flag && current[j].flag==4){
               insertIdx = j;  
             }
           }
-     
-        for(let k=0; k<endFeatureData.length; k++){
-          let pos = insertIdx+k;
-          current.splice(pos,0,endFeatureData[k]);
+          for(let k=0; k<endFeatureData.length; k++){
+            let pos = insertIdx+k;
+            current.splice(pos,0,endFeatureData[k]);
+          }
+        }else{//现病史没有模板
+          current = endFeatureData;
         }
         let currentData = JSON.parse(JSON.stringify(current));
         res.data = fullfillText(currentData).newArr;
@@ -623,7 +608,10 @@ export const changeLabelVal = (state,action)=>{
           localStorage.setItem('radio'+item.id,JSON.stringify([li]));
         }
         //取消原选中状态
-        item.questionDetailList.find((it)=>it.selected==true).selected=false;
+        const seld = item.questionDetailList.find((it)=>it.selected==true);
+        if(seld){
+          seld.selected=false;
+        }
       }
       item.labelPrefix = prefix||'';
       item.labelSuffix = suffix||'';

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

@@ -155,11 +155,11 @@ export function getInitData(){
     json(api.getBigPush,param).then((res)=>{
       if(+res.data.code === 0){
         const data = res.data.data&&res.data.data.vital;
-        //const str = JSON.stringify(data);
-        //const arr = fullfillText(JSON.parse(str),false,false,false).newArr;
+        const str = JSON.stringify(data);
+        const arr = fullfillText(JSON.parse(str),false,false,false).newArr;
         dispatch({
           type:SET,
-          data:[...data],
+          data:arr,
           isEmpty:false
         });
       }else{
@@ -187,7 +187,7 @@ export function setOtherHisModule(){
     const arrSave = JSON.parse(JSON.stringify(initData.otherHisSave || null));    //最近其他史saveText
     const selects = JSON.parse(JSON.stringify(initData.otherSelecteds || null));  //其他史杂音类选中项
     const isHis = initData.otherIsHis;     //是否是历史数据
-    const onlyOneText = arr && arr.length == 1 && arr[0].tagType == 8 && !(arr[0].name || arr[0].value);    //是否只有一个自由文本标签
+    const onlyOneText = arr && arr.length == 1 && arr[0].tagType == 8 && !arr[0].value;    //是否只有一个自由文本标签
     const listObj = isHis && (mode == 1 || (!onlyOneText && mode == 0)) ? {
       newArr: arr,
       saveText: arrSave || []
@@ -260,7 +260,7 @@ export function getIndexData(range){
       diseaseId:21773,
       startTime:range[0],
       endTime:range[1],
-      patientId:1001,//patInfo.message.patientId,
+      patientId:patInfo.message.patientId,
     };
     return json(api.getIndexData,param);
   }

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

@@ -21,7 +21,7 @@ function modulesParseJson(data){
   let json = {},obj={},saveTextJson={},moduleName={};
   data.map((it)=>{
     moduleName[config.moduleCP[it.type]] = it.name;//添加病情变化/病程变化子模板需要使用模板名称
-    obj = fullfillText(it.moduleDetailDTOList);
+    obj = it.type==4?fullfillText(it.moduleDetailDTOList,false,false,false):fullfillText(it.moduleDetailDTOList);
     json[config.moduleCP[it.type]] = formatContinueDots(obj.newArr);
     saveTextJson[config.moduleCP[it.type]] = obj.saveText;
   });

+ 12 - 8
src/store/async-actions/print.js

@@ -14,16 +14,13 @@ export const saveMessage = (bool) => {
     let baseList = store.getState();
     let state = baseList.patInfo.message;
     let whichSign = baseList.typeConfig.typeConfig;
+    const pushMessage = baseList.pushMessage;
     let jsonStr = getAllDataStringList(baseList);
     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,obj)),
+      htmlContent:JSON.stringify(getEvaluations(baseList.assessResult,pushMessage)),
       //scaleList:[]
     };//getEvaluation();
     //console.log(baseList)
@@ -133,14 +130,21 @@ function transferIndexData(data) {
    return arr;
 }
 
-function getEvaluations(base,added){
+function getEvaluations(base,pushMessage){
+    let obj = [];
+    Object.keys(base.wholeIndexs).map((i)=>{
+      obj[i]=pushMessage.chronicPushItems[i];
+    });
     return {
       data:base.data,
       chooseSelecteds:base.chooseSelecteds,
       indexTimeTypes:base.indexTimeTypes,
-      wholeAssess:added,
+      wholeAssess:obj,
       wholeAssessText:base.wholeAssessText,
-      wholeIndexs:base.wholeIndexs
+      wholeIndexs:base.wholeIndexs,
+      scaleInfo:pushMessage.scaleInfo,
+      scaleResult:pushMessage.formulaResult,
+      wholeResults:base.wholeResults
     };
 }
 

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

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

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

@@ -47,6 +47,9 @@ export default (state=init,action)=>{
       res.indexTimeTypes[index] = rangeType;
       res.update = Math.random();   //对象更新
       return res;
+    case 'SAVE_POSSIBLE_RESULT':
+      res.wholeResults = action.wholeResults||{};
+      return res;
     case SET_SAVE_ASSESS_DATA:
       res.wholeIndexs = action.wholeAssessItems||{};
       res.wholeResults = action.wholeResults||{};