From 810577ccae6917ac47951c41e12f8735f4409a97 Mon Sep 17 00:00:00 2001 From: Seyed Mahdi <39972836+SeyedHashtag@users.noreply.github.com> Date: Wed, 24 Dec 2025 12:25:16 +0330 Subject: [PATCH 1/2] feat(users): update user display to show usage days and remove expiry days column --- core/scripts/webpanel/assets/js/users.js | 3 ++- core/scripts/webpanel/routers/user/viewmodel.py | 3 +++ core/scripts/webpanel/templates/users.html | 1 - core/scripts/webpanel/templates/users_rows.html | 6 ++---- 4 files changed, 7 insertions(+), 6 deletions(-) diff --git a/core/scripts/webpanel/assets/js/users.js b/core/scripts/webpanel/assets/js/users.js index 0abab35..f55695f 100644 --- a/core/scripts/webpanel/assets/js/users.js +++ b/core/scripts/webpanel/assets/js/users.js @@ -279,7 +279,8 @@ $(function () { const url = GET_USER_URL_TEMPLATE.replace('U', user); const trafficText = dataRow.find("td:eq(4)").text(); - const expiryText = dataRow.find("td:eq(6)").text(); + const usageDaysText = dataRow.find("td:eq(6)").text(); + const expiryText = usageDaysText.split('/')[1] || "0"; const note = dataRow.data('note'); const statusText = dataRow.find("td:eq(3)").text().trim(); diff --git a/core/scripts/webpanel/routers/user/viewmodel.py b/core/scripts/webpanel/routers/user/viewmodel.py index ab19365..3a0d084 100644 --- a/core/scripts/webpanel/routers/user/viewmodel.py +++ b/core/scripts/webpanel/routers/user/viewmodel.py @@ -10,6 +10,7 @@ class User(BaseModel): expiry_date: str expiry_days: str day_usage: str + usage_days_display: str enable: bool unlimited_ip: bool online_count: int = 0 @@ -88,6 +89,7 @@ class User(BaseModel): percentage = (used_bytes / quota_bytes) * 100 traffic_used_display = f"{used_formatted}/{quota_formatted} ({percentage:.1f}%)" + usage_days_display = f"{day_usage}/{display_expiry_days}" return { 'username': user_data['username'], @@ -97,6 +99,7 @@ class User(BaseModel): 'expiry_date': display_expiry_date, 'expiry_days': display_expiry_days, 'day_usage': day_usage, + 'usage_days_display': usage_days_display, 'enable': not user_data.get('blocked', False), 'unlimited_ip': user_data.get('unlimited_user', False), 'online_count': user_data.get('online_count', 0), diff --git a/core/scripts/webpanel/templates/users.html b/core/scripts/webpanel/templates/users.html index 12b85d2..96decf6 100644 --- a/core/scripts/webpanel/templates/users.html +++ b/core/scripts/webpanel/templates/users.html @@ -129,7 +129,6 @@
Traffic Usage: {{ user.traffic_used }}
Expiry Date: {{ user.expiry_date }}
-Expiry Days: {{ user.expiry_days }}
-Day Usage: {{ user.day_usage }}
+Day Usage: {{ user.usage_days_display }}
Note: {{ user.note or 'N/A' }}
Enable: From 1d7523490cc67091dc1a98d8f105139fba32a9be Mon Sep 17 00:00:00 2001 From: Seyed Mahdi <39972836+SeyedHashtag@users.noreply.github.com> Date: Wed, 24 Dec 2025 15:17:14 +0330 Subject: [PATCH 2/2] feat(users): update user table to include status, traffic usage, and expiry date with improved class names --- core/scripts/webpanel/assets/js/users.js | 16 ++++++++-------- core/scripts/webpanel/templates/users.html | 2 +- core/scripts/webpanel/templates/users_rows.html | 12 ++++++------ 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/core/scripts/webpanel/assets/js/users.js b/core/scripts/webpanel/assets/js/users.js index f55695f..fa51688 100644 --- a/core/scripts/webpanel/assets/js/users.js +++ b/core/scripts/webpanel/assets/js/users.js @@ -180,10 +180,10 @@ $(function () { $("#userTable tbody tr.user-main-row").each(function () { let showRow; switch (filter) { - case "on-hold": showRow = $(this).find("td:eq(3) i").hasClass("text-warning"); break; - case "online": showRow = $(this).find("td:eq(3) i").hasClass("text-success"); break; - case "enable": showRow = $(this).find("td:eq(8) i").hasClass("text-success"); break; - case "disable": showRow = $(this).find("td:eq(8) i").hasClass("text-danger"); break; + case "on-hold": showRow = $(this).find("td.status-cell i").hasClass("text-warning"); break; + case "online": showRow = $(this).find("td.status-cell i").hasClass("text-success"); break; + case "enable": showRow = $(this).find("td.enable-cell i").hasClass("text-success"); break; + case "disable": showRow = $(this).find("td.enable-cell i").hasClass("text-danger"); break; default: showRow = true; } $(this).toggle(showRow).find(".user-checkbox").prop("checked", false); @@ -278,11 +278,11 @@ $(function () { const dataRow = $(event.relatedTarget).closest("tr.user-main-row"); const url = GET_USER_URL_TEMPLATE.replace('U', user); - const trafficText = dataRow.find("td:eq(4)").text(); - const usageDaysText = dataRow.find("td:eq(6)").text(); + const trafficText = dataRow.find("td.traffic-cell").text(); + const usageDaysText = dataRow.find("td.usage-days-cell").text(); const expiryText = usageDaysText.split('/')[1] || "0"; const note = dataRow.data('note'); - const statusText = dataRow.find("td:eq(3)").text().trim(); + const statusText = dataRow.find("td.status-cell").text().trim(); $('#editPasswordError').text(''); $('#editExpirationDaysError').text(''); @@ -299,7 +299,7 @@ $(function () { } $("#editNote").val(note || ''); - $("#editBlocked").prop("checked", !dataRow.find("td:eq(8) i").hasClass("text-success")); + $("#editBlocked").prop("checked", !dataRow.find("td.enable-cell i").hasClass("text-success")); $("#editUnlimitedIp").prop("checked", dataRow.find(".unlimited-ip-cell i").hasClass("text-primary")); const passwordInput = $("#editPassword"); diff --git a/core/scripts/webpanel/templates/users.html b/core/scripts/webpanel/templates/users.html index 96decf6..c0c3da6 100644 --- a/core/scripts/webpanel/templates/users.html +++ b/core/scripts/webpanel/templates/users.html @@ -128,8 +128,8 @@
Traffic Usage: {{ user.traffic_used }}
-Expiry Date: {{ user.expiry_date }}
Day Usage: {{ user.usage_days_display }}
+Expiry Date: {{ user.expiry_date }}
Note: {{ user.note or 'N/A' }}
Enable: