1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <template>
- <v-form ref="passwordForm" @submit.prevent>
- <v-text-field v-model="loginData.phone" placeholder="请输入手机号" color="primary" variant="outlined" density="compact" :rules="phoneRules" validate-on="input">
- <template v-slot:prepend-inner>
- <span class="d-flex">
- <v-icon icon="mdi-cellphone" size="20"></v-icon>
- <span class="d-flex" id="menu-activator">
- <span class="phone-number">{{ currentArea }}</span>
- <v-icon size="20">mdi-chevron-down</v-icon>
- </span>
- <v-menu activator="#menu-activator">
- <v-list>
- <v-list-item v-for="(item, index) in items" :key="index" :value="index" @click="handleChangeCurrentArea(item)">
- <v-list-item-title>{{ item.label }}</v-list-item-title>
- </v-list-item>
- </v-list>
- </v-menu>
- </span>
- </template>
- </v-text-field>
- <v-text-field
- v-model="loginData.password"
- placeholder="请输入密码"
- variant="outlined"
- density="compact"
- color="primary"
- prepend-inner-icon="mdi-lock-outline"
- :append-inner-icon="passwordType ? 'mdi-eye-outline' : 'mdi-eye-off-outline'"
- :type="passwordType ? 'text' : 'password'"
- :rules="[v=> !!v || '请填写密码']"
- @click:append-inner="passwordType = !passwordType"
- ></v-text-field>
- </v-form>
- </template>
- <script setup name="passwordPage">
- import { ref, reactive } from 'vue'
- defineOptions({ name: 'password-form' })
- const passwordType = ref(false)
- const phoneRules = ref([
- value => {
- if (value) return true
- return '请输入手机号'
- },
- value => {
- if (value?.length <= 11 && /^1[3456789]\d{9}$/.test(value)) return true
- return '请输入正确的手机号码'
- }
- ])
- // 手机号区域
- const currentArea = ref('0086')
- const items = [
- { label: '中国大陆-0086', value: '0086' }
- ]
- const handleChangeCurrentArea = (e) => {
- currentArea.value = e.value
- }
- const loginData = reactive({
- phone: '13229740091',
- password: '1111'
- })
- const passwordForm = ref()
- defineExpose({
- loginData,
- passwordForm
- })
- </script>
|