feat: ¥1 首月特惠套餐(新店专享,每店限购一次,官网+App 同步上线)

- 后端:payPlans 新增 promo_first_month(¥1/30 天/标准版权益);下单强校验每店限购一次(仅 paid 计数,弃单可重下),已享用返回 409;新增 GET /license/promo-status 供前端置灰
- 官网:checkout 套餐段第二位插「🔥 首月特惠 ¥1」+ 推广横幅 + 划线原价 ¥299;首页价格区第二位插特惠卡(5 列);已享用自动置灰
- App:购买弹窗套餐段改三档(标准/特惠/高级),特惠选中显示推广横幅与划线价,已享用置灰并禁用提交
- 实付金额以 pay 侧为准,pay 需 seed promo_first_month 产品后生效

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JJ1g8XV1YhhmHRzhwWEW7o
This commit is contained in:
wangjia
2026-07-03 22:25:07 +08:00
parent c7de728c18
commit b3c9d98eae
9 changed files with 255 additions and 30 deletions
+11
View File
@@ -23,6 +23,17 @@ class LicensePlanGroup {
}
class LicensePlans {
/// 新店首月特惠:¥1 体验 30 天标准版全部功能,每个门店限购一次
/// (服务端强校验,前端据 GET /license/promo-status 置灰)。
static const promo = LicensePlan('promo_first_month', 1, 30);
static const promoOriginalPrice = 299; // 划线原价(=标准版月付)
static const promoFeats = [
'标准版全部功能,一分不少',
'单门店 · 单仓库 · 2 台客户端',
'1,000 张商品图片分享',
'每个门店限购一次',
];
static const standard = LicensePlanGroup(
name: '标准版',
feats: ['单门店 · 单仓库', '2 台客户端同时使用', '1,000 张商品图片分享'],