index.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. /*
  2. * @Author: your name
  3. * @Date: 2021-11-10 09:33:30
  4. * @LastEditTime: 2021-12-21 11:04:18
  5. * @LastEditors: Please set LastEditors
  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 { useState, useEffect } from 'react';
  10. import TopBar from './components/topBar';
  11. import IframePage from './components/iframePage';
  12. import { useModel,history } from 'umi';
  13. import './index.less';
  14. const IndexPage = () => {
  15. const {
  16. systemLists, //当前医院可选子系统列表
  17. setInitialState,
  18. openedSysLists, //当前已打开的系统列表
  19. loading,
  20. currentSelectedSys, //当前选中的系统
  21. logout,
  22. } = useModel('@@initialState', (model) => {
  23. console.log({ model });
  24. return {
  25. systemLists: model.initialState?.systemLists,
  26. setInitialState: model.setInitialState,
  27. openedSysLists: model.initialState?.openedSysLists,
  28. loading: model.loading,
  29. currentSelectedSys: model.initialState?.currentSelectedSys,
  30. logout: model.initialState?.logout,
  31. };
  32. });
  33. const [selectableSysList, setSelectableSysList] = useState<SystemListItem[]>(
  34. [],
  35. ); //可选的子应用
  36. const [openedTabs, setOpenTabs] = useState<SystemListItem[]>(); //当前已开启的子应用集合
  37. const [currentOpenedTab, setCurrentOpenedTab] = useState<SystemListItem>(); //当前激活的应用
  38. const onCurrentSystemChanged = async (data: SystemListItem) => {
  39. console.log({ 当前选中tab: data });
  40. setCurrentOpenedTab(data);
  41. const index = openedSysLists?.findIndex((t) => t.id == data.id);
  42. if (index != -1) {
  43. //现在打开的tab里已经存在
  44. await setInitialState((s) => {
  45. return {
  46. ...s,
  47. currentSelectedSys: data,
  48. };
  49. });
  50. } else {
  51. //新打开的tab
  52. await setInitialState((s) => {
  53. return {
  54. ...s,
  55. currentSelectedSys: data,
  56. openedSysLists: openedSysLists?.concat(data),
  57. };
  58. });
  59. }
  60. };
  61. const userPannelTabClick = async (tag: string) => {
  62. if (tag == 'LOGOUT') {
  63. if (logout) {
  64. await logout();
  65. }
  66. }
  67. };
  68. useEffect(() => {
  69. if (systemLists) setSelectableSysList(systemLists);
  70. }, [systemLists]);
  71. useEffect(() => {
  72. if (openedSysLists) setOpenTabs(openedSysLists);
  73. // console.log({openedSysLists});
  74. }, [openedSysLists]);
  75. useEffect(() => {
  76. setCurrentOpenedTab(currentSelectedSys); //当前激活的tab
  77. }, [currentSelectedSys]);
  78. useEffect(() => {
  79. if (systemLists) setSelectableSysList(systemLists);
  80. if (openedSysLists) setOpenTabs(openedSysLists);
  81. window.addEventListener('message', function(event){
  82. if (event.origin === "http://localhost:8804"){
  83. console.log(event.data);
  84. if(event.data.type == 'LOGOUT'){
  85. history.replace('/login')
  86. }
  87. }
  88. }, false);
  89. return ()=>{
  90. window.removeEventListener('message',()=>{});
  91. }
  92. }, []);
  93. if (loading) return <h1>Loading...</h1>;
  94. return (
  95. <div className="indexPage">
  96. <TopBar
  97. openedTabs={openedTabs ? openedTabs : []}
  98. onTabChange={(data) => {
  99. onCurrentSystemChanged(data);
  100. }}
  101. sysList={selectableSysList}
  102. currentTab={currentOpenedTab}
  103. userPannelTabClick={(tag) => userPannelTabClick(tag)}
  104. />
  105. {/* <MicroApp name='MedicalWisdomCheckSys' /> */}
  106. {openedTabs && (
  107. <IframePage activedItem={currentOpenedTab} list={openedTabs} />
  108. )}
  109. </div>
  110. );
  111. };
  112. export default IndexPage;