추천 티어표 분리와 관리자 추천 지정 기능 추가
This commit is contained in:
@@ -54,7 +54,7 @@ const adminTierListTopicId = ref('')
|
||||
const adminTierListPage = ref(1)
|
||||
const adminTierListLimit = ref(50)
|
||||
const adminTierListTotal = ref(0)
|
||||
const adminTierListStats = ref({ total: 0, publicCount: 0, privateCount: 0 })
|
||||
const adminTierListStats = ref({ total: 0, publicCount: 0, privateCount: 0, featuredCount: 0 })
|
||||
const selectedTemplateTierListStats = ref({ total: 0, publicCount: 0, privateCount: 0 })
|
||||
const templateRequests = ref([])
|
||||
const importModalOpen = ref(false)
|
||||
@@ -277,6 +277,7 @@ const adminOverviewStats = computed(() => {
|
||||
]
|
||||
: [
|
||||
{ label: '검색 결과', value: `${adminTierListStats.value.total || 0}` },
|
||||
{ label: '추천', value: `${adminTierListStats.value.featuredCount || 0}` },
|
||||
{ label: '공개', value: `${adminTierListStats.value.publicCount || 0}` },
|
||||
{ label: '비공개', value: `${adminTierListStats.value.privateCount || 0}` },
|
||||
{ label: '현재 페이지', value: `${adminTierListPage.value}/${adminTierListPageCount.value}` },
|
||||
@@ -844,9 +845,10 @@ async function refreshAdminTierListStats() {
|
||||
total: data.total || 0,
|
||||
publicCount: data.publicCount || 0,
|
||||
privateCount: data.privateCount || 0,
|
||||
featuredCount: data.featuredCount || 0,
|
||||
}
|
||||
} catch (e) {
|
||||
adminTierListStats.value = { total: 0, publicCount: 0, privateCount: 0 }
|
||||
adminTierListStats.value = { total: 0, publicCount: 0, privateCount: 0, featuredCount: 0 }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1472,6 +1474,27 @@ async function deleteAdminTierListEntry() {
|
||||
}
|
||||
}
|
||||
|
||||
async function toggleAdminTierListFeatured(tierList) {
|
||||
if (!tierList?.id) return
|
||||
const nextFeatured = !tierList.isFeatured
|
||||
resetMessages()
|
||||
|
||||
try {
|
||||
const data = await api.updateAdminTierListFeatured(tierList.id, { isFeatured: nextFeatured })
|
||||
const updated = data.tierList || {}
|
||||
adminTierLists.value = adminTierLists.value.map((entry) => (entry.id === tierList.id ? { ...entry, ...updated } : entry))
|
||||
if (previewTierList.value?.id === tierList.id) previewTierList.value = { ...previewTierList.value, ...updated }
|
||||
if (modalTargetAdminTierList.value?.id === tierList.id) {
|
||||
modalTargetAdminTierList.value = { ...modalTargetAdminTierList.value, ...updated }
|
||||
}
|
||||
await refreshAdminTierListStats()
|
||||
success.value = nextFeatured ? '추천 티어표로 지정했어요.' : '추천 지정을 해제했어요.'
|
||||
} catch (e) {
|
||||
error.value =
|
||||
e?.data?.error === 'public_tierlist_required' ? '공개 티어표만 추천으로 지정할 수 있어요.' : '추천 상태 변경에 실패했어요.'
|
||||
}
|
||||
}
|
||||
|
||||
function openAdminTierList(tierList) {
|
||||
previewTierList.value = tierList
|
||||
previewModalOpen.value = true
|
||||
@@ -1782,6 +1805,7 @@ function userAvatarFallback(user) {
|
||||
:admin-tier-list-total="adminTierListTotal"
|
||||
:admin-tier-list-stats="adminTierListStats"
|
||||
:open-admin-tier-list-manage-modal="openAdminTierListManageModal"
|
||||
:toggle-admin-tier-list-featured="toggleAdminTierListFeatured"
|
||||
:move-admin-tier-list-page="moveAdminTierListPage"
|
||||
/>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user