You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

270 lines
7.8 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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; }
}
}