{{define "inboundModal"}} <a-modal id="inbound-modal" v-model="inModal.visible" :title="inModal.title" @ok="inModal.ok" :confirm-loading="inModal.confirmLoading" :closable="true" :mask-closable="false" :class="siderDrawer.isDarkTheme ? darkClass : ''" :ok-text="inModal.okText" cancel-text='{{ i18n "close" }}'> {{template "form/inbound"}} </a-modal> <script> const inModal = { title: '', visible: false, confirmLoading: false, okText: '{{ i18n "sure" }}', isEdit: false, confirm: null, inbound: new Inbound(), dbInbound: new DBInbound(), ok() { ObjectUtil.execute(inModal.confirm, inModal.inbound, inModal.dbInbound); }, show({ title='', okText='{{ i18n "sure" }}', inbound=null, dbInbound=null, confirm=(inbound, dbInbound)=>{}, isEdit=false }) { this.title = title; this.okText = okText; if (inbound) { this.inbound = Inbound.fromJson(inbound.toJson()); } else { this.inbound = new Inbound(); } if (dbInbound) { this.dbInbound = new DBInbound(dbInbound); } else { this.dbInbound = new DBInbound(); } this.confirm = confirm; this.visible = true; this.isEdit = isEdit; }, close() { inModal.visible = false; inModal.loading(false); }, loading(loading) { inModal.confirmLoading = loading; }, }; const protocols = { VMESS: Protocols.VMESS, VLESS: Protocols.VLESS, TROJAN: Protocols.TROJAN, SHADOWSOCKS: Protocols.SHADOWSOCKS, DOKODEMO: Protocols.DOKODEMO, SOCKS: Protocols.SOCKS, HTTP: Protocols.HTTP, }; new Vue({ delimiters: ['[[', ']]'], el: '#inbound-modal', data: { inModal: inModal, Protocols: protocols, SSMethods: SSMethods, get inbound() { return inModal.inbound; }, get dbInbound() { return inModal.dbInbound; }, get isEdit() { return inModal.isEdit; } }, methods: { streamNetworkChange(oldValue) { if (oldValue === 'kcp') { this.inModal.inbound.tls = false; } }, addClient(protocol, clients) { switch (protocol) { case Protocols.VMESS: return clients.push(new Inbound.VmessSettings.Vmess()); case Protocols.VLESS: return clients.push(new Inbound.VLESSSettings.VLESS()); case Protocols.TROJAN: return clients.push(new Inbound.TrojanSettings.Trojan()); default: return null; } }, removeClient(index, clients) { clients.splice(index, 1); }, isExpiry(index) { return this.inbound.isExpiry(index) }, isClientEnable(email) { clientStats = this.dbInbound.clientStats ? this.dbInbound.clientStats.find(stats => stats.email === email) : null return clientStats ? clientStats['enable'] : true }, getNewEmail(client) { var chars = 'abcdefghijklmnopqrstuvwxyz1234567890'; var string = ''; var len = 6 + Math.floor(Math.random() * 5); for(var ii=0; ii<len; ii++){ string += chars[Math.floor(Math.random() * chars.length)]; } client.email = string; } }, }); </script> {{end}}