index.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import {useEffect,useState} from 'react';
  2. import { useDispatch } from 'react-redux'
  3. import { setSys,setUser } from '@reducers/userInfo.js';
  4. import { Radio, Row, Col,Steps, Select, Button } from 'antd';
  5. import AHeader from '../AHeader'
  6. import './index.less'
  7. import iconLb from '@images/lb.png';
  8. import iconHis from '@images/his.png';
  9. import rightIcon from '@images/right.png';
  10. import {message} from "antd/lib/index";
  11. import { getCookie,setCookie } from "@utils/index";
  12. import apiObj from '@api/index';
  13. const {api,xPost,interceptors} = apiObj;
  14. const { Step } = Steps;
  15. const {Option} = Select;
  16. function SysChoose({history}) {
  17. //const [current, setCurrent] = useState(1);
  18. const [sysId, setSysId] = useState(null); //选中的系统id
  19. const [sysName, setSysName] = useState(''); //选中的系统名称
  20. const [subHisId, setSubHisId] = useState(''); //选中的子医院id
  21. const [showId, setShowId] = useState(''); //要显示子医院列表的医院id
  22. const [orgList, setOrgList] = useState([]); //系统列表
  23. const [hisList, setHisList] = useState([]); //当前选中系统下的医院列表
  24. const dispatch = useDispatch();
  25. const steps = [
  26. {
  27. title: '选择系统',
  28. content: 'First-content',
  29. },
  30. {
  31. title: '选择组织',
  32. content: 'Second-content',
  33. },
  34. ];
  35. //系统单选
  36. function onChange(e){
  37. const id = e.target.value;
  38. const checkOrg = orgList.find((it)=>it.id===id);
  39. const his =checkOrg.hospitals;
  40. setSysId(id);
  41. setHisList(his);
  42. }
  43. //获取组织列表
  44. function getOrgList(){
  45. xPost(api.getUserHospitals).then((res)=>{
  46. if(res.data.code===200){
  47. const data = res.data.data;
  48. const { software,userInfo } = data;
  49. setOrgList(software);
  50. setSysName(software[0].name)
  51. setSysId(software[0].id);
  52. setCookie('userId',userInfo.id);
  53. setCookie('userName',userInfo.name);
  54. dispatch(setUser(userInfo));
  55. localStorage.setItem('software', JSON.stringify(software));
  56. //默认显示第一个系统的组织
  57. setHisList(software[0]?software[0].hospitals:[]);
  58. setTimeout(()=>{
  59. if (data.jump) {
  60. getIn(software[0].hospitals[0].hospitalId, software[0].hospitals[0].type, software[0].id)
  61. }
  62. },500)
  63. }else{
  64. message.warning(res.data.msg||'获取医院列表失败');
  65. }
  66. })
  67. }
  68. //点击进入
  69. function getIn(id, type, sysid){
  70. dispatch(setSys({sysId,sysName,hisId:id}));
  71. setCookie('systemId', sysId || sysid);
  72. setCookie('hospitalId',id);
  73. setCookie('hosType', type);
  74. interceptors();
  75. history.push("/manage");
  76. }
  77. //显示子医院列表,传空为隐藏,传id为显示
  78. function showSubPop(id){
  79. setShowId(id);
  80. }
  81. function onSelect(id){
  82. setSubHisId(id);
  83. }
  84. useEffect(()=>{
  85. getOrgList();
  86. },[]);
  87. return (
  88. <>
  89. <AHeader hideName={true}></AHeader>
  90. <div className="choose-container">
  91. <div className="banner">
  92. <p className='title'>欢迎登录AI病案质控平台!</p>
  93. <div className="tip-warn">
  94. <img src={iconLb} alt=""/>
  95. <span>平台检测到您的账号关联以下系统及组织,请先选择您想要进入的系统再选择要进入的组织。</span>
  96. </div>
  97. </div>
  98. <div className="content">
  99. <Steps current={1} className='steps-bar'>
  100. {steps.map(item => (
  101. <Step key={item.title} title={item.title} />
  102. ))}
  103. </Steps>
  104. <div className="steps-content">
  105. <div className="item">
  106. <div className="item-title">
  107. 选择系统(单选)
  108. </div>
  109. <div className="item-content">
  110. <Radio.Group
  111. onChange={onChange}
  112. value={sysId}>
  113. {orgList.map((it)=>{
  114. return <Radio key={it.id} value={it.id}>{it.name}</Radio>
  115. })}
  116. </Radio.Group>
  117. </div>
  118. </div>
  119. <div className="item">
  120. <div className="item-title">
  121. 选择组织(单选)
  122. </div>
  123. <div className="item-content">
  124. <div className="row-container">
  125. <Row className='item-rows-box' gutter={16}>
  126. {
  127. hisList.map((it)=>{
  128. return (
  129. <Col className="box-row" key={it.hospitalId} span={8}>
  130. <div className='card'>
  131. <div className="icon">
  132. <img src={iconHis} alt="icon"/>
  133. </div>
  134. <div className="card-content">
  135. <div className='name'>{it.hospitalName}</div>
  136. {it.children?(<><a className='get-in' onClick={()=>showSubPop(it.hospitalId)}>点击选择 <img src={rightIcon} alt="箭头"/></a>
  137. {showId===it.hospitalId?<div className="pop-select">
  138. <p className='pop-title'>
  139. <span>选择子组织</span>
  140. <a className='close' onClick={()=>showSubPop('')}>收起</a>
  141. </p>
  142. <Select size='small' placeholder='请选择' onChange={(id)=>onSelect(id)} style={{ width: 278,marginRight:'6px' }}>
  143. {(it.children||[]).map((item)=>{
  144. return (<Option value={item.hospitalId} key={item.hospitalId}>{item.hospitalName}</Option>)
  145. })
  146. }
  147. </Select>
  148. <Button type='primary' size='small' onClick={()=>getIn(subHisId)}>进入</Button>
  149. </div> : ''}</>) : (<a className='get-in' onClick={() => getIn(it.hospitalId,it.type)}>点击进入 <img src={rightIcon} alt="箭头"/></a>)}
  150. </div>
  151. </div>
  152. </Col>
  153. )
  154. })
  155. }
  156. </Row>
  157. </div>
  158. </div>
  159. </div>
  160. </div>
  161. </div>
  162. </div>
  163. </>
  164. )
  165. }
  166. export default SysChoose;