v1.12.23 대시보드 간소화 및 멤버 작성 이력 탭 추가

This commit is contained in:
2026-10-21 16:37:55 +09:00
parent c8e00c1190
commit 7c95797fd2
18 changed files with 287 additions and 251 deletions

View File

@@ -21,6 +21,13 @@ const { data: adminSession } = await useFetch('/admin/api/auth/me', {
})
})
const selectedMemberTab = ref('info')
const memberTabs = [
{ value: 'info', label: '정보' },
{ value: 'posts', label: '작성한 글' },
{ value: 'comments', label: '작성한 댓글' }
]
const isNewMember = computed(() => props.mode === 'new')
const isSaving = ref(false)
const savedMemberSnapshot = ref('')
@@ -699,7 +706,7 @@ watch(() => props.member, () => {
{{ pageTitle }}
</h1>
</div>
<div class="admin-member-form__actions flex items-center gap-3">
<div v-show="selectedMemberTab === 'info'" class="admin-member-form__actions flex items-center gap-3">
<div v-if="!isNewMember && canManageMemberActions" class="admin-member-form__action-menu relative">
<button class="admin-member-form__action-icon flex h-11 w-11 items-center justify-center rounded-md border border-line bg-white text-[#3f4650] transition hover:border-[#c5ccd5] hover:bg-[#f4f6f8]" type="button" aria-label="멤버 작업" :aria-expanded="actionMenuOpen" @click="toggleActionMenu">
<svg class="h-5 w-5" viewBox="0 0 24 24" aria-hidden="true">
@@ -744,7 +751,21 @@ watch(() => props.member, () => {
</p>
</div>
<div class="admin-member-form__body grid gap-8 py-8 xl:grid-cols-3">
<nav v-if="!isNewMember" class="admin-member-form__tabs mt-5 flex gap-6 border-b border-line" aria-label="멤버 상세 메뉴">
<button
v-for="tab in memberTabs" :key="tab.value" type="button"
class="admin-member-form__tab border-b-2 px-1 py-3 text-sm font-semibold"
:class="selectedMemberTab === tab.value ? 'border-ink text-ink' : 'border-transparent text-muted hover:text-ink'"
:aria-current="selectedMemberTab === tab.value ? 'page' : undefined"
@click="selectedMemberTab = tab.value"
>{{ tab.label }}</button>
</nav>
<AdminMemberActivityList
v-if="!isNewMember && selectedMemberTab !== 'info'"
:key="`${member.id}-${selectedMemberTab}`" :member-id="member.id" :kind="selectedMemberTab"
class="admin-member-form__content-tab mt-6"
/>
<div v-show="selectedMemberTab === 'info'" class="admin-member-form__body grid gap-8 py-8 xl:grid-cols-3">
<aside class="admin-member-form__summary">
<div class="admin-member-form__identity flex items-center gap-4">
<div class="admin-member-form__avatar-control group relative h-20 w-20 shrink-0">
@@ -924,8 +945,6 @@ watch(() => props.member, () => {
</div>
</section>
<AdminCommentList v-if="!isNewMember && member?.id" :key="member.id" :member-id="member.id" />
<section v-if="!isNewMember" class="admin-member-form__activity">
<h2 class="admin-member-form__section-title mb-4 text-xs font-semibold uppercase tracking-[0.04em] text-[#15171a]">활동</h2>
<div class="admin-member-form__activity-card rounded-xl border border-line bg-white px-5 md:px-6">