From 113f9c8d3c9dfe5af7fb5cccfdadab452c29b119 Mon Sep 17 00:00:00 2001 From: Rogee Date: Sun, 4 Jan 2026 21:45:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E8=A1=A8=E5=8D=95=E7=8A=B6=E6=80=81=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E4=BC=98=E5=8C=96=E5=86=85=E5=AE=B9=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E5=92=8C=E5=8F=91=E5=B8=83=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/http/v1/dto/creator.go | 1 + backend/app/services/creator.go | 6 ++++- .../src/views/creator/ContentsEditView.vue | 24 +++++++++++-------- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/backend/app/http/v1/dto/creator.go b/backend/app/http/v1/dto/creator.go index bc474c3..1781586 100644 --- a/backend/app/http/v1/dto/creator.go +++ b/backend/app/http/v1/dto/creator.go @@ -30,6 +30,7 @@ type ContentCreateForm struct { Genre string `json:"genre"` Key string `json:"key"` Price float64 `json:"price"` + Status string `json:"status"` CoverIDs []string `json:"cover_ids"` MediaIDs []string `json:"media_ids"` } diff --git a/backend/app/services/creator.go b/backend/app/services/creator.go index 27d0351..5963dbe 100644 --- a/backend/app/services/creator.go +++ b/backend/app/services/creator.go @@ -201,6 +201,10 @@ func (s *creator) CreateContent(ctx context.Context, userID int64, form *creator uid := userID return models.Q.Transaction(func(tx *models.Query) error { + status := consts.ContentStatusPublished + if form.Status != "" { + status = consts.ContentStatus(form.Status) + } // 1. Create Content content := &models.Content{ TenantID: tid, @@ -208,7 +212,7 @@ func (s *creator) CreateContent(ctx context.Context, userID int64, form *creator Title: form.Title, Genre: form.Genre, Key: form.Key, - Status: consts.ContentStatusPublished, + Status: status, } if err := tx.Content.WithContext(ctx).Create(content); err != nil { return err diff --git a/frontend/portal/src/views/creator/ContentsEditView.vue b/frontend/portal/src/views/creator/ContentsEditView.vue index 3c938fb..bbda531 100644 --- a/frontend/portal/src/views/creator/ContentsEditView.vue +++ b/frontend/portal/src/views/creator/ContentsEditView.vue @@ -16,9 +16,9 @@
- -
@@ -448,9 +448,13 @@ const removeMediaItem = async (type, index, item) => { } }; -const submit = async () => { - if (!form.title || !form.genre) { - toast.add({ severity: 'warn', summary: '信息不完整', detail: '请填写标题和曲种', life: 3000 }); +const saveContent = async (targetStatus) => { + if (!form.title) { + toast.add({ severity: 'warn', summary: '提示', detail: '请至少填写标题', life: 3000 }); + return; + } + if (targetStatus === 'published' && !form.genre) { + toast.add({ severity: 'warn', summary: '提示', detail: '发布需要填写曲种', life: 3000 }); return; } @@ -462,10 +466,10 @@ const submit = async () => { description: form.abstract, genre: form.genre, key: form.key, - status: 'published', // Direct publish for demo + status: targetStatus, visibility: 'public', preview_seconds: form.enableTrial ? form.trialTime : 0, - price: form.priceType === 'paid' ? parseFloat(form.price) : 0, // API expects float price, service handles conversion + price: form.priceType === 'paid' ? parseFloat(form.price) : 0, cover_ids: [], media_ids: [] }; @@ -475,15 +479,15 @@ const submit = async () => { if (isEditMode.value) { await creatorApi.updateContent(contentId.value, payload); - toast.add({ severity: 'success', summary: '更新成功', detail: '内容已更新', life: 3000 }); + toast.add({ severity: 'success', summary: '保存成功', detail: targetStatus === 'draft' ? '已保存为草稿' : '内容已更新', life: 3000 }); } else { await creatorApi.createContent(payload); - toast.add({ severity: 'success', summary: '发布成功', detail: '内容已提交审核', life: 3000 }); + toast.add({ severity: 'success', summary: targetStatus === 'draft' ? '保存成功' : '发布成功', detail: targetStatus === 'draft' ? '已保存为草稿' : '内容已提交审核', life: 3000 }); } setTimeout(() => router.push('/creator/contents'), 1500); } catch (e) { - toast.add({ severity: 'error', summary: '提交失败', detail: e.message, life: 3000 }); + toast.add({ severity: 'error', summary: '操作失败', detail: e.message, life: 3000 }); } finally { isSubmitting.value = false; }