index.jsx 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  1. import React from 'react';
  2. import style from './index.less';
  3. import infoPic from "../../common/images/info-pic.png";
  4. import chronicPic from "../../common/images/chronic.png";
  5. import level1 from "../../common/images/级别1.png";
  6. import close from "../../common/images/close-icon.png";
  7. import printIcon from '@common/images/team.png';
  8. import manageIcon from '@common/images/manage.png';
  9. import allIcon from '@common/images/all-table.png';
  10. import tableIcon from '@common/images/table.png';
  11. import allTableIcon from '@common/images/all-table.png';
  12. import add from '@common/images/add-result.png';
  13. import added from '@common/images/first.png';
  14. import checkIcon from '@common/images/check.png';
  15. import {ComplexModal,ConfirmModal} from '@commonComp';
  16. import AssessResult from '@containers/AssessResult';
  17. import ScaleTable from '../ScaleTable';
  18. /***
  19. 慢病右侧推送模块规则:
  20. 慢病--显示慢病名称以及管理和评估
  21. 普通病--显示主诊断的名称,不显示管理和评估,显示量表按钮
  22. 明细--量表-计算公式-核心指标
  23. controlType:0-radio 1-checkbox 2-text 3-dropdownlist
  24. **/
  25. class ChronicInfo extends React.Component{
  26. constructor(props){
  27. super(props);
  28. this.state = {
  29. show:true,
  30. showInfo:false,
  31. showOption:false,
  32. showTable:false,
  33. showAssess:false, //评估弹窗
  34. infoId:null, //静态知识
  35. formulaId:null, //计算公式
  36. optionId:null, //可能结果,
  37. isAssessConfirm:false, //是否点击评估弹窗确定按钮
  38. };
  39. this.showInfo = this.showInfo.bind(this);
  40. this.closeInfo = this.closeInfo.bind(this);
  41. this.showOption = this.showOption.bind(this);
  42. this.closeOption = this.closeOption.bind(this);
  43. this.showTable = this.showTable.bind(this);//显示量表弹窗
  44. this.closeTable = this.closeTable.bind(this);//关闭量表弹窗
  45. this.showAssessFn = this.showAssessFn.bind(this); //开关评估弹窗
  46. this.close = this.close.bind(this); //关闭量表列表
  47. this.showFormula = this.showFormula.bind(this); //打开计算公式
  48. this.closeFormula = this.closeFormula.bind(this); //关闭计算公式
  49. this.handleAddAssessItem = this.handleAddAssessItem.bind(this); //加入病例记录
  50. this.handleSaveAssess = this.handleSaveAssess.bind(this); //评估弹窗确定
  51. }
  52. showTableList(id){//量表
  53. const {getTableList,questionId} = this.props;
  54. // getTableList(questionId&&questionId.id);
  55. if(id){
  56. getTableList(id);
  57. }
  58. }
  59. showInfo(id){//显示静态知识
  60. this.setState({
  61. infoId:id
  62. })
  63. }
  64. closeInfo(){//关闭静态知识
  65. this.setState({
  66. infoId:null
  67. })
  68. }
  69. showOption(id){
  70. this.setState({
  71. optionId:id
  72. })
  73. }
  74. closeOption(){
  75. this.setState({
  76. optionId:null
  77. })
  78. }
  79. showTable(){
  80. // 密西根糖尿病周围神经病评分(MDNS) 为例
  81. const item = {
  82. id:40744,
  83. name:'密西根糖尿病周围神经病评分(MDNS)'
  84. }
  85. this.props.getScaleInfo(item);
  86. this.setState({
  87. showTable:true
  88. })
  89. }
  90. closeTable(){
  91. this.setState({
  92. showTable:false
  93. })
  94. }
  95. showAssessFn(){
  96. this.setState({
  97. showAssess:!this.state.showAssess,
  98. isAssessConfirm:false
  99. });
  100. }
  101. close(){
  102. const {hideList} = this.props;
  103. hideList&&hideList();
  104. }
  105. showFormula(id){//计算公式
  106. this.setState({
  107. formulaId:id
  108. })
  109. }
  110. closeFormula(){
  111. this.setState({
  112. formulaId:null
  113. })
  114. }
  115. handleAddAssessItem(v,pIndex,i){
  116. const {addAssessItem} = this.props;
  117. addAssessItem(v,pIndex,i);
  118. }
  119. handleSaveAssess(){
  120. this.setState({
  121. isAssessConfirm:true
  122. });
  123. const that=this;
  124. setTimeout(()=>{
  125. that.showAssessFn();
  126. });
  127. }
  128. getDetail(){
  129. const {data,indexs} = this.props;
  130. const {showInfo,showOption,infoId,formulaId,optionId} = this.state;
  131. let list = data&&data.map((v,i)=>{
  132. return <div className={style["list"]}>
  133. <p>
  134. <span>{'患者可能有'+v.name}</span>
  135. <img src={infoPic} className={style["infoPic"]} onClick={this.showInfo.bind(this,v.id)}/>
  136. </p>
  137. <div className={style["infoBox"]} style={{display:infoId&&infoId==v.id?'block':'none'}}>
  138. <p className={style["infoTitle"]}>
  139. <img src={allTableIcon} />
  140. 静态知识
  141. <img src={close} onClick={this.closeInfo} className={style["closeIcon"]}/>
  142. </p>
  143. <div className={style["infoCon"]}>
  144. 在美国,接受关节置换的病例中约8.5%为糖尿病患者。而糖尿病是关节置换术后各种并发症和死亡的危险因素之一,血糖控制不佳会加大此风险。   糖化血红蛋白(HbA1c)水平是衡量糖尿病控制是否良好的标准之一。研究发现HbA1c >7.0%者术后并发症率明显增加,但与术后深部感染并无特别关系。   美国学者Giori NJ等所在医院从2004年10月1日起对所有拟行全关节置换的糖尿病患者常规检测术前HbA1c水平。如果HbA1c >7.0%,则要求患者由其初级保健提供者
  145. </div>
  146. </div>
  147. {v.details.map((it,j)=>{
  148. if(it.type==1){
  149. return <p>
  150. <span className={style["listName"]} onClick={this.showTable.bind(this,it.content)}>{'【'+it.content.name+'】'}</span>
  151. {indexs[i]&&indexs[i].includes(j)?<span className={style["addResult"]}>
  152. <img src={added} />
  153. 已加入
  154. </span>:<span className={style["listResult"]} onClick={()=>this.handleAddAssessItem(v,i,j)}>
  155. <img src={add} />
  156. 加入病历记录
  157. </span>
  158. }
  159. </p>
  160. }else if(it.type==2){
  161. return <div className={style["marTop"]}>
  162. <span>计算公式结果:</span>
  163. <span className={style["blue"]} onClick={this.showFormula.bind(this,v.id)}>请选择</span>
  164. <img src={level1} />
  165. {indexs[i]&&indexs[i].includes(j)?<span className={style["addResult"]}>
  166. <img src={added} />
  167. 已加入
  168. </span>:<span className={style["listResult"]} onClick={()=>this.handleAddAssessItem(v,i,j)}>
  169. <img src={add} />
  170. 加入病历记录
  171. </span>
  172. }
  173. <div className={style["infoBox"]} style={{display:formulaId&&formulaId==v.id?'block':'none'}}>
  174. <p className={style["infoTitle"]}>
  175. <img src={allTableIcon} />
  176. {it.content.name}
  177. <img src={close} onClick={this.closeFormula} className={style["closeIcon"]}/>
  178. </p>
  179. <div className={style["infoCon"]}>
  180. {it.content.details.map((item,i)=>{
  181. if(item.controlType==0){//单选
  182. return <div>
  183. <span>{item.name}</span>
  184. {item.details.map((ii,ind)=>{
  185. return <label>
  186. <input type="radio" name={item.name} />{ii.detailName}
  187. </label>
  188. })}
  189. </div>
  190. }else if(item.controlType==1){//多选
  191. }else if(item.controlType==2){//输入框
  192. return <div>
  193. <span>{item.name}</span>
  194. <input placeholder="请输入"/>
  195. </div>
  196. }else if(item.controlType==3){//下拉
  197. return <div>
  198. <span>{item.name}</span>
  199. {item.details.map((ii,ind)=>{
  200. return <label>
  201. <input type="radio" name={item.name} />{ii.detailName}
  202. </label>
  203. })}
  204. </div>
  205. }
  206. })}
  207. </div>
  208. </div>
  209. </div>
  210. }else if(it.type==3){
  211. return <div className={style["marTop"]}>
  212. <span>可能结果:</span>
  213. <span onClick={this.showOption.bind(this,v.id)} className={style["blue"]}>请选择</span>
  214. <img src={level1} />
  215. {indexs[i]&&indexs[i].includes(j)?<span className={style["addResult"]}>
  216. <img src={added} />
  217. 已加入
  218. </span>:<span className={style["listResult"]} onClick={()=>this.handleAddAssessItem(v,i,j)}>
  219. <img src={add} />
  220. 加入病历记录
  221. </span>
  222. }
  223. <div className={`${style["infoBox"]} ${style["mainBox"]}`} style={{display:optionId&&optionId==v.id?'block':'none'}}>
  224. <p className={style["infoTitle"]}>
  225. <img src={checkIcon} />
  226. 结果选择
  227. <img src={close} onClick={this.closeOption} className={style["closeIcon"]}/>
  228. </p>
  229. <div className={style["infoCon"]}>
  230. <div className={style["infoOption"]}>
  231. <span>是否贫血:</span>
  232. <span>
  233. <img src={infoPic} />
  234. </span>
  235. <span>
  236. <img src={infoPic} />
  237. </span>
  238. </div>
  239. <div className={style["infoConBtn"]}>
  240. <span>确定</span>
  241. </div>
  242. </div>
  243. </div>
  244. </div>
  245. }
  246. })}
  247. </div>
  248. })
  249. return list;
  250. }
  251. render(){
  252. const {chronicMagItem,showList,tableList,scaleInfo,saveAssessInfos} = this.props;
  253. const {showInfo,showOption,showTable,showAssess,isAssessConfirm} = this.state;
  254. const footer = <div className={style['footer']}>
  255. <span className={style['print']}><img src={printIcon} alt=""/>打印</span>
  256. <span className={style['okBtn']} onClick={()=>this.handleSaveAssess()}>确定</span>
  257. </div>;
  258. return <div className={style["tips"]} style={{marginBottom:'15px'}}>
  259. <div className={`${style["tips-title"]} ${style["chronic"]}`}>
  260. <div className={style["tips-name"]}>
  261. <img src={chronicPic} />
  262. <h2>{chronicMagItem&&chronicMagItem.name||'冠状动脉'}</h2>
  263. <span className={style["redTips"]}>(页面信息有更新可能影响评估结果)</span>
  264. </div>
  265. <div className={style["tips-btn"]}>
  266. <span
  267. className={style["tipsDetails"]}
  268. style={{width:'70px'}}
  269. onClick={this.showAssessFn}
  270. >
  271. 管理和评估
  272. </span>
  273. <span
  274. className={style["tipsDetails"]}
  275. onClick={() => this.showTableList(chronicMagItem&&chronicMagItem.id)}
  276. >
  277. 量表
  278. </span>
  279. </div>
  280. </div>
  281. <div className={style["content"]}>
  282. {this.getDetail()}
  283. </div>
  284. <ConfirmModal visible={showList} noFooter='true' title='全部量表' close={this.close} titleBg="#DFEAFE" icon={allTableIcon} height={300}>
  285. <ul className={style['toast-cont']}>
  286. {tableList&&tableList.map((v,i)=>{
  287. return <li>
  288. <span>{'【'+v.name+'】'}</span>
  289. </li>
  290. })}
  291. </ul>
  292. </ConfirmModal>
  293. {showTable?<ComplexModal onclose={this.closeTable} footer={footer}
  294. title='密西根糖尿病神经筛查表(MDNS)'
  295. icon={tableIcon}
  296. top={20}
  297. bottom={20}
  298. width={820}>
  299. <ScaleTable data={scaleInfo}></ScaleTable>
  300. </ComplexModal>:''}
  301. {showAssess?<ComplexModal onclose={this.showAssessFn} footer={footer}
  302. title='管理和评估'
  303. icon={manageIcon}
  304. top={20}
  305. bottom={20}
  306. width={820}>
  307. <AssessResult handleSave={saveAssessInfos} isAssessConfirm={isAssessConfirm}></AssessResult>
  308. </ComplexModal>:''}
  309. </div>
  310. }
  311. }
  312. export default ChronicInfo;