index.jsx 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. import React, { Component } from "react";
  2. import style from "../index.less";
  3. import deleteIcon from '@common/images/delete.png';
  4. import deleteIconNo from '@common/images/delete_no.png';
  5. import {ComplexModal,MiniToast,Radio} from '@commonComp';
  6. import {deepClone,preventDefault} from '@utils/tools';
  7. import { getFormulaResult } from '@store/async-actions/fetchModules'
  8. /**
  9. * 来源于页面选择
  10. *
  11. * **/
  12. class ScaleItem extends Component {
  13. constructor(props) {
  14. super(props);
  15. this.$area = React.createRef();
  16. this.state = {
  17. text:props.text,
  18. };
  19. this.getItems = this.getItems.bind(this);
  20. this.getDetailItems = this.getDetailItems.bind(this);
  21. }
  22. getDetailItems(item,i){
  23. let arr = [],temp='';
  24. const {indexs,result,formulaResult,disabled,calcuResult} = this.props;
  25. const possible=result&&result.possible;
  26. item.details.map((its,j)=>{
  27. let it=its;
  28. if(indexs[i]&&indexs[i].includes(j)){
  29. if(its.type==1){ //量表
  30. let scaleRes=formulaResult&&formulaResult[it.content.conceptId]&&formulaResult[it.content.conceptId].calcalculate;
  31. const name = scaleRes&&scaleRes.result?(' 【'+it.content.name+'】 结果:'+scaleRes.result.value+" "+(scaleRes.result.text||'')):'【'+it.content.name+'】';
  32. temp =<span className={style['scale']}
  33. title={name}>
  34. {name}
  35. </span>;
  36. }else if(its.type==2){ //计算公式
  37. const showRes = calcuResult&&calcuResult[item.conceptId]||it.content.result;
  38. const cresult = showRes&&showRes[1]&&showRes[1].text;
  39. temp = <div className={style['results']}>
  40. <span>患者可能有:</span>
  41. <span className={style["blue"]}>{cresult}</span>
  42. </div>
  43. }else if(its.type==3){
  44. temp = <div className={style['results']}>
  45. <span>可能结果:</span>
  46. <span className={style["blue"]}>{possible[item.conceptId]}</span>
  47. </div>;
  48. }
  49. const passId = item.details[j].type==1?item.details[j].content.conceptId:undefined;
  50. const li = disabled?<li>
  51. <span className={style['s-title']}>{item.name}:</span>
  52. <div className={style['row']}>{temp}</div>
  53. </li>:<li>
  54. <span className={style['s-title']}>{item.name}:</span>
  55. <div className={style['row']}>{temp}</div>
  56. <div className={style["recommend"]} onClick={this.props.handleRemove.bind(this,false,i,passId,j)}>
  57. <img className={style["deleteIconNo"]} src={deleteIconNo} />
  58. <img className={style["deleteIcon"]} src={deleteIcon} />
  59. </div>
  60. </li>;
  61. arr.push(li);
  62. }
  63. });
  64. return arr;
  65. }
  66. getItems(){
  67. const { data } = this.props;
  68. return data&&data.map((it,i)=>{
  69. return this.getDetailItems(it,i);
  70. });
  71. }
  72. getScales(){
  73. const {scaleItems,disabled,formulaResult} = this.props;
  74. let li='',temp='',arr=[],it={};
  75. if(!scaleItems){
  76. return '';
  77. };
  78. for( let i in scaleItems){
  79. it = {conceptId:i,name:scaleItems[i].name};
  80. if(!it) continue;
  81. let scaleRes=formulaResult&&formulaResult[it.conceptId]&&formulaResult[it.conceptId].calcalculate;
  82. const name = scaleRes&&scaleRes.result?(' 【'+scaleItems[i].name+'】 结果:'+scaleRes.result.value+" "+(scaleRes.result.text||'')):'【'+scaleItems[i].name+'】';
  83. //这里onClick不能用箭头函数,用箭头函数会一直绑定for的最后一个it
  84. temp =<span className={style['scale']}
  85. title={name}>{name}</span>;
  86. li = disabled?<li>
  87. <span className={style['s-title']}>相关量表:</span>
  88. <div className={style['row']}>{temp}</div>
  89. </li>:<li>
  90. <span className={style['s-title']}>相关量表:</span>
  91. <div className={style['row']}>{temp}</div>
  92. <div className={style["recommend"]} onClick={this.props.handleRemove.bind(this,true,it.conceptId)}>
  93. <img className={style["deleteIconNo"]} src={deleteIconNo} />
  94. <img className={style["deleteIcon"]} src={deleteIcon} />
  95. </div>
  96. </li>;
  97. arr.push(li);
  98. };
  99. return arr;
  100. }
  101. handleInput(e){
  102. const text = e.target.value;
  103. this.setState({
  104. text
  105. });
  106. }
  107. componentWillReceiveProps(next){ //修复bug1329,第二次保存值不显示
  108. if(next.text!=this.state.text){
  109. this.setState({
  110. text:next.text
  111. });
  112. this.$area.current.value=next.text;
  113. }
  114. }
  115. render() {
  116. const {title,handleInp,disabled} = this.props;
  117. return <div className={style['assess-item']}>
  118. <h2>{title}</h2>
  119. <div className={style['item-content']}>
  120. <ul>
  121. {
  122. this.getItems()
  123. }
  124. {
  125. this.getScales()
  126. }
  127. <li>
  128. <textarea className={style['edit-row']}
  129. ref={this.$area}
  130. type="text"
  131. disabled={disabled}
  132. placeholder='评估描述'
  133. onBlur={()=>handleInp(this.state.text)}
  134. onInput={this.handleInput.bind(this)}>{this.state.text}</textarea>
  135. <div className={style['textareaStatic']}>评估描述:{this.state.text}</div>
  136. </li>
  137. </ul>
  138. </div>
  139. </div>;
  140. }
  141. }
  142. export default ScaleItem;