Skip to content

Commit d209d47

Browse files
committed
feat: メンバーシップページにテキスト入力コンポーネントを追加し、traQ IDおよび名前の入力を実装
1 parent 1a542bb commit d209d47

File tree

2 files changed

+52
-7
lines changed

2 files changed

+52
-7
lines changed

src/pages/membership/MembershipPage.vue

+16-7
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { useRoute } from 'vue-router'
44
55
import MemberShipPageVerifyEmailLink from '@/pages/membership/MembershipPageVerifyEmailLink.vue'
66
import MemberShipPageUserTypeSelector from './MemberShipPageUserTypeSelector.vue'
7+
import MembershipPageInputText from './MembershipPageInputText.vue'
78
import MembershipPageLoginLink from './MembershipPageLoginLink.vue'
89
910
const route = useRoute()
@@ -16,7 +17,7 @@ const isUserTypeQueryValid = computed(
1617
)
1718
1819
const isLoggedIn = ref(false)
19-
const hasVerifiedMailAddress = ref(false)
20+
const hasVerifiedMailAddress = ref(true)
2021
const hasCustomerObjectOnTraqId = ref(false)
2122
const shouldShowUserTypeSelector = computed(() => !isLoggedIn.value)
2223
const needUserTypeSelect = computed(() => !isLoggedIn.value && !isUserTypeQueryValid.value)
@@ -46,9 +47,11 @@ const needTraqIdInput = computed(
4647
isUserTypeRejoin.value &&
4748
(!hasCustomerObjectOnMailAddress.value || !hasTraQIdOnCustomerObject.value),
4849
)
50+
const traqIdInput = ref('')
4951
const needNameInput = computed(() => !hasCustomerObject.value)
50-
const hasValidTraqId = computed(() => !needTraqIdInput.value && false)
51-
const hasName = computed(() => !needNameInput.value && false)
52+
const nameInput = ref('')
53+
const hasValidTraqId = computed(() => !needTraqIdInput.value || traqIdInput.value.length > 0)
54+
const hasName = computed(() => !needNameInput.value || nameInput.value.length > 0)
5255
const canShowInvoiceInfoConfirm = computed(
5356
() => needNameInput.value && hasValidTraqId.value && hasName.value,
5457
)
@@ -60,15 +63,21 @@ const canShowInvoiceInfoConfirm = computed(
6063
<MemberShipPageUserTypeSelector />
6164
</div>
6265
<div v-if="needUserTypeSelect">新規入部、再入部、継続所属のいずれかを選択してください</div>
63-
<div v-if="needMailAddressInput">
66+
<div v-if="needMailAddressInput" class="flex flex-col gap-2">
6467
isct アドレスの認証が必要です <MemberShipPageVerifyEmailLink />
6568
</div>
66-
<div v-if="needLogin">
69+
<div v-if="needLogin" class="flex flex-col gap-2">
6770
ログインが必要です
6871
<MembershipPageLoginLink />
6972
</div>
70-
<div v-if="canShowInvoiceForm && needTraqIdInput">traQ ID を入力してください</div>
71-
<div v-if="canShowInvoiceForm && needNameInput">名前を入力してください</div>
73+
<div v-if="canShowInvoiceForm && needTraqIdInput" class="flex flex-col gap-2">
74+
traQ ID を入力してください
75+
<MembershipPageInputText v-model="traqIdInput" />
76+
</div>
77+
<div v-if="canShowInvoiceForm && needNameInput" class="flex flex-col gap-2">
78+
名前を入力してください
79+
<MembershipPageInputText v-model="nameInput" />
80+
</div>
7281
<div v-if="canShowInvoiceInfoConfirm">請求書発行のための情報を確認してください</div>
7382
</div>
7483
</template>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<script setup lang="ts">
2+
import { onMounted, useTemplateRef } from 'vue'
3+
4+
const model = defineModel<string>({ required: true })
5+
const { autoFocus, className, required, placeholder } = withDefaults(
6+
defineProps<{
7+
autoFocus?: boolean
8+
className?: string
9+
required?: boolean
10+
placeholder?: string
11+
}>(),
12+
{
13+
autoFocus: false,
14+
className: 'rounded border px-1',
15+
required: false,
16+
placeholder: '',
17+
},
18+
)
19+
const inputRef = useTemplateRef('input-ref')
20+
21+
onMounted(() => {
22+
if (autoFocus) {
23+
inputRef.value?.focus()
24+
}
25+
})
26+
</script>
27+
28+
<template>
29+
<input
30+
ref="input-ref"
31+
:class="className"
32+
:placeholder="placeholder"
33+
:required="required"
34+
v-model="model"
35+
/>
36+
</template>

0 commit comments

Comments
 (0)