上一篇文章中我们上线了软件分离展示,本篇文章我们聚焦软件信息展示

软件列表信息展示

soft.gif

  • 点击一级分类查询该分类下所以软件
  • 分类切换要有动画效果
  • 分页支持

核心实现

<transition-grouptag="div"class="software-grid"@before-enter="beforeEnter"@enter="enter":css="false">
<div v-for="(item, index) in softwareList" :key="item.id" :data-index="index"><SoftwareCard :software="item" @download="onDownload" @show-detail="showSoftwareDetail" />
</div>
</transition-group>
<n-pagination
v-if="total > pageSize"
v-model:page="page"
:page-size="pageSize"
:page-count="Math.ceil(total / pageSize)"
style="margin-top: 24px; text-align: center;"
@update:page="handlePageChange"
/>

软件详情信息展示

点击展示详情

detail1.gif

悬浮显示默认资源
image.png

核心实现

<template><div class="software-card-wrapper"><n-card class="software-card" hoverable @click="showDetail"@mouseenter="handleMouseEnter"@mouseleave="handleMouseLeave"><div class="card-content"><div class="card-icon-img" :class="{ 'no-cover': !hasCover || imageError }"><template v-if="hasCover && !imageError"><img :src="coverImageUrl" width="72" height="72" :alt="software.softwareName"@error="handleImageError"@load="handleImageLoad"/></template><template v-else><div class="placeholder-cover">{{ software.softwareName ? software.softwareName.charAt(0).toUpperCase() : 'S' }}</div></template></div><div class="card-details"><div class="software-name" :title="software.softwareName">{{ software.softwareName }}</div><n-text depth="3" class="software-remark" :title="software.remark || '暂无备注'">{{ software.remark || '暂无备注' }}</n-text></div></div></n-card><!-- 悬浮弹框 - 移到卡片外部 --><n-popover :show="isHovered" placement="right" :show-arrow="true":trigger="'manual'":keep-alive-on-hover="true"@mouseenter="handlePopoverEnter"@mouseleave="handlePopoverLeave"><template #trigger><div class="card-trigger-area"></div></template><div class="software-popover"><div class="popover-header"><div class="popover-title">{{ software.softwareName }}</div><div class="popover-desc">{{ software.remark || '暂无描述' }}</div></div><div class="popover-content"><!-- 加载状态 --><div v-if="loadingResource" class="loading-resource"><n-spin size="small" /><span>加载资源信息...</span></div><!-- 有默认资源 --><template v-else-if="defaultResource"><div class="resource-item"><div class="resource-info"><div class="resource-name">{{ defaultResource.resourceName || defaultResource.originName || '默认资源' }}</div><div class="resource-meta"><span class="resource-size">{{ formatBytes(defaultResource.size) }}</span><span class="resource-version" v-if="defaultResource.version">|v{{ defaultResource.version }}</span></div></div><n-icon class="download-icon" @click.stop="downloadDefaultResource"title="下载资源"><CloudDownloadOutline /></n-icon></div></template><!-- 无默认资源 --><template v-else><div class="no-resource"><n-icon class="no-resource-icon"><CloudDownloadOutline /></n-icon><span>暂无可下载资源</span></div></template></div></div></n-popover></div>
</template>

软件搜索

image.png

核心实现

<template><div class="content-container"><div class="search-header"><div class="search-info"><h2 class="search-title">搜索结果</h2><p class="search-summary">关键词 "{{ keyword }}" 共找到 {{ total }} 个软件</p></div></div><!-- 加载状态 --><div v-if="loading" class="loading-container"><n-spin size="large" /><p>搜索中...</p></div><!-- 空状态 --><div v-else-if="softwareList.length === 0" class="empty-container"><n-empty description="未找到相关软件" /></div><!-- 搜索结果 --><div v-else class="search-results"><transition-group tag="div" class="software-grid"@before-enter="beforeEnter"@enter="enter":css="false"><div v-for="(software, index) in softwareList" :key="software.id" :data-index="index"><SoftwareCard:software="software"@show-detail="showSoftwareDetail"@download="downloadSoftware"/></div></transition-group><!-- 分页 --><div class="pagination-container"><n-paginationv-if="total > pageSize"v-model:page="page":page-size="pageSize":page-count="Math.ceil(total / pageSize)":item-count="total"show-size-picker:page-sizes="[12, 20, 50, 100]"@update:page="handlePageChange"@update:page-size="handlePageSizeChange"/></div></div></div>
</template>

