index.jsx 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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} from '@utils/tools'
  6. import style from './index.less';
  7. class OtherHistory extends Component{
  8. constructor(props){
  9. super(props);
  10. this.state = {
  11. boxMark:'3',
  12. editable:true,
  13. boxLeft:'0px',
  14. boxTop:'0px'
  15. };
  16. this.handleClick = this.handleClick.bind(this);
  17. this.handleSearchSelect = this.handleSearchSelect.bind(this);
  18. this.getData = this.getData.bind(this);
  19. this.handleInput = this.handleInput.bind(this);
  20. }
  21. toggleEditable(){
  22. this.setState({
  23. boxEditable:!this.state.boxEditable
  24. })
  25. }
  26. handleSearchSelect(obj){
  27. const {questionId,name} = obj;
  28. const {fetchModules,focusTextIndex,span,searchInEnd} = this.props;
  29. fetchModules&&fetchModules({id:questionId,index:focusTextIndex,name,span,searchInEnd});
  30. }
  31. getLabels(){
  32. const {data,showArr,selecteds,saveText} = this.props;
  33. const {boxMark} = this.state;
  34. let list = data.map((item,i)=>{
  35. return chooseType({item,boxMark,i,hideTag:false,showArr,selecteds,saveText});
  36. });
  37. return list;
  38. }
  39. handleInput(e){ //主诉未填无法输入
  40. const {type,hasMain} = this.props;
  41. if(+type===0&&!hasMain){
  42. e.target.innerText='';
  43. }
  44. }
  45. getData(){
  46. //第一次聚焦其他史时,主诉有数据则获取最近一次其他史记录(没有的话显示初始模板),主诉无数据则显示提示;其他时间其他史模板数据不调接口
  47. const {hasMain,type,setInitData,data,saveText,changeEditClear} = this.props;
  48. const hasData = saveText.join("")||data.length>0;
  49. if(hasData){ //其他史已有数据不获取
  50. return;
  51. }
  52. if(+type===0&&!hasMain){
  53. Notify.error("无法操作,请先输入主诉");
  54. return;
  55. }
  56. //智能模式有主诉或者文本模式获取最近历史
  57. setInitData();
  58. //回读后容器框要不可编辑,否则自由文本标签onInput,onFocus事件失效(原因未知)
  59. /*if(data.length>0){
  60. this.setState({
  61. editable:false
  62. });
  63. changeEditClear(false)
  64. }*/
  65. }
  66. handleClick(e){//让搜索框跟随鼠标点击移动
  67. //e.stopPropagation();
  68. const {fetchPushInfos} = this.props;
  69. //fetchPushInfos&&fetchPushInfos();
  70. let boxLeft = e.pageX - 102 + 'px';
  71. let boxTop = (+e.target.offsetTop+22)+'px';
  72. this.setState({
  73. boxLeft:boxLeft,
  74. boxTop:boxTop
  75. });
  76. }
  77. /*componentWillReceiveProps(next){
  78. const isRead = this.props;
  79. this.setState({
  80. isRead:next.isRead !== isRead
  81. });
  82. }
  83. componentDidMount(){
  84. const {setInitData} = this.props;
  85. setInitData&&setInitData();
  86. }*/
  87. render(){
  88. const {data,hasMain,searchData,totalHide,showArr,focusTextIndex,isRead,type,fetchPushInfos,handleInput,saveText,editClear} = this.props;
  89. const {boxTop,boxLeft,boxMark} = this.state;
  90. const hasData = saveText.join("")||data.length>0;
  91. const show = showArr&&showArr[boxMark+focusTextIndex+'0'];
  92. if(+type===1){ //文本模式
  93. return <Textarea title='其他史' boxMark='3'
  94. isRead={isRead}
  95. value={saveText[0]}
  96. handlePush={fetchPushInfos}
  97. handleInput={handleInput}
  98. handleFocus={this.getData}
  99. hasMain={hasMain}/>;
  100. }
  101. return <div>
  102. <ItemBox title='其他史' editable={hasData?false:true} isRead={isRead} handleClick={this.handleClick} handleFocus={this.getData} onchange={this.handleInput}>
  103. {this.getLabels()}
  104. <SearchDrop data={searchData} show={!totalHide} left={boxLeft} top={boxTop} onSelect={this.handleSearchSelect}></SearchDrop>
  105. </ItemBox>
  106. </div>
  107. }
  108. }
  109. export default OtherHistory;