风险与内控管理优化: 异常账单服务端分页/筛选/收银员搜索/合计, 收银员TOP15按异常账单数排序, 双击跳转明细, MonthPicker靠右, 侧边栏底部间距
This commit is contained in:
@@ -68,9 +68,11 @@ export function ProductionPlanPage() {
|
||||
return (
|
||||
<div className="space-y-4 p-4">
|
||||
{/* 页面标题 */}
|
||||
<div className="flex items-center gap-2">
|
||||
<TrendingUp className="h-6 w-6 text-green-600" />
|
||||
<h1 className="text-xl font-bold">销量驱动生产与要货计划</h1>
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-center gap-2">
|
||||
<TrendingUp className="h-6 w-6 text-green-600" />
|
||||
<h1 className="text-xl font-bold">销量驱动生产与要货计划</h1>
|
||||
</div>
|
||||
<MonthPicker month={month} onChange={setMonth} />
|
||||
</div>
|
||||
|
||||
@@ -79,12 +81,15 @@ export function ProductionPlanPage() {
|
||||
<strong>预测逻辑:</strong> SKU销量 × 门店BOM = 基础原料需求 | <strong>生产计划:</strong> 各门店要货合计 + 中央厨房安全库存 | <strong>要货建议:</strong> 需求量 - 当前库存 + 安全库存
|
||||
</div>
|
||||
|
||||
{/* 核心指标 */}
|
||||
<div className="grid grid-cols-2 gap-3 md:grid-cols-4 lg:grid-cols-7">
|
||||
{/* 核心指标 - 第一行:菜品与BOM */}
|
||||
<div className="grid grid-cols-2 gap-3 md:grid-cols-4">
|
||||
<MetricCard title="总菜品数" value={summary.total_dish_count} unit="个" />
|
||||
<MetricCard title="有BOM菜品" value={summary.matched_sku_count} unit="个" status="good" />
|
||||
<MetricCard title="BOM覆盖率" value={`${summary.bom_coverage_pct}%`} status={summary.bom_coverage_pct >= 50 ? 'good' : 'warn'} />
|
||||
<MetricCard title="BOM原料数" value={summary.total_bom_materials} unit="种" />
|
||||
</div>
|
||||
{/* 核心指标 - 第二行:销售额与生产计划 */}
|
||||
<div className="grid grid-cols-2 gap-3 md:grid-cols-3">
|
||||
<MetricCard title="匹配销售额" value={summary.matched_amt} format="currency" description="有BOM菜品的销售额" />
|
||||
<MetricCard title="总销售额" value={summary.total_sales_amt} format="currency" />
|
||||
<MetricCard title="CK生产计划" value={ckProductionPlan.filter((p: any) => p.demand_qty > 0).length} unit="种" status="warn" description="有销量需求的半成品数" />
|
||||
@@ -213,6 +218,10 @@ export function ProductionPlanPage() {
|
||||
|
||||
{/* 门店要货建议 */}
|
||||
<CollapsibleSection title="门店要货建议" subtitle={`${storeDemand.length}家门店的原料需求与库存对比`} defaultOpen={false}>
|
||||
<div className="mb-3 flex items-center gap-2">
|
||||
<Package className="h-4 w-4 text-green-600" />
|
||||
<span className="text-sm text-muted-foreground">建议要货量 = 原料需求量 - 期末库存量,为门店级宏观参考;实际要货请按「原料需求」表逐项确认,注意单位差异</span>
|
||||
</div>
|
||||
<FilterableTable
|
||||
data={storeDemand}
|
||||
filterKey="store_name"
|
||||
|
||||
Reference in New Issue
Block a user