首页展示

首页目前展示每个大分类前20个软件
image.png

<template><div class="home-container"><!-- 加载状态 --><div v-if="loading" class="loading-container"><n-spin size="large" /><p>加载软件列表中...</p></div><!-- 空状态 --><div v-else-if="categoryList.length === 0" class="empty-container"><n-empty description="暂无软件分类" /></div><!-- 分类和软件列表 --><div v-else class="categories-container"><div v-for="categoryData in categoryList" :key="categoryData.category.id" class="category-section"><!-- 分类标题 --><div class="category-header"><div class="category-title"><font-awesome-icon v-if="categoryData.category.icon && getIconObject(categoryData.category.icon)" :icon="getIconObject(categoryData.category.icon)" class="category-icon"/><font-awesome-icon v-else :icon="['fas', 'folder']" class="category-icon"/><h2>{{ categoryData.category.categoryName }}</h2></div></div><!-- 软件列表 --><transition-group v-if="categoryData.softwareList && categoryData.softwareList.length > 0" tag="div" class="software-grid"@before-enter="beforeEnter"@enter="enter":css="false"><div v-for="(software, index) in categoryData.softwareList":key="software.id":data-index="index"><SoftwareCard:software="software"@download="onDownload"@show-detail="showSoftwareDetail"/></div></transition-group><!-- 分类内无软件 --><div v-else class="category-empty"><n-empty description="该分类暂无软件" size="small" /></div></div></div></div>
</template>

资源集列表

image.png
image.png

如果软件包含在资源集中,也可以直接跳转过去,查询该资源集下其它软件
image.png

核心实现

<template><div class="content-container"><!-- 资源集列表 --><div v-if="!selectedResourceSet" class="resources-grid"><div v-if="loading" class="loading-container"><n-spin size="large" /><p>加载资源集中...</p></div><div v-else-if="resourceSets.length === 0" class="empty-container"><n-empty description="暂无资源集" /></div><divv-elsev-for="resourceSet in resourceSets":key="resourceSet.id"class="resource-card"@click="selectResourceSet(resourceSet)"><div class="resource-image"><font-awesome-icon v-if="getIconObject(resourceSet.icon)" :icon="getIconObject(resourceSet.icon)" class="icon"/><font-awesome-icon v-else :icon="['fas', 'folder']" class="icon"/></div><div class="resource-info"><h3>{{ resourceSet.name }}</h3><p>{{ resourceSet.description || resourceSet.remark || '暂无描述' }}</p><div class="resource-meta"><span><i class="fas fa-cube"></i> {{ resourceSet.softwareCount || 0 }}个软件</span></div></div></div></div><!-- 资源集详情 --><div v-else class="resource-detail"><div class="resource-header"><div class="breadcrumb-simple"><span class="breadcrumb-link" @click="backToList">资源集</span><span class="breadcrumb-separator">/</span><span class="breadcrumb-current">{{ selectedResourceSet.name }}</span></div><div class="resource-header-content"><h2 class="resource-title">{{ selectedResourceSet.name }}</h2><p class="resource-description">{{ selectedResourceSet.description || selectedResourceSet.remark || '暂无描述' }}</p></div></div><div v-if="loadingSoftware" class="loading-container"><n-spin size="large" /><p>加载软件列表中...</p></div><div v-else-if="softwareList.length === 0" class="empty-container"><n-empty description="该资源集暂无软件" /></div><transition-group v-else tag="div" class="software-grid"@before-enter="beforeEnter"@enter="enter":css="false"><div v-for="(software, index) in softwareList" :key="software.id" :data-index="index"><SoftwareCard:software="software"@show-detail="showSoftwareDetail"@download="downloadSoftware"/></div></transition-group></div></div>
</template>

