| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 | {{define "balancerModal"}}<a-modal     id="balancer-modal"    v-model="balancerModal.visible"    :title="balancerModal.title"    @ok="balancerModal.ok"    :confirm-loading="balancerModal.confirmLoading"    :ok-button-props="{ props: { disabled: !balancerModal.isValid } }"    :closable="true"    :mask-closable="false"    :ok-text="balancerModal.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.balancer.tag" }}' has-feedback            :validate-status="balancerModal.duplicateTag? 'warning' : 'success'">            <a-input v-model.trim="balancerModal.balancer.tag" @change="balancerModal.check()"                placeholder='{{ i18n "pages.xray.balancer.tagDesc" }}'></a-input>        </a-form-item>        <a-form-item label='{{ i18n "pages.xray.balancer.balancerStrategy" }}'>            <a-select v-model="balancerModal.balancer.strategy" :dropdown-class-name="themeSwitcher.currentTheme">                <a-select-option value="random">Random</a-select-option>                <a-select-option value="roundRobin">Round Robin</a-select-option>                <a-select-option value="leastLoad">Least Load</a-select-option>                <a-select-option value="leastPing">Least Ping</a-select-option>            </a-select>        </a-form-item>        <a-form-item label='{{ i18n "pages.xray.balancer.balancerSelectors" }}' has-feedback         :validate-status="balancerModal.emptySelector? 'warning' : 'success'">            <a-select v-model="balancerModal.balancer.selector" mode="tags" @change="balancerModal.checkSelector()"                :dropdown-class-name="themeSwitcher.currentTheme">                <a-select-option v-for="tag in balancerModal.outboundTags" :value="tag">[[ tag ]]</a-select-option>            </a-select>        </a-form-item>        </table>    </a-form></a-modal><script>    const balancerModal = {        title: '',        visible: false,        confirmLoading: false,        okText: '{{ i18n "sure" }}',        isEdit: false,        confirm: null,        duplicateTag: false,        emptySelector: false,        balancer: {            tag: '',            strategy: 'random',            selector: []        },        outboundTags: [],        balancerTags:[],        ok() {            if (balancerModal.balancer.selector.length == 0) {                balancerModal.emptySelector = true;                return;            }            balancerModal.emptySelector = false;            ObjectUtil.execute(balancerModal.confirm, balancerModal.balancer);        },        show({ title = '', okText = '{{ i18n "sure" }}', balancerTags = [], balancer, confirm = (balancer) => { }, isEdit = false }) {            this.title = title;            this.okText = okText;            this.confirm = confirm;            this.visible = true;            if (isEdit) {                balancerModal.balancer = balancer;            } else {                balancerModal.balancer = {                    tag: '',                    strategy: 'random',                    selector: []                };            }            this.balancerTags = balancerTags.filter((tag) => tag != balancer.tag);            this.outboundTags = app.templateSettings.outbounds.filter((o) => !ObjectUtil.isEmpty(o.tag)).map(obj => obj.tag);            this.isEdit = isEdit;            this.check();            this.checkSelector();        },        close() {            this.visible = false;            this.loading(false);        },        loading(loading=true) {            this.confirmLoading = loading;        },        check() {            if (this.balancer.tag == '' || this.balancerTags.includes(this.balancer.tag)) {                this.duplicateTag = true;                this.isValid = false;            } else {                this.duplicateTag = false;                this.isValid = true;            }        },        checkSelector() {            this.emptySelector = this.balancer.selector.length == 0;        }    };    new Vue({        delimiters: ['[[', ']]'],        el: '#balancer-modal',        data: {            balancerModal: balancerModal        },        methods: {        }    });</script>{{end}}
 |