bill 4 mesi fa
parent
commit
d0b13a4edd

+ 4 - 1
src/api/constant.ts

@@ -128,4 +128,7 @@ export const MATERIAL_GROUP_LIST = `/service/manage/dict/getByKey/media-library`
 export const AM_MODEL_LIST = `${namespace}/caseAnimation/list`
 export const INSERT_AM_MODEL = `${namespace}/caseAnimation/addOrUpdate`
 export const UPDATE_AM_MODEL = `${namespace}/caseAnimation/addOrUpdate`
-export const DELETE_AM_MODEL = `${namespace}/caseAnimation/delete`
+export const DELETE_AM_MODEL = `${namespace}/caseAnimation/delete`
+
+
+export const MAP_TILE_LIST = `${namespace}/notAuth/getMapConfig`

+ 20 - 0
src/api/map-tile.ts

@@ -0,0 +1,20 @@
+import axios from "./instance";
+import {
+  MAP_TILE_LIST
+} from "./constant";
+
+type ServiceMapTile = {
+  id: number,
+  mapUrl: string,
+  coord: string
+}
+
+export type MapTile = {
+  id: number,
+  mapUrls: string[],
+  coord: string
+}
+
+export const fetchMapTiles = () => {
+   axios.get<ServiceMapTile>(MAP_TILE_LIST)
+}

+ 3 - 0
src/api/material.ts

