This commit is contained in:
2026-06-06 02:47:54 +08:00
parent d179e456fc
commit bc64854cae
5 changed files with 333 additions and 1353 deletions

View File

@ -93,8 +93,7 @@ const getAutoLoadModelList = async () => {
//获取放置区域
const getPlacementZone = async (sku) => {
//pergolaSku 是需要在加载棚子的时取其引用传进来的sku则是配件的sku根据配件的sku来判断放置区域
const kernel = getKernel();
const kernel = getKernel();
let division_include = []
// 同时包含10和13
const only10_13 = /(?=.*10)(?=.*13)/.test(pergolaSku)
@ -104,8 +103,6 @@ const getPlacementZone = async (sku) => {
const only10_12 = /(?=.*10)(?=.*12)/.test(pergolaSku)
// 同时包含10和20
const only10_20 = /(?=.*10)(?=.*20)/.test(pergolaSku)
// 只包含13 无13 无12 无20
const only13 = /(?=.*13)(?!.*10)(?!.*12)(?!.*20)/.test(pergolaSku)
// 1. 只要字符串里包含 10就返回 true
const has10 = /10/.test(sku);
@ -147,21 +144,15 @@ const getPlacementZone = async (sku) => {
}
}
//棚子同时包10和20的并且含配件是13
//棚子同时包10和20的并且含配件是13
if (only10_20 && has13) {
if (pergolaSku === "SPF111S1020PILLAR4PCS") {
division_include.push('前', '后')
}
}
//棚子只包13的并且含配件是13
if (pergolaSku === "SPF111SEM13" && has13) {
division_include.push('前', '后')
}
if (pergolaSku === "SPF111SEM13" && has10) {
division_include.push('左', '右')
}
console.log('[放置区域] 本次配件的方向:', division_include);
const response = await fetch(getApiUrl(`/api/product-configs/by-sku/${sku}`));
const result = await response.json();
@ -170,20 +161,27 @@ const getPlacementZone = async (sku) => {
const { enable_placement_zone, wall_divisions } = result.data;
// const {position_x, position_y, position_z} = data;
if (enable_placement_zone && wall_divisions != undefined) {
console.log(wall_divisions);
console.log('[放置区域] 当前配件的墙面配置:', wall_divisions);
const filteredDivisions = wall_divisions.filter(item => division_include.includes(item.name))
console.log(filteredDivisions);
// 只清除旧的放置区域网格,不清除模型
kernel.dropZone.clearZones();
console.log('[放置区域] 当前显示的墙面:', filteredDivisions);
// 不需要手动 clearZonesupdateDivisions 会自动处理增量更新
const divisions = filteredDivisions.map(wall => ({
name: wall.name,
divisions: wall.divisions
}))
kernel.dropZone.updateDivisions(divisions);
// 显示放置区域
kernel.dropZone.show();
const zones = kernel.dropZone.updateDivisions(divisions);
// 隐藏所有,然后只显示当前需要的墙面
kernel.dropZone.hide();
// 从生成的 zones 中提取完整的墙面名称
const wallNamesToShow = new Set(zones.map(zone => zone.wallName));
wallNamesToShow.forEach(wallName => {
kernel.dropZone.showWall(wallName);
});
}
}
}