Browse Source

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

# Conflicts:
#	src/containers/CurrentIll.js
#	src/store/actions/mainSuit.js
zhouna 6 năm trước cách đây
mục cha
commit
d56b647e2f

+ 27 - 3
src/common/components/EditableSpan/index.jsx

@@ -35,6 +35,7 @@ class EditableSpan extends Component{
     this.handleBlur = this.handleBlur.bind(this);
     this.handleKeydown = this.handleKeydown.bind(this);
     this.handleKeyup = this.handleKeyup.bind(this);
+    this.moveEnd = this.moveEnd.bind(this);
   }
   handleFocus(e){
     e.stopPropagation();
@@ -111,6 +112,27 @@ class EditableSpan extends Component{
     });
   }
 
+  moveEnd(obj) {
+    obj.focus();
+    if($.support.msie)
+    {
+        var range = document.selection.createRange();
+        this.last = range;
+        range.moveToElementText(obj);
+        range.select();
+        document.selection.empty(); //取消选中
+    }
+    else
+    {
+        var range = document.createRange();
+        range.selectNodeContents(obj);
+        range.collapse(false);
+        var sel = window.getSelection();
+        sel.removeAllRanges();
+        sel.addRange(range);
+    }
+  }
+
   handleKeydown(e){
     const ev = e||window.event;
     const target = ev.target||ev.srcElement;
@@ -130,8 +152,8 @@ class EditableSpan extends Component{
 
   }
   handleKeyup(e){
-     const {boxMark,handleKeydown,i,value,removeId} = this.props;
-     const {preVal,index} = this.state;
+    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;
@@ -153,9 +175,11 @@ class EditableSpan extends Component{
       //判断是否为空、中英文:, 。、;,且不是第一位
       let pattern = new RegExp(/^\,?$|^\,?$|^\.?$|^\。?$|^\、?$|^\;?$|^\;?$|^\:?$|^\:?$\s/);
       if(index!==0 && pattern.test(data)){
+        let preObj = $(this.$span.current).prev();
+        let obj = preObj[0].nodeName=="DIV"?preObj.prev():preObj;
         handleKeydown&&handleKeydown({boxMark,i:index,text:data});
+        this.moveEnd(obj[0]);  
         this.setState({
-          // index:index-1 //连续往前删除,体验不佳
           index: null
         })
       }

+ 11 - 8
src/containers/CurrentIll.js

@@ -103,14 +103,17 @@ function mapDispatchToProps(dispatch) {
             const {id,name,index,span} = param;
             getModule(id).then((res)=>{
                 if(res.data.code=='0'){
-                dispatch({
-                    type:SELECT_SEARCHDATA,
-                    index,
-                    name,
-                    data: res.data.data,
-                    span,
-                    isReplace:false
-                })
+                  dispatch({
+                      type:SELECT_SEARCHDATA,
+                      index,
+                      name,
+                      data: res.data.data,
+                      span,
+                      isReplace:false
+                  })
+                  dispatch({
+                    type:ISREAD
+                  })
                 }
             });
         },

+ 3 - 0
src/containers/MainSuit.js

@@ -115,6 +115,9 @@ function mapDispatchToProps(dispatch) {
           info:obj.item,
           span:obj.span
         })
+        dispatch({
+          type:ISREAD
+        })
       },
       clearSearch:()=>{
         dispatch({

+ 32 - 17
src/store/actions/currentIll.js

@@ -470,11 +470,12 @@ export function setCheckText(state,action) {
 
 //搜索 插入标签数据
 export function insertLabelData(state,action){
-  let res = Object.assign({},state);//console.log(789,res,action);
-  const text = Object.assign(JSON.parse(config.textLabel),{name:action.name});
+  let res = Object.assign({},state); 
   const {index,data,isReplace,span}=action;
   let id = data.id;
+  let searchData = action.name;
   res.symptomIds.push(id);
+  const text = Object.assign(JSON.parse(config.textLabel),{name:searchData},{id:id});
   let focusIndex = res.focusIndex;
   
   if(isReplace){
@@ -486,26 +487,36 @@ export function insertLabelData(state,action){
                               return item.symptomType==0||item.symptomType==2;
                             })));
     res.data = fullfillText(resData).newArr;
-    res.saveText[focusIndex] = action.name;
+    res.saveText[focusIndex] = searchData;
   }else{
+    let resData;
     // res.data.splice(index,0,data);
     const searchStr = res.searchStr;
     let innerText = span.current.innerText;
     let strIndex = innerText.indexOf(searchStr);
-    let value;
-    if(strIndex <= 1){//前
-      value = innerText.replace(searchStr,action.name);
+    const value = innerText.replace(searchStr,"");
+    // let value;
+    // if(strIndex <= 1){//前
+    if(strIndex < 1){//前
+      res.data.splice(focusIndex,0,text);
+      res.saveText.splice(focusIndex,0,searchData);
+      res.data[focusIndex+1].value = value;
+      res.saveText[focusIndex+1] = value;
+      resData = JSON.parse(JSON.stringify(res.data));
+      resData.splice(focusIndex+1,0,...(data.questionMapping.filter((item)=>{
+                              return item.symptomType==0||item.symptomType==2;
+                            })));
     }else{
-      let temp = innerText.substring(0,innerText.lastIndexOf(searchStr));
-      value = temp + action.name;
-    }
-    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)=>{
+      res.data.splice(focusIndex+1,0,text);
+      res.saveText.splice(focusIndex+1,0,searchData);
+      res.data[focusIndex].value = value;
+      resData = JSON.parse(JSON.stringify(res.data));
+      // +3是因为插入一个文本标签加一个符号标签  
+      resData.splice(focusIndex+3,0,...(data.questionMapping.filter((item)=>{
                               return item.symptomType==0||item.symptomType==2;
                             })));
+    }
+    span.current.innerText = value;
     res.data = fullfillText(resData).newArr;
     res.saveText = fullfillText(resData).saveText;
   }
@@ -559,10 +570,14 @@ export function backspaceText(state,action){
   let res = Object.assign({},state);
   const {delIndex,text} = action;
   const data = res.data;
-  if(data[delIndex-1].tagType==8 ||data[delIndex-1].flag&&data[delIndex-1].flag==3){
-    // 前一个是文本标签或者子模板,只改变值
+  // if(data[delIndex-1].tagType==8 ||data[delIndex-1].flag&&data[delIndex-1].flag==3){
+  // 前一个是文本标签或者子模板,只改变值
+  if(data[delIndex-1].flag&&data[delIndex-1].flag==3){//子模板不删  
     // data[delIndex].value = text;
-  }else{
+  }else if(data[delIndex-1].tagType==8){
+    data.splice(delIndex,1);
+  }
+  else{
     data.splice(delIndex-1,2);
   }
   res.saveText = fullfillText(data).saveText;

+ 25 - 5
src/store/actions/mainSuit.js

@@ -257,7 +257,7 @@ export const insertSearch = (state,action)=>{
     res.saveText[focusIndex] = searchData;
     res.mainIds.push(id);*/
     // 追加--前or后?searchStr
-    const searchStr = res.searchStr;
+    /*const searchStr = res.searchStr;
     let innerText = span.current.innerText;
     let index = innerText.indexOf(searchStr);
     let value;
@@ -270,7 +270,24 @@ export const insertSearch = (state,action)=>{
     // let value = innerText + searchData;
     span.current.innerText = value;
     res.data[focusIndex].value = value;
-    res.saveText[focusIndex] = value;
+    res.saveText[focusIndex] = value;*/
+
+    // 从新插入一个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.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.saveText.splice(focusIndex+1,0,searchData);
+      res.data[focusIndex].value = value;
+    }
+    span.current.innerText = value;
     res.mainIds.push(id);
   }
   // console.log(456,res,action);
@@ -407,7 +424,6 @@ export const changeNumLabelVal = (state,action)=>{
   return res;
 }
 
-
 // 保存自由输入文本--无模板
 export const saveFreeVal = (state,action)=>{
   const res = Object.assign({},state);
@@ -502,9 +518,13 @@ export function backspaceText(state,action){
   let res = Object.assign({},state);
   const {delIndex} = action;
   const data = res.data;
-  if(data[delIndex-1].tagType==8 ||data[delIndex-1].flag&&data[delIndex-1].flag==3){
+  if(data[delIndex-1].flag&&data[delIndex-1].flag==3){
+  // if(data[delIndex-1].tagType==8 ||data[delIndex-1].flag&&data[delIndex-1].flag==3){
     // 前一个是文本标签或者子模板 不做处理
-  }else{
+  }else if(data[delIndex-1].tagType==8){
+    data.splice(delIndex,1);
+  }
+  else{
     data.splice(delIndex-1,2);
   }
   res.saveText = fullfillText(data).saveText;