萝卜
|
0a5b86ac55
|
fix(admin): 仪表盘待生效计数排除同步失败(口径更清晰)
|
2026-03-15 19:46:56 +08:00 |
|
萝卜
|
dc7b7b395c
|
feat(admin): 仪表盘补齐订阅到期治理入口(7天内到期/已过期)
|
2026-03-15 19:34:32 +08:00 |
|
萝卜
|
b7471026ef
|
feat(admin): 仪表盘收费工作台补齐续费缺订阅快捷入口
|
2026-03-15 19:29:26 +08:00 |
|
萝卜
|
2f0c3ca11b
|
feat(admin): 仪表盘 KPI 聚焦收费主链(套餐/订阅/平台订单)
|
2026-03-15 19:23:31 +08:00 |
|
萝卜
|
a47d91df96
|
feat(admin): 仪表盘占比卡接入套餐订单占比(Top5)
|
2026-03-15 18:57:48 +08:00 |
|
萝卜
|
257b532757
|
feat(admin): 仪表盘接入最近平台订单列表(收费闭环入口)
|
2026-03-15 18:51:59 +08:00 |
|
萝卜
|
7dd508e84d
|
feat(admin): 绑定订阅后回跳提示增强(attached_subscription + 滚动)
|
2026-03-15 17:23:58 +08:00 |
|
萝卜
|
973576f045
|
feat(admin): 订阅列表支持一键绑定到订单(续费缺订阅治理)
|
2026-03-15 17:09:11 +08:00 |
|
萝卜
|
8e18a77f19
|
feat(admin): 续费订单支持手工绑定订阅(attach-subscription)+ 时区改为 Asia/Shanghai
|
2026-03-15 16:58:04 +08:00 |
|
萝卜
|
62d7a81df3
|
feat(admin): 客服中心工单骨架(模型/迁移/路由/菜单/页面)
|
2026-03-15 08:44:02 +00:00 |
|
萝卜
|
f6bb29f046
|
fix(admin): 各平台订单工具动作支持 renewal_missing_subscription 筛选透传
|
2026-03-15 07:10:05 +00:00 |
|
萝卜
|
9afe8c135d
|
platform orders: batch mark activated guard renewal missing subscription
|
2026-03-15 06:39:22 +00:00 |
|
萝卜
|
efc2a8a423
|
platform orders: mark activated guard for renewal missing subscription
|
2026-03-15 06:34:18 +00:00 |
|
萝卜
|
2d67c167ed
|
platform orders: add renewal missing subscription governance card
|
2026-03-15 06:14:52 +00:00 |
|
萝卜
|
b940c0172d
|
platform orders: syncable summary excludes renewal missing subscription
|
2026-03-15 05:52:21 +00:00 |
|
萝卜
|
4b1f661561
|
platform orders: syncable_only filter excludes renewal missing subscription
|
2026-03-15 05:47:00 +00:00 |
|
萝卜
|
a4c36ab868
|
platform orders: batch activate guard renewal missing subscription
|
2026-03-15 05:44:09 +00:00 |
|
萝卜
|
5ca76b7620
|
platform orders: activate subscription guard for renewal missing subscription
|
2026-03-15 05:18:46 +00:00 |
|
萝卜
|
a50cd0675e
|
批量BMPA 安全阀:续费单未绑订阅不允许推进并新增测试
|
2026-03-15 04:56:18 +00:00 |
|
萝卜
|
d34578452c
|
BackUrl::sanitizeForLinks 增加长度安全阀(>2000 拒绝)并补单测
|
2026-03-15 04:45:04 +00:00 |
|
萝卜
|
c4c91ebf14
|
标记支付并生效:续费单必须绑定订阅(安全阀)并新增测试
|
2026-03-15 04:42:37 +00:00 |
|
萝卜
|
0126a5aed7
|
BackUrl::sanitizeForLinks 增强:拒绝协议相对 URL(//evil.com)并补单测
|
2026-03-15 04:18:54 +00:00 |
|
萝卜
|
cbc05e59b7
|
BackUrl::sanitizeForLinks 增强:拒绝控制字符与 CRLF 注入 并补单测
|
2026-03-15 04:17:10 +00:00 |
|
萝卜
|
e86257e866
|
BackUrl::sanitizeForLinks 加强:拒绝二次编码 back%3D 绕过 并补单测
|
2026-03-15 04:11:42 +00:00 |
|
萝卜
|
54f356f52d
|
平台订单创建页:require_subscription 支持回填并透传 hidden input(校验失败后仍保持治理口径)
|
2026-03-15 04:03:56 +00:00 |
|
萝卜
|
2400398dcb
|
PlatformOrder create: force renewal type when subscription context present
|
2026-03-15 03:14:19 +00:00 |
|
萝卜
|
1c5827fd85
|
PlatformOrder store: guard renewal must match subscription merchant/plan
|
2026-03-15 02:59:58 +00:00 |
|
萝卜
|
09c8aeca2a
|
SubscriptionActivationService: guard against merchant mismatch
|
2026-03-15 02:56:31 +00:00 |
|
萝卜
|
3182dd72a0
|
PlatformOrder create: require_subscription flag narrows order types
|
2026-03-15 02:36:27 +00:00 |
|
萝卜
|
41463407aa
|
Expiry governance: nudge renewal requires subscription context
|
2026-03-15 02:23:19 +00:00 |
|
萝卜
|
e66ac765e0
|
PlatformOrder create: default order_type to renewal when from subscription
|
2026-03-15 02:15:48 +00:00 |
|
萝卜
|
bdea18c976
|
PlatformOrder store: require subscription for renewal orders
|
2026-03-15 02:03:04 +00:00 |
|
萝卜
|
6bb3c843dd
|
PlatformOrder views: use model orderTypeLabel mapping
|
2026-03-15 01:43:50 +00:00 |
|
萝卜
|
c81c5a1f39
|
PlatformOrder: add orderTypeLabel helper
|
2026-03-15 01:40:09 +00:00 |
|
萝卜
|
4773c2a8c7
|
PlatformOrder show: render order_type label with code
|
2026-03-15 01:29:09 +00:00 |
|
萝卜
|
9a38fa84f3
|
PlatformOrder create: default renewal remark from subscription
|
2026-03-15 01:21:50 +00:00 |
|
萝卜
|
652d4134f7
|
PlatformOrder create: autofill merchant/plan from subscription defaults
|
2026-03-15 01:13:56 +00:00 |
|
萝卜
|
6c5705443d
|
Site subscriptions: add status toggle action on index
|
2026-03-14 23:34:31 +00:00 |
|
萝卜
|
bfd8f7784c
|
Plans: add publish toggle action and UI
|
2026-03-14 23:21:59 +00:00 |
|
萝卜
|
69edd4261d
|
Plans: unify back sanitize via BackUrl helper
|
2026-03-14 22:52:48 +00:00 |
|
萝卜
|
2d824d29dd
|
PlatformOrders: unify back sanitize via BackUrl
|
2026-03-14 22:45:46 +00:00 |
|
萝卜
|
ffc88feede
|
fix(backurl): avoid double fragment in withBackFirstAndFragment
|
2026-03-14 21:51:17 +00:00 |
|
萝卜
|
ee85e63340
|
fix(backurl): avoid double fragment when using withBackAndFragment
|
2026-03-14 21:33:32 +00:00 |
|
萝卜
|
4e741b92a1
|
security(backurl): re-sanitize back inside helpers
|
2026-03-14 21:27:52 +00:00 |
|
萝卜
|
e854d94578
|
feat(backurl): preserve existing fragment when appending back
|
2026-03-14 21:20:26 +00:00 |
|
萝卜
|
84e860e403
|
fix(backurl): avoid duplicating back query when already present
|
2026-03-14 21:17:02 +00:00 |
|
萝卜
|
9107d4af4a
|
fix(backurl): stabilize query append and support back-first links
|
2026-03-14 21:02:25 +00:00 |
|
萝卜
|
1b6476f2a4
|
refactor(back): add withBackAndFragment helper and use on platform_orders index
|
2026-03-14 19:06:32 +00:00 |
|
萝卜
|
956e177544
|
refactor: BackUrl::selfWithoutBack 统一 selfWithoutBack 构造并修复 currentQuery 依赖
|
2026-03-14 18:52:28 +00:00 |
|
萝卜
|
b759a87a57
|
refactor: BackUrl::withBack 统一 allUrl 生成(清空筛选但保留 back)
|
2026-03-14 18:46:18 +00:00 |
|