520 lines
23 KiB
Markdown
520 lines
23 KiB
Markdown
如何描述清楚功能,是个大事情
|
||
|
||
|
||
|
||
现状描述:
|
||
1、现在代码是,完全复制的https://bjhardman.cn/bjhardman/hougai_insize_micrometer.git ,目的仅仅是为了 阅读,实际将来我要引用这个git,因为它封装了千分尺的通讯(即:监控Windows,采集千分尺测量的数据)。
|
||
2、hougai_insize_micrometer.git,还有一些对我有用的内容,比如他的页面风格。govcl写的。
|
||
下面描述是 真正的 需求,根据具体需求,仅保留hougai_insize_micrometer.git有用内容,例如:技术架构
|
||
说明:下文中 原git 就是指的 hougai_insize_micrometer.git
|
||
要求:
|
||
1、引用 hougai_insize_micrometer.git,它里面已经包含 千分尺的采集模块。
|
||
2、生产环境部署在 window ,要求用govcl、 有托盘、有桌面图标、开机自启、自动全屏显示、桌面快捷图标、固定开始屏幕、点击输入框自动弹出系统软键盘输入法
|
||
3、没有数据库,用8888接口请求,模仿 原git 代码写法。(8888没有开发呢,你先写着,定义好 url、出入参)
|
||
4、8888 是/Users/syf/space/hardman/spherical 这个服务器 启动地址
|
||
页面和功能描述(参考图片样式,图片是 原git,下面统称 jpg):
|
||
|
||
|
||
************************************************************************************************
|
||
************************************************************************************************
|
||
|
||
在原git 页面基础上,我对页面进行了布局 重新描述。(我把原页面让ai转成 布局描述)
|
||
布局描述 如下:
|
||
|
||
|
||
核心策略:结构化 + 控件化(govcl / Lazarus LCL 风格)
|
||
不要写长篇大论的散文,要用配置表格式描述每个控件的位置、属性和样式。
|
||
|
||
1. 全局设置 (Global Config)
|
||
基准窗口:1280 x 720,PoScreenCenter 居中,Caption = "7315-2 千分尺采集"。
|
||
配色风格(govcl 体系):
|
||
面板底色:colors.ClBtnFace(系统默认灰,约 #F0F0F0)
|
||
选中高亮:types.TColor(0x00FFE0C0)(浅暖橙,与现有项目一致)
|
||
状态绿:colors.ClGreen
|
||
状态红:colors.ClRed
|
||
字体:默认微软雅黑(系统默认),数字 label 不做额外等宽处理(govcl 对 Consolas 不敏感)。
|
||
布局方式:绝对定位(Left / Top / Width / Height),间距常量 gapX=8, gapY=10。
|
||
缩放机制:基于 baseW=1280 / baseH=720,relayout() 中按 sx/sy 等比缩放,字号、宽高均 clamp 下限。
|
||
|
||
2. 区域拆解 (Area Breakdown)
|
||
三模块:顶部控制栏 / 仪表盘显示区 / 操作与数据区。
|
||
|
||
模块 A:顶部控制栏
|
||
位置:top0 = 8,从左到右水平排列,垂直居中对齐。
|
||
控件列表(按 Left 递增):
|
||
|
||
控件 | 类型 | Left | Top | Width | Height | 关键属性
|
||
[portLab] | TLabel | 12 | 13 | Auto | Auto | Caption="串口:",FontSize=12
|
||
[portCombo] | TComboBox | 56 | 8 | 110 | 28 | Style=CsDropDownList,默认选中第一项(COM7 优先)
|
||
[statusLabel] | TLabel | 172 | 12 | 120 | 24 | Caption="●已连接"=ClGreen / "●未连接"=ClBtnFace / "●已断开"=ClRed,FontSize=12
|
||
[connectBtn] | TButton | 296 | 8 | 60 | 28 | Caption 切换 "连接"/"断开"
|
||
[refreshBtn] | TButton | 360 | 8 | 60 | 28 | Caption="刷新"
|
||
[labU] | TLabel | 440 | 12 | Auto | Auto | Caption="单位:",FontSize=12
|
||
[rbMM] | TRadioButton | 490 | 10 | Auto | Auto | Caption="mm",Checked(同 Form 下自动互斥)
|
||
[rbInch] | TRadioButton | 550 | 10 | Auto | Auto | Caption="inch"
|
||
[autoStartChk]| TCheckBox | 610 | 12 | Auto | Auto | Caption="开机启动",Checked 同步注册表
|
||
|
||
模块 B:仪表盘显示区(4 卡片面板)
|
||
容器:TPanel,BevelOuter=BvRaised(凸起卡片效果),4 个水平排列。
|
||
位置:top0 = 50,Left = 16 + i*(panelW + gapX),其中 panelW = (cw - 5*gapX)/4(响应式等分)。
|
||
面板内部:父 = 对应 TPanel,3 行 TLabel 垂直居中。
|
||
|
||
卡片 n 内部控件(以卡片 1 为例):
|
||
|
||
控件 | 类型 | Align | Alignment | FontSize | 说明
|
||
row.name | TLabel | alTop | taCenter | nameSize=13 | Caption="① 左侧底孔 B"
|
||
row.value | TLabel | alTop | taCenter | valSize=24 | Caption="----",Layout=tlCenter,点击弹 NumKeypad;范围 clamp(20,96)
|
||
row.unit | TLabel | alTop | taCenter | unitSize=14 | Caption="mm"(随 rbMM/rbInch 切换)
|
||
|
||
四卡片内容:
|
||
|
||
卡片 | name Caption | value 示例
|
||
1 | "① 左侧底孔 B" | "425.282"
|
||
2 | "② 变量活塞孔大孔 D" | "425.282"
|
||
3 | "③ 变量活塞孔小孔 E" | "423.151"
|
||
4 | "④ 右侧变量活塞孔 M" | "423.151"
|
||
|
||
高亮状态:当前选中面板 → panel.Color = TColor(0x00FFE0C0);未选中 → colors.ClBtnFace。
|
||
(govcl TPanel 无圆角/border 颜色能力,用 BevelOuter + Color 区分即可。)
|
||
|
||
模块 C:操作与数据区
|
||
中间行:
|
||
|
||
控件 | 类型 | 定位 | FontSize | 说明
|
||
[bottomLabel] | TLabel | Left=16, Top=panelH+top0+12 | 11 | Caption="序列号: XXXXX 末帧 seq=XX HH:MM:SS"(动态更新)
|
||
[clearBtn] | TButton | 右下区域,动态计算 | 22 | Caption="清除",宽高基准 200x70,随 sx/sy 缩放
|
||
[submitBtn] | TButton | 右下区域,clearBtn 左侧 | 22 | Caption="提交",宽高基准 200x70
|
||
|
||
底部表格:
|
||
容器:TListView,ViewStyle=VsReport,ReadOnly=true,RowSelect=true,GridLines=true。
|
||
FontSize=12(范围 10-20)。
|
||
9 列定义(列宽随 sx 缩放,末列占剩余宽度):
|
||
|
||
序号 | Caption | 基准 Width
|
||
1 | 时间 | 130
|
||
2 | 工件号 | 110
|
||
3 | 工单号 | 110
|
||
4 | 托盘码 | 100
|
||
5 | 分类 | 90
|
||
6 | 左侧底孔 B | 120
|
||
7 | 活塞孔大 D | 120
|
||
8 | 活塞孔小 E | 120
|
||
9 | 活塞孔右 M | 剩余 cw - 前8列(min=100)
|
||
|
||
(govcl TListView 不支持斑马纹,通过 GridLines 保证可读性即可。)
|
||
|
||
|
||
|
||
|
||
|
||
************************************************************************************************
|
||
************************************************************************************************
|
||
|
||
|
||
按需求修改 后 的 布局描述 如下:
|
||
|
||
|
||
核心策略:结构化 + 控件化(govcl / Lazarus LCL 风格)
|
||
不要写长篇大论的散文,要用配置表格式描述每个控件的位置、属性和样式。
|
||
|
||
1. 全局设置 (Global Config)
|
||
基准窗口:1280 x 720,PoScreenCenter 居中,Caption = "7315-2 千分尺采集"。
|
||
配色风格(govcl 体系):
|
||
面板底色:colors.ClBtnFace(系统默认灰,约 #F0F0F0)
|
||
选中高亮:types.TColor(0x00FFE0C0)(浅暖橙,与现有项目一致)
|
||
状态绿:colors.ClGreen
|
||
状态红:colors.ClRed
|
||
字体:默认微软雅黑(系统默认),数字 label 不做额外等宽处理(govcl 对 Consolas 不敏感)。
|
||
布局方式:绝对定位(Left / Top / Width / Height),间距常量 gapX=8, gapY=10。
|
||
缩放机制:基于 baseW=1280 / baseH=720,relayout() 中按 sx/sy 等比缩放,字号、宽高均 clamp 下限。
|
||
|
||
2. 区域拆解 (Area Breakdown)
|
||
三模块:顶部控制栏 / 工单信息 / 仪表盘显示区 / 操作与数据区。
|
||
|
||
模块 A:顶部控制栏
|
||
位置:top0 = 8,从左到右水平排列,垂直居中对齐。
|
||
控件列表(按 Left 递增):
|
||
|
||
控件 | 类型 | Left | Top | Width | Height | 关键属性
|
||
[portLab] | TLabel | 12 | 13 | Auto | Auto | Caption="串口:",FontSize=12
|
||
[portCombo] | TComboBox | 56 | 8 | 110 | 28 | Style=CsDropDownList,默认选中第一项(COM7 优先)
|
||
[statusLabel] | TLabel | 172 | 12 | 120 | 24 | Caption="●已连接"=ClGreen / "●未连接"=ClBtnFace / "●已断开"=ClRed,FontSize=12
|
||
[connectBtn] | TButton | 296 | 8 | 60 | 28 | Caption 切换 "连接"/"断开"
|
||
[refreshBtn] | TButton | 360 | 8 | 60 | 28 | Caption="刷新"
|
||
[labU] | TLabel | 440 | 12 | Auto | Auto | Caption="单位:",FontSize=12
|
||
[rbMM] | TRadioButton | 490 | 10 | Auto | Auto | Caption="mm",Checked(同 Form 下自动互斥)
|
||
[rbInch] | TRadioButton | 550 | 10 | Auto | Auto | Caption="inch"
|
||
[autoStartChk]| TCheckBox | 610 | 12 | Auto | Auto | Caption="开机启动",Checked 同步注册表
|
||
|
||
模块 B:工单信息
|
||
来源说明:输入工单号,查询出来的,包括工件数量、工件类型、工单状态、创建时间。
|
||
位置:top0 = 48,从左到右水平排列,垂直居中对齐。
|
||
控件列表(按 Left 递增):
|
||
|
||
控件 | 类型 | Left | Top | Width | Height | 关键属性
|
||
[workOrderNoLabel]| TLabel | 12 | 53 | Auto | Auto | Caption="工单号:",FontSize=12
|
||
[workOrderNoEdit] | TEdit | 72 | 48 | 200 | 28 | Text="",Placeholder="请输入工单号"
|
||
[queryBtn] | TButton | 278 | 48 | 70 | 28 | Caption="查询"
|
||
[typeLabel] | TLabel | 356 | 53 | Auto | Auto | Caption="工件类型:",FontSize=12
|
||
[typeCombo] | TComboBox | 426 | 48 | 120 | 28 | Style=CsDropDownList,ReadOnly=true
|
||
[countLabel] | TLabel | 554 | 53 | Auto | Auto | Caption="工件数量:",FontSize=12
|
||
[countValue] | TLabel | 626 | 53 | 60 | Auto | Caption="--",FontSize=12
|
||
[statusLabel] | TLabel | 694 | 53 | Auto | Auto | Caption="工单状态:",FontSize=12
|
||
[statusValue] | TLabel | 766 | 53 | 80 | Auto | Caption="--",FontSize=12
|
||
[timeLabel] | TLabel | 854 | 53 | Auto | Auto | Caption="创建时间:",FontSize=12
|
||
[timeValue] | TLabel | 934 | 53 | 220 | Auto | Caption="--",FontSize=12
|
||
|
||
|
||
模块 C:仪表盘显示区(动态面板)(工件类型是“方形” 对应1 卡片面板)(工件类型是“圆形” 对应3 卡片面板)
|
||
容器:TPanel,BevelOuter=BvRaised(凸起卡片效果),水平排列。
|
||
位置:top0 = 84,Left = 16 + i*(panelW + gapX),其中:
|
||
- 方形(1卡片):panelW = cw - 32(左右边距各16)
|
||
- 圆形(3卡片):panelW = (cw - 4*gapX - 32)/3(响应式等分)
|
||
面板内部:父 = 对应 TPanel,3 行 TLabel 垂直居中。
|
||
|
||
卡片 n 内部控件(以卡片 1 为例):
|
||
|
||
控件 | 类型 | Align | Alignment | FontSize | 说明
|
||
row.name | TLabel | alTop | taCenter | nameSize=13 | Caption="① 弧面半径 B"(方形)/ "① 球面直径 A"(圆形)
|
||
row.value | TLabel | alTop | taCenter | valSize=24 | Caption="----",Layout=tlCenter,点击弹 NumKeypad;范围 clamp(20,96)
|
||
row.unit | TLabel | alTop | taCenter | unitSize=14 | Caption="mm"(随 rbMM/rbInch 切换)
|
||
|
||
方形(1卡片)内容:
|
||
|
||
卡片 | name Caption | value 示例
|
||
1 | "① 弧面半径 B" | "425.282"
|
||
|
||
圆形(3卡片)内容:
|
||
|
||
卡片 | name Caption | value 示例
|
||
1 | "① 球面直径 A" | "425.282"
|
||
2 | "② 球面轮廓度 B" | "425.282"
|
||
3 | "③ 球面位置 C" | "423.151"
|
||
|
||
高亮状态:当前选中面板 → panel.Color = TColor(0x00FFE0C0);未选中 → colors.ClBtnFace。
|
||
(govcl TPanel 无圆角/border 颜色能力,用 BevelOuter + Color 区分即可。)
|
||
|
||
模块 D:操作与数据区
|
||
中间行:
|
||
|
||
控件 | 类型 | 定位 | FontSize | 说明
|
||
[bottomLabel] | TLabel | Left=16, Top=panelH+top0+12 | 11 | Caption="序列号: XXXXX 末帧 seq=XX HH:MM:SS"(动态更新)
|
||
[workpieceNoLabel]| TLabel | Left=16, Top=panelH+top0+40 | 12 | Caption="工件号:"
|
||
[workpieceNoEdit] | TEdit | Left=80, Top=panelH+top0+36, Width=150| 12 | Text="",Placeholder="请输入工件号"
|
||
[filterBtn] | TButton | Left=238, Top=panelH+top0+36, Width=60| 12 | Caption="筛选"
|
||
[clearBtn] | TButton | 右下区域,动态计算 | 22 | Caption="清除",宽高基准 200x70,随 sx/sy 缩放
|
||
[submitBtn] | TButton | 右下区域,clearBtn 左侧 | 22 | Caption="提交",宽高基准 200x70
|
||
|
||
底部表格:
|
||
容器:TListView,ViewStyle=VsReport,ReadOnly=true,RowSelect=true,GridLines=true。
|
||
FontSize=12(范围 10-20)。
|
||
列定义(列宽随 sx 缩放,末列占剩余宽度,根据工件类型动态显示测量列):
|
||
|
||
方形(5列):
|
||
序号 | Caption | 基准 Width
|
||
1 | 时间 | 130
|
||
2 | 工单号 | 130
|
||
3 | 工件号 | 110
|
||
4 | 分类 | 90
|
||
5 | 弧面半径 B | 剩余 cw - 前4列(min=120)
|
||
|
||
圆形(7列):
|
||
序号 | Caption | 基准 Width
|
||
1 | 时间 | 130
|
||
2 | 工单号 | 130
|
||
3 | 工件号 | 110
|
||
4 | 分类 | 90
|
||
5 | 球面直径 A | 120
|
||
6 | 球面轮廓度 B | 120
|
||
7 | 球面位置 C | 剩余 cw - 前6列(min=100)
|
||
|
||
(govcl TListView 不支持斑马纹,通过 GridLines 保证可读性即可。)
|
||
|
||
|
||
|
||
|
||
功能交互描写:
|
||
1、模块 B:工单信息:输入工单号,点击"查询"按钮,调用 8888 查询工单信息,并展示工件类型、工件数量、工单状态、创建时间。
|
||
2、根据查询返回的工件类型,动态切换仪表盘显示区:方形 → 1卡片面板,圆形 → 3卡片面板。
|
||
3、工件号输入框:输入工件号后点击"筛选"按钮,调用8888查询对应工件的测量记录,填充底部表格。
|
||
4、提交按钮:点击提交前检查工单号是否填写,未填写则提示;提交成功后自动刷新底部表格。
|
||
|
||
---
|
||
|
||
8888 后端 API 接口定义(服务地址:http://localhost:8888)
|
||
|
||
接口 1:查询工单信息
|
||
- 路径:GET /api/v1/work-order/query
|
||
- 入参:
|
||
- work_order_no (string, 必填): 工单号
|
||
- 响应:
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"msg": "success",
|
||
"data": {
|
||
"work_order_no": "WO-2024001-001",
|
||
"workpiece_type": "square",
|
||
"workpiece_type_name": "方形",
|
||
"workpiece_count": 100,
|
||
"status": "processing",
|
||
"status_name": "处理中",
|
||
"created_at": "2024-01-15 10:30:00"
|
||
}
|
||
}
|
||
```
|
||
- 字段说明:
|
||
- workpiece_type: "square"(方形)/ "circle"(圆形)
|
||
- status: 参考 public.work_order.status 枚举值
|
||
|
||
接口 2:查询工件测量记录列表
|
||
- 路径:GET /api/v1/measurement/list
|
||
- 入参:
|
||
- work_order_no (string, 必填): 工单号
|
||
- workpiece_no (string, 可选): 工件号(过滤条件)
|
||
- page (int, 默认 1): 页码
|
||
- limit (int, 默认 20): 每页数量
|
||
- 响应:
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"msg": "success",
|
||
"data": {
|
||
"list": [
|
||
{
|
||
"id": 1,
|
||
"work_order_no": "WO-2024001-001",
|
||
"workpiece_no": "WP-001",
|
||
"category": "A类",
|
||
"workpiece_type": "circle",
|
||
"value_a": 425.282,
|
||
"value_b": 425.282,
|
||
"value_c": 423.151,
|
||
"unit": "mm",
|
||
"created_at": "2024-01-15 11:00:00"
|
||
}
|
||
],
|
||
"total": 150,
|
||
"page": 1,
|
||
"limit": 20
|
||
}
|
||
}
|
||
```
|
||
- 字段说明:
|
||
- value_a: 球面直径 A(圆形)/ 弧面半径 B(方形)
|
||
- value_b: 球面轮廓度 B(圆形)
|
||
- value_c: 球面位置 C(圆形)
|
||
- category: 分类
|
||
- 方形工件仅返回 value_a
|
||
|
||
接口 3:提交测量数据
|
||
- 路径:POST /api/v1/measurement/upload
|
||
- 入参:
|
||
```json
|
||
{
|
||
"work_order_no": "WO-2024001-001",
|
||
"workpiece_no": "WP-002",
|
||
"category": "A类",
|
||
"workpiece_type": "circle",
|
||
"value_a": 425.282,
|
||
"value_b": 425.282,
|
||
"value_c": 423.151,
|
||
"unit": "mm",
|
||
"serial": "COM7",
|
||
"timestamp": "2024-01-15 11:30:00"
|
||
}
|
||
```
|
||
- 字段说明:
|
||
- workpiece_type: "square"(方形)/ "circle"(圆形)
|
||
- value_a: 必填
|
||
- value_b: 圆形必填,方形不传
|
||
- value_c: 圆形必填,方形不传
|
||
- category: 分类(可选)
|
||
- 响应:
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"msg": "success",
|
||
"data": {
|
||
"id": 2
|
||
}
|
||
}
|
||
```
|
||
|
||
接口 4:获取工单号下拉列表(可选,用于工单查询时的选择)
|
||
- 路径:GET /api/v1/work-order/list
|
||
- 入参:
|
||
- keyword (string, 可选): 工单号关键词
|
||
- limit (int, 默认 20): 返回数量
|
||
- 响应:
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"msg": "success",
|
||
"data": [
|
||
{
|
||
"work_order_no": "WO-2024001-001",
|
||
"description": "工单描述"
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
待决策事项:
|
||
|
||
1. **工件类型扩展**:除了"方形"和"圆形",是否还有其他工件类型?如果有,需要补充对应的数据字段和卡片布局。
|
||
答:没了
|
||
|
||
2. **表格列动态显示**:当前设计表格列根据工件类型动态显示(方形5列,圆形7列),是否需要额外的"分类"列?
|
||
答:需要,在托盘码后面
|
||
|
||
3. **提交按钮数据**:点击"提交"按钮时,需要提交哪些数据?目前设计包含订单号、工单号、工件号、托盘码、测量值,是否还有其他必填字段(如操作员ID)?
|
||
答:不需要了。 说明:1、把“托盘码”全删除吧,没有这个数据。2、订单号,就是顶部那个订单号,如果没填,页面提示先填写再提交
|
||
|
||
4. **订单号与工单号关系**:订单号和工单号是什么关系?一个订单对应多个工单?查询工单时是否需要同时输入两个字段?
|
||
答:我描述错了,请全部修改:订单就是工单,全部改成工单号。一个工单号,对应多个 工件号
|
||
|
||
5. **筛选按钮行为**:工件号输入框旁的"筛选"按钮是前端本地过滤表格数据,还是重新调用8888接口查询?
|
||
答: 8888查询
|
||
|
||
6. **工件号清除按钮**:工件号输入框的"小X杠"清除按钮,govcl TEdit不原生支持,需要自定义实现(如在输入框右侧叠加小按钮),是否确认需要此功能?
|
||
答:不必实现,不要 "小X杠" 啦
|
||
|
||
7. **测量数据来源**:仪表盘卡片的测量值是千分尺自动采集填入,还是手动输入?如果是自动采集,是否需要实时显示采集值?
|
||
答:自动显示。参考”原git“,本项目要把 “原git” 作为公共库,引入
|
||
|
||
8. **8888接口鉴权**:8888后端接口是否需要鉴权(如Token验证)?如果需要,客户端如何获取和携带Token?
|
||
答:不需要鉴权
|
||
|
||
9. **托盘码来源**:托盘码字段如何获取?是手动输入还是从工单信息中关联获取?
|
||
答:没有这个字段了,删除吧
|
||
|
||
10. **提交后表格刷新**:提交测量数据成功后,是否需要自动刷新底部表格数据?
|
||
答:刷新
|
||
|
||
---
|
||
|
||
## 8888 后端实际实现与文档差异(千分尺项目需同步修改)
|
||
|
||
以下是 8888(当前项目 spherical)实际实现的接口,与文档中定义的接口有差异,千分尺项目需按此调整调用:
|
||
|
||
### 差异 1:API 路径前缀统一收拢
|
||
|
||
文档中接口分散在不同路径下,实际实现统一收拢到 `/api/v1/micrometer/` 前缀下:
|
||
|
||
| 文档路径 | 实际路径 |
|
||
|---------|---------|
|
||
| `GET /api/v1/work-order/query` | `GET /api/v1/micrometer/work-order/query` |
|
||
| `GET /api/v1/measurement/list` | `GET /api/v1/micrometer/measurements` |
|
||
| `POST /api/v1/measurement/upload` | `POST /api/v1/micrometer/measurements` |
|
||
| `GET /api/v1/work-order/list` | `GET /api/v1/micrometer/work-orders` |
|
||
|
||
### 差异 2:响应格式
|
||
|
||
文档使用 `msg` 字段,实际项目统一使用 `message` 字段:
|
||
|
||
```json
|
||
{ "code": 0, "message": "success", "data": {...} }
|
||
```
|
||
|
||
### 差异 3:接口 1 查询工单信息 - 入参字段名
|
||
|
||
文档使用 `work_order_no`(下划线),实际使用 `workOrderNo`(驼峰):
|
||
|
||
```
|
||
GET /api/v1/micrometer/work-order/query?workOrderNo=WO-2024001-001
|
||
```
|
||
|
||
### 差异 4:接口 2 查询测量记录 - 路径和入参名
|
||
|
||
- 路径:`GET /api/v1/micrometer/measurements`
|
||
- 入参使用驼峰:`workOrderNo`, `workpieceNo`, `page`, `limit`
|
||
- 分页参数使用项目通用 PageReq(`page` 从 1 开始,`limit` 默认 10)
|
||
|
||
示例:
|
||
```
|
||
GET /api/v1/micrometer/measurements?workOrderNo=WO-2024001-001&workpieceNo=WP-001&page=1&limit=20
|
||
```
|
||
|
||
### 差异 5:接口 3 提交测量数据 - 路径和字段名
|
||
|
||
- 路径:`POST /api/v1/micrometer/measurements`
|
||
- 请求体字段使用驼峰命名(`workOrderNo`, `workpieceNo`, `workpieceType`, `valueA`, `valueB`, `valueC`)
|
||
- 响应使用 `message` 而非 `msg`
|
||
|
||
### 差异 6:接口 4 工单列表 - 路径
|
||
|
||
- 路径:`GET /api/v1/micrometer/work-orders?keyword=xxx&limit=20`
|
||
- `description` 字段当前返回工单号(后续可扩展)
|
||
|
||
### 差异 7:数据存储
|
||
|
||
测量数据存储在独立的 `micrometer_measurement` 表中,而非复用现有 `job` 表。工件号(`workpiece_no`)是手动录入的唯一编码,不设唯一约束,同一工件号可多次录入测量数据。
|
||
|
||
### 差异 8:无需鉴权
|
||
|
||
所有千分尺接口无需 JWT Token 鉴权,可直接调用。
|
||
|
||
### 差异 9:工件类型映射
|
||
|
||
8888 项目的 `product_type.category` 字段与千分尺工件类型映射关系:
|
||
- `SQUARE` → `square`(方形)
|
||
- `GENERAL` → `circle`(圆形)
|
||
|
||
---
|
||
|
||
## UI 优化修改记录(需 8888 同步调整)
|
||
|
||
### 修改 1:默认全屏显示
|
||
- 窗口启动时自动最大化(`WsMaximized`)
|
||
|
||
### 修改 2:输入框点击弹出软键盘
|
||
- Windows 系统下通过系统输入法自动弹出软键盘
|
||
- 输入框已设置 `TextHint` 提示
|
||
|
||
### 修改 3:卡片样式优化
|
||
- 增大卡片高度(180px)
|
||
- 增大字号:名称16px,数值28px,单位16px
|
||
- 使用 `BvRaised` 凸起效果
|
||
|
||
### 修改 4:工件号输入框调整
|
||
- 移到清除按钮同行,左侧位置
|
||
- 尺寸与按钮一致(高44px),字体14px
|
||
- 失去焦点时自动查询下方列表(`OnExit` 事件)
|
||
- 仍作为过滤条件传给 8888
|
||
|
||
### 修改 5:提交按钮提示增强
|
||
- 工单号为空:提示"请先输入工单号"
|
||
- 未查询工单:提示"请先查询工单"
|
||
- 工件号为空:提示"请输入工件号"
|
||
|
||
### 修改 6:工单查询失败提示
|
||
- 查询不到工单时提示:"未查询到工单信息,请检查工单号是否正确"
|
||
- 清空当前工单信息显示
|
||
|
||
### 修改 7:触控屏优化
|
||
- 增大模块A/B行高(44px)
|
||
- 增大字号(14px)
|
||
- 增大按钮宽度和输入框宽度
|
||
|
||
### 修改 8:关闭窗口二次确认
|
||
- 点击右上角关闭时弹出确认对话框
|
||
- "确定要退出程序吗?"
|
||
|
||
### 修改 9:列表默认显示全部数据
|
||
- 未填写工单号/工件号时,调用查询接口传入空参数
|
||
- 8888 需支持无参数时返回全部记录
|
||
- 要求按时间倒序排列(最新录入在第一条)
|
||
|
||
### 修改 10:新增导出功能
|
||
- 在"工件号"输入框右侧新增"导出"按钮
|
||
- 按钮尺寸:宽120px,高44px
|
||
- 导出格式:CSV(可直接用Excel打开)
|
||
- 文件名格式:`20060102_150405.csv`(年月日时分秒)
|
||
- 导出内容:当前表格所有行数据
|
||
|
||
### 修改 11:工件类型映射
|
||
- 后端返回 `GENERAL` → 前端显示为"圆形"(circle)
|
||
- 后端返回 `SQUARE` → 前端显示为"方形"(square) |