feat: 统一分页组件并添加批量删除功能
为多个页面组件添加统一的分页统计显示和批量删除功能 在日志管理页面添加批量删除接口和前端实现 优化表格分页配置,统一显示总条目数和分页选项
This commit is contained in:
@ -1,13 +1,47 @@
|
||||
use axum::{Router, routing::get, extract::{State, Query}, Json};
|
||||
use crate::{db::Db, response::ApiResponse, services::flow_run_log_service};
|
||||
//! 流程运行日志路由模块
|
||||
//!
|
||||
//! 提供流程运行日志的分页查询接口与批量删除接口。
|
||||
|
||||
use axum::{
|
||||
extract::{Query, State},
|
||||
routing::{get, delete},
|
||||
Json, Router,
|
||||
};
|
||||
use axum::extract::Path;
|
||||
|
||||
use crate::db::Db;
|
||||
use crate::error::AppError;
|
||||
use crate::response::ApiResponse;
|
||||
use crate::services::flow_run_log_service;
|
||||
|
||||
/// 路由定义:流程运行日志相关接口
|
||||
pub fn router() -> Router<Db> {
|
||||
Router::new().route("/flow_run_logs", get(list))
|
||||
Router::new()
|
||||
.route("/flow_run_logs", get(list))
|
||||
.route("/flow_run_logs/{ids}", delete(delete_many))
|
||||
}
|
||||
|
||||
async fn list(State(db): State<Db>, Query(p): Query<flow_run_log_service::ListParams>) -> Json<ApiResponse<flow_run_log_service::PageResp<flow_run_log_service::RunLogItem>>> {
|
||||
match flow_run_log_service::list(&db, p).await {
|
||||
Ok(res) => Json(ApiResponse::ok(res)),
|
||||
Err(e) => Json(ApiResponse::err(500, format!("{}", e))),
|
||||
}
|
||||
/// 流程运行日志列表
|
||||
async fn list(
|
||||
State(db): State<Db>,
|
||||
Query(p): Query<flow_run_log_service::ListParams>,
|
||||
) -> Result<Json<ApiResponse<flow_run_log_service::PageResp<flow_run_log_service::RunLogItem>>>, AppError> {
|
||||
let res = flow_run_log_service::list(&db, p).await?;
|
||||
Ok(Json(ApiResponse::ok(res)))
|
||||
}
|
||||
|
||||
/// 批量删除流程运行日志
|
||||
///
|
||||
/// 路径参数 ids 采用逗号分隔的 ID 列表,例如:/flow_run_logs/1001,1002
|
||||
/// 返回:{ deleted: <u64> },deleted 表示实际删除条数
|
||||
async fn delete_many(
|
||||
State(db): State<Db>,
|
||||
Path(ids): Path<String>,
|
||||
) -> Result<Json<ApiResponse<serde_json::Value>>, AppError> {
|
||||
let id_list: Vec<i64> = ids
|
||||
.split(',')
|
||||
.filter_map(|s| s.trim().parse::<i64>().ok())
|
||||
.collect();
|
||||
let deleted = flow_run_log_service::delete_many(&db, id_list).await?;
|
||||
Ok(Json(ApiResponse::ok(serde_json::json!({ "deleted": deleted }))))
|
||||
}
|
||||
@ -1,9 +1,47 @@
|
||||
use axum::{Router, routing::get, extract::{Query, State}, Json};
|
||||
use crate::{db::Db, response::ApiResponse, services::log_service, error::AppError};
|
||||
//! 请求日志查询路由模块
|
||||
//!
|
||||
//! 提供系统请求日志的分页查询接口与批量删除接口。
|
||||
|
||||
pub fn router() -> Router<Db> { Router::new().route("/logs", get(list)) }
|
||||
use axum::{
|
||||
extract::{Query, State},
|
||||
routing::{get, delete},
|
||||
Json, Router,
|
||||
};
|
||||
use axum::extract::Path;
|
||||
|
||||
async fn list(State(db): State<Db>, Query(p): Query<log_service::ListParams>) -> Result<Json<ApiResponse<log_service::PageResp<log_service::LogInfo>>>, AppError> {
|
||||
let res = log_service::list(&db, p).await.map_err(|e| AppError::Anyhow(anyhow::anyhow!(e)))?;
|
||||
use crate::db::Db;
|
||||
use crate::error::AppError;
|
||||
use crate::response::ApiResponse;
|
||||
use crate::services::log_service;
|
||||
|
||||
/// 路由定义:日志相关接口
|
||||
pub fn router() -> Router<Db> {
|
||||
Router::new()
|
||||
.route("/logs", get(list))
|
||||
.route("/logs/{ids}", delete(delete_many))
|
||||
}
|
||||
|
||||
/// 日志列表
|
||||
async fn list(
|
||||
State(db): State<Db>,
|
||||
Query(p): Query<log_service::ListParams>,
|
||||
) -> Result<Json<ApiResponse<log_service::PageResp<log_service::LogInfo>>>, AppError> {
|
||||
let res = log_service::list(&db, p).await?;
|
||||
Ok(Json(ApiResponse::ok(res)))
|
||||
}
|
||||
|
||||
/// 批量删除系统请求日志
|
||||
///
|
||||
/// 路径参数 ids 采用逗号分隔的 ID 列表,例如:/logs/1,2,3
|
||||
/// 返回:{ deleted: <u64> },deleted 表示实际删除条数
|
||||
async fn delete_many(
|
||||
State(db): State<Db>,
|
||||
Path(ids): Path<String>,
|
||||
) -> Result<Json<ApiResponse<serde_json::Value>>, AppError> {
|
||||
let id_list: Vec<i64> = ids
|
||||
.split(',')
|
||||
.filter_map(|s| s.trim().parse::<i64>().ok())
|
||||
.collect();
|
||||
let deleted = log_service::delete_many(&db, id_list).await?;
|
||||
Ok(Json(ApiResponse::ok(serde_json::json!({ "deleted": deleted }))))
|
||||
}
|
||||
@ -62,7 +62,6 @@ pub async fn create(db: &Db, input: CreateRunLogInput) -> anyhow::Result<i64> {
|
||||
Ok(m.id)
|
||||
}
|
||||
|
||||
|
||||
/// 分页查询流程运行日志
|
||||
///
|
||||
/// # 参数
|
||||
@ -129,4 +128,14 @@ pub async fn list(db: &Db, p: ListParams) -> anyhow::Result<PageResp<RunLogItem>
|
||||
page,
|
||||
page_size,
|
||||
})
|
||||
}
|
||||
|
||||
// 新增:批量删除流程运行日志
|
||||
pub async fn delete_many(db: &Db, ids: Vec<i64>) -> anyhow::Result<u64> {
|
||||
if ids.is_empty() { return Ok(0); }
|
||||
let res = flow_run_log::Entity::delete_many()
|
||||
.filter(flow_run_log::Column::Id.is_in(ids))
|
||||
.exec(db)
|
||||
.await?;
|
||||
Ok(res.rows_affected as u64)
|
||||
}
|
||||
@ -68,4 +68,14 @@ pub async fn list(db: &Db, p: ListParams) -> anyhow::Result<PageResp<LogInfo>> {
|
||||
let total = paginator.num_items().await? as u64;
|
||||
let models = paginator.fetch_page(if page>0 { page-1 } else { 0 }).await?;
|
||||
Ok(PageResp { items: models.into_iter().map(Into::into).collect(), total, page, page_size })
|
||||
}
|
||||
|
||||
// 新增:批量删除系统请求日志
|
||||
pub async fn delete_many(db: &Db, ids: Vec<i64>) -> anyhow::Result<u64> {
|
||||
if ids.is_empty() { return Ok(0); }
|
||||
let res = request_log::Entity::delete_many()
|
||||
.filter(request_log::Column::Id.is_in(ids))
|
||||
.exec(db)
|
||||
.await?;
|
||||
Ok(res.rows_affected as u64)
|
||||
}
|
||||
Reference in New Issue
Block a user