softhub系列往期文章

  1. Softhub软件下载站实战开发(一):项目总览
  2. Softhub软件下载站实战开发(二):项目基础框架搭建
  3. Softhub软件下载站实战开发(三):平台管理模块实战
  4. Softhub软件下载站实战开发(四):代码生成器设计与实现
  5. Softhub软件下载站实战开发(五):分类模块实现
  6. Softhub软件下载站实战开发(六):软件配置面板实现
  7. Softhub软件下载站实战开发(七):集成MinIO实现文件存储功能
  8. Softhub软件下载站实战开发(八):编写软件后台管理
  9. Softhub软件下载站实战开发(九):编写软件配置管理界面
  10. Softhub软件下载站实战开发(十):实现图片视频上传下载接口
  11. Softhub软件下载站实战开发(十一):软件分片上传接口实现
  12. Softhub软件下载站实战开发(十二):软件管理编辑页面实现
  13. Softhub软件下载站实战开发(十三):软件管理前端分片上传实现
  14. Softhub软件下载站实战开发(十四):软件收藏集设计
  15. Softhub软件下载站实战开发(十五):仪表盘API设计
  16. Softhub软件下载站实战开发(十六):仪表盘前端设计与实现
  17. Softhub软件下载站实战开发(十七):用户端API设计
  18. Softhub软件下载站实战开发(十八):软件分类展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/89868.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/89868.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/89868.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[HDLBits] Cs450/gshare

Branch direction predictor 分支方向预测器 A branch direction predictor generates taken/not-taken predictions of the direction of conditional branch instructions. It sits near the front of the processor pipeline, and is responsible for directing instructio…

[学习] 双边带调制 (DSB) 与单边带调制 (SSB) 深度对比

双边带调制 (DSB) 与单边带调制 (SSB) 深度对比 文章目录双边带调制 (DSB) 与单边带调制 (SSB) 深度对比**数学原理****调制表达式与频谱****时域特性****频域特性****Python 仿真代码****仿真结果分析****工程应用建议**数学原理 设基带信号为 m(t)m(t)m(t)&#xff08;带宽为…

Gitee 提交信息的规范

在使用 git push 命令将代码推送到 Gitee&#xff08;或任何 Git 平台&#xff09;时&#xff0c;引号中的信息通常指的是 提交信息&#xff08;Commit Message&#xff09;。提交信息是对本次代码修改的简要描述&#xff0c;规范的提交信息有助于团队协作和版本管理。 Gitee 提…

C 语言经典编程题实战:从基础算法到趣味问题全解析

在 C 语言学习过程中&#xff0c;通过实战编程题巩固知识点是非常有效的方式。本文整理了一系列经典 C 语言编程题&#xff0c;涵盖基础计算、逻辑判断、图形打印等多个维度&#xff0c;并附上完整代码与解析&#xff0c;适合初学者参考学习上机题1.计算n以内所有正奇数的和 ?…

Chapter 3 Design of Switching Power Regulators

Chapter 3 Design of Switching Power Regulators Power Management Techniques for Integrated Circuit Design by Ke-Horng Chen 这本书比较深, 简单介绍基本概念后, 就直接抛出大段公式和结论, 一章讲其他书几章内容, 适合有一定基础, 想进一步做电源系统的人查阅. 优点是不…

算法题(176):three states

审题&#xff1a; 本题需要我们找到最佳铺设道路&#xff0c;将三个国家联通起来&#xff0c;然后输出最佳铺设道路的铺设数量&#xff0c;若没有联通方法则输出-1 思路&#xff1a; 首先我们正面思考&#xff1a;只需从某个点出发然后搜索到三个国家即可&#xff0c;最后对比所…

BIOS+MBR微内核加载loader程序实现过程

上一篇讲到的微内核程序是由BIOS例程自动加载到内存中运行的,而且大小有限,能做的事情有限。我们知道内核程序大小是可以扩展的不能只有512字节,同时在加载运行内核前还需要完成一些必要的实模式下才能做的准备工作。所以单纯在实模式下只使用微内核程序是不太够的,就有了加…

使用Proxy设计模式来增强类的功能:ToastProxy和DesktopToast的设计关系

使用代理模式来增强类的功能&#xff1a;ToastProxy和DesktopToast Documentation: v1.0.0 Specified for Version v1.12.0&#xff0c;First Release in 2025/7/12 Documenation belongs to Projects: Charliechen114514/CCIMXDesktop: This is a Simple Desktop with Common …

瑞芯微2025开发者大会之见闻

序言本人参加了2025年的瑞芯微开发者大会&#xff0c;在展览区看到了很多有意思的音视频产品&#xff0c;下面按照产品类型分类给大家做一下展示。期间并没有将所有展出物进行拍摄&#xff0c;但是基本已经覆盖大部分内容。1、RK3566该芯片内置DSP音频处理器&#xff0c;蓝牙5.…

【最新】Java的几种设计模式详解及适用业务场景

