index.jsx 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. leftL = ele.offsetLeft+90
  59. }
  60. }
  61. getSearchLocation(getPageCoordinate(e).boxTop,leftL)
  62. this.setState({
  63. // boxLeft:getPageCoordinate(e).boxLeft,
  64. // boxLeft:leftL,
  65. // boxTop:getPageCoordinate(e).boxTop,
  66. tmpScroll: $("#addScrollEvent")[0].scrollTop,
  67. tmpTop:getPageCoordinate(e).boxTop
  68. });
  69. windowEventHandler('scroll',()=>{ //弹窗跟随滚动条滚动或者关闭弹窗
  70. let scrollYs = $("#addScrollEvent")[0].scrollTop;
  71. let boxTop = this.state.tmpTop - scrollYs + this.state.tmpScroll
  72. getSearchLocation(boxTop,this.state.boxLeft)
  73. },$("#addScrollEvent")[0])
  74. }
  75. render(){
  76. const {hasMain,searchData,totalHide,isRead,type,fetchPushInfos,handleInput,saveText,boxTop,boxLeft} = this.props;
  77. if(+type===1){ //文本模式
  78. return <Textarea title='其他史' boxMark='3'
  79. isRead={isRead}
  80. value={saveText[0]}
  81. handlePush={fetchPushInfos}
  82. handleInput={handleInput}
  83. handleFocus={this.getData}
  84. hasMain={hasMain}/>;
  85. }
  86. return <div>
  87. <ItemBox title='其他史' isRead={isRead} handleClick={this.handleClick}>
  88. {this.getLabels()}
  89. {searchData && searchData.length>0?<SearchDrop data={searchData} show={!totalHide} left={boxLeft} top={boxTop} onSelect={this.handleSearchSelect}></SearchDrop>:''}
  90. </ItemBox>
  91. </div>
  92. }
  93. }
  94. export default OtherHistory;