CN-653 fix: overview-app逻辑调整

This commit is contained in:
chenjinsong
2022-08-04 12:03:15 +08:00
parent 509a051936
commit e7fcd2f4e2
8 changed files with 1174 additions and 19 deletions

View File

@@ -81,6 +81,7 @@ export default {
res.loginSuccessPath = this.$route.query.redirect
this.loginSuccess(res)
localStorage.setItem(storageKey.username, this.username)
localStorage.setItem(storageKey.userId, '1')
localStorage.setItem(storageKey.token, res.data.token)
} else if (res.code === 518005) {
this.$message.error(this.$t('Incorrect username or password'))

View File

@@ -1,6 +1,7 @@
.cn-chart__map {
height: 100%;
width: 100%;
position: relative;
border-radius: 4px;
overflow: hidden;
@@ -9,4 +10,57 @@
width: 100%;
background-color: #CAD2D3;
}
.map-filter {
position: absolute;
right: 10px;
top: 10px;
.map-select {
margin-left: 10px;
.el-input__inner {
color: #2C72C6;
}
&.map-select__direction {
width: 110px;
}
}
}
.map-legend {
display: flex;
flex-direction: column;
justify-content: center;
height: 92px;
bottom: 10px;
left: 10px;
position: absolute;
padding: 0 10px;
background-color: white;
.map-legend__row {
display: flex;
align-items: center;
height: 23px;
.map-legend__symbol {
height: 8px;
width: 8px;
border-radius: 50%;
&.map-legend__symbol--green {
background-color: #7E9F54;
}
&.map-legend__symbol--yellow {
background-color: #E5A219;
}
&.map-legend__symbol--red {
background-color: #E26154;
}
}
.map-legend__desc {
padding-left: 5px;
color: #575757;
}
}
}
}

View File

