瀏覽代碼

搜索id去重

liucf 6 年之前
父節點
當前提交
6fe34e5550

+ 13 - 2
src/common/components/EditableSpan/index.jsx

@@ -130,17 +130,28 @@ class EditableSpan extends Component{
 
   }
   handleKeyup(e){
-     const {boxMark,handleKeydown,i,value} = this.props;
+     const {boxMark,handleKeydown,i,value,removeId} = this.props;
      const {preVal,index} = this.state;
     const ev = e||window.event;
     const target = ev.target||ev.srcElement;
     let innerVal = target.innerText;
     if(ev.keyCode==8){
+      // 主诉现病史去重:删除最后一个字的时候移除该数据(将name、id和value替换成空)并移除id
+      let pattern1 = new RegExp(/^\,|^\,|^\.|^\。|^\、|^\;|^\;|^\:|^\:/);
+      if(pattern1.test(preVal)){//以标点开头的情况-现病史
+        if(preVal.trim().length==2){
+          removeId && removeId({boxMark,i:index,text:""});
+        }
+      }else{
+        if(preVal.trim().length==1){
+          removeId && removeId({boxMark,i:index,text:""});
+        }
+      }
+      
       if(innerVal !==preVal){return false}
       let data = innerVal.trim();
       //判断是否为空、中英文:, 。、;,且不是第一位
       let pattern = new RegExp(/^\,?$|^\,?$|^\.?$|^\。?$|^\、?$|^\;?$|^\;?$|^\:?$|^\:?$\s/);
-      // if(i!==0 &&data==""||data==","||data==","||data==":"||data==":"||data=="."||data=="。"||data=="、"||data==";"||data==";"){
       if(index!==0 && pattern.test(data)){
         handleKeydown&&handleKeydown({boxMark,i:index,text:data});
         this.setState({

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

@@ -121,7 +121,8 @@ export const fullfillText = (arr,noPre=false,noEnd=false,ifEmpty=true)=>{
       }else{    //本身是或者前面是文本标签时,前面不添加文本标签
         newArr.push(it);
         tempText = value?it.labelPrefix+value+it.labelSuffix:'';
-        tempText = notText?tempText:it.value||it.name;
+        // tempText = notText?tempText:it.value||it.name;
+        tempText = notText?tempText:(it.value||it.value==""?it.value:it.name);
         saveText.push(tempText);
       }
       if(notText&&!noEnd&&i===arr.length-1){//最后一个非文本标签,后面添加一个文本标签

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

@@ -34,7 +34,7 @@ class CurrentIll extends Component{
 
   handleFocus(e){
     // 判断主诉是否为空
-    const {mainData,mainText,setData,moduleNum,mainIds,data,changeEditIll,editClear} = this.props;
+    const {mainData,mainText,setData,moduleNum,mainIds,data,changeEditIll,editClear,mainSymptIds} = this.props;
     const that = this;
     let mainFinallyText = filterDataArr(mainText);
     // if(mainData.length == 0 && !mainText[0]){
@@ -45,7 +45,8 @@ class CurrentIll extends Component{
         forbidInput:true
       })
     }else {
-      let useEmpty = mainData.length>0?false:true;
+      // let useEmpty = mainData.length>0?false:true;
+      let useEmpty = mainSymptIds.length>0?false:true;
       let num = moduleNum.num;//主诉使用了几个模板
       // if(editClear && data.length==0){//第一次聚焦去设置现病史的data
       if(data.length==0){//第一次聚焦去设置现病史的data

+ 3 - 2
src/containers/CurrentIll.js

@@ -12,7 +12,7 @@ import {getModule} from '@store/async-actions/fetchModules.js';
 import {didPushParamChange} from '@utils/tools.js';
 
 
-function mapStateToProps(state) {
+function mapStateToProps(state) {console.log(state)
   const {homePage} = state;
     return {
         data:state.currentIll.data,//主诉模板
@@ -28,7 +28,8 @@ function mapStateToProps(state) {
         mainData:state.mainSuit.data,//主诉使用的模板
         moduleNum:state.mainSuit.moduleNum,//主诉使用的模板
         type: state.typeConfig.typeConfig,
-        mainIds:state.mainSuit.mainIds,//主诉症状选中的id
+        mainIds:state.mainSuit.mainIds,//主诉症状选中的id(去重用)
+        mainSymptIds:state.mainSuit.mainSymptIds,//主诉症状选中的id(移植用)
         fillInfo: state.fillInfo,
         showArr:homePage.showDrop,
         totalHide: homePage.totalHide,

+ 14 - 2
src/containers/EditableSpan.js

@@ -1,9 +1,9 @@
 import {connect} from 'react-redux';
 import {EditableSpan} from '@commonComp';
 import {SETCHECKTEXT,SETSEARCHDATA,CHECK_FOCUS_INDEX,CHECKBODY_CLEAR,DEL_CHECKBODY} from '@types/checkBody';
-import {SET_SEARCH,MAIN_FOCUS_INDEX,CLEAR_SEARCH,SETMAINTEXT,DEL_MAIN} from '@types/mainSuit';
+import {SET_SEARCH,MAIN_FOCUS_INDEX,CLEAR_SEARCH,SETMAINTEXT,DEL_MAIN,REMOVE_MAIN_ID} from '@types/mainSuit';
 import {SETOTHERTEXT,SETOTHERSEARCHDATA,OTHER_FOCUS_INDEX,OTHERHIS_CLEAR,DEL_OTHERHIS} from '@types/otherHistory';
-import {SET_CURRENT_SEARCH,CURRENT_CLEAR,SETCURRENTTEXT,CURRENT_FOCUS_INDEX,DEL_CURRENT} from '@types/currentIll';
+import {SET_CURRENT_SEARCH,CURRENT_CLEAR,SETCURRENTTEXT,CURRENT_FOCUS_INDEX,DEL_CURRENT,REMOVE_CURR_ID} from '@types/currentIll';
 import {getSearch} from '@store/async-actions/fetchModules.js';
 import {billing} from '@store/async-actions/pushMessage';
 import {didPushParamChange} from '@utils/tools.js';
@@ -236,6 +236,18 @@ function mapDispatchToProps(dispatch,state) {
         type:ISREAD
       })
     },
+    removeId(obj){//删除时移除id
+      switch (+obj.boxMark){
+        case 1:
+          dispatch({type:REMOVE_MAIN_ID,index:obj.i,text:obj.text});
+          break;
+        case 2:
+          dispatch({type:REMOVE_CURR_ID,index:obj.i,text:obj.text});
+          break;
+        default:
+          break;
+      }
+    }
   }
 }
 

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

@@ -489,6 +489,7 @@ export function insertLabelData(state,action){
     span.current.innerText = value;
     let resData = JSON.parse(JSON.stringify(res.data));
     resData[focusIndex].value = value;
+    // resData[focusIndex].id = id;
     resData.splice(focusIndex+1,0,...(data.questionMapping.filter((item)=>{
                               return item.symptomType==0||item.symptomType==2;
                             })));
@@ -554,4 +555,21 @@ export function backspaceText(state,action){
   res.saveText = fullfillText(data).saveText;
   res.update = Math.random();
   return res;
+}
+
+//删除后移除id
+export function removeId(state,action){
+  let res = Object.assign({},state);
+  const {index,text} = action;
+  const data = res.data;
+  const id = data[index].id;
+  let ids = res.symptomIds;
+  if(ids.includes(id)){
+    ids.splice(ids.indexOf(id),1);
+  }
+  data[index].id = "";
+  data[index].name = text;
+  data[index].value = text;
+  res.update = Math.random();
+  return res;
 }

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

@@ -110,6 +110,7 @@ export const insertMain = (state,action) => {
   // res.saveText[inserIndx] = text.name;
   res.saveText = fullfillText(res.data).saveText;
   res.mainIds.push(id);
+  res.mainSymptIds.push(id);
   res.editClear = false;//主诉框编辑状态
   res.update=Math.random();
   return res;
@@ -138,6 +139,7 @@ export const confirm = (state,action) =>{
     let existsId = getIds(exists);
     let withsId = getIds(withs);
     res.mainIds = res.mainIds?res.mainIds.concat(existsId,withsId):[];
+    res.mainSymptIds = res.mainSymptIds.concat(existsId,withsId);
   }
 
   let text = saveText.slice(0,labelIndx);
@@ -268,6 +270,7 @@ export const insertSearch = (state,action)=>{
     // let value = innerText + searchData;
     span.current.innerText = value;
     res.data[focusIndex].value = value;
+    // res.data[focusIndex].id = id;
     res.saveText[focusIndex] = value;
     res.mainIds.push(id);
   }
@@ -422,7 +425,8 @@ export const clearMainSuit = (state,action)=>{//回读和清除
   res.saveText = action.saveText;
   // res.saveText = fullfillText(action.data).saveText;//解决删除data里的值保存,回读后页面上有内容saveText里没有的情况
   res.selecteds = action.selecteds?action.selecteds:[];
-  res.mainIds = action.mainIds
+  res.mainIds = action.mainIds;
+  res.mainSymptIds = action.mainSymptIds;
   if(action.editClear){
     res.editClear = action.editClear;
   }
@@ -502,4 +506,25 @@ export function backspaceText(state,action){
   res.saveText = fullfillText(data).saveText;
   res.update = Math.random();
   return res;
-}
+}
+
+//删除后移除id
+export function removeId(state,action){
+  let res = Object.assign({},state);
+  const {index,text} = action;
+  const data = res.data;
+  const id = data[index].id;
+  let ids = res.mainIds;
+  let mainIds = res.mainSymptIds;
+  if(ids.includes(id)){
+    ids.splice(ids.indexOf(id),1);
+  }
+  if(mainIds.includes(id)){
+    mainIds.splice(mainIds.indexOf(id),1);
+  }
+  data[index].id = "";
+  data[index].name = text;
+  data[index].value = text;
+  res.update = Math.random();
+  return res;
+}

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

@@ -1,9 +1,9 @@
 // 现病史
 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} from '../types/currentIll';
+  SET_CURRENT_SEARCH,SETCURRENTTEXT,CURRENT_FOCUS_INDEX,SELECT_SEARCHDATA,CLEAR_CURRENT_EDIT,CURRENTADDLABELITEM,SETCURRENTINPUT,DEL_CURRENT,CURRENT_TEXT_LABEL_NUMBER,REMOVE_CURR_ID} from '../types/currentIll';
 import {confirm,insertProcess,setData,setCheckBox,setRadioValue,setNumberValue,changeLabelVal,clearCurrentIll,
-  setTextModeValue,setModule,bigDataSymptom,setCheckText,insertLabelData,clearCurrentEdit,addLabelItem,setInputLabel,backspaceText,changeNumLabelVal} from '../actions/currentIll';
+  setTextModeValue,setModule,bigDataSymptom,setCheckText,insertLabelData,clearCurrentEdit,addLabelItem,setInputLabel,backspaceText,changeNumLabelVal,removeId} from '../actions/currentIll';
 
 const initState = {
   moduleData:[],
@@ -69,6 +69,8 @@ export default function(state=initState,action){
       return setInputLabel(state,action);
     case DEL_CURRENT:
       return backspaceText(state,action);
+    case REMOVE_CURR_ID:
+      return removeId(state,action);
     default:
       return state;
   }

+ 6 - 3
src/store/reducers/mainSuit.js

@@ -1,9 +1,9 @@
 import {COMM_SYMPTOMS,CLEAR_COMSYMPTOMS,SHOW_TAIL,INSERT_MAIN,
   SET_SEARCH,CLEAR_SEARCH,GET_BIGDATAPUSH,SET_MAINSUIT,MIX_CONFIRM,NUMBER_SELECT,
   RADIO_SELECT,COMM_CONFIRM,CHANGE_LABELVAL,SAVE_FREE,CLEAR_MAIN_SUIT,SET_DATA,
-  INSERT_SEARCH,MAIN_FOCUS_INDEX,SETTEXTMODEVALUE,SETMAINTEXT,MAINADDLABELITEM,SETMAININPUT,DEL_MAIN,CHANGE_LABELVAL_NUMBER} from '../types/mainSuit'
+  INSERT_SEARCH,MAIN_FOCUS_INDEX,SETTEXTMODEVALUE,SETMAINTEXT,MAINADDLABELITEM,SETMAININPUT,DEL_MAIN,CHANGE_LABELVAL_NUMBER,REMOVE_MAIN_ID} from '../types/mainSuit'
 import {getCommSymptoms,handleTailClick,insertMain,setSearch,getBigSymptom,setMainMoudle,confirm,
-  setNumberValue,setRadioValue,commConfirm,changeLabelVal,saveFreeVal,clearMainSuit,insertSearch,setTextModeValue,setCheckText,changeEditClear,addLabelItem,setInputLabel,backspaceText,changeNumLabelVal} from '../actions/mainSuit'
+  setNumberValue,setRadioValue,commConfirm,changeLabelVal,saveFreeVal,clearMainSuit,insertSearch,setTextModeValue,setCheckText,changeEditClear,addLabelItem,setInputLabel,backspaceText,changeNumLabelVal,removeId} from '../actions/mainSuit'
 
 
 const initState = {
@@ -18,8 +18,9 @@ const initState = {
   selecteds:[],
   moduleNum:{num:0},//点了几次添加病情变化
   focusIndex:'',
-  mainIds:[], //选中的主症状和伴随的id
+  mainIds:[], //选中的主症状和伴随的id(搜索去重)
   editClear:true,
+  mainSymptIds:[]//选中的主症状和伴随的id(移植到现病史)
 }
 
 export default function(state=initState,action){
@@ -82,6 +83,8 @@ export default function(state=initState,action){
       return setInputLabel(state,action);
     case DEL_MAIN:
       return backspaceText(state,action);
+    case REMOVE_MAIN_ID:
+      return removeId(state,action);
     default:
       return state;
   }

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

@@ -22,4 +22,5 @@ export const CURRENTADDLABELITEM = 'current_add_label_item';    //带加号的
 export const SETCURRENTINPUT = 'SET_CURRENT_ILL_INPUT_LABEL';     //文本输入标签存值
 export const DEL_CURRENT = 'DEL_CURRENT';     //backspace删除
 export const CURRENT_TEXT_LABEL_NUMBER = 'CURRENT_TEXT_LABEL_NUMBER';     //数字键盘输入
+export const REMOVE_CURR_ID = 'REMOVE_CURR_ID';     //删除后移除id
 

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

@@ -23,3 +23,4 @@ export const MAINADDLABELITEM = 'MAIN_ADD_LABEL_ITEM';      //带加号的标签
 export const SETMAININPUT = 'SET_MAIN_INPUT_LABEL';     //文本输入标签存值
 export const DEL_MAIN = 'DEL_MAIN';     //删除标签
 export const CHANGE_LABELVAL_NUMBER = 'CHANGE_LABELVAL_NUMBER';     //数字键盘输入存值
+export const REMOVE_MAIN_ID = 'REMOVE_MAIN_ID';     //移除id

+ 5 - 2
src/utils/tools.js

@@ -177,6 +177,7 @@ const getAllDataList =(baseList) =>{           //获取所有模块结构化的
     jsonData.checkBodySelecteds = baseList.checkBody.selecteds;      //主诉选中状态保存
     jsonData.addItems = baseList.homePage.addItems||{};
     jsonData.mainsuitIds = baseList.mainSuit.mainIds;      //主诉去重
+    jsonData.mainSymptIds = baseList.mainSuit.mainSymptIds;      //主诉去重
     jsonData.currentIds = baseList.currentIll.symptomIds;      //现病史去重
     // console.log(jsonData,'结构化数据获取')
     return jsonData;
@@ -232,7 +233,7 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
         type:ISREAD
       });
     if(action == 'clear'){     //清空
-        store.dispatch({type: CLEAR_MAIN_SUIT,data:[],saveText:[],selecteds:[],editClear:true,mainIds:[]});
+        store.dispatch({type: CLEAR_MAIN_SUIT,data:[],saveText:[],selecteds:[],editClear:true,mainIds:[],mainSymptIds:[]});
         store.dispatch({type: CLEAR_CURRENT_ILL,data:[],saveText:[],selecteds:[],editClear:true,symptomIds:[]});
         store.dispatch({type: CLEAROTHERHISTORY,data:[],saveText:[],selecteds:[],editClear:true});
         store.dispatch({type: CLEARCHECKBODY,data:[],isEmpty:true,saveText:[],selecteds:[]});
@@ -265,6 +266,7 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
                     selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[],
                     saveText:JSON.parse(dataJsonStr.chief),
                     mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[],
+                    mainSymptIds:dataJson.mainSymptIds?dataJson.mainSymptIds:[],
                 });
                 store.dispatch({
                     type: CLEAR_CURRENT_ILL,
@@ -317,7 +319,8 @@ const pushAllDataList =(whichSign,action,reData,type) =>{           //回读清
                     data:dataJson.chief,
                     selecteds:dataJson.mainSuitSelecteds?dataJson.mainSuitSelecteds:[],
                     saveText:dataJsonStr[0].content ? JSON.parse(dataJsonStr[0].content) :[],
-                    mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[]
+                    mainIds:dataJson.mainsuitIds?dataJson.mainsuitIds:[],
+                    mainSymptIds:dataJson.mainSymptIds?dataJson.mainSymptIds:[],
                 });
                 store.dispatch({
                     type: CLEAR_CURRENT_ILL,