index.jsx 7.8 KB

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