sync: soul-admin 页面 | 原因: 前端页面修改

This commit is contained in:
卡若
2026-03-08 17:20:12 +08:00
parent 55cba27e2a
commit a1f4031623

View File

@@ -352,6 +352,60 @@ export function ContentPage() {
}
}
const loadPinnedSections = useCallback(async () => {
setPinnedLoading(true)
try {
const data = await get<{ success?: boolean; data?: string[] }>(
'/api/db/config/full?key=pinned_section_ids',
{ cache: 'no-store' as RequestCache },
)
const d = data && (data as { data?: string[] }).data
if (Array.isArray(d)) setPinnedSectionIds(d)
} catch { /* keep default */ } finally { setPinnedLoading(false) }
}, [])
const handleTogglePin = async (sectionId: string) => {
const next = pinnedSectionIds.includes(sectionId)
? pinnedSectionIds.filter((id) => id !== sectionId)
: [...pinnedSectionIds, sectionId]
setPinnedSectionIds(next)
try {
await post<{ success?: boolean }>('/api/db/config', {
key: 'pinned_section_ids',
value: next,
description: '强制置顶章节ID列表精选推荐/首页最新更新)',
})
} catch { setPinnedSectionIds(pinnedSectionIds) }
}
const loadPreviewPercent = useCallback(async () => {
setPreviewPercentLoading(true)
try {
const data = await get<{ success?: boolean; data?: number }>(
'/api/db/config/full?key=unpaid_preview_percent',
{ cache: 'no-store' as RequestCache },
)
const d = data && (data as { data?: number }).data
if (typeof d === 'number' && d > 0 && d <= 100) setPreviewPercent(d)
} catch { /* keep default */ } finally { setPreviewPercentLoading(false) }
}, [])
const handleSavePreviewPercent = async () => {
if (previewPercent < 1 || previewPercent > 100) { alert('预览比例需在 1~100 之间'); return }
setPreviewPercentSaving(true)
try {
const res = await post<{ success?: boolean; error?: string }>('/api/db/config', {
key: 'unpaid_preview_percent',
value: previewPercent,
description: '小程序未付费内容默认预览比例(%)',
})
if (res && (res as { success?: boolean }).success !== false) alert('已保存')
else alert('保存失败: ' + ((res as { error?: string }).error || ''))
} catch { alert('保存失败') } finally { setPreviewPercentSaving(false) }
}
useEffect(() => { loadPinnedSections(); loadPreviewPercent() }, [loadPinnedSections, loadPreviewPercent])
const handleShowSectionOrders = async (section: Section & { filePath?: string }) => {
setSectionOrdersModal({ section, orders: [] })
setSectionOrdersLoading(true)