From f789d1d5841d0f8feefc16570189304c9d9204a9 Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Thu, 31 Oct 2024 18:31:40 +0800
Subject: [PATCH] 加载倾斜模型 图层组件封装 路由相关调整 项目基础路径调整

---
 src/views/rt/components/box/fireContent.vue               |    0 
 src/views/rs/components/box/occurStatistics.vue           |    0 
 .gitignore                                                |    1 
 src/views/rs/components/box/dataContent.vue               |    0 
 src/views/rs/components/box/fireTrend.vue                 |    0 
 src/styles/base/dc-base.scss                              |   41 ++++
 src/views/rt/components/box/unitContent.vue               |    0 
 pnpm-lock.yaml                                            |   11 +
 src/views/rs/components/box/publicContent.vue             |    0 
 src/views/rs/components/box/fireSource.vue                |    0 
 src/views/rt/components/box/publicContent.vue             |    0 
 src/views/rt/index.vue                                    |    0 
 src/views/rt/components/box/dataContent.vue               |    0 
 src/views/rt/components/leftContainer.vue                 |   48 ++++
 src/views/rs/components/leftContainer.vue                 |    0 
 src/views/rt/components/box/fireTrend.vue                 |    0 
 vite.config.js                                            |    8 
 src/views/layout/components/mainMenu.vue                  |   12 
 src/views/rs/components/box/unitContent.vue               |    0 
 src/views/layout/components/scomponents/layersControl.vue |  174 +++++++++++++++++
 src/views/layout/components/mainTool.vue                  |   27 +-
 src/styles/base/index.scss                                |   39 ---
 src/views/rt/components/box/occurStatistics.vue           |    0 
 src/router/index.js                                       |   28 +-
 src/views/rs/components/rightContainer.vue                |    0 
 src/views/rs/components/box/fireContent.vue               |    0 
 src/styles/base/container.scss                            |    2 
 .env.development                                          |    4 
 /dev/null                                                 |   79 -------
 src/main.js                                               |   10 
 src/views/rt/components/rightContainer.vue                |    0 
 package.json                                              |    9 
 .env.production                                           |   14 +
 src/hooks/initMap.js                                      |   19 -
 src/views/rs/index.vue                                    |    0 
 src/views/rt/components/box/fireSource.vue                |    0 
 src/page/login.vue                                        |    3 
 src/views/layout/components/scomponents/baseMap.vue       |   15 +
 38 files changed, 366 insertions(+), 178 deletions(-)

diff --git a/.env.development b/.env.development
index d896f11..fcfda8b 100644
--- a/.env.development
+++ b/.env.development
@@ -13,7 +13,7 @@
 VITE_APP_ENV = 'development'
 
 #接口地址
-VITE_APP_API=/api
+VITE_APP_API=/zhyqapi
 
 #页面基础路径
-VITE_APP_BASE=/bigScreen
+VITE_APP_BASE=/zhyq/
diff --git a/.env.production b/.env.production
index 38120f9..16d9b5e 100644
--- a/.env.production
+++ b/.env.production
@@ -1,13 +1,23 @@
+###
+ # @Author: shuishen 1109946754@qq.com
+ # @Date: 2024-10-25 11:21:30
+ # @LastEditors: shuishen 1109946754@qq.com
+ # @LastEditTime: 2024-10-31 10:37:36
+ # @FilePath: \bigScreen\.env.production
+ # @Description: 
+ # 
+ # Copyright (c) 2024 by shuishen, All Rights Reserved. 
+### 
 #生产环境配置
 VITE_APP_ENV = 'production'
 
 #接口地址
 #填写前缀 [/api] 需要用nginx进行反向代理
 #填写地址 [https://api.bladex.cn] 只需要保证接口支持跨域即可, 无需再做代理
-VITE_APP_API=/api
+VITE_APP_API=/zhyqapi
 
 #页面基础路径
-VITE_APP_BASE=/bigScreen
+VITE_APP_BASE=/zhyq/
 
 # 是否在打包时开启压缩,支持 gzip 和 brotli
 VITE_BUILD_COMPRESS = gzip
diff --git a/.gitignore b/.gitignore
index a547bf3..6e37a37 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,6 +8,7 @@
 lerna-debug.log*
 
 node_modules
+zhyq
 dist
 dist-ssr
 *.local
diff --git a/package.json b/package.json
index da41c69..8728974 100644
--- a/package.json
+++ b/package.json
@@ -17,15 +17,16 @@
     "@element-plus/icons-vue": "^2.3.1",
     "@fortawesome/fontawesome-free": "^6.6.0",
     "axios": "^1.7.7",
+    "crypto-js": "^4.1.1",
     "element-plus": "^2.8.6",
+    "element-tree-line": "^0.2.1",
+    "js-base64": "^3.7.4",
+    "js-md5": "^0.7.3",
     "nprogress": "^0.2.0",
     "pinia": "^2.2.4",
     "pinia-plugin-persist": "^1.0.0",
     "vue": "^3.5.12",
