87919146de
fix: 基础信息参考价格可修改——脏检查白名单补全 referencePrice
2026-09-02 18:39:17 +08:00
129cb1119f
fix: 出库选单 BOM 下拉唯一值修复,打印模板补齐欠料待补区与借库对齐
2026-09-02 18:39:17 +08:00
ec9aafbe51
feat: 借库归还日期贯穿申请/审批/扫码借库;BOM 套餐添加与打印、缺货写入申请原因
2026-09-02 18:39:17 +08:00
bf7b2cc6d3
feat: BOM 库存接口支持按版本查询,修复同一编号多版本下拉回显错乱
2026-09-02 18:39:17 +08:00
85130db6ea
perf: Docker 构建使用清华镜像源并启用 BuildKit pip 缓存挂载,大幅加速重复构建
2026-09-02 18:39:09 +08:00
0887b20302
deploy: MOM 服务器备份补 venv/node_modules 排除,加速备份
2026-09-01 18:24:48 +08:00
d8be963036
deploy: MOM prod Track 地址硬编码,避免被服务器残留 .env 覆盖
...
- 之前 default 会被 .env 覆盖成 dev 的 track_backend,生产联动失效
- 改为硬编码 track_backend_prod:8000,仅密钥保留可配置
2026-09-01 18:05:27 +08:00
aa3a470d67
deploy: MOM prod 补充 Track 联动环境变量与网络互通
...
- 补 TRACK_WEBHOOK_URL/KEY、TRACK_API_URL、TRACK_OUTBOUND_WEBHOOK_URL(容器名 track_backend_prod)
- backend 加入 mom_net 外部网络(inventory-app_default)与 Track prod 互通
2026-09-01 18:02:38 +08:00
ee22927660
fix: 解耦 Webhook 身份证与库存序列号,恢复批号入库纯净
...
- 前端:新增临时字段 form.track_id 存 16位身份证,Batch 时 form.serial_number 清空
- 前端:submitForm 不再把身份证补进 payload.serial_number,改为透传 payload.track_id
- 后端:StockSemi 仅存 serial_number(Batch 为空),notify_track 优先用 track_id
2026-09-01 16:44:48 +08:00
c3637e0c25
fix: 出库备注欠料改用实时库存计算,不再自动填历史欠料
...
- buildRemarkWithShortage 改用 bomDetailList 实时 shortage(需量-当前库存)
- 库存补足后,欠料不再自动拼进出库备注(原 localStorage 历史记录一直带出)
2026-09-01 16:35:32 +08:00
8fd4a2ae53
style: 采购申请'完结本批'按钮样式统一为出库审批的 plain 实心样式
...
- 去掉 link 文字样式,改用 type=danger plain size=small,与出库审批完结按钮一致
2026-09-01 16:23:44 +08:00
4e09860b36
feat: 采购申请完结功能移到批次主行,与出库审批一致
...
- 移除展开行内的单条完结按钮(需点开),改为主行'完结本批'直接可见
- 后端 batch-approve 支持 action=close(批次内已通过→已完结)
- 超管/库管在主行操作列即可看到并完结
2026-09-01 16:21:48 +08:00
8c554fdd3b
fix: 采购申请完结按钮不显示——v-else-if 被注释打断关联
...
- v-if 与 v-else-if 之间的 HTML 注释破坏 Vue 关联,导致完结按钮不渲染
- 移除注释,超管/库管在'已通过'单均显示完结按钮
2026-09-01 16:18:07 +08:00
fbb4160787
feat: 采购申请新增库管'完结'功能(仿出库审批)
...
- 后端:approve 接口支持 action=close(已通过→已完结 status 1→4),模型 status_text 支持已完结
- 前端:采购申请状态tab加'已完结',已通过单显示'完结'按钮(库管)
2026-09-01 16:15:48 +08:00
a2d3a2c43a
fix: 半成品列表字段权限过滤后补回 base_id,修复批号自增失效
...
- get_list 的 apply_strict_rbac 剥离 base_id,导致前端 checkHistoryAndSetMode 无法按物料匹配历史
- 过滤后补回 base_id,扫码/选物料联动时批号能按历史正确自增(如 000002 → 000003)
2026-09-01 16:08:27 +08:00
def701fc74
fix: 半成品 Batch 模式序列号界面留空,提交时补回 Track 身份证
...
- Batch 模式序列号输入框不再显示 16 位身份证,避免误导
- 提交 payload 时若为 Batch 且扫过码,补回身份证供 Webhook 通知 Track
2026-09-01 15:53:02 +08:00
db22065790
fix: 半成品扫码入库按 external_serial 精准判定模式并恢复批号联动
...
- external_serial 有值 → SN + 填外部序列号;为空 → Batch(不再因身份证有值误切 SN)
- Batch 模式恢复批号自增(onMaterialSelected→checkHistoryAndSetMode),空时兜底 000001
- Batch 下 16 位身份证回填序列号字段,随提交载荷供 Webhook 通知 Track
2026-09-01 15:45:16 +08:00
3d5a9afeda
fix: 扫码入库序列号映射优先 external_serial + 半成品自动切换 SN/Batch
...
- form.serial_number = external_serial || serial_number(优先真实自定义序列号)
- 半成品:扫码后按有无序列号自动切换 SN/Batch 模式,并解除历史锁定
- 修复 onMaterialSelected 未 await checkHistoryAndSetMode 的竞态
2026-09-01 15:11:24 +08:00
2c092c4c01
feat: MOM 出库联动 Track 标记已出库
...
- 发货出库时反查库存表 serial_number(Track 身份证),commit 后通知 Track mom-outbound
- notify_track 支持指定 webhook url(TRACK_OUTBOUND_WEBHOOK_URL)
2026-09-01 13:53:00 +08:00
bee037f925
feat: MOM 扫码入库对接 Track 产品身份证自动填充
...
- 半成品/成品入库弹窗顶部新增'扫码入库'按钮,打开扫码面板(扫码枪/摄像头)
- 扫码 Track 身份证后自动填充物料信息与序列号,不再二次搜索
- 后端新增 track_query_service(httpx 调 Track lookup)、track-lookup 接口
- 入库成功后 notify_track 通知 Track 闭环
2026-09-01 13:52:56 +08:00
9bc3c94dd1
fix(deploy): 修复第4步 ssh 远端命令被本地 bash 展开的 bug
...
第4步远端命令用双引号包裹,内部 $(curl ...) 与 $API_CODE 会被本地 bash
提前展开、嵌套双引号导致引号错乱,远端命令被污染后卡死。
- 移除 API 验证的 $(curl)/$API_CODE(历史一直未在远端执行过,属可选增强)
- nginx 验证改为无嵌套引号的 (grep && echo || echo) 结构
- 保留去 sudo 化与 models 排除,全流程免密
2026-08-31 16:51:24 +08:00
ee64309151
deploy(deploy_code.sh): 脚本全量去 sudo 化,实现全程免密部署
...
/opt/inventory-app 属主为 dxc、docker 在 docker 组免 sudo,
脚本里所有 sudo 均为多余提权,且是手动/自动化部署卡住的主因:
- 第 1、4 步是独立 ssh 会话,每步都要重新输入 sudo 密码
- 非交互/自动化方式运行直接失败
- 去掉所有 sudo 与 ssh -t,无需 tty,手动与自动化通吃
- ssl 证书目录属主 root 不可读,备份那步保留 || 容错跳过
2026-08-31 16:45:39 +08:00
3717151a7b
fix(deploy): 远端备份排除 models 等大目录,修复备份 tar 卡死
...
远端 inventory-backend/models/clip_vision.onnx(605MB) 为冗余副本(生产挂载 models_prod),
备份命令 sudo tar 未排除它导致 gzip 压缩耗时 10-20 分钟(实测 70s 未完成)看起来像卡死。
- 备份命令增加 --exclude=inventory-backend/{models,uploads,pgdata,pgdata_docker}
- 与本地打包 --exclude 保持一致,排除后备份 1.1s 完成
2026-08-31 16:39:59 +08:00
5bd6fc6272
fix(web): 出库记录类型映射补充 LOSS(盘亏出库) 中文显示
...
扫码出库下拉存在「盘亏出库 LOSS」选项,历史记录中已存在 LOSS 类型数据,
但出库记录页 formatType/getTagType 翻译表缺失 LOSS 映射,导致记录原样显示英文 LOSS。
补充映射后 LOSS 显示为中文「盘亏出库」黄色标签,与其他出库类型口径一致。
2026-08-31 16:12:18 +08:00
893e7250db
fix(api): update-stocktake-quantity 按 session_id 隔离更新,防止跨会话误改
...
后端 update_stocktake_quantity 原只按 stock_id+source_table 查草稿,
不同盘点会话会相互覆盖实盘数。后端增加 session_id 过滤,
前端 handleQuantityChange 配套传入当前会话ID,API 类型同步补全。
2026-08-31 16:00:20 +08:00
eb017d881c
perf(api): draft/list 与 stocktake/all-items 改为数据库级分页,消除 N+1
...
- /draft/list: 废弃 query.all() + 逐条查库存/material_base 的 N+1,
改为原生 SQL 连表(草稿 JOIN 三张库存表 + material_base)+ LIMIT/OFFSET 分页
- /stocktake/all-items: 废弃三表 .all() + item.base 懒加载 + 内存切片,
改为 UNION ALL + LEFT JOIN + LIMIT/OFFSET,COUNT 聚合求总数
2026-08-31 16:00:13 +08:00
7ac41bf6fd
fix(web): 继续上次盘点不再拉取全量草稿,直接复用首条草稿的 session_id
...
resumeSession 原在 limit=1 探测后,又发起 limit=500 请求只为取出 session_id,
会触发后端 /draft/list 的全量 N+1 查询导致启动卡顿。
改为直接从第一条草稿提取 session_id,恢复会话零冗余请求。
2026-08-31 16:00:06 +08:00
5249649cfa
fix(stocktake): 扫码未找到物料时显示友好提示而非原始 404 错误
...
- 识别 HTTP 404 状态码 → 显示『条码 [xxx] 未在库存系统中找到,请确认条码是否正确』
- 其他错误 → 显示『查询失败: xxx』
- 扫码失败时振动反馈
2026-08-31 15:21:18 +08:00
6ba20fa3db
fix(stocktake): 修复盘库重复记录 — 去重条件去掉 user_id
...
根因: draft/add 用 (user_id, uuid, session_id) 匹配去重,
同一盘点单多个用户(手机/平板不同账号)操作同一物料时,
每个用户各建一条 → 重复记录。
修复:
- 去重改为 (session_id, uuid) 唯一,不按 user_id 隔离
- 已存在则更新数量并记录最后操作用户
- 清理现有重复数据(保留每组最小id)
- 新增唯一索引 uq_stocktake_draft_session_uuid 防未来再重复
数据库需执行:
DELETE FROM stocktake_draft a USING stocktake_draft b
WHERE a.session_id=b.session_id AND a.uuid=b.uuid AND a.id>b.id;
CREATE UNIQUE INDEX IF NOT EXISTS uq_stocktake_draft_session_uuid
ON stocktake_draft(session_id, uuid);
2026-08-31 15:18:47 +08:00
7a3ffd8ba5
feat(stocktake): 重复扫码提示并确认是否修改
...
问题: 同一个码扫两遍输入两个数,后端 draft/add 直接覆盖,无任何提示
可能误改已盘数量
改进:
- 后端 draft/list 支持 uuid 过滤,可精确查某物料是否已盘
- 扫码弹输入框前,先精确查询该物料是否已盘
- 已盘过 → 弹窗提示『当前实盘为 X,是否修改?』
确认后预填旧值供修改,取消则不改变
2026-08-31 15:13:52 +08:00
2eee792059
fix(stocktake): 删除 pinScannedItem 后多余的右花括号
...
多余的 } 导致 script 括号不匹配,SFC 解析错乱报 Unexpected token
2026-08-31 15:06:30 +08:00
cf76310340
fix(stocktake): 修复模板中 TS 类型注解导致的编译错误
...
row-class-name 的 (row: any) 在 Vue 模板中不合法,去掉类型注解
2026-08-31 15:03:22 +08:00
c6e8c887ec
perf(stocktake): 应盘清单分页 + 扫码置顶高亮
...
性能修复(解决打开费劲):
- get_all_stocktake_items 改为分页返回 {items(当前页), total, total_scanned}
不再三次 .all() 全量加载 + 内存排序
- 前端 fetchAllStockItems 分页拉取(每页200),stats 用后端返回的 total
不依赖全量数组长度
体验优化:
- 扫码成功后将物品置顶到当前表格第一行并浅绿高亮3秒
库管无需翻页找刚扫的物品,'嘀'一下确认数量即可继续
- 主表格行高亮样式 .just-scanned-row
2026-08-31 14:59:22 +08:00
f5aa2f481b
feat(scan): 出库/借库扫码增加未扫清单弹窗
...
- 扫码进度条旁新增「未扫清单 (N)」按钮(有未扫满物料时显示)
- 弹窗列出计划中未扫满的物料:名称/规格/计划数量/已扫数量/待扫数量
- 提供「去扫码」快捷跳转,方便补扫漏掉的物料
- 未扫满 = 计划数量 > 已扫数量(含完全未扫和扫了一部分的情况)
2026-08-31 14:53:20 +08:00
7e281cf285
fix(stocktake): 盘库扫码改为精确匹配,修复漏匹配与性能问题
...
问题:
1. 准确性 bug: 前端用 getStockList({pageSize:10, keyword}) 模糊搜索 + find()
当 SKU 前缀相同、目标不在前10条时,误报'未找到该物料库存'
2. 性能: 每次扫码全表 ilike %x% 搜索 3 张表,不走索引
修复:
- 后端 get_stock_info 改为精确匹配(==)优先,未命中再回退模糊搜索
- 新增 GET /inbound/stock/scan 扫码精确匹配接口,返回唯一命中
- 前端 onScanSuccess/handleManualInput 改用 scanStockByBarcode
一次请求直接命中,不再依赖 pageSize:10 + find()
2026-08-31 14:49:24 +08:00
e026c00a85
refactor(outbound): 移除扫码出库页的强制完结按钮
...
- 删除 create.vue 中「强制完结此单」按钮及对应逻辑
- 完结功能保留在出库审批列表页(approval/index.vue)
- 出库执行页聚焦扫码作业
2026-08-31 14:38:51 +08:00
e492000c3e
feat(scan): 出库/借库扫码进度显示 + 重复扫码确认
...
- 出库 create.vue + 借库 borrow.vue 均增加扫码进度条
显示: 已扫/总数 种 + 已扫/总数 件 + 进度百分比
- 重复扫码时不再直接 +1,改为弹窗确认「确认 +1 / 取消」
防止手滑重复扫或误操作
- 扫码进度条选中审批单后显示
2026-08-31 14:35:26 +08:00
22c8ce55eb
fix(purchase): 批次号分组改为取单号前3段(PUR-日期-时间)
...
- 原逻辑 lastIndexOf 去末尾流水,导致同一天单子被合并成 PUR-日期
- 改为 split('-').slice(0,3) → PUR-20260625-1345
- 同一天不同分钟的单子正确分为不同批次;同一分钟内多条视为一批
2026-08-31 14:28:02 +08:00
3cb44c8f18
fix(purchase): 申请人显示只取中文名,去掉 /账号 后缀
...
- 新增 formatUserName: 韩善龙/hanshanlong → 韩善龙
- 列表批次主行申请人列、详情弹窗均应用
- 避免长账号名撑高行导致行高不一致
2026-08-31 14:12:23 +08:00
74271d53bc
style(purchase): 统一列表行高
...
- CSS 固定主表格行高 52px,行内 line-height 20px
- 状态列'待审批 N 项'改为单行 inline 显示(不再撑高)
- 物品列加 white-space: nowrap 防止换行导致高度差异
2026-08-31 14:07:02 +08:00
a6c21fd313
style(purchase): 列表宽度优化 + 物品显示名称货号
...
- 主表格/展开明细表格加 width:100% + fit
- 自适应列用 min-width(批次号/物品),固定列保留 width(金额/日期/操作)
- 批次主行物品列:单个显示 名称+货号,多个显示 'N 种物料'
- 展开明细物品列:名称+货号 合并显示
2026-08-31 14:05:46 +08:00
4c41e1ec13
feat(purchase): 采购列表按批次分组展示 + 批次级一键审批
...
- 列表按批次分组(树形展开):一个批次一行,显示物品数/批次总价/申请人/状态汇总
- 展开批次行显示批内明细(每条记录状态/价格/操作)
- 批次行提供「审批本批」「驳回本批」一键操作(按批次前缀批量处理待审批记录)
- 保留逐条展开明细内的通过/驳回,以及顶部多选批量审批
- fetchData 按批次前缀聚合当前页数据
2026-08-31 14:00:31 +08:00
1000deda2f
feat(purchase): 采购单号改为 批次-批内序号 格式,显式体现同批
...
按用户原始逻辑还原并扩展:
- 单号格式: PUR-日期-时间-批次-批内序号
例: PUR-20260831-1021-0001-0001(今日第1次采购的第1条)
- generate_request_no 支持 batch_seq 参数生成批次+批内序号
- 新增 GET /purchase/next-batch-seq 返回今日下一个批次号
- 前端提交时获取批次号,同批所有行共享,循环提交生成连续批内序号
- 批次识别: 单号去掉末尾 -批内序号 即为批次前缀
- 保留旧格式兼容(无 batch_seq 时回退 PUR-日期-时间-流水)
2026-08-31 13:54:03 +08:00
f499346f74
refactor(purchase): 批次概念改为基于 request_no 前缀推导,撤销数据库字段
...
按用户反馈:不需要新增数据库字段,现有 request_no (PUR-20260831-1021-0001)
本身就能推导批次——去掉末尾4位流水号即为批次前缀。
- 撤销 purchase_request.batch_no 字段(模型/数据库)
- 撤销 create 接口的 batch_no 参数与 generate_batch_no
- 批次标识 = request_no 去掉末尾 -XXXX 段
getBatchKey('PUR-20260831-1021-0001') = 'PUR-20260831-1021'
- 按批次查询/批量审批接口改用 batch_key (request_no LIKE 前缀)
- 前端列表批次号列、整批弹窗、一键审批本批均基于前缀推导
- 零数据库迁移,历史数据立即可用
2026-08-31 13:49:11 +08:00
664127ee30
feat(purchase): 采购批次号支持,同一批提交的记录可分组查看/统计
...
背景: 循环提交把一批物品生成多条独立申请,无法识别'哪些是同一批采购'
后端:
- purchase_request 模型新增 batch_no 字段(同一批提交共享)
- create 接口接收 batch_no,无则自动生成 BATCH-yyyyMMdd-HHmm-随机
- 新增 GET /purchase/batch/<batch_no> 按批次查询所有记录
- 批量审批接口支持按 batch_no 一键审批整批
前端:
- 提交时生成 batch_no 共享给所有行
- 列表新增批次号列(可点击)
- 新增'整批查看'弹窗:显示同批次所有记录 + 一键批量通过本批
- 操作列新增'整批'按钮
数据库需执行: ALTER TABLE purchase_request ADD COLUMN batch_no VARCHAR(100);
2026-08-31 13:46:46 +08:00
4b62c81baa
feat(purchase): 采购申请批量审批(解决循环提交需多次审批)
...
问题: 一次提交 10 个物品生成 10 条独立申请,审批人需操作 10 次
后端:
- 新增 POST /api/v1/purchase/batch-approve 批量审批接口
接收 ids + action,循环审批,成功/失败分别返回
前端:
- 待审批列表加多选列(仅 status=0 可勾选)
- 顶部批量操作栏:批量通过 / 批量驳回 / 取消选择
- 批量驳回弹窗统一填写驳回原因
2026-08-31 13:41:25 +08:00
b68dfbf23d
feat(purchase): 商家链接改为每行独立
...
- 明细表新增「商家链接」列,每行独立输入
- 移除公共区商家链接,公共信息区只保留审批人
- 提交时每行携带自己的 supplier_link
2026-08-31 13:35:34 +08:00
efb88c8f9c
fix(purchase): 税率列加宽以完整显示两位数字+%
...
- 明细表税率列 80px → 100px
- 列表页税率列 70px → 80px
- 税率选项补充 3%/5%/9%
2026-08-31 13:33:58 +08:00
3a9ec81c51
fix(purchase): 照片删除加确认 + 修复同步照片跨行删除导致图片缺失
...
问题: 同步照片后多行共享同一物理文件 URL,删除某行照片时
deleteFile 删除了物理文件,其他行引用同一 URL 变图片缺失
修复:
- 删除前检查照片被几行引用
- 若被多行引用: 弹窗询问【全部删除】(所有行移除+删文件)
或【仅移出此行】(只从当前行移除引用,不删服务器文件)
- 若仅当前行引用: 普通确认后删除
- 普通删除也加确认弹窗
2026-08-31 13:31:08 +08:00
25bb35e265
feat(purchase): 表格列宽优化 + 迷你上传框 + 照片同步所有
...
- 每列显式指定 min-width/width,输入多的列用 min-width 防挤压
- 照片列固定 90px,上传框缩小到 60x60(::v-deep 覆盖样式)
- 新增「照片同步所有」按钮:深拷贝第一行照片到所有行
- 照片列保持红星必填标记
2026-08-31 13:24:17 +08:00