From e1818849db030337edc18834bb2d86b472fb2e2b Mon Sep 17 00:00:00 2001 From: unknown-o Date: Tue, 9 Dec 2025 08:55:03 +0000 Subject: [PATCH 1/4] =?UTF-8?q?mod:=20=E5=BC=80=E5=8F=91=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E4=B8=8B=E4=BD=BF=E7=94=A8=E5=B7=A5=E4=BD=9C=E7=9B=AE=E5=BD=95?= =?UTF-8?q?=E4=BD=9C=E4=B8=BA=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/migrations/init.go | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/backend/migrations/init.go b/backend/migrations/init.go index d218253..03dbffd 100644 --- a/backend/migrations/init.go +++ b/backend/migrations/init.go @@ -5,14 +5,21 @@ import ( "ALLinSSL/backend/public/sqlite_migrate" "database/sql" "fmt" - _ "modernc.org/sqlite" "os" "path/filepath" + "strings" + + _ "modernc.org/sqlite" ) func init() { // 指定运行目录为当前目录 exePath, err := os.Executable() + + // 如果为开发环境则使用工作目录 + if strings.Contains(exePath, "go-build") { + exePath, _ = os.Getwd() + } if err != nil { fmt.Fprintf(os.Stderr, "获取可执行文件路径失败: %v\n", err) os.Exit(1) From 80853d829281eb61d26ce8deb431c61c47e3fdaf Mon Sep 17 00:00:00 2001 From: unknown-o Date: Tue, 9 Dec 2025 11:32:16 +0000 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E9=9B=A8?= =?UTF-8?q?=E4=BA=91DNS=E6=8F=90=E4=BE=9B=E5=95=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/cert/apply/apply.go | 19 +++++++++++++------ backend/migrations/init.go | 1 + frontend/apps/allin-ssl/src/config/data.tsx | 6 ++++++ .../src/views/authApiManage/useController.tsx | 13 +++++++++++-- 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/backend/internal/cert/apply/apply.go b/backend/internal/cert/apply/apply.go index 30bbfad..24c97a0 100644 --- a/backend/internal/cert/apply/apply.go +++ b/backend/internal/cert/apply/apply.go @@ -10,6 +10,13 @@ import ( "crypto/tls" "encoding/json" "fmt" + "net/http" + "net/url" + "os" + "strconv" + "strings" + "time" + azcorecloud "github.com/Azure/azure-sdk-for-go/sdk/azcore/cloud" "github.com/go-acme/lego/v4/certcrypto" "github.com/go-acme/lego/v4/certificate" @@ -31,18 +38,13 @@ import ( "github.com/go-acme/lego/v4/providers/dns/namedotcom" "github.com/go-acme/lego/v4/providers/dns/namesilo" "github.com/go-acme/lego/v4/providers/dns/ns1" + "github.com/go-acme/lego/v4/providers/dns/rainyun" "github.com/go-acme/lego/v4/providers/dns/route53" "github.com/go-acme/lego/v4/providers/dns/spaceship" "github.com/go-acme/lego/v4/providers/dns/tencentcloud" "github.com/go-acme/lego/v4/providers/dns/volcengine" "github.com/go-acme/lego/v4/providers/dns/westcn" "github.com/go-acme/lego/v4/registration" - "net/http" - "net/url" - "os" - "strconv" - "strings" - "time" ) var AlgorithmMap = map[string]certcrypto.KeyType{ @@ -217,6 +219,11 @@ func GetDNSProvider(providerName string, creds map[string]string, httpClient *ht config.APISecret = creds["api_secret"] config.PropagationTimeout = maxWait return spaceship.NewDNSProviderConfig(config) + case "rainyun": + config := rainyun.NewDefaultConfig() + config.APIKey = creds["api_key"] + config.PropagationTimeout = maxWait + return rainyun.NewDNSProviderConfig(config) case "btdomain": config := bt.NewDefaultConfig() config.AccountID = creds["account_id"] diff --git a/backend/migrations/init.go b/backend/migrations/init.go index 03dbffd..6d1da8b 100644 --- a/backend/migrations/init.go +++ b/backend/migrations/init.go @@ -155,6 +155,7 @@ func init() { INSERT INTO access_type (name, type) VALUES ('1panel', 'host');`) InsertIfNotExists(db, "access_type", map[string]any{"name": "cloudflare", "type": "host"}, []string{"name", "type"}, []any{"cloudflare", "host"}) + InsertIfNotExists(db, "access_type", map[string]any{"name": "rainyun", "type": "dns"}, []string{"name", "type"}, []any{"rainyun", "dns"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "cloudflare", "type": "dns"}, []string{"name", "type"}, []any{"cloudflare", "dns"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "huaweicloud", "type": "host"}, []string{"name", "type"}, []any{"huaweicloud", "host"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "huaweicloud", "type": "dns"}, []string{"name", "type"}, []any{"huaweicloud", "dns"}) diff --git a/frontend/apps/allin-ssl/src/config/data.tsx b/frontend/apps/allin-ssl/src/config/data.tsx index c85930a..a1f2834 100644 --- a/frontend/apps/allin-ssl/src/config/data.tsx +++ b/frontend/apps/allin-ssl/src/config/data.tsx @@ -278,6 +278,12 @@ export const ApiProjectConfig: Record = { hostRelated: { default: { name: "BTDomain" } }, sort: 33, }, + rainyun: { + name: "雨云", + icon: "rainyun", + type: ["dns"], + sort: 33, + }, plugin: { name: "插件", icon: "plugin", diff --git a/frontend/apps/allin-ssl/src/views/authApiManage/useController.tsx b/frontend/apps/allin-ssl/src/views/authApiManage/useController.tsx index 8ef4214..13e10f9 100644 --- a/frontend/apps/allin-ssl/src/views/authApiManage/useController.tsx +++ b/frontend/apps/allin-ssl/src/views/authApiManage/useController.tsx @@ -62,8 +62,8 @@ import { testAccess, getPlugins } from "@/api/access"; // import { useLocalStorage } from '@vueuse/core' import ApiManageForm from "./components/ApiManageModel"; -import SvgIcon from "@components/SvgIcon"; -import TypeIcon from "@components/TypeIcon"; +import SvgIcon from "@/components/svgIcon"; +import TypeIcon from "@/components/typeIcon"; import { noSideSpace } from "@lib/utils"; import { JSX } from "vue/jsx-runtime"; @@ -1269,6 +1269,15 @@ export const useApiFormController = ( }) ); break; + case "rainyun": + items.push( + useFormInput("API Key", "config.api_key", { + type: "password", + showPasswordOn: "click", + allowInput: noSideSpace, + }), + ); + break; case "plugin": items.push( useFormCustom(() => { From f86f8bb61845f40752f38bea80d834e1d79d325b Mon Sep 17 00:00:00 2001 From: unknown-o Date: Tue, 9 Dec 2025 13:14:56 +0000 Subject: [PATCH 3/4] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E9=83=A8?= =?UTF-8?q?=E7=BD=B2=E5=88=B0=E9=9B=A8=E4=BA=91SSL=E4=B8=AD=E5=BF=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/api/access.go | 5 +- backend/internal/cert/deploy/deploy.go | 3 + backend/internal/cert/deploy/rainyun.go | 130 ++++++++++++++++++++ backend/migrations/init.go | 1 + frontend/apps/allin-ssl/src/config/data.tsx | 41 +++--- go.mod | 3 + go.sum | 6 + 7 files changed, 169 insertions(+), 20 deletions(-) create mode 100644 backend/internal/cert/deploy/rainyun.go diff --git a/backend/app/api/access.go b/backend/app/api/access.go index 78ffe0c..9cd08dd 100644 --- a/backend/app/api/access.go +++ b/backend/app/api/access.go @@ -6,8 +6,9 @@ import ( "ALLinSSL/backend/internal/cert/deploy" "ALLinSSL/backend/internal/cert/deploy/plugin" "ALLinSSL/backend/public" - "github.com/gin-gonic/gin" "strings" + + "github.com/gin-gonic/gin" ) func GetAccessList(c *gin.Context) { @@ -323,6 +324,8 @@ func TestAccess(c *gin.Context) { result = deploy.TencentCloudAPITest(form.ID) case "aliyun": result = deploy.AliyunCdnAPITest(form.ID) + case "rainyun": + result = deploy.RainyunApiTest(form.ID) case "qiniu": result = deploy.QiniuAPITest(form.ID) case "baidu": diff --git a/backend/internal/cert/deploy/deploy.go b/backend/internal/cert/deploy/deploy.go index 49ad7e1..e1bbaeb 100644 --- a/backend/internal/cert/deploy/deploy.go +++ b/backend/internal/cert/deploy/deploy.go @@ -110,6 +110,9 @@ func Deploy(cfg map[string]any, logger *public.Logger) error { case "webhook": logger.Debug("通过Webhook推送证书...") return webhook.Deploy(cfg) + case "rainyun-sslcenter": + logger.Debug("通过Webhook推送证书...") + return DeployRainyunSSLCenter(cfg) default: return fmt.Errorf("不支持的部署: %s", providerName) } diff --git a/backend/internal/cert/deploy/rainyun.go b/backend/internal/cert/deploy/rainyun.go new file mode 100644 index 0000000..0a665b3 --- /dev/null +++ b/backend/internal/cert/deploy/rainyun.go @@ -0,0 +1,130 @@ +package deploy + +import ( + "ALLinSSL/backend/internal/access" + "bytes" + "context" + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "strconv" + "time" + + "github.com/tidwall/gjson" +) + +var rainyunApi = "https://api.v2.rainyun.com" +var httpClient = &http.Client{} + +func RainyunApiTest(providerID string) error { + providerData, err := access.GetAccess(providerID) + if err != nil { + return err + } + providerConfigStr, ok := providerData["config"].(string) + if !ok { + return fmt.Errorf("api配置错误") + } + // 解析 JSON 配置 + var providerConfig map[string]string + err = json.Unmarshal([]byte(providerConfigStr), &providerConfig) + if err != nil { + return err + } + + resp, err := requestRainyunApi("/user/", providerConfig["api_key"], http.MethodGet, nil) + if err != nil { + return err + } + + if gjson.Get(resp, "code").Int() != 200 { + return errors.New(gjson.Get(resp, "message").String()) + } + return nil +} + +func DeployRainyunSSLCenter(cfg map[string]any) error { + // 获取证书 + cert, ok := cfg["certificate"].(map[string]any) + if !ok { + return fmt.Errorf("证书不存在") + } + + // 获取ApiKey + var providerID string + switch v := cfg["provider_id"].(type) { + case float64: + providerID = strconv.Itoa(int(v)) + case string: + providerID = v + default: + return fmt.Errorf("参数错误:provider_id") + } + providerData, err := access.GetAccess(providerID) + if err != nil { + return err + } + providerConfigStr, _ := providerData["config"].(string) + var providerConfig map[string]string + err = json.Unmarshal([]byte(providerConfigStr), &providerConfig) + if err != nil { + return err + } + apiKey := providerConfig["api_key"] + + // 校验参数 + certId, ok := cfg["cert_id"].(string) + if !ok { + return fmt.Errorf("参数错误:cert_id") + } + _, ok = cert["key"].(string) + if !ok { + return fmt.Errorf("证书错误:key") + } + _, ok = cert["cert"].(string) + if !ok { + return fmt.Errorf("证书错误:cert") + } + + // 更新证书中心 + reqPath := fmt.Sprintf("/product/sslcenter/%s", certId) + resp, err := requestRainyunApi(reqPath, apiKey, http.MethodPost, cert) + if err != nil { + return err + } + if gjson.Get(resp, "code").Int() != 200 { + return errors.New(gjson.Get(resp, "message").String()) + } + + return nil +} + +func requestRainyunApi(path, apikey, method string, data interface{}) (string, error) { + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + + reqBody, err := json.Marshal(data) + if err != nil || data == nil { + reqBody = nil + } + req, err := http.NewRequestWithContext(ctx, method, rainyunApi+path, bytes.NewBuffer(reqBody)) + if err != nil { + return "", fmt.Errorf("build request: %w", err) + } + req.Header.Set("X-Api-Key", apikey) + + resp, err := httpClient.Do(req) + if err != nil { + return "", fmt.Errorf("http get error: %w", err) + } + defer resp.Body.Close() + + body, err := io.ReadAll(io.LimitReader(resp.Body, 50*1024*1024)) + if err != nil { + return "", fmt.Errorf("read body: %w", err) + } + + return string(body), nil +} diff --git a/backend/migrations/init.go b/backend/migrations/init.go index 6d1da8b..823b42b 100644 --- a/backend/migrations/init.go +++ b/backend/migrations/init.go @@ -156,6 +156,7 @@ func init() { InsertIfNotExists(db, "access_type", map[string]any{"name": "cloudflare", "type": "host"}, []string{"name", "type"}, []any{"cloudflare", "host"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "rainyun", "type": "dns"}, []string{"name", "type"}, []any{"rainyun", "dns"}) + InsertIfNotExists(db, "access_type", map[string]any{"name": "rainyun", "type": "host"}, []string{"name", "type"}, []any{"rainyun", "host"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "cloudflare", "type": "dns"}, []string{"name", "type"}, []any{"cloudflare", "dns"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "huaweicloud", "type": "host"}, []string{"name", "type"}, []any{"huaweicloud", "host"}) InsertIfNotExists(db, "access_type", map[string]any{"name": "huaweicloud", "type": "dns"}, []string{"name", "type"}, []any{"huaweicloud", "dns"}) diff --git a/frontend/apps/allin-ssl/src/config/data.tsx b/frontend/apps/allin-ssl/src/config/data.tsx index a1f2834..f7bb44b 100644 --- a/frontend/apps/allin-ssl/src/config/data.tsx +++ b/frontend/apps/allin-ssl/src/config/data.tsx @@ -2,37 +2,37 @@ import { $t } from '@locales/index' // 消息推送类型 export interface MessagePushType { - name: string - type: string + name: string + type: string } // 定义ApiProject接口,包含可选的notApi属性 export interface ApiProjectType { - name: string - icon: string - type?: string[] - notApi?: boolean - hostRelated?: Record - sort?: number + name: string + icon: string + type?: string[] + notApi?: boolean + hostRelated?: Record + sort?: number } // $t('t_0_1747886301644') export const MessagePushConfig = { - mail: { name: $t('t_68_1745289354676'), type: 'mail' }, - workwx: { name: $t('t_33_1746773350932'), type: 'workwx' }, - dingtalk: { name: $t('t_32_1746773348993'), type: 'dingtalk' }, - feishu: { name: $t('t_34_1746773350153'), type: 'feishu' }, - webhook: { name: 'WebHook', type: 'webhook' }, + mail: { name: $t('t_68_1745289354676'), type: 'mail' }, + workwx: { name: $t('t_33_1746773350932'), type: 'workwx' }, + dingtalk: { name: $t('t_32_1746773348993'), type: 'dingtalk' }, + feishu: { name: $t('t_34_1746773350153'), type: 'feishu' }, + webhook: { name: 'WebHook', type: 'webhook' }, } // CA证书授权 export const CACertificateAuthorization = { - zerossl: { name: 'ZeroSSL', type: 'zerossl' }, - google: { name: 'Google', type: 'google' }, - sslcom: { name: 'SSL.COM', type: 'sslcom' }, - buypass: { name: 'Buypass', type: 'buypass' }, - letsencrypt: { name: "Let's Encrypt", type: 'letsencrypt' }, - custom: { name: '自定义', type: 'custom' }, + zerossl: { name: 'ZeroSSL', type: 'zerossl' }, + google: { name: 'Google', type: 'google' }, + sslcom: { name: 'SSL.COM', type: 'sslcom' }, + buypass: { name: 'Buypass', type: 'buypass' }, + letsencrypt: { name: "Let's Encrypt", type: 'letsencrypt' }, + custom: { name: '自定义', type: 'custom' }, } // 授权API管理 @@ -282,6 +282,9 @@ export const ApiProjectConfig: Record = { name: "雨云", icon: "rainyun", type: ["dns"], + hostRelated: { + sslcenter: { name: "证书中心" } + }, sort: 33, }, plugin: { diff --git a/go.mod b/go.mod index dfc7e33..272585c 100644 --- a/go.mod +++ b/go.mod @@ -119,6 +119,9 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/quasoft/memstore v0.0.0-20191010062613-2bce066d2b0b // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/tidwall/gjson v1.18.0 // indirect + github.com/tidwall/match v1.1.1 // indirect + github.com/tidwall/pretty v1.2.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect github.com/ugorji/go/codec v1.2.12 // indirect github.com/volcengine/volc-sdk-golang v1.0.216 // indirect diff --git a/go.sum b/go.sum index 8ac1075..fa19858 100644 --- a/go.sum +++ b/go.sum @@ -711,6 +711,12 @@ github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1210 h1:waS github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.1210/go.mod h1:r5r4xbfxSaeR04b166HGsBa/R4U3SueirEUpXGuw+Q0= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.1124 h1:LQKAlxFb0sYiE8ojK5h9+seuFzogoJtYnXmiRF+4F4Q= github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/ssl v1.0.1124/go.mod h1:tYbK0FbHVG+78od7eZpzczE8qk0JWKO/osTQWuiJ3Fo= +github.com/tidwall/gjson v1.18.0 h1:FIDeeyB800efLX89e5a8Y0BNH+LOngJyGrIWxG2FKQY= +github.com/tidwall/gjson v1.18.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tjfoc/gmsm v1.3.2/go.mod h1:HaUcFuY0auTiaHB9MHFGCPx5IaLhTUd2atbCFBQXn9w= github.com/tjfoc/gmsm v1.4.1 h1:aMe1GlZb+0bLjn+cKTPEvvn9oUEBlJitaZiiBwsbgho= github.com/tjfoc/gmsm v1.4.1/go.mod h1:j4INPkHWMrhJb38G+J6W4Tw0AbuN8Thu3PbdVYhVcTE= From 865423566552e9884eb2ad5d55dbc8a503317e1a Mon Sep 17 00:00:00 2001 From: unknown-o Date: Tue, 9 Dec 2025 13:27:09 +0000 Subject: [PATCH 4/4] =?UTF-8?q?fix:=20=E4=BF=AE=E6=AD=A3=E6=97=A0=E6=B3=95?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E5=88=B0=E9=9B=A8=E4=BA=91=E8=AF=81=E4=B9=A6?= =?UTF-8?q?=E4=B8=AD=E5=BF=83=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/cert/deploy/deploy.go | 2 +- backend/internal/cert/deploy/rainyun.go | 2 +- .../children/workflowView/lib/NodeFormConfig.tsx | 4 ++++ .../children/workflowView/node/deploy/model.tsx | 13 ++++++++----- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/backend/internal/cert/deploy/deploy.go b/backend/internal/cert/deploy/deploy.go index e1bbaeb..56f5b98 100644 --- a/backend/internal/cert/deploy/deploy.go +++ b/backend/internal/cert/deploy/deploy.go @@ -111,7 +111,7 @@ func Deploy(cfg map[string]any, logger *public.Logger) error { logger.Debug("通过Webhook推送证书...") return webhook.Deploy(cfg) case "rainyun-sslcenter": - logger.Debug("通过Webhook推送证书...") + logger.Debug("部署到雨云证书中...") return DeployRainyunSSLCenter(cfg) default: return fmt.Errorf("不支持的部署: %s", providerName) diff --git a/backend/internal/cert/deploy/rainyun.go b/backend/internal/cert/deploy/rainyun.go index 0a665b3..f336dd5 100644 --- a/backend/internal/cert/deploy/rainyun.go +++ b/backend/internal/cert/deploy/rainyun.go @@ -90,7 +90,7 @@ func DeployRainyunSSLCenter(cfg map[string]any) error { // 更新证书中心 reqPath := fmt.Sprintf("/product/sslcenter/%s", certId) - resp, err := requestRainyunApi(reqPath, apiKey, http.MethodPost, cert) + resp, err := requestRainyunApi(reqPath, apiKey, http.MethodPut, cert) if err != nil { return err } diff --git a/frontend/apps/allin-ssl/src/views/autoDeploy/children/workflowView/lib/NodeFormConfig.tsx b/frontend/apps/allin-ssl/src/views/autoDeploy/children/workflowView/lib/NodeFormConfig.tsx index e29b217..78d9553 100644 --- a/frontend/apps/allin-ssl/src/views/autoDeploy/children/workflowView/lib/NodeFormConfig.tsx +++ b/frontend/apps/allin-ssl/src/views/autoDeploy/children/workflowView/lib/NodeFormConfig.tsx @@ -143,6 +143,10 @@ export function createNodeFormConfig() { return [this.input($t('t_0_1747296173751'), 'siteName', { placeholder: $t('t_0_1748589752275') })] }, + rainyunSSLCenterDeploy(){ + return [this.input("证书ID", 'cert_id', { placeholder:"雨云证书中心中显示的ID"})] + }, + /** * 创建1Panel站点相关字段 * @param valueRef 值引用 diff --git a/frontend/apps/allin-ssl/src/views/autoDeploy/children/workflowView/node/deploy/model.tsx b/frontend/apps/allin-ssl/src/views/autoDeploy/children/workflowView/node/deploy/model.tsx index fff8b7a..6378692 100644 --- a/frontend/apps/allin-ssl/src/views/autoDeploy/children/workflowView/node/deploy/model.tsx +++ b/frontend/apps/allin-ssl/src/views/autoDeploy/children/workflowView/node/deploy/model.tsx @@ -2,7 +2,7 @@ import { NButton, NCard, NStep, NSteps, NText, NTooltip, NTabs, NTabPane, NInput import { useForm, useModalClose, useModalOptions, useMessage } from '@baota/naive-ui/hooks' import { useThemeCssVar } from '@baota/naive-ui/theme' import { useError } from '@baota/hooks/error' -import { useStore } from '@components/FlowChart/useStore' +import { useStore } from '@/components/flowChart/useStore' import { getSites, getPlugins } from '@api/access' import { $t } from '@locales/index' @@ -18,12 +18,12 @@ import { filterDeployTypeOptions, } from '@workflowView/lib/DeployUtils' -import SvgIcon from '@components/SvgIcon' -import DnsProviderSelect from '@components/DnsProviderSelect' +import SvgIcon from '@/components/svgIcon' +import DnsProviderSelect from '@/components/dnsProviderSelect' import SearchOutlined from '@vicons/antd/es/SearchOutlined' -import type { DeployNodeConfig, DeployNodeInputsConfig } from '@components/FlowChart/types' -import type { DnsProviderType } from '@components/DnsProviderSelect/types' +import type { DeployNodeConfig, DeployNodeInputsConfig } from '@/components/flowChart/types' +import type { DnsProviderType } from '@/components/dnsProviderSelect/types' import type { VNode } from 'vue' import styles from './index.module.css' @@ -234,6 +234,9 @@ export default defineComponent({ case 'lecdn': config.push(...formConfig.leCdnDeploy()) break + case 'rainyun-sslcenter': + config.push(...formConfig.rainyunSSLCenterDeploy()) + break case 'plugin': // 插件部署配置 config.push(