修复海报草稿页面

This commit is contained in:
wsb1224 2026-08-01 21:18:34 +08:00
parent 2b54d078f2
commit 9f0d8c26b2
2 changed files with 34 additions and 7 deletions

View File

@ -295,7 +295,7 @@ onMounted(() => {
function openDifyAdmin() {
// Dify 3000
window.open('http://localhost:3000', '_blank')
window.open('http://150.5.135.143:3000', '_blank')
showMobileMenu.value = false
}

View File

@ -10,6 +10,7 @@
import { ref, computed, watch, onMounted } from 'vue'
import { useRouter, useRoute } from 'vue-router'
import api from '@/utils/api'
import { useAuth } from '@/composables/useAuth'
export interface PosterTheme {
primary: string
@ -172,6 +173,7 @@ function normalizeFormat(draft: PosterDraft) {
export function usePosterWorkspace() {
const router = useRouter()
const route = useRoute()
const { user } = useAuth()
// ── 核心状态 ──────────────────────────────
const recordId = ref<number | null>(null)
@ -180,9 +182,23 @@ export function usePosterWorkspace() {
const restored = ref(false)
// ── 持久化 Key ────────────────────────────
const STORAGE_KEY = computed(() =>
recordId.value ? `poster_ws_draft_${recordId.value}` : 'poster_ws_draft_new'
)
function getStorageKey(targetRecordId: number | null = recordId.value): string {
if (!user.value?.id) return ''
const userId = encodeURIComponent(user.value.id)
return `poster_ws_draft_${userId}_${targetRecordId ?? 'new'}`
}
const STORAGE_KEY = computed(() => getStorageKey())
// 旧版草稿键没有用户维度,无法安全判断归属,直接清理以避免跨账号恢复。
try {
for (let index = localStorage.length - 1; index >= 0; index--) {
const key = localStorage.key(index)
if (key && /^poster_ws_draft_(?:new|\d+)$/.test(key)) {
localStorage.removeItem(key)
}
}
} catch { /* ignore */ }
/** 需要持久化的字段(排除瞬态数据) */
function getPersistableDraft(): Partial<PosterDraft> {
@ -231,7 +247,9 @@ export function usePosterWorkspace() {
// ── 持久化到 localStorage ─────────────────
function persistDraft() {
try {
localStorage.setItem(STORAGE_KEY.value, JSON.stringify(getPersistableDraft()))
const key = STORAGE_KEY.value
if (!key) return
localStorage.setItem(key, JSON.stringify(getPersistableDraft()))
} catch { /* quota exceeded, ignore */ }
}
@ -241,7 +259,9 @@ export function usePosterWorkspace() {
// ── 从 localStorage 恢复 ─────────────────
function tryRestoreLocal(): boolean {
try {
const saved = localStorage.getItem(STORAGE_KEY.value)
const key = STORAGE_KEY.value
if (!key) return false
const saved = localStorage.getItem(key)
if (saved) {
const parsed = JSON.parse(saved)
Object.assign(draft.value, parsed)
@ -389,6 +409,12 @@ export function usePosterWorkspace() {
}
function setRecordId(id: number) {
const previousKey = STORAGE_KEY.value
if (!recordId.value && previousKey) {
try {
localStorage.removeItem(previousKey)
} catch { /* ignore */ }
}
recordId.value = id
persistDraft()
syncUrl()
@ -398,7 +424,8 @@ export function usePosterWorkspace() {
function reset() {
// 清理 localStorage
try {
localStorage.removeItem(STORAGE_KEY.value)
const key = STORAGE_KEY.value
if (key) localStorage.removeItem(key)
} catch { /* ignore */ }
recordId.value = null