فهرست منبع

Merge remote-tracking branch 'origin/dev5.3.3' into dev5.3.3

zhouna 5 سال پیش
والد
کامیت
35236b76c3

+ 86 - 17
src/common/components/EditableSpan/index.jsx

@@ -17,6 +17,7 @@ import $ from 'jquery';
  * * text:标签内文字
  *
  * ****/
+let indexNum = '';
 
 class EditableSpan extends Component{
   constructor(props){
@@ -50,6 +51,7 @@ class EditableSpan extends Component{
         that.$span.current.innerHTML = txt;
       });
     })
+    
     const {mainSaveText,full,setFocusIndex,i,boxMark,value}= this.props;
     let mainText = filterDataArr(mainSaveText);//主诉字数
     if(+boxMark==3||+boxMark==4){         //主诉为空,且第一次聚焦其他史查体时提示且不可输入
@@ -134,17 +136,27 @@ class EditableSpan extends Component{
     $(this.$span.current).off("paste");
   }
 
-  moveEnd(obj) {
+  moveEnd(obj,flg) {
     if(window.getSelection){//ie11 10 9 ff safari
-      obj.focus(); //解决ff不获取焦点无法定位问题
-      var range = window.getSelection();//创建range
-      range.selectAllChildren(obj);//range 选择obj下所有子内容
-      range.collapseToEnd();//光标移至最后
+      setTimeout(() => {
+        obj.focus(); //解决ff不获取焦点无法定位问题
+        var range = window.getSelection();//创建range
+        range.selectAllChildren(obj);//range 选择obj下所有子内容
+        if(flg){
+          range.collapseToStart();//光标移至开头
+        }else{
+          range.collapseToEnd();//光标移至最后
+        }
+      }, 0);
     }
     else if (document.selection) {//ie10 9 8 7 6 5
       var range = document.selection.createRange();//创建选择对象
       range.moveToElementText(obj);//range定位到obj
-      range.collapse(false);//光标移至最后
+      if(flg){
+        range.collapse(true);//光标移至开头
+      }else{
+        range.collapse(false);//光标移至最后
+      }
       range.select();
     }
   }
@@ -163,32 +175,35 @@ class EditableSpan extends Component{
         preVal:innerVal
       })
     }
+
     let range = window.getSelection();
     let textIndex = range.focusOffset;
