From 690ee2c81d4dd7c53309de5decc5a651e260759a Mon Sep 17 00:00:00 2001 From: yueli Date: Fri, 18 Sep 2026 14:31:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(purchase):=20=E6=96=B0=E5=A2=9E=E3=80=8C?= =?UTF-8?q?=E5=BE=85=E9=87=87=E8=B4=AD=E6=B8=85=E5=8D=95=E3=80=8D=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 路由 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)。 --- inventory-web/src/api/purchase.ts | 43 ++ inventory-web/src/router/index.ts | 8 + .../src/views/purchase/PendingPool.vue | 458 ++++++++++++++++++ 3 files changed, 509 insertions(+) create mode 100644 inventory-web/src/views/purchase/PendingPool.vue diff --git a/inventory-web/src/api/purchase.ts b/inventory-web/src/api/purchase.ts index cb47a7d..7e854e3 100644 --- a/inventory-web/src/api/purchase.ts +++ b/inventory-web/src/api/purchase.ts @@ -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 + }) +} diff --git a/inventory-web/src/router/index.ts b/inventory-web/src/router/index.ts index 38d9fd7..4a98540 100644 --- a/inventory-web/src/router/index.ts +++ b/inventory-web/src/router/index.ts @@ -213,6 +213,8 @@ const routes: Array = [ { path: '/purchase', component: Layout, + // ★ 父路由**不加** permissions:加了会让没有 pending_pool 权限的用户 + // 整个「采购管理」模块从侧边栏消失。 meta: { title: '采购管理', icon: 'ShoppingCart' }, children: [ { @@ -220,6 +222,12 @@ const routes: Array = [ name: 'PurchaseList', component: () => import('@/views/purchase/index.vue'), meta: { title: '采购申请' } + }, + { + path: 'pending', + name: 'PurchasePendingPool', + component: () => import('@/views/purchase/PendingPool.vue'), + meta: { title: '待采购清单', permissions: ['inbound_purchase:pending_pool'] } } ] }, diff --git a/inventory-web/src/views/purchase/PendingPool.vue b/inventory-web/src/views/purchase/PendingPool.vue new file mode 100644 index 0000000..97d9c53 --- /dev/null +++ b/inventory-web/src/views/purchase/PendingPool.vue @@ -0,0 +1,458 @@ + + + + +