当前位置: 首页 > news >正文

Softhub软件下载站实战开发(五):分类模块实现

文章目录

    • Softhub软件下载站实战开发(五):分类模块实现 💻🌳
    • 一、功能需求分析 🎯
    • 二、数据库设计 🗃️
    • 三、后端实现 🚀
      • 1. 核心逻辑设计
      • 2. 关键接口实现
        • 添加分类逻辑:
        • 删除分类逻辑:
    • 四、前端实现 🖥️
      • 1. 树形表格展示
      • 2. 图标选择器组件
      • 3. 添加/编辑分类对话框
    • 五、实现效果展示 ✨
    • 六、关键问题解决 🛠️
    • 七、总结 📝

Softhub软件下载站实战开发(五):分类模块实现 💻🌳

本文我们将深入探讨Softhub软件下载站的分类模块设计与实现,这是构建软件下载站的核心功能之一。分类模块负责将海量软件进行有序组织,为用户提供清晰的浏览体验。

一、功能需求分析 🎯

分类模块需要满足以下核心需求:

  1. 分类管理:支持添加、编辑、删除软件分类
  2. 树形结构:支持两级分类(父/子分类)
  3. 分类关联:每个软件必须属于一个分类
  4. 数据验证:删除分类前需确保分类下无软件
  5. 图标支持:为每个分类设置个性化图标,基于fortawesome图标库
分类管理
添加分类
编辑分类
删除分类
分类列表
树形展示
多级嵌套
图标选择
删除校验

二、数据库设计 🗃️

分类表 ds_category 结构设计:

字段类型描述约束
idint(11)主键IDPRIMARY KEY
parent_idint(11)父分类IDDEFAULT 0
category_namevarchar(50)分类名称NOT NULL
iconvarchar(100)分类图标
sortint(11)排序NOT NULL
remarkvarchar(255)备注
created_byint(11)创建人NOT NULL
updated_byint(11)更新人NOT NULL
created_atdatetime创建时间NOT NULL
updated_atdatetime更新时间NOT NULL

三、后端实现 🚀

1. 核心逻辑设计

前端 控制器 服务层 数据访问层 请求操作分类 调用服务方法 执行数据库操作 返回结果 返回处理结果 返回响应 前端 控制器 服务层 数据访问层

2. 关键接口实现

添加分类逻辑:
func (s sDsCategory) Add(ctx context.Context, req *api.DsCategoryAddReq) error {// 检查分类名称是否已存在var category *model.DsCategoryInfodao.DsCategory.Ctx(ctx).Where(dao.DsCategory.Columns().CategoryName, req.CategoryName).Scan(&category)if category != nil {return fmt.Errorf("分类%s已经存在", category.CategoryName)}// 检查父分类是否存在if req.ParentId != 0 {var parentCategory *model.DsCategoryInfodao.DsCategory.Ctx(ctx).Where(dao.DsCategory.Columns().Id, req.ParentId).Scan(&parentCategory)if parentCategory == nil {return fmt.Errorf("父级分类不存在")}if parentCategory.ParentId != 0 {return fmt.Errorf("只能在顶级分类下添加子分类")}}// 插入新分类_, err := dao.DsCategory.Ctx(ctx).Insert(do.DsCategory{ParentId:     req.ParentId,CategoryName: req.CategoryName,Icon:         req.Icon,Sort:         req.Sort,Remark:       req.Remark,CreatedBy:    SystemS.Context().GetUserId(ctx),UpdatedBy:    SystemS.Context().GetUserId(ctx),})return err
}
删除分类逻辑:
func (s sDsCategory) Delete(ctx context.Context, id uint) error {// 检查分类下是否有软件var software *model.DsSoftwareInfodao.DsSoftware.Ctx(ctx).Where(dao.DsSoftware.Columns().CategoryId+" = ?", id).Limit(1).Scan(&software)if software != nil {return fmt.Errorf("该分类下有软件,无法删除")}// 执行删除_, err := dao.DsCategory.Ctx(ctx).WherePri(id).Delete()return err
}

四、前端实现 🖥️

1. 树形表格展示

