feat: 添加内容创建表单状态字段,优化内容保存和发布逻辑

This commit is contained in:
2026-01-04 21:45:42 +08:00
parent 4b32e64d35
commit 113f9c8d3c
3 changed files with 20 additions and 11 deletions

View File

@@ -30,6 +30,7 @@ type ContentCreateForm struct {
Genre string `json:"genre"` Genre string `json:"genre"`
Key string `json:"key"` Key string `json:"key"`
Price float64 `json:"price"` Price float64 `json:"price"`
Status string `json:"status"`
CoverIDs []string `json:"cover_ids"` CoverIDs []string `json:"cover_ids"`
MediaIDs []string `json:"media_ids"` MediaIDs []string `json:"media_ids"`
} }

View File

@@ -201,6 +201,10 @@ func (s *creator) CreateContent(ctx context.Context, userID int64, form *creator
uid := userID uid := userID
return models.Q.Transaction(func(tx *models.Query) error { return models.Q.Transaction(func(tx *models.Query) error {
status := consts.ContentStatusPublished
if form.Status != "" {
status = consts.ContentStatus(form.Status)
}
// 1. Create Content // 1. Create Content
content := &models.Content{ content := &models.Content{
TenantID: tid, TenantID: tid,
@@ -208,7 +212,7 @@ func (s *creator) CreateContent(ctx context.Context, userID int64, form *creator
Title: form.Title, Title: form.Title,
Genre: form.Genre, Genre: form.Genre,
Key: form.Key, Key: form.Key,
Status: consts.ContentStatusPublished, Status: status,
} }
if err := tx.Content.WithContext(ctx).Create(content); err != nil { if err := tx.Content.WithContext(ctx).Create(content); err != nil {
return err return err

View File

@@ -16,9 +16,9 @@
</div> </div>
<div class="flex gap-3 w-1/3 justify-end"> <div class="flex gap-3 w-1/3 justify-end">
<button <button @click="saveContent('draft')"
class="px-6 py-2 border border-slate-300 text-slate-700 rounded-lg hover:bg-slate-50 font-bold transition-colors cursor-pointer">存草稿</button> class="px-6 py-2 border border-slate-300 text-slate-700 rounded-lg hover:bg-slate-50 font-bold transition-colors cursor-pointer">存草稿</button>
<button @click="submit" <button @click="saveContent('published')"
class="px-8 py-2 bg-primary-600 text-white rounded-lg font-bold hover:bg-primary-700 shadow-lg shadow-primary-200 transition-all active:scale-95 cursor-pointer">发布</button> class="px-8 py-2 bg-primary-600 text-white rounded-lg font-bold hover:bg-primary-700 shadow-lg shadow-primary-200 transition-all active:scale-95 cursor-pointer">发布</button>
</div> </div>
</div> </div>
@@ -448,9 +448,13 @@ const removeMediaItem = async (type, index, item) => {
} }
}; };
const submit = async () => { const saveContent = async (targetStatus) => {
if (!form.title || !form.genre) { if (!form.title) {
toast.add({ severity: 'warn', summary: '信息不完整', detail: '请填写标题和曲种', life: 3000 }); toast.add({ severity: 'warn', summary: '提示', detail: '请至少填写标题', life: 3000 });
return;
}
if (targetStatus === 'published' && !form.genre) {
toast.add({ severity: 'warn', summary: '提示', detail: '发布需要填写曲种', life: 3000 });
return; return;
} }
@@ -462,10 +466,10 @@ const submit = async () => {
description: form.abstract, description: form.abstract,
genre: form.genre, genre: form.genre,
key: form.key, key: form.key,
status: 'published', // Direct publish for demo status: targetStatus,
visibility: 'public', visibility: 'public',
preview_seconds: form.enableTrial ? form.trialTime : 0, 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: [], cover_ids: [],
media_ids: [] media_ids: []
}; };
@@ -475,15 +479,15 @@ const submit = async () => {
if (isEditMode.value) { if (isEditMode.value) {
await creatorApi.updateContent(contentId.value, payload); 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 { } else {
await creatorApi.createContent(payload); 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); setTimeout(() => router.push('/creator/contents'), 1500);
} catch (e) { } catch (e) {
toast.add({ severity: 'error', summary: '提交失败', detail: e.message, life: 3000 }); toast.add({ severity: 'error', summary: '操作失败', detail: e.message, life: 3000 });
} finally { } finally {
isSubmitting.value = false; isSubmitting.value = false;
} }