记住排序
CI / validate (push) Waiting to run

This commit is contained in:
cppla
2026-07-23 10:16:00 +08:00
parent 6f782e1940
commit 1ce8d9c337
2 changed files with 31 additions and 6 deletions
+1 -1
View File
@@ -201,6 +201,6 @@
<a href="https://github.com/cppla/ServerStatus" target="_blank" rel="noopener">ServerStatus中文版</a>
</footer>
<script src="js/app.js?v=20260722-1" defer></script>
<script src="js/app.js?v=20260723-1" defer></script>
</body>
</html>
+30 -5
View File
@@ -1,3 +1,16 @@
const SORT_PREFERENCE_KEY = 'serverstatusSortPreference';
const SORT_FIELDS = new Set(['config','name','status','load','cpu','memory','hdd','traffic','loss']);
function loadSortPreference(){
const fallback = { sort: 'config', dir: 'asc' };
try{
const saved = JSON.parse(localStorage.getItem(SORT_PREFERENCE_KEY) || 'null');
if(saved && SORT_FIELDS.has(saved.sort) && (saved.dir === 'asc' || saved.dir === 'desc')) return saved;
}catch(_err){}
return fallback;
}
const initialSortPreference = loadSortPreference();
const S = {
updated: 0,
servers: [],
@@ -9,7 +22,7 @@ const S = {
layoutCompact: null,
osOptionsSignature: '',
suppressStatsReloadUntil: 0,
filters: { query: '', status: 'all', os: 'all', sort: 'config', dir: 'asc' },
filters: { query: '', status: 'all', os: 'all', ...initialSortPreference },
admin: {
token: localStorage.getItem('serverstatusAdminToken') || '',
enabled: false,
@@ -734,7 +747,17 @@ function bindTheme(){
if(S.openDetailKey) refreshDetail();
});
}
function syncSortControls(){
$('sortSelect').value = S.filters.sort;
$('sortDirection').textContent = S.filters.dir === 'desc' ? '降序' : '升序';
}
function saveSortPreference(){
try{
localStorage.setItem(SORT_PREFERENCE_KEY, JSON.stringify({ sort: S.filters.sort, dir: S.filters.dir }));
}catch(_err){}
}
function bindFilters(){
syncSortControls();
$('serverSearch').addEventListener('input', e => { S.filters.query = e.target.value; scheduleServersRender(); });
$('statusFilter').addEventListener('click', e => {
if(e.target.tagName !== 'BUTTON') return;
@@ -747,19 +770,21 @@ function bindFilters(){
$('sortSelect').addEventListener('change', e => {
S.filters.sort = e.target.value;
if(S.filters.sort === 'config') S.filters.dir = 'asc';
$('sortDirection').textContent = S.filters.dir === 'desc' ? '降序' : '升序';
syncSortControls();
saveSortPreference();
renderServersViewNow();
});
$('sortDirection').addEventListener('click', () => {
S.filters.dir = S.filters.dir === 'desc' ? 'asc' : 'desc';
$('sortDirection').textContent = S.filters.dir === 'desc' ? '降序' : '升序';
syncSortControls();
saveSortPreference();
renderServersViewNow();
});
document.querySelectorAll('#serversTable th[data-sort]').forEach(th => th.addEventListener('click', () => {
if(S.filters.sort === th.dataset.sort) S.filters.dir = S.filters.dir === 'desc' ? 'asc' : 'desc';
else S.filters.sort = th.dataset.sort;
$('sortSelect').value = S.filters.sort;
$('sortDirection').textContent = S.filters.dir === 'desc' ? '降序' : '升序';
syncSortControls();
saveSortPreference();
renderServersViewNow();
}));
}