index.jsx 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. import React,{Component} from 'react';
  2. import {Button,InlineTag,ItemBox,Textarea,Notify} from '@commonComp';
  3. import chooseType from '@containers/eleType.js';
  4. import SearchDrop from '@components/SearchDrop';
  5. import {filterDataArr,getPageCoordinate,windowEventHandler,isIE} from '@utils/tools'
  6. import $ from 'jquery';
  7. class OtherHistory extends Component{
  8. constructor(props){
  9. super(props);
  10. this.state = {
  11. boxMark:'3',
  12. editable:true,
  13. boxLeft:0,
  14. boxTop:0,
  15. tmpScroll:0,
  16. tmpTop:0
  17. };
  18. this.handleClick = this.handleClick.bind(this);
  19. this.handleSearchSelect = this.handleSearchSelect.bind(this);
  20. this.getData = this.getData.bind(this);
  21. }
  22. componentWillReceiveProps(nextProps){
  23. this.setState({boxLeft:nextProps.boxLeft})
  24. }
  25. handleSearchSelect(obj){
  26. const {questionId,name} = obj;
  27. const {fetchModules,focusTextIndex,span,searchInEnd} = this.props;
  28. fetchModules&&fetchModules({id:questionId,index:focusTextIndex,name,span,searchInEnd});
  29. }
  30. getLabels(){
  31. const {data,showArr,selecteds,saveText} = this.props;
  32. const {boxMark} = this.state;
  33. let list = data.map((item,i)=>{
  34. return chooseType({item,boxMark,i,hideTag:false,showArr,selecteds,saveText});
  35. });
  36. return list;
  37. }
  38. getData(){
  39. //第一次聚焦其他史时,主诉有数据则获取最近一次其他史记录(没有的话显示初始模板),主诉无数据则显示提示;其他时间其他史模板数据不调接口
  40. const {hasMain,type,setInitData,isEmpty} = this.props;
  41. //无主诉提示在EditableSpan里
  42. //智能模式有主诉或者文本模式获取最近历史
  43. if((+type===0&&hasMain&&isEmpty!=false)||(+type===1&&isEmpty!=false)){
  44. setInitData();
  45. }
  46. }
  47. handleClick(e){//让搜索框跟随鼠标点击移动
  48. //e.stopPropagation();
  49. const {getSearchLocation} = this.props;
  50. //若使用e.target,因为是onClick事件中,值可能是itembox的而不是span因此会有bug
  51. this.getData();
  52. let leftL=0; //用焦点元素的左边距替换鼠标点击的左边距,高度还是鼠标点击的位置
  53. if(isIE()){
  54. leftL = getPageCoordinate(e).boxLeft
  55. }else{
  56. const ele = document.activeElement;
  57. if(ele.toString().indexOf('HTMLSpanElement') == -1){ //点击的不是span无法聚焦就不再设置位置
  58. return;
  59. }
  60. leftL = ele.offsetLeft+90
  61. }
  62. getSearchLocation(getPageCoordinate(e).boxTop,leftL)
  63. this.setState({
  64. // boxLeft:getPageCoordinate(e).boxLeft,
  65. // boxLeft:leftL,
  66. // boxTop:getPageCoordinate(e).boxTop,
  67. tmpScroll: $("#addScrollEvent")[0].scrollTop,
  68. tmpTop:getPageCoordinate(e).boxTop
  69. });
  70. windowEventHandler('scroll',()=>{ //弹窗跟随滚动条滚动或者关闭弹窗
  71. let scrollYs = $("#addScrollEvent")[0].scrollTop;
  72. let boxTop = this.state.tmpTop - scrollYs + this.state.tmpScroll
  73. getSearchLocation(boxTop,this.state.boxLeft)
  74. },$("#addScrollEvent")[0])
  75. }
  76. render(){
  77. const {hasMain,searchData,totalHide,isRead,type,fetchPushInfos,handleInput,saveText,boxTop,boxLeft} = this.props;
  78. if(+type===1){ //文本模式
  79. return <Textarea title='其他史' boxMark='3'
  80. isRead={isRead}
  81. value={saveText[0]}
  82. handlePush={fetchPushInfos}
  83. handleInput={handleInput}
  84. handleFocus={this.getData}
  85. hasMain={hasMain}/>;
  86. }
  87. return <div>
  88. <ItemBox title='其他史' isRead={isRead} handleClick={this.handleClick}>
  89. {this.getLabels()}
  90. {searchData && searchData.length>0?<SearchDrop data={searchData} show={!totalHide} left={boxLeft} top={boxTop} onSelect={this.handleSearchSelect}></SearchDrop>:''}
  91. </ItemBox>
  92. </div>
  93. }
  94. }
  95. export default OtherHistory;