index.jsx 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import React from 'react';
  2. import style from './index.less';
  3. import mocks from '../../mock/chronicTable.js'
  4. import { Radio,CheckBtn } from '@commonComp';
  5. import Information from '../Information'
  6. /**
  7. *量表 具体信息页面
  8. *title:量表标题
  9. *data:量表内容
  10. **/
  11. class ScaleTable extends React.Component{
  12. constructor(props){
  13. super(props);
  14. this.state={
  15. data:props.data && data[1].content|| [],
  16. selecteds:{}
  17. }
  18. this.handleChange = this.handleChange.bind(this);
  19. }
  20. handleChange(event){
  21. console.log(event.target.value);
  22. }
  23. handleRadio(name,value){
  24. const {selecteds} = this.state;
  25. this.setState({
  26. selecteds:Object.assign({},selecteds,{[name]:value})
  27. })
  28. }
  29. handleCheckbox(name,value){
  30. let {selecteds} = this.state;
  31. selecteds[name]?selecteds[name]:selecteds[name]=[];
  32. const index = selecteds[name].findIndex((i)=>i==value);
  33. if(index!=-1){
  34. selecteds[name].splice(index,1);
  35. }else{
  36. selecteds[name].push(value);
  37. }
  38. this.setState({
  39. selecteds:selecteds
  40. });
  41. }
  42. handleFormula(data){
  43. const {tableId,getResult,parentId} = this.props;
  44. const params = {
  45. type:1,
  46. content:data, //选择后的数据--字符串形式
  47. id:parentId,
  48. scaleId:tableId,
  49. }
  50. // console.log("调计算接口");
  51. // getResult&&getResult(params);
  52. }
  53. render(){
  54. const {data,title} = this.props;
  55. let {selecteds} = this.state;
  56. const content = data && data[1].content;//表格内容
  57. const preContent = data && data[0].content;//表前文字
  58. const footContent = data && data[2].content; //表后文字
  59. const datas = content && JSON.parse(content);
  60. // console.log(555,datas,content);
  61. return <div className={style['tableBox']} id="printcontent">
  62. <div className={style['printShow']}>
  63. <Information></Information>
  64. </div>
  65. <h1>{title}</h1>
  66. <div dangerouslySetInnerHTML={{__html:preContent}} className={style['textlh']}></div>
  67. <table className={style['table']}>
  68. <thead>
  69. <tr>
  70. {datas&&datas.title.map((v,i)=>{
  71. return <td>{v.name}</td>
  72. })}
  73. </tr>
  74. </thead>
  75. <tbody>
  76. {datas&&datas.rows.map((v,i)=>{
  77. return <tr>
  78. <td>{v.name}</td>
  79. <td>
  80. {/*{v.details.map((it,index)=>{
  81. return <td className={style['block']}>
  82. <label>
  83. <input type="radio" name={v.name} value={it.score} onChange={this.handleChange}/>{it.detailName}
  84. <span style={{display:it.state==1?'inline':'none',color:'#3B9ED0'}}>(智能推荐)</span>
  85. </label>
  86. </td>
  87. })}*/}
  88. {v.controltype==0?v.details.map((it,index)=>{
  89. return <td className={style['block']}>
  90. <Radio label={it.detailName}
  91. id={it.id}
  92. isSelect={selecteds[v.name]==it.detailName}
  93. handleClick={this.handleRadio.bind(this,v.name,it.detailName)}>
  94. </Radio>
  95. {it.state==1?<span style={{color:'#3B9ED0'}}>(智能推荐)</span>:''}
  96. </td>
  97. }):v.details.map((it,index)=>{
  98. return <td className={style['block']}>
  99. <CheckBtn id={it.detailName}
  100. value={it.detailName}
  101. label={it.detailName}
  102. isSelect={selecteds[v.name]&&selecteds[v.name].includes(it.detailName)}
  103. handleClick={this.handleCheckbox.bind(this,v.name,it.detailName)}>
  104. </CheckBtn>
  105. </td>
  106. })
  107. }
  108. </td>
  109. <td>
  110. {v.details.map((it,index)=>{
  111. return <td className={style['block']}>{it.score}</td>
  112. })}
  113. </td>
  114. <td></td>
  115. </tr>
  116. })}
  117. </tbody>
  118. <tfoot>
  119. <tr>
  120. <td colspan="4" className={style['sum']}>
  121. 总计:<i>95</i>
  122. <span className={style['formulaBtn']} onClick={this.handleFormula.bind(this,datas)}>计算</span>
  123. </td>
  124. </tr>
  125. </tfoot>
  126. </table>
  127. <div dangerouslySetInnerHTML={{__html:footContent}} className={style['textlh']}></div>
  128. </div>
  129. }
  130. }
  131. export default ScaleTable;