From 5ba6c9f74691238104fcd3362cdc0783b8ed9921 Mon Sep 17 00:00:00 2001 From: old burden Date: Mon, 30 Mar 2026 13:05:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E9=A1=B5=E9=9D=A2=E4=BC=98=E5=8C=96?= =?UTF-8?q?=EF=BC=8C=E5=B7=A5=E5=85=B7=E6=A0=8F=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- portal-ui/src/components/VideoRichEditor.vue | 36 ++++++++- portal-ui/src/views/VideoGen.vue | 81 ++++++++++++++++++-- 2 files changed, 108 insertions(+), 9 deletions(-) diff --git a/portal-ui/src/components/VideoRichEditor.vue b/portal-ui/src/components/VideoRichEditor.vue index 4105228..75ef884 100644 --- a/portal-ui/src/components/VideoRichEditor.vue +++ b/portal-ui/src/components/VideoRichEditor.vue @@ -399,10 +399,44 @@ const clear = () => { hideMentionPanel() } +/** 供父组件持久化:参考图模式的 HTML + 素材列表 */ +const getDraftState = () => ({ + html: editorRef.value ? editorRef.value.innerHTML : '', + mentionList: mentionImageList.value.map(({ url, refNo, mediaType }) => ({ + url, + refNo, + mediaType + })) +}) + +const applyDraftState = (draft) => { + hideMentionPanel() + savedSelectionRange.value = null + if (!draft || typeof draft !== 'object') { + clear() + return + } + mentionImageList.value = Array.isArray(draft.mentionList) + ? draft.mentionList.map((x) => ({ + url: x.url, + refNo: Number(x.refNo) || 0, + mediaType: x.mediaType || 'image' + })) + : [] + if (editorRef.value) { + editorRef.value.innerHTML = typeof draft.html === 'string' ? draft.html : '' + } + nextTick(() => { + emit('text-change', getPlainText()) + }) +} + defineExpose({ getContentItems, getPlainText, - clear + clear, + getDraftState, + applyDraftState }) onMounted(() => { diff --git a/portal-ui/src/views/VideoGen.vue b/portal-ui/src/views/VideoGen.vue index 45f3359..d704c61 100644 --- a/portal-ui/src/views/VideoGen.vue +++ b/portal-ui/src/views/VideoGen.vue @@ -86,8 +86,8 @@