1
This commit is contained in:
@ -83,15 +83,21 @@ export class AppDropZone {
|
||||
|
||||
/**
|
||||
* 更新墙面分割数并重新生成放置区域
|
||||
* @param divisions 分割数数组,每个元素包含 name(方向标识:前/后/左/右)和 divisions(分割数)
|
||||
* @param divisions 分割数数组,每个元素包含 name(墙面名称或方向标识)和 divisions(分割数)
|
||||
* @example
|
||||
* // 方式1:精确匹配墙面名称(推荐)
|
||||
* updateDivisions([
|
||||
* { name: "前1", divisions: 1 },
|
||||
* { name: "前2", divisions: 2 },
|
||||
* { name: "左", divisions: 3 },
|
||||
* { name: "右", divisions: 4 }
|
||||
* ])
|
||||
*
|
||||
* // 方式2:模糊匹配方向(兼容旧版)
|
||||
* updateDivisions([
|
||||
* { name: "前", divisions: 4 },
|
||||
* { name: "后", divisions: 1 },
|
||||
* { name: "左", divisions: 1 },
|
||||
* { name: "右", divisions: 1 }
|
||||
* { name: "后", divisions: 1 }
|
||||
* ])
|
||||
* 支持模糊匹配:墙面名称中包含"前"、"后"、"左"、"右"等关键字即可匹配
|
||||
*/
|
||||
updateDivisions(divisions: Array<{ name: string; divisions: number }>): PlacementZoneInfo[] {
|
||||
if (!this.dropZoneConfig) {
|
||||
@ -113,31 +119,42 @@ export class AppDropZone {
|
||||
'右': ['右', 'right', 'you']
|
||||
};
|
||||
|
||||
// 匹配墙面名称到方向
|
||||
const matchDirection = (wallName: string): string | null => {
|
||||
// 匹配墙面名称(支持精确匹配和模糊匹配)
|
||||
const matchWallName = (wallName: string): number | null => {
|
||||
// 1. 优先精确匹配完整墙面名称
|
||||
// 例如:wall.name = "80全铁3x6_前1",divisions 中有 "前1"
|
||||
for (const [configName, divisionValue] of Object.entries(divisionsMap)) {
|
||||
if (wallName.includes(configName)) {
|
||||
return divisionValue;
|
||||
}
|
||||
}
|
||||
|
||||
// 2. 如果精确匹配失败,尝试方向模糊匹配(兼容旧版)
|
||||
const lowerName = wallName.toLowerCase();
|
||||
for (const [direction, keywords] of Object.entries(directionKeywords)) {
|
||||
for (const keyword of keywords) {
|
||||
if (lowerName.includes(keyword.toLowerCase()) || wallName.includes(keyword)) {
|
||||
return direction;
|
||||
// 检查 divisionsMap 中是否有该方向的配置
|
||||
if (divisionsMap[direction] !== undefined) {
|
||||
return divisionsMap[direction];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
// 更新配置中的墙面分割数
|
||||
this.dropZoneConfig.walls = this.dropZoneConfig.walls.map(wall => {
|
||||
const direction = matchDirection(wall.name);
|
||||
const newDivisions = direction && divisionsMap[direction] !== undefined
|
||||
? divisionsMap[direction]
|
||||
: wall.divisions || 1;
|
||||
const newDivisions = matchWallName(wall.name);
|
||||
const finalDivisions = newDivisions !== null ? newDivisions : (wall.divisions || 1);
|
||||
|
||||
console.log(`墙面 "${wall.name}" 匹配到方向: ${direction}, 分割数: ${newDivisions}`);
|
||||
console.log(`墙面 "${wall.name}" 匹配到分割数: ${finalDivisions}`);
|
||||
|
||||
return {
|
||||
...wall,
|
||||
divisions: newDivisions
|
||||
divisions: finalDivisions
|
||||
};
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user