feat: 国际手机号输入框
This commit is contained in:
@@ -26,6 +26,7 @@
|
||||
"dayjs": "^1.11.10",
|
||||
"echarts": "~5.5.0",
|
||||
"file-saver": "^2.0.5",
|
||||
"intl-tel-input": "^21.2.5",
|
||||
"js-base64": "^3.7.7",
|
||||
"js-cookie": "^3.0.5",
|
||||
"localforage": "^1.10.0",
|
||||
|
||||
252
src/components/IntlTelInput/i18n/en/countries.ts
Normal file
252
src/components/IntlTelInput/i18n/en/countries.ts
Normal file
@@ -0,0 +1,252 @@
|
||||
//* THIS FILE IS AUTO-GENERATED. DO NOT EDIT.
|
||||
export default {
|
||||
af: "Afghanistan",
|
||||
ax: "Åland Islands",
|
||||
al: "Albania",
|
||||
dz: "Algeria",
|
||||
as: "American Samoa",
|
||||
ad: "Andorra",
|
||||
ao: "Angola",
|
||||
ai: "Anguilla",
|
||||
aq: "Antarctica",
|
||||
ag: "Antigua & Barbuda",
|
||||
ar: "Argentina",
|
||||
am: "Armenia",
|
||||
aw: "Aruba",
|
||||
au: "Australia",
|
||||
at: "Austria",
|
||||
az: "Azerbaijan",
|
||||
bs: "Bahamas",
|
||||
bh: "Bahrain",
|
||||
bd: "Bangladesh",
|
||||
bb: "Barbados",
|
||||
by: "Belarus",
|
||||
be: "Belgium",
|
||||
bz: "Belize",
|
||||
bj: "Benin",
|
||||
bm: "Bermuda",
|
||||
bt: "Bhutan",
|
||||
bo: "Bolivia",
|
||||
ba: "Bosnia & Herzegovina",
|
||||
bw: "Botswana",
|
||||
bv: "Bouvet Island",
|
||||
br: "Brazil",
|
||||
io: "British Indian Ocean Territory",
|
||||
vg: "British Virgin Islands",
|
||||
bn: "Brunei",
|
||||
bg: "Bulgaria",
|
||||
bf: "Burkina Faso",
|
||||
bi: "Burundi",
|
||||
kh: "Cambodia",
|
||||
cm: "Cameroon",
|
||||
ca: "Canada",
|
||||
cv: "Cape Verde",
|
||||
bq: "Caribbean Netherlands",
|
||||
ky: "Cayman Islands",
|
||||
cf: "Central African Republic",
|
||||
td: "Chad",
|
||||
cl: "Chile",
|
||||
cn: "China",
|
||||
cx: "Christmas Island",
|
||||
cc: "Cocos (Keeling) Islands",
|
||||
co: "Colombia",
|
||||
km: "Comoros",
|
||||
cg: "Congo - Brazzaville",
|
||||
cd: "Congo - Kinshasa",
|
||||
ck: "Cook Islands",
|
||||
cr: "Costa Rica",
|
||||
ci: "Côte d’Ivoire",
|
||||
hr: "Croatia",
|
||||
cu: "Cuba",
|
||||
cw: "Curaçao",
|
||||
cy: "Cyprus",
|
||||
cz: "Czechia",
|
||||
dk: "Denmark",
|
||||
dj: "Djibouti",
|
||||
dm: "Dominica",
|
||||
do: "Dominican Republic",
|
||||
ec: "Ecuador",
|
||||
eg: "Egypt",
|
||||
sv: "El Salvador",
|
||||
gq: "Equatorial Guinea",
|
||||
er: "Eritrea",
|
||||
ee: "Estonia",
|
||||
sz: "Eswatini",
|
||||
et: "Ethiopia",
|
||||
fk: "Falkland Islands",
|
||||
fo: "Faroe Islands",
|
||||
fj: "Fiji",
|
||||
fi: "Finland",
|
||||
fr: "France",
|
||||
gf: "French Guiana",
|
||||
pf: "French Polynesia",
|
||||
tf: "French Southern Territories",
|
||||
ga: "Gabon",
|
||||
gm: "Gambia",
|
||||
ge: "Georgia",
|
||||
de: "Germany",
|
||||
gh: "Ghana",
|
||||
gi: "Gibraltar",
|
||||
gr: "Greece",
|
||||
gl: "Greenland",
|
||||
gd: "Grenada",
|
||||
gp: "Guadeloupe",
|
||||
gu: "Guam",
|
||||
gt: "Guatemala",
|
||||
gg: "Guernsey",
|
||||
gn: "Guinea",
|
||||
gw: "Guinea-Bissau",
|
||||
gy: "Guyana",
|
||||
ht: "Haiti",
|
||||
hm: "Heard & McDonald Islands",
|
||||
hn: "Honduras",
|
||||
hk: "Hong Kong SAR China",
|
||||
hu: "Hungary",
|
||||
is: "Iceland",
|
||||
in: "India",
|
||||
id: "Indonesia",
|
||||
ir: "Iran",
|
||||
iq: "Iraq",
|
||||
ie: "Ireland",
|
||||
im: "Isle of Man",
|
||||
il: "Israel",
|
||||
it: "Italy",
|
||||
jm: "Jamaica",
|
||||
jp: "Japan",
|
||||
je: "Jersey",
|
||||
jo: "Jordan",
|
||||
kz: "Kazakhstan",
|
||||
ke: "Kenya",
|
||||
ki: "Kiribati",
|
||||
kw: "Kuwait",
|
||||
kg: "Kyrgyzstan",
|
||||
la: "Laos",
|
||||
lv: "Latvia",
|
||||
lb: "Lebanon",
|
||||
ls: "Lesotho",
|
||||
lr: "Liberia",
|
||||
ly: "Libya",
|
||||
li: "Liechtenstein",
|
||||
lt: "Lithuania",
|
||||
lu: "Luxembourg",
|
||||
mo: "Macao SAR China",
|
||||
mg: "Madagascar",
|
||||
mw: "Malawi",
|
||||
my: "Malaysia",
|
||||
mv: "Maldives",
|
||||
ml: "Mali",
|
||||
mt: "Malta",
|
||||
mh: "Marshall Islands",
|
||||
mq: "Martinique",
|
||||
mr: "Mauritania",
|
||||
mu: "Mauritius",
|
||||
yt: "Mayotte",
|
||||
mx: "Mexico",
|
||||
fm: "Micronesia",
|
||||
md: "Moldova",
|
||||
mc: "Monaco",
|
||||
mn: "Mongolia",
|
||||
me: "Montenegro",
|
||||
ms: "Montserrat",
|
||||
ma: "Morocco",
|
||||
mz: "Mozambique",
|
||||
mm: "Myanmar (Burma)",
|
||||
na: "Namibia",
|
||||
nr: "Nauru",
|
||||
np: "Nepal",
|
||||
nl: "Netherlands",
|
||||
nc: "New Caledonia",
|
||||
nz: "New Zealand",
|
||||
ni: "Nicaragua",
|
||||
ne: "Niger",
|
||||
ng: "Nigeria",
|
||||
nu: "Niue",
|
||||
nf: "Norfolk Island",
|
||||
kp: "North Korea",
|
||||
mk: "North Macedonia",
|
||||
mp: "Northern Mariana Islands",
|
||||
no: "Norway",
|
||||
om: "Oman",
|
||||
pk: "Pakistan",
|
||||
pw: "Palau",
|
||||
ps: "Palestinian Territories",
|
||||
pa: "Panama",
|
||||
pg: "Papua New Guinea",
|
||||
py: "Paraguay",
|
||||
pe: "Peru",
|
||||
ph: "Philippines",
|
||||
pn: "Pitcairn Islands",
|
||||
pl: "Poland",
|
||||
pt: "Portugal",
|
||||
pr: "Puerto Rico",
|
||||
qa: "Qatar",
|
||||
re: "Réunion",
|
||||
ro: "Romania",
|
||||
ru: "Russia",
|
||||
rw: "Rwanda",
|
||||
ws: "Samoa",
|
||||
sm: "San Marino",
|
||||
st: "São Tomé & Príncipe",
|
||||
sa: "Saudi Arabia",
|
||||
sn: "Senegal",
|
||||
rs: "Serbia",
|
||||
sc: "Seychelles",
|
||||
sl: "Sierra Leone",
|
||||
sg: "Singapore",
|
||||
sx: "Sint Maarten",
|
||||
sk: "Slovakia",
|
||||
si: "Slovenia",
|
||||
sb: "Solomon Islands",
|
||||
so: "Somalia",
|
||||
za: "South Africa",
|
||||
gs: "South Georgia & South Sandwich Islands",
|
||||
kr: "South Korea",
|
||||
ss: "South Sudan",
|
||||
es: "Spain",
|
||||
lk: "Sri Lanka",
|
||||
bl: "St. Barthélemy",
|
||||
sh: "St. Helena",
|
||||
kn: "St. Kitts & Nevis",
|
||||
lc: "St. Lucia",
|
||||
mf: "St. Martin",
|
||||
pm: "St. Pierre & Miquelon",
|
||||
vc: "St. Vincent & Grenadines",
|
||||
sd: "Sudan",
|
||||
sr: "Suriname",
|
||||
sj: "Svalbard & Jan Mayen",
|
||||
se: "Sweden",
|
||||
ch: "Switzerland",
|
||||
sy: "Syria",
|
||||
tw: "Taiwan",
|
||||
tj: "Tajikistan",
|
||||
tz: "Tanzania",
|
||||
th: "Thailand",
|
||||
tl: "Timor-Leste",
|
||||
tg: "Togo",
|
||||
tk: "Tokelau",
|
||||
to: "Tonga",
|
||||
tt: "Trinidad & Tobago",
|
||||
tn: "Tunisia",
|
||||
tr: "Turkey",
|
||||
tm: "Turkmenistan",
|
||||
tc: "Turks & Caicos Islands",
|
||||
tv: "Tuvalu",
|
||||
um: "U.S. Outlying Islands",
|
||||
vi: "U.S. Virgin Islands",
|
||||
ug: "Uganda",
|
||||
ua: "Ukraine",
|
||||
ae: "United Arab Emirates",
|
||||
gb: "United Kingdom",
|
||||
us: "United States",
|
||||
uy: "Uruguay",
|
||||
uz: "Uzbekistan",
|
||||
vu: "Vanuatu",
|
||||
va: "Vatican City",
|
||||
ve: "Venezuela",
|
||||
vn: "Vietnam",
|
||||
wf: "Wallis & Futuna",
|
||||
eh: "Western Sahara",
|
||||
ye: "Yemen",
|
||||
zm: "Zambia",
|
||||
zw: "Zimbabwe",
|
||||
};
|
||||
4
src/components/IntlTelInput/i18n/en/index.ts
Normal file
4
src/components/IntlTelInput/i18n/en/index.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import countryTranslations from './countries';
|
||||
import interfaceTranslations from './interface';
|
||||
|
||||
export default { ...countryTranslations, ...interfaceTranslations };
|
||||
14
src/components/IntlTelInput/i18n/en/interface.ts
Normal file
14
src/components/IntlTelInput/i18n/en/interface.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
//* English. Translated by: Jack O'Connor (jackocnr).
|
||||
export default {
|
||||
selectedCountryAriaLabel: "Selected country",
|
||||
noCountrySelected: "No country selected",
|
||||
countryListAriaLabel: "List of countries",
|
||||
searchPlaceholder: "Search",
|
||||
zeroSearchResults: "No results found",
|
||||
oneSearchResult: "1 result found",
|
||||
multipleSearchResults: "${count} results found",
|
||||
|
||||
// additional countries (not supported by country-list library)
|
||||
ac: "Ascension Island",
|
||||
xk: "Kosovo",
|
||||
};
|
||||
252
src/components/IntlTelInput/i18n/zh/countries.ts
Normal file
252
src/components/IntlTelInput/i18n/zh/countries.ts
Normal file
@@ -0,0 +1,252 @@
|
||||
//* THIS FILE IS AUTO-GENERATED. DO NOT EDIT.
|
||||
export default {
|
||||
al: "阿尔巴尼亚",
|
||||
dz: "阿尔及利亚",
|
||||
af: "阿富汗",
|
||||
ar: "阿根廷",
|
||||
ae: "阿拉伯联合酋长国",
|
||||
aw: "阿鲁巴",
|
||||
om: "阿曼",
|
||||
az: "阿塞拜疆",
|
||||
eg: "埃及",
|
||||
et: "埃塞俄比亚",
|
||||
ie: "爱尔兰",
|
||||
ee: "爱沙尼亚",
|
||||
ad: "安道尔",
|
||||
ao: "安哥拉",
|
||||
ai: "安圭拉",
|
||||
ag: "安提瓜和巴布达",
|
||||
at: "奥地利",
|
||||
ax: "奥兰群岛",
|
||||
au: "澳大利亚",
|
||||
bb: "巴巴多斯",
|
||||
pg: "巴布亚新几内亚",
|
||||
bs: "巴哈马",
|
||||
pk: "巴基斯坦",
|
||||
py: "巴拉圭",
|
||||
ps: "巴勒斯坦领土",
|
||||
bh: "巴林",
|
||||
pa: "巴拿马",
|
||||
br: "巴西",
|
||||
by: "白俄罗斯",
|
||||
bm: "百慕大",
|
||||
bg: "保加利亚",
|
||||
mp: "北马里亚纳群岛",
|
||||
mk: "北马其顿",
|
||||
bj: "贝宁",
|
||||
be: "比利时",
|
||||
is: "冰岛",
|
||||
pr: "波多黎各",
|
||||
pl: "波兰",
|
||||
ba: "波斯尼亚和黑塞哥维那",
|
||||
bo: "玻利维亚",
|
||||
bz: "伯利兹",
|
||||
bw: "博茨瓦纳",
|
||||
bt: "不丹",
|
||||
bf: "布基纳法索",
|
||||
bi: "布隆迪",
|
||||
bv: "布韦岛",
|
||||
kp: "朝鲜",
|
||||
gq: "赤道几内亚",
|
||||
dk: "丹麦",
|
||||
de: "德国",
|
||||
tl: "东帝汶",
|
||||
tg: "多哥",
|
||||
do: "多米尼加共和国",
|
||||
dm: "多米尼克",
|
||||
ru: "俄罗斯",
|
||||
ec: "厄瓜多尔",
|
||||
er: "厄立特里亚",
|
||||
fr: "法国",
|
||||
fo: "法罗群岛",
|
||||
pf: "法属波利尼西亚",
|
||||
gf: "法属圭亚那",
|
||||
tf: "法属南部领地",
|
||||
mf: "法属圣马丁",
|
||||
va: "梵蒂冈",
|
||||
ph: "菲律宾",
|
||||
fj: "斐济",
|
||||
fi: "芬兰",
|
||||
cv: "佛得角",
|
||||
fk: "福克兰群岛",
|
||||
gm: "冈比亚",
|
||||
cg: "刚果(布)",
|
||||
cd: "刚果(金)",
|
||||
co: "哥伦比亚",
|
||||
cr: "哥斯达黎加",
|
||||
gd: "格林纳达",
|
||||
gl: "格陵兰",
|
||||
ge: "格鲁吉亚",
|
||||
gg: "根西岛",
|
||||
cu: "古巴",
|
||||
gp: "瓜德罗普",
|
||||
gu: "关岛",
|
||||
gy: "圭亚那",
|
||||
kz: "哈萨克斯坦",
|
||||
ht: "海地",
|
||||
kr: "韩国",
|
||||
nl: "荷兰",
|
||||
bq: "荷属加勒比区",
|
||||
sx: "荷属圣马丁",
|
||||
hm: "赫德岛和麦克唐纳群岛",
|
||||
me: "黑山",
|
||||
hn: "洪都拉斯",
|
||||
ki: "基里巴斯",
|
||||
dj: "吉布提",
|
||||
kg: "吉尔吉斯斯坦",
|
||||
gn: "几内亚",
|
||||
gw: "几内亚比绍",
|
||||
ca: "加拿大",
|
||||
gh: "加纳",
|
||||
ga: "加蓬",
|
||||
kh: "柬埔寨",
|
||||
cz: "捷克",
|
||||
zw: "津巴布韦",
|
||||
cm: "喀麦隆",
|
||||
qa: "卡塔尔",
|
||||
ky: "开曼群岛",
|
||||
cc: "科科斯(基林)群岛",
|
||||
km: "科摩罗",
|
||||
ci: "科特迪瓦",
|
||||
kw: "科威特",
|
||||
hr: "克罗地亚",
|
||||
ke: "肯尼亚",
|
||||
ck: "库克群岛",
|
||||
cw: "库拉索",
|
||||
lv: "拉脱维亚",
|
||||
ls: "莱索托",
|
||||
la: "老挝",
|
||||
lb: "黎巴嫩",
|
||||
lt: "立陶宛",
|
||||
lr: "利比里亚",
|
||||
ly: "利比亚",
|
||||
li: "列支敦士登",
|
||||
re: "留尼汪",
|
||||
lu: "卢森堡",
|
||||
rw: "卢旺达",
|
||||
ro: "罗马尼亚",
|
||||
mg: "马达加斯加",
|
||||
im: "马恩岛",
|
||||
mv: "马尔代夫",
|
||||
mt: "马耳他",
|
||||
mw: "马拉维",
|
||||
my: "马来西亚",
|
||||
ml: "马里",
|
||||
mh: "马绍尔群岛",
|
||||
mq: "马提尼克",
|
||||
yt: "马约特",
|
||||
mu: "毛里求斯",
|
||||
mr: "毛里塔尼亚",
|
||||
us: "美国",
|
||||
um: "美国本土外小岛屿",
|
||||
as: "美属萨摩亚",
|
||||
vi: "美属维尔京群岛",
|
||||
mn: "蒙古",
|
||||
ms: "蒙特塞拉特",
|
||||
bd: "孟加拉国",
|
||||
pe: "秘鲁",
|
||||
fm: "密克罗尼西亚",
|
||||
mm: "缅甸",
|
||||
md: "摩尔多瓦",
|
||||
ma: "摩洛哥",
|
||||
mc: "摩纳哥",
|
||||
mz: "莫桑比克",
|
||||
mx: "墨西哥",
|
||||
na: "纳米比亚",
|
||||
za: "南非",
|
||||
aq: "南极洲",
|
||||
gs: "南乔治亚和南桑威奇群岛",
|
||||
ss: "南苏丹",
|
||||
nr: "瑙鲁",
|
||||
ni: "尼加拉瓜",
|
||||
np: "尼泊尔",
|
||||
ne: "尼日尔",
|
||||
ng: "尼日利亚",
|
||||
nu: "纽埃",
|
||||
no: "挪威",
|
||||
nf: "诺福克岛",
|
||||
pw: "帕劳",
|
||||
pn: "皮特凯恩群岛",
|
||||
pt: "葡萄牙",
|
||||
jp: "日本",
|
||||
se: "瑞典",
|
||||
ch: "瑞士",
|
||||
sv: "萨尔瓦多",
|
||||
ws: "萨摩亚",
|
||||
rs: "塞尔维亚",
|
||||
sl: "塞拉利昂",
|
||||
sn: "塞内加尔",
|
||||
cy: "塞浦路斯",
|
||||
sc: "塞舌尔",
|
||||
sa: "沙特阿拉伯",
|
||||
bl: "圣巴泰勒米",
|
||||
cx: "圣诞岛",
|
||||
st: "圣多美和普林西比",
|
||||
sh: "圣赫勒拿",
|
||||
kn: "圣基茨和尼维斯",
|
||||
lc: "圣卢西亚",
|
||||
sm: "圣马力诺",
|
||||
pm: "圣皮埃尔和密克隆群岛",
|
||||
vc: "圣文森特和格林纳丁斯",
|
||||
lk: "斯里兰卡",
|
||||
sk: "斯洛伐克",
|
||||
si: "斯洛文尼亚",
|
||||
sj: "斯瓦尔巴和扬马延",
|
||||
sz: "斯威士兰",
|
||||
sd: "苏丹",
|
||||
sr: "苏里南",
|
||||
sb: "所罗门群岛",
|
||||
so: "索马里",
|
||||
tj: "塔吉克斯坦",
|
||||
tw: "台湾",
|
||||
th: "泰国",
|
||||
tz: "坦桑尼亚",
|
||||
to: "汤加",
|
||||
tc: "特克斯和凯科斯群岛",
|
||||
tt: "特立尼达和多巴哥",
|
||||
tn: "突尼斯",
|
||||
tv: "图瓦卢",
|
||||
tr: "土耳其",
|
||||
tm: "土库曼斯坦",
|
||||
tk: "托克劳",
|
||||
wf: "瓦利斯和富图纳",
|
||||
vu: "瓦努阿图",
|
||||
gt: "危地马拉",
|
||||
ve: "委内瑞拉",
|
||||
bn: "文莱",
|
||||
ug: "乌干达",
|
||||
ua: "乌克兰",
|
||||
uy: "乌拉圭",
|
||||
uz: "乌兹别克斯坦",
|
||||
es: "西班牙",
|
||||
eh: "西撒哈拉",
|
||||
gr: "希腊",
|
||||
sg: "新加坡",
|
||||
nc: "新喀里多尼亚",
|
||||
nz: "新西兰",
|
||||
hu: "匈牙利",
|
||||
sy: "叙利亚",
|
||||
jm: "牙买加",
|
||||
am: "亚美尼亚",
|
||||
ye: "也门",
|
||||
iq: "伊拉克",
|
||||
ir: "伊朗",
|
||||
il: "以色列",
|
||||
it: "意大利",
|
||||
in: "印度",
|
||||
id: "印度尼西亚",
|
||||
gb: "英国",
|
||||
vg: "英属维尔京群岛",
|
||||
io: "英属印度洋领地",
|
||||
jo: "约旦",
|
||||
vn: "越南",
|
||||
zm: "赞比亚",
|
||||
je: "泽西岛",
|
||||
td: "乍得",
|
||||
gi: "直布罗陀",
|
||||
cl: "智利",
|
||||
cf: "中非共和国",
|
||||
cn: "中国",
|
||||
mo: "中国澳门特别行政区",
|
||||
hk: "中国香港特别行政区",
|
||||
};
|
||||
4
src/components/IntlTelInput/i18n/zh/index.ts
Normal file
4
src/components/IntlTelInput/i18n/zh/index.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import countryTranslations from './countries';
|
||||
import interfaceTranslations from './interface';
|
||||
|
||||
export default { ...countryTranslations, ...interfaceTranslations };
|
||||
15
src/components/IntlTelInput/i18n/zh/interface.ts
Normal file
15
src/components/IntlTelInput/i18n/zh/interface.ts
Normal file
@@ -0,0 +1,15 @@
|
||||
//* Chinese (Simplified). Translated by: Google Translate.
|
||||
export default {
|
||||
selectedCountryAriaLabel: "所选国家",
|
||||
noCountrySelected: "未选择国家/地区",
|
||||
countryListAriaLabel: "国家名单",
|
||||
searchPlaceholder: "搜索",
|
||||
zeroSearchResults: "未找到结果",
|
||||
oneSearchResult: "找到 1 个结果",
|
||||
multipleSearchResults: "找到 ${count} 个结果",
|
||||
|
||||
// additional countries (not supported by country-list library)
|
||||
ac: "阿森松岛",
|
||||
xk: "科索沃",
|
||||
};
|
||||
|
||||
145
src/components/IntlTelInput/index.vue
Normal file
145
src/components/IntlTelInput/index.vue
Normal file
@@ -0,0 +1,145 @@
|
||||
<!-- https://github.com/jackocnr/intl-tel-input/blob/master/react/src/intl-tel-input/react.tsx -->
|
||||
<script lang="ts" setup>
|
||||
import intlTelInput, { Iti, SomeOptions } from 'intl-tel-input';
|
||||
import 'intl-tel-input/build/css/intlTelInput.min.css';
|
||||
import 'intl-tel-input/build/js/utils.js';
|
||||
import { ref, onMounted, onBeforeUnmount, nextTick, watch } from 'vue';
|
||||
import useI18n from '@/hooks/useI18n';
|
||||
const { currentLocale } = useI18n();
|
||||
const emit = defineEmits(['update:value', 'update:change']);
|
||||
const props = defineProps({
|
||||
/**有效检验 */
|
||||
preciseValidation: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
/**手机号 */
|
||||
value: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
/**禁用输入 */
|
||||
disabled: {
|
||||
type: Boolean,
|
||||
default: false,
|
||||
},
|
||||
/**手机号输入提示 */
|
||||
placeholder: {
|
||||
type: String,
|
||||
default: '',
|
||||
},
|
||||
/**手机号输入最大字符串长度 */
|
||||
maxlength: {
|
||||
type: Number,
|
||||
default: 255,
|
||||
},
|
||||
/**允许清空手机号输入框 */
|
||||
allowClear: {
|
||||
type: Boolean,
|
||||
},
|
||||
});
|
||||
|
||||
const inputRef = ref<HTMLInputElement | null>(null);
|
||||
const itiRef = ref<Iti | null>(null);
|
||||
|
||||
function fnChange() {
|
||||
if (!itiRef.value) return;
|
||||
|
||||
const num = itiRef.value?.getNumber() || '';
|
||||
const countryIso = itiRef.value?.getSelectedCountryData().iso2 || '';
|
||||
// note: this number will be in standard E164 format, but any container component can use
|
||||
// intlTelInputUtils.formatNumber() to convert this to another format
|
||||
// as well as intlTelInputUtils.getNumberType() etc. if need be
|
||||
let data = {
|
||||
num,
|
||||
countryIso,
|
||||
validity: false,
|
||||
errorCode: -1,
|
||||
};
|
||||
|
||||
const isValid = props.preciseValidation
|
||||
? itiRef.value.isValidNumberPrecise()
|
||||
: itiRef.value.isValidNumber();
|
||||
if (isValid) {
|
||||
data.validity = true;
|
||||
data.errorCode = 0;
|
||||
} else {
|
||||
const errorCode = itiRef.value.getValidationError();
|
||||
data.validity = false;
|
||||
data.errorCode = errorCode;
|
||||
}
|
||||
// console.log(data);
|
||||
emit('update:value', num);
|
||||
emit('update:change', data);
|
||||
}
|
||||
|
||||
watch(
|
||||
() => props.value,
|
||||
v => {
|
||||
if (v) {
|
||||
itiRef.value?.setNumber(v);
|
||||
} else {
|
||||
itiRef.value?.setNumber('');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
onMounted(() => {
|
||||
nextTick(async () => {
|
||||
if (inputRef.value) {
|
||||
let i18n = undefined;
|
||||
let initialCountry = 'us';
|
||||
// 语言文件导入问题只能复制到项目内处理
|
||||
// import fr from "intl-tel-input/i18n/fr";
|
||||
if (currentLocale.value.startsWith('zh')) {
|
||||
const { default: zh } = await import('./i18n/zh');
|
||||
i18n = zh;
|
||||
initialCountry = 'cn';
|
||||
} else {
|
||||
const { default: en } = await import('./i18n/en');
|
||||
i18n = en;
|
||||
initialCountry = 'us';
|
||||
}
|
||||
|
||||
itiRef.value = intlTelInput(inputRef.value, {
|
||||
initialCountry: initialCountry,
|
||||
formatOnDisplay: true,
|
||||
autoPlaceholder: 'polite',
|
||||
i18n: i18n,
|
||||
} as SomeOptions);
|
||||
inputRef.value.addEventListener('countrychange', fnChange);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
onBeforeUnmount(() => {
|
||||
if (inputRef.value) {
|
||||
inputRef.value.removeEventListener('countrychange', fnChange);
|
||||
}
|
||||
itiRef.value?.destroy();
|
||||
});
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<input
|
||||
type="tel"
|
||||
class="ant-input"
|
||||
ref="inputRef"
|
||||
:value="value"
|
||||
:disabled="disabled"
|
||||
:placeholder="placeholder"
|
||||
:maxlength="maxlength"
|
||||
:allow-clear="allowClear"
|
||||
@input="fnChange"
|
||||
/>
|
||||
</template>
|
||||
|
||||
<style lang="css">
|
||||
.iti {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.iti .iti__country-container .iti__search-input {
|
||||
padding: 4px 8px;
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user