本次提交对图纸工作台进行了全面的功能重构和交互体验升级,主要涵盖了数据结构优化、核心逻辑增强、以及全新的可视化交互功能。
### 主要更新内容:
#### 1. **核心应用逻辑 (app.js)**
- **数据结构优化**:
- 重构了初始化逻辑,现在每个图片被视为一个独立的 \drawing\ 对象,包含自身的坐标边界和关联图片,使数据模型更清晰。
- **状态管理**:
- 引入 \currentDrawingId\ 状态,用于精确追踪和控制当前显示的图纸。
- **核心功能增强**:
- **自动图纸切换**: 实现了 \getDrawingForItem\ 映射逻辑,当用户在结构树中选择不同层级的件号时,系统能自动切换到其关联的图纸。
- **件号重命名 (handleItemRename)**: 彻底重写了重命名逻辑,现在支持递归更新所有子孙件号的ID和层级关系,保证了复杂结构下数据的一致性。
- **件号更新 (handleItemUpdate)**: 增强了件号创建和更新的鲁棒性,在添加深层级子件号时,会自动创建不存在的父级装配件,简化了操作流程。
- **图片拖拽**: 新增 \updateImagePosition\ 处理器,允许用户在画布上直接拖动图片并更新其世界坐标。
#### 2. **数据编辑器 (components/DataEditor.js)**
- **UI/UX 改进**:
- 大幅扩展了可编辑字段,增加了中文名、英文名、规格、材料、比例和备注等详细属性。
- 界面现在能够智能区分零件和装配件,并对装配件的重量输入框进行只读处理,因为其重量由子件自动汇总计算。
- 为只读字段添加了明确的提示信息,优化了用户体验。
#### 3. **图纸查看器 (components/DrawingViewer.js)**
- **全新交互功能**:
- **画布平移与缩放**: 实现了完整的画布拖拽平移和鼠标滚轮缩放功能,操作更流畅。
- **表格与图片拖拽**: 用户现在可以直接在画布上拖动明细表 (\GraphicalTable\) 和图纸中的图片,实现自由布局。
- **点击创建件号**: 在画布空白处单击,会弹出输入框,允许用户在指定位置快速创建新的件号,并记录其在图纸上的标记位置 (\markerPosition\)。
- **UI 浮层与控件**:
- 在画布上增加了多个交互浮层,包括左上角的图纸-件号绑定工具、右上角的缩放按钮、以及两侧用于切换图纸的箭头按钮。
- 新增了动态输入框 (\inputBox\),用于响应画布点击事件,提升了操作的直观性。
- **渲染与状态**:
- \GraphicalTable\ 和 \<image>\ 元素现在具备了拖拽所需的所有属性和事件处理。
- 内部状态管理重构,以支持新的视图变换 (\iewTransform\) 和交互状态。
#### 4. **主页面 (index.html)**
- **项目依赖**:
- 将 React 的 CDN 依赖切换为本地 \endor\ 目录下的文件,提高了应用的稳定性和加载速度。
- 移除了 Babel 依赖,因为项目已统一使用 \React.createElement\ API,无需 JSX 编译。
- **样式系统**:
- 全面拥抱 Tailwind CSS 的 \@layer\ 规则,对样式进行了分层(theme, base, components, utilities),使 CSS 结构更清晰、更易于维护。
- 定义了全局 CSS 变量,统一了颜色、尺寸等设计规范。
485 lines
9.3 KiB
JSON
485 lines
9.3 KiB
JSON
{
|
||
"template_name": "标准物料清单-底部表头",
|
||
"row_height": 8.0,
|
||
"header_height": 14.0,
|
||
"column_boundaries": [
|
||
0.0,
|
||
15.0,
|
||
45.0,
|
||
100.0,
|
||
110.0,
|
||
140.0,
|
||
150.0,
|
||
160.0,
|
||
180.0
|
||
],
|
||
"header_definition": {
|
||
"lines": [
|
||
{
|
||
"start": [
|
||
0.0,
|
||
14.0
|
||
],
|
||
"end": [
|
||
185.0,
|
||
14.0
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
160.0,
|
||
6.5
|
||
],
|
||
"end": [
|
||
140.0,
|
||
6.5
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
110.0,
|
||
0.0
|
||
],
|
||
"end": [
|
||
110.0,
|
||
14.0
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
15.0,
|
||
14.0
|
||
],
|
||
"end": [
|
||
15.0,
|
||
0.0
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
45.0,
|
||
0.0
|
||
],
|
||
"end": [
|
||
45.0,
|
||
14.0
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
100.0,
|
||
0.0
|
||
],
|
||
"end": [
|
||
100.0,
|
||
14.0
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
140.0,
|
||
0.0
|
||
],
|
||
"end": [
|
||
140.0,
|
||
14.0
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
160.0,
|
||
0.0
|
||
],
|
||
"end": [
|
||
160.0,
|
||
14.0
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
150.0,
|
||
6.5
|
||
],
|
||
"end": [
|
||
150.0,
|
||
14.0
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
0.0,
|
||
0.0
|
||
],
|
||
"end": [
|
||
185.0,
|
||
0.0
|
||
]
|
||
},
|
||
{
|
||
"start": [
|
||
180.0,
|
||
0.0
|
||
],
|
||
"end": [
|
||
180.0,
|
||
14.0
|
||
]
|
||
}
|
||
],
|
||
"texts": [
|
||
{
|
||
"content": "总",
|
||
"relative_pos": [
|
||
153.62,
|
||
10.23
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "单",
|
||
"relative_pos": [
|
||
143.79,
|
||
10.02
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "TOTAL",
|
||
"relative_pos": [
|
||
152.64,
|
||
7.45
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "SINGLE",
|
||
"relative_pos": [
|
||
141.89,
|
||
7.45
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "备 注",
|
||
"relative_pos": [
|
||
169.33,
|
||
6.8
|
||
],
|
||
"alignment": "BOTTOM_CENTER",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "材 料",
|
||
"relative_pos": [
|
||
121.56,
|
||
6.56
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "数量",
|
||
"relative_pos": [
|
||
102.5,
|
||
6.56
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "名 称",
|
||
"relative_pos": [
|
||
67.3,
|
||
6.56
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "件 号",
|
||
"relative_pos": [
|
||
4.43,
|
||
6.56
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "图号或标准号",
|
||
"relative_pos": [
|
||
22.43,
|
||
6.53
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "MAT'L",
|
||
"relative_pos": [
|
||
122.94,
|
||
2.33
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "QTY.",
|
||
"relative_pos": [
|
||
102.89,
|
||
2.33
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "REMARKS",
|
||
"relative_pos": [
|
||
165.48,
|
||
2.3
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "PARTS. NAME.",
|
||
"relative_pos": [
|
||
65.06,
|
||
1.76
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "DWG NO. OR STD. NO.",
|
||
"relative_pos": [
|
||
19.43,
|
||
1.76
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "PARTS .NO.",
|
||
"relative_pos": [
|
||
7.77,
|
||
1.76
|
||
],
|
||
"alignment": "BOTTOM_CENTER",
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "MASS(kg)",
|
||
"relative_pos": [
|
||
148.32,
|
||
1.7
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"content": "质量",
|
||
"relative_pos": [
|
||
142.49,
|
||
0.87
|
||
],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
}
|
||
]
|
||
},
|
||
"column_definitions": [
|
||
{
|
||
"name": "件 号",
|
||
"relative_x_start": 0.0,
|
||
"text_definitions": [
|
||
{
|
||
"data_key": "main",
|
||
"relative_pos": [5.82, 1.46],
|
||
"alignment": "BOTTOM_LEFT",
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "图号或标准号",
|
||
"relative_x_start": 15.0,
|
||
"text_definitions": [
|
||
{
|
||
"data_key": "main",
|
||
"relative_pos": [14.77, 1.15],
|
||
"alignment": "BOTTOM_CENTER",
|
||
"height": 3.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 256
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "名 称",
|
||
"relative_x_start": 45.0,
|
||
"text_definitions": [
|
||
{
|
||
"data_key": "chinese_name",
|
||
"relative_pos": [1.76, 3.88],
|
||
"height": 3.5,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 3
|
||
},
|
||
{
|
||
"data_key": "english_name",
|
||
"relative_pos": [1.79, 1.0],
|
||
"height": 2.0,
|
||
"style": "HZTXT",
|
||
"layer": "2",
|
||
"color": 256
|
||
},
|
||
{
|
||
"data_key": "specification",
|
||
"relative_pos": [18.68, 3.9],
|
||
"height": 3.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 256
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "数量",
|
||
"relative_x_start": 100.0,
|
||
"text_definitions": [
|
||
{
|
||
"data_key": "main",
|
||
"relative_pos": [4.97, 1.37],
|
||
"alignment": "BOTTOM_CENTER",
|
||
"height": 3.0,
|
||
"style": "HZTXT",
|
||
"layer": "6文字层",
|
||
"color": 256
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "材 料",
|
||
"relative_x_start": 110.0,
|
||
"text_definitions": [
|
||
{
|
||
"data_key": "main",
|
||
"relative_pos": [15.16, 1.12],
|
||
"alignment": "BOTTOM_CENTER",
|
||
"height": 3.5,
|
||
"style": "HZ",
|
||
"layer": "6文字层",
|
||
"color": 256
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "单",
|
||
"relative_x_start": 140.0,
|
||
"text_definitions": [
|
||
{
|
||
"data_key": "main",
|
||
"relative_pos": [5.06, 1.42],
|
||
"alignment": "BOTTOM_CENTER",
|
||
"height": 3.0,
|
||
"style": "HZ",
|
||
"layer": "6文字层",
|
||
"color": 256
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "总",
|
||
"relative_x_start": 150.0,
|
||
"text_definitions": [
|
||
{
|
||
"data_key": "main",
|
||
"relative_pos": [5.06, 1.42],
|
||
"alignment": "BOTTOM_CENTER",
|
||
"height": 3.0,
|
||
"style": "HZ",
|
||
"layer": "6文字层",
|
||
"color": 256
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"name": "备 注",
|
||
"relative_x_start": 160.0,
|
||
"text_definitions": [
|
||
{
|
||
"data_key": "main",
|
||
"relative_pos": [10.06, 1.42],
|
||
"alignment": "BOTTOM_CENTER",
|
||
"height": 3.0,
|
||
"style": "HZ",
|
||
"layer": "6文字层",
|
||
"color": 256
|
||
}
|
||
]
|
||
}
|
||
]
|
||
} |