增加地面,增加放置区域筛选逻辑

This commit is contained in:
2026-05-21 09:56:13 +08:00
parent b5b70251e2
commit c504fca3de
10 changed files with 377 additions and 35 deletions

View File

@ -22,6 +22,10 @@ export const initApp = (kernel) => {
return kernelInstance;
};
//全局唯一棚子sku
let pergolaSku = ""
/**
* 获取当前 kernel 实例
*/
@ -64,8 +68,6 @@ export const getAutoLoadModelList = async () => {
const kernel = getKernel();
const url = apiConfig.getApiUrl('/api/models/auto-load/list')
console.log('API URL:', url)
console.log('apiConfig:', apiConfig)
const response = await fetch(url)
const data = await response.json()
const models = data.data // 这就是模型列表
@ -74,6 +76,7 @@ export const getAutoLoadModelList = async () => {
if (model.placement_zone) {
const { alpha, border_color, color, show_border, thickness, walls } = model.placement_zone
kernel.dropZone.setData({
color: color,
@ -98,7 +101,53 @@ export const getAutoLoadModelList = async () => {
//获取放置区域
export const getPlacementZone = async (sku) => {
const kernel = getKernel();
console.log(pergolaSku, sku);
let division_include = []
// 同时包含10和13
const only10_13 = /(?=.*10)(?=.*13)/.test(pergolaSku)
// 只包含10 无13 无12
const only10 = /(?=.*10)(?!.*13)(?!.*12)/.test(pergolaSku)
// 同时包含10和12
const only10_12 = /(?=.*10)(?=.*12)/.test(pergolaSku)
// 1. 只要字符串里包含 10就返回 true
const has10 = /10/.test(sku);
// 2. 只要字符串里包含 13就返回 true
const has13 = /13/.test(sku);
// 2. 只要字符串里包含 12就返回 true
const has12 = /12/.test(sku);
//包含10不包含13
if (only10 && has10) {
console.log('棚子包含10不包含13 并且配件是10 说明是正方体 或者是10*20的');
division_include.push('前', '后', '左', '右', "前1", "后1", "前2", "后2")
}
//同时包含10和13
if (only10_13 && has10) {
console.log('棚子同时包10和13的并且含配件是10');
division_include.push('左', '右')
}
//同时包含10和13
if (only10_13 && has13) {
console.log('棚子同时包10和13的并且含配件是13');
division_include.push('前', '后')
}
if (only10_12 && has12) {
console.log('棚子同时包10和12的并且含配件是12');
division_include.push('前', '后')
}
if (only10_12 && has10) {
console.log('棚子同时包10和12的并且含配件是12');
division_include.push('左', '右')
}
const response = await fetch(apiConfig.getApiUrl(`/api/product-configs/by-sku/${sku}`));
const result = await response.json();
if (result.code === 200) {
@ -107,10 +156,12 @@ export const getPlacementZone = async (sku) => {
// const {position_x, position_y, position_z} = data;
if (enable_placement_zone && wall_divisions != undefined) {
const filteredDivisions = wall_divisions.filter(item => division_include.includes(item.name))
console.log(filteredDivisions);
// 只清除旧的放置区域网格,不清除模型
kernel.dropZone.clearZones();
const divisions = wall_divisions.map(wall => ({
name: wall.name, // 获取最后一个下划线后的部分
const divisions = filteredDivisions.map(wall => ({
name: wall.name,
divisions: wall.divisions
}))
@ -248,12 +299,12 @@ export const executeEvent2 = async (result, sku) => {
kernel.model.removeAll();
// 清除所有 SKU 映射
clearAllSkuMappings();
}
}
// 先处理所有 change_model 事件
for (const event of result.data.events) {
console.log(event);
if (event.event_type === 'change_model') {
const { target_data } = event;
console.log(event.target_data);
@ -359,11 +410,18 @@ export const getProductConfig = async (sku) => {
if (result.code === 200) {
console.log(result.data);
const { enable_placement_zone } = result.data;
// await initPlacementZoneConfig();
//如果触发的是配件,需要显示放置区域
if (enable_placement_zone) {
if (pergolaSku === "") {
console.error("请先加载棚子模型")
return;
}
getPlacementZone(sku)
}
//如果触发的是换棚子模型
else {
pergolaSku = sku;
executeEvent2(result, sku)
}
}