import React, { Component } from "react";
import style from "./index.less";
import Notify from '../Notify';
import config from '@config/index';
import {isIE,moveEnd} from '@utils/tools.js';
import {getFeature} from '@store/async-actions/fetchModules';
import {getAllDataList,getAllDataStringList,ifOtherClear} from "@utils/tools.js";
import store from '@store';
import $ from "jquery";
import {SET_CURRENT_MODULE} from '@types/homePage';
import {getMRAnalyse} from '@store/async-actions/pushMessage';
class BlockInp extends Component {
constructor(props) {
super(props);
this.state = {
timer:null,
inpText:'',
overFlag:false,
};
this.$dom = React.createRef();
this.handleInput = this.handleInput.bind(this);
this.handleFocus = this.handleFocus.bind(this);
//this.handleBlur = this.handleBlur.bind(this);
this.handleKeydown = this.handleKeydown.bind(this);
this.handleBlur = this.handleBlur.bind(this);
}
handleFocus(e){ //初始显示props中的值,focus已经显示输入的值,避免值更新闪烁
const {handleFocus,fuzhen,handleInput,isChronic,hasMain,boxMark,title} = this.props;
const state = store.getState()
const moduleName = state.homePage.moduleName
//黏贴时去掉html格式
const that = this;
let txt = '';
$(this.$dom.current).on("paste",function(e){
setTimeout(function(){
txt = that.$dom.current.innerText||that.$dom.current.innerHTML;
that.$dom.current.innerHTML = txt;
moveEnd($(that.$dom.current)[0]); //光标落到最后去
});
});
//const {inpText} = this.state;console.log(inpText,boxMark,hasMain)
handleFocus&&handleFocus(); //其他史、查体获取数据的方法
/*if(fuzhen&& !isChronic&&!(this.$dom.current.innerText?this.$dom.current.innerText:this.$dom.current.innerHTML)){
const text = config.currentText.replace("(**)",fuzhen.replace(";",''));
this.$dom.current.innerText?(this.$dom.current.innerText = text):(this.$dom.current.innerHTML = text);
handleInput&&handleInput({text});
}*/
if(moduleName != title) {
store.dispatch({
type: SET_CURRENT_MODULE,
moduleName:title
})
store.dispatch(getMRAnalyse())
}
}
handleInput(e){
const {handleInput,boxMark,handlePush,value} = this.props;
const {inpText,overFlag} = this.state;
const text = e.target.innerText || e.target.innerHTML.replace(/ +/g,' ').replace(/
$/,'');
const stimer = this.state.timer;//console.log(e.target,text)
if(boxMark=='1'&&text.length>config.limited){ //主诉字符数限制
e.target.innerText?(e.target.innerText = text.substr(0,config.limited)):(e.target.innerHTML = text.substr(0,config.limited));
e.target.blur();
Notify.error(config.limitText);
if(overFlag){
e.target.innerText?(e.target.innerText = inpText):(e.target.innerHTML = inpText);
return
}
this.setState({
inpText:text.substr(0,config.limited),
overFlag:true
});
handleInput&&handleInput({text:text.substr(0,config.limited).replace('
','')});
return;
}
/*if(boxMark=='3'&&!hasMain){
e.target.innerText = '';
return;
}*/
this.setState({
inpText:text,
overFlag:false
})
//存值到store FF26 会有一个
handleInput&&handleInput({text:text.replace('
','')});
//右侧推送--延时推送
clearTimeout(stimer);
let timer = setTimeout(function(){
handlePush&&handlePush();
clearTimeout(stimer);
},config.delayPushTime);
this.setState({
timer
});
}
//除主诉外 其他是否为空
ifClear(){
let baseList = store.getState();
let jsonData = getAllDataList(baseList);
let jsonStr = getAllDataStringList(baseList);
let flg = ifOtherClear(jsonData,jsonStr,baseList);
return flg;
}
handleBlur(e){
//解除绑定事件
$(this.$dom.current).off("paste");
}
handleKeydown(e){
const {boxMark} = this.props;
const ev = e||window.event;
if(+boxMark===1){
//禁止回车事件
if(ev.keyCode==13){return false;}
}
}
componentWillReceiveProps(next){
const isRead = this.props.isRead;
if(next.isRead != isRead||(next.value!=this.props.value&&next.value&&next.value.indexOf("复诊")!=-1)){ //value对比解决复诊不显示bug,复诊对比解决关标跳到前面bug
this.$dom.current.innerHTML = next.value||''; //ff26下不支持innerText,但ref会自动加上innerText属性,所以上面的判断不为空
this.setState({
inpText:''
});
}
}
componentDidMount(){
const {value} = this.props;
if(value){
//this.$dom.current.innerText?(this.$dom.current.innerText = value||''):(this.$dom.current.innerText=value||'');
this.$dom.current.innerText=value||'';
}
if(isIE()){
$(this.$dom.current).onIe8Input(function(e){
this.handleInput(e)
},this);
}
}
render() {
const { title,boxMark } = this.props;
return (