| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- <script setup>
- import { computed } from 'vue';
- import { useI18n } from 'vue-i18n';
- const { t } = useI18n();
- defineProps({
- open: { type: Boolean, default: false },
- });
- const emit = defineEmits(['update:open', 'install']);
- const PRESETS = [
- {
- name: 'Google DNS',
- family: false,
- data: [
- '8.8.8.8',
- '8.8.4.4',
- '2001:4860:4860::8888',
- '2001:4860:4860::8844',
- ],
- },
- {
- name: 'Cloudflare DNS',
- family: false,
- data: [
- '1.1.1.1',
- '1.0.0.1',
- '2606:4700:4700::1111',
- '2606:4700:4700::1001',
- ],
- },
- {
- name: 'AdGuard DNS',
- family: false,
- data: [
- '94.140.14.14',
- '94.140.15.15',
- '2a10:50c0::ad1:ff',
- '2a10:50c0::ad2:ff',
- ],
- },
- {
- name: 'AdGuard Family DNS',
- family: true,
- data: [
- '94.140.14.15',
- '94.140.15.16',
- '2a10:50c0::bad1:ff',
- '2a10:50c0::bad2:ff',
- ],
- },
- {
- name: 'Cloudflare Family DNS',
- family: true,
- data: [
- '1.1.1.3',
- '1.0.0.3',
- '2606:4700:4700::1113',
- '2606:4700:4700::1003',
- ],
- },
- ];
- const title = computed(() => t('pages.xray.dns.dnsPresetTitle'));
- function close() { emit('update:open', false); }
- function install(preset) {
- emit('install', [...preset.data]);
- }
- </script>
- <template>
- <a-modal :open="open" :title="title" :footer="null" :mask-closable="false" @cancel="close">
- <a-list bordered>
- <a-list-item v-for="preset in PRESETS" :key="preset.name" class="preset-row">
- <a-space size="small" align="center">
- <a-tag :color="preset.family ? 'purple' : 'green'">
- {{ preset.family ? t('pages.xray.dns.dnsPresetFamily') : 'DNS' }}
- </a-tag>
- <span class="preset-name">{{ preset.name }}</span>
- </a-space>
- <a-button type="primary" size="small" @click="install(preset)">
- {{ t('install') }}
- </a-button>
- </a-list-item>
- </a-list>
- </a-modal>
- </template>
- <style scoped>
- .preset-row {
- display: flex;
- align-items: center;
- justify-content: space-between;
- gap: 8px;
- }
- .preset-name {
- font-weight: 500;
- }
- </style>
|