v1.7.1: 멤버 권한·추천 사이트·네비게이션 UI 개선

관리자는 VIP·멤버만 수정 가능하도록 서버·UI 권한을 정리하고 소유자 권한 이전 API와 확인 모달을 추가했다. 추천 사이트 파비콘 캐시·URL 접두사·카드 편집 UI를 보강하고 확인 얼럿을 AdminConfirmModal로 통일했다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-17 14:32:11 +09:00
parent f206499f99
commit 5b2ed97748
30 changed files with 1837 additions and 211 deletions

View File

@@ -6,6 +6,14 @@ definePageMeta({
/** 서버 `MEDIA_THUMBNAIL_ROOT`와 동일한 썸네일 논리 폴더 라벨 */
const MEDIA_THUMBNAIL_ROOT = '썸네일'
/** 회원 등급 코드 → 미디어 배지 라벨 */
const memberRoleBadgeLabels = {
owner: '소유자',
admin: '관리자',
vip: 'VIP',
member: '멤버'
}
/**
* 논리 폴더 경로가 썸네일 전용 루트인지 확인한다.
* @param {string} folder - 폴더 경로
@@ -98,7 +106,8 @@ const canEditMediaCategory = (item) => !isSystemManagedMediaItem(item)
*/
const getMediaBadgeLabel = (item) => {
if (item?.avatarOwner) {
return '회원'
const roleCode = String(item.avatarOwner.roleCode || 'member')
return memberRoleBadgeLabels[roleCode] || memberRoleBadgeLabels.member
}
if (activeTab.value === 'postThumbnails' && item?.thumbnailStatus?.role === 'card') {
@@ -1447,6 +1456,10 @@ watch(filteredMediaUrls, (urls) => {
<dt class="text-[11px] font-semibold uppercase tracking-wide text-muted">이메일</dt>
<dd class="mt-0.5 break-all text-ink">{{ selectedMedia.avatarOwner.email }}</dd>
</div>
<div class="admin-media__avatar-owner-row">
<dt class="text-[11px] font-semibold uppercase tracking-wide text-muted">등급</dt>
<dd class="mt-0.5 text-ink">{{ getMediaBadgeLabel(selectedMedia) }}</dd>
</div>
<div class="admin-media__avatar-owner-row">
<dt class="text-[11px] font-semibold uppercase tracking-wide text-muted">마지막 접속</dt>
<dd class="mt-0.5 text-ink">{{ formatDateTime(selectedMedia.avatarOwner.lastSeenAt) }}</dd>