From 50ee7232f3c98fe24a1f2e31dba9508cfec14887 Mon Sep 17 00:00:00 2001
From: gjj <Ganjj@probim.com.cn>
Date: Fri, 21 Feb 2025 17:35:39 +0800
Subject: [PATCH] 模型预览

---
 src/Dashboard.vue |  188 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 188 insertions(+), 0 deletions(-)

diff --git a/src/Dashboard.vue b/src/Dashboard.vue
new file mode 100644
index 0000000..d9c19bd
--- /dev/null
+++ b/src/Dashboard.vue
@@ -0,0 +1,188 @@
+<!--
+ * @Author: gjj Ganjj@probim.com.cn
+ * @Date: 2025-02-14 14:32:17
+ * @LastEditors: gjj Ganjj@probim.com.cn
+ * @LastEditTime: 2025-02-21 16:54:08
+ * @FilePath: \北京交通大学\src\Dashboard.vue
+-->
+<!-- eslint-disable vue/no-textarea-mustache -->
+<!-- eslint-disable vue/html-self-closing -->
+<template>
+  <main
+    id="appWrapper"
+    class="absolute top-[50%] left-[50%] -translate-x-[50%] w-screen h-screen -translate-y-[50%] font-pingfang text-white select-none"
+    :style="{
+      backgroundImage: `url(${backgroundImage})`,
+      backgroundRepeat: 'no-repeat',
+      backgroundPosition: 'center center',
+      backgroundSize: 'cover'
+    }"
+  >
+    <!--头部-->
+    <app-header class="absolute z-[100] top-0 left-0 right-0" :selected-id="currentProjectId"  />
+
+    
+
+    <!--全屏、切换地图-->
+    <!--<div class="absolute z-[50] top-20 left-4 flex space-x-3">
+      <fullscreen-button />
+      <switch-map mapType="gis" @changeMap="onChangeMap" />
+    </div>-->
+
+
+
+    <!--页面内容-->
+    <div class="content-wrapper px-[22px] py-[10px] absolute inset-0 top-[80px] flex gap-[20px]">
+      <div class="flex-1 min-w-0">
+        <!-- 左侧模块 -->
+        <div class="w-full h-full">
+          <project-view/>
+        </div>
+      </div>
+      <div class="flex-1 min-w-0">
+        <!-- 中间模块 -->
+        <div class="w-full h-full">
+          <equipment-view/>
+        </div>
+      </div>
+      <div class="w-[1080px]">
+        <!-- 右侧模块 -->
+        <div class="w-full h-full">
+          <Home/>
+        </div>
+      </div>
+    </div>
+
+
+    <!--multiverse渲染容器
+    <div id="renderDom" class="absolute z-[40] top-0 bottom-0 left-0 right-0 w-full h-full"></div>-->
+
+
+  </main>
+</template>
+
+<script>
+import Vue from "vue";
+import { mapGetters } from "vuex";
+import Header from "./components/Header.vue";
+import FullscreenButton from "./components/FullScreenButton.vue";
+import SwitchMap from "./components/SwitchMap.vue";
+import Home from "./views/Home.vue";
+import ProjectView from "./views/ProjectView.vue";
+import { sceneJSON } from "./sceneJSON.js";
+import { AppAPI } from "./api/app";
+import EquipmentView from "./views/EquipmentView.vue";
+import dayjs from "dayjs";
+import "dayjs/locale/zh-cn";
+import relativeTime from "dayjs/plugin/relativeTime";
+dayjs.locale("zh-cn");
+dayjs.extend(relativeTime);
+Vue.prototype.$dayjs = dayjs;
+
+import * as echarts from "echarts";
+Vue.prototype.$echarts = echarts;
+
+import { nanoid } from "nanoid";
+Vue.prototype.$nanoid = nanoid;
+
+export default {
+  name: "Dashboard",
+  components: {
+    "app-header": Header,
+    "fullscreen-button": FullscreenButton,
+    "switch-map": SwitchMap,
+    "Home": Home,
+    "project-view": ProjectView,
+    "equipment-view": EquipmentView  
+  },
+  data() {
+    return {
+      backgroundImage: new URL('@/assets/images/backgrounds/screen.png', import.meta.url).href,
+      currentProjectId: '1c179617-a7d9-4243-b813-84fa55a17ce7'
+    };
+  },
+  computed: {
+    ...mapGetters("common", [])
+  },
+  watch: {
+  },
+  mounted() {
+    this.initMultiverse();
+  },
+  beforeDestroy() {
+    this.resetEngineRelated();
+  },
+  methods: {
+    //重置引擎相关的东西
+    resetEngineRelated() {
+      window.scene = window.underlay = null;
+    },
+    //响应切换地图
+    onChangeMap(item) {
+      if (window.scene && window.underlay) {
+        const u = window.underlay;
+        const building = window.scene.findFeature("3DBuilding");
+        switch (item.id) {
+          case "pic": {
+            if (building) {
+              building.visible = false;
+            }
+            u.change("satellite"); //这样需要将本地资源放在工程内
+            // u.url = "http://multiverse.vothing.com/ref/style/satellite.json";
+            // // 加载显示底图
+            // u.load();
+            break;
+          }
+          case "gis": {
+            if (building) {
+              building.visible = true;
+            }
+            u.change("darkblue"); //这样需要将本地资源放在工程内
+            // u.url = "http://multiverse.vothing.com/ref/style/darkblue.json";
+            // // 加载显示底图
+            // u.load();
+            break;
+          }
+        }
+      }
+    },
+    
+
+    //初始化引擎
+    initMultiverse() {
+      // 获取承载场景画布dom
+      const renderDom = document.getElementById("renderDom");
+      if (window.multiverse && renderDom) {
+        // 实例化引擎
+        const multiverse = window.multiverse;
+        const engine = new multiverse.mvCore(renderDom);
+
+        // mapbox地图服务的Token,需申请,如不使用Mapbox地图服务,可不设置
+				engine.token = window.ProjectConfig.mapboxToken;
+        // multiverse.js所在的路径,用于获取静态资源文件
+        engine.path = "https://multiverse.vothing.com/";
+
+        // 初始化场景
+        engine.initialize().then((s) => {
+          window.scene = s;
+          s.fromJSON(sceneJSON);
+          s.load();
+          s.stop();
+          window.underlay = s.findFeature("underlay");
+
+          setTimeout(() => {
+            
+          }, 1000);
+        });
+      }
+    },
+    //设置字体颜色
+    cellStyle(row, _column, _rowIndex, _columnIndex) {
+      // console.log("row", row);
+      if (row.column.label === "状态" && row.row.status === "未处置") {
+        return "color:#EF424E";
+      }
+    },
+  },
+};
+</script>

--
Gitblit v1.9.3