|
6 | 6 | <a-form-item label='{{ i18n "pages.xray.outbound.address" }}'> |
7 | 7 | <a-input v-model.trim="dnsModal.dnsServer.address"></a-input> |
8 | 8 | </a-form-item> |
| 9 | + <a-form-item label='{{ i18n "pages.inbounds.port" }}'> |
| 10 | + <a-input-number v-model.number="dnsModal.dnsServer.port" :min="1" :max="65531"></a-input-number> |
| 11 | + </a-form-item> |
| 12 | + <a-form-item label='{{ i18n "pages.xray.dns.strategy" }}'> |
| 13 | + <a-select v-model="dnsModal.dnsServer.queryStrategy" :style="{ width: '100%' }" |
| 14 | + :dropdown-class-name="themeSwitcher.currentTheme"> |
| 15 | + <a-select-option :value="l" :label="l" v-for="l in ['UseSystem', 'UseIP', 'UseIPv4', 'UseIPv6']"> [[ l ]] </a-select-option> |
| 16 | + </a-select> |
| 17 | + </a-form-item> |
| 18 | + <a-divider :style="{ margin: '5px 0' }"></a-divider> |
9 | 19 | <a-form-item label='{{ i18n "pages.xray.dns.domains" }}'> |
10 | 20 | <a-button icon="plus" size="small" type="primary" @click="dnsModal.dnsServer.domains.push('')"></a-button> |
11 | 21 | <template v-for="(domain, index) in dnsModal.dnsServer.domains"> |
|
15 | 25 | </a-input> |
16 | 26 | </template> |
17 | 27 | </a-form-item> |
18 | | - <a-form-item label='{{ i18n "pages.xray.dns.strategy" }}' v-if="isAdvanced"> |
19 | | - <a-select v-model="dnsModal.dnsServer.queryStrategy" :style="{ width: '100%' }" |
20 | | - :dropdown-class-name="themeSwitcher.currentTheme"> |
21 | | - <a-select-option :value="l" :label="l" v-for="l in ['UseIP', 'UseIPv4', 'UseIPv6']"> [[ l ]] </a-select-option> |
22 | | - </a-select> |
23 | | - </a-form-item> |
24 | | - <a-form-item label='Skip Fallback' v-if="isAdvanced"> |
25 | | - <a-switch v-model="dnsModal.dnsServer.skipFallback"></a-switch> |
26 | | - </a-form-item> |
27 | 28 | <a-form-item label='{{ i18n "pages.xray.dns.expectIPs"}}'> |
28 | 29 | <a-button icon="plus" size="small" type="primary" @click="dnsModal.dnsServer.expectIPs.push('')"></a-button> |
29 | 30 | <template v-for="(domain, index) in dnsModal.dnsServer.expectIPs"> |
|
33 | 34 | </a-input> |
34 | 35 | </template> |
35 | 36 | </a-form-item> |
| 37 | + <a-form-item label='{{ i18n "pages.xray.dns.unexpectIPs"}}'> |
| 38 | + <a-button icon="plus" size="small" type="primary" @click="dnsModal.dnsServer.unexpectedIPs.push('')"></a-button> |
| 39 | + <template v-for="(domain, index) in dnsModal.dnsServer.unexpectedIPs"> |
| 40 | + <a-input v-model.trim="dnsModal.dnsServer.unexpectedIPs[index]"> |
| 41 | + <a-button icon="minus" size="small" slot="addonAfter" |
| 42 | + @click="dnsModal.dnsServer.unexpectedIPs.splice(index,1)"></a-button> |
| 43 | + </a-input> |
| 44 | + </template> |
| 45 | + </a-form-item> |
| 46 | + <a-divider :style="{ margin: '5px 0' }"></a-divider> |
| 47 | + <a-form-item label='Skip Fallback'> |
| 48 | + <a-switch v-model="dnsModal.dnsServer.skipFallback"></a-switch> |
| 49 | + </a-form-item> |
| 50 | + <a-form-item label='Disable Cache'> |
| 51 | + <a-switch v-model="dnsModal.dnsServer.disableCache"></a-switch> |
| 52 | + </a-form-item> |
| 53 | + <a-form-item label='Final Query'> |
| 54 | + <a-switch v-model="dnsModal.dnsServer.finalQuery"></a-switch> |
| 55 | + </a-form-item> |
36 | 56 | </a-form> |
37 | 57 | </a-modal> |
38 | 58 | <script> |
| 59 | + const defaultDnsObject = { |
| 60 | + address: "localhost", |
| 61 | + port: 53, |
| 62 | + domains: [], |
| 63 | + expectIPs: [], |
| 64 | + unexpectedIPs: [], |
| 65 | + queryStrategy: 'UseIP', |
| 66 | + skipFallback: true, |
| 67 | + disableCache: false, |
| 68 | + finalQuery: false |
| 69 | + } |
| 70 | + |
39 | 71 | const dnsModal = { |
40 | 72 | title: '', |
41 | 73 | visible: false, |
42 | 74 | okText: '{{ i18n "confirm" }}', |
43 | 75 | isEdit: false, |
44 | 76 | confirm: null, |
45 | | - dnsServer: { |
46 | | - address: "localhost", |
47 | | - domains: [], |
48 | | - expectIPs: [], |
49 | | - queryStrategy: 'UseIP', |
50 | | - skipFallback: true, |
| 77 | + dnsServer: { ...defaultDnsObject }, |
| 78 | + ok() { |
| 79 | + ObjectUtil.execute(dnsModal.confirm, { ...dnsModal.dnsServer }); |
51 | 80 | }, |
52 | | - ok() { |
53 | | - domains = dnsModal.dnsServer.domains.filter(d => d.length > 0); |
54 | | - expectIPs = dnsModal.dnsServer.expectIPs.filter(ip => ip.length > 0); |
55 | | - dnsModal.dnsServer.domains = domains; |
56 | | - dnsModal.dnsServer.expectIPs = expectIPs; |
57 | | - newDnsServer = (domains.length > 0 || expectIPs.length > 0) ? dnsModal.dnsServer : dnsModal.dnsServer.address; |
58 | | - ObjectUtil.execute(dnsModal.confirm, newDnsServer); |
59 | | - }, |
60 | | - |
61 | 81 | show({ |
62 | 82 | title = '', |
63 | 83 | okText = '{{ i18n "confirm" }}', |
|
69 | 89 | this.okText = okText; |
70 | 90 | this.confirm = confirm; |
71 | 91 | this.visible = true; |
| 92 | + this.isEdit = isEdit; |
| 93 | + |
72 | 94 | if (isEdit) { |
73 | | - if (typeof dnsServer == 'object') { |
74 | | - this.dnsServer = dnsServer; |
75 | | - } else { |
76 | | - this.dnsServer = { |
77 | | - address: dnsServer ?? "", |
78 | | - domains: [], |
79 | | - expectIPs: [], |
80 | | - queryStrategy: 'UseIP', |
81 | | - skipFallback: true, |
82 | | - } |
| 95 | + switch (typeof dnsServer) { |
| 96 | + case 'string': |
| 97 | + const dnsObj = { ...defaultDnsObject }; |
| 98 | + |
| 99 | + dnsObj.address = dnsServer; |
| 100 | + |
| 101 | + this.dnsServer = dnsObj; |
| 102 | + break; |
| 103 | + case 'object': |
| 104 | + this.dnsServer = dnsServer; |
| 105 | + break; |
83 | 106 | } |
84 | 107 | } else { |
85 | | - this.dnsServer = { |
86 | | - address: "localhost", |
87 | | - domains: [], |
88 | | - expectIPs: [], |
89 | | - queryStrategy: 'UseIP', |
90 | | - skipFallback: true, |
91 | | - } |
| 108 | + this.dnsServer = { ...defaultDnsObject }; |
| 109 | + |
| 110 | + this.dnsServer.domains = []; |
| 111 | + this.dnsServer.expectIPs = []; |
| 112 | + this.dnsServer.unexpectedIPs = []; |
92 | 113 | } |
93 | | - this.isEdit = isEdit; |
94 | 114 | }, |
95 | 115 | close() { |
96 | 116 | dnsModal.visible = false; |
|
101 | 121 | el: '#dns-modal', |
102 | 122 | data: { |
103 | 123 | dnsModal: dnsModal, |
104 | | - }, |
105 | | - computed: { |
106 | | - isAdvanced: { |
107 | | - get: function () { |
108 | | - return dnsModal.dnsServer.domains.length > 0; |
109 | | - } |
110 | | - } |
111 | 124 | } |
112 | 125 | }); |
113 | 126 | </script> |
|
0 commit comments