오류 수정, 통계 보강

This commit is contained in:
2025-06-08 20:21:37 +09:00
parent 1a3706d7a5
commit 141a0de6d0
42 changed files with 2645 additions and 799 deletions
+25 -15
View File
@@ -20,7 +20,7 @@
</Column>
<Column field="owner.name" header="모임장" sortable style="width: 15%">
<template #body="slotProps">
{{ slotProps.data.owner?.name || '-' }}
{{ slotProps.data.owner?.name || 'guest' }}
</template>
</Column>
<Column field="memberCount" header="회원 수" sortable style="width: 10%"></Column>
@@ -125,13 +125,16 @@
</div>
</template>
</Column>
<Column field="gender" header="성별" sortable style="min-width: 6rem"></Column>
<Column field="gender" header="성별" sortable style="min-width: 6rem">
<template #body="slotProps">
{{ getGenderLabel(slotProps.data.gender) }}
</template>
</Column>
<Column field="memberType" header="회원 유형" sortable style="min-width: 8rem">
<template #body="slotProps">
<Select v-model="slotProps.data.memberType"
:options="memberTypes"
@change="updateMemberType(slotProps.data)"
:disabled="slotProps.data.memberType === '모임장' && !canChangeOwner" />
<span>
{{ getMemberTypeLabel(slotProps.data.memberType) }}
</span>
</template>
</Column>
<Column field="handicap" header="핸디캡" sortable style="min-width: 6rem"></Column>
@@ -154,7 +157,7 @@
<Button icon="pi pi-trash"
class="p-button-rounded p-button-danger"
@click="confirmDeleteMember(slotProps.data)"
:disabled="slotProps.data.memberType === '모임장'" />
:disabled="slotProps.data.memberType === 'owner'" />
</template>
</Column>
</DataTable>
@@ -172,16 +175,22 @@
</div>
<div class="field mb-3">
<label for="gender">성별</label>
<Select id="gender" v-model="member.gender"
:options="['남성', '여성']" placeholder="성별 선택"
:class="{'p-invalid': memberSubmitted && !member.gender}" class="w-full" />
<Select id="gender" v-model="member.gender"
:options="[{ label: '남성', value: 'male' }, { label: '여성', value: 'female' }]" optionLabel="label" optionValue="value" placeholder="성별 선택"
:class="{'p-invalid': memberSubmitted && !member.gender}" class="w-full" />
<small class="p-error" v-if="memberSubmitted && !member.gender">성별은 필수입니다.</small>
</div>
<div class="field mb-3">
<label for="memberType">회원 유형</label>
<Select id="memberType" v-model="member.memberType"
:options="memberTypes" placeholder="회원 유형 선택"
:class="{'p-invalid': memberSubmitted && !member.memberType}" class="w-full" />
<Select id="memberType" v-model="member.memberType"
:options="[
{ label: '정회원', value: 'regular' },
{ label: '준회원', value: 'associate' },
{ label: '게스트', value: 'guest' },
{ label: '운영진', value: 'manager' },
{ label: '모임장', value: 'owner' }
]" optionLabel="label" optionValue="value" placeholder="회원 유형 선택"
:class="{'p-invalid': memberSubmitted && !member.memberType}" class="w-full" />
<small class="p-error" v-if="memberSubmitted && !member.memberType">회원 유형은 필수입니다.</small>
</div>
<div class="field mb-3">
@@ -234,6 +243,7 @@
</template>
<script setup>
import { getGenderLabel, getMemberTypeLabel } from '@/utils/enumMappings';
import { ref, reactive, onMounted } from 'vue';
import { useToast } from 'primevue/usetoast';
import dayjs from 'dayjs';
@@ -257,7 +267,7 @@ const clubs = ref([]);
const clubMembers = ref([]);
// 회원 유형 목록
const memberTypes = ref(['모임장', '정회원', '준회원', '운영진']);
const memberTypes = ref(['owner', 'regular', 'associate', 'manager']);
// 기능 목록
const allFeatures = ref([
@@ -585,7 +595,7 @@ const openNewMemberDialog = () => {
id: null,
name: '',
gender: null,
memberType: '준회원',
memberType: 'associate',
handicap: 0,
phone: '',
email: ''