Browse Source

添加模型替换的选择

liwei 1 year ago
parent
commit
4c41a75f62

+ 11 - 0
src/controllers/queentreeController.ts

@@ -18,6 +18,17 @@ export class  TreeController {
         return ret.payload;
     }
 
+    async selectOnePackScene() {
+        const bus = this._bus;
+        const route = await bus.requestApi("queentree.local.router", {name:"selpacksceneblack"})
+        if (!route || !route.Url ) return;
+        const url = route.Url;
+        const payload = {}
+        const ret:any = await bus.RequestWebView("selpacksceneblack", {dev:true, height: 600, width: 900, payload, url, alwaysOnTop:true,})
+        console.log("selpackprodblack=>", ret);
+        return ret.payload;
+    }
+
     async  SelectedPackComp(pack:any, prodId:string, compId:string) {
         queenApi.showLoading("数据发送中")
         const bus = this._bus;

+ 0 - 1
src/modules/editor/components/CompUI/index.ts

@@ -4,4 +4,3 @@ export * as Card from "./customUI/Cards/Card";
 export * as CardList from "./customUI/Cards/CardList";
 export * as Cover from "./customUI/Cover";
 export * as Title1 from "./customUI/Titles/Title1";
-

+ 1 - 0
src/modules/resource/actions/material.ts

@@ -65,6 +65,7 @@ export const materialActions = ResourceModule.action({
           vidoes: vidoes,
           images: images,
           matSlots: this.store.matSlots,
+          meshSlots: this.store.meshSlots,
         },
       });
       queenApi.messageSuccess("任务提交成功");

+ 1 - 0
src/modules/resource/store.ts

