|
|
11ae3260ac
|
fix(web): 修复图片 URL 拼接逻辑,/api/ 路径支持公网域名去重拼接
|
2026-08-13 10:34:45 +08:00 |
|
|
|
f056cc8625
|
fix: 图片URL双重/api/v1前缀导致404
根因: 后端返回 /api/v1/upload/files/xxx.jpg
前端imageUrl又拼VITE_API_BASE_URL=/api/v1
→ /api/v1/api/v1/upload/files/xxx.jpg → 404
修复: /api/开头的URL直接返回, 不再拼接前缀
|
2026-08-13 09:07:10 +08:00 |
|
|
|
b8ade13b61
|
fix: TaskRecordResponse改用field_validator — 不再污染ORM对象导致图片列表写回VARCHAR报错
根因: model_validate直接obj.images=json.loads()把ORM对象的字符串改成列表
SQLAlchemy autoflush时把列表写回VARCHAR列 → DataError
修复: field_validator(mode=before)在序列化层转换, 不修改ORM源对象
|
2026-08-13 09:03:17 +08:00 |
|
|
|
abc8999358
|
hotfix: get_product_by_serial补全func导入 — 修复500错误
|
2026-08-13 09:01:34 +08:00 |
|
|
|
997e16d9ba
|
fix: 移除manifest.json中残留的push SDK配置
|
2026-08-12 18:05:52 +08:00 |
|
|
|
d8d42e9613
|
feat: 上游显示真实发送人 — 从task_logs追溯created_by
|
2026-08-12 17:52:35 +08:00 |
|
|
|
2170e2e9cf
|
fix: 转交通知中product_sn始终为空 — product查询移到通知循环之前
根因: transfer_task中 product_result 查询在通知创建循环之后
通知内容 product_sn 引用未初始化的 product 变量 → 始终为空字符串
修复: 将 product 查询提前到 flush() 之后、通知循环之前
|
2026-08-12 17:33:32 +08:00 |
|
|
|
badb470ea9
|
Revert "fix: 表格grid 16→14列对齐 — 身份证列宽更充足"
This reverts commit f0503f8800.
|
2026-08-12 17:31:22 +08:00 |
|
|
|
f0503f8800
|
fix: 表格grid 16→14列对齐 — 身份证列宽更充足
|
2026-08-12 17:29:15 +08:00 |
|
|
|
5062745c14
|
Revert "fix: 序列号列兜底显示 — external_serial为空时展示身份证后6位"
This reverts commit 8ac4c425a5.
|
2026-08-12 17:28:04 +08:00 |
|
|
|
8ac4c425a5
|
fix: 序列号列兜底显示 — external_serial为空时展示身份证后6位
|
2026-08-12 17:24:37 +08:00 |
|
|
|
d9c875924c
|
feat: 移动端扫码页手动输入框增加一键清除×按钮
|
2026-08-12 17:23:20 +08:00 |
|
|
|
eba0c3be98
|
fix: 端点层operator_id兜底current_user.username — 管理员代办检测生效
根因: 移动端不传?operator_id=参数, 后端收到None
_admin_proxy_note(None, assignee) → 不触发标记
修复: 6个端点(receive/reject/transfer/end/recall/spawn)
operator_id or current_user.get(username) 兜底
|
2026-08-12 17:19:56 +08:00 |
|
|
|
828aee5161
|
feat: 任务全景搜索框增加一键清除(×)按钮
|
2026-08-12 17:14:09 +08:00 |
|
|
|
e7bfdc261b
|
fix: TaskRecord也加入管理员代办审计标记 — 看板最新动态可见代理操作
新增 _admin_proxy_note() 辅助函数
receive/transfer 的 TaskRecord.remark 自动拼接 [管理员xx代办]
这样看板\最新动态\列就能显示管理员代操作记录
|
2026-08-12 17:11:07 +08:00 |
|
|
|
74cb77f547
|
refactor: 扫码页简化为单页模式 — 拍照按钮+手动输入
|
2026-08-12 17:06:40 +08:00 |
|
|
|
f6ba1d1740
|
fix: 扫码页优化 — 修复黑屏+右下角相册+Webview透明+扫描框位置调整
|
2026-08-12 17:05:42 +08:00 |
|
|
|
a09d4481a3
|
feat: 扫码页双模式 — 主页+微信级全屏扫码(plus.barcode原生摄像头)
|
2026-08-12 16:59:33 +08:00 |
|
|
|
2ca382bb2c
|
refactor: 删除扫码页相册选择功能,仅保留拍照扫码+手动输入
|
2026-08-12 16:55:43 +08:00 |
|
|
|
9f3deb5b6c
|
revert: 恢复扫码页为双按钮版本(拍照+相册)
|
2026-08-12 16:53:31 +08:00 |
|
|
|
8303c8b93f
|
fix: 滑动卡片指示器联动 — _cardIdx从computed迁移到data独立管理
根因: _cardIdx存在computed lane对象中, computed重新计算时重置为0
修复: cardIndices{}独立data管理, keyed by lane._key
新增watch product重置 + getCardIdx/setCardIdx方法
|
2026-08-12 16:11:22 +08:00 |
|
|
|
a5e256330a
|
fix: parseImages支持数组输入 — Pydantic序列化后images已是数组非字符串
|
2026-08-12 16:08:37 +08:00 |
|
|
|
a38be2c568
|
fix: TaskRecordResponse类型匹配后端schema — 补全images字段
|
2026-08-12 16:05:05 +08:00 |
|
|
|
e511952ea0
|
feat: 最新动态列支持图片展示 — 纯文字/纯图片/图文混合三种模式
后端: ProductResponse 新增 latest_record_has_images
前端: 📷图标 + 纯图片时显示"图片记录" + Tooltip标注[含图片]
|
2026-08-12 16:01:24 +08:00 |
|
|
|
92c388190c
|
fix: grid-cols-[16]改为inline style避免Tailwind任意值不生效导致表头竖排
|
2026-08-12 16:00:03 +08:00 |
|
|
|
b21b9ed0e2
|
fix: 表格布局恢复原始列宽 — 规格型号/创建时间各2列, 总16列
|
2026-08-12 15:56:48 +08:00 |
|
|
|
6016f92dd0
|
hotfix: func→sa_func 解决局部变量遮蔽
|
2026-08-12 15:52:06 +08:00 |
|
|
|
b21df33e0a
|
hotfix: 补充 product_service.py 顶部缺失的 func 导入
|
2026-08-12 15:50:01 +08:00 |
|
|
|
163d9c20bb
|
feat: 任务全景表格新增"最新动态"列
后端:
- ProductResponse 新增 latest_record_time/content 字段
- get_all_products 批量查询活跃任务(WIP/PENDING)的最新 task_records
- 使用窗口函数 ROW_NUMBER() PARTITION BY product_id
前端:
- AdminTasksPage: grid-cols-12→grid-cols-[14]
- 表头+数据行新增"最新动态"列
- Tooltip悬浮显示完整内容, 截断+灰字二级排版
|
2026-08-12 15:43:33 +08:00 |
|
|
|
1fdc607c07
|
feat: 管理员代工模式 — 前端权限放开 + 后端审计留痕
前端:
- WorkspaceArea 新增 currentUserRole prop
- isAssignee/canRecall: SUPER_ADMIN/SUPERVISOR 上帝视角直接放行
- 管理员代操作时显示黄色提示条: 正在以管理员身份代[原负责人]操作
- detail.vue: loadCurrentUser 提取并保存 user.role
后端:
- _create_task_log 新增 task_assignee_id 参数
- operator_id!=task_assignee_id 时自动拼接 [管理员xx代办操作]
- 12处调用点全部传入 task_assignee_id
- receive_task 位置赋值确认为 task.assignee_id(非 operator_id)
|
2026-08-12 15:24:50 +08:00 |
|
|
|
49cbf22854
|
fix: 修复or_局部导入遮蔽模块级导入导致UnboundLocalError + Drawer改用size
1. product_service.py: 删除函数内两处 from sqlalchemy import or_
Python解析器看到函数内的import就把or_当局部变量, 在赋值前使用就报UnboundLocalError
模块顶部已有 import or_, 函数内无需重复导入
2. AdminDashboard.tsx: Drawer width→size (Antd v6 deprecation)
|
2026-08-12 15:05:39 +08:00 |
|
|
|
9b59521746
|
feat: 看板在制品点击跳转任务全景并自动展开流转树
Dashboard: WipRow 点击改为 nav(/admin/tasks?sn=xxx)
AdminTasksPage: 读取 ?sn= 参数 → 自动搜索 → 产品加载后自动展开流转树
|
2026-08-12 15:00:37 +08:00 |
|
|
|
fd289db0fc
|
hotfix: 修复模板字符串转义错误导致的编译失败
|
2026-08-12 14:54:06 +08:00 |
|
|
|
e0a5a572cc
|
feat: 扫码页双模式 — 看板跳转显示任务全景(无摄像头), 直接访问保留扫码
|
2026-08-12 14:51:36 +08:00 |
|
|
|
c90b77801d
|
feat: 扫码页支持URL参数自动查询 — /scan?sn=xxx 直接展示流转树
|
2026-08-12 14:50:44 +08:00 |
|
|
|
ddc34182dd
|
fix: 在制品点击改为应用内跳转扫码详情页(流转树)
|
2026-08-12 14:45:09 +08:00 |
|
|
|
729de138cd
|
feat: 在制品附加信息补全 — 设备名称|规格型号|序列号|身份证
后端: WipTask 新增 spec_model, 查询关联 Product.spec_model
前端: 第二行格式改为 物料|规格|序列号:xxx|身份证:xxx
|
2026-08-12 14:43:20 +08:00 |
|
|
|
f608f6bf81
|
fix: SLA阈值调整 — <24h绿 24-48h橙 >48h红
|
2026-08-12 14:35:07 +08:00 |
|
|
|
9460a8492a
|
feat: 在制品列表信息层级重构 + SLA预警色 + 点击跳转
1. 信息层级重构:
主信息: [状态Tag] 任务名 | 负责人: 张三 ⏰3h
附加信息: 物料名 SN:25022 ...A1B2C3 08-12 10:00
新增后端 material_name 字段, 前端卡片式布局
2. SLA滞留预警色:
<12h → 绿色(正常) | 12-24h → 橙色(警告) | >24h → 红色加粗(危险)
3. 交互: 点击卡片新窗口打开对应产品扫码详情页
|
2026-08-12 14:33:56 +08:00 |
|
|
|
42544d7485
|
fix: get_wip_tasks 解包错误 — 新增 external_serial 后 rows 变3列但解包仍是2变量
|
2026-08-12 14:28:00 +08:00 |
|
|
|
079b65e761
|
feat: 在制品加业务序列号 + 追溯码改名为身份证
1. 在制品行: 显示 external_serial(业务序列号)
优先 external_serial → 兜底 product_sn
旧: 装配 A1B2C3D4 张三
新: 装配 25022 张三
2. 留言板: 追溯码 → 身份证
旧: 追溯码: 000000000000000D
新: 身份证: 000000000000000D
3. 后端: WipTask 新增 external_serial 字段
关联查询 Product.external_serial
|
2026-08-12 14:23:23 +08:00 |
|
|
|
ff7c791d49
|
fix: 留言板区分业务序列号与系统追溯码
语义修正:
Product.serial_number = 16位HEX系统追溯码(如000000000000000D)
Product.external_serial = 业务产品序列号(如25022)
后端:
- ProductMessageItem 新增 external_serial 字段
- search_product_messages 关联查询 Product.external_serial
- 关键词搜索也支持按 external_serial 匹配
前端显示:
样品升降台V1J · 序列号: 25022 ← 醒目
追溯码: 000000000000000D ← 10px浅灰小字
|
2026-08-12 14:20:38 +08:00 |
|
|
|
c14bbeb891
|
fix: 3个逻辑/UI Bug修复
Bug1 — 任务总数与进度条不匹配:
tasks_total 从全库历史总数改为 PENDING+WIP+COMPLETED(时段)+REJECTED(时段)
确保进度条4段之和 = 显示的总数, 不再出现11≠9的缺口
Bug2 — 在制品排序混乱:
移除DB层order_by, 改为Python统一按duration_hours降序
无视status, 纯数值排序, 滞留最久排最前
取limit*2条后在Python中排序再截断
Bug3 — 留言板产品显示割裂:
[Tag:SN] 物料名 → 物料名 (SN: A1B2C3D4...)
物料名加粗, SN等宽灰色, 阅读更顺畅
|
2026-08-12 14:13:26 +08:00 |
|
|
|
7906b8834a
|
style: 留言板SN标签改用等宽字体更醒目
|
2026-08-12 14:05:46 +08:00 |
|
|
|
eb9028dcc6
|
fix: 任务进度条补全驳回段 + 在制品名称旁显示SN
1. 任务进度条: 3段→4段 (PENDING|WIP|COMPLETED|REJECTED)
解决总数11但进度条只覆盖9的视觉缺口
驳回以红色段显示, 拼图完整
2. 在制品行: 产品SN从第二行移到任务名旁边
旧: 装配 张三 → 新: 装配 A1B2C3D4 张三
一行看清: 做什么工序+哪台设备+谁在做
|
2026-08-12 14:04:14 +08:00 |
|
|
|
32c234fea1
|
fix: 在制品按滞留时间降序 + 留言抽屉UI美化
1. 在制品排序: nulls_first → nulls_last
已接收任务按receipt_at升序(最早=滞留最久)排最前
未接收任务(null)排最后
2. 留言抽屉UI重设计:
- 卡片式布局: 彩色头像圆+边框阴影+hover效果
- 头像颜色按姓名首字自动分配7色
- Input.Search替代普通Input+Search图标
- 灰色背景区分卡片, 时间格式改为YYYY-MM-DD HH:mm
- 手动分页按钮替代Antd分页器
|
2026-08-12 13:59:39 +08:00 |
|
|
|
ca195192b6
|
fix: 协同留言时间改为北京时间
根因: ProductMessage.created_at 使用 datetime.utcnow (UTC),
与其他所有模型使用的 get_beijing_time 不一致。
看板留言抽屉显示的时间比实际晚8小时。
修复:
1. message.py: DateTime → DateTime(timezone=True)
default 从 datetime.utcnow → get_beijing_time
2. dashboard_service.py: 兜底转换已有数据
naive UTC → replace(tzinfo=UTC) → astimezone(Beijing)
|
2026-08-12 13:55:33 +08:00 |
|
|
|
3b53db03c1
|
feat: 看板全局时间筛选 + 协同留言抽屉
任务1 — 后端时间快照逻辑:
get_dashboard_stats 新增 since/until 参数
PENDING/WIP/总数 → 永远实时快照(忽略时间筛选)
COMPLETED/REJECTED → 严格按时段过滤
完成率基于过滤后的COMPLETED计算
任务2 — 前端时间筛选器:
Radio.Button: 今天 | 近7天 | 近30天 | 自定义
DatePicker.RangePicker 自定义区间
切换时重新拉取 /dashboard/stats
任务3 — 协同留言抽屉:
后端: GET /dashboard/messages(上帝视角全厂数据)
JOIN Product → serial_number + material_name
支持 keyword 搜: SN/物料名/留言人/内容
按 created_at 倒序
前端: Drawer + Input.Search + List
点击"留言"数字打开抽屉
分页展示: 留言人/内容/SN标签/物料名/时间
|
2026-08-12 13:50:56 +08:00 |
|
|
|
39377ae5e4
|
feat: 看板重构 — 在制品看板 + 留言未读数
核心理念转变:
旧: 最近操作历史(谁做了什么)
新: 当前在制品状态(谁的活卡了多久)
后端:
- DashboardStats 新增 unread_messages(协同留言总数)
- 新增 GET /dashboard/wip-tasks(在制品端点)
- 按滞留时间升序排列,PENDING/WIP 任务倒计时
- 自动计算 duration_hours(已滞留小时数)
前端:
- 品质卡片: 新增留言未读数(紫色)
- 在制品看板: 替换原最近动态
每行显示: 状态徽标 | 任务名+负责人+身份证 | 滞留时长
- 滞留颜色: 48h+红 | 24h+橙 | 8h+黄 | <8h灰
- 系统通知可点击跳转
|
2026-08-12 13:40:08 +08:00 |
|
|
|
00fae01eed
|
fix: 看板4项体验修复 — 时间/身份证/日期筛选/通知跳转
1. 完整16位产品身份证号显示(不再截断)
2. 日期筛选栏: 今天 | 近7天 | 近30天 | 全部
- 后端 recent-activity 支持 since/until ISO参数
- 默认展示今天动态,可按时间范围切换
3. 操作人兜底: TaskLog无operator_id时用任务assignee_id
4. 未读通知可点击跳转通知页面 + 快捷入口增加通知中心
|
2026-08-12 13:35:23 +08:00 |
|