From 918d8c210411529e8d9a5afd832634af746add96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=80=97=E5=AD=90?= Date: Fri, 16 Jan 2026 22:03:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E5=AE=B9=E5=99=A8?= =?UTF-8?q?=E6=A8=A1=E7=89=88=E9=83=A8=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/http/request/template.go | 1 + internal/service/template.go | 8 +- web/src/api/panel/template/index.ts | 1 + web/src/components/common/DiffEditor.vue | 164 ++++++ web/src/views/app/TemplateDeployModal.vue | 590 +++++++++++++++++----- web/src/views/app/TemplateView.vue | 2 +- 6 files changed, 647 insertions(+), 119 deletions(-) create mode 100644 web/src/components/common/DiffEditor.vue diff --git a/internal/http/request/template.go b/internal/http/request/template.go index f8b9128b..9c3b9a4d 100644 --- a/internal/http/request/template.go +++ b/internal/http/request/template.go @@ -9,6 +9,7 @@ type TemplateSlug struct { type TemplateCreate struct { Slug string `json:"slug" validate:"required"` Name string `json:"name" validate:"required|regex:^[a-zA-Z0-9_-]+$"` + Compose string `json:"compose"` Envs []types.KV `json:"envs"` AutoFirewall bool `json:"auto_firewall"` } diff --git a/internal/service/template.go b/internal/service/template.go index fccf883f..dedf72eb 100644 --- a/internal/service/template.go +++ b/internal/service/template.go @@ -65,8 +65,14 @@ func (s *TemplateService) Create(w http.ResponseWriter, r *http.Request) { return } + // 使用用户自定义的 compose 内容,如果没有则使用模版默认内容 + compose := req.Compose + if compose == "" { + compose = template.Compose + } + // 创建编排 - dir, err := s.templateRepo.CreateCompose(req.Name, template.Compose, req.Envs, req.AutoFirewall) + dir, err := s.templateRepo.CreateCompose(req.Name, compose, req.Envs, req.AutoFirewall) if err != nil { Error(w, http.StatusInternalServerError, "%v", err) return diff --git a/web/src/api/panel/template/index.ts b/web/src/api/panel/template/index.ts index ebaccd17..77d0856a 100644 --- a/web/src/api/panel/template/index.ts +++ b/web/src/api/panel/template/index.ts @@ -9,6 +9,7 @@ export default { create: (data: { slug: string name: string + compose: string envs: { key: string; value: string }[] auto_firewall: boolean }): any => http.Post('/template', data), diff --git a/web/src/components/common/DiffEditor.vue b/web/src/components/common/DiffEditor.vue new file mode 100644 index 00000000..15727913 --- /dev/null +++ b/web/src/components/common/DiffEditor.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/web/src/views/app/TemplateDeployModal.vue b/web/src/views/app/TemplateDeployModal.vue index 089562ac..e45e7072 100644 --- a/web/src/views/app/TemplateDeployModal.vue +++ b/web/src/views/app/TemplateDeployModal.vue @@ -1,5 +1,7 @@