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 a4c40e0a..79eaf2bf 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 42744c9f..450fc8a1 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 e68ebca0..ce67d2ce 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 1c9a05eb..b84ca494 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 29c25f5b..19e1d40e 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 7015766f..5e802876 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 7594df18..ce00dbb3 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 5462528d..adde54a6 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 fe79ba88..a32dd449 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 6e18736a..70ea75ff 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 2b834512..5926fccc 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 92ad852b..da322d21 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 32ffac47..c7a931a2 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 c1f46280..d4568822 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 a79e1583..239bde58 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 7568bf0a..308e199c 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 c74059c6..ab89bd06 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 8b91a187..f9b2022b 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 76fd62bf..8714c63d 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 874d69c2..48f453f2 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 86a33465..39ba641c 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 7838366d..d081e130 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 c51fa3bf..2ee1bd5f 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 2c987beb..943966f6 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 e554bfb8..edf65687 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 a1ee603c..af1e6950 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 8714c63d..2e1289d6 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 82861bfe..a55a80c3 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 3a1e0fb0..87b4eae3 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 5dc69bd0..a00f8565 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 9214a719..b0a310ab 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 adbcf0a1..0eca6763 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 4727d93c..dfb22bcd 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 f6beda7f..7e04d8bf 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 9da507ff..8254227a 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 c3c13af2..199c057a 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 9d4d873f..58f1220a 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 dc811ae1..8a50fe4c 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 a6c563c3..217d2ce4 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 8dbaa579..d079c909 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 d087d304..b038bcc8 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 02e8ddda..91dccef8 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 2849cc0d..56a6d6ef 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 10b9f30e..ba4c19ae 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 a0c2d2e9..0cf2b1fc 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 bfda3a0f..98093efd 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 c883469a..abff9650 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 0abfa1cd..52bc48ef 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 3b0a988e..307811f9 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 0871b6ad..0418bda5 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 be87144e..b81eb76c 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 b4c48970..b33a282b 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 1a65f7b2..f370cbd4 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 852e6ad2..3c3a232f 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 2df02aa8..ee0e9a5e 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 95ca108d..d7b27baf 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 03d487e7..8ecfda04 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 fd60509b..999e260b 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 305b9b5d..0e95de8d 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 01102bc0..de64d1d7 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 97f2f526..2a098ac6 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 4b677520..dce155e5 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 b52d8221..5cc8b0d1 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 2e5ac8ed..29277abb 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 c81870af..569929fa 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 375a2f9c..98b3ae3d 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 f68e927a..d914834d 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 7e541d8d..b65e8a3a 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 bfc3a470..03a1dc19 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 34221b73..08ecb0f9 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 acf2d7b4..8f69b9db 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 35d840c2..0b21bcac 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 f98ab928..abbeaf34 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 eea2c999..167a2b84 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 40672987..3f3bb5a5 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 16c99e6f..057c2241 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 a3cc7617..ce809e9c 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 d58e2218..72647f53 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 59a4d32f..ee1a993f 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 e4fd9062..a34b02de 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 d517064c..27de540f 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 aaf64461..d1e12f8d 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 d916cbcb..8154790e 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 36f38ef2..f2d01ca3 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 b49c23ea..a7dc610c 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 da92ba8d..17819ee1 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 5c68abee..baaec2ad 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 a8afec0d..6f34bd21 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 2c51e8ab..c797953c 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 f017bd73..97d94456 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 0ddb553b..7a302efa 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 634e5c98..28f75cb0 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 a4296f8e..7ffda663 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 68690f7c..9b7864c8 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 ae22ac1e..674774a3 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 ea40626a..20562ded 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 2ab258c6..df1f0527 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 a6a6f453..64759e25 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 f011a7eb..8dd31bb6 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 4b9e4f01..06069b23 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 aeb4d8ea..516231fd 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 3d3fa845..88de8fe3 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 343b956d..fae72c29 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 f7f2e54b..91cb9007 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 33211d3b..aa5a990b 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 151fea4b..72ab63d3 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 28ba3344..5a6a492c 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 72ec0ea1..8cab2b71 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 5b1b219b..e26b5b79 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 01a3711e..44471c43 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 2b4e83fd..33d87b54 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 e5d89b5d..8f6f1b82 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 93a023a3..8ab2ae9a 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 f5431a48..e3249cab 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 164c73e9..78fd31c5 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 465822b9..c463a056 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 f38b4d8c..c19c4e6a 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 2f129713..3741275c 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 565dee33..a13ce96a 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 4ba36177..3361d988 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 0ddd3903..25a6127d 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 8b6a6f10..a8d338ed 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 1360c5cc..d33071a6 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 b5b2579c..d85e7251 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 7d58eea6..610c603b 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 b4290c8a..d8c8bc0a 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 0ac7f0b3..34c35e7b 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 888b441f..ec95be90 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 83bc2cae..c4fff300 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 de878e59..d8ff94f3 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 53e8692d..efbf4741 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 761b11c6..4506518f 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 1d4a5996..081e2462 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 cccf3cff..f2d3cb83 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 1d9bf152..05a38702 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 b915388c..e9d7557f 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 163768b3..9c458ca8 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 de3b99d9..35e6647c 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 d48c6192..51e386f2 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 80a6851b..accfd39d 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 4cd245d6..e5fa2379 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 2a7b7d1e..17b42f38 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 1f306e3c..78f3f610 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 6dbb4a98..2b879dc0 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 ecb840e8..03273d7c 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 2e1289d6..7b229871 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 dbde4e39..23f1252b 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 58c7cd9b..bc7f58e2 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 3c6f1cf2..f9c3b66c 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 84aa210a..09e4b61c 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 dff1f069..8ce53863 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 6b5df551..629748dc 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 c42a328e..881b43b4 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 a95cba42..1de93876 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 3649863c..34ea894f 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 c952e8f0..d3d5dc4d 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 efbf4741..89f44277 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 4506518f..286d5c40 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 081e2462..c085e79e 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 f2d3cb83..15dbc25e 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 3e24e9d3..4e619a7d 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 4944604f..eb884eca 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 4d8b17f7..fc2fe9f5 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 8280a29b..4d2de8dc 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 1b80a0bb..0e5bcc92 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 f45e7055..98d994b8 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 61a37bcc..68d1c26a 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 72649f46..0fb941ae 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 c7765912..c20e1fca 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 0b18d72c..8df075b3 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 27850d51..d254e596 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 9297864a..634f9393 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 39ba641c..27dabd46 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 f4895925..f99741b3 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 3e4c7195..46b5982f 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 cf93fa71..d58eb272 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 1d6c7478..78589d0d 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 UpdateCertificateInstanceUploadUpdateCertificateInstance 接口创建异步部署任务。此部署目标若执行成功仅代表已创建部署任务,实际部署结果需要你自行前往腾讯云控制台查询。", - "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/91649https://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/91649https://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 UpdateCertificateInstanceUploadUpdateCertificateInstance 接口创建异步部署任务。此部署目标若执行成功仅代表已创建部署任务,实际部署结果需要你自行前往腾讯云控制台查询。", + "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/91649https://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/91649https://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 629748dc..95148f79 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 d3d5dc4d..7661d95b 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")} - - +