bill 8 hónapja
szülő
commit
6f46098e9f

+ 7 - 5
src/request/URL.ts

@@ -1,15 +1,17 @@
 export const login = `/relics/fdLogin`;
 export const logout = `/relics/fdLogout`;
 export const getUserInfo = `/relics/getUserInfo`;
-export const getRelicsPage = `/relics/relicsInfo/page`;
-export const updateRelicsName = `/relics/relicsInfo/update`;
+export const getRelicsPage = `/relics/artifact/list`;
+export const getRelicsType = `/relics/dict/allList/artifact`;
+
+export const updateRelicsName = `/relics/artifact/addOrUpdate`;
 export const getRelicsInfo = `/relics/relicsInfo/info/:relicsId`;
 export const relicsSelfCheck = `/relics/relicsInfo/info/check/:relicsId`;
-export const delRelics = `/relics/relicsInfo/del`;
-export const addRelics = `/relics/relicsInfo/add`;
+export const delRelics = `/relics/artifact/del`;
+export const addRelics = `/relics/artifact/addOrUpdate`;
 
 export const getScenesPage = `/relics/scene/page`;
-export const delScene = `/relics/scene/del/:sceneId`;
+export const delScene = `/relics/artifact/delScene`;
 
 export const getRelicsScenes = `/relics/relics-scene/getAllList/:relicsId`;
 export const addRelicsScene = `/relics/relics-scene/add/:relicsId`;

+ 18 - 6
src/request/index.ts

@@ -142,7 +142,7 @@ export const relicsSelfCheckFetch = (relicsId: number) =>
     { paths: { relicsId } }
   );
 
-export const addRelicsFetch = (relics: Relics) => {
+export const addRelicsFetch = (relics: Omit<Relics, 'relicsId'>) => {
   return sendFetch(URL.addRelics, {
     method: "post",
     body: JSON.stringify({ ...relics, relicsId: null }),
@@ -154,7 +154,7 @@ export const addRelicsFetch = (relics: Relics) => {
 export const delRelicsFetch = (relicsId: number) =>
   sendFetch(URL.delRelics, {
     method: "post",
-    body: JSON.stringify({ relicsId }),
+    body: JSON.stringify({ id: relicsId }),
   });
 
 export const updateRelicsFetch = (relics: Relics) =>
@@ -243,16 +243,28 @@ export const scenePageFetch = (props: ScenePageProps) =>
     }),
   });
 
-export const delSceneFetch = (sceneId: number) =>
+export const delSceneFetch = (artifactId: string, sceneNum: string) =>
   sendFetch(
     URL.delScene,
     {
       method: "post",
-      body: JSON.stringify({}),
-    },
-    { paths: { sceneId } }
+      body: JSON.stringify({
+        artifactId,
+        numList: [sceneNum]
+      }),
+    }
   );
 
