|
@@ -0,0 +1,115 @@
|
|
|
|
+<template>
|
|
|
|
+ <div class="antiquity-detail">
|
|
|
|
+ <div class="antiquity-detail-head">
|
|
|
|
+ <img
|
|
|
|
+ class="antiquity-detail__back"
|
|
|
|
+ src="@/assets/images/back-min.png"
|
|
|
|
+ @click="$router.back"
|
|
|
|
+ />
|
|
|
|
+ <img class="logo" src="@/assets/images/logo-min.png" />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <template v-if="!isThree">
|
|
|
|
+ <div class="antiquity-detail-img">
|
|
|
|
+ <VanImage fit="contain" :src="getEnvImagePath(detail?.minImg)" />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div class="antiquity-detail-tools">
|
|
|
|
+ <img src="@/assets/images/icon_2-min.png" @click="preview = true" />
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <div class="antiquity-detail-wrap">
|
|
|
|
+ <h3>{{ detail?.name }}</h3>
|
|
|
|
+ <div>
|
|
|
|
+ <p>文物等级:{{ detail?.level || "--" }}</p>
|
|
|
|
+ <p>尺寸:{{ detail?.size || "--" }}</p>
|
|
|
|
+ <p>时代:{{ detail?.sd || "--" }}</p>
|
|
|
|
+ <p>质地:{{ detail?.zd || "--" }}</p>
|
|
|
|
+ <p>来源:{{ detail?.from || "--" }}</p>
|
|
|
|
+ <p>类别:{{ detail?.type || "--" }}</p>
|
|
|
|
+ <p>存放位置:{{ detail?.address || "--" }}</p>
|
|
|
|
+ <p v-html="detail?.content" />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </template>
|
|
|
|
+
|
|
|
|
+ <div v-else class="antiquity-detail-three">
|
|
|
|
+ <h3>{{ detail?.name }}</h3>
|
|
|
|
+ <iframe ref="iframe" :src="iframeUrl" />
|
|
|
|
+ <div class="antiquity-detail-three-tools">
|
|
|
|
+ <img
|
|
|
|
+ draggable="false"
|
|
|
|
+ src="@/assets/images/icon_5-min.png"
|
|
|
|
+ @click="handleZoom"
|
|
|
|
+ />
|
|
|
|
+ <img
|
|
|
|
+ draggable="false"
|
|
|
|
+ :src="autoPlay ? PauseImg : PlayImg"
|
|
|
|
+ @click="handleAutoPlay"
|
|
|
|
+ />
|
|
|
|
+ <img
|
|
|
|
+ draggable="false"
|
|
|
|
+ src="@/assets/images/icon_7-min.png"
|
|
|
|
+ @click="handleResetView"
|
|
|
|
+ />
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+ </div>
|
|
|
|
+
|
|
|
|
+ <van-image-preview v-model:show="preview" :images="imgs" />
|
|
|
|
+</template>
|
|
|
|
+
|
|
|
|
+<script setup>
|
|
|
|
+import { computed, ref } from "vue";
|
|
|
|
+import { antiquityData, getEnvImagePath, isDevelopment } from "@lbc/base";
|
|
|
|
+import { useRoute } from "vue-router";
|
|
|
|
+import PlayImg from "@/assets/images/icon_6-min.png";
|
|
|
|
+import PauseImg from "@/assets/images/icon_8-min.png";
|
|
|
|
+
|
|
|
|
+const route = useRoute();
|
|
|
|
+const detail = computed(() =>
|
|
|
|
+ antiquityData.find((i) => i.id === Number(route.params.id))
|
|
|
|
+);
|
|
|
|
+const imgs = computed(() =>
|
|
|
|
+ detail.value?.img ? detail.value.img.map((i) => getEnvImagePath(i)) : []
|
|
|
|
+);
|
|
|
|
+const preview = ref(false);
|
|
|
|
+// 是否三维文物
|
|
|
|
+const isThree = computed(() => Boolean(detail.value?.link));
|
|
|
|
+const iframe = ref(null);
|
|
|
|
+const iframeUrl = computed(
|
|
|
|
+ () =>
|
|
|
|
+ isThree &&
|
|
|
|
+ `${
|
|
|
|
+ isDevelopment
|
|
|
|
+ ? "/model.html"
|
|
|
|
+ : `${location.origin}${location.pathname.replace(
|
|
|
|
+ /index\.html$/,
|
|
|
|
+ "model.html"
|
|
|
|
+ )}`
|
|
|
|
+ }?m=${detail.value?.link}`
|
|
|
|
+);
|
|
|
|
+// 模型自动旋转
|
|
|
|
+const autoPlay = ref(true);
|
|
|
|
+
|
|
|
|
+const handleZoom = () => {
|
|
|
|
+ iframe.value.contentWindow.webview.zoomIn(); // 放大
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handleAutoPlay = () => {
|
|
|
|
+ if (!iframe.value.contentWindow.modelLoding) return;
|
|
|
|
+
|
|
|
|
+ iframe.value.contentWindow.webview.stopRotate();
|
|
|
|
+ autoPlay.value = !autoPlay.value;
|
|
|
|
+};
|
|
|
|
+
|
|
|
|
+const handleResetView = () => {
|
|
|
|
+ iframe.value.contentWindow.webview.resetView();
|
|
|
|
+
|
|
|
|
+ if (!autoPlay.value) handleAutoPlay();
|
|
|
|
+};
|
|
|
|
+</script>
|
|
|
|
+
|
|
|
|
+<style lang="scss" scoped>
|
|
|
|
+@use "./index.scss";
|
|
|
|
+</style>
|