feat(map): implement robust ID-based asset mapping and fix UI rendering inconsistencies

- Migrated map mapping from fuzzy coordinates to precise asset_id tracking
- Updated MapEditor to allow explicit asset assignment via dropdown
- Fixed LocationView rendering logic to search across all hardware categories
- Standardized map indicators to always render as areas (boxes) with minimum size
- Restored stable CSS max-height for detail modal photos to prevent clipping
- Synced MapEditor saves directly to database via asset_id
This commit is contained in:
2026-06-18 19:49:15 +09:00
parent e77c4854cb
commit aab1f91d3d
5 changed files with 350 additions and 355 deletions

View File

@@ -694,15 +694,12 @@ app.post('/api/maps/save', async (req, res) => {
// 3. Sync Database Assets (asset_location table)
connection = await pool.getConnection();
for (let i = 0; i < boxes.length; i++) {
const newBox = boxes[i];
const oldBox = oldBoxes[i];
if (oldBox && (String(oldBox.x) !== String(newBox.x) || String(oldBox.y) !== String(newBox.y))) {
console.log(`Syncing moved box #${i+1} on ${path}: [${oldBox.x}, ${oldBox.y}] -> [${newBox.x}, ${newBox.y}]`);
for (const box of boxes) {
if (box.asset_id) {
console.log(`Syncing asset ${box.asset_id} to new position: [${box.x}, ${box.y}]`);
await connection.query(
'UPDATE asset_location SET loc_x = ?, loc_y = ? WHERE loc_x = ? AND loc_y = ? AND is_active = 1',
[newBox.x, newBox.y, oldBox.x, oldBox.y]
'UPDATE asset_location SET loc_x = ?, loc_y = ? WHERE asset_id = ? AND is_active = 1',
[box.x, box.y, box.asset_id]
);
}
}