Commit Graph

62 Commits

Author SHA1 Message Date
32cb5469c4 feat(stocktake): 欢迎页改为公司维度状态驱动,多设备共享盘点会话
原入口只有一个「开始新盘点」,多台 PDA 各开各的会话,无法协同。

- 新增公司选择器:普通用户锁定并默认本公司(后端本就强制隔离),
  超管必须显式选择,未选时入口按钮禁用;本公司若不在下拉列表中
  则补进去,避免 el-select 显示为空。
- 选定公司后调用 /draft/active-session 探测该公司是否已有进行中的
  盘点。服务端为唯一事实来源,localStorage 仅作缓存。
- 状态驱动渲染入口按钮:
  场景 A(已有活跃会话)→ 绿色「加入正在进行的盘点」,并提示当前
    进度项数;同时保留次要入口「开启新一轮盘点」,否则公司一旦有过
    草稿就永远开不了新一轮,点击走 10 秒确认弹窗。
  场景 B(无活跃会话)→ 蓝色「开始新盘点」。
- 切换公司时清空本地会话并重新探测,避免跨公司串会话。
- 移除此前「刷新后请求 /draft/list 取第一条草稿猜 session_id」的逻辑:
  该列表无会话/用户过滤,取到的是全库 SKU 字典序最小的那条草稿,
  与当前用户和公司都无关。
- 所有盘点请求携带当前公司;导出、生成漏盘、改实盘数等 POST 请求
  亦经 query string 传递公司。
2026-09-11 11:33:26 +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
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
8c10bb0903 feat: 盘点合并列表 — 服务端JOIN+DB分页,消除99999全量加载
## stock.py
- 新增 GET /draft/merged-list: UNION ALL三表+LEFT JOIN draft
  数据库级 LIMIT/OFFSET 分页,不再加载全量到Python内存
- 参数: session_id, keyword, status_filter, page, pageSize
- 返回: list, total, total_scanned (已扫去重数)

## stock.ts
- 新增 getDraftMergedList() API函数

