mirror of
https://github.com/certd/certd.git
synced 2026-04-05 07:20:56 +08:00
Compare commits
28 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f9341ad8e | ||
|
|
574c0983f5 | ||
|
|
be6c7c7ac8 | ||
|
|
4fd31f276b | ||
|
|
224db7da57 | ||
|
|
1413e1aff4 | ||
|
|
68b669d3ff | ||
|
|
29f44c67c8 | ||
|
|
34702196e1 | ||
|
|
d45c8d1e9b | ||
|
|
bc19825ada | ||
|
|
72bb640239 | ||
|
|
aacee4a94c | ||
|
|
3ab37d5c5d | ||
|
|
3dd3ecf8f1 | ||
|
|
a3831827d0 | ||
|
|
6aa6c957ee | ||
|
|
9e12412f5f | ||
|
|
0f9eb31740 | ||
|
|
6be8ab581d | ||
|
|
d8425bc9c5 | ||
|
|
0ddcb9c00a | ||
|
|
6d43623f45 | ||
|
|
196cd88010 | ||
|
|
7f37df4227 | ||
|
|
985a12a63b | ||
|
|
9058c0e9fc | ||
|
|
4b0cd32d12 |
4
.github/workflows/build-image.yml
vendored
4
.github/workflows/build-image.yml
vendored
@@ -4,7 +4,7 @@ on:
|
||||
branches: ['v2-dev']
|
||||
paths:
|
||||
- "trigger/build.trigger"
|
||||
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
@@ -21,7 +21,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
|
||||
ref: 'v2-dev'
|
||||
- name: get_certd_version
|
||||
id: get_certd_version
|
||||
uses: actions/github-script@v6
|
||||
|
||||
3
.github/workflows/deploy-demo.yml
vendored
3
.github/workflows/deploy-demo.yml
vendored
@@ -8,6 +8,8 @@ on:
|
||||
workflows: [ "build-image" ]
|
||||
types:
|
||||
- completed
|
||||
workflow_dispatch: # 添加手动触发
|
||||
|
||||
|
||||
|
||||
# schedule:
|
||||
@@ -26,6 +28,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
ref: v2-dev
|
||||
|
||||
- name: get_certd_version
|
||||
id: get_certd_version
|
||||
uses: actions/github-script@v6
|
||||
|
||||
8
.github/workflows/publish-atom.yaml
vendored
8
.github/workflows/publish-atom.yaml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
workflows: [ "build-image-for-release" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
@@ -19,13 +19,17 @@ permissions:
|
||||
jobs:
|
||||
publish-atomgit:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
if: |
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
(github.event.workflow_run.conclusion == 'success')
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: 'v2-dev'
|
||||
|
||||
- name: get_certd_version
|
||||
id: get_certd_version
|
||||
uses: actions/github-script@v6
|
||||
|
||||
7
.github/workflows/publish-gitee.yaml
vendored
7
.github/workflows/publish-gitee.yaml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
workflows: [ "build-image-for-release" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
@@ -19,13 +19,16 @@ permissions:
|
||||
jobs:
|
||||
publish-gitee:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
if: |
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
(github.event.workflow_run.conclusion == 'success')
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: 'v2-dev'
|
||||
|
||||
- name: publish_to_gitee
|
||||
id: publish_to_gitee
|
||||
|
||||
7
.github/workflows/publish-github.yaml
vendored
7
.github/workflows/publish-github.yaml
vendored
@@ -8,7 +8,7 @@ on:
|
||||
workflows: [ "build-image-for-release" ]
|
||||
types:
|
||||
- completed
|
||||
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# schedule:
|
||||
# - # 国际时间 19:17 执行,北京时间3:17 ↙↙↙ 改成你想要每天自动执行的时间
|
||||
# - cron: '17 19 * * *'
|
||||
@@ -19,13 +19,16 @@ permissions:
|
||||
jobs:
|
||||
publish-github:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.conclusion == 'success' }}
|
||||
if: |
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
(github.event.workflow_run.conclusion == 'success')
|
||||
steps:
|
||||
- name: Checkout Code
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: 'v2-dev'
|
||||
|
||||
- name: publish_to_github
|
||||
id: publish_to_github
|
||||
|
||||
2
.github/workflows/release-image.yml
vendored
2
.github/workflows/release-image.yml
vendored
@@ -4,6 +4,7 @@ on:
|
||||
branches: ['v2-dev']
|
||||
paths:
|
||||
- "trigger/release.trigger"
|
||||
workflow_dispatch: # 添加手动触发
|
||||
# workflow_run:
|
||||
# workflows: [ "deploy-demo" ]
|
||||
# types:
|
||||
@@ -25,6 +26,7 @@ jobs:
|
||||
with:
|
||||
fetch-depth: 0
|
||||
lfs: true
|
||||
ref: 'v2-dev'
|
||||
|
||||
- name: get_certd_version
|
||||
id: get_certd_version
|
||||
|
||||
24
CHANGELOG.md
24
CHANGELOG.md
@@ -3,6 +3,30 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复修改分组报错的bug ([224db7d](https://github.com/certd/certd/commit/224db7da57dbdddf25bcac7faa0a29eb228c5a33))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 移除passkey的counter递增校验 ([68b669d](https://github.com/certd/certd/commit/68b669d3ff3e13b931939093320ce7237bb02b1b))
|
||||
* passkey 支持Bitwarden ([29f44c6](https://github.com/certd/certd/commit/29f44c67c808bed9ff1c9d4884d39a1a62d043a7))
|
||||
* passkey登录放到下方其他登录位置 ([1413e1a](https://github.com/certd/certd/commit/1413e1aff4aabcfd471716338c210fbcfd76c8f9))
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复阿里云证书订单翻页问题 ([6d43623](https://github.com/certd/certd/commit/6d43623f459a7594599e50a7ed89d67fcc775518))
|
||||
* 修复查看证书详情页面错位的bug ([7f37df4](https://github.com/certd/certd/commit/7f37df42274e657892d92e868ceac67e139f3bf2))
|
||||
* 修复选择插件页面无法滚动的bug ([d8425bc](https://github.com/certd/certd/commit/d8425bc9c5ee81bb669706c6de6bad69d7c38d8e))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化passkey ([9e12412](https://github.com/certd/certd/commit/9e12412f5fa7800df1d7efaf62cd8fd5d79bb569))
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -3,6 +3,25 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复阿里云证书订单翻页问题 ([6d43623](https://github.com/certd/certd/commit/6d43623f459a7594599e50a7ed89d67fcc775518))
|
||||
* 修复查看证书详情页面错位的bug ([7f37df4](https://github.com/certd/certd/commit/7f37df42274e657892d92e868ceac67e139f3bf2))
|
||||
* 修复选择插件页面无法滚动的bug ([d8425bc](https://github.com/certd/certd/commit/d8425bc9c5ee81bb669706c6de6bad69d7c38d8e))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化passkey ([9e12412](https://github.com/certd/certd/commit/9e12412f5fa7800df1d7efaf62cd8fd5d79bb569))
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复多选框只能单选的bug ([12700e1](https://github.com/certd/certd/commit/12700e1754319513ac02822ff1588d63420b964e))
|
||||
* 修复旧版1panel插件 报sslIds is not iterable的错误 ([50db6f0](https://github.com/certd/certd/commit/50db6f0765e7ec9a5698cd99540d90e188634fb1))
|
||||
|
||||
## [1.39.2](https://github.com/certd/certd/compare/v1.39.1...v1.39.2) (2026-03-16)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -9,5 +9,5 @@
|
||||
}
|
||||
},
|
||||
"npmClient": "pnpm",
|
||||
"version": "1.39.3"
|
||||
"version": "1.39.5"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/publishlab/node-acme-client/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.39.4](https://github.com/publishlab/node-acme-client/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
## [1.39.3](https://github.com/publishlab/node-acme-client/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/acme-client
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"description": "Simple and unopinionated ACME client",
|
||||
"private": false,
|
||||
"author": "nmorsman",
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"type": "module",
|
||||
"module": "scr/index.js",
|
||||
"main": "src/index.js",
|
||||
@@ -18,7 +18,7 @@
|
||||
"types"
|
||||
],
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.39.3",
|
||||
"@certd/basic": "^1.39.5",
|
||||
"@peculiar/x509": "^1.11.0",
|
||||
"asn1js": "^3.0.5",
|
||||
"axios": "^1.9.0",
|
||||
@@ -70,5 +70,5 @@
|
||||
"bugs": {
|
||||
"url": "https://github.com/publishlab/node-acme-client/issues"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/basic
|
||||
|
||||
@@ -1 +1 @@
|
||||
13:58
|
||||
00:48
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/basic",
|
||||
"private": false,
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -47,5 +47,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/pipeline
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/pipeline",
|
||||
"private": false,
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -18,8 +18,8 @@
|
||||
"compile": "tsc --skipLibCheck --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.39.3",
|
||||
"@certd/plus-core": "^1.39.3",
|
||||
"@certd/basic": "^1.39.5",
|
||||
"@certd/plus-core": "^1.39.5",
|
||||
"dayjs": "^1.11.7",
|
||||
"lodash-es": "^4.17.21",
|
||||
"reflect-metadata": "^0.1.13"
|
||||
@@ -45,5 +45,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-huawei
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-huawei",
|
||||
"private": false,
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
"types": "./dist/d/index.d.ts",
|
||||
@@ -24,5 +24,5 @@
|
||||
"prettier": "^2.8.8",
|
||||
"tslib": "^2.8.1"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-iframe
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-iframe",
|
||||
"private": false,
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -31,5 +31,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/jdcloud
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/jdcloud",
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"description": "jdcloud openApi sdk",
|
||||
"main": "./dist/bundle.js",
|
||||
"module": "./dist/bundle.js",
|
||||
@@ -56,5 +56,5 @@
|
||||
"fetch"
|
||||
]
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-k8s
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/lib-k8s",
|
||||
"private": false,
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"module": "./dist/index.js",
|
||||
@@ -17,7 +17,7 @@
|
||||
"pub": "npm publish"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/basic": "^1.39.3",
|
||||
"@certd/basic": "^1.39.5",
|
||||
"@kubernetes/client-node": "0.21.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -32,5 +32,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/lib-server
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/lib-server",
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -28,11 +28,11 @@
|
||||
],
|
||||
"license": "AGPL",
|
||||
"dependencies": {
|
||||
"@certd/acme-client": "^1.39.3",
|
||||
"@certd/basic": "^1.39.3",
|
||||
"@certd/pipeline": "^1.39.3",
|
||||
"@certd/plugin-lib": "^1.39.3",
|
||||
"@certd/plus-core": "^1.39.3",
|
||||
"@certd/acme-client": "^1.39.5",
|
||||
"@certd/basic": "^1.39.5",
|
||||
"@certd/pipeline": "^1.39.5",
|
||||
"@certd/plugin-lib": "^1.39.5",
|
||||
"@certd/plus-core": "^1.39.5",
|
||||
"@midwayjs/cache": "3.14.0",
|
||||
"@midwayjs/core": "3.20.11",
|
||||
"@midwayjs/i18n": "3.20.13",
|
||||
@@ -64,5 +64,5 @@
|
||||
"typeorm": "^0.3.11",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/midway-flyway-js
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/midway-flyway-js",
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"description": "midway with flyway, sql upgrade way ",
|
||||
"private": false,
|
||||
"type": "module",
|
||||
@@ -46,5 +46,5 @@
|
||||
"typeorm": "^0.3.11",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -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.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-cert
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/plugin-cert",
|
||||
"private": false,
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -17,10 +17,10 @@
|
||||
"compile": "tsc --skipLibCheck --watch"
|
||||
},
|
||||
"dependencies": {
|
||||
"@certd/acme-client": "^1.39.3",
|
||||
"@certd/basic": "^1.39.3",
|
||||
"@certd/pipeline": "^1.39.3",
|
||||
"@certd/plugin-lib": "^1.39.3",
|
||||
"@certd/acme-client": "^1.39.5",
|
||||
"@certd/basic": "^1.39.5",
|
||||
"@certd/pipeline": "^1.39.5",
|
||||
"@certd/plugin-lib": "^1.39.5",
|
||||
"psl": "^1.9.0",
|
||||
"punycode.js": "^2.3.1"
|
||||
},
|
||||
@@ -38,5 +38,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -3,6 +3,16 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复阿里云证书订单翻页问题 ([6d43623](https://github.com/certd/certd/commit/6d43623f459a7594599e50a7ed89d67fcc775518))
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
**Note:** Version bump only for package @certd/plugin-lib
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "@certd/plugin-lib",
|
||||
"private": false,
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"type": "module",
|
||||
"main": "./dist/index.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
@@ -22,10 +22,10 @@
|
||||
"@alicloud/pop-core": "^1.7.10",
|
||||
"@alicloud/tea-util": "^1.4.11",
|
||||
"@aws-sdk/client-s3": "^3.964.0",
|
||||
"@certd/acme-client": "^1.39.3",
|
||||
"@certd/basic": "^1.39.3",
|
||||
"@certd/pipeline": "^1.39.3",
|
||||
"@certd/plus-core": "^1.39.3",
|
||||
"@certd/acme-client": "^1.39.5",
|
||||
"@certd/basic": "^1.39.5",
|
||||
"@certd/pipeline": "^1.39.5",
|
||||
"@certd/plus-core": "^1.39.5",
|
||||
"@kubernetes/client-node": "0.21.0",
|
||||
"ali-oss": "^6.22.0",
|
||||
"basic-ftp": "^5.0.5",
|
||||
@@ -57,5 +57,5 @@
|
||||
"tslib": "^2.8.1",
|
||||
"typescript": "^5.4.2"
|
||||
},
|
||||
"gitHead": "f47773348312d5480b248c02beed9e162f59e3c7"
|
||||
"gitHead": "aacee4a94c2e2481be8a307fb5a6a5d04a09dda7"
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ export function createRemoteSelectInputDefine(opts?: {
|
||||
pager?: boolean;
|
||||
component?: any;
|
||||
value?: any;
|
||||
pageSize?: number;
|
||||
}) {
|
||||
const title = opts?.title || "请选择";
|
||||
const certDomainsInputKey = opts?.certDomainsInputKey || "certDomains";
|
||||
@@ -71,6 +72,7 @@ export function createRemoteSelectInputDefine(opts?: {
|
||||
search,
|
||||
pager,
|
||||
multi,
|
||||
pageSize: opts?.pageSize,
|
||||
watches: [certDomainsInputKey, accessIdInputKey, ...watches],
|
||||
...opts.component,
|
||||
},
|
||||
|
||||
@@ -3,6 +3,29 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复修改分组报错的bug ([224db7d](https://github.com/certd/certd/commit/224db7da57dbdddf25bcac7faa0a29eb228c5a33))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* passkey 支持Bitwarden ([29f44c6](https://github.com/certd/certd/commit/29f44c67c808bed9ff1c9d4884d39a1a62d043a7))
|
||||
* passkey登录放到下方其他登录位置 ([1413e1a](https://github.com/certd/certd/commit/1413e1aff4aabcfd471716338c210fbcfd76c8f9))
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复阿里云证书订单翻页问题 ([6d43623](https://github.com/certd/certd/commit/6d43623f459a7594599e50a7ed89d67fcc775518))
|
||||
* 修复查看证书详情页面错位的bug ([7f37df4](https://github.com/certd/certd/commit/7f37df42274e657892d92e868ceac67e139f3bf2))
|
||||
* 修复选择插件页面无法滚动的bug ([d8425bc](https://github.com/certd/certd/commit/d8425bc9c5ee81bb669706c6de6bad69d7c38d8e))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化passkey ([9e12412](https://github.com/certd/certd/commit/9e12412f5fa7800df1d7efaf62cd8fd5d79bb569))
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/ui-client",
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "vite --open",
|
||||
@@ -106,8 +106,8 @@
|
||||
"zod-defaults": "^0.1.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@certd/lib-iframe": "^1.39.3",
|
||||
"@certd/pipeline": "^1.39.3",
|
||||
"@certd/lib-iframe": "^1.39.5",
|
||||
"@certd/pipeline": "^1.39.5",
|
||||
"@rollup/plugin-commonjs": "^25.0.7",
|
||||
"@rollup/plugin-node-resolve": "^15.2.3",
|
||||
"@types/chai": "^4.3.12",
|
||||
|
||||
@@ -64,6 +64,7 @@ const props = defineProps<
|
||||
search?: boolean;
|
||||
pager?: boolean;
|
||||
multi?: boolean;
|
||||
pageSize?: number;
|
||||
} & ComponentPropsType
|
||||
>();
|
||||
|
||||
@@ -103,7 +104,7 @@ const loading = ref(false);
|
||||
const pagerRef: Ref = ref({
|
||||
pageNo: 1,
|
||||
total: 0,
|
||||
pageSize: 100,
|
||||
pageSize: props.pageSize || 100,
|
||||
});
|
||||
const getOptions = async () => {
|
||||
if (loading.value) {
|
||||
|
||||
@@ -18,7 +18,8 @@
|
||||
</template>
|
||||
<div class="rounded pl-3 pr-3 px-2 py-1 flex-center flex pointer items-center bg-accent h-10 button-text" title="当前项目">
|
||||
<!-- <fs-icon icon="ion:apps" class="mr-1"></fs-icon> -->
|
||||
当前项目:{{ projectStore.currentProject?.name || "..." }}
|
||||
<span class="hidden md:flex"> 当前项目:</span>
|
||||
<span class="text-ellipsis">{{ projectStore.currentProject?.name || "..." }}</span>
|
||||
<fs-icon :icon="currentIcon" class="ml-5"></fs-icon>
|
||||
</div>
|
||||
</a-dropdown>
|
||||
@@ -58,7 +59,7 @@ const currentIcon = computed(() => {
|
||||
<style lang="less">
|
||||
.project-selector {
|
||||
&.button-text {
|
||||
min-width: 150px;
|
||||
min-width: 100px;
|
||||
max-width: 250px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<a-dropdown>
|
||||
<div class="fs-user-info">{{ t("user.greeting") }},{{ userStore.getUserInfo?.nickName || userStore.getUserInfo?.username }}</div>
|
||||
<div class="fs-user-info" @click="goUserProfile">{{ t("user.greeting") }},{{ userStore.getUserInfo?.nickName || userStore.getUserInfo?.username }}</div>
|
||||
<template #overlay>
|
||||
<a-menu>
|
||||
<a-menu-item>
|
||||
|
||||
@@ -48,6 +48,9 @@ const avatar = computed(() => {
|
||||
async function handleLogout() {
|
||||
await userStore.logout(true);
|
||||
}
|
||||
function goUserProfile() {
|
||||
router.push("/certd/mine/user-profile");
|
||||
}
|
||||
|
||||
const settingStore = useSettingStore();
|
||||
|
||||
@@ -90,7 +93,7 @@ const projectStore = useProjectStore();
|
||||
</div>
|
||||
</template>
|
||||
<template #user-dropdown>
|
||||
<UserDropdown :avatar="avatar" :menus="menus" :text="userStore.userInfo?.nickName || userStore.userInfo?.username" description="" tag-text="" @logout="handleLogout" />
|
||||
<UserDropdown :avatar="avatar" :menus="menus" :text="userStore.userInfo?.nickName || userStore.userInfo?.username" description="" tag-text="" @logout="handleLogout" @user-profile="goUserProfile" />
|
||||
</template>
|
||||
<template #lock-screen>
|
||||
<LockScreen :avatar @to-login="handleLogout" />
|
||||
|
||||
@@ -103,4 +103,6 @@ export default {
|
||||
deviceNameHelper: "Please enter the device name, used to identify the device",
|
||||
passkeyRegisterHelper: "Site domain change will invalidate passkey",
|
||||
userInfo: "User Info",
|
||||
securitySettingTip: "2FA Setting",
|
||||
securitySetting: "2FA Setting",
|
||||
};
|
||||
|
||||
@@ -105,4 +105,6 @@ export default {
|
||||
deviceNameHelper: "请输入当前设备名称,绑定多个时好做区分",
|
||||
passkeyRegisterHelper: "1、站点域名变更会导致passkey失效;\n2、同一设备同一个用户绑定多次只有最后一次的有效,之前绑定的会失效,需要手动删除",
|
||||
userInfo: "账号信息",
|
||||
securitySettingTip: "2FA设置",
|
||||
securitySetting: "2FA设置",
|
||||
};
|
||||
|
||||
@@ -67,7 +67,7 @@ const props = withDefaults(defineProps<Props>(), {
|
||||
hoverDelay: 500,
|
||||
});
|
||||
|
||||
const emit = defineEmits<{ logout: [] }>();
|
||||
const emit = defineEmits<{ logout: []; userProfile: [] }>();
|
||||
|
||||
const { globalLockScreenShortcutKey, globalLogoutShortcutKey } = usePreferences();
|
||||
const lockStore = useLockStore();
|
||||
@@ -132,6 +132,11 @@ function handleSubmitLogout() {
|
||||
logoutModalApi.close();
|
||||
}
|
||||
|
||||
function handleUserProfile() {
|
||||
emit("userProfile");
|
||||
openPopover.value = false;
|
||||
}
|
||||
|
||||
if (enableShortcutKey.value) {
|
||||
const keys = useMagicKeys();
|
||||
whenever(keys["Alt+KeyQ"]!, () => {
|
||||
@@ -173,7 +178,7 @@ if (enableShortcutKey.value) {
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent class="mr-2 min-w-[240px] p-0 pb-1">
|
||||
<div ref="refContent">
|
||||
<DropdownMenuLabel class="flex items-center p-3">
|
||||
<DropdownMenuLabel class="flex items-center p-3 pointer" @click="handleUserProfile">
|
||||
<VbenAvatar :alt="text" :src="avatar" class="size-12" dot dot-class="bottom-0 right-1 border-2 size-4 bg-green-500" />
|
||||
<div class="ml-2 w-full">
|
||||
<div v-if="tagText || text || $slots.tagText" class="text-foreground mb-1 flex items-center text-sm font-medium">
|
||||
|
||||
@@ -35,11 +35,15 @@
|
||||
</a-tag>
|
||||
</div>
|
||||
</div>
|
||||
<div class="action-buttons">
|
||||
<div class="action-buttons gap-2">
|
||||
<a-button type="primary" class="action-btn" @click="doUpdate">
|
||||
{{ t("authentication.updateProfile") }}
|
||||
</a-button>
|
||||
<change-password-button class="ml-10" :show-button="true" />
|
||||
<change-password-button :show-button="true" />
|
||||
|
||||
<a-button type="primary" class="action-btn" @click="goSecuritySetting">
|
||||
{{ t("authentication.securitySettingTip") }}
|
||||
</a-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -88,7 +92,7 @@
|
||||
</div>
|
||||
<div class="passkey-list">
|
||||
<div v-for="passkey in passkeys" :key="passkey.id" class="passkey-item">
|
||||
<div class="passkey-icon">
|
||||
<div class="passkey-icon hidden md:flex">
|
||||
<fs-icon icon="ion:finger-print" class="icon" />
|
||||
</div>
|
||||
<div class="passkey-info">
|
||||
@@ -142,6 +146,7 @@ import { useSettingStore } from "/@/store/settings";
|
||||
import { isEmpty } from "lodash-es";
|
||||
import { dict } from "@fast-crud/fast-crud";
|
||||
import dayjs from "dayjs";
|
||||
import { useRouter } from "vue-router";
|
||||
|
||||
const { t } = useI18n();
|
||||
|
||||
@@ -175,6 +180,11 @@ function doUpdate() {
|
||||
});
|
||||
}
|
||||
|
||||
const router = useRouter();
|
||||
function goSecuritySetting() {
|
||||
router.push("/certd/mine/security");
|
||||
}
|
||||
|
||||
const oauthBounds = ref([]);
|
||||
const oauthProviders = ref([]);
|
||||
|
||||
@@ -278,20 +288,32 @@ async function doRegisterPasskey(deviceName: string) {
|
||||
// type: "public-key",
|
||||
// }));
|
||||
|
||||
const credential = await (navigator.credentials as any).create({
|
||||
publicKey: {
|
||||
challenge: Uint8Array.from(atob(options.challenge.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0)),
|
||||
rp: options.rp,
|
||||
pubKeyCredParams: options.pubKeyCredParams,
|
||||
timeout: options.timeout || 60000,
|
||||
attestation: options.attestation,
|
||||
// excludeCredentials: excludeCredentials,
|
||||
user: {
|
||||
id: new TextEncoder().encode(options.userId + ""),
|
||||
name: userInfo.value.username,
|
||||
displayName: deviceName,
|
||||
},
|
||||
console.log("passkey register options:", options, JSON.stringify(options));
|
||||
const publicKey = {
|
||||
challenge: Uint8Array.from(atob(options.challenge.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0)),
|
||||
rp: options.rp,
|
||||
pubKeyCredParams: options.pubKeyCredParams,
|
||||
timeout: options.timeout || 60000,
|
||||
// attestation: options.attestation,
|
||||
// excludeCredentials: excludeCredentials,
|
||||
// extensions: options.extensions,
|
||||
// authenticatorSelection: options.authenticatorSelection,
|
||||
// hints: options.hints,
|
||||
user: {
|
||||
id: new TextEncoder().encode(options.userId + ""),
|
||||
name: userInfo.value.username + "@" + deviceName,
|
||||
displayName: deviceName,
|
||||
},
|
||||
// 关键配置在这里 👇
|
||||
authenticatorSelection: {
|
||||
residentKey: "required", // 或 "preferred",请求创建可发现凭证
|
||||
requireResidentKey: true, // 为兼容旧浏览器,设置与 residentKey 相同的值
|
||||
userVerification: "preferred", // 用户验证策略
|
||||
},
|
||||
};
|
||||
console.log("passkey register publicKey:", publicKey, JSON.stringify(publicKey));
|
||||
const credential = await (navigator.credentials as any).create({
|
||||
publicKey,
|
||||
});
|
||||
|
||||
if (!credential) {
|
||||
@@ -310,6 +332,7 @@ async function doRegisterPasskey(deviceName: string) {
|
||||
console.log("credential", credential, response);
|
||||
|
||||
const verifyRes: any = await api.verifyPasskeyRegistration(response, options.challenge, deviceName);
|
||||
console.log("verifyRes:", verifyRes, JSON.stringify(verifyRes));
|
||||
await loadPasskeys();
|
||||
} catch (e: any) {
|
||||
console.error("Passkey注册失败:", e);
|
||||
@@ -721,7 +744,6 @@ onMounted(async () => {
|
||||
.passkey-icon {
|
||||
width: 48px;
|
||||
height: 48px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
background: linear-gradient(135deg, #11998e 0%, #38ef7d 100%);
|
||||
@@ -749,8 +771,8 @@ onMounted(async () => {
|
||||
.passkey-meta {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
gap: 12px;
|
||||
font-size: 13px;
|
||||
gap: 4px;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.meta-item {
|
||||
|
||||
@@ -100,7 +100,10 @@ function formatDate(dateStr: string): string {
|
||||
.cert-detail {
|
||||
table {
|
||||
width: 100%;
|
||||
table-layout: fixed;
|
||||
table-layout: fixed !important;
|
||||
}
|
||||
.ant-descriptions-item-label {
|
||||
width: 90px;
|
||||
}
|
||||
.fingerprint {
|
||||
.label {
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
</a-row>
|
||||
</template>
|
||||
<div class="flex-col h-100 overflow-hidden md:ml-5 md:mr-5 step-form-body">
|
||||
<a-tabs v-model:active-key="pluginGroupActive" tab-position="left" class="flex-1 overflow-hidden">
|
||||
<a-tabs v-model:active-key="pluginGroupActive" tab-position="left" class="flex-1 overflow-hidden h-full">
|
||||
<template v-for="group of computedPluginGroups" :key="group.key">
|
||||
<a-tab-pane v-if="(group.key === 'admin' && userStore.isAdmin) || group.key !== 'admin'" :key="group.key" class="scroll-y">
|
||||
<template #tab>
|
||||
|
||||
@@ -46,21 +46,11 @@
|
||||
</a-form-item>
|
||||
</template>
|
||||
</a-tab-pane>
|
||||
<a-tab-pane v-if="settingStore.sysPublic.passkeyEnabled && settingStore.isPlus" key="passkey" :tab="t('authentication.passkeyTab')">
|
||||
<template v-if="formState.loginType === 'passkey'">
|
||||
<div v-if="!passkeySupported" class="text-red-500 text-sm mt-2 text-center mb-10">
|
||||
{{ t("authentication.passkeyNotSupported") }}
|
||||
</div>
|
||||
</template>
|
||||
</a-tab-pane>
|
||||
</a-tabs>
|
||||
<a-form-item>
|
||||
<a-button v-if="formState.loginType !== 'passkey'" type="primary" size="large" html-type="button" :loading="loading" class="login-button" @click="handleFinish">
|
||||
<a-button type="primary" size="large" html-type="button" :loading="loading" class="login-button" @click="handleFinish">
|
||||
{{ queryBindCode ? t("authentication.bindButton") : t("authentication.loginButton") }}
|
||||
</a-button>
|
||||
<a-button v-else type="primary" size="large" html-type="button" :loading="loading" class="login-button" :disabled="!passkeySupported" @click="handlePasskeyLogin">
|
||||
{{ t("authentication.passkeyLogin") }}
|
||||
</a-button>
|
||||
</a-form-item>
|
||||
<a-form-item>
|
||||
<div class="mt-2 flex justify-between items-center">
|
||||
@@ -73,7 +63,6 @@
|
||||
{{ t("authentication.forgotPassword") }}
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<router-link v-if="hasRegisterTypeEnabled() && !queryBindCode" class="register" :to="{ name: 'register' }">
|
||||
{{ t("authentication.registerLink") }}
|
||||
</router-link>
|
||||
@@ -81,7 +70,7 @@
|
||||
</a-form-item>
|
||||
</template>
|
||||
|
||||
<div v-if="!queryBindCode && settingStore.sysPublic.oauthEnabled && settingStore.isPlus" class="w-full">
|
||||
<div v-if="!queryBindCode && (settingStore.sysPublic.oauthEnabled || settingStore.sysPublic.passkeyEnabled) && settingStore.isPlus" class="w-full">
|
||||
<oauth-footer :oauth-only="isOauthOnly"></oauth-footer>
|
||||
</div>
|
||||
</a-form>
|
||||
@@ -195,57 +184,6 @@ const twoFactor = reactive({
|
||||
verifyCode: "",
|
||||
});
|
||||
|
||||
const passkeySupported = ref(false);
|
||||
const passkeyEnabled = ref(false);
|
||||
|
||||
const checkPasskeySupport = () => {
|
||||
passkeySupported.value = false;
|
||||
if (typeof window !== "undefined" && "credentials" in navigator && "PublicKeyCredential" in window) {
|
||||
passkeySupported.value = true;
|
||||
}
|
||||
};
|
||||
|
||||
const handlePasskeyLogin = async () => {
|
||||
if (!passkeySupported.value) {
|
||||
notification.error({ message: t("authentication.passkeyNotSupported") });
|
||||
return;
|
||||
}
|
||||
|
||||
loading.value = true;
|
||||
try {
|
||||
const optionsResponse: any = await request({
|
||||
url: "/passkey/generateAuthentication",
|
||||
method: "post",
|
||||
});
|
||||
const options = optionsResponse;
|
||||
|
||||
const credential = await (navigator.credentials as any).get({
|
||||
publicKey: {
|
||||
challenge: Uint8Array.from(atob(options.challenge.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0)),
|
||||
rpId: options.rpId,
|
||||
allowCredentials: options.allowCredentials || [],
|
||||
timeout: options.timeout || 60000,
|
||||
},
|
||||
});
|
||||
|
||||
if (!credential) {
|
||||
throw new Error("Passkey认证失败");
|
||||
}
|
||||
|
||||
const loginRes: any = await UserApi.loginByPasskey({
|
||||
credential,
|
||||
challenge: options.challenge,
|
||||
});
|
||||
|
||||
await userStore.onLoginSuccess(loginRes);
|
||||
} catch (e: any) {
|
||||
console.error("Passkey登录失败:", e);
|
||||
notification.error({ message: e.message || "Passkey登录失败" });
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const handleFinish = async () => {
|
||||
loading.value = true;
|
||||
try {
|
||||
@@ -294,9 +232,7 @@ const isOauthOnly = computed(() => {
|
||||
return sysPublicSettings.oauthOnly && settingStore.isPlus && sysPublicSettings.oauthEnabled;
|
||||
});
|
||||
|
||||
onMounted(() => {
|
||||
checkPasskeySupport();
|
||||
});
|
||||
onMounted(() => {});
|
||||
</script>
|
||||
|
||||
<style lang="less">
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
<template>
|
||||
<div v-if="passkeyEnabled && isPlus" class="oauth-icon-button" :class="{ pointer: passkeySupported }" @click="handlePasskeyLogin">
|
||||
<div><fs-icon icon="ion:finger-print-outline" :class="{ 'text-blue-600': passkeySupported, 'text-gray-400': !passkeySupported }" class="text-40" /></div>
|
||||
<div class="ellipsis title" :title="t('authentication.passkeyLogin')" :class="{ 'text-gray-400': !passkeySupported }">{{ t("authentication.passkeyLogin") }}</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, computed, onMounted } from "vue";
|
||||
import { useI18n } from "/@/locales";
|
||||
import { useSettingStore } from "/@/store/settings";
|
||||
import { notification } from "ant-design-vue";
|
||||
import { request } from "/src/api/service";
|
||||
import * as UserApi from "/src/store/user/api.user";
|
||||
import { useUserStore } from "/src/store/user";
|
||||
|
||||
const { t } = useI18n();
|
||||
const settingStore = useSettingStore();
|
||||
const userStore = useUserStore();
|
||||
|
||||
const loading = ref(false);
|
||||
const passkeySupported = ref(false);
|
||||
|
||||
const passkeyEnabled = computed(() => settingStore.sysPublic.passkeyEnabled);
|
||||
const isPlus = computed(() => settingStore.isPlus);
|
||||
|
||||
const checkPasskeySupport = () => {
|
||||
passkeySupported.value = false;
|
||||
if (typeof window !== "undefined" && "credentials" in navigator && "PublicKeyCredential" in window) {
|
||||
passkeySupported.value = true;
|
||||
}
|
||||
};
|
||||
|
||||
const handlePasskeyLogin = async () => {
|
||||
if (!passkeySupported.value) {
|
||||
notification.error({ message: t("authentication.passkeyNotSupported") });
|
||||
return;
|
||||
}
|
||||
|
||||
loading.value = true;
|
||||
try {
|
||||
const optionsResponse: any = await request({
|
||||
url: "/passkey/generateAuthentication",
|
||||
method: "post",
|
||||
});
|
||||
const options = optionsResponse;
|
||||
|
||||
console.log("passkey authentication options:", options, JSON.stringify(options));
|
||||
const credential = await (navigator.credentials as any).get({
|
||||
publicKey: {
|
||||
challenge: Uint8Array.from(atob(options.challenge.replace(/-/g, "+").replace(/_/g, "/")), c => c.charCodeAt(0)),
|
||||
rpId: options.rpId,
|
||||
allowCredentials: options.allowCredentials || [],
|
||||
timeout: options.timeout || 60000,
|
||||
authenticatorSelection: {
|
||||
residentKey: "required",
|
||||
requireResidentKey: true,
|
||||
userVerification: "preferred",
|
||||
},
|
||||
},
|
||||
});
|
||||
|
||||
console.log("passkey authentication credential:", credential, JSON.stringify(credential));
|
||||
if (!credential) {
|
||||
throw new Error("Passkey认证失败");
|
||||
}
|
||||
|
||||
const loginRes: any = await UserApi.loginByPasskey({
|
||||
credential,
|
||||
challenge: options.challenge,
|
||||
});
|
||||
|
||||
await userStore.onLoginSuccess(loginRes);
|
||||
} catch (e: any) {
|
||||
console.error("Passkey登录失败:", e);
|
||||
notification.error({ message: e.message || "Passkey登录失败" });
|
||||
} finally {
|
||||
loading.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
onMounted(() => {
|
||||
checkPasskeySupport();
|
||||
});
|
||||
</script>
|
||||
@@ -3,7 +3,8 @@
|
||||
<div class="oauth-title">
|
||||
<div class="oauth-title-text">{{ computedTitle }}</div>
|
||||
</div>
|
||||
<div class="flex justify-center items-center gap-4">
|
||||
<div class="flex justify-center items-center gap-4 flex-wrap md:flex-nowrap">
|
||||
<passkey-login></passkey-login>
|
||||
<template v-for="item in oauthProviderList" :key="item.type">
|
||||
<div v-if="item.addonId" class="oauth-icon-button pointer" @click="goOauthLogin(item.name)">
|
||||
<div><fs-icon :icon="item.icon" class="text-blue-600 text-40" /></div>
|
||||
@@ -19,6 +20,7 @@ import * as api from "./api";
|
||||
import { useI18n } from "vue-i18n";
|
||||
import { useSettingStore } from "/@/store/settings";
|
||||
import { useRoute } from "vue-router";
|
||||
import PasskeyLogin from "../login/passkey-login.vue";
|
||||
|
||||
const oauthProviderList = ref([]);
|
||||
const props = defineProps<{
|
||||
|
||||
@@ -88,7 +88,7 @@ export default (req: any) => {
|
||||
host: "0.0.0.0",
|
||||
port: 3008,
|
||||
fs: devServerFs,
|
||||
allowedHosts: ["localhost", "127.0.0.1", "yfy.docmirror.cn", "docmirror.top", "*"],
|
||||
allowedHosts: ["localhost", "127.0.0.1", "yfy.docmirror.cn", "docmirror.top", "*", "local.dev"],
|
||||
proxy: {
|
||||
// with options
|
||||
"/api": {
|
||||
@@ -100,7 +100,7 @@ export default (req: any) => {
|
||||
"/certd/api": {
|
||||
//配套后端 https://github.com/fast-crud/fs-server-js
|
||||
target: "http://127.0.0.1:7001/api",
|
||||
rewrite: path => path.replace(/^\/certd\/api/, ""),
|
||||
rewrite: (path: any) => path.replace(/^\/certd\/api/, ""),
|
||||
//忽略证书
|
||||
// agent: new https.Agent({ rejectUnauthorized: false }),
|
||||
},
|
||||
|
||||
@@ -3,6 +3,24 @@
|
||||
All notable changes to this project will be documented in this file.
|
||||
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
||||
|
||||
## [1.39.5](https://github.com/certd/certd/compare/v1.39.4...v1.39.5) (2026-03-18)
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 移除passkey的counter递增校验 ([68b669d](https://github.com/certd/certd/commit/68b669d3ff3e13b931939093320ce7237bb02b1b))
|
||||
* passkey 支持Bitwarden ([29f44c6](https://github.com/certd/certd/commit/29f44c67c808bed9ff1c9d4884d39a1a62d043a7))
|
||||
* passkey登录放到下方其他登录位置 ([1413e1a](https://github.com/certd/certd/commit/1413e1aff4aabcfd471716338c210fbcfd76c8f9))
|
||||
|
||||
## [1.39.4](https://github.com/certd/certd/compare/v1.39.3...v1.39.4) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* 修复阿里云证书订单翻页问题 ([6d43623](https://github.com/certd/certd/commit/6d43623f459a7594599e50a7ed89d67fcc775518))
|
||||
|
||||
### Performance Improvements
|
||||
|
||||
* 优化passkey ([9e12412](https://github.com/certd/certd/commit/9e12412f5fa7800df1d7efaf62cd8fd5d79bb569))
|
||||
|
||||
## [1.39.3](https://github.com/certd/certd/compare/v1.39.2...v1.39.3) (2026-03-17)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
@@ -427,6 +427,7 @@ input:
|
||||
helper: 兼容Windows Server各个版本
|
||||
renewDays:
|
||||
title: 更新天数
|
||||
value: 20
|
||||
component:
|
||||
name: a-input-number
|
||||
vModel: value
|
||||
|
||||
@@ -56,6 +56,18 @@ input:
|
||||
type: aliyun
|
||||
required: true
|
||||
order: 0
|
||||
orderType:
|
||||
title: 订单类型
|
||||
value: CPACK
|
||||
component:
|
||||
name: a-select
|
||||
vModel: value
|
||||
options:
|
||||
- label: 资源虚拟订单(一般选这个)
|
||||
value: CPACK
|
||||
- label: 售卖订单
|
||||
value: BUY
|
||||
order: 0
|
||||
orderId:
|
||||
title: 证书订单ID
|
||||
component:
|
||||
@@ -68,6 +80,7 @@ input:
|
||||
search: false
|
||||
pager: true
|
||||
multi: true
|
||||
pageSize: 50
|
||||
watches:
|
||||
- certDomains
|
||||
- accessId
|
||||
@@ -113,6 +126,7 @@ input:
|
||||
helper: 兼容Windows Server各个版本
|
||||
renewDays:
|
||||
title: 更新天数
|
||||
value: 20
|
||||
component:
|
||||
name: a-input-number
|
||||
vModel: value
|
||||
|
||||
@@ -148,6 +148,7 @@ input:
|
||||
helper: 兼容Windows Server各个版本
|
||||
renewDays:
|
||||
title: 更新天数
|
||||
value: 20
|
||||
component:
|
||||
name: a-input-number
|
||||
vModel: value
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@certd/ui-server",
|
||||
"version": "1.39.3",
|
||||
"version": "1.39.5",
|
||||
"description": "fast-server base midway",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
@@ -50,20 +50,20 @@
|
||||
"@aws-sdk/client-route-53": "^3.964.0",
|
||||
"@aws-sdk/client-s3": "^3.964.0",
|
||||
"@aws-sdk/client-sts": "^3.990.0",
|
||||
"@certd/acme-client": "^1.39.3",
|
||||
"@certd/basic": "^1.39.3",
|
||||
"@certd/commercial-core": "^1.39.3",
|
||||
"@certd/acme-client": "^1.39.5",
|
||||
"@certd/basic": "^1.39.5",
|
||||
"@certd/commercial-core": "^1.39.5",
|
||||
"@certd/cv4pve-api-javascript": "^8.4.2",
|
||||
"@certd/jdcloud": "^1.39.3",
|
||||
"@certd/lib-huawei": "^1.39.3",
|
||||
"@certd/lib-k8s": "^1.39.3",
|
||||
"@certd/lib-server": "^1.39.3",
|
||||
"@certd/midway-flyway-js": "^1.39.3",
|
||||
"@certd/pipeline": "^1.39.3",
|
||||
"@certd/plugin-cert": "^1.39.3",
|
||||
"@certd/plugin-lib": "^1.39.3",
|
||||
"@certd/plugin-plus": "^1.39.3",
|
||||
"@certd/plus-core": "^1.39.3",
|
||||
"@certd/jdcloud": "^1.39.5",
|
||||
"@certd/lib-huawei": "^1.39.5",
|
||||
"@certd/lib-k8s": "^1.39.5",
|
||||
"@certd/lib-server": "^1.39.5",
|
||||
"@certd/midway-flyway-js": "^1.39.5",
|
||||
"@certd/pipeline": "^1.39.5",
|
||||
"@certd/plugin-cert": "^1.39.5",
|
||||
"@certd/plugin-lib": "^1.39.5",
|
||||
"@certd/plugin-plus": "^1.39.5",
|
||||
"@certd/plus-core": "^1.39.5",
|
||||
"@google-cloud/publicca": "^1.3.0",
|
||||
"@huaweicloud/huaweicloud-sdk-cdn": "^3.1.185",
|
||||
"@huaweicloud/huaweicloud-sdk-core": "^3.1.185",
|
||||
|
||||
@@ -95,9 +95,7 @@ export class LoginController extends BaseController {
|
||||
this.ctx
|
||||
);
|
||||
|
||||
return this.ok({
|
||||
...options,
|
||||
});
|
||||
return this.ok(options);
|
||||
}
|
||||
|
||||
@Post('/loginByPasskey', { description: Constants.per.guest })
|
||||
|
||||
@@ -37,7 +37,6 @@ export class MinePasskeyController extends BaseController {
|
||||
|
||||
return this.ok({
|
||||
...options,
|
||||
userId
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import { SiteInfoService } from '../../../modules/monitor/index.js';
|
||||
import { HistoryService } from '../../../modules/pipeline/service/history-service.js';
|
||||
import { PipelineService } from '../../../modules/pipeline/service/pipeline-service.js';
|
||||
import { AuthService } from '../../../modules/sys/authority/service/auth-service.js';
|
||||
import { PipelineEntity } from '../../../modules/pipeline/entity/pipeline.js';
|
||||
|
||||
|
||||
const pipelineExample = `
|
||||
@@ -183,21 +184,17 @@ export class PipelineController extends CrudController<PipelineService> {
|
||||
}
|
||||
|
||||
|
||||
// @Post('/add', { description: Constants.per.authOnly })
|
||||
// async add(@Body(ALL) bean: PipelineEntity) {
|
||||
// const { projectId, userId } = await this.getProjectUserIdWrite()
|
||||
// bean.userId = userId
|
||||
// bean.projectId = projectId
|
||||
// return super.add(bean);
|
||||
// }
|
||||
@Post('/add', { description: Constants.per.authOnly })
|
||||
async add(@Body(ALL) bean: PipelineEntity) {
|
||||
return await this.save(bean as any);
|
||||
}
|
||||
|
||||
// @Post('/update', { description: Constants.per.authOnly })
|
||||
// async update(@Body(ALL) bean) {
|
||||
// await this.checkOwner(this.getService(), bean.id,"write",true);
|
||||
// delete bean.userId;
|
||||
// delete bean.projectId;
|
||||
// return super.update(bean);
|
||||
// }
|
||||
@Post('/update', { description: Constants.per.authOnly })
|
||||
async update(@Body(ALL) bean:PipelineEntity) {
|
||||
await this.checkOwner(this.getService(), bean.id,"write",true);
|
||||
await this.service.update(bean as any);
|
||||
return this.ok({});
|
||||
}
|
||||
|
||||
@Post('/save', { description: Constants.per.authOnly, summary: '新增/更新流水线' })
|
||||
async save(@Body() bean: PipelineSaveDTO) {
|
||||
|
||||
@@ -51,8 +51,6 @@ export class AutoAInitSite {
|
||||
//加载一次密钥
|
||||
await this.sysSettingsService.getSecret();
|
||||
|
||||
//加载设置
|
||||
await this.sysSettingsService.reloadSettings();
|
||||
|
||||
// 授权许可
|
||||
try {
|
||||
@@ -60,6 +58,9 @@ export class AutoAInitSite {
|
||||
} catch (e) {
|
||||
logger.error('授权许可验证失败', e);
|
||||
}
|
||||
|
||||
//加载设置
|
||||
await this.sysSettingsService.reloadSettings();
|
||||
|
||||
//加载站点隐藏配置
|
||||
await this.safeService.reloadHiddenStatus(true)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { cache } from "@certd/basic";
|
||||
import { cache, logger } from "@certd/basic";
|
||||
import { AuthException, BaseService, SysInstallInfo, SysSettingsService, SysSiteInfo } from "@certd/lib-server";
|
||||
import { isComm } from "@certd/plus-core";
|
||||
import { Inject, Provide, Scope, ScopeEnum } from "@midwayjs/core";
|
||||
@@ -54,14 +54,21 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
|
||||
const options = await generateRegistrationOptions({
|
||||
rpName: rpName,
|
||||
rpID: rpId,
|
||||
userID: new Uint8Array([userId]),
|
||||
userID: new TextEncoder().encode(userId + ""),
|
||||
userName: username,
|
||||
userDisplayName: user.nickName || username,
|
||||
timeout: 60000,
|
||||
attestationType: "none",
|
||||
excludeCredentials: [],
|
||||
preferredAuthenticatorType: 'localDevice',
|
||||
authenticatorSelection: {
|
||||
authenticatorAttachment: "cross-platform",
|
||||
userVerification: "preferred",
|
||||
residentKey: "preferred",
|
||||
requireResidentKey: false
|
||||
},
|
||||
});
|
||||
|
||||
logger.info('[passkey] 注册选项:', JSON.stringify(options));
|
||||
cache.set(`passkey:registration:${options.challenge}`, userId, {
|
||||
ttl: 5 * 60 * 1000,
|
||||
});
|
||||
@@ -86,16 +93,25 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
|
||||
|
||||
const { rpId, origin } = await this.getRpInfo();
|
||||
|
||||
const verification = await verifyRegistrationResponse({
|
||||
let verification: any = null;
|
||||
const verifyReq = {
|
||||
response,
|
||||
expectedChallenge: challenge,
|
||||
expectedOrigin: origin,
|
||||
expectedRPID: rpId,
|
||||
});
|
||||
|
||||
requireUserVerification: false,
|
||||
};
|
||||
try {
|
||||
verification = await verifyRegistrationResponse(verifyReq);
|
||||
} catch (error) {
|
||||
// 后端验证时
|
||||
logger.error('[passkey] 注册验证失败:', JSON.stringify(verifyReq));
|
||||
throw new AuthException(`注册验证失败:${error.message || error}`);
|
||||
}
|
||||
if (!verification.verified) {
|
||||
throw new AuthException("注册验证失败");
|
||||
}
|
||||
|
||||
|
||||
cache.delete(`passkey:registration:${challenge}`);
|
||||
|
||||
@@ -113,6 +129,7 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
|
||||
rpID: rpId,
|
||||
timeout: 60000,
|
||||
allowCredentials: [],
|
||||
userVerification: 'preferred' //'required' | 'preferred' | 'discouraged';
|
||||
});
|
||||
|
||||
// cache.set(`passkey:authentication:${options.challenge}`, userId, {
|
||||
@@ -148,6 +165,7 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
|
||||
expectedChallenge: challenge,
|
||||
expectedOrigin: origin,
|
||||
expectedRPID: rpId,
|
||||
requireUserVerification: false,
|
||||
credential: {
|
||||
id: passkey.passkeyId,
|
||||
publicKey: new Uint8Array(Buffer.from(passkey.publicKey, 'base64')),
|
||||
@@ -212,9 +230,10 @@ export class PasskeyService extends BaseService<PasskeyEntity> {
|
||||
throw new AuthException("Passkey不存在");
|
||||
}
|
||||
|
||||
if (verification.counter <= passkey.counter) {
|
||||
throw new AuthException("认证失败:计数器异常");
|
||||
}
|
||||
// 可同步密钥 各个客户端的计数器不是单调递增的,此规范基本上都不遵守了
|
||||
// if (verification.counter <= passkey.counter && passkey.counter > 0) {
|
||||
// throw new AuthException("认证失败:计数器异常");
|
||||
// }
|
||||
|
||||
passkey.counter = verification.counter;
|
||||
passkey.updateTime = new Date();
|
||||
|
||||
@@ -259,6 +259,9 @@ export class PipelineService extends BaseService<PipelineEntity> {
|
||||
bean.order = old.order;
|
||||
bean.userId = old.userId;
|
||||
bean.projectId = old.projectId;
|
||||
if (bean.content == null) {
|
||||
bean.content = old.content;
|
||||
}
|
||||
}
|
||||
if (!old || !old.webhookKey) {
|
||||
bean.webhookKey = await this.genWebhookKey();
|
||||
|
||||
@@ -20,6 +20,7 @@ export abstract class CertApplyBasePlugin extends CertApplyBaseConvertPlugin {
|
||||
|
||||
@TaskInput({
|
||||
title: "更新天数",
|
||||
value:20,
|
||||
component: {
|
||||
name: "a-input-number",
|
||||
vModel: "value",
|
||||
|
||||
@@ -28,11 +28,36 @@ export class CertApplyGetFormAliyunPlugin extends CertApplyBasePlugin {
|
||||
})
|
||||
accessId!: string;
|
||||
|
||||
|
||||
@TaskInput(
|
||||
{
|
||||
title:"订单类型",
|
||||
value:"CPACK",
|
||||
component:{
|
||||
name:"a-select",
|
||||
vModel:"value",
|
||||
options:[
|
||||
{
|
||||
label:"资源虚拟订单(一般选这个)",
|
||||
value:"CPACK",
|
||||
},
|
||||
{
|
||||
label:"售卖订单",
|
||||
value:"BUY",
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
)
|
||||
orderType!: string;
|
||||
|
||||
|
||||
@TaskInput(
|
||||
createRemoteSelectInputDefine({
|
||||
title: "证书订单ID",
|
||||
helper: "订阅模式的证书订单Id",
|
||||
typeName: "CertApplyGetFormAliyun",
|
||||
pageSize: 50,
|
||||
component: {
|
||||
name: "RemoteSelect",
|
||||
vModel: "value",
|
||||
@@ -140,6 +165,7 @@ export class CertApplyGetFormAliyunPlugin extends CertApplyBasePlugin {
|
||||
pathname: `/`,
|
||||
data: {
|
||||
query: {
|
||||
OrderType: this.orderType,
|
||||
Status: "ISSUED",
|
||||
CurrentPage: pager.pageNo,
|
||||
ShowSize : pager.pageSize,
|
||||
@@ -151,14 +177,27 @@ export class CertApplyGetFormAliyunPlugin extends CertApplyBasePlugin {
|
||||
return []
|
||||
}
|
||||
|
||||
return list.map((item: any) => {
|
||||
const label = `${item.Domain}<${item.OrderId}>`;
|
||||
const total = res.TotalCount || 0;
|
||||
|
||||
const records = list.map((item: any) => {
|
||||
let value = item.OrderId;
|
||||
let domain = item.Domain;
|
||||
let label = `${item.Domain}<${item.OrderId}>`;
|
||||
if (!item.OrderId) {
|
||||
label = `${item.CommonName}<${item.Name}>`;
|
||||
value = item.Name;
|
||||
domain = item.CommonName;
|
||||
}
|
||||
return {
|
||||
label: label,
|
||||
value: item.OrderId,
|
||||
Domain: item.Domain,
|
||||
value: value,
|
||||
Domain: domain,
|
||||
};
|
||||
});
|
||||
return {
|
||||
list:records,
|
||||
total,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
00:57
|
||||
01:13
|
||||
|
||||
@@ -1 +1 @@
|
||||
01:15
|
||||
01:30
|
||||
|
||||
Reference in New Issue
Block a user