@extends('admin.layouts.app') @section('title', '套餐管理') @section('page_title', '套餐管理') @section('content') @php // back 参数用于“返回上一页(保留上下文)”,但 back 本身不应再包含 back(避免无限嵌套导致 URL 膨胀) $selfWithoutBack = \App\Support\BackUrl::selfWithoutBack(); // 用于构建“从套餐页跳转到订阅/订单页后可返回套餐页”的链接 $makeSubscriptionUrl = function (array $query) use ($selfWithoutBack) { $query = $query + ['back' => $selfWithoutBack]; return '/admin/site-subscriptions?' . \Illuminate\Support\Arr::query($query); }; $makePlatformOrderUrl = function (array $query) use ($selfWithoutBack) { $query = $query + ['back' => $selfWithoutBack]; return '/admin/platform-orders?' . \Illuminate\Support\Arr::query($query); }; // back 安全护栏(全页通用): // - 仅允许站内相对路径(/ 开头) // - 拒绝引号/尖括号(由于本页大量 href 采用 `{!! !!}` 原样输出,必须严控注入风险) // - 拒绝 nested back=(避免 URL 膨胀/绕过) $incomingBack = (string) request()->query('back', ''); $safeBackForLinks = \App\Support\BackUrl::sanitizeForLinks($incomingBack); // 用于摘要卡等入口:保留当前 query 并覆盖字段,同时安全透传 back。 $safeFullUrlWithQuery = function (array $overrides = []) use ($safeBackForLinks) { return \App\Support\BackUrl::currentPathWithQuery($overrides, $safeBackForLinks); }; $planIndexUrl = \App\Support\BackUrl::withBack('/admin/plans', $safeBackForLinks); @endphp
后续将从这里进入套餐详情、授权项与订阅联动。
| ID | 套餐名称 | 编码 | 计费周期 | 售价 | 划线价 | 状态 | 排序 | 发布时间 | 关联订阅 | 关联平台订单 | 操作 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| {{ $plan->id }} |
{{ $plan->name }}
{{ $plan->description ?: '暂无说明' }}
|
{{ $plan->code }} | {{ $billingCycleLabels[$plan->billing_cycle] ?? $plan->billing_cycle }} | ¥{{ number_format((float) $plan->price, 2) }} | ¥{{ number_format((float) $plan->list_price, 2) }} | {{ $statusLabels[$plan->status] ?? $plan->status }} | {{ $plan->sort }} | {{ optional($plan->published_at)->format('Y-m-d H:i:s') ?: '-' }} | @php $subCount = (int) ($plan->subscriptions_count ?? 0); @endphp @if($subCount > 0) {{ $subCount }} 个 @else 0 @endif | @php $orderCount = (int) ($plan->platform_orders_count ?? 0); @endphp @if($orderCount > 0) {{ $orderCount }} 单 @else 0 @endif | @php $editPlanUrl = \App\Support\BackUrl::withBack('/admin/plans/' . $plan->id . '/edit', $selfWithoutBack); $createOrderUrl = \App\Support\BackUrl::withBack('/admin/platform-orders/create?' . \Illuminate\Support\Arr::query([ 'plan_id' => $plan->id, 'order_type' => 'new_purchase', ]), $selfWithoutBack); @endphp @php $renewalMissingSubscriptionUrl = $makePlatformOrderUrl([ 'plan_id' => $plan->id, 'renewal_missing_subscription' => '1', ]); @endphp |
| 暂无套餐数据,当前阶段先把套餐主表与总台目录立起来,后续可继续接套餐创建、授权项与订阅关联。 | |||||||||||