-    let textLength = range.anchorNode.length;
-    if(ev.keyCode==37&& i!=0){//向左
+    let textLength = range.anchorNode&&range.anchorNode.length;
+    let preObj = $(this.$span.current).prev();
+    if(ev.keyCode==37){//向左
       let preObj = $(this.$span.current).prev();
       let obj = preObj[0]&&preObj[0].nodeName=="DIV"?preObj.prev():preObj;
       if(textIndex == 0){
         preventDefault(ev);
         if(obj){
-          this.moveEnd(obj[0]);
+          obj[0]&&this.moveEnd(obj[0]);
         }
       }
     }
     if(ev.keyCode==39){//向右
+      let curObj = $(this.$span.current)
       let nextObj = $(this.$span.current).next();
       let obj = nextObj[0]&&nextObj[0].nodeName=="DIV"?nextObj.next():nextObj;
       if(textIndex == textLength || textLength==undefined || (textIndex == 0 && textLength==1)){
         preventDefault(ev);
         if(obj){
-          obj.focus();
+          obj[0]&&obj.focus();
         }
       }
     }
   }
   handleKeyup(e){
-    const {boxMark,handleKeydown,removeId,handleClear,removeSpan} = this.props;
+    const {boxMark,handleKeydown,removeId,handleClear,removeSpan,handleChange} = this.props;
     const {preVal,index} = this.state;
     const ev = e||window.event;
     const target = ev.target||ev.srcElement;
@@ -200,13 +215,24 @@ class EditableSpan extends Component{
     if(ev.keyCode==46){//delete
       //判断nexObj
       // let nextObj = $(this.$span.current).next();
+      // ||textIndex ==innerVal.length&&preObj[0].nodeName=="DIV"
+      let range = window.getSelection();
+      let textIndex = range.focusOffset;
+
       let nextObj = $(this.$span.current);
+      let nexObj = $(this.$span.current).next();
+      let nexObjN = nexObj.next();
+      let preObj = $(this.$span.current).prev();
+      let nexVal = nexObj[0]&&nexObj[0].innerText || nexObj[0]&&nexObj[0].innerHTML; 
       if(preVal.trim().length==1&& !innerVal){
         removeId && removeId({boxMark,i:index,text:"",flag:'del'});
         handleClear && handleClear({boxMark});//删除最后一个字时清空搜索结果,避免现病史搜索框不立即消失的情况
         //如果后一个不是标签,则光标移到最前
         if(nextObj && nextObj[0].nodeName !=="DIV"){
-          nextObj.focus();
+          // nextObj.focus();
+          this.moveEnd(nextObj[0],1)
+        }else{
+          this.moveEnd(preObj[0])
         }
       }
       //action里往后删除
@@ -214,14 +240,32 @@ class EditableSpan extends Component{
         let data = innerVal.trim();
         if(nextObj && !config.punctuationReg.test(data) || data=='<br>'){
           handleKeydown&&handleKeydown({boxMark,i:index,text:data,flag:'del'});
-          // nextObj.focus();  
           if(nextObj && nextObj[0] && nextObj[0].nodeName !=="DIV"){
             // IE浏览器focus光标在最后,其他浏览器在最前
-            nextObj.focus();
+            // nextObj.focus();
+            if(boxMark==2&&this.props.data[index+1]&&this.props.data[index+1].flag==3){
+              this.moveEnd(nexObjN[0],1);
+            }else{
+              this.moveEnd(nextObj[0],1);
+            }
           }
           /*this.setState({
             index: null
           })*/
+        }else if(indexNum ==innerVal.length&&nexObj[0]&&nexObj[0].nodeName=="DIV"){//span最后一位后面为div标签
+          handleKeydown&&handleKeydown({boxMark,i:index+1,text:data,flag:'del'});
+          this.moveEnd(nextObj[0]);
+        }else if(nexObj[0]&&nexObj[0].nodeName=="SPAN"){
+          if(nexVal.length <= 1){//为空或者一个字delete时候
+            removeId && removeId({boxMark,i:index+1,text:"",flag:'del'});
+            handleClear && handleClear({boxMark});
+            this.moveEnd(nexObj[0])
+          }else if(nexVal.length > 1){
+            let tmpVal = nexVal.substr(1,data.length)
+            handleChange&&handleChange({text1:tmpVal,boxMark,i:index+1});
+            nexObj.html(tmpVal)
+            this.moveEnd(nexObj[0],1)
+          }
         }
       }
     }
@@ -230,6 +274,7 @@ class EditableSpan extends Component{
       // 主诉现病史去重:删除最后一个字的时候移除该数据(将name、id和value替换成空)并移除id
       // 前面是标签,内容为空时再删一次才移除标签;前面是文本,则直接移除;
       let preObj = $(this.$span.current).prev();
+      let curObj = $(this.$span.current);
       if(index!==0&&preVal.trim().length==1&& !innerVal){
         removeId && removeId({boxMark,i:index,text:""});
         handleClear && handleClear({boxMark});//删除最后一个字时清空搜索结果,避免现病史搜索框不立即消失的情况
@@ -238,8 +283,10 @@ class EditableSpan extends Component{
         }
       }
 
+      let range = window.getSelection();
+      let textIndex = range.focusOffset;
       if(innerVal !== preVal){
-
+        
       }else{
         // 中英文数字和下划线--单独删除标签
         /*const reg = new RegExp("([\u4E00-\uFA29]|[\uE7C7-\uE7F3]|[a-zA-Z0-9_])");
@@ -256,7 +303,7 @@ class EditableSpan extends Component{
         // let pattern = new RegExp(/^\,?$|^\,?$|^\.?$|^\。?$|^\、?$|^\;?$|^\;?$|^\:?$|^\:?$|\s/);
         // if(index!==0 && pattern.test(data)){
         // 后半段是处理IE
-        if(index!==0 && !config.punctuationReg.test(data) || index!==0 && data=='<br>'){
+        if(index!==0 && !config.punctuationReg.test(data) || index!==0 && data=='<br>'||indexNum == 0&&preObj[0]&&preObj[0].nodeName=="DIV"){
           // let preObj = $(this.$span.current).prev();
           let obj = preObj[0].nodeName=="DIV"?preObj.prev():preObj;
           handleKeydown&&handleKeydown({boxMark,i:index,text:data,flag:'backsp'});
@@ -264,6 +311,26 @@ class EditableSpan extends Component{
           this.setState({
             index: null
           })
+        }else if(textIndex == 0&&preObj[0]&&preObj[0].nodeName=="SPAN"){
+          let data = preObj[0].innerText || preObj[0].innerHTML;
+          if(data.length == 1){//span只有一个文本,删除后移除检索
+            removeId && removeId({boxMark,i:index-1,text:""});
+            handleClear && handleClear({boxMark});
+            if(preObj[0].nodeName !=="DIV"){
+              if(boxMark==2){
+                this.moveEnd(preObj[0],1);
+              }else{
+                this.moveEnd(preObj[0]);
+              }
+            }
+          }else{
+            let tmpVal = data.substr(0,data.length-1)
+            handleChange&&handleChange({text1:tmpVal,boxMark,i:index});
+            preObj.html(tmpVal)
+            if(preObj[0].nodeName !=="DIV"){
+              this.moveEnd(preObj[0]);
+            }
+          }
         }
       }
       // 主诉使用模板删除最后一个空span时移除
@@ -271,7 +338,6 @@ class EditableSpan extends Component{
         removeSpan();
       }
     }
-
   }
   componentWillReceiveProps(next){
     const isRead = this.props.isRead;
@@ -281,6 +347,9 @@ class EditableSpan extends Component{
   }
   handleClick(e){
     $(this.$span.current).attr({"contentEditable":true}).focus()
+    let range = window.getSelection();
+    let textIndex = range.focusOffset;
+    indexNum = textIndex
   }
   componentDidMount(){
     const {value} = this.props;

+ 1 - 1
src/components/AddAssistCheck/Textarea/index.jsx

@@ -18,7 +18,7 @@ class Textarea extends Component {
   }
   handleInput(e){
     const {handleChangeAssistValue,idx,handlePush} = this.props;
-    const text = (e.target.innerHTML || e.target.innerText);
+    const text = (e.target.innerText || e.target.innerHTML||e.target.textContent);
     $(e.target).find('img').remove();
     this.context.scrollArea.scrollBottom();       //避免滚动条上移不见
     // e.target.innerHTML = e.target.textContent

+ 3 - 28
src/components/AddInspect/index.jsx

@@ -2,7 +2,7 @@ import React from 'react';
 import { SearchOption, InspectCommon, Calendar, Notify, ConfirmModal, Add, DelToast } from '@commonComp';
 import SlideExcel from './SlideExcel';
 import SlideSelect from './SlideSelect';
-import { deepClone, getPageCoordinate, getStatusImg ,getCurrentDate,setPosition,getCalendarDate} from '@utils/tools';
+import { deepClone, getPageCoordinate, getStatusImg,getDomUpDown ,getCurrentDate,setPosition,getCalendarDate} from '@utils/tools';
 import styles from './index.less';
 import ScrollArea from 'react-scrollbar';
 import store from '@store';
@@ -316,33 +316,8 @@ class Inspect extends React.Component {
   }
   showDetails(val) {
     let min = val.minValue, max = val.maxValue, value = val.value, dom = '';
-    if(min == null&&max == null||min == undefined&&max == undefined||min == ''&&max == ''){
-      dom = getStatusImg(0, value, 1)
-    }else if (!isNaN(min) && !isNaN(max)) {//有最大值最小值
-      if (isNaN(value)) {//输入的不是数据
-        dom = getStatusImg(1, value, 1)
-      } else if (value <= min) {//下降
-        dom = getStatusImg(3, value, 1)
-      } else if (value >= max) {//上升
-        dom = getStatusImg(2, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else if (isNaN(min) && !isNaN(max)) {//有最大值无最小值
-      if (value >= max) {//上升
-        dom = getStatusImg(2, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else if (!isNaN(min) && isNaN(max)) {//有最小值无最大值
-      if (value <= min) {//下降
-        dom = getStatusImg(3, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else {//无最大最小值
-      dom = getStatusImg(1, value, 1)
-    }
+    dom = getDomUpDown(min,max,value)
+    
     if (val.questionDetailList.length > 0) {
       return val.questionDetailList.map((item) => {
         if (val.value == item.name) {

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

@@ -1,6 +1,6 @@
 import React, { Component } from "react";
 import style from "./index.less";
-import { getStatusImg, filterDataArr, filterOtherDataArr,timestampToTime } from '@utils/tools';
+import { getStatusImg,getDomUpDown, filterDataArr, filterOtherDataArr,timestampToTime } from '@utils/tools';
 import Notify from '@commonComp/Notify';
 import Information from '../Information';
 import PreviewInspect from './Inspect';
@@ -52,33 +52,7 @@ class PreviewBody extends Component {
   }
   showDetails(val) {
     let min = val.minValue, max = val.maxValue, value = val.value, dom = '';
-    if(min == null&&max == null||min == undefined&&max == undefined||min == ''&&max == ''){
-      dom = getStatusImg(0, value, 1)
-    }else if (!isNaN(min) && !isNaN(max)) {//有最大值最小值
-      if (isNaN(value)) {//输入的不是数据
-        dom = getStatusImg(1, value, 1)
-      } else if (value <= min) {//下降
-        dom = getStatusImg(3, value, 1)
-      } else if (value >= max) {//上升
-        dom = getStatusImg(2, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else if (isNaN(min) && !isNaN(max)) {//有最大值无最小值
-      if (value >= max) {//上升
-        dom = getStatusImg(2, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else if (!isNaN(min) && isNaN(max)) {//有最小值无最大值
-      if (value <= min) {//下降
-        dom = getStatusImg(3, value, 1)
-      } else {//正常
-        dom = getStatusImg(0, value, 1)
-      }
-    } else {//无最大最小值
-      dom = getStatusImg(1, value, 1)
-    }
+    dom = getDomUpDown(min,max,value)
     if (val.questionDetailList.length > 0) {
       return val.questionDetailList.map((item) => {
         if (val.value == item.name) {

+ 3 - 2
src/containers/EditableSpan.js

@@ -14,6 +14,7 @@ function mapStateToProps(state){//console.log(state)
   return {
     mainSaveText:state.mainSuit.saveText,
     isRead:state.homePage.isRead,
+    data:state.currentIll.data
   }
 }
 
@@ -228,10 +229,10 @@ function mapDispatchToProps(dispatch,state) {
           dispatch({type:DEL_CURRENT,delIndex:obj.i,text:obj.text,flag:obj.flag});
           break;
         case 3:
-          dispatch({type:DEL_OTHERHIS,delIndex:obj.i,flag:obj.flag});
+          dispatch({type:DEL_OTHERHIS,delIndex:obj.i,flag:obj.flag,text:obj.text});
           break;
         case 4:
-          dispatch({type:DEL_CHECKBODY,delIndex:obj.i,flag:obj.flag});
+          dispatch({type:DEL_CHECKBODY,delIndex:obj.i,flag:obj.flag,text:obj.text});
           break;
         default:
           break;

+ 3 - 3
src/store/actions/checkBody.js

@@ -246,9 +246,9 @@ export function backspaceText(state,action){
     }
     else{
       handleLocalDelTag(4,delIndex-1,data[delIndex-1]);
-      data.splice(delIndex-1,2);
-      res.selecteds.splice(delIndex-1,2); 
-      res.saveText.splice(delIndex-1,2);
+      data.splice(delIndex-1,action.text.length>0?1:2);
+      res.selecteds.splice(delIndex-1,action.text.length>0?1:2); 
+      res.saveText.splice(delIndex-1,action.text.length>0?1:2);
     }
   }else if(flag == 'del'){
     if(data[delIndex+1] && data[delIndex+1].flag&&data[delIndex+1].flag==3){//子模板不删  

+ 2 - 2
src/store/actions/currentIll.js

@@ -659,8 +659,8 @@ export function backspaceText(state,action){
     }
     else{
       handleLocalDelTag(2,delIndex-1,data[delIndex-1]);
-      data.splice(delIndex-1,2);
-      res.selecteds.splice(delIndex-1,2); 
+      data.splice(delIndex-1,action.text.length>0?1:2);
+      res.selecteds.splice(delIndex-1,action.text.length>0?1:2); 
       res.saveText.splice(delIndex-1,2);
     }
   }else if(flag == 'del'){

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

@@ -689,18 +689,21 @@ export function backspaceText(state,action){
     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 if(data[delIndex-1].tagType==8){
+    }else if(data[delIndex-1]&&data[delIndex-1].tagType==8){
       data.splice(delIndex,1);
       res.saveText.splice(delIndex,1);
     }
     else{
       handleLocalDelTag(1,delIndex-1,data[delIndex-1]);
-      data.splice(delIndex-1,2);
-      res.saveText.splice(delIndex-1,2);
+      // data.splice(delIndex-1,2);
+      data.splice(delIndex-1,action.text.length>0?1:2);//data不为空不能清除
+      res.saveText.splice(delIndex-1,action.text.length>0?1:2);
     }
   }else if(flag == 'del'){
     if(data[delIndex+1] && data[delIndex+1].flag&&data[delIndex+1].flag==3){
       // 后一个是文本标签或者子模板 不做处理
+      // data.splice(delIndex,1);
+      // res.saveText.splice(delIndex,1);
     }else if(data[delIndex+1] && data[delIndex+1].tagType==8){
       data.splice(delIndex,1);
       res.saveText.splice(delIndex,1);
@@ -711,6 +714,7 @@ export function backspaceText(state,action){
     else{
       handleLocalDelTag(1,delIndex,data[delIndex+1]);
       data.splice(delIndex,2);
+      // data.splice(delIndex,action.text.length>0?1:2);
       res.saveText.splice(delIndex,2);
     }
   }

+ 3 - 3
src/store/actions/otherHistory.js

@@ -282,9 +282,9 @@ export function backspaceText(state,action){
         res[data[delIndex-1].formulaCode]=undefined;
       }
       handleLocalDelTag(3,delIndex-1,data[delIndex-1]);      //记录被删除的标签
-      data.splice(delIndex-1,2);
-      res.selecteds.splice(delIndex-1,2);      //杂音类样式选中状态对应
-      res.saveText.splice(delIndex-1,2);
+      data.splice(delIndex-1,action.text.length>0?1:2);
+      res.selecteds.splice(delIndex-1,action.text.length>0?1:2);      //杂音类样式选中状态对应
+      res.saveText.splice(delIndex-1,action.text.length>0?1:2);
     }
   }else if(flag == 'del'){
     if(data[delIndex+1] && data[delIndex+1].flag&&data[delIndex+1].flag==3){//子模板不删  

+ 1 - 1
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.121:5050';//后端接口访问地址
-// const host='http://192.168.2.121:5050';//后端接口访问地址
+// const host='http://192.168.2.236:5050';//后端接口访问地址
 const host='http://192.168.2.241:5050';//后端接口访问地址
 // const host='http://192.168.3.11:5050';//王宇
 //const host='http://192.168.2.164:8080';

+ 37 - 2
src/utils/tools.js

@@ -1129,7 +1129,41 @@ function getStatusImg(type,val,status){
     }
   }
 }
-
+function getDomUpDown(min,max,value){
+  let dom = '';
+  if(min == null&&max == null||min == undefined&&max == undefined||min == ''&&max == ''){
+    dom = getStatusImg(0, value, 1)
+  }else if (!isNaN(min) && !isNaN(max) &&min!=null&&max!=null) {//有最大值最小值
+    if (isNaN(value)) {//输入的不是数据
+      dom = getStatusImg(1, value, 1)
+    } else if (value <= min) {//下降
+      dom = getStatusImg(3, value, 1)
+    } else if (value >= max) {//上升
+      dom = getStatusImg(2, value, 1)
+    } else {//正常
+      dom = getStatusImg(0, value, 1)
+    }
+  } else if (min==null && !isNaN(max)&&max!=null) {//有最大值无最小值
+    if (value >= max) {//上升
+      dom = getStatusImg(2, value, 1)
+    } else if(isNaN(value)){
+      dom = getStatusImg(1, value, 1)
+    }else {//正常
+      dom = getStatusImg(0, value, 1)
+    }
+  } else if (!isNaN(min) && max==null&&min!=null) {//有最小值无最大值
+    if (value <= min) {//下降
+      dom = getStatusImg(3, value, 1)
+    } else if(isNaN(value)){
+      dom = getStatusImg(1, value, 1)
+    }else {//正常
+      dom = getStatusImg(0, value, 1)
+    }
+  } else {//无最大最小值(中文))
+    dom = getStatusImg(1, value, 1)
+  }
+  return dom;
+}
 //键值对转换
 function parseNameVal(arr){
   let obj = {};
@@ -1358,5 +1392,6 @@ module.exports = {
     handleLocalDelTag,
     shiftLocalDelTag,
     setPosition,
-    isAllPartClear
+    isAllPartClear,
+    getDomUpDown
 };