-    "vue-router": "^4.4.5",
-    "crypto-js": "^4.1.1",
-    "js-base64": "^3.7.4",
-    "js-md5": "^0.7.3"
+    "vue-router": "^4.4.5"
   },
   "devDependencies": {
     "@vitejs/plugin-basic-ssl": "^1.1.0",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 336b9d5..15d95ec 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,6 +26,9 @@
   element-plus:
     specifier: ^2.8.6
     version: 2.8.6(vue@3.5.12)
+  element-tree-line:
+    specifier: ^0.2.1
+    version: 0.2.1(vue@3.5.12)
   js-base64:
     specifier: ^3.7.4
     version: 3.7.4
@@ -987,6 +990,14 @@
       - '@vue/composition-api'
     dev: false
 
+  /element-tree-line@0.2.1(vue@3.5.12):
+    resolution: {integrity: sha512-YWHftDSOFiBuw49drxJV7Yi7pCqPpwBBBeQmySjchcxU3uUOAu72FDLK5RyTGJ5qt4Ci+yoUg7zJqsFP5u7N5A==}
+    peerDependencies:
+      vue: ^2.6.11 || ^3.2.0
+    dependencies:
+      vue: 3.5.12
+    dev: false
+
   /encodeurl@1.0.2:
     resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
     engines: {node: '>= 0.8'}
diff --git a/src/hooks/initMap.js b/src/hooks/initMap.js
index 872ce88..fbcc970 100644
--- a/src/hooks/initMap.js
+++ b/src/hooks/initMap.js
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2024-10-25 15:09:55
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-10-30 18:09:34
+ * @LastEditTime: 2024-10-31 18:27:53
  * @FilePath: \bigScreen\src\hooks\initMap.js
  * @Description: 
  * 
@@ -23,7 +23,7 @@
 
     nextTick(() => {
       DC.ready({
-        baseUrl: `${VITE_APP_BASE}/libs/dc-sdk/resources/`
+        baseUrl: `${VITE_APP_BASE}libs/dc-sdk/resources/`
       }).then(() => {
 
         viewer = new DC.Viewer('viewer-container')
@@ -33,21 +33,6 @@
         global.$viewer = viewer
 
         store.setLoadMap(true)
-
-        // let layer = new DC.HtmlLayer('layer')
-        // viewer.addLayer(layer)
-        // let divIcon = new DC.DivIcon(
-        //   new DC.Position(125, 25),
-        //   `<div class="public-map-popup">
-        //     <div class="marsBlueGradientPnl">
-        //       <div>指挥室</div>
-        //     </div>
-        //   </div>`
-        // )
-
-        // divIcon.setStyle({
-        // })
-        // layer.addOverlay(divIcon)
       })
     })
   }
diff --git a/src/main.js b/src/main.js
index f11b4cb..689bcb1 100644
--- a/src/main.js
+++ b/src/main.js
@@ -2,13 +2,13 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2024-10-25 10:56:27
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-10-28 10:53:47
+ * @LastEditTime: 2024-10-31 11:01:20
  * @FilePath: \bigScreen\src\main.js
  * @Description: 
  * 
  * Copyright (c) 2024 by shuishen, All Rights Reserved. 
  */
-import { createApp } from 'vue'
+import { createApp, h } from 'vue'
 import { createPinia } from 'pinia'
 import router from '@/router/index'
 
@@ -24,6 +24,9 @@
 // 全局组件自动注册
 import components from '@/components/index'
 
+import { getElementLabelLine } from 'element-tree-line';
+import 'element-tree-line/dist/style.css';
+
 import * as DC from '@dvgis/dc-sdk'
 import '@dvgis/dc-sdk/dist/dc.min.css'
 window.DC = Object.create(DC)  //Since the imported DC is read-only, it needs to be re-expanded
@@ -31,6 +34,9 @@
 const pinia = createPinia()
 
 pinia.use(piniaPersistPlugin)
+const ElementLabelLine = getElementLabelLine(h);
+app.component(ElementLabelLine.name, ElementLabelLine);
+
 app.use(router)
 app.use(ElementPlus)
 app.use(pinia)
diff --git a/src/page/login.vue b/src/page/login.vue
index aa7b179..8124b0c 100644
--- a/src/page/login.vue
+++ b/src/page/login.vue
@@ -111,10 +111,9 @@
       .input {
         margin: 30px 0;
         width: 300px;
-        padding: 10px 0px;
+        padding: 10px 10px 10px 40px;
         background-color: rgba(0, 0, 0, 0);
         color: #ffffff;
-        padding-left: 40px;
         border-width: 0px;
         font-size: 18px;
       }
diff --git a/src/router/index.js b/src/router/index.js
index 7b4a120..02778d7 100644
--- a/src/router/index.js
+++ b/src/router/index.js
@@ -2,13 +2,13 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2024-10-25 16:35:31
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-10-30 15:01:50
+ * @LastEditTime: 2024-10-31 18:22:25
  * @FilePath: \bigScreen\src\router\index.js
  * @Description: 
  * 
  * Copyright (c) 2024 by shuishen, All Rights Reserved. 
  */
-import { createRouter, createWebHistory } from 'vue-router'
+import { createRouter, createWebHistory, createWebHashHistory } from 'vue-router'
 
 const routes = [
   {
@@ -39,6 +39,13 @@
         component: () => import('@/views/survey/index.vue')
       },
       {
+        path: 'rs',
+        meta: {
+          title: '固定风险源'
+        },
+        component: () => import('@/views/rs/index.vue')
+      },
+      {
         path: 'space',
         meta: {
           title: '应急空间'
@@ -53,18 +60,18 @@
         component: () => import('@/views/supplies/index.vue')
       },
       {
-        path: 'equipment',
-        meta: {
-          title: '应急设备'
-        },
-        component: () => import('@/views/equipment/index.vue')
-      },
-      {
         path: 'pac',
         meta: {
           title: '三级防控'
         },
         component: () => import('@/views/pac/index.vue')
+      },
+      {
+        path: 'rt',
+        meta: {
+          title: '救援队伍'
+        },
+        component: () => import('@/views/rt/index.vue')
       }
     ]
   },
@@ -73,7 +80,8 @@
 const { VITE_APP_BASE } = import.meta.env
 
 const router = createRouter({
-  history: createWebHistory(VITE_APP_BASE),
+  base: VITE_APP_BASE,
+  history: createWebHashHistory(VITE_APP_BASE),
   routes
 })
 
