From 7557e38f81a4d8d24f0d6a8ba642e8cb332ad9e3 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 11 Aug 2025 20:19:17 +0800 Subject: [PATCH 01/16] feat(ui): custom acme provider in global settings --- ui/package-lock.json | 34 +++---- ui/package.json | 6 +- ui/src/pages/settings/SettingsSSLProvider.tsx | 96 +++++++++++++++++++ 3 files changed, 116 insertions(+), 20 deletions(-) diff --git a/ui/package-lock.json b/ui/package-lock.json index a4c40e0a1..79eaf2bfa 100644 --- a/ui/package-lock.json +++ b/ui/package-lock.json @@ -21,12 +21,12 @@ "@uiw/codemirror-theme-vscode": "^4.24.2", "@uiw/react-codemirror": "^4.24.2", "ahooks": "^3.9.0", - "antd": "^5.26.7", + "antd": "^5.27.0", "antd-zod": "^7.0.0", "clsx": "^2.1.1", "cron-parser": "^5.3.0", "file-saver": "^2.0.5", - "i18next": "^25.3.2", + "i18next": "^25.3.4", "i18next-browser-languagedetector": "^8.2.0", "immer": "^10.1.1", "nanoid": "^5.1.5", @@ -38,7 +38,7 @@ "react-i18next": "^15.6.1", "react-router-dom": "^7.8.0", "tailwind-merge": "^3.3.1", - "zod": "^4.0.16", + "zod": "^4.0.17", "zustand": "^5.0.7" }, "devDependencies": { @@ -5672,9 +5672,9 @@ } }, "node_modules/antd": { - "version": "5.26.7", - "resolved": "https://registry.npmmirror.com/antd/-/antd-5.26.7.tgz", - "integrity": "sha512-iCyXN6+i2CUVEOSzzJKfbKeg115qoJhGvSkCh5uzAf9hANwHUOJQhsMn+KtN+Lx/2NQ6wfM7nGZ+7NPNO5Pn1w==", + "version": "5.27.0", + "resolved": "https://registry.npmmirror.com/antd/-/antd-5.27.0.tgz", + "integrity": "sha512-o54dmpooLOc08RSGCkeEQBYAGPxUSmnhmYJKCNTHH46vzjOVxdteu+wPTRVkRbAkDTbs2VcNr5VL7Lu67rPIiA==", "dependencies": { "@ant-design/colors": "^7.2.1", "@ant-design/cssinjs": "^1.23.0", @@ -5716,8 +5716,8 @@ "rc-steps": "~6.0.1", "rc-switch": "~4.1.0", "rc-table": "~7.51.1", - "rc-tabs": "~15.6.1", - "rc-textarea": "~1.10.1", + "rc-tabs": "~15.7.0", + "rc-textarea": "~1.10.2", "rc-tooltip": "~6.4.0", "rc-tree": "~5.13.1", "rc-tree-select": "~5.27.0", @@ -7635,9 +7635,9 @@ } }, "node_modules/i18next": { - "version": "25.3.2", - "resolved": "https://registry.npmmirror.com/i18next/-/i18next-25.3.2.tgz", - "integrity": "sha512-JSnbZDxRVbphc5jiptxr3o2zocy5dEqpVm9qCGdJwRNO+9saUJS0/u4LnM/13C23fUEWxAylPqKU/NpMV/IjqA==", + "version": "25.3.4", + "resolved": "https://registry.npmmirror.com/i18next/-/i18next-25.3.4.tgz", + "integrity": "sha512-AHklEYFLiRRxW1Cb6zE9lfnEtYvsydRC8nRS3RSKGX3zCqZ8nLZwMaUsrb80YuccPNv2RNokDL8LkTNnp+6mDw==", "funding": [ { "type": "individual", @@ -9546,9 +9546,9 @@ } }, "node_modules/rc-tabs": { - "version": "15.6.1", - "resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.6.1.tgz", - "integrity": "sha512-/HzDV1VqOsUWyuC0c6AkxVYFjvx9+rFPKZ32ejxX0Uc7QCzcEjTA9/xMgv4HemPKwzBNX8KhGVbbumDjnj92aA==", + "version": "15.7.0", + "resolved": "https://registry.npmmirror.com/rc-tabs/-/rc-tabs-15.7.0.tgz", + "integrity": "sha512-ZepiE+6fmozYdWf/9gVp7k56PKHB1YYoDsKeQA1CBlJ/POIhjkcYiv0AGP0w2Jhzftd3AVvZP/K+V+Lpi2ankA==", "dependencies": { "@babel/runtime": "^7.11.2", "classnames": "2.x", @@ -11387,9 +11387,9 @@ } }, "node_modules/zod": { - "version": "4.0.16", - "resolved": "https://registry.npmmirror.com/zod/-/zod-4.0.16.tgz", - "integrity": "sha512-Djo/cM339grjI7/HmN+ixYO2FzEMcWr/On50UlQ/RjrWK1I/hPpWhpC76heCptnRFpH0LMwrEbUY50HDc0V8wg==", + "version": "4.0.17", + "resolved": "https://registry.npmmirror.com/zod/-/zod-4.0.17.tgz", + "integrity": "sha512-1PHjlYRevNxxdy2JZ8JcNAw7rX8V9P1AKkP+x/xZfxB0K5FYfuV+Ug6P/6NVSR2jHQ+FzDDoDHS04nYUsOIyLQ==", "funding": { "url": "https://github.com/sponsors/colinhacks" } diff --git a/ui/package.json b/ui/package.json index 42744c9f7..450fc8a1c 100644 --- a/ui/package.json +++ b/ui/package.json @@ -23,12 +23,12 @@ "@uiw/codemirror-theme-vscode": "^4.24.2", "@uiw/react-codemirror": "^4.24.2", "ahooks": "^3.9.0", - "antd": "^5.26.7", + "antd": "^5.27.0", "antd-zod": "^7.0.0", "clsx": "^2.1.1", "cron-parser": "^5.3.0", "file-saver": "^2.0.5", - "i18next": "^25.3.2", + "i18next": "^25.3.4", "i18next-browser-languagedetector": "^8.2.0", "immer": "^10.1.1", "nanoid": "^5.1.5", @@ -40,7 +40,7 @@ "react-i18next": "^15.6.1", "react-router-dom": "^7.8.0", "tailwind-merge": "^3.3.1", - "zod": "^4.0.16", + "zod": "^4.0.17", "zustand": "^5.0.7" }, "devDependencies": { diff --git a/ui/src/pages/settings/SettingsSSLProvider.tsx b/ui/src/pages/settings/SettingsSSLProvider.tsx index e68ebca01..ce67d2ce5 100644 --- a/ui/src/pages/settings/SettingsSSLProvider.tsx +++ b/ui/src/pages/settings/SettingsSSLProvider.tsx @@ -359,6 +359,86 @@ const SSLProviderEditFormZeroSSLConfig = () => { ); }; +const SSLProviderEditFormACMECAConfig = () => { + const { t } = useTranslation(); + + const { pending, settings, updateSettings } = useContext(SSLProviderContext); + + const formSchema = z.object({ + endpoint: z.url(t("common.errmsg.url_invalid")), + eabKid: z + .string(t("access.form.acmeca_eab_kid.placeholder")) + .min(1, t("access.form.acmeca_eab_kid.placeholder")) + .max(256, t("common.errmsg.string_max", { max: 256 })), + eabHmacKey: z + .string(t("access.form.acmeca_eab_hmac_key.placeholder")) + .min(1, t("access.form.acmeca_eab_hmac_key.placeholder")) + .max(256, t("common.errmsg.string_max", { max: 256 })), + }); + const formRule = createSchemaFieldRule(formSchema); + const { form: formInst, formProps } = useAntdForm>({ + initialValues: settings?.content?.config?.[CA_PROVIDERS.ACMECA], + onSubmit: async (values) => { + const newSettings = produce(settings, (draft) => { + draft.content ??= {} as SSLProviderSettingsContent; + draft.content.provider = CA_PROVIDERS.ACMECA; + + draft.content.config ??= {} as SSLProviderSettingsContent["config"]; + draft.content.config[CA_PROVIDERS.ACMECA] = values; + }); + await updateSettings(newSettings); + + setFormChanged(false); + }, + }); + + const [formChanged, setFormChanged] = useState(false); + useEffect(() => { + setFormChanged(settings?.content?.provider !== CA_PROVIDERS.ACMECA); + }, [settings?.content?.provider]); + + const handleFormChange = () => { + setFormChanged(true); + }; + + return ( +
+ } + > + + + + } + > + + + + } + > + + + + + + +
+ ); +}; + const SettingsSSLProvider = () => { const { t } = useTranslation(); @@ -398,6 +478,8 @@ const SettingsSSLProvider = () => { return ; case CA_PROVIDERS.ZEROSSL: return ; + case CA_PROVIDERS.ACMECA: + return ; } }, [providerType]); @@ -437,6 +519,7 @@ const SettingsSSLProvider = () => { setProviderType(value as CAProviderType)}> } size="small" title={t("provider.letsencrypt")} @@ -444,6 +527,7 @@ const SettingsSSLProvider = () => { value={CA_PROVIDERS.LETSENCRYPT} /> } size="small" title={t("provider.letsencryptstaging")} @@ -451,6 +535,7 @@ const SettingsSSLProvider = () => { value={CA_PROVIDERS.LETSENCRYPTSTAGING} /> } size="small" title={t("provider.buypass")} @@ -458,6 +543,7 @@ const SettingsSSLProvider = () => { value={CA_PROVIDERS.BUYPASS} /> } size="small" title={t("provider.googletrustservices")} @@ -465,6 +551,7 @@ const SettingsSSLProvider = () => { value={CA_PROVIDERS.GOOGLETRUSTSERVICES} /> } size="small" title={t("provider.sslcom")} @@ -472,12 +559,21 @@ const SettingsSSLProvider = () => { value={CA_PROVIDERS.SSLCOM} /> } size="small" title={t("provider.zerossl")} description="zerossl.com" value={CA_PROVIDERS.ZEROSSL} /> + } + size="small" + title={t("provider.acmeca")} + description={"\u00A0"} + value={CA_PROVIDERS.ACMECA} + /> From cf7e56ad7a88fbc8fdc7181482fa3e05b2367796 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 11 Aug 2025 20:36:57 +0800 Subject: [PATCH 02/16] feat(ui): workflow runs batch deletion --- ui/src/i18n/locales/en/nls.workflow.runs.json | 2 + ui/src/i18n/locales/zh/nls.workflow.runs.json | 2 + ui/src/pages/accesses/AccessList.tsx | 3 +- ui/src/pages/certificates/CertificateList.tsx | 4 +- ui/src/pages/dashboard/Dashboard.tsx | 1 + ui/src/pages/workflows/WorkflowDetailRuns.tsx | 151 ++++++++++++++---- ui/src/pages/workflows/WorkflowList.tsx | 3 +- ui/src/repository/access.ts | 2 +- ui/src/repository/certificate.ts | 2 +- ui/src/repository/workflow.ts | 2 +- ui/src/repository/workflowRun.ts | 2 +- 11 files changed, 133 insertions(+), 41 deletions(-) diff --git a/ui/src/i18n/locales/en/nls.workflow.runs.json b/ui/src/i18n/locales/en/nls.workflow.runs.json index 1c9a05eb4..b84ca4947 100644 --- a/ui/src/i18n/locales/en/nls.workflow.runs.json +++ b/ui/src/i18n/locales/en/nls.workflow.runs.json @@ -6,6 +6,8 @@ "workflow_run.action.delete.button": "Delete workflow run", "workflow_run.action.delete.modal.title": "Delete \"{{name}}\"", "workflow_run.action.delete.modal.content": "Are you sure want to delete this workflow run?
This action cannot be undone.", + "workflow_run.action.batch_delete.modal.title": "Delete workflow runs", + "workflow_run.action.batch_delete.modal.content": "Are you sure want to delete these {{count}} selected workflow runs?
This action cannot be undone.", "workflow_run.deletion.alert": "The workflow run contains the execution results of each node. Deleting it may trigger re-application or re-deployment of certificates due to the inability to find the previous execution result. Please do not delete unless necessary. It is recommended to keep it for at least 180 days. ", "workflow_run.cancellation.alert": "If the process is unexpectedly terminated or the server times out, you can manually cancel long-hanging runs to prevent blocking subsequent executions.", diff --git a/ui/src/i18n/locales/zh/nls.workflow.runs.json b/ui/src/i18n/locales/zh/nls.workflow.runs.json index 29c25f5be..19e1d40e9 100644 --- a/ui/src/i18n/locales/zh/nls.workflow.runs.json +++ b/ui/src/i18n/locales/zh/nls.workflow.runs.json @@ -6,6 +6,8 @@ "workflow_run.action.delete.button": "删除运行历史", "workflow_run.action.delete.modal.title": "删除运行「{{name}}」", "workflow_run.action.delete.modal.content": "确定要删除该工作流运行历史吗?删除后仅会清除日志历史,但不会影响签发的证书。
注意此操作不可撤销,请谨慎操作。", + "workflow_run.action.batch_delete.modal.title": "删除运行历史", + "workflow_run.action.batch_delete.modal.content": "确定要删除这 {{count}} 个被选中的工作流运行历史吗?删除后仅会清除日志历史,但不会影响签发的证书。
注意此操作不可撤销,请谨慎操作。", "workflow_run.deletion.alert": "运行历史中包含工作流各节点的运行结果,删除后可能导致因找不到前次运行结果而触发重新申请或部署证书。如无必要请勿提前删除,建议保留至少 180 天。", "workflow_run.cancellation.alert": "如遇进程意外中止、服务器超时等原因,你可以手动取消长时间挂起的运行,避免阻塞后续运行。", diff --git a/ui/src/pages/accesses/AccessList.tsx b/ui/src/pages/accesses/AccessList.tsx index 7015766f9..5e802876d 100644 --- a/ui/src/pages/accesses/AccessList.tsx +++ b/ui/src/pages/accesses/AccessList.tsx @@ -228,6 +228,7 @@ const AccessList = () => { onSuccess: (res) => { setTableData(res.items); setTableTotal(res.totalItems); + setTableSelectedRowKeys([]); }, } ); @@ -316,7 +317,6 @@ const AccessList = () => { try { const resp = await deleteAccess(records); if (resp) { - setTableSelectedRowKeys([]); setTableData((prev) => prev.filter((item) => !records.some((record) => record.id === item.id))); setTableTotal((prev) => prev - records.length); refreshData(); @@ -391,6 +391,7 @@ const AccessList = () => { ) : ( } diff --git a/ui/src/pages/certificates/CertificateList.tsx b/ui/src/pages/certificates/CertificateList.tsx index 7594df187..ce00dbb3a 100644 --- a/ui/src/pages/certificates/CertificateList.tsx +++ b/ui/src/pages/certificates/CertificateList.tsx @@ -250,11 +250,11 @@ const CertificateList = () => { return prev; }); - setTableSelectedRowKeys([]); }, onSuccess: (res) => { setTableData(res.items); setTableTotal(res.totalItems); + setTableSelectedRowKeys([]); }, onError: (err) => { if (err instanceof ClientResponseError && err.isAbort) { @@ -340,7 +340,6 @@ const CertificateList = () => { try { const resp = await removeCertificate(records); if (resp) { - setTableSelectedRowKeys([]); setTableData((prev) => prev.filter((item) => !records.some((record) => record.id === item.id))); setTableTotal((prev) => prev - records.length); refreshData(); @@ -405,6 +404,7 @@ const CertificateList = () => { ) : ( } diff --git a/ui/src/pages/dashboard/Dashboard.tsx b/ui/src/pages/dashboard/Dashboard.tsx index 5462528da..adde54a69 100644 --- a/ui/src/pages/dashboard/Dashboard.tsx +++ b/ui/src/pages/dashboard/Dashboard.tsx @@ -350,6 +350,7 @@ const WorkflowRunHistoryTable = ({ className, style }: { className?: string; sty ) : ( } diff --git a/ui/src/pages/workflows/WorkflowDetailRuns.tsx b/ui/src/pages/workflows/WorkflowDetailRuns.tsx index fe79ba889..a32dd4491 100644 --- a/ui/src/pages/workflows/WorkflowDetailRuns.tsx +++ b/ui/src/pages/workflows/WorkflowDetailRuns.tsx @@ -2,12 +2,13 @@ import { useEffect, useState } from "react"; import { useTranslation } from "react-i18next"; import { IconBrowserShare, IconDots, IconHistory, IconPlayerPause, IconTrash } from "@tabler/icons-react"; import { useRequest } from "ahooks"; -import { App, Button, Dropdown, Skeleton, Table, type TableProps } from "antd"; +import { App, Button, Dropdown, Skeleton, Table, type TableProps, theme } from "antd"; import dayjs from "dayjs"; import { ClientResponseError } from "pocketbase"; import { cancelRun as cancelWorkflowRun } from "@/api/workflows"; import Empty from "@/components/Empty"; +import Show from "@/components/Show"; import Tips from "@/components/Tips"; import WorkflowRunDetailDrawer from "@/components/workflow/WorkflowRunDetailDrawer"; import WorkflowStatusTag from "@/components/workflow/WorkflowStatusTag"; @@ -26,6 +27,8 @@ import { getErrMsg } from "@/utils/error"; const WorkflowDetailRuns = () => { const { t } = useTranslation(); + const { token: themeToken } = theme.useToken(); + const { modal, notification } = App.useApp(); const { appSettings: globalAppSettings } = useAppSettings(); @@ -37,6 +40,7 @@ const WorkflowDetailRuns = () => { const [tableData, setTableData] = useState([]); const [tableTotal, setTableTotal] = useState(0); + const [tableSelectedRowKeys, setTableSelectedRowKeys] = useState([]); const tableColumns: TableProps["columns"] = [ { key: "$index", @@ -167,6 +171,31 @@ const WorkflowDetailRuns = () => { }, }, ]; + const tableRowSelection: TableProps["rowSelection"] = { + fixed: true, + selectedRowKeys: tableSelectedRowKeys, + renderCell(checked, _, index, node) { + if (!checked) { + return ( +
+
{(page - 1) * pageSize + index + 1}
+
{node}
+
+ ); + } + return node; + }, + onCell: () => { + return { + onClick: (e) => { + e.stopPropagation(); + }, + }; + }, + onChange: (keys) => { + setTableSelectedRowKeys(keys as string[]); + }, + }; const { loading, @@ -185,6 +214,7 @@ const WorkflowDetailRuns = () => { onSuccess: (res) => { setTableData(res.items); setTableTotal(res.totalItems); + setTableSelectedRowKeys([]); }, onError: (err) => { if (err instanceof ClientResponseError && err.isAbort) { @@ -284,44 +314,99 @@ const WorkflowDetailRuns = () => { }); }; + const handleBatchDeleteClick = () => { + let records = tableData.filter((item) => tableSelectedRowKeys.includes(item.id)); + if (records.length === 0) { + return; + } + + modal.confirm({ + title: {t("workflow_run.action.batch_delete.modal.title")}, + content: , + icon: ( + + + + ), + okText: t("common.button.confirm"), + okButtonProps: { danger: true }, + onOk: async () => { + // 未结束的记录不允许删除 + records = records.filter((record) => !([WORKFLOW_RUN_STATUSES.PENDING, WORKFLOW_RUN_STATUSES.RUNNING] as string[]).includes(record.status)); + try { + const resp = await removeWorkflowRun(records); + if (resp) { + setTableData((prev) => prev.filter((item) => !records.some((record) => record.id === item.id))); + setTableTotal((prev) => prev - records.length); + refreshData(); + } + } catch (err) { + console.error(err); + notification.error({ message: t("common.text.request_error"), description: getErrMsg(err) }); + } + }, + }); + }; + return (
} /> } /> - - columns={tableColumns} - dataSource={tableData} - loading={loading} - locale={{ - emptyText: loading ? ( - - ) : ( - } - /> - ), - }} - pagination={{ - current: page, - pageSize: pageSize, - total: tableTotal, - showSizeChanger: true, - onChange: handlePaginationChange, - onShowSizeChange: handlePaginationChange, - }} - rowClassName="cursor-pointer" - rowKey={(record) => record.id} - scroll={{ x: "max(100%, 960px)" }} - onRow={(record) => ({ - onClick: () => { - handleRecordDetailClick(record); - }, - })} - /> +
+ + columns={tableColumns} + dataSource={tableData} + loading={loading} + locale={{ + emptyText: loading ? ( + + ) : ( + } + /> + ), + }} + pagination={{ + current: page, + pageSize: pageSize, + total: tableTotal, + showSizeChanger: true, + onChange: handlePaginationChange, + onShowSizeChange: handlePaginationChange, + }} + rowClassName="cursor-pointer" + rowKey={(record) => record.id} + rowSelection={tableRowSelection} + scroll={{ x: "max(100%, 960px)" }} + onRow={(record) => ({ + onClick: () => { + handleRecordDetailClick(record); + }, + })} + /> + + 0}> +
+
+ +
+
+
+
diff --git a/ui/src/pages/workflows/WorkflowList.tsx b/ui/src/pages/workflows/WorkflowList.tsx index 6e18736a8..70ea75ffd 100644 --- a/ui/src/pages/workflows/WorkflowList.tsx +++ b/ui/src/pages/workflows/WorkflowList.tsx @@ -259,6 +259,7 @@ const WorkflowList = () => { onSuccess: (res) => { setTableData(res.items); setTableTotal(res.totalItems); + setTableSelectedRowKeys([]); }, onError: (err) => { if (err instanceof ClientResponseError && err.isAbort) { @@ -400,7 +401,6 @@ const WorkflowList = () => { try { const resp = await removeWorkflow(records); if (resp) { - setTableSelectedRowKeys([]); setTableData((prev) => prev.filter((item) => !records.some((record) => record.id === item.id))); setTableTotal((prev) => prev - records.length); refreshData(); @@ -469,6 +469,7 @@ const WorkflowList = () => { ) : ( } diff --git a/ui/src/repository/access.ts b/ui/src/repository/access.ts index 2b834512d..5926fccce 100644 --- a/ui/src/repository/access.ts +++ b/ui/src/repository/access.ts @@ -35,7 +35,7 @@ export const remove = async (record: MaybeModelRecordWithId | Maybe batch.collection(COLLECTION_NAME_ACCESS).update(item.id, { deleted: deletedAt }); } const res = await batch.send(); - return res.every((e) => e.status === 200); + return res.every((e) => e.status >= 200 && e.status < 400); } else { await pb.collection(COLLECTION_NAME_ACCESS).update(record.id!, { deleted: deletedAt }); return true; diff --git a/ui/src/repository/certificate.ts b/ui/src/repository/certificate.ts index 92ad852b1..da322d21e 100644 --- a/ui/src/repository/certificate.ts +++ b/ui/src/repository/certificate.ts @@ -64,7 +64,7 @@ export const remove = async (record: MaybeModelRecordWithId | batch.collection(COLLECTION_NAME_CERTIFICATE).update(item.id, { deleted: deletedAt }); } const res = await batch.send(); - return res.every((e) => e.status === 200); + return res.every((e) => e.status >= 200 && e.status < 400); } else { await pb.collection(COLLECTION_NAME_CERTIFICATE).update(record.id!, { deleted: deletedAt }); return true; diff --git a/ui/src/repository/workflow.ts b/ui/src/repository/workflow.ts index 32ffac47b..c7a931a2e 100644 --- a/ui/src/repository/workflow.ts +++ b/ui/src/repository/workflow.ts @@ -62,7 +62,7 @@ export const remove = async (record: MaybeModelRecordWithId | May batch.collection(COLLECTION_NAME_WORKFLOW).delete(item.id); } const res = await batch.send(); - return res.every((e) => e.status === 200); + return res.every((e) => e.status >= 200 && e.status < 400); } else { return await pb.collection(COLLECTION_NAME_WORKFLOW).delete(record.id); } diff --git a/ui/src/repository/workflowRun.ts b/ui/src/repository/workflowRun.ts index c1f462804..d45688228 100644 --- a/ui/src/repository/workflowRun.ts +++ b/ui/src/repository/workflowRun.ts @@ -38,7 +38,7 @@ export const remove = async (record: MaybeModelRecordWithId | batch.collection(COLLECTION_NAME_WORKFLOW_RUN).delete(item.id); } const res = await batch.send(); - return res.every((e) => e.status === 200); + return res.every((e) => e.status >= 200 && e.status < 400); } else { await pb.collection(COLLECTION_NAME_WORKFLOW_RUN).delete(record.id!); return true; From f9398ffb3915acb0ea2c5ec2216c025cc18a7625 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 11 Aug 2025 21:44:03 +0800 Subject: [PATCH 03/16] feat(ui): only display available providers in DeploymentProviderPicker --- ui/src/components/access/AccessSelect.tsx | 2 +- .../provider/AccessProviderPicker.tsx | 20 +++++---- .../components/provider/CAProviderSelect.tsx | 4 +- .../provider/DeploymentProviderPicker.tsx | 42 +++++++++++++++---- .../designer/forms/BizApplyNodeConfigForm.tsx | 2 +- .../workflow/node/ApplyNodeConfigForm.tsx | 2 +- ui/src/i18n/locales/en/nls.provider.json | 3 +- ui/src/i18n/locales/zh/nls.provider.json | 3 +- ui/src/stores/access/index.ts | 10 ++++- ui/src/stores/access/types.ts | 2 +- ui/src/stores/contact/index.ts | 8 +++- ui/src/stores/contact/types.ts | 2 +- 12 files changed, 71 insertions(+), 29 deletions(-) diff --git a/ui/src/components/access/AccessSelect.tsx b/ui/src/components/access/AccessSelect.tsx index a79e15838..239bde584 100644 --- a/ui/src/components/access/AccessSelect.tsx +++ b/ui/src/components/access/AccessSelect.tsx @@ -16,7 +16,7 @@ const AccessSelect = ({ onFilter, ...props }: AccessTypeSelectProps) => { const { accesses, loadedAtOnce, fetchAccesses } = useAccessesStore(useZustandShallowSelector(["accesses", "loadedAtOnce", "fetchAccesses"])); useEffect(() => { - fetchAccesses(); + fetchAccesses(false); }, []); const [options, setOptions] = useState>([]); diff --git a/ui/src/components/provider/AccessProviderPicker.tsx b/ui/src/components/provider/AccessProviderPicker.tsx index 7568bf0ac..308e199c7 100644 --- a/ui/src/components/provider/AccessProviderPicker.tsx +++ b/ui/src/components/provider/AccessProviderPicker.tsx @@ -1,7 +1,7 @@ import { useEffect, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { useSize } from "ahooks"; -import { Avatar, Card, Empty, Input, type InputRef, Tag, Typography } from "antd"; +import { Avatar, Card, Empty, Input, type InputRef, Tag, Tooltip, Typography } from "antd"; import Show from "@/components/Show"; import { ACCESS_USAGES, type AccessProvider, type AccessUsageType, accessProvidersMap } from "@/domain/provider"; @@ -99,7 +99,7 @@ const AccessProviderPicker = ({ className, style, autoFocus, placeholder, showOp return (
{ @@ -110,14 +110,18 @@ const AccessProviderPicker = ({ className, style, autoFocus, placeholder, showOp handleProviderTypeSelect(provider.type); }} > -
- } shape="square" size={28} /> -
-
- {t(provider.name) || "\u00A0"} +
+
+ } shape="square" size={32} /> +
+
+
+ + {t(provider.name) || "\u00A0"} +
-
+
{t("access.props.provider.builtin")} diff --git a/ui/src/components/provider/CAProviderSelect.tsx b/ui/src/components/provider/CAProviderSelect.tsx index c74059c62..ab89bd065 100644 --- a/ui/src/components/provider/CAProviderSelect.tsx +++ b/ui/src/components/provider/CAProviderSelect.tsx @@ -33,7 +33,7 @@ const CAProviderSelect = ({ onFilter, ...props }: CAProviderSelectProps) => { temp.unshift({ key: "", value: "", - label: t("provider.text.default_ca_provider.label"), + label: t("provider.text.default_ca_provider"), data: {} as CAProvider, }); @@ -45,7 +45,7 @@ const CAProviderSelect = ({ onFilter, ...props }: CAProviderSelectProps) => { return (
- {t("provider.text.default_ca_provider.label")} + {t("provider.text.default_ca_provider")}
); diff --git a/ui/src/components/provider/DeploymentProviderPicker.tsx b/ui/src/components/provider/DeploymentProviderPicker.tsx index 8b91a187b..f9b2022b9 100644 --- a/ui/src/components/provider/DeploymentProviderPicker.tsx +++ b/ui/src/components/provider/DeploymentProviderPicker.tsx @@ -1,10 +1,12 @@ import { useEffect, useMemo, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import { useSize } from "ahooks"; -import { Avatar, Card, Empty, Flex, Input, type InputRef, Tabs, Tooltip, Typography } from "antd"; +import { Avatar, Card, Checkbox, Empty, Flex, Input, type InputRef, Tabs, Tooltip, Typography } from "antd"; import Show from "@/components/Show"; import { DEPLOYMENT_CATEGORIES, type DeploymentProvider, deploymentProvidersMap } from "@/domain/provider"; +import { useZustandShallowSelector } from "@/hooks"; +import { useAccessesStore } from "@/stores/access"; import { mergeCls } from "@/utils/css"; export interface DeploymentProviderPickerProps { @@ -22,9 +24,16 @@ const DeploymentProviderPicker = ({ className, style, autoFocus, onFilter, place const { t } = useTranslation(); + const { accesses, fetchAccesses } = useAccessesStore(useZustandShallowSelector(["accesses", "fetchAccesses"])); + useEffect(() => { + fetchAccesses(false); + }, []); + const wrapperRef = useRef(null); const wrapperSize = useSize(wrapperRef); + const [isAvailableOnly, setIsAvailableOnly] = useState(true); + const [category, setCategory] = useState(DEPLOYMENT_CATEGORIES.ALL); const [keyword, setKeyword] = useState(); @@ -44,6 +53,13 @@ const DeploymentProviderPicker = ({ className, style, autoFocus, onFilter, place return true; }) + .filter((provider) => { + if (isAvailableOnly) { + return provider.builtin || accesses.some((access) => access.provider === provider.provider); + } + + return true; + }) .filter((provider) => { if (category && category !== DEPLOYMENT_CATEGORIES.ALL) { return provider.category === category; @@ -59,7 +75,7 @@ const DeploymentProviderPicker = ({ className, style, autoFocus, onFilter, place return true; }); - }, [onFilter, category, keyword]); + }, [onFilter, accesses, isAvailableOnly, category, keyword]); const providerCols = useMemo(() => { if (!wrapperSize) { return 1; @@ -77,6 +93,14 @@ const DeploymentProviderPicker = ({ className, style, autoFocus, onFilter, place
setKeyword(e.target.value.trim())} /> +
+ + setIsAvailableOnly(!isAvailableOnly)}> + {t("provider.text.show_available_hosting_provider_only")} + + +
+
- -
- } shape="square" size={28} /> -
-
+
+ } shape="square" size={28} /> +
+
+ {t(provider.name) || "\u00A0"} -
+
- +
); diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx index 76fd62bfe..8714c63d3 100644 --- a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx +++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx @@ -479,7 +479,7 @@ const EmailInput = memo( ({ disabled, placeholder, ...props }: { disabled?: boolean; placeholder?: string; value?: string; onChange?: (value: string) => void }) => { const { emails, fetchEmails, removeEmail } = useContactEmailsStore(); useEffect(() => { - fetchEmails(); + fetchEmails(false); }, []); const [value, setValue] = useControllableValue(props, { diff --git a/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx b/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx index 874d69c23..48f453f25 100644 --- a/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx +++ b/ui/src/components/workflow/node/ApplyNodeConfigForm.tsx @@ -590,7 +590,7 @@ const EmailInput = memo( ({ disabled, placeholder, ...props }: { disabled?: boolean; placeholder?: string; value?: string; onChange?: (value: string) => void }) => { const { emails, fetchEmails, removeEmail } = useContactEmailsStore(); useEffect(() => { - fetchEmails(); + fetchEmails(false); }, []); const [value, setValue] = useControllableValue(props, { diff --git a/ui/src/i18n/locales/en/nls.provider.json b/ui/src/i18n/locales/en/nls.provider.json index 86a33465d..39ba641c8 100644 --- a/ui/src/i18n/locales/en/nls.provider.json +++ b/ui/src/i18n/locales/en/nls.provider.json @@ -193,5 +193,6 @@ "provider.category.nas": "NAS", "provider.category.other": "Other", - "provider.text.default_ca_provider.label": "(Default) Follow global settings" + "provider.text.default_ca_provider": "(Default) Follow global settings", + "provider.text.show_available_hosting_provider_only": "Only display available providers (with added credentials)" } diff --git a/ui/src/i18n/locales/zh/nls.provider.json b/ui/src/i18n/locales/zh/nls.provider.json index 7838366da..d081e1304 100644 --- a/ui/src/i18n/locales/zh/nls.provider.json +++ b/ui/src/i18n/locales/zh/nls.provider.json @@ -193,5 +193,6 @@ "provider.category.nas": "NAS", "provider.category.other": "其他", - "provider.text.default_ca_provider.label": "(默认)不指定,跟随全局设置" + "provider.text.default_ca_provider": "(默认)不指定,跟随全局设置", + "provider.text.show_available_hosting_provider_only": "仅显示可用的提供商(已添加过授权凭据)" } diff --git a/ui/src/stores/access/index.ts b/ui/src/stores/access/index.ts index c51fa3bf7..2ee1bd5fc 100644 --- a/ui/src/stores/access/index.ts +++ b/ui/src/stores/access/index.ts @@ -6,7 +6,7 @@ import { list as listAccesses, remove as removeAccess, save as saveAccess } from import { type AccessesState, type AccessesStore } from "./types"; -export const useAccessesStore = create((set) => { +export const useAccessesStore = create((set, get) => { let fetcher: Promise | null = null; // 防止多次重复请求 return { @@ -14,7 +14,13 @@ export const useAccessesStore = create((set) => { loading: false, loadedAtOnce: false, - fetchAccesses: async () => { + fetchAccesses: async (refresh = true) => { + if (!refresh) { + if (get().loadedAtOnce) { + return; + } + } + fetcher ??= listAccesses().then((res) => res.items); try { diff --git a/ui/src/stores/access/types.ts b/ui/src/stores/access/types.ts index 2c987beb6..943966f64 100644 --- a/ui/src/stores/access/types.ts +++ b/ui/src/stores/access/types.ts @@ -7,7 +7,7 @@ export interface AccessesState { } export interface AccessesActions { - fetchAccesses: () => Promise; + fetchAccesses: (refresh?: boolean) => Promise; createAccess: (access: MaybeModelRecord) => Promise; updateAccess: (access: MaybeModelRecordWithId) => Promise; deleteAccess: (access: MaybeModelRecordWithId | MaybeModelRecordWithId[]) => Promise; diff --git a/ui/src/stores/contact/index.ts b/ui/src/stores/contact/index.ts index e554bfb8b..edf65687e 100644 --- a/ui/src/stores/contact/index.ts +++ b/ui/src/stores/contact/index.ts @@ -15,7 +15,13 @@ export const useContactEmailsStore = create((set, get) => { loading: false, loadedAtOnce: false, - fetchEmails: async () => { + fetchEmails: async (refresh = true) => { + if (!refresh) { + if (get().loadedAtOnce) { + return; + } + } + fetcher ??= getSettings(SETTINGS_NAMES.EMAILS); try { diff --git a/ui/src/stores/contact/types.ts b/ui/src/stores/contact/types.ts index a1ee603ce..af1e69503 100644 --- a/ui/src/stores/contact/types.ts +++ b/ui/src/stores/contact/types.ts @@ -5,7 +5,7 @@ } export interface ContactEmailsActions { - fetchEmails: () => Promise; + fetchEmails: (refresh?: boolean) => Promise; setEmails: (emails: string[]) => Promise; addEmail: (email: string) => Promise; removeEmail: (email: string) => Promise; From 5673f7fbf4837b0e9f1493ce36f81ecb305067a4 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 11 Aug 2025 22:00:11 +0800 Subject: [PATCH 04/16] feat(ui): workflow designer form validation --- .../designer/forms/BizApplyNodeConfigForm.tsx | 4 +-- ...zApplyNodeConfigFormProviderAWSRoute53.tsx | 2 +- ...izApplyNodeConfigFormProviderAliyunESA.tsx | 2 +- ...lyNodeConfigFormProviderHuaweiCloudDNS.tsx | 2 +- ...zApplyNodeConfigFormProviderJDCloudDNS.tsx | 2 +- ...lyNodeConfigFormProviderTencentCloudEO.tsx | 2 +- .../forms/BizDeployNodeConfigForm.tsx | 4 +-- ...loyNodeConfigFormProvider1PanelConsole.tsx | 2 +- ...DeployNodeConfigFormProvider1PanelSite.tsx | 2 +- .../BizDeployNodeConfigFormProviderAPISIX.tsx | 2 +- .../BizDeployNodeConfigFormProviderAWSACM.tsx | 2 +- ...loyNodeConfigFormProviderAWSCloudFront.tsx | 2 +- .../BizDeployNodeConfigFormProviderAWSIAM.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunALB.tsx | 2 +- ...eployNodeConfigFormProviderAliyunAPIGW.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunCAS.tsx | 2 +- ...yNodeConfigFormProviderAliyunCASDeploy.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunCDN.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunCLB.tsx | 2 +- ...DeployNodeConfigFormProviderAliyunDCDN.tsx | 2 +- ...DeployNodeConfigFormProviderAliyunDDoS.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunESA.tsx | 2 +- ...izDeployNodeConfigFormProviderAliyunFC.tsx | 2 +- ...izDeployNodeConfigFormProviderAliyunGA.tsx | 2 +- ...DeployNodeConfigFormProviderAliyunLive.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunNLB.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunOSS.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunVOD.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunWAF.tsx | 2 +- ...loyNodeConfigFormProviderAzureKeyVault.tsx | 2 +- ...NodeConfigFormProviderBaiduCloudAppBLB.tsx | 2 +- ...loyNodeConfigFormProviderBaiduCloudBLB.tsx | 2 +- ...loyNodeConfigFormProviderBaiduCloudCDN.tsx | 2 +- ...DeployNodeConfigFormProviderBaishanCDN.tsx | 2 +- ...odeConfigFormProviderBaotaPanelConsole.tsx | 2 +- ...oyNodeConfigFormProviderBaotaPanelSite.tsx | 2 +- ...ployNodeConfigFormProviderBaotaWAFSite.tsx | 2 +- ...izDeployNodeConfigFormProviderBunnyCDN.tsx | 2 +- ...eployNodeConfigFormProviderBytePlusCDN.tsx | 2 +- ...eployNodeConfigFormProviderCTCCCloudAO.tsx | 2 +- ...ployNodeConfigFormProviderCTCCCloudCDN.tsx | 2 +- ...ployNodeConfigFormProviderCTCCCloudELB.tsx | 2 +- ...loyNodeConfigFormProviderCTCCCloudICDN.tsx | 2 +- ...loyNodeConfigFormProviderCTCCCloudLVDN.tsx | 2 +- .../BizDeployNodeConfigFormProviderCdnfly.tsx | 2 +- ...ployNodeConfigFormProviderDogeCloudCDN.tsx | 2 +- ...odeConfigFormProviderEdgioApplications.tsx | 2 +- ...BizDeployNodeConfigFormProviderFlexCDN.tsx | 2 +- ...izDeployNodeConfigFormProviderGcoreCDN.tsx | 2 +- .../BizDeployNodeConfigFormProviderGoEdge.tsx | 2 +- ...oyNodeConfigFormProviderHuaweiCloudCDN.tsx | 2 +- ...oyNodeConfigFormProviderHuaweiCloudELB.tsx | 2 +- ...oyNodeConfigFormProviderHuaweiCloudWAF.tsx | 2 +- ...DeployNodeConfigFormProviderJDCloudALB.tsx | 2 +- ...DeployNodeConfigFormProviderJDCloudCDN.tsx | 2 +- ...eployNodeConfigFormProviderJDCloudLive.tsx | 2 +- ...DeployNodeConfigFormProviderJDCloudVOD.tsx | 2 +- .../BizDeployNodeConfigFormProviderKong.tsx | 2 +- ...NodeConfigFormProviderKubernetesSecret.tsx | 2 +- .../BizDeployNodeConfigFormProviderLeCDN.tsx | 2 +- .../BizDeployNodeConfigFormProviderLocal.tsx | 2 +- ...eployNodeConfigFormProviderNetlifySite.tsx | 2 +- ...zDeployNodeConfigFormProviderProxmoxVE.tsx | 2 +- ...izDeployNodeConfigFormProviderQiniuCDN.tsx | 2 +- ...zDeployNodeConfigFormProviderQiniuKodo.tsx | 2 +- ...zDeployNodeConfigFormProviderQiniuPili.tsx | 2 +- ...eployNodeConfigFormProviderRainYunRCDN.tsx | 2 +- ...ployNodeConfigFormProviderRatPanelSite.tsx | 2 +- .../BizDeployNodeConfigFormProviderSSH.tsx | 2 +- ...izDeployNodeConfigFormProviderSafeLine.tsx | 2 +- ...yNodeConfigFormProviderTencentCloudCDN.tsx | 2 +- ...yNodeConfigFormProviderTencentCloudCLB.tsx | 2 +- ...yNodeConfigFormProviderTencentCloudCOS.tsx | 2 +- ...yNodeConfigFormProviderTencentCloudCSS.tsx | 2 +- ...NodeConfigFormProviderTencentCloudECDN.tsx | 2 +- ...oyNodeConfigFormProviderTencentCloudEO.tsx | 2 +- ...NodeConfigFormProviderTencentCloudGAAP.tsx | 2 +- ...yNodeConfigFormProviderTencentCloudSCF.tsx | 2 +- ...yNodeConfigFormProviderTencentCloudSSL.tsx | 2 +- ...onfigFormProviderTencentCloudSSLDeploy.tsx | 2 +- ...onfigFormProviderTencentCloudSSLUpdate.tsx | 2 +- ...yNodeConfigFormProviderTencentCloudVOD.tsx | 2 +- ...yNodeConfigFormProviderTencentCloudWAF.tsx | 2 +- ...DeployNodeConfigFormProviderUCloudUCDN.tsx | 2 +- ...zDeployNodeConfigFormProviderUCloudUS3.tsx | 2 +- ...yNodeConfigFormProviderUniCloudWebHost.tsx | 2 +- ...izDeployNodeConfigFormProviderUpyunCDN.tsx | 2 +- ...zDeployNodeConfigFormProviderUpyunFile.tsx | 2 +- ...loyNodeConfigFormProviderVolcEngineALB.tsx | 2 +- ...loyNodeConfigFormProviderVolcEngineCDN.tsx | 2 +- ...loyNodeConfigFormProviderVolcEngineCLB.tsx | 2 +- ...ConfigFormProviderVolcEngineCertCenter.tsx | 2 +- ...oyNodeConfigFormProviderVolcEngineDCDN.tsx | 2 +- ...NodeConfigFormProviderVolcEngineImageX.tsx | 2 +- ...oyNodeConfigFormProviderVolcEngineLive.tsx | 2 +- ...loyNodeConfigFormProviderVolcEngineTOS.tsx | 2 +- ...zDeployNodeConfigFormProviderWangsuCDN.tsx | 2 +- ...ployNodeConfigFormProviderWangsuCDNPro.tsx | 2 +- ...odeConfigFormProviderWangsuCertificate.tsx | 2 +- ...BizDeployNodeConfigFormProviderWebhook.tsx | 2 +- .../forms/BizMonitorNodeConfigForm.tsx | 4 +-- .../forms/BizNotifyNodeConfigForm.tsx | 4 +-- ...NotifyNodeConfigFormProviderDiscordBot.tsx | 2 +- .../BizNotifyNodeConfigFormProviderEmail.tsx | 2 +- ...NotifyNodeConfigFormProviderMattermost.tsx | 2 +- ...izNotifyNodeConfigFormProviderSlackBot.tsx | 2 +- ...otifyNodeConfigFormProviderTelegramBot.tsx | 2 +- ...BizNotifyNodeConfigFormProviderWebhook.tsx | 2 +- .../forms/BizUploadNodeConfigForm.tsx | 4 +-- .../forms/BranchBlockNodeConfigForm.tsx | 4 +-- .../designer/forms/StartNodeConfigForm.tsx | 4 +-- .../designer/nodes/BizApplyNodeRegistry.tsx | 32 +++---------------- .../designer/nodes/BizDeployNodeRegistry.tsx | 16 +++------- .../designer/nodes/BizMonitorNodeRegistry.tsx | 8 +++-- .../designer/nodes/BizNotifyNodeRegistry.tsx | 32 +++---------------- .../designer/nodes/BizUploadNodeRegistry.tsx | 16 +++------- .../workflow/designer/nodes/ConditionNode.tsx | 15 ++++++++- .../workflow/designer/nodes/StartNode.tsx | 16 +++------- 118 files changed, 162 insertions(+), 209 deletions(-) diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx index 8714c63d3..2e1289d63 100644 --- a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx +++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx @@ -550,7 +550,7 @@ const EmailInput = memo( } ); -const getAnchorItems = ({ i18n = getI18n() }: { i18n: ReturnType }): Required["items"] => { +const getAnchorItems = ({ i18n = getI18n() }: { i18n?: ReturnType }): Required["items"] => { const { t } = i18n; return ["parameters", "certificate", "advanced", "strategy"].map((key) => ({ @@ -569,7 +569,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderAWSRoute53.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderAWSRoute53.tsx index 82861bfef..a55a80c3c 100644 --- a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderAWSRoute53.tsx +++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderAWSRoute53.tsx @@ -47,7 +47,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderAliyunESA.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderAliyunESA.tsx index 3a1e0fb0d..87b4eae32 100644 --- a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderAliyunESA.tsx +++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderAliyunESA.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderHuaweiCloudDNS.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderHuaweiCloudDNS.tsx index 5dc69bd0f..a00f8565d 100644 --- a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderHuaweiCloudDNS.tsx +++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderHuaweiCloudDNS.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderJDCloudDNS.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderJDCloudDNS.tsx index 9214a719f..b0a310abf 100644 --- a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderJDCloudDNS.tsx +++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderJDCloudDNS.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderTencentCloudEO.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderTencentCloudEO.tsx index adbcf0a10..0eca6763c 100644 --- a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderTencentCloudEO.tsx +++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigFormProviderTencentCloudEO.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigForm.tsx index 4727d93c8..dfb22bcdf 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigForm.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigForm.tsx @@ -525,7 +525,7 @@ const BizDeployNodeConfigForm = ({ node, ...props }: BizDeployNodeConfigFormProp ); }; -const getAnchorItems = ({ i18n = getI18n() }: { i18n: ReturnType }): Required["items"] => { +const getAnchorItems = ({ i18n = getI18n() }: { i18n?: ReturnType }): Required["items"] => { const { t } = i18n; return ["parameters", "deployment", "strategy"].map((key) => ({ @@ -543,7 +543,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProvider1PanelConsole.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProvider1PanelConsole.tsx index f6beda7f1..7e04d8bf2 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProvider1PanelConsole.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProvider1PanelConsole.tsx @@ -35,7 +35,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t: _ } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProvider1PanelSite.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProvider1PanelSite.tsx index 9da507ff8..8254227af 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProvider1PanelSite.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProvider1PanelSite.tsx @@ -84,7 +84,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAPISIX.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAPISIX.tsx index c3c13af2b..199c057a9 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAPISIX.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAPISIX.tsx @@ -58,7 +58,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSACM.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSACM.tsx index 9d4d873f5..58f1220a4 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSACM.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSACM.tsx @@ -46,7 +46,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSCloudFront.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSCloudFront.tsx index dc811ae16..8a50fe4c6 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSCloudFront.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSCloudFront.tsx @@ -62,7 +62,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSIAM.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSIAM.tsx index a6c563c38..217d2ce46 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSIAM.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAWSIAM.tsx @@ -47,7 +47,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunALB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunALB.tsx index 8dbaa5792..d079c9097 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunALB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunALB.tsx @@ -98,7 +98,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunAPIGW.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunAPIGW.tsx index d087d3043..b038bcc88 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunAPIGW.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunAPIGW.tsx @@ -95,7 +95,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCAS.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCAS.tsx index 02e8ddda6..91dccef8d 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCAS.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCAS.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCASDeploy.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCASDeploy.tsx index 2849cc0d5..56a6d6ef4 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCASDeploy.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCASDeploy.tsx @@ -77,7 +77,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCDN.tsx index 10b9f30e4..ba4c19aed 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCLB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCLB.tsx index a0c2d2e9f..0cf2b1fcc 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCLB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunCLB.tsx @@ -98,7 +98,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunDCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunDCDN.tsx index bfda3a0f1..98093efdc 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunDCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunDCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunDDoS.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunDDoS.tsx index c883469af..abff96501 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunDDoS.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunDDoS.tsx @@ -49,7 +49,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunESA.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunESA.tsx index 0abfa1cd1..52bc48eff 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunESA.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunESA.tsx @@ -47,7 +47,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunFC.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunFC.tsx index 3b0a988eb..307811f9c 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunFC.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunFC.tsx @@ -66,7 +66,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunGA.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunGA.tsx index 0871b6ad6..0418bda52 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunGA.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunGA.tsx @@ -86,7 +86,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunLive.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunLive.tsx index be87144e5..b81eb76cd 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunLive.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunLive.tsx @@ -49,7 +49,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunNLB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunNLB.tsx index b4c489701..b33a282b6 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunNLB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunNLB.tsx @@ -85,7 +85,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunOSS.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunOSS.tsx index 1a65f7b28..f370cbd46 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunOSS.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunOSS.tsx @@ -60,7 +60,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunVOD.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunVOD.tsx index 852e6ad27..3c3a232f8 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunVOD.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunVOD.tsx @@ -49,7 +49,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunWAF.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunWAF.tsx index 2df02aa8c..ee0e9a5e5 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunWAF.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAliyunWAF.tsx @@ -73,7 +73,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAzureKeyVault.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAzureKeyVault.tsx index 95ca108dc..d7b27baff 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAzureKeyVault.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderAzureKeyVault.tsx @@ -46,7 +46,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudAppBLB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudAppBLB.tsx index 03d487e7a..8ecfda043 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudAppBLB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudAppBLB.tsx @@ -98,7 +98,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudBLB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudBLB.tsx index fd60509b2..999e260b1 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudBLB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudBLB.tsx @@ -98,7 +98,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudCDN.tsx index 305b9b5d4..0e95de8d2 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaiduCloudCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaishanCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaishanCDN.tsx index 01102bc04..de64d1d7d 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaishanCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaishanCDN.tsx @@ -48,7 +48,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaPanelConsole.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaPanelConsole.tsx index 97f2f5265..2a098ac60 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaPanelConsole.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaPanelConsole.tsx @@ -35,7 +35,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t: _ } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaPanelSite.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaPanelSite.tsx index 4b6775209..dce155e5a 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaPanelSite.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaPanelSite.tsx @@ -83,7 +83,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaWAFSite.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaWAFSite.tsx index b52d82219..5cc8b0d15 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaWAFSite.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBaotaWAFSite.tsx @@ -48,7 +48,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBunnyCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBunnyCDN.tsx index 2e5ac8ed2..29277abb6 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBunnyCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBunnyCDN.tsx @@ -48,7 +48,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBytePlusCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBytePlusCDN.tsx index c81870afa..569929fa1 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBytePlusCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderBytePlusCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudAO.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudAO.tsx index 375a2f9cd..98b3ae3dd 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudAO.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudAO.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudCDN.tsx index f68e927ac..d914834d9 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudELB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudELB.tsx index 7e541d8db..b65e8a3a6 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudELB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudELB.tsx @@ -85,7 +85,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudICDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudICDN.tsx index bfc3a470c..03a1dc190 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudICDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudICDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudLVDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudLVDN.tsx index 34221b73f..08ecb0f92 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudLVDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCTCCCloudLVDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCdnfly.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCdnfly.tsx index acf2d7b4c..8f69b9dbb 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCdnfly.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderCdnfly.tsx @@ -74,7 +74,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderDogeCloudCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderDogeCloudCDN.tsx index 35d840c2e..0b21bcac5 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderDogeCloudCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderDogeCloudCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderEdgioApplications.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderEdgioApplications.tsx index f98ab9282..abbeaf345 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderEdgioApplications.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderEdgioApplications.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderFlexCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderFlexCDN.tsx index eea2c9993..167a2b844 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderFlexCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderFlexCDN.tsx @@ -58,7 +58,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderGcoreCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderGcoreCDN.tsx index 406729874..3f3bb5a5c 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderGcoreCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderGcoreCDN.tsx @@ -46,7 +46,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderGoEdge.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderGoEdge.tsx index 16c99e6f8..057c2241c 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderGoEdge.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderGoEdge.tsx @@ -58,7 +58,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudCDN.tsx index a3cc76177..ce809e9c0 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudCDN.tsx @@ -49,7 +49,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudELB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudELB.tsx index d58e22184..72647f536 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudELB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudELB.tsx @@ -101,7 +101,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudWAF.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudWAF.tsx index 59a4d32ff..ee1a993fa 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudWAF.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderHuaweiCloudWAF.tsx @@ -89,7 +89,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudALB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudALB.tsx index e4fd9062c..a34b02ded 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudALB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudALB.tsx @@ -98,7 +98,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudCDN.tsx index d517064c6..27de540f7 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudLive.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudLive.tsx index aaf64461a..d1e12f8d4 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudLive.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudLive.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudVOD.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudVOD.tsx index d916cbcb9..8154790eb 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudVOD.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderJDCloudVOD.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderKong.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderKong.tsx index 36f38ef28..f2d01ca31 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderKong.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderKong.tsx @@ -68,7 +68,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderKubernetesSecret.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderKubernetesSecret.tsx index b49c23ea6..a7dc610cd 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderKubernetesSecret.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderKubernetesSecret.tsx @@ -79,7 +79,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderLeCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderLeCDN.tsx index da92ba8dc..17819ee19 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderLeCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderLeCDN.tsx @@ -68,7 +68,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderLocal.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderLocal.tsx index 5c68abee4..baaec2ad7 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderLocal.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderLocal.tsx @@ -424,7 +424,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderNetlifySite.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderNetlifySite.tsx index a8afec0da..6f34bd212 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderNetlifySite.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderNetlifySite.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderProxmoxVE.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderProxmoxVE.tsx index 2c51e8ab1..c797953c6 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderProxmoxVE.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderProxmoxVE.tsx @@ -45,7 +45,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuCDN.tsx index f017bd730..97d94456f 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuKodo.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuKodo.tsx index 0ddb553bb..7a302efa9 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuKodo.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuKodo.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuPili.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuPili.tsx index 634e5c984..28f75cb08 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuPili.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderQiniuPili.tsx @@ -49,7 +49,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderRainYunRCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderRainYunRCDN.tsx index a4296f8ea..7ffda6632 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderRainYunRCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderRainYunRCDN.tsx @@ -49,7 +49,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderRatPanelSite.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderRatPanelSite.tsx index 68690f7c3..9b7864c82 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderRatPanelSite.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderRatPanelSite.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderSSH.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderSSH.tsx index ae22ac1e6..674774a33 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderSSH.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderSSH.tsx @@ -463,7 +463,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderSafeLine.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderSafeLine.tsx index ea40626a7..20562dedc 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderSafeLine.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderSafeLine.tsx @@ -58,7 +58,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCDN.tsx index 2ab258c62..df1f05274 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCDN.tsx @@ -48,7 +48,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCLB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCLB.tsx index a6a6f4537..64759e25a 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCLB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCLB.tsx @@ -131,7 +131,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCOS.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCOS.tsx index f011a7eb9..8dd31bb6c 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCOS.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCOS.tsx @@ -60,7 +60,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCSS.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCSS.tsx index 4b9e4f013..06069b23d 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCSS.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudCSS.tsx @@ -48,7 +48,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudECDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudECDN.tsx index aeb4d8ead..516231fd6 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudECDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudECDN.tsx @@ -48,7 +48,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudEO.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudEO.tsx index 3d3fa845f..88de8fe35 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudEO.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudEO.tsx @@ -67,7 +67,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudGAAP.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudGAAP.tsx index 343b956d9..fae72c29c 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudGAAP.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudGAAP.tsx @@ -78,7 +78,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSCF.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSCF.tsx index f7f2e54b6..91cb9007d 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSCF.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSCF.tsx @@ -59,7 +59,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSL.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSL.tsx index 33211d3be..aa5a990b4 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSL.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSL.tsx @@ -34,7 +34,7 @@ const getInitialValues = (): Nullish>> => { return {}; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t: _ } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSLDeploy.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSLDeploy.tsx index 151fea4bf..72ab63d36 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSLDeploy.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSLDeploy.tsx @@ -86,7 +86,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSLUpdate.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSLUpdate.tsx index 28ba33443..5a6a492c5 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSLUpdate.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudSSLUpdate.tsx @@ -97,7 +97,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudVOD.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudVOD.tsx index 72ec0ea13..8cab2b71c 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudVOD.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudVOD.tsx @@ -58,7 +58,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudWAF.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudWAF.tsx index 5b1b219b5..e26b5b795 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudWAF.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderTencentCloudWAF.tsx @@ -81,7 +81,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUCloudUCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUCloudUCDN.tsx index 01a3711ea..44471c43f 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUCloudUCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUCloudUCDN.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUCloudUS3.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUCloudUS3.tsx index 2b4e83fd8..33d87b546 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUCloudUS3.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUCloudUS3.tsx @@ -60,7 +60,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUniCloudWebHost.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUniCloudWebHost.tsx index e5d89b5da..8f6f1b821 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUniCloudWebHost.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUniCloudWebHost.tsx @@ -68,7 +68,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUpyunCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUpyunCDN.tsx index 93a023a3b..8ab2ae9aa 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUpyunCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUpyunCDN.tsx @@ -42,7 +42,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUpyunFile.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUpyunFile.tsx index f5431a489..e3249cabc 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUpyunFile.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderUpyunFile.tsx @@ -42,7 +42,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineALB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineALB.tsx index 164c73e91..78fd31c50 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineALB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineALB.tsx @@ -98,7 +98,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCDN.tsx index 465822b96..c463a0560 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCLB.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCLB.tsx index f38b4d8c2..c19c4e6a2 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCLB.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCLB.tsx @@ -85,7 +85,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCertCenter.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCertCenter.tsx index 2f1297134..3741275cf 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCertCenter.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineCertCenter.tsx @@ -35,7 +35,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineDCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineDCDN.tsx index 565dee33a..a13ce96a3 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineDCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineDCDN.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineImageX.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineImageX.tsx index 4ba361774..3361d988d 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineImageX.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineImageX.tsx @@ -60,7 +60,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineLive.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineLive.tsx index 0ddd3903c..25a6127de 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineLive.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineLive.tsx @@ -38,7 +38,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineTOS.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineTOS.tsx index 8b6a6f10a..a8d338edb 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineTOS.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderVolcEngineTOS.tsx @@ -60,7 +60,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCDN.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCDN.tsx index 1360c5ccd..d33071a68 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCDN.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCDN.tsx @@ -47,7 +47,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCDNPro.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCDNPro.tsx index b5b2579cd..d85e7251c 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCDNPro.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCDNPro.tsx @@ -78,7 +78,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCertificate.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCertificate.tsx index 7d58eea64..610c603ba 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCertificate.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWangsuCertificate.tsx @@ -34,7 +34,7 @@ const getInitialValues = (): Nullish>> => { return {}; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t: _ } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWebhook.tsx b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWebhook.tsx index b4290c8a7..d8c8bc0a3 100644 --- a/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWebhook.tsx +++ b/ui/src/components/workflow/designer/forms/BizDeployNodeConfigFormProviderWebhook.tsx @@ -58,7 +58,7 @@ const getInitialValues = (): Nullish>> => { return {}; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizMonitorNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizMonitorNodeConfigForm.tsx index 0ac7f0b3d..34c35e7b8 100644 --- a/ui/src/components/workflow/designer/forms/BizMonitorNodeConfigForm.tsx +++ b/ui/src/components/workflow/designer/forms/BizMonitorNodeConfigForm.tsx @@ -72,7 +72,7 @@ const BizMonitorNodeConfigForm = ({ node, ...props }: BizMonitorNodeConfigFormPr ); }; -const getAnchorItems = ({ i18n = getI18n() }: { i18n: ReturnType }): Required["items"] => { +const getAnchorItems = ({ i18n = getI18n() }: { i18n?: ReturnType }): Required["items"] => { const { t } = i18n; return ["parameters"].map((key) => ({ @@ -86,7 +86,7 @@ const getInitialValues = (): Nullish>> => { return defaultNodeConfigForMonitor(); }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigForm.tsx index 888b441fd..ec95be90d 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigForm.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigForm.tsx @@ -206,7 +206,7 @@ const BizNotifyNodeConfigForm = ({ node, ...props }: BizNotifyNodeConfigFormProp ); }; -const getAnchorItems = ({ i18n = getI18n() }: { i18n: ReturnType }): Required["items"] => { +const getAnchorItems = ({ i18n = getI18n() }: { i18n?: ReturnType }): Required["items"] => { const { t } = i18n; return ["parameters", "strategy"].map((key) => ({ @@ -226,7 +226,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderDiscordBot.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderDiscordBot.tsx index 83bc2caec..c4fff3007 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderDiscordBot.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderDiscordBot.tsx @@ -34,7 +34,7 @@ const getInitialValues = (): Nullish>> => { return {}; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t: _ } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderEmail.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderEmail.tsx index de878e595..d8ff94f33 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderEmail.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderEmail.tsx @@ -36,7 +36,7 @@ const getInitialValues = (): Nullish>> => { return {}; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderMattermost.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderMattermost.tsx index 53e8692d2..efbf47411 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderMattermost.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderMattermost.tsx @@ -34,7 +34,7 @@ const getInitialValues = (): Nullish>> => { return {}; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t: _ } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderSlackBot.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderSlackBot.tsx index 761b11c67..4506518fa 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderSlackBot.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderSlackBot.tsx @@ -34,7 +34,7 @@ const getInitialValues = (): Nullish>> => { return {}; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t: _ } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderTelegramBot.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderTelegramBot.tsx index 1d4a5996a..081e24628 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderTelegramBot.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderTelegramBot.tsx @@ -34,7 +34,7 @@ const getInitialValues = (): Nullish>> => { return {}; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderWebhook.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderWebhook.tsx index cccf3cff5..f2d3cb835 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderWebhook.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderWebhook.tsx @@ -59,7 +59,7 @@ const getInitialValues = (): Nullish>> => { return {}; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BizUploadNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizUploadNodeConfigForm.tsx index 1d9bf1522..05a387029 100644 --- a/ui/src/components/workflow/designer/forms/BizUploadNodeConfigForm.tsx +++ b/ui/src/components/workflow/designer/forms/BizUploadNodeConfigForm.tsx @@ -115,7 +115,7 @@ const BizUploadNodeConfigForm = ({ node, ...props }: BizUploadNodeConfigFormProp ); }; -const getAnchorItems = ({ i18n = getI18n() }: { i18n: ReturnType }): Required["items"] => { +const getAnchorItems = ({ i18n = getI18n() }: { i18n?: ReturnType }): Required["items"] => { const { t } = i18n; return ["parameters"].map((key) => ({ @@ -133,7 +133,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigForm.tsx index b915388c6..e9d7557f2 100644 --- a/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigForm.tsx +++ b/ui/src/components/workflow/designer/forms/BranchBlockNodeConfigForm.tsx @@ -64,7 +64,7 @@ const BranchBlockNodeConfigForm = ({ node, ...props }: BranchBlockNodeConfigForm ); }; -const getAnchorItems = ({ i18n = getI18n() }: { i18n: ReturnType }): Required["items"] => { +const getAnchorItems = ({ i18n = getI18n() }: { i18n?: ReturnType }): Required["items"] => { const { t } = i18n; return ["parameters"].map((key) => ({ @@ -78,7 +78,7 @@ const getInitialValues = (): Nullish>> => { return defaultNodeConfigForCondition(); }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t: _ } = i18n; return z.object({ diff --git a/ui/src/components/workflow/designer/forms/StartNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/StartNodeConfigForm.tsx index 163768b3b..9c458ca8e 100644 --- a/ui/src/components/workflow/designer/forms/StartNodeConfigForm.tsx +++ b/ui/src/components/workflow/designer/forms/StartNodeConfigForm.tsx @@ -112,7 +112,7 @@ const StartNodeConfigForm = ({ node, ...props }: StartNodeConfigFormProps) => { ); }; -const getAnchorItems = ({ i18n = getI18n() }: { i18n: ReturnType }): Required["items"] => { +const getAnchorItems = ({ i18n = getI18n() }: { i18n?: ReturnType }): Required["items"] => { const { t } = i18n; return ["parameters"].map((key) => ({ @@ -129,7 +129,7 @@ const getInitialValues = (): Nullish>> => { }; }; -const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType }) => { +const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType }) => { const { t } = i18n; return z diff --git a/ui/src/components/workflow/designer/nodes/BizApplyNodeRegistry.tsx b/ui/src/components/workflow/designer/nodes/BizApplyNodeRegistry.tsx index de3b99d99..35e6647ca 100644 --- a/ui/src/components/workflow/designer/nodes/BizApplyNodeRegistry.tsx +++ b/ui/src/components/workflow/designer/nodes/BizApplyNodeRegistry.tsx @@ -8,6 +8,7 @@ import { acmeDns01ProvidersMap } from "@/domain/provider"; import { BaseNode } from "./_shared"; import { type NodeRegistry, NodeType } from "./typings"; +import BizApplyNodeConfigForm from "../forms/BizApplyNodeConfigForm"; export const BizApplyNodeRegistry: NodeRegistry = { type: NodeType.BizApply, @@ -25,34 +26,11 @@ export const BizApplyNodeRegistry: NodeRegistry = { formMeta: { validate: { - ["config.domains"]: ({ value }) => { - if (!value) { + ["config"]: ({ value }) => { + const res = BizApplyNodeConfigForm.getSchema({}).safeParse(value); + if (!res.success) { return { - message: "required", - level: FeedbackLevel.Error, - }; - } - }, - ["config.contactEmail"]: ({ value }) => { - if (!value) { - return { - message: "required", - level: FeedbackLevel.Error, - }; - } - }, - ["config.provider"]: ({ value }) => { - if (!value) { - return { - message: "required", - level: FeedbackLevel.Error, - }; - } - }, - ["config.providerAccessId"]: ({ value }) => { - if (!value) { - return { - message: "required", + message: res.error.message, level: FeedbackLevel.Error, }; } diff --git a/ui/src/components/workflow/designer/nodes/BizDeployNodeRegistry.tsx b/ui/src/components/workflow/designer/nodes/BizDeployNodeRegistry.tsx index d48c6192f..51e386f2b 100644 --- a/ui/src/components/workflow/designer/nodes/BizDeployNodeRegistry.tsx +++ b/ui/src/components/workflow/designer/nodes/BizDeployNodeRegistry.tsx @@ -8,6 +8,7 @@ import { deploymentProvidersMap } from "@/domain/provider"; import { BaseNode } from "./_shared"; import { type NodeRegistry, NodeType } from "./typings"; +import BizDeployNodeConfigForm from "../forms/BizDeployNodeConfigForm"; export const BizDeployNodeRegistry: NodeRegistry = { type: NodeType.BizDeploy, @@ -25,18 +26,11 @@ export const BizDeployNodeRegistry: NodeRegistry = { formMeta: { validate: { - ["config.provider"]: ({ value }) => { - if (!value) { + ["config"]: ({ value }) => { + const res = BizDeployNodeConfigForm.getSchema({}).safeParse(value); + if (!res.success) { return { - message: "required", - level: FeedbackLevel.Error, - }; - } - }, - ["config.providerAccessId"]: ({ value }) => { - if (!value) { - return { - message: "required", + message: res.error.message, level: FeedbackLevel.Error, }; } diff --git a/ui/src/components/workflow/designer/nodes/BizMonitorNodeRegistry.tsx b/ui/src/components/workflow/designer/nodes/BizMonitorNodeRegistry.tsx index 80a6851b3..accfd39dc 100644 --- a/ui/src/components/workflow/designer/nodes/BizMonitorNodeRegistry.tsx +++ b/ui/src/components/workflow/designer/nodes/BizMonitorNodeRegistry.tsx @@ -5,6 +5,7 @@ import { nanoid } from "nanoid"; import { BaseNode } from "./_shared"; import { type NodeRegistry, NodeType } from "./typings"; +import BizMonitorNodeConfigForm from "../forms/BizMonitorNodeConfigForm"; export const BizMonitorNodeRegistry: NodeRegistry = { type: NodeType.BizMonitor, @@ -22,10 +23,11 @@ export const BizMonitorNodeRegistry: NodeRegistry = { formMeta: { validate: { - ["config.host"]: ({ value }) => { - if (!value) { + ["config"]: ({ value }) => { + const res = BizMonitorNodeConfigForm.getSchema({}).safeParse(value); + if (!res.success) { return { - message: "required", + message: res.error.message, level: FeedbackLevel.Error, }; } diff --git a/ui/src/components/workflow/designer/nodes/BizNotifyNodeRegistry.tsx b/ui/src/components/workflow/designer/nodes/BizNotifyNodeRegistry.tsx index 4cd245d69..e5fa23790 100644 --- a/ui/src/components/workflow/designer/nodes/BizNotifyNodeRegistry.tsx +++ b/ui/src/components/workflow/designer/nodes/BizNotifyNodeRegistry.tsx @@ -8,6 +8,7 @@ import { notificationProvidersMap } from "@/domain/provider"; import { BaseNode } from "./_shared"; import { type NodeRegistry, NodeType } from "./typings"; +import BizNotifyNodeConfigForm from "../forms/BizNotifyNodeConfigForm"; export const BizNotifyNodeRegistry: NodeRegistry = { type: NodeType.BizNotify, @@ -25,34 +26,11 @@ export const BizNotifyNodeRegistry: NodeRegistry = { formMeta: { validate: { - ["config.subject"]: ({ value }) => { - if (!value) { + ["config"]: ({ value }) => { + const res = BizNotifyNodeConfigForm.getSchema({}).safeParse(value); + if (!res.success) { return { - message: "required", - level: FeedbackLevel.Error, - }; - } - }, - ["config.message"]: ({ value }) => { - if (!value) { - return { - message: "required", - level: FeedbackLevel.Error, - }; - } - }, - ["config.provider"]: ({ value }) => { - if (!value) { - return { - message: "required", - level: FeedbackLevel.Error, - }; - } - }, - ["config.providerAccessId"]: ({ value }) => { - if (!value) { - return { - message: "required", + message: res.error.message, level: FeedbackLevel.Error, }; } diff --git a/ui/src/components/workflow/designer/nodes/BizUploadNodeRegistry.tsx b/ui/src/components/workflow/designer/nodes/BizUploadNodeRegistry.tsx index 2a7b7d1e2..17b42f383 100644 --- a/ui/src/components/workflow/designer/nodes/BizUploadNodeRegistry.tsx +++ b/ui/src/components/workflow/designer/nodes/BizUploadNodeRegistry.tsx @@ -5,6 +5,7 @@ import { nanoid } from "nanoid"; import { BaseNode } from "./_shared"; import { type NodeRegistry, NodeType } from "./typings"; +import BizUploadNodeConfigForm from "../forms/BizUploadNodeConfigForm"; export const BizUploadNodeRegistry: NodeRegistry = { type: NodeType.BizUpload, @@ -22,18 +23,11 @@ export const BizUploadNodeRegistry: NodeRegistry = { formMeta: { validate: { - ["config.certificate"]: ({ value }) => { - if (!value) { + ["config"]: ({ value }) => { + const res = BizUploadNodeConfigForm.getSchema({}).safeParse(value); + if (!res.success) { return { - message: "required", - level: FeedbackLevel.Error, - }; - } - }, - ["config.privateKey"]: ({ value }) => { - if (!value) { - return { - message: "required", + message: res.error.message, level: FeedbackLevel.Error, }; } diff --git a/ui/src/components/workflow/designer/nodes/ConditionNode.tsx b/ui/src/components/workflow/designer/nodes/ConditionNode.tsx index 1f306e3c2..78f3f6102 100644 --- a/ui/src/components/workflow/designer/nodes/ConditionNode.tsx +++ b/ui/src/components/workflow/designer/nodes/ConditionNode.tsx @@ -1,5 +1,5 @@ import { getI18n } from "react-i18next"; -import { Field, FlowNodeBaseType, FlowNodeSplitType } from "@flowgram.ai/fixed-layout-editor"; +import { FeedbackLevel, Field, FlowNodeBaseType, FlowNodeSplitType } from "@flowgram.ai/fixed-layout-editor"; import { IconFilter, IconFilterFilled, IconSitemap } from "@tabler/icons-react"; import { Typography } from "antd"; import { nanoid } from "nanoid"; @@ -8,6 +8,7 @@ import { type Expr, ExprType } from "@/domain/workflow"; import { BaseNode, BranchNode } from "./_shared"; import { type NodeRegistry, NodeType } from "./typings"; +import BranchBlockNodeConfigForm from "../forms/BranchBlockNodeConfigForm"; export const ConditionNodeRegistry: NodeRegistry = { type: NodeType.Condition, @@ -83,6 +84,18 @@ export const BranchBlockNodeRegistry: NodeRegistry = { }, formMeta: { + validate: { + ["config"]: ({ value }) => { + const res = BranchBlockNodeConfigForm.getSchema({}).safeParse(value); + if (!res.success) { + return { + message: res.error.message, + level: FeedbackLevel.Error, + }; + } + }, + }, + render: () => { const { t } = getI18n(); diff --git a/ui/src/components/workflow/designer/nodes/StartNode.tsx b/ui/src/components/workflow/designer/nodes/StartNode.tsx index 6dbb4a980..2b879dc09 100644 --- a/ui/src/components/workflow/designer/nodes/StartNode.tsx +++ b/ui/src/components/workflow/designer/nodes/StartNode.tsx @@ -6,6 +6,7 @@ import { WORKFLOW_TRIGGERS } from "@/domain/workflow"; import { BaseNode } from "./_shared"; import { type NodeRegistry, NodeType } from "./typings"; +import StartNodeConfigForm from "../forms/StartNodeConfigForm"; export const StartNodeRegistry: NodeRegistry = { type: NodeType.Start, @@ -31,18 +32,11 @@ export const StartNodeRegistry: NodeRegistry = { formMeta: { validate: { - ["config.trigger"]: ({ value }) => { - if (!value) { + ["config"]: ({ value }) => { + const res = StartNodeConfigForm.getSchema({}).safeParse(value); + if (!res.success) { return { - message: "required", - level: FeedbackLevel.Error, - }; - } - }, - ["config.triggerCron"]: ({ value, formValues }) => { - if (!value && formValues.config.trigger === WORKFLOW_TRIGGERS.SCHEDULED) { - return { - message: "required", + message: res.error.message, level: FeedbackLevel.Error, }; } From 96b187e040715492a2d18ea60b0317738103fa7d Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Tue, 12 Aug 2025 10:04:32 +0800 Subject: [PATCH 05/16] feat(ui): workflow nodes adder grouping --- .../workflow/designer/components/Adder.tsx | 56 +++++++++++++------ .../designer/forms/BizApplyNodeConfigForm.tsx | 4 +- .../designer/nodes/BizApplyNodeRegistry.tsx | 3 +- .../designer/nodes/BizDeployNodeRegistry.tsx | 3 +- .../designer/nodes/BizMonitorNodeRegistry.tsx | 3 +- .../designer/nodes/BizNotifyNodeRegistry.tsx | 3 +- .../designer/nodes/BizUploadNodeRegistry.tsx | 3 +- .../workflow/designer/nodes/ConditionNode.tsx | 4 +- .../workflow/designer/nodes/EndNode.tsx | 3 +- .../workflow/designer/nodes/StartNode.tsx | 3 +- .../workflow/designer/nodes/TryCatchNode.tsx | 4 +- .../workflow/designer/nodes/_shared.tsx | 33 ++++++++++- .../workflow/designer/nodes/index.ts | 2 +- .../workflow/designer/nodes/typings.ts | 7 +++ .../i18n/locales/en/nls.workflow.nodes.json | 25 +++++---- ui/src/i18n/locales/zh/nls.provider.json | 2 +- .../i18n/locales/zh/nls.workflow.nodes.json | 21 ++++--- 17 files changed, 125 insertions(+), 54 deletions(-) diff --git a/ui/src/components/workflow/designer/components/Adder.tsx b/ui/src/components/workflow/designer/components/Adder.tsx index ecb840e87..03273d7c8 100644 --- a/ui/src/components/workflow/designer/components/Adder.tsx +++ b/ui/src/components/workflow/designer/components/Adder.tsx @@ -1,13 +1,16 @@ +import { useTranslation } from "react-i18next"; import { type AdderProps as FlowgramAdderProps, useClientContext } from "@flowgram.ai/fixed-layout-editor"; import { IconPlus } from "@tabler/icons-react"; -import { Button, Dropdown } from "antd"; +import { Button, Dropdown, type MenuProps } from "antd"; import { getFlowNodeRegistries } from "../nodes"; export interface AdderProps extends FlowgramAdderProps {} const Adder = ({ from, hoverActivated }: AdderProps) => { + const { t } = useTranslation(); + const ctx = useClientContext(); const { operation, playground } = ctx; @@ -24,25 +27,42 @@ const Adder = ({ from, hoverActivated }: AdderProps) => { } return true; }) - .map((registry) => { - const Icon = registry.meta?.icon; + .reduce( + (acc, registry) => { + let group = acc.find((item) => item!.key === registry.kindType); + if (!group) { + group = { + key: registry.kindType, + type: "group", + label: registry.kindType ? t(`workflow_node.kind.${registry.kindType}`) : null, + children: [], + }; + acc.push(group); + } - return { - key: registry.type, - label: registry.meta?.labelText ?? registry.type, - icon: {Icon && }, - onClick: () => { - const block = operation.addFromNode(from, registry.onAdd!(ctx, from)); + if (group.type === "group") { + const NodeIcon = registry.meta?.icon; + group.children!.push({ + key: registry.type, + label: registry.meta?.labelText ?? registry.type, + icon: {NodeIcon && }, + onClick: () => { + const block = operation.addFromNode(from, registry.onAdd!(ctx, from)); - setTimeout(() => { - playground.scrollToView({ - bounds: block.bounds, - scrollToCenter: true, - }); - }, 1); - }, - }; - }); + setTimeout(() => { + playground.scrollToView({ + bounds: block.bounds, + scrollToCenter: true, + }); + }, 1); + }, + }); + } + + return acc; + }, + [] as Required["items"] + ); return playground.config.readonlyOrDisabled ? null : (
diff --git a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx index 2e1289d63..7b2298716 100644 --- a/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx +++ b/ui/src/components/workflow/designer/forms/BizApplyNodeConfigForm.tsx @@ -171,7 +171,7 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps) rules={[formRule]} tooltip={} > - +
@@ -150,7 +170,7 @@ const ConsoleLayout = () => { ); }; -const SiderMenu = memo(({ onSelect }: { onSelect?: (key: string) => void }) => { +const SiderMenu = memo(({ collapsed, onSelect }: { collapsed?: boolean; onSelect?: (key: string) => void }) => { const location = useLocation(); const navigate = useNavigate(); @@ -210,14 +230,19 @@ const SiderMenu = memo(({ onSelect }: { onSelect?: (key: string) => void }) => { return ( <> -
- - Certimate - +
+
+ + + Certimate + + +
{ const triggerEl = useTriggerElement(trigger, { onClick: () => setSiderOpen(true) }); + const handleMenuSelect = useCallback(() => { + setSiderOpen(false); + }, []); + return ( <> {triggerEl} @@ -252,7 +281,7 @@ const SiderMenuDrawer = memo(({ trigger }: { trigger: React.ReactNode }) => { }} onClose={() => setSiderOpen(false)} > - setSiderOpen(false)} /> + ); From 25d88bc6ab1d531d4537fd8e3512a4903d3b994f Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Tue, 12 Aug 2025 11:47:25 +0800 Subject: [PATCH 07/16] feat(ui): version checker fallback --- ui/src/components/AppVersion.tsx | 4 +- ui/src/domain/app.ts | 2 +- ui/src/hooks/useVersionChecker.ts | 78 +++++++++++++++++++++++++------ 3 files changed, 68 insertions(+), 16 deletions(-) diff --git a/ui/src/components/AppVersion.tsx b/ui/src/components/AppVersion.tsx index dbde4e39c..23f1252b0 100644 --- a/ui/src/components/AppVersion.tsx +++ b/ui/src/components/AppVersion.tsx @@ -25,7 +25,7 @@ export interface AppVersionBadgeProps { } const AppVersionBadge = ({ className, style, children }: AppVersionBadgeProps) => { - const { hasNewVersion } = useVersionChecker(); + const { hasUpdate } = useVersionChecker(); return ( {children} diff --git a/ui/src/domain/app.ts b/ui/src/domain/app.ts index 58c7cd9b3..bc7f58e27 100644 --- a/ui/src/domain/app.ts +++ b/ui/src/domain/app.ts @@ -5,4 +5,4 @@ export const APP_DOWNLOAD_URL = APP_REPO_URL + "/releases"; export const APP_DOCUMENT_URL = "https://docs.certimate.me"; // fallback policy: .env > git tag > "v0.0.0-dev" -export const APP_VERSION = import.meta.env.VITE_APP_VERSION || __APP_VERSION__ || "v0.0.0-dev"; +export const APP_VERSION: string = import.meta.env.VITE_APP_VERSION || __APP_VERSION__ || "v0.0.0-dev"; diff --git a/ui/src/hooks/useVersionChecker.ts b/ui/src/hooks/useVersionChecker.ts index 3c6f1cf24..f9c3b66c5 100644 --- a/ui/src/hooks/useVersionChecker.ts +++ b/ui/src/hooks/useVersionChecker.ts @@ -1,10 +1,11 @@ -import { useRequest } from "ahooks"; +import { useEffect, useState } from "react"; +import { useRequest } from "ahooks"; import { APP_VERSION } from "@/domain/app"; export type UseVersionCheckerReturns = { - hasNewVersion: boolean; - checkNewVersion: () => void; + hasUpdate: boolean; + checkUpdate: () => Promise; }; const extractSemver = (vers: string) => { @@ -31,39 +32,90 @@ const compareVersions = (a: string, b: string) => { return 0; }; +const LOCAL_STORAGE_KEY = "certimate-ui-newver"; + /** * 获取版本检查器。 * @returns {UseVersionCheckerReturns} */ const useVersionChecker = () => { - const { data, refresh } = useRequest( - async () => { - const releases = await fetch("https://api.github.com/repos/certimate-go/certimate/releases") - .then((res) => res.json()) - .then((res) => Array.from(res)); + const [hasUpdate, setHasUpdate] = useState(() => { + const newver = localStorage.getItem(LOCAL_STORAGE_KEY)!; + if (newver) { + return compareVersions(newver, APP_VERSION) === 1; + } - const cIdx = releases.findIndex((e: any) => e.name === APP_VERSION); + return false; + }); + + const { refresh, cancel } = useRequest( + async () => { + type ReleaseInfo = { + id: number; + name: string; + body: string; + prerelease: boolean; + }; + + let releases: ReleaseInfo[] = []; + try { + // try to fetch from GitHub + releases = await fetch("https://api.github.com/repos/certimate-go/certimate/releases").then((res) => { + if (res.ok) { + return res.json().then((res) => Array.from(res) as ReleaseInfo[]); + } else { + throw new Error("Failed to check update from GitHub"); + } + }); + } catch { + // fallback to fetch from Gitee + releases = await fetch("https://gitee.com/api/v5/repos/certimate-go/certimate/releases").then((res) => { + if (res.ok) { + return res.json().then((res) => Array.from(res) as ReleaseInfo[]); + } else { + throw new Error("Failed to check update from GitHub"); + } + }); + } + + const cIdx = releases.findIndex((e) => e.name === APP_VERSION); if (cIdx === 0) { return false; } - const nIdx = releases.findIndex((e: any) => compareVersions(e.name, APP_VERSION) !== -1); + const nIdx = releases.findIndex((e) => compareVersions(e.name, APP_VERSION) !== -1); if (cIdx !== -1 && cIdx <= nIdx) { return false; } + if (releases[nIdx]) { + localStorage.setItem(LOCAL_STORAGE_KEY, releases[nIdx].name); + } else { + localStorage.removeItem(LOCAL_STORAGE_KEY); + } + return !!releases[nIdx]; }, { pollingInterval: 6 * 60 * 60 * 1000, - refreshOnWindowFocus: true, focusTimespan: 15 * 60 * 1000, + throttleWait: 60 * 1000, + manual: true, + onSuccess: (res) => { + setHasUpdate(res); + }, } ); + useEffect(() => { + refresh(); + + return () => cancel(); + }, []); + return { - hasNewVersion: !!data, - checkNewVersion: refresh, + hasUpdate: hasUpdate, + checkUpdate: refresh, }; }; From 71861a58ee285320768c32f8f9aff70b1242e741 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Tue, 12 Aug 2025 16:49:24 +0800 Subject: [PATCH 08/16] chore(ui): improve i18n --- ui/src/components/Tips.tsx | 2 +- ui/src/components/access/AccessForm.tsx | 13 +- .../access/AccessFormDiscordBotConfig.tsx | 1 + .../access/AccessFormEmailConfig.tsx | 8 +- .../access/AccessFormMattermostConfig.tsx | 1 + .../access/AccessFormSlackBotConfig.tsx | 1 + .../access/AccessFormTelegramBotConfig.tsx | 1 + .../access/AccessFormWebhookConfig.tsx | 16 +- .../designer/forms/BizApplyNodeConfigForm.tsx | 8 +- ...DeployNodeConfigFormProvider1PanelSite.tsx | 1 + .../BizDeployNodeConfigFormProviderAWSACM.tsx | 2 +- ...zDeployNodeConfigFormProviderAliyunALB.tsx | 1 + ...yNodeConfigFormProviderAliyunCASDeploy.tsx | 39 +-- ...zDeployNodeConfigFormProviderAliyunCLB.tsx | 1 + ...izDeployNodeConfigFormProviderAliyunGA.tsx | 1 + ...zDeployNodeConfigFormProviderAliyunWAF.tsx | 1 + ...loyNodeConfigFormProviderAzureKeyVault.tsx | 2 +- ...NodeConfigFormProviderBaiduCloudAppBLB.tsx | 1 + ...loyNodeConfigFormProviderBaiduCloudBLB.tsx | 1 + ...DeployNodeConfigFormProviderBaishanCDN.tsx | 1 + ...oyNodeConfigFormProviderBaotaPanelSite.tsx | 1 + ...izDeployNodeConfigFormProviderGcoreCDN.tsx | 1 + ...DeployNodeConfigFormProviderJDCloudALB.tsx | 1 + .../BizDeployNodeConfigFormProviderLocal.tsx | 13 +- .../BizDeployNodeConfigFormProviderSSH.tsx | 8 +- ...yNodeConfigFormProviderTencentCloudCLB.tsx | 1 + ...oyNodeConfigFormProviderTencentCloudEO.tsx | 1 + ...onfigFormProviderTencentCloudSSLDeploy.tsx | 40 +-- ...onfigFormProviderTencentCloudSSLUpdate.tsx | 49 ++-- ...yNodeConfigFormProviderUniCloudWebHost.tsx | 5 +- ...izDeployNodeConfigFormProviderUpyunCDN.tsx | 5 +- ...zDeployNodeConfigFormProviderUpyunFile.tsx | 5 +- ...loyNodeConfigFormProviderVolcEngineALB.tsx | 1 + ...zDeployNodeConfigFormProviderWangsuCDN.tsx | 1 + ...ployNodeConfigFormProviderWangsuCDNPro.tsx | 1 + ...odeConfigFormProviderWangsuCertificate.tsx | 1 + ...BizDeployNodeConfigFormProviderWebhook.tsx | 7 +- .../forms/BizMonitorNodeConfigForm.tsx | 2 +- ...NotifyNodeConfigFormProviderDiscordBot.tsx | 2 +- .../BizNotifyNodeConfigFormProviderEmail.tsx | 2 +- ...NotifyNodeConfigFormProviderMattermost.tsx | 2 +- ...izNotifyNodeConfigFormProviderSlackBot.tsx | 2 +- ...otifyNodeConfigFormProviderTelegramBot.tsx | 2 +- ...BizNotifyNodeConfigFormProviderWebhook.tsx | 2 +- .../workflow/node/ApplyNodeConfigForm.tsx | 2 +- .../node/DeployNodeConfigFormAWSACMConfig.tsx | 2 +- ...loyNodeConfigFormAliyunCASDeployConfig.tsx | 40 +-- ...eployNodeConfigFormAzureKeyVaultConfig.tsx | 2 +- .../node/DeployNodeConfigFormLocalConfig.tsx | 8 +- .../node/DeployNodeConfigFormSSHConfig.tsx | 8 +- ...eConfigFormTencentCloudSSLDeployConfig.tsx | 42 +-- ...eConfigFormTencentCloudSSLUpdateConfig.tsx | 50 ++-- .../DeployNodeConfigFormWebhookConfig.tsx | 2 +- .../NotifyNodeConfigFormDiscordBotConfig.tsx | 2 +- .../node/NotifyNodeConfigFormEmailConfig.tsx | 2 +- .../NotifyNodeConfigFormMattermostConfig.tsx | 2 +- .../NotifyNodeConfigFormSlackBotConfig.tsx | 2 +- .../NotifyNodeConfigFormTelegramBotConfig.tsx | 2 +- .../NotifyNodeConfigFormWebhookConfig.tsx | 2 +- ui/src/i18n/locales/en/nls.access.json | 28 +- ui/src/i18n/locales/en/nls.provider.json | 8 +- .../i18n/locales/en/nls.workflow.nodes.json | 192 ++++++++------ ui/src/i18n/locales/zh/nls.access.json | 28 +- ui/src/i18n/locales/zh/nls.provider.json | 10 +- .../i18n/locales/zh/nls.workflow.nodes.json | 242 ++++++++++-------- 65 files changed, 512 insertions(+), 421 deletions(-) diff --git a/ui/src/components/Tips.tsx b/ui/src/components/Tips.tsx index 84aa210a8..09e4b61cb 100644 --- a/ui/src/components/Tips.tsx +++ b/ui/src/components/Tips.tsx @@ -17,7 +17,7 @@ const Tips = ({ className, style, message }: TipsProps) => { message={
- +
{message}
diff --git a/ui/src/components/access/AccessForm.tsx b/ui/src/components/access/AccessForm.tsx index dff1f0693..8ce53863f 100644 --- a/ui/src/components/access/AccessForm.tsx +++ b/ui/src/components/access/AccessForm.tsx @@ -139,12 +139,6 @@ const AccessForm = forwardRef(({ className, console.warn(`[certimate] unsupported provider usage: '${usage}'`); } }, [usage]); - const providerTooltip = useMemo(() => { - switch (usage) { - case "dns-hosting": - return ; - } - }, [usage]); const fieldProvider = Form.useWatch["provider"]>("provider", formInst); const [fieldProviderPicked, setFieldProviderPicked] = useState(initialValues?.provider); // bugfix: Form.useWatch 在条件渲染下不生效,这里用单独的变量存放 Picker 组件选择的值 @@ -378,7 +372,12 @@ const AccessForm = forwardRef(({ className, - + : null} + rules={[formRule]} + > } > diff --git a/ui/src/components/access/AccessFormEmailConfig.tsx b/ui/src/components/access/AccessFormEmailConfig.tsx index 6b5df5514..629748dcf 100644 --- a/ui/src/components/access/AccessFormEmailConfig.tsx +++ b/ui/src/components/access/AccessFormEmailConfig.tsx @@ -1,4 +1,5 @@ import { useTranslation } from "react-i18next"; +import { QuestionCircleOutlined as IconQuestionCircleOutlined } from "@ant-design/icons"; import { Form, type FormInstance, Input, InputNumber, Switch } from "antd"; import { createSchemaFieldRule } from "antd-zod"; import { z } from "zod"; @@ -117,7 +118,12 @@ const AccessFormEmailConfig = ({ form: formInst, formName, disabled, initialValu - + diff --git a/ui/src/components/access/AccessFormMattermostConfig.tsx b/ui/src/components/access/AccessFormMattermostConfig.tsx index c42a328ec..881b43b40 100644 --- a/ui/src/components/access/AccessFormMattermostConfig.tsx +++ b/ui/src/components/access/AccessFormMattermostConfig.tsx @@ -67,6 +67,7 @@ const AccessFormMattermostConfig = ({ form: formInst, formName, disabled, initia } > diff --git a/ui/src/components/access/AccessFormSlackBotConfig.tsx b/ui/src/components/access/AccessFormSlackBotConfig.tsx index a95cba421..1de93876a 100644 --- a/ui/src/components/access/AccessFormSlackBotConfig.tsx +++ b/ui/src/components/access/AccessFormSlackBotConfig.tsx @@ -58,6 +58,7 @@ const AccessFormSlackBotConfig = ({ form: formInst, formName, disabled, initialV } > diff --git a/ui/src/components/access/AccessFormTelegramBotConfig.tsx b/ui/src/components/access/AccessFormTelegramBotConfig.tsx index 3649863ca..34ea894f8 100644 --- a/ui/src/components/access/AccessFormTelegramBotConfig.tsx +++ b/ui/src/components/access/AccessFormTelegramBotConfig.tsx @@ -65,6 +65,7 @@ const AccessFormTelegramBotConfig = ({ form: formInst, formName, disabled, initi } > diff --git a/ui/src/components/access/AccessFormWebhookConfig.tsx b/ui/src/components/access/AccessFormWebhookConfig.tsx index c952e8f0e..d3d5dc4da 100644 --- a/ui/src/components/access/AccessFormWebhookConfig.tsx +++ b/ui/src/components/access/AccessFormWebhookConfig.tsx @@ -309,7 +309,7 @@ const AccessFormWebhookConfig = ({ form: formInst, formName, disabled, initialVa - + - } /> + } /> @@ -340,7 +340,7 @@ const AccessFormWebhookConfig = ({ form: formInst, formName, disabled, initialVa diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderMattermost.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderMattermost.tsx index efbf47411..89f442778 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderMattermost.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderMattermost.tsx @@ -21,8 +21,8 @@ const BizNotifyNodeConfigFormProviderMattermost = () => { name={[parentNamePath, "channelId"]} initialValue={initialValues.channelId} label={t("workflow_node.notify.form.mattermost_channel_id.label")} + extra={t("workflow_node.notify.form.mattermost_channel_id.help")} rules={[formRule]} - tooltip={} > diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderSlackBot.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderSlackBot.tsx index 4506518fa..286d5c40a 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderSlackBot.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderSlackBot.tsx @@ -21,8 +21,8 @@ const BizNotifyNodeConfigFormProviderSlackBot = () => { name={[parentNamePath, "channelId"]} initialValue={initialValues.channelId} label={t("workflow_node.notify.form.slackbot_channel_id.label")} + extra={t("workflow_node.notify.form.slackbot_channel_id.help")} rules={[formRule]} - tooltip={} > diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderTelegramBot.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderTelegramBot.tsx index 081e24628..c085e79ed 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderTelegramBot.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderTelegramBot.tsx @@ -21,8 +21,8 @@ const BizNotifyNodeConfigFormProviderTelegramBot = () => { name={[parentNamePath, "chatId"]} initialValue={initialValues.chatId} label={t("workflow_node.notify.form.telegrambot_chat_id.label")} + extra={t("workflow_node.notify.form.telegrambot_chat_id.help")} rules={[formRule]} - tooltip={} > diff --git a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderWebhook.tsx b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderWebhook.tsx index f2d3cb835..15dbc25ef 100644 --- a/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderWebhook.tsx +++ b/ui/src/components/workflow/designer/forms/BizNotifyNodeConfigFormProviderWebhook.tsx @@ -35,8 +35,8 @@ const BizNotifyNodeConfigFormProviderWebhook = () => { name={[parentNamePath, "webhookData"]} initialValue={initialValues.webhookData} label={t("workflow_node.notify.form.webhook_data.label")} + extra={t("workflow_node.notify.form.webhook_data.help")} rules={[formRule]} - tooltip={} > } + tooltip={} > } + tooltip={} > diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormAliyunCASDeployConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormAliyunCASDeployConfig.tsx index 3e24e9d3e..4e619a7d4 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigFormAliyunCASDeployConfig.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigFormAliyunCASDeployConfig.tsx @@ -36,23 +36,23 @@ const DeployNodeConfigFormAliyunCASDeployConfig = ({ const formSchema = z.object({ region: z - .string(t("workflow_node.deploy.form.aliyun_cas_deploy_region.placeholder")) - .nonempty(t("workflow_node.deploy.form.aliyun_cas_deploy_region.placeholder")), - resourceIds: z.string(t("workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.placeholder")).refine((v) => { + .string(t("workflow_node.deploy.form.aliyun_casdeploy_region.placeholder")) + .nonempty(t("workflow_node.deploy.form.aliyun_casdeploy_region.placeholder")), + resourceIds: z.string(t("workflow_node.deploy.form.aliyun_casdeploy_resource_ids.placeholder")).refine((v) => { if (!v) return false; return String(v) .split(MULTIPLE_INPUT_SEPARATOR) .every((e) => /^[1-9]\d*$/.test(e)); - }, t("workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.errmsg.invalid")), + }, t("workflow_node.deploy.form.aliyun_casdeploy_resource_ids.errmsg.invalid")), contactIds: z - .string(t("workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.placeholder")) + .string(t("workflow_node.deploy.form.aliyun_casdeploy_contact_ids.placeholder")) .nullish() .refine((v) => { if (!v) return true; return String(v) .split(MULTIPLE_INPUT_SEPARATOR) .every((e) => /^[1-9]\d*$/.test(e)); - }, t("workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.errmsg.invalid")), + }, t("workflow_node.deploy.form.aliyun_casdeploy_contact_ids.errmsg.invalid")), }); const formRule = createSchemaFieldRule(formSchema); @@ -70,42 +70,42 @@ const DeployNodeConfigFormAliyunCASDeployConfig = ({ onValuesChange={handleFormChange} > - } /> + } /> } + tooltip={} > - + } + tooltip={} > } + tooltip={} > diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormAzureKeyVaultConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormAzureKeyVaultConfig.tsx index 4944604fe..eb884eca0 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigFormAzureKeyVaultConfig.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigFormAzureKeyVaultConfig.tsx @@ -69,7 +69,7 @@ const DeployNodeConfigFormAzureKeyVaultConfig = ({ name="certificateName" label={t("workflow_node.deploy.form.azure_keyvault_certificate_name.label")} rules={[formRule]} - tooltip={} + tooltip={} > diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormLocalConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormLocalConfig.tsx index 4d8b17f76..fc2fe9f5f 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigFormLocalConfig.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigFormLocalConfig.tsx @@ -320,7 +320,7 @@ const DeployNodeConfigFormLocalConfig = ({ form: formInst, formName, disabled, i rules={[formRule]} tooltip={} > - + @@ -328,7 +328,7 @@ const DeployNodeConfigFormLocalConfig = ({ form: formInst, formName, disabled, i name="keyPath" label={t("workflow_node.deploy.form.local_key_path.label")} rules={[formRule]} - tooltip={} + tooltip={} > @@ -337,7 +337,7 @@ const DeployNodeConfigFormLocalConfig = ({ form: formInst, formName, disabled, i name="certPathForServerOnly" label={t("workflow_node.deploy.form.local_servercert_path.label")} rules={[formRule]} - tooltip={} + tooltip={} > @@ -346,7 +346,7 @@ const DeployNodeConfigFormLocalConfig = ({ form: formInst, formName, disabled, i name="certPathForIntermediaOnly" label={t("workflow_node.deploy.form.local_intermediacert_path.label")} rules={[formRule]} - tooltip={} + tooltip={} > diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormSSHConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormSSHConfig.tsx index 8280a29bf..4d2de8dc3 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigFormSSHConfig.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigFormSSHConfig.tsx @@ -359,7 +359,7 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini name="certPath" label={t("workflow_node.deploy.form.ssh_cert_path.label")} rules={[formRule]} - tooltip={} + tooltip={} > @@ -369,7 +369,7 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini name="keyPath" label={t("workflow_node.deploy.form.ssh_key_path.label")} rules={[formRule]} - tooltip={} + tooltip={} > @@ -378,7 +378,7 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini name="certPathForServerOnly" label={t("workflow_node.deploy.form.ssh_servercert_path.label")} rules={[formRule]} - tooltip={} + tooltip={} > @@ -387,7 +387,7 @@ const DeployNodeConfigFormSSHConfig = ({ form: formInst, formName, disabled, ini name="certPathForIntermediaOnly" label={t("workflow_node.deploy.form.ssh_intermediacert_path.label")} rules={[formRule]} - tooltip={} + tooltip={} > diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormTencentCloudSSLDeployConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormTencentCloudSSLDeployConfig.tsx index 1b80a0bb6..0e5bcc925 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigFormTencentCloudSSLDeployConfig.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigFormTencentCloudSSLDeployConfig.tsx @@ -38,17 +38,17 @@ const DeployNodeConfigFormTencentCloudSSLDeployConfig = ({ const formSchema = z.object({ endpoint: z.string().nullish(), region: z - .string(t("workflow_node.deploy.form.tencentcloud_ssl_deploy_region.placeholder")) - .nonempty(t("workflow_node.deploy.form.tencentcloud_ssl_deploy_region.placeholder")), + .string(t("workflow_node.deploy.form.tencentcloud_ssldeploy_region.placeholder")) + .nonempty(t("workflow_node.deploy.form.tencentcloud_ssldeploy_region.placeholder")), resourceType: z - .string(t("workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_type.placeholder")) - .nonempty(t("workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_type.placeholder")), - resourceIds: z.string(t("workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.placeholder")).refine((v) => { + .string(t("workflow_node.deploy.form.tencentcloud_ssldeploy_resource_type.placeholder")) + .nonempty(t("workflow_node.deploy.form.tencentcloud_ssldeploy_resource_type.placeholder")), + resourceIds: z.string(t("workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.placeholder")).refine((v) => { if (!v) return false; return String(v) .split(MULTIPLE_INPUT_SEPARATOR) .every((e) => /^[A-Za-z0-9*._\-|]+$/.test(e)); - }, t("workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.errmsg.invalid")), + }, t("workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.errmsg.invalid")), }); const formRule = createSchemaFieldRule(formSchema); @@ -66,50 +66,50 @@ const DeployNodeConfigFormTencentCloudSSLDeployConfig = ({ onValuesChange={handleFormChange} > - } /> + } /> } + tooltip={} > - + } + tooltip={} > - + } + tooltip={} > ({ value }))} - placeholder={t("workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_type.placeholder")} + placeholder={t("workflow_node.deploy.form.tencentcloud_ssldeploy_resource_type.placeholder")} filterOption={(inputValue, option) => option!.value.toLowerCase().includes(inputValue.toLowerCase())} /> } + tooltip={} > diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormTencentCloudSSLUpdateConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormTencentCloudSSLUpdateConfig.tsx index f45e70559..98d994b8d 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigFormTencentCloudSSLUpdateConfig.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigFormTencentCloudSSLUpdateConfig.tsx @@ -39,23 +39,23 @@ const DeployNodeConfigFormTencentCloudSSLUpdateConfig = ({ const formSchema = z.object({ endpoint: z.string().nullish(), certificateId: z - .string(t("workflow_node.deploy.form.tencentcloud_ssl_update_certificate_id.placeholder")) - .nonempty(t("workflow_node.deploy.form.tencentcloud_ssl_update_certificate_id.placeholder")), - resourceTypes: z.string(t("workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.placeholder")).refine((v) => { + .string(t("workflow_node.deploy.form.tencentcloud_sslupdate_certificate_id.placeholder")) + .nonempty(t("workflow_node.deploy.form.tencentcloud_sslupdate_certificate_id.placeholder")), + resourceTypes: z.string(t("workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.placeholder")).refine((v) => { if (!v) return false; return String(v) .split(MULTIPLE_INPUT_SEPARATOR) .every((e) => !!e.trim()); - }, t("workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.placeholder")), + }, t("workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.placeholder")), resourceRegions: z - .string(t("workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.placeholder")) + .string(t("workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.placeholder")) .nullish() .refine((v) => { if (!v) return true; return String(v) .split(MULTIPLE_INPUT_SEPARATOR) .every((e) => !!e.trim()); - }, t("workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.placeholder")), + }, t("workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.placeholder")), isReplaced: z.boolean().nullish(), }); const formRule = createSchemaFieldRule(formSchema); @@ -74,60 +74,60 @@ const DeployNodeConfigFormTencentCloudSSLUpdateConfig = ({ onValuesChange={handleFormChange} > - } /> + } /> } + tooltip={} > - + } + tooltip={} > - + } + tooltip={} > } + tooltip={} > } + tooltip={} > diff --git a/ui/src/components/workflow/node/DeployNodeConfigFormWebhookConfig.tsx b/ui/src/components/workflow/node/DeployNodeConfigFormWebhookConfig.tsx index 61a37bcc0..68d1c26a9 100644 --- a/ui/src/components/workflow/node/DeployNodeConfigFormWebhookConfig.tsx +++ b/ui/src/components/workflow/node/DeployNodeConfigFormWebhookConfig.tsx @@ -68,7 +68,7 @@ const DeployNodeConfigFormWebhookConfig = ({ form: formInst, formName, disabled, name="webhookData" label={t("workflow_node.deploy.form.webhook_data.label")} rules={[formRule]} - tooltip={} + tooltip={} > } + tooltip={} > diff --git a/ui/src/components/workflow/node/NotifyNodeConfigFormEmailConfig.tsx b/ui/src/components/workflow/node/NotifyNodeConfigFormEmailConfig.tsx index 72649f465..0fb941aea 100644 --- a/ui/src/components/workflow/node/NotifyNodeConfigFormEmailConfig.tsx +++ b/ui/src/components/workflow/node/NotifyNodeConfigFormEmailConfig.tsx @@ -52,7 +52,7 @@ const NotifyNodeConfigFormEmailConfig = ({ form: formInst, formName, disabled, i name="receiverAddress" label={t("workflow_node.notify.form.email_receiver_address.label")} rules={[formRule]} - tooltip={} + tooltip={} > diff --git a/ui/src/components/workflow/node/NotifyNodeConfigFormMattermostConfig.tsx b/ui/src/components/workflow/node/NotifyNodeConfigFormMattermostConfig.tsx index c77659122..c20e1fca1 100644 --- a/ui/src/components/workflow/node/NotifyNodeConfigFormMattermostConfig.tsx +++ b/ui/src/components/workflow/node/NotifyNodeConfigFormMattermostConfig.tsx @@ -50,7 +50,7 @@ const NotifyNodeConfigFormMattermostConfig = ({ name="channelId" label={t("workflow_node.notify.form.mattermost_channel_id.label")} rules={[formRule]} - tooltip={} + tooltip={} > diff --git a/ui/src/components/workflow/node/NotifyNodeConfigFormSlackBotConfig.tsx b/ui/src/components/workflow/node/NotifyNodeConfigFormSlackBotConfig.tsx index 0b18d72c4..8df075b3f 100644 --- a/ui/src/components/workflow/node/NotifyNodeConfigFormSlackBotConfig.tsx +++ b/ui/src/components/workflow/node/NotifyNodeConfigFormSlackBotConfig.tsx @@ -44,7 +44,7 @@ const NotifyNodeConfigFormSlackBotConfig = ({ form: formInst, formName, disabled name="channelId" label={t("workflow_node.notify.form.slackbot_channel_id.label")} rules={[formRule]} - tooltip={} + tooltip={} > diff --git a/ui/src/components/workflow/node/NotifyNodeConfigFormTelegramBotConfig.tsx b/ui/src/components/workflow/node/NotifyNodeConfigFormTelegramBotConfig.tsx index 27850d51f..d254e5962 100644 --- a/ui/src/components/workflow/node/NotifyNodeConfigFormTelegramBotConfig.tsx +++ b/ui/src/components/workflow/node/NotifyNodeConfigFormTelegramBotConfig.tsx @@ -61,7 +61,7 @@ const NotifyNodeConfigFormTelegramBotConfig = ({ name="chatId" label={t("workflow_node.notify.form.telegrambot_chat_id.label")} rules={[formRule]} - tooltip={} + tooltip={} > diff --git a/ui/src/components/workflow/node/NotifyNodeConfigFormWebhookConfig.tsx b/ui/src/components/workflow/node/NotifyNodeConfigFormWebhookConfig.tsx index 9297864aa..634f93939 100644 --- a/ui/src/components/workflow/node/NotifyNodeConfigFormWebhookConfig.tsx +++ b/ui/src/components/workflow/node/NotifyNodeConfigFormWebhookConfig.tsx @@ -68,7 +68,7 @@ const NotifyNodeConfigFormWebhookConfig = ({ form: formInst, formName, disabled, name="webhookData" label={t("workflow_node.notify.form.webhook_data.label")} rules={[formRule]} - tooltip={} + tooltip={} > Hosting provider: The provider that hosts your servers or cloud services for deploying certificates.", + "access.form.provider.help": "DNS provider: The provider that hosts your domain names and manages your DNS records.
Hosting provider: The provider that hosts your servers or cloud services for deploying certificates.", "access.form.provider.search.placeholder": "Search provider ...", "access.form.1panel_server_url.label": "1Panel server URL", "access.form.1panel_server_url.placeholder": "Please enter 1Panel server URL", @@ -187,7 +187,8 @@ "access.form.discordbot_token.placeholder": "Please enter Discord bot token", "access.form.discordbot_token.tooltip": "For more information, see https://docs.discordbotstudio.org/setting-up-dbs/finding-your-bot-token", "access.form.discordbot_channel_id.label": "Discord channel ID (Optional)", - "access.form.discordbot_channel_id.placeholder": "Please enter the default Discord channel ID (can be overrided in the workflows)", + "access.form.discordbot_channel_id.placeholder": "Please enter the default Discord channel ID", + "access.form.discordbot_channel_id.help": "Notes: It can be overrided in the workflows.", "access.form.discordbot_channel_id.tooltip": "For more information, see https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID", "access.form.dnsla_api_id.label": "DNS.LA API ID", "access.form.dnsla_api_id.placeholder": "Please enter DNS.LA API ID", @@ -227,7 +228,8 @@ "access.form.email_sender_name.label": "Sender display name (Optional)", "access.form.email_sender_name.placeholder": "Please enter sender display name", "access.form.email_receiver_address.label": "Receiver email address (Optional)", - "access.form.email_receiver_address.placeholder": "Please enter the default receiver email address (can be overrided in the workflows)", + "access.form.email_receiver_address.placeholder": "Please enter the default receiver email address", + "access.form.email_receiver_address.help": "Notes: It can be overrided in the workflows.", "access.form.flexcdn_server_url.label": "FlexCDN server URL", "access.form.flexcdn_server_url.placeholder": "Please enter FlexCDN server URL", "access.form.flexcdn_api_role.label": "FlexCDN user role", @@ -321,7 +323,8 @@ "access.form.mattermost_password.label": "Mattermost password", "access.form.mattermost_password.placeholder": "Please enter Mattermost password", "access.form.mattermost_channel_id.label": "Mattermost channel ID (Optional)", - "access.form.mattermost_channel_id.placeholder": "Please enter the default Mattermost channel ID (can be overrided in the workflows)", + "access.form.mattermost_channel_id.placeholder": "Please enter the default Mattermost channel ID", + "access.form.mattermost_channel_id.help": "Notes: It can be overrided in the workflows.", "access.form.mattermost_channel_id.tooltip": "How to get it? Select the target channel from the left sidebar, click on the channel name at the top, and choose ”Channel Details.” You can directly see the channel ID on the pop-up page.", "access.form.namecheap_username.label": "Namecheap username", "access.form.namecheap_username.placeholder": "Please enter Namecheap username", @@ -398,7 +401,8 @@ "access.form.slackbot_token.placeholder": "Please enter Slack bot token", "access.form.slackbot_token.tooltip": "For more information, see https://docs.slack.dev/authentication/tokens#bot", "access.form.slackbot_channel_id.label": "Slack channel ID (Optional)", - "access.form.slackbot_channel_id.placeholder": "Please enter the default Slack channel ID (can be overrided in the workflows)", + "access.form.slackbot_channel_id.placeholder": "Please enter the default Slack channel ID", + "access.form.slackbot_channel_id.help": "Notes: It can be overrided in the workflows.", "access.form.slackbot_channel_id.tooltip": "How to get it? Please refer to https://www.youtube.com/watch?v=Uz5Yi5C2pwQ", "access.form.spaceship_api_key.label": "Spaceship API key", "access.form.spaceship_api_key.placeholder": "Please enter Spaceship API key", @@ -437,7 +441,8 @@ "access.form.telegrambot_token.placeholder": "Please enter Telegram bot token", "access.form.telegrambot_token.tooltip": "How to get it? Please refer to https://gist.github.com/nafiesl/4ad622f344cd1dc3bb1ecbe468ff9f8a", "access.form.telegrambot_chat_id.label": "Telegram chat ID (Optional)", - "access.form.telegrambot_chat_id.placeholder": "Please enter the default Telegram chat ID (can be overrided in the workflows)", + "access.form.telegrambot_chat_id.placeholder": "Please enter the default Telegram chat ID", + "access.form.telegrambot_chat_id.help": "Notes: It can be overrided in the workflows.", "access.form.telegrambot_chat_id.tooltip": "How to get it? Please refer to https://gist.github.com/nafiesl/4ad622f344cd1dc3bb1ecbe468ff9f8a", "access.form.tencentcloud_secret_id.label": "Tencent Cloud SecretId", "access.form.tencentcloud_secret_id.placeholder": "Please enter Tencent Cloud SecretId", @@ -494,12 +499,11 @@ "access.form.webhook_headers.errmsg.invalid": "Please enter a valid request headers", "access.form.webhook_headers.tooltip": "Example:
Content-Type: application/json
User-Agent: certimate
", "access.form.webhook_data.errmsg.json_invalid": "Please enter a valiod JSON string", - "access.form.webhook_data_for_deployment.label": "Webhook data for deployment (Optional)", - "access.form.webhook_data_for_deployment.placeholder": "Please enter the default Webhook data (can be overrided in the workflows)", - "access.form.webhook_data_for_deployment.guide": "The Webhook data should be in JSON format.

The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables:
  1. ${DOMAIN}: The primary domain of the certificate (CommonName).
  2. ${DOMAINS}: The domain list of the certificate (SubjectAltNames).
  3. ${CERTIFICATE}: The PEM format content of the certificate file.
  4. ${SERVER_CERTIFICATE}: The PEM format content of the server certificate file.
  5. ${INTERMEDIA_CERTIFICATE}: The PEM format content of the intermediate CA certificate file.
  6. ${PRIVATE_KEY}: The PEM format content of the private key file.

When the request method is GET, the data will be passed as query string. Otherwise, the data will be encoded in the format indicated by the Content-Type in the request headers. Supported formats:
  1. application/json (default).
  2. application/x-www-form-urlencoded: Nested data is not supported.
  3. multipart/form-data: Nested data is not supported.
  4. ", - "access.form.webhook_data_for_notification.label": "Webhook data for notification (Optional)", - "access.form.webhook_data_for_notification.placeholder": "Please enter the default Webhook data (can be overrided in the workflows)", - "access.form.webhook_data_for_notification.guide": "The Webhook data should be in JSON format.

    The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables:
    1. ${SUBJECT}: The subject of notification.
    2. ${MESSAGE}: The message of notification.

    When the request method is GET, the data will be passed as query string. Otherwise, the data will be encoded in the format indicated by the Content-Type in the request headers. Supported formats:
    1. application/json (default).
    2. application/x-www-form-urlencoded: Nested data is not supported.
    3. multipart/form-data: Nested data is not supported.
    4. ", + "access.form.webhook_data.label": "Webhook data (Optional)", + "access.form.webhook_data.placeholder": "Please enter the default Webhook data", + "access.form.webhook_data.help": "Notes: It can be overrided in the workflows.", + "access.form.webhook_data.guide_for_deployment": "The Webhook data should be in JSON format.

      The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables:
      1. ${DOMAIN}: The primary domain of the certificate (CommonName).
      2. ${DOMAINS}: The domain list of the certificate (SubjectAltNames).
      3. ${CERTIFICATE}: The PEM format content of the certificate file.
      4. ${SERVER_CERTIFICATE}: The PEM format content of the server certificate file.
      5. ${INTERMEDIA_CERTIFICATE}: The PEM format content of the intermediate CA certificate file.
      6. ${PRIVATE_KEY}: The PEM format content of the private key file.

      When the request method is GET, the data will be passed as query string. Otherwise, the data will be encoded in the format indicated by the Content-Type in the request headers. Supported formats:
      1. application/json (default).
      2. application/x-www-form-urlencoded: Nested data is not supported.
      3. multipart/form-data: Nested data is not supported.
      4. ", + "access.form.webhook_data.guide_for_notification": "The Webhook data should be in JSON format.

        The values in JSON support template variables, which will be replaced by actual values when sent to the Webhook URL. Supported variables:
        1. ${SUBJECT}: The subject of notification.
        2. ${MESSAGE}: The message of notification.

        When the request method is GET, the data will be passed as query string. Otherwise, the data will be encoded in the format indicated by the Content-Type in the request headers. Supported formats:
        1. application/json (default).
        2. application/x-www-form-urlencoded: Nested data is not supported.
        3. multipart/form-data: Nested data is not supported.
        4. ", "access.form.webhook_preset_data.button": "Use preset template", "access.form.webhook_preset_data.option.bark.label": "Bark", "access.form.webhook_preset_data.option.gotify.label": "Gotify", diff --git a/ui/src/i18n/locales/en/nls.provider.json b/ui/src/i18n/locales/en/nls.provider.json index 39ba641c8..27dabd463 100644 --- a/ui/src/i18n/locales/en/nls.provider.json +++ b/ui/src/i18n/locales/en/nls.provider.json @@ -1,6 +1,6 @@ { "provider.1panel": "1Panel", - "provider.1panel.console": "1Panel - Console", + "provider.1panel.console": "1Panel - Console itself", "provider.1panel.site": "1Panel - Website", "provider.acmeca": "ACME Custom CA Endpoint", "provider.acmehttpreq": "ACME Custom HTTP Endpoint", @@ -42,10 +42,10 @@ "provider.baishan": "Baishan", "provider.baishan.cdn": "Baishan - CDN (Content Delivery Network)", "provider.baotapanel": "aaPanel (aka BaotaPanel)", - "provider.baotapanel.console": "aaPanel (aka BaotaPanel) - Console", + "provider.baotapanel.console": "aaPanel (aka BaotaPanel) - Console itself", "provider.baotapanel.site": "aaPanel (aka BaotaPanel) - Website", "provider.baotawaf": "aaWAF (aka BaotaWAF)", - "provider.baotawaf.console": "aaWAF (aka BaotaWAF) - Console", + "provider.baotawaf.console": "aaWAF (aka BaotaWAF) - Console itself", "provider.baotawaf.site": "aaWAF (aka BaotaWAF) - Website", "provider.bunny": "Bunny", "provider.bunny.cdn": "Bunny - CDN (Content Delivery Network)", @@ -127,7 +127,7 @@ "provider.rainyun": "Rain Yun", "provider.rainyun.rcdn": "Rain Yun - RCDN (Content Delivery Network)", "provider.ratpanel": "RatPanel", - "provider.ratpanel.console": "RatPanel - Console", + "provider.ratpanel.console": "RatPanel - Console itself", "provider.ratpanel.site": "RatPanel - Website", "provider.safeline": "SafeLine", "provider.slackbot": "Slack Bot", diff --git a/ui/src/i18n/locales/en/nls.workflow.nodes.json b/ui/src/i18n/locales/en/nls.workflow.nodes.json index f48959250..f99741b32 100644 --- a/ui/src/i18n/locales/en/nls.workflow.nodes.json +++ b/ui/src/i18n/locales/en/nls.workflow.nodes.json @@ -30,7 +30,7 @@ "workflow_node.apply.form_anchor.strategy.title": "Strategy settings", "workflow_node.apply.form.domains.label": "Domains", "workflow_node.apply.form.domains.placeholder": "Please enter domains (separated by semicolons)", - "workflow_node.apply.form.domains.tooltip": "Wildcard domain: *.example.com", + "workflow_node.apply.form.domains.help": "Notes: Multi-domains should be separated by semicolons. Wildcard domain should be written as *.example.com.", "workflow_node.apply.form.domains.multiple_input_modal.title": "Change domains", "workflow_node.apply.form.domains.multiple_input_modal.placeholder": "Please enter domain", "workflow_node.apply.form.contact_email.label": "Contact email", @@ -73,10 +73,10 @@ "workflow_node.apply.form.key_algorithm.placeholder": "Please select certificate key algorithm", "workflow_node.apply.form.acme_profile.label": "ACME certificate profile (Optional)", "workflow_node.apply.form.acme_profile.placeholder": "Please enter ACME certificate profile", - "workflow_node.apply.form.acme_profile.tooltip": "It determines the ACME profile which will be used to affect issuance of the certificate requested. If you don't understand this option, just keep it by default.Learn more.", + "workflow_node.apply.form.acme_profile.tooltip": "It determines the ACME profile which will be used to affect issuance of the certificate requested. If you don't understand this option, just keep it by default.
          Click here to learn more.", "workflow_node.apply.form.nameservers.label": "DNS recursive nameservers (Optional)", "workflow_node.apply.form.nameservers.placeholder": "Please enter DNS recursive nameservers (separated by semicolons)", - "workflow_node.apply.form.nameservers.tooltip": "It determines whether to custom DNS recursive nameservers during ACME DNS-01 challenge. If you don't understand this option, just keep it by default. Learn more.", + "workflow_node.apply.form.nameservers.tooltip": "It determines whether to custom DNS recursive nameservers during ACME DNS-01 challenge. If you don't understand this option, just keep it by default.
          Click here to learn more.", "workflow_node.apply.form.nameservers.multiple_input_modal.title": "Change DNS rcursive nameservers", "workflow_node.apply.form.nameservers.multiple_input_modal.placeholder": "Please enter DNS recursive nameserver", "workflow_node.apply.form.dns_propagation_wait.label": "DNS propagation waiting time (Optional)", @@ -86,15 +86,16 @@ "workflow_node.apply.form.dns_propagation_timeout.label": "DNS propagation checks timeout (Optional)", "workflow_node.apply.form.dns_propagation_timeout.placeholder": "Please enter DNS propagation checks timeout", "workflow_node.apply.form.dns_propagation_timeout.unit": "seconds", - "workflow_node.apply.form.dns_propagation_timeout.tooltip": "It determines the timeout for DNS propagation checks during ACME DNS-01 challenge. If you don't understand this option, just keep it by default.
          Leave it blank to use the default value provided by the provider.", + "workflow_node.apply.form.dns_propagation_timeout.tooltip": "It determines the timeout for DNS propagation checks during ACME DNS-01 challenge. If you don't understand this option, just keep it by default.", "workflow_node.apply.form.dns_ttl.label": "DNS TTL (Optional)", "workflow_node.apply.form.dns_ttl.placeholder": "Please enter DNS TTL", "workflow_node.apply.form.dns_ttl.unit": "seconds", - "workflow_node.apply.form.dns_ttl.tooltip": "It determines the TTL for DNS record during ACME DNS-01 challenge. If you don't understand this option, just keep it by default.
          Leave it blank to use the default value provided by the provider.", + "workflow_node.apply.form.dns_ttl.help": "Notes: Leave it blank to use the default value provided by the DNS provider.", + "workflow_node.apply.form.dns_ttl.tooltip": "It determines the TTL for DNS record during ACME DNS-01 challenge. If you don't understand this option, just keep it by default.", "workflow_node.apply.form.disable_follow_cname.label": "Disable CNAME following", - "workflow_node.apply.form.disable_follow_cname.tooltip": "It determines whether to disable CNAME following during ACME DNS-01 challenge. If you don't understand this option, just keep it by default. Learn more.", + "workflow_node.apply.form.disable_follow_cname.tooltip": "It determines whether to disable CNAME following during ACME DNS-01 challenge. If you don't understand this option, just keep it by default.
          Click here to learn more.", "workflow_node.apply.form.disable_ari.label": "Disable ARI", - "workflow_node.apply.form.disable_ari.tooltip": "It determines whether to disable ARI (ACME Renewal Information). If you don't understand this option, just keep it by default. Learn more.", + "workflow_node.apply.form.disable_ari.tooltip": "It determines whether to disable ARI (ACME Renewal Information). If you don't understand this option, just keep it by default.
          Click here to learn more.", "workflow_node.apply.form.skip_before_expiry_days.label": "Repeated application", "workflow_node.apply.form.skip_before_expiry_days.placeholder": "Please enter renewal interval", "workflow_node.apply.form.skip_before_expiry_days.prefix": "If the last certificate expiration time exceeds", @@ -124,6 +125,7 @@ "workflow_node.monitor.form.port.placeholder": "Please enter port", "workflow_node.monitor.form.domain.label": "Domain (Optional)", "workflow_node.monitor.form.domain.placeholder": "Please enter domain name", + "workflow_node.monitor.form.domain.help": "Notes: It is only required when the host is an IP address.", "workflow_node.monitor.form.request_path.label": "Request path (Optional)", "workflow_node.monitor.form.request_path.placeholder": "Please enter request path", @@ -148,7 +150,8 @@ "workflow_node.deploy.form.1panel_console_auto_restart.label": "Auto restart 1Panel after deployment", "workflow_node.deploy.form.1panel_site_node_name.label": "1Panel node name (Optional)", "workflow_node.deploy.form.1panel_site_node_name.placeholder": "Please enter 1Panel node name", - "workflow_node.deploy.form.1panel_site_node_name.tooltip": "You can find it on 1Panel dashboard. Only used for 1Panel v2+.", + "workflow_node.deploy.form.1panel_site_node_name.help": "Notes: It is only used for 1Panel v2+.", + "workflow_node.deploy.form.1panel_site_node_name.tooltip": "You can find it on 1Panel dashboard.", "workflow_node.deploy.form.aliyun_alb_region.label": "Alibaba Cloud ALB region", "workflow_node.deploy.form.1panel_site_resource_type.label": "Resource type", "workflow_node.deploy.form.1panel_site_resource_type.placeholder": "Please select resource type", @@ -174,6 +177,7 @@ "workflow_node.deploy.form.aliyun_alb_listener_id.tooltip": "For more information, see https://slb.console.aliyun.com/alb", "workflow_node.deploy.form.aliyun_alb_snidomain.label": "Alibaba Cloud ALB SNI domain (Optional)", "workflow_node.deploy.form.aliyun_alb_snidomain.placeholder": "Please enter Alibaba Cloud ALB SNI domain name", + "workflow_node.deploy.form.aliyun_alb_snidomain.help": "", "workflow_node.deploy.form.aliyun_alb_snidomain.tooltip": "For more information, see https://slb.console.aliyun.com/alb", "workflow_node.deploy.form.aliyun_apigw_service_type.label": "Alibaba Cloud API gateway type", "workflow_node.deploy.form.aliyun_apigw_service_type.placeholder": "Please select Alibaba Cloud API gateway type", @@ -194,22 +198,24 @@ "workflow_node.deploy.form.aliyun_cas_region.label": "Alibaba Cloud CAS region", "workflow_node.deploy.form.aliyun_cas_region.placeholder": "Please enter Alibaba Cloud CAS region (e.g. cn-hangzhou)", "workflow_node.deploy.form.aliyun_cas_region.tooltip": "For more information, see https://www.alibabacloud.com/help/en/ssl-certificate/developer-reference/endpoints", - "workflow_node.deploy.form.aliyun_cas_deploy.guide": "TIPS: This will invoke Alibaba Cloud OpenAPI CreateDeploymentJob to create an asynchronously deployment task. You need to go to the Alibaba Cloud console to check the actual deployment results by yourself.", - "workflow_node.deploy.form.aliyun_cas_deploy_region.label": "Alibaba Cloud CAS region", - "workflow_node.deploy.form.aliyun_cas_deploy_region.placeholder": "Please enter Alibaba Cloud CAS region (e.g. cn-hangzhou)", - "workflow_node.deploy.form.aliyun_cas_deploy_region.tooltip": "For more information, see https://www.alibabacloud.com/help/en/ssl-certificate/developer-reference/endpoints", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.label": "Alibaba Cloud resource IDs", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.placeholder": "Please enter Alibaba Cloud resource IDs (separated by semicolons)", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.errmsg.invalid": "Please enter a valid Alibaba Cloud resource ID", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.tooltip": "For more information, see https://www.alibabacloud.com/help/en/ssl-certificate/developer-reference/api-cas-2020-04-07-listcloudresources
          Supports Alibaba Cloud products only.", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.multiple_input_modal.title": "Change Alibaba Cloud resource IDs", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.multiple_input_modal.placeholder": "Please enter Alibaba Cloud resouce ID", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.label": "Alibaba Cloud contact IDs (Optional)", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.placeholder": "Please enter Alibaba Cloud contact IDs (separated by semicolons)", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.errmsg.invalid": "Please enter a valid Alibaba Cloud contact ID", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.tooltip": "For more information, see https://www.alibabacloud.com/help/en/ssl-certificate/developer-reference/api-cas-2020-04-07-listcontact
          Leave it blank to use the first system contact.", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.multiple_input_modal.title": "Change Alibaba Cloud contact IDs", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.multiple_input_modal.placeholder": "Please enter Alibaba Cloud contact ID", + "workflow_node.deploy.form.aliyun_casdeploy.guide": "TIPS: This will invoke Alibaba Cloud OpenAPI CreateDeploymentJob to create an asynchronously deployment task. You need to go to the Alibaba Cloud console to check the actual deployment results by yourself.", + "workflow_node.deploy.form.aliyun_casdeploy_region.label": "Alibaba Cloud CAS region", + "workflow_node.deploy.form.aliyun_casdeploy_region.placeholder": "Please enter Alibaba Cloud CAS region (e.g. cn-hangzhou)", + "workflow_node.deploy.form.aliyun_casdeploy_region.tooltip": "For more information, see https://www.alibabacloud.com/help/en/ssl-certificate/developer-reference/endpoints", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.label": "Alibaba Cloud resource IDs", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.placeholder": "Please enter Alibaba Cloud resource IDs (separated by semicolons)", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.errmsg.invalid": "Please enter a valid Alibaba Cloud resource ID", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.help": "Notes: Multi-IDs should be separated by semicolons. Only Alibaba Cloud products are supported.", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.tooltip": "For more information, see https://www.alibabacloud.com/help/en/ssl-certificate/developer-reference/api-cas-2020-04-07-listcloudresources", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.multiple_input_modal.title": "Change Alibaba Cloud resource IDs", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.multiple_input_modal.placeholder": "Please enter Alibaba Cloud resouce ID", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.label": "Alibaba Cloud contact IDs (Optional)", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.placeholder": "Please enter Alibaba Cloud contact IDs (separated by semicolons)", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.errmsg.invalid": "Please enter a valid Alibaba Cloud contact ID", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.help": "Notes: Multi-IDs should be separated by semicolons. Leave it blank to use the first system contact.", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.tooltip": "For more information, see https://www.alibabacloud.com/help/en/ssl-certificate/developer-reference/api-cas-2020-04-07-listcontact", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.multiple_input_modal.title": "Change Alibaba Cloud contact IDs", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.multiple_input_modal.placeholder": "Please enter Alibaba Cloud contact ID", "workflow_node.deploy.form.aliyun_clb_region.label": "Alibaba Cloud CLB region", "workflow_node.deploy.form.aliyun_clb_region.placeholder": "Please enter Alibaba Cloud CLB region (e.g. cn-hangzhou)", "workflow_node.deploy.form.aliyun_clb_region.tooltip": "For more information, see https://www.alibabacloud.com/help/en/slb/classic-load-balancer/product-overview/regions-that-support-clb", @@ -225,6 +231,7 @@ "workflow_node.deploy.form.aliyun_clb_listener_port.tooltip": "For more information, see https://slb.console.aliyun.com/clb", "workflow_node.deploy.form.aliyun_clb_snidomain.label": "Alibaba Cloud CLB SNI domain (Optional)", "workflow_node.deploy.form.aliyun_clb_snidomain.placeholder": "Please enter Alibaba Cloud CLB SNI domain name", + "workflow_node.deploy.form.aliyun_clb_snidomain.help": "", "workflow_node.deploy.form.aliyun_clb_snidomain.tooltip": "For more information, see https://slb.console.aliyun.com/clb", "workflow_node.deploy.form.aliyun_cdn_domain.label": "Alibaba Cloud CDN domain", "workflow_node.deploy.form.aliyun_cdn_domain.placeholder": "Please enter Alibaba Cloud CDN domain name", @@ -264,6 +271,7 @@ "workflow_node.deploy.form.aliyun_ga_listener_id.tooltip": "For more information, https://ga.console.aliyun.com", "workflow_node.deploy.form.aliyun_ga_snidomain.label": "Alibaba Cloud GA SNI domain (Optional)", "workflow_node.deploy.form.aliyun_ga_snidomain.placeholder": "Please enter Alibaba Cloud GA SNI domain name", + "workflow_node.deploy.form.aliyun_ga_snidomain.help": "", "workflow_node.deploy.form.aliyun_ga_snidomain.tooltip": "For more information, https://ga.console.aliyun.com", "workflow_node.deploy.form.aliyun_live_region.label": "Alibaba Cloud Live region", "workflow_node.deploy.form.aliyun_live_region.placeholder": "Please enter Alibaba Cloud Live region (e.g. cn-hangzhou)", @@ -309,6 +317,7 @@ "workflow_node.deploy.form.aliyun_waf_instance_id.tooltip": "For more information, see https://waf.console.aliyun.com", "workflow_node.deploy.form.aliyun_waf_domain.label": "Alibaba Cloud WAF domain (Optional)", "workflow_node.deploy.form.aliyun_waf_domain.placeholder": "Please enter Alibaba Cloud WAF domain name", + "workflow_node.deploy.form.aliyun_waf_domain.help": "", "workflow_node.deploy.form.aliyun_waf_domain.tooltip": "For more information, see https://waf.console.aliyun.com", "workflow_node.deploy.form.apisix_resource_type.label": "Resource type", "workflow_node.deploy.form.apisix_resource_type.placeholder": "Please select resource type", @@ -321,7 +330,7 @@ "workflow_node.deploy.form.aws_acm_region.tooltip": "For more information, see https://docs.aws.amazon.com/en_us/general/latest/gr/rande.html#regional-endpoints", "workflow_node.deploy.form.aws_acm_certificate_arn.label": "AWS ACM certificate ARN (Optional)", "workflow_node.deploy.form.aws_acm_certificate_arn.placeholder": "Please enter AWS ACM certificate ARN", - "workflow_node.deploy.form.aws_acm_certificate_arn.tooltip": "Leave it blank to import a new certificate.", + "workflow_node.deploy.form.aws_acm_certificate_arn.help": "Notes: Leave it blank to import a new certificate.", "workflow_node.deploy.form.aws_cloudfront_region.label": "AWS CloudFront Region", "workflow_node.deploy.form.aws_cloudfront_region.placeholder": "Please enter AWS CloudFront region (e.g. us-east-1)", "workflow_node.deploy.form.aws_cloudfront_region.tooltip": "For more information, see https://docs.aws.amazon.com/en_us/general/latest/gr/rande.html#regional-endpoints", @@ -342,8 +351,8 @@ "workflow_node.deploy.form.azure_keyvault_name.tooltip": "For more information, see https://learn.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates", "workflow_node.deploy.form.azure_keyvault_certificate_name.label": "Azure KeyVault certificate name (Optional)", "workflow_node.deploy.form.azure_keyvault_certificate_name.placeholder": "Please enter Azure KeyVault certificate name", - "workflow_node.deploy.form.azure_keyvault_certificate_name.tooltip": "Leave it blank to use a default name generated by Certimate.", "workflow_node.deploy.form.azure_keyvault_certificate_name.errmsg.invalid": "Certificate name can only contain letters, numbers, and hyphens (-), with a length limit of 1 to 127 characters", + "workflow_node.deploy.form.azure_keyvault_certificate_name.help": "Notes: Leave it blank to use a default name generated by Certimate.", "workflow_node.deploy.form.baiducloud_appblb_region.label": "Baidu Cloud BLB region", "workflow_node.deploy.form.baiducloud_appblb_region.placeholder": "Please enter Baidu Cloud BLB region (e.g. bj)", "workflow_node.deploy.form.baiducloud_appblb_region.tooltip": "For more information, see https://cloud.baidu.com/doc/BLB/s/cjwvxnzix", @@ -359,6 +368,7 @@ "workflow_node.deploy.form.baiducloud_appblb_listener_port.tooltip": "For more information, see https://console.bce.baidu.com/blb/#/appblb/list", "workflow_node.deploy.form.baiducloud_appblb_snidomain.label": "Baidu Cloud BLB SNI domain (Optional)", "workflow_node.deploy.form.baiducloud_appblb_snidomain.placeholder": "Please enter Baidu Cloud BLB SNI domain name", + "workflow_node.deploy.form.baiducloud_appblb_snidomain.help": "", "workflow_node.deploy.form.baiducloud_appblb_snidomain.tooltip": "For more information, see https://console.bce.baidu.com/blb/#/appblb/list", "workflow_node.deploy.form.baiducloud_blb_region.label": "Baidu Cloud BLB region", "workflow_node.deploy.form.baiducloud_blb_region.placeholder": "Please enter Baidu Cloud BLB region (e.g. bj)", @@ -375,6 +385,7 @@ "workflow_node.deploy.form.baiducloud_blb_listener_port.tooltip": "For more information, see https://console.bce.baidu.com/blb/#/blb/list", "workflow_node.deploy.form.baiducloud_blb_snidomain.label": "Baidu Cloud BLB SNI domain (Optional)", "workflow_node.deploy.form.baiducloud_blb_snidomain.placeholder": "Please enter Baidu Cloud BLB SNI domain name", + "workflow_node.deploy.form.baiducloud_blb_snidomain.help": "", "workflow_node.deploy.form.baiducloud_blb_snidomain.tooltip": "For more information, see https://console.bce.baidu.com/blb/#/blb/list", "workflow_node.deploy.form.baiducloud_cdn_domain.label": "Baidu Cloud CDN domain", "workflow_node.deploy.form.baiducloud_cdn_domain.placeholder": "Please enter Baidu Cloud CDN domain name", @@ -384,18 +395,20 @@ "workflow_node.deploy.form.baishan_cdn_domain.tooltip": "For more information, see https://cdnx.console.baishan.com", "workflow_node.deploy.form.baishan_cdn_certificate_id.label": "Baishan Cloud CDN certificate ID (Optional)", "workflow_node.deploy.form.baishan_cdn_certificate_id.placeholder": "Please enter Baishan Cloud CDN certificate ID", + "workflow_node.deploy.form.baishan_cdn_certificate_id.help": "", "workflow_node.deploy.form.baishan_cdn_certificate_id.tooltip": "For more information, see https://cdnx.console.baishan.com/#/cdn/cert", "workflow_node.deploy.form.baotapanel_console_auto_restart.label": "Auto restart aaPanel after deployment", "workflow_node.deploy.form.baotapanel_site_type.label": "aaPanel site type", "workflow_node.deploy.form.baotapanel_site_type.placeholder": "Please select aaPanel site type", "workflow_node.deploy.form.baotapanel_site_type.option.php.label": "PHP sites", - "workflow_node.deploy.form.baotapanel_site_type.option.other.label": "Other sites", + "workflow_node.deploy.form.baotapanel_site_type.option.other.label": "Any sites (aaPanel v9.4+)", "workflow_node.deploy.form.baotapanel_site_name.label": "aaPanel site name", "workflow_node.deploy.form.baotapanel_site_name.placeholder": "Please enter aaPanel site name", "workflow_node.deploy.form.baotapanel_site_name.tooltip": "You can find it on aaPanel dashboard.", "workflow_node.deploy.form.baotapanel_site_names.label": "aaPanel site names", "workflow_node.deploy.form.baotapanel_site_names.placeholder": "Please enter aaPanel site names (separated by semicolons)", "workflow_node.deploy.form.baotapanel_site_names.errmsg.invalid": "Please enter a valid aaPanel site name", + "workflow_node.deploy.form.baotapanel_site_names.help": "Notes: Multi-values should be separated by semicolons.", "workflow_node.deploy.form.baotapanel_site_names.tooltip": "You can find it on aaPanel dashboard.", "workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.title": "Change aaPanel site names", "workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.placeholder": "Please enter aaPanel site name", @@ -466,6 +479,7 @@ "workflow_node.deploy.form.gcore_cdn_resource_id.tooltip": "For more information, see https://cdn.gcore.com/resources/list", "workflow_node.deploy.form.gcore_cdn_certificate_id.label": "Gcore CDN certificate ID (Optional)", "workflow_node.deploy.form.gcore_cdn_certificate_id.placeholder": "Please enter Gcore CDN certificate ID", + "workflow_node.deploy.form.gcore_cdn_certificate_id.help": "", "workflow_node.deploy.form.gcore_cdn_certificate_id.tooltip": "For more information, see https://cdn.gcore.com/ssl", "workflow_node.deploy.form.goedge_resource_type.label": "Resource type", "workflow_node.deploy.form.goedge_resource_type.placeholder": "Please select resource type", @@ -525,6 +539,7 @@ "workflow_node.deploy.form.jdcloud_alb_listener_id.tooltip": "For more information, see https://cns-console.jdcloud.com/host/loadBalance/list", "workflow_node.deploy.form.jdcloud_alb_snidomain.label": "JD Cloud ALB SNI domain (Optional)", "workflow_node.deploy.form.jdcloud_alb_snidomain.placeholder": "Please enter JD Cloud ALB SNI domain name", + "workflow_node.deploy.form.jdcloud_alb_snidomain.help": "", "workflow_node.deploy.form.jdcloud_alb_snidomain.tooltip": "For more information, see https://cns-console.jdcloud.com/host/loadBalance/list", "workflow_node.deploy.form.jdcloud_cdn_domain.label": "JD Cloud CDN domain", "workflow_node.deploy.form.jdcloud_cdn_domain.placeholder": "Please enter JD Cloud CDN domain name", @@ -576,16 +591,16 @@ "workflow_node.deploy.form.local_format.option.jks.label": "JKS (*.jks)", "workflow_node.deploy.form.local_cert_path.label": "Certificate file saving path", "workflow_node.deploy.form.local_cert_path.placeholder": "Please enter saving path for certificate file", - "workflow_node.deploy.form.local_cert_path.tooltip": "Note that the path should include the complete file name, not just the directory.", + "workflow_node.deploy.form.local_cert_path.help": "Notes: It should include the full file path, not just the directory.", "workflow_node.deploy.form.local_key_path.label": "Certificate's private key file saving path", "workflow_node.deploy.form.local_key_path.placeholder": "Please enter saving path for certificate's private key file", - "workflow_node.deploy.form.local_key_path.tooltip": "Note that the path should include the complete file name, not just the directory.", + "workflow_node.deploy.form.local_key_path.help": "Notes: It should include the full file path, not just the directory.", "workflow_node.deploy.form.local_servercert_path.label": "Server certificate file saving path (Optional)", "workflow_node.deploy.form.local_servercert_path.placeholder": "Please enter saving path for server certificate file", - "workflow_node.deploy.form.local_servercert_path.tooltip": "Note that the path should include the complete file name, not just the directory.", + "workflow_node.deploy.form.local_servercert_path.help": "Notes: It should include the full file path, not just the directory.", "workflow_node.deploy.form.local_intermediacert_path.label": "Intermediate CA certificate file saving path (Optional)", "workflow_node.deploy.form.local_intermediacert_path.placeholder": "Please enter saving path for intermediate CA certificate file", - "workflow_node.deploy.form.local_intermediacert_path.tooltip": "Note that the path should include the complete file name, not just the directory.", + "workflow_node.deploy.form.local_intermediacert_path.help": "Notes: It should include the full file path, not just the directory.", "workflow_node.deploy.form.local_pfx_password.label": "PFX password", "workflow_node.deploy.form.local_pfx_password.placeholder": "Please enter PFX password", "workflow_node.deploy.form.local_pfx_password.tooltip": "For more information, see https://learn.microsoft.com/en-us/windows-hardware/drivers/install/personal-information-exchange---pfx--files", @@ -654,16 +669,16 @@ "workflow_node.deploy.form.ssh_format.option.jks.label": "JKS (*.jks)", "workflow_node.deploy.form.ssh_cert_path.label": "Certificate file uploading path", "workflow_node.deploy.form.ssh_cert_path.placeholder": "Please enter uploading path for certificate file", - "workflow_node.deploy.form.ssh_cert_path.tooltip": "Note that the path should include the complete file name, not just the directory.", + "workflow_node.deploy.form.ssh_cert_path.help": "Notes: It should include the full file path, not just the directory.", "workflow_node.deploy.form.ssh_key_path.label": "Certificate's private key file uploading path", "workflow_node.deploy.form.ssh_key_path.placeholder": "Please enter uploading path for certificate's private key file", - "workflow_node.deploy.form.ssh_key_path.tooltip": "Note that the path should include the complete file name, not just the directory.", + "workflow_node.deploy.form.ssh_key_path.help": "Notes: It should include the full file path, not just the directory.", "workflow_node.deploy.form.ssh_servercert_path.label": "Server certificate file uploading path (Optional)", "workflow_node.deploy.form.ssh_servercert_path.placeholder": "Please enter uploading path for server certificate file", - "workflow_node.deploy.form.ssh_servercert_path.tooltip": "Note that the path should include the complete file name, not just the directory.", + "workflow_node.deploy.form.ssh_servercert_path.help": "Notes: It should include the full file path, not just the directory.", "workflow_node.deploy.form.ssh_intermediacert_path.label": "Intermediate CA certificate file uploading path (Optional)", "workflow_node.deploy.form.ssh_intermediacert_path.placeholder": "Please enter uploading path for intermediate CA certificate file", - "workflow_node.deploy.form.ssh_intermediacert_path.tooltip": "Note that the path should include the complete file name, not just the directory.", + "workflow_node.deploy.form.ssh_intermediacert_path.help": "Notes: It should include the full file path, not just the directory.", "workflow_node.deploy.form.ssh_pfx_password.label": "PFX password", "workflow_node.deploy.form.ssh_pfx_password.placeholder": "Please enter PFX password", "workflow_node.deploy.form.ssh_pfx_password.tooltip": "For more information, see https://learn.microsoft.com/en-us/windows-hardware/drivers/install/personal-information-exchange---pfx--files", @@ -718,6 +733,7 @@ "workflow_node.deploy.form.tencentcloud_clb_listener_id.tooltip": "For more information, see https://console.tencentcloud.com/clb", "workflow_node.deploy.form.tencentcloud_clb_snidomain.label": "Tencent Cloud CLB SNI domain (Optional)", "workflow_node.deploy.form.tencentcloud_clb_snidomain.placeholder": "Please enter Tencent Cloud CLB SNI domain name", + "workflow_node.deploy.form.tencentcloud_clb_snidomain.help": "", "workflow_node.deploy.form.tencentcloud_clb_snidomain.tooltip": "For more information, see https://console.tencentcloud.com/clb
          It is optional. If you want to deploy multiple certificates on the same CLB listener, you can fill in this field.", "workflow_node.deploy.form.tencentcloud_clb_ruledomain.label": "Tencent Cloud CLB domain", "workflow_node.deploy.form.tencentcloud_clb_ruledomain.placeholder": "Please enter Tencent Cloud CLB domain name", @@ -751,6 +767,7 @@ "workflow_node.deploy.form.tencentcloud_eo_zone_id.tooltip": "For more information, see https://console.tencentcloud.com/edgeone", "workflow_node.deploy.form.tencentcloud_eo_domains.label": "Tencent Cloud EdgeOne domains", "workflow_node.deploy.form.tencentcloud_eo_domains.placeholder": "Please enter Tencent Cloud EdgeOne domain names (separated by semicolons)", + "workflow_node.deploy.form.tencentcloud_eo_domains.help": "Notes: Multi-domains should be separated by semicolons.", "workflow_node.deploy.form.tencentcloud_eo_domains.tooltip": "For more information, see https://console.tencentcloud.com/edgeone", "workflow_node.deploy.form.tencentcloud_eo_domains.multiple_input_modal.title": "Change Tencent Cloud EdgeOne domain", "workflow_node.deploy.form.tencentcloud_eo_domains.multiple_input_modal.placeholder": "Please enter Tencent Cloud EdgeOne domain name", @@ -778,41 +795,44 @@ "workflow_node.deploy.form.tencentcloud_ssl_endpoint.label": "Tencent Cloud SSL API endpoint (Optional)", "workflow_node.deploy.form.tencentcloud_ssl_endpoint.placeholder": "Please enter Tencent Cloud SSL API endpoint (e.g. ssl.intl.tencentcloudapi.com)", "workflow_node.deploy.form.tencentcloud_ssl_endpoint.tooltip": "
          • ssl.intl.tencentcloudapi.com for Tencent Cloud International
          • ssl.tencentcloudapi.com for Tencent Cloud in China
          ", - "workflow_node.deploy.form.tencentcloud_ssl_deploy.guide": "TIPS: This will invoke Tencent Cloud OpenAPI DeployCertificateInstance to create an asynchronously deployment task. You need to go to the Tencent Cloud console to check the actual deployment results by yourself.", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_endpoint.label": "Tencent Cloud SSL API endpoint (Optional)", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_endpoint.placeholder": "Please enter Tencent Cloud SSL API endpoint (e.g. ssl.intl.tencentcloudapi.com)", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_endpoint.tooltip": "
          • ssl.intl.tencentcloudapi.com for Tencent Cloud International
          • ssl.tencentcloudapi.com for Tencent Cloud in China
          ", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_region.label": "Tencent Cloud service region", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_region.placeholder": "Please enter Tencent Cloud service region (e.g. ap-guangzhou)", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_region.tooltip": "For more information, see https://www.tencentcloud.com/document/product/1007/36573", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_type.label": "Tencent Cloud resource type", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_type.placeholder": "Please enter Tencent Cloud resource type", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_type.tooltip": "For more information, see https://cloud.tencent.com/document/product/400/91667", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.label": "Tencent Cloud resource IDs", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.placeholder": "Please enter Tencent Cloud resource IDs (separated by semicolons)", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.errmsg.invalid": "Please enter a valid Tencent Cloud resource ID", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.tooltip": "For more information, see https://cloud.tencent.com/document/product/400/91667", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.multiple_input_modal.title": "Change Tencent Cloud resource IDs", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.multiple_input_modal.placeholder": "Please enter Tencent Cloud resouce ID", - "workflow_node.deploy.form.tencentcloud_ssl_update.guide": "TIPS: This will invoke Tencent Cloud OpenAPI UpdateCertificateInstance or UploadUpdateCertificateInstance to create an asynchronously deployment task. You need to go to the Tencent Cloud console to check the actual deployment results by yourself.", - "workflow_node.deploy.form.tencentcloud_ssl_update_endpoint.label": "Tencent Cloud SSL API endpoint (Optional)", - "workflow_node.deploy.form.tencentcloud_ssl_update_endpoint.placeholder": "Please enter Tencent Cloud SSL API endpoint (e.g. ssl.intl.tencentcloudapi.com)", - "workflow_node.deploy.form.tencentcloud_ssl_update_endpoint.tooltip": "
          • ssl.intl.tencentcloudapi.com for Tencent Cloud International
          • ssl.tencentcloudapi.com for Tencent Cloud in China
          ", - "workflow_node.deploy.form.tencentcloud_ssl_update_certificate_id.label": "Tencent Cloud SSL certificate ID", - "workflow_node.deploy.form.tencentcloud_ssl_update_certificate_id.placeholder": "Please enter Tencent Cloud SSL certificate ID", - "workflow_node.deploy.form.tencentcloud_ssl_update_certificate_id.tooltip": "For more information, see https://console.cloud.tencent.com/certoverview", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.label": "Tencent Cloud resource types", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.placeholder": "Please enter Tencent Cloud resource types (separated by semicolons)", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.tooltip": "For more information, see https://www.tencentcloud.com/document/product/1007/57981 or https://www.tencentcloud.com/document/product/1007/70503", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.multiple_input_modal.title": "Change Tencent Cloud resource types", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.multiple_input_modal.placeholder": "Please enter Tencent Cloud resource type", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.label": "Tencent Cloud resource regions (Optional)", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.placeholder": "Please enter Tencent Cloud resource regions (separated by semicolons)", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.tooltip": "For more information, see https://www.tencentcloud.com/document/product/1007/57981 or https://www.tencentcloud.com/document/product/1007/70503", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.multiple_input_modal.title": "Change Tencent Cloud resource regions", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.multiple_input_modal.placeholder": "Please enter Tencent Cloud resource region", - "workflow_node.deploy.form.tencentcloud_ssl_update_is_replaced.label": "Renewal certificate (certificate ID unchanged)", - "workflow_node.deploy.form.tencentcloud_ssl_update_is_replaced.tooltip": "When unchecked, it will invoke UpdateCertificateInstance; otherwise, it will invoke UploadUpdateCertificateInstance.", + "workflow_node.deploy.form.tencentcloud_ssldeploy.guide": "TIPS: This will invoke Tencent Cloud OpenAPI DeployCertificateInstance to create an asynchronously deployment task. You need to go to the Tencent Cloud console to check the actual deployment results by yourself.", + "workflow_node.deploy.form.tencentcloud_ssldeploy_endpoint.label": "Tencent Cloud SSL API endpoint (Optional)", + "workflow_node.deploy.form.tencentcloud_ssldeploy_endpoint.placeholder": "Please enter Tencent Cloud SSL API endpoint (e.g. ssl.intl.tencentcloudapi.com)", + "workflow_node.deploy.form.tencentcloud_ssldeploy_endpoint.tooltip": "
          • ssl.intl.tencentcloudapi.com for Tencent Cloud International
          • ssl.tencentcloudapi.com for Tencent Cloud in China
          ", + "workflow_node.deploy.form.tencentcloud_ssldeploy_region.label": "Tencent Cloud service region", + "workflow_node.deploy.form.tencentcloud_ssldeploy_region.placeholder": "Please enter Tencent Cloud service region (e.g. ap-guangzhou)", + "workflow_node.deploy.form.tencentcloud_ssldeploy_region.tooltip": "For more information, see https://www.tencentcloud.com/document/product/1007/36573", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_type.label": "Tencent Cloud resource type", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_type.placeholder": "Please enter Tencent Cloud resource type", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_type.tooltip": "For more information, see https://cloud.tencent.com/document/product/400/91667", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.label": "Tencent Cloud resource IDs", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.placeholder": "Please enter Tencent Cloud resource IDs (separated by semicolons)", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.errmsg.invalid": "Please enter a valid Tencent Cloud resource ID", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.help": "Notes: Multi-IDs should be separated by semicolons.", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.tooltip": "For more information, see https://cloud.tencent.com/document/product/400/91667", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.multiple_input_modal.title": "Change Tencent Cloud resource IDs", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.multiple_input_modal.placeholder": "Please enter Tencent Cloud resouce ID", + "workflow_node.deploy.form.tencentcloud_sslupdate.guide": "TIPS: This will invoke Tencent Cloud OpenAPI UpdateCertificateInstance or UploadUpdateCertificateInstance to create an asynchronously deployment task. You need to go to the Tencent Cloud console to check the actual deployment results by yourself.", + "workflow_node.deploy.form.tencentcloud_sslupdate_endpoint.label": "Tencent Cloud SSL API endpoint (Optional)", + "workflow_node.deploy.form.tencentcloud_sslupdate_endpoint.placeholder": "Please enter Tencent Cloud SSL API endpoint (e.g. ssl.intl.tencentcloudapi.com)", + "workflow_node.deploy.form.tencentcloud_sslupdate_endpoint.tooltip": "
          • ssl.intl.tencentcloudapi.com for Tencent Cloud International
          • ssl.tencentcloudapi.com for Tencent Cloud in China
          ", + "workflow_node.deploy.form.tencentcloud_sslupdate_certificate_id.label": "Tencent Cloud SSL certificate ID", + "workflow_node.deploy.form.tencentcloud_sslupdate_certificate_id.placeholder": "Please enter Tencent Cloud SSL certificate ID", + "workflow_node.deploy.form.tencentcloud_sslupdate_certificate_id.tooltip": "For more information, see https://console.cloud.tencent.com/certoverview", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.label": "Tencent Cloud resource types", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.placeholder": "Please enter Tencent Cloud resource types (separated by semicolons)", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.help": "Notes: Multi-values should be separated by semicolons.", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.tooltip": "For more information, see https://www.tencentcloud.com/document/product/1007/57981 or https://www.tencentcloud.com/document/product/1007/70503", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.multiple_input_modal.title": "Change Tencent Cloud resource types", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.multiple_input_modal.placeholder": "Please enter Tencent Cloud resource type", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.label": "Tencent Cloud resource regions (Optional)", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.placeholder": "Please enter Tencent Cloud resource regions (separated by semicolons)", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.help": "Notes: Multi-values should be separated by semicolons.", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.tooltip": "For more information, see https://www.tencentcloud.com/document/product/1007/57981 or https://www.tencentcloud.com/document/product/1007/70503", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.multiple_input_modal.title": "Change Tencent Cloud resource regions", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.multiple_input_modal.placeholder": "Please enter Tencent Cloud resource region", + "workflow_node.deploy.form.tencentcloud_sslupdate_is_replaced.label": "Renewal certificate (certificate ID unchanged)", + "workflow_node.deploy.form.tencentcloud_sslupdate_is_replaced.tooltip": "When unchecked, it will invoke UpdateCertificateInstance; otherwise, it will invoke UploadUpdateCertificateInstance.", "workflow_node.deploy.form.tencentcloud_vod_endpoint.label": "Tencent Cloud VOD API endpoint (Optional)", "workflow_node.deploy.form.tencentcloud_vod_endpoint.placeholder": "Please enter Tencent Cloud VOD API endpoint (e.g. vod.intl.tencentcloudapi.com)", "workflow_node.deploy.form.tencentcloud_vod_endpoint.tooltip": "
          • vod.intl.tencentcloudapi.com for Tencent Cloud International
          • vod.tencentcloudapi.com for Tencent Cloud in China
          ", @@ -882,6 +902,7 @@ "workflow_node.deploy.form.volcengine_alb_listener_id.tooltip": "For more information, see https://console.volcengine.com/alb", "workflow_node.deploy.form.volcengine_alb_snidomain.label": "VolcEngine CLB SNI domain (Optional)", "workflow_node.deploy.form.volcengine_alb_snidomain.placeholder": "Please enter VolcEngine CLB SNI domain name", + "workflow_node.deploy.form.volcengine_alb_snidomain.help": "", "workflow_node.deploy.form.volcengine_alb_snidomain.tooltip": "For more information, see https://console.volcengine.com/alb", "workflow_node.deploy.form.volcengine_cdn_domain.label": "VolcEngine CDN domain", "workflow_node.deploy.form.volcengine_cdn_domain.placeholder": "Please enter VolcEngine CDN domain name", @@ -927,6 +948,7 @@ "workflow_node.deploy.form.volcengine_tos_domain.tooltip": "For more information, see https://console.volcengine.com/tos", "workflow_node.deploy.form.wangsu_cdn_domains.label": "Wangsu Cloud CDN domains", "workflow_node.deploy.form.wangsu_cdn_domains.placeholder": "Please enter Wangsu Cloud CDN domain names (separated by semicolons)", + "workflow_node.deploy.form.wangsu_cdn_domains.help": "Notes: Multi-domains should be separated by semicolons.", "workflow_node.deploy.form.wangsu_cdn_domains.tooltip": "For more information, see https://cdn.console.wangsu.com/v2/index/#/property/list", "workflow_node.deploy.form.wangsu_cdn_domains.multiple_input_modal.title": "Change Wangsu Cloud CDN domains", "workflow_node.deploy.form.wangsu_cdn_domains.multiple_input_modal.placeholder": "Please enter Wangsu Cloud CDN domain", @@ -939,16 +961,18 @@ "workflow_node.deploy.form.wangsu_cdnpro_domain.tooltip": "For more information, see https://cdnpro.console.wangsu.com/v2/index/#/properties", "workflow_node.deploy.form.wangsu_cdnpro_certificate_id.label": "Wangsu Cloud CDN certificate ID (Optional)", "workflow_node.deploy.form.wangsu_cdnpro_certificate_id.placeholder": "Please enter Wangsu Cloud CDN certificate ID", + "workflow_node.deploy.form.wangsu_cdnpro_certificate_id.help": "", "workflow_node.deploy.form.wangsu_cdnpro_certificate_id.tooltip": "For more information, see https://cdnpro.console.wangsu.com/v2/index/#/certificate", "workflow_node.deploy.form.wangsu_cdnpro_webhook_id.label": "Wangsu Cloud CDN Webhook ID (Optional)", "workflow_node.deploy.form.wangsu_cdnpro_webhook_id.placeholder": "Please enter Wangsu Cloud CDN Webhook ID", "workflow_node.deploy.form.wangsu_cdnpro_webhook_id.tooltip": "For more information, see https://cdnpro.console.wangsu.com/v2/index/#/certificate", "workflow_node.deploy.form.wangsu_certificate_id.label": "Wangsu Cloud certificate ID (Optional)", "workflow_node.deploy.form.wangsu_certificate_id.placeholder": "Please enter Wangsu Cloud certificate ID", + "workflow_node.deploy.form.wangsu_certificate_id.help": "", "workflow_node.deploy.form.wangsu_certificate_id.tooltip": "For more information, see https://cdn.console.wangsu.com/v2/index#/certificate/list", "workflow_node.deploy.form.webhook_data.label": "Webhook data (Optional)", - "workflow_node.deploy.form.webhook_data.placeholder": "Please enter Webhook data to override the default value", - "workflow_node.deploy.form.webhook_data.tooltip": "Leave it blank to use the default Webhook data provided by the credential.", + "workflow_node.deploy.form.webhook_data.placeholder": "Please enter Webhook data", + "workflow_node.deploy.form.webhook_data.help": "Notes: Leave it blank to use the default Webhook data provided by the credential.", "workflow_node.deploy.form.webhook_data.guide": "
          Supported variables:
          1. ${DOMAIN}: The primary domain of the certificate (CommonName).
          2. ${DOMAINS}: The domain list of the certificate (SubjectAltNames).
          3. ${CERTIFICATE}: The PEM format content of the certificate file.
          4. ${SERVER_CERTIFICATE}: The PEM format content of the server certificate file.
          5. ${INTERMEDIA_CERTIFICATE}: The PEM format content of the intermediate CA certificate file.
          6. ${PRIVATE_KEY}: The PEM format content of the private key file.

          Please visit the credentials page for addtional notes.", "workflow_node.deploy.form.webhook_data.errmsg.json_invalid": "Please enter a valiod JSON string", "workflow_node.deploy.form.skip_on_last_succeeded.label": "Repeated deployment", @@ -974,23 +998,23 @@ "workflow_node.notify.form.provider_access.button": "Create", "workflow_node.notify.form.params_config.label": "Parameter settings", "workflow_node.notify.form.discordbot_channel_id.label": "Discord channel ID (Optional)", - "workflow_node.notify.form.discordbot_channel_id.placeholder": "Please enter Discord channel ID to override the default value", - "workflow_node.notify.form.discordbot_channel_id.tooltip": "Leave it blank to use the default channel ID provided by the credential.", + "workflow_node.notify.form.discordbot_channel_id.placeholder": "Please enter Discord channel ID", + "workflow_node.notify.form.discordbot_channel_id.help": "Notes: Leave it blank to use the default channel ID provided by the credential.", "workflow_node.notify.form.email_receiver_address.label": "Receiver email address (Optional)", - "workflow_node.notify.form.email_receiver_address.placeholder": "Please enter receiver email address to override the default value", - "workflow_node.notify.form.email_receiver_address.tooltip": "Leave it blank to use the default receiver email address provided by the selected credential.", + "workflow_node.notify.form.email_receiver_address.placeholder": "Please enter receiver email address", + "workflow_node.notify.form.email_receiver_address.help": "Notes: Leave it blank to use the default receiver email address provided by the selected credential.", "workflow_node.notify.form.mattermost_channel_id.label": "Mattermost channel ID (Optional)", - "workflow_node.notify.form.mattermost_channel_id.placeholder": "Please enter Mattermost channel ID to override the default value", - "workflow_node.notify.form.mattermost_channel_id.tooltip": "Leave it blank to use the default channel ID provided by the credential.", + "workflow_node.notify.form.mattermost_channel_id.placeholder": "Please enter Mattermost channel ID", + "workflow_node.notify.form.mattermost_channel_id.help": "Notes: Leave it blank to use the default channel ID provided by the credential.", "workflow_node.notify.form.slackbot_channel_id.label": "Slack channel ID (Optional)", - "workflow_node.notify.form.slackbot_channel_id.placeholder": "Please enter Slack channel ID to override the default value", - "workflow_node.notify.form.slackbot_channel_id.tooltip": "Leave it blank to use the default channel ID provided by the credential.", + "workflow_node.notify.form.slackbot_channel_id.placeholder": "Please enter Slack channel ID", + "workflow_node.notify.form.slackbot_channel_id.help": "Notes: Leave it blank to use the default channel ID provided by the credential.", "workflow_node.notify.form.telegrambot_chat_id.label": "Telegram chat ID (Optional)", - "workflow_node.notify.form.telegrambot_chat_id.placeholder": "Please enter Telegram chat ID to override the default value", - "workflow_node.notify.form.telegrambot_chat_id.tooltip": "Leave it blank to use the default chat ID provided by the selected credential.", + "workflow_node.notify.form.telegrambot_chat_id.placeholder": "Please enter Telegram chat ID", + "workflow_node.notify.form.telegrambot_chat_id.help": "Notes: Leave it blank to use the default chat ID provided by the selected credential.", "workflow_node.notify.form.webhook_data.label": "Webhook data (Optional)", - "workflow_node.notify.form.webhook_data.placeholder": "Please enter Webhook data to override the default value", - "workflow_node.notify.form.webhook_data.tooltip": "Leave it blank to use the default Webhook data provided by the credential.", + "workflow_node.notify.form.webhook_data.placeholder": "Please enter Webhook data", + "workflow_node.notify.form.webhook_data.help": "Notes: Leave it blank to use the default Webhook data provided by the credential.", "workflow_node.notify.form.webhook_data.guide": "
          Supported variables:
          1. ${SUBJECT}: The subject of notification.
          2. ${MESSAGE}: The message of notification.

          Please visit the credentials page for addtional notes.", "workflow_node.notify.form.webhook_data.errmsg.json_invalid": "Please enter a valiod JSON string", "workflow_node.notify.form.skip_on_all_prev_skipped.label": "Silent behavior", diff --git a/ui/src/i18n/locales/zh/nls.access.json b/ui/src/i18n/locales/zh/nls.access.json index 3e4c71958..46b5982f4 100644 --- a/ui/src/i18n/locales/zh/nls.access.json +++ b/ui/src/i18n/locales/zh/nls.access.json @@ -39,7 +39,7 @@ "access.form.name.placeholder": "请输入授权名称", "access.form.provider.label": "提供商", "access.form.provider.placeholder": "请选择提供商", - "access.form.provider.tooltip": "提供商分为两种类型:
          【DNS 提供商】你的 DNS 托管方,通常等同于域名注册商,用于在申请证书时管理你的域名解析记录。
          【主机提供商】你的服务器或云服务的托管方,用于部署签发的证书。", + "access.form.provider.help": "提供商分为两种类型:
          【DNS 提供商】你的 DNS 托管方,通常等同于域名注册商,用于在申请证书时管理你的域名解析记录。
          【主机提供商】你的服务器或云服务的托管方,用于部署签发的证书。", "access.form.provider.search.placeholder": "搜索提供商……", "access.form.common_allow_insecure_conns.label": "忽略 SSL/TLS 证书错误", "access.form.common_allow_insecure_conns.switch.on": "允许", @@ -186,7 +186,8 @@ "access.form.discordbot_token.placeholder": "请输入 Discord 机器人 API Token", "access.form.discordbot_token.tooltip": "这是什么?请参阅 https://docs.discordbotstudio.org/setting-up-dbs/finding-your-bot-token", "access.form.discordbot_channel_id.label": "Discord 频道 ID(可选)", - "access.form.discordbot_channel_id.placeholder": "请输入默认的 Discord 频道 ID(可在工作流中单独设置)", + "access.form.discordbot_channel_id.placeholder": "请输入默认的 Discord 频道 ID", + "access.form.discordbot_channel_id.help": "提示:可在工作流中覆盖此设置。", "access.form.discordbot_channel_id.tooltip": "这是什么?请参阅 https://support.discord.com/hc/en-us/articles/206346498-Where-can-I-find-my-User-Server-Message-ID", "access.form.dnsla_api_id.label": "DNS.LA API ID", "access.form.dnsla_api_id.placeholder": "请输入 DNS.LA API ID", @@ -226,7 +227,8 @@ "access.form.email_sender_name.label": "发件人名称(可选)", "access.form.email_sender_name.placeholder": "请输入发件人名称", "access.form.email_receiver_address.label": "收件人邮箱(可选)", - "access.form.email_receiver_address.placeholder": "请输入默认的收件人邮箱(可在工作流中单独设置)", + "access.form.email_receiver_address.placeholder": "请输入默认的收件人邮箱", + "access.form.email_receiver_address.help": "提示:可在工作流中覆盖此设置。", "access.form.flexcdn_server_url.label": "FlexCDN 服务地址", "access.form.flexcdn_server_url.placeholder": "请输入 FlexCDN 服务地址", "access.form.flexcdn_api_role.label": "FlexCDN 用户角色", @@ -320,7 +322,8 @@ "access.form.mattermost_password.label": "Mattermost 密码", "access.form.mattermost_password.placeholder": "请输入 Mattermost 密码", "access.form.mattermost_channel_id.label": "Mattermost 频道 ID(可选)", - "access.form.mattermost_channel_id.placeholder": "请输入默认的 Mattermost 频道 ID(可在工作流中单独设置)", + "access.form.mattermost_channel_id.placeholder": "请输入默认的 Mattermost 频道 ID", + "access.form.mattermost_channel_id.help": "提示:可在工作流中覆盖此设置。", "access.form.mattermost_channel_id.tooltip": "如何获取此参数?从左侧边栏中选择目标频道,点击顶部的频道名称,选择“频道详情”,即可在弹出页面中直接看到频道 ID。", "access.form.namecheap_username.label": "Namecheap 用户名", "access.form.namecheap_username.placeholder": "请输入 Namecheap 用户名", @@ -397,7 +400,8 @@ "access.form.slackbot_token.placeholder": "请输入 Slack 机器人 Token", "access.form.slackbot_token.tooltip": "这是什么?请参阅 https://docs.slack.dev/authentication/tokens#bot", "access.form.slackbot_channel_id.label": "Slack 频道 ID(可选)", - "access.form.slackbot_channel_id.placeholder": "请输入默认的 Slack 频道 ID(可在工作流中单独设置)", + "access.form.slackbot_channel_id.placeholder": "请输入默认的 Slack 频道 ID", + "access.form.slackbot_channel_id.help": "提示:可在工作流中覆盖此设置。", "access.form.slackbot_channel_id.tooltip": "如何获取此参数?请参阅 https://www.youtube.com/watch?v=Uz5Yi5C2pwQ", "access.form.spaceship_api_key.label": "Spaceship API Key", "access.form.spaceship_api_key.placeholder": "请输入 Spaceship API Key", @@ -436,7 +440,8 @@ "access.form.telegrambot_token.placeholder": "请输入 Telegram 机器人 API Token", "access.form.telegrambot_token.tooltip": "如何获取此参数?请参阅 https://gist.github.com/nafiesl/4ad622f344cd1dc3bb1ecbe468ff9f8a", "access.form.telegrambot_chat_id.label": "Telegram 会话 ID(可选)", - "access.form.telegrambot_chat_id.placeholder": "请输入默认的 Telegram 会话 ID(可在工作流中单独设置)", + "access.form.telegrambot_chat_id.placeholder": "请输入默认的 Telegram 会话 ID", + "access.form.telegrambot_chat_id.help": "提示:可在工作流中覆盖此设置。", "access.form.telegrambot_chat_id.tooltip": "如何获取此参数?请参阅 https://gist.github.com/nafiesl/4ad622f344cd1dc3bb1ecbe468ff9f8a", "access.form.tencentcloud_secret_id.label": "腾讯云 SecretId", "access.form.tencentcloud_secret_id.placeholder": "请输入腾讯云 SecretId", @@ -493,12 +498,11 @@ "access.form.webhook_headers.errmsg.invalid": "请输入有效的请求标头", "access.form.webhook_headers.tooltip": "示例:
          Content-Type: application/json
          User-Agent: certimate
          ", "access.form.webhook_data.errmsg.json_invalid": "请输入有效的 JSON 格式字符串", - "access.form.webhook_data_for_deployment.label": "Webhook 部署证书回调数据(可选)", - "access.form.webhook_data_for_deployment.placeholder": "请输入默认的 Webhook 回调数据(可在工作流中单独设置)", - "access.form.webhook_data_for_deployment.guide": "回调数据是一个 JSON 格式的数据。

          其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:
          1. ${DOMAIN}:证书的主域名(即 CommonName)。
          2. ${DOMAINS}:证书的多域名列表(即 SubjectAltNames)。
          3. ${CERTIFICATE}:证书文件 PEM 格式内容。
          4. ${SERVER_CERTIFICATE}:证书文件(仅含服务器证书)PEM 格式内容。
          5. ${INTERMEDIA_CERTIFICATE}:证书文件(仅含中间证书)PEM 格式内容。
          6. ${PRIVATE_KEY}:私钥文件 PEM 格式内容。

          当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:
          1. application/json(默认)。
          2. application/x-www-form-urlencoded:不支持嵌套数据。
          3. multipart/form-data:不支持嵌套数据。
          4. ", - "access.form.webhook_data_for_notification.label": "Webhook 推送通知回调数据(可选)", - "access.form.webhook_data_for_notification.placeholder": "请输入默认的 Webhook 回调数据(可在工作流中单独设置)", - "access.form.webhook_data_for_notification.guide": "回调数据是一个 JSON 格式的数据。

            其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:
            1. ${SUBJECT}:通知主题。
            2. ${MESSAGE}:通知内容。

            当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:
            1. application/json(默认)。
            2. application/x-www-form-urlencoded:不支持嵌套数据。
            3. multipart/form-data:不支持嵌套数据。
            4. ", + "access.form.webhook_data.label": "Webhook 回调数据(可选)", + "access.form.webhook_data.placeholder": "请输入默认的 Webhook 回调数据", + "access.form.webhook_data.help": "提示:可在工作流中覆盖此设置。", + "access.form.webhook_data.guide_for_deployment": "回调数据是一个 JSON 格式的数据。

              其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:
              1. ${DOMAIN}:证书的主域名(即 CommonName)。
              2. ${DOMAINS}:证书的多域名列表(即 SubjectAltNames)。
              3. ${CERTIFICATE}:证书文件 PEM 格式内容。
              4. ${SERVER_CERTIFICATE}:证书文件(仅含服务器证书)PEM 格式内容。
              5. ${INTERMEDIA_CERTIFICATE}:证书文件(仅含中间证书)PEM 格式内容。
              6. ${PRIVATE_KEY}:私钥文件 PEM 格式内容。

              当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:
              1. application/json(默认)。
              2. application/x-www-form-urlencoded:不支持嵌套数据。
              3. multipart/form-data:不支持嵌套数据。
              4. ", + "access.form.webhook_data.guide_for_notification": "回调数据是一个 JSON 格式的数据。

                其中值支持模板变量,将在被发送到指定的 Webhook URL 时被替换为实际值;其他内容将保持原样。支持的变量:
                1. ${SUBJECT}:通知主题。
                2. ${MESSAGE}:通知内容。

                当请求谓词为 GET 时,回调数据将作为查询参数;否则,回调数据将按照请求标头中 Content-Type 所指示的格式进行编码。支持的格式:
                1. application/json(默认)。
                2. application/x-www-form-urlencoded:不支持嵌套数据。
                3. multipart/form-data:不支持嵌套数据。
                4. ", "access.form.webhook_preset_data.button": "使用预设模板", "access.form.webhook_preset_data.option.bark.label": "Bark", "access.form.webhook_preset_data.option.gotify.label": "Gotify", diff --git a/ui/src/i18n/locales/zh/nls.provider.json b/ui/src/i18n/locales/zh/nls.provider.json index cf93fa71e..d58eb2727 100644 --- a/ui/src/i18n/locales/zh/nls.provider.json +++ b/ui/src/i18n/locales/zh/nls.provider.json @@ -1,6 +1,6 @@ { "provider.1panel": "1Panel", - "provider.1panel.console": "1Panel - 控制台", + "provider.1panel.console": "1Panel - 面板自身", "provider.1panel.site": "1Panel - 网站", "provider.acmeca": "ACME 自定义 CA 端点", "provider.acmehttpreq": "ACME 自定义 HTTP 端点", @@ -42,10 +42,10 @@ "provider.baishan": "白山云", "provider.baishan.cdn": "白山云 - 内容分发网络 CDN", "provider.baotapanel": "宝塔面板", - "provider.baotapanel.console": "宝塔面板 - 控制台", + "provider.baotapanel.console": "宝塔面板 - 面板自身", "provider.baotapanel.site": "宝塔面板 - 网站", "provider.baotawaf": "堡塔云 WAF", - "provider.baotawaf.console": "堡塔云 WAF - 控制台", + "provider.baotawaf.console": "堡塔云 WAF - 面板自身", "provider.baotawaf.site": "堡塔云 WAF - 网站", "provider.bunny": "Bunny", "provider.bunny.cdn": "Bunny - 内容分发网络 CDN", @@ -127,7 +127,7 @@ "provider.rainyun": "雨云", "provider.rainyun.rcdn": "雨云 - 雨盾 CDN", "provider.ratpanel": "耗子面板", - "provider.ratpanel.console": "耗子面板 - 控制台", + "provider.ratpanel.console": "耗子面板 - 面板自身", "provider.ratpanel.site": "耗子面板 - 网站", "provider.safeline": "雷池", "provider.slackbot": "Slack 机器人", @@ -194,5 +194,5 @@ "provider.category.other": "其他", "provider.text.default_ca_provider": "(默认)不指定,跟随全局设置", - "provider.text.show_available_hosting_provider_only": "仅列出可用的提供商(已添加过授权凭据)" + "provider.text.show_available_hosting_provider_only": "仅列出可用的提供商(即已添加过授权凭据的)" } diff --git a/ui/src/i18n/locales/zh/nls.workflow.nodes.json b/ui/src/i18n/locales/zh/nls.workflow.nodes.json index 1d6c74788..78589d0d6 100644 --- a/ui/src/i18n/locales/zh/nls.workflow.nodes.json +++ b/ui/src/i18n/locales/zh/nls.workflow.nodes.json @@ -30,7 +30,7 @@ "workflow_node.apply.form_anchor.strategy.title": "执行策略", "workflow_node.apply.form.domains.label": "域名", "workflow_node.apply.form.domains.placeholder": "请输入域名(多个值请用半角分号隔开)", - "workflow_node.apply.form.domains.tooltip": "泛域名表示形式为:*.example.com", + "workflow_node.apply.form.domains.help": "提示:多域名请用半角分号隔开;泛域名表示形式为 *.example.com。", "workflow_node.apply.form.domains.multiple_input_modal.title": "修改域名", "workflow_node.apply.form.domains.multiple_input_modal.placeholder": "请输入域名", "workflow_node.apply.form.contact_email.label": "联系邮箱", @@ -72,10 +72,10 @@ "workflow_node.apply.form.key_algorithm.placeholder": "请选择证书算法", "workflow_node.apply.form.acme_profile.label": "ACME 证书配置(可选)", "workflow_node.apply.form.acme_profile.placeholder": "请输入 ACME 证书配置", - "workflow_node.apply.form.acme_profile.tooltip": "表示证书颁发时使用的 ACME 证书配置。如果你不了解该选项的用途,保持默认即可。点此了解更多。", + "workflow_node.apply.form.acme_profile.tooltip": "表示证书颁发时使用的 ACME 证书配置。如果你不了解该选项的用途,保持默认即可。
                  点此了解更多。", "workflow_node.apply.form.nameservers.label": "DNS 递归服务器(可选)", "workflow_node.apply.form.nameservers.placeholder": "请输入 DNS 递归服务器(多个值请用半角分号隔开)", - "workflow_node.apply.form.nameservers.tooltip": "表示在 ACME DNS-01 质询时使用自定义的 DNS 递归服务器。如果你不了解该选项的用途,保持默认即可。点此了解更多。", + "workflow_node.apply.form.nameservers.tooltip": "表示在 ACME DNS-01 质询时使用自定义的 DNS 递归服务器。如果你不了解该选项的用途,保持默认即可。
                  点此了解更多。", "workflow_node.apply.form.nameservers.multiple_input_modal.title": "修改 DNS 递归服务器", "workflow_node.apply.form.nameservers.multiple_input_modal.placeholder": "请输入 DNS 递归服务器", "workflow_node.apply.form.dns_propagation_wait.label": "DNS 传播等待时间(可选)", @@ -85,11 +85,12 @@ "workflow_node.apply.form.dns_propagation_timeout.label": "DNS 传播检查超时时间(可选)", "workflow_node.apply.form.dns_propagation_timeout.placeholder": "请输入 DNS 传播检查超时时间", "workflow_node.apply.form.dns_propagation_timeout.unit": "秒", - "workflow_node.apply.form.dns_propagation_timeout.tooltip": "表示在 ACME DNS-01 质询时 DNS 传播检查的超时时间。如果你不了解此选项的用途,保持默认即可。
                  不填写时,将使用提供商提供的默认值。", + "workflow_node.apply.form.dns_propagation_timeout.tooltip": "表示在 ACME DNS-01 质询时 DNS 传播检查的超时时间。如果你不了解此选项的用途,保持默认即可。", "workflow_node.apply.form.dns_ttl.label": "DNS 解析记录 TTL(可选)", "workflow_node.apply.form.dns_ttl.placeholder": "请输入 DNS 解析记录 TTL", "workflow_node.apply.form.dns_ttl.unit": "秒", - "workflow_node.apply.form.dns_ttl.tooltip": "表示在 ACME DNS-01 质询时 DNS 解析记录的 TTL。如果你不了解此选项的用途,保持默认即可。
                  不填写时,将使用提供商提供的默认值。", + "workflow_node.apply.form.dns_ttl.help": "提示:不填写时,将使用 DNS 提供商指定的默认值。", + "workflow_node.apply.form.dns_ttl.tooltip": "表示在 ACME DNS-01 质询时 DNS 解析记录的 TTL。如果你不了解此选项的用途,保持默认即可。", "workflow_node.apply.form.disable_follow_cname.label": "阻止 CNAME 跟随", "workflow_node.apply.form.disable_follow_cname.tooltip": "在 ACME DNS-01 质询时是否阻止 CNAME 跟随。如果你不了解该选项的用途,保持默认即可。点此了解更多。", "workflow_node.apply.form.disable_ari.label": "阻止 ARI 续期", @@ -118,11 +119,12 @@ "workflow_node.monitor.form_anchor.parameters.tab": "参数设置", "workflow_node.monitor.form.guide": "Certimate 将向目标地址发送一个 HEAD 请求来获取相应的域名证书,请确保该地址可通过 HTTPS 协议访问。", "workflow_node.monitor.form.host.label": "主机地址", - "workflow_node.monitor.form.host.placeholder": "请输入主机地址(可以是域名或 IP)", + "workflow_node.monitor.form.host.placeholder": "请输入主机地址(域名或 IP)", "workflow_node.monitor.form.port.label": "主机端口", "workflow_node.monitor.form.port.placeholder": "请输入主机端口", "workflow_node.monitor.form.domain.label": "域名(可选)", - "workflow_node.monitor.form.domain.placeholder": "请输入域名(仅当主机地址为 IP 时可选)", + "workflow_node.monitor.form.domain.placeholder": "请输入域名", + "workflow_node.monitor.form.domain.help": "提示:仅当主机地址为 IP 时需要输入。", "workflow_node.monitor.form.request_path.label": "请求路径(可选)", "workflow_node.monitor.form.request_path.placeholder": "请输入请求路径", @@ -147,17 +149,18 @@ "workflow_node.deploy.form.1panel_console_auto_restart.label": "部署后自动重启 1Panel 服务", "workflow_node.deploy.form.1panel_site_node_name.label": "1Panel 子节点名称(可选)", "workflow_node.deploy.form.1panel_site_node_name.placeholder": "请输入 1Panel 子节点名称", - "workflow_node.deploy.form.1panel_site_node_name.tooltip": "请登录 1Panel 面板查看。仅 1Panel v2+ 需要。
                  不填写时,将替换主控节点证书;否则,将替换被控节点证书。", + "workflow_node.deploy.form.1panel_site_node_name.help": "提示:仅 1Panel v2+ 需要输入。不填写时,将替换主控节点证书;否则,将替换被控节点证书。", + "workflow_node.deploy.form.1panel_site_node_name.tooltip": "请登录 1Panel 面板查看", "workflow_node.deploy.form.1panel_site_resource_type.label": "证书部署方式", "workflow_node.deploy.form.1panel_site_resource_type.placeholder": "请选择证书部署方式", "workflow_node.deploy.form.1panel_site_resource_type.option.website.label": "替换指定网站的证书", "workflow_node.deploy.form.1panel_site_resource_type.option.certificate.label": "替换指定证书", "workflow_node.deploy.form.1panel_site_website_id.label": "1Panel 网站 ID", "workflow_node.deploy.form.1panel_site_website_id.placeholder": "请输入 1Panel 网站 ID", - "workflow_node.deploy.form.1panel_site_website_id.tooltip": "请登录 1Panel 面板查看。", + "workflow_node.deploy.form.1panel_site_website_id.tooltip": "请登录 1Panel 面板查看", "workflow_node.deploy.form.1panel_site_certificate_id.label": "1Panel 证书 ID", "workflow_node.deploy.form.1panel_site_certificate_id.placeholder": "请输入 1Panel 证书 ID", - "workflow_node.deploy.form.1panel_site_certificate_id.tooltip": "请登录 1Panel 面板查看。", + "workflow_node.deploy.form.1panel_site_certificate_id.tooltip": "请登录 1Panel 面板查看", "workflow_node.deploy.form.aliyun_alb_region.label": "阿里云 ALB 服务地域", "workflow_node.deploy.form.aliyun_alb_region.placeholder": "请输入阿里云 ALB 服务地域(例如:cn-hangzhou)", "workflow_node.deploy.form.aliyun_alb_region.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/slb/application-load-balancer/product-overview/supported-regions-and-zones", @@ -173,7 +176,8 @@ "workflow_node.deploy.form.aliyun_alb_listener_id.tooltip": "这是什么?请参阅 https://slb.console.aliyun.com/alb", "workflow_node.deploy.form.aliyun_alb_snidomain.label": "阿里云 ALB 扩展域名(可选)", "workflow_node.deploy.form.aliyun_alb_snidomain.placeholder": "请输入阿里云 ALB 扩展域名(支持泛域名)", - "workflow_node.deploy.form.aliyun_alb_snidomain.tooltip": "这是什么?请参阅 https://slb.console.aliyun.com/alb
                  不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.aliyun_alb_snidomain.help": "提示:不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.aliyun_alb_snidomain.tooltip": "这是什么?请参阅 https://slb.console.aliyun.com/alb", "workflow_node.deploy.form.aliyun_apigw_service_type.label": "阿里云 API 网关服务类型", "workflow_node.deploy.form.aliyun_apigw_service_type.placeholder": "请选择阿里云 API 网关服务类型", "workflow_node.deploy.form.aliyun_apigw_service_type.option.cloudnative.label": "云原生 API 网关", @@ -193,22 +197,24 @@ "workflow_node.deploy.form.aliyun_cas_region.label": "阿里云 CAS 服务地域", "workflow_node.deploy.form.aliyun_cas_region.placeholder": "请输入阿里云 CAS 服务地域(例如:cn-hangzhou)", "workflow_node.deploy.form.aliyun_cas_region.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/ssl-certificate/developer-reference/endpoints", - "workflow_node.deploy.form.aliyun_cas_deploy.guide": "将通过阿里云 OpenAPI CreateDeploymentJob 接口创建异步部署任务。此部署目标若执行成功仅代表已创建部署任务,实际部署结果需要你自行前往阿里云控制台查询。", - "workflow_node.deploy.form.aliyun_cas_deploy_region.label": "阿里云 CAS 服务地域", - "workflow_node.deploy.form.aliyun_cas_deploy_region.placeholder": "请输入阿里云 CAS 服务地域(例如:cn-hangzhou)", - "workflow_node.deploy.form.aliyun_cas_deploy_region.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/ssl-certificate/developer-reference/endpoints", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.label": "阿里云云产品资源 ID", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.placeholder": "请输入阿里云云产品资源 ID(多个值请用半角分号隔开)", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.errmsg.invalid": "请输入正确的阿里云云产品资源 ID", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/ssl-certificate/developer-reference/api-cas-2020-04-07-listcloudresources
                  仅支持阿里云产品,注意与各产品本身的实例 ID 区分。", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.multiple_input_modal.title": "修改阿里云云产品资源 ID", - "workflow_node.deploy.form.aliyun_cas_deploy_resource_ids.multiple_input_modal.placeholder": "请输入阿里云云产品资源 ID", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.label": "阿里云联系人 ID(可选)", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.placeholder": "请输入阿里云联系人 ID(多个值请用半角分号隔开)", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.errmsg.invalid": "请输入正确的阿里云联系人 ID", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/ssl-certificate/developer-reference/api-cas-2020-04-07-listcontact
                  不填写时,将使用系统联系人列表中的第一个。", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.multiple_input_modal.title": "修改阿里云联系人 ID", - "workflow_node.deploy.form.aliyun_cas_deploy_contact_ids.multiple_input_modal.placeholder": "请输入阿里云联系人 ID", + "workflow_node.deploy.form.aliyun_casdeploy.guide": "将通过阿里云 OpenAPI CreateDeploymentJob 接口创建异步部署任务。此部署目标若执行成功仅代表已创建部署任务,实际部署结果需要你自行前往阿里云控制台查询。", + "workflow_node.deploy.form.aliyun_casdeploy_region.label": "阿里云 CAS 服务地域", + "workflow_node.deploy.form.aliyun_casdeploy_region.placeholder": "请输入阿里云 CAS 服务地域(例如:cn-hangzhou)", + "workflow_node.deploy.form.aliyun_casdeploy_region.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/ssl-certificate/developer-reference/endpoints", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.label": "阿里云云产品资源 ID", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.placeholder": "请输入阿里云云产品资源 ID(多个值请用半角分号隔开)", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.errmsg.invalid": "请输入正确的阿里云云产品资源 ID", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.help": "提示:多个 ID 请用半角分号隔开。仅支持阿里云产品,注意与各产品本身的实例 ID 区分。", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/ssl-certificate/developer-reference/api-cas-2020-04-07-listcloudresources", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.multiple_input_modal.title": "修改阿里云云产品资源 ID", + "workflow_node.deploy.form.aliyun_casdeploy_resource_ids.multiple_input_modal.placeholder": "请输入阿里云云产品资源 ID", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.label": "阿里云联系人 ID(可选)", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.placeholder": "请输入阿里云联系人 ID(多个值请用半角分号隔开)", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.errmsg.invalid": "请输入正确的阿里云联系人 ID", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.help": "提示:多个 ID 请用半角分号隔开。不填写时,将使用系统联系人列表中的第一个。", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/ssl-certificate/developer-reference/api-cas-2020-04-07-listcontact", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.multiple_input_modal.title": "修改阿里云联系人 ID", + "workflow_node.deploy.form.aliyun_casdeploy_contact_ids.multiple_input_modal.placeholder": "请输入阿里云联系人 ID", "workflow_node.deploy.form.aliyun_clb_region.label": "阿里云 CLB 服务地域", "workflow_node.deploy.form.aliyun_clb_region.placeholder": "请输入阿里云 CLB 服务地域(例如:cn-hangzhou)", "workflow_node.deploy.form.aliyun_clb_region.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/slb/classic-load-balancer/product-overview/regions-that-support-clb", @@ -224,7 +230,8 @@ "workflow_node.deploy.form.aliyun_clb_listener_port.tooltip": "这是什么?请参阅 https://slb.console.aliyun.com/clb", "workflow_node.deploy.form.aliyun_clb_snidomain.label": "阿里云 CLB 扩展域名(可选)", "workflow_node.deploy.form.aliyun_clb_snidomain.placeholder": "请输入阿里云 CLB 扩展域名(支持泛域名)", - "workflow_node.deploy.form.aliyun_clb_snidomain.tooltip": "这是什么?请参阅 https://slb.console.aliyun.com/clb
                  不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.aliyun_clb_snidomain.help": "提示:不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.aliyun_clb_snidomain.tooltip": "这是什么?请参阅 https://slb.console.aliyun.com/clb", "workflow_node.deploy.form.aliyun_cdn_domain.label": "阿里云 CDN 加速域名", "workflow_node.deploy.form.aliyun_cdn_domain.placeholder": "请输入阿里云 CDN 加速域名(支持泛域名)", "workflow_node.deploy.form.aliyun_cdn_domain.tooltip": "这是什么?请参阅 https://cdn.console.aliyun.com", @@ -263,7 +270,8 @@ "workflow_node.deploy.form.aliyun_ga_listener_id.tooltip": "这是什么?请参阅 https://ga.console.aliyun.com", "workflow_node.deploy.form.aliyun_ga_snidomain.label": "阿里云全球加速扩展域名(可选)", "workflow_node.deploy.form.aliyun_ga_snidomain.placeholder": "请输入阿里云全球加速扩展域名", - "workflow_node.deploy.form.aliyun_ga_snidomain.tooltip": "这是什么?请参阅 https://ga.console.aliyun.com
                  不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.aliyun_ga_snidomain.help": "提示:不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.aliyun_ga_snidomain.tooltip": "这是什么?请参阅 https://ga.console.aliyun.com", "workflow_node.deploy.form.aliyun_live_region.label": "阿里云视频直播服务地域", "workflow_node.deploy.form.aliyun_live_region.placeholder": "请输入阿里云视频直播服务地域(例如:cn-hangzhou)", "workflow_node.deploy.form.aliyun_live_region.tooltip": "这是什么?请参阅 https://help.aliyun.com/zh/live/product-overview/supported-regions", @@ -308,19 +316,20 @@ "workflow_node.deploy.form.aliyun_waf_instance_id.tooltip": "这是什么?请参阅 https://waf.console.aliyun.com
                  仅支持 CNAME 接入。", "workflow_node.deploy.form.aliyun_waf_domain.label": "阿里云 WAF 接入域名(可选)", "workflow_node.deploy.form.aliyun_waf_domain.placeholder": "请输入阿里云 WAF 接入域名(支持泛域名)", - "workflow_node.deploy.form.aliyun_waf_domain.tooltip": "这是什么?请参阅 waf.console.aliyun.com
                  不填写时,将替换实例的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.aliyun_waf_domain.help": "提示:不填写时,将替换实例的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.aliyun_waf_domain.tooltip": "这是什么?请参阅 waf.console.aliyun.com", "workflow_node.deploy.form.apisix_resource_type.label": "证书部署方式", "workflow_node.deploy.form.apisix_resource_type.placeholder": "请选择证书部署方式", "workflow_node.deploy.form.apisix_resource_type.option.certificate.label": "替换指定证书", "workflow_node.deploy.form.apisix_certificate_id.label": "APISIX 证书 ID", "workflow_node.deploy.form.apisix_certificate_id.placeholder": "请输入 APISIX 证书 ID", - "workflow_node.deploy.form.apisix_certificate_id.tooltip": "请登录 APISIX 控制台查看。", + "workflow_node.deploy.form.apisix_certificate_id.tooltip": "请登录 APISIX 控制台查看", "workflow_node.deploy.form.aws_acm_region.label": "AWS ACM 服务区域", "workflow_node.deploy.form.aws_acm_region.placeholder": "请输入 AWS ACM 服务区域(例如:us-east-1)", "workflow_node.deploy.form.aws_acm_region.tooltip": "这是什么?请参阅 https://docs.aws.amazon.com/zh_cn/general/latest/gr/rande.html#regional-endpoints", "workflow_node.deploy.form.aws_acm_certificate_arn.label": "AWS ACM 证书 ARN(可选)", "workflow_node.deploy.form.aws_acm_certificate_arn.placeholder": "请输入 AWS ACM 证书 ARN", - "workflow_node.deploy.form.aws_acm_certificate_arn.tooltip": "不填写时,将导入为新证书。", + "workflow_node.deploy.form.aws_acm_certificate_arn.help": "提示:不填写时,将导入为新证书;否则,将替换原证书。", "workflow_node.deploy.form.aws_cloudfront_region.label": "AWS CloudFront 服务区域", "workflow_node.deploy.form.aws_cloudfront_region.placeholder": "请输入 AWS CloudFront 服务区域(例如:us-east-1)", "workflow_node.deploy.form.aws_cloudfront_region.tooltip": "这是什么?请参阅 https://docs.aws.amazon.com/zh_cn/general/latest/gr/rande.html#regional-endpoints", @@ -341,8 +350,8 @@ "workflow_node.deploy.form.azure_keyvault_name.tooltip": "这是什么?请参阅 https://learn.microsoft.com/zh-cn/azure/key-vault/general/about-keys-secrets-certificates", "workflow_node.deploy.form.azure_keyvault_certificate_name.label": "Azure KeyVault 证书名称(可选)", "workflow_node.deploy.form.azure_keyvault_certificate_name.placeholder": "请输入 Azure KeyVault 证书名称", - "workflow_node.deploy.form.azure_keyvault_certificate_name.tooltip": "不填写时,将由 Certimate 自动生成证书名称。", "workflow_node.deploy.form.azure_keyvault_certificate_name.errmsg.invalid": "证书名称只能包含字母、数字和连字符(-),长度限制为 1 到 127 个字符", + "workflow_node.deploy.form.azure_keyvault_certificate_name.help": "提示:不填写时,将由 Certimate 自动生成证书名称。", "workflow_node.deploy.form.baiducloud_appblb_region.label": "百度智能云 BLB 服务地域", "workflow_node.deploy.form.baiducloud_appblb_region.placeholder": "请输入百度智能云 BLB 服务地域(例如:bj)", "workflow_node.deploy.form.baiducloud_appblb_region.tooltip": "这是什么?请参阅 https://cloud.baidu.com/doc/BLB/s/cjwvxnzix", @@ -358,7 +367,8 @@ "workflow_node.deploy.form.baiducloud_appblb_listener_port.tooltip": "这是什么?请参阅 https://console.bce.baidu.com/blb/#/appblb/list", "workflow_node.deploy.form.baiducloud_appblb_snidomain.label": "百度智能云 BLB 扩展域名(可选)", "workflow_node.deploy.form.baiducloud_appblb_snidomain.placeholder": "请输入百度智能云 BLB 扩展域名(支持泛域名)", - "workflow_node.deploy.form.baiducloud_appblb_snidomain.tooltip": "这是什么?请参阅 https://console.bce.baidu.com/blb/#/appblb/list
                  不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.baiducloud_appblb_snidomain.help": "提示:不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.baiducloud_appblb_snidomain.tooltip": "这是什么?请参阅 https://console.bce.baidu.com/blb/#/appblb/list", "workflow_node.deploy.form.baiducloud_blb_region.label": "百度智能云 BLB 服务地域", "workflow_node.deploy.form.baiducloud_blb_region.placeholder": "请输入百度智能云 BLB 服务地域(例如:bj)", "workflow_node.deploy.form.baiducloud_blb_region.tooltip": "这是什么?请参阅 https://cloud.baidu.com/doc/BLB/s/cjwvxnzix", @@ -374,7 +384,8 @@ "workflow_node.deploy.form.baiducloud_blb_listener_port.tooltip": "这是什么?请参阅 https://console.bce.baidu.com/blb/#/blb/list", "workflow_node.deploy.form.baiducloud_blb_snidomain.label": "百度智能云 BLB 扩展域名(可选)", "workflow_node.deploy.form.baiducloud_blb_snidomain.placeholder": "请输入百度智能云 BLB 扩展域名(支持泛域名)", - "workflow_node.deploy.form.baiducloud_blb_snidomain.tooltip": "这是什么?请参阅 https://console.bce.baidu.com/blb/#/blb/list
                  不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.baiducloud_blb_snidomain.help": "提示:不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.baiducloud_blb_snidomain.tooltip": "这是什么?请参阅 https://console.bce.baidu.com/blb/#/blb/list", "workflow_node.deploy.form.baiducloud_cdn_domain.label": "百度智能云 CDN 加速域名", "workflow_node.deploy.form.baiducloud_cdn_domain.placeholder": "请输入百度智能云 CDN 加速域名(支持泛域名)", "workflow_node.deploy.form.baiducloud_cdn_domain.tooltip": "这是什么?请参阅 https://console.bce.baidu.com/cdn", @@ -383,24 +394,26 @@ "workflow_node.deploy.form.baishan_cdn_domain.tooltip": "这是什么?请参阅 https://cdnx.console.baishan.com", "workflow_node.deploy.form.baishan_cdn_certificate_id.label": "白山云 CDN 原证书 ID(可选)", "workflow_node.deploy.form.baishan_cdn_certificate_id.placeholder": "请输入白山云 CDN 原证书 ID", - "workflow_node.deploy.form.baishan_cdn_certificate_id.tooltip": "这是什么?请参阅 https://cdnx.console.baishan.com/#/cdn/cert
                  不填写时,将上传新证书;否则,将替换原证书。", + "workflow_node.deploy.form.baishan_cdn_certificate_id.help": "提示:不填写时,将上传为新证书;否则,将替换原证书。", + "workflow_node.deploy.form.baishan_cdn_certificate_id.tooltip": "这是什么?请参阅 https://cdnx.console.baishan.com/#/cdn/cert", "workflow_node.deploy.form.baotapanel_console_auto_restart.label": "部署后自动重启宝塔面板服务", "workflow_node.deploy.form.baotapanel_site_type.label": "宝塔面板网站类型", "workflow_node.deploy.form.baotapanel_site_type.placeholder": "请选择宝塔面板网站类型", "workflow_node.deploy.form.baotapanel_site_type.option.php.label": "PHP", - "workflow_node.deploy.form.baotapanel_site_type.option.other.label": "其他", + "workflow_node.deploy.form.baotapanel_site_type.option.other.label": "任意类型(需宝塔面板 v9.4+)", "workflow_node.deploy.form.baotapanel_site_name.label": "宝塔面板网站名称", "workflow_node.deploy.form.baotapanel_site_name.placeholder": "请输入宝塔面板网站名称", - "workflow_node.deploy.form.baotapanel_site_name.tooltip": "请登录宝塔面板查看。", + "workflow_node.deploy.form.baotapanel_site_name.tooltip": "请登录宝塔面板查看", "workflow_node.deploy.form.baotapanel_site_names.label": "宝塔面板网站名称", "workflow_node.deploy.form.baotapanel_site_names.placeholder": "请输入宝塔面板网站名称(多个值请用半角分号隔开)", "workflow_node.deploy.form.baotapanel_site_names.errmsg.invalid": "请输入正确的宝塔面板网站名称", - "workflow_node.deploy.form.baotapanel_site_names.tooltip": "请登录宝塔面板查看。", + "workflow_node.deploy.form.baotapanel_site_names.help": "提示:多个网站名称请用半角分号隔开。", + "workflow_node.deploy.form.baotapanel_site_names.tooltip": "请登录宝塔面板查看", "workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.title": "修改宝塔面板网站名称", "workflow_node.deploy.form.baotapanel_site_names.multiple_input_modal.placeholder": "请输入宝塔面板网站名称", "workflow_node.deploy.form.baotawaf_site_name.label": "堡塔云 WAF 网站名称", "workflow_node.deploy.form.baotawaf_site_name.placeholder": "请输入堡塔云 WAF 网站名称", - "workflow_node.deploy.form.baotawaf_site_name.tooltip": "请登录堡塔云 WAF 面板查看。", + "workflow_node.deploy.form.baotawaf_site_name.tooltip": "请登录堡塔云 WAF 面板查看", "workflow_node.deploy.form.baotawaf_site_port.label": "堡塔云 WAF 网站 SSL 端口", "workflow_node.deploy.form.baotawaf_site_port.placeholder": "请输入堡塔云 WAF 网站 SSL 端口", "workflow_node.deploy.form.bunny_cdn_pull_zone_id.label": "Bunny CDN 拉取区域 ID", @@ -418,10 +431,10 @@ "workflow_node.deploy.form.cdnfly_resource_type.option.certificate.label": "替换指定证书", "workflow_node.deploy.form.cdnfly_site_id.label": "Cdnfly 网站 ID", "workflow_node.deploy.form.cdnfly_site_id.placeholder": "请输入 Cdnfly 网站 ID", - "workflow_node.deploy.form.cdnfly_site_id.tooltip": "请登录 Cdnfly 控制台查看。", + "workflow_node.deploy.form.cdnfly_site_id.tooltip": "请登录 Cdnfly 控制台查看", "workflow_node.deploy.form.cdnfly_certificate_id.label": "Cdnfly 证书 ID", "workflow_node.deploy.form.cdnfly_certificate_id.placeholder": "请输入 Cdnfly 证书 ID", - "workflow_node.deploy.form.cdnfly_certificate_id.tooltip": "请登录 Cdnfly 控制台查看。", + "workflow_node.deploy.form.cdnfly_certificate_id.tooltip": "请登录 Cdnfly 控制台查看", "workflow_node.deploy.form.ctcccloud_ao_domain.label": "天翼云 AccessOne 加速域名", "workflow_node.deploy.form.ctcccloud_ao_domain.placeholder": "请输入天翼云 AccessOne 加速域名(支持泛域名)", "workflow_node.deploy.form.ctcccloud_ao_domain.tooltip": "这是什么?请参阅 https://cdn.ctyun.cn/h5/ctaccessone/", @@ -458,19 +471,20 @@ "workflow_node.deploy.form.flexcdn_resource_type.option.certificate.label": "替换指定证书", "workflow_node.deploy.form.flexcdn_certificate_id.label": "FlexCDN 证书 ID", "workflow_node.deploy.form.flexcdn_certificate_id.placeholder": "请输入 FlexCDN 证书 ID", - "workflow_node.deploy.form.flexcdn_certificate_id.tooltip": "请登录 FlexCDN 控制台查看。", + "workflow_node.deploy.form.flexcdn_certificate_id.tooltip": "请登录 FlexCDN 控制台查看", "workflow_node.deploy.form.gcore_cdn_resource_id.label": "Gcore CDN 资源 ID", "workflow_node.deploy.form.gcore_cdn_resource_id.placeholder": "请输入 Gcore CDN 资源 ID", "workflow_node.deploy.form.gcore_cdn_resource_id.tooltip": "这是什么?请参阅 https://cdn.gcore.com/resources/list", "workflow_node.deploy.form.gcore_cdn_certificate_id.label": "Gcore CDN 原证书 ID(可选)", "workflow_node.deploy.form.gcore_cdn_certificate_id.placeholder": "请输入 Gcore CDN 原证书 ID", - "workflow_node.deploy.form.gcore_cdn_certificate_id.tooltip": "这是什么?请参阅 https://cdn.gcore.com/ssl
                  不填写时,将上传新证书;否则,将替换原证书。", + "workflow_node.deploy.form.gcore_cdn_certificate_id.help": "提示:不填写时,将上传新证书;否则,将替换原证书。", + "workflow_node.deploy.form.gcore_cdn_certificate_id.tooltip": "这是什么?请参阅 https://cdn.gcore.com/ssl", "workflow_node.deploy.form.goedge_resource_type.label": "证书部署方式", "workflow_node.deploy.form.goedge_resource_type.placeholder": "请选择证书部署方式", "workflow_node.deploy.form.goedge_resource_type.option.certificate.label": "替换指定证书", "workflow_node.deploy.form.goedge_certificate_id.label": "GoEdge 证书 ID", "workflow_node.deploy.form.goedge_certificate_id.placeholder": "请输入 GoEdge 证书 ID", - "workflow_node.deploy.form.goedge_certificate_id.tooltip": "请登录 GoEdge 控制台查看。", + "workflow_node.deploy.form.goedge_certificate_id.tooltip": "请登录 GoEdge 控制台查看", "workflow_node.deploy.form.huaweicloud_cdn_region.label": "华为云 CDN 服务区域", "workflow_node.deploy.form.huaweicloud_cdn_region.placeholder": "请输入华为云 CDN 服务区域(例如:cn-north-1)", "workflow_node.deploy.form.huaweicloud_cdn_region.tooltip": "这是什么?请参阅 https://console.huaweicloud.com/apiexplorer/#/endpoint", @@ -523,7 +537,8 @@ "workflow_node.deploy.form.jdcloud_alb_listener_id.tooltip": "这是什么?请参阅 https://cns-console.jdcloud.com/host/loadBalance/list", "workflow_node.deploy.form.jdcloud_alb_snidomain.label": "京东云 ALB 扩展域名(可选)", "workflow_node.deploy.form.jdcloud_alb_snidomain.placeholder": "请输入京东云 ALB 扩展域名(支持泛域名)", - "workflow_node.deploy.form.jdcloud_alb_snidomain.tooltip": "这是什么?请参阅 https://cns-console.jdcloud.com/host/loadBalance/list
                  不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.jdcloud_alb_snidomain.help": "提示:不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.jdcloud_alb_snidomain.tooltip": "这是什么?请参阅 https://cns-console.jdcloud.com/host/loadBalance/list", "workflow_node.deploy.form.jdcloud_cdn_domain.label": "京东云 CDN 加速域名", "workflow_node.deploy.form.jdcloud_cdn_domain.placeholder": "请输入京东云 CDN 加速域名(支持泛域名)", "workflow_node.deploy.form.jdcloud_cdn_domain.tooltip": "这是什么?请参阅 https://cdn-console.jdcloud.com", @@ -553,16 +568,16 @@ "workflow_node.deploy.form.kong_resource_type.option.certificate.label": "替换指定证书", "workflow_node.deploy.form.kong_workspace.label": "Kong 工作空间(可选)", "workflow_node.deploy.form.kong_workspace.placeholder": "请输入 Kong 工作空间", - "workflow_node.deploy.form.kong_workspace.tooltip": "请登录 Kong 控制台查看。", + "workflow_node.deploy.form.kong_workspace.tooltip": "请登录 Kong 控制台查看", "workflow_node.deploy.form.kong_certificate_id.label": "Kong 证书 ID", "workflow_node.deploy.form.kong_certificate_id.placeholder": "请输入 Kong 证书 ID", - "workflow_node.deploy.form.kong_certificate_id.tooltip": "请登录 Kong 控制台查看。", + "workflow_node.deploy.form.kong_certificate_id.tooltip": "请登录 Kong 控制台查看", "workflow_node.deploy.form.lecdn_resource_type.label": "证书部署方式", "workflow_node.deploy.form.lecdn_resource_type.placeholder": "请选择证书部署方式", "workflow_node.deploy.form.lecdn_resource_type.option.certificate.label": "替换指定证书", "workflow_node.deploy.form.lecdn_certificate_id.label": "LeCDN 证书 ID", "workflow_node.deploy.form.lecdn_certificate_id.placeholder": "请输入 LeCDN 证书 ID", - "workflow_node.deploy.form.lecdn_certificate_id.tooltip": "请登录 LeCDN 控制台查看。", + "workflow_node.deploy.form.lecdn_certificate_id.tooltip": "请登录 LeCDN 控制台查看", "workflow_node.deploy.form.lecdn_client_id.label": "LeCDN 客户 ID(可选)", "workflow_node.deploy.form.lecdn_client_id.placeholder": "请输入 LeCDN 客户 ID", "workflow_node.deploy.form.lecdn_client_id.tooltip": "请登录 LeCDN 控制台查看。
                  使用的是系统管理员的授权信息时必填,需与证书所属客户相同。", @@ -574,16 +589,16 @@ "workflow_node.deploy.form.local_format.option.jks.label": "JKS 格式(*.jks)", "workflow_node.deploy.form.local_cert_path.label": "证书文件保存路径", "workflow_node.deploy.form.local_cert_path.placeholder": "请输入证书文件保存路径", - "workflow_node.deploy.form.local_cert_path.tooltip": "注意,路径需包含完整的文件名,而不是仅目录。", + "workflow_node.deploy.form.local_cert_path.help": "注意:路径需包含完整的文件名,而不是只有目录。", "workflow_node.deploy.form.local_key_path.label": "证书私钥文件保存路径", "workflow_node.deploy.form.local_key_path.placeholder": "请输入证书私钥文件保存路径", - "workflow_node.deploy.form.local_key_path.tooltip": "注意,路径需包含完整的文件名,而不是仅目录。", + "workflow_node.deploy.form.local_key_path.help": "注意:路径需包含完整的文件名,而不是只有目录。", "workflow_node.deploy.form.local_servercert_path.label": "服务器证书文件保存路径(可选)", "workflow_node.deploy.form.local_servercert_path.placeholder": "请输入服务器证书文件保存路径", - "workflow_node.deploy.form.local_servercert_path.tooltip": "不填写时将不会保存服务器证书。
                  注意,路径需包含完整的文件名,而不是仅目录。", + "workflow_node.deploy.form.local_servercert_path.help": "注意:路径需包含完整的文件名,而不是只有目录。不填写时将不会保存服务器证书。", "workflow_node.deploy.form.local_intermediacert_path.label": "中间证书文件保存路径(可选)", "workflow_node.deploy.form.local_intermediacert_path.placeholder": "请输入中间证书文件保存路径", - "workflow_node.deploy.form.local_intermediacert_path.tooltip": "不填写时将不会保存服务器证书。
                  注意,路径需包含完整的文件名,而不是仅目录。", + "workflow_node.deploy.form.local_intermediacert_path.help": "注意:路径需包含完整的文件名,而不是只有目录。不填写时将不会保存中间证书。", "workflow_node.deploy.form.local_pfx_password.label": "PFX 导出密码", "workflow_node.deploy.form.local_pfx_password.placeholder": "请输入 PFX 导出密码", "workflow_node.deploy.form.local_pfx_password.tooltip": "这是什么?请参阅 https://learn.microsoft.com/zh-cn/windows-hardware/drivers/install/personal-information-exchange---pfx--files", @@ -638,13 +653,13 @@ "workflow_node.deploy.form.rainyun_rcdn_domain.tooltip": "这是什么?请参阅 https://app.rainyun.com/apps/rcdn/list", "workflow_node.deploy.form.ratpanel_site_name.label": "耗子面板网站名称", "workflow_node.deploy.form.ratpanel_site_name.placeholder": "请输入耗子面板网站名称", - "workflow_node.deploy.form.ratpanel_site_name.tooltip": "请登录耗子面板查看。", + "workflow_node.deploy.form.ratpanel_site_name.tooltip": "请登录耗子面板查看", "workflow_node.deploy.form.safeline_resource_type.label": "证书部署方式", "workflow_node.deploy.form.safeline_resource_type.placeholder": "请选择证书部署方式", "workflow_node.deploy.form.safeline_resource_type.option.certificate.label": "替换指定证书", "workflow_node.deploy.form.safeline_certificate_id.label": "雷池证书 ID", "workflow_node.deploy.form.safeline_certificate_id.placeholder": "请输入雷池证书 ID", - "workflow_node.deploy.form.safeline_certificate_id.tooltip": "请登录雷池控制台查看。", + "workflow_node.deploy.form.safeline_certificate_id.tooltip": "请登录雷池控制台查看", "workflow_node.deploy.form.ssh_format.label": "文件格式", "workflow_node.deploy.form.ssh_format.placeholder": "请选择文件格式", "workflow_node.deploy.form.ssh_format.option.pem.label": "PEM 格式(*.pem, *.crt, *.key)", @@ -652,17 +667,17 @@ "workflow_node.deploy.form.ssh_format.option.jks.label": "JKS 格式(*.jks)", "workflow_node.deploy.form.ssh_cert_path.label": "证书文件上传路径", "workflow_node.deploy.form.ssh_cert_path.placeholder": "请输入证书文件上传路径", - "workflow_node.deploy.form.ssh_cert_path.tooltip": "注意,路径需包含完整的文件名,而不是仅目录。", + "workflow_node.deploy.form.ssh_cert_path.help": "注意:路径需包含完整的文件名,而不是只有目录。", "workflow_node.deploy.form.ssh_key_path.label": "证书私钥文件上传路径", "workflow_node.deploy.form.ssh_key_path.placeholder": "请输入证书私钥文件上传路径", - "workflow_node.deploy.form.ssh_key_path.tooltip": "注意,路径需包含完整的文件名,而不是仅目录。", + "workflow_node.deploy.form.ssh_key_path.help": "注意:路径需包含完整的文件名,而不是只有目录。", "workflow_node.deploy.form.ssh_pfx_password.label": "PFX 导出密码", "workflow_node.deploy.form.ssh_servercert_path.label": "服务器证书文件上传路径(可选)", "workflow_node.deploy.form.ssh_servercert_path.placeholder": "请输入服务器证书文件上传路径", - "workflow_node.deploy.form.ssh_servercert_path.tooltip": "不填写时将不上传服务器证书。
                  注意,路径需包含完整的文件名,而不是仅目录。", + "workflow_node.deploy.form.ssh_servercert_path.help": "注意:路径需包含完整的文件名,而不是只有目录。不填写时将不上传服务器证书。", "workflow_node.deploy.form.ssh_intermediacert_path.label": "中间证书文件上传路径(可选)", "workflow_node.deploy.form.ssh_intermediacert_path.placeholder": "请输入中间证书文件上传路径", - "workflow_node.deploy.form.ssh_intermediacert_path.tooltip": "不填写时将不上传服务器证书。
                  注意,路径需包含完整的文件名,而不是仅目录。", + "workflow_node.deploy.form.ssh_intermediacert_path.help": "注意:路径需包含完整的文件名,而不是只有目录。不填写时将不上传中间证书。", "workflow_node.deploy.form.ssh_pfx_password.placeholder": "请输入 PFX 导出密码", "workflow_node.deploy.form.ssh_pfx_password.tooltip": "这是什么?请参阅 https://learn.microsoft.com/zh-cn/windows-hardware/drivers/install/personal-information-exchange---pfx--files", "workflow_node.deploy.form.ssh_jks_alias.label": "JKS 别名", @@ -716,7 +731,8 @@ "workflow_node.deploy.form.tencentcloud_clb_listener_id.tooltip": "这是什么?请参阅 https://console.cloud.tencent.com/clb", "workflow_node.deploy.form.tencentcloud_clb_snidomain.label": "腾讯云 CLB SNI 域名(可选)", "workflow_node.deploy.form.tencentcloud_clb_snidomain.placeholder": "请输入腾讯云 CLB SNI 域名", - "workflow_node.deploy.form.tencentcloud_clb_snidomain.tooltip": "这是什么?请参阅 https://console.cloud.tencent.com/clb
                  不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.tencentcloud_clb_snidomain.help": "提示:不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.tencentcloud_clb_snidomain.tooltip": "这是什么?请参阅 https://console.cloud.tencent.com/clb", "workflow_node.deploy.form.tencentcloud_clb_ruledomain.label": "腾讯云 CLB 七层转发规则域名", "workflow_node.deploy.form.tencentcloud_clb_ruledomain.placeholder": "请输入腾讯云 CLB 七层转发规则域名", "workflow_node.deploy.form.tencentcloud_clb_ruledomain.tooltip": "这是什么?请参阅 https://console.cloud.tencent.com/clb", @@ -749,6 +765,7 @@ "workflow_node.deploy.form.tencentcloud_eo_zone_id.tooltip": "这是什么?请参阅 https://console.cloud.tencent.com/edgeone", "workflow_node.deploy.form.tencentcloud_eo_domains.label": "腾讯云 EdgeOne 加速域名", "workflow_node.deploy.form.tencentcloud_eo_domains.placeholder": "请输入腾讯云 EdgeOne 加速域名(支持泛域名;多个值请用半角分号隔开)", + "workflow_node.deploy.form.tencentcloud_eo_domains.help": "提示:多个域名请用半角分号隔开。", "workflow_node.deploy.form.tencentcloud_eo_domains.tooltip": "这是什么?请参阅 https://console.cloud.tencent.com/edgeone", "workflow_node.deploy.form.tencentcloud_eo_domains.multiple_input_modal.title": "修改腾讯云 EdgeOne 加速域名", "workflow_node.deploy.form.tencentcloud_eo_domains.multiple_input_modal.placeholder": "请输入腾讯云 EdgeOne 加速域名(支持泛域名)", @@ -776,41 +793,44 @@ "workflow_node.deploy.form.tencentcloud_ssl_endpoint.label": "腾讯云 SSL 接口端点(可选)", "workflow_node.deploy.form.tencentcloud_ssl_endpoint.placeholder": "请输入腾讯云 SSL 接口端点(例如:ssl.tencentcloudapi.com)", "workflow_node.deploy.form.tencentcloud_ssl_endpoint.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/41659
                  国际站用户请填写 ssl.intl.tencentcloudapi.com。", - "workflow_node.deploy.form.tencentcloud_ssl_deploy.guide": "将通过腾讯云 OpenAPI DeployCertificateInstance 接口创建异步部署任务。此部署目标若执行成功仅代表已创建部署任务,实际部署结果需要你自行前往腾讯云控制台查询。", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_endpoint.label": "腾讯云 SSL 接口端点(可选)", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_endpoint.placeholder": "请输入腾讯云 SSL 接口端点(例如:ssl.tencentcloudapi.com)", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_endpoint.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/41659
                  国际站用户请填写 ssl.intl.tencentcloudapi.com。", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_region.label": "腾讯云云产品地域", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_region.placeholder": "请输入腾讯云云产品地域(例如:ap-guangzhou)", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_region.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/41659", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_type.label": "腾讯云云产品资源类型", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_type.placeholder": "请输入腾讯云产品资源类型", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_type.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/91667", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.label": "腾讯云云产品资源 ID", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.placeholder": "请输入腾讯云云产品资源 ID(多个值请用半角分号隔开)", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.errmsg.invalid": "请输入正确的腾讯云云产品资源 ID", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/91667
                  注意与各产品本身的实例 ID 区分。", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.multiple_input_modal.title": "修改腾讯云云产品资源 ID", - "workflow_node.deploy.form.tencentcloud_ssl_deploy_resource_ids.multiple_input_modal.placeholder": "请输入腾讯云云产品资源 ID", - "workflow_node.deploy.form.tencentcloud_ssl_update.guide": "将通过腾讯云 OpenAPI UpdateCertificateInstance 或 UploadUpdateCertificateInstance 接口创建异步部署任务。此部署目标若执行成功仅代表已创建部署任务,实际部署结果需要你自行前往腾讯云控制台查询。", - "workflow_node.deploy.form.tencentcloud_ssl_update_endpoint.label": "腾讯云 SSL 接口端点(可选)", - "workflow_node.deploy.form.tencentcloud_ssl_update_endpoint.placeholder": "请输入腾讯云 SSL 接口端点(例如:ssl.tencentcloudapi.com)", - "workflow_node.deploy.form.tencentcloud_ssl_update_endpoint.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/41659
                  国际站用户请填写 ssl.intl.tencentcloudapi.com。", - "workflow_node.deploy.form.tencentcloud_ssl_update_certificate_id.label": "腾讯云原证书 ID", - "workflow_node.deploy.form.tencentcloud_ssl_update_certificate_id.placeholder": "请输入腾讯云原证书 ID", - "workflow_node.deploy.form.tencentcloud_ssl_update_certificate_id.tooltip": "这是什么?请参阅 https://console.cloud.tencent.com/certoverview", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.label": "腾讯云云产品资源类型", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.placeholder": "请输入腾讯云云产品资源类型(多个值请用半角分号隔开)", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/91649 或 https://cloud.tencent.com/document/product/400/119791
                  注意,这两个接口的所支持的云产品资源类型有所不同,具体请查看腾讯云官方文档。", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.multiple_input_modal.title": "修改腾讯云云产品资源类型", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_types.multiple_input_modal.placeholder": "请输入腾讯云云产品资源类型", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.label": "腾讯云云产品部署地域(可选)", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.placeholder": "请输入腾讯云云产品部署地域(多个值请用半角分号隔开)", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/91649 或 https://cloud.tencent.com/document/product/400/119791", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.multiple_input_modal.title": "修改腾讯云云产品部署地域", - "workflow_node.deploy.form.tencentcloud_ssl_update_resource_regions.multiple_input_modal.placeholder": "请输入腾讯云云产品部署地域", - "workflow_node.deploy.form.tencentcloud_ssl_update_is_replaced.label": "是否更新原证书(即证书 ID 保持不变)", - "workflow_node.deploy.form.tencentcloud_ssl_update_is_replaced.tooltip": "不勾选时,将调用腾讯云 OpenAPI UpdateCertificateInstance 接口;否则,将调用腾讯云 OpenAPI UploadUpdateCertificateInstance 接口。", + "workflow_node.deploy.form.tencentcloud_ssldeploy.guide": "将通过腾讯云 OpenAPI DeployCertificateInstance 接口创建异步部署任务。此部署目标若执行成功仅代表已创建部署任务,实际部署结果需要你自行前往腾讯云控制台查询。", + "workflow_node.deploy.form.tencentcloud_ssldeploy_endpoint.label": "腾讯云 SSL 接口端点(可选)", + "workflow_node.deploy.form.tencentcloud_ssldeploy_endpoint.placeholder": "请输入腾讯云 SSL 接口端点(例如:ssl.tencentcloudapi.com)", + "workflow_node.deploy.form.tencentcloud_ssldeploy_endpoint.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/41659
                  国际站用户请填写 ssl.intl.tencentcloudapi.com。", + "workflow_node.deploy.form.tencentcloud_ssldeploy_region.label": "腾讯云云产品地域", + "workflow_node.deploy.form.tencentcloud_ssldeploy_region.placeholder": "请输入腾讯云云产品地域(例如:ap-guangzhou)", + "workflow_node.deploy.form.tencentcloud_ssldeploy_region.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/41659", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_type.label": "腾讯云云产品资源类型", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_type.placeholder": "请输入腾讯云产品资源类型", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_type.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/91667", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.label": "腾讯云云产品资源 ID", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.placeholder": "请输入腾讯云云产品资源 ID(多个值请用半角分号隔开)", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.errmsg.invalid": "请输入正确的腾讯云云产品资源 ID", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.help": "提示:多个 ID 请用半角分号隔开。", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/91667
                  注意与各产品本身的实例 ID 区分。", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.multiple_input_modal.title": "修改腾讯云云产品资源 ID", + "workflow_node.deploy.form.tencentcloud_ssldeploy_resource_ids.multiple_input_modal.placeholder": "请输入腾讯云云产品资源 ID", + "workflow_node.deploy.form.tencentcloud_sslupdate.guide": "将通过腾讯云 OpenAPI UpdateCertificateInstance 或 UploadUpdateCertificateInstance 接口创建异步部署任务。此部署目标若执行成功仅代表已创建部署任务,实际部署结果需要你自行前往腾讯云控制台查询。", + "workflow_node.deploy.form.tencentcloud_sslupdate_endpoint.label": "腾讯云 SSL 接口端点(可选)", + "workflow_node.deploy.form.tencentcloud_sslupdate_endpoint.placeholder": "请输入腾讯云 SSL 接口端点(例如:ssl.tencentcloudapi.com)", + "workflow_node.deploy.form.tencentcloud_sslupdate_endpoint.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/41659
                  国际站用户请填写 ssl.intl.tencentcloudapi.com。", + "workflow_node.deploy.form.tencentcloud_sslupdate_certificate_id.label": "腾讯云原证书 ID", + "workflow_node.deploy.form.tencentcloud_sslupdate_certificate_id.placeholder": "请输入腾讯云原证书 ID", + "workflow_node.deploy.form.tencentcloud_sslupdate_certificate_id.tooltip": "这是什么?请参阅 https://console.cloud.tencent.com/certoverview", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.label": "腾讯云云产品资源类型", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.placeholder": "请输入腾讯云云产品资源类型(多个值请用半角分号隔开)", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.help": "提示:多个类型请用半角分号隔开。", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/91649 或 https://cloud.tencent.com/document/product/400/119791
                  注意,这两个接口的所支持的云产品资源类型有所不同,具体请查看腾讯云官方文档。", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.multiple_input_modal.title": "修改腾讯云云产品资源类型", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_types.multiple_input_modal.placeholder": "请输入腾讯云云产品资源类型", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.label": "腾讯云云产品部署地域(可选)", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.placeholder": "请输入腾讯云云产品部署地域(多个值请用半角分号隔开)", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.help": "提示:多个地域请用半角分号隔开。", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/400/91649 或 https://cloud.tencent.com/document/product/400/119791", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.multiple_input_modal.title": "修改腾讯云云产品部署地域", + "workflow_node.deploy.form.tencentcloud_sslupdate_resource_regions.multiple_input_modal.placeholder": "请输入腾讯云云产品部署地域", + "workflow_node.deploy.form.tencentcloud_sslupdate_is_replaced.label": "是否更新原证书(即证书 ID 保持不变)", + "workflow_node.deploy.form.tencentcloud_sslupdate_is_replaced.tooltip": "不勾选时,将调用腾讯云 OpenAPI UpdateCertificateInstance 接口;否则,将调用腾讯云 OpenAPI UploadUpdateCertificateInstance 接口。", "workflow_node.deploy.form.tencentcloud_vod_endpoint.label": "腾讯云云点播接口端点(可选)", "workflow_node.deploy.form.tencentcloud_vod_endpoint.placeholder": "请输入腾讯云云点播接口端点(例如:vod.tencentcloudapi.com)", "workflow_node.deploy.form.tencentcloud_vod_endpoint.tooltip": "这是什么?请参阅 https://cloud.tencent.com/document/product/266/31755
                  国际站用户请填写 vod.intl.tencentcloudapi.com。", @@ -880,7 +900,8 @@ "workflow_node.deploy.form.volcengine_alb_listener_id.tooltip": "这是什么?请参阅 https://console.volcengine.com/alb", "workflow_node.deploy.form.volcengine_alb_snidomain.label": "火山引擎 ALB 扩展域名(可选)", "workflow_node.deploy.form.volcengine_alb_snidomain.placeholder": "请输入火山引擎 ALB 扩展域名(支持泛域名)", - "workflow_node.deploy.form.volcengine_alb_snidomain.tooltip": "这是什么?请参阅 https://console.volcengine.com/alb
                  不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.volcengine_alb_snidomain.help": "提示:不填写时,将替换监听器的默认证书;否则,将替换扩展域名证书。", + "workflow_node.deploy.form.volcengine_alb_snidomain.tooltip": "这是什么?请参阅 https://console.volcengine.com/alb", "workflow_node.deploy.form.volcengine_cdn_domain.label": "火山引擎 CDN 加速域名", "workflow_node.deploy.form.volcengine_cdn_domain.placeholder": "请输入火山引擎 CDN 加速域名(支持泛域名)", "workflow_node.deploy.form.volcengine_cdn_domain.tooltip": "这是什么?请参阅 https://console.volcengine.com/cdn/homepage", @@ -925,6 +946,7 @@ "workflow_node.deploy.form.volcengine_tos_domain.tooltip": "这是什么?请参阅 see https://console.volcengine.com/tos", "workflow_node.deploy.form.wangsu_cdn_domains.label": "网宿云 CDN 加速域名", "workflow_node.deploy.form.wangsu_cdn_domains.placeholder": "请输入网宿云 CDN 加速域名(支持泛域名;多个值请用半角分号隔开)", + "workflow_node.deploy.form.wangsu_cdn_domains.help": "提示:多个域名请用半角分号隔开。", "workflow_node.deploy.form.wangsu_cdn_domains.tooltip": "这是什么?请参阅 https://cdn.console.wangsu.com/v2/index/#/property/list", "workflow_node.deploy.form.wangsu_cdn_domains.multiple_input_modal.title": "修改网宿云 CDN 加速域名", "workflow_node.deploy.form.wangsu_cdn_domains.multiple_input_modal.placeholder": "请输入网宿云 CDN 加速域名", @@ -937,16 +959,18 @@ "workflow_node.deploy.form.wangsu_cdnpro_domain.tooltip": "这是什么?请参阅 https://cdnpro.console.wangsu.com/v2/index/#/properties", "workflow_node.deploy.form.wangsu_cdnpro_certificate_id.label": "网宿云 CDN Pro 原证书 ID(可选)", "workflow_node.deploy.form.wangsu_cdnpro_certificate_id.placeholder": "请输入网宿云 CDN Pro 原证书 ID", - "workflow_node.deploy.form.wangsu_cdnpro_certificate_id.tooltip": "这是什么?请参阅 https://cdnpro.console.wangsu.com/v2/index/#/certificate
                  不填写时,将上传新证书;否则,将替换原证书。", + "workflow_node.deploy.form.wangsu_cdnpro_certificate_id.help": "提示:不填写时,将上传新证书;否则,将替换原证书。", + "workflow_node.deploy.form.wangsu_cdnpro_certificate_id.tooltip": "这是什么?请参阅 https://cdnpro.console.wangsu.com/v2/index/#/certificate", "workflow_node.deploy.form.wangsu_cdnpro_webhook_id.label": "网宿云 CDN Pro 部署任务 Webhook ID(可选)", "workflow_node.deploy.form.wangsu_cdnpro_webhook_id.placeholder": "请输入网宿云 CDN Pro 部署任务 Webhook ID", "workflow_node.deploy.form.wangsu_cdnpro_webhook_id.tooltip": "这是什么?请参阅 https://cdnpro.console.wangsu.com/v2/index/#/certificate", "workflow_node.deploy.form.wangsu_certificate_id.label": "网宿云证书 ID(可选)", "workflow_node.deploy.form.wangsu_certificate_id.placeholder": "请输入网宿云证书 ID", - "workflow_node.deploy.form.wangsu_certificate_id.tooltip": "这是什么?请参阅 https://cdn.console.wangsu.com/v2/index#/certificate/list
                  不填写时,将上传新证书;否则,将替换原证书。", + "workflow_node.deploy.form.wangsu_certificate_id.help": "提示:不填写时,将上传新证书;否则,将替换原证书。", + "workflow_node.deploy.form.wangsu_certificate_id.tooltip": "这是什么?请参阅 https://cdn.console.wangsu.com/v2/index#/certificate/list", "workflow_node.deploy.form.webhook_data.label": "Webhook 回调数据(可选)", "workflow_node.deploy.form.webhook_data.placeholder": "请输入 Webhook 回调数据以覆盖默认值", - "workflow_node.deploy.form.webhook_data.tooltip": "不填写时,将使用所选部署目标授权的默认 Webhook 回调数据。", + "workflow_node.deploy.form.webhook_data.help": "提示:不填写时,将使用所选部署目标授权的默认 Webhook 回调数据。", "workflow_node.deploy.form.webhook_data.guide": "
                  支持的变量:
                  1. ${DOMAIN}:证书的主域名(即 CommonName)。
                  2. ${DOMAINS}:证书的多域名列表(即 SubjectAltNames)。
                  3. ${CERTIFICATE}:证书文件 PEM 格式内容。
                  4. ${SERVER_CERTIFICATE}:证书文件(仅含服务器证书)PEM 格式内容。
                  5. ${INTERMEDIA_CERTIFICATE}:证书文件(仅含中间证书)PEM 格式内容。
                  6. ${PRIVATE_KEY}:私钥文件 PEM 格式内容。

                  其他注意事项请前往授权凭据页面查看。", "workflow_node.deploy.form.webhook_data.errmsg.json_invalid": "请输入有效的 JSON 格式字符串", "workflow_node.deploy.form.skip_on_last_succeeded.label": "重复部署", @@ -972,23 +996,23 @@ "workflow_node.notify.form.provider_access.button": "新建", "workflow_node.notify.form.params_config.label": "参数设置", "workflow_node.notify.form.discordbot_channel_id.label": "Discord 频道 ID(可选)", - "workflow_node.notify.form.discordbot_channel_id.placeholder": "请输入 Discord 频道 ID 以覆盖默认值", - "workflow_node.notify.form.discordbot_channel_id.tooltip": "不填写时,将使用所选通知渠道授权的默认频道 ID。", + "workflow_node.notify.form.discordbot_channel_id.placeholder": "请输入 Discord 频道 ID", + "workflow_node.notify.form.discordbot_channel_id.help": "提示:不填写时,将使用所选通知渠道授权的默认频道 ID。", "workflow_node.notify.form.email_receiver_address.label": "收件人邮箱(可选)", "workflow_node.notify.form.email_receiver_address.placeholder": "请输入收件人邮箱以覆盖默认值", - "workflow_node.notify.form.email_receiver_address.tooltip": "不填写时,将使用所选通知渠道授权的默认收件人邮箱。", + "workflow_node.notify.form.email_receiver_address.help": "提示:不填写时,将使用所选通知渠道授权的默认收件人邮箱。", "workflow_node.notify.form.mattermost_channel_id.label": "Mattermost 频道 ID(可选)", - "workflow_node.notify.form.mattermost_channel_id.placeholder": "请输入 Mattermost 频道 ID 以覆盖默认值", - "workflow_node.notify.form.mattermost_channel_id.tooltip": "不填写时,将使用所选通知渠道授权的默认频道 ID。", + "workflow_node.notify.form.mattermost_channel_id.placeholder": "请输入 Mattermost 频道 ID", + "workflow_node.notify.form.mattermost_channel_id.help": "提示:不填写时,将使用所选通知渠道授权的默认频道 ID。", "workflow_node.notify.form.slackbot_channel_id.label": "Slack 频道 ID(可选)", - "workflow_node.notify.form.slackbot_channel_id.placeholder": "请输入 Slack 频道 ID 以覆盖默认值", - "workflow_node.notify.form.slackbot_channel_id.tooltip": "不填写时,将使用所选通知渠道授权的默认频道 ID。", + "workflow_node.notify.form.slackbot_channel_id.placeholder": "请输入 Slack 频道 ID", + "workflow_node.notify.form.slackbot_channel_id.help": "提示:不填写时,将使用所选通知渠道授权的默认频道 ID。", "workflow_node.notify.form.telegrambot_chat_id.label": "Telegram 会话 ID(可选)", - "workflow_node.notify.form.telegrambot_chat_id.placeholder": "请输入 Telegram 会话 ID 以覆盖默认值", - "workflow_node.notify.form.telegrambot_chat_id.tooltip": "不填写时,将使用所选通知渠道授权的默认会话 ID。", + "workflow_node.notify.form.telegrambot_chat_id.placeholder": "请输入 Telegram 会话 ID", + "workflow_node.notify.form.telegrambot_chat_id.help": "提示:不填写时,将使用所选通知渠道授权的默认会话 ID。", "workflow_node.notify.form.webhook_data.label": "Webhook 回调数据(可选)", "workflow_node.notify.form.webhook_data.placeholder": "请输入 Webhook 回调数据以覆盖默认值", - "workflow_node.notify.form.webhook_data.tooltip": "不填写时,将使用所选部署目标授权的默认 Webhook 回调数据。", + "workflow_node.notify.form.webhook_data.help": "提示:不填写时,将使用所选部署目标授权的默认 Webhook 回调数据。", "workflow_node.notify.form.webhook_data.guide": "
                  支持的变量:
                  1. ${SUBJECT}:通知主题。
                  2. ${MESSAGE}:通知内容。

                  其他注意事项请前往授权凭据页面查看。", "workflow_node.notify.form.webhook_data.errmsg.json_invalid": "请输入有效的 JSON 格式字符串", "workflow_node.notify.form.skip_on_all_prev_skipped.label": "静默行为", From 136ecb17f3afe61e862f767cd782d4b2fea0f4f0 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Tue, 12 Aug 2025 17:51:31 +0800 Subject: [PATCH 09/16] refactor(ui): clean code --- .../access/AccessFormEmailConfig.tsx | 1 - .../access/AccessFormWebhookConfig.tsx | 66 ++++---- .../certificate/CertificateDetail.tsx | 10 +- .../designer/forms/BizApplyNodeConfigForm.tsx | 141 ++++++++---------- .../forms/BizDeployNodeConfigForm.tsx | 62 ++++---- .../BizDeployNodeConfigFormProviderLocal.tsx | 116 +++++++------- .../BizDeployNodeConfigFormProviderSSH.tsx | 136 ++++++++--------- ...BizDeployNodeConfigFormProviderWebhook.tsx | 4 +- .../forms/BizNotifyNodeConfigForm.tsx | 49 +++--- ...BizNotifyNodeConfigFormProviderWebhook.tsx | 4 +- 10 files changed, 253 insertions(+), 336 deletions(-) diff --git a/ui/src/components/access/AccessFormEmailConfig.tsx b/ui/src/components/access/AccessFormEmailConfig.tsx index 629748dcf..95148f793 100644 --- a/ui/src/components/access/AccessFormEmailConfig.tsx +++ b/ui/src/components/access/AccessFormEmailConfig.tsx @@ -1,5 +1,4 @@ import { useTranslation } from "react-i18next"; -import { QuestionCircleOutlined as IconQuestionCircleOutlined } from "@ant-design/icons"; import { Form, type FormInstance, Input, InputNumber, Switch } from "antd"; import { createSchemaFieldRule } from "antd-zod"; import { z } from "zod"; diff --git a/ui/src/components/access/AccessFormWebhookConfig.tsx b/ui/src/components/access/AccessFormWebhookConfig.tsx index d3d5dc4da..7661d95b6 100644 --- a/ui/src/components/access/AccessFormWebhookConfig.tsx +++ b/ui/src/components/access/AccessFormWebhookConfig.tsx @@ -305,20 +305,13 @@ const AccessFormWebhookConfig = ({ form: formInst, formName, disabled, initialVa - - - + +
                  + +
                  + - - - + +
                  + ({ + key, + label: , + onClick: () => handlePresetDataForNotificationClick(key), + })), + }} + trigger={["click"]} + > + + +
                  + { - -
                  - + +
                  { - -
                  - + +
                  - - - + } + > +
                  + + {t("workflow_node.apply.form.provider_access.button")} + + + } + usage="dns" + afterSubmit={(record) => { + const provider = accessProvidersMap.get(record.provider); + if (provider?.usages?.includes(ACCESS_USAGES.DNS)) { + formInst.setFieldValue("providerAccessId", record.id); + handleProviderAccessSelect(record.id); + } + }} + /> +
                  + - - - + +
                  + + + + + +
                  + -
                  - + - - {t("workflow_node.deploy.form.local_format.option.pem.label")} - - - {t("workflow_node.deploy.form.local_format.option.pfx.label")} - - - {t("workflow_node.deploy.form.local_format.option.jks.label")} - - + - - {t("workflow_node.deploy.form.local_shell_env.option.sh.label")} - - - {t("workflow_node.deploy.form.local_shell_env.option.cmd.label")} - - - {t("workflow_node.deploy.form.local_shell_env.option.powershell.label")} - - + - - {t("workflow_node.deploy.form.ssh_format.option.pem.label")} - - - {t("workflow_node.deploy.form.ssh_format.option.pfx.label")} - - - {t("workflow_node.deploy.form.ssh_format.option.jks.label")} - - +