<el-table :data="tableData.data" row-key="id" default-expand-all:tree-props="{ children: 'children', hasChildren: 'hasChildren' }"><el-table-column prop="categoryName" label="分类名称" /><el-table-column label="图标"><template #default="scope"><font-awesome-icon v-if="scope.row.icon" :icon="getIconObject(scope.row.icon)" /></template></el-table-column><el-table-column label="操作" width="240"><template #default="scope"><el-button size="small" text type="success" :disabled="!!scope.row.parentId"@click="onOpenAddChildCategory(scope.row)">新增子分类</el-button><el-button size="small" text type="primary" @click="onOpenEditDsCategory(scope.row)">修改</el-button><el-button size="small" text type="danger" @click="onRowDel(scope.row)">删除</el-button></template></el-table-column>
</el-table>

2. 图标选择器组件

参考Vue3 + Element Plus 实现强大的图标选择器组件

<el-form-item label="图标" prop="icon"><fs-icon-selector v-model="formData.icon" />
</el-form-item>

3. 添加/编辑分类对话框

<el-dialog v-model="isShowDialog"><el-form :model="formData" label-width="90px"><el-form-item label="上级分类" prop="parentId"><el-select v-model="formData.parentId" placeholder="请选择上级分类"><el-option v-for="item in categoryTree" :key="item.id" :label="item.categoryName" :value="item.id":disabled="item.id === formData.id" /></el-select></el-form-item><el-form-item label="分类名称" prop="categoryName"><el-input v-model="formData.categoryName" /></el-form-item><el-form-item label="图标" prop="icon"><fs-icon-selector v-model="formData.icon" /></el-form-item><el-form-item label="排序" prop="sort"><el-input-number v-model="formData.sort" /></el-form-item><el-form-item label="备注" prop="remark"><el-input v-model="formData.remark" /></el-form-item></el-form>
</el-dialog>

五、实现效果展示 ✨


图1:分类管理页面 - 树形展示分类结构

image.png

图2:添加分类对话框 - 支持图标选择和父分类选择

六、关键问题解决 🛠️

  1. 树形结构性能优化

    • 后端一次性获取所有分类数据
    • 前端使用递归算法构建树形结构
  2. 图标选择器实现

    • 集成Font Awesome图标库
    • 实现图标搜索和分类功能
    • 支持三种风格图标(solid/regular/brands)

七、总结 📝

本文详细介绍了Softhub软件下载站分类模块的设计与实现,包括:

  1. 设计合理的数据库结构存储分类信息
  2. 实现后端分类管理的核心逻辑
  3. 开发前端树形分类展示界面
  4. 实现分类的增删改查功能

softhub系列往期文章

  1. Softhub软件下载站实战开发(一):项目总览
  2. Softhub软件下载站实战开发(二):项目基础框架搭建
  3. Softhub软件下载站实战开发(三):平台管理模块实战
  4. Softhub软件下载站实战开发(四):代码生成器设计与实现

相关文章:

  • C语言学习day17-----位运算
  • LeeCode94二叉树的中序遍历
  • SpringBoot定时监控数据库状态
  • thinkphp8 模型-一对一,一对多,多对多 学习
  • 软件工程(期末复习班)
  • .NET 的配置系统
  • CLion + STM32环境配置,亲测有效(2025.06.19记)
  • 磐基PaaS平台MongoDB组件SSPL许可证风险与合规性分析(上)
  • 业务战略分析需要开展什么工作?-中小企实战运营和营销工作室博客
  • Windows 操作系统 - Windows 关闭咨询和兴趣
  • FocalAD论文阅读
  • 【目标检测】非极大值抑制(NMS)的原理与实现
  • 运维人员常用网站列表
  • 【LUT技术专题】采样间隔自适应3DLUT-AdaInt
  • 31.多列子查询
  • 动态规划:01 背包(闫氏DP分析法)
  • pyspark 处理字符串函数
  • 实现PDF文件添加水印的功能
  • 机器学习×第十二卷:回归树与剪枝策略——她剪去多余的分支,只保留想靠近你的那一层
  • Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器
  • 上海网站论坛建设/seo优化排名技术百度教程
  • 小说网站个人可以做吗/cps推广
  • 网站制作三级页面/打开百度一下的网址
  • 建网站怎么做/百度品牌广告多少钱一个月
  • 加强公司内部网站建设/推广普通话的重要意义
  • 做vi设计的国外网站/app广告投放价格表