- 新增 Channel / SubscriptionPlan / SystemConfig 三个数据模型 - Order 模型扩展支持订阅订单(order_type, plan_id, subscription_group_id) - Sub2API client 新增分组查询、订阅分配/续期、用户订阅查询 - 订单服务支持订阅履约流程(CAS 锁 + 分组消失安全处理) - 管理后台:渠道管理、订阅套餐管理、系统配置、Sub2API 分组同步 - 用户页面:双 Tab UI(按量付费/包月订阅)、渠道卡片、充值弹窗、订阅确认 - PaymentForm 支持 fixedAmount 固定金额模式 - 订单状态 API 返回 failedReason 用于订阅异常展示 - 数据库迁移脚本
34 lines
833 B
TypeScript
34 lines
833 B
TypeScript
'use client';
|
|
|
|
import React from 'react';
|
|
import type { Locale } from '@/lib/locale';
|
|
import ChannelCard from '@/components/ChannelCard';
|
|
import type { ChannelInfo } from '@/components/ChannelCard';
|
|
|
|
interface ChannelGridProps {
|
|
channels: ChannelInfo[];
|
|
onTopUp: () => void;
|
|
isDark: boolean;
|
|
locale: Locale;
|
|
userBalance?: number;
|
|
}
|
|
|
|
export type { ChannelInfo };
|
|
|
|
export default function ChannelGrid({ channels, onTopUp, isDark, locale, userBalance }: ChannelGridProps) {
|
|
return (
|
|
<div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
|
|
{channels.map((channel) => (
|
|
<ChannelCard
|
|
key={channel.id}
|
|
channel={channel}
|
|
onTopUp={onTopUp}
|
|
isDark={isDark}
|
|
locale={locale}
|
|
userBalance={userBalance}
|
|
/>
|
|
))}
|
|
</div>
|
|
);
|
|
}
|