diff --git a/apps/admin/src/views/GeekDailyEditorPage.vue b/apps/admin/src/views/GeekDailyEditorPage.vue index 98d2211..fffb554 100644 --- a/apps/admin/src/views/GeekDailyEditorPage.vue +++ b/apps/admin/src/views/GeekDailyEditorPage.vue @@ -6,6 +6,7 @@ import { extractGeekDailyBodyNote, type AdminGeekDailyListItem, type AdminGeekDailyRecord, + type AdminGeekDailyWechatDraftRecord, type AdminMePayload, } from '@rebase/shared'; @@ -54,9 +55,11 @@ const record = ref(null); const loading = ref(true); const saving = ref(false); const actioning = ref(false); +const wechatDrafting = ref(false); const errorMessage = ref(''); const successMessage = ref(''); const fieldIssues = ref>({}); +const wechatDraftResult = ref(null); const suggestedEpisodeNumber = ref(1); const currentStaffName = ref(''); const activeWechatTab = ref<'preview' | 'source'>('preview'); @@ -75,13 +78,14 @@ const saveButtonLabel = computed(() => ((isNew.value || form.status === 'draft') const saveButtonClass = computed(() => ['button-link', !canPublish.value && 'button-primary'].filter(Boolean).join(' ')); const canPublish = computed(() => form.status !== 'published'); const canArchive = computed(() => Boolean(record.value) && form.status !== 'archived'); +const canCreateWechatDraft = computed(() => Boolean(record.value) && form.status === 'published' && !wechatGenerationIssue.value); const workflowHint = computed(() => { if (isNew.value) { return '可先保存草稿,也可直接发布;右侧可继续复制微信公众号内容。'; } if (form.status === 'published') { - return '已发布内容保存后会直接更新前台;右侧微信稿会同步更新。'; + return '已发布内容保存后会直接更新前台;可继续复制微信稿,也可直接创建公众号草稿。'; } if (form.status === 'archived') { @@ -164,6 +168,7 @@ const resetFeedback = () => { errorMessage.value = ''; successMessage.value = ''; fieldIssues.value = {}; + wechatDraftResult.value = null; }; const setCopyFeedback = (message: string) => { @@ -309,6 +314,26 @@ const persist = async (nextStatus: GeekDailyFormState['status'], mode: 'save' | const save = async () => persist(form.status === 'published' ? 'published' : form.status === 'archived' ? 'archived' : 'draft', 'save'); const publish = async () => persist('published', 'publish'); +const createWechatDraft = async () => { + if (!record.value) { + return; + } + + wechatDrafting.value = true; + resetFeedback(); + try { + const result = await adminRequest(`/api/admin/v1/geekdaily/${record.value.id}/wechat-draft`, { + method: 'POST', + }); + wechatDraftResult.value = result; + successMessage.value = '已创建公众号草稿。'; + } catch (error) { + errorMessage.value = error instanceof Error ? error.message : '无法创建公众号草稿。'; + } finally { + wechatDrafting.value = false; + } +}; + const runAction = async (action: 'archive') => { if (!record.value) { return; @@ -355,6 +380,15 @@ onBeforeUnmount(() => { + @@ -364,6 +398,10 @@ onBeforeUnmount(() => {

{{ errorMessage }}

{{ successMessage }}

+
+

公众号草稿已创建。

+

mediaId:{{ wechatDraftResult.mediaId }}

+

正在准备极客日报编辑器…