index.jsx 4.6 KB

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