feat(purchase): 新增「待采购清单」页面

路由 router/index.ts:
  /purchase 下新增子路由 pending(name: PurchasePendingPool)。
  ★ 父路由刻意不加 permissions —— 加了会让没有 pending_pool 权限的用户
    整个「采购管理」模块从侧边栏消失。

页面 views/purchase/PendingPool.vue:
  筛选栏 + 表格 + 分页,列含产品图、规格、当前库存、在途、有效供给、
  预警、建议采购量(tooltip 展示完整算式)、参考单价、采购链接、操作。
  采购链接渲染走 safeHref 白名单,非法地址不渲染成可点击链接。

api/purchase.ts:
  新增 getPendingPurchasePool 与 PendingPoolItem 类型。

★ 需告知业务方的可见变化:「采购管理」从扁平单项变为可展开子菜单
  (Sidebar 在子路由只有 1 个时渲染 el-menu-item,2 个时渲染 el-sub-menu)。
This commit is contained in:
yueli
2026-09-18 14:31:07 +08:00
parent b4445f07d9
commit 690ee2c81d
3 changed files with 509 additions and 0 deletions

View File

@ -163,3 +163,46 @@ export function getApprovedUnstockedRequests(params: {
params
})
}
// 待采购池的单条物料(防重复采购)
export interface PendingPoolItem {
material_id: number
name: string
spec_model: string
unit: string
category: string
material_type: string
company_name: string
image: string
purchase_link: string
reference_price: number | null
inventory_count: number
available_count: number
// 在途量 = 该物料所有活跃采购单的剩余待入库量之和
in_transit_qty: number
// 有效供给 = 库存 + 在途。判缺货与算建议量都基于它
effective_supply: number
warning_status: number // 0=正常 1=黄色 2=红色(进池的必然非 0)
warning_red: number | null
warning_yellow: number | null
target_threshold: number | null
suggested_qty: number | null
is_ordered: boolean
}
// 待采购清单:库存已触及预警线、且没有活跃采购单的物料。
// 物料一旦有在途采购单(待审批/已通过/部分到货未齐)就会从这里消失。
export function getPendingPurchasePool(params: {
page?: number
limit?: number
keyword?: string
category?: string
type?: string
warning_status?: number
}) {
return request({
url: '/purchase/pending-pool',
method: 'get',
params
})
}