From e7f2bc2c473a53e2e72ae6794677182c5d2bfe9a Mon Sep 17 00:00:00 2001 From: xiaomai Date: Wed, 22 Oct 2025 21:40:30 +0800 Subject: [PATCH] feat(admin): implement initial admin dashboard and member management This commit introduces the foundational structure for the admin dashboard, focusing on the member management feature. Key additions include: - A new page at `/admin/manage/members` to display and manage members. - An `AddModal` component with a comprehensive form for creating new members, featuring validation with Zod and input masking. - A reusable `PhoneInput` component with country code selection, backed by a new `useCountries` composable and a full country dataset. - A custom, user-friendly global error page (`error.vue`) to handle application errors gracefully. - Updated dashboard sidebar navigation to include the new member management section. - Added recommended VS Code extensions and settings to improve developer experience. --- .vscode/admin-templates.vue | 27 + .vscode/extensions.json | 8 + .vscode/settings.json | 3 +- app/app.vue | 4 +- app/components/PhoneInput.vue | 64 + .../admin/manage/members/AddModal.vue | 271 ++ app/composables/useCountries.ts | 76 + app/composables/useDashboardSidebarLinks.ts | 13 + app/data/countries.ts | 3003 +++++++++++++++++ app/error.vue | 271 ++ app/pages/admin/manage/members/index.vue | 165 + 11 files changed, 3902 insertions(+), 3 deletions(-) create mode 100644 .vscode/admin-templates.vue create mode 100644 .vscode/extensions.json create mode 100644 app/components/PhoneInput.vue create mode 100644 app/components/admin/manage/members/AddModal.vue create mode 100644 app/composables/useCountries.ts create mode 100644 app/data/countries.ts create mode 100644 app/error.vue create mode 100644 app/pages/admin/manage/members/index.vue diff --git a/.vscode/admin-templates.vue b/.vscode/admin-templates.vue new file mode 100644 index 0000000..bd3f036 --- /dev/null +++ b/.vscode/admin-templates.vue @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..4ce6fe0 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "vue.volar", + "nuxtr.nuxt-vscode-extentions", + "bradlc.vscode-tailwindcss", + "esbenp.prettier-vscode" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index 67f26fd..bd4a5b9 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -19,5 +19,6 @@ ], "tailwindCSS.experimental.classRegex": [ ["ui:\\s*{([^)]*)\\s*}", "(?:'|\"|`)([^']*)(?:'|\"|`)"] - ] + ], + "css.lint.unknownAtRules": "ignore" } diff --git a/app/app.vue b/app/app.vue index 8e7f33e..5acf3c1 100644 --- a/app/app.vue +++ b/app/app.vue @@ -1,7 +1,7 @@ diff --git a/app/components/PhoneInput.vue b/app/components/PhoneInput.vue new file mode 100644 index 0000000..e0bff0d --- /dev/null +++ b/app/components/PhoneInput.vue @@ -0,0 +1,64 @@ + + + + diff --git a/app/components/admin/manage/members/AddModal.vue b/app/components/admin/manage/members/AddModal.vue new file mode 100644 index 0000000..cda4143 --- /dev/null +++ b/app/components/admin/manage/members/AddModal.vue @@ -0,0 +1,271 @@ + + + + + diff --git a/app/composables/useCountries.ts b/app/composables/useCountries.ts new file mode 100644 index 0000000..3967889 --- /dev/null +++ b/app/composables/useCountries.ts @@ -0,0 +1,76 @@ +import { countries, type Country } from "~/data/countries"; + +/** + * 🌍 useCountries composable + * 提供国家相关的搜索、过滤、分组、查找等功能 + */ +export const useCountries = () => { + /** + * 获取全部国家 + */ + const getAll = (): Country[] => countries; + + /** + * 按洲分组 + */ + const groupedByContinent = computed(() => { + const groups: Record = {}; + for (const c of countries) { + const key = c.continent || "Unknown"; + if (!groups[key]) groups[key] = []; + groups[key].push(c); + } + return groups; + }); + + /** + * 按名称搜索(支持多语言字段) + * @param query 搜索关键字 + */ + const search = (query: string) => { + if (!query) return countries; + const q = query.toLowerCase(); + return countries.filter((c) => + Object.values(c.name).some((name) => name.toLowerCase().includes(q)) + ); + }; + + /** + * 根据国家代码查找 + * @param code ISO Alpha-2 或 Alpha-3 代码 + */ + const findByCode = (code: string) => { + const upper = code.toUpperCase(); + return countries.find((c) => c.code === upper || c.iso3 === upper); + }; + + /** + * 获取特定语言的显示名称 + * @param country 国家对象 + * @param lang 语言代码(默认为 en) + */ + const getDisplayName = ( + country: Country, + lang: keyof Country["name"] = "en" + ) => { + return country.name?.[lang] || country.name.en; + }; + + /** + * 根据洲名筛选 + * @param continent 洲名(如 'Asia'、'Europe') + */ + const filterByContinent = (continent: string) => { + const key = continent.trim().toLowerCase(); + return countries.filter((c) => c.continent.toLowerCase() === key); + }; + + return { + getAll, + groupedByContinent, + search, + findByCode, + filterByContinent, + getDisplayName, + }; +}; diff --git a/app/composables/useDashboardSidebarLinks.ts b/app/composables/useDashboardSidebarLinks.ts index f3a70dc..78e0ef2 100644 --- a/app/composables/useDashboardSidebarLinks.ts +++ b/app/composables/useDashboardSidebarLinks.ts @@ -8,6 +8,19 @@ export const useDashboardSidebarLinks = () => { icon: "mdi:view-dashboard", to: "/admin/dashboard", }, + { + label: "信息管理", + icon: "mdi:file-document-outline", + defaultOpen: true, + type: "trigger", + children: [ + { + label: "会员籍管理", + icon: "mdi:account", + to: "/admin/manage/members", + }, + ], + }, { label: "内容管理", icon: "mdi:bookshelf", diff --git a/app/data/countries.ts b/app/data/countries.ts new file mode 100644 index 0000000..3d58ae3 --- /dev/null +++ b/app/data/countries.ts @@ -0,0 +1,3003 @@ +export interface Country { + name: { + en: string; + fr: string; + es: string; + cn: string; + }; + code: string; + iso3: string; + dial: string; + continent: string; +} + +export const countries: Country[] = [ + { + name: { + en: "Afghanistan", + fr: "Afghanistan", + es: "Afganistán", + cn: "阿富汗", + }, + code: "AF", + iso3: "AFG", + dial: "+93", + continent: "AS", + }, + { + name: { + en: "Åland Islands", + fr: "Îles d’Åland", + es: "Islas Åland", + cn: "奥兰群岛", + }, + code: "AX", + iso3: "ALA", + dial: "+358", + continent: "EU", + }, + { + name: { + en: "Albania", + fr: "Albanie", + es: "Albania", + cn: "阿尔巴尼亚", + }, + code: "AL", + iso3: "ALB", + dial: "+355", + continent: "EU", + }, + { + name: { + en: "Algeria", + fr: "Algérie", + es: "Argelia", + cn: "阿尔及利亚", + }, + code: "DZ", + iso3: "DZA", + dial: "+213", + continent: "AF", + }, + { + name: { + en: "American Samoa", + fr: "Samoa américaines", + es: "Samoa Americana", + cn: "美属萨摩亚", + }, + code: "AS", + iso3: "ASM", + dial: "+1-684", + continent: "OC", + }, + { + name: { + en: "Andorra", + fr: "Andorre", + es: "Andorra", + cn: "安道尔", + }, + code: "AD", + iso3: "AND", + dial: "+376", + continent: "EU", + }, + { + name: { + en: "Angola", + fr: "Angola", + es: "Angola", + cn: "安哥拉", + }, + code: "AO", + iso3: "AGO", + dial: "+244", + continent: "AF", + }, + { + name: { + en: "Anguilla", + fr: "Anguilla", + es: "Anguila", + cn: "安圭拉", + }, + code: "AI", + iso3: "AIA", + dial: "+1-264", + continent: "NA", + }, + { + name: { + en: "Antarctica", + fr: "Antarctique", + es: "Antártida", + cn: "南极洲", + }, + code: "AQ", + iso3: "ATA", + dial: "+672", + continent: "AN", + }, + { + name: { + en: "Antigua and Barbuda", + fr: "Antigua-et-Barbuda", + es: "Antigua y Barbuda", + cn: "安提瓜和巴布达", + }, + code: "AG", + iso3: "ATG", + dial: "+1-268", + continent: "NA", + }, + { + name: { + en: "Argentina", + fr: "Argentine", + es: "Argentina", + cn: "阿根廷", + }, + code: "AR", + iso3: "ARG", + dial: "+54", + continent: "SA", + }, + { + name: { + en: "Armenia", + fr: "Arménie", + es: "Armenia", + cn: "亚美尼亚", + }, + code: "AM", + iso3: "ARM", + dial: "+374", + continent: "AS", + }, + { + name: { + en: "Aruba", + fr: "Aruba", + es: "Aruba", + cn: "阿鲁巴", + }, + code: "AW", + iso3: "ABW", + dial: "+297", + continent: "NA", + }, + { + name: { + en: "Australia", + fr: "Australie", + es: "Australia", + cn: "澳大利亚", + }, + code: "AU", + iso3: "AUS", + dial: "+61", + continent: "OC", + }, + { + name: { + en: "Austria", + fr: "Autriche", + es: "Austria", + cn: "奥地利", + }, + code: "AT", + iso3: "AUT", + dial: "+43", + continent: "EU", + }, + { + name: { + en: "Azerbaijan", + fr: "Azerbaïdjan", + es: "Azerbaiyán", + cn: "阿塞拜疆", + }, + code: "AZ", + iso3: "AZE", + dial: "+994", + continent: "AS", + }, + { + name: { + en: "Bahamas", + fr: "Bahamas", + es: "Bahamas", + cn: "巴哈马", + }, + code: "BS", + iso3: "BHS", + dial: "+1-242", + continent: "NA", + }, + { + name: { + en: "Bahrain", + fr: "Bahreïn", + es: "Bahrein", + cn: "巴林", + }, + code: "BH", + iso3: "BHR", + dial: "+973", + continent: "AS", + }, + { + name: { + en: "Bangladesh", + fr: "Bangladesh", + es: "Bangladesh", + cn: "孟加拉国", + }, + code: "BD", + iso3: "BGD", + dial: "+880", + continent: "AS", + }, + { + name: { + en: "Barbados", + fr: "Barbade", + es: "Barbados", + cn: "巴巴多斯", + }, + code: "BB", + iso3: "BRB", + dial: "+1-246", + continent: "NA", + }, + { + name: { + en: "Belarus", + fr: "Bélarus", + es: "Belarús", + cn: "白俄罗斯", + }, + code: "BY", + iso3: "BLR", + dial: "+375", + continent: "EU", + }, + { + name: { + en: "Belgium", + fr: "Belgique", + es: "Bélgica", + cn: "比利时", + }, + code: "BE", + iso3: "BEL", + dial: "+32", + continent: "EU", + }, + { + name: { + en: "Belize", + fr: "Belize", + es: "Belice", + cn: "伯利兹", + }, + code: "BZ", + iso3: "BLZ", + dial: "+501", + continent: "NA", + }, + { + name: { + en: "Benin", + fr: "Bénin", + es: "Benin", + cn: "贝宁", + }, + code: "BJ", + iso3: "BEN", + dial: "+229", + continent: "AF", + }, + { + name: { + en: "Bermuda", + fr: "Bermudes", + es: "Bermuda", + cn: "百慕大", + }, + code: "BM", + iso3: "BMU", + dial: "+1-441", + continent: "NA", + }, + { + name: { + en: "Bhutan", + fr: "Bhoutan", + es: "Bhután", + cn: "不丹", + }, + code: "BT", + iso3: "BTN", + dial: "+975", + continent: "AS", + }, + { + name: { + en: "Bolivia (Plurinational State of)", + fr: "Bolivie (État plurinational de)", + es: "Bolivia (Estado Plurinacional de)", + cn: "多民族玻利维亚国", + }, + code: "BO", + iso3: "BOL", + dial: "+591", + continent: "SA", + }, + { + name: { + en: "Bonaire, Sint Eustatius and Saba", + fr: "Bonaire, Saint-Eustache et Saba", + es: "Bonaire, San Eustaquio y Saba", + cn: "博纳尔,圣俄斯塔休斯和萨巴", + }, + code: "BQ", + iso3: "BES", + dial: "+599", + continent: "NA", + }, + { + name: { + en: "Bosnia and Herzegovina", + fr: "Bosnie-Herzégovine", + es: "Bosnia y Herzegovina", + cn: "波斯尼亚和黑塞哥维那", + }, + code: "BA", + iso3: "BIH", + dial: "+387", + continent: "EU", + }, + { + name: { + en: "Botswana", + fr: "Botswana", + es: "Botswana", + cn: "博茨瓦纳", + }, + code: "BW", + iso3: "BWA", + dial: "+267", + continent: "AF", + }, + { + name: { + en: "Bouvet Island", + fr: "Île Bouvet", + es: "Isla Bouvet", + cn: "布维岛", + }, + code: "BV", + iso3: "BVT", + dial: "+47", + continent: "AN", + }, + { + name: { + en: "Brazil", + fr: "Brésil", + es: "Brasil", + cn: "巴西", + }, + code: "BR", + iso3: "BRA", + dial: "+55", + continent: "SA", + }, + { + name: { + en: "British Indian Ocean Territory", + fr: "Territoire britannique de l'océan Indien", + es: "Territorio Británico del Océano Índico", + cn: "英属印度洋领土", + }, + code: "IO", + iso3: "IOT", + dial: "+246", + continent: "AS", + }, + { + name: { + en: "British Virgin Islands", + fr: "Îles Vierges britanniques", + es: "Islas Vírgenes Británicas", + cn: "英属维尔京群岛", + }, + code: "VG", + iso3: "VGB", + dial: "+1-284", + continent: "NA", + }, + { + name: { + en: "Brunei Darussalam", + fr: "Brunéi Darussalam", + es: "Brunei Darussalam", + cn: "文莱达鲁萨兰国", + }, + code: "BN", + iso3: "BRN", + dial: "+673", + continent: "AS", + }, + { + name: { + en: "Bulgaria", + fr: "Bulgarie", + es: "Bulgaria", + cn: "保加利亚", + }, + code: "BG", + iso3: "BGR", + dial: "+359", + continent: "EU", + }, + { + name: { + en: "Burkina Faso", + fr: "Burkina Faso", + es: "Burkina Faso", + cn: "布基纳法索", + }, + code: "BF", + iso3: "BFA", + dial: "+226", + continent: "AF", + }, + { + name: { + en: "Burundi", + fr: "Burundi", + es: "Burundi", + cn: "布隆迪", + }, + code: "BI", + iso3: "BDI", + dial: "+257", + continent: "AF", + }, + { + name: { + en: "Cabo Verde", + fr: "Cabo Verde", + es: "Cabo Verde", + cn: "佛得角", + }, + code: "CV", + iso3: "CPV", + dial: "+238", + continent: "AF", + }, + { + name: { + en: "Cambodia", + fr: "Cambodge", + es: "Camboya", + cn: "柬埔寨", + }, + code: "KH", + iso3: "KHM", + dial: "+855", + continent: "AS", + }, + { + name: { + en: "Cameroon", + fr: "Cameroun", + es: "Camerún", + cn: "喀麦隆", + }, + code: "CM", + iso3: "CMR", + dial: "+237", + continent: "AF", + }, + { + name: { + en: "Canada", + fr: "Canada", + es: "Canadá", + cn: "加拿大", + }, + code: "CA", + iso3: "CAN", + dial: "+1", + continent: "NA", + }, + { + name: { + en: "Cayman Islands", + fr: "Îles Caïmanes", + es: "Islas Caimán", + cn: "开曼群岛", + }, + code: "KY", + iso3: "CYM", + dial: "+1-345", + continent: "NA", + }, + { + name: { + en: "Central African Republic", + fr: "République centrafricaine", + es: "República Centroafricana", + cn: "中非共和国", + }, + code: "CF", + iso3: "CAF", + dial: "+236", + continent: "AF", + }, + { + name: { + en: "Chad", + fr: "Tchad", + es: "Chad", + cn: "乍得", + }, + code: "TD", + iso3: "TCD", + dial: "+235", + continent: "AF", + }, + { + name: { + en: "Chile", + fr: "Chili", + es: "Chile", + cn: "智利", + }, + code: "CL", + iso3: "CHL", + dial: "+56", + continent: "SA", + }, + { + name: { + en: "China", + fr: "Chine", + es: "China", + cn: "中国", + }, + code: "CN", + iso3: "CHN", + dial: "+86", + continent: "AS", + }, + { + name: { + en: "China, Hong Kong Special Administrative Region", + fr: "Chine, région administrative spéciale de Hong Kong", + es: "China, región administrativa especial de Hong Kong", + cn: "中国香港特别行政区", + }, + code: "HK", + iso3: "HKG", + dial: "+852", + continent: "AS", + }, + { + name: { + en: "China, Macao Special Administrative Region", + fr: "Chine, région administrative spéciale de Macao", + es: "China, región administrativa especial de Macao", + cn: "中国澳门特别行政区", + }, + code: "MO", + iso3: "MAC", + dial: "+853", + continent: "AS", + }, + { + name: { + en: "Christmas Island", + fr: "Île Christmas", + es: "Isla Christmas", + cn: "圣诞岛", + }, + code: "CX", + iso3: "CXR", + dial: "+61", + continent: "OC", + }, + { + name: { + en: "Cocos (Keeling) Islands", + fr: "Îles des Cocos (Keeling)", + es: "Islas Cocos (Keeling)", + cn: "科科斯(基林)群岛", + }, + code: "CC", + iso3: "CCK", + dial: "+61", + continent: "AS", + }, + { + name: { + en: "Colombia", + fr: "Colombie", + es: "Colombia", + cn: "哥伦比亚", + }, + code: "CO", + iso3: "COL", + dial: "+57", + continent: "SA", + }, + { + name: { + en: "Comoros", + fr: "Comores", + es: "Comoras", + cn: "科摩罗", + }, + code: "KM", + iso3: "COM", + dial: "+269", + continent: "AF", + }, + { + name: { + en: "Congo", + fr: "Congo", + es: "Congo", + cn: "刚果", + }, + code: "CG", + iso3: "COG", + dial: "+242", + continent: "AF", + }, + { + name: { + en: "Cook Islands", + fr: "Îles Cook", + es: "Islas Cook", + cn: "库克群岛", + }, + code: "CK", + iso3: "COK", + dial: "+682", + continent: "OC", + }, + { + name: { + en: "Costa Rica", + fr: "Costa Rica", + es: "Costa Rica", + cn: "哥斯达黎加", + }, + code: "CR", + iso3: "CRI", + dial: "+506", + continent: "NA", + }, + { + name: { + en: "Croatia", + fr: "Croatie", + es: "Croacia", + cn: "克罗地亚", + }, + code: "HR", + iso3: "HRV", + dial: "+385", + continent: "EU", + }, + { + name: { + en: "Cuba", + fr: "Cuba", + es: "Cuba", + cn: "古巴", + }, + code: "CU", + iso3: "CUB", + dial: "+53", + continent: "NA", + }, + { + name: { + en: "Curaçao", + fr: "Curaçao", + es: "Curazao", + cn: "库拉索", + }, + code: "CW", + iso3: "CUW", + dial: "+599", + continent: "NA", + }, + { + name: { + en: "Cyprus", + fr: "Chypre", + es: "Chipre", + cn: "塞浦路斯", + }, + code: "CY", + iso3: "CYP", + dial: "+357", + continent: "EU", + }, + { + name: { + en: "Czechia", + fr: "Tchéquie", + es: "Chequia", + cn: "捷克", + }, + code: "CZ", + iso3: "CZE", + dial: "+420", + continent: "EU", + }, + { + name: { + en: "Democratic People's Republic of Korea", + fr: "République populaire démocratique de Corée", + es: "República Popular Democrática de Corea", + cn: "朝鲜民主主义人民共和国", + }, + code: "KP", + iso3: "PRK", + dial: "+850", + continent: "AS", + }, + { + name: { + en: "Democratic Republic of the Congo", + fr: "République démocratique du Congo", + es: "República Democrática del Congo", + cn: "刚果民主共和国", + }, + code: "CD", + iso3: "COD", + dial: "+243", + continent: "AF", + }, + { + name: { + en: "Denmark", + fr: "Danemark", + es: "Dinamarca", + cn: "丹麦", + }, + code: "DK", + iso3: "DNK", + dial: "+45", + continent: "EU", + }, + { + name: { + en: "Djibouti", + fr: "Djibouti", + es: "Djibouti", + cn: "吉布提", + }, + code: "DJ", + iso3: "DJI", + dial: "+253", + continent: "AF", + }, + { + name: { + en: "Dominica", + fr: "Dominique", + es: "Dominica", + cn: "多米尼克", + }, + code: "DM", + iso3: "DMA", + dial: "+1-767", + continent: "NA", + }, + { + name: { + en: "Dominican Republic", + fr: "République dominicaine", + es: "República Dominicana", + cn: "多米尼加", + }, + code: "DO", + iso3: "DOM", + dial: "+1-809,1-829,1-849", + continent: "NA", + }, + { + name: { + en: "Ecuador", + fr: "Équateur", + es: "Ecuador", + cn: "厄瓜多尔", + }, + code: "EC", + iso3: "ECU", + dial: "+593", + continent: "SA", + }, + { + name: { + en: "Egypt", + fr: "Égypte", + es: "Egipto", + cn: "埃及", + }, + code: "EG", + iso3: "EGY", + dial: "+20", + continent: "AF", + }, + { + name: { + en: "El Salvador", + fr: "El Salvador", + es: "El Salvador", + cn: "萨尔瓦多", + }, + code: "SV", + iso3: "SLV", + dial: "+503", + continent: "NA", + }, + { + name: { + en: "Equatorial Guinea", + fr: "Guinée équatoriale", + es: "Guinea Ecuatorial", + cn: "赤道几内亚", + }, + code: "GQ", + iso3: "GNQ", + dial: "+240", + continent: "AF", + }, + { + name: { + en: "Eritrea", + fr: "Érythrée", + es: "Eritrea", + cn: "厄立特里亚", + }, + code: "ER", + iso3: "ERI", + dial: "+291", + continent: "AF", + }, + { + name: { + en: "Estonia", + fr: "Estonie", + es: "Estonia", + cn: "爱沙尼亚", + }, + code: "EE", + iso3: "EST", + dial: "+372", + continent: "EU", + }, + { + name: { + en: "Eswatini", + fr: "Eswatini", + es: "Eswatini", + cn: "斯威士兰", + }, + code: "SZ", + iso3: "SWZ", + dial: "+268", + continent: "AF", + }, + { + name: { + en: "Ethiopia", + fr: "Éthiopie", + es: "Etiopía", + cn: "埃塞俄比亚", + }, + code: "ET", + iso3: "ETH", + dial: "+251", + continent: "AF", + }, + { + name: { + en: "Falkland Islands", + fr: "Îles Falkland (Malvinas)", + es: "Islas Malvinas (Falkland)", + cn: "福克兰群岛(马尔维纳斯)", + }, + code: "FK", + iso3: "FLK", + dial: "+500", + continent: "SA", + }, + { + name: { + en: "Faroe Islands", + fr: "Îles Féroé", + es: "Islas Feroe", + cn: "法罗群岛", + }, + code: "FO", + iso3: "FRO", + dial: "+298", + continent: "EU", + }, + { + name: { + en: "Fiji", + fr: "Fidji", + es: "Fiji", + cn: "斐济", + }, + code: "FJ", + iso3: "FJI", + dial: "+679", + continent: "OC", + }, + { + name: { + en: "Finland", + fr: "Finlande", + es: "Finlandia", + cn: "芬兰", + }, + code: "FI", + iso3: "FIN", + dial: "+358", + continent: "EU", + }, + { + name: { + en: "France", + fr: "France", + es: "Francia", + cn: "法国", + }, + code: "FR", + iso3: "FRA", + dial: "+33", + continent: "EU", + }, + { + name: { + en: "French Guiana", + fr: "Guyane française", + es: "Guayana Francesa", + cn: "法属圭亚那", + }, + code: "GF", + iso3: "GUF", + dial: "+594", + continent: "SA", + }, + { + name: { + en: "French Polynesia", + fr: "Polynésie française", + es: "Polinesia Francesa", + cn: "法属波利尼西亚", + }, + code: "PF", + iso3: "PYF", + dial: "+689", + continent: "OC", + }, + { + name: { + en: "French Southern Territories", + fr: "Terres australes françaises", + es: "Territorio de las Tierras Australes Francesas", + cn: "法属南方领地", + }, + code: "TF", + iso3: "ATF", + dial: "+262", + continent: "AN", + }, + { + name: { + en: "Gabon", + fr: "Gabon", + es: "Gabón", + cn: "加蓬", + }, + code: "GA", + iso3: "GAB", + dial: "+241", + continent: "AF", + }, + { + name: { + en: "Gambia", + fr: "Gambie", + es: "Gambia", + cn: "冈比亚", + }, + code: "GM", + iso3: "GMB", + dial: "+220", + continent: "AF", + }, + { + name: { + en: "Georgia", + fr: "Géorgie", + es: "Georgia", + cn: "格鲁吉亚", + }, + code: "GE", + iso3: "GEO", + dial: "+995", + continent: "AS", + }, + { + name: { + en: "Germany", + fr: "Allemagne", + es: "Alemania", + cn: "德国", + }, + code: "DE", + iso3: "DEU", + dial: "+49", + continent: "EU", + }, + { + name: { + en: "Ghana", + fr: "Ghana", + es: "Ghana", + cn: "加纳", + }, + code: "GH", + iso3: "GHA", + dial: "+233", + continent: "AF", + }, + { + name: { + en: "Gibraltar", + fr: "Gibraltar", + es: "Gibraltar", + cn: "直布罗陀", + }, + code: "GI", + iso3: "GIB", + dial: "+350", + continent: "EU", + }, + { + name: { + en: "Greece", + fr: "Grèce", + es: "Grecia", + cn: "希腊", + }, + code: "GR", + iso3: "GRC", + dial: "+30", + continent: "EU", + }, + { + name: { + en: "Greenland", + fr: "Groenland", + es: "Groenlandia", + cn: "格陵兰", + }, + code: "GL", + iso3: "GRL", + dial: "+299", + continent: "NA", + }, + { + name: { + en: "Grenada", + fr: "Grenade", + es: "Granada", + cn: "格林纳达", + }, + code: "GD", + iso3: "GRD", + dial: "+1-473", + continent: "NA", + }, + { + name: { + en: "Guadeloupe", + fr: "Guadeloupe", + es: "Guadalupe", + cn: "瓜德罗普", + }, + code: "GP", + iso3: "GLP", + dial: "+590", + continent: "NA", + }, + { + name: { + en: "Guam", + fr: "Guam", + es: "Guam", + cn: "关岛", + }, + code: "GU", + iso3: "GUM", + dial: "+1-671", + continent: "OC", + }, + { + name: { + en: "Guatemala", + fr: "Guatemala", + es: "Guatemala", + cn: "危地马拉", + }, + code: "GT", + iso3: "GTM", + dial: "+502", + continent: "NA", + }, + { + name: { + en: "Guernsey", + fr: "Guernesey", + es: "Guernsey", + cn: "格恩西", + }, + code: "GG", + iso3: "GGY", + dial: "+44", + continent: "EU", + }, + { + name: { + en: "Guinea", + fr: "Guinée", + es: "Guinea", + cn: "几内亚", + }, + code: "GN", + iso3: "GIN", + dial: "+224", + continent: "AF", + }, + { + name: { + en: "Guinea-Bissau", + fr: "Guinée-Bissau", + es: "Guinea-Bissau", + cn: "几内亚比绍", + }, + code: "GW", + iso3: "GNB", + dial: "+245", + continent: "AF", + }, + { + name: { + en: "Guyana", + fr: "Guyana", + es: "Guyana", + cn: "圭亚那", + }, + code: "GY", + iso3: "GUY", + dial: "+592", + continent: "SA", + }, + { + name: { + en: "Haiti", + fr: "Haïti", + es: "Haití", + cn: "海地", + }, + code: "HT", + iso3: "HTI", + dial: "+509", + continent: "NA", + }, + { + name: { + en: "Heard Island and McDonald Islands", + fr: "Île Heard-et-Îles MacDonald", + es: "Islas Heard y McDonald", + cn: "赫德岛和麦克唐纳岛", + }, + code: "HM", + iso3: "HMD", + dial: "+672", + continent: "AN", + }, + { + name: { + en: "Holy See", + fr: "Saint-Siège", + es: "Santa Sede", + cn: "教廷", + }, + code: "VA", + iso3: "VAT", + dial: "+39-06", + continent: "EU", + }, + { + name: { + en: "Honduras", + fr: "Honduras", + es: "Honduras", + cn: "洪都拉斯", + }, + code: "HN", + iso3: "HND", + dial: "+504", + continent: "NA", + }, + { + name: { + en: "Hungary", + fr: "Hongrie", + es: "Hungría", + cn: "匈牙利", + }, + code: "HU", + iso3: "HUN", + dial: "+36", + continent: "EU", + }, + { + name: { + en: "Iceland", + fr: "Islande", + es: "Islandia", + cn: "冰岛", + }, + code: "IS", + iso3: "ISL", + dial: "+354", + continent: "EU", + }, + { + name: { + en: "India", + fr: "Inde", + es: "India", + cn: "印度", + }, + code: "IN", + iso3: "IND", + dial: "+91", + continent: "AS", + }, + { + name: { + en: "Indonesia", + fr: "Indonésie", + es: "Indonesia", + cn: "印度尼西亚", + }, + code: "ID", + iso3: "IDN", + dial: "+62", + continent: "AS", + }, + { + name: { + en: "Iran (Islamic Republic of)", + fr: "Iran (République islamique d’)", + es: "Irán (República Islámica del)", + cn: "伊朗伊斯兰共和国", + }, + code: "IR", + iso3: "IRN", + dial: "+98", + continent: "AS", + }, + { + name: { + en: "Iraq", + fr: "Iraq", + es: "Iraq", + cn: "伊拉克", + }, + code: "IQ", + iso3: "IRQ", + dial: "+964", + continent: "AS", + }, + { + name: { + en: "Ireland", + fr: "Irlande", + es: "Irlanda", + cn: "爱尔兰", + }, + code: "IE", + iso3: "IRL", + dial: "+353", + continent: "EU", + }, + { + name: { + en: "Isle of Man", + fr: "Île de Man", + es: "Isla de Man", + cn: "马恩岛", + }, + code: "IM", + iso3: "IMN", + dial: "+44", + continent: "EU", + }, + { + name: { + en: "Israel", + fr: "Israël", + es: "Israel", + cn: "以色列", + }, + code: "IL", + iso3: "ISR", + dial: "+972", + continent: "AS", + }, + { + name: { + en: "Italy", + fr: "Italie", + es: "Italia", + cn: "意大利", + }, + code: "IT", + iso3: "ITA", + dial: "+39", + continent: "EU", + }, + { + name: { + en: "Ivory Coast", + fr: "Côte d’Ivoire", + es: "Côte d’Ivoire", + cn: "科特迪瓦", + }, + code: "CI", + iso3: "CIV", + dial: "+225", + continent: "AF", + }, + { + name: { + en: "Jamaica", + fr: "Jamaïque", + es: "Jamaica", + cn: "牙买加", + }, + code: "JM", + iso3: "JAM", + dial: "+1-876", + continent: "NA", + }, + { + name: { + en: "Japan", + fr: "Japon", + es: "Japón", + cn: "日本", + }, + code: "JP", + iso3: "JPN", + dial: "+81", + continent: "AS", + }, + { + name: { + en: "Jersey", + fr: "Jersey", + es: "Jersey", + cn: "泽西", + }, + code: "JE", + iso3: "JEY", + dial: "+44", + continent: "EU", + }, + { + name: { + en: "Jordan", + fr: "Jordanie", + es: "Jordania", + cn: "约旦", + }, + code: "JO", + iso3: "JOR", + dial: "+962", + continent: "AS", + }, + { + name: { + en: "Kazakhstan", + fr: "Kazakhstan", + es: "Kazajstán", + cn: "哈萨克斯坦", + }, + code: "KZ", + iso3: "KAZ", + dial: "+7", + continent: "AS", + }, + { + name: { + en: "Kenya", + fr: "Kenya", + es: "Kenya", + cn: "肯尼亚", + }, + code: "KE", + iso3: "KEN", + dial: "+254", + continent: "AF", + }, + { + name: { + en: "Kiribati", + fr: "Kiribati", + es: "Kiribati", + cn: "基里巴斯", + }, + code: "KI", + iso3: "KIR", + dial: "+686", + continent: "OC", + }, + { + name: { + en: "Kuwait", + fr: "Koweït", + es: "Kuwait", + cn: "科威特", + }, + code: "KW", + iso3: "KWT", + dial: "+965", + continent: "AS", + }, + { + name: { + en: "Kyrgyzstan", + fr: "Kirghizistan", + es: "Kirguistán", + cn: "吉尔吉斯斯坦", + }, + code: "KG", + iso3: "KGZ", + dial: "+996", + continent: "AS", + }, + { + name: { + en: "Lao People's Democratic Republic", + fr: "République démocratique populaire lao", + es: "República Democrática Popular Lao", + cn: "老挝人民民主共和国", + }, + code: "LA", + iso3: "LAO", + dial: "+856", + continent: "AS", + }, + { + name: { + en: "Latvia", + fr: "Lettonie", + es: "Letonia", + cn: "拉脱维亚", + }, + code: "LV", + iso3: "LVA", + dial: "+371", + continent: "EU", + }, + { + name: { + en: "Lebanon", + fr: "Liban", + es: "Líbano", + cn: "黎巴嫩", + }, + code: "LB", + iso3: "LBN", + dial: "+961", + continent: "AS", + }, + { + name: { + en: "Lesotho", + fr: "Lesotho", + es: "Lesotho", + cn: "莱索托", + }, + code: "LS", + iso3: "LSO", + dial: "+266", + continent: "AF", + }, + { + name: { + en: "Liberia", + fr: "Libéria", + es: "Liberia", + cn: "利比里亚", + }, + code: "LR", + iso3: "LBR", + dial: "+231", + continent: "AF", + }, + { + name: { + en: "Libya", + fr: "Libye", + es: "Libia", + cn: "利比亚", + }, + code: "LY", + iso3: "LBY", + dial: "+218", + continent: "AF", + }, + { + name: { + en: "Liechtenstein", + fr: "Liechtenstein", + es: "Liechtenstein", + cn: "列支敦士登", + }, + code: "LI", + iso3: "LIE", + dial: "+423", + continent: "EU", + }, + { + name: { + en: "Lithuania", + fr: "Lituanie", + es: "Lituania", + cn: "立陶宛", + }, + code: "LT", + iso3: "LTU", + dial: "+370", + continent: "EU", + }, + { + name: { + en: "Luxembourg", + fr: "Luxembourg", + es: "Luxemburgo", + cn: "卢森堡", + }, + code: "LU", + iso3: "LUX", + dial: "+352", + continent: "EU", + }, + { + name: { + en: "Madagascar", + fr: "Madagascar", + es: "Madagascar", + cn: "马达加斯加", + }, + code: "MG", + iso3: "MDG", + dial: "+261", + continent: "AF", + }, + { + name: { + en: "Malawi", + fr: "Malawi", + es: "Malawi", + cn: "马拉维", + }, + code: "MW", + iso3: "MWI", + dial: "+265", + continent: "AF", + }, + { + name: { + en: "Malaysia", + fr: "Malaisie", + es: "Malasia", + cn: "马来西亚", + }, + code: "MY", + iso3: "MYS", + dial: "+60", + continent: "AS", + }, + { + name: { + en: "Maldives", + fr: "Maldives", + es: "Maldivas", + cn: "马尔代夫", + }, + code: "MV", + iso3: "MDV", + dial: "+960", + continent: "AS", + }, + { + name: { + en: "Mali", + fr: "Mali", + es: "Malí", + cn: "马里", + }, + code: "ML", + iso3: "MLI", + dial: "+223", + continent: "AF", + }, + { + name: { + en: "Malta", + fr: "Malte", + es: "Malta", + cn: "马耳他", + }, + code: "MT", + iso3: "MLT", + dial: "+356", + continent: "EU", + }, + { + name: { + en: "Marshall Islands", + fr: "Îles Marshall", + es: "Islas Marshall", + cn: "马绍尔群岛", + }, + code: "MH", + iso3: "MHL", + dial: "+692", + continent: "OC", + }, + { + name: { + en: "Martinique", + fr: "Martinique", + es: "Martinica", + cn: "马提尼克", + }, + code: "MQ", + iso3: "MTQ", + dial: "+596", + continent: "NA", + }, + { + name: { + en: "Mauritania", + fr: "Mauritanie", + es: "Mauritania", + cn: "毛里塔尼亚", + }, + code: "MR", + iso3: "MRT", + dial: "+222", + continent: "AF", + }, + { + name: { + en: "Mauritius", + fr: "Maurice", + es: "Mauricio", + cn: "毛里求斯", + }, + code: "MU", + iso3: "MUS", + dial: "+230", + continent: "AF", + }, + { + name: { + en: "Mayotte", + fr: "Mayotte", + es: "Mayotte", + cn: "马约特", + }, + code: "YT", + iso3: "MYT", + dial: "+262", + continent: "AF", + }, + { + name: { + en: "Mexico", + fr: "Mexique", + es: "México", + cn: "墨西哥", + }, + code: "MX", + iso3: "MEX", + dial: "+52", + continent: "NA", + }, + { + name: { + en: "Micronesia (Federated States of)", + fr: "Micronésie (États fédérés de)", + es: "Micronesia (Estados Federados de)", + cn: "密克罗尼西亚联邦", + }, + code: "FM", + iso3: "FSM", + dial: "+691", + continent: "OC", + }, + { + name: { + en: "Monaco", + fr: "Monaco", + es: "Mónaco", + cn: "摩纳哥", + }, + code: "MC", + iso3: "MCO", + dial: "+377", + continent: "EU", + }, + { + name: { + en: "Mongolia", + fr: "Mongolie", + es: "Mongolia", + cn: "蒙古", + }, + code: "MN", + iso3: "MNG", + dial: "+976", + continent: "AS", + }, + { + name: { + en: "Montenegro", + fr: "Monténégro", + es: "Montenegro", + cn: "黑山", + }, + code: "ME", + iso3: "MNE", + dial: "+382", + continent: "EU", + }, + { + name: { + en: "Montserrat", + fr: "Montserrat", + es: "Montserrat", + cn: "蒙特塞拉特", + }, + code: "MS", + iso3: "MSR", + dial: "+1-664", + continent: "NA", + }, + { + name: { + en: "Morocco", + fr: "Maroc", + es: "Marruecos", + cn: "摩洛哥", + }, + code: "MA", + iso3: "MAR", + dial: "+212", + continent: "AF", + }, + { + name: { + en: "Mozambique", + fr: "Mozambique", + es: "Mozambique", + cn: "莫桑比克", + }, + code: "MZ", + iso3: "MOZ", + dial: "+258", + continent: "AF", + }, + { + name: { + en: "Myanmar", + fr: "Myanmar", + es: "Myanmar", + cn: "缅甸", + }, + code: "MM", + iso3: "MMR", + dial: "+95", + continent: "AS", + }, + { + name: { + en: "Namibia", + fr: "Namibie", + es: "Namibia", + cn: "纳米比亚", + }, + code: "NA", + iso3: "NAM", + dial: "+264", + continent: "AF", + }, + { + name: { + en: "Nauru", + fr: "Nauru", + es: "Nauru", + cn: "瑙鲁", + }, + code: "NR", + iso3: "NRU", + dial: "+674", + continent: "OC", + }, + { + name: { + en: "Nepal", + fr: "Népal", + es: "Nepal", + cn: "尼泊尔", + }, + code: "NP", + iso3: "NPL", + dial: "+977", + continent: "AS", + }, + { + name: { + en: "Netherlands", + fr: "Pays-Bas (Royaume des)", + es: "Países Bajos (Reino de los)", + cn: "荷兰王国", + }, + code: "NL", + iso3: "NLD", + dial: "+31", + continent: "EU", + }, + { + name: { + en: "New Caledonia", + fr: "Nouvelle-Calédonie", + es: "Nueva Caledonia", + cn: "新喀里多尼亚", + }, + code: "NC", + iso3: "NCL", + dial: "+687", + continent: "OC", + }, + { + name: { + en: "New Zealand", + fr: "Nouvelle-Zélande", + es: "Nueva Zelandia", + cn: "新西兰", + }, + code: "NZ", + iso3: "NZL", + dial: "+64", + continent: "OC", + }, + { + name: { + en: "Nicaragua", + fr: "Nicaragua", + es: "Nicaragua", + cn: "尼加拉瓜", + }, + code: "NI", + iso3: "NIC", + dial: "+505", + continent: "NA", + }, + { + name: { + en: "Niger", + fr: "Niger", + es: "Níger", + cn: "尼日尔", + }, + code: "NE", + iso3: "NER", + dial: "+227", + continent: "AF", + }, + { + name: { + en: "Nigeria", + fr: "Nigéria", + es: "Nigeria", + cn: "尼日利亚", + }, + code: "NG", + iso3: "NGA", + dial: "+234", + continent: "AF", + }, + { + name: { + en: "Niue", + fr: "Nioué", + es: "Niue", + cn: "纽埃", + }, + code: "NU", + iso3: "NIU", + dial: "+683", + continent: "OC", + }, + { + name: { + en: "Norfolk Island", + fr: "Île Norfolk", + es: "Isla Norfolk", + cn: "诺福克岛", + }, + code: "NF", + iso3: "NFK", + dial: "+672", + continent: "OC", + }, + { + name: { + en: "Northern Mariana Islands", + fr: "Îles Mariannes du Nord", + es: "Islas Marianas Septentrionales", + cn: "北马里亚纳群岛", + }, + code: "MP", + iso3: "MNP", + dial: "+1-670", + continent: "OC", + }, + { + name: { + en: "North Macedonia", + fr: "Macédoine du Nord", + es: "Macedonia del Norte", + cn: "北马其顿", + }, + code: "MK", + iso3: "MKD", + dial: "+389", + continent: "EU", + }, + { + name: { + en: "Norway", + fr: "Norvège", + es: "Noruega", + cn: "挪威", + }, + code: "NO", + iso3: "NOR", + dial: "+47", + continent: "EU", + }, + { + name: { + en: "Oman", + fr: "Oman", + es: "Omán", + cn: "阿曼", + }, + code: "OM", + iso3: "OMN", + dial: "+968", + continent: "AS", + }, + { + name: { + en: "Pakistan", + fr: "Pakistan", + es: "Pakistán", + cn: "巴基斯坦", + }, + code: "PK", + iso3: "PAK", + dial: "+92", + continent: "AS", + }, + { + name: { + en: "Palau", + fr: "Palaos", + es: "Palau", + cn: "帕劳", + }, + code: "PW", + iso3: "PLW", + dial: "+680", + continent: "OC", + }, + { + name: { + en: "Panama", + fr: "Panama", + es: "Panamá", + cn: "巴拿马", + }, + code: "PA", + iso3: "PAN", + dial: "+507", + continent: "NA", + }, + { + name: { + en: "Papua New Guinea", + fr: "Papouasie-Nouvelle-Guinée", + es: "Papua Nueva Guinea", + cn: "巴布亚新几内亚", + }, + code: "PG", + iso3: "PNG", + dial: "+675", + continent: "OC", + }, + { + name: { + en: "Paraguay", + fr: "Paraguay", + es: "Paraguay", + cn: "巴拉圭", + }, + code: "PY", + iso3: "PRY", + dial: "+595", + continent: "SA", + }, + { + name: { + en: "Peru", + fr: "Pérou", + es: "Perú", + cn: "秘鲁", + }, + code: "PE", + iso3: "PER", + dial: "+51", + continent: "SA", + }, + { + name: { + en: "Philippines", + fr: "Philippines", + es: "Filipinas", + cn: "菲律宾", + }, + code: "PH", + iso3: "PHL", + dial: "+63", + continent: "AS", + }, + { + name: { + en: "Pitcairn", + fr: "Pitcairn", + es: "Pitcairn", + cn: "皮特凯恩", + }, + code: "PN", + iso3: "PCN", + dial: "+870", + continent: "OC", + }, + { + name: { + en: "Poland", + fr: "Pologne", + es: "Polonia", + cn: "波兰", + }, + code: "PL", + iso3: "POL", + dial: "+48", + continent: "EU", + }, + { + name: { + en: "Portugal", + fr: "Portugal", + es: "Portugal", + cn: "葡萄牙", + }, + code: "PT", + iso3: "PRT", + dial: "+351", + continent: "EU", + }, + { + name: { + en: "Puerto Rico", + fr: "Porto Rico", + es: "Puerto Rico", + cn: "波多黎各", + }, + code: "PR", + iso3: "PRI", + dial: "+1", + continent: "NA", + }, + { + name: { + en: "Qatar", + fr: "Qatar", + es: "Qatar", + cn: "卡塔尔", + }, + code: "QA", + iso3: "QAT", + dial: "+974", + continent: "AS", + }, + { + name: { + en: "Republic of Korea", + fr: "République de Corée", + es: "República de Corea", + cn: "大韩民国", + }, + code: "KR", + iso3: "KOR", + dial: "+82", + continent: "AS", + }, + { + name: { + en: "Republic of Moldova", + fr: "République de Moldova", + es: "República de Moldova", + cn: "摩尔多瓦共和国", + }, + code: "MD", + iso3: "MDA", + dial: "+373", + continent: "EU", + }, + { + name: { + en: "Réunion", + fr: "Réunion", + es: "Reunión", + cn: "留尼汪", + }, + code: "RE", + iso3: "REU", + dial: "+262", + continent: "AF", + }, + { + name: { + en: "Romania", + fr: "Roumanie", + es: "Rumania", + cn: "罗马尼亚", + }, + code: "RO", + iso3: "ROU", + dial: "+40", + continent: "EU", + }, + { + name: { + en: "Russian Federation", + fr: "Fédération de Russie", + es: "Federación de Rusia", + cn: "俄罗斯联邦", + }, + code: "RU", + iso3: "RUS", + dial: "+7", + continent: "EU", + }, + { + name: { + en: "Rwanda", + fr: "Rwanda", + es: "Rwanda", + cn: "卢旺达", + }, + code: "RW", + iso3: "RWA", + dial: "+250", + continent: "AF", + }, + { + name: { + en: "Saint Barthélemy", + fr: "Saint-Barthélemy", + es: "San Barthélemy", + cn: "圣巴泰勒米", + }, + code: "BL", + iso3: "BLM", + dial: "+590", + continent: "NA", + }, + { + name: { + en: "Saint Helena", + fr: "Sainte-Hélène", + es: "Santa Elena", + cn: "圣赫勒拿", + }, + code: "SH", + iso3: "SHN", + dial: "+290 n", + continent: "AF", + }, + { + name: { + en: "Saint Kitts and Nevis", + fr: "Saint-Kitts-et-Nevis", + es: "Saint Kitts y Nevis", + cn: "圣基茨和尼维斯", + }, + code: "KN", + iso3: "KNA", + dial: "+1-869", + continent: "NA", + }, + { + name: { + en: "Saint Lucia", + fr: "Sainte-Lucie", + es: "Santa Lucía", + cn: "圣卢西亚", + }, + code: "LC", + iso3: "LCA", + dial: "+1-758", + continent: "NA", + }, + { + name: { + en: "Saint Martin (French Part)", + fr: "Saint-Martin (partie française)", + es: "San Martín (parte francesa)", + cn: "圣马丁(法属)", + }, + code: "MF", + iso3: "MAF", + dial: "+590", + continent: "NA", + }, + { + name: { + en: "Saint Pierre and Miquelon", + fr: "Saint-Pierre-et-Miquelon", + es: "San Pedro y Miquelón", + cn: "圣皮埃尔和密克隆", + }, + code: "PM", + iso3: "SPM", + dial: "+508", + continent: "NA", + }, + { + name: { + en: "Saint Vincent and the Grenadines", + fr: "Saint-Vincent-et-les Grenadines", + es: "San Vicente y las Granadinas", + cn: "圣文森特和格林纳丁斯", + }, + code: "VC", + iso3: "VCT", + dial: "+1-784", + continent: "NA", + }, + { + name: { + en: "Samoa", + fr: "Samoa", + es: "Samoa", + cn: "萨摩亚", + }, + code: "WS", + iso3: "WSM", + dial: "+685", + continent: "OC", + }, + { + name: { + en: "San Marino", + fr: "Saint-Marin", + es: "San Marino", + cn: "圣马力诺", + }, + code: "SM", + iso3: "SMR", + dial: "+378", + continent: "EU", + }, + { + name: { + en: "Sao Tome and Principe", + fr: "Sao Tomé-et-Principe", + es: "Santo Tomé y Príncipe", + cn: "圣多美和普林西比", + }, + code: "ST", + iso3: "STP", + dial: "+239", + continent: "AF", + }, + { + name: { + en: "Saudi Arabia", + fr: "Arabie saoudite", + es: "Arabia Saudita", + cn: "沙特阿拉伯", + }, + code: "SA", + iso3: "SAU", + dial: "+966", + continent: "AS", + }, + { + name: { + en: "Senegal", + fr: "Sénégal", + es: "Senegal", + cn: "塞内加尔", + }, + code: "SN", + iso3: "SEN", + dial: "+221", + continent: "AF", + }, + { + name: { + en: "Serbia", + fr: "Serbie", + es: "Serbia", + cn: "塞尔维亚", + }, + code: "RS", + iso3: "SRB", + dial: "+381 p", + continent: "EU", + }, + { + name: { + en: "Seychelles", + fr: "Seychelles", + es: "Seychelles", + cn: "塞舌尔", + }, + code: "SC", + iso3: "SYC", + dial: "+248", + continent: "AF", + }, + { + name: { + en: "Sierra Leone", + fr: "Sierra Leone", + es: "Sierra Leona", + cn: "塞拉利昂", + }, + code: "SL", + iso3: "SLE", + dial: "+232", + continent: "AF", + }, + { + name: { + en: "Singapore", + fr: "Singapour", + es: "Singapur", + cn: "新加坡", + }, + code: "SG", + iso3: "SGP", + dial: "+65", + continent: "AS", + }, + { + name: { + en: "Sint Maarten (Dutch part)", + fr: "Saint-Martin (partie néerlandaise)", + es: "San Martín (parte Holandesa)", + cn: "圣马丁(荷属)", + }, + code: "SX", + iso3: "SXM", + dial: "+1-721", + continent: "NA", + }, + { + name: { + en: "Slovakia", + fr: "Slovaquie", + es: "Eslovaquia", + cn: "斯洛伐克", + }, + code: "SK", + iso3: "SVK", + dial: "+421", + continent: "EU", + }, + { + name: { + en: "Slovenia", + fr: "Slovénie", + es: "Eslovenia", + cn: "斯洛文尼亚", + }, + code: "SI", + iso3: "SVN", + dial: "+386", + continent: "EU", + }, + { + name: { + en: "Solomon Islands", + fr: "Îles Salomon", + es: "Islas Salomón", + cn: "所罗门群岛", + }, + code: "SB", + iso3: "SLB", + dial: "+677", + continent: "OC", + }, + { + name: { + en: "Somalia", + fr: "Somalie", + es: "Somalia", + cn: "索马里", + }, + code: "SO", + iso3: "SOM", + dial: "+252", + continent: "AF", + }, + { + name: { + en: "South Africa", + fr: "Afrique du Sud", + es: "Sudáfrica", + cn: "南非", + }, + code: "ZA", + iso3: "ZAF", + dial: "+27", + continent: "AF", + }, + { + name: { + en: "South Georgia and the South Sandwich Islands", + fr: "Géorgie du Sud-et-les Îles Sandwich du Sud", + es: "Georgia del Sur y las Islas Sandwich del Sur", + cn: "南乔治亚岛和南桑德韦奇岛", + }, + code: "GS", + iso3: "SGS", + dial: "+500", + continent: "AN", + }, + { + name: { + en: "South Sudan", + fr: "Soudan du Sud", + es: "Sudán del Sur", + cn: "南苏丹", + }, + code: "SS", + iso3: "SSD", + dial: "+211", + continent: "AF", + }, + { + name: { + en: "Spain", + fr: "Espagne", + es: "España", + cn: "西班牙", + }, + code: "ES", + iso3: "ESP", + dial: "+34", + continent: "EU", + }, + { + name: { + en: "Sri Lanka", + fr: "Sri Lanka", + es: "Sri Lanka", + cn: "斯里兰卡", + }, + code: "LK", + iso3: "LKA", + dial: "+94", + continent: "AS", + }, + { + name: { + en: "State of Palestine", + fr: "État de Palestine", + es: "Estado de Palestina", + cn: "巴勒斯坦国", + }, + code: "PS", + iso3: "PSE", + dial: "+970", + continent: "AS", + }, + { + name: { + en: "Sudan", + fr: "Soudan", + es: "Sudán", + cn: "苏丹", + }, + code: "SD", + iso3: "SDN", + dial: "+249", + continent: "AF", + }, + { + name: { + en: "Suriname", + fr: "Suriname", + es: "Suriname", + cn: "苏里南", + }, + code: "SR", + iso3: "SUR", + dial: "+597", + continent: "SA", + }, + { + name: { + en: "Svalbard and Jan Mayen Islands", + fr: "Îles Svalbard-et-Jan Mayen", + es: "Islas Svalbard y Jan Mayen", + cn: "斯瓦尔巴群岛和扬马延岛", + }, + code: "SJ", + iso3: "SJM", + dial: "+47", + continent: "EU", + }, + { + name: { + en: "Sweden", + fr: "Suède", + es: "Suecia", + cn: "瑞典", + }, + code: "SE", + iso3: "SWE", + dial: "+46", + continent: "EU", + }, + { + name: { + en: "Switzerland", + fr: "Suisse", + es: "Suiza", + cn: "瑞士", + }, + code: "CH", + iso3: "CHE", + dial: "+41", + continent: "EU", + }, + { + name: { + en: "Syrian Arab Republic", + fr: "République arabe syrienne", + es: "República Árabe Siria", + cn: "阿拉伯叙利亚共和国", + }, + code: "SY", + iso3: "SYR", + dial: "+963", + continent: "AS", + }, + { + name: { + en: "Taiwan", + fr: "Taïwan", + es: "Taiwán", + cn: "台湾", + }, + code: "TW", + iso3: "TWN", + dial: "+886", + continent: "AS", + }, + { + name: { + en: "Tajikistan", + fr: "Tadjikistan", + es: "Tayikistán", + cn: "塔吉克斯坦", + }, + code: "TJ", + iso3: "TJK", + dial: "+992", + continent: "AS", + }, + { + name: { + en: "Thailand", + fr: "Thaïlande", + es: "Tailandia", + cn: "泰国", + }, + code: "TH", + iso3: "THA", + dial: "+66", + continent: "AS", + }, + { + name: { + en: "Timor-Leste", + fr: "Timor-Leste", + es: "Timor-Leste", + cn: "东帝汶", + }, + code: "TL", + iso3: "TLS", + dial: "+670", + continent: "OC", + }, + { + name: { + en: "Togo", + fr: "Togo", + es: "Togo", + cn: "多哥", + }, + code: "TG", + iso3: "TGO", + dial: "+228", + continent: "AF", + }, + { + name: { + en: "Tokelau", + fr: "Tokélaou", + es: "Tokelau", + cn: "托克劳", + }, + code: "TK", + iso3: "TKL", + dial: "+690", + continent: "OC", + }, + { + name: { + en: "Tonga", + fr: "Tonga", + es: "Tonga", + cn: "汤加", + }, + code: "TO", + iso3: "TON", + dial: "+676", + continent: "OC", + }, + { + name: { + en: "Trinidad and Tobago", + fr: "Trinité-et-Tobago", + es: "Trinidad y Tabago", + cn: "特立尼达和多巴哥", + }, + code: "TT", + iso3: "TTO", + dial: "+1-868", + continent: "NA", + }, + { + name: { + en: "Tunisia", + fr: "Tunisie", + es: "Túnez", + cn: "突尼斯", + }, + code: "TN", + iso3: "TUN", + dial: "+216", + continent: "AF", + }, + { + name: { + en: "Turkey", + fr: "Türkiye", + es: "Türkiye", + cn: "土耳其", + }, + code: "TR", + iso3: "TUR", + dial: "+90", + continent: "AS", + }, + { + name: { + en: "Turkmenistan", + fr: "Turkménistan", + es: "Turkmenistán", + cn: "土库曼斯坦", + }, + code: "TM", + iso3: "TKM", + dial: "+993", + continent: "AS", + }, + { + name: { + en: "Turks and Caicos Islands", + fr: "Îles Turques-et-Caïques", + es: "Islas Turcas y Caicos", + cn: "特克斯和凯科斯群岛", + }, + code: "TC", + iso3: "TCA", + dial: "+1-649", + continent: "NA", + }, + { + name: { + en: "Tuvalu", + fr: "Tuvalu", + es: "Tuvalu", + cn: "图瓦卢", + }, + code: "TV", + iso3: "TUV", + dial: "+688", + continent: "OC", + }, + { + name: { + en: "Uganda", + fr: "Ouganda", + es: "Uganda", + cn: "乌干达", + }, + code: "UG", + iso3: "UGA", + dial: "+256", + continent: "AF", + }, + { + name: { + en: "Ukraine", + fr: "Ukraine", + es: "Ucrania", + cn: "乌克兰", + }, + code: "UA", + iso3: "UKR", + dial: "+380", + continent: "EU", + }, + { + name: { + en: "United Arab Emirates", + fr: "Émirats arabes unis", + es: "Emiratos Árabes Unidos", + cn: "阿拉伯联合酋长国", + }, + code: "AE", + iso3: "ARE", + dial: "+971", + continent: "AS", + }, + { + name: { + en: "United Kingdom of Great Britain and Northern Ireland", + fr: "Royaume-Uni de Grande-Bretagne et d’Irlande du Nord", + es: "Reino Unido de Gran Bretaña e Irlanda del Norte", + cn: "大不列颠及北爱尔兰联合王国", + }, + code: "GB", + iso3: "GBR", + dial: "+44", + continent: "EU", + }, + { + name: { + en: "United Republic of Tanzania", + fr: "République-Unie de Tanzanie", + es: "República Unida de Tanzanía", + cn: "坦桑尼亚联合共和国", + }, + code: "TZ", + iso3: "TZA", + dial: "+255", + continent: "AF", + }, + { + name: { + en: "United States Minor Outlying Islands", + fr: "Îles mineures éloignées des États-Unis", + es: "Islas menores alejadas de Estados Unidos", + cn: "美国本土外小岛屿", + }, + code: "UM", + iso3: "UMI", + dial: "", + continent: "OC", + }, + { + name: { + en: "United States of America", + fr: "États-Unis d’Amérique", + es: "Estados Unidos de América", + cn: "美利坚合众国", + }, + code: "US", + iso3: "USA", + dial: "+1", + continent: "NA", + }, + { + name: { + en: "United States Virgin Islands", + fr: "Îles Vierges américaines", + es: "Islas Vírgenes de los Estados Unidos", + cn: "美属维尔京群岛", + }, + code: "VI", + iso3: "VIR", + dial: "+1-340", + continent: "NA", + }, + { + name: { + en: "Uruguay", + fr: "Uruguay", + es: "Uruguay", + cn: "乌拉圭", + }, + code: "UY", + iso3: "URY", + dial: "+598", + continent: "SA", + }, + { + name: { + en: "Uzbekistan", + fr: "Ouzbékistan", + es: "Uzbekistán", + cn: "乌兹别克斯坦", + }, + code: "UZ", + iso3: "UZB", + dial: "+998", + continent: "AS", + }, + { + name: { + en: "Vanuatu", + fr: "Vanuatu", + es: "Vanuatu", + cn: "瓦努阿图", + }, + code: "VU", + iso3: "VUT", + dial: "+678", + continent: "OC", + }, + { + name: { + en: "Venezuela (Bolivarian Republic of)", + fr: "Venezuela (République bolivarienne du)", + es: "Venezuela (República Bolivariana de)", + cn: "委内瑞拉玻利瓦尔共和国", + }, + code: "VE", + iso3: "VEN", + dial: "+58", + continent: "SA", + }, + { + name: { + en: "Viet Nam", + fr: "Viet Nam", + es: "Viet Nam", + cn: "越南", + }, + code: "VN", + iso3: "VNM", + dial: "+84", + continent: "AS", + }, + { + name: { + en: "Wallis and Futuna Islands", + fr: "Îles Wallis-et-Futuna", + es: "Islas Wallis y Futuna", + cn: "瓦利斯群岛和富图纳群岛", + }, + code: "WF", + iso3: "WLF", + dial: "+681", + continent: "OC", + }, + { + name: { + en: "Western Sahara", + fr: "Sahara occidental", + es: "Sáhara Occidental", + cn: "西撒哈拉", + }, + code: "EH", + iso3: "ESH", + dial: "+212", + continent: "AF", + }, + { + name: { + en: "Yemen", + fr: "Yémen", + es: "Yemen", + cn: "也门", + }, + code: "YE", + iso3: "YEM", + dial: "+967", + continent: "AS", + }, + { + name: { + en: "Zambia", + fr: "Zambie", + es: "Zambia", + cn: "赞比亚", + }, + code: "ZM", + iso3: "ZMB", + dial: "+260", + continent: "AF", + }, + { + name: { + en: "Zimbabwe", + fr: "Zimbabwe", + es: "Zimbabwe", + cn: "津巴布韦", + }, + code: "ZW", + iso3: "ZWE", + dial: "+263", + continent: "AF", + }, +]; diff --git a/app/error.vue b/app/error.vue new file mode 100644 index 0000000..5975512 --- /dev/null +++ b/app/error.vue @@ -0,0 +1,271 @@ + + + + + diff --git a/app/pages/admin/manage/members/index.vue b/app/pages/admin/manage/members/index.vue new file mode 100644 index 0000000..1077732 --- /dev/null +++ b/app/pages/admin/manage/members/index.vue @@ -0,0 +1,165 @@ + + + + +