From e3738f6422270d75ec414c15a343248cc4cad6e1 Mon Sep 17 00:00:00 2001 From: ahe Date: Wed, 23 Jul 2025 15:45:40 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E9=98=BF=E9=87=8C=E4=BA=91=E9=83=A8?= =?UTF-8?q?=E5=88=86=E6=8F=92=E4=BB=B6=E4=BC=98=E5=8C=96=20=20@nicheng-he?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1.新增RemoteAutoComplete插件 2.阿里云OSS部署插件支持自动获取BucketList 3.阿里云ESA支持选择上传到阿里云CAS产物 4.解决阿里云OSS默认接入点配置错误问题 --- .../plugins/common/remote-auto-complete.vue | 162 ++++++++++++++++++ .../src/components/plugins/index.ts | 2 + .../plugin/deploy-to-esa/index.ts | 2 +- .../plugin/deploy-to-oss/index.ts | 31 +++- 4 files changed, 195 insertions(+), 2 deletions(-) create mode 100644 packages/ui/certd-client/src/components/plugins/common/remote-auto-complete.vue diff --git a/packages/ui/certd-client/src/components/plugins/common/remote-auto-complete.vue b/packages/ui/certd-client/src/components/plugins/common/remote-auto-complete.vue new file mode 100644 index 00000000..9ca1e915 --- /dev/null +++ b/packages/ui/certd-client/src/components/plugins/common/remote-auto-complete.vue @@ -0,0 +1,162 @@ + + + + diff --git a/packages/ui/certd-client/src/components/plugins/index.ts b/packages/ui/certd-client/src/components/plugins/index.ts index 4b6152c7..61fadc99 100644 --- a/packages/ui/certd-client/src/components/plugins/index.ts +++ b/packages/ui/certd-client/src/components/plugins/index.ts @@ -1,4 +1,5 @@ import SynologyIdDeviceGetter from "./synology/device-id-getter.vue"; +import RemoteAutoComplete from "./common/remote-auto-complete.vue"; import RemoteSelect from "./common/remote-select.vue"; import RemoteInput from "./common/remote-input.vue"; import CertDomainsGetter from "./common/cert-domains-getter.vue"; @@ -21,6 +22,7 @@ export default { app.component("ApiTest", ApiTest); app.component("SynologyDeviceIdGetter", SynologyIdDeviceGetter); + app.component("RemoteAutoComplete", RemoteAutoComplete); app.component("RemoteSelect", RemoteSelect); app.component("RemoteInput", RemoteInput); app.component("CertDomainsGetter", CertDomainsGetter); diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-esa/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-esa/index.ts index 6b26a998..ff994a0c 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-esa/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-esa/index.ts @@ -26,7 +26,7 @@ export class AliyunDeployCertToESA extends AbstractTaskPlugin { helper: "请选择证书申请任务输出的域名证书", component: { name: "output-selector", - from: [...CertApplyPluginNames] + from: [...CertApplyPluginNames, 'uploadCertToAliyun'] }, required: true }) diff --git a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-oss/index.ts b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-oss/index.ts index dfa15bc4..5d81a591 100644 --- a/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-oss/index.ts +++ b/packages/ui/certd-server/src/plugins/plugin-aliyun/plugin/deploy-to-oss/index.ts @@ -59,6 +59,15 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin { @TaskInput({ title: 'Bucket', helper: '存储桶名称', + component: { + name: 'remote-auto-complete', + vModel: 'value', + type: 'plugin', + action: 'onGetBucketList', + search: false, + pager: false, + watches: ['accessId', 'region'] + }, required: true, }) bucket!: string; @@ -91,7 +100,7 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin { @TaskInput({ title: '证书服务接入点', helper: '不会选就按默认', - value: 'cas.aliyuncs.com', + value: 'cn-hangzhou', component: { name: 'a-select', options: [ @@ -101,6 +110,7 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin { ], }, required: true, + order: -99, }) casRegion!: string; @@ -112,6 +122,7 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin { type: 'aliyun', }, required: true, + order: -98, }) accessId!: string; @@ -170,6 +181,24 @@ export class DeployCertToAliyunOSS extends AbstractTaskPlugin { }); } + async onGetBucketList(data: any) { + console.log('data', data) + + const access = (await this.getAccess(this.accessId)) as AliyunAccess; + const client = await this.getClient(access); + + let res; + const buckets = [] + do{ + const requestData = {'marker': res?.nextMarker || null, 'max-keys': 1000}; + res = await client.listBuckets(requestData) + buckets.push(...(res?.buckets || [])) + } while (!!res?.nextMarker) + return buckets + .filter(bucket => bucket?.region === this.region) + .map(bucket => ({label: `${bucket.name}<${bucket.region}>`, value: bucket.name})); + } + async doRequest(client: any, params: any) { params = client._bucketRequestParams('POST', this.bucket, { cname: '',