diff --git a/src/styles/base/container.scss b/src/styles/base/container.scss
index 21c003e..280a03b 100644
--- a/src/styles/base/container.scss
+++ b/src/styles/base/container.scss
@@ -8,11 +8,13 @@
 body {
   width: 100%;
   height: 100%;
+  overflow: hidden;
 }
 
 #app {
   width: 100%;
   height: 100%;
+  overflow: hidden;
 }
 
 .cursor-p {
diff --git a/src/styles/base/dc-base.scss b/src/styles/base/dc-base.scss
new file mode 100644
index 0000000..fd0295d
--- /dev/null
+++ b/src/styles/base/dc-base.scss
@@ -0,0 +1,41 @@
+.div-icon {
+  padding: 0 !important;
+}
+
+.public-map-popup {
+  position: absolute;
+  bottom: 60px;
+  pointer-events: all;
+  display: block;
+  transform-origin: left bottom;
+  transform: translate(-50%, 0px);
+  z-index: auto;
+
+  .marsBlueGradientPnl {
+    text-align: center;
+    padding: 5px 30px;
+    margin: 0;
+    color: #fff;
+    background: linear-gradient(rgb(7 10 203 / 75%), rgb(16 238 220));
+    -webkit-border-radius: 5px;
+    -moz-border-radius: 5px;
+    border-radius: 5px;
+    max-height: 130px;
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    user-select: none;
+    white-space: nowrap;
+
+    &::after {
+      content: "";
+      position: absolute;
+      bottom: -60px;
+      left: calc(50% - 3px);
+      display: block;
+      width: 3px;
+      height: 60px;
+      border-right: 3px solid #2bcdbb;
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/styles/base/index.scss b/src/styles/base/index.scss
index 29aa729..54b25fe 100644
--- a/src/styles/base/index.scss
+++ b/src/styles/base/index.scss
@@ -1,39 +1,2 @@
 @use './container.scss'as *;
-
-.public-map-popup {
-  position: absolute;
-  left: 0;
-  top: 0;
-  pointer-events: all;
-  display: block;
-  transform-origin: left bottom;
-  z-index: auto;
-
-  .marsBlueGradientPnl {
-    text-align: center;
-    padding: 5px 30px;
-    margin: 0;
-    color: #fff;
-    background: linear-gradient(rgb(7 10 203 / 75%), rgb(16 238 220));
-    -webkit-border-radius: 5px;
-    -moz-border-radius: 5px;
-    border-radius: 5px;
-    max-height: 130px;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    -ms-user-select: none;
-    user-select: none;
-    white-space: nowrap;
-
-    &::after {
-      content: "";
-      position: absolute;
-      bottom: -60px;
-      left: calc(50% - 3px);
-      display: block;
-      width: 3px;
-      height: 60px;
-      border-right: 3px solid #2bcdbb;
-    }
-  }
-}
\ No newline at end of file
+@use './dc-base.scss'as *;
\ No newline at end of file
diff --git a/src/views/layout/components/mainMenu.vue b/src/views/layout/components/mainMenu.vue
index 5078cde..93cfe9f 100644
--- a/src/views/layout/components/mainMenu.vue
+++ b/src/views/layout/components/mainMenu.vue
@@ -22,6 +22,10 @@
       path: '/layout/survey'
     },
     {
+      menuName: '固定风险源',
+      path: '/layout/rs'
+    },
+    {
       menuName: '应急空间',
       path: '/layout/space'
     },
@@ -30,13 +34,13 @@
       path: '/layout/supplies'
     },
     {
-      menuName: '应急设备',
-      path: '/layout/equipment'
-    },
-    {
       menuName: '三级防控',
       path: '/layout/pac'
     },
+    {
+      menuName: '救援队伍',
+      path: '/layout/rt'
+    },
   ]
 )
 
diff --git a/src/views/layout/components/mainTool.vue b/src/views/layout/components/mainTool.vue
index 2ae6bdc..988500c 100644
--- a/src/views/layout/components/mainTool.vue
+++ b/src/views/layout/components/mainTool.vue
@@ -6,16 +6,17 @@
     </el-button>
   </div>
 
-  <base-map v-show="showBaseMap" @close="closeBox"></base-map>
-
+  <base-map v-show="currentComponent == 'map'" @close="closeBox"></base-map>
+  <layers-control v-show="currentComponent == 'layers'" @close="closeBox"></layers-control>
   <tool-list :moreToolShow="moreToolShow" @close="closeBox"></tool-list>
 </template>
 
 <script setup>
 import baseMap from './scomponents/baseMap.vue'
+import layersControl from './scomponents/layersControl.vue'
 import toolList from './scomponents/toolList.vue'
 
-let showBaseMap = ref(false)
+const currentComponent = ref('')
 let moreToolShow = ref(false)
 
 const btnGroup = [
@@ -27,31 +28,29 @@
   {
     name: '图层',
     icon: 'fa fa-tasks',
-    key: 'task'
+    key: 'layers',
   },
   {
     name: '工具',
     icon: 'fa fa-cubes',
-    key: 'tool'
+    key: 'tool',
   },
 ]
 
 const btnClick = (item) => {
-
-  if (item.key == 'map') {
-    showBaseMap.value = !showBaseMap.value
-
-  }
-
   if (item.key == 'tool') {
     moreToolShow.value = !moreToolShow.value
+  } else {
+    currentComponent.value = item.key
   }
 }
 
 const closeBox = (type) => {
-  if (type == 'map') showBaseMap.value = false
-
-  if (type == 'tool') moreToolShow.value = false
+  if (type == 'tool') {
+    moreToolShow.value = false
+  } else {
+    currentComponent.value = ''
+  }
 }
 </script>
 
