merge: 同步 upstream/main 新功能到定制版本

- feat: Add slider verification code (bd67997)
- fix bug: Inventory cannot be zero (1f7a6ee)
- fix: resolve merge conflicts and lint errors
This commit is contained in:
2026-03-23 21:50:10 -07:00
parent 3806264343
commit d6616c5859
63 changed files with 3111 additions and 1130 deletions
@@ -1,5 +1,6 @@
"use client";
import { useQuery } from "@tanstack/react-query";
import { Badge } from "@workspace/ui/components/badge";
import { Button } from "@workspace/ui/components/button";
import { Switch } from "@workspace/ui/components/switch";
@@ -8,6 +9,7 @@ import {
ProTable,
type ProTableActions,
} from "@workspace/ui/composed/pro-table/pro-table";
import { getNodeGroupList } from "@workspace/ui/services/admin/group";
import {
batchDeleteSubscribe,
createSubscribe,
@@ -16,8 +18,6 @@ import {
subscribeSort,
updateSubscribe,
} from "@workspace/ui/services/admin/subscribe";
import { getNodeGroupList } from "@workspace/ui/services/admin/group";
import { useQuery } from "@tanstack/react-query";
import { useRef, useState } from "react";
import { useTranslation } from "react-i18next";
import { toast } from "sonner";
@@ -46,15 +46,20 @@ export default function SubscribeTable() {
const { data: groupConfigData } = useQuery({
queryKey: ["groupConfig"],
queryFn: async () => {
const { data } = await (await import("@workspace/ui/services/admin/group")).getGroupConfig();
const { data } = await (
await import("@workspace/ui/services/admin/group")
).getGroupConfig();
return data.data;
},
});
const isGroupEnabled = groupConfigData?.enabled || false;
const isGroupEnabled = groupConfigData?.enabled;
return (
<ProTable<API.SubscribeItem, { group_id: number; query: string; node_group_id?: number }>
<ProTable<
API.SubscribeItem,
{ group_id: number; query: string; node_group_id?: number }
>
action={ref}
actions={{
render: (row) => [
@@ -72,7 +77,9 @@ export default function SubscribeTable() {
// Add node_group_ids if it exists in values
const vals = values as any;
if (vals.node_group_ids) {
updateBody.node_group_ids = vals.node_group_ids.map((id: string | number) => Number(id));
updateBody.node_group_ids = vals.node_group_ids.map(
(id: string | number) => Number(id)
);
}
await updateSubscribe(updateBody as API.UpdateSubscribeRequest);
toast.success(t("updateSuccess"));
@@ -241,10 +248,12 @@ export default function SubscribeTable() {
header: t("inventory"),
cell: ({ row }) => {
const inventory = row.getValue("inventory") as number;
return inventory === -1 ? (
<Display type="number" unlimited value={0} />
) : (
<Display type="number" unlimited value={inventory} />
return (
<Display
type="number"
unlimited={inventory === -1}
value={inventory === -1 ? 0 : inventory}
/>
);
},
},
@@ -281,7 +290,9 @@ export default function SubscribeTable() {
header: t("defaultNodeGroup", "Default Node Group"),
cell: ({ row }: { row: any }) => {
const nodeGroupId = row.original.node_group_id;
const nodeGroup = nodeGroupsData?.find((g) => g.id === nodeGroupId);
const nodeGroup = nodeGroupsData?.find(
(g) => g.id === nodeGroupId
);
return (
<div>
@@ -310,7 +321,9 @@ export default function SubscribeTable() {
// Add node_group_ids if it exists in values
const vals = values as any;
if (vals.node_group_ids) {
createBody.node_group_ids = vals.node_group_ids.map((id: string | number) => Number(id));
createBody.node_group_ids = vals.node_group_ids.map(
(id: string | number) => Number(id)
);
}
await createSubscribe(createBody);
toast.success(t("createSuccess"));
@@ -389,7 +402,9 @@ export default function SubscribeTable() {
const params = {
...pagination,
...filters,
node_group_id: filters?.node_group_id ? Number(filters.node_group_id) : undefined,
node_group_id: filters?.node_group_id
? Number(filters.node_group_id)
: undefined,
} as any;
const { data } = await getSubscribeList(params);