From 1806d802c9f6f92ea7b84f50ebe1e1b207f58d61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A2=A8=E6=A2=93=E6=9F=92?= <1787882683@qq.com> Date: Wed, 26 Nov 2025 19:22:51 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E4=B8=BA=E8=A1=A8=E6=83=85?= =?UTF-8?q?=E5=8C=85=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8E=92=E5=BA=8F=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/webui/emoji_routes.py | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/webui/emoji_routes.py b/src/webui/emoji_routes.py index 29b5d73e..35eaed04 100644 --- a/src/webui/emoji_routes.py +++ b/src/webui/emoji_routes.py @@ -133,6 +133,8 @@ async def get_emoji_list( is_registered: Optional[bool] = Query(None, description="是否已注册筛选"), is_banned: Optional[bool] = Query(None, description="是否被禁用筛选"), format: Optional[str] = Query(None, description="格式筛选"), + sort_by: Optional[str] = Query("usage_count", description="排序字段"), + sort_order: Optional[str] = Query("desc", description="排序方向"), authorization: Optional[str] = Header(None), ): """ @@ -145,6 +147,8 @@ async def get_emoji_list( is_registered: 是否已注册筛选 is_banned: 是否被禁用筛选 format: 格式筛选 + sort_by: 排序字段 (usage_count, register_time, record_time, last_used_time) + sort_order: 排序方向 (asc, desc) authorization: Authorization header Returns: @@ -172,12 +176,22 @@ async def get_emoji_list( if format: query = query.where(Emoji.format == format) - # 排序:使用次数倒序,然后按记录时间倒序 - from peewee import Case + # 排序字段映射 + sort_field_map = { + "usage_count": Emoji.usage_count, + "register_time": Emoji.register_time, + "record_time": Emoji.record_time, + "last_used_time": Emoji.last_used_time, + } - query = query.order_by( - Emoji.usage_count.desc(), Case(None, [(Emoji.record_time.is_null(), 1)], 0), Emoji.record_time.desc() - ) + # 获取排序字段,默认使用 usage_count + sort_field = sort_field_map.get(sort_by, Emoji.usage_count) + + # 应用排序 + if sort_order == "asc": + query = query.order_by(sort_field.asc()) + else: + query = query.order_by(sort_field.desc()) # 获取总数 total = query.count()