Compare commits
7 Commits
c92cfa672f
...
21194812c4
Author | SHA1 | Date | |
---|---|---|---|
|
21194812c4 | ||
|
bc94c51e2d | ||
|
4e03cb3f6d | ||
|
c93a7fcb93 | ||
|
d27e5268f3 | ||
|
00188a9d48 | ||
|
4d92cc13fc |
@ -3,7 +3,7 @@ import useKeepalive from '~/composables/keepalive'
|
||||
import { appName, appDescription } from '~/constants'
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import {message} from '@/components/x-message/useMessage.js'
|
||||
message.success('success')
|
||||
// message.success('success')
|
||||
useHead({
|
||||
title: useI18n().t('appSetting.appName'),
|
||||
meta: [
|
||||
|
@ -1,5 +1,5 @@
|
||||
<script setup>
|
||||
import { useAppFooterRouteNames as routeWhiteList } from '~/config'
|
||||
import { useAppHeaderRouteNames as routeWhiteList } from '~/config'
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
@ -1,2 +1,3 @@
|
||||
|
||||
export const useAppFooterRouteNames= ['home', 'profile']
|
||||
export const useAppHeaderRouteNames= ['home', 'profile','login']
|
||||
|
@ -3,37 +3,69 @@ import {ref, computed, watch} from 'vue';
|
||||
import pinyin from 'pinyin';
|
||||
import countryCode from './data/index.js';
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
import { useRouter } from 'vue-router'
|
||||
definePageMeta({
|
||||
title: '国家地区',
|
||||
i18n: 'countryRegion.title',
|
||||
})
|
||||
const router = useRouter()
|
||||
const { t, locale } = useI18n()
|
||||
const value = ref('');
|
||||
const alphabet = [
|
||||
'#',
|
||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
|
||||
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'
|
||||
];
|
||||
|
||||
// 常用国家的代码列表
|
||||
const frequentCountryCodes = ['CN', 'TW', 'JP', 'US'];
|
||||
|
||||
function groupByPinyinInitial(data) {
|
||||
const grouped = {};
|
||||
|
||||
// 先处理常用国家
|
||||
grouped['#'] = [];
|
||||
data.forEach(country => {
|
||||
// 根据当前语言选择对应的国家名称
|
||||
const countryName = locale.value === 'zh-CN' ? country.cn :
|
||||
locale.value === 'zh-TW' ? country.tw :
|
||||
locale.value === 'ja-JP' ? country.ja :
|
||||
country.en;
|
||||
|
||||
const initial = locale.value === 'ja-JP' ? '' :
|
||||
locale.value === 'zh-CN' || locale.value === 'zh-TW' ?
|
||||
pinyin(countryName, {style: pinyin.STYLE_FIRST_LETTER})[0][0].toUpperCase() :
|
||||
countryName.charAt(0).toUpperCase();
|
||||
|
||||
if (!grouped[initial]) {
|
||||
grouped[initial] = [];
|
||||
if (frequentCountryCodes.includes(country.code)) {
|
||||
const countryName = locale.value === 'zh-CN' ? country.cn :
|
||||
locale.value === 'zh-TW' ? country.tw :
|
||||
locale.value === 'ja-JP' ? country.ja :
|
||||
country.en;
|
||||
grouped['#'].push({
|
||||
...country,
|
||||
displayName: countryName
|
||||
});
|
||||
}
|
||||
grouped[initial].push({
|
||||
...country,
|
||||
displayName: countryName
|
||||
});
|
||||
});
|
||||
|
||||
// 处理其他国家
|
||||
data.forEach(country => {
|
||||
if (!frequentCountryCodes.includes(country.code)) {
|
||||
const countryName = locale.value === 'zh-CN' ? country.cn :
|
||||
locale.value === 'zh-TW' ? country.tw :
|
||||
locale.value === 'ja-JP' ? country.ja :
|
||||
country.en;
|
||||
|
||||
const initial = locale.value === 'ja-JP' ? '' :
|
||||
locale.value === 'zh-CN' || locale.value === 'zh-TW' ?
|
||||
pinyin(countryName, {style: pinyin.STYLE_FIRST_LETTER})[0][0].toUpperCase() :
|
||||
countryName.charAt(0).toUpperCase();
|
||||
|
||||
if (!grouped[initial]) {
|
||||
grouped[initial] = [];
|
||||
}
|
||||
grouped[initial].push({
|
||||
...country,
|
||||
displayName: countryName
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
if (locale.value === 'ja-JP') {
|
||||
// 日文环境下按照片假名排序
|
||||
grouped[''] = grouped[''].sort((a, b) => a.displayName.localeCompare(b.displayName, 'ja-JP'));
|
||||
}
|
||||
|
||||
return grouped;
|
||||
}
|
||||
|
||||
@ -59,6 +91,16 @@ const searchCountry = computed(() => {
|
||||
|
||||
const showIndexBar = computed(() => locale.value !== 'ja-JP')
|
||||
|
||||
const handleCountrySelect = (country) => {
|
||||
router.push({
|
||||
path: '/login',
|
||||
query: {
|
||||
zone: country.zone,
|
||||
countryName: country.displayName
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
initData()
|
||||
|
||||
// 监听语言变化,重新初始化数据
|
||||
@ -78,20 +120,58 @@ watch(locale, () => {
|
||||
:sticky-offset-top="55"
|
||||
:index-list="alphabet"
|
||||
>
|
||||
<!-- 常用国家分类 -->
|
||||
<van-index-anchor index="#">{{ t('countryRegion.frequentCountry') }}</van-index-anchor>
|
||||
<van-cell
|
||||
v-for="country in searchCountry['#']"
|
||||
:key="country.code"
|
||||
:title="country.displayName"
|
||||
@click="handleCountrySelect(country)"
|
||||
clickable
|
||||
>
|
||||
<div class="pr-[25px]"> +{{ country.zone }}</div>
|
||||
</van-cell>
|
||||
|
||||
<!-- 其他国家按字母分类 -->
|
||||
<template v-for="(countries, index) in searchCountry" :key="index">
|
||||
<van-index-anchor
|
||||
:index="index"
|
||||
></van-index-anchor>
|
||||
<van-cell v-for="country in countries" :key="country.code" :title="country.displayName">
|
||||
<div class="pr-[25px]"> +{{ country.zone }}</div>
|
||||
</van-cell>
|
||||
<template v-if="index !== '#'">
|
||||
<van-index-anchor
|
||||
:index="index"
|
||||
></van-index-anchor>
|
||||
<van-cell
|
||||
v-for="country in countries"
|
||||
:key="country.code"
|
||||
:title="country.displayName"
|
||||
@click="handleCountrySelect(country)"
|
||||
clickable
|
||||
>
|
||||
<div class="pr-[25px]"> +{{ country.zone }}</div>
|
||||
</van-cell>
|
||||
</template>
|
||||
</template>
|
||||
</van-index-bar>
|
||||
|
||||
<div v-else>
|
||||
<van-cell v-for="country in Object.values(searchCountry).flat()"
|
||||
:key="country.code"
|
||||
:title="country.displayName">
|
||||
<div class="mb-4">
|
||||
<div class="px-4 py-2 text-gray-600">{{ t('countryRegion.frequentCountry') }}</div>
|
||||
<van-cell
|
||||
v-for="country in searchCountry['#']"
|
||||
:key="country.code"
|
||||
:title="country.displayName"
|
||||
@click="handleCountrySelect(country)"
|
||||
clickable
|
||||
>
|
||||
<div class="pr-[25px]"> +{{ country.zone }}</div>
|
||||
</van-cell>
|
||||
</div>
|
||||
|
||||
<van-cell
|
||||
v-for="country in Object.values(searchCountry).flat().filter(c => !frequentCountryCodes.includes(c.code))"
|
||||
:key="country.code"
|
||||
:title="country.displayName"
|
||||
@click="handleCountrySelect(country)"
|
||||
clickable
|
||||
>
|
||||
<div class="pr-[25px]"> +{{ country.zone }}</div>
|
||||
</van-cell>
|
||||
</div>
|
||||
|
@ -1,16 +1,78 @@
|
||||
<script setup>
|
||||
import { useRouter } from 'vue-router';
|
||||
import { useRouter, useRoute } from 'vue-router';
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import countryCode from '../countryRegion/data/index.js'
|
||||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const { locale } = useI18n()
|
||||
|
||||
definePageMeta({
|
||||
layout: 'login',
|
||||
title: '登录',
|
||||
i18n: 'login.title',
|
||||
})
|
||||
|
||||
function goToPage() {
|
||||
router.push('/countryRegion');
|
||||
}
|
||||
const phoneNum=ref('')
|
||||
const code=ref('')
|
||||
const pane=ref(0)
|
||||
|
||||
const phoneNum = ref('')
|
||||
const code = ref('')
|
||||
const pane = ref(0)
|
||||
const showKeyboard = ref(true);
|
||||
// 根据语言获取默认国家
|
||||
const getDefaultCountry = () => {
|
||||
let defaultCode = 'CN' // 默认中国大陆
|
||||
switch (locale.value) {
|
||||
case 'zh-CN':
|
||||
defaultCode = 'CN'
|
||||
break
|
||||
case 'zh-TW':
|
||||
defaultCode = 'TW'
|
||||
break
|
||||
case 'ja-JP':
|
||||
defaultCode = 'JP'
|
||||
break
|
||||
case 'en-US':
|
||||
defaultCode = 'US'
|
||||
break
|
||||
}
|
||||
|
||||
const country = countryCode.find(c => c.code === defaultCode)
|
||||
return {
|
||||
zone: country.zone,
|
||||
name: locale.value === 'zh-CN' ? country.cn :
|
||||
locale.value === 'zh-TW' ? country.tw :
|
||||
locale.value === 'ja-JP' ? country.ja :
|
||||
country.en
|
||||
}
|
||||
}
|
||||
|
||||
const defaultCountry = getDefaultCountry()
|
||||
|
||||
// 获取选择的国家信息
|
||||
const selectedZone = ref(route.query.zone || defaultCountry.zone)
|
||||
const selectedCountry = ref(route.query.countryName || defaultCountry.name)
|
||||
|
||||
// 监听语言变化,更新默认国家
|
||||
watch(locale, () => {
|
||||
if (!route.query.zone) {
|
||||
const newDefault = getDefaultCountry()
|
||||
selectedZone.value = newDefault.zone
|
||||
selectedCountry.value = newDefault.name
|
||||
}
|
||||
})
|
||||
|
||||
const getCode = () => {
|
||||
pane.value = 1
|
||||
}
|
||||
const goBack = () => {
|
||||
code.value = ''
|
||||
pane.value = 0
|
||||
}
|
||||
const goLogin = () => {
|
||||
router.push('/realAuth');
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@ -18,19 +80,19 @@ const pane=ref(0)
|
||||
<div class="w-full flex justify-center mb-[100px]">
|
||||
<img class="h-[105px] w-[189px]" src="@/static/images/ghfggff.png" alt="">
|
||||
</div>
|
||||
<div v-if="pane===0">
|
||||
<div v-if="pane === 0">
|
||||
<div class="">
|
||||
<div class="w-full flex justify-between" @click="goToPage">
|
||||
<div class="text-[16px] text-[#000]">
|
||||
中国(大陆)
|
||||
{{ selectedCountry }}
|
||||
</div>
|
||||
<div><van-icon color="#777" name="arrow" size="14" /></div>
|
||||
</div>
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field v-model="phoneNum" clearable placeholder="请输入手机号">
|
||||
<van-field v-model="phoneNum" clearable :placeholder="$t('login.phonePlaceholder')">
|
||||
<template #label>
|
||||
<div class="text-[16px] text-[#1A1A1A] flex align-center justify-start">
|
||||
+86
|
||||
+{{ selectedZone }}
|
||||
</div>
|
||||
</template>
|
||||
</van-field>
|
||||
@ -38,39 +100,45 @@ const pane=ref(0)
|
||||
<div />
|
||||
</div>
|
||||
<div class="mt-[55px]">
|
||||
<van-button v-if="phoneNum" type="primary" block style="height: 48px" >获取验证码</van-button>
|
||||
<van-button v-else type="primary" color="#D3D3D3" block style="height: 48px" >获取验证码</van-button>
|
||||
<van-button v-if="phoneNum" type="primary" block style="height: 48px" @click="getCode">{{ $t('login.getCode')
|
||||
}}</van-button>
|
||||
<van-button v-else type="primary" color="#D3D3D3" block style="height: 48px">{{ $t('login.getCode')
|
||||
}}</van-button>
|
||||
</div>
|
||||
</div>
|
||||
<div v-else>
|
||||
<div class="flex mb-[16px]">
|
||||
<div class="text-[16px] text-[#BDBDBD] mr-[10px]">已发送验证码至</div>
|
||||
<div class="text-[16px] text-[#000]">15834362333</div>
|
||||
<div class="text-[16px] text-[#BDBDBD] mr-[10px]">{{ $t('login.hasSendTo') }}</div>
|
||||
<div class="text-[16px] text-[#000]">+{{ selectedZone }} {{ phoneNum }}</div>
|
||||
</div>
|
||||
<van-password-input
|
||||
:value="code"
|
||||
:gutter="10"
|
||||
focused
|
||||
/>
|
||||
<van-password-input :value="code" :gutter="10" :mask="false" focused @focus="showKeyboard = true" />
|
||||
<van-number-keyboard v-model="code" :show="showKeyboard" @blur="showKeyboard = false" />
|
||||
<div class="text-#2B53AC text-14px">
|
||||
重新发送
|
||||
{{ $t('login.reSend') }}
|
||||
</div>
|
||||
<div class="mt-[17px]">
|
||||
<van-button v-if="code.length === 6" type="primary" block style="height: 48px" >登录</van-button>
|
||||
<van-button v-else type="primary" color="#D3D3D3" block style="height: 48px" >登录</van-button>
|
||||
<van-button v-if="code.length === 6" type="primary" block style="height: 48px" @click="goLogin">{{
|
||||
$t('login.login')
|
||||
}}</van-button>
|
||||
<van-button v-else type="primary" color="#D3D3D3" block style="height: 48px">{{ $t('login.login') }}</van-button>
|
||||
</div>
|
||||
<div class="mt-[17px]">
|
||||
<van-button type="primary" @click="goBack" block style="height: 48px">{{ $t('login.back') }}</van-button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped lang="scss">
|
||||
:deep(.van-cell.van-field){
|
||||
:deep(.van-cell.van-field) {
|
||||
padding-left: 0;
|
||||
}
|
||||
:deep(.van-password-input){
|
||||
|
||||
:deep(.van-password-input) {
|
||||
margin: 0;
|
||||
}
|
||||
:deep(.van-password-input__item){
|
||||
|
||||
:deep(.van-password-input__item) {
|
||||
border: 1px solid #E5E5E5;
|
||||
width: 41px;
|
||||
height: 41px;
|
||||
|
@ -1,37 +1,119 @@
|
||||
<script setup>
|
||||
import { useRouter, useRoute } from 'vue-router';
|
||||
import { useI18n } from 'vue-i18n'
|
||||
|
||||
const router = useRouter();
|
||||
const route = useRoute();
|
||||
const showPicker = ref(false);
|
||||
const pickerValue = ref([]);
|
||||
const gender = ref('男')
|
||||
const birthday = ref('')
|
||||
const birthdayDate = ref([])
|
||||
const showBirthdayPicker = ref(false)
|
||||
const minDate = new Date(1950, 0, 1)
|
||||
const maxDate = new Date(2025, 12, 31)
|
||||
|
||||
const { t } = useI18n()
|
||||
|
||||
const columns = computed(() => [
|
||||
{ text: t('realAuth.male'), value: t('realAuth.male') },
|
||||
{ text: t('realAuth.female'), value: t('realAuth.female') },
|
||||
]);
|
||||
const onConfirm = ({ selectedValues, selectedOptions }) => {
|
||||
pickerValue.value = selectedValues
|
||||
gender.value = selectedOptions[0].text
|
||||
showPicker.value = false
|
||||
}
|
||||
const onBirthdayConfirm = (value) => {
|
||||
console.log(value)
|
||||
birthdayDate.value = value.selectedValues
|
||||
birthday.value = value.selectedValues.join('-')
|
||||
showBirthdayPicker.value = false
|
||||
}
|
||||
definePageMeta({
|
||||
title: '实名认证',
|
||||
i18n: 'realAuth.title',
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="px-[31px] bg-#fff w-100vw h-100vh pt-[46px]">
|
||||
<van-tabs>
|
||||
<van-tab title="大陆居民" class="pt-[80px]">
|
||||
<div class="text-[#BDBDBD] text-[16px] mb-[34px]">请填写身份证相关信息</div>
|
||||
<div class="mb-[100px]">
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field label="身份证号" clearable placeholder="请输入身份证号"></van-field>
|
||||
<div class="px-[31px] bg-#fff w-100vw h-100vh pt-[46px]">
|
||||
<van-tabs animated swipeable>
|
||||
<van-tab :title="$t('realAuth.cnTab')" class="pt-[80px]">
|
||||
<div class="text-[#BDBDBD] text-[16px] mb-[34px]">{{ $t('realAuth.cnTabDesc') }}</div>
|
||||
<div class="mb-[100px]">
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field :label="$t('realAuth.idCard')" clearable
|
||||
:placeholder="$t('realAuth.idCardPlaceholder')"></van-field>
|
||||
</div>
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field :label="$t('realAuth.name')" clearable :placeholder="$t('realAuth.namePlaceholder')"></van-field>
|
||||
</div>
|
||||
</div>
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field label="姓名" clearable placeholder="请输入姓名"></van-field>
|
||||
<div class="flex justify-between">
|
||||
<van-button style="width: 151px;height: 48px" color="#E9F1F8">
|
||||
<div class="text-#2B53AC text-16px">{{ $t('realAuth.cancel') }}</div>
|
||||
</van-button>
|
||||
<van-button style="width: 151px;height: 48px" color="#2B53AC">
|
||||
<div class="text-#FFFFFF text-16px">{{ $t('realAuth.confirm') }}</div>
|
||||
</van-button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="flex justify-between">
|
||||
<van-button style="width: 151px;height: 48px" color="#E9F1F8">
|
||||
<div class="text-#2B53AC text-16px">取消</div>
|
||||
</van-button>
|
||||
<van-button style="width: 151px;height: 48px" color="#2B53AC">
|
||||
<div class="text-#FFFFFF text-16px">确定</div>
|
||||
</van-button>
|
||||
</div>
|
||||
</van-tab>
|
||||
<van-tab title="非大陆居民">内容 2</van-tab>
|
||||
</van-tabs>
|
||||
</div>
|
||||
</van-tab>
|
||||
<van-tab :title="$t('realAuth.otherTab')" class="pt-[80px]">
|
||||
<div class="text-[#BDBDBD] text-[16px] mb-[34px]">{{ $t('realAuth.otherTabDesc') }}</div>
|
||||
<div class="mb-[100px]">
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field :label="$t('realAuth.name')" clearable :placeholder="$t('realAuth.namePlaceholder')"></van-field>
|
||||
</div>
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field v-model="gender" is-link readonly name="picker" :label="$t('realAuth.gender')"
|
||||
@click="showPicker = true" />
|
||||
|
||||
</div>
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field v-model="birthday" is-link readonly name="birthdayPicker" :label="$t('realAuth.birthday')"
|
||||
:placeholder="$t('realAuth.birthdayPlaceholder')" @click="showBirthdayPicker = true" />
|
||||
|
||||
</div>
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field :label="$t('realAuth.adress')" clearable
|
||||
:placeholder="$t('realAuth.adressPlaceholder')"></van-field>
|
||||
</div>
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field :label="$t('realAuth.bank')" clearable :placeholder="$t('realAuth.bankPlaceholder')"></van-field>
|
||||
</div>
|
||||
<div class="border-b-[1.7px] mt-[8px]">
|
||||
<van-field :label="$t('realAuth.bankCard')" clearable
|
||||
:placeholder="$t('realAuth.bankCardPlaceholder')"></van-field>
|
||||
</div>
|
||||
<div class="flex justify-between mt-[100px]">
|
||||
<van-button style="width: 151px;height: 48px" color="#E9F1F8">
|
||||
<div class="text-#2B53AC text-16px">{{ $t('realAuth.cancel') }}</div>
|
||||
</van-button>
|
||||
<van-button style="width: 151px;height: 48px" color="#2B53AC">
|
||||
<div class="text-#FFFFFF text-16px">{{ $t('realAuth.confirm') }}</div>
|
||||
</van-button>
|
||||
</div>
|
||||
</div>
|
||||
</van-tab>
|
||||
</van-tabs>
|
||||
<van-popup v-model:show="showPicker" destroy-on-close position="bottom">
|
||||
<van-picker :columns="columns" :model-value="pickerValue" @confirm="onConfirm" @cancel="showPicker = false" />
|
||||
</van-popup>
|
||||
<van-popup v-model:show="showBirthdayPicker" destroy-on-close position="bottom">
|
||||
<van-date-picker v-model="birthdayDate" :min-date="minDate" :max-date="maxDate"
|
||||
@cancel="showBirthdayPicker = false" @confirm="onBirthdayConfirm" />
|
||||
</van-popup>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
:deep(.van-tabs__line){
|
||||
:deep(.van-tabs__line) {
|
||||
height: 2px;
|
||||
width: 107px;
|
||||
}
|
||||
|
||||
:deep(.van-cell) {
|
||||
padding-left: 0;
|
||||
}
|
||||
</style>
|
@ -19,10 +19,14 @@
|
||||
"home": "Home",
|
||||
"profile": "Profile"
|
||||
},
|
||||
"unocss_page": {
|
||||
"hello": "Hello {0}",
|
||||
"desc": "This is a simple example of Unocss in action.",
|
||||
"btn_txt": "Button"
|
||||
"login": {
|
||||
"title": "Login",
|
||||
"phonePlaceholder": "Please enter your phone number",
|
||||
"getCode": "Get verification code",
|
||||
"login": "Login",
|
||||
"back": "Back",
|
||||
"hasSendTo": "Verification code has been sent to",
|
||||
"reSend": "Re-send"
|
||||
},
|
||||
"error_page": {
|
||||
"back_btn": "Back",
|
||||
@ -31,20 +35,38 @@
|
||||
"profile_page": {
|
||||
"txt": "WIP"
|
||||
},
|
||||
"keepalive_page": {
|
||||
"label": "The current component will be cached"
|
||||
},
|
||||
"counter_page": {
|
||||
"label": "This is a simple example of persisting Pinia state. To verify its effectiveness, you can refresh the interface and observe it.",
|
||||
"label_num": "Number",
|
||||
"btn_add": "Add"
|
||||
},
|
||||
"prose_page": {
|
||||
"btn_fetch": "Fetch",
|
||||
"btn_clear": "Clear",
|
||||
"btn_empty_desc": "No data"
|
||||
},
|
||||
"countryRegion": {
|
||||
"searchPlaceholder": "Please enter the country and region"
|
||||
"title": "Country and Region",
|
||||
"searchPlaceholder": "Please enter the country and region",
|
||||
"frequentCountry": "Frequent"
|
||||
},
|
||||
"realAuth": {
|
||||
"title": "Real-name Authentication",
|
||||
"cnTab": "Mainland Residents",
|
||||
"otherTab": "Non-Mainland Residents",
|
||||
"cnTabDesc": "Please fill in ID card information",
|
||||
"otherTabDesc": "Please upload personal information",
|
||||
"idCard": "ID Card Number",
|
||||
"idCardPlaceholder": "Please enter ID card number",
|
||||
"name": "Name",
|
||||
"namePlaceholder": "Please enter your name",
|
||||
"gender": "Gender",
|
||||
"male": "Male",
|
||||
"female": "Female",
|
||||
"birthday": "Date of Birth",
|
||||
"birthdayPlaceholder": "Please enter date of birth",
|
||||
"adress": "Home Address",
|
||||
"adressPlaceholder": "Please enter home address",
|
||||
"bank": "Bank",
|
||||
"bankPlaceholder": "Please select your bank",
|
||||
"bankCard": "Bank Card Number",
|
||||
"bankCardPlaceholder": "Please enter bank card number",
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm"
|
||||
}
|
||||
}
|
||||
|
@ -19,32 +19,51 @@
|
||||
"home": "ホーム",
|
||||
"profile": "マイページ"
|
||||
},
|
||||
"unocss_page": {
|
||||
"hello": "こんにちは {0}",
|
||||
"desc": "これは unocss の簡単な例です。",
|
||||
"btn_txt": "ボタン"
|
||||
"login": {
|
||||
"title": "ログイン",
|
||||
"phonePlaceholder": "携帯番号を入力してください",
|
||||
"getCode": "認証コードを取得",
|
||||
"login": "ログイン",
|
||||
"back": "戻る",
|
||||
"hasSendTo": "認証コードは",
|
||||
"reSend": "再送"
|
||||
},
|
||||
"error_page": {
|
||||
"back_btn": "戻る",
|
||||
"txt": "ページが見つかりません"
|
||||
},
|
||||
"profile_page": {
|
||||
"txt": "未完成"
|
||||
},
|
||||
"keepalive_page": {
|
||||
"label": "このコンポーネントはキャッシュされます"
|
||||
},
|
||||
"counter_page": {
|
||||
"label": "これは Pinia の状態永続化の簡単な例です。有効性を確認するには、ページを更新して観察してください。",
|
||||
"label_num": "数字",
|
||||
"btn_add": "増加"
|
||||
},
|
||||
"prose_page": {
|
||||
"btn_fetch": "取得",
|
||||
"btn_clear": "クリア",
|
||||
"btn_empty_desc": "データなし"
|
||||
},
|
||||
"countryRegion": {
|
||||
"searchPlaceholder": "国と地域を入力してください"
|
||||
"title": "国と地域",
|
||||
"searchPlaceholder": "国と地域を入力してください",
|
||||
"frequentCountry": "よく使う"
|
||||
},
|
||||
"realAuth": {
|
||||
"title": "実名認証",
|
||||
"cnTab": "中国本土住民",
|
||||
"otherTab": "非中国本土住民",
|
||||
"cnTabDesc": "身分証情報を入力してください",
|
||||
"otherTabDesc": "個人情報をアップロードしてください",
|
||||
"idCard": "身分証番号",
|
||||
"idCardPlaceholder": "身分証番号を入力してください",
|
||||
"name": "氏名",
|
||||
"namePlaceholder": "氏名を入力してください",
|
||||
"gender": "性別",
|
||||
"male": "男性",
|
||||
"female": "女性",
|
||||
"birthday": "生年月日",
|
||||
"birthdayPlaceholder": "生年月日を入力してください",
|
||||
"adress": "住所",
|
||||
"adressPlaceholder": "住所を入力してください",
|
||||
"bank": "所属銀行",
|
||||
"bankPlaceholder": "所属銀行を選択してください",
|
||||
"bankCard": "銀行カード番号",
|
||||
"bankCardPlaceholder": "銀行カード番号を入力してください",
|
||||
"cancel": "キャンセル",
|
||||
"confirm": "確定"
|
||||
}
|
||||
}
|
||||
}
|
@ -19,36 +19,55 @@
|
||||
"home": "主页",
|
||||
"profile": "我的"
|
||||
},
|
||||
"login": {
|
||||
"title": "登录",
|
||||
"phonePlaceholder": "请输入手机号",
|
||||
"getCode": "获取验证码",
|
||||
"login": "登录",
|
||||
"back": "返回",
|
||||
"hasSendTo": "已发送验证码至",
|
||||
"reSend": "重新发送"
|
||||
},
|
||||
"profile": {
|
||||
"name": "姓名",
|
||||
"phone": "手机号"
|
||||
},
|
||||
"unocss_page": {
|
||||
"hello": "你好 {0}",
|
||||
"desc": "这是 unocss 一个简单例子。",
|
||||
"btn_txt": "按钮"
|
||||
},
|
||||
"error_page": {
|
||||
"back_btn": "返回",
|
||||
"txt": "没有找到"
|
||||
},
|
||||
"profile_page": {
|
||||
"txt": "未完成"
|
||||
},
|
||||
"keepalive_page": {
|
||||
"label": "当前组件将会被缓存"
|
||||
},
|
||||
"counter_page": {
|
||||
"label": "这是一个简单的持久化 Pinia 状态的例子。为了验证其有效性,你可以刷新界面并观察它。",
|
||||
"label_num": "数字",
|
||||
"btn_add": "增加"
|
||||
},
|
||||
"prose_page": {
|
||||
"btn_fetch": "拉取",
|
||||
"btn_clear": "清空",
|
||||
"btn_empty_desc": "暂无数据"
|
||||
},
|
||||
"countryRegion": {
|
||||
"searchPlaceholder": "请输入国家和地区"
|
||||
"title": "国家地区",
|
||||
"searchPlaceholder": "请输入国家和地区",
|
||||
"frequentCountry": "常用"
|
||||
},
|
||||
"realAuth": {
|
||||
"title": "实名认证",
|
||||
"cnTab": "大陆居民",
|
||||
"otherTab": "非大陆居民",
|
||||
"cnTabDesc": "请填写身份证相关信息",
|
||||
"otherTabDesc": "请上传个人相关信息",
|
||||
"idCard": "身份证号",
|
||||
"idCardPlaceholder": "请输入身份证号",
|
||||
"name": "姓名",
|
||||
"namePlaceholder": "请输入姓名",
|
||||
"gender": "性别",
|
||||
"male": "男",
|
||||
"female": "女",
|
||||
"birthday": "出生日期",
|
||||
"birthdayPlaceholder": "请输入出生日期",
|
||||
"adress":"家庭住址",
|
||||
"adressPlaceholder": "请输入家庭住址",
|
||||
"bank": "所属银行",
|
||||
"bankPlaceholder": "请选择所属银行",
|
||||
"bankCard": "银行卡号码",
|
||||
"bankCardPlaceholder": "请输入银行卡号码",
|
||||
"cancel": "取消",
|
||||
"confirm": "确定"
|
||||
}
|
||||
}
|
@ -19,32 +19,52 @@
|
||||
"home": "首頁",
|
||||
"profile": "我的"
|
||||
},
|
||||
"unocss_page": {
|
||||
"hello": "你好 {0}",
|
||||
"desc": "這是 unocss 一個簡單例子。",
|
||||
"btn_txt": "按鈕"
|
||||
"login": {
|
||||
"title": "登入",
|
||||
"phonePlaceholder": "請輸入手機號",
|
||||
"getCode": "獲取驗證碼",
|
||||
"login": "登入",
|
||||
"back": "返回",
|
||||
"hasSendTo": "已發送驗證碼至",
|
||||
"reSend": "重新發送"
|
||||
},
|
||||
"error_page": {
|
||||
"back_btn": "返回",
|
||||
"txt": "沒有找到"
|
||||
},
|
||||
"profile_page": {
|
||||
"txt": "未完成"
|
||||
},
|
||||
"keepalive_page": {
|
||||
"label": "當前元件將會被快取"
|
||||
},
|
||||
"counter_page": {
|
||||
"label": "這是一個簡單的持久化 Pinia 狀態的例子。為了驗證其有效性,你可以重新整理介面並觀察它。",
|
||||
"label_num": "數字",
|
||||
"btn_add": "增加"
|
||||
},
|
||||
"prose_page": {
|
||||
"btn_fetch": "拉取",
|
||||
"btn_clear": "清空",
|
||||
"btn_empty_desc": "暫無數據"
|
||||
},
|
||||
"countryRegion": {
|
||||
"searchPlaceholder": "請輸入國家和地區"
|
||||
"title": "國家地區",
|
||||
"searchPlaceholder": "請輸入國家和地區",
|
||||
"frequentCountry": "常用"
|
||||
},
|
||||
"realAuth": {
|
||||
"title": "實名認證 ",
|
||||
"cnTab": "大陸居民",
|
||||
"otherTab": "非大陸居民",
|
||||
"cnTabDesc": "請填寫身份證相關信息",
|
||||
"otherTabDesc": "請上傳個人相關信息",
|
||||
"idCard": "身份證號",
|
||||
"idCardPlaceholder": "請輸入身份證號",
|
||||
"name": "姓名",
|
||||
"namePlaceholder": "請輸入姓名",
|
||||
"gender": "性別",
|
||||
"male": "男",
|
||||
"female": "女",
|
||||
"birthday": "出生日期",
|
||||
"birthdayPlaceholder": "請輸入出生日期",
|
||||
"adress":"家庭住址",
|
||||
"adressPlaceholder": "請輸入家庭住址",
|
||||
"bank": "所屬銀行",
|
||||
"bankPlaceholder": "請選擇所屬銀行",
|
||||
"bankCard": "銀行卡號碼",
|
||||
"bankCardPlaceholder": "請輸入銀行卡號碼",
|
||||
"cancel": "取消",
|
||||
"confirm": "確定"
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -147,7 +147,7 @@ export default defineNuxtConfig({
|
||||
// 指定 Nuxt 应用程序的兼容性日期,确保应用程序在未来的 Nuxt 版本中保持稳定性
|
||||
compatibilityDate: '2025-01-09',
|
||||
devServer: {
|
||||
host: 'localhost', // Set the host to 'localhost'
|
||||
host: '0.0.0.0', // Set the host to 'localhost'
|
||||
port: 3000, // Set the port to 3000 or any other port you prefer
|
||||
},
|
||||
})
|
Loading…
Reference in New Issue
Block a user