@@ -12,6 +12,7 @@ import axios from "./instance";
 type ServiceMaterialGroup = {
   dictKey: string;
   dictName: string;
+  useType: string
   id: number;
 };
 type ServiceMaterial = {
@@ -34,6 +35,7 @@ type ServiceMaterial = {
 export type MaterialGroup = {
   id: number;
   name: string;
+  useType: string,
 };
 
 export type Material = {
@@ -101,6 +103,7 @@ export const fetchMaterialGroups = async () => {
   return (await axios.get<ServiceMaterialGroup[]>(MATERIAL_GROUP_LIST)).map(
     (item) => ({
       name: item.dictName,
+      useType: item.useType,
       key: item.dictKey,
       id: item.id,
     })

+ 40 - 29
src/sdk/association/animation.ts

@@ -18,7 +18,7 @@ import { computed, nextTick, reactive, ref, watch, watchEffect } from "vue";
 import { ams } from "@/store/animation";
 import { mergeFuns, uuid } from "@/components/drawing/hook";
 import { getPathNode } from "./path";
-import { diffArrayChange, mount } from "@/utils";
+import { debounce, diffArrayChange, mount } from "@/utils";
 import { Pos } from "@/utils/event";
 import Subtitle from "@/components/subtitle/index.vue";
 import { Size } from "@/components/drawing/dec";
@@ -120,7 +120,7 @@ export const addFrame = (
   const stopLoad = watch(
     () => {
       const exists = am.frames.some(({ id }) => id === data.id);
-      amMap[key]?.am
+      amMap[key]?.am;
       return [amMap[key], exists] as const;
     },
     ([map, exists]) => {
@@ -176,7 +176,7 @@ export const addAction = (
   const stopLoad = watch(
     () => {
       const exists = am.actions.some(({ id }) => id === data.id);
-      amMap[key]?.am
+      amMap[key]?.am;
       return [amMap[key], exists] as const;
     },
     ([map, exists]) => {
@@ -238,13 +238,13 @@ export const addPath = (
     data.pathId ? getPathNode(data.pathId) : undefined
   );
   const pathData = computed(() =>
-    paths.value.find(item => item.id === data.pathId)
+    paths.value.find((item) => item.id === data.pathId)
   );
   const key = getAMKey(am);
   const stopLoad = watch(
     () => {
       const exists = am.paths.some(({ id }) => id === data.id);
-      amMap[key]?.am
+      amMap[key]?.am;
       return [amMap[key], exists, path.value] as const;
     },
     ([map, exists, path]) => {
@@ -262,9 +262,11 @@ export const addPath = (
   const stopAttrib = mergeFuns(
     watchEffect(() => amMap[key]?.paths[data.id]?.changeTime(data.time)),
     watchEffect(() => amMap[key]?.paths[data.id]?.changeReverse(data.reverse)),
-    watchEffect(() => amMap[key]?.paths[data.id]?.changeDuration(data.duration)),
+    watchEffect(() =>
+      amMap[key]?.paths[data.id]?.changeDuration(data.duration)
+    ),
     watchEffect(() => {
-      path.value &&amMap[key]?.paths[data.id]?.changePath(path.value)
+      path.value && amMap[key]?.paths[data.id]?.changePath(path.value);
     })
   );
 
@@ -304,7 +306,7 @@ export const addSubtitle = (data: AnimationModelSubtitle) => {
   const stopLoad = watch(
     () => {
       const exists = am.subtitles.some(({ id }) => id === data.id);
-      amMap[key]?.am
+      amMap[key]?.am;
       return [amMap[key], exists] as const;
     },
     ([map, exists]) => {
@@ -342,10 +344,17 @@ export const addSubtitle = (data: AnimationModelSubtitle) => {
           currentTime.value >= data.time &&
           currentTime.value <= data.time + data.duration
         ) {
-          const update = () =>
-            (pixel.value = amMap[am.id]?.am?.getCurrentSubtitlePixel(
-              size.value
-            ));
+          let isRun = false
+          const update = () => {
+            if (isRun) return;
+            isRun = true
+            setTimeout(() => {
+              pixel.value = amMap[am.id]?.am?.getCurrentSubtitlePixel(
+                size.value
+              );
+              isRun = false
+            }, 160);
+          };
           update();
           show.value = true;
 
@@ -415,11 +424,11 @@ export const associationAnimation = (sdk: SDK, el: HTMLDivElement) => {
   watch(
     () => [...ams.value],
     (newv, oldv = []) => {
-      console.log('diffam', newv, oldv)
+      console.log("diffam", newv, oldv);
       const { added } = diffArrayChange(newv, oldv);
       added.forEach(addAM);
     },
-    {immediate: true}
+    { immediate: true }
   );
 
   watch(
@@ -428,7 +437,7 @@ export const associationAnimation = (sdk: SDK, el: HTMLDivElement) => {
       const { added } = diffArrayChange(newv, oldv);
       added.forEach(addFrame);
     },
-    {immediate: true}
+    { immediate: true }
   );
 
   watch(
@@ -437,7 +446,7 @@ export const associationAnimation = (sdk: SDK, el: HTMLDivElement) => {
       const { added } = diffArrayChange(newv, oldv);
       added.forEach(addAction);
     },
-    {immediate: true}
+    { immediate: true }
   );
 
   watch(
@@ -446,7 +455,7 @@ export const associationAnimation = (sdk: SDK, el: HTMLDivElement) => {
       const { added } = diffArrayChange(newv, oldv);
       added.forEach(addPath);
     },
-    {immediate: true}
+    { immediate: true }
   );
   watch(
     () => ams.value.flatMap((am) => am.subtitles),
@@ -454,19 +463,21 @@ export const associationAnimation = (sdk: SDK, el: HTMLDivElement) => {
       const { added } = diffArrayChange(newv, oldv);
       added.forEach(addSubtitle);
     },
-    {immediate: true}
+    { immediate: true }
   );
 
-  let cleanupMap: Record<string, () => void> = {}
+  let cleanupMap: Record<string, () => void> = {};
   watch(
     () => {
-      const gAms = ams.value.filter(am => !am.frames.length && amMap[am.id]?.am)
-      return gAms
+      const gAms = ams.value.filter(
+        (am) => !am.frames.length && amMap[am.id]?.am
+      );
+      return gAms;
     },
     (am3ds, oldAm3ds = []) => {
-      const { added, deleted } = diffArrayChange(am3ds, oldAm3ds)
+      const { added, deleted } = diffArrayChange(am3ds, oldAm3ds);
       for (const am of added) {
-        const am3d = amMap[am.id]
+        const am3d = amMap[am.id];
         if (!am3d || !am3d.am) continue;
         const frame = am3d.am!.addFrame({
           id: uuid(),
@@ -474,21 +485,21 @@ export const associationAnimation = (sdk: SDK, el: HTMLDivElement) => {
           name: "global-frame",
           time: 0,
         });
-        am3d.globalFrame = frame
+        am3d.globalFrame = frame;
         cleanupMap[am.id] = mergeFuns(
           watchEffect(() => {
-            am.mat && frame.setMat(am.mat)
-            console.log('set-global-frame', am.mat)
+            am.mat && frame.setMat(am.mat);
+            console.log("set-global-frame", am.mat);
           }),
           () => {
             frame.destroy();
             am3d.globalFrame = undefined;
-            delete cleanupMap[am.id]
+            delete cleanupMap[am.id];
           }
-        )
+        );
       }
       for (const am of deleted) {
-        cleanupMap[am.id] && cleanupMap[am.id]()
+        cleanupMap[am.id] && cleanupMap[am.id]();
       }
     },
     { flush: "post", immediate: true }

+ 1 - 0
src/sdk/sdk.ts

@@ -166,6 +166,7 @@ export interface SDK {
     modeChange: { mode: "pano" | "fuse"; active: SceneModel };
   }>;
 
+  changeMapTile: (tempUrls: string[]) => void,
   exitWatchMonitor: () => void
   setBackdrop: (
     drop: string,

+ 3 - 1
src/views/animation/index.vue

@@ -48,7 +48,7 @@ import router from "@/router";
 import { enterEdit } from "@/store";
 import { useViewStack } from "@/hook";
 import { ams, AnimationModel, autoSaveAnimationModel } from "@/store/animation";
-import { computed, nextTick, reactive, ref, watch, watchEffect } from "vue";
+import { computed, nextTick, onUnmounted, reactive, ref, watch, watchEffect } from "vue";
 import { Active } from "./type";
 import { getAddTLItemAttr } from "@/components/drawing-time-line/check";
 import { Message } from "bill/expose-common";
@@ -84,6 +84,8 @@ const frameAction = ref<string>();
 
 const amM = computed(() => focusAM.value && amMap[getAMKey(focusAM.value)]);
 
+onUnmounted(() => (currentTime.value = 0));
+
 const asyncOper = (item: AnimationModel, oper: (obj: AnimationModel3D) => void) => {
   let onCleanup = () => {};
   if (amMap[getAMKey(item)]?.am) {

+ 1 - 1
src/views/animation/left.vue

@@ -102,7 +102,7 @@ const clickHandler = (item: AnimationModel) => {
 
 const selectModel = async () => {
   const groups = await fetchMaterialGroups();
-  const group = groups.find((item) => item.name === "动画模型");
+  const group = groups.find((item) => item.useType === "animation");
   console.error(group);
   const list = await selectMaterials({
     uploadFormat: ["animation-model"],