From 42ce7018344e1626ccaa266a52f85024642a7668 Mon Sep 17 00:00:00 2001
From: zstar <65890619+zstar1003@users.noreply.github.com>
Date: Wed, 14 May 2025 10:57:12 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86):=20?=
=?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=E5=88=97=E8=A1=A8=E6=8E=92?=
=?UTF-8?q?=E5=BA=8F=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E6=96=87?=
=?UTF-8?q?=E6=A1=A3=E8=A7=A3=E6=9E=90=E8=AE=A1=E6=95=B0=E9=80=BB=E8=BE=91?=
=?UTF-8?q?=20(#85)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
management/server/routes/users/routes.py | 4 +-
.../knowledgebases/document_parser.py | 9 +----
management/server/services/users/service.py | 20 +++++++---
management/web/src/common/apis/tables/type.ts | 4 ++
management/web/src/pages/file/index.vue | 2 +-
.../web/src/pages/user-management/index.vue | 40 ++++++++++++++++---
6 files changed, 58 insertions(+), 21 deletions(-)
diff --git a/management/server/routes/users/routes.py b/management/server/routes/users/routes.py
index de4945d..ddf13a7 100644
--- a/management/server/routes/users/routes.py
+++ b/management/server/routes/users/routes.py
@@ -11,9 +11,11 @@ def get_users():
page_size = int(request.args.get('size', 10))
username = request.args.get('username', '')
email = request.args.get('email', '')
+ sort_by = request.args.get("sort_by", "create_time")
+ sort_order = request.args.get("sort_order", "desc")
# 调用服务函数获取分页和筛选后的用户数据
- users, total = get_users_with_pagination(current_page, page_size, username, email)
+ users, total = get_users_with_pagination(current_page, page_size, username, email, sort_by, sort_order)
# 返回符合前端期望格式的数据
return jsonify({
diff --git a/management/server/services/knowledgebases/document_parser.py b/management/server/services/knowledgebases/document_parser.py
index 4d9465b..103caad 100644
--- a/management/server/services/knowledgebases/document_parser.py
+++ b/management/server/services/knowledgebases/document_parser.py
@@ -392,8 +392,6 @@ def perform_parse(doc_id, doc_info, file_info, embedding_config):
chunk_count = 0
chunk_ids_list = []
- middle_block_idx = 0 # 用于按顺序匹配 block_info_list
- processed_text_chunks = 0 # 记录处理的文本块数量
for chunk_idx, chunk_data in enumerate(content_list):
page_idx = 0 # 默认页面索引
@@ -512,7 +510,6 @@ def perform_parse(doc_id, doc_info, file_info, embedding_config):
es_client.index(index=index_name, id=chunk_id, document=es_doc) # 使用 document 参数
chunk_count += 1
- processed_text_chunks += 1
chunk_ids_list.append(chunk_id)
except Exception as e:
@@ -553,7 +550,7 @@ def perform_parse(doc_id, doc_info, file_info, embedding_config):
# 记录图片信息,包括URL和位置信息
image_info = {
"url": img_url,
- "position": processed_text_chunks, # 使用当前处理的文本块数作为位置参考
+ "position": chunk_count, # 使用当前处理的文本块数作为位置参考
}
image_info_list.append(image_info)
@@ -563,9 +560,7 @@ def perform_parse(doc_id, doc_info, file_info, embedding_config):
print(f"[Parser-ERROR] 上传图片 {img_path_abs} 失败: {e}")
# 打印匹配总结信息
- print(f"[Parser-INFO] 共处理 {processed_text_chunks} 个文本块。")
- if middle_block_idx < len(block_info_list):
- print(f"[Parser-WARNING] middle_data 中还有 {len(block_info_list) - middle_block_idx} 个提取的块信息未被使用。")
+ print(f"[Parser-INFO] 共处理 {chunk_count} 个文本块。")
# 4. 更新文本块的图像信息
if image_info_list and chunk_ids_list:
diff --git a/management/server/services/users/service.py b/management/server/services/users/service.py
index 25ac468..c875359 100644
--- a/management/server/services/users/service.py
+++ b/management/server/services/users/service.py
@@ -4,7 +4,7 @@ from datetime import datetime
from utils import generate_uuid, encrypt_password
from database import DB_CONFIG
-def get_users_with_pagination(current_page, page_size, username='', email=''):
+def get_users_with_pagination(current_page, page_size, username='', email='', sort_by="create_time",sort_order="desc"):
"""查询用户信息,支持分页和条件筛选"""
try:
# 建立数据库连接
@@ -24,10 +24,18 @@ def get_users_with_pagination(current_page, page_size, username='', email=''):
params.append(f"%{email}%")
# 组合WHERE子句
- where_sql = " AND ".join(where_clauses) if where_clauses else "1=1"
+ where_sql = "WHERE " + (" AND ".join(where_clauses) if where_clauses else "1=1")
+
+ # 验证排序字段
+ valid_sort_fields = ["name", "size", "type", "create_time", "create_date"]
+ if sort_by not in valid_sort_fields:
+ sort_by = "create_time"
+
+ # 构建排序子句
+ sort_clause = f"ORDER BY {sort_by} {sort_order.upper()}"
# 查询总记录数
- count_sql = f"SELECT COUNT(*) as total FROM user WHERE {where_sql}"
+ count_sql = f"SELECT COUNT(*) as total FROM user {where_sql}"
cursor.execute(count_sql, params)
total = cursor.fetchone()['total']
@@ -36,10 +44,10 @@ def get_users_with_pagination(current_page, page_size, username='', email=''):
# 执行分页查询
query = f"""
- SELECT id, nickname, email, create_date, update_date, status, is_superuser
+ SELECT id, nickname, email, create_date, update_date, status, is_superuser, create_date
FROM user
- WHERE {where_sql}
- ORDER BY id DESC
+ {where_sql}
+ {sort_clause}
LIMIT %s OFFSET %s
"""
cursor.execute(query, params + [page_size, offset])
diff --git a/management/web/src/common/apis/tables/type.ts b/management/web/src/common/apis/tables/type.ts
index 52d3ba6..601aac0 100644
--- a/management/web/src/common/apis/tables/type.ts
+++ b/management/web/src/common/apis/tables/type.ts
@@ -14,6 +14,10 @@ export interface TableRequestData {
username?: string
/** 查询参数:邮箱 */
email?: string
+ /** 排序字段 */
+ sort_by: string
+ /** 排序方式 */
+ sort_order: string
}
export interface TableData {
diff --git a/management/web/src/pages/file/index.vue b/management/web/src/pages/file/index.vue
index c46f6c0..762e094 100644
--- a/management/web/src/pages/file/index.vue
+++ b/management/web/src/pages/file/index.vue
@@ -393,7 +393,7 @@ onActivated(() => {
{{ (paginationData.currentPage - 1) * paginationData.pageSize + scope.$index + 1 }}
-
+
{{ formatFileSize(scope.row.size) }}
diff --git a/management/web/src/pages/user-management/index.vue b/management/web/src/pages/user-management/index.vue
index 692c953..f2a3c68 100644
--- a/management/web/src/pages/user-management/index.vue
+++ b/management/web/src/pages/user-management/index.vue
@@ -156,6 +156,13 @@ const searchData = reactive({
email: ""
})
+// 排序状态
+const sortData = reactive({
+ sortBy: "create_date",
+ sortOrder: "desc" // 默认排序顺序 (最新创建的在前)
+})
+
+
// 存储多选的表格数据
const multipleSelection = ref([])
@@ -165,7 +172,9 @@ function getTableData() {
currentPage: paginationData.currentPage,
size: paginationData.pageSize,
username: searchData.username,
- email: searchData.email
+ email: searchData.email,
+ sort_by: sortData.sortBy,
+ sort_order: sortData.sortOrder
}).then(({ data }) => {
paginationData.total = data.total
tableData.value = data.list
@@ -218,6 +227,25 @@ function handleBatchDelete() {
}
// #endregion
+/**
+ * @description 处理表格排序变化事件(只允许正序和倒序切换)
+ * @param {object} sortInfo 排序信息对象,包含 prop 和 order
+ * @param {string} sortInfo.prop 排序的字段名
+ * @param {string | null} sortInfo.order 排序的顺序 ('ascending', 'descending', null)
+ */
+function handleSortChange({ prop }: { prop: string, order: string | null }) {
+ // 如果点击的是同一个字段,则切换排序顺序
+ if (sortData.sortBy === prop) {
+ // 当前为正序则切换为倒序,否则切换为正序
+ sortData.sortOrder = sortData.sortOrder === "asc" ? "desc" : "asc"
+ } else {
+ // 切换字段时,默认正序
+ sortData.sortBy = prop
+ sortData.sortOrder = "asc"
+ }
+ getTableData()
+}
+
// 监听分页参数的变化
watch([() => paginationData.currentPage, () => paginationData.pageSize], getTableData, { immediate: true })
@@ -259,12 +287,12 @@ watch([() => paginationData.currentPage, () => paginationData.pageSize], getTabl
-
+
-
-
-
-
+
+
+
+