|
@@ -48,9 +48,10 @@ import { computed, nextTick, reactive, ref, watch, watchEffect } from "vue";
|
|
|
import { Active } from "./type";
|
|
|
import { getAddTLItemAttr } from "@/components/drawing-time-line/check";
|
|
|
import { Message } from "bill/expose-common";
|
|
|
-import { uuid } from "@/components/drawing/hook";
|
|
|
+import { mergeFuns, uuid } from "@/components/drawing/hook";
|
|
|
import { title } from "./type";
|
|
|
import { amMap, getAMKey, currentTime } from "@/sdk/association/animation";
|
|
|
+import { AnimationModel3D } from "@/sdk";
|
|
|
|
|
|
enterEdit(() => router.back());
|
|
|
initialAnimationModels();
|
|
@@ -138,9 +139,28 @@ const add = <T extends Active["key"]>(
|
|
|
}
|
|
|
};
|
|
|
|
|
|
+const asyncOper = (item: AnimationModel, oper: (obj: AnimationModel3D) => void) => {
|
|
|
+ let onCleanup = () => {};
|
|
|
+ if (amMap[getAMKey(item)]?.am) {
|
|
|
+ oper(amMap[getAMKey(item)]!.am!);
|
|
|
+ } else {
|
|
|
+ onCleanup = watchEffect(() => {
|
|
|
+ if (amMap[getAMKey(item)]?.am!) {
|
|
|
+ oper(amMap[getAMKey(item)]!.am!);
|
|
|
+ onCleanup && onCleanup();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ return onCleanup;
|
|
|
+};
|
|
|
+
|
|
|
+let cleanSelect: (() => void) | null = null;
|
|
|
const changeSelect = ({ select, unSelect }: Record<string, AnimationModel[]>) => {
|
|
|
- select.forEach((item) => amMap[getAMKey(item)].am?.changeShow(true));
|
|
|
- unSelect.forEach((item) => amMap[getAMKey(item)].am?.changeShow(false));
|
|
|
+ cleanSelect && cleanSelect();
|
|
|
+ cleanSelect = mergeFuns(
|
|
|
+ ...select.map((item) => asyncOper(item, (am) => am.changeSelect(true))),
|
|
|
+ ...unSelect.map((item) => asyncOper(item, (am) => am.changeSelect(false)))
|
|
|
+ );
|
|
|
};
|
|
|
|
|
|
const deleteAm = (am: AnimationModel) => {
|