✅ 1. 单例模式&#xff08;Singleton&#xff09; 定义&#xff1a;确保类只有一个实例&#xff0c;并提供全局访问点。优点&#xff1a;节省资源、控制访问。场景&#xff1a;数据库连接池、日志管理器、配置中心。代码要点&#xff1a; 构造方法私有静态变量保存唯一实例公共…

单链表的手动实现+相关OJ题

目录 链表的介绍 单链表的手动实现 单链表的基本框架 打印链表&#xff1a; 获取表长&#xff1a; 头插法新增节点&#xff1a; 尾插法新增节点&#xff1a; 在指定下标插入&#xff1a; 链表的查找 删除链表中第一个出现的key&#xff1a; 删除链表中所有key值 链表…

梯度提升之原理

简介 梯度提升主要是基于数学最值问题 数学描述 目标函数为 obj(θ)∑i1nl(yi,y^i(t))∑k1tw(fk)obj(\theta) \sum_{i1}^n l(y_i, \hat y_i^{(t)}) \sum_{k1}^t w(f_k)obj(θ)i1∑n​l(yi​,y^​i(t)​)k1∑t​w(fk​) 其中ttt表示集成的树的个数&#xff0c;y^i(t)y^i(t−1)…

[学习] Hilbert变换:从数学原理到物理意义的深度解析与仿真实验(完整实验代码)

Hilbert变换&#xff1a;从数学原理到物理意义的深度解析与仿真实验 文章目录Hilbert变换&#xff1a;从数学原理到物理意义的深度解析与仿真实验一、数学原理二、作用与物理意义1.构造解析信号2.相位移动特性3.应用场景三、仿真实验实验1&#xff1a;正弦信号的Hilbert变换实验…

对话弋途科技:当AI重构汽车大脑,一场车载操作系统的“觉醒年代“开始了

&#xff08;图片来源&#xff1a;Pixels&#xff09;站在未来看历史&#xff0c;AI汽车刚刚开始。数科星球原创作者丨苑晶编辑丨大兔当特斯拉的自动驾驶仍在全球引发争议时&#xff0c;中国智能汽车战场已悄然开启第二幕。从"四个轮子的大手机"到"移动智能空间…

❗机器学习量化交易模型全面剖析报告基于因子库的机器学习交易模型构建指南

目录 第一章&#xff1a;机器学习在加密货币量化交易中的应用概述 范式转变&#xff1a;从传统因子到机器学习驱动的策略 为什么选择机器学习&#xff1f;机遇、挑战与核心概念 机遇 挑战 核心概念 第二章&#xff1a;为机器学习准备您的因子库 理解量化因子作为机器学…

内容创作智能体:多模态内容生成的完整解决方案

内容创作智能体&#xff1a;多模态内容生成的完整解决方案 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 总有一行代码&#xff0c;能点亮万千星辰。 &#x1f50d; 在技术的宇宙中&#xff0c;我愿做永不停歇的探索者。 ✨ 用代码丈量世界&…

测试学习之——Pytest Day4

Pytest作为Python中功能强大且易于使用的测试框架&#xff0c;深受开发者喜爱。它不仅提供了简洁的测试编写方式&#xff0c;还通过丰富的配置选项、灵活的标记机制和强大的数据驱动能力&#xff0c;极大地提升了测试效率和可维护性。本文将深入探讨Pytest的配置意义与层级、常…

【软件系统架构】系列七:系统性能——路由器性能深入解析

目录 一、路由器的核心功能 二、路由器性能核心指标 1. 吞吐量&#xff08;Throughput&#xff09; 2. 并发连接数&#xff08;Session Capacity&#xff09; 3. 每秒连接数&#xff08;CPS&#xff0c;Connections Per Second&#xff09; 4. 转发延迟&#xff08;Laten…

【数据结构】第一讲 —— 概论

【数据结构】第一讲 —— 概论 文章目录【数据结构】第一讲 —— 概论1.1 基本概念和常用术语1.2 了解数据结构1. 数据结构2. 数据的逻辑结构3. 数据的物理结构&#xff08;存储结构&#xff09;4. 数据的运算1.3 算法的描述和分析1.3.1 算法的描述1.3.21.1 基本概念和常用术语…

全面解析MySQL(2)——CRUD基础

1.CreateCreate(创建)&#xff1a;添加新数据到数据库中#基础语法 insert into table_name (column1,column2,column3, ...) values (value1,value2,value3, ...);1.1 单行全列插入value中值的数量和顺序必须和column⼀致describe demo1; -----------------------------------…