mirror of
https://github.com/certd/certd.git
synced 2026-10-25 10:04:07 +08:00
Merge branch 'v2-dev' of https://github.com/certd/certd into v2-dev
This commit is contained in:
@@ -23,6 +23,8 @@ version: 1.0.0
|
||||
|
||||
- 配置插件的唯一标识、标题、图标和描述
|
||||
- 继承 `BaseAccess` 类
|
||||
- 插件默认文案使用中文;需要英文时,在注解参数对象中添加同级 `i18n: { "en-US": { ... } }`,不要写成 `metadata.i18n`。`define` 本身就是插件 metadata。
|
||||
- `i18n["en-US"]` 仅配置要翻译的展示字段,如 `title`、`desc`、`input`;输入字段可翻译 `title`、`helper`、组件展示文案和 `optionsMapping`。缺少英文翻译时回退默认中文。
|
||||
|
||||
3. **定义授权属性**
|
||||
|
||||
|
||||
@@ -30,6 +30,8 @@ version: 1.0.0
|
||||
- 指定对应的云平台的 access 类型名称
|
||||
- 设置排序值(可选)
|
||||
- 继承 `AbstractDnsProvider` 类
|
||||
- 插件默认文案使用中文;需要英文时,在注解参数对象中添加同级 `i18n: { "en-US": { ... } }`,不要写成 `metadata.i18n`。`define` 本身就是插件 metadata。
|
||||
- `i18n["en-US"]` 仅配置要翻译的展示字段,如 `title`、`desc`、`input`;输入字段可翻译 `title`、`helper`、组件展示文案和 `optionsMapping`。缺少英文翻译时回退默认中文。
|
||||
|
||||
4. **实现 onInstance 方法**
|
||||
|
||||
|
||||
@@ -28,6 +28,8 @@ version: 1.0.0
|
||||
- 设置插件分组
|
||||
- 配置默认策略(如 `SkipWhenSucceed`)
|
||||
- 确保类名与插件名称一致
|
||||
- 插件默认文案使用中文;需要英文时,在注解参数对象中添加同级 `i18n: { "en-US": { ... } }`,不要写成 `metadata.i18n`。`define` 本身就是插件 metadata。
|
||||
- `i18n["en-US"]` 仅配置要翻译的展示字段,如 `title`、`desc`、`group`、`input`、`output`;未配置的字段自动回退默认中文。不要翻译插件标识、组件类型、默认值或执行参数。
|
||||
|
||||
3. **定义任务输入参数**
|
||||
|
||||
|
||||
@@ -3,6 +3,21 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复批量修改证书申请参数,无法选择证书颁发机构的bug ([9d9ae64](https://github.com/certd/certd/commit/9d9ae64aff76a09d64a5be04968ff0cc3ad097a4))
|
||||
* **aliyun-cert:** 阿里云订阅证书增加申请请求接口 ([949a69f](https://github.com/certd/certd/commit/949a69f0dcf929980363fc2b3d772edae696dcaf))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 插件市场新增同步按钮并调整搜索区域布局 ([41ca198](https://github.com/certd/certd/commit/41ca198116e1890e65973c4317acfecb32126951))
|
||||
* 多语言国际化优化,插件支持国际化配置 ([8f1b38a](https://github.com/certd/certd/commit/8f1b38ad7d445473ae71d537ad8e465f2e55ebc7))
|
||||
* 开放接口支持返回证书密码,需要在openKey主动开启该设置,客户端部署证书时可以直接获取密码部署 ([3e001b8](https://github.com/certd/certd/commit/3e001b8ba431eb9af8c4ea1b20118bcf5e7ebce4))
|
||||
* 完善插件翻译 ([d0463ab](https://github.com/certd/certd/commit/d0463abc2607d22aba50ae3acc6584bbed6e3a0e))
|
||||
* 证书申请成功通知支持批量修改 ([22715a4](https://github.com/certd/certd/commit/22715a430e24a6132482cadb6b217acc283f270c))
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
export default { setSuccess: "Settings saved", editTitle: "Edit Certificate Application Template", addTitle: "Add Certificate Application Template", name: "Template Name", default: "Default", setDefault: "Set as Default", disabled: "Disabled", createTime: "Created At", config: "Configuration" };
|
||||
@@ -3,6 +3,21 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复批量修改证书申请参数,无法选择证书颁发机构的bug ([9d9ae64](https://github.com/certd/certd/commit/9d9ae64aff76a09d64a5be04968ff0cc3ad097a4))
|
||||
* **aliyun-cert:** 阿里云订阅证书增加申请请求接口 ([949a69f](https://github.com/certd/certd/commit/949a69f0dcf929980363fc2b3d772edae696dcaf))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 插件市场新增同步按钮并调整搜索区域布局 ([41ca198](https://github.com/certd/certd/commit/41ca198116e1890e65973c4317acfecb32126951))
|
||||
* 多语言国际化优化,插件支持国际化配置 ([8f1b38a](https://github.com/certd/certd/commit/8f1b38ad7d445473ae71d537ad8e465f2e55ebc7))
|
||||
* 开放接口支持返回证书密码,需要在openKey主动开启该设置,客户端部署证书时可以直接获取密码部署 ([3e001b8](https://github.com/certd/certd/commit/3e001b8ba431eb9af8c4ea1b20118bcf5e7ebce4))
|
||||
* 完善插件翻译 ([d0463ab](https://github.com/certd/certd/commit/d0463abc2607d22aba50ae3acc6584bbed6e3a0e))
|
||||
* 证书申请成功通知支持批量修改 ([22715a4](https://github.com/certd/certd/commit/22715a430e24a6132482cadb6b217acc283f270c))
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
|
||||
| 序号 | 名称 | 说明 |
|
||||
|-----|-----|-----|
|
||||
| 1.| **主机-复制到本机** | 【仅管理员使用】实际上是复制证书到docker容器内的某个路径,需要做目录映射到宿主机 |
|
||||
| 1.| **主机-复制证书到本机** | 【仅管理员使用】实际上是复制证书到docker容器内的某个路径,需要做目录映射到宿主机 |
|
||||
| 2.| **主机-执行远程主机脚本命令** | 可以执行重启nginx等操作让证书生效 |
|
||||
| 3.| **IIS-部署到IIS站点** | |
|
||||
| 4.| **上传证书到对象存储OSS** | 支持阿里云OSS、腾讯云COS、七牛云KODO、S3、MinIO、FTP、SFTP |
|
||||
@@ -51,7 +51,7 @@
|
||||
| 24.| **易盾-部署到易盾RCDN** | 易盾CDN,每月免费30G,[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) |
|
||||
| 25.| **雨云-更新证书** | app.rainyun.com |
|
||||
| 26.| **又拍云-部署证书到CDN/USS** | 支持又拍云CDN,又拍云云存储USS |
|
||||
| 27.| **网宿-更新证书** | 网宿证书自动更新 |
|
||||
| 27.| **网宿-更新证书** | 网宿证书自动更新,注意:仅支持普通CDN证书更新,CDN pro的证书请安装在线插件“网宿-CDNPro更新证书” |
|
||||
| 28.| **西数-部署到虚拟主机** | 西部数码部署证书到虚拟主机 |
|
||||
| 29.| **我爱云-部署证书到我爱云CDN** | 部署证书到我爱云CDN |
|
||||
| 30.| **Zenlayer-刷新证书** | 刷新Zenlayer CDN证书 |
|
||||
|
||||
+1
-1
@@ -9,5 +9,5 @@
|
||||
}
|
||||
},
|
||||
"npmClient": "pnpm",
|
||||
"version": "1.45.0"
|
||||
"version": "1.45.1"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/publishlab/node-acme-client/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
# [1.45.0](https://github.com/publishlab/node-acme-client/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"description": "Simple and unopinionated ACME client",
|
||||
"private": false,
|
||||
"author": "nmorsman",
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"type": "module",
|
||||
"module": "./dist/index.js",
|
||||
"main": "./dist/index.js",
|
||||
@@ -18,7 +18,7 @@
|
||||
"types"
|
||||
],
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.45.0",
|
||||
"@certd/basic": "^1.45.1",
|
||||
"@peculiar/x509": "^1.11.0",
|
||||
"asn1js": "^3.0.5",
|
||||
"axios": "^1.9.0",
|
||||
@@ -77,5 +77,5 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/publishlab/node-acme-client/issues"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1 +1 @@
|
||||
00:51
|
||||
22:40
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/basic",
|
||||
"private": false,
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -54,5 +54,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,14 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 多语言国际化优化,插件支持国际化配置 ([8f1b38a](https://github.com/certd/certd/commit/8f1b38ad7d445473ae71d537ad8e465f2e55ebc7))
|
||||
* 开放接口支持返回证书密码,需要在openKey主动开启该设置,客户端部署证书时可以直接获取密码部署 ([3e001b8](https://github.com/certd/certd/commit/3e001b8ba431eb9af8c4ea1b20118bcf5e7ebce4))
|
||||
* 完善插件翻译 ([d0463ab](https://github.com/certd/certd/commit/d0463abc2607d22aba50ae3acc6584bbed6e3a0e))
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/pipeline",
|
||||
"private": false,
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -21,8 +21,8 @@
|
||||
"lint": "eslint --fix --ext .ts src"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.45.0",
|
||||
"@certd/plus-core": "^1.45.0",
|
||||
"@certd/basic": "^1.45.1",
|
||||
"@certd/plus-core": "^1.45.1",
|
||||
"dayjs": "^1.11.7",
|
||||
"lodash-es": "^4.17.21",
|
||||
"reflect-metadata": "^0.2.2"
|
||||
@@ -51,5 +51,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ export type AccessInputDefine = FormItemProps & {
|
||||
encrypt?: boolean;
|
||||
};
|
||||
export type AccessDefine = Registrable & {
|
||||
i18n?: Record<string, any>;
|
||||
icon?: string;
|
||||
subtype?: string;
|
||||
dependPlugins?: Record<string, string>;
|
||||
|
||||
@@ -44,6 +44,7 @@ export type NotificationDefine = Registrable & {
|
||||
input?: {
|
||||
[key: string]: NotificationInputDefine;
|
||||
};
|
||||
i18n?: Record<string, any>;
|
||||
};
|
||||
|
||||
export type NotificationInstanceConfig = {
|
||||
|
||||
@@ -43,6 +43,7 @@ export type TaskInputDefine = {
|
||||
} & FormItemProps;
|
||||
|
||||
export type PluginDefine = Registrable & {
|
||||
i18n?: Record<string, any>;
|
||||
default?: any;
|
||||
group?: string;
|
||||
icon?: string;
|
||||
@@ -97,6 +98,7 @@ export type CertTargetItem = {
|
||||
|
||||
export type PipelineEvent<T = any> = {
|
||||
cert: T;
|
||||
certPassword?: string;
|
||||
runnableId: string;
|
||||
pipelineId: number;
|
||||
};
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-huawei",
|
||||
"private": false,
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
"types": "./dist/d/index.d.ts",
|
||||
@@ -31,5 +31,5 @@
|
||||
"prettier": "3.3.3",
|
||||
"tslib": "^2.8.1"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-iframe",
|
||||
"private": false,
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -37,5 +37,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/jdcloud",
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"description": "jdcloud openApi sdk",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
@@ -63,5 +63,5 @@
|
||||
"fetch"
|
||||
]
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-k8s",
|
||||
"private": false,
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -21,7 +21,7 @@
|
||||
"lint": "eslint --fix --ext .ts src"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.45.0",
|
||||
"@certd/basic": "^1.45.1",
|
||||
"@kubernetes/client-node": "0.21.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -38,5 +38,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 完善插件翻译 ([d0463ab](https://github.com/certd/certd/commit/d0463abc2607d22aba50ae3acc6584bbed6e3a0e))
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
### Features
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/lib-server",
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -29,11 +29,11 @@
|
||||
],
|
||||
"license": "AGPL",
|
||||
"dependencies": {
|
||||
"@certd/acme-client": "^1.45.0",
|
||||
"@certd/basic": "^1.45.0",
|
||||
"@certd/pipeline": "^1.45.0",
|
||||
"@certd/plugin-lib": "^1.45.0",
|
||||
"@certd/plus-core": "^1.45.0",
|
||||
"@certd/acme-client": "^1.45.1",
|
||||
"@certd/basic": "^1.45.1",
|
||||
"@certd/pipeline": "^1.45.1",
|
||||
"@certd/plugin-lib": "^1.45.1",
|
||||
"@certd/plus-core": "^1.45.1",
|
||||
"@midwayjs/cache": "3.14.0",
|
||||
"@midwayjs/core": "3.20.11",
|
||||
"@midwayjs/i18n": "3.20.13",
|
||||
@@ -69,5 +69,5 @@
|
||||
"typeorm": "^0.3.20",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ export type AddonDefine = Registrable & {
|
||||
};
|
||||
showTest?: boolean;
|
||||
icon?: string;
|
||||
i18n?: Record<string, any>;
|
||||
};
|
||||
|
||||
export type AddonInstanceConfig = {
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/midway-flyway-js",
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -52,5 +52,5 @@
|
||||
"typeorm": "^0.3.20",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,10 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/plugin-cert",
|
||||
"private": false,
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -20,7 +20,7 @@
|
||||
"lint": "eslint --fix --ext .ts src"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/plugin-lib": "^1.45.0"
|
||||
"@certd/plugin-lib": "^1.45.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/chai": "^4.3.12",
|
||||
@@ -38,5 +38,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,12 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 多语言国际化优化,插件支持国际化配置 ([8f1b38a](https://github.com/certd/certd/commit/8f1b38ad7d445473ae71d537ad8e465f2e55ebc7))
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/plugin-lib",
|
||||
"private": false,
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -17,9 +17,9 @@
|
||||
"lint": "eslint --fix --ext .ts src"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/acme-client": "^1.45.0",
|
||||
"@certd/basic": "^1.45.0",
|
||||
"@certd/pipeline": "^1.45.0",
|
||||
"@certd/acme-client": "^1.45.1",
|
||||
"@certd/basic": "^1.45.1",
|
||||
"@certd/pipeline": "^1.45.1",
|
||||
"dayjs": "^1.11.7",
|
||||
"jszip": "^3.10.1",
|
||||
"lodash-es": "^4.17.21",
|
||||
@@ -45,5 +45,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "fcbf1045fe3806fa1a0bebf5038a6f67aec283d0"
|
||||
"gitHead": "e9b9839d79532e4961dc0de5c097f81235e557f6"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ import { IAccess, IAccessService, IServiceGetter, PageRes, PageSearch, Registrab
|
||||
|
||||
export type DnsProviderDefine = Registrable & {
|
||||
accessType: string;
|
||||
i18n?: Record<string, any>;
|
||||
icon?: string;
|
||||
dependPlugins?: Record<string, string>;
|
||||
dependPackages?: Record<string, string>;
|
||||
|
||||
@@ -3,6 +3,19 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.45.1](https://github.com/certd/certd/compare/v1.45.0...v1.45.1) (2026-10-14)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复批量修改证书申请参数,无法选择证书颁发机构的bug ([9d9ae64](https://github.com/certd/certd/commit/9d9ae64aff76a09d64a5be04968ff0cc3ad097a4))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 插件市场新增同步按钮并调整搜索区域布局 ([41ca198](https://github.com/certd/certd/commit/41ca198116e1890e65973c4317acfecb32126951))
|
||||
* 多语言国际化优化,插件支持国际化配置 ([8f1b38a](https://github.com/certd/certd/commit/8f1b38ad7d445473ae71d537ad8e465f2e55ebc7))
|
||||
* 开放接口支持返回证书密码,需要在openKey主动开启该设置,客户端部署证书时可以直接获取密码部署 ([3e001b8](https://github.com/certd/certd/commit/3e001b8ba431eb9af8c4ea1b20118bcf5e7ebce4))
|
||||
* 证书申请成功通知支持批量修改 ([22715a4](https://github.com/certd/certd/commit/22715a430e24a6132482cadb6b217acc283f270c))
|
||||
|
||||
# [1.45.0](https://github.com/certd/certd/compare/v1.44.4...v1.45.0) (2026-10-02)
|
||||
|
||||
### Features
|
||||
|
||||
@@ -13,7 +13,7 @@ const { packages } = getPackagesSync(process.cwd());
|
||||
|
||||
const tailwindPackages = [];
|
||||
|
||||
packages.forEach((pkg) => {
|
||||
packages.forEach(pkg => {
|
||||
// apps目录下和 @vben-core/tailwind-ui 包需要使用到 tailwindcss ui
|
||||
// if (fs.existsSync(path.join(pkg.dir, 'tailwind.config.mjs'))) {
|
||||
tailwindPackages.push(pkg.dir);
|
||||
@@ -25,96 +25,96 @@ const shadcnUiColors = {
|
||||
DEFAULT: "hsl(var(--accent))",
|
||||
foreground: "hsl(var(--accent-foreground))",
|
||||
hover: "hsl(var(--accent-hover))",
|
||||
lighter: "has(val(--accent-lighter))"
|
||||
lighter: "has(val(--accent-lighter))",
|
||||
},
|
||||
background: {
|
||||
deep: "hsl(var(--background-deep))",
|
||||
DEFAULT: "hsl(var(--background))"
|
||||
DEFAULT: "hsl(var(--background))",
|
||||
},
|
||||
border: {
|
||||
DEFAULT: "hsl(var(--border))"
|
||||
DEFAULT: "hsl(var(--border))",
|
||||
},
|
||||
card: {
|
||||
DEFAULT: "hsl(var(--card))",
|
||||
foreground: "hsl(var(--card-foreground))"
|
||||
foreground: "hsl(var(--card-foreground))",
|
||||
},
|
||||
destructive: {
|
||||
...createColorsPalette("destructive"),
|
||||
DEFAULT: "hsl(var(--destructive))"
|
||||
DEFAULT: "hsl(var(--destructive))",
|
||||
},
|
||||
|
||||
foreground: {
|
||||
DEFAULT: "hsl(var(--foreground))"
|
||||
DEFAULT: "hsl(var(--foreground))",
|
||||
},
|
||||
|
||||
input: {
|
||||
background: "hsl(var(--input-background))",
|
||||
DEFAULT: "hsl(var(--input))"
|
||||
DEFAULT: "hsl(var(--input))",
|
||||
},
|
||||
muted: {
|
||||
DEFAULT: "hsl(var(--muted))",
|
||||
foreground: "hsl(var(--muted-foreground))"
|
||||
foreground: "hsl(var(--muted-foreground))",
|
||||
},
|
||||
popover: {
|
||||
DEFAULT: "hsl(var(--popover))",
|
||||
foreground: "hsl(var(--popover-foreground))"
|
||||
foreground: "hsl(var(--popover-foreground))",
|
||||
},
|
||||
primary: {
|
||||
...createColorsPalette("primary"),
|
||||
DEFAULT: "hsl(var(--primary))"
|
||||
DEFAULT: "hsl(var(--primary))",
|
||||
},
|
||||
|
||||
ring: "hsl(var(--ring))",
|
||||
secondary: {
|
||||
DEFAULT: "hsl(var(--secondary))",
|
||||
desc: "hsl(var(--secondary-desc))",
|
||||
foreground: "hsl(var(--secondary-foreground))"
|
||||
}
|
||||
foreground: "hsl(var(--secondary-foreground))",
|
||||
},
|
||||
};
|
||||
|
||||
const customColors = {
|
||||
green: {
|
||||
...createColorsPalette("green"),
|
||||
foreground: "hsl(var(--success-foreground))"
|
||||
foreground: "hsl(var(--success-foreground))",
|
||||
},
|
||||
header: {
|
||||
DEFAULT: "hsl(var(--header))"
|
||||
DEFAULT: "hsl(var(--header))",
|
||||
},
|
||||
heavy: {
|
||||
DEFAULT: "hsl(var(--heavy))",
|
||||
foreground: "hsl(var(--heavy-foreground))"
|
||||
foreground: "hsl(var(--heavy-foreground))",
|
||||
},
|
||||
main: {
|
||||
DEFAULT: "hsl(var(--main))"
|
||||
DEFAULT: "hsl(var(--main))",
|
||||
},
|
||||
overlay: {
|
||||
content: "hsl(var(--overlay-content))",
|
||||
DEFAULT: "hsl(var(--overlay))"
|
||||
DEFAULT: "hsl(var(--overlay))",
|
||||
},
|
||||
red: {
|
||||
...createColorsPalette("red"),
|
||||
foreground: "hsl(var(--destructive-foreground))"
|
||||
foreground: "hsl(var(--destructive-foreground))",
|
||||
},
|
||||
sidebar: {
|
||||
deep: "hsl(var(--sidebar-deep))",
|
||||
DEFAULT: "hsl(var(--sidebar))"
|
||||
DEFAULT: "hsl(var(--sidebar))",
|
||||
},
|
||||
success: {
|
||||
...createColorsPalette("success"),
|
||||
DEFAULT: "hsl(var(--success))"
|
||||
DEFAULT: "hsl(var(--success))",
|
||||
},
|
||||
warning: {
|
||||
...createColorsPalette("warning"),
|
||||
DEFAULT: "hsl(var(--warning))"
|
||||
DEFAULT: "hsl(var(--warning))",
|
||||
},
|
||||
yellow: {
|
||||
...createColorsPalette("yellow"),
|
||||
foreground: "hsl(var(--warning-foreground))"
|
||||
}
|
||||
foreground: "hsl(var(--warning-foreground))",
|
||||
},
|
||||
};
|
||||
|
||||
export default {
|
||||
content: ["./index.html", ...tailwindPackages.map((item) => path.join(item, "src/**/*.{vue,js,ts,jsx,tsx,svelte,astro,html}"))],
|
||||
content: ["./index.html", ...tailwindPackages.map(item => path.join(item, "src/**/*.{vue,js,ts,jsx,tsx,svelte,astro,html}"))],
|
||||
darkMode: "selector",
|
||||
plugins: [animate, typographyPlugin, addDynamicIconSelectors(), enterAnimationPlugin],
|
||||
prefix: "",
|
||||
@@ -123,8 +123,8 @@ export default {
|
||||
center: true,
|
||||
padding: "2rem",
|
||||
screens: {
|
||||
"2xl": "1400px"
|
||||
}
|
||||
"2xl": "1400px",
|
||||
},
|
||||
},
|
||||
extend: {
|
||||
animation: {
|
||||
@@ -132,64 +132,67 @@ export default {
|
||||
"accordion-up": "accordion-up 0.2s ease-out",
|
||||
"collapsible-down": "collapsible-down 0.2s ease-in-out",
|
||||
"collapsible-up": "collapsible-up 0.2s ease-in-out",
|
||||
float: "float 5s linear 0ms infinite"
|
||||
float: "float 5s linear 0ms infinite",
|
||||
},
|
||||
flex: {
|
||||
2: "2 1 0%",
|
||||
},
|
||||
|
||||
animationDuration: {
|
||||
2000: "2000ms",
|
||||
3000: "3000ms"
|
||||
3000: "3000ms",
|
||||
},
|
||||
borderRadius: {
|
||||
lg: "var(--radius)",
|
||||
md: "calc(var(--radius) - 2px)",
|
||||
sm: "calc(var(--radius) - 4px)",
|
||||
xl: "calc(var(--radius) + 4px)"
|
||||
xl: "calc(var(--radius) + 4px)",
|
||||
},
|
||||
boxShadow: {
|
||||
float: `0 6px 16px 0 rgb(0 0 0 / 8%),
|
||||
0 3px 6px -4px rgb(0 0 0 / 12%),
|
||||
0 9px 28px 8px rgb(0 0 0 / 5%)`
|
||||
0 9px 28px 8px rgb(0 0 0 / 5%)`,
|
||||
},
|
||||
colors: {
|
||||
...customColors,
|
||||
...shadcnUiColors
|
||||
...shadcnUiColors,
|
||||
},
|
||||
fontFamily: {
|
||||
sans: [
|
||||
"var(--font-family)"
|
||||
"var(--font-family)",
|
||||
// ...defaultTheme.fontFamily.sans
|
||||
]
|
||||
],
|
||||
},
|
||||
keyframes: {
|
||||
"accordion-down": {
|
||||
from: { height: "0" },
|
||||
to: { height: "var(--radix-accordion-content-height)" }
|
||||
to: { height: "var(--radix-accordion-content-height)" },
|
||||
},
|
||||
"accordion-up": {
|
||||
from: { height: "var(--radix-accordion-content-height)" },
|
||||
to: { height: "0" }
|
||||
to: { height: "0" },
|
||||
},
|
||||
"collapsible-down": {
|
||||
from: { height: "0" },
|
||||
to: { height: "var(--radix-collapsible-content-height)" }
|
||||
to: { height: "var(--radix-collapsible-content-height)" },
|
||||
},
|
||||
"collapsible-up": {
|
||||
from: { height: "var(--radix-collapsible-content-height)" },
|
||||
to: { height: "0" }
|
||||
to: { height: "0" },
|
||||
},
|
||||
float: {
|
||||
"0%": { transform: "translateY(0)" },
|
||||
"50%": { transform: "translateY(-20px)" },
|
||||
"100%": { transform: "translateY(0)" }
|
||||
}
|
||||
"100%": { transform: "translateY(0)" },
|
||||
},
|
||||
},
|
||||
zIndex: {
|
||||
100: "100",
|
||||
1000: "1000"
|
||||
}
|
||||
}
|
||||
1000: "1000",
|
||||
},
|
||||
},
|
||||
},
|
||||
safelist: ["dark"]
|
||||
safelist: ["dark"],
|
||||
};
|
||||
|
||||
function createColorsPalette(name) {
|
||||
@@ -249,6 +252,6 @@ function createColorsPalette(name) {
|
||||
// 主色文本激活态
|
||||
"text-active": `hsl(var(--${name}-700))`,
|
||||
// 主色文本悬浮态
|
||||
"text-hover": `hsl(var(--${name}-600))`
|
||||
"text-hover": `hsl(var(--${name}-600))`,
|
||||
};
|
||||
}
|
||||
|
||||
@@ -10,6 +10,6 @@ export default {
|
||||
"postcss-import": {},
|
||||
"postcss-preset-env": {},
|
||||
tailwindcss: { config },
|
||||
"tailwindcss/nesting": {}
|
||||
}
|
||||
"tailwindcss/nesting": {},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/ui-client",
|
||||
"version": "1.45.0",
|
||||
"version": "1.45.1",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite --open",
|
||||
@@ -34,11 +34,11 @@
|
||||
"@aws-sdk/s3-request-presigner": "^3.964.0",
|
||||
"@certd/vue-js-cron-light": "^4.0.14",
|
||||
"@ctrl/tinycolor": "^4.1.0",
|
||||
"@fast-crud/editor-code": "^1.28.7",
|
||||
"@fast-crud/fast-crud": "^1.28.7",
|
||||
"@fast-crud/fast-extends": "^1.28.7",
|
||||
"@fast-crud/ui-antdv4": "^1.28.7",
|
||||
"@fast-crud/ui-interface": "^1.28.7",
|
||||
"@fast-crud/editor-code": "^1.29.0",
|
||||
"@fast-crud/fast-crud": "^1.29.0",
|
||||
"@fast-crud/fast-extends": "^1.29.0",
|
||||
"@fast-crud/ui-antdv4": "^1.29.0",
|
||||
"@fast-crud/ui-interface": "^1.29.0",
|
||||
"@iconify/tailwind": "^1.2.0",
|
||||
"@iconify/vue": "^4.1.1",
|
||||
"@manypkg/get-packages": "^2.2.2",
|
||||
@@ -104,8 +104,8 @@
|
||||
"zod-defaults": "^0.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@certd/lib-iframe": "^1.45.0",
|
||||
"@certd/pipeline": "^1.45.0",
|
||||
"@certd/lib-iframe": "^1.45.1",
|
||||
"@certd/pipeline": "^1.45.1",
|
||||
"@rollup/plugin-commonjs": "^25.0.7",
|
||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||
"@types/chai": "^4.3.12",
|
||||
|
||||
@@ -4,6 +4,7 @@ import { errorLog, errorCreate } from "./tools";
|
||||
import { env } from "/src/utils/util.env";
|
||||
import { useUserStore } from "/@/store/user";
|
||||
import { useProjectStore } from "../store/project";
|
||||
import { i18n } from "/@/locales";
|
||||
|
||||
export class CodeError extends Error {
|
||||
code: number;
|
||||
@@ -139,6 +140,7 @@ function createRequestFunction(service: any) {
|
||||
const configDefault: any = {
|
||||
headers: {
|
||||
"Content-Type": get(config, "headers.Content-Type", "application/json"),
|
||||
"Accept-Language": i18n.global.locale.value,
|
||||
} as any,
|
||||
timeout: 30000,
|
||||
baseURL: env.API,
|
||||
@@ -154,6 +156,10 @@ function createRequestFunction(service: any) {
|
||||
configDefault.headers.Authorization = token;
|
||||
}
|
||||
Object.assign(configDefault, config);
|
||||
configDefault.headers = {
|
||||
...configDefault.headers,
|
||||
"Accept-Language": i18n.global.locale.value,
|
||||
};
|
||||
|
||||
if (!configDefault.params.projectId && projectStore.isEnterprise && !config.url.startsWith("/sys") && !config.url.startsWith("http")) {
|
||||
configDefault.params.projectId = projectStore.currentProject?.id;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
<template>
|
||||
<div class="flex captcha-image-input">
|
||||
<a-input :value="valueRef" :placeholder="t('certd.captcha.inputImageCode')" autocomplete="off" @update:value="onChange">
|
||||
<a-input :value="valueRef" :placeholder="t('certd.common.captcha.inputImageCode')" autocomplete="off" @update:value="onChange">
|
||||
<template #prefix>
|
||||
<fs-icon icon="ion:image-outline"></fs-icon>
|
||||
</template>
|
||||
</a-input>
|
||||
<div class="input-right pointer" :title="t('certd.captcha.refresh')">
|
||||
<div class="input-right pointer" :title="t('certd.common.captcha.refresh')">
|
||||
<img class="image-code" :src="imageCodeSrc" @click="resetImageCode" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -4,8 +4,8 @@
|
||||
<div class="sweep-animation"></div>
|
||||
<div class="box-content">
|
||||
<div class="box-icon">✓</div>
|
||||
<span v-if="modelValue == null" class="status-text">{{ t("certd.captcha.clickToVerify") }}</span>
|
||||
<span v-else class="status-text">{{ t("certd.captcha.verifySuccess") }}</span>
|
||||
<span v-if="modelValue == null" class="status-text">{{ t("certd.common.captcha.clickToVerify") }}</span>
|
||||
<span v-else class="status-text">{{ t("certd.common.captcha.verifySuccess") }}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -58,7 +58,7 @@ function callback(res: { ret: number; ticket: string; randstr: string; errorCode
|
||||
|
||||
if (res.errorCode && res.errorCode > 0) {
|
||||
notification.error({
|
||||
message: t("certd.captcha.verifyFailed", { message: res.errorMessage || res.errorCode }),
|
||||
message: t("certd.common.captcha.verifyFailed", { message: res.errorMessage || res.errorCode }),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -85,13 +85,13 @@ function loadErrorCallback(error: any) {
|
||||
// errorMessage: "jsload_error",
|
||||
// });
|
||||
notification.error({
|
||||
message: t("certd.captcha.loadFailed", { message: error?.message || error }),
|
||||
message: t("certd.common.captcha.loadFailed", { message: error?.message || error }),
|
||||
});
|
||||
}
|
||||
async function triggerCaptcha() {
|
||||
if (!loaded.value) {
|
||||
notification.error({
|
||||
message: t("certd.captcha.notLoaded"),
|
||||
message: t("certd.common.captcha.notLoaded"),
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
+7
-5
@@ -5,6 +5,7 @@
|
||||
<script lang="ts">
|
||||
import { ref } from "vue";
|
||||
import * as api from "./api";
|
||||
import { resolvePluginLocale } from "/@/store/plugin";
|
||||
|
||||
export default {
|
||||
name: "DnsProviderSelector",
|
||||
@@ -21,12 +22,13 @@ export default {
|
||||
async function onCreate() {
|
||||
const list = await api.GetList();
|
||||
const array: any[] = [];
|
||||
for (let item of list) {
|
||||
for (const item of list) {
|
||||
const localizedItem = resolvePluginLocale(item);
|
||||
array.push({
|
||||
value: item.name,
|
||||
label: item.title,
|
||||
icon: item.icon,
|
||||
accessType: item.accessType,
|
||||
value: localizedItem.name,
|
||||
label: localizedItem.title,
|
||||
icon: localizedItem.icon,
|
||||
accessType: localizedItem.accessType,
|
||||
});
|
||||
}
|
||||
options.value = array;
|
||||
|
||||
+11
-11
@@ -4,7 +4,7 @@
|
||||
<!-- <td class="domain">-->
|
||||
<!-- {{ props.domain }}-->
|
||||
<!-- </td>-->
|
||||
<td class="host-record" :title="t('certd.verifyPlan.domainTitle', { domain: props.domain })">
|
||||
<td class="host-record" :title="t('certd.certdomain.verifyPlan.domainTitle', { domain: props.domain })">
|
||||
<fs-copyable v-model="cnameRecord.hostRecord"></fs-copyable>
|
||||
</td>
|
||||
<td style="text-align: center">CNAME</td>
|
||||
@@ -17,18 +17,18 @@
|
||||
<a-tooltip v-if="cnameRecord.error" :title="cnameRecord.error">
|
||||
<fs-icon class="ml-5 color-red" icon="ion:warning-outline"></fs-icon>
|
||||
</a-tooltip>
|
||||
<a-tooltip v-if="cnameRecord.status === 'valid'" :title="t('certd.verifyPlan.resetStatusTooltip')">
|
||||
<a-tooltip v-if="cnameRecord.status === 'valid'" :title="t('certd.certdomain.verifyPlan.resetStatusTooltip')">
|
||||
<fs-icon class="ml-2 color-yellow text-md pointer" icon="solar:undo-left-square-bold" @click="resetStatus"></fs-icon>
|
||||
</a-tooltip>
|
||||
</span>
|
||||
</td>
|
||||
<td class="center">
|
||||
<template v-if="cnameRecord.status !== 'valid'">
|
||||
<a-button type="primary" size="small" :loading="loading" @click="doVerify">{{ t("certd.verifyPlan.clickToValidate") }}</a-button>
|
||||
<a-button type="primary" size="small" :loading="loading" @click="doVerify">{{ t("certd.certdomain.verifyPlan.clickToValidate") }}</a-button>
|
||||
<cname-tip :record="cnameRecord"></cname-tip>
|
||||
</template>
|
||||
|
||||
<div v-else class="helper" :title="t('certd.verifyPlan.keepCnameTitle')">{{ t("certd.verifyPlan.keepCname") }}</div>
|
||||
<div v-else class="helper" :title="t('certd.certdomain.verifyPlan.keepCnameTitle')">{{ t("certd.certdomain.verifyPlan.keepCname") }}</div>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
@@ -46,11 +46,11 @@ import { utils } from "/@/utils/index.js";
|
||||
const { t } = useI18n();
|
||||
const statusDict = dict({
|
||||
data: [
|
||||
{ label: t("certd.verifyPlan.status.pendingCname"), value: "cname", color: "warning" },
|
||||
{ label: t("certd.verifyPlan.status.validating"), value: "validating", color: "blue" },
|
||||
{ label: t("certd.verifyPlan.status.valid"), value: "valid", color: "green" },
|
||||
{ label: t("certd.verifyPlan.status.failed"), value: "failed", color: "red" },
|
||||
{ label: t("certd.verifyPlan.status.timeout"), value: "timeout", color: "red" },
|
||||
{ label: t("certd.certdomain.verifyPlan.status.pendingCname"), value: "cname", color: "warning" },
|
||||
{ label: t("certd.certdomain.verifyPlan.status.validating"), value: "validating", color: "blue" },
|
||||
{ label: t("certd.certdomain.verifyPlan.status.valid"), value: "valid", color: "green" },
|
||||
{ label: t("certd.certdomain.verifyPlan.status.failed"), value: "failed", color: "red" },
|
||||
{ label: t("certd.certdomain.verifyPlan.status.timeout"), value: "timeout", color: "red" },
|
||||
],
|
||||
});
|
||||
|
||||
@@ -129,8 +129,8 @@ async function doVerify() {
|
||||
|
||||
async function resetStatus() {
|
||||
Modal.confirm({
|
||||
title: t("certd.verifyPlan.resetStatus"),
|
||||
content: t("certd.verifyPlan.confirmResetStatus"),
|
||||
title: t("certd.certdomain.verifyPlan.resetStatus"),
|
||||
content: t("certd.certdomain.verifyPlan.confirmResetStatus"),
|
||||
onOk: async () => {
|
||||
await api.ResetStatus(cnameRecord.value.id);
|
||||
await loadRecord();
|
||||
|
||||
+7
-7
@@ -2,17 +2,17 @@
|
||||
<a-tooltip :overlay-style="{ maxWidth: '400px' }">
|
||||
<template #title>
|
||||
<div>
|
||||
<div>{{ t("certd.verifyPlan.cnameTip.intro") }}</div>
|
||||
<div>{{ t("certd.verifyPlan.cnameTip.step1", { domain: record.domain }) }}</div>
|
||||
<div>{{ t("certd.verifyPlan.cnameTip.step2") }}</div>
|
||||
<div>{{ t("certd.verifyPlan.cnameTip.step3", { value: record.recordValue }) }}</div>
|
||||
<div>{{ t("certd.certdomain.verifyPlan.cnameTip.intro") }}</div>
|
||||
<div>{{ t("certd.certdomain.verifyPlan.cnameTip.step1", { domain: record.domain }) }}</div>
|
||||
<div>{{ t("certd.certdomain.verifyPlan.cnameTip.step2") }}</div>
|
||||
<div>{{ t("certd.certdomain.verifyPlan.cnameTip.step3", { value: record.recordValue }) }}</div>
|
||||
<div>
|
||||
{{ t("certd.verifyPlan.cnameTip.step4") }}
|
||||
{{ t("certd.certdomain.verifyPlan.cnameTip.step4") }}
|
||||
<fs-copyable :style="{ color: '#52c41a' }" :model-value="nslookupCmd"></fs-copyable>
|
||||
{{ t("certd.verifyPlan.cnameTip.or") }}
|
||||
{{ t("certd.certdomain.verifyPlan.cnameTip.or") }}
|
||||
<fs-copyable :style="{ color: '#52c41a' }" :model-value="digCmd"></fs-copyable>
|
||||
</div>
|
||||
<div>{{ t("certd.verifyPlan.cnameTip.step5") }}</div>
|
||||
<div>{{ t("certd.certdomain.verifyPlan.cnameTip.step5") }}</div>
|
||||
</div>
|
||||
</template>
|
||||
<fs-icon class="ml-5 pointer" icon="mingcute:question-line"></fs-icon>
|
||||
|
||||
+5
-5
@@ -2,11 +2,11 @@
|
||||
<table class="cname-verify-plan">
|
||||
<thead>
|
||||
<tr>
|
||||
<td class="col-host">{{ t("certd.verifyPlan.hostRecord") }}</td>
|
||||
<td class="col-type center">{{ t("certd.verifyPlan.recordType") }}</td>
|
||||
<td class="col-value">{{ t("certd.verifyPlan.setCnameRecord") }}</td>
|
||||
<td class="col-status center">{{ t("certd.status") }}</td>
|
||||
<td class="col-action center">{{ t("certd.verifyPlan.operation") }}</td>
|
||||
<td class="col-host">{{ t("certd.certdomain.verifyPlan.hostRecord") }}</td>
|
||||
<td class="col-type center">{{ t("certd.certdomain.verifyPlan.recordType") }}</td>
|
||||
<td class="col-value">{{ t("certd.certdomain.verifyPlan.setCnameRecord") }}</td>
|
||||
<td class="col-status center">{{ t("certd.common.status") }}</td>
|
||||
<td class="col-action center">{{ t("certd.certdomain.verifyPlan.operation") }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<template v-for="key in domains" :key="key">
|
||||
|
||||
+5
-5
@@ -2,10 +2,10 @@
|
||||
<table class="http-verify-plan">
|
||||
<thead>
|
||||
<tr>
|
||||
<td style="width: 160px">{{ t("certd.verifyPlan.websiteDomain") }}</td>
|
||||
<td style="width: 100px; text-align: center">{{ t("certd.verifyPlan.uploadMethod") }}</td>
|
||||
<td style="width: 150px">{{ t("certd.verifyPlan.uploadAccess") }}</td>
|
||||
<td style="width: 200px">{{ t("certd.verifyPlan.websiteRootPath") }}</td>
|
||||
<td style="width: 160px">{{ t("certd.certdomain.verifyPlan.websiteDomain") }}</td>
|
||||
<td style="width: 100px; text-align: center">{{ t("certd.certdomain.verifyPlan.uploadMethod") }}</td>
|
||||
<td style="width: 150px">{{ t("certd.certdomain.verifyPlan.uploadAccess") }}</td>
|
||||
<td style="width: 200px">{{ t("certd.certdomain.verifyPlan.websiteRootPath") }}</td>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody v-if="records" class="http-record-body">
|
||||
@@ -21,7 +21,7 @@
|
||||
<access-selector v-model="item.httpUploaderAccess" :type="item.httpUploaderType" @change="onRecordChange"></access-selector>
|
||||
</td>
|
||||
<td>
|
||||
<a-input v-model:value="item.httpUploadRootDir" :placeholder="t('certd.verifyPlan.websiteRootPlaceholder')" @change="onRecordChange"></a-input>
|
||||
<a-input v-model:value="item.httpUploadRootDir" :placeholder="t('certd.certdomain.verifyPlan.websiteRootPlaceholder')" @change="onRecordChange"></a-input>
|
||||
</td>
|
||||
</tr>
|
||||
</template>
|
||||
|
||||
+12
-12
@@ -5,7 +5,7 @@
|
||||
<div class="plan-box bg-white dark:bg-neutral-700">
|
||||
<div class="fullscreen-button pointer flex-center" @click="fullscreen = !fullscreen">
|
||||
<span v-if="!fullscreen" style="font-size: 10px" class="flex-center">
|
||||
{{ t("certd.verifyPlan.expandTip") }}
|
||||
{{ t("certd.certdomain.verifyPlan.expandTip") }}
|
||||
<fs-icon icon="ion:arrow-forward-outline"></fs-icon>
|
||||
</span>
|
||||
<fs-icon :icon="fullscreen ? 'material-symbols:fullscreen-exit' : 'material-symbols:fullscreen'"></fs-icon>
|
||||
@@ -13,9 +13,9 @@
|
||||
<table class="plan-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="min-width: 100px">{{ t("certd.verifyPlan.mainDomain") }}</th>
|
||||
<th>{{ t("certd.verifyPlan.challengeType") }}</th>
|
||||
<th>{{ t("certd.verifyPlan.challengePlan") }}</th>
|
||||
<th style="min-width: 100px">{{ t("certd.certdomain.verifyPlan.mainDomain") }}</th>
|
||||
<th>{{ t("certd.certdomain.verifyPlan.challengeType") }}</th>
|
||||
<th>{{ t("certd.certdomain.verifyPlan.challengePlan") }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@@ -30,13 +30,13 @@
|
||||
<div class="plan">
|
||||
<div v-if="item.type === 'dns'" class="plan-dns">
|
||||
<div class="form-item">
|
||||
<span class="label">{{ t("certd.verifyPlan.dnsType") }}:</span>
|
||||
<span class="label">{{ t("certd.certdomain.verifyPlan.dnsType") }}:</span>
|
||||
<span class="input">
|
||||
<fs-dict-select
|
||||
v-model:value="item.dnsProviderType"
|
||||
size="small"
|
||||
:dict="dnsProviderTypeDict"
|
||||
:placeholder="t('certd.verifyPlan.dnsProvider')"
|
||||
:placeholder="t('certd.certdomain.verifyPlan.dnsProvider')"
|
||||
@change="onPlanChanged"
|
||||
@selected-change="onDnsProviderChange(item, $event)"
|
||||
></fs-dict-select>
|
||||
@@ -44,13 +44,13 @@
|
||||
</div>
|
||||
<a-divider type="vertical" />
|
||||
<div class="form-item">
|
||||
<span class="label">{{ t("certd.verifyPlan.dnsAccess") }}:</span>
|
||||
<span class="label">{{ t("certd.certdomain.verifyPlan.dnsAccess") }}:</span>
|
||||
<span class="input">
|
||||
<access-selector
|
||||
v-model="item.dnsProviderAccessId"
|
||||
size="small"
|
||||
:type="item.dnsProviderAccessType || item.dnsProviderType"
|
||||
:placeholder="t('certd.verifyPlan.pleaseSelect')"
|
||||
:placeholder="t('certd.certdomain.verifyPlan.pleaseSelect')"
|
||||
@change="onPlanChanged"
|
||||
></access-selector>
|
||||
</span>
|
||||
@@ -70,7 +70,7 @@
|
||||
</div>
|
||||
<div v-if="item.type === 'http'" class="plan-http">
|
||||
<http-verify-plan v-model="item.httpVerifyPlan" @change="onPlanChanged" />
|
||||
<div class="helper">{{ t("certd.verifyPlan.httpHelper") }}</div>
|
||||
<div class="helper">{{ t("certd.certdomain.verifyPlan.httpHelper") }}</div>
|
||||
</div>
|
||||
</div>
|
||||
</td>
|
||||
@@ -105,7 +105,7 @@ const { t } = useI18n();
|
||||
|
||||
const challengeTypeOptions = ref<any[]>([
|
||||
{
|
||||
label: t("certd.verifyPlan.dnsChallenge"),
|
||||
label: t("certd.certdomain.verifyPlan.dnsChallenge"),
|
||||
value: "dns",
|
||||
},
|
||||
{
|
||||
@@ -113,11 +113,11 @@ const challengeTypeOptions = ref<any[]>([
|
||||
value: "dns-persist",
|
||||
},
|
||||
{
|
||||
label: t("certd.verifyPlan.cnameChallenge"),
|
||||
label: t("certd.certdomain.verifyPlan.cnameChallenge"),
|
||||
value: "cname",
|
||||
},
|
||||
{
|
||||
label: t("certd.verifyPlan.httpChallenge"),
|
||||
label: t("certd.certdomain.verifyPlan.httpChallenge"),
|
||||
value: "http",
|
||||
},
|
||||
]);
|
||||
|
||||
+6
-6
@@ -14,7 +14,7 @@ function checkDomainVerifyPlan(rule: any, value: DomainsVerifyPlanInput) {
|
||||
for (const subDomain of subDomains) {
|
||||
const plan = value[domain].cnameVerifyPlan[subDomain];
|
||||
if (plan.status !== "valid") {
|
||||
throw new Error($t("certd.verifyPlan.errors.cnameNotValid", { domain: subDomain }));
|
||||
throw new Error($t("certd.certdomain.verifyPlan.errors.cnameNotValid", { domain: subDomain }));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -23,7 +23,7 @@ function checkDomainVerifyPlan(rule: any, value: DomainsVerifyPlanInput) {
|
||||
for (const item of domains) {
|
||||
//如果有通配符域名则不允许使用http校验
|
||||
if (item.startsWith("*.")) {
|
||||
throw new Error($t("certd.verifyPlan.errors.wildcardNotSupportHttp", { domain: item }));
|
||||
throw new Error($t("certd.certdomain.verifyPlan.errors.wildcardNotSupportHttp", { domain: item }));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,19 +32,19 @@ function checkDomainVerifyPlan(rule: any, value: DomainsVerifyPlanInput) {
|
||||
for (const subDomain of subDomains) {
|
||||
const plan = value[domain].httpVerifyPlan[subDomain];
|
||||
if (!plan.httpUploaderType) {
|
||||
throw new Error($t("certd.verifyPlan.errors.uploadMethodRequired", { domain: subDomain }));
|
||||
throw new Error($t("certd.certdomain.verifyPlan.errors.uploadMethodRequired", { domain: subDomain }));
|
||||
}
|
||||
if (!plan.httpUploaderAccess) {
|
||||
throw new Error($t("certd.verifyPlan.errors.uploadAccessRequired", { domain: subDomain }));
|
||||
throw new Error($t("certd.certdomain.verifyPlan.errors.uploadAccessRequired", { domain: subDomain }));
|
||||
}
|
||||
if (!plan.httpUploadRootDir) {
|
||||
throw new Error($t("certd.verifyPlan.errors.websiteRootRequired", { domain: subDomain }));
|
||||
throw new Error($t("certd.certdomain.verifyPlan.errors.websiteRootRequired", { domain: subDomain }));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (type === "dns") {
|
||||
if (!value[domain].dnsProviderType || !value[domain].dnsProviderAccessId) {
|
||||
throw new Error($t("certd.verifyPlan.errors.dnsProviderRequired", { domain }));
|
||||
throw new Error($t("certd.certdomain.verifyPlan.errors.dnsProviderRequired", { domain }));
|
||||
}
|
||||
} else if (type === "dns-persist") {
|
||||
const subDomains = Object.keys(value[domain].dnsPersistVerifyPlan || {});
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<template>
|
||||
<div class="api-test">
|
||||
<div>
|
||||
<fs-button :loading="loading" type="primary" :text="t('certd.pluginCommon.test')" icon="ion:refresh-outline" @click="doTest"></fs-button>
|
||||
<fs-button :loading="loading" type="primary" :text="t('certd.common.pluginCommon.test')" icon="ion:refresh-outline" @click="doTest"></fs-button>
|
||||
</div>
|
||||
|
||||
<div class="helper" :class="{ error: hasError }">
|
||||
@@ -64,14 +64,14 @@ const doTest = async () => {
|
||||
{
|
||||
onError(err: any) {
|
||||
hasError.value = true;
|
||||
message.value = t("certd.pluginCommon.errorWithMessage", { message: err.message });
|
||||
message.value = t("certd.common.pluginCommon.errorWithMessage", { message: err.message });
|
||||
},
|
||||
showErrorNotify: false,
|
||||
}
|
||||
);
|
||||
message.value = t("certd.pluginCommon.testRequestSuccess");
|
||||
message.value = t("certd.common.pluginCommon.testRequestSuccess");
|
||||
if (res) {
|
||||
message.value += t("certd.pluginCommon.responseSuffix", { response: JSON.stringify(res) });
|
||||
message.value += t("certd.common.pluginCommon.responseSuffix", { response: JSON.stringify(res) });
|
||||
}
|
||||
} finally {
|
||||
loading.value = false;
|
||||
|
||||
@@ -42,7 +42,7 @@ function findStepFromPipeline(targetStepId: string) {
|
||||
const errorRef = ref("");
|
||||
function getStepIdFromInputKey(inputKey: string) {
|
||||
if (!inputKey) {
|
||||
errorRef.value = t("certd.pluginCommon.selectCertFirst");
|
||||
errorRef.value = t("certd.common.pluginCommon.selectCertFirst");
|
||||
return;
|
||||
}
|
||||
return inputKey.split(".")[1];
|
||||
@@ -51,7 +51,7 @@ function getDomainFromPipeline(inputKey: string) {
|
||||
let targetStepId = getStepIdFromInputKey(inputKey);
|
||||
let certStep = findStepFromPipeline(targetStepId);
|
||||
if (!certStep) {
|
||||
errorRef.value = t("certd.pluginCommon.targetStepNotFound");
|
||||
errorRef.value = t("certd.common.pluginCommon.targetStepNotFound");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ function getDomainFromPipeline(inputKey: string) {
|
||||
targetStepId = getStepIdFromInputKey(firstLevelValue);
|
||||
certStep = findStepFromPipeline(targetStepId);
|
||||
if (!certStep) {
|
||||
errorRef.value = t("certd.pluginCommon.targetStepNotFound");
|
||||
errorRef.value = t("certd.common.pluginCommon.targetStepNotFound");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<template>
|
||||
<template>
|
||||
<div class="domain-select">
|
||||
<div class="flex flex-row">
|
||||
<a-select
|
||||
@@ -18,12 +18,12 @@
|
||||
<template v-if="search">
|
||||
<div class="flex w-full items-center justify-between flex-wrap" style="padding: 4px 8px">
|
||||
<div class="flex-1 flex flex-row items-center">
|
||||
<a-input ref="inputRef" v-model:value="searchKeyRef" class="flex-1" allow-clear :placeholder="t('certd.pluginCommon.domainSearchPlaceholder')" @keydown.enter="doSearch" />
|
||||
<fs-button type="primary" class="m-1" :loading="loading" icon="mingcute:search-2-line" @click="doSearch">{{ t("certd.pluginCommon.search") }}</fs-button>
|
||||
<a-input ref="inputRef" v-model:value="searchKeyRef" class="flex-1" allow-clear :placeholder="t('certd.common.pluginCommon.domainSearchPlaceholder')" @keydown.enter="doSearch" />
|
||||
<fs-button type="primary" class="m-1" :loading="loading" icon="mingcute:search-2-line" @click="doSearch">{{ t("certd.common.pluginCommon.search") }}</fs-button>
|
||||
</div>
|
||||
<div class="manager flex flex-row items-center">
|
||||
<fs-button type="primary" class="m-1" icon="mingcute:vip-1-line" @click="openDomainImportDialog">{{ t("certd.pluginCommon.importDomain") }}</fs-button>
|
||||
<fs-button class="m-1" type="primary" icon="carbon:gui-management" @click="openDomainManager">{{ t("certd.pluginCommon.manageDomain") }}</fs-button>
|
||||
<fs-button type="primary" class="m-1" icon="mingcute:vip-1-line" @click="openDomainImportDialog">{{ t("certd.common.pluginCommon.importDomain") }}</fs-button>
|
||||
<fs-button class="m-1" type="primary" icon="carbon:gui-management" @click="openDomainManager">{{ t("certd.common.pluginCommon.manageDomain") }}</fs-button>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="hasError" class="helper p-2" :class="{ error: hasError }">
|
||||
@@ -49,7 +49,7 @@
|
||||
</a-select>
|
||||
<div class="ml-5 flex flex-row items-center">
|
||||
<fs-button title="复制全部域名" icon="ion:copy-outline" class="domain-select-copy-icon mr-5" @click="copySelectedDomains" />
|
||||
<fs-button :loading="loading" :title="t('certd.pluginCommon.refreshMyDomains')" icon="ion:refresh-outline" @click="refreshOptions"></fs-button>
|
||||
<fs-button :loading="loading" :title="t('certd.common.pluginCommon.refreshMyDomains')" icon="ion:refresh-outline" @click="refreshOptions"></fs-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="helper" :class="{ error: hasError }">
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<a-auto-complete class="remote-auto-complete-input" :filter-option="filterOption" :options="optionsRef" :value="value" v-bind="attrs" @click="onClick" @update:value="emit('update:value', $event)">
|
||||
</a-auto-complete>
|
||||
<div class="ml-5">
|
||||
<fs-button :loading="loading" :title="t('certd.pluginCommon.refreshOptions')" icon="ion:refresh-outline" @click="refreshOptions"></fs-button>
|
||||
<fs-button :loading="loading" :title="t('certd.common.pluginCommon.refreshOptions')" icon="ion:refresh-outline" @click="refreshOptions"></fs-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="helper" :class="{ error: hasError }">
|
||||
@@ -96,16 +96,16 @@ const getOptions = async () => {
|
||||
{
|
||||
onError(err: any) {
|
||||
hasError.value = true;
|
||||
message.value = t("certd.pluginCommon.getOptionsError", { message: err.message });
|
||||
message.value = t("certd.common.pluginCommon.getOptionsError", { message: err.message });
|
||||
},
|
||||
showErrorNotify: false,
|
||||
}
|
||||
);
|
||||
const list = res?.list || res || [];
|
||||
if (list.length > 0) {
|
||||
message.value = t("certd.pluginCommon.getDataSuccessSelect");
|
||||
message.value = t("certd.common.pluginCommon.getDataSuccessSelect");
|
||||
} else {
|
||||
message.value = t("certd.pluginCommon.getDataSuccessEmpty");
|
||||
message.value = t("certd.common.pluginCommon.getDataSuccessEmpty");
|
||||
}
|
||||
optionsRef.value = list;
|
||||
|
||||
|
||||
@@ -55,7 +55,7 @@ async function openDialog() {
|
||||
saveRemind: false,
|
||||
},
|
||||
afterSubmit() {
|
||||
notification.success({ message: t("certd.operationSuccess") });
|
||||
notification.success({ message: t("certd.common.operationSuccess") });
|
||||
},
|
||||
async doSubmit({ form }: any) {
|
||||
return await doPluginFormSubmit(form);
|
||||
|
||||
@@ -5,12 +5,12 @@
|
||||
<template #dropdownRender="{ menuNode: menu }">
|
||||
<template v-if="search">
|
||||
<div class="flex w-full" style="padding: 4px 8px">
|
||||
<a-input ref="inputRef" v-model:value="searchKeyRef" class="flex-1" allow-clear :placeholder="t('certd.pluginCommon.searchKeyword')" @keydown.enter="doSearch" />
|
||||
<a-input ref="inputRef" v-model:value="searchKeyRef" class="flex-1" allow-clear :placeholder="t('certd.common.pluginCommon.searchKeyword')" @keydown.enter="doSearch" />
|
||||
<a-button class="ml-2" :loading="loading" type="text" @click="doSearch">
|
||||
<template #icon>
|
||||
<search-outlined />
|
||||
</template>
|
||||
{{ t("certd.pluginCommon.search") }}
|
||||
{{ t("certd.common.pluginCommon.search") }}
|
||||
</a-button>
|
||||
</div>
|
||||
<div v-if="hasError" class="helper p-2" :class="{ error: hasError }">
|
||||
@@ -26,7 +26,7 @@
|
||||
</template>
|
||||
</a-select>
|
||||
<div class="ml-5 flex flex-row no-wrap">
|
||||
<fs-button :loading="loading" :title="t('certd.pluginCommon.refreshOptions')" icon="ion:refresh-outline" @click="refreshOptions"></fs-button>
|
||||
<fs-button :loading="loading" :title="t('certd.common.pluginCommon.refreshOptions')" icon="ion:refresh-outline" @click="refreshOptions"></fs-button>
|
||||
<UploadCert v-if="uploadCert" class="ml-5" v-bind="uploadCert" @submit="refreshOptions"></UploadCert>
|
||||
</div>
|
||||
</div>
|
||||
@@ -177,7 +177,7 @@ const getOptions = async () => {
|
||||
{
|
||||
onError(err: any) {
|
||||
hasError.value = true;
|
||||
message.value = t("certd.pluginCommon.getOptionsError", { message: err.message });
|
||||
message.value = t("certd.common.pluginCommon.getOptionsError", { message: err.message });
|
||||
optionsRef.value = [];
|
||||
},
|
||||
showErrorNotify: false,
|
||||
@@ -185,9 +185,9 @@ const getOptions = async () => {
|
||||
);
|
||||
let list = res?.list || res || [];
|
||||
if (list.length > 0) {
|
||||
message.value = t("certd.pluginCommon.getDataSuccessSelect");
|
||||
message.value = t("certd.common.pluginCommon.getDataSuccessSelect");
|
||||
} else {
|
||||
message.value = t("certd.pluginCommon.getDataSuccessEmpty");
|
||||
message.value = t("certd.common.pluginCommon.getDataSuccessEmpty");
|
||||
}
|
||||
list = list.map((item: any) => {
|
||||
return {
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
<div class="flex flex-row">
|
||||
<a-tree-select class="remote-tree-select-input" :tree-data="optionsRef" :value="value" tree-checkable allow-clear v-bind="attrs" @click="onClick" @update:value="emit('update:value', $event)"> </a-tree-select>
|
||||
<div class="ml-5">
|
||||
<fs-button :loading="loading" :title="t('certd.pluginCommon.refreshOptions')" icon="ion:refresh-outline" @click="refreshOptions"></fs-button>
|
||||
<fs-button :loading="loading" :title="t('certd.common.pluginCommon.refreshOptions')" icon="ion:refresh-outline" @click="refreshOptions"></fs-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="helper" :class="{ error: hasError }">
|
||||
@@ -107,16 +107,16 @@ const getOptions = async () => {
|
||||
{
|
||||
onError(err: any) {
|
||||
hasError.value = true;
|
||||
message.value = t("certd.pluginCommon.getOptionsError", { message: err.message });
|
||||
message.value = t("certd.common.pluginCommon.getOptionsError", { message: err.message });
|
||||
},
|
||||
showErrorNotify: false,
|
||||
}
|
||||
);
|
||||
const list = res?.list || res || [];
|
||||
if (list.length > 0) {
|
||||
message.value = t("certd.pluginCommon.getDataSuccessSelect");
|
||||
message.value = t("certd.common.pluginCommon.getDataSuccessSelect");
|
||||
} else {
|
||||
message.value = t("certd.pluginCommon.getDataSuccessEmpty");
|
||||
message.value = t("certd.common.pluginCommon.getDataSuccessEmpty");
|
||||
}
|
||||
optionsRef.value = list;
|
||||
pagerRef.value.total = list.length;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="upload-cert">
|
||||
<fs-button v-model:loading="loading" type="primary" :text="t('certd.pluginCommon.upload')" v-bind="props.button" @click="openUploadCertDialog"></fs-button>
|
||||
<fs-button v-model:loading="loading" type="primary" :text="t('certd.common.pluginCommon.upload')" v-bind="props.button" @click="openUploadCertDialog"></fs-button>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
@@ -30,18 +30,18 @@ const getScope: any = inject("get:scope", () => {
|
||||
const getPluginType: any = inject("get:plugin:type", () => {
|
||||
return "plugin";
|
||||
});
|
||||
const title = computed(() => props.title || t("certd.pluginCommon.uploadCert"));
|
||||
const title = computed(() => props.title || t("certd.common.pluginCommon.uploadCert"));
|
||||
function openUploadCertDialog() {
|
||||
const columns = merge(
|
||||
{
|
||||
certName: {
|
||||
title: t("certd.pluginCommon.certName"),
|
||||
title: t("certd.common.pluginCommon.certName"),
|
||||
form: {
|
||||
component: {
|
||||
name: "a-input",
|
||||
vModel: "value",
|
||||
},
|
||||
helper: t("certd.pluginCommon.certNameHelper"),
|
||||
helper: t("certd.common.pluginCommon.certNameHelper"),
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -51,7 +51,7 @@ function openUploadCertDialog() {
|
||||
title: title.value,
|
||||
columns: {
|
||||
certName: {
|
||||
title: t("certd.pluginCommon.certName"),
|
||||
title: t("certd.common.pluginCommon.certName"),
|
||||
form: {
|
||||
component: {
|
||||
name: "a-input",
|
||||
@@ -86,7 +86,7 @@ function openUploadCertDialog() {
|
||||
showErrorNotify: true,
|
||||
}
|
||||
);
|
||||
notification.success({ message: t("certd.pluginCommon.uploadSuccess") });
|
||||
notification.success({ message: t("certd.common.pluginCommon.uploadSuccess") });
|
||||
emit("submit");
|
||||
} finally {
|
||||
loading.value = false;
|
||||
|
||||
@@ -4,10 +4,10 @@ import { $t } from "/@/locales";
|
||||
function createChallengeTypeDict() {
|
||||
return dict({
|
||||
data: [
|
||||
{ value: "dns", label: $t("certd.verifyPlan.dnsChallenge"), color: "green" },
|
||||
{ value: "dns", label: $t("certd.certdomain.verifyPlan.dnsChallenge"), color: "green" },
|
||||
{ value: "dns-persist", label: "DNS持久验证", color: "cyan" },
|
||||
{ value: "cname", label: $t("certd.verifyPlan.cnameProxyChallenge"), color: "blue" },
|
||||
{ value: "http", label: $t("certd.verifyPlan.httpChallenge"), color: "yellow" },
|
||||
{ value: "cname", label: $t("certd.certdomain.verifyPlan.cnameProxyChallenge"), color: "blue" },
|
||||
{ value: "http", label: $t("certd.certdomain.verifyPlan.httpChallenge"), color: "yellow" },
|
||||
],
|
||||
});
|
||||
}
|
||||
@@ -18,11 +18,11 @@ function createUploaderTypeDict() {
|
||||
{ label: "SFTP", value: "sftp" },
|
||||
{ label: "SCP", value: "scp" },
|
||||
{ label: "FTP", value: "ftp" },
|
||||
{ label: $t("certd.verifyPlan.uploader.aliyunOss"), value: "alioss" },
|
||||
{ label: $t("certd.verifyPlan.uploader.tencentCos"), value: "tencentcos" },
|
||||
{ label: $t("certd.verifyPlan.uploader.qiniuOss"), value: "qiniuoss" },
|
||||
{ label: $t("certd.certdomain.verifyPlan.uploader.aliyunOss"), value: "alioss" },
|
||||
{ label: $t("certd.certdomain.verifyPlan.uploader.tencentCos"), value: "tencentcos" },
|
||||
{ label: $t("certd.certdomain.verifyPlan.uploader.qiniuOss"), value: "qiniuoss" },
|
||||
{ label: "S3/Minio", value: "s3" },
|
||||
{ label: $t("certd.verifyPlan.uploader.sshDeprecated"), value: "ssh", disabled: true },
|
||||
{ label: $t("certd.certdomain.verifyPlan.uploader.sshDeprecated"), value: "ssh", disabled: true },
|
||||
],
|
||||
});
|
||||
}
|
||||
@@ -30,8 +30,8 @@ function createUploaderTypeDict() {
|
||||
function createDomainFromTypeDict() {
|
||||
return dict({
|
||||
data: [
|
||||
{ value: "manual", label: $t("certd.verifyPlan.domainFrom.manual") },
|
||||
{ value: "auto", label: $t("certd.verifyPlan.domainFrom.auto") },
|
||||
{ value: "manual", label: $t("certd.certdomain.verifyPlan.domainFrom.manual") },
|
||||
{ value: "auto", label: $t("certd.certdomain.verifyPlan.domainFrom.auto") },
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
@@ -33,11 +33,11 @@ const { t } = useI18n();
|
||||
<div class="tutorial-button pointer" @click="open">
|
||||
<template v-if="!slots.default">
|
||||
<fs-icon v-if="showIcon === false" icon="ant-design:question-circle-outlined" class="mr-0.5"></fs-icon>
|
||||
<div class="hidden md:block">{{ t("tutorial.title") }}</div>
|
||||
<div class="hidden md:block">{{ t("certd.tutorial.title") }}</div>
|
||||
</template>
|
||||
<slot></slot>
|
||||
<a-modal v-model:open="openedRef" class="tutorial-modal" width="90%">
|
||||
<template #title>{{ t("tutorial.title") }}</template>
|
||||
<template #title>{{ t("certd.tutorial.title") }}</template>
|
||||
<tutorial-steps v-if="openedRef" />
|
||||
<template #footer></template>
|
||||
</a-modal>
|
||||
|
||||
@@ -18,9 +18,9 @@ import { ref } from "vue";
|
||||
import { mitter } from "/@/utils/util.mitt";
|
||||
|
||||
const steps = ref<Step[]>([
|
||||
{ title: t("certd.steps.createPipeline"), icon: <fs-icon icon="tabler:circle-number-1-filled"></fs-icon> },
|
||||
{ title: t("certd.steps.addTask"), icon: <fs-icon icon="tabler:circle-number-2-filled"></fs-icon> },
|
||||
{ title: t("certd.steps.scheduledRun"), icon: <fs-icon icon="tabler:circle-number-3-filled"></fs-icon> },
|
||||
{ title: t("certd.tutorial.steps.createPipeline"), icon: <fs-icon icon="tabler:circle-number-1-filled"></fs-icon> },
|
||||
{ title: t("certd.tutorial.steps.addTask"), icon: <fs-icon icon="tabler:circle-number-2-filled"></fs-icon> },
|
||||
{ title: t("certd.tutorial.steps.scheduledRun"), icon: <fs-icon icon="tabler:circle-number-3-filled"></fs-icon> },
|
||||
]);
|
||||
|
||||
function goPipeline() {
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
</div>
|
||||
|
||||
<div class="flex-center actions">
|
||||
<fs-button class="m-10" icon="ion:arrow-back-outline" @click="prev()">{{ t("guide.buttons.prev") }}</fs-button>
|
||||
<fs-button class="m-10" type="primary" icon-right="ion:arrow-forward-outline" @click="next()">{{ t("guide.buttons.next") }}</fs-button>
|
||||
<fs-button class="m-10" icon="ion:arrow-back-outline" @click="prev()">{{ t("certd.guide.buttons.prev") }}</fs-button>
|
||||
<fs-button class="m-10" type="primary" icon-right="ion:arrow-forward-outline" @click="next()">{{ t("certd.guide.buttons.next") }}</fs-button>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -52,126 +52,126 @@ import { computed, nextTick, ref } from "vue";
|
||||
|
||||
const steps = ref<Step[]>([
|
||||
{
|
||||
title: t("guide.createCertPipeline.title"),
|
||||
description: t("guide.createCertPipeline.description"),
|
||||
title: t("certd.guide.createCertPipeline.title"),
|
||||
description: t("certd.guide.createCertPipeline.description"),
|
||||
items: [
|
||||
{
|
||||
title: t("guide.createCertPipeline.items.tutorialTitle"),
|
||||
descriptions: [t("guide.createCertPipeline.items.tutorialDesc1"), t("guide.createCertPipeline.items.tutorialDesc2")],
|
||||
title: t("certd.guide.createCertPipeline.items.tutorialTitle"),
|
||||
descriptions: [t("certd.guide.createCertPipeline.items.tutorialDesc1"), t("certd.guide.createCertPipeline.items.tutorialDesc2")],
|
||||
body: () => {
|
||||
return <SimpleSteps></SimpleSteps>;
|
||||
},
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/1-add.png",
|
||||
title: t("guide.createCertPipeline.items.createTitle"),
|
||||
descriptions: [t("guide.createCertPipeline.items.createDesc")],
|
||||
title: t("certd.guide.createCertPipeline.items.createTitle"),
|
||||
descriptions: [t("certd.guide.createCertPipeline.items.createDesc")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/3-add-success.png",
|
||||
title: t("guide.createCertPipeline.items.successTitle"),
|
||||
descriptions: [t("guide.createCertPipeline.items.successDesc")],
|
||||
title: t("certd.guide.createCertPipeline.items.successTitle"),
|
||||
descriptions: [t("certd.guide.createCertPipeline.items.successDesc")],
|
||||
},
|
||||
// {
|
||||
// title: t("guide.createCertPipeline.items.nextTitle"),
|
||||
// descriptions: [t("guide.createCertPipeline.items.nextDesc")],
|
||||
// title: t("certd.guide.createCertPipeline.items.nextTitle"),
|
||||
// descriptions: [t("certd.guide.createCertPipeline.items.nextDesc")],
|
||||
// },
|
||||
],
|
||||
},
|
||||
{
|
||||
title: t("guide.addDeployTask.title"),
|
||||
description: t("guide.addDeployTask.description"),
|
||||
title: t("certd.guide.addDeployTask.title"),
|
||||
description: t("certd.guide.addDeployTask.description"),
|
||||
items: [
|
||||
{
|
||||
image: "/static/doc/images/5-1-add-host.png",
|
||||
title: t("guide.addDeployTask.items.addTaskTitle"),
|
||||
descriptions: [t("guide.addDeployTask.items.addTaskDesc1"), t("guide.addDeployTask.items.addTaskDesc2")],
|
||||
title: t("certd.guide.addDeployTask.items.addTaskTitle"),
|
||||
descriptions: [t("certd.guide.addDeployTask.items.addTaskDesc1"), t("certd.guide.addDeployTask.items.addTaskDesc2")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/5-2-add-host.png",
|
||||
title: t("guide.addDeployTask.items.fillParamsTitle"),
|
||||
descriptions: [t("guide.addDeployTask.items.fillParamsDesc1"), t("guide.addDeployTask.items.fillParamsDesc2")],
|
||||
title: t("certd.guide.addDeployTask.items.fillParamsTitle"),
|
||||
descriptions: [t("certd.guide.addDeployTask.items.fillParamsDesc1"), t("certd.guide.addDeployTask.items.fillParamsDesc2")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/5-3-add-host.png",
|
||||
title: t("guide.addDeployTask.items.activateCertTitle"),
|
||||
descriptions: [t("guide.addDeployTask.items.activateCertDesc1"), t("guide.addDeployTask.items.activateCertDesc2")],
|
||||
title: t("certd.guide.addDeployTask.items.activateCertTitle"),
|
||||
descriptions: [t("certd.guide.addDeployTask.items.activateCertDesc1"), t("certd.guide.addDeployTask.items.activateCertDesc2")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/5-4-add-host.png",
|
||||
title: t("guide.addDeployTask.items.taskSuccessTitle"),
|
||||
descriptions: [t("guide.addDeployTask.items.taskSuccessDesc")],
|
||||
title: t("certd.guide.addDeployTask.items.taskSuccessTitle"),
|
||||
descriptions: [t("certd.guide.addDeployTask.items.taskSuccessDesc")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/5-5-plugin-list.png",
|
||||
title: t("guide.addDeployTask.items.pluginsTitle"),
|
||||
descriptions: [t("guide.addDeployTask.items.pluginsDesc")],
|
||||
title: t("certd.guide.addDeployTask.items.pluginsTitle"),
|
||||
descriptions: [t("certd.guide.addDeployTask.items.pluginsDesc")],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: t("guide.runAndTestTask.runAndTestTitle"),
|
||||
description: t("guide.runAndTestTask.runAndTestDescription"),
|
||||
title: t("certd.guide.runAndTestTask.runAndTestTitle"),
|
||||
description: t("certd.guide.runAndTestTask.runAndTestDescription"),
|
||||
items: [
|
||||
{
|
||||
image: "/static/doc/images/9-start.png",
|
||||
title: t("guide.runAndTestTask.runTestOnce"),
|
||||
descriptions: [t("guide.runAndTestTask.clickManualTriggerToTest")],
|
||||
title: t("certd.guide.runAndTestTask.runTestOnce"),
|
||||
descriptions: [t("certd.guide.runAndTestTask.clickManualTriggerToTest")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/10-1-log.png",
|
||||
title: t("guide.runAndTestTask.viewLogs"),
|
||||
descriptions: [t("guide.runAndTestTask.clickTaskToViewStatusAndLogs")],
|
||||
title: t("certd.guide.runAndTestTask.viewLogs"),
|
||||
descriptions: [t("certd.guide.runAndTestTask.clickTaskToViewStatusAndLogs")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/11-1-error.png",
|
||||
title: t("guide.runAndTestTask.howToTroubleshootFailure"),
|
||||
descriptions: [t("guide.runAndTestTask.viewErrorLogs")],
|
||||
title: t("certd.guide.runAndTestTask.howToTroubleshootFailure"),
|
||||
descriptions: [t("certd.guide.runAndTestTask.viewErrorLogs")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/11-2-error.png",
|
||||
title: t("guide.runAndTestTask.howToTroubleshootFailure"),
|
||||
descriptions: [t("guide.runAndTestTask.viewErrorLogs"), t("guide.runAndTestTask.nginxContainerNotExistFix")],
|
||||
title: t("certd.guide.runAndTestTask.howToTroubleshootFailure"),
|
||||
descriptions: [t("certd.guide.runAndTestTask.viewErrorLogs"), t("certd.guide.runAndTestTask.nginxContainerNotExistFix")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/12-1-log-success.png",
|
||||
title: t("guide.runAndTestTask.executionSuccess"),
|
||||
descriptions: [t("guide.runAndTestTask.retryAfterFix")],
|
||||
title: t("certd.guide.runAndTestTask.executionSuccess"),
|
||||
descriptions: [t("certd.guide.runAndTestTask.retryAfterFix")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/12-2-skip-log.png",
|
||||
title: t("guide.runAndTestTask.autoSkipAfterSuccess"),
|
||||
descriptions: [t("guide.runAndTestTask.successSkipExplanation")],
|
||||
title: t("certd.guide.runAndTestTask.autoSkipAfterSuccess"),
|
||||
descriptions: [t("certd.guide.runAndTestTask.successSkipExplanation")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/13-1-result.png",
|
||||
title: t("guide.runAndTestTask.viewCertDeploymentSuccess"),
|
||||
descriptions: [t("guide.runAndTestTask.visitNginxToSeeCert")],
|
||||
title: t("certd.guide.runAndTestTask.viewCertDeploymentSuccess"),
|
||||
descriptions: [t("certd.guide.runAndTestTask.visitNginxToSeeCert")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/13-3-download.png",
|
||||
title: t("guide.runAndTestTask.downloadCertManualDeploy"),
|
||||
descriptions: [t("guide.runAndTestTask.downloadIfNoAutoDeployPlugin")],
|
||||
title: t("certd.guide.runAndTestTask.downloadCertManualDeploy"),
|
||||
descriptions: [t("certd.guide.runAndTestTask.downloadIfNoAutoDeployPlugin")],
|
||||
},
|
||||
],
|
||||
},
|
||||
{
|
||||
title: t("guide.scheduleAndEmailTask.title"),
|
||||
description: t("guide.scheduleAndEmailTask.description"),
|
||||
title: t("certd.guide.scheduleAndEmailTask.title"),
|
||||
description: t("certd.guide.scheduleAndEmailTask.description"),
|
||||
items: [
|
||||
{
|
||||
image: "/static/doc/images/14-timer.png",
|
||||
title: t("guide.scheduleAndEmailTask.setSchedule"),
|
||||
descriptions: [t("guide.scheduleAndEmailTask.pipelineSuccessThenSchedule"), t("guide.scheduleAndEmailTask.recommendDailyRun")],
|
||||
title: t("certd.guide.scheduleAndEmailTask.setSchedule"),
|
||||
descriptions: [t("certd.guide.scheduleAndEmailTask.pipelineSuccessThenSchedule"), t("certd.guide.scheduleAndEmailTask.recommendDailyRun")],
|
||||
},
|
||||
{
|
||||
image: "/static/doc/images/15-1-email.png",
|
||||
title: t("guide.scheduleAndEmailTask.setEmailNotification"),
|
||||
descriptions: [t("guide.scheduleAndEmailTask.suggestErrorAndRecoveryEmails")],
|
||||
title: t("certd.guide.scheduleAndEmailTask.setEmailNotification"),
|
||||
descriptions: [t("certd.guide.scheduleAndEmailTask.suggestErrorAndRecoveryEmails")],
|
||||
},
|
||||
{
|
||||
title: t("guide.scheduleAndEmailTask.tutorialEndTitle"),
|
||||
descriptions: [t("guide.scheduleAndEmailTask.thanksForWatching")],
|
||||
title: t("certd.guide.scheduleAndEmailTask.tutorialEndTitle"),
|
||||
descriptions: [t("certd.guide.scheduleAndEmailTask.thanksForWatching")],
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -48,56 +48,56 @@ const text = computed<Text>(() => {
|
||||
const map = {
|
||||
isComm: {
|
||||
comm: {
|
||||
name: t("vip.comm.name", { vipLabel }),
|
||||
title: t("vip.comm.title", { expire: expireTime.value }),
|
||||
name: t("certd.vip.comm.name", { vipLabel }),
|
||||
title: t("certd.vip.comm.title", { expire: expireTime.value }),
|
||||
},
|
||||
button: {
|
||||
name: t("vip.comm.name", { vipLabel }),
|
||||
title: t("vip.comm.title", { expire: expireTime.value }),
|
||||
name: t("certd.vip.comm.name", { vipLabel }),
|
||||
title: t("certd.vip.comm.title", { expire: expireTime.value }),
|
||||
},
|
||||
icon: {
|
||||
name: "",
|
||||
title: t("vip.comm.name", { vipLabel }),
|
||||
title: t("certd.vip.comm.name", { vipLabel }),
|
||||
},
|
||||
nav: {
|
||||
name: t("vip.comm.nav", { vipLabel }),
|
||||
title: t("vip.comm.title", { expire: expireTime.value }),
|
||||
name: t("certd.vip.comm.nav", { vipLabel }),
|
||||
title: t("certd.vip.comm.title", { expire: expireTime.value }),
|
||||
},
|
||||
},
|
||||
isPlus: {
|
||||
comm: {
|
||||
name: t("vip.plus.name"),
|
||||
title: t("vip.plus.title"),
|
||||
name: t("certd.vip.plus.name"),
|
||||
title: t("certd.vip.plus.title"),
|
||||
},
|
||||
button: {
|
||||
name: t("vip.comm.name", { vipLabel }),
|
||||
title: t("vip.comm.title", { expire: expireTime.value }),
|
||||
name: t("certd.vip.comm.name", { vipLabel }),
|
||||
title: t("certd.vip.comm.title", { expire: expireTime.value }),
|
||||
},
|
||||
icon: {
|
||||
name: "",
|
||||
title: t("vip.comm.name", { vipLabel }),
|
||||
title: t("certd.vip.comm.name", { vipLabel }),
|
||||
},
|
||||
nav: {
|
||||
name: t("vip.comm.nav", { vipLabel }),
|
||||
title: t("vip.comm.title", { expire: expireTime.value }),
|
||||
name: t("certd.vip.comm.nav", { vipLabel }),
|
||||
title: t("certd.vip.comm.title", { expire: expireTime.value }),
|
||||
},
|
||||
},
|
||||
free: {
|
||||
comm: {
|
||||
name: t("vip.free.comm.name"),
|
||||
title: t("vip.free.comm.title"),
|
||||
name: t("certd.vip.free.comm.name"),
|
||||
title: t("certd.vip.free.comm.title"),
|
||||
},
|
||||
button: {
|
||||
name: t("vip.free.button.name"),
|
||||
title: t("vip.free.button.title"),
|
||||
name: t("certd.vip.free.button.name"),
|
||||
title: t("certd.vip.free.button.title"),
|
||||
},
|
||||
icon: {
|
||||
name: "",
|
||||
title: t("vip.free.button.name"),
|
||||
title: t("certd.vip.free.button.name"),
|
||||
},
|
||||
nav: {
|
||||
name: t("vip.free.nav.name"),
|
||||
title: plusMessage || t("vip.free.nav.title"),
|
||||
name: t("certd.vip.free.nav.name"),
|
||||
title: plusMessage || t("certd.vip.free.nav.title"),
|
||||
},
|
||||
},
|
||||
};
|
||||
@@ -131,7 +131,7 @@ const userStore = useUserStore();
|
||||
|
||||
async function getVipTrial(vipType = "plus") {
|
||||
const res = await api.getVipTrial(vipType);
|
||||
notification.success({ message: t("vip.congratulations_vip_trial", { duration: res.duration }) });
|
||||
notification.success({ message: t("certd.vip.congratulations_vip_trial", { duration: res.duration }) });
|
||||
await settingStore.init();
|
||||
}
|
||||
|
||||
@@ -139,8 +139,8 @@ function openTrialModal(vipType = "plus") {
|
||||
Modal.destroyAll();
|
||||
|
||||
modal.confirm({
|
||||
title: t("vip.trial_modal_title"),
|
||||
okText: t("vip.trial_modal_ok_text"),
|
||||
title: t("certd.vip.trial_modal_title"),
|
||||
okText: t("certd.vip.trial_modal_ok_text"),
|
||||
onOk() {
|
||||
getVipTrial(vipType);
|
||||
},
|
||||
@@ -148,8 +148,8 @@ function openTrialModal(vipType = "plus") {
|
||||
content: () => {
|
||||
return (
|
||||
<div class="flex-col mt-10 mb-10">
|
||||
<div>{t("vip.trial_modal_thanks")}</div>
|
||||
<div>{t("vip.trial_modal_click_confirm", { vipType })}</div>
|
||||
<div>{t("certd.vip.trial_modal_thanks")}</div>
|
||||
<div>{t("certd.vip.trial_modal_click_confirm", { vipType })}</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
@@ -158,7 +158,7 @@ function openTrialModal(vipType = "plus") {
|
||||
|
||||
function openStarModal(vipType: string) {
|
||||
if (settingStore.isPlus) {
|
||||
notification.error({ message: t("vip.already_vip") });
|
||||
notification.error({ message: t("certd.vip.already_vip") });
|
||||
return;
|
||||
}
|
||||
Modal.destroyAll();
|
||||
@@ -170,8 +170,8 @@ function openStarModal(vipType: string) {
|
||||
// };
|
||||
|
||||
// modal.confirm({
|
||||
// title: t("vip.get_7_day_pro_trial"),
|
||||
// okText: t("vip.star_now"),
|
||||
// title: t("certd.vip.get_7_day_pro_trial"),
|
||||
// okText: t("certd.vip.star_now"),
|
||||
// onOk() {
|
||||
// goGithub();
|
||||
// openTrialModal(vipType);
|
||||
@@ -180,7 +180,7 @@ function openStarModal(vipType: string) {
|
||||
// content: () => {
|
||||
// return (
|
||||
// <div class="flex mt-10 mb-10">
|
||||
// <div>{t("vip.please_help_star")}</div>
|
||||
// <div>{t("certd.vip.please_help_star")}</div>
|
||||
// <img class="ml-5" src="https://img.shields.io/github/stars/certd/certd?logo=github" />
|
||||
// </div>
|
||||
// );
|
||||
@@ -190,16 +190,16 @@ function openStarModal(vipType: string) {
|
||||
|
||||
function openUpgrade() {
|
||||
if (!userStore.isAdmin) {
|
||||
notification.info({ message: t("vip.admin_only_operation") });
|
||||
notification.info({ message: t("certd.vip.admin_only_operation") });
|
||||
return;
|
||||
}
|
||||
const placeholder = t("vip.enter_activation_code");
|
||||
const placeholder = t("certd.vip.enter_activation_code");
|
||||
const isPlus = settingStore.isPlus;
|
||||
let title = t("vip.activate_pro_business");
|
||||
let title = t("certd.vip.activate_pro_business");
|
||||
if (settingStore.isComm) {
|
||||
title = t("vip.renew_business");
|
||||
title = t("certd.vip.renew_business");
|
||||
} else if (settingStore.isPlus) {
|
||||
title = t("vip.renew_pro_upgrade_business");
|
||||
title = t("certd.vip.renew_pro_upgrade_business");
|
||||
}
|
||||
|
||||
// const goBuyUrl = "https://afdian.com/a/greper"
|
||||
@@ -214,10 +214,10 @@ function openUpgrade() {
|
||||
function checkPerpetualPlus() {
|
||||
if (settingStore.isPerpetual) {
|
||||
Modal.warn({
|
||||
title: t("vip.already_perpetual_plus"),
|
||||
okText: t("vip.confirm"),
|
||||
title: t("certd.vip.already_perpetual_plus"),
|
||||
okText: t("certd.vip.confirm"),
|
||||
});
|
||||
throw new Error(t("vip.already_perpetual_plus"));
|
||||
throw new Error(t("certd.vip.already_perpetual_plus"));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -225,8 +225,8 @@ function openUpgrade() {
|
||||
checkPerpetualPlus();
|
||||
if (settingStore.isComm) {
|
||||
Modal.warn({
|
||||
title: t("vip.already_comm"),
|
||||
okText: t("vip.confirm"),
|
||||
title: t("certd.vip.already_comm"),
|
||||
okText: t("certd.vip.confirm"),
|
||||
});
|
||||
return;
|
||||
}
|
||||
@@ -237,8 +237,8 @@ function openUpgrade() {
|
||||
checkPerpetualPlus();
|
||||
if (settingStore.isPlus && !settingStore.isComm) {
|
||||
Modal.confirm({
|
||||
title: t("vip.already_plus"),
|
||||
okText: t("vip.confirm"),
|
||||
title: t("certd.vip.already_plus"),
|
||||
okText: t("certd.vip.confirm"),
|
||||
onOk() {
|
||||
window.open(goBuyCommUrl);
|
||||
},
|
||||
@@ -251,7 +251,7 @@ function openUpgrade() {
|
||||
title,
|
||||
class: "vip-modal",
|
||||
maskClosable: true,
|
||||
okText: t("vip.close"),
|
||||
okText: t("certd.vip.close"),
|
||||
width: 1180,
|
||||
content: () => {
|
||||
return <VipModalContent placeholder={placeholder} isPlus={isPlus} productInfo={productInfo} goBuyPlusPage={goBuyPlusPage} goBuyCommPage={goBuyCommPage} openStarModal={openStarModal} modalRef={modalRef} />;
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
</a-tooltip>
|
||||
</span>
|
||||
<span v-else>
|
||||
<span class="price-text">{{ t("vip.freee") }}</span>
|
||||
<span class="price-text">{{ t("certd.vip.freee") }}</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="get-show">
|
||||
@@ -44,15 +44,15 @@
|
||||
<span class="color-red"> {{ todayOrderCount.vipTotal }}</span>
|
||||
位伙伴支持
|
||||
</span>
|
||||
<a-tooltip :title="t('vip.afdian_support_vip')">
|
||||
<a-tooltip :title="t('certd.vip.afdian_support_vip')">
|
||||
<a-button size="small" type="primary" @click="goBuyPlusPage">
|
||||
{{ t("vip.get_after_support") }}
|
||||
{{ t("certd.vip.get_after_support") }}
|
||||
</a-button>
|
||||
</a-tooltip>
|
||||
</template>
|
||||
<template v-else-if="item.type === 'comm'">
|
||||
<a-button size="small" type="primary" @click="goBuyCommPage">
|
||||
{{ t("vip.buy") }}
|
||||
{{ t("certd.vip.buy") }}
|
||||
</a-button>
|
||||
</template>
|
||||
</div>
|
||||
@@ -63,36 +63,36 @@
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://certd.docmirror.cn/guide/donate/#相关问题" target="_blank">
|
||||
{{ t("vip.question") }}
|
||||
{{ t("certd.vip.question") }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="mt-10">
|
||||
<div class="w-100 flex-col md:flex-row">
|
||||
<span>{{ t("vip.site_id") }}:</span>
|
||||
<span>{{ t("certd.vip.site_id") }}:</span>
|
||||
<fs-copyable v-model="computedSiteId" class="mr-2 inline-flex"></fs-copyable>
|
||||
<a @click="goBindAccount">{{ t("vip.not_effective") }}</a>
|
||||
<a @click="goBindAccount">{{ t("certd.vip.not_effective") }}</a>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="isPlus" class="mt-10 flex flex-col md:flex-row">
|
||||
<span class="mr-2"> {{ t("vip.current") }} {{ vipLabel }} {{ t("vip.activated_expire_time") }} {{ settingStore.expiresText }} </span>
|
||||
<span class="mr-2"> {{ t("certd.vip.current") }} {{ vipLabel }} {{ t("certd.vip.activated_expire_time") }} {{ settingStore.expiresText }} </span>
|
||||
<a href="https://app.handfree.work/subject/#/page/detail/1" target="_blank">
|
||||
{{ t("vip.learn_more") }}
|
||||
{{ t("certd.vip.learn_more") }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="mt-10">
|
||||
<span class="mr-2">{{ t("vip.have_activation_code") }}</span>
|
||||
<span class="mr-2">{{ t("certd.vip.have_activation_code") }}</span>
|
||||
<span>
|
||||
<a @click="showManualActivation">{{ t("vip.manual_activation") }}</a>
|
||||
<a @click="showManualActivation">{{ t("certd.vip.manual_activation") }}</a>
|
||||
</span>
|
||||
</div>
|
||||
<div v-if="manualActiveFlag" class="mt-10">
|
||||
<div class="mt-10">
|
||||
<a-input-search v-model:value="formState.code" class="w-2/6" :placeholder="placeholder" :enter-button="t('vip.activate')" @search="doActive"></a-input-search>
|
||||
<a-input-search v-model:value="formState.code" class="w-2/6" :placeholder="placeholder" :enter-button="t('certd.vip.activate')" @search="doActive"></a-input-search>
|
||||
</div>
|
||||
<div class="mt-10">
|
||||
{{ t("vip.activation_code_one_use") }}
|
||||
<a @click="goAccount">{{ t("vip.bind_account") }}</a
|
||||
>,{{ t("vip.transfer_vip") }}
|
||||
{{ t("certd.vip.activation_code_one_use") }}
|
||||
<a @click="goAccount">{{ t("certd.vip.bind_account") }}</a
|
||||
>,{{ t("certd.vip.transfer_vip") }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -128,24 +128,24 @@ const formState = reactive({
|
||||
|
||||
async function doActive() {
|
||||
if (!formState.code) {
|
||||
notification.error({ message: t("vip.enterCode") });
|
||||
throw new Error(t("vip.enterCode"));
|
||||
notification.error({ message: t("certd.vip.enterCode") });
|
||||
throw new Error(t("certd.vip.enterCode"));
|
||||
}
|
||||
const res = await api.doActive(formState);
|
||||
if (res) {
|
||||
await settingStore.init();
|
||||
const vipLabel = settingStore.vipLabel;
|
||||
Modal.success({
|
||||
title: t("vip.successTitle"),
|
||||
content: t("vip.successContent", {
|
||||
title: t("certd.vip.successTitle"),
|
||||
content: t("certd.vip.successContent", {
|
||||
vipLabel,
|
||||
expireDate: settingStore.plusInfo.expireTime === -1 ? t("vip.permanent") : dayjs(settingStore.plusInfo.expireTime).format("YYYY-MM-DD"),
|
||||
expireDate: settingStore.plusInfo.expireTime === -1 ? t("certd.vip.permanent") : dayjs(settingStore.plusInfo.expireTime).format("YYYY-MM-DD"),
|
||||
}),
|
||||
onOk() {
|
||||
if (!(settingStore.installInfo.bindUserId > 0)) {
|
||||
Modal.confirm({
|
||||
title: t("vip.bindAccountTitle"),
|
||||
content: t("vip.bindAccountContent"),
|
||||
title: t("certd.vip.bindAccountTitle"),
|
||||
content: t("certd.vip.bindAccountContent"),
|
||||
onOk() {
|
||||
router.push("/sys/account");
|
||||
},
|
||||
@@ -179,39 +179,39 @@ function goBindAccount() {
|
||||
|
||||
const vipTypeDefine: any = {
|
||||
free: {
|
||||
title: t("vip.basic_edition"),
|
||||
desc: t("vip.community_free_version"),
|
||||
title: t("certd.vip.basic_edition"),
|
||||
desc: t("certd.vip.community_free_version"),
|
||||
type: "free",
|
||||
icon: "lucide:package-open",
|
||||
privilege: t("vip.free_privilege").split("\n"),
|
||||
privilege: t("certd.vip.free_privilege").split("\n"),
|
||||
},
|
||||
plus: {
|
||||
title: t("vip.professional_edition"),
|
||||
desc: t("vip.open_source_support"),
|
||||
title: t("certd.vip.professional_edition"),
|
||||
desc: t("certd.vip.open_source_support"),
|
||||
type: "plus",
|
||||
privilege: t("vip.plus_privilege").split("\n"),
|
||||
privilege: t("certd.vip.plus_privilege").split("\n"),
|
||||
trial: {
|
||||
title: t("vip.click_to_get_7_day_trial"),
|
||||
title: t("certd.vip.click_to_get_7_day_trial"),
|
||||
click: () => {
|
||||
props.openStarModal("plus");
|
||||
},
|
||||
},
|
||||
icon: "stash:thumb-up",
|
||||
priceText: props.productInfo.plus.priceText || `¥${props.productInfo.plus.price}/${t("vip.years")}`,
|
||||
discountText: props.productInfo.plus.discountText || `¥${props.productInfo.plus.price3}/3${t("vip.years")}`,
|
||||
priceText: props.productInfo.plus.priceText || `¥${props.productInfo.plus.price}/${t("certd.vip.years")}`,
|
||||
discountText: props.productInfo.plus.discountText || `¥${props.productInfo.plus.price3}/3${t("certd.vip.years")}`,
|
||||
tooltip: props.productInfo.plus.tooltip,
|
||||
},
|
||||
comm: {
|
||||
title: t("vip.business_edition"),
|
||||
desc: t("vip.commercial_license"),
|
||||
title: t("certd.vip.business_edition"),
|
||||
desc: t("certd.vip.commercial_license"),
|
||||
type: "comm",
|
||||
icon: "vaadin:handshake",
|
||||
privilege: t("vip.comm_privilege").split("\n"),
|
||||
priceText: props.productInfo.comm.priceText || `¥${props.productInfo.comm.price}/${t("vip.years")}`,
|
||||
discountText: props.productInfo.comm.discountText || `¥${props.productInfo.comm.price3}/3${t("vip.years")}`,
|
||||
privilege: t("certd.vip.comm_privilege").split("\n"),
|
||||
priceText: props.productInfo.comm.priceText || `¥${props.productInfo.comm.price}/${t("certd.vip.years")}`,
|
||||
discountText: props.productInfo.comm.discountText || `¥${props.productInfo.comm.price3}/3${t("certd.vip.years")}`,
|
||||
tooltip: props.productInfo.comm.tooltip,
|
||||
trial: {
|
||||
title: t("vip.click_to_get_7_day_trial"),
|
||||
title: t("certd.vip.click_to_get_7_day_trial"),
|
||||
click: () => {
|
||||
props.openStarModal("comm");
|
||||
},
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<script lang="ts" setup>
|
||||
<script lang="ts" setup>
|
||||
import { BasicLayout, LockScreen, UserDropdown } from "/@/vben/layouts";
|
||||
|
||||
import { computed, onErrorCaptured, onMounted, provide, ref } from "vue";
|
||||
@@ -23,14 +23,14 @@ const menus = computed(() => [
|
||||
router.push("/cert/mine/user-profile");
|
||||
},
|
||||
icon: "fa-solid:book",
|
||||
text: t("certd.accountInfo"),
|
||||
text: t("certd.mine.accountInfo"),
|
||||
},
|
||||
{
|
||||
handler: () => {
|
||||
router.push("/cert/mine/security");
|
||||
},
|
||||
icon: "fluent:shield-keyhole-16-regular",
|
||||
text: t("certd.securitySettings"),
|
||||
text: t("certd.mine.securitySettings"),
|
||||
},
|
||||
]);
|
||||
|
||||
@@ -109,7 +109,7 @@ const projectStore = useProjectStore();
|
||||
<vip-button class="flex-center header-btn" mode="nav" />
|
||||
</div>
|
||||
<div v-if="!settingStore.isComm" class="hover:bg-accent ml-1 mr-2 cursor-pointer rounded-full hidden md:block">
|
||||
<fs-button shape="circle" type="text" icon="clarity:host-solid-badged" :text="null" :tooltip="{ title: t('certd.client') }" @click="goCertdClient" />
|
||||
<fs-button shape="circle" type="text" icon="clarity:host-solid-badged" :text="null" :tooltip="{ title: t('certd.navigation.client') }" @click="goCertdClient" />
|
||||
</div>
|
||||
<div v-if="!settingStore.isComm" class="hover:bg-accent ml-1 mr-2 cursor-pointer rounded-full hidden md:block">
|
||||
<fs-button shape="circle" type="text" icon="ion:logo-github" :text="null" @click="goGithub" />
|
||||
|
||||
@@ -13,36 +13,54 @@ import notification from "./certd/notification";
|
||||
import addon from "./certd/addon";
|
||||
import suite from "./certd/suite";
|
||||
import project from "./certd/project";
|
||||
import syssettings from "./certd/sys-settings";
|
||||
import sysplugin from "./certd/sys-plugin";
|
||||
import sysauthority from "./certd/sys-authority";
|
||||
import syscname from "./certd/sys-cname";
|
||||
import settings from "./certd/sys-settings";
|
||||
import plugin from "./certd/sys-plugin";
|
||||
import authority from "./certd/sys-authority";
|
||||
import cnameSettings from "./certd/sys-cname";
|
||||
import tutorial from "./certd/tutorial";
|
||||
import cron from "./certd/cron";
|
||||
import client from "./certd/client";
|
||||
import wallet from "./certd/wallet";
|
||||
import nettest from "./certd/nettest";
|
||||
import audit from "./certd/audit";
|
||||
import applyTemplate from "./certd/apply-template";
|
||||
import dnsPersist from "./certd/dns-persist";
|
||||
import auth from "./certd/auth";
|
||||
import guide from "./certd/guide";
|
||||
import vip from "./certd/vip";
|
||||
|
||||
// Note: @ is reserved in locale messages; use {'@'} when needed.
|
||||
export default {
|
||||
...common,
|
||||
...navigation,
|
||||
...dashboard,
|
||||
...pipeline,
|
||||
...history,
|
||||
...monitor,
|
||||
...certdomain,
|
||||
...cname,
|
||||
...access,
|
||||
...open,
|
||||
...mine,
|
||||
...notification,
|
||||
...addon,
|
||||
...suite,
|
||||
...project,
|
||||
...syssettings,
|
||||
...sysplugin,
|
||||
...sysauthority,
|
||||
...syscname,
|
||||
...tutorial,
|
||||
...cron,
|
||||
...client,
|
||||
common,
|
||||
navigation,
|
||||
dashboard,
|
||||
pipeline,
|
||||
history,
|
||||
monitor,
|
||||
certdomain,
|
||||
cname,
|
||||
access,
|
||||
open,
|
||||
mine,
|
||||
notification,
|
||||
addon,
|
||||
suite,
|
||||
project,
|
||||
sys: {
|
||||
settings,
|
||||
plugin,
|
||||
authority,
|
||||
cname: cnameSettings,
|
||||
},
|
||||
tutorial,
|
||||
cron,
|
||||
client,
|
||||
wallet,
|
||||
nettest,
|
||||
audit,
|
||||
applyTemplate,
|
||||
dnsPersist,
|
||||
auth,
|
||||
guide,
|
||||
vip,
|
||||
};
|
||||
|
||||
@@ -4,4 +4,11 @@ export default {
|
||||
nameHelper: "Fill in as you like, useful to distinguish when multiple authorizations of the same type exist",
|
||||
level: "Level",
|
||||
system: "System",
|
||||
select: "Select",
|
||||
selectProvider: "Select Authorization Provider",
|
||||
deleteConfirm: "If this authorization is already in use, pipelines may fail. Proceed with caution.",
|
||||
name: "Name",
|
||||
user: "User",
|
||||
type: "Type",
|
||||
selectType: "Please select a type",
|
||||
};
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
export default {
|
||||
setSuccess: "Settings saved",
|
||||
editTitle: "Edit Certificate Application Template",
|
||||
addTitle: "Add Certificate Application Template",
|
||||
name: "Template Name",
|
||||
default: "Default",
|
||||
setDefault: "Set as Default",
|
||||
disabled: "Disabled",
|
||||
createTime: "Created At",
|
||||
config: "Configuration",
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
export default {
|
||||
createTime: "Operation Time",
|
||||
type: "Operation Type",
|
||||
action: "Action",
|
||||
result: "Result",
|
||||
success: "Success",
|
||||
failed: "Failed",
|
||||
remark: "Remark",
|
||||
ipAddress: "IP Address",
|
||||
};
|
||||
+26
-54
@@ -1,58 +1,4 @@
|
||||
export default {
|
||||
welcomeBack: "Welcome Back",
|
||||
pageTitle: "Plug-and-play Admin system",
|
||||
pageDesc: "Efficient, versatile frontend template",
|
||||
loginSuccess: "Login Successful",
|
||||
loginSuccessDesc: "Welcome Back",
|
||||
loginSubtitle: "Enter your account details to manage your projects",
|
||||
selectAccount: "Quick Select Account",
|
||||
username: "Username",
|
||||
password: "Password",
|
||||
usernameTip: "Please enter username",
|
||||
passwordErrorTip: "Password is incorrect",
|
||||
passwordTip: "Please enter password",
|
||||
verifyRequiredTip: "Please complete the verification first",
|
||||
rememberMe: "Remember Me",
|
||||
createAnAccount: "Create an Account",
|
||||
createAccount: "Create Account",
|
||||
alreadyHaveAccount: "Already have an account?",
|
||||
accountTip: "Don't have an account?",
|
||||
signUp: "Sign Up",
|
||||
signUpSubtitle: "Make managing your applications simple and fun",
|
||||
confirmPassword: "Confirm Password",
|
||||
confirmPasswordTip: "The passwords do not match",
|
||||
agree: "I agree to",
|
||||
privacyPolicy: "Privacy-policy",
|
||||
terms: "Terms",
|
||||
agreeTip: "Please agree to the Privacy Policy and Terms",
|
||||
goToLogin: "Login instead",
|
||||
passwordStrength: "Use 8 or more characters with a mix of letters, numbers & symbols",
|
||||
forgetPassword: "Forget Password?",
|
||||
forgetPasswordSubtitle: "Enter your email and we'll send you instructions to reset your password",
|
||||
emailTip: "Please enter email",
|
||||
emailValidErrorTip: "The email format you entered is incorrect",
|
||||
sendResetLink: "Send Reset Link",
|
||||
email: "Email",
|
||||
qrcodeSubtitle: "Scan the QR code with your phone to login",
|
||||
qrcodePrompt: "Click 'Confirm' after scanning to complete login",
|
||||
qrcodeLogin: "QR Code Login",
|
||||
codeSubtitle: "Enter your phone number to start managing your project",
|
||||
code: "Security code",
|
||||
codeTip: "Security code required {0} characters",
|
||||
mobile: "Mobile",
|
||||
mobileLogin: "Mobile Login",
|
||||
mobileTip: "Please enter mobile number",
|
||||
mobileErrortip: "The phone number format is incorrect",
|
||||
sendCode: "Get Security code",
|
||||
sendText: "Resend in {0}s",
|
||||
thirdPartyLogin: "Or continue with",
|
||||
loginAgainTitle: "Please Log In Again",
|
||||
loginAgainSubTitle: "Your login session has expired. Please log in again to continue.",
|
||||
layout: {
|
||||
center: "Align Center",
|
||||
alignLeft: "Align Left",
|
||||
alignRight: "Align Right",
|
||||
},
|
||||
loginType: {
|
||||
password: "Password Login",
|
||||
sms: "Mobile Login",
|
||||
@@ -110,4 +56,30 @@ export default {
|
||||
userInfo: "User Info",
|
||||
securitySettingTip: "2FA Setting",
|
||||
securitySetting: "2FA Setting",
|
||||
register: {
|
||||
usernameTab: "Register with username",
|
||||
emailTab: "Register with email",
|
||||
mobileTab: "Register with mobile",
|
||||
username: "Username",
|
||||
email: "Email",
|
||||
password: "Password",
|
||||
confirmPassword: "Confirm Password",
|
||||
captcha: "Captcha",
|
||||
emailCode: "Email verification code",
|
||||
mobileLogin: "Go to mobile login (login to register)",
|
||||
inviteCode: "Invitation code",
|
||||
inviteCodeOptional: "Invitation code (optional)",
|
||||
submit: "Register",
|
||||
login: "Log In",
|
||||
noMethodEnabled: "No registration method is enabled",
|
||||
usernameRequired: "Please enter your username",
|
||||
emailRequired: "Please enter your email",
|
||||
emailInvalid: "Please enter a valid email address",
|
||||
passwordRequired: "Please enter your password",
|
||||
confirmPasswordRequired: "Please confirm your password",
|
||||
passwordMismatch: "The two passwords do not match",
|
||||
smsCodeRequired: "Please enter the SMS verification code",
|
||||
emailCodeRequired: "Please enter the email verification code",
|
||||
captchaRequired: "Please complete the captcha",
|
||||
},
|
||||
};
|
||||
@@ -1,5 +1,6 @@
|
||||
export default {
|
||||
domain: {
|
||||
dnsPersistDescription: "Currently, only Google certificates support DNS persistent validation.",
|
||||
domainManager: "Domain Manager",
|
||||
domainDescription: "used to auto apply for certificate", //管理域名的校验方式,用于申请证书时自动选择验证方式
|
||||
domain: "Domain",
|
||||
|
||||
@@ -1,20 +1,18 @@
|
||||
export default {
|
||||
clientManager: "Client Manager",
|
||||
client: {
|
||||
title: "Client Manager",
|
||||
description: "View online status and managed site count of connected Certd clients. Clients report a heartbeat every 10 minutes and are marked offline if no heartbeat arrives for 30 minutes.",
|
||||
plusRequired: "This feature requires the Pro edition",
|
||||
machineName: "Machine",
|
||||
clientId: "Client ID",
|
||||
version: "Version",
|
||||
os: "OS",
|
||||
status: "Status",
|
||||
online: "Online",
|
||||
offline: "Offline",
|
||||
siteCount: "Sites",
|
||||
httpsSiteCount: "HTTPS Sites",
|
||||
syncedSiteCount: "Synced",
|
||||
failedSiteCount: "Failed",
|
||||
lastHeartbeatAt: "Last Heartbeat",
|
||||
},
|
||||
title: "Client Manager",
|
||||
description: "View online status and managed site count of connected Certd clients. Clients report a heartbeat every 10 minutes and are marked offline if no heartbeat arrives for 30 minutes.",
|
||||
plusRequired: "This feature requires the Pro edition",
|
||||
machineName: "Machine",
|
||||
clientId: "Client ID",
|
||||
version: "Version",
|
||||
os: "OS",
|
||||
status: "Status",
|
||||
online: "Online",
|
||||
offline: "Offline",
|
||||
siteCount: "Sites",
|
||||
httpsSiteCount: "HTTPS Sites",
|
||||
syncedSiteCount: "Synced",
|
||||
failedSiteCount: "Failed",
|
||||
lastHeartbeatAt: "Last Heartbeat",
|
||||
};
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
export default {
|
||||
required: "Required",
|
||||
no: "No",
|
||||
usera: "User",
|
||||
disabledSuccess: "Disabled successfully",
|
||||
app: {
|
||||
@@ -21,12 +23,18 @@ export default {
|
||||
add: "Generate New Key",
|
||||
edit: "Edit",
|
||||
deleteSuccess: "Delete successful",
|
||||
fastCrud: {
|
||||
view: "View",
|
||||
copy: "Copy",
|
||||
edit: "Edit",
|
||||
remove: "Delete",
|
||||
addSuccess: "Added successfully",
|
||||
saveSuccess: "Saved successfully",
|
||||
},
|
||||
saveSuccess: "Saved successfully",
|
||||
cancel: "Cancel",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
all: "All",
|
||||
required: "This field is required",
|
||||
requiredField: "This field is required",
|
||||
fieldRequired: "This field is required",
|
||||
field_required: "This field is required",
|
||||
|
||||
@@ -1,50 +1,59 @@
|
||||
export default {
|
||||
dashboard: {
|
||||
greeting: "Hello, {name}, welcome to 【{site}】",
|
||||
latestVersion: "Latest version: {version}",
|
||||
validUntil: "Valid until:",
|
||||
tutorialTooltip: "Click to view detailed tutorial",
|
||||
tutorialText: "Only 3 steps to automatically apply and deploy certificates",
|
||||
alertMessage: "Certificates and credentials are sensitive. Do not use untrusted online Certd services or images. Always self-host and use official release channels:",
|
||||
helpDoc: "Help Docs",
|
||||
pipelineCount: "Number of Certificate Pipelines",
|
||||
noPipeline: "You have no certificate pipelines yet",
|
||||
enabledCount: "Enabled",
|
||||
disabledCount: "Disabled",
|
||||
certCount: "Number of Certificates",
|
||||
noCert: "You have no certificates yet",
|
||||
manageCert: "View Certificates",
|
||||
siteMonitorCount: "Number of Monitored Sites",
|
||||
siteAbnormalCount: "Abnormal",
|
||||
siteNormalCount: "Normal",
|
||||
manageSiteMonitor: "Manage Monitored Sites",
|
||||
domainCount: "Number of Domains",
|
||||
domainExpiringCount: "Expiring",
|
||||
domainExpiredCount: "Expired",
|
||||
domainNotExpiredCount: "Not Expired",
|
||||
manageDomain: "Manage Domains",
|
||||
certExpiringCount: "Soon-to-Expire",
|
||||
certExpiredCount: "Expired",
|
||||
certNoExpireCount: "Not Expired",
|
||||
createNow: "Create Now",
|
||||
managePipeline: "Manage Pipelines",
|
||||
pipelineStatus: "Pipeline Status",
|
||||
recentRun: "Recent Run Statistics",
|
||||
runCount: "Run Count",
|
||||
expiringCerts: "Soon-to-Expire Certificates",
|
||||
totalGeneratedCertCount: "Total Certificates Generated",
|
||||
singleDomainCertShortCount: "Single-domain",
|
||||
multiDomainCertShortCount: "Multi-domain",
|
||||
wildcardCertShortCount: "Wildcard",
|
||||
singleDomainCertCount: "Single-domain Certificates Generated",
|
||||
multiDomainCertCount: "Multi-domain Certificates Generated",
|
||||
wildcardCertCount: "Wildcard Certificates Generated",
|
||||
savedAmount: "Estimated savings",
|
||||
savedAmountRule: "Estimated at one quarter of Tencent Cloud's annual certificate prices: single-domain ¥532, multi-domain ¥912, and wildcard ¥2147. Actual savings may vary.",
|
||||
totalPipelineRuns: "Total Pipeline Runs",
|
||||
supportedTasks: "Overview of Supported Deployment Tasks",
|
||||
changeLog: "Change Log",
|
||||
stableRelease: "Stable",
|
||||
latestRelease: "Preview",
|
||||
},
|
||||
greeting: "Hello, {name}, welcome to 【{site}】",
|
||||
latestVersion: "Latest version: {version}",
|
||||
validUntil: "Valid until:",
|
||||
tutorialTooltip: "Click to view detailed tutorial",
|
||||
tutorialText: "Only 3 steps to automatically apply and deploy certificates",
|
||||
alertMessage: "Certificates and credentials are sensitive. Do not use untrusted online Certd services or images. Always self-host and use official release channels:",
|
||||
helpDoc: "Help Docs",
|
||||
pipelineCount: "Number of Certificate Pipelines",
|
||||
noPipeline: "You have no certificate pipelines yet",
|
||||
enabledCount: "Enabled",
|
||||
disabledCount: "Disabled",
|
||||
certCount: "Number of Certificates",
|
||||
noCert: "You have no certificates yet",
|
||||
manageCert: "View Certificates",
|
||||
siteMonitorCount: "Number of Monitored Sites",
|
||||
siteAbnormalCount: "Abnormal",
|
||||
siteNormalCount: "Normal",
|
||||
manageSiteMonitor: "Manage Monitored Sites",
|
||||
domainCount: "Number of Domains",
|
||||
domainExpiringCount: "Expiring",
|
||||
domainExpiredCount: "Expired",
|
||||
domainNotExpiredCount: "Not Expired",
|
||||
manageDomain: "Manage Domains",
|
||||
certExpiringCount: "Soon-to-Expire",
|
||||
certExpiredCount: "Expired",
|
||||
certNoExpireCount: "Not Expired",
|
||||
createNow: "Create Now",
|
||||
managePipeline: "Manage Pipelines",
|
||||
pipelineStatus: "Pipeline Status",
|
||||
recentRun: "Recent Run Statistics",
|
||||
runCount: "Run Count",
|
||||
expiringCerts: "Soon-to-Expire Certificates",
|
||||
totalGeneratedCertCount: "Total Certificates Generated",
|
||||
singleDomainCertShortCount: "Single-domain",
|
||||
multiDomainCertShortCount: "Multi-domain",
|
||||
wildcardCertShortCount: "Wildcard",
|
||||
singleDomainCertCount: "Single-domain Certificates Generated",
|
||||
multiDomainCertCount: "Multi-domain Certificates Generated",
|
||||
wildcardCertCount: "Wildcard Certificates Generated",
|
||||
savedAmount: "Estimated savings",
|
||||
savedAmountRule: "Estimated at one quarter of Tencent Cloud's annual certificate prices: single-domain ¥532, multi-domain ¥912, and wildcard ¥2147. Actual savings may vary.",
|
||||
totalPipelineRuns: "Total Pipeline Runs",
|
||||
supportedTasks: "Overview of Supported Deployment Tasks",
|
||||
supportedTasksHelper: "This list is for display only. Create a pipeline to use these tasks.",
|
||||
changeLog: "Change Log",
|
||||
stableRelease: "Stable",
|
||||
latestRelease: "Preview",
|
||||
consoleTitle: "Console",
|
||||
userTotal: "Total Users",
|
||||
manageUsers: "Manage Users",
|
||||
userGrowth: "User Growth",
|
||||
newUsers: "New Users",
|
||||
allPipelineTotal: "Total Pipelines",
|
||||
managePipelines: "Manage Pipelines",
|
||||
pipelineGrowth: "Pipeline Growth",
|
||||
newPipelines: "New Pipelines",
|
||||
recentRunTitle: "Recent Run Statistics",
|
||||
};
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
export default {
|
||||
pending: "Pending Setup",
|
||||
created: "Created",
|
||||
validating: "Validating",
|
||||
valid: "Valid",
|
||||
retry: "Retry",
|
||||
deleteTxtTip: "Delete the TXT record at the provider",
|
||||
accountUriMissing: "The ACME account authorization is missing accountUri. Please regenerate the account.",
|
||||
verifySuccess: "Validation succeeded",
|
||||
verifyFailed: "No matching TXT record found. Please try again later.",
|
||||
submitted: "Validation submitted",
|
||||
selectProviderAndAccess: "Select a DNS provider and authorization",
|
||||
txtCreated: "TXT record created",
|
||||
settingTitle: "Set DNS TXT Record",
|
||||
manualAdd: "Add Manually",
|
||||
autoAdd: "Add with Authorization",
|
||||
manualTip: "Add the following TXT record in your DNS console, then click OK to validate immediately.",
|
||||
autoTip: "Select a DNS provider and authorization. The system will create the TXT record and validate it in the background.",
|
||||
mainDomain: "Main Domain",
|
||||
txtHost: "TXT Host",
|
||||
txtValue: "TXT Value",
|
||||
provider: "DNS Provider",
|
||||
access: "DNS Authorization",
|
||||
};
|
||||
@@ -1,4 +1,7 @@
|
||||
import monitorSite from "./monitor-site";
|
||||
|
||||
export default {
|
||||
...monitorSite,
|
||||
certificateRepo: {
|
||||
title: "Certificate Repository",
|
||||
sub: "Certificates generated from pipeline",
|
||||
|
||||
@@ -1,4 +1,9 @@
|
||||
export default {
|
||||
home: "Home",
|
||||
login: "Login",
|
||||
register: "Register",
|
||||
forgotPassword: "Forgot Password",
|
||||
oauthCallback: "OAuth Callback",
|
||||
framework: {
|
||||
title: "Framework",
|
||||
home: "Home",
|
||||
@@ -13,10 +18,13 @@ export default {
|
||||
accessManager: "Access Management",
|
||||
dnsPersistRecord: "DNS Persist Records",
|
||||
certApplyTemplate: "Certificate Apply Templates",
|
||||
certApplyTemplateHelper: "Preset certificate application parameters. They are filled automatically when creating a pipeline (excluding domains and validation methods).",
|
||||
subDomain: "Subdomain Delegation Settings",
|
||||
pipelineGroup: "Pipeline Group Management",
|
||||
pipelineGroupHelper: "Manage pipeline groups",
|
||||
openKey: "Open API Key",
|
||||
notification: "Notification Settings",
|
||||
notificationHelper: "Manage notification configurations",
|
||||
siteMonitorSetting: "Site Monitor Settings",
|
||||
auditLog: "Audit Log",
|
||||
userSecurity: "Security Settings",
|
||||
@@ -25,6 +33,7 @@ export default {
|
||||
mySuite: "My Suite",
|
||||
suiteBuy: "Suite Purchase",
|
||||
myTrade: "My Orders",
|
||||
myWallet: "My Wallet",
|
||||
inviteCommission: "Incentive Plan",
|
||||
paymentReturn: "Payment Return",
|
||||
client: "Certd Client",
|
||||
@@ -48,7 +57,9 @@ export default {
|
||||
userManager: "User Management",
|
||||
userDataManager: "User Data Management",
|
||||
pipelineManager: "User Pipeline Management",
|
||||
pipelineManagerHelper: "Manage all users' pipelines",
|
||||
siteMonitorManager: "User Certificate Monitor",
|
||||
siteMonitorManagerHelper: "Manage all users' certificate monitors",
|
||||
suiteManager: "Suite Management",
|
||||
suiteSetting: "Suite Settings",
|
||||
orderManager: "Order Management",
|
||||
@@ -72,6 +83,8 @@ export default {
|
||||
currentProject: "Current Project",
|
||||
projectMemberManager: "Project Member",
|
||||
auditLog: "Audit Log",
|
||||
auditLogHelper: "View all users' operation records",
|
||||
jobHistory: "Monitoring Execution History",
|
||||
domainMonitorSetting: "Domain Monitor Settings",
|
||||
},
|
||||
};
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
export default {
|
||||
title: "Network Test",
|
||||
helper: "Test whether your server container network is working",
|
||||
customDomain: "Custom Domain Test",
|
||||
serverInfo: "Server Information",
|
||||
refresh: "Refresh",
|
||||
loading: "Loading...",
|
||||
fetchFailed: "Failed to fetch server information",
|
||||
noInfo: "No information",
|
||||
localIp: "Local IP",
|
||||
publicIp: "Public IP",
|
||||
dnsServer: "DNS Server",
|
||||
};
|
||||
@@ -6,6 +6,10 @@ export default {
|
||||
keyRemark: "Key Purpose",
|
||||
keyRemarkHelper: "Describe the purpose of this key for easier identification",
|
||||
keyRemarkMaxChars: "Maximum 512 characters",
|
||||
returnCertPassword: "Return certificate password",
|
||||
returnCertPasswordHelper: "When enabled, the certificate password is included in Open API certificate responses. Keep this key secure.",
|
||||
yes: "Yes",
|
||||
no: "No",
|
||||
gen: {
|
||||
text: "API Test",
|
||||
title: "x-certd-token",
|
||||
|
||||
@@ -33,6 +33,10 @@ export default {
|
||||
pipelineStarted: "Pipeline has started running",
|
||||
},
|
||||
actions: {
|
||||
edit: "Edit",
|
||||
delete: "Delete",
|
||||
enable: "Enable",
|
||||
disable: "Disable",
|
||||
editPipeline: "Edit Pipeline",
|
||||
editConfigGroup: "Modify Configuration/Group",
|
||||
viewCertificate: "View Certificate",
|
||||
@@ -65,6 +69,145 @@ export default {
|
||||
legoAcme: "Lego-ACME: Based on Lego, supports a wide range of DNS providers, suitable for users familiar with Lego",
|
||||
aliyunOrder: "Aliyun-Order: Get certificate from Aliyun certificate order",
|
||||
},
|
||||
editor: {
|
||||
editTask: "Edit Task",
|
||||
editStep: "Edit Step",
|
||||
installedPlugins: "Installed Plugins",
|
||||
pluginMarket: "Plugin Market",
|
||||
searchPluginMarket: "Search plugin market",
|
||||
searchLocalPlugins: "Search local plugins",
|
||||
loadingPluginMarket: "Loading plugin market...",
|
||||
noPluginFound: "No plugins found",
|
||||
triggerManually: "Trigger Manually",
|
||||
triggerSource: "Trigger Source",
|
||||
scheduledTrigger: "Trigger Source (Scheduled)",
|
||||
webhookTrigger: "Trigger Source (Webhook)",
|
||||
certExpireTime: "Certificate expiration time: ",
|
||||
certExpired: "Certificate expired ",
|
||||
viewCertificate: "View Certificate",
|
||||
downloadCertificate: "Download Certificate",
|
||||
nextExecutionTime: "Next execution time: ",
|
||||
noTriggerSource: "No trigger source configured; it will not run automatically",
|
||||
validityPeriod: "Validity period: ",
|
||||
save: "Save",
|
||||
cancel: "Cancel",
|
||||
addStage: "New Stage",
|
||||
addTask: "Add Task",
|
||||
addAfterTask: "Add After-Task",
|
||||
addNotification: "Add Notification",
|
||||
notificationNotSet: "Notification not set",
|
||||
history: "Execution History",
|
||||
historyHint: "Click a task to view logs",
|
||||
taskName: "Task Name",
|
||||
taskSteps: "Task Steps",
|
||||
addStep: "Add Step",
|
||||
copy: "Copy",
|
||||
paste: "Paste",
|
||||
confirm: "Confirm",
|
||||
required: "This field is required",
|
||||
taskNeedsStep: "At least one step is required, or delete this task using the button beside the title",
|
||||
step: "Step",
|
||||
endStage: "End",
|
||||
confirmTitle: "Confirm",
|
||||
confirmManualRun: "Are you sure you want to trigger the run manually?",
|
||||
taskLog: "Task Log",
|
||||
noLogs: "No logs (this node was not triggered or has no log records for this run)",
|
||||
aiAnalyze: "AI Analysis",
|
||||
rerun: "Rerun",
|
||||
downloadLogs: "Download Logs",
|
||||
close: "Close",
|
||||
batchEditSteps: "Batch Edit Steps",
|
||||
selectAllSteps: "Select All Steps",
|
||||
batchEnableSteps: "Batch Enable Steps",
|
||||
batchDisableSteps: "Batch Disable Steps",
|
||||
batchDeleteSteps: "Batch Delete Steps",
|
||||
exitBatchEdit: "Exit Batch Edit",
|
||||
stepsSerialHelper: "Steps run sequentially. If an earlier step fails, later steps will not run.",
|
||||
current: "Current",
|
||||
view: "View",
|
||||
confirmCancel: "Confirm Cancellation",
|
||||
confirmCancelTask: "Cancel this task?",
|
||||
taskCanceled: "Task canceled successfully",
|
||||
selectAllTasks: "Select all tasks",
|
||||
batchEnableTasks: "Enable tasks in batch",
|
||||
batchDisableTasks: "Disable tasks in batch",
|
||||
batchDeleteTasks: "Delete tasks in batch",
|
||||
exitBatchEditTasks: "Exit batch edit",
|
||||
editStageTitle: "Edit stage title",
|
||||
batchEditTasks: "Edit tasks in batch",
|
||||
dragSort: "Drag to reorder",
|
||||
forceRerun: "Force rerun this step",
|
||||
resizeStage: "Drag to resize stage",
|
||||
afterLabel: "After-task",
|
||||
notificationLabel: "Notification",
|
||||
unsavedLeave: "This pipeline is not saved. Leave anyway?",
|
||||
newPipeline: "New Pipeline",
|
||||
newTask: "New Task",
|
||||
newStage: "New Stage",
|
||||
stageSuffix: " Stage",
|
||||
saveBeforeRunTitle: "Save before running the pipeline",
|
||||
saveBeforeRunContent: "Save it first?",
|
||||
runUnsupported: "Running is not supported yet",
|
||||
addStageAndTask: "Please add a stage and task first",
|
||||
prerequisiteMissing: "The prerequisite output step {param} for {step} does not exist or is disabled",
|
||||
selectPlugin: "Select plugin",
|
||||
searchPlugin: "Search plugins",
|
||||
searchResults: "Search results",
|
||||
plusPluginRequired: "This plugin requires Certd Professional",
|
||||
immediateRun: "Run immediately",
|
||||
immediateRunHelper: "Run the pipeline immediately after saving",
|
||||
operationSuccess: "Operation successful",
|
||||
regenerate: "Regenerate",
|
||||
webhookHelper: "Supports POST and GET requests (each pipeline has a unique Webhook URL)",
|
||||
regenerateWebhookTitle: "Regenerate the Webhook URL?",
|
||||
regenerateWebhookContent: "The old Webhook URL will become invalid",
|
||||
confirmDeleteTask: "Delete this task?",
|
||||
confirmDeleteStep: "Delete this step?",
|
||||
confirmDeleteSelectedTasks: "Delete the selected {count} tasks?",
|
||||
confirmDeleteSelectedSteps: "Delete the selected {count} steps?",
|
||||
stepCopied: "Step configuration copied. You can paste it in another task editor",
|
||||
allStepsCopied: "All steps copied. You can paste them in another task editor",
|
||||
copyFirst: "Please copy first",
|
||||
pasted: "Pasted successfully",
|
||||
enterName: "Please enter a name",
|
||||
pluginTypeFirst: "Please select a type first",
|
||||
runStrategy: "Run strategy",
|
||||
runStrategyNormal: "Run normally (required for certificate tasks unless you want this task to run every time)",
|
||||
runStrategySkip: "Skip after success (choose this for other tasks)",
|
||||
runStrategyDefault: "Usually keep the default",
|
||||
runStrategyNormalHelp: "Run normally: runs every time; certificate tasks need this",
|
||||
runStrategySkipHelp: "Skip after success: skip after one successful run and run again when the certificate changes",
|
||||
triggerWebhook: "Webhook Trigger",
|
||||
triggerSchedule: "Scheduled Trigger",
|
||||
choose: "Select",
|
||||
noLogsShort: "No logs",
|
||||
statusSuccess: "success",
|
||||
statusError: "error",
|
||||
statusSkip: "skip",
|
||||
statusStart: "running",
|
||||
statusCanceled: "canceled",
|
||||
statusNone: "not run",
|
||||
statusDisabled: "disabled",
|
||||
statusNoDeployCount: "insufficient runs",
|
||||
pluginGroups: {
|
||||
all: "All",
|
||||
cert: "Certificate",
|
||||
host: "Host",
|
||||
cdn: "CDN",
|
||||
panel: "Panel",
|
||||
aliyun: "Alibaba Cloud",
|
||||
huawei: "Huawei Cloud",
|
||||
tencent: "Tencent Cloud",
|
||||
volcengine: "Volcengine",
|
||||
jdcloud: "JD Cloud",
|
||||
ucloud: "UCloud",
|
||||
baidu: "Baidu Cloud",
|
||||
qiniu: "Qiniu Cloud",
|
||||
aws: "Amazon Web Services",
|
||||
other: "Other",
|
||||
admin: "Administration",
|
||||
},
|
||||
},
|
||||
pipelineForm: {
|
||||
createTitle: "Create Certificate Pipeline",
|
||||
moreParams: "More Parameters",
|
||||
|
||||
@@ -1,4 +1,50 @@
|
||||
export default {
|
||||
title: "Suite",
|
||||
mySuite: "My Suite",
|
||||
suiteBuy: "Suite Purchase",
|
||||
myTrade: "My Orders",
|
||||
inviteCommission: "Incentive Plan",
|
||||
inviteSubtitle: "Invite friends and earn generous commissions",
|
||||
promotionAgreement: "Promotion Agreement",
|
||||
withdraw: "Withdraw",
|
||||
withdrawAvailable: "Available to withdraw {amount}",
|
||||
inviteCode: "Invitation Code",
|
||||
orderTime: "Time",
|
||||
inviteTime: "Invitation Time",
|
||||
inviteeUsername: "Invited Username",
|
||||
inviteLink: "Invitation Link",
|
||||
myLevel: "My Level",
|
||||
unset: "Not set",
|
||||
commissionRate: "Commission Rate",
|
||||
commissionAfterPayment: "Commission is calculated at this rate after a friend pays",
|
||||
proportion: "Rate",
|
||||
inviteSuccess: "Successful Invites",
|
||||
incomeRecords: "Income Records",
|
||||
enableFirst: "Please enable the incentive plan first",
|
||||
enable: "Enable Incentive Plan",
|
||||
disabled: "Incentive plan is not enabled",
|
||||
totalIncome: "Total Income",
|
||||
monthIncome: "This Month's Income",
|
||||
promotionAmount: "Total Promotion Amount",
|
||||
inviteeCount: "People Invited",
|
||||
people: " people",
|
||||
agreePromotion: "I have read and agree to the promotion agreement",
|
||||
close: "Close",
|
||||
postpone: "Later",
|
||||
agreeAndEnable: "Agree and Enable",
|
||||
agreeRequired: "Please check the agreement first",
|
||||
enabledSuccess: "Incentive plan enabled",
|
||||
purchaseSuccess: "Suite purchased successfully",
|
||||
agreementPlaceholder: "Enter the promotion agreement users must accept before enabling the incentive plan",
|
||||
activationExchange: "Redeem Activation Code",
|
||||
activationCode: "Activation Code",
|
||||
enterActivationCode: "Please enter the activation code",
|
||||
enterCdkCode: "Please enter the CDK activation code",
|
||||
activateSuccess: "Activated successfully",
|
||||
exchangeFailed: "Redemption failed",
|
||||
noSuite: "No suites available for purchase",
|
||||
suiteHelperStack: "Note: Multiple suites and addons can be purchased, and their quantities are accumulated",
|
||||
suiteHelperLatest: "Note: 1) Only the latest suite is active at a time; 2) Multiple addons can be purchased and take effect immediately; 3) Suite and addon quantities are accumulated",
|
||||
order: {
|
||||
confirmTitle: "Order Confirmation",
|
||||
package: "Package",
|
||||
|
||||
@@ -1,4 +1,14 @@
|
||||
export default {
|
||||
aiDevTitle: "AI Plugin Development",
|
||||
certPluginConfig: "Certificate Plugin Configuration",
|
||||
saveSuccess: "Saved successfully",
|
||||
commonGoogleAcme: "Common Google ACME Account",
|
||||
commonZeroSslAcme: "Common ZeroSSL ACME Account",
|
||||
commonLiteSslAcme: "Common LiteSSL ACME Account",
|
||||
otherConfig: "Other Configuration",
|
||||
certApplyDefaults: "Certificate Apply Plugin Defaults",
|
||||
customCertApplyParams: "Custom certificate application plugin parameters",
|
||||
save: "Save",
|
||||
titlea: "Title",
|
||||
pluginFile: "Plugin File",
|
||||
selectPluginFile: "Select plugin file",
|
||||
|
||||
@@ -1,118 +1,134 @@
|
||||
export default {
|
||||
sys: {
|
||||
setting: {
|
||||
baseSetting: "Base Settings",
|
||||
registerSetting: "Register Settings",
|
||||
safeSetting: "Safe Settings",
|
||||
paymentSetting: "Payment Settings",
|
||||
captchaSetting: "Captcha Setting",
|
||||
pipelineSetting: "Pipeline Settings",
|
||||
oauthSetting: "Login Settings",
|
||||
networkSetting: "Network Settings",
|
||||
adminModeSetting: "Admin Mode Settings",
|
||||
adminModeHelper: "enterprise mode : allow to create and manage pipelines, roles, users, etc.\n saas mode : only allow to create and manage pipelines",
|
||||
enterpriseMode: "Enterprise Mode",
|
||||
saasMode: "SaaS Mode",
|
||||
modeIntroTitle: "Management Mode Introduction",
|
||||
saasModeDescription: "SaaS mode: each user manages and independently uses their own pipelines and authorization resources.",
|
||||
enterpriseModeDescription: "Enterprise mode: pipelines, certificates, and authorization resources are managed through projects for all internal users.",
|
||||
switchModeNow: "Switch Mode Now",
|
||||
suiteSetting: "Suite Settings",
|
||||
orderManager: "Order Management",
|
||||
headerMenuSetting: "Top Menu Settings",
|
||||
sitePersonalization: "Site Personalization",
|
||||
siteName: "Site Name",
|
||||
slogan: "Subtitle / Slogan",
|
||||
loginLogo: "Login Page Logo",
|
||||
entityName: "Entity Name",
|
||||
shownAtBottom: "Displayed at the bottom",
|
||||
entityUrl: "Entity URL",
|
||||
modeSaasHelper: "SaaS mode: each user manages and independently uses their own pipelines and authorization resources.",
|
||||
modeEnterpriseHelper: "Enterprise mode: pipelines, certificates, and authorization resources are managed through projects for all internal users.",
|
||||
modeMore: "More Management Mode Details",
|
||||
modeFixedWarning: "Choose a suitable mode before use and avoid switching it frequently afterwards.",
|
||||
modeMigrate: "After switching to enterprise mode, personal data created earlier will be hidden. You can migrate it to a project.",
|
||||
modeCommWarning: "Enterprise mode is not recommended for the commercial edition unless you intend to use it internally.",
|
||||
baseSetting: "Base Settings",
|
||||
registerSetting: "Register Settings",
|
||||
safeSetting: "Safe Settings",
|
||||
paymentSetting: "Payment Settings",
|
||||
captchaSetting: "Captcha Setting",
|
||||
pipelineSetting: "Pipeline Settings",
|
||||
oauthSetting: "Login Settings",
|
||||
networkSetting: "Network Settings",
|
||||
adminModeSetting: "Admin Mode Settings",
|
||||
adminModeHelper: "enterprise mode : allow to create and manage pipelines, roles, users, etc.\n saas mode : only allow to create and manage pipelines",
|
||||
enterpriseMode: "Enterprise Mode",
|
||||
saasMode: "SaaS Mode",
|
||||
|
||||
showRunStrategy: "Show RunStrategy",
|
||||
showRunStrategyHelper: "Allow modify the run strategy of the task",
|
||||
homePageEnabled: "Enable Home Page",
|
||||
showRunStrategy: "Show RunStrategy",
|
||||
showRunStrategyHelper: "Allow modify the run strategy of the task",
|
||||
homePageEnabled: "Enable Home Page",
|
||||
|
||||
captchaEnabled: "Enable Login Captcha",
|
||||
captchaHelper: "Whether to enable captcha verification for login",
|
||||
captchaType: "Captcha Setting",
|
||||
captchaTest: "Captcha Test",
|
||||
// 保存后再点击测试,请务必测试通过了,再开启登录验证码
|
||||
captchaTestHelper: "Save and click test, please make sure the test is passed before enabling login captcha",
|
||||
captchaEnabled: "Enable Login Captcha",
|
||||
captchaHelper: "Whether to enable captcha verification for login",
|
||||
captchaType: "Captcha Setting",
|
||||
captchaTest: "Captcha Test",
|
||||
// 保存后再点击测试,请务必测试通过了,再开启登录验证码
|
||||
captchaTestHelper: "Save and click test, please make sure the test is passed before enabling login captcha",
|
||||
|
||||
pipelineValidTimeEnabled: "Enable Pipeline Valid Time",
|
||||
pipelineValidTimeEnabledHelper: "Whether to enable the valid time of the pipeline",
|
||||
certDomainAddToMonitorEnabled: "Add Domain to Certificate Monitor",
|
||||
certDomainAddToMonitorEnabledHelper: "Whether to add the domain to the certificate monitor",
|
||||
pipelineValidTimeEnabled: "Enable Pipeline Valid Time",
|
||||
pipelineValidTimeEnabledHelper: "Whether to enable the valid time of the pipeline",
|
||||
certDomainAddToMonitorEnabled: "Add Domain to Certificate Monitor",
|
||||
certDomainAddToMonitorEnabledHelper: "Whether to add the domain to the certificate monitor",
|
||||
|
||||
defaultCertRenewDays: "Default Certificate Renew Days",
|
||||
defaultCertRenewDaysHelper: "Default certificate renewal days, helpful for table list progress bar display",
|
||||
defaultCertRenewDaysRecommend: "Recommend 15",
|
||||
defaultCertRenewDays: "Default Certificate Renew Days",
|
||||
defaultCertRenewDaysHelper: "Default certificate renewal days, helpful for table list progress bar display",
|
||||
defaultCertRenewDaysRecommend: "Recommend 15",
|
||||
|
||||
pipelineMaxRunningCount: "Max Running Count",
|
||||
pipelineMaxRunningCountHelper: "Max running count of the pipeline",
|
||||
pipelineMaxRunningCountRecommend: "Recommend 5-15, default 10",
|
||||
pipelineMaxRunningCount: "Max Running Count",
|
||||
pipelineMaxRunningCountHelper: "Max running count of the pipeline",
|
||||
pipelineMaxRunningCountRecommend: "Recommend 5-15, default 10",
|
||||
|
||||
acmeWalkFromAuthoritative: "Check TXT Record from Authoritative NS",
|
||||
acmeWalkFromAuthoritativeHelper: "Apply certificate when whether to check the TXT record from authoritative NS server first",
|
||||
acmeWalkFromAuthoritative: "Check TXT Record from Authoritative NS",
|
||||
acmeWalkFromAuthoritativeHelper: "Apply certificate when whether to check the TXT record from authoritative NS server first",
|
||||
|
||||
customAcmeManage: "Custom ACME Management",
|
||||
customAcmeManageHelper:
|
||||
"Configure certificate authorities (built-in + custom ACME). Built-in providers cannot be modified or deleted. Custom ACME providers (intranet CA, enterprise CA or any RFC 8555 compatible ACME service) become selectable as certificate authorities in apply tasks and ACME account authorization",
|
||||
customAcmeName: "Name",
|
||||
customAcmeSslProvider: "SSL Provider",
|
||||
customAcmeSslProviderHelper: "Unique identifier, e.g. myca; used to distinguish providers in pipeline and ACME account",
|
||||
customAcmeReverseProxy: "Reverse Proxy",
|
||||
customAcmeReverseProxyHelper:
|
||||
"For example, for Let's Encrypt, configure the reverse proxy on your overseas server: \nproxy_pass https://acme-v02.api.letsencrypt.org/; \nthen fill in your reverse proxy server domain here, without http://",
|
||||
customAcmeAdd: "Add Custom ACME",
|
||||
customAcmeEdit: "Edit Custom ACME",
|
||||
customAcmeNeedEab: "Need EAB",
|
||||
customAcmeBuiltIn: "Built-in",
|
||||
customAcmeTag: "Custom",
|
||||
customAcmeDeleteConfirmTitle: "Delete Custom ACME",
|
||||
customAcmeDeleteConfirmContent: "Deleting '{title}' may affect pipelines using it to apply certificates. Are you sure?",
|
||||
customAcmeSaveCheck: "Name, sslProvider and Directory URL are required",
|
||||
customAcmeSslProviderUnique: "The sslProvider identifier must be unique",
|
||||
customAcmeManage: "Custom ACME Management",
|
||||
customAcmeManageHelper:
|
||||
"Configure certificate authorities (built-in + custom ACME). Built-in providers cannot be modified or deleted. Custom ACME providers (intranet CA, enterprise CA or any RFC 8555 compatible ACME service) become selectable as certificate authorities in apply tasks and ACME account authorization",
|
||||
customAcmeName: "Name",
|
||||
customAcmeSslProvider: "SSL Provider",
|
||||
customAcmeSslProviderHelper: "Unique identifier, e.g. myca; used to distinguish providers in pipeline and ACME account",
|
||||
customAcmeReverseProxy: "Reverse Proxy",
|
||||
customAcmeReverseProxyHelper:
|
||||
"For example, for Let's Encrypt, configure the reverse proxy on your overseas server: \nproxy_pass https://acme-v02.api.letsencrypt.org/; \nthen fill in your reverse proxy server domain here, without http://",
|
||||
customAcmeAdd: "Add Custom ACME",
|
||||
customAcmeEdit: "Edit Custom ACME",
|
||||
customAcmeNeedEab: "Need EAB",
|
||||
customAcmeBuiltIn: "Built-in",
|
||||
customAcmeTag: "Custom",
|
||||
customAcmeDeleteConfirmTitle: "Delete Custom ACME",
|
||||
customAcmeDeleteConfirmContent: "Deleting '{title}' may affect pipelines using it to apply certificates. Are you sure?",
|
||||
customAcmeSaveCheck: "Name, sslProvider and Directory URL are required",
|
||||
customAcmeSslProviderUnique: "The sslProvider identifier must be unique",
|
||||
|
||||
fixedCertExpireDays: "Fixed Cert Expire Days",
|
||||
fixedCertExpireDaysHelper: "Fixed cert expiration days, helpful for table list progress bar display",
|
||||
fixedCertExpireDaysRecommend: "Recommend 90",
|
||||
fixedCertExpireDays: "Fixed Cert Expire Days",
|
||||
fixedCertExpireDaysHelper: "Fixed cert expiration days, helpful for table list progress bar display",
|
||||
fixedCertExpireDaysRecommend: "Recommend 90",
|
||||
|
||||
enableOauth: "Enable OAuth2 Login",
|
||||
oauthEnabledHelper: "Whether to enable OAuth2 login",
|
||||
oauthProviders: "OAuth2 Login Providers",
|
||||
oauthType: "OAuth2 Login Type",
|
||||
oauthConfig: "OAuth2 Login Config",
|
||||
oauthProviderSelectorPlaceholder: "Not Configured",
|
||||
oauthCallback: "Callback URL",
|
||||
oauthCallbackHelper: "Copy this URL to the callback address of the OAuth2 login provider",
|
||||
oauthCallbackCopy: "Copy Callback URL",
|
||||
oauthAutoRegister: "Auto Register User",
|
||||
oauthAutoRegisterCheckedText: "Auto Register",
|
||||
oauthAutoRegisterUnCheckedText: "User Select",
|
||||
oauthAutoRegisterHelper: "Whether to auto register user when login",
|
||||
oauthAutoRedirect: "Auto Redirect to OAuth2 Login",
|
||||
oauthAutoRedirectHelper: "Whether to auto redirect to OAuth2 login when login (using the first enabled OAuth2 login type)",
|
||||
oauthOnly: "OAuth2 Login Only",
|
||||
oauthOnlyHelper: "Only allow OAuth2 login. Password login remains available for 10 minutes after server startup as an emergency window.",
|
||||
enablePasskey: "Enable Passkey Login",
|
||||
passkeyHostnameNotSame: "Passkey hostname must be the same as the main domain",
|
||||
passkeyEnabledHelper:
|
||||
"1、Site must enable https \n2、Domain name must not change, otherwise the registered passkey will be invalid \n3、Domain name must be the same as the main domain, otherwise the registered passkey will be invalid",
|
||||
enableOauth: "Enable OAuth2 Login",
|
||||
oauthEnabledHelper: "Whether to enable OAuth2 login",
|
||||
oauthProviders: "OAuth2 Login Providers",
|
||||
oauthType: "OAuth2 Login Type",
|
||||
oauthConfig: "OAuth2 Login Config",
|
||||
oauthProviderSelectorPlaceholder: "Not Configured",
|
||||
oauthCallback: "Callback URL",
|
||||
oauthCallbackHelper: "Copy this URL to the callback address of the OAuth2 login provider",
|
||||
oauthCallbackCopy: "Copy Callback URL",
|
||||
oauthAutoRegister: "Auto Register User",
|
||||
oauthAutoRegisterCheckedText: "Auto Register",
|
||||
oauthAutoRegisterUnCheckedText: "User Select",
|
||||
oauthAutoRegisterHelper: "Whether to auto register user when login",
|
||||
oauthAutoRedirect: "Auto Redirect to OAuth2 Login",
|
||||
oauthAutoRedirectHelper: "Whether to auto redirect to OAuth2 login when login (using the first enabled OAuth2 login type)",
|
||||
oauthOnly: "OAuth2 Login Only",
|
||||
oauthOnlyHelper: "Only allow OAuth2 login. Password login remains available for 10 minutes after server startup as an emergency window.",
|
||||
enablePasskey: "Enable Passkey Login",
|
||||
passkeyHostnameNotSame: "Passkey hostname must be the same as the main domain",
|
||||
passkeyEnabledHelper:
|
||||
"1、Site must enable https \n2、Domain name must not change, otherwise the registered passkey will be invalid \n3、Domain name must be the same as the main domain, otherwise the registered passkey will be invalid",
|
||||
|
||||
email: {
|
||||
templates: "Email Templates",
|
||||
templateType: "Template Type",
|
||||
templateProvider: "Template Config",
|
||||
email: {
|
||||
templates: "Email Templates",
|
||||
templateType: "Template Type",
|
||||
templateProvider: "Template Config",
|
||||
|
||||
templateSetting: "Email Template Setting",
|
||||
serverSetting: "Email Server Setting",
|
||||
sendTest: "Send Test",
|
||||
templateSetting: "Email Template Setting",
|
||||
serverSetting: "Email Server Setting",
|
||||
sendTest: "Send Test",
|
||||
|
||||
templateProviderSelectorPlaceholder: "Not Configured",
|
||||
},
|
||||
notice: "System Notice",
|
||||
noticeHelper: "System notice, will be displayed on the login page",
|
||||
noticePlaceholder: "System notice",
|
||||
customFooter: "Custom Footer",
|
||||
customFooterHelper: "Custom site footer, displayed at the bottom of the page, support HTML format",
|
||||
customFooterPlaceholder: "Custom footer content",
|
||||
|
||||
environmentVars: "Environment Variables",
|
||||
environmentVarsHelper: "configure the runtime environment variables, one per line, format: KEY=VALUE",
|
||||
commonHeaders: "Common Headers",
|
||||
commonHeadersHelper: "Common headers automatically added to server-side HTTP requests, one per line, format: KEY=VALUE. Existing request headers with the same name are not overwritten.",
|
||||
|
||||
bindUrl: "Bind URL",
|
||||
bindUrlHelper: "Bind URL, used as your site URL in notifications",
|
||||
},
|
||||
templateProviderSelectorPlaceholder: "Not Configured",
|
||||
},
|
||||
notice: "System Notice",
|
||||
noticeHelper: "System notice, will be displayed on the login page",
|
||||
noticePlaceholder: "System notice",
|
||||
customFooter: "Custom Footer",
|
||||
customFooterHelper: "Custom site footer, displayed at the bottom of the page, support HTML format",
|
||||
customFooterPlaceholder: "Custom footer content",
|
||||
|
||||
environmentVars: "Environment Variables",
|
||||
environmentVarsHelper: "configure the runtime environment variables, one per line, format: KEY=VALUE",
|
||||
commonHeaders: "Common Headers",
|
||||
commonHeadersHelper: "Common headers automatically added to server-side HTTP requests, one per line, format: KEY=VALUE. Existing request headers with the same name are not overwritten.",
|
||||
|
||||
bindUrl: "Bind URL",
|
||||
bindUrlHelper: "Bind URL, used as your site URL in notifications",
|
||||
icpRegistrationNumber: "ICP Registration Number",
|
||||
icpPlaceholder: "Guangdong ICP xxxxxxx Number",
|
||||
publicSecurityRegistrationNumber: "Public Security Registration Number",
|
||||
|
||||
@@ -1,4 +1,7 @@
|
||||
import tutorialGuide from "./tutorial-guide";
|
||||
|
||||
export default {
|
||||
...tutorialGuide,
|
||||
steps: {
|
||||
createPipeline: "Create Certificate Pipeline",
|
||||
addTask: "Add Deployment Task",
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
export default {
|
||||
title: "My Wallet",
|
||||
withdraw: "Withdraw",
|
||||
withdrawRecords: "Withdrawal Records",
|
||||
balanceLogs: "Balance Details",
|
||||
availableAmount: "Available Balance",
|
||||
frozenAmount: "Frozen Balance",
|
||||
totalIncomeAmount: "Total Income",
|
||||
totalWithdrawAmount: "Total Withdrawals",
|
||||
withdrawSetting: "Withdrawal Settings",
|
||||
channel: "Withdrawal Channel",
|
||||
alipay: "Alipay",
|
||||
bank: "Bank Card",
|
||||
selectChannel: "Please select a withdrawal channel",
|
||||
realName: "Real Name",
|
||||
enterRealName: "Please enter your real name",
|
||||
account: "Receiving Account",
|
||||
enterAccount: "Please enter the receiving account",
|
||||
qrCode: "Receiving QR Code",
|
||||
uploadQrCode: "Upload an Alipay receiving QR code image",
|
||||
bankName: "Bank Name",
|
||||
selectBank: "Please select a bank",
|
||||
enterBankName: "Please enter the bank name",
|
||||
saveSuccess: "Saved successfully",
|
||||
beforeWithdrawTip: "Set up a withdrawal account before withdrawing.",
|
||||
amount: "Withdrawal Amount",
|
||||
yuan: "CNY",
|
||||
enterAmount: "Please enter the withdrawal amount",
|
||||
submitSuccess: "Withdrawal request submitted",
|
||||
applyTime: "Application Time",
|
||||
type: "Type",
|
||||
income: "Income",
|
||||
consume: "Balance Deduction",
|
||||
withdrawFreeze: "Withdrawal Frozen",
|
||||
withdrawSuccess: "Withdrawal Successful",
|
||||
withdrawReject: "Withdrawal Returned",
|
||||
changeAmount: "Amount Changed",
|
||||
balanceAfter: "Balance After",
|
||||
remark: "Remark",
|
||||
pending: "Pending",
|
||||
approved: "Approved",
|
||||
rejected: "Rejected",
|
||||
auditRemark: "Audit Remark",
|
||||
};
|
||||
@@ -1,21 +1,7 @@
|
||||
import certd from "./certd";
|
||||
import authentication from "./authentication";
|
||||
import vip from "./vip";
|
||||
import tutorial from "./tutorial";
|
||||
import preferences from "./preferences";
|
||||
import ui from "./ui";
|
||||
import guide from "./guide";
|
||||
import common from "./common";
|
||||
import monitor from "./monitor";
|
||||
import vben from "./vben";
|
||||
//注意: @符号是保留字符,需要用{'@'}替换
|
||||
export default {
|
||||
certd,
|
||||
authentication,
|
||||
vip,
|
||||
ui,
|
||||
tutorial,
|
||||
preferences,
|
||||
guide,
|
||||
common,
|
||||
monitor,
|
||||
...vben,
|
||||
};
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
export default {
|
||||
welcomeBack: "Welcome Back",
|
||||
pageTitle: "Plug-and-play Admin system",
|
||||
pageDesc: "Efficient, versatile frontend template",
|
||||
loginSuccess: "Login Successful",
|
||||
loginSuccessDesc: "Welcome Back",
|
||||
loginSubtitle: "Enter your account details to manage your projects",
|
||||
selectAccount: "Quick Select Account",
|
||||
username: "Username",
|
||||
password: "Password",
|
||||
usernameTip: "Please enter username",
|
||||
passwordErrorTip: "Password is incorrect",
|
||||
passwordTip: "Please enter password",
|
||||
verifyRequiredTip: "Please complete the verification first",
|
||||
rememberMe: "Remember Me",
|
||||
createAnAccount: "Create an Account",
|
||||
createAccount: "Create Account",
|
||||
alreadyHaveAccount: "Already have an account?",
|
||||
accountTip: "Don't have an account?",
|
||||
signUp: "Sign Up",
|
||||
signUpSubtitle: "Make managing your applications simple and fun",
|
||||
confirmPassword: "Confirm Password",
|
||||
confirmPasswordTip: "The passwords do not match",
|
||||
agree: "I agree to",
|
||||
privacyPolicy: "Privacy-policy",
|
||||
terms: "Terms",
|
||||
agreeTip: "Please agree to the Privacy Policy and Terms",
|
||||
goToLogin: "Login instead",
|
||||
passwordStrength: "Use 8 or more characters with a mix of letters, numbers & symbols",
|
||||
forgetPassword: "Forget Password?",
|
||||
forgetPasswordSubtitle: "Enter your email and we'll send you instructions to reset your password",
|
||||
emailTip: "Please enter email",
|
||||
emailValidErrorTip: "The email format you entered is incorrect",
|
||||
sendResetLink: "Send Reset Link",
|
||||
email: "Email",
|
||||
qrcodeSubtitle: "Scan the QR code with your phone to login",
|
||||
qrcodePrompt: "Click 'Confirm' after scanning to complete login",
|
||||
qrcodeLogin: "QR Code Login",
|
||||
codeSubtitle: "Enter your phone number to start managing your project",
|
||||
code: "Security code",
|
||||
codeTip: "Security code required {0} characters",
|
||||
mobile: "Mobile",
|
||||
mobileLogin: "Mobile Login",
|
||||
mobileTip: "Please enter mobile number",
|
||||
mobileErrortip: "The phone number format is incorrect",
|
||||
sendCode: "Get Security code",
|
||||
sendText: "Resend in {0}s",
|
||||
thirdPartyLogin: "Or continue with",
|
||||
loginAgainTitle: "Please Log In Again",
|
||||
loginAgainSubTitle: "Your login session has expired. Please log in again to continue.",
|
||||
layout: {
|
||||
center: "Align Center",
|
||||
alignLeft: "Align Left",
|
||||
alignRight: "Align Right",
|
||||
},
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
import preferences from "./preferences";
|
||||
import ui from "./ui";
|
||||
import common from "./common";
|
||||
import authentication from "./authentication";
|
||||
export default {
|
||||
preferences,
|
||||
ui,
|
||||
common,
|
||||
authentication,
|
||||
};
|
||||
@@ -13,36 +13,54 @@ import notification from "./certd/notification";
|
||||
import addon from "./certd/addon";
|
||||
import suite from "./certd/suite";
|
||||
import project from "./certd/project";
|
||||
import syssettings from "./certd/sys-settings";
|
||||
import sysplugin from "./certd/sys-plugin";
|
||||
import sysauthority from "./certd/sys-authority";
|
||||
import syscname from "./certd/sys-cname";
|
||||
import settings from "./certd/sys-settings";
|
||||
import plugin from "./certd/sys-plugin";
|
||||
import authority from "./certd/sys-authority";
|
||||
import cnameSettings from "./certd/sys-cname";
|
||||
import tutorial from "./certd/tutorial";
|
||||
import cron from "./certd/cron";
|
||||
import client from "./certd/client";
|
||||
import wallet from "./certd/wallet";
|
||||
import nettest from "./certd/nettest";
|
||||
import audit from "./certd/audit";
|
||||
import applyTemplate from "./certd/apply-template";
|
||||
import dnsPersist from "./certd/dns-persist";
|
||||
import auth from "./certd/auth";
|
||||
import guide from "./certd/guide";
|
||||
import vip from "./certd/vip";
|
||||
|
||||
// Note: @ is reserved in locale messages; use {'@'} when needed.
|
||||
export default {
|
||||
...common,
|
||||
...navigation,
|
||||
...dashboard,
|
||||
...pipeline,
|
||||
...history,
|
||||
...monitor,
|
||||
...certdomain,
|
||||
...cname,
|
||||
...access,
|
||||
...open,
|
||||
...mine,
|
||||
...notification,
|
||||
...addon,
|
||||
...suite,
|
||||
...project,
|
||||
...syssettings,
|
||||
...sysplugin,
|
||||
...sysauthority,
|
||||
...syscname,
|
||||
...tutorial,
|
||||
...cron,
|
||||
...client,
|
||||
auth,
|
||||
guide,
|
||||
vip,
|
||||
common,
|
||||
navigation,
|
||||
dashboard,
|
||||
pipeline,
|
||||
history,
|
||||
monitor,
|
||||
certdomain,
|
||||
cname,
|
||||
access,
|
||||
open,
|
||||
mine,
|
||||
notification,
|
||||
addon,
|
||||
suite,
|
||||
project,
|
||||
sys: {
|
||||
settings,
|
||||
plugin,
|
||||
authority,
|
||||
cname: cnameSettings,
|
||||
},
|
||||
tutorial,
|
||||
cron,
|
||||
client,
|
||||
wallet,
|
||||
nettest,
|
||||
audit,
|
||||
applyTemplate,
|
||||
dnsPersist,
|
||||
};
|
||||
|
||||
@@ -4,4 +4,11 @@ export default {
|
||||
nameHelper: "随便填,当多个相同类型的授权时,便于区分",
|
||||
level: "级别",
|
||||
system: "系统",
|
||||
select: "选择",
|
||||
selectProvider: "选择授权提供者",
|
||||
deleteConfirm: "授权如果已经被使用,可能会导致流水线无法正常运行,请谨慎操作",
|
||||
name: "名称",
|
||||
user: "用户",
|
||||
type: "类型",
|
||||
selectType: "请选择类型",
|
||||
};
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
export default {
|
||||
setSuccess: "设置成功",
|
||||
editTitle: "编辑证书申请参数模版",
|
||||
addTitle: "新增证书申请参数模版",
|
||||
name: "模版名称",
|
||||
default: "默认",
|
||||
setDefault: "设为默认",
|
||||
disabled: "禁用",
|
||||
createTime: "创建时间",
|
||||
config: "配置",
|
||||
};
|
||||
@@ -0,0 +1,10 @@
|
||||
export default {
|
||||
createTime: "操作时间",
|
||||
type: "操作类型",
|
||||
action: "操作动作",
|
||||
result: "结果",
|
||||
success: "成功",
|
||||
failed: "失败",
|
||||
remark: "备注",
|
||||
ipAddress: "IP地址",
|
||||
};
|
||||
+26
-54
@@ -1,58 +1,4 @@
|
||||
export default {
|
||||
welcomeBack: "欢迎回来",
|
||||
pageTitle: "开箱即用的大型中后台管理系统",
|
||||
pageDesc: "工程化、高性能、跨组件库的前端模版",
|
||||
loginSuccess: "登录成功",
|
||||
loginSuccessDesc: "欢迎回来",
|
||||
loginSubtitle: "请输入您的帐户信息以开始管理您的项目",
|
||||
selectAccount: "快速选择账号",
|
||||
username: "账号",
|
||||
password: "密码",
|
||||
usernameTip: "请输入用户名",
|
||||
passwordTip: "请输入密码",
|
||||
verifyRequiredTip: "请先完成验证",
|
||||
passwordErrorTip: "密码错误",
|
||||
rememberMe: "记住账号",
|
||||
createAnAccount: "创建一个账号",
|
||||
createAccount: "创建账号",
|
||||
alreadyHaveAccount: "已经有账号了?",
|
||||
accountTip: "还没有账号?",
|
||||
signUp: "注册",
|
||||
signUpSubtitle: "让您的应用程序管理变得简单而有趣",
|
||||
confirmPassword: "确认密码",
|
||||
confirmPasswordTip: "两次输入的密码不一致",
|
||||
agree: "我同意",
|
||||
privacyPolicy: "隐私政策",
|
||||
terms: "条款",
|
||||
agreeTip: "请同意隐私政策和条款",
|
||||
goToLogin: "去登录",
|
||||
passwordStrength: "使用 8 个或更多字符,混合字母、数字和符号",
|
||||
forgetPassword: "忘记密码?",
|
||||
forgetPasswordSubtitle: "输入您的电子邮件,我们将向您发送重置密码的连接",
|
||||
emailTip: "请输入邮箱",
|
||||
emailValidErrorTip: "你输入的邮箱格式不正确",
|
||||
sendResetLink: "发送重置链接",
|
||||
email: "邮箱",
|
||||
qrcodeSubtitle: "请用手机扫描二维码登录",
|
||||
qrcodePrompt: "扫码后点击 '确认',即可完成登录",
|
||||
qrcodeLogin: "扫码登录",
|
||||
codeSubtitle: "请输入您的手机号码以开始管理您的项目",
|
||||
code: "验证码",
|
||||
codeTip: "请输入{0}位验证码",
|
||||
mobile: "手机号码",
|
||||
mobileTip: "请输入手机号",
|
||||
mobileErrortip: "手机号码格式错误",
|
||||
mobileLogin: "手机号登录",
|
||||
sendCode: "获取验证码",
|
||||
sendText: "{0}秒后重新获取",
|
||||
thirdPartyLogin: "其他登录方式",
|
||||
loginAgainTitle: "重新登录",
|
||||
loginAgainSubTitle: "您的登录状态已过期,请重新登录以继续。",
|
||||
layout: {
|
||||
center: "居中",
|
||||
alignLeft: "居左",
|
||||
alignRight: "居右",
|
||||
},
|
||||
loginType: {
|
||||
password: "密码登录",
|
||||
sms: "手机号登录",
|
||||
@@ -112,4 +58,30 @@ export default {
|
||||
userInfo: "账号信息",
|
||||
securitySettingTip: "2FA设置",
|
||||
securitySetting: "2FA设置",
|
||||
register: {
|
||||
usernameTab: "用户名注册",
|
||||
emailTab: "邮箱注册",
|
||||
mobileTab: "手机号注册",
|
||||
username: "用户名",
|
||||
email: "邮箱",
|
||||
password: "密码",
|
||||
confirmPassword: "确认密码",
|
||||
captcha: "验证码",
|
||||
emailCode: "邮件验证码",
|
||||
mobileLogin: "前往手机号登录(登录即注册)",
|
||||
inviteCode: "邀请码",
|
||||
inviteCodeOptional: "邀请码(选填)",
|
||||
submit: "注册",
|
||||
login: "登录",
|
||||
noMethodEnabled: "没有启用任何一种注册方式",
|
||||
usernameRequired: "请输入用户名",
|
||||
emailRequired: "请输入邮箱",
|
||||
emailInvalid: "请输入正确的邮箱",
|
||||
passwordRequired: "请输入密码",
|
||||
confirmPasswordRequired: "请确认密码",
|
||||
passwordMismatch: "两次输入密码不一致",
|
||||
smsCodeRequired: "请输入短信验证码",
|
||||
emailCodeRequired: "请输入邮件验证码",
|
||||
captchaRequired: "请通过验证码",
|
||||
},
|
||||
};
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user