Download Controllers/CategoryController.cs from automindy/Toolhub: direct link, hf CLI and curl.
- Browser
- Download file 6.07 kB
-
https://huggingface.co/spaces/automindy/Toolhub/resolve/main/Controllers/CategoryController.cs
- Command line
-
hf download hf://spaces/automindy/Toolhub/Controllers/CategoryController.cs
-
curl -L -o CategoryController.cs https://huggingface.co/spaces/automindy/Toolhub/resolve/main/Controllers/CategoryController.cs
6.07 kB
| using Microsoft.AspNetCore.Mvc; | |
| using Microsoft.AspNetCore.Authorization; | |
| using ToolHub.Models; | |
| namespace ToolHub.Controllers; | |
| [] | |
| public class CategoryController : Controller | |
| { | |
| private readonly IFreeSql _freeSql; | |
| public CategoryController(IFreeSql freeSql) | |
| { | |
| _freeSql = freeSql; | |
| } | |
| // 类别管理页面 | |
| public async Task<IActionResult> Index(int page = 1) | |
| { | |
| var pageSize = 20; | |
| var categories = await _freeSql.Select<Category>() | |
| .IncludeMany(c => c.Tools) | |
| .Where(c => c.IsActive) | |
| .OrderBy(c => c.SortOrder) | |
| .Page(page, pageSize) | |
| .ToListAsync(); | |
| // 获取总数用于分页 | |
| var totalCount = (int)await _freeSql.Select<Category>() | |
| .Where(c => c.IsActive) | |
| .CountAsync(); | |
| var totalPages = (int)Math.Ceiling((double)totalCount / pageSize); | |
| ViewBag.CurrentPage = page; | |
| ViewBag.TotalCount = totalCount; | |
| ViewBag.TotalPages = totalPages; | |
| ViewBag.PageSize = pageSize; | |
| return View(categories); | |
| } | |
| // 获取分页分类列表(AJAX) | |
| [] | |
| public async Task<IActionResult> GetCategories(int page = 1) | |
| { | |
| try | |
| { | |
| var pageSize = 20; | |
| var categories = await _freeSql.Select<Category>() | |
| .IncludeMany(c => c.Tools) | |
| .Where(c => c.IsActive) | |
| .OrderBy(c => c.SortOrder) | |
| .Page(page, pageSize) | |
| .ToListAsync(); | |
| var totalCount = (int)await _freeSql.Select<Category>() | |
| .Where(c => c.IsActive) | |
| .CountAsync(); | |
| var totalPages = (int)Math.Ceiling((double)totalCount / pageSize); | |
| return Json(new | |
| { | |
| categories = categories, | |
| pagination = new | |
| { | |
| currentPage = page, | |
| totalPages = totalPages, | |
| totalCount = totalCount, | |
| pageSize = pageSize, | |
| hasNext = page < totalPages, | |
| hasPrev = page > 1 | |
| } | |
| }); | |
| } | |
| catch | |
| { | |
| return Json(new { success = false, message = "获取分类列表失败" }); | |
| } | |
| } | |
| // 保存类别(添加/编辑) | |
| [] | |
| public async Task<IActionResult> Save([FromBody] CategoryDto categoryDto) | |
| { | |
| try | |
| { | |
| if (categoryDto.Id == 0) | |
| { | |
| // 添加新分类 | |
| var category = new Category | |
| { | |
| Name = categoryDto.Name, | |
| Description = categoryDto.Description, | |
| Icon = categoryDto.Icon, | |
| Color = categoryDto.Color, | |
| SortOrder = categoryDto.SortOrder, | |
| IsActive = true | |
| }; | |
| await _freeSql.Insert(category).ExecuteAffrowsAsync(); | |
| } | |
| else | |
| { | |
| // 更新分类 | |
| await _freeSql.Update<Category>() | |
| .Where(c => c.Id == categoryDto.Id) | |
| .Set(c => c.Name, categoryDto.Name) | |
| .Set(c => c.Description, categoryDto.Description) | |
| .Set(c => c.Icon, categoryDto.Icon) | |
| .Set(c => c.Color, categoryDto.Color) | |
| .Set(c => c.SortOrder, categoryDto.SortOrder) | |
| .Set(c => c.UpdatedAt, DateTime.Now) | |
| .ExecuteAffrowsAsync(); | |
| } | |
| return Json(new { success = true }); | |
| } | |
| catch | |
| { | |
| return Json(new { success = false }); | |
| } | |
| } | |
| // 切换类别状态 | |
| [] | |
| public async Task<IActionResult> ToggleStatus([FromBody] ToggleCategoryStatusRequest request) | |
| { | |
| try | |
| { | |
| await _freeSql.Update<Category>() | |
| .Where(c => c.Id == request.Id) | |
| .Set(c => c.IsActive, request.IsActive) | |
| .Set(c => c.UpdatedAt, DateTime.Now) | |
| .ExecuteAffrowsAsync(); | |
| return Json(new { success = true }); | |
| } | |
| catch | |
| { | |
| return Json(new { success = false }); | |
| } | |
| } | |
| // 删除类别 | |
| [] | |
| public async Task<IActionResult> Delete([FromBody] DeleteCategoryRequest request) | |
| { | |
| try | |
| { | |
| // 检查是否有工具使用此分类 | |
| var toolCount = await _freeSql.Select<Tool>().Where(t => t.CategoryId == request.Id).CountAsync(); | |
| if (toolCount > 0) | |
| { | |
| return Json(new { success = false, message = "该分类下还有工具,无法删除" }); | |
| } | |
| await _freeSql.Delete<Category>().Where(c => c.Id == request.Id).ExecuteAffrowsAsync(); | |
| return Json(new { success = true }); | |
| } | |
| catch | |
| { | |
| return Json(new { success = false }); | |
| } | |
| } | |
| // 获取类别列表(用于下拉选择) | |
| [] | |
| public async Task<IActionResult> GetList() | |
| { | |
| try | |
| { | |
| var categories = await _freeSql.Select<Category>() | |
| .Where(c => c.IsActive) | |
| .OrderBy(c => c.SortOrder) | |
| .ToListAsync(); | |
| return Json(categories); | |
| } | |
| catch | |
| { | |
| return Json(new List<Category>()); | |
| } | |
| } | |
| } | |
| // DTOs | |
| public class CategoryDto | |
| { | |
| public int Id { get; set; } | |
| public string Name { get; set; } = string.Empty; | |
| public string? Description { get; set; } | |
| public string? Icon { get; set; } | |
| public string? Color { get; set; } | |
| public int SortOrder { get; set; } | |
| } | |
| public class ToggleCategoryStatusRequest | |
| { | |
| public int Id { get; set; } | |
| public bool IsActive { get; set; } | |
| } | |
| public class DeleteCategoryRequest | |
| { | |
| public int Id { get; set; } | |
| } | |