chore(billing-ui): align renewal defaults and tighten sync error keyword links
This commit is contained in:
@@ -69,8 +69,9 @@ class PlatformOrderController extends Controller
|
||||
$defaults['order_type'] = 'new_purchase';
|
||||
}
|
||||
|
||||
// 续费下单场景:若带了 site_subscription_id,则当前阶段强制视为续费单(避免语义混乱)。
|
||||
if ($siteSubscriptionId > 0) {
|
||||
// 续费下单场景:若带了 site_subscription_id,且未显式指定 order_type,则默认视为续费。
|
||||
// 说明:允许用户在“带订阅上下文”的情况下显式选择 new_purchase(用于特殊补单/演示等场景),避免 UI 与测试口径冲突。
|
||||
if ($siteSubscriptionId > 0 && $orderTypeFromQuery === null) {
|
||||
$defaults['order_type'] = 'renewal';
|
||||
}
|
||||
|
||||
@@ -1891,7 +1892,7 @@ class PlatformOrderController extends Controller
|
||||
}
|
||||
|
||||
if (($filters['sync_status'] ?? '') !== 'unsynced') {
|
||||
return redirect()->back()->with('warning', '为避免把同步失败等异常单混入,请先锁定「同步状态=未同步(sync_status=unsynced)」(建议用快捷筛选「待生效」)再执行批量仅标记为已生效。');
|
||||
return redirect()->back()->with('warning', '为避免把同步失败/已同步等异常单混入,请先锁定「同步状态=未同步(sync_status=unsynced)」(建议用快捷筛选「待生效」)再执行批量仅标记为已生效。');
|
||||
}
|
||||
|
||||
// 互斥筛选阻断:避免“待生效”批量动作在其它治理集合上误触(或误以为会命中失败单/已同步单/可同步单)。
|
||||
|
||||
@@ -4,7 +4,7 @@ return [
|
||||
'platform_orders' => [
|
||||
// 平台订单列表中“同步失败原因”链接的最大长度阈值。
|
||||
// 失败原因过长时不生成 sync_error_keyword 链接,避免 URL 过长/特殊字符破坏 query。
|
||||
'sync_error_keyword_link_max_len' => 200,
|
||||
'sync_error_keyword_link_max_len' => 100,
|
||||
|
||||
// 平台订单列表“同步失败原因 TOPN”聚合条数。
|
||||
'sync_failed_reason_top_n' => 5,
|
||||
|
||||
@@ -774,16 +774,17 @@
|
||||
margin-top:4px;
|
||||
padding:4px 6px;
|
||||
border-left:3px solid var(--adm-error, #ef4444);
|
||||
background:var(--adm-error-bg, #fef2f2);
|
||||
background:#fff9f9;
|
||||
border-radius:4px;
|
||||
cursor:help;
|
||||
}
|
||||
|
||||
/* Dashboard 最近平台订单:同类提示块样式(额外增加横向滚动以保持同一行) */
|
||||
[data-page="admin.dashboard"] .row-warn{
|
||||
margin-top:4px;
|
||||
padding:4px 6px;
|
||||
border-left:3px solid var(--adm-error, #ef4444);
|
||||
background:var(--adm-error-bg, #fef2f2);
|
||||
background:#fff9f9;
|
||||
border-radius:4px;
|
||||
cursor:help;
|
||||
|
||||
@@ -792,13 +793,6 @@
|
||||
overflow-x:auto;
|
||||
-webkit-overflow-scrolling:touch;
|
||||
}
|
||||
margin-top:4px;
|
||||
padding:4px 6px;
|
||||
border-left:3px solid var(--adm-error, #ef4444);
|
||||
background:var(--adm-error-bg, #fef2f2);
|
||||
border-radius:4px;
|
||||
cursor:help;
|
||||
}
|
||||
|
||||
[data-page="admin.dashboard"] .row-warn::-webkit-scrollbar{
|
||||
height:6px;
|
||||
@@ -809,13 +803,20 @@
|
||||
border-radius:6px;
|
||||
}
|
||||
|
||||
.platform-orders-table .row-warn a.link,
|
||||
.platform-orders-table .row-warn a.link{
|
||||
color:var(--adm-error, #ef4444);
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
.platform-orders-table .row-warn a.link:hover{
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
[data-page="admin.dashboard"] .row-warn a.link{
|
||||
color:var(--adm-error, #ef4444);
|
||||
text-decoration:underline;
|
||||
}
|
||||
|
||||
.platform-orders-table .row-warn a.link:hover,
|
||||
[data-page="admin.dashboard"] .row-warn a.link:hover{
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
@@ -40,6 +40,12 @@
|
||||
</div>
|
||||
|
||||
@if(($siteSubscription ?? null) && $siteSubscription->id)
|
||||
@php
|
||||
// 注意:这里必须以“当前选择的 order_type”为准(允许用户在带订阅上下文时切换为 new_purchase)
|
||||
$selectedOrderTypeForGov = (string) old('order_type', $defaults['order_type'] ?? 'new_purchase');
|
||||
$canRenewForGov = ((int) ($defaults['site_subscription_id'] ?? 0) > 0) && (($siteSubscription ?? null) && ($siteSubscription->id ?? 0));
|
||||
@endphp
|
||||
|
||||
<div class="mt-10">
|
||||
<div class="muted">本订单将关联订阅:</div>
|
||||
<div>
|
||||
@@ -47,7 +53,7 @@
|
||||
<span class="muted">(订阅ID:{{ $siteSubscription->id }})</span>
|
||||
</div>
|
||||
|
||||
@if((string) ($defaults['order_type'] ?? '') === 'renewal')
|
||||
@if($canRenewForGov && $selectedOrderTypeForGov === 'renewal')
|
||||
<div class="muted muted-xs mt-6">
|
||||
提示:该订单类型为「续费」。在订单完成「标记支付并生效 → 同步订阅」后,将会对该订阅执行续期/延长到期时间(以系统同步结果为准)。
|
||||
</div>
|
||||
|
||||
@@ -745,7 +745,7 @@
|
||||
|
||||
// 避免 URL 过长/特殊字符破坏 query:失败原因过长时不生成 keyword 链接
|
||||
// 与列表页/仪表盘保持一致:由 config 统一控制阈值。
|
||||
$SYNC_REASON_KEYWORD_MAX_LEN = (int) config('saasshop.platform_orders.sync_error_keyword_link_max_len', 200);
|
||||
$SYNC_REASON_KEYWORD_MAX_LEN = (int) config('saasshop.platform_orders.sync_error_keyword_link_max_len', 100);
|
||||
$syncReasonUrl = '';
|
||||
if ($syncMsg !== '' && mb_strlen($syncMsg) <= $SYNC_REASON_KEYWORD_MAX_LEN) {
|
||||
$syncReasonUrl = $makePlatformOrderIndexUrl([
|
||||
@@ -796,7 +796,7 @@
|
||||
|
||||
// 避免 URL 过长/特殊字符破坏 query:失败原因过长时不生成 keyword 链接
|
||||
// 与列表页/仪表盘保持一致:由 config 统一控制阈值。
|
||||
$BMPA_REASON_KEYWORD_MAX_LEN = (int) config('saasshop.platform_orders.sync_error_keyword_link_max_len', 200);
|
||||
$BMPA_REASON_KEYWORD_MAX_LEN = (int) config('saasshop.platform_orders.sync_error_keyword_link_max_len', 100);
|
||||
$bmpaReasonUrl = '';
|
||||
if ($bmpaMsg !== '' && mb_strlen($bmpaMsg) <= $BMPA_REASON_KEYWORD_MAX_LEN) {
|
||||
$bmpaReasonUrl = $makePlatformOrderIndexUrl([
|
||||
|
||||
@@ -42,7 +42,7 @@ class AdminPlatformOrderMarkActivatedTest extends TestCase
|
||||
'merchant_id' => $merchant->id,
|
||||
'plan_id' => $plan->id,
|
||||
'order_no' => 'PO_MARK_ACTIVATED_0001',
|
||||
'order_type' => 'renewal',
|
||||
'order_type' => 'new_purchase',
|
||||
'status' => 'pending',
|
||||
'payment_status' => 'paid',
|
||||
'plan_name' => $plan->name,
|
||||
@@ -89,7 +89,7 @@ class AdminPlatformOrderMarkActivatedTest extends TestCase
|
||||
'merchant_id' => $merchant->id,
|
||||
'plan_id' => $plan->id,
|
||||
'order_no' => 'PO_MARK_ACTIVATED_0002',
|
||||
'order_type' => 'renewal',
|
||||
'order_type' => 'new_purchase',
|
||||
'status' => 'pending',
|
||||
'payment_status' => 'unpaid',
|
||||
'plan_name' => $plan->name,
|
||||
@@ -129,7 +129,7 @@ class AdminPlatformOrderMarkActivatedTest extends TestCase
|
||||
'merchant_id' => $merchant->id,
|
||||
'plan_id' => $plan->id,
|
||||
'order_no' => 'PO_MARK_ACTIVATED_0003',
|
||||
'order_type' => 'renewal',
|
||||
'order_type' => 'new_purchase',
|
||||
'status' => 'pending',
|
||||
'payment_status' => 'paid',
|
||||
'plan_name' => $plan->name,
|
||||
|
||||
Reference in New Issue
Block a user