|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
namespace Haoliang.Models.Common
|
|
|
{
|
|
|
/// <summary>
|
|
|
/// 非泛型API响应基类
|
|
|
/// </summary>
|
|
|
public class ApiResponse
|
|
|
{
|
|
|
public bool Success { get; set; }
|
|
|
public object? Data { get; set; }
|
|
|
public string? Message { get; set; }
|
|
|
public int ErrorCode { get; set; }
|
|
|
public DateTime Timestamp { get; set; }
|
|
|
public string? RequestId { get; set; }
|
|
|
public Dictionary<string, object>? Meta { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 创建成功响应
|
|
|
/// </summary>
|
|
|
public static ApiResponse Ok(object? data = null, string? message = null)
|
|
|
{
|
|
|
return new ApiResponse
|
|
|
{
|
|
|
Success = true,
|
|
|
Data = data,
|
|
|
Message = message ?? "Success",
|
|
|
ErrorCode = 200,
|
|
|
Timestamp = DateTime.Now
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 创建错误响应
|
|
|
/// </summary>
|
|
|
public static ApiResponse Error(string? message, int errorCode = 500)
|
|
|
{
|
|
|
return new ApiResponse
|
|
|
{
|
|
|
Success = false,
|
|
|
Message = message ?? "Error",
|
|
|
ErrorCode = errorCode,
|
|
|
Timestamp = DateTime.Now
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 创建未找到响应
|
|
|
/// </summary>
|
|
|
public static ApiResponse NotFound(string? message = null)
|
|
|
{
|
|
|
return new ApiResponse
|
|
|
{
|
|
|
Success = false,
|
|
|
Message = message ?? "Not Found",
|
|
|
ErrorCode = 404,
|
|
|
Timestamp = DateTime.Now
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 创建内部服务器错误响应
|
|
|
/// </summary>
|
|
|
public static ApiResponse InternalServerError(string? message = null)
|
|
|
{
|
|
|
return new ApiResponse
|
|
|
{
|
|
|
Success = false,
|
|
|
Message = message ?? "Internal Server Error",
|
|
|
ErrorCode = 500,
|
|
|
Timestamp = DateTime.Now
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 泛型API响应类
|
|
|
/// </summary>
|
|
|
public class ApiResponse<T> : ApiResponse
|
|
|
{
|
|
|
public new T? Data { get; set; }
|
|
|
|
|
|
/// <summary>
|
|
|
/// 创建成功响应
|
|
|
/// </summary>
|
|
|
public static ApiResponse<T> Ok(T? data = default, string? message = null)
|
|
|
{
|
|
|
return new ApiResponse<T>
|
|
|
{
|
|
|
Success = true,
|
|
|
Data = data,
|
|
|
Message = message ?? "Success",
|
|
|
ErrorCode = 200,
|
|
|
Timestamp = DateTime.Now
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 创建错误响应
|
|
|
/// </summary>
|
|
|
public static ApiResponse<T> ErrorResult(string? message, int errorCode = 500)
|
|
|
{
|
|
|
return new ApiResponse<T>
|
|
|
{
|
|
|
Success = false,
|
|
|
Message = message ?? "Error",
|
|
|
ErrorCode = errorCode,
|
|
|
Timestamp = DateTime.Now
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 创建未找到响应
|
|
|
/// </summary>
|
|
|
public static ApiResponse<T> NotFoundResult(string? message = null)
|
|
|
{
|
|
|
return new ApiResponse<T>
|
|
|
{
|
|
|
Success = false,
|
|
|
Message = message ?? "Not Found",
|
|
|
ErrorCode = 404,
|
|
|
Timestamp = DateTime.Now
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 创建内部服务器错误响应
|
|
|
/// </summary>
|
|
|
public static ApiResponse<T> InternalServerErrorResult(string? message = null)
|
|
|
{
|
|
|
return new ApiResponse<T>
|
|
|
{
|
|
|
Success = false,
|
|
|
Message = message ?? "Internal Server Error",
|
|
|
ErrorCode = 500,
|
|
|
Timestamp = DateTime.Now
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 创建.bad request响应
|
|
|
/// </summary>
|
|
|
public static ApiResponse<T> BadRequestResult(string? message = null)
|
|
|
{
|
|
|
return new ApiResponse<T>
|
|
|
{
|
|
|
Success = false,
|
|
|
Message = message ?? "Bad Request",
|
|
|
ErrorCode = 400,
|
|
|
Timestamp = DateTime.Now
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 分页响应类
|
|
|
/// </summary>
|
|
|
public class PaginatedResponse<T>
|
|
|
{
|
|
|
public List<T> Items { get; set; } = new List<T>();
|
|
|
public int TotalCount { get; set; }
|
|
|
public int PageNumber { get; set; }
|
|
|
public int PageSize { get; set; }
|
|
|
public int TotalPages { get; set; }
|
|
|
public bool HasPreviousPage { get; set; }
|
|
|
public bool HasNextPage { get; set; }
|
|
|
public ApiResponse<T> Response { get; set; } = new ApiResponse<T>();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 自定义验证结果(避免与System.ComponentModel.DataAnnotations.ValidationResult冲突)
|
|
|
/// </summary>
|
|
|
public class ModelValidationResult
|
|
|
{
|
|
|
public bool IsValid { get; set; }
|
|
|
public List<ValidationError> Errors { get; set; } = new List<ValidationError>();
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 验证错误
|
|
|
/// </summary>
|
|
|
public class ValidationError
|
|
|
{
|
|
|
public string? Field { get; set; }
|
|
|
public string? Message { get; set; }
|
|
|
public string? Code { get; set; }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 下拉选项
|
|
|
/// </summary>
|
|
|
public class SelectOption
|
|
|
{
|
|
|
public string? Value { get; set; }
|
|
|
public string? Label { get; set; }
|
|
|
public bool Disabled { get; set; }
|
|
|
public string? Group { get; set; }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 树节点
|
|
|
/// </summary>
|
|
|
public class TreeNode
|
|
|
{
|
|
|
public string? Id { get; set; }
|
|
|
public string? Text { get; set; }
|
|
|
public string? Type { get; set; }
|
|
|
public List<TreeNode> Children { get; set; } = new List<TreeNode>();
|
|
|
public Dictionary<string, object>? Data { get; set; }
|
|
|
public bool Expanded { get; set; }
|
|
|
public bool Selected { get; set; }
|
|
|
public bool HasChildren { get; set; }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 图表数据
|
|
|
/// </summary>
|
|
|
public class ChartData
|
|
|
{
|
|
|
public string? Type { get; set; }
|
|
|
public string? Title { get; set; }
|
|
|
public List<string> Labels { get; set; } = new List<string>();
|
|
|
public List<Dataset> Datasets { get; set; } = new List<Dataset>();
|
|
|
public Dictionary<string, object>? Options { get; set; }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 数据集
|
|
|
/// </summary>
|
|
|
public class Dataset
|
|
|
{
|
|
|
public string? Label { get; set; }
|
|
|
public List<decimal> Data { get; set; } = new List<decimal>();
|
|
|
public string? BackgroundColor { get; set; }
|
|
|
public string? BorderColor { get; set; }
|
|
|
public decimal BorderWidth { get; set; }
|
|
|
public string? BorderDash { get; set; }
|
|
|
public bool Fill { get; set; }
|
|
|
public string? Tension { get; set; }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 仪表盘组件
|
|
|
/// </summary>
|
|
|
public class DashboardWidget
|
|
|
{
|
|
|
public string? Id { get; set; }
|
|
|
public string? Title { get; set; }
|
|
|
public string? Type { get; set; }
|
|
|
public string? Size { get; set; }
|
|
|
public int Row { get; set; }
|
|
|
public int Col { get; set; }
|
|
|
public Dictionary<string, object>? Config { get; set; }
|
|
|
public bool Refreshable { get; set; }
|
|
|
public int RefreshInterval { get; set; }
|
|
|
public bool Visible { get; set; }
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 过滤条件
|
|
|
/// </summary>
|
|
|
public class FilterCondition
|
|
|
{
|
|
|
public string? Field { get; set; }
|
|
|
public string? Operator { get; set; }
|
|
|
public object? Value { get; set; }
|
|
|
public string? Logic { get; set; }
|
|
|
}
|
|
|
} |