@@ -8,6 +8,7 @@ export const store = ResourceModule.store({
       webEditor: { pack: {} },
     } as any,
     matSlots: [] as any[],
+    meshSlots: [] as any[],
   }),
   
   getters: {

+ 5 - 3
src/pages/queentree/router.ts

@@ -3,11 +3,13 @@ const routes: Array<RouteRecordRaw> = [
   {
     path: "/selmat",
     name: "home",
-    // meta: {
-    //   needAuth: true,
-    // },
     component: () => import("./selectMat"),
   },
+  {
+    path: "/selpackscene",
+    name: "selpackscene",
+    component: () => import("./selectPackScene"),
+  },
 ];
 
 const router = createRouter({

+ 1 - 1
src/pages/queentree/selectMat.tsx

@@ -8,7 +8,7 @@ export default defineComponent({
 
     return () =>(
         <div class={rootStyles}>
-            <LibraryModal nodeTypes={["matGroupItem", "mat", "packMat"]} />
+            <LibraryModal title="选择材质球" nodeTypes={["matGroupItem", "mat", "packMat"]} apiName="selmatblack"/>
         </div>
         
         // <div>hello</div>

+ 19 - 0
src/pages/queentree/selectPackScene.tsx

@@ -0,0 +1,19 @@
+import { computed, defineComponent, reactive } from "vue";
+import LibraryModal from "../website/CreateMat/components/LibraryModal";
+import { css, cx } from "@linaria/core";
+
+export default defineComponent({
+  setup() {
+    return () =>(
+        <div class={rootStyles}>
+            <LibraryModal title="选择模型包场景" nodeTypes={["packItem"]} apiName="selpacksceneblack" />
+        </div>
+      );
+  },
+});
+
+const rootStyles = css`
+  > div {
+    margin: unset !important;
+  }
+`;

+ 15 - 12
src/pages/website/CreateMat/components/LeftPanel.tsx

@@ -31,18 +31,21 @@ export default defineComponent({
       }),
     });
 
-    const replaceMesh = async () => {
-      const branchFolder = await resource.showModal<AssetItemFile>(
-        <LibraryModal />,
-        { width: "900px" }
+    const replaceMesh = async (record: any) => {
+      const data = await resource.treeController.selectOnePackScene();
+      if (!data) return;
+
+      console.log("replaceMesh=>", record);
+      const slotId = record.Id || record.id;
+      const meshConf = resource.store.meshSlots.find(
+        (item) => item.id == slotId
       );
-
-      const pack = await branchFolder.getAssetDetail();
-      const data = queditor.helper.getRelatedSourceByProduct(
-        pack.source as Pack["source"],
-        branchFolder.state.id
-      );
-
+      if (meshConf) {
+        meshConf.pack = data;
+      } else {
+        const meshSlot = { id: slotId, pack: data };
+        resource.store.meshSlots.push(meshSlot);
+      }
       queditor.actions.insertMesh(data);
     };
 
@@ -105,7 +108,7 @@ export default defineComponent({
                 <div>
                   <ProductItem
                     record={record}
-                    onChange={replaceMesh}
+                    onChange={()=>{replaceMesh(record)}}
                     active={record.Id == resource.store.selectedId}
                     onClick={() => {
                       switchSceneProdComp.call(

+ 48 - 16
src/pages/website/CreateMat/components/LibraryModal.tsx

@@ -1,6 +1,7 @@
 import { BusController } from "@/controllers/natsController";
 import { TreeController } from "@/controllers/queentreeController";
 import "@/modules/_default/viewerStorage";
+import { useQueditor } from "@queenjs-modules/queditor";
 import {
   initQueentreeExplorer,
   NodeTypes,
@@ -10,15 +11,19 @@ import PickNodeStep from "@queenjs-modules/queentree-explorer/components/PickNod
 import { StepController } from "@queenjs-modules/queentree-explorer/components/PickNodeSteps/StepController";
 import { Exception, useModal } from "queenjs";
 import { defineComponent } from "vue";
-import { array } from "vue-types";
+import { array, string } from "vue-types";
 
 export default defineComponent({
   props: {
     nodeTypes: array<NodeTypes>().def(["packProd"]),
+    apiName: string().isRequired,
+    title:string().isRequired,
   },
 
   setup(props) {
-    document.title = "选择材质球";
+    
+    document.title = props.title || "queentree选择资源";
+    const queditor = useQueditor();
 
     const stepCtrol = new StepController(1);
     // const modal = useModal();
@@ -33,33 +38,61 @@ export default defineComponent({
       },
     });
 
+    // 获取Pack中场景相关的资源
+  function getRelatedSourceByScene(
+    pack: any,
+    sceneId: any
+  ) {
+    
+    const packNew = {...pack};
+    const scenes = packNew.scenes.filter((item:any)=>item.id==sceneId);
+    packNew.scenes = scenes;
+    return packNew;
+  }
+
     async function submit() {
      try {
-        const branchFolder = stepCtrol.state.data.pickNodes[0];
-        const pack = await branchFolder.getAssetDetail();
+        const pickedNode = stepCtrol.state.data.pickNodes[0];
+        const pack = await pickedNode.getAssetDetail();
 
-        let mat;
-        switch (branchFolder.nodeType) {
+        let ret;
+        switch (pickedNode.nodeType) {
           case "matGroupItem":
-            mat = pack.source.colorCards.find(
-              (d: any) => d.id == branchFolder.state.id
+            ret = pack.source.colorCards.find(
+              (d: any) => d.id == pickedNode.state.id
             );
             break;
           case "packMat":
-            mat = pack.source.mats.find(
-              (d: any) => d.id == branchFolder.state.id
+            ret = pack.source.mats.find(
+              (d: any) => d.id == pickedNode.state.id
             );
             break;
           case "mat":
-            mat = pack.source
+            ret = pack.source
             break;
-        }
-        _tree.CloseTreeOpen("selmatblack", mat)
+
+          case "packProd":
+            ret = queditor.helper.getRelatedSourceByProduct(
+              pack.source as any,
+              pickedNode.state.id
+            );
+            break;
+          case "packItem":
+            ret = getRelatedSourceByScene(
+              pack.source as any,
+              pickedNode.state.id
+            );
+            break;
+        }        
+        console.log( props.apiName, ret);
+        
+        _tree.CloseTreeOpen(props.apiName, ret)
+
         return;
       } catch (error: any) {
         Exception.error(error?.toString());
       }
-      _tree.CloseTreeOpen("selmatblack")
+      _tree.CloseTreeOpen(props.apiName)
     }
     
     return () => {
@@ -69,7 +102,7 @@ export default defineComponent({
           onSubmit={submit}
           onCancel={() =>{
             console.log("cancel")
-            _tree.CloseTreeOpen("selmatblack");
+            _tree.CloseTreeOpen(props.apiName);
           }}
           control={stepCtrol}
           lastStepText="确定"
@@ -81,7 +114,6 @@ export default defineComponent({
                   control={stepCtrol}
                   options={{
                     nodeTypes: nodeTypes,
-                    //   childNodeType: "packProd",
                   }}
                 />
               ),

+ 6 - 6
vue.config.js

@@ -7,17 +7,17 @@ const {
 } = require("@ckeditor/ckeditor5-dev-translations");
 const { styles } = require("@ckeditor/ckeditor5-dev-utils");
 
-const publicPath =
-  process.env.NODE_ENV === "production"
-    ? `//infishwaibao.oss-cn-chengdu.aliyuncs.com/queenshow/`
-    : "./";
-// const publicPath = "./";
+// const publicPath =
+//   process.env.NODE_ENV === "production"
+//     ? `//infishwaibao.oss-cn-chengdu.aliyuncs.com/queenshow/`
+//     : "./";
+const publicPath = "./";
 
 module.exports = defineConfig({
   pages: {
     index: "src/pages/website/index.ts",
     editor: "src/pages/editor/index.ts",
-    selmat: "src/pages/queentree/index.ts",
+    treeapi: "src/pages/queentree/index.ts",
   },
   publicPath: publicPath,
   transpileDependencies: [/ckeditor5-[^/\\]+[/\\]src[/\\].+\.js$/],