import { App, Button, Form, InputNumber, Tag } from "antd"; import { Gauge, RadioTower, Workflow } from "lucide-react"; import { useEffect, useMemo, useState } from "react"; import { getAdminRuntimeConcurrencySetting, updateAdminRuntimeConcurrencySetting, type RuntimeConcurrencySetting } from "@/services/api/auth"; import { useAdminContext } from "../admin-context"; import { AdminPageFrame } from "../components/admin-shell"; import { SettingsSectionCard } from "../components/admin-ui"; type ConcurrencyFormValues = Pick; export default function ConcurrencySettingsPage() { const { message } = App.useApp(); const { references } = useAdminContext(); const [setting, setSetting] = useState(null); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); const [form] = Form.useForm(); const userNameById = useMemo(() => new Map(references.users.map((user) => [user.id, user.displayName || user.username])), [references.users]); useEffect(() => { void getAdminRuntimeConcurrencySetting() .then(({ setting: value }) => { setSetting(value); form.setFieldsValue(value); }) .catch((error) => message.error(error instanceof Error ? error.message : "读取任务并发配置失败")) .finally(() => setLoading(false)); }, [form, message]); const save = async () => { const values = await form.validateFields(); setSaving(true); try { const result = await updateAdminRuntimeConcurrencySetting(values); setSetting(result.setting); form.setFieldsValue(result.setting); message.success("任务并发配置已生效"); } catch (error) { message.error(error instanceof Error ? error.message : "保存任务并发配置失败"); } finally { setSaving(false); } }; return (
} title="运行时并发" description="控制任务消费速度和未单独配置渠道的默认请求并发。" status={热更新} footer={<>
{setting?.updatedAt ? `上次更新:${formatTime(setting.updatedAt)}${setting.updatedBy ? ` · ${userNameById.get(setting.updatedBy) || setting.updatedBy}` : ""}` : "当前使用环境变量默认值"}
} >
} /> } />
任务可以继续进入队列;达到渠道上限时会等待空闲槽位,不会因暂时满载直接失败。单独配置的渠道上限优先于这里的全局值。
); } function concurrencyRules(label: string) { return [{ required: true, message: `请填写${label}` }, { type: "number" as const, min: 1, max: 100, message: `${label}必须是 1-100 的整数` }]; } function formatTime(value?: string) { return value ? new Date(value).toLocaleString("zh-CN", { hour12: false }) : "--"; }