## stocktake/index.vue
- fetchInventoryList: 改用merged-list单次调用替代99999全量+find()
- resumeSession: limit 99999→1 先检查存在,再limit 500加载
2026-07-16 13:08:29 +08:00
DXC
605462cc33 fix: 解除库存盘点弹窗500条限制并修复字段匹配 2026-04-24 13:40:08 +08:00
DXC
996056d46a fix: 修复库存盘点已盘数量卡在500的问题 2026-04-24 13:19:57 +08:00
dxc
ab353e5b34 库存盘点添加扫码保留数值的功能 2026-04-22 10:05:25 +08:00
DXC
0d8f697df4 fix(stocktake): enforce session_id in resume, make missing generation idempotent, update UI to show SN, and fix excel time offset 2026-04-03 09:42:51 +08:00
DXC
43e1d0aa55 fix(stocktake): strictly isolate stocktake drafts by session_id in list and finish generation to prevent historical data mixing 2026-04-03 09:25:52 +08:00
DXC
c361d25ea0 fix(stocktake): display batch number in scanning dialog and fix empty uncounted items in Excel export 2026-04-02 19:06:19 +08:00
DXC
dbcb7d0d92 perf(system): optimize large data rendering in stocktake, fix N+1 in warehouse, and add upload size limits 2026-04-02 18:51:13 +08:00
DXC
edf09508f6 fix(frontend): resolve cross-page selection loss, add destroy-on-close to dialogs, and fix row-key collision in stocktake 2026-04-02 18:35:11 +08:00
DXC
4b023a4002 fix(stocktake): auto-refresh inventory drafts silently after scanning to ensure real-time outer stats 2026-03-27 09:23:10 +08:00
DXC
b2ce9d31f8 fix(stocktake): replace hardcoded 'admin' with actual current user in excel export 2026-03-27 09:04:13 +08:00
DXC
8259a74c57 fix(stocktake): fetch inventory baseline immediately upon session start to show correct initial stats 2026-03-27 08:56:43 +08:00
DXC
dc42335ae0 fix(stocktake): decouple global stats calculation from list filters and pagination 2026-03-27 08:48:25 +08:00
DXC
f6b055d9c4 fix(stocktake): remove undeclared scannedMap and legacy cache references causing ReferenceError 2026-03-26 17:58:18 +08:00
DXC
8135a222f0 fix(stocktake): restore missing showConfirmDialog ref causing ReferenceError 2026-03-26 17:49:55 +08:00
DXC
edb49468a0 fix(stocktake): remove duplicate stats declaration causing compiler error 2026-03-26 17:47:40 +08:00
DXC
2a27f2e0df feat(stocktake): implement strict blind stocktake logic with hidden system qty, editable count and status filters 2026-03-26 17:42:51 +08:00
DXC
57bdb6273b refactor(stocktake): completely remove local stock cache and implement real-time remote scan match 2026-03-25 10:02:33 +08:00
DXC
bd20852739 refactor(stocktake): replace fetch-all with remote pagination/search and add permission checks 2026-03-25 09:51:28 +08:00
DXC
2574da03e5 fix: remove duplicate permissionMap declaration and eliminate infinite polling interval in stocktake page 2026-03-23 11:03:55 +08:00
DXC
7c9331d78a perf: implement optimistic UI for scanner, disable auto-camera, and sort excel by SKU 2026-03-23 09:51:59 +08:00
DXC
13e910645d fix: restore missing export to excel button and logic in blind stocktake page 2026-03-23 09:44:41 +08:00
DXC
53c198f363 feat: fix stocktake deletion bug, and add pagination, search, sorting to stocktake lists 2026-03-19 16:21:09 +08:00
DXC
5510bae3b2 fix: align API routes for generate-missing endpoint and remove redundant api prefix 2026-03-19 15:52:11 +08:00
DXC
5842042db6 refactor: merge end stocktake buttons and attach missing-calculation logic to the primary button 2026-03-19 15:44:05 +08:00
DXC
b37049a4d7 feat: add generate-missing logic to identify unscanned stock as inventory loss 2026-03-19 15:34:54 +08:00
DXC
9d972f1120 fix: enforce strict SKU ascending sort and display both serial and batch numbers 2026-03-19 11:31:51 +08:00
DXC
2701e94d38 fix: merge serial number and batch number display in stocktake draft list 2026-03-19 11:21:48 +08:00
DXC
ae4b4d586e fix: add optional remark field to inventory profit/loss entry modal 2026-03-19 11:18:55 +08:00
DXC
44bd23ab77 feat: enhance stocktake UX with 10s delay, sku search, sku retention and remove adjust btn 2026-03-19 11:10:00 +08:00
DXC
00781422eb fix: correct excel export formatting (timezone, spec, user, location) and add auto-polling for collaborative stocktake 2026-03-18 14:22:01 +08:00
DXC
ac15ef74db fix: resolve MaterialBase sku property error and add dynamic refresh after stock adjustment 2026-03-18 14:01:36 +08:00
DXC
33969b8336 fix: support stock adjustment for items without stocktake draft 2026-03-18 13:53:55 +08:00
DXC
e08012d9dd fix: add missing imports for openpyxl and patch draft resolution in stock adjustment 2026-03-18 13:24:16 +08:00
DXC
b19699cfba fix: use blob response for excel export auth and secure adjust route 2026-03-18 11:24:41 +08:00
DXC
54ea476206 refactor: unify variance calculation and implement backend Excel export with borrowed assets sheet 2026-03-18 11:10:54 +08:00
DXC
403bbe281f feat: persist stocktake phase in local storage for smart resumption routing 2026-03-13 13:14:49 +08:00
DXC
6dc1d69d7d refactor: redesign stocktake UI flow to support multi-day sessions and scanner resumption 2026-03-13 12:02:37 +08:00
DXC
a8f89517e7 refactor: optimize stocktake UI state machine and add confirmation dialogs 2026-03-13 11:53:11 +08:00
DXC
7b709db6af fix: resolve UI z-index blocking on finish button and hide variance report during active session 2026-03-13 11:27:32 +08:00
DXC
5212b98fc1 fix: add debug trace and robust UI unlocking to finish stocktake action 2026-03-13 11:11:34 +08:00