|
@@ -1,18 +1,38 @@
|
|
|
<script setup lang="ts">
|
|
|
-import { onMounted, ref, h } from "vue";
|
|
|
+import { onMounted, ref, h, computed, unref, watchEffect } from "vue";
|
|
|
import { createApp } from "/@/hooks/userApp";
|
|
|
import tagView from "/@/components/custom/tagView.vue";
|
|
|
import LoadingLogo from "/@/components/basic/loading.vue";
|
|
|
import MiniMap from "/@/components/basic/miniMap.vue";
|
|
|
+import FloorplanView from "/@/components/basic/floorplan.vue";
|
|
|
import { useSceneStore } from "./store/modules/scene";
|
|
|
import type { FloorsType } from "./store/modules/scene";
|
|
|
import { useAppStore } from "./store/modules/app";
|
|
|
const sceneStore = useSceneStore();
|
|
|
const appStore = useAppStore();
|
|
|
-
|
|
|
+const dataLoaded = ref(false);
|
|
|
const scene$ = ref<HTMLElement | null>(null);
|
|
|
const refMiniMap = ref<Nullable<string>>(null);
|
|
|
+const flying = computed(() => appStore.flying);
|
|
|
+const player = computed(() => appStore.player);
|
|
|
+const metadata = computed(() => sceneStore.metadata);
|
|
|
+const mode = computed(() => appStore.mode);
|
|
|
+const controls = computed(() => {
|
|
|
+ return metadata.value.controls;
|
|
|
+});
|
|
|
+const floorplanViewShow = computed(() => {
|
|
|
+ return (
|
|
|
+ Boolean(controls.value.showDollhouse) &&
|
|
|
+ Boolean(controls.value.showFloorplan) &&
|
|
|
+ mode.value !== "panorama"
|
|
|
+ );
|
|
|
+});
|
|
|
const show = ref(false);
|
|
|
+
|
|
|
+watchEffect(() => {
|
|
|
+ console.warn("mode", mode);
|
|
|
+});
|
|
|
+
|
|
|
onMounted(async () => {
|
|
|
const app = await createApp({
|
|
|
dom: scene$.value as HTMLElement,
|
|
@@ -45,6 +65,7 @@ onMounted(async () => {
|
|
|
app.Scene.on("loaded", (pano) => {
|
|
|
refMiniMap.value = "[xui_min_map]";
|
|
|
appStore.setFloorId(pano.floorIndex);
|
|
|
+
|
|
|
// store.commit("setFloorId", pano.floorIndex);
|
|
|
// store.commit("rtc/setShowdaogou", true);
|
|
|
|
|
@@ -57,7 +78,7 @@ onMounted(async () => {
|
|
|
if (!metadata.controls.showMap) {
|
|
|
app.MinMap.hide(true);
|
|
|
}
|
|
|
- // dataLoaded.value = true;
|
|
|
+ dataLoaded.value = true;
|
|
|
});
|
|
|
app.store.on("floorcad", ({ floors }: { floors: FloorsType[] }) => {
|
|
|
if (floors?.length) {
|
|
@@ -65,16 +86,41 @@ onMounted(async () => {
|
|
|
}
|
|
|
});
|
|
|
});
|
|
|
+
|
|
|
+// method
|
|
|
+const changeMode = (name: string) => {
|
|
|
+ if (!flying.value) {
|
|
|
+ appStore.setMode(name);
|
|
|
+ } else {
|
|
|
+ appStore.setMode(name);
|
|
|
+ }
|
|
|
+};
|
|
|
</script>
|
|
|
|
|
|
<template>
|
|
|
<LoadingLogo :thumb="true" />
|
|
|
<div class="ui-view-layout" :class="{ show: show }">
|
|
|
<div class="scene" ref="scene$"></div>
|
|
|
- <!-- 小地图 start -->
|
|
|
- <MiniMap :show="true" :to="refMiniMap" />
|
|
|
- <!-- 小地图 end -->
|
|
|
+ <template v-if="dataLoaded">
|
|
|
+ <!-- 小地图 start -->
|
|
|
+ <MiniMap
|
|
|
+ :show="!!unref(refMiniMap) && player.showWidgets"
|
|
|
+ :show-dollhouse="Boolean(controls.showDollhouse)"
|
|
|
+ :to="refMiniMap"
|
|
|
+ @change-mode="changeMode"
|
|
|
+ />
|
|
|
+ <!-- 小地图 end -->
|
|
|
+ <!-- 平面图 start -->
|
|
|
+ <FloorplanView
|
|
|
+ :show="floorplanViewShow"
|
|
|
+ :mode="mode"
|
|
|
+ @change-mode="changeMode"
|
|
|
+ />
|
|
|
+ <!-- 平面图 end -->
|
|
|
+ </template>
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
-<style lang="scss"></style>
|
|
|
+<style lang="scss">
|
|
|
+@import "./app.scss";
|
|
|
+</style>
|