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);
This commit is contained in:
yueli
2026-08-31 13:46:46 +08:00
parent 4b62c81baa
commit 664127ee30
5 changed files with 183 additions and 6 deletions

View File

@ -20,6 +20,18 @@ class PurchaseService:
.filter(PurchaseRequest.request_no.like(f"{prefix}%")).scalar()
return f"{prefix}{(existing_count + 1):04d}"
@staticmethod
def generate_batch_no():
"""生成采购批次号: BATCH-yyyyMMdd-HHmm-当日流水(4位)
同一批循环提交的多条记录共享同一 batch_no"""
import uuid
beijing_tz = timezone(timedelta(hours=8))
now = datetime.now(beijing_tz)
date_str = now.strftime('%Y%m%d')
time_str = now.strftime('%H%M')
# 用时间戳 + 随机段确保唯一
return f"BATCH-{date_str}-{time_str}-{uuid.uuid4().hex[:4].upper()}"
@staticmethod
def auto_fill_from_material(keyword: str):
"""
@ -67,8 +79,12 @@ class PurchaseService:
if material:
base_id = material.id
# [新增] 批次号:前端同一批循环提交时传入同一 batch_no,无则自动生成
batch_no = data.get('batch_no') or PurchaseService.generate_batch_no()
purchase = PurchaseRequest(
request_no=request_no,
batch_no=batch_no, # [新增]
base_id=base_id, # [新增]
name=data['name'],
spec_model=data.get('spec_model', ''),