diff --git a/src/views/layout/components/scomponents/baseMap.vue b/src/views/layout/components/scomponents/baseMap.vue
index 7d5f699..ff31100 100644
--- a/src/views/layout/components/scomponents/baseMap.vue
+++ b/src/views/layout/components/scomponents/baseMap.vue
@@ -289,6 +289,21 @@
     global.$viewer.setTerrain()
   }
 } 
+
+  let layer = new DC.HtmlLayer('layer')
+  global.$viewer.addLayer(layer)
+        let divIcon = new DC.DivIcon(
+          new DC.Position(124, 24, 100),
+          `<div class="public-map-popup">
+            <div class="marsBlueGradientPnl">
+              <div>指挥室</div>
+            </div>
+          </div>`
+        )
+
+        divIcon.setStyle({
+        })
+        layer.addOverlay(divIcon)
 </script>
 
 <style lang="scss" scoped>
diff --git a/src/views/layout/components/scomponents/layersControl.vue b/src/views/layout/components/scomponents/layersControl.vue
new file mode 100644
index 0000000..b3ca479
--- /dev/null
+++ b/src/views/layout/components/scomponents/layersControl.vue
@@ -0,0 +1,174 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2024-10-31 10:47:29
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2024-10-31 18:16:33
+ * @FilePath: \bigScreen\src\views\layout\components\scomponents\layersControl.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2024 by shuishen, All Rights Reserved. 
+-->
+<template>
+  <public-box>
+    <template #name>
+      <div class="name"><i class="fa fa-tasks"></i>&nbsp;图层</div>
+    </template>
+
+    <template #close>
+      <div class="close" @click="$emit('close', 'layers')"><i class="fa fa-close"></i></div>
+    </template>
+
+    <template #content>
+      <div class="tree-content">
+        <el-tree ref="tree" :data="data" draggable="" show-checkbox node-key="id" :default-expanded-keys="[2, 3]"
+          :default-checked-keys="[5]" :props="defaultProps" :indent="treeProps['indent']" @check="handleCheckChange">
+          <template v-slot:default="{ node }">
+            <element-tree-line :node="node" :showLabelLine="treeProps['showLabelLine']" :indent="treeProps['indent']">
+              <!-- 自定义label的slot -->
+              <template v-slot:node-label>
+                <span style="font-size: 12px">
+                  {{ node.label }}
+                  <i class="el-icon-eleme"></i></span>
+              </template>
+              <!-- 在右边追加内容的slot -->
+              <!-- <template v-slot:after-node-label>
+                <span style="padding-right: 10px">
+                  <el-button type="primary" size="mini" @click.stop="openDrawer(node)">新增子节点</el-button>
+                  <el-button type="primary" size="mini" @click.stop="openDrawer(node)">修改</el-button>
+                  <el-button type="danger" size="mini" @click.stop="openDialog">删除</el-button></span>
+              </template> -->
+            </element-tree-line>
+          </template>
+        </el-tree>
+      </div>
+    </template>
+  </public-box>
+</template>
+
+<script setup>
+const { VITE_APP_BASE } = import.meta.env
+import { getViewer } from 'utils/getViewer'
+const globalViewer = getViewer()
+
+const treeProps = {
+  indent: 16,
+  showLabelLine: true,
+}
+
+const data = [
+  {
+    id: 1,
+    label: '三维模型',
+    children: [
+      {
+        id: 4,
+        label: '倾斜摄影',
+        children: [
+          {
+            id: 9,
+            label: '化工园区',
+            type: 'layer',
+            subType: '3Dtile',
+            url: VITE_APP_BASE + 'mx/tileset.json'
+          },
+        ],
+      },
+    ],
+  },
+]
+
+const defaultProps = {
+  children: 'children',
+  label: 'label',
+}
+
+const checkType = (value) => {
+  if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
+    return 'obj'
+  } else if (Array.isArray(value)) {
+    return 'arr'
+  }
+}
+// 用于存储收集到的节点的数组  
+const collectedNodes = reactive([])
+
+// 递归函数,收集所有 flag 为 true 的子节点  
+const collectNodesWithFlag = (nodes) => {
+  if (checkType(nodes) == 'obj') {
+    if (nodes.type == 'layer') {
+      collectedNodes.value.push(nodes)
+    }
+    if (nodes.children && nodes.children.length > 0) {
+      collectNodesWithFlag(nodes.children)
+      return
+    }
+  }
+
+  if (checkType(nodes) == 'arr') {
+    nodes.forEach(item => {
+      if (item.type == 'layer') {
+        collectedNodes.value.push(item)
+      }
+
+      if (item.children && item.children.length > 0) {
+        collectNodesWithFlag(item.children)
+      }
+    })
+  }
+}
+
+let addTileLayers = {}
+let tileLayers = new DC.TilesetLayer('tileLayers')
+globalViewer.addLayer(tileLayers)
+
+const handleCheckChange = (data, options) => {
+  collectedNodes.value = []
+  collectNodesWithFlag(data)
+
+  collectedNodes.value.forEach(item => {
+    if (options.checkedKeys.some(i => i == item.id)) {
+      if (item.subType == '3Dtile') {
+        addTileLayers[item.layerName] = new DC.Tileset(
+          item.url
+        )
+        tileLayers.addOverlay(addTileLayers[item.layerName])
+        globalViewer.flyTo(addTileLayers[item.layerName])
+      }
+    } else {
+      if (item.subType == '3Dtile') {
+        tileLayers.removeOverlay(addTileLayers[item.layerName])
+
+        delete addTileLayers[item.layerName]
+      }
+    }
+  })
+}
+</script>
+
+<style lang="scss" scoped>
+.tree-content {
+  min-width: 200px;
+  padding: 10px;
+
+  ::v-deep(.el-tree) {
+    color: #fff;
+    background: transparent;
+
+    /* 鼠标浮动过的背景颜色 */
+    .el-tree-node__content:hover {
+      background: #0074b7;
+    }
+
+    /* 鼠标点击时节点的背景颜色 */
+    .el-tree-node:focus>.el-tree-node__content {
+      background-color: #0074b7 !important;
+      color: rgb(255, 255, 255);
+    }
+
+    /* 鼠标失去焦点时节点背景的颜色 */
+    .el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content {
+      background: rgb(0, 129, 204);
+    }
+  }
+}
+</style>
\ No newline at end of file
diff --git a/src/views/equipment/components/box/dataContent.vue b/src/views/rs/components/box/dataContent.vue
similarity index 100%
copy from src/views/equipment/components/box/dataContent.vue
copy to src/views/rs/components/box/dataContent.vue
diff --git a/src/views/equipment/components/box/fireContent.vue b/src/views/rs/components/box/fireContent.vue
similarity index 100%
copy from src/views/equipment/components/box/fireContent.vue
copy to src/views/rs/components/box/fireContent.vue
diff --git a/src/views/equipment/components/box/fireSource.vue b/src/views/rs/components/box/fireSource.vue
similarity index 100%
copy from src/views/equipment/components/box/fireSource.vue
copy to src/views/rs/components/box/fireSource.vue
diff --git a/src/views/equipment/components/box/fireTrend.vue b/src/views/rs/components/box/fireTrend.vue
similarity index 100%
copy from src/views/equipment/components/box/fireTrend.vue
copy to src/views/rs/components/box/fireTrend.vue
diff --git a/src/views/equipment/components/box/occurStatistics.vue b/src/views/rs/components/box/occurStatistics.vue
similarity index 100%
copy from src/views/equipment/components/box/occurStatistics.vue
copy to src/views/rs/components/box/occurStatistics.vue
diff --git a/src/views/equipment/components/box/publicContent.vue b/src/views/rs/components/box/publicContent.vue
similarity index 100%
copy from src/views/equipment/components/box/publicContent.vue
copy to src/views/rs/components/box/publicContent.vue
diff --git a/src/views/equipment/components/box/unitContent.vue b/src/views/rs/components/box/unitContent.vue
similarity index 100%
copy from src/views/equipment/components/box/unitContent.vue
copy to src/views/rs/components/box/unitContent.vue
diff --git a/src/views/equipment/components/leftContainer.vue b/src/views/rs/components/leftContainer.vue
similarity index 100%
rename from src/views/equipment/components/leftContainer.vue
rename to src/views/rs/components/leftContainer.vue
diff --git a/src/views/equipment/components/rightContainer.vue b/src/views/rs/components/rightContainer.vue
similarity index 100%
copy from src/views/equipment/components/rightContainer.vue
copy to src/views/rs/components/rightContainer.vue
diff --git a/src/views/equipment/index.vue b/src/views/rs/index.vue
similarity index 100%
copy from src/views/equipment/index.vue
copy to src/views/rs/index.vue
diff --git a/src/views/equipment/components/box/dataContent.vue b/src/views/rt/components/box/dataContent.vue
similarity index 100%
rename from src/views/equipment/components/box/dataContent.vue
rename to src/views/rt/components/box/dataContent.vue
diff --git a/src/views/equipment/components/box/fireContent.vue b/src/views/rt/components/box/fireContent.vue
similarity index 100%
rename from src/views/equipment/components/box/fireContent.vue
rename to src/views/rt/components/box/fireContent.vue
diff --git a/src/views/equipment/components/box/fireSource.vue b/src/views/rt/components/box/fireSource.vue
similarity index 100%
rename from src/views/equipment/components/box/fireSource.vue
rename to src/views/rt/components/box/fireSource.vue
diff --git a/src/views/equipment/components/box/fireTrend.vue b/src/views/rt/components/box/fireTrend.vue
similarity index 100%
rename from src/views/equipment/components/box/fireTrend.vue
rename to src/views/rt/components/box/fireTrend.vue
diff --git a/src/views/equipment/components/box/occurStatistics.vue b/src/views/rt/components/box/occurStatistics.vue
similarity index 100%
rename from src/views/equipment/components/box/occurStatistics.vue
rename to src/views/rt/components/box/occurStatistics.vue
diff --git a/src/views/equipment/components/box/publicContent.vue b/src/views/rt/components/box/publicContent.vue
similarity index 100%
rename from src/views/equipment/components/box/publicContent.vue
rename to src/views/rt/components/box/publicContent.vue
diff --git a/src/views/equipment/components/box/unitContent.vue b/src/views/rt/components/box/unitContent.vue
similarity index 100%
rename from src/views/equipment/components/box/unitContent.vue
rename to src/views/rt/components/box/unitContent.vue
diff --git a/src/views/rt/components/leftContainer.vue b/src/views/rt/components/leftContainer.vue
new file mode 100644
index 0000000..714a615
--- /dev/null
+++ b/src/views/rt/components/leftContainer.vue
@@ -0,0 +1,48 @@
+<!--
+ * @Author: shuishen 1109946754@qq.com
+ * @Date: 2023-03-10 15:27:59
+ * @LastEditors: shuishen 1109946754@qq.com
+ * @LastEditTime: 2024-10-25 18:43:23
+ * @FilePath: \bigScreen\src\views\statistics\components\leftContainer.vue
+ * @Description: 
+ * 
+ * Copyright (c) 2023 by ${git_name_email}, All Rights Reserved. 
+-->
+<script setup>
+import dataContent from './box/dataContent.vue'
+import unitContent from './box/unitContent.vue'
+import fireContent from './box/fireContent.vue'
+</script>
+
+<template>
+  <div class="left-container">
+    <div class="data box">
+      <title-box>
+        <template #titleName>
+          数据概览2
+        </template>
+      </title-box>
+      <data-content></data-content>
+    </div>
+
+    <div class="unit box">
+      <title-box>
+        <template #titleName>
+          入住单位统计
+        </template>
+      </title-box>
+      <unit-content></unit-content>
+    </div>
+
+    <div class="fire box">
+      <title-box>
+        <template #titleName>
+          实时火警事件
+        </template>
+      </title-box>
+      <fire-content></fire-content>
+    </div>
+  </div>
+</template>
+
+<style lang="scss" scoped></style>
\ No newline at end of file
diff --git a/src/views/equipment/components/rightContainer.vue b/src/views/rt/components/rightContainer.vue
similarity index 100%
rename from src/views/equipment/components/rightContainer.vue
rename to src/views/rt/components/rightContainer.vue
diff --git a/src/views/equipment/index.vue b/src/views/rt/index.vue
similarity index 100%
rename from src/views/equipment/index.vue
rename to src/views/rt/index.vue
diff --git a/vite.config.js b/vite.config.js
index 6ea53e3..3ddbd7c 100644
--- a/vite.config.js
+++ b/vite.config.js
@@ -2,7 +2,7 @@
  * @Author: shuishen 1109946754@qq.com
  * @Date: 2024-10-25 10:56:27
  * @LastEditors: shuishen 1109946754@qq.com
