| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 | {{define "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 layout="inline">        <a-form-item label='{{ i18n "pages.xray.outbound.type" }}'>            <a-select v-model="reverseModal.reverse.type" style="width: 250px;" :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" style="width: 250px"></a-input>        </a-form-item>        <a-form-item label='{{ i18n "pages.xray.outbound.domain" }}'>            <a-input v-model.trim="reverseModal.reverse.domain" style="width: 250px"></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" style="width: 250px;" :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" style="width: 250px;" :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);            this.outboundTags = app.templateSettings.outbounds.filter((o) => !ObjectUtil.isEmpty(o.tag)).map(obj => obj.tag);        },        close() {            reverseModal.visible = false;            reverseModal.loading(false);        },        loading(loading) {            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" }}'},        },        methods: {        }    });</script>{{end}}
 |