index.jsx 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481
  1. import React, { Component } from "react";
  2. import style from "./index.less";
  3. import possibleImg from "../../common/images/possible.png";
  4. import doubtImg from "../../common/images/doubt.png";
  5. import recommendImg from "../../common/images/recommend.png";
  6. import tipsImg from "../../common/images/tips.png";
  7. import vigilantImg from "../../common/images/vigilant.png";
  8. import showImg from "../../common/images/show.png";
  9. import hideImg from "../../common/images/close.png";
  10. import PushDiag from "./PushDiag";
  11. import DiagnosticItem from "@containers/DiagnosticItem";
  12. import store from "@store";
  13. import { getWindowInnerHeight } from "@common/js/func";
  14. import {addLabel} from '@store/actions/inspect';
  15. import {addAssistLabel} from '@store/actions/assistCheck';
  16. import {windowEventHandler} from '@utils/tools'
  17. import {ConfirmModal} from '@commonComp';
  18. import ChronicInfo from '@containers/ChronicInfo';//慢病推送模块
  19. class PushItems extends Component {
  20. constructor(props) {
  21. super(props);
  22. this.state = {
  23. moreAssay: false,
  24. moreCheck: false,
  25. show:true,
  26. showAssess:false //评估弹窗
  27. };
  28. this.showMore = this.showMore.bind(this);
  29. this.closeMore = this.closeMore.bind(this);
  30. this.billing = this.billing.bind(this);
  31. this.changeAssay = this.changeAssay.bind(this);
  32. this.changeCheck = this.changeCheck.bind(this);
  33. this.showTips = this.showTips.bind(this);
  34. this.hideTips = this.hideTips.bind(this);
  35. this.$cont = React.createRef();
  36. }
  37. showMore(type) {
  38. this.setState({ [type]: true });
  39. }
  40. closeMore(type) {
  41. this.setState({ [type]: false });
  42. }
  43. showAssessFn(){
  44. this.setState({
  45. showAssess:!this.state.showAssess
  46. });
  47. }
  48. getCurrentDate(){
  49. let myDate = new Date();
  50. let year = myDate.getFullYear(); //获取完整的年份(4位,1970-????)
  51. let mon = myDate.getMonth()-0+1; //获取当前月份(0-11,0代表1月)
  52. let day = myDate.getDate(); //获取当前日(1-31)
  53. let date = year+'-'+(mon<10?'0'+mon:mon)+'-'+(day<10?'0'+day:day);
  54. return date;
  55. }
  56. billing() {
  57. const { assay, check } = this.props.pushMessage;
  58. const checkedAssay = assay.filter(item => item.checked);
  59. const checkedCheck = check.filter(item => item.checked);
  60. this.props.billing(checkedAssay, checkedCheck);
  61. // if(checkedAssay.length > 0 || checkedCheck.length > 0) {
  62. // const Height = $(".src-components-BodyContainer-2SgEx").height();
  63. // const adviceHeight = $(".src-common-components-ItemBox-1Bpz3").height();
  64. // const winHeight = window.innerHeight;
  65. // const scrollTop = Height;
  66. // $('#addScrollEvent').scrollTop(100000)
  67. // }
  68. let obj = { //添加化验
  69. details: [],
  70. name: '',
  71. questionId: '',
  72. showType: 1,
  73. }
  74. let obj1 = { //添加辅检
  75. name: '',
  76. questionId: '',
  77. showType: 1,
  78. time:this.getCurrentDate(),
  79. value:''
  80. }
  81. if(checkedAssay.length > 0){
  82. let assayArr = [],tmpDetail=[]
  83. for(let i = 0;i < checkedAssay.length;i++){
  84. let tmpObj = JSON.parse(JSON.stringify(obj));
  85. if (checkedAssay[i].controlType == 0) {
  86. tmpDetail = checkedAssay[i].questionMapping
  87. }else if(checkedAssay[i].controlType == 1 || checkedAssay[i].controlType == 6){
  88. tmpDetail.push(checkedAssay[i])
  89. }
  90. tmpObj.questionId = checkedAssay[i].id
  91. tmpObj.name = checkedAssay[i].name
  92. tmpObj.details = tmpDetail
  93. assayArr.push(tmpObj)
  94. }
  95. store.dispatch(addLabel(assayArr))
  96. }
  97. if(checkedCheck.length > 0){
  98. let checkArr = []
  99. for(let i = 0;i < checkedCheck.length;i++){
  100. let tmpObj = JSON.parse(JSON.stringify(obj1));
  101. tmpObj.questionId = checkedCheck[i].id
  102. tmpObj.name = checkedCheck[i].name
  103. checkArr.push(tmpObj)
  104. }
  105. store.dispatch(addAssistLabel(checkArr))
  106. }
  107. if(checkedAssay.length > 0){
  108. document.getElementById("inspectResultData").scrollIntoView(true)
  109. }else{
  110. if(checkedCheck.length > 0){
  111. document.getElementById("assistResultData").scrollIntoView(true)
  112. }else{
  113. return;
  114. }
  115. }
  116. }
  117. changeAssay(item) {
  118. this.props.changeAssay(item);
  119. }
  120. changeCheck(item) {
  121. this.props.changeCheck(item);
  122. }
  123. showTips(tips) {
  124. const { getTipsDetails, showTipsDetailsModal } = this.props;
  125. getTipsDetails && getTipsDetails();
  126. showTipsDetailsModal && showTipsDetailsModal()
  127. }
  128. hideTips() {
  129. const { hideTipsDetailsModal } = this.props;
  130. hideTipsDetailsModal && hideTipsDetailsModal()
  131. }
  132. componentDidMount() {
  133. const height = getWindowInnerHeight() - 200;
  134. this.$cont.current.style.height = height + "px";
  135. windowEventHandler('resize', ()=>{
  136. const height = getWindowInnerHeight() - 200;
  137. this.$cont.current.style.height = height + "px";
  138. });
  139. }
  140. render() {
  141. const {
  142. vigilant,
  143. determine,
  144. doubt,
  145. possible,
  146. assay,
  147. check,
  148. tips,
  149. tmpFlg,
  150. } = this.props.pushMessage;
  151. const { tipsDiscalimer} = this.props;
  152. const { moreAssay, moreCheck ,show} = this.state;
  153. const {
  154. showMore,
  155. closeMore,
  156. billing,
  157. changeCheck,
  158. changeAssay,
  159. showTips
  160. } = this;
  161. let assayNum = 0;
  162. let assayNum2 = 0;
  163. let assayHide = assay.map((item, index) => {
  164. assayNum = assayNum + item.name.length + 2;
  165. if (assayNum > 28) {
  166. assayNum2 = assayNum2 + item.name.length + 2;
  167. if(assayNum2 > 21) {
  168. return;
  169. } else {
  170. return (
  171. <span>
  172. <input
  173. id={item.id + item.name}
  174. onChange={() => changeAssay(item)}
  175. type="checkbox"
  176. checked={item.checked}
  177. />
  178. <label for={item.id + item.name}>{item.name}</label>
  179. </span>
  180. );
  181. }
  182. } else {
  183. return (
  184. <span>
  185. <input
  186. id={item.id + item.name}
  187. onChange={() => changeAssay(item)}
  188. type="checkbox"
  189. checked={item.checked}
  190. />
  191. <label for={item.id + item.name}>{item.name}</label>
  192. </span>
  193. );
  194. }
  195. });
  196. const assays = assay.map(item => {
  197. return (
  198. <span>
  199. <input
  200. id={item.id + item.name}
  201. onChange={() => changeAssay(item)}
  202. type="checkbox"
  203. checked={item.checked}
  204. />
  205. <label for={item.id + item.name}>{item.name}</label>
  206. </span>
  207. );
  208. });
  209. let checkNum = 0;
  210. let checkNum2 = 0;
  211. let checkHide = check.map((item, index) => {
  212. checkNum = checkNum + item.name.length + 2;
  213. if (checkNum > 28) {
  214. checkNum2 = checkNum2 + item.name.length + 2;
  215. if(checkNum2 > 21) {
  216. return;
  217. }else {
  218. return (
  219. <span>
  220. <input
  221. id={item.id + item.name}
  222. onChange={() => changeCheck(item)}
  223. type="checkbox"
  224. checked={item.checked}
  225. />
  226. <label for={item.id + item.name}>{item.name}</label>
  227. </span>
  228. );
  229. }
  230. } else {
  231. return (
  232. <span>
  233. <input
  234. id={item.id + item.name}
  235. onChange={() => changeCheck(item)}
  236. type="checkbox"
  237. checked={item.checked}
  238. />
  239. <label for={item.id + item.name}>{item.name}</label>
  240. </span>
  241. );
  242. }
  243. });
  244. const checks = check.map(item => {
  245. return (
  246. <span>
  247. <input
  248. id={item.id + item.name}
  249. onChange={() => changeCheck(item)}
  250. type="checkbox"
  251. checked={item.checked}
  252. />
  253. <label for={item.id + item.name}>{item.name}</label>
  254. </span>
  255. );
  256. });
  257. const vigilants = vigilant.map((item, index) => {
  258. return <div key={item.id} className={style['push-diag-item']}><DiagnosticItem item={item}/></div>;
  259. });
  260. return (
  261. <div className={style["push-content-wrapper"]}>
  262. <div className={style["push-content"]} ref={this.$cont}>
  263. <div style = {{width: '420px'}}>
  264. {vigilant && vigilant.length > 0 && (
  265. <div className={style["vigilant"]}>
  266. <div className={style["title"]}>
  267. <img src={vigilantImg} />
  268. 警惕
  269. </div>
  270. <div className={style["vigilantContent"]}>{vigilants}</div>
  271. </div>
  272. )}
  273. {/* 不展示确诊 */}
  274. {/* {determine && determine.length>0 && <PushDiag titleBg='#FAEBEC' icon={possibleImg} title='确诊' diagList={determine} maxShowNum={28}/>} */}
  275. {doubt && doubt.length > 0 && (
  276. <PushDiag
  277. titleBg="#FAEBEC"
  278. icon={doubtImg}
  279. title="疑似诊断"
  280. diagList={doubt}
  281. maxShowNum={26}
  282. />
  283. )}
  284. {possible && possible.length > 0 && (
  285. <PushDiag
  286. titleBg="#FAEBEC"
  287. icon={possibleImg}
  288. title="可能诊断"
  289. diagList={possible}
  290. maxShowNum={26}
  291. />
  292. )}
  293. <div className={style["diagnose"]}>
  294. {vigilant.length === 0 &&
  295. determine.length === 0 &&
  296. doubt.length === 0 &&
  297. possible.length === 0 && (
  298. <div className={style["doubt"]}>
  299. <h1>
  300. <img src={doubtImg} />
  301. 疑似诊断
  302. </h1>
  303. <div className={style["no-push"]}>无</div>
  304. </div>
  305. )}
  306. </div>
  307. <div className={style["recommend"]}>
  308. <h1>
  309. <img src={recommendImg} />
  310. 推荐检验检查
  311. <div className={style["billing"]}
  312. style={assay.length === 0 && check.length === 0 ? {color: 'gray', border: '1px solid gray', cursor:'auto'} : ''}
  313. onClick={assay.length === 0 && check.length === 0 ? '' : billing}>
  314. 开单
  315. </div>
  316. </h1>
  317. <div>
  318. {assay.length === 0 && check.length === 0 ? (
  319. <span>无</span>
  320. ) : (
  321. <ul>
  322. <li className={style["firstLi"]}>
  323. <div className={style["title"]}>化验:</div>
  324. <div className={style["content"]}>
  325. {assay.length === 0
  326. ?<span >无</span>
  327. : moreAssay
  328. ? assays
  329. : assayHide}
  330. {assayNum2 > 21 ? (
  331. <span
  332. style={
  333. moreAssay
  334. ? { display: "none" }
  335. : { display: "inline-block" }
  336. }
  337. className={style["show"]}
  338. onClick={() => showMore("moreAssay")}
  339. >
  340. 更多
  341. <img src={showImg} />
  342. </span>
  343. ) : (
  344. ""
  345. )}
  346. <span
  347. style={
  348. moreAssay
  349. ? { display: "inline-block" }
  350. : { display: "none" }
  351. }
  352. className={style["close"]}
  353. onClick={() => closeMore("moreAssay")}
  354. >
  355. 收起
  356. <img src={hideImg} />
  357. </span>
  358. </div>
  359. </li>
  360. <li className={style["lastLi"]}>
  361. <div className={style["title"]}>检查:</div>
  362. <div className={style["content"]}>
  363. {check.length === 0
  364. ? "无"
  365. : moreCheck
  366. ? checks
  367. : checkHide}
  368. {checkNum2 > 21 ? (
  369. <span
  370. style={
  371. moreCheck
  372. ? { display: "none" }
  373. : { display: "inline-block" }
  374. }
  375. className={style["show"]}
  376. onClick={() => showMore("moreCheck")}
  377. >
  378. 更多
  379. <img src={showImg} />
  380. </span>
  381. ) : (
  382. ""
  383. )}
  384. <span
  385. style={
  386. moreCheck
  387. ? { display: "inline-block" }
  388. : { display: "none" }
  389. }
  390. className={style["close"]}
  391. onClick={() => closeMore("moreCheck")}
  392. >
  393. 收起
  394. <img src={hideImg} />
  395. </span>
  396. </div>
  397. </li>
  398. </ul>
  399. )}
  400. </div>
  401. </div>
  402. {show?<ChronicInfo></ChronicInfo>:''}
  403. <div className={style["tips"]}>
  404. <h1>
  405. <img src={tipsImg} />
  406. 提示信息
  407. </h1>
  408. <div className={style["content"]}>
  409. {tips && tips.introduceDetailList ? (
  410. <div>
  411. <div className={style["title"]}>
  412. {tips.tagName}
  413. <span
  414. className={style["tips-details"]}
  415. onClick={() => showTips(tips)}
  416. style={{display:tmpFlg?'none':'inline-block'}}
  417. >
  418. 详情
  419. </span>
  420. </div>
  421. {tips.introduceDetailList &&
  422. tips.introduceDetailList.map((item, index) => {
  423. return (
  424. item.position.indexOf("1") > -1 && (
  425. <div>
  426. <div
  427. dangerouslySetInnerHTML={{
  428. __html: item.title
  429. }}
  430. />
  431. <div
  432. dangerouslySetInnerHTML={{
  433. __html: item.content
  434. }}
  435. />
  436. {item.isReason === 1 && (
  437. <div className={style["warn"]}>
  438. {tipsDiscalimer.data.data[0]&&tipsDiscalimer.data.data[0].description}
  439. </div>
  440. )}
  441. </div>
  442. )
  443. );
  444. })}
  445. </div>
  446. ) : (
  447. "无"
  448. )}
  449. </div>
  450. </div>
  451. </div>
  452. </div>
  453. </div>
  454. );
  455. }
  456. }
  457. export default PushItems;