+export const repSceneFetch = (artifactId: string, numList: string[]) =>
+  sendFetch("/relics/artifact/addScene", {
+    method: "post",
+    body: JSON.stringify({
+      artifactId,
+      numList: numList,
+    }),
+  });
+
+
 export type DevicePageProps = PageProps<{
   cameraSn?: string;
   cameraType?: number;

+ 12 - 6
src/request/type.ts

@@ -24,22 +24,27 @@ export type UserInfo = {
 };
 
 export type Relics = {
-  address?: string;
-  creationMethod?: keyof typeof creationMethodDesc;
-  category?: keyof typeof relicsTypeDesc;
+  id: string
+  relicsId: string
+  artifactName?: string;
+  artifactAge?: string;
   createBy?: string;
   createTime?: string;
+  artifactTypeId?: keyof typeof relicsTypeDesc;
+
+
+  creationMethod?: keyof typeof creationMethodDesc;
+  category?: keyof typeof relicsTypeDesc;
   level?: keyof typeof relicsLevelDesc;
   tbStatus?: 0;
   unicode?: string;
   updateBy?: null;
-  relicsId: number;
-  name: string;
 };
 
 export type ResPage<T> = {
   total: number;
-  records: T[];
+  // records: T[];
+  list: T[]
 };
 
 export type ResResult = {
@@ -127,6 +132,7 @@ export type Scene = {
   creationMethod?: keyof typeof creationMethodDesc;
   calcStatus?: SceneStatus;
   sceneName: string;
+  shootCount: number
   title: string;
   cameraType: DeviceType;
   controlPoint: CtrlPoints;

+ 6 - 0
src/router.ts

@@ -52,6 +52,12 @@ const routes: RouteRecordRaw[] = [
     component: () => import("@/view/layout/nav.vue"),
     children: [
       {
+        path: "/artifact-scenes/:id",
+        name: "artifact-scenes",
+        meta: { title: "场景管理", svgIcon: "wwpc" },
+        component: () => import("@/view/artifact-scenes/index.vue"),
+      },
+      {
         path: "relics",
         name: "relics",
         meta: { title: "文物普查", svgIcon: "wwpc" },

+ 13 - 10
src/store/relics.ts

@@ -2,6 +2,7 @@ import {
   relicsInfoFetch,
   // relicsPolyginsFetch,
   relicsSelfCheckFetch,
+  sendFetch,
   updateRelicsFetch,
 } from "@/request";
 import { errorHook } from "@/request/state";
@@ -9,6 +10,7 @@ import { ref } from "vue";
 import { Relics } from "@/request/type";
 import { refreshScenes } from "./scene";
 import { router } from '../router'
+import { getRelicsType } from "@/request/URL";
 
 export type { Relics } from "@/request/type";
 export const relics = ref<Relics>();
@@ -38,9 +40,8 @@ export const initSelfRelics = async (relicsId: number, isEdit = false) => {
     await refreshScenes();
   }
 };
-export const updateRelicsName = async (name: string) => {
-  await updateRelicsFetch({ ...relics.value!, name });
-  relics.value!.name = name;
+export const updateRelicsName = async (relics: Relics) => {
+  await updateRelicsFetch({ ...relics });
 };
 
 export const relicsLevelDesc = {
@@ -51,15 +52,17 @@ export const relicsLevelDesc = {
   4: "未认定",
 };
 
-export const relicsTypeDesc = {
-  0: "古文化遗址",
-  1: "古墓葬",
-  2: "古建筑",
-  3: "石窟寺及石刻",
-  4: "近现代重要史迹及代表性建筑",
-  5: "其它",
+export const relicsTypeDesc: {[key in string]: string} = {
 };
 
+sendFetch(getRelicsType, {}).then((res: any) => {
+  for (const item of res) {
+    relicsTypeDesc[item.id] = item.dictName
+  }
+  console.error(res)
+})
+
+
 export const creationMethodDesc = {
   1: "手动",
   2: "自动",

+ 151 - 0
src/view/artifact-scenes/index.vue

@@ -0,0 +1,151 @@
+<template>
+  <div class="layout">
+    <div class="left">场景管理</div>
+    <div class="relics-content">
+      <div class="search" style="text-align: right; padding-bottom: 20px">
+        <el-button type="primary" @click="gotoSplit">分屏对比</el-button>
+        <el-button type="primary" plain @click="addHandler"> 添加场景 </el-button>
+      </div>
+
+      <el-table :data="scenes" border row-key="'sceneCode'">
+        <slot name="table"></slot>
+        <el-table-column label="场景标题" v-slot:default="{ row }">
+          <a class="link" @click="gotoScene(row, false)">
+            <TexToolTip :text="row.name" />
+          </a>
+        </el-table-column>
+
+        <el-table-column label="场景码" v-slot:default="{ row }">
+          <TexToolTip :text="row.num" />
+        </el-table-column>
+        <el-table-column label="点位数量" v-slot:default="{ row }">
+          <TexToolTip :text="row.shootCount || '-'" />
+        </el-table-column>
+        <!-- <el-table-column
+        label="设备类型"
+        prop="snCode"
+        v-slot:default="{ row }"
+      >
+        <TexToolTip :text="DeviceTypeDesc[row.cameraType as DeviceType]" />
+      </el-table-column> -->
+        <el-table-column label="拍摄时间" prop="algorithmTime" v-slot:default="{ row }">
+          <TexToolTip :text="row.shootTime && row.shootTime.substr(0, 16)" />
+        </el-table-column>
+
+        <el-table-column label="计算完成时间" prop="createTime" v-slot:default="{ row }">
+          <TexToolTip :text="row.algorithmTime && row.algorithmTime.substr(0, 16)" />
+        </el-table-column>
+
+        <el-table-column label="状态" v-slot:default="{ row }">
+          <TexToolTip :text="SceneStatusDesc[(row.calcStatus as SceneStatus)]" />
+        </el-table-column>
+
+        <el-table-column label="操作" width="150" fixed="right">
+          <template #default="{ row }">
+            <el-button link type="primary" size="small" @click="gotoScene(row, false)">
+              查看
+            </el-button>
+            <el-button link type="primary" size="small" @click="gotoScene(row, true)">
+              编辑
+            </el-button>
+            <el-button
+              link
+              type="danger"
+              @click="delHandler(row)"
+              size="small"
+              v-if="row.calcStatus !== SceneStatus.RUN"
+            >
+              删除
+            </el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+    </div>
+  </div>
+</template>
+
+<script setup lang="ts">
+import Layout from "@/view/layout/nav.vue";
+import TexToolTip from "@/components/tex-tooltip.vue";
+import {
+  gotoScene,
+  Scene,
+  SceneStatus,
+  SceneStatusDesc,
+  SceneType,
+  SceneTypeDesc,
+} from "@/store/scene";
+import { dateFormat } from "@/util";
+import { computed, ref, watch } from "vue";
+import { router, setDocTitle } from "@/router";
+import { delSceneFetch, repSceneFetch, sendFetch } from "@/request";
+import { ElMessageBox } from "element-plus";
+import { selectScenes } from "../quisk";
+
+const scenes = ref<Scene[]>([]);
+const relicsId = computed(() => (router.currentRoute.value.params.id as unknown) as any);
+const fetchScenes = async () => {
+  if (!relicsId.value) {
+    return;
+  }
+  const res: any = await sendFetch(`/relics/artifact/getInfo/${relicsId.value}`, {});
+  if (!res) {
+    return router.replace({ name: "scene" });
+  }
+  setDocTitle(res.projectName);
+  scenes.value = res.sceneList.map((item) => ({
+    ...item,
+    sceneCode: item.num,
+    sceneSource: SceneType.CLUNT,
+  }));
+};
+watch(relicsId, fetchScenes, { immediate: true });
+
+const delHandler = async (scene: Scene) => {
+  const ok = await ElMessageBox.confirm("确定要删除吗", {
+    type: "warning",
+  });
+  if (ok) {
+    await delSceneFetch(relicsId.value, scene.sceneCode);
+    await fetchScenes();
+  }
+};
+
+const addHandler = async () => {
+  await selectScenes({
+    scenes: scenes.value,
+    selfScenes: scenes.value.filter((scene) => scene.creationMethod === 2),
+    submit: async (nScene) => {
+      const numList = nScene.map((s) => s.sceneCode);
+      await repSceneFetch(relicsId.value, numList);
+      await fetchScenes();
+    },
+  });
+};
+
+const gotoSplit = () => {
+  window.open(
+    router.resolve({ name: "query-relics-scene", params: { relicsId: relicsId.value } })
+      .href
+  );
+};
+</script>
+
+<style scoped>
+.layout {
+  display: flex;
+  width: 100%;
+  height: 100%;
+}
+.left {
+  font-size: 18px;
+  padding: 20px;
+  width: 200px;
+  flex: 0 0 auto;
+  border-right: 1px solid var(--el-border-color);
+}
+.relics-content {
+  margin: 8px;
+  flex: 1;
+}
+</style>

+ 23 - 29
src/view/artifacts/addArtifacts.vue

@@ -1,39 +1,33 @@
 <template>
-
   <el-form label-width="100px">
     <el-form-item label="文物名称:" required>
       <el-input
-          v-model.trim="data.name"
-          style="width: 100%"
-          :maxlength="100"
-          placeholder="请输入"
+        v-model.trim="data.artifactName"
+        style="width: 100%"
+        :maxlength="100"
+        placeholder="请输入"
       />
     </el-form-item>
     <el-form-item label="文物类别:" required>
-      <el-select style="width: 100%" v-model="data.category" clearable >
-        <el-option
-            :value="Number(key)"
-            :label="type"
-            v-for="(type, key) in relicsTypeDesc"
-        />
+      <el-select style="width: 100%" v-model="data.artifactTypeId" clearable>
+        <el-option :value="key" :label="type" v-for="(type, key) in relicsTypeDesc" />
       </el-select>
     </el-form-item>
     <el-form-item label="时代:" required>
       <el-input
-          v-model.trim="data.period"
-          style="width: 100%"
-          :maxlength="100"
-          placeholder="请输入"
+        v-model.trim="data.artifactAge"
+        style="width: 100%"
+        :maxlength="100"
+        placeholder="请输入"
       />
     </el-form-item>
-
   </el-form>
-
 </template>
 <script lang="ts" setup>
-import {QuiskExpose} from "@/helper/mount.ts";
-import {computed, ref} from "vue";
-import {relicsTypeDesc} from "@/store/relics.ts";
+import { QuiskExpose } from "@/helper/mount.ts";
+import { computed, ref } from "vue";
+import { relicsTypeDesc } from "@/store/relics.ts";
+import { addRelicsFetch } from "@/request";
 // import {ElMessage} from "element-plus";
 
 const props = defineProps<{
@@ -42,19 +36,19 @@ const props = defineProps<{
 }>();
 
 const data = ref({
-  name: "",
-  period: '',
-  category: ""
-})
+  artifactName: "",
+  artifactAge: "",
+  artifactTypeId: "",
+});
+if (props.data) {
+  Object.assign(data.value, props.data);
+}
 
 defineExpose<QuiskExpose>({
   title: computed(() => `新增文物`),
   async submit() {
-
+    props.submit(data.value);
   },
 });
 </script>
-<style lang="scss" scoped>
-
-
-</style>
+<style lang="scss" scoped></style>

+ 53 - 55
src/view/artifacts/index.vue

@@ -2,63 +2,60 @@
   <div class="artifacts-layout">
     <div class="artifacts-header">
       <div class="search">
-
         <div class="action-group">
-          <el-button type="primary" @click="addHandler">
-            新增文物
-          </el-button>
+          <el-button type="primary" @click="addHandler"> 新增文物 </el-button>
         </div>
-
       </div>
-
     </div>
 
     <div class="artifacts-content">
       <el-table :data="relicsArray" border>
         <el-table-column
-            prop="name"
-            label="文物名称"
-            v-slot:default="{ row }: { row: Relics }"
+          prop="name"
+          label="文物名称"
+          v-slot:default="{ row }: { row: Relics }"
         >
-<!--          <a class="link" @click="shareHandler(row)">-->
-<!--           -->
-<!--          </a>-->
-          <TexToolTip :text="row.name"/>
+          <!--          <a class="link" @click="shareHandler(row)">-->
+          <!--           -->
+          <!--          </a>-->
+          <TexToolTip :text="row.artifactName" />
         </el-table-column>
 
         <el-table-column
-            prop="unicode"
-            label="时代"
-            v-slot:default="{ row }: { row: Relics }"
+          prop="unicode"
+          label="时代"
+          v-slot:default="{ row }: { row: Relics }"
         >
-          <TexToolTip :text="row.unicode" v-if="row.unicode"/>
+          <TexToolTip :text="row.artifactAge" v-if="row.artifactAge" />
         </el-table-column>
 
-        <el-table-column label="文物级别" v-slot:default="{ row }: { row: Relics }">
+        <!-- <el-table-column label="文物级别" v-slot:default="{ row }: { row: Relics }">
           <TexToolTip :text="relicsLevelDesc[row.level!]"/>
-        </el-table-column>
+        </el-table-column> -->
         <el-table-column label="类别" v-slot:default="{ row }: { row: Relics }">
-          <TexToolTip :text="relicsTypeDesc[row.category!]"/>
-        </el-table-column>
-        <el-table-column label="文物地址" v-slot:default="{ row }: { row: Relics }">
-          <TexToolTip :text="row.address"/>
+          <TexToolTip :text="relicsTypeDesc[row.artifactTypeId!]" />
         </el-table-column>
+        <!-- <el-table-column label="文物地址" v-slot:default="{ row }: { row: Relics }">
+          <TexToolTip :text="row.artifactTypeId" />
+        </el-table-column> -->
 
         <el-table-column label="创建时间" v-slot:default="{ row }">
-          <TexToolTip :text="row.createTime.substr(0, 16)" v-if="row.createTime"/>
+          <TexToolTip :text="row.createTime.substr(0, 16)" v-if="row.createTime" />
         </el-table-column>
         <el-table-column prop="userName" label="创建人账号" v-slot:default="{ row }">
-          <TexToolTip :text="row.userName"/>
+          <TexToolTip :text="row.createBy" />
         </el-table-column>
 
         <el-table-column label="操作" width="240" fixed="right">
           <template #default="{ row }">
-
+            <el-button link type="primary" size="small" @click="queryHandler(row)">
+              查看
+            </el-button>
             <el-button link type="primary" size="small" @click="editHandler(row)">
               编辑
             </el-button>
 
-            <el-button link type="danger" @click="delHandler(row.relicsId)" size="small">
+            <el-button link type="danger" @click="delHandler(row.id)" size="small">
               删除
             </el-button>
           </template>
@@ -67,25 +64,26 @@
     </div>
     <div class="pag-layout">
       <el-pagination
-          background
-          layout="total, prev, pager, next, sizes, jumper"
-          v-model:page-size="pageProps.pageSize"
-          :page-sizes="[10, 20, 50, 100]"
-          :total="total"
-          @current-change="(data: number) => pageProps.pageNum = data"
-          :current-page="pageProps.pageNum"
+        background
+        layout="total, prev, pager, next, sizes, jumper"
+        v-model:page-size="pageProps.pageSize"
+        :page-sizes="[10, 20, 50, 100]"
+        :total="total"
+        @current-change="(data: number) => pageProps.pageNum = data"
+        :current-page="pageProps.pageNum"
       />
     </div>
   </div>
 </template>
 
 <script lang="ts" setup>
-import {onActivated, ref, watch} from "vue";
+import { onActivated, ref, watch } from "vue";
 import {
   relicsPageFetch,
   RelicsPageProps,
   delRelicsFetch,
   updateRelicsFetch,
+  addRelicsFetch,
 } from "@/request";
 import {
   Relics,
@@ -93,26 +91,25 @@ import {
   relicsTypeDesc,
   creationMethodDesc,
 } from "@/store/relics";
-import {COORD_NAME, router} from "@/router";
-import {ElMessageBox} from "element-plus";
-import {relicsEdit, addArtifacts} from "./quisk";
+import { COORD_NAME, router } from "@/router";
+import { ElMessageBox } from "element-plus";
+import { relicsEdit, addArtifacts } from "./quisk";
 import TexToolTip from "@/components/tex-tooltip.vue";
-import {debounce} from "@/util";
-import {QUERY_COORD_NAME} from "@/router";
-
+import { debounce } from "@/util";
+import { QUERY_COORD_NAME } from "@/router";
 
 const initProps: RelicsPageProps = {
   pageNum: 1,
   pageSize: 10,
 };
-const pageProps = ref({...initProps});
+const pageProps = ref({ ...initProps });
 const total = ref<number>(0);
 const relicsArray = ref<Relics[]>([]);
 
 const refresh = debounce(async () => {
   const data = await relicsPageFetch(pageProps.value);
   total.value = data.total;
-  relicsArray.value = data.records;
+  relicsArray.value = data.list;
 });
 
 const delHandler = async (relicsId: number) => {
@@ -125,7 +122,7 @@ const delHandler = async (relicsId: number) => {
   }
 };
 const getQueryRouteLocation = (row: Relics) =>
-    router.resolve({name: QUERY_COORD_NAME, params: {relicsId: row.relicsId}});
+  router.resolve({ name: QUERY_COORD_NAME, params: { relicsId: row.relicsId } });
 
 const shareHandler = async (row: Relics) => {
   const link = location.origin + location.pathname + getQueryRouteLocation(row).href;
@@ -135,29 +132,31 @@ const shareHandler = async (row: Relics) => {
 };
 
 const addHandler = async () => {
-  await addArtifacts({
+  const data = await addArtifacts({
     submit: async (data) => {
-
+      await addRelicsFetch(data);
+      await refresh();
     },
   });
-}
+};
 
 const editHandler = async (relics: Relics) => {
-  await relicsEdit({
-    relics,
+  await addArtifacts({
+    data: relics,
     submit: async (data) => {
       await updateRelicsFetch(data);
       await refresh();
     },
   });
 };
-watch(pageProps, refresh, {deep: true, immediate: true});
+watch(pageProps, refresh, { deep: true, immediate: true });
 onActivated(refresh);
 
-const handleAddArtifact = () => {
-
-}
+const queryHandler = (item: Relics) => {
+  router.push({ name: 'artifact-scenes', params: {id: item.id} })
+};
 
+const handleAddArtifact = () => {};
 </script>
 
 <style scoped lang="scss">
@@ -168,7 +167,7 @@ const handleAddArtifact = () => {
 
   .action-group {
     display: flex;
-    justify-content: flex-end
+    justify-content: flex-end;
   }
 }
 
@@ -193,4 +192,3 @@ const handleAddArtifact = () => {
   }
 }
 </style>
-  

+ 11 - 2
src/view/layout/nav.vue

@@ -44,13 +44,22 @@
       </div>
     </div>
     <div class="content">
-      <ly-slide class="slide" v-if="user && !['pano', 'map'].includes(name)" />
+      <template v-if="$slots.left">
+        <slot name="left" />
+      </template>
+      <ly-slide
+        class="slide"
+        v-else-if="
+          user && !['pano', 'map'].includes(name) && routeName !== 'artifact-scenes'
+        "
+      />
       <div class="view">
-        <RouterView v-slot="{ Component }">
+        <RouterView v-slot="{ Component }" v-if="!$slots.right">
           <KeepAlive :include="['pano', 'map', 'query-map', 'query-pano']">
             <component :is="Component" />
           </KeepAlive>
         </RouterView>
+        <slot name="right" />
       </div>
     </div>
   </div>

+ 45 - 44
src/view/relics-scene/index.vue

@@ -1,35 +1,38 @@
 <template>
-  <div class="rs-layout" v-if="scenes.length">
-    <iframe :src="url" v-if="url" />
-
-    <div class="mount">
-      <el-select
-        v-model="currentId"
-        placeholder="请选择场景"
-        style="width: 120px"
-        class="scene-select"
-        popper-class="scene-select-popper"
-      >
-        <el-option
-          v-for="item in scenes"
-          :key="item.sceneCode"
-          :label="item.sceneName"
-          :value="item.id"
+  <div class="rs-layout">
+    <template v-if="scenes.length">
+      <iframe :src="url" v-if="url" />
+
+      <div class="mount">
+        <el-select
+          v-model="currentId"
+          placeholder="请选择场景"
+          style="width: 120px"
+          class="scene-select"
+          popper-class="scene-select-popper"
         >
-          <div class="option">
-            <p>{{ item.startTime }}</p>
-            <p>{{ item.sceneName }}</p>
-          </div>
-        </el-option>
-      </el-select>
-
-      <div class="split-screen">
-        <span @click="gotoSlice">
-          <el-icon class="icon"><ZoomIn /></el-icon>
-          分屏
-        </span>
+          <el-option
+            v-for="item in scenes"
+            :key="item.sceneCode"
+            :label="item.sceneName"
+            :value="item.id"
+          >
+            <div class="option">
+              <p>{{ item.startTime }}</p>
+              <p>{{ item.sceneName }}</p>
+            </div>
+          </el-option>
+        </el-select>
+
+        <div class="split-screen">
+          <span @click="gotoSlice">
+            <el-icon class="icon"><ZoomIn /></el-icon>
+            分屏
+          </span>
+        </div>
       </div>
-    </div>
+    </template>
+    <el-empty description="不存在场景资源" style="padding-top: 300px" v-else />
   </div>
 </template>
 
@@ -42,11 +45,11 @@ import { router, setDocTitle } from "@/router";
 import { sendFetch } from "@/request";
 
 const scenes = ref<Scene[]>([]);
-const currentId = ref<number>();
 const current = computed(
   () => currentId.value && scenes.value.find((item) => item.id === currentId.value)
 );
 const url = ref<string>();
+const currentId = ref<number>();
 watch(currentId, async (id) => {
   if (!id) {
     url.value = void 0;
@@ -62,8 +65,8 @@ const gotoSlice = () => {
 const relicsId = computed(
   () => (router.currentRoute.value.params.relicsId as unknown) as number
 );
+
 const fetchScenes = async () => {
-  console.log(relicsId.value);
   if (!relicsId.value) {
     return;
   }
@@ -71,22 +74,20 @@ const fetchScenes = async () => {
   if (!res) {
     return router.replace({ name: "scene" });
   }
-  setDocTitle(res.artifactName);
-
-  await setTimeout(() => {}, 100);
-  const codes = ["SG-wh-gSLkoDR4yki", "SG-wh-yr0t9VgE0FA", "SG-wh-w7a5kIyJ7PQ"];
-  scenes.value = codes.map(
-    (code, i) =>
-      ({
-        id: i + 1,
-        sceneCode: code,
+  setDocTitle(res.projectName);
+  scenes.value = res.sceneList.map(
+    (scene, i) =>
+      (({
+        ...scene,
+        sceneCode: scene.num,
+        // sceneSource: scene.isLaser ? SceneType.CLUNT : SceneType.MESH,
         sceneSource: SceneType.CLUNT,
-        sceneName: `场景名称${i}`,
-        startTime: dateFormat(new Date(2014, i, 1), "yyyy-MM-dd"),
-      } as Scene)
+        sceneName: scene.name,
+        startTime: dateFormat(new Date(scene.createTime), "yyyy-MM-dd"),
+      } as unknown) as Scene)
   );
 
-  if (!current.value) {
+  if (!current.value && scenes.value.length) {
     currentId.value = scenes.value[0].id;
   }
 };

+ 40 - 0
src/view/relics-scene/t.ts

@@ -0,0 +1,40 @@
+export const sceneList = [
+  {
+    "id": 4380,
+    "buildObjStatus": 1,
+    "createTime": "2024-07-19 16:06:35",
+    "name": "视频",
+    "num": "SG-t-dCumg9ddQNo",
+    "payStatus": 1,
+    "sceneName": null,
+    "snCode": "BPVT00010",
+    "status": 2,
+    "thumb": "https://laser-oss.4dkankan.com/static/img_default/pc.jpg",
+    "title": "视频",
+    "viewCount": 32,
+    "isLaser": true,
+    "type": 3,
+    "phone": "15915816041",
+    "bind": false,
+    "shootCount": 6
+  },
+  {
+    "id": 4381,
+    "buildObjStatus": 0,
+    "createTime": "2024-07-19 16:07:05",
+    "name": "slam续拍",
+    "num": "SG-t-5SrpgHNc6Sv",
+    "payStatus": 1,
+    "sceneName": null,
+    "snCode": "BPVT00010",
+    "status": 2,
+    "thumb": "https://laser-oss.4dkankan.com/static/img_default/pc.jpg",
+    "title": "slam续拍",
+    "viewCount": 73,
+    "isLaser": true,
+    "type": 3,
+    "phone": "15915816041",
+    "bind": false,
+    "shootCount": 6
+  }
+]

+ 11 - 0
src/view/scene-select.vue

@@ -48,6 +48,7 @@ const tableProps = {
     );
 
     let tip = false;
+    const count = (val[0] as any)?.shootCount || 0;
     val.forEach((scene) => {
       if (
         selectSelects.value.length &&
@@ -60,6 +61,16 @@ const tableProps = {
         tableProps.tableRef.value!.toggleRowSelection(scene, false);
         tip || ElMessage.error({ message: "计算中场景无法添加", repeatNum: 1 });
         tip = true;
+      } else if (
+        selectSelects.value.length &&
+        selectSelects.value[0].shootCount !== scene.shootCount
+      ) {
+        tip ||
+          ElMessage.error({
+            message: "请添加相同相机类型且点位数量一致的场景",
+            repeatNum: 1,
+          });
+        tableProps.tableRef.value!.toggleRowSelection(scene, false);
       } else {
         simpleScenes.value.push({ sceneCode: scene.sceneCode, sceneId: scene.sceneId });
       }