diff options
Diffstat (limited to 'web/html/xui/client_modal.html')
| -rw-r--r-- | web/html/xui/client_modal.html | 197 |
1 files changed, 19 insertions, 178 deletions
diff --git a/web/html/xui/client_modal.html b/web/html/xui/client_modal.html index f2ea30d0..aa62e02a 100644 --- a/web/html/xui/client_modal.html +++ b/web/html/xui/client_modal.html @@ -16,16 +16,7 @@ title: '', okText: '', isEdit: false, - group: { - canGroup: true, - isGroup: false, - currentClient: null, - inbounds: [], - clients: [], - editIds: [] - }, dbInbound: new DBInbound(), - dbInbounds: null, inbound: new Inbound(), clients: [], clientStats: [], @@ -34,126 +25,33 @@ clientIps: null, delayedStart: false, ok() { - if (app.subSettings.enable && clientModal.group.isGroup && clientModal.group.canGroup) { - const currentClient = clientModal.group.currentClient; - const { limitIp, comment, totalGB, expiryTime, reset, enable, subId, tgId, flow } = currentClient; - const uniqueEmails = clientModalApp.makeGroupEmailsUnique(clientModal.dbInbounds, currentClient.email, clientModal.group.clients); - - clientModal.group.clients.forEach((client, index) => { - client.email = uniqueEmails[index]; - client.limitIp = limitIp; - client.comment = comment; - client.totalGB = totalGB; - client.expiryTime = expiryTime; - client.reset = reset; - client.enable = enable; - - if (subId) { - client.subId = subId; - } - if (tgId) { - client.tgId = tgId; - } - if (flow) { - client.flow = flow; - } - }); - - if (clientModal.isEdit) { - ObjectUtil.execute(clientModal.confirm, clientModal.group.clients, clientModal.group.inbounds, clientModal.group.editIds); - } else { - ObjectUtil.execute(clientModal.confirm, clientModal.group.clients, clientModal.group.inbounds); - } + if (clientModal.isEdit) { + ObjectUtil.execute(clientModal.confirm, clientModalApp.client, clientModal.dbInbound.id, clientModal.oldClientId); } else { - if (clientModal.isEdit) { - ObjectUtil.execute(clientModal.confirm, clientModalApp.client, clientModal.dbInbound.id, clientModal.oldClientId); - } else { - ObjectUtil.execute(clientModal.confirm, clientModalApp.client, clientModal.dbInbound.id); - } + ObjectUtil.execute(clientModal.confirm, clientModalApp.client, clientModal.dbInbound.id); } }, - show({ - title = '', - okText = '{{ i18n "sure" }}', - index = null, - dbInbound = null, - dbInbounds = null, - confirm = () => { - }, - isEdit = false - }) { - this.group = { - canGroup: true, - isGroup: false, - currentClient: null, - inbounds: [], - clients: [], - editIds: [] - } - this.dbInbounds = dbInbounds; + show({ title = '', okText = '{{ i18n "sure" }}', index = null, dbInbound = null, confirm = () => { }, isEdit = false }) { this.visible = true; this.title = title; this.okText = okText; this.isEdit = isEdit; - if (app.subSettings.enable && dbInbounds !== null && Array.isArray(dbInbounds)) { - if (isEdit) { - this.showProcess(dbInbound, index); - let processSingleEdit = true - if (this.group.canGroup) { - this.group.currentClient = this.clients[this.index] - const response = app.getSubGroupClients(dbInbounds, this.group.currentClient) - if (response.clients.length > 1) { - this.group.isGroup = true; - this.group.inbounds = response.inbounds - this.group.clients = response.clients - this.group.editIds = response.editIds - if (this.clients[index].expiryTime < 0) { - this.delayedStart = true; - } - processSingleEdit = false - } - } - if (processSingleEdit) { - this.singleEditClientProcess(index) - } - } else { - this.group.isGroup = true; - dbInbounds.forEach((dbInboundItem) => { - this.showProcess(dbInboundItem); - if (this.dbInbound.isMultiUser()) { - this.addClient(this.inbound.protocol, this.clients); - this.group.inbounds.push(dbInboundItem.id) - this.group.clients.push(this.clients[this.index]) - } - }) - this.group.currentClient = this.clients[this.index] + this.dbInbound = new DBInbound(dbInbound); + this.inbound = dbInbound.toInbound(); + this.clients = this.inbound.clients; + this.index = index === null ? this.clients.length : index; + this.delayedStart = false; + if (isEdit) { + if (this.clients[index].expiryTime < 0) { + this.delayedStart = true; } + this.oldClientId = this.getClientId(dbInbound.protocol, clients[index]); } else { - this.showProcess(dbInbound, index); - if (isEdit) { - this.singleEditClientProcess(index) - } else { - this.addClient(this.inbound.protocol, this.clients); - } + this.addClient(this.inbound.protocol, this.clients); } this.clientStats = this.dbInbound.clientStats.find(row => row.email === this.clients[this.index].email); this.confirm = confirm; - }, - showProcess(dbInbound, index = null) { - this.dbInbound = new DBInbound(dbInbound); - this.inbound = dbInbound.toInbound(); - if (this.dbInbound.isMultiUser()) { - this.clients = this.inbound.clients; - this.index = index === null ? this.clients.length : index; - this.delayedStart = false; - } - }, - singleEditClientProcess(index) { - if (this.clients[index].expiryTime < 0) { - this.delayedStart = true; - } - this.oldClientId = this.getClientId(this.dbInbound.protocol, this.clients[index]); - }, + }, getClientId(protocol, client) { switch (protocol) { case Protocols.TROJAN: return client.password; @@ -174,7 +72,7 @@ clientModal.visible = false; clientModal.loading(false); }, - loading(loading = true) { + loading(loading=true) { clientModal.confirmLoading = loading; }, }; @@ -196,18 +94,6 @@ get isEdit() { return this.clientModal.isEdit; }, - get isGroup() { - return this.clientModal.group.isGroup; - }, - get isGroupEdit() { - return this.clientModal.group.canGroup; - }, - set isGroupEdit(value) { - this.clientModal.group.canGroup = value; - if (!value) { - this.clientModal.singleEditClientProcess(this.clientModal.index) - } - }, get datepicker() { return app.datepicker; }, @@ -234,36 +120,6 @@ }, }, methods: { - makeGroupEmailsUnique(dbInbounds, baseEmail, groupClients) { - // Extract the base part of the email (before the "__" if present) - const match = baseEmail.match(/^(.*?)__/); - const base = match ? match[1] : baseEmail; - - // Generate initial emails for each client in the group - const generatedEmails = groupClients.map((_, index) => `${base}__${index + 1}`); - - // Function to check if an email already exists in dbInbounds but belongs to a different subId - const isDuplicate = (emailToCheck, clientSubId) => { - return dbInbounds.some((dbInbound) => { - const settings = JSON.parse(dbInbound.settings); - const clients = settings && settings.clients ? settings.clients : []; - return clients.some(client => client.email === emailToCheck && client.subId !== clientSubId); - }); - }; - - // Check if any of the generated emails are duplicates - const hasDuplicates = generatedEmails.some((email, index) => { - return isDuplicate(email, groupClients[index].subId); - }); - - // If duplicates exist, add a random string to the base email to ensure uniqueness - if (hasDuplicates) { - const randomString = `-${RandomUtil.randomLowerAndNum(4)}`; - return groupClients.map((_, index) => `${base}${randomString}__${index + 1}`); - } - - return generatedEmails; - }, async getDBClientIps(email) { const msg = await HttpUtil.post(`/panel/inbound/clientIps/${email}`); if (!msg.success) { @@ -291,22 +147,7 @@ } catch (error) { } }, - async resetClientTrafficHandler(client, dbInboundId, clients = []) { - if (clients.length > 0) { - const resetRequests = clients - .filter(client => { - const inbound = clientModal.dbInbounds.find(inbound => inbound.id === client.inboundId); - return inbound && app.hasClientStats(inbound, client.email); - }).map(client => ({ inboundId: client.inboundId, email: client.email})); - - return HttpUtil.postWithModalJson('/panel/inbound/resetGroupClientTraffic', resetRequests, null) - } else { - return HttpUtil.postWithModal('/panel/inbound/' + dbInboundId + '/resetClientTraffic/' + client.email) - } - }, - resetClientTraffic(client, dbInboundId, iconElement) { - const subGroup = app.subSettings.enable && clientModal.group.isGroup && clientModal.group.canGroup && clientModal.dbInbounds && clientModal.dbInbounds.length > 0 ? app.getSubGroupClients(clientModal.dbInbounds, client) : []; - const clients = subGroup && subGroup.clients && subGroup.clients.length > 1 ? subGroup.clients : []; + resetClientTraffic(email, dbInboundId, iconElement) { this.$confirm({ title: '{{ i18n "pages.inbounds.resetTraffic"}}', content: '{{ i18n "pages.inbounds.resetTrafficContent"}}', @@ -315,8 +156,8 @@ cancelText: '{{ i18n "cancel"}}', onOk: async () => { iconElement.disabled = true; - const msg = await this.resetClientTrafficHandler(client, dbInboundId, clients); - if (msg && msg.success) { + const msg = await HttpUtil.postWithModal('/panel/inbound/' + dbInboundId + '/resetClientTraffic/' + email); + if (msg.success) { this.clientModal.clientStats.up = 0; this.clientModal.clientStats.down = 0; } |
