浏览代码

Merge branch 'v1.9.0-jm' of http://192.168.0.115:3000/bill/fuse-code into v1.9.0-jm

xzw 8 月之前
父节点
当前提交
63ca2ceacc

+ 10 - 0
src/api/material.ts

@@ -16,6 +16,7 @@ export type Material = {
   size: number;
   groupId: number;
   group: string;
+  modelId?: number
 };
 
 export type MaterialPageProps = PagingRequest<Partial<Material> & {groupIds: number[]}>;
@@ -52,6 +53,15 @@ export const fetchMaterialPage = async (params: MaterialPageProps) => {
         group: "分组1",
         size: 1024,
       },
+      {
+        id: params.pageNum + 200,
+        name: "mesh",
+        format: "obj",
+        url: "icon/h_default_64.png",
+        groupId: 2,
+        group: "分组2",
+        size: 254.58 * 1024 * 1024,
+      },
     ],
   };
   if (params.groupIds) {

+ 12 - 8
src/components/materials/index.vue

@@ -34,7 +34,13 @@
           :data-source="origin.list"
           :pagination="{ ...origin, current: origin.pageNum }"
           @change="handleTableChange"
-        />
+        >
+          <template #bodyCell="{ column, record }">
+            <template v-if="column.key === 'size'">
+              {{ getSizeStr(record.size) }}
+            </template>
+          </template>
+        </Table>
         <div style="padding: 1px" v-else>
           <Empty
             description="暂无结果"
@@ -50,7 +56,7 @@
 <script lang="ts" setup>
 import { Modal, Input, Table, Empty, TableProps } from "ant-design-vue";
 import { computed, reactive, ref, watch } from "vue";
-import { createLoadPack, debounce, debounceStack } from "@/utils";
+import { createLoadPack, debounce, debounceStack, getSizeStr } from "@/utils";
 import type { PagingResult, Scene } from "@/api";
 import {
   fetchMaterialGroups,
@@ -102,10 +108,8 @@ const rowSelection: any = ref({
   getCheckboxProps: (record: Material) => {
     return {
       disabled:
-        props.format &&
-        !props.format.includes(record.format) &&
-        props.maxSize &&
-        record.size > props.maxSize,
+        (props.format && !props.format.includes(record.format)) ||
+        (props.maxSize && record.size > props.maxSize),
     };
   },
 });
@@ -123,8 +127,8 @@ const cloumns = computed(() => [
   },
   {
     title: "大小",
-    dataIndex: "number",
-    key: "number",
+    dataIndex: "size",
+    key: "size",
   },
   {
     title: "分组",

+ 3 - 2
src/components/tagging/sign-new.vue

@@ -68,8 +68,8 @@ const emit = defineEmits<{
 
 // const pos = ref();
 const [posStyle, pos] = usePixel(() => ({
-  localPos: { x: 0, y: 0, z: 0 },
-  modelId: "0",
+  localPos: props.scenePos.localPos,
+  modelId: props.scenePos.modelId,
 }));
 
 const queryItems = computed(() =>
@@ -161,6 +161,7 @@ tag.bus.on("click", () => iconClickHandler());
 const changePos = () => {
   const c = tag.getImageCenter();
   pos.value = { localPos: c };
+  console.error("getImageCenter", c);
 };
 changePos();
 

+ 0 - 1
src/hook/use-pixel.ts

@@ -30,7 +30,6 @@ export const usePixel = (
       pos.value.localPos,
       pos.value.modelId
     );
-    console.log(pos.value)
     if (!screenPos) {
       pixel.value = void 0;
       return;

+ 46 - 8
src/layout/edit/scene-select.vue

@@ -53,13 +53,31 @@
     </div>
   </Modal>
 
-  <div @click="visible = true">
-    <slot></slot>
+  <div>
+    <Dropdown placement="bottom">
+      <slot></slot>
+      <template #overlay>
+        <Menu>
+          <MenuItem @click="visible = true">场景管理</MenuItem>
+          <MenuItem @click="selectModel">媒体库</MenuItem>
+        </Menu>
+      </template>
+    </Dropdown>
   </div>
 </template>
 
 <script lang="ts" setup>
-import { Modal, Input, Table, Empty, Tabs, TabPane } from "ant-design-vue";
+import {
+  Modal,
+  Input,
+  Table,
+  Empty,
+  Tabs,
+  TabPane,
+  Dropdown,
+  Menu,
+  MenuItem,
+} from "ant-design-vue";
 import { computed, nextTick, ref, watch, watchEffect } from "vue";
 import { scenes, save, SceneTypeDesc } from "@/store";
 import { asyncTimeout, createLoadPack } from "@/utils";
@@ -73,6 +91,7 @@ import {
 
 import type { Scene } from "@/api";
 import { getSceneModel } from "@/sdk";
+import { selectMaterials } from "@/components/materials/quisk";
 
 type Key = Scene["modelId"];
 
@@ -133,10 +152,8 @@ const cloumns = [
   },
 ];
 
-const okHandler = createLoadPack(async () => {
-  const models = selects.value
-    .filter((modelId) => !fuseModels.value.some((model) => model.modelId === modelId))
-    .map((modelId) => createFuseModels({ modelId }));
+const addModelHandler = createLoadPack(async (modelIds: number[]) => {
+  const models = modelIds.map((modelId) => createFuseModels({ modelId }));
   const addPromises = models.map(addFuseModel);
 
   await Promise.all(addPromises);
@@ -159,6 +176,13 @@ const okHandler = createLoadPack(async () => {
   });
   await asyncTimeout(100);
   await save();
+});
+
+const okHandler = createLoadPack(async () => {
+  const models = selects.value.filter(
+    (modelId) => !fuseModels.value.some((model) => model.modelId === modelId)
+  );
+  await addModelHandler(models);
   visible.value = false;
 });
 
@@ -166,10 +190,24 @@ watch(visible, (visible, oldvisible) => {
   if (visible !== oldvisible) {
     keyword.value = "";
     selects.value = selectIds.value;
-
     visible && initialScenes();
   }
 });
+
+const selectModel = async () => {
+  const list = await selectMaterials({
+    format: ["obj", "ply", "las", "laz", "b3dm"],
+    maxSize: 2 * 1024 * 1024 * 1024,
+  });
+  if (!list?.length) return;
+  const modelIds = list
+    .map((item) => item.modelId!)
+    .filter(
+      (modelId) => modelId && !fuseModels.value.some((model) => model.modelId === modelId)
+    );
+  console.log(modelIds);
+  // await addModelHandler(modelIds);
+};
 </script>
 
 <style lang="less" scoped>

+ 22 - 0
src/utils/index.ts

@@ -33,6 +33,28 @@ export const loadLib = (() => {
   };
 })();
 
+
+export const getSizeStr = (size: number) => {
+  let mb = size;
+  if (mb < 1024) {
+    return `${mb.toFixed(2)}BYTE`;
+  }
+  mb /= 1024;
+  if (mb < 1024) {
+    return `${mb.toFixed(2)}KB`;
+  }
+  mb /= 1024;
+  if (mb < 1024) {
+    return `${mb.toFixed(2)}MB`;
+  }
+  mb /= 1024;
+  if (mb < 1024) {
+    return `${mb.toFixed(2)}GB`;
+  }
+  mb /= 1024;
+  return `${mb.toFixed(2)}TB`;
+};
+
 export const togetherCallback = (cbs: (() => void)[]) => () => together(cbs)
 
 export const together = (cbs: (() => void)[]) => {