diff --git a/web/assets/css/custom.css b/web/assets/css/custom.css index 96bb6b39..d50213b5 100644 --- a/web/assets/css/custom.css +++ b/web/assets/css/custom.css @@ -683,7 +683,8 @@ style attribute { border-color: #9ea2a8; } -.dark .ant-table-row-expand-icon:hover { +.dark .ant-table-row-expand-icon:hover, +.dark .ant-table-thead>tr>th.ant-table-column-has-actions.ant-table-column-has-sorters:hover { color: #0e49b5; background-color: #fff0; border-color: #0e49b5; @@ -1080,4 +1081,4 @@ li.ant-select-dropdown-menu-item:empty:after { .ant-input-group-addon:not(:first-child):not(:last-child), .ant-input-group-wrap:not(:first-child):not(:last-child), .ant-input-group>.ant-input:not(:first-child):not(:last-child) { border-radius: 0rem 1rem 1rem 0rem; -} \ No newline at end of file +} diff --git a/web/html/xui/inbounds.html b/web/html/xui/inbounds.html index 755d0c98..81894e53 100644 --- a/web/html/xui/inbounds.html +++ b/web/html/xui/inbounds.html @@ -185,7 +185,7 @@ - { + const clientA = a.email || ''; + const clientB = b.email || ''; + return clientA.localeCompare(clientB, undefined, { sensitivity: 'base' }); + }, + }, + { + title: '{{ i18n "pages.inbounds.traffic" }}', + dataIndex: 'traffic', + width: 80, + align: 'center', + scopedSlots: { customRender: 'traffic' }, + }, + { + title: '{{ i18n "pages.inbounds.expireDate" }}', + width: 70, + align: 'center', + scopedSlots: { customRender: 'expiryTime' }, + }, + ]; - const innerMobileColumns = [ - { title: '{{ i18n "pages.inbounds.operate" }}', width: 10, align: 'center', scopedSlots: { customRender: 'actionMenu' } }, - { title: '{{ i18n "pages.inbounds.client" }}', width: 90, align: 'left', scopedSlots: { customRender: 'client' } }, - { title: '{{ i18n "pages.inbounds.info" }}', width: 10, align: 'center', scopedSlots: { customRender: 'info' } }, - ]; + const innerMobileColumns = [ + { + title: '{{ i18n "pages.inbounds.operate" }}', + width: 10, + align: 'center', + scopedSlots: { customRender: 'actionMenu' }, + }, + { + title: '{{ i18n "pages.inbounds.client" }}', + dataIndex: 'email', + width: 90, + align: 'left', + scopedSlots: { customRender: 'client' }, + sorter: (a, b) => { + const clientA = a.email || ''; + const clientB = b.email || ''; + return clientA.localeCompare(clientB, undefined, { sensitivity: 'base' }); + }, + }, + { + title: '{{ i18n "pages.inbounds.info" }}', + width: 10, + align: 'center', + scopedSlots: { customRender: 'info' }, + }, + ]; const app = new Vue({ delimiters: ['[[', ']]'],