优化pagetype列表页Link类型字段加载逻辑,增加防抖机制

This commit is contained in:
jingrow 2025-11-01 15:09:20 +08:00
parent 69f1c36bfd
commit e57ee5189d

View File

@ -291,6 +291,47 @@ const cardBadges = computed(() => {
const metaFields = ref<any[]>([]) const metaFields = ref<any[]>([])
const linkTitleCache = ref<Record<string, string>>({}) const linkTitleCache = ref<Record<string, string>>({})
const pageTypeConfigCache = ref<Record<string, any>>({}) const pageTypeConfigCache = ref<Record<string, any>>({})
let saveCacheTimer: ReturnType<typeof setTimeout> | null = null
// localStorage
function loadCacheFromStorage() {
try {
const cached = localStorage.getItem(`linkTitleCache:${entity.value}`)
if (cached) {
const parsed = JSON.parse(cached)
//
Object.keys(parsed).forEach(key => {
if (!linkTitleCache.value[key]) {
linkTitleCache.value[key] = parsed[key]
}
})
}
} catch (error) {
console.error('加载缓存失败:', error)
}
}
// localStorage
function saveCacheToStorage() {
if (saveCacheTimer) {
clearTimeout(saveCacheTimer)
}
saveCacheTimer = setTimeout(() => {
try {
// 1000
const cacheEntries = Object.entries(linkTitleCache.value)
if (cacheEntries.length > 1000) {
// 1000
const recentEntries = cacheEntries.slice(-1000)
linkTitleCache.value = Object.fromEntries(recentEntries)
}
localStorage.setItem(`linkTitleCache:${entity.value}`, JSON.stringify(linkTitleCache.value))
} catch (error) {
console.error('保存缓存失败:', error)
}
saveCacheTimer = null
}, 1000) // 1
}
async function loadMeta() { async function loadMeta() {
loading.value = true loading.value = true
@ -301,6 +342,9 @@ async function loadMeta() {
// //
isSinglePage.value = await isSinglePageType(entity.value) isSinglePage.value = await isSinglePageType(entity.value)
// Link
loadCacheFromStorage()
} finally { } finally {
loading.value = false loading.value = false
} }
@ -410,6 +454,9 @@ async function preloadLinkTitles() {
linkTitleCache.value[cacheKey] = name linkTitleCache.value[cacheKey] = name
} }
}) })
// localStorage
saveCacheToStorage()
} catch (error) { } catch (error) {
console.error(`批量加载${pagetype}的标题失败:`, error) console.error(`批量加载${pagetype}的标题失败:`, error)
// //
@ -477,10 +524,8 @@ async function loadData() {
total.value = res.data.total total.value = res.data.total
} }
// Linktitle_fieldUI // Linktitle_fieldloading
preloadLinkTitles().catch(err => { await preloadLinkTitles()
console.error('预加载Link标题失败:', err)
})
} catch (error) { } catch (error) {
console.error('Load data error:', error) console.error('Load data error:', error)
message.error(t('Load failed')) message.error(t('Load failed'))
@ -510,8 +555,10 @@ watch(() => route.params.entity, async (newEntity, oldEntity) => {
searchQuery.value = '' searchQuery.value = ''
selectedKeys.value = [] selectedKeys.value = []
filters.value = {} // filters.value = {} //
// entity使
linkTitleCache.value = {}
// //
await loadMeta() await loadMeta() // loadMetaentity
// //
if (!isSinglePage.value) { if (!isSinglePage.value) {
await loadData() await loadData()