You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

131 lines
3.3 KiB

5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
4 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
5 months ago
  1. import React, { useEffect, useState } from "react";
  2. import "./App.scss";
  3. import { Outlet, useNavigate } from "react-router";
  4. import { Layout, ConfigProvider, message} from "antd";
  5. import { default as AppHeader } from "./components/Header";
  6. import { default as AppFooter } from "./components/Footer";
  7. import SideMenu from "./components/SideMenu";
  8. import { createWebSocket, sharedWsUrl } from "./services/socket";
  9. import { useAppDispatch } from "./utils/hooks";
  10. import { updateDeviceState } from "./store/device/deviceState";
  11. import { setSyncData } from "./store/ktj/orgState";
  12. import zhCN from 'antd/lib/locale/zh_CN'; // 引入中文语言包
  13. import { updateDevice } from "./store/features/contextSlice";
  14. import { getStatus, update } from "./services/ktj/org";
  15. import SyncData from "./components/syncData";
  16. const { Header, Footer, Sider, Content } = Layout;
  17. function App() {
  18. const dispatch = useAppDispatch();
  19. const navigate = useNavigate();
  20. useEffect(() => {
  21. //连接websocket
  22. const wsClient = createWebSocket(sharedWsUrl);
  23. const subscription = wsClient.dataOb.subscribe(data => {
  24. if (data.messageType === "DeviceContext") {
  25. // if (data.data.loginFlag) {
  26. // dispatch(updateUser(data.data));
  27. // navigate("/measure/config");
  28. // } else {
  29. // navigate("/login");
  30. // }
  31. } else if (data.messageType === "STATE" && data.path === "/api/subdevice/uartchanel/get-channel-state") {
  32. dispatch(updateDeviceState(data.data));
  33. } else if (data.messageType === "STATE" && data.path === "/api/profiler-state/get-state") {
  34. // console.log(data.data);
  35. dispatch(updateDevice(data.data));
  36. }else if(data.path === "/get-task-progress"){
  37. let syncData = data.data;
  38. if(syncData){
  39. let {
  40. progress,
  41. success
  42. } = syncData;
  43. if(syncData.hasOwnProperty('success') && !success){
  44. message.error(syncData.message)
  45. }
  46. //取整
  47. progress = Math.floor(progress)
  48. dispatch(setSyncData(progress))
  49. if(progress!== 100){
  50. setIsSync(true)
  51. }else{
  52. setIsSync(false)
  53. }
  54. }
  55. }
  56. });
  57. wsClient.connect();
  58. return () => subscription.unsubscribe();
  59. });
  60. useEffect(()=>{
  61. //是否需要同步数据
  62. queryStatus()
  63. },[])
  64. useEffect(() => {
  65. if (localStorage.getItem("user")) {
  66. navigate("/measure/action", { replace: true });
  67. } else {
  68. navigate("/login");
  69. }
  70. }, [navigate]);
  71. const [isSync, setIsSync] = useState(false)
  72. const queryStatus = () => {
  73. getStatus().then(res => {
  74. if(res.data){
  75. update();
  76. }
  77. })
  78. }
  79. const headerStyle: React.CSSProperties = {
  80. height: 64,
  81. padding: 0,
  82. };
  83. const footerStyle: React.CSSProperties = {
  84. height: 64,
  85. padding: 0,
  86. };
  87. const layoutStyle = {
  88. overflow: "hidden",
  89. };
  90. const closeModal = () => {
  91. setIsSync(false)
  92. }
  93. return (
  94. <div className="">
  95. <ConfigProvider locale={zhCN}>
  96. <Layout style={layoutStyle}>
  97. <Sider width="200px">
  98. <SideMenu />
  99. </Sider>
  100. <Layout>
  101. <Header style={headerStyle}>
  102. <AppHeader />
  103. </Header>
  104. <Content>
  105. <Outlet />
  106. </Content>
  107. <Footer style={footerStyle}>
  108. <AppFooter />
  109. </Footer>
  110. </Layout>
  111. </Layout>
  112. </ConfigProvider>
  113. {isSync && <SyncData isShowModal={isSync} closeModal={closeModal} setIsSync={setIsSync}></SyncData>}
  114. </div>
  115. );
  116. }
  117. export default App;