- * @LastEditTime: 2024-10-30 16:06:44
+ * @LastEditTime: 2024-10-31 18:23:13
  * @FilePath: \bigScreen\vite.config.js
  * @Description: 
  * 
@@ -24,7 +24,7 @@
 
   // 根据是否生产环境,动态设置压缩配置
   const buildConfig = {
-    outDir: 'manage',
+    outDir: 'zhyq',
     target: 'esnext',
     minify: isProd ? 'terser' : 'esbuild', // 根据环境选择压缩工具
   }
@@ -81,11 +81,11 @@
       https: true,
       host: '0.0.0.0',
       proxy: {
-        '/api': {
+        '/zhyqapi': {
           // target: 'http://localhost',
           target: 'https://wrj.shuixiongit.com/zhyqapi',
           changeOrigin: true,
-          rewrite: path => path.replace(/^\/api/, ''),
+          rewrite: path => path.replace(/^\/zhyqapi/, ''),
         },
       },
     },
diff --git a/vite.config.js.timestamp-1730167409245-f650f9b358bf.mjs b/vite.config.js.timestamp-1730167409245-f650f9b358bf.mjs
deleted file mode 100644
index b35a14d..0000000
--- a/vite.config.js.timestamp-1730167409245-f650f9b358bf.mjs
+++ /dev/null
@@ -1,79 +0,0 @@
-// vite.config.js
-import { defineConfig, loadEnv } from "file:///Y:/jsProject/bigScreen/node_modules/.pnpm/vite@5.4.10_sass@1.80.4_terser@5.31.1/node_modules/vite/dist/node/index.js";
-import { resolve } from "path";
-import vue from "file:///Y:/jsProject/bigScreen/node_modules/.pnpm/@vitejs+plugin-vue@5.1.4_vite@5.4.10_vue@3.5.12/node_modules/@vitejs/plugin-vue/dist/index.mjs";
-import DC from "file:///Y:/jsProject/bigScreen/node_modules/.pnpm/@dvgis+vite-plugin-dc@2.2.0_@dvgis+dc-sdk@3.4.0/node_modules/@dvgis/vite-plugin-dc/dist/index.mjs";
-import AutoImport from "file:///Y:/jsProject/bigScreen/node_modules/.pnpm/unplugin-auto-import@0.18.3/node_modules/unplugin-auto-import/dist/vite.js";
-var __vite_injected_original_dirname = "Y:\\jsProject\\bigScreen";
-var vite_config_default = ({ mode, command }) => {
-  const env = loadEnv(mode, process.cwd());
-  const { VITE_APP_ENV, VITE_APP_BASE } = env;
-  const isProd = VITE_APP_ENV === "production";
-  const buildConfig = {
-    outDir: "manage",
-    target: "esnext",
-    minify: isProd ? "terser" : "esbuild"
-    // 根据环境选择压缩工具
-  };
-  if (isProd) {
-    buildConfig.terserOptions = {
-      compress: {
-        drop_console: true,
-        // 删除 console
-        drop_debugger: true
-        // 删除 debugger
-      },
-      format: {
-        comments: false
-        // 删除所有注释
-      }
-    };
-  }
-  return defineConfig({
-    base: VITE_APP_BASE,
-    build: buildConfig,
-    plugins: [
-      vue(),
-      DC(),
-      AutoImport({
-        imports: ["vue", "vue-router"]
-        // 自动导入vue和vue-router相关函数
-      })
-    ],
-    css: {
-      preprocessorOptions: {
-        scss: {
-          api: "modern-compiler",
-          // 修改api调用方式
-          additionalData: `@use "@/styles/variables.scss" as *;`
-        }
-      }
-    },
-    resolve: {
-      alias: {
-        "~": resolve(__vite_injected_original_dirname, "./"),
-        "@": resolve(__vite_injected_original_dirname, "./src"),
-        components: resolve(__vite_injected_original_dirname, "./src/components"),
-        styles: resolve(__vite_injected_original_dirname, "./src/styles"),
-        utils: resolve(__vite_injected_original_dirname, "./src/utils"),
-        store: resolve(__vite_injected_original_dirname, "./src/store"),
-        hooks: resolve(__vite_injected_original_dirname, "./src/hooks")
-      }
-    },
-    server: {
-      port: 668,
-      proxy: {
-        "/api": {
-          // target: 'http://localhost',
-          target: "https://wrj.shuixiongit.com/api",
-          changeOrigin: true,
-          rewrite: (path) => path.replace(/^\/api/, "")
-        }
-      }
-    }
-  });
-};
-export {
-  vite_config_default as default
-};
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJZOlxcXFxqc1Byb2plY3RcXFxcYmlnU2NyZWVuXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ZpbGVuYW1lID0gXCJZOlxcXFxqc1Byb2plY3RcXFxcYmlnU2NyZWVuXFxcXHZpdGUuY29uZmlnLmpzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9ZOi9qc1Byb2plY3QvYmlnU2NyZWVuL3ZpdGUuY29uZmlnLmpzXCI7LypcbiAqIEBBdXRob3I6IHNodWlzaGVuIDExMDk5NDY3NTRAcXEuY29tXG4gKiBARGF0ZTogMjAyNC0xMC0yNSAxMDo1NjoyN1xuICogQExhc3RFZGl0b3JzOiBzaHVpc2hlbiAxMTA5OTQ2NzU0QHFxLmNvbVxuICogQExhc3RFZGl0VGltZTogMjAyNC0xMC0yOCAxMTo1MTo0NlxuICogQEZpbGVQYXRoOiBcXGJpZ1NjcmVlblxcdml0ZS5jb25maWcuanNcbiAqIEBEZXNjcmlwdGlvbjogXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyNCBieSBzaHVpc2hlbiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gXG4gKi9cbmltcG9ydCB7IGRlZmluZUNvbmZpZywgbG9hZEVudiB9IGZyb20gJ3ZpdGUnXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCB2dWUgZnJvbSAnQHZpdGVqcy9wbHVnaW4tdnVlJ1xuaW1wb3J0IERDIGZyb20gXCJAZHZnaXMvdml0ZS1wbHVnaW4tZGNcIlxuXG5pbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJ1xuXG5leHBvcnQgZGVmYXVsdCAoeyBtb2RlLCBjb21tYW5kIH0pID0+IHtcbiAgY29uc3QgZW52ID0gbG9hZEVudihtb2RlLCBwcm9jZXNzLmN3ZCgpKVxuICBjb25zdCB7IFZJVEVfQVBQX0VOViwgVklURV9BUFBfQkFTRSB9ID0gZW52XG4gIC8vIFx1NTIyNFx1NjVBRFx1NjYyRlx1NjI1M1x1NzUxRlx1NEVBN1x1NzNBRlx1NTg4M1x1NTMwNVxuICBjb25zdCBpc1Byb2QgPSBWSVRFX0FQUF9FTlYgPT09ICdwcm9kdWN0aW9uJ1xuXG4gIC8vIFx1NjgzOVx1NjM2RVx1NjYyRlx1NTQyNlx1NzUxRlx1NEVBN1x1NzNBRlx1NTg4M1x1RkYwQ1x1NTJBOFx1NjAwMVx1OEJCRVx1N0Y2RVx1NTM4Qlx1N0YyOVx1OTE0RFx1N0Y2RVxuICBjb25zdCBidWlsZENvbmZpZyA9IHtcbiAgICBvdXREaXI6ICdtYW5hZ2UnLFxuICAgIHRhcmdldDogJ2VzbmV4dCcsXG4gICAgbWluaWZ5OiBpc1Byb2QgPyAndGVyc2VyJyA6ICdlc2J1aWxkJywgLy8gXHU2ODM5XHU2MzZFXHU3M0FGXHU1ODgzXHU5MDA5XHU2MkU5XHU1MzhCXHU3RjI5XHU1REU1XHU1MTc3XG4gIH1cblxuICAvLyBcdTU5ODJcdTY3OUNcdTY2MkZcdTc1MUZcdTRFQTdcdTczQUZcdTU4ODNcdUZGMENcdTZERkJcdTUyQTBUZXJzZXJcdTc2ODRcdTkxNERcdTdGNkVcbiAgaWYgKGlzUHJvZCkge1xuICAgIGJ1aWxkQ29uZmlnLnRlcnNlck9wdGlvbnMgPSB7XG4gICAgICBjb21wcmVzczoge1xuICAgICAgICBkcm9wX2NvbnNvbGU6IHRydWUsIC8vIFx1NTIyMFx1OTY2NCBjb25zb2xlXG4gICAgICAgIGRyb3BfZGVidWdnZXI6IHRydWUsIC8vIFx1NTIyMFx1OTY2NCBkZWJ1Z2dlclxuICAgICAgfSxcbiAgICAgIGZvcm1hdDoge1xuICAgICAgICBjb21tZW50czogZmFsc2UsIC8vIFx1NTIyMFx1OTY2NFx1NjI0MFx1NjcwOVx1NkNFOFx1OTFDQVxuICAgICAgfSxcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGVmaW5lQ29uZmlnKHtcbiAgICBiYXNlOiBWSVRFX0FQUF9CQVNFLFxuICAgIGJ1aWxkOiBidWlsZENvbmZpZyxcblxuICAgIHBsdWdpbnM6IFtcbiAgICAgIHZ1ZSgpLFxuICAgICAgREMoKSxcbiAgICAgIEF1dG9JbXBvcnQoe1xuICAgICAgICBpbXBvcnRzOiBbXCJ2dWVcIiwgXCJ2dWUtcm91dGVyXCJdLCAvLyBcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjV2dWVcdTU0OEN2dWUtcm91dGVyXHU3NkY4XHU1MTczXHU1MUZEXHU2NTcwXG4gICAgICB9KVxuICAgIF0sXG5cbiAgICBjc3M6IHtcbiAgICAgIHByZXByb2Nlc3Nvck9wdGlvbnM6IHtcbiAgICAgICAgc2Nzczoge1xuICAgICAgICAgIGFwaTogJ21vZGVybi1jb21waWxlcicsIC8vIFx1NEZFRVx1NjUzOWFwaVx1OEMwM1x1NzUyOFx1NjVCOVx1NUYwRlxuICAgICAgICAgIGFkZGl0aW9uYWxEYXRhOiBgQHVzZSBcIkAvc3R5bGVzL3ZhcmlhYmxlcy5zY3NzXCIgYXMgKjtgXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzb2x2ZToge1xuICAgICAgYWxpYXM6IHtcbiAgICAgICAgJ34nOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vJyksXG4gICAgICAgICdAJzogcmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYycpLFxuICAgICAgICBjb21wb25lbnRzOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vc3JjL2NvbXBvbmVudHMnKSxcbiAgICAgICAgc3R5bGVzOiByZXNvbHZlKF9fZGlybmFtZSwgJy4vc3JjL3N0eWxlcycpLFxuICAgICAgICB1dGlsczogcmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYy91dGlscycpLFxuICAgICAgICBzdG9yZTogcmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYy9zdG9yZScpLFxuICAgICAgICBob29rczogcmVzb2x2ZShfX2Rpcm5hbWUsICcuL3NyYy9ob29rcycpLFxuICAgICAgfSxcbiAgICB9LFxuXG4gICAgc2VydmVyOiB7XG4gICAgICBwb3J0OiA2NjgsXG4gICAgICBwcm94eToge1xuICAgICAgICAnL2FwaSc6IHtcbiAgICAgICAgICAvLyB0YXJnZXQ6ICdodHRwOi8vbG9jYWxob3N0JyxcbiAgICAgICAgICB0YXJnZXQ6ICdodHRwczovL3dyai5zaHVpeGlvbmdpdC5jb20vYXBpJyxcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgcmV3cml0ZTogcGF0aCA9PiBwYXRoLnJlcGxhY2UoL15cXC9hcGkvLCAnJyksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH0sXG4gIH0pXG59XG4vLyBodHRwczovL3ZpdGUuZGV2L2NvbmZpZy9cblxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQVVBLFNBQVMsY0FBYyxlQUFlO0FBQ3RDLFNBQVMsZUFBZTtBQUN4QixPQUFPLFNBQVM7QUFDaEIsT0FBTyxRQUFRO0FBRWYsT0FBTyxnQkFBZ0I7QUFmdkIsSUFBTSxtQ0FBbUM7QUFpQnpDLElBQU8sc0JBQVEsQ0FBQyxFQUFFLE1BQU0sUUFBUSxNQUFNO0FBQ3BDLFFBQU0sTUFBTSxRQUFRLE1BQU0sUUFBUSxJQUFJLENBQUM7QUFDdkMsUUFBTSxFQUFFLGNBQWMsY0FBYyxJQUFJO0FBRXhDLFFBQU0sU0FBUyxpQkFBaUI7QUFHaEMsUUFBTSxjQUFjO0FBQUEsSUFDbEIsUUFBUTtBQUFBLElBQ1IsUUFBUTtBQUFBLElBQ1IsUUFBUSxTQUFTLFdBQVc7QUFBQTtBQUFBLEVBQzlCO0FBR0EsTUFBSSxRQUFRO0FBQ1YsZ0JBQVksZ0JBQWdCO0FBQUEsTUFDMUIsVUFBVTtBQUFBLFFBQ1IsY0FBYztBQUFBO0FBQUEsUUFDZCxlQUFlO0FBQUE7QUFBQSxNQUNqQjtBQUFBLE1BQ0EsUUFBUTtBQUFBLFFBQ04sVUFBVTtBQUFBO0FBQUEsTUFDWjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTyxhQUFhO0FBQUEsSUFDbEIsTUFBTTtBQUFBLElBQ04sT0FBTztBQUFBLElBRVAsU0FBUztBQUFBLE1BQ1AsSUFBSTtBQUFBLE1BQ0osR0FBRztBQUFBLE1BQ0gsV0FBVztBQUFBLFFBQ1QsU0FBUyxDQUFDLE9BQU8sWUFBWTtBQUFBO0FBQUEsTUFDL0IsQ0FBQztBQUFBLElBQ0g7QUFBQSxJQUVBLEtBQUs7QUFBQSxNQUNILHFCQUFxQjtBQUFBLFFBQ25CLE1BQU07QUFBQSxVQUNKLEtBQUs7QUFBQTtBQUFBLFVBQ0wsZ0JBQWdCO0FBQUEsUUFDbEI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLElBRUEsU0FBUztBQUFBLE1BQ1AsT0FBTztBQUFBLFFBQ0wsS0FBSyxRQUFRLGtDQUFXLElBQUk7QUFBQSxRQUM1QixLQUFLLFFBQVEsa0NBQVcsT0FBTztBQUFBLFFBQy9CLFlBQVksUUFBUSxrQ0FBVyxrQkFBa0I7QUFBQSxRQUNqRCxRQUFRLFFBQVEsa0NBQVcsY0FBYztBQUFBLFFBQ3pDLE9BQU8sUUFBUSxrQ0FBVyxhQUFhO0FBQUEsUUFDdkMsT0FBTyxRQUFRLGtDQUFXLGFBQWE7QUFBQSxRQUN2QyxPQUFPLFFBQVEsa0NBQVcsYUFBYTtBQUFBLE1BQ3pDO0FBQUEsSUFDRjtBQUFBLElBRUEsUUFBUTtBQUFBLE1BQ04sTUFBTTtBQUFBLE1BQ04sT0FBTztBQUFBLFFBQ0wsUUFBUTtBQUFBO0FBQUEsVUFFTixRQUFRO0FBQUEsVUFDUixjQUFjO0FBQUEsVUFDZCxTQUFTLFVBQVEsS0FBSyxRQUFRLFVBQVUsRUFBRTtBQUFBLFFBQzVDO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K

--
Gitblit v1.9.3