## Context 已有 ETC/加油(申请→发放看板)与车辆维保(申请→处理看板)两套实现。尿素申请含 **计划金额 + 入库数量**,发放为 **实付金额**,语义上更接近 ETC 的「待发放/已发放」,但申请字段更丰富。 约束:MySQL 5.7、租户隔离、Fresh Mint UI、frontend 静态路由、软删除。 ## Goals / Non-Goals **Goals:** 双菜单 CRUD、1:0~1 关联、无申请补录、发放金额默认带出申请金额、角色菜单幂等迁移。 **Non-Goals:** 审批、库存系统、尿素主数据、选车提醒、车辆状态联动。 ## Decisions ### D1 平行复制 ETC 模块 新建 `pl_vehicle_urea_*` 表与 Service,发放页复用 `disburse-board` 模式。理由:与 ETC 文案/状态一致,工期可控。 ### D2 双金额字段 - 申请表 `apply_amount`(计划,必填) - 发放表 `amount`(实付,必填) - 发放弹窗默认 `amount = apply_amount`,允许修改。 ### D3 状态 disbursed 不设 `is_processed`;发放成功 → 申请 `disbursed`。 ### D4 单位与数量 `unit` varchar + UI 预设「吨桶」+ allow-create;`quantity` decimal(10,2) 必填 > 0。 ### D5 单号 `SXNS`(尿素申请)、`SXUF`(尿素发放)。 ### D6 角色菜单 id super_admin 用固定 id `PL_Urea_RM_SA_*`;其他角色用 `MD5(CONCAT(role_id, ':', menu_id))`,避免 `UUID()` 1062。 ## Risks / Trade-offs | 风险 | 缓解 | |------|------| | 申请/发放金额不一致难对账 | 看板同时展示两列金额 | | 与 ETC 代码重复 | 接受;第三模块后再抽象 | ## Migration Plan 1. 执行 `2026-06-29-pl-vehicle-urea.sql` 2. 部署后端与前端 3. 重新登录刷新菜单 ## Open Questions - (无)