diff --git a/examples/app-global.js b/examples/app-global.js index dabd128..6c88390 100644 --- a/examples/app-global.js +++ b/examples/app-global.js @@ -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); + + // 不需要手动 clearZones,updateDivisions 会自动处理增量更新 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); + }); } } } diff --git a/examples/demo-global.html b/examples/demo-global.html index 39bf543..0318452 100644 --- a/examples/demo-global.html +++ b/examples/demo-global.html @@ -585,7 +585,7 @@ - +