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:
@@ -68,6 +68,18 @@ class LicenseRepository {
|
||||
}
|
||||
}
|
||||
|
||||
/// 本店首月特惠是否已享用(购买弹窗据此置灰特惠档)。
|
||||
Future<bool> promoUsed() async {
|
||||
try {
|
||||
final resp = await _client.get('/license/promo-status');
|
||||
final data = resp.data['data'] as Map<String, dynamic>?;
|
||||
return data?['used'] as bool? ?? false;
|
||||
} on DioException {
|
||||
// 查询失败不阻塞弹窗:按未享用展示,下单时服务端仍会强校验
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/// Deactivate (unbind) this device from its license.
|
||||
Future<void> deactivate() async {
|
||||
final deviceId = await DeviceId.get();
|
||||
|
||||
Reference in New Issue
Block a user