Welcome to mirror list, hosted at ThFree Co, Russian Federation.

xray_reverse_modal.html « modals « html « web - github.com/MHSanaei/3x-ui.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: addc8515c8c86f41af6a8ebdb0fdeb32e889b8f5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
{{define "modals/reverseModal"}}
<a-modal id="reverse-modal" v-model="reverseModal.visible" :title="reverseModal.title" @ok="reverseModal.ok"
    :confirm-loading="reverseModal.confirmLoading" :closable="true" :mask-closable="false"
    :ok-text="reverseModal.okText" cancel-text='{{ i18n "close" }}' :class="themeSwitcher.currentTheme">
    <a-form :colon="false" :label-col="{ md: {span:8} }" :wrapper-col="{ md: {span:14} }">
        <a-form-item label='{{ i18n "pages.xray.outbound.type" }}'>
            <a-select v-model="reverseModal.reverse.type" :dropdown-class-name="themeSwitcher.currentTheme">
                <a-select-option v-for="x,y in reverseTypes" :value="y">[[ x ]]</a-select-option>
            </a-select>
        </a-form-item>
        <a-form-item label='{{ i18n "pages.xray.outbound.tag" }}'>
            <a-input v-model.trim="reverseModal.reverse.tag"></a-input>
        </a-form-item>
        <a-form-item label='{{ i18n "pages.xray.outbound.domain" }}'>
            <a-input v-model.trim="reverseModal.reverse.domain"></a-input>
        </a-form-item>
        <template v-if="reverseModal.reverse.type=='bridge'">
            <a-form-item label='{{ i18n "pages.xray.outbound.intercon" }}'>
                <a-select v-model="reverseModal.rules[0].outboundTag" :dropdown-class-name="themeSwitcher.currentTheme">
                    <a-select-option v-for="x in reverseModal.outboundTags" :value="x">[[ x ]]</a-select-option>
                </a-select>
            </a-form-item>
            <a-form-item label='{{ i18n "pages.xray.rules.outbound" }}'>
                <a-select v-model="reverseModal.rules[1].outboundTag" :dropdown-class-name="themeSwitcher.currentTheme">
                    <a-select-option v-for="x in reverseModal.outboundTags" :value="x">[[ x ]]</a-select-option>
                </a-select>
            </a-form-item>
        </template>
        <template v-else>
            <a-form-item label='{{ i18n "pages.xray.outbound.intercon" }}'>
                <a-checkbox-group v-model="reverseModal.rules[0].inboundTag"
                    :options="reverseModal.inboundTags"></a-checkbox-group>
            </a-form-item>
            <a-form-item label='{{ i18n "pages.xray.rules.inbound" }}'>
                <a-checkbox-group v-model="reverseModal.rules[1].inboundTag"
                    :options="reverseModal.inboundTags"></a-checkbox-group>
            </a-form-item>
        </template>
    </a-form>
</a-modal>
<script>
    const reverseModal = {
        title: '',
        visible: false,
        confirmLoading: false,
        okText: '{{ i18n "sure" }}',
        isEdit: false,
        confirm: null,
        reverse: {
            tag: "",
            type: "",
            domain: ""
        },
        rules: [{
                outboundTag: '',
                inboundTag: []
            },
            {
                outboundTag: '',
                inboundTag: []
            }
        ],
        inboundTags: [],
        outboundTags: [],
        ok() {
            reverseModal.rules[0].domain = ["full:" + reverseModal.reverse.domain];
            reverseModal.rules[0].type = 'field';
            reverseModal.rules[1].type = 'field';

            if (reverseModal.reverse.type == 'bridge') {
                reverseModal.rules[0].inboundTag = [reverseModal.reverse.tag];
                reverseModal.rules[1].inboundTag = [reverseModal.reverse.tag];
            } else {
                reverseModal.rules[0].outboundTag = reverseModal.reverse.tag;
                reverseModal.rules[1].outboundTag = reverseModal.reverse.tag;
            }
            ObjectUtil.execute(reverseModal.confirm, reverseModal.reverse, reverseModal.rules);
        },
        show({
            title = '',
            okText = '{{ i18n "sure" }}',
            reverse,
            rules,
            confirm = (reverse, rules) => {},
            isEdit = false
        }) {
            this.title = title;
            this.okText = okText;
            this.confirm = confirm;
            this.visible = true;
            if (isEdit) {
                this.reverse = {
                    tag: reverse.tag,
                    type: reverse.type,
                    domain: reverse.domain,
                };
                reverse;
                rules0 = rules.filter(r => r.domain != null);
                if (rules0.length == 0) rules0 = [{
                    outboundTag: '',
                    domain: ["full:" + this.reverse.domain],
                    inboundTag: []
                }];
                rules1 = rules.filter(r => r.domain == null);
                if (rules1.length == 0) rules1 = [{
                    outboundTag: '',
                    inboundTag: []
                }];
                this.rules = [];
                this.rules.push({
                    domain: rules0[0].domain,
                    outboundTag: rules0[0].outboundTag,
                    inboundTag: rules0.map(r => r.inboundTag).flat()
                });
                this.rules.push({
                    outboundTag: rules1[0].outboundTag,
                    inboundTag: rules1.map(r => r.inboundTag).flat()
                });
            } else {
                this.reverse = {
                    tag: "reverse-" + app.reverseData.length,
                    type: "bridge",
                    domain: "reverse.xui"
                }
                this.rules = [{
                        outboundTag: '',
                        inboundTag: []
                    },
                    {
                        outboundTag: '',
                        inboundTag: []
                    }
                ]
            }
            this.isEdit = isEdit;
            this.inboundTags = app.templateSettings.inbounds.filter((i) => !ObjectUtil.isEmpty(i.tag)).map(obj =>
                obj.tag);
            this.inboundTags.push(...app.inboundTags);
            if (app.enableDNS && !ObjectUtil.isEmpty(app.dnsTag)) this.inboundTags.push(app.dnsTag)
            this.outboundTags = app.templateSettings.outbounds.filter((o) => !ObjectUtil.isEmpty(o.tag)).map(obj =>
                obj.tag);
        },
        close() {
            reverseModal.visible = false;
            reverseModal.loading(false);
        },
        loading(loading = true) {
            reverseModal.confirmLoading = loading;
        },
    };

    new Vue({
        delimiters: ['[[', ']]'],
        el: '#reverse-modal',
        data: {
            reverseModal: reverseModal,
            reverseTypes: {
                bridge: '{{ i18n "pages.xray.outbound.bridge" }}',
                portal: '{{ i18n "pages.xray.outbound.portal" }}'
            },
        },
    });
</script>
{{end}}