feat: 用户订阅列表显示节点分组名,限速详情显示起止时间

- UserSubscribe 类型新增 node_group_id/node_group_name 字段
- UserSubscribeDetail 类型新增 throttle_start/throttle_end/node_group_id/node_group_name 字段
- 订阅列表表格新增「节点分组」列
- 限速卡片新增限速窗口起止时间显示

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
shanshanzhong 2026-03-29 10:36:11 -07:00
parent dd30b8eb8b
commit de87133061
4 changed files with 17 additions and 0 deletions

Binary file not shown.

View File

@ -329,6 +329,11 @@ export default function UserSubscription({ userId }: { userId: number }) {
: t("permanent", "Permanent");
},
},
{
accessorKey: "node_group_name",
header: t("nodeGroup", "Node Group"),
cell: ({ row }) => row.original.node_group_name || "-",
},
{
accessorKey: "created_at",
header: t("createdAt", "Created At"),

View File

@ -86,6 +86,12 @@ function SpeedLimitCard({ subscriptionId }: { subscriptionId: number }) {
{detail.throttle_rule}
</p>
)}
{isThrottled && detail.throttle_start && detail.throttle_end && (
<p className="text-muted-foreground text-xs">
{formatDate(detail.throttle_start)} ~{" "}
{formatDate(detail.throttle_end)}
</p>
)}
</div>
</div>
);

View File

@ -2504,6 +2504,8 @@ declare namespace API {
token: string;
status: number;
short: string;
node_group_id?: number;
node_group_name?: string;
created_at: number;
updated_at: number;
};
@ -2526,6 +2528,10 @@ declare namespace API {
effective_speed: number;
is_throttled: boolean;
throttle_rule?: string;
throttle_start?: number;
throttle_end?: number;
node_group_id?: number;
node_group_name?: string;
created_at: number;
updated_at: number;
};