feat: 가계부·계좌관리에 현금 계좌 추가
CI / build (push) Failing after 14m41s

- 계좌 관리: '현금' 탭 + 폼(이름·초기 잔액, 발급사/계좌번호 등 미노출)
- 가계부 입력: 현금 선택 시 등록된 현금 계좌를 고를 수 있음(없으면 종전처럼 미지정)
- 고정 지출: 현금 종류 추가

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
ByungCheol
2026-06-14 15:43:45 +09:00
parent 9aa5f5d690
commit a4a4aec314
3 changed files with 6 additions and 4 deletions
+2 -2
View File
@@ -687,8 +687,8 @@ onMounted(async () => {
</label> </label>
</div> </div>
</div> </div>
<select v-if="form.walletKind && form.walletKind !== 'CASH'" v-model="form.walletId" :disabled="submitting"> <select v-if="form.walletKind && (form.walletKind !== 'CASH' || walletsOfKind.length)" v-model="form.walletId" :disabled="submitting">
<option value="">{{ form.type === 'INCOME' || form.type === 'EXPENSE' ? '계좌/카드 선택' : '출금 계좌 선택' }}</option> <option value="">{{ form.walletKind === 'CASH' ? '현금 (계좌 미지정)' : (form.type === 'INCOME' || form.type === 'EXPENSE' ? '계좌/카드 선택' : '출금 계좌 선택') }}</option>
<option v-for="w in walletsOfKind" :key="w.id" :value="w.id"> <option v-for="w in walletsOfKind" :key="w.id" :value="w.id">
{{ w.name }}{{ w.issuer ? ` (${w.issuer})` : '' }} {{ w.name }}{{ w.issuer ? ` (${w.issuer})` : '' }}
</option> </option>
+3 -2
View File
@@ -9,6 +9,7 @@ const router = useRouter()
const TABS = [ const TABS = [
{ key: 'BANK', label: '은행계좌' }, { key: 'BANK', label: '은행계좌' },
{ key: 'CASH', label: '현금' },
{ key: 'CARD', label: '신용/체크카드' }, { key: 'CARD', label: '신용/체크카드' },
{ key: 'LOAN', label: '대출' }, { key: 'LOAN', label: '대출' },
{ key: 'INVEST', label: '투자' }, { key: 'INVEST', label: '투자' },
@@ -195,7 +196,7 @@ function issuerLabel(t) {
return t === 'BANK' ? '은행명' : t === 'CARD' ? '카드사' : t === 'INVEST' ? '증권사' : '대출기관' return t === 'BANK' ? '은행명' : t === 'CARD' ? '카드사' : t === 'INVEST' ? '증권사' : '대출기관'
} }
function openingLabel(t) { function openingLabel(t) {
return t === 'BANK' ? '초기 잔액' : t === 'CARD' ? '초기 미결제 금액' : t === 'INVEST' ? '투자금(투입원금)' : '대출 잔액(원금)' return t === 'BANK' || t === 'CASH' ? '초기 잔액' : t === 'CARD' ? '초기 미결제 금액' : t === 'INVEST' ? '투자금(투입원금)' : '대출 잔액(원금)'
} }
// 투자 수익률(%) — 투입원금 대비 평가손익 // 투자 수익률(%) — 투입원금 대비 평가손익
function returnPct(w) { function returnPct(w) {
@@ -436,7 +437,7 @@ onBeforeUnmount(() => sortable?.destroy())
<form class="wallet-form" @submit.prevent="submit"> <form class="wallet-form" @submit.prevent="submit">
<label>이름(별칭)<input v-model="form.name" type="text" placeholder="예: 월급통장 / 메인카드 / 신용대출" :disabled="submitting" /></label> <label>이름(별칭)<input v-model="form.name" type="text" placeholder="예: 월급통장 / 메인카드 / 신용대출" :disabled="submitting" /></label>
<label>{{ issuerLabel(form.type) }}<input v-model="form.issuer" type="text" :disabled="submitting" /></label> <label v-if="form.type !== 'CASH'">{{ issuerLabel(form.type) }}<input v-model="form.issuer" type="text" :disabled="submitting" /></label>
<label v-if="form.type === 'BANK'">계좌번호<input v-model="form.accountNumber" type="text" placeholder="(선택)" :disabled="submitting" /></label> <label v-if="form.type === 'BANK'">계좌번호<input v-model="form.accountNumber" type="text" placeholder="(선택)" :disabled="submitting" /></label>
<label v-if="form.type === 'CARD'">카드 종류 <label v-if="form.type === 'CARD'">카드 종류
<select v-model="form.cardType" :disabled="submitting"> <select v-model="form.cardType" :disabled="submitting">
+1
View File
@@ -44,6 +44,7 @@ const categoryOptions = computed(() => {
// 계좌/카드 — 종류(계좌/카드)를 라디오로 고르고, 그 종류만 셀렉트로 노출 // 계좌/카드 — 종류(계좌/카드)를 라디오로 고르고, 그 종류만 셀렉트로 노출
const WALLET_KINDS = [ const WALLET_KINDS = [
{ value: 'BANK', label: '계좌' }, { value: 'BANK', label: '계좌' },
{ value: 'CASH', label: '현금' },
{ value: 'CARD', label: '카드' }, { value: 'CARD', label: '카드' },
] ]
const walletsOfKind = computed(() => wallets.value.filter((w) => w.type === form.walletKind)) const walletsOfKind = computed(() => wallets.value.filter((w) => w.type === form.walletKind))