|
|
bf7b2cc6d3
|
feat: BOM 库存接口支持按版本查询,修复同一编号多版本下拉回显错乱
|
2026-09-02 18:39:17 +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 |
|
|
|
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 |
|
|
|
bee037f925
|
feat: MOM 扫码入库对接 Track 产品身份证自动填充
- 半成品/成品入库弹窗顶部新增'扫码入库'按钮,打开扫码面板(扫码枪/摄像头)
- 扫码 Track 身份证后自动填充物料信息与序列号,不再二次搜索
- 后端新增 track_query_service(httpx 调 Track lookup)、track-lookup 接口
- 入库成功后 notify_track 通知 Track 闭环
|
2026-09-01 13:52:56 +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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
f18e61a71a
|
fix(purchase): 修复 Copy 图标不存在导致的模块加载错误
@element-plus/icons-vue 没有 Copy 图标,改为 CopyDocument
|
2026-08-31 13:18:44 +08:00 |
|
|
|
9e393ff998
|
feat(purchase): 弹窗加大 + 移除公共图片 + 每行照片必填
- 弹窗宽度 1180px → 1350px,缓解表格输入框拥挤
- 移除底部公共「图片凭证」上传区,照片统一在每行上传
- 照片列表头加红星必填标记
- 提交时逐行校验照片必填:某行无照片则阻断并提示该行名称
- 清理废弃的公共图片逻辑(fileList/customUpload/handleRemoveImage/usePasteUpload)
|
2026-08-31 13:16:52 +08:00 |
|
|
|
8d90b3c774
|
feat(purchase): 采购申请弹窗加大 + 每行独立备注/照片 + 备注一键同步
- 弹窗加大到 1180px、表格 max-height 400 减少滚动
- 明细表新增「备注」列和「照片」列(每行独立上传,最多3张)
- 新增「备注同步所有」按钮:把第一行备注复制到所有行
- 提交时行备注优先、行照片优先,无则回退公共备注/公共图片
- 图片校验改为逐行(行内或公共至少其一)
|
2026-08-31 13:10:59 +08:00 |
|
|
|
021c92ee8a
|
feat(purchase): 采购申请改为动态明细表,支持一行多物料批量提交
- 新建弹窗物料区改为动态明细表格:每行独立选择物料/规格/数量/日期/单价/总价/税率
- 支持 [+ 添加一行] 动态增行、行内删除
- 审批人/商家链接/备注/图片凭证为公共信息
- 提交时 for 循环逐行调用单条 createPurchase 接口,后端无需改动
- 行内价格半联动:改单价自动算总价,手动改总价后不再覆盖
|
2026-08-31 13:05:29 +08:00 |
|
|
|
5abc504619
|
feat(outbound): 审批列表页增加完结按钮 + 优化缺货提示文案
- 去掉缺货提醒末尾的『是否查看?』(纯文案,保持强提醒但不承诺展示清单)
- approval/index.vue 对已通过(status=1)的审批单新增「完结」按钮
库管/主管/超管可见,完结后从已通过列表移除
- 筛选区新增「已完结」状态选项,状态标签支持 status=4
|
2026-08-31 10:46:33 +08:00 |
|
|
|
bf104535e5
|
V3.69,8.31推送
|
2026-08-31 10:30:03 +08:00 |
|
|
|
36e9f500aa
|
feat(borrow): 借库未归还直接报废功能(关联报废单流程)
后端:
- trans_service 新增 scrap_borrow 方法:未归还借用标记为 scrapped,
扣减总库存 stock_quantity(可用已在借出时冻结),生成 TransScrap 报废记录
- transactions.py 新增 POST /borrow/scrap 接口(复用 op_return:operation 权限,库管/主管可操作)
- scrap.py query_records 支持 trans_borrow 来源的物料名解析 + 行级隔离
前端:
- records.vue 未归还记录新增「报废」按钮(库管/主管可见)
- 报废弹窗:勾选明细 + 填报废原因 + 二次确认
- 状态显示新增「已报废」标签;整单所有明细报废时标记为 scrapped
|
2026-08-31 10:21:28 +08:00 |
|
|
|
39f3f8af45
|
feat(outbound): 审批单手动完结/作废功能
- 后端: outbound_service 新增 close_request 方法(状态 1-已通过 → 4-已完结)
- 后端: 新增 POST /api/v1/outbound/request/<id>/close 接口
- 模型: status_text 数组增加「已完结」
- 前端: create.vue 审批单选择区新增「强制完结此单」按钮
完结后刷新列表,该单从已通过下拉中移除
- 权限: 超级管理员/审批人/拥有 outbound_create:operation 的用户可完结(库管可操作)
|
2026-08-31 10:15:33 +08:00 |
|
|
|
b6ec45a8b8
|
feat(outbound): 出库流程强化(缺料防漏 + 完全移除直接出库)
① BOM 清单 SKU 改为规格型号(getBomWithStock 返回 children 无 sku,只有 child_spec)
② 缺货清单自动写入出库申请备注(借鸡生蛋:历史欠料永久留存在申请单)
③ 打印单底部增加欠料待补签收区(补料人签字/日期)
④ 有缺料时阻断式二次确认,防手快漏看
⑤ 完全移除直接出库模式,所有出库必须按单出库
- create.vue 删除 radio 切换、direct 相关逻辑
- 提交前强制校验已选择审批申请单
|
2026-08-31 09:37:14 +08:00 |
|
|
|
a4bd6f54d4
|
feat(outbound): BOM 出库增加清单打印与缺货持久化提醒
- BOM 弹窗物料清单增加「本次结果」列(可出/缺货未出)
- 增加「打印 BOM 清单」按钮,可打印当前 BOM 的完整出库清单
- 缺货物料持久化到 localStorage,下次打开同一 BOM 时自动提示历史缺货记录
防止重复出库或漏出
- 打印区域使用与 A4 出库单一致的 iframe 打印机制
|
2026-08-31 09:26:53 +08:00 |
|
|
|
0c3e57f5b5
|
fix(nginx): 生产 nginx 代理指向容器名 inventory_api_prod 避免 DNS 冲突
- 服务器上有多个 compose 项目(inventory-app / Track)都使用 backend 服务名
- nginx 中 proxy_pass http://backend:8000 会随机解析到 track_backend_prod
导致 /api/ 请求 404
- 改为使用固定容器名 inventory_api_prod:8000
|
2026-08-28 16:46:02 +08:00 |
|
|
|
57a6ab38d1
|
fix(outbound): 修复选单列表移除按钮排序后索引错位导致删错行
- 表格绑定 sortedSelectedItems(按库位排序),但移除按钮用 $index 操作原始 selectedItems
- 排序后索引与原始数组不一致,导致删除错误的行
- 改为按 uniqueKey 精确定位删除
|
2026-08-13 17:17:54 +08:00 |
|
|
|
9c0414b802
|
fix(outbound): 出库备注改为必填,按单出库自动填充申请原因
- 备注字段新增 required 校验规则
- placeholder 从「可选填」改为「请填写出库原因」
- 按单出库模式选择申请单后,自动将申请原因填入备注
|
2026-08-07 15:58:59 +08:00 |
|
|
|
7b5846b489
|
V3.68,8.3推送
|
2026-08-03 15:53:52 +08:00 |
|