|
@@ -27,7 +27,7 @@
|
|
|
<TabPane v-for="current in types" :key="current" :tab="current">
|
|
|
<Table
|
|
|
v-if="typeFilterScenes[current].length"
|
|
|
- :row-key="(record: Scene) => record.modelId"
|
|
|
+ :row-key="(record: Scene) => record.num"
|
|
|
:columns="cloumns"
|
|
|
:rowSelection="rowSelection"
|
|
|
:data-source="typeFilterScenes[current]"
|
|
@@ -89,57 +89,79 @@ import {
|
|
|
initialScenes,
|
|
|
} from "@/store";
|
|
|
|
|
|
-import { SceneType, uploadMaterialToModel, type Scene } from "@/api";
|
|
|
+import { fetchScenesAll, SceneType, uploadMaterialToModel, type Scene } from "@/api";
|
|
|
import { activeModel, getSceneModel } from "@/sdk";
|
|
|
import { selectMaterials } from "@/components/materials/quisk";
|
|
|
import { custom } from "@/env";
|
|
|
import { actionItems, currentItem } from "@/views/merge";
|
|
|
|
|
|
-type Key = Scene["modelId"];
|
|
|
+type Key = string;
|
|
|
|
|
|
const Search = Input.Search;
|
|
|
|
|
|
-const selectIds = computed(() => fuseModels.value.filter(item => item.type !== SceneType.SWMX).map((item) => item.modelId));
|
|
|
+const spStr = '----ll----'
|
|
|
+const selectIds = computed(() => fuseModels.value.filter(item => item.type !== SceneType.SWMX).map((item) => item.raw.isObj + spStr + item.raw.num));
|
|
|
const visible = ref(false);
|
|
|
const keyword = ref("");
|
|
|
const SceneGroupTypeDesc: any = {
|
|
|
[SceneType.SWKK]: 'Mesh场景',
|
|
|
[SceneType.SWKJ]: 'Mesh场景',
|
|
|
- [SceneType.SWSS]: '点云场景',
|
|
|
[SceneType.SWSSMX]: 'Mesh场景',
|
|
|
- [SceneType.SWYDSS]: '点云场景',
|
|
|
[SceneType.SWYDMX]: 'Mesh场景',
|
|
|
- [SceneType.DSFXJ]: 'Mesh场景'
|
|
|
+ [SceneType.DSFXJ]: 'Mesh场景',
|
|
|
+ [SceneType.SWYDSS]: '点云场景',
|
|
|
+ [SceneType.SWSS]: '点云场景',
|
|
|
}
|
|
|
|
|
|
-const origin = computed(() =>
|
|
|
- scenes.value.filter(scene => scene.type !== SceneType.SWMX).map((scene) => ({
|
|
|
- ...scene,
|
|
|
- createTime: scene.createTime.substr(0, 16),
|
|
|
- type: SceneGroupTypeDesc[scene.type],
|
|
|
- }))
|
|
|
-);
|
|
|
+const types = computed(() => [
|
|
|
+ ...new Set(Object.values(SceneGroupTypeDesc) as any[]).values(),
|
|
|
+]);
|
|
|
+const type = ref(types.value[0]);
|
|
|
+
|
|
|
+const meshParams = ref({ isObj: 1, pageNum: 1, pageSize: 12, total: 0 })
|
|
|
+const cloudParams = ref({ isObj: 0, pageNum: 1, pageSize: 12, total: 0 })
|
|
|
+const meshList = ref<Scene[]>([])
|
|
|
+const cloudList = ref<Scene[]>([])
|
|
|
+
|
|
|
+console.error('scene-select')
|
|
|
+let loadCount = 0
|
|
|
+watchEffect(() => {
|
|
|
+ const params = type.value === 'Mesh场景' ? meshParams : cloudParams
|
|
|
+ const list = type.value === '点云场景' ? meshList : cloudList
|
|
|
+ const currentCount = ++loadCount
|
|
|
+ fetchScenesAll(params.value).then((data) => {
|
|
|
+ console.log(currentCount, loadCount)
|
|
|
+ if (currentCount === loadCount) {
|
|
|
+
|
|
|
+ params.value.total = data.total
|
|
|
+ list.value = data.list.map(item => ({ ...item, type: type.value, num: item.isObj + spStr + item.num })) as any
|
|
|
+ console.log(data.total, list.value)
|
|
|
+ }
|
|
|
+ })
|
|
|
+})
|
|
|
+
|
|
|
+const origin = computed(() => [...meshList.value, ...cloudList.value]);
|
|
|
|
|
|
const typeFilterScenes = computed(() => {
|
|
|
const typeScenes: any = {};
|
|
|
for (const type of types.value) {
|
|
|
typeScenes[type] = origin.value
|
|
|
- .filter((item) => item.name && item.modelId && item.name.includes(keyword.value))
|
|
|
+ .filter((item) => item.name && item.num && item.name.includes(keyword.value))
|
|
|
.filter((item) => item.type === type);
|
|
|
}
|
|
|
return typeScenes;
|
|
|
});
|
|
|
|
|
|
-const types = computed(() => [
|
|
|
- ...new Set(origin.value.map((item) => item.type)).values(),
|
|
|
-]);
|
|
|
-const type = ref(types.value[0]);
|
|
|
+watchEffect(() => {
|
|
|
+ console.log(origin.value, type.value, typeFilterScenes.value)
|
|
|
+})
|
|
|
+
|
|
|
const cache = {} as any
|
|
|
|
|
|
const selects = ref<Key[]>(selectIds.value);
|
|
|
const rowSelection: any = ref({
|
|
|
selectedRowKeys: selects,
|
|
|
- onChange: (ids: number[]) => {
|
|
|
+ onChange: (ids: string[]) => {
|
|
|
ids = ids.filter(id => !selectIds.value.includes(id))
|
|
|
cache[type.value] = ids
|
|
|
const curIds = [...selectIds.value]
|
|
@@ -149,7 +171,7 @@ const rowSelection: any = ref({
|
|
|
selects.value = curIds
|
|
|
},
|
|
|
getCheckboxProps: (record: Scene) => ({
|
|
|
- disabled: selectIds.value.includes(record.modelId),
|
|
|
+ disabled: selectIds.value.includes(record.num),
|
|
|
}),
|
|
|
});
|
|
|
const cloumns = [
|
|
@@ -171,9 +193,14 @@ const cloumns = [
|
|
|
},
|
|
|
];
|
|
|
|
|
|
-const addModelHandler = createLoadPack(async (modelIds: number[]) => {
|
|
|
- const models = modelIds.map((modelId) => createFuseModels({ modelId }));
|
|
|
- const addPromises = models.map(addFuseModel);
|
|
|
+const addModelHandler = createLoadPack(async (attachs: any[]) => {
|
|
|
+ const items = attachs.map((attach) => {
|
|
|
+ return {
|
|
|
+ data: createFuseModels(),
|
|
|
+ attach
|
|
|
+ }
|
|
|
+ });
|
|
|
+ const addPromises = items.map(item => addFuseModel(item.data, item.attach));
|
|
|
|
|
|
const addModels = await Promise.all(addPromises);
|
|
|
await new Promise<void>((resolve) => {
|
|
@@ -188,9 +215,10 @@ const addModelHandler = createLoadPack(async (modelIds: number[]) => {
|
|
|
});
|
|
|
});
|
|
|
});
|
|
|
- models.forEach((model) => {
|
|
|
- if (getSceneModel(model)) {
|
|
|
- model.rotation = getSceneModel(model)!.getDefaultRotation();
|
|
|
+
|
|
|
+ items.forEach(item => {
|
|
|
+ if (getSceneModel(item.data)) {
|
|
|
+ item.data.rotation = getSceneModel(item.data)!.getDefaultRotation();
|
|
|
}
|
|
|
});
|
|
|
await asyncTimeout(100);
|
|
@@ -202,11 +230,14 @@ const addModelHandler = createLoadPack(async (modelIds: number[]) => {
|
|
|
});
|
|
|
|
|
|
const okHandler = createLoadPack(async () => {
|
|
|
- console.log(selects.value);
|
|
|
- const models = selects.value.filter(
|
|
|
- (modelId) => !fuseModels.value.some((model) => model.modelId === modelId)
|
|
|
- );
|
|
|
- await addModelHandler(models);
|
|
|
+ const attachs = selects.value.map(item => {
|
|
|
+ const isObj = Number(item.split(spStr)[0])
|
|
|
+ const num = item.split(spStr)[1]
|
|
|
+ return {isObj, num}
|
|
|
+ }).filter(({isObj, num}) =>
|
|
|
+ !fuseModels.value.some((model) => model.raw.isObj === isObj && model.raw.num === num)
|
|
|
+ )
|
|
|
+ await addModelHandler(attachs);
|
|
|
visible.value = false;
|
|
|
});
|
|
|
|
|
@@ -219,20 +250,23 @@ watch(visible, (visible, oldvisible) => {
|
|
|
});
|
|
|
|
|
|
const selectModel = async () => {
|
|
|
- const list = await selectMaterials({
|
|
|
+ let list = await selectMaterials({
|
|
|
uploadFormat: ["zip"],
|
|
|
format: ["obj", "ply", "las", "laz", "b3dm", "shp", "osgb", "glb"],
|
|
|
maxSize: 2 * 1024 * 1024 * 1024,
|
|
|
});
|
|
|
if (!list?.length) return;
|
|
|
+ list = list.filter(item => item.uploadId)
|
|
|
|
|
|
- const modelList = await Promise.all(list.filter(item => item.uploadId).map(item => uploadMaterialToModel(item.uploadId!)))
|
|
|
- const modelIds = modelList
|
|
|
- .map((item) => item.modelId!)
|
|
|
- .filter(
|
|
|
- (modelId) => modelId && !fuseModels.value.some((model) => model.modelId === modelId)
|
|
|
- );
|
|
|
- await addModelHandler(modelIds);
|
|
|
+ // const modelList = await Promise.all(list.map(item => uploadMaterialToModel(item.uploadId!)))
|
|
|
+ const attachs: any[] = []
|
|
|
+ for (let i = 0; i < list.length; i++) {
|
|
|
+ const uploadId = list[i].uploadId
|
|
|
+ if (uploadId ) {
|
|
|
+ attachs.push({ uploadId })
|
|
|
+ }
|
|
|
+ }
|
|
|
+ await addModelHandler(attachs);
|
|
|
};
|
|
|
</script>
|
|
|
|
|
@@ -248,6 +282,7 @@ const selectModel = async () => {
|
|
|
max-height: 500px;
|
|
|
overflow-y: auto;
|
|
|
}
|
|
|
+
|
|
|
.slot-layout {
|
|
|
display: flex;
|
|
|
align-items: center;
|