123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- import { MatController } from "@/controller/MatController";
- import { MatchModule } from "@/modules/match";
- import { QueditorModule } from "@queenjs-modules/queditor";
- import { switchSceneProdComp } from "@queenjs-modules/queditor/module/controls/Queen3dCtrl/actions/geom";
- import { PackMat } from "@queenjs-modules/queditor/objects";
- import { queenApi } from "queenjs";
- export default function createController(
- match: MatchModule,
- queditor: QueditorModule
- ) {
- const ctrl = new MatController();
- const switchComp = (compName = "") => {
- switchSceneProdComp.call(
- queditor.controls.queen3dCtrl,
- queditor.store.pack.scenes[0].products[0].id,
- compName
- );
- };
- function findCompDef(product: any, compName = "") {
- return product.components.find((c: any) => c.name == compName);
- }
- function renderGroupMat(matsGroup: MatsMatchComp, isCreate = true) {
- const targetPro = queditor.helper.findProductDef(matsGroup.productId);
- if (!targetPro) return;
- const targetCom = findCompDef(targetPro, matsGroup.name);
- if (!targetCom) return;
- const mat = queditor.helper.findMatDef(matsGroup.matIds[matsGroup.index]);
- if (!mat) return;
- queditor.actions.updatePackProductCompMat(targetCom, mat, isCreate);
- }
- function clearCompMat(matsGroup: MatsMatchComp) {
- const targetPro = queditor.helper.findProductDef(matsGroup.productId);
- if (!targetPro) return;
- const targetCom = findCompDef(targetPro, matsGroup.name);
- if (!targetCom) return;
- queditor.actions.updatePackProductCompMat(targetCom, PackMat.create());
- }
- ctrl.matItemAction = (
- key: string,
- matsGroup: MatsMatchComp,
- index: number,
- currentMats: PackMat
- ) => {
- switch (key) {
- case "delete":
- match.actions.deleteGroupMat(matsGroup, index);
- break;
- case "rename":
- ctrl.renameGroupMat(currentMats);
- break;
- }
- };
- ctrl.matGroupAction = (key: string, matsGroup: MatsMatchComp) => {
- switch (key) {
- case "rename":
- ctrl.renameMatGroup(matsGroup);
- break;
- case "lock":
- ctrl.lockMatGroup();
- break;
- case "clear":
- ctrl.clearMatGroup(matsGroup);
- // removePackMat? 是否删除面料列表数据
- switchComp(matsGroup.name);
- clearCompMat(matsGroup);
- break;
- }
- };
- ctrl.switchGroupMatIndex = (matsGroup: any, index: number) => {
- matsGroup.index = index;
- renderGroupMat(matsGroup, false);
- };
- ctrl.saveMatch = () => {
- match.store.designDetail.scenePack.source = queditor.store.pack;
- match.actions.saveDesign();
- };
- ctrl.findMatById = (matId: string) => {
- const mats = queditor.store.pack.mats;
- return mats?.find((element) => element.id == matId);
- };
- ctrl.findProductById = (productId: string) => {
- const products = queditor.store.pack.products;
- return products?.find((element) => element.id == productId);
- };
- ctrl.isGroupActive = (matsGroup: MatsMatchComp) => {
- return queditor.store.currActiveProdComp?.name == matsGroup.name;
- };
- ctrl.switchGroupIndex = (matsGroup: MatsMatchComp) => {
- switchComp(matsGroup.name || "");
- };
- ctrl.unbindScroll = () => {
- const app = queditor.controls.queen3dCtrl.queen3d.getAppInstance();
- app.unbind("tap:click");
- ctrl.scrollEl = undefined;
- };
- ctrl.initScroll = (el) => {
- const app = queditor.controls.queen3dCtrl.queen3d.getAppInstance();
- app.on("tap:click", (geom: any, clicked: boolean) => {
- if (!clicked) return;
- const scrollEl = el.$el.querySelector(".content");
- ctrl.scrollEl = scrollEl;
- scrollToElement();
- });
- };
- function scrollToElement() {
- if (!ctrl.scrollEl) return;
- const doms = ctrl.scrollEl.querySelectorAll(".JSDrop");
- if (!doms.length) return;
- const index = match.store.menuOptions.sourceData.mat.findIndex(
- (d: any) => d.name == queditor.store.currActiveProdComp?.name
- );
- ctrl.scrollEl.scrollTo({
- top: doms[index].offsetTop - doms[0].offsetTop,
- behavior: "smooth",
- });
- }
- ctrl.initEvent = () => {
- // drag to mesh
- // queditor.actions.on("updatePackProductCompMat:success", (...args) => {
- // console.error("updatePackProductCompMat:success*************");
- // scrollToElement();
- // });
- // drag to group
- queditor.controls.drager.on(
- "drop:selfDrop",
- async (event: DragEvent, { type, data }: any, extraData: any) => {
- const dropData = await data();
- if (type == "asset3d.mat") {
- dropMat(dropData, extraData);
- } else if (type == "asset3d.mesh") {
- dropMesh(dropData, extraData);
- }
- }
- );
- };
- ctrl.destroy = () => {
- queditor.controls.drager.unbind("drop:selfDrop");
- };
- function dropMesh(dropData: any, target: any) {
- console.log("dropData: ", dropData, target);
- //
- }
- // 拖拽面料
- function dropMat(mat: PackMat, extraData: any) {
- const currGroup = findmatsGroup(extraData);
- if (!currGroup.matIds) currGroup.matIds = [];
- if (currGroup.matIds.includes(mat.id)) {
- queenApi.messageError("不能重复添加色卡");
- return;
- }
- // update mat
- const targetPro = queditor.helper.findProductDef(extraData.productId);
- const targetCom = findCompDef(targetPro, extraData.name);
- if (!targetCom) return;
- queditor.actions.updatePackProductCompMat(targetCom, mat, true);
- currGroup.matIds.push(mat.id);
- currGroup.index = currGroup.matIds.length - 1;
- }
- function findmatsGroup(target: MatsMatchComp) {
- const currGroup = match.store.menuOptions.sourceData.mat.find(
- (r: MatsMatchComp) =>
- r.name == target.name && r.productId == target.productId
- );
- return currGroup;
- }
- return ctrl;
- }
|