index.tsx 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-11-10 09:33:30
  4. * @LastEditTime: 2023-04-14 10:59:12
  5. * @LastEditors: code4eat awesomedema@gmail.com
  6. * @Description: 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
  7. * @FilePath: /KC-MiddlePlatform/src/pages/index.tsx
  8. */
  9. import { useModel, history, Location, Helmet } from 'umi';
  10. import './index.less';
  11. import { Skeleton, Divider } from 'antd';
  12. import { useState, useEffect } from 'react';
  13. import avatar from '../../../public/images/avatar.png';
  14. import TopBar from '@/components/topBar';
  15. import { FastEntry, FastEntryTabType } from './components/FastEntry';
  16. import { RecentlyVisited, RecentlyVisitedItemsType } from './components/RecentlyVisited';
  17. import { todoItem, TodoList } from './components/TodoList';
  18. import { getAllParams, getUserIndexData, todoListAct, UserInfo } from '@/service';
  19. import { MsgRecord } from './components/MsgRecord';
  20. import { getParamsManaTableData } from '../platform/setting/paramsMana/service';
  21. export interface IndexPageType {
  22. location: Location;
  23. }
  24. const IndexPage: React.FC<IndexPageType> = ({ location }) => {
  25. const {
  26. systemLists, //当前医院可选子系统列表
  27. setInitialState,
  28. userData
  29. } = useModel('@@initialState', (model) => {
  30. return {
  31. systemLists: model.initialState?.systemLists,
  32. setInitialState: model.setInitialState,
  33. userData: model.initialState?.userData,
  34. };
  35. });
  36. const [loading, setLoading] = useState(false);
  37. const [userInfo, set_userInfo] = useState<UserInfo>();
  38. const [fastEntry, set_fastEntry] = useState<FastEntryTabType[]>([]);
  39. const [recentlyVisitedList, set_recentlyVisitedList] = useState<RecentlyVisitedItemsType[]>([]);
  40. const [todoList, set_todoList] = useState<todoItem[]>([]);
  41. const [msgRecord, set_msgRecord] = useState([]);
  42. const [specialPageUrl, setspecialPageUrl] = useState<string | undefined>(undefined);
  43. const [iframeLoading, set_iframeLoading] = useState(false);
  44. const onLoadhandle = () => {
  45. set_iframeLoading(false);
  46. };
  47. const getIndexPageDataFunc = async () => {
  48. const resp = await getUserIndexData();
  49. if (resp) {
  50. set_userInfo(resp.userInfo);
  51. const fastEntryList = resp.fastEntrance.map((item: any) => ({
  52. name: item.name,
  53. path: item.path,
  54. menuId: item.menuId,
  55. systemId: item.systemId
  56. }));
  57. set_fastEntry(fastEntryList);
  58. set_todoList(resp.todoList.map((t: any) => ({
  59. id: t.id,
  60. status: 1,
  61. content: t.content,
  62. createDate: t.createDate,
  63. taskLevel: t.taskLevel,
  64. })));
  65. set_msgRecord(resp.messageRecords.map((t: any) => ({
  66. title: t.recordTitle,
  67. date: t.createDate,
  68. resolveTime: t.resolveTime,
  69. isProcess: t.isProcess,
  70. content: t.content
  71. })));
  72. }
  73. }
  74. const todoListClickHandle = async (id: number) => {
  75. const resp = await todoListAct([id]);
  76. if (resp) {
  77. getIndexPageDataFunc();
  78. }
  79. }
  80. const setIframeUrl = async () => {
  81. const resp = await getAllParams();
  82. if (resp) {
  83. const needItem = resp.filter((a: any) => a.code == '1644270043527254016');
  84. const userData = localStorage.getItem('userData');
  85. let token = '';
  86. if (userData) {
  87. const { youshuToken } = JSON.parse(userData);
  88. token = youshuToken
  89. }
  90. if (needItem.length > 0) {
  91. setspecialPageUrl(`http://eastern1.kcim-bi.163yun.com/dash/integration/56?rid=${needItem[0].value}&toolbar=[]&hideTitle=true&hideScaleBar=false&&scale=width&hidePageBar=false&token=${token}`);
  92. }
  93. }
  94. }
  95. useEffect(() => {
  96. getIndexPageDataFunc();
  97. const t = localStorage.getItem('visitedTabs');
  98. if (t) {
  99. const visitedPaths = JSON.parse(t);
  100. set_recentlyVisitedList(visitedPaths);
  101. }
  102. setIframeUrl();
  103. // const url = `${spacialPage[0].url}&token=${youshuToken}`;
  104. }, [])
  105. return (
  106. <div className="indexPage">
  107. <Helmet>
  108. <title>欢迎进入医管平台</title>
  109. </Helmet>
  110. <div className='pageContainer'>
  111. <div className="profileCard">
  112. <Skeleton loading={loading} active avatar>
  113. <div className='wraper'>
  114. <div className="avatar">
  115. <img src={avatar} alt="头像" />
  116. </div>
  117. <div className="description">
  118. <div className="rowOne">
  119. <div className="info">
  120. <div className="name">{userInfo?.name}</div>
  121. <div className="baseInfo">
  122. {`${userInfo?.gender} | ${userInfo?.title ? userInfo?.title : '-'} | ${userInfo?.major ? userInfo?.major : '-'}`}
  123. </div>
  124. </div>
  125. <div className='staffBaseInfo'>
  126. <div className='staffBaseInfoSpan'>
  127. <span className='spanName'>人员工号</span>
  128. <span className='spanValue'>{userInfo?.account ? userInfo?.account : '-'}</span>
  129. </div>
  130. <Divider type="vertical" className='Divider' />
  131. <div className='staffBaseInfoSpan'>
  132. <span className='spanName'>人员类别</span>
  133. <span className='spanValue'>{userInfo?.jobTitle ? userInfo?.jobTitle : '-'}</span>
  134. </div>
  135. <Divider type="vertical" className='Divider' />
  136. <div className='staffBaseInfoSpan'>
  137. <span className='spanName'>所属科室</span>
  138. <span className='spanValue'>{userInfo?.departmentName ? userInfo?.departmentName : '-'}</span>
  139. </div>
  140. <Divider type="vertical" className='Divider' />
  141. <div className='staffBaseInfoSpan'>
  142. <span className='spanName'>进院日期</span>
  143. <span className='spanValue'>{userInfo?.entryTime ? `${new Date(userInfo?.entryTime).getFullYear()}-${(new Date(userInfo?.entryTime).getMonth() + 1) > 10 ? (new Date(userInfo?.entryTime).getMonth() + 1) : '0' + (new Date(userInfo?.entryTime).getMonth() + 1)}-${(new Date(userInfo?.entryTime).getDate()) > 10 ? (new Date(userInfo?.entryTime).getDate()) : '0' + (new Date(userInfo?.entryTime).getDate())}` : '-'}</span>
  144. </div>
  145. </div>
  146. </div>
  147. <div className="rowTwo">
  148. <div className='medicalInfoSpan'>
  149. <div className='span'>资格证号:<span>{userInfo?.qualificationCertificateNo ? userInfo?.qualificationCertificateNo : '-'}</span></div>
  150. <div className='span'>执业证号:<span>{userInfo?.practiceCertificateNo ? userInfo?.practiceCertificateNo : '-'}</span></div>
  151. </div>
  152. <div className='medicalInfoSpan'>
  153. <div className='span'>医师级别:<span>{userInfo?.doctorLevel ? userInfo?.doctorLevel : '-'}</span></div>
  154. <div className='span'>执业状态:<span>{userInfo?.practiceStatus ? userInfo?.practiceStatus : '-'}</span></div>
  155. </div>
  156. <div className='medicalInfoSpan'>
  157. <div className='span'>执业科目:<span>{userInfo?.practiceSubject ? userInfo?.practiceSubject : '-'}</span></div>
  158. <div className='span'>备注:<span>{userInfo?.remark ? userInfo?.remark : '-'}</span></div>
  159. </div>
  160. <div className='medicalInfoSpan'>
  161. <div className='span'>执业类别:<span>{userInfo?.practiceCate ? userInfo?.practiceCate : '-'}</span></div>
  162. </div>
  163. </div>
  164. </div>
  165. </div>
  166. </Skeleton>
  167. </div>
  168. <div className='cardTwo '>
  169. <FastEntry data={fastEntry} />
  170. <RecentlyVisited data={recentlyVisitedList} />
  171. </div>
  172. <div className='cardThree'>
  173. <TodoList todoList={todoList} todoListClickHandle={todoListClickHandle} />
  174. <MsgRecord list={msgRecord} />
  175. </div>
  176. <div className='iframe'>
  177. <Skeleton loading={iframeLoading} paragraph={{ rows: 50 }} active />
  178. <iframe
  179. onLoad={() => onLoadhandle()}
  180. style={{ width: '100%', height: '600px', border: 'none' }}
  181. src={specialPageUrl}
  182. ></iframe>
  183. </div>
  184. </div>
  185. </div>
  186. );
  187. };
  188. export default IndexPage;