For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: 废除采集协议单价目表默认金额;样本合同/合计/协议总默认均由优惠价驱动;分期金额手填且保存强校验。
Architecture: 纯函数在 protocol-sample-payment.ts 解析优惠价与校验;SamplePaymentPanel 生成空金额期次;ProtocolFormDialog 去掉 resolvePaymentPreset 套用;后端 schedule 校验补齐每期金额与应缴日必填。
Tech Stack: Vue 3 + TypeScript(web-admin)、FastAPI(backend)、node:test / pytest
Design spec: docs/superpowers/specs/2026-10-09-protocol-preferential-price-payment-design.md
| File | Responsibility |
|---|---|
web-admin/src/utils/protocol-sample-payment.ts |
优惠价解析、合计、分期必填校验文案;删除硬编码 preset |
web-admin/src/utils/protocol-sample-payment.test.ts |
单测 |
web-admin/src/utils/protocol-payment-presets.ts |
删除 PRESETS / resolvePaymentPreset |
web-admin/src/views/cell-storage/protocol/SamplePaymentPanel.vue |
新建/改价/分期空金额 |
web-admin/src/views/cell-storage/protocol/ProtocolFormDialog.vue |
去掉价目套用;保存调新校验 |
backend/app/services/sample_payment_schedule_validate.py |
各期金额+应缴日必填 |
backend/tests/test_sample_payment_schedule_validate.py |
后端单测 |
resolveSampleContractAmount:仅优惠价,无则 null(不再回落 22880)resolvePerSamplePreset 硬编码sampleScheduleRequiredFieldsHint(pay):分期每期金额与 dueDateprotocol-sample-payment.test.ts;node --import tsx --test 通过emptyDjPayment / 改价同步:合同 = 优惠价dueAmount 留空;dueDate 仍按公式resolvePerSamplePreset / 默认分期金额模板的依赖applyPaymentPresetForMode、样本数 watch 套价目、resolvePaymentPreset 引用PRESETS 与 resolvePaymentPreset;修复所有引用点due_amount 与 due_date 必填./scripts/update-graph.sh frontend(若改后端则 all)