@@ -13,6 +13,7 @@ export const storageKey = {
timezoneLocalOffset: 'cn-timezone-local-offset',
token: 'cn-token',
username: 'cn-username',
userId: 'cn-userId',
sysName: 'cn-sys-name',
sysLogo: 'cn-sys-logo',
pageSize: 'cn-pageSize',

View File

@@ -35,7 +35,7 @@
import VueGridLayout from 'vue-grid-layout'
import _ from 'lodash'
import Chart from '@/views/charts2/Chart'
import { panelTypeAndRouteMapping } from '@/utils/constants'
import {panelTypeAndRouteMapping, storageKey} from '@/utils/constants'
import { typeMapping } from '@/views/charts2/chart-tools'
export default {
name: 'ChartList',
@@ -68,6 +68,17 @@ export default {
} else {
this.layout = [...n]
}
const overviewAppChart = n.find(c => c.type === typeMapping.networkOverview.appList)
let actuallyLength = 0
if (overviewAppChart) {
const params = overviewAppChart.params.app ? overviewAppChart.params : { app: [] }
if (params.app.some(p => p.user === parseInt(localStorage.getItem(storageKey.userId)))) {
actuallyLength = params.app.find(p => p.user === parseInt(localStorage.getItem(storageKey.userId))).list.length + 1
} else {
actuallyLength = params.app.find(p => p.user === 'default').list.length + 1
}
overviewAppChart.h = actuallyLength % 3 > 0 ? (Math.floor(actuallyLength / 3) + 1) * 2 + 2 : Math.floor(actuallyLength / 3) * 2 + 2
}
}
},
npmTabIndex (n) {

View File

@@ -38,6 +38,7 @@ import { getPanelList, getChartList } from '@/utils/api'
import { getNowTime } from '@/utils/date-util'
import { getTypeCategory } from '@/views/charts/charts/tools'
import ChartList from '@/views/charts2/ChartList'
import { typeMapping } from '@/views/charts2/chart-tools'
export default {
name: 'Panel',
@@ -59,6 +60,7 @@ export default {
await this.init()
const vm = this
this.emitter.on('reloadChartList', async function () {
vm.chartList = []
vm.chartList = (await getChartList({ panelId: vm.panel.id, pageSize: -1 })).map(chart => {
chart.i = chart.id
// 递归初始化各属性

View File

@@ -106,7 +106,7 @@
<script>
import unitConvert from '@/utils/unit-convert'
import { unitTypes } from '@/utils/constants'
import { storageKey, unitTypes } from '@/utils/constants'
import * as echarts from 'echarts'
import { appListChartOption } from '@/views/charts2/charts/options/echartOption'
import { shallowRef } from 'vue'
@@ -126,8 +126,21 @@ export default {
},
data () {
return {
metricFilter: '',
metricOptions: [],
metricFilter: 'Bits/s',
metricOptions: [
{
value: 'Bits/s',
label: 'Bits/s'
},
{
value: 'Packets/s',
label: 'Packets/s'
},
{
value: 'Sessions/s',
label: 'Sessions/s'
}
],
appData: [],
// 假数据
appTempData: [
@@ -173,9 +186,9 @@ export default {
// }
this.appData.forEach((app, i) => {
// 根据app.name和app.type查除接口获取数据
app.value = this.appTempData[i].value
app.number = this.appTempData[i].number
app.number1 = this.appTempData[i].number1
app.value = this.appTempData[i % 10].value
app.number = this.appTempData[i % 10].number
app.number1 = this.appTempData[i % 10].number1
app.lineData = [
[
'1658128320',
@@ -635,8 +648,8 @@ export default {
provideShow: false
})
}
const oldApps = this.chart.params.app ? this.chart.params.app.filter(a => a.type === 'app') : []
const oldProviders = this.chart.params.app ? this.chart.params.app.filter(a => a.type === 'provider') : []
const oldApps = this.appData ? this.appData.filter(a => a.type === 'app') : []
const oldProviders = this.appData ? this.appData.filter(a => a.type === 'provider') : []
this.appOptions = appOptions.filter(a => {
return !oldApps.some(o => o.name === a.name)
})
@@ -670,10 +683,8 @@ export default {
}
},
// 保存变更并且在增、删app后根据当前app数量更改整体高度
saveChart (toSaveChart, length) {
saveChart (toSaveChart) {
return new Promise(resolve => {
const actuallyLength = this.appData.length + length + 1
toSaveChart.h = actuallyLength % 3 > 0 ? (Math.floor(actuallyLength / 3) + 1) * 2 + 2 : Math.floor(actuallyLength / 3) * 2 + 2
put(api.chart, toSaveChart).then(res => {
if (res.code === 200) {
this.emitter.emit('reloadChartList')
@@ -685,24 +696,59 @@ export default {
del (app, index) {
const appData = _.cloneDeep(this.appData)
appData.splice(index, 1)
const toSaveParams = this.chart.params.app ? this.chart.params : { app: [] }
if (toSaveParams.app.some(p => p.user === parseInt(localStorage.getItem(storageKey.userId)))) {
toSaveParams.app.forEach(p => {
if (p.user === parseInt(localStorage.getItem(storageKey.userId))) {
p.list = appData.map(p => {
return {
type: p.type,
name: p.name
}
})
}
})
} else {
toSaveParams.app.push({
user: parseInt(localStorage.getItem(storageKey.userId)),
list: appData.map(p => {
return {
type: p.type,
name: p.name
}
})
})
}
const toSaveChart = {
...this.chart,
params: JSON.stringify({ app: appData })
params: JSON.stringify(toSaveParams)
}
this.saveChart(toSaveChart, -1).then(res => {
this.saveChart(toSaveChart).then(res => {
this.appData.splice(index, 1)
})
},
save () {
if (this.toSaveApp.length > 0) {
const toSaveParams = this.chart.params.app ? this.chart.params : { app: [] }
toSaveParams.app = [...toSaveParams.app, ...this.toSaveApp]
if (toSaveParams.app.some(p => p.user === parseInt(localStorage.getItem(storageKey.userId)))) {
toSaveParams.app.forEach(p => {
if (p.user === parseInt(localStorage.getItem(storageKey.userId))) {
p.list = [...p.list, ...this.toSaveApp]
}
})
} else {
const defaultApp = toSaveParams.app.find(p => p.user === 'default')
toSaveParams.app.push({
user: parseInt(localStorage.getItem(storageKey.userId)),
list: [...defaultApp.list, ...this.toSaveApp]
})
}
const toSaveChart = {
...this.chart,
params: JSON.stringify(toSaveParams)
}
this.saveChart(toSaveChart, this.toSaveApp.length).then(res => {
this.appData = _.cloneDeep(toSaveParams.app)
this.saveChart(toSaveChart).then(res => {
this.appData = _.cloneDeep(toSaveParams.app.find(p => p.user === parseInt(localStorage.getItem(storageKey.userId))).list)
this.$nextTick(() => {
this.init()
this.showAddApp = false
@@ -757,7 +803,13 @@ export default {
},
mounted () {
if (this.chart.params && this.chart.params.app) {
this.appData = _.cloneDeep(this.chart.params.app)
const userId = parseInt(localStorage.getItem(storageKey.userId))
const apps = _.cloneDeep(this.chart.params.app)
let app = apps.find(p => p.user === userId)
if (!app) {
app = apps.find(p => p.user === 'default')
}
this.appData = app.list
}
this.timer = setTimeout(() => {
this.init()

View File

@@ -1,6 +1,41 @@
<template>
<div class="cn-chart__map">
<div class="map-canvas" id="npmMap"></div>
<div class="map-filter">
<el-select
size="mini"
v-model="trafficDirection"
class="map-select map-select__direction"
>
<el-option value="Server">Server</el-option>
<el-option value="Client">Client</el-option>
</el-select>
<el-select
size="mini"
v-model="location"
class="map-select map-select__location"
clearable
placeholder="All"
filterable
>
<template #prefix><i class="cn-icon cn-icon-location" style="color: #575757;"></i></template>
<el-option v-for="(country, index) in locationOptions" :key="index" :value="country.value">{{country.label}}</el-option>
</el-select>
</div>
<div class="map-legend">
<div class="map-legend__row">
<div class="map-legend__symbol map-legend__symbol--green"></div>
<div class="map-legend__desc">{{$t('npm.highScore')}}</div>
</div>
<div class="map-legend__row">
<div class="map-legend__symbol map-legend__symbol--yellow"></div>
<div class="map-legend__desc">{{$t('npm.middleScore')}}</div>
</div>
<div class="map-legend__row">
<div class="map-legend__symbol map-legend__symbol--red"></div>
<div class="map-legend__desc">{{$t('npm.lowScore')}}</div>
</div>
</div>
</div>
</template>
@@ -11,14 +46,19 @@ import * as am4Core from '@amcharts/amcharts4/core'
import * as am4Maps from '@amcharts/amcharts4/maps'
import { getGeoData } from '@/utils/tools'
import { storageKey } from '@/utils/constants'
import locationOptions from '@/views/charts2/charts/locationOptions'
export default {
name: 'NpmMap',
data () {
return {
locationOptions,
mapTestData,
myChart: null,
polygonSeries: null
polygonSeries: null,
// Server | Client
trafficDirection: 'Server',
location: ''
}
},
methods: {

View File

@@ -0,0 +1,994 @@
export default [
{
value: 'Afghanistan',
label: 'Afghanistan'
},
{
value: 'Albania',
label: 'Albania'
},
{
value: 'Algeria',
label: 'Algeria'
},
{
value: 'American Samoa',
label: 'American Samoa'
},
{
value: 'Andorra',
label: 'Andorra'
},
{
value: 'Angola',
label: 'Angola'
},
{
value: 'Anguilla',
label: 'Anguilla'
},
{
value: 'Antarctica',
label: 'Antarctica'
},
{
value: 'Antigua and Barbuda',
label: 'Antigua and Barbuda'
},
{
value: 'Argentina',
label: 'Argentina'
},
{
value: 'Armenia',
label: 'Armenia'
},
{
value: 'Aruba',
label: 'Aruba'
},
{
value: 'Australia',
label: 'Australia'
},
{
value: 'Austria',
label: 'Austria'
},
{
value: 'Azerbaijan',
label: 'Azerbaijan'
},
{
value: 'Bahamas (the)',
label: 'Bahamas (the)'
},
{
value: 'Bahrain',
label: 'Bahrain'
},
{
value: 'Bangladesh',
label: 'Bangladesh'
},
{
value: 'Barbados',
label: 'Barbados'
},
{
value: 'Belarus',
label: 'Belarus'
},
{
value: 'Belgium',
label: 'Belgium'
},
{
value: 'Belize',
label: 'Belize'
},
{
value: 'Benin',
label: 'Benin'
},
{
value: 'Bermuda',
label: 'Bermuda'
},
{
value: 'Åland Islands',
label: 'Åland Islands'
},
{
value: 'Bhutan',
label: 'Bhutan'
},
{
value: 'Bolivia (Plurinational State of)',
label: 'Bolivia (Plurinational State of)'
},
{
value: 'Bonaire, Sint Eustatius and Saba',
label: 'Bonaire, Sint Eustatius and Saba'
},
{
value: 'Bosnia and Herzegovina',
label: 'Bosnia and Herzegovina'
},
{
value: 'Botswana',
label: 'Botswana'
},
{
value: 'Bouvet Island',
label: 'Bouvet Island'
},
{
value: 'Brazil',
label: 'Brazil'
},
{
value: 'British Indian Ocean Territory (the)',
label: 'British Indian Ocean Territory (the)'
},
{
value: 'Brunei Darussalam',
label: 'Brunei Darussalam'
},
{
value: 'Bulgaria',
label: 'Bulgaria'
},
{
value: 'Burkina Faso',
label: 'Burkina Faso'
},
{
value: 'Burundi',
label: 'Burundi'
},
{
value: 'Cabo Verde',
label: 'Cabo Verde'
},
{
value: 'Cambodia',
label: 'Cambodia'
},
{
value: 'Cameroon',
label: 'Cameroon'
},
{
value: 'Canada',
label: 'Canada'
},
{
value: 'Cayman Islands (the)',
label: 'Cayman Islands (the)'
},
{
value: 'Central African Republic (the)',
label: 'Central African Republic (the)'
},
{
value: 'Chad',
label: 'Chad'
},
{
value: 'Chile',
label: 'Chile'
},
{
value: 'China',
label: 'China'
},
{
value: 'Christmas Island',
label: 'Christmas Island'
},
{
value: 'Cocos (Keeling) Islands (the)',
label: 'Cocos (Keeling) Islands (the)'
},
{
value: 'Colombia',
label: 'Colombia'
},
{
value: 'Comoros (the)',
label: 'Comoros (the)'
},
{
value: 'Congo (the Democratic Republic of the)',
label: 'Congo (the Democratic Republic of the)'
},
{
value: 'Congo (the)',
label: 'Congo (the)'
},
{
value: 'Cook Islands (the)',
label: 'Cook Islands (the)'
},
{
value: 'Costa Rica',
label: 'Costa Rica'
},
{
value: 'Croatia',
label: 'Croatia'
},
{
value: 'Cuba',
label: 'Cuba'
},
{
value: 'Curaçao',
label: 'Curaçao'
},
{
value: 'Cyprus',
label: 'Cyprus'
},
{
value: 'Czech Republic',
label: 'Czech Republic'
},
{
value: "Côte d'Ivoire",
label: "Côte d'Ivoire"
},
{
value: 'Denmark',
label: 'Denmark'
},
{
value: 'Djibouti',
label: 'Djibouti'
},
{
value: 'Dominica',
label: 'Dominica'
},
{
value: 'Dominican Republic (the)',
label: 'Dominican Republic (the)'
},
{
value: 'Ecuador',
label: 'Ecuador'
},
{
value: 'Egypt',
label: 'Egypt'
},
{
value: 'El Salvador',
label: 'El Salvador'
},
{
value: 'Equatorial Guinea',
label: 'Equatorial Guinea'
},
{
value: 'Eritrea',
label: 'Eritrea'
},
{
value: 'Estonia',
label: 'Estonia'
},
{
value: 'Eswatini',
label: 'Eswatini'
},
{
value: 'Ethiopia',
label: 'Ethiopia'
},
{
value: 'Falkland Islands (the) [Malvinas]',
label: 'Falkland Islands (the) [Malvinas]'
},
{
value: 'Faroe Islands (the)',
label: 'Faroe Islands (the)'
},
{
value: 'Fiji',
label: 'Fiji'
},
{
value: 'Finland',
label: 'Finland'
},
{
value: 'France',
label: 'France'
},
{
value: 'French Guiana',
label: 'French Guiana'
},
{
value: 'French Polynesia',
label: 'French Polynesia'
},
{
value: 'French Southern Territories (the)',
label: 'French Southern Territories (the)'
},
{
value: 'Gabon',
label: 'Gabon'
},
{
value: 'Gambia (the)',
label: 'Gambia (the)'
},
{
value: 'Georgia',
label: 'Georgia'
},
{
value: 'Germany',
label: 'Germany'
},
{
value: 'Ghana',
label: 'Ghana'
},
{
value: 'Gibraltar',
label: 'Gibraltar'
},
{
value: 'Greece',
label: 'Greece'
},
{
value: 'Greenland',
label: 'Greenland'
},
{
value: 'Grenada',
label: 'Grenada'
},
{
value: 'Guadeloupe',
label: 'Guadeloupe'
},
{
value: 'Guam',
label: 'Guam'
},
{
value: 'Guatemala',
label: 'Guatemala'
},
{
value: 'Guernsey',
label: 'Guernsey'
},
{
value: 'Guinea',
label: 'Guinea'
},
{
value: 'Guinea-Bissau',
label: 'Guinea-Bissau'
},
{
value: 'Guyana',
label: 'Guyana'
},
{
value: 'Haiti',
label: 'Haiti'
},
{
value: 'Heard Island and McDonald Islands',
label: 'Heard Island and McDonald Islands'
},
{
value: 'Holy See (the)',
label: 'Holy See (the)'
},
{
value: 'Honduras',
label: 'Honduras'
},
{
value: 'Hong Kong',
label: 'Hong Kong'
},
{
value: 'Hungary',
label: 'Hungary'
},
{
value: 'Iceland',
label: 'Iceland'
},
{
value: 'India',
label: 'India'
},
{
value: 'Indonesia',
label: 'Indonesia'
},
{
value: 'Iran (Islamic Republic of)',
label: 'Iran (Islamic Republic of)'
},
{
value: 'Iraq',
label: 'Iraq'
},
{
value: 'Ireland',
label: 'Ireland'
},
{
value: 'Isle of Man',
label: 'Isle of Man'
},
{
value: 'Israel',
label: 'Israel'
},
{
value: 'Italy',
label: 'Italy'
},
{
value: 'Jamaica',
label: 'Jamaica'
},
{
value: 'Japan',
label: 'Japan'
},
{
value: 'Jersey',
label: 'Jersey'
},
{
value: 'Jordan',
label: 'Jordan'
},
{
value: 'Kazakhstan',
label: 'Kazakhstan'
},
{
value: 'Kenya',
label: 'Kenya'
},
{
value: 'Kiribati',
label: 'Kiribati'
},
{
value: 'Korea',
label: 'Korea'
},
{
value: 'Kuwait',
label: 'Kuwait'
},
{
value: 'Kyrgyzstan',
label: 'Kyrgyzstan'
},
{
value: "Lao People's Democratic Republic (the)",
label: "Lao People's Democratic Republic (the)"
},
{
value: 'Latvia',
label: 'Latvia'
},
{
value: 'Lebanon',
label: 'Lebanon'
},
{
value: 'Lesotho',
label: 'Lesotho'
},
{
value: 'Liberia',
label: 'Liberia'
},
{
value: 'Libya',
label: 'Libya'
},
{
value: 'Liechtenstein',
label: 'Liechtenstein'
},
{
value: 'Lithuania',
label: 'Lithuania'
},
{
value: 'Luxembourg',
label: 'Luxembourg'
},
{
value: 'Macao',
label: 'Macao'
},
{
value: 'Madagascar',
label: 'Madagascar'
},
{
value: 'Malawi',
label: 'Malawi'
},
{
value: 'Malaysia',
label: 'Malaysia'
},
{
value: 'Maldives',
label: 'Maldives'
},
{
value: 'Mali',
label: 'Mali'
},
{
value: 'Malta',
label: 'Malta'
},
{
value: 'Marshall Islands (the)',
label: 'Marshall Islands (the)'
},
{
value: 'Martinique',
label: 'Martinique'
},
{
value: 'Mauritania',
label: 'Mauritania'
},
{
value: 'Mauritius',
label: 'Mauritius'
},
{
value: 'Mayotte',
label: 'Mayotte'
},
{
value: 'Mexico',
label: 'Mexico'
},
{
value: 'Micronesia (Federated States of)',
label: 'Micronesia (Federated States of)'
},
{
value: 'Moldova (the Republic of)',
label: 'Moldova (the Republic of)'
},
{
value: 'Monaco',
label: 'Monaco'
},
{
value: 'Mongolia',
label: 'Mongolia'
},
{
value: 'Montenegro',
label: 'Montenegro'
},
{
value: 'Montserrat',
label: 'Montserrat'
},
{
value: 'Morocco',
label: 'Morocco'
},
{
value: 'Mozambique',
label: 'Mozambique'
},
{
value: 'Myanmar',
label: 'Myanmar'
},
{
value: 'Namibia',
label: 'Namibia'
},
{
value: 'Nauru',
label: 'Nauru'
},
{
value: 'Nepal',
label: 'Nepal'
},
{
value: 'Netherlands',
label: 'Netherlands'
},
{
value: 'New Caledonia',
label: 'New Caledonia'
},
{
value: 'New Zealand',
label: 'New Zealand'
},
{
value: 'Nicaragua',
label: 'Nicaragua'
},
{
value: 'Niger',
label: 'Niger'
},
{
value: 'Nigeria',
label: 'Nigeria'
},
{
value: 'Niue',
label: 'Niue'
},
{
value: 'Norfolk Island',
label: 'Norfolk Island'
},
{
value: 'North Macedonia',
label: 'North Macedonia'
},
{
value: 'Northern Mariana Islands (the)',
label: 'Northern Mariana Islands (the)'
},
{
value: 'Norway',
label: 'Norway'
},
{
value: 'Oman',
label: 'Oman'
},
{
value: 'Pakistan',
label: 'Pakistan'
},
{
value: 'Palau',
label: 'Palau'
},
{
value: 'Palestine, State of',
label: 'Palestine, State of'
},
{
value: 'Panama',
label: 'Panama'
},
{
value: 'Papua New Guinea',
label: 'Papua New Guinea'
},
{
value: 'Paraguay',
label: 'Paraguay'
},
{
value: 'Peru',
label: 'Peru'
},
{
value: 'Philippines',
label: 'Philippines'
},
{
value: 'Pitcairn',
label: 'Pitcairn'
},
{
value: 'Poland',
label: 'Poland'
},
{
value: 'Portugal',
label: 'Portugal'
},
{
value: 'Puerto Rico',
label: 'Puerto Rico'
},
{
value: 'Qatar',
label: 'Qatar'
},
{
value: 'Romania',
label: 'Romania'
},
{
value: 'Russian Federation',
label: 'Russian Federation'
},
{
value: 'Rwanda',
label: 'Rwanda'
},
{
value: 'Réunion',
label: 'Réunion'
},
{
value: 'Saint Barthélemy',
label: 'Saint Barthélemy'
},
{
value: 'Saint Helena, Ascension and Tristan da Cunha',
label: 'Saint Helena, Ascension and Tristan da Cunha'
},
{
value: 'Saint Kitts and Nevis',
label: 'Saint Kitts and Nevis'
},
{
value: 'Saint Lucia',
label: 'Saint Lucia'
},
{
value: 'Saint Martin',
label: 'Saint Martin'
},
{
value: 'Saint Pierre and Miquelon',
label: 'Saint Pierre and Miquelon'
},
{
value: 'Saint Vincent and the Grenadines',
label: 'Saint Vincent and the Grenadines'
},
{
value: 'Samoa',
label: 'Samoa'
},
{
value: 'San Marino',
label: 'San Marino'
},
{
value: 'Sao Tome and Principe',
label: 'Sao Tome and Principe'
},
{
value: 'Saudi Arabia',
label: 'Saudi Arabia'
},
{
value: 'Senegal',
label: 'Senegal'
},
{
value: 'Serbia',
label: 'Serbia'
},
{
value: 'Seychelles',
label: 'Seychelles'
},
{
value: 'Sierra Leone',
label: 'Sierra Leone'
},
{
value: 'Singapore',
label: 'Singapore'
},
{
value: 'Sint Maarten',
label: 'Sint Maarten'
},
{
value: 'Slovakia',
label: 'Slovakia'
},
{
value: 'Slovenia',
label: 'Slovenia'
},
{
value: 'Solomon Islands',
label: 'Solomon Islands'
},
{
value: 'Somalia',
label: 'Somalia'
},
{
value: 'South Africa',
label: 'South Africa'
},
{
value: 'South Georgia and the South Sandwich Islands',
label: 'South Georgia and the South Sandwich Islands'
},
{
value: 'South Sudan',
label: 'South Sudan'
},
{
value: 'Spain',
label: 'Spain'
},
{
value: 'Sri Lanka',
label: 'Sri Lanka'
},
{
value: 'Sudan',
label: 'Sudan'
},
{
value: 'Suriname',
label: 'Suriname'
},
{
value: 'Svalbard and Jan Mayen',
label: 'Svalbard and Jan Mayen'
},
{
value: 'Sweden',
label: 'Sweden'
},
{
value: 'Switzerland',
label: 'Switzerland'
},
{
value: 'Syrian Arab Republic',
label: 'Syrian Arab Republic'
},
{
value: 'Taiwan',
label: 'Taiwan'
},
{
value: 'Tajikistan',
label: 'Tajikistan'
},
{
value: 'Tanzania, the United Republic of',
label: 'Tanzania, the United Republic of'
},
{
value: 'Thailand',
label: 'Thailand'
},
{
value: 'Timor-Leste',
label: 'Timor-Leste'
},
{
value: 'Togo',
label: 'Togo'
},
{
value: 'Tokelau',
label: 'Tokelau'
},
{
value: 'Tonga',
label: 'Tonga'
},
{
value: 'Trinidad and Tobago',
label: 'Trinidad and Tobago'
},
{
value: 'Tunisia',
label: 'Tunisia'
},
{
value: 'Turkey',
label: 'Turkey'
},
{
value: 'Turkmenistan',
label: 'Turkmenistan'
},
{
value: 'Turks and Caicos Islands',
label: 'Turks and Caicos Islands'
},
{
value: 'Tuvalu',
label: 'Tuvalu'
},
{
value: 'Uganda',
label: 'Uganda'
},
{
value: 'Ukraine',
label: 'Ukraine'
},
{
value: 'United Arab Emirates',
label: 'United Arab Emirates'
},
{
value: 'United Kingdom of Great Britain and Northern Ireland',
label: 'United Kingdom of Great Britain and Northern Ireland'
},
{
value: 'United States Minor Outlying Islands',
label: 'United States Minor Outlying Islands'
},
{
value: 'United States',
label: 'United States'
},
{
value: 'Uruguay',
label: 'Uruguay'
},
{
value: 'Uzbekistan',
label: 'Uzbekistan'
},
{
value: 'Vanuatu',
label: 'Vanuatu'
},
{
value: 'Venezuela (Bolivarian Republic of)',
label: 'Venezuela (Bolivarian Republic of)'
},
{
value: 'Viet Nam',
label: 'Viet Nam'
},
{
value: 'Virgin Islands (British)',
label: 'Virgin Islands (British)'
},
{
value: 'Virgin Islands (U.S.)',
label: 'Virgin Islands (U.S.)'
},
{
value: 'Wallis and Futuna',
label: 'Wallis and Futuna'
},
{
value: 'Western Sahara*',
label: 'Western Sahara*'
},
{
value: 'Yemen',
label: 'Yemen'
},
{
value: 'Zambia',
label: 'Zambia'
},
{
value: 'Zimbabwe',
label: 'Zimbabwe'
}
]