diff --git a/modules/user.js b/modules/user.js index 45e1a17..b49579f 100644 --- a/modules/user.js +++ b/modules/user.js @@ -24,13 +24,21 @@ let User = syzoj.model('user'); // Ranklist app.get('/ranklist', async (req, res) => { try { + const sort = req.query.sort || "id"; + const order = req.query.order || "asc"; + console.log("SORT ===> " + sort + ", ORDER ===> " + order); + if (!['ac_num', 'rating', 'id', 'username'].includes(sort) || !['asc', 'desc'].includes(order)) { + throw new ErrorMessage('错误的排序参数。'); + } let paginate = syzoj.utils.paginate(await User.count({ is_show: true }), req.query.page, syzoj.config.page.ranklist); - let ranklist = await User.query(paginate, { is_show: true }, [['ac_num', 'desc']]); + let ranklist = await User.query(paginate, { is_show: true }, [[sort, order]]); await ranklist.forEachAsync(async x => x.renderInformation()); res.render('ranklist', { ranklist: ranklist, - paginate: paginate + paginate: paginate, + curSort: sort, + curOrder: order === 'asc' }); } catch (e) { syzoj.log(e); diff --git a/views/ranklist.ejs b/views/ranklist.ejs index c7a0267..143f662 100644 --- a/views/ranklist.ejs +++ b/views/ranklist.ejs @@ -1,5 +1,23 @@ <% this.title = '排名' %> <% include header %> + +<% +const getOrderString = function(order) { + return order ? 'asc' : 'desc'; +} +const createSortableTitle = function(item, display, defaultOrder) { + const isCurrent = curSort === item; + console.log("IScurrent: ========> " + isCurrent); + const url = syzoj.utils.makeUrl(['ranklist'], + { + sort: item, + order: getOrderString(isCurrent ? (!curOrder) : defaultOrder) + }); + const triangle = isCurrent ? `` : ""; + return `${display}${triangle}`; +} +%> +
@@ -10,10 +28,12 @@ - - + + + - + + + <% } %>
#用户名#<%- createSortableTitle('id', 'ID', true) %><%- createSortableTitle('username', '用户名', true) %> 个性签名通过数量<%- createSortableTitle('ac_num', '通过数量', false) %><%- createSortableTitle('rating', 'Rating', false) %>
<%= user.ac_num %><%= user.rating %>