index.jsx 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import React,{Component} from 'react';
  2. import style from './index.less';
  3. import {Button,InlineTag,ItemBox,Notify,Textarea} from '@commonComp';
  4. import TailInlineTag from '@commonComp/TailInlineTag';
  5. import chooseType from '@containers/eleType.js';
  6. import SearchDrop from '@components/SearchDrop';
  7. import {filterDataArr,getPageCoordinate,windowEventHandler,isIE} from '@utils/tools'
  8. import $ from 'jquery';
  9. class CurrentIll extends Component{
  10. constructor(props){
  11. super(props);
  12. this.state = {
  13. boxEditable:true,
  14. showMoudle:false,
  15. forbidInput:false,
  16. mainFlag:true,
  17. mainData:[],
  18. boxMark:"2",
  19. boxLeft:0,
  20. boxTop:0,
  21. show:true,
  22. tmpScroll:0,
  23. tmpTop:0,
  24. }
  25. this.toggleEditable = this.toggleEditable.bind(this);
  26. this.handleFocus = this.handleFocus.bind(this);
  27. this.onchange = this.onchange.bind(this);
  28. this.handleSearchSelect = this.handleSearchSelect.bind(this);
  29. this.handleClick = this.handleClick.bind(this);
  30. }
  31. toggleEditable(){
  32. this.setState({
  33. boxEditable:!this.state.boxEditable
  34. })
  35. }
  36. handleFocus(e){
  37. // 判断主诉是否为空
  38. const {mainData,mainText,setData,moduleNum,mainIds,data,changeEditIll,editClear} = this.props;
  39. const that = this;
  40. let mainFinallyText = filterDataArr(mainText);
  41. // if(mainData.length == 0 && !mainText[0]){
  42. if(!mainFinallyText){
  43. //弹窗提醒
  44. Notify.error("无法操作,请先输入主诉");
  45. this.setState({
  46. forbidInput:true
  47. })
  48. }else {
  49. // let useEmpty = mainData.length>0?false:true;
  50. let num = moduleNum.num;//主诉使用了几个模板
  51. // if(editClear && data.length==0){//第一次聚焦去设置现病史的data
  52. if(data.length==0){//第一次聚焦去设置现病史的data
  53. // setData && setData({useEmpty,num,mainData,mainIds});//是否使用空模板 及数据处理
  54. setData && setData({num,mainData,mainIds});//是否使用空模板 及数据处理
  55. }
  56. this.setState({
  57. showMoudle:true,
  58. forbidInput:false,
  59. boxEditable:false,
  60. })
  61. changeEditIll(false)
  62. /*const showTimer = setTimeout(function(){
  63. that.setState({
  64. showMoudle:true,
  65. forbidInput:false,
  66. boxEditable:false,
  67. })
  68. changeEditIll(false)
  69. },150)
  70. clearTimeout(showTimer);*/
  71. }
  72. }
  73. onchange(e){//监听输入事件,主诉无数据不能输入
  74. const ev = e || window.event;
  75. ev.target.innerText = "";
  76. }
  77. handleClick(e){//让搜索框跟随鼠标点击移动
  78. // e.stopPropagation(); //冒泡到最顶层关闭其他下拉
  79. //若使用e.target,因为是onClick事件中,值可能是itembox的而不是span因此会有bug
  80. let leftL=0; //用焦点元素的左边距替换鼠标点击的左边距,高度还是鼠标点击的位置
  81. if(isIE()){
  82. leftL = getPageCoordinate(e).boxLeft
  83. }else{
  84. const ele = document.activeElement;
  85. if(ele.toString().indexOf('HTMLSpanElement') == -1){ //点击的不是span无法聚焦就不再设置位置
  86. return;
  87. }
  88. leftL = ele.offsetLeft+90
  89. }
  90. this.setState({
  91. // boxLeft:getPageCoordinate(e).boxLeft,
  92. boxLeft:leftL,
  93. boxTop:getPageCoordinate(e).boxTop,
  94. tmpScroll: $("#addScrollEvent")[0].scrollTop,
  95. tmpTop:getPageCoordinate(e).boxTop
  96. });
  97. windowEventHandler('scroll',()=>{ //弹窗跟随滚动条滚动或者关闭弹窗
  98. let scrollYs = $("#addScrollEvent")[0].scrollTop;
  99. this.setState({
  100. boxTop:this.state.tmpTop - scrollYs + this.state.tmpScroll
  101. })
  102. },$("#addScrollEvent")[0])
  103. }
  104. handleSearchSelect(obj){
  105. const {questionId,name} = obj;
  106. const {fetchModules,focusIndex,span} = this.props;
  107. fetchModules&&fetchModules({id:questionId,index:focusIndex,name,span});
  108. }
  109. getInlineTag(){
  110. const {data,showArr,selecteds,processModuleName,saveText,insertProcess,symptomIds} = this.props;
  111. const boxMark = '2';
  112. let list = data&&data.map((item,i)=>{
  113. if(item.relationModule && item.relationModule==3){
  114. return <TailInlineTag {...item} showText={processModuleName} handleTailClick={(obj)=>{insertProcess(obj)}}></TailInlineTag>
  115. }else {
  116. return chooseType({item,boxMark,i,hideTag:false,showArr,selecteds,saveText,mainIds:symptomIds});
  117. }
  118. })
  119. return list;
  120. }
  121. render(){
  122. const {fuzhen,type,fetchPushInfos,handleInput,isRead,saveText,searchData,totalHide,showArr,focusIndex,editClear,data} = this.props;
  123. const {showMoudle,forbidInput,boxMark,boxLeft,boxTop,show} = this.state;
  124. const searchFlag = searchData.length > 0 ? true : false;
  125. if(+type===1){ //文本模式
  126. return <Textarea title='现病史' boxMark='2'
  127. isRead={isRead}
  128. value={saveText[0]}
  129. fuzhen={fuzhen}
  130. handlePush={fetchPushInfos}
  131. handleInput={handleInput}/>;
  132. }
  133. return <div className={style['current-ill']}>
  134. <ItemBox title='现病史' editable={editClear||data.length==0?true:false} handleFocus={this.handleFocus} onchange={forbidInput?(e)=>{this.onchange(e)}:''} handleClick={this.handleClick}>
  135. {data.length>0?this.getInlineTag():''}
  136. </ItemBox>
  137. {searchFlag ? <SearchDrop data={searchData} show={!totalHide} onSelect={this.handleSearchSelect} left={boxLeft} top={boxTop} />:""}
  138. </div>
  139. }
  140. }
  141. export default CurrentIll;