index.jsx 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. import React,{Component} from 'react';
  2. import style from './index.less';
  3. import closeIcon from '@common/images/close-icon.png';
  4. import HisList from './HisList';
  5. import PreviewBody from '@components/PreviewBody';
  6. import config from '@config/index';
  7. import {dragBox} from '@utils/drag';
  8. /**
  9. 急诊:全科历史病历
  10. */
  11. class EmergencyHis extends Component{
  12. constructor(props){
  13. super(props);
  14. this.state = {
  15. index:0,
  16. timer:null,
  17. valChange:true,
  18. chooseItem:''
  19. }
  20. this.searInp = React.createRef();
  21. this.handleClose = this.handleClose.bind(this);
  22. this.getMore = this.getMore.bind(this);
  23. this.handleFilter = this.handleFilter.bind(this);
  24. this.showDetail = this.showDetail.bind(this);
  25. this.handleDownload = this.handleDownload.bind(this);
  26. this.handleInput = this.handleInput.bind(this);
  27. this.handleAdd = this.handleAdd.bind(this);
  28. }
  29. componentDidMount(){
  30. dragBox('previewWrapper','previewStatic','add')
  31. }
  32. handleClose(){
  33. const {close} = this.props;
  34. close&&close();
  35. dragBox('previewWrapper','previewStatic','del')
  36. }
  37. getMore(){//点击更多
  38. const {params,getNextPage} = this.props;
  39. let current = params&&params.current + 1;
  40. let param = Object.assign({},params,{current:current});
  41. getNextPage&&getNextPage(param);
  42. }
  43. handleFilter(obj){//筛选
  44. const {filterData} = this.props;
  45. filterData&&filterData(obj);
  46. }
  47. showDetail(index){//病历详情
  48. this.setState({
  49. index:index
  50. })
  51. }
  52. handleDownload(ids){//导出
  53. const { getDownload } = this.props;
  54. getDownload&&getDownload(ids)
  55. }
  56. //搜索框输入
  57. handleInput(e){
  58. const { handleChangeValue } = this.props;
  59. clearTimeout(this.state.timer);
  60. let timer = setTimeout(()=>{
  61. clearTimeout(this.state.timer);
  62. if(e.target.value.trim() == ''){
  63. return handleChangeValue('');
  64. }
  65. handleChangeValue(e.target.value);
  66. },config.delayTime);
  67. this.setState({
  68. timer,
  69. valChange:true,
  70. chooseItem:''
  71. });
  72. }
  73. //点击搜索结果
  74. handleListClick(item){
  75. const { handleChangeValue } = this.props;
  76. this.searInp.current.value = item.name;
  77. handleChangeValue('');
  78. this.setState({
  79. valChange:false,
  80. chooseItem:item.name
  81. });
  82. }
  83. getBtnStyle(){
  84. const {valChange} = this.state;
  85. if(!valChange){
  86. return `${style['add-btn']} ${style['comfirn-btn']}`
  87. }
  88. return style['add-btn'];
  89. }
  90. // 确认添加
  91. handleAdd(){
  92. const {chooseItem,index} = this.state;
  93. const {addSecond,data} = this.props;
  94. if(chooseItem.trim()){
  95. // 添加接口
  96. const item = {
  97. name:chooseItem,
  98. id:data[index].inquiryId
  99. }
  100. addSecond&&addSecond(item);
  101. this.searInp.current.value = "";
  102. this.setState({
  103. valChange:true,
  104. chooseItem:''
  105. });
  106. }
  107. }
  108. componentWillUnmount(){
  109. // 组件销毁时 清除病历数据,因为每点开一次都会去请求
  110. const {clearHisRecord} = this.props;
  111. clearHisRecord&&clearHisRecord();
  112. }
  113. render(){
  114. const {show,data,total,preInfo,searchData} = this.props;
  115. const {index,valChange} = this.state;
  116. // const searchData = [];
  117. let baseObj = data[index];
  118. let dataJson,dataStr;
  119. if(baseObj){
  120. dataJson = JSON.stringify(baseObj) == "{}" ? {} : JSON.parse(baseObj.dataJson);
  121. dataStr = JSON.stringify(baseObj) == "{}" ? [] : baseObj.detailList;
  122. }
  123. const getAllDataStringList = () =>{ //获取所有模块文本的数据
  124. let jsonDataString = {};
  125. jsonDataString.lis = {};
  126. jsonDataString.chief = dataStr[0].content || ''; //主诉
  127. jsonDataString.present = dataStr[1].content || ''; //现病史
  128. jsonDataString.other = dataStr[2].content || ''; //其他史
  129. jsonDataString.vital = dataStr[3].content || ''; //查体
  130. jsonDataString.lis = dataStr[4].content || ''; //化验导入填写
  131. jsonDataString.pacs = dataStr[5].content || ''; //辅检
  132. jsonDataString.diag = dataStr[6].content || ''; //诊断
  133. jsonDataString.advice = dataStr[7].content || ''; //医嘱
  134. return jsonDataString;
  135. }
  136. if(show){
  137. return <div className={style['emer-box']} id="previewWrapper">
  138. <div className={style['emer-content']}>
  139. <div id="previewStatic" className={`${style['closeModal']} drag-title`}><img src={closeIcon} className={style['img']} onClick={this.handleClose}/></div>
  140. <div className={style['emer-left']}>
  141. <HisList data={data}
  142. total={total}
  143. getMore={this.getMore}
  144. handleFilter={this.handleFilter}
  145. detail={this.showDetail}
  146. handleDownload={this.handleDownload}/>
  147. </div>
  148. <div className={style['emer-right']}>
  149. {
  150. baseObj == undefined || JSON.stringify(baseObj) == "{}" ? <p className={style['no-data']}>暂无数据</p> :
  151. <PreviewBody
  152. preInfo={preInfo}
  153. dataJson={dataJson}
  154. baseObj={baseObj}
  155. dataStr={dataStr.length > 0?getAllDataStringList(dataStr):[]}
  156. show={false}
  157. flg={true}
  158. ></PreviewBody>
  159. }
  160. <div className={style['emer-right-footer']}>
  161. {baseObj&&baseObj.diagnoseSecond?<p className={style['diag-display']}>
  162. <span>{baseObj.doctorNameSecond} {'在'}{baseObj.inquiryTimeSecond} 添加</span>
  163. <span className={style['diag-cont']}>{baseObj.diagnoseSecond}{'(诊后添加)'}</span>
  164. </p>:''}
  165. <div className={style['add-diag']}>
  166. <div>
  167. <span>添加二次诊断:</span>
  168. <input className={style['add-inp']}
  169. ref={this.searInp}
  170. onInput={(e) => {
  171. this.handleInput(e)
  172. }}
  173. onPropertyChange={(e) => { // 兼容ie
  174. this.handleInput(e)
  175. }}/>
  176. <span className={this.getBtnStyle()} onClick={!valChange?this.handleAdd:''}>确认添加</span>
  177. </div>
  178. <p className={style['add-tip']}>说明:二次诊断只会对导出数据有影响(只为AI建模使用)并不会对真实病历产生任何影响!</p>
  179. </div>
  180. </div>
  181. </div>
  182. {searchData.length>0?<div className={style['search-list']}>
  183. <ul>
  184. {searchData.map((v,i)=>{
  185. return <li key={v.questionId} onClick={this.handleListClick.bind(this,v)}>{v.name}{v.retrievalName?'('+v.retrievalName+')':''}</li>
  186. })}
  187. </ul>
  188. </div>:''}
  189. </div>
  190. </div>
  191. }
  192. return ''
  193. }
  194. }
  195. export default EmergencyHis;