From 0b3472d227b31a58aa314245c300670122c42f48 Mon Sep 17 00:00:00 2001 From: Lorenzo Date: Thu, 26 Jun 2025 00:56:43 +0200 Subject: [PATCH] Partially translate user settings --- .../src/locales/langs/en-US/certd.ts | 44 ++ .../src/locales/langs/zh-CN/certd.ts | 44 ++ .../certd/monitor/site/setting/index.vue | 97 ++-- .../src/views/certd/notification/common.tsx | 445 +++++++------- .../src/views/certd/open/openkey/crud.tsx | 351 +++++------ .../pipeline/components/change-trigger.vue | 94 +-- .../pipeline/component/trigger-form/index.vue | 24 +- .../src/views/sys/authority/user/crud.tsx | 549 +++++++++--------- 8 files changed, 881 insertions(+), 767 deletions(-) diff --git a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts index 258f3097..6b9ef176 100644 --- a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts @@ -300,4 +300,48 @@ export default { nickName: "Nickname", max50Chars: "Maximum 50 characters", myInfo: "My Information", + siteMonitorSettings: "Site Monitor Settings", + notificationChannel: "Notification Channel", + setNotificationChannel: "Set the notification channel", + retryTimes: "Retry Times", + monitorRetryTimes: "Number of retry attempts for monitoring requests", + monitorCronSetting: "Monitoring Schedule", + cronTrigger: "Scheduled trigger for monitoring", + save: "Save", + editSchedule: "Edit Schedule", + timerTrigger: "Timer Trigger", + schedule: "Schedule", + selectCron: "Please select a schedule Cron", + batchEditSchedule: "Batch Edit Schedule", + editTrigger: "Edit Trigger", + triggerName: "Trigger Name", + requiredField: "This field is required", + type: "Type", + enterName: "Please enter a name", + confirmDeleteTrigger: "Are you sure you want to delete this trigger?", + notificationType: "Notification Type", + selectNotificationType: "Please select a notification type", + notificationName: "Notification Name", + helperNotificationName: "Fill freely, helps to distinguish when multiple notifications of the same type exist", + isDefault: "Is Default", + yes: "Yes", + no: "No", + selectIsDefault: "Please select if default", + prompt: "Prompt", + confirmSetDefaultNotification: "Are you sure to set as default notification?", + test: "Test", + scope: "Scope", + scopeOpenApiOnly: "Open API Only", + scopeFullAccount: "Full Account Permissions", + required: "This field is required", + scopeHelper: "Open API only allows access to open APIs; full account permissions allow access to all APIs", + add: "Generate New Key", + gen: { + text: "API Test", + title: "x-certd-token", + okText: "Confirm", + contentPart1: "Test the x-certd-token below, you can use it within 3 minutes to test ", + openApi: "Open API", + contentPart2: " request testing", + }, }; diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts index 1983dadd..259a8ad8 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts @@ -306,4 +306,48 @@ export default { nickName: "昵称", max50Chars: "最大50个字符", myInfo: "我的信息", + siteMonitorSettings: "站点监控设置", + notificationChannel: "通知渠道", + setNotificationChannel: "设置通知渠道", + retryTimes: "重试次数", + monitorRetryTimes: "监控请求重试次数", + monitorCronSetting: "监控定时设置", + cronTrigger: "定时触发监控", + save: "保存", + editSchedule: "修改定时", + timerTrigger: "定时触发", + schedule: "定时", + selectCron: "请选择定时Cron", + batchEditSchedule: "批量修改定时", + editTrigger: "编辑触发器", + triggerName: "触发器名称", + requiredField: "此项必填", + type: "类型", + enterName: "请输入名称", + confirmDeleteTrigger: "确定要删除此触发器吗?", + notificationType: "通知类型", + selectNotificationType: "请选择通知类型", + notificationName: "通知名称", + helperNotificationName: "随便填,当多个相同类型的通知时,便于区分", + isDefault: "是否默认", + yes: "是", + no: "否", + selectIsDefault: "请选择是否默认", + prompt: "提示", + confirmSetDefaultNotification: "确定设置为默认通知?", + test: "测试", + scope: "权限范围", + scopeOpenApiOnly: "仅开放接口", + scopeFullAccount: "账户所有权限", + required: "此项必填", + scopeHelper: "仅开放接口只可以访问开放接口,账户所有权限可以访问所有接口", + add: "生成新的Key", + gen: { + text: "接口测试", + title: "x-certd-token", + okText: "确定", + contentPart1: "测试x-certd-token如下,您可以在3分钟内使用它进行", + openApi: "开放接口", + contentPart2: "请求测试", + }, }; diff --git a/packages/ui/certd-client/src/views/certd/monitor/site/setting/index.vue b/packages/ui/certd-client/src/views/certd/monitor/site/setting/index.vue index 57a6bc2d..0c5c3934 100644 --- a/packages/ui/certd-client/src/views/certd/monitor/site/setting/index.vue +++ b/packages/ui/certd-client/src/views/certd/monitor/site/setting/index.vue @@ -1,37 +1,41 @@ + diff --git a/packages/ui/certd-client/src/views/certd/notification/common.tsx b/packages/ui/certd-client/src/views/certd/notification/common.tsx index 18e061cd..196adcdd 100644 --- a/packages/ui/certd-client/src/views/certd/notification/common.tsx +++ b/packages/ui/certd-client/src/views/certd/notification/common.tsx @@ -5,238 +5,241 @@ import { forEach, get, merge, set } from "lodash-es"; import { Modal } from "ant-design-vue"; import * as api from "/@/views/sys/cname/provider/api"; import { mitter } from "/@/utils/util.mitt"; +import { useI18n } from "vue-i18n"; export function notificationProvide(api: any) { - provide("notificationApi", api); - provide("get:plugin:type", () => { - return "notification"; - }); + provide("notificationApi", api); + provide("get:plugin:type", () => { + return "notification"; + }); } export function getCommonColumnDefine(crudExpose: any, typeRef: any, api: any) { - const notificationTypeDictRef = dict({ - url: "/pi/notification/getTypeDict", - }); - const defaultPluginConfig = { - component: { - name: "a-input", - vModel: "value", - }, - }; + const { t } = useI18n(); - function buildDefineFields(define: any, form: any, mode: string) { - const formWrapperRef = crudExpose.getFormWrapperRef(); - const columnsRef = toRef(formWrapperRef.formOptions, "columns"); + const notificationTypeDictRef = dict({ + url: "/pi/notification/getTypeDict", + }); + const defaultPluginConfig = { + component: { + name: "a-input", + vModel: "value", + }, + }; - for (const key in columnsRef.value) { - if (key.indexOf(".") >= 0) { - delete columnsRef.value[key]; - } - } - console.log('crudBinding.value[mode + "Form"].columns', columnsRef.value); - forEach(define.input, (value: any, mapKey: any) => { - const key = "body." + mapKey; - const field = { - ...value, - key, - }; - const column = merge({ title: key }, defaultPluginConfig, field); - //eval - useReference(column); + function buildDefineFields(define: any, form: any, mode: string) { + const formWrapperRef = crudExpose.getFormWrapperRef(); + const columnsRef = toRef(formWrapperRef.formOptions, "columns"); - if (column.required) { - if (!column.rules) { - column.rules = []; - } - column.rules.push({ required: true, message: "此项必填" }); - } + for (const key in columnsRef.value) { + if (key.indexOf(".") >= 0) { + delete columnsRef.value[key]; + } + } + console.log('crudBinding.value[mode + "Form"].columns', columnsRef.value); + forEach(define.input, (value: any, mapKey: any) => { + const key = "body." + mapKey; + const field = { + ...value, + key, + }; + const column = merge({ title: key }, defaultPluginConfig, field); + //eval + useReference(column); - //设置默认值 - if (column.value != null && get(form, key) == null) { - set(form, key, column.value); - } - //字段配置赋值 - columnsRef.value[key] = column; - console.log("form", columnsRef.value, form); - }); - } + if (column.required) { + if (!column.rules) { + column.rules = []; + } + column.rules.push({ required: true, message: t("certd.requiredField") }); + } - const currentDefine = ref(); + //设置默认值 + if (column.value != null && get(form, key) == null) { + set(form, key, column.value); + } + //字段配置赋值 + columnsRef.value[key] = column; + console.log("form", columnsRef.value, form); + }); + } - return { - id: { - title: "ID", - key: "id", - type: "number", - column: { - width: 100, - }, - form: { - show: false, - }, - }, - type: { - title: "通知类型", - type: "dict-select", - dict: notificationTypeDictRef, - search: { - show: false, - }, - column: { - width: 200, - component: { - color: "auto", - }, - }, - editForm: { - component: { - disabled: false, - }, - }, - form: { - component: { - disabled: false, - showSearch: true, - filterOption: (input: string, option: any) => { - input = input?.toLowerCase(); - return option.value.toLowerCase().indexOf(input) >= 0 || option.label.toLowerCase().indexOf(input) >= 0; - }, - renderLabel(item: any) { - return ( - - {item.label} - {item.needPlus && } - - ); - }, - }, - rules: [{ required: true, message: "请选择通知类型" }], - valueChange: { - immediate: true, - async handle({ value, mode, form, immediate }) { - if (value == null) { - return; - } - const lastTitle = currentDefine.value?.title; - const define = await api.GetProviderDefine(value); - currentDefine.value = define; - console.log("define", define); + const currentDefine = ref(); - if (!immediate) { - form.body = {}; - if (define.needPlus) { - mitter.emit("openVipModal"); - } - } + return { + id: { + title: "ID", + key: "id", + type: "number", + column: { + width: 100, + }, + form: { + show: false, + }, + }, + type: { + title: t("certd.notificationType"), + type: "dict-select", + dict: notificationTypeDictRef, + search: { + show: false, + }, + column: { + width: 200, + component: { + color: "auto", + }, + }, + editForm: { + component: { + disabled: false, + }, + }, + form: { + component: { + disabled: false, + showSearch: true, + filterOption: (input: string, option: any) => { + input = input?.toLowerCase(); + return option.value.toLowerCase().indexOf(input) >= 0 || option.label.toLowerCase().indexOf(input) >= 0; + }, + renderLabel(item: any) { + return ( + + {item.label} + {item.needPlus && } + + ); + }, + }, + rules: [{ required: true, message: t("certd.selectNotificationType") }], + valueChange: { + immediate: true, + async handle({ value, mode, form, immediate }) { + if (value == null) { + return; + } + const lastTitle = currentDefine.value?.title; + const define = await api.GetProviderDefine(value); + currentDefine.value = define; + console.log("define", define); - if (!form.name || form.name === lastTitle) { - form.name = define.title; - } - buildDefineFields(define, form, mode); - }, - }, - helper: computed(() => { - const define = currentDefine.value; - if (define == null) { - return ""; - } - return define.desc; - }), - }, - } as ColumnCompositionProps, - name: { - title: "通知名称", - search: { - show: true, - }, - type: ["text"], - form: { - rules: [{ required: true, message: "请填写名称" }], - helper: "随便填,当多个相同类型的通知时,便于区分", - }, - column: { - width: 200, - }, - }, - isDefault: { - title: "是否默认", - type: "dict-switch", - dict: dict({ - data: [ - { label: "是", value: true, color: "success" }, - { label: "否", value: false, color: "default" }, - ], - }), - form: { - value: false, - rules: [{ required: true, message: "请选择是否默认" }], - order: 999, - }, - column: { - align: "center", - width: 100, - component: { - name: "a-switch", - vModel: "checked", - disabled: compute(({ value }) => { - return value === true; - }), - on: { - change({ row }) { - Modal.confirm({ - title: "提示", - content: "确定设置为默认通知?", - onOk: async () => { - await api.SetDefault(row.id); - await crudExpose.doRefresh(); - }, - onCancel: async () => { - await crudExpose.doRefresh(); - }, - }); - }, - }, - }, - }, - } as ColumnCompositionProps, - test: { - title: "测试", - form: { - show: compute(({ form }) => { - return !!form.type; - }), - component: { - name: "api-test", - action: "TestRequest", - }, - order: 990, - col: { - span: 24, - }, - }, - column: { - show: false, - }, - }, - setting: { - column: { show: false }, - form: { - show: false, - valueBuilder({ value, form }) { - form.body = {}; - if (!value) { - return; - } - const setting = JSON.parse(value); - for (const key in setting) { - form.body[key] = setting[key]; - } - }, - valueResolve({ form }) { - const setting = form.body; - form.setting = JSON.stringify(setting); - }, - }, - } as ColumnCompositionProps, - }; + if (!immediate) { + form.body = {}; + if (define.needPlus) { + mitter.emit("openVipModal"); + } + } + + if (!form.name || form.name === lastTitle) { + form.name = define.title; + } + buildDefineFields(define, form, mode); + }, + }, + helper: computed(() => { + const define = currentDefine.value; + if (define == null) { + return ""; + } + return define.desc; + }), + }, + } as ColumnCompositionProps, + name: { + title: t("certd.notificationName"), + search: { + show: true, + }, + type: ["text"], + form: { + rules: [{ required: true, message: t("certd.enterName") }], + helper: t("certd.helperNotificationName"), + }, + column: { + width: 200, + }, + }, + isDefault: { + title: t("certd.isDefault"), + type: "dict-switch", + dict: dict({ + data: [ + { label: t("certd.yes"), value: true, color: "success" }, + { label: t("certd.no"), value: false, color: "default" }, + ], + }), + form: { + value: false, + rules: [{ required: true, message: t("certd.selectIsDefault") }], + order: 999, + }, + column: { + align: "center", + width: 100, + component: { + name: "a-switch", + vModel: "checked", + disabled: compute(({ value }) => { + return value === true; + }), + on: { + change({ row }) { + Modal.confirm({ + title: t("certd.prompt"), + content: t("certd.confirmSetDefaultNotification"), + onOk: async () => { + await api.SetDefault(row.id); + await crudExpose.doRefresh(); + }, + onCancel: async () => { + await crudExpose.doRefresh(); + }, + }); + }, + }, + }, + }, + } as ColumnCompositionProps, + test: { + title: t("certd.test"), + form: { + show: compute(({ form }) => { + return !!form.type; + }), + component: { + name: "api-test", + action: "TestRequest", + }, + order: 990, + col: { + span: 24, + }, + }, + column: { + show: false, + }, + }, + setting: { + column: { show: false }, + form: { + show: false, + valueBuilder({ value, form }) { + form.body = {}; + if (!value) { + return; + } + const setting = JSON.parse(value); + for (const key in setting) { + form.body[key] = setting[key]; + } + }, + valueResolve({ form }) { + const setting = form.body; + form.setting = JSON.stringify(setting); + }, + }, + } as ColumnCompositionProps, + }; } diff --git a/packages/ui/certd-client/src/views/certd/open/openkey/crud.tsx b/packages/ui/certd-client/src/views/certd/open/openkey/crud.tsx index 040624e0..a98133ed 100644 --- a/packages/ui/certd-client/src/views/certd/open/openkey/crud.tsx +++ b/packages/ui/certd-client/src/views/certd/open/openkey/crud.tsx @@ -5,181 +5,182 @@ import { OPEN_API_DOC, openkeyApi } from "./api"; import { useModal } from "/@/use/use-modal"; export default function ({ crudExpose, context }: CreateCrudOptionsProps): CreateCrudOptionsRet { - const { t } = useI18n(); - const api = openkeyApi; - const pageRequest = async (query: UserPageQuery): Promise => { - return await api.GetList(query); - }; - const editRequest = async (req: EditReq) => { - const { form, row } = req; - form.id = row.id; - const res = await api.UpdateObj(form); - return res; - }; - const delRequest = async (req: DelReq) => { - const { row } = req; - return await api.DelObj(row.id); - }; + const { t } = useI18n(); + const api = openkeyApi; + const pageRequest = async (query: UserPageQuery): Promise => { + return await api.GetList(query); + }; + const editRequest = async (req: EditReq) => { + const { form, row } = req; + form.id = row.id; + const res = await api.UpdateObj(form); + return res; + }; + const delRequest = async (req: DelReq) => { + const { row } = req; + return await api.DelObj(row.id); + }; - const addRequest = async (req: AddReq) => { - const { form } = req; - const res = await api.AddObj(form); - return res; - }; - const model = useModal(); - return { - crudOptions: { - request: { - pageRequest, - addRequest, - editRequest, - delRequest, - }, - search: { - show: false, - }, - form: { - labelCol: { - //固定label宽度 - span: null, - style: { - width: "100px", - }, - }, - col: { - span: 22, - }, - wrapper: { - width: 600, - }, - }, - actionbar: { - buttons: { - add: { - text: "生成新的Key", - }, - }, - }, - rowHandle: { - width: 300, - fixed: "right", - buttons: { - view: { show: true }, - copy: { show: false }, - edit: { show: false }, - remove: { show: true }, - gen: { - text: "接口测试", - size: "mini", - icon: "devicon-plain:vitest", - type: "primary", - async click({ row }) { - const apiToken = await api.GetApiToken(row.id); + const addRequest = async (req: AddReq) => { + const { form } = req; + const res = await api.AddObj(form); + return res; + }; + const model = useModal(); + return { + crudOptions: { + request: { + pageRequest, + addRequest, + editRequest, + delRequest, + }, + search: { + show: false, + }, + form: { + labelCol: { + //固定label宽度 + span: null, + style: { + width: "100px", + }, + }, + col: { + span: 22, + }, + wrapper: { + width: 600, + }, + }, + actionbar: { + buttons: { + add: { + text: t("certd.actionbar.add"), + }, + }, + }, + rowHandle: { + width: 300, + fixed: "right", + buttons: { + view: { show: true }, + copy: { show: false }, + edit: { show: false }, + remove: { show: true }, + gen: { + text: t("certd.gen.text"), + size: "mini", + icon: "devicon-plain:vitest", + type: "primary", + async click({ row }) { + const apiToken = await api.GetApiToken(row.id); - model.success({ - title: "x-certd-token", - maskClosable: true, - okText: "确定", - width: 600, - content: () => { - return ( -
-
- 测试x-certd-token如下,您可以在3分钟内使用它进行 - - 开放接口 - - 请求测试 -
-
- -
-
- ); - }, - }); - }, - }, - }, - }, - columns: { - id: { - title: "ID", - key: "id", - type: "number", - search: { - show: false, - }, - column: { - width: 100, - editable: { - disabled: true, - }, - }, - form: { - show: false, - }, - }, - keyId: { - title: "KeyId", - type: ["text", "copyable"], - search: { - show: true, - }, - form: { - show: false, - }, - column: { - width: 250, - sorter: true, - }, - }, - keySecret: { - title: "KeySecret", - type: ["text", "copyable"], - form: { - show: false, - }, - column: { - width: 580, - sorter: true, - }, - }, - scope: { - title: "权限范围", - type: "dict-radio", - dict: dict({ - data: [ - { label: "仅开放接口", value: "open", color: "blue" }, - { label: "账户所有权限", value: "user", color: "red" }, - ], - }), - form: { - value: "open", - show: true, - rules: [{ required: true, message: "此项必填" }], - helper: "仅开放接口只可以访问开放接口,账户所有权限可以访问所有接口", - component: { - vModel: "value", - }, - }, - column: { - width: 120, - align: "center", - sorter: true, - }, - }, - createTime: { - title: "创建时间", - type: "datetime", - search: { - show: false, - }, - form: { - show: false, - }, - }, - }, - }, - }; + model.success({ + title: t("certd.gen.title"), + maskClosable: true, + okText: t("certd.gen.okText"), + width: 600, + content: () => { + return ( +
+
+ {t("certd.gen.contentPart1")} + + {t("certd.gen.openApi")} + + {t("certd.gen.contentPart2")} +
+
+ +
+
+ ); + }, + }); + }, + }, + }, + }, + columns: { + id: { + title: "ID", + key: "id", + type: "number", + search: { + show: false, + }, + column: { + width: 100, + editable: { + disabled: true, + }, + }, + form: { + show: false, + }, + }, + keyId: { + title: "KeyId", + type: ["text", "copyable"], + search: { + show: true, + }, + form: { + show: false, + }, + column: { + width: 250, + sorter: true, + }, + }, + keySecret: { + title: "KeySecret", + type: ["text", "copyable"], + form: { + show: false, + }, + column: { + width: 580, + sorter: true, + }, + }, + scope: { + title: t("certd.scope"), + type: "dict-radio", + dict: dict({ + data: [ + { label: t("certd.scopeOpenApiOnly"), value: "open", color: "blue" }, + { label: t("certd.scopeFullAccount"), value: "user", color: "red" }, + ], + }), + form: { + value: "open", + show: true, + rules: [{ required: true, message: t("certd.required") }], + helper: t("certd.scopeHelper"), + component: { + vModel: "value", + }, + }, + column: { + width: 120, + align: "center", + sorter: true, + }, + }, + createTime: { + title: t("certd.fields.createTime"), + type: "datetime", + search: { + show: false, + }, + form: { + show: false, + }, + }, + + }, + }, + }; } diff --git a/packages/ui/certd-client/src/views/certd/pipeline/components/change-trigger.vue b/packages/ui/certd-client/src/views/certd/pipeline/components/change-trigger.vue index 8f754712..4e4fb599 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/components/change-trigger.vue +++ b/packages/ui/certd-client/src/views/certd/pipeline/components/change-trigger.vue @@ -1,62 +1,70 @@ + + diff --git a/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/trigger-form/index.vue b/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/trigger-form/index.vue index cbd52b98..0f57b080 100644 --- a/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/trigger-form/index.vue +++ b/packages/ui/certd-client/src/views/certd/pipeline/pipeline/component/trigger-form/index.vue @@ -3,7 +3,7 @@ class="pi-trigger-form" @after-open-change="triggerDrawerOnAfterVisibleChange">