فهرست منبع

主诉搜索症状移植到现病史

liucf 6 سال پیش
والد
کامیت
35734fe0f5

+ 1 - 1
src/common/components/ItemBox/index.jsx

@@ -33,7 +33,7 @@ class ItemBox extends Component {
   }
   handleInput(e){
     const {onchange,data} = this.props;
-    if((data&&data.length==0)||!data){//避免结构化下触发onchange,导致下拉要点两下
+    if(!data || (data.length==0)){//避免结构化下触发onchange,导致下拉要点两下
       onchange&&onchange(e)
     }
   }

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

@@ -143,20 +143,21 @@ class MainSuit extends Component{
   }
 
   handleChange(e){
-    const data = e.target.innerText;
+    const ev = e || window.event;
+    const data = ev.target.innerText;
     const {getSearchData,searchData,datas,pushMessage,reTotalHide} = this.props;
     const {overFlag,inpText} = this.state;
     reTotalHide && reTotalHide();//重置homePage中的控制项
     const that = this;
-    if(data.length > config.limited){
+    if(data&&data.length > config.limited){
       Notify.info(config.limitText);
       if(overFlag){
-        e.target.innerText = inpText;
-        e.target.blur();
+        ev.target.innerText = inpText;
+        ev.target.blur();
         return
       }
-      e.target.innerText = data.substr(0,config.limited);  //输入法内输入多个字再按enter的情况
-      e.target.blur();
+      ev.target.innerText = data.substr(0,config.limited);  //输入法内输入多个字再按enter的情况
+      ev.target.blur();
       this.setState({
         inpText:data.substr(0,config.limited),
         overFlag:true
@@ -167,11 +168,11 @@ class MainSuit extends Component{
       inpText:data,
       overFlag:false
     })
-    if(datas.length > 0){//使用模板
+    if(datas && datas.length > 0){//使用模板
       return false;
     }
     // 有输入内容或搜索结果时关闭,否则显示
-    if(data.trim()||searchData.length>0){
+    if(data && data.trim()||searchData.length>0){
       this.setState({
         symptom:false
       })
@@ -180,7 +181,6 @@ class MainSuit extends Component{
         symptom:true
       })
     }
-
     clearTimeout(this.state.timer);
     const timer = setTimeout(function(){
       //调搜索接口 使用模板走EditableSpan里的搜索方法
@@ -211,7 +211,10 @@ class MainSuit extends Component{
       });
     }else{
       if(datas.length==0){
-        freeText && freeText(data.trim());
+        const ev = e || window.event;
+        const data = ev.target.innerText;
+        // freeText && freeText(data.trim());
+        freeText && freeText(data);
       }
     }
     

+ 1 - 0
src/containers/MainSuit.js

@@ -108,6 +108,7 @@ function mapDispatchToProps(dispatch) {
               console.log(result.msg);
             }
         });
+        dispatch(billing);
       },
       insertSearch(obj){
         dispatch({

+ 25 - 4
src/store/actions/currentIll.js

@@ -59,10 +59,13 @@ function addPos(data,num){
 export const setData = (state,action) =>{
   let res = Object.assign({},state);
   res.editClear = false;
-  res.symptomIds = JSON.parse(JSON.stringify(action.info.mainIds));
-  const useEmpty = action.info.useEmpty;
+  const mainIds = action.info.mainIds;
+  res.symptomIds = JSON.parse(JSON.stringify(mainIds));
   const num = action.info.num;//点击了几次添加病情变化
-  let mainData = JSON.parse(JSON.stringify(action.info.mainData));//主诉模板数据
+  // const useEmpty = action.info.useEmpty;
+  let useEmpty,mainData;
+  // let mainData = JSON.parse(JSON.stringify(action.info.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));
@@ -81,6 +84,24 @@ export const setData = (state,action) =>{
   /*let mainLabelModuleArr = objToArr.filter((item)=>{
     return item.questionMapping.length>0;
   })*/
+
+  // 是否使用空模板:num=0时判断mainIds,num>=1,截取第一病程遍历是否有症状exist
+  if(num==0){
+    useEmpty = mainIds.length>0?false:true;
+    mainData = mainModleData;
+  }else{
+    let sliceIdx;
+    for(let j=0; j<mainModleData.length; j++){
+      if(mainModleData[j].id==config.tongYId && mainModleData[j].pos==1){
+        sliceIdx = j;
+      }
+    }
+    mainData = mainModleData.slice(0,sliceIdx);
+    let existData = mainData.filter((item)=>{
+      return item.exist;
+    })
+    useEmpty = existData&&existData.length>0?false:true;
+  }
   
   if (useEmpty) {
     res.data = res.emptyData;
@@ -211,7 +232,7 @@ function getLabel(lid,lname){
 // 多选展开确定事件--主、伴、无
 export const confirm = (state,action) =>{
   let res = Object.assign({},state);
-  let length1 = res.data.length;console.log(123,action);
+  let length1 = res.data.length;
   let arr = JSON.parse(JSON.stringify(res.data));
   const {nones,exists,withs,ikey,exclusion,excluName,ban,noneIds} = action.data;
   let existsId = exists && exists.length>0?getIds(exists):[];

+ 78 - 7
src/store/actions/mainSuit.js

@@ -128,10 +128,7 @@ export const confirm = (state,action) =>{
   let arr = res.data;
   let saveText = JSON.parse(JSON.stringify(res.saveText));
   const {exists,withs,ikey,withsName,existsName,ban} = action.data;
-  // let existsId = getIds(exists);
-  // let withsId = getIds(withs);
   let banText = JSON.stringify(ban) == "{}" ? '':{id:ban.id,name:ban.name,value:ban.name,tagType:config.tagType};
-  // res.mainIds = res.mainIds?res.mainIds.concat(existsId,withsId):[];
   let length = exists.length;
   let labelIndx = parseInt(ikey);//当前点击标签的index
   // 取第一个添加症状的主症状和伴随
@@ -142,8 +139,18 @@ export const confirm = (state,action) =>{
     res.mainSymptIds = res.mainSymptIds.concat(existsId,withsId);
   }
 
-  let text = saveText.slice(0,labelIndx);
-  let index = text.indexOf('伴');
+  // 第二病程-伴位置处理
+  let forwardId;
+  let text;
+  for(let n=labelIndx-1; n>0; n--){
+    if(arr[n].id==8){
+      forwardId = n;
+      continue;
+    }
+  }
+  if(forwardId){
+    text = saveText.slice(forwardId,labelIndx);
+    let index = text.indexOf('伴');
     if(index==-1){//没有伴,直接插入ikey前
       if(exists.length > 0){
         for(let i=0; i<exists.length; i++){
@@ -181,6 +188,48 @@ export const confirm = (state,action) =>{
         }
       }
     }
+  }else{
+    let text = saveText.slice(0,labelIndx);
+    let index = text.indexOf('伴');
+    if(index==-1){//没有伴,直接插入ikey前
+      if(exists.length > 0){
+        for(let i=0; i<exists.length; i++){
+          let pos = labelIndx + i;
+          arr.splice(pos,0,getTextLabel(exists[i].id,exists[i].name,1));
+          res.saveText[pos] = exists[i].name;
+        }
+      }
+      if(withs.length > 0){
+        let newWiths = JSON.parse(JSON.stringify(withs));
+        if(banText){
+         newWiths.unshift(banText);
+       }
+       for(let j=0; j<newWiths.length; j++){
+        let withsPos = labelIndx +length + j;
+        arr.splice(withsPos,0,getTextLabel(newWiths[j].id,newWiths[j].name,2));
+        res.saveText[withsPos] = newWiths[j].name;
+      }
+    }
+    }else{//有伴
+      if(exists.length > 0){
+        for(let i=0; i<exists.length; i++){
+          let pos = index + i;
+          arr.splice(pos,0,getTextLabel(exists[i].id,exists[i].name,1));
+          res.saveText[pos] = exists[i].name;
+        }
+      }
+      
+      if(withs.length>0){//有伴插到ikey前既可     
+        for(let j=0; j<withs.length; j++){
+          // let withsPos = labelIndx + j;
+          let withsPos = labelIndx +length + j;
+          arr.splice(withsPos,0,getTextLabel(withs[j].id,withs[j].name,2));
+          res.saveText[withsPos] = withs[j].name;
+        }
+      }
+    }
+  }
+
     
     res.data = arr;
     res.saveText = fullfillText(arr).saveText;
@@ -249,6 +298,7 @@ export const insertSearch = (state,action)=>{
     // res.saveText[inserIndx] = searchData;
     res.saveText = fullfillText(res.data).saveText;
     res.mainIds.push(id);
+    res.mainSymptIds.push(id);
     res.editClear = false;//主诉框编辑状态
   }else{
     // 替换
@@ -272,18 +322,39 @@ export const insertSearch = (state,action)=>{
     res.data[focusIndex].value = value;
     res.saveText[focusIndex] = value;*/
 
+    /*******************第一病程搜索结果也移植到现病史修改(2-18)********************/
+    // 位置判断-第一病程-主症状还是伴随 前一个标签存在 并且没有pos;
+    // 判断在伴的前面还是后面:前exist=1(主),后exist=2(伴)
+    let nText = {};
+    if(focusIndex==0){
+      nText = Object.assign({},text,{exist:1});
+    }else{
+      if(!data[focusIndex-1].pos){//第一病程
+        const preText = res.saveText.slice(0,focusIndex);
+        const ind = preText.indexOf("伴");
+        if(ind != -1){
+          nText = Object.assign({},text,{exist:2});
+        }else{
+          nText = Object.assign({},text,{exist:1});
+        }
+      }else{//第二及以上病程
+        nText = Object.assign({},text);
+      }
+    }
+    
+
     // 从新插入一个span标签
     const searchStr = res.searchStr;
     let innerText = span.current.innerText;
     const value = innerText.replace(searchStr,"");
     let index = innerText.indexOf(searchStr);
     if(index < 1){//前
-      res.data.splice(focusIndex,0,text);
+      res.data.splice(focusIndex,0,nText);
       res.saveText.splice(focusIndex,0,searchData);
       res.data[focusIndex+1].value = value;
       res.saveText[focusIndex+1] = value;
     }else{
-      res.data.splice(focusIndex+1,0,text);
+      res.data.splice(focusIndex+1,0,nText);
       res.saveText.splice(focusIndex+1,0,searchData);
       res.data[focusIndex].value = value;
     }