移动端演示 http://8.146.211.120:8081/#/

管理端演示 http://8.146.211.120:8088/#/

项目整体介绍及演示

前言

在前面的系列文章中,我们已经基本完成了小红书项目的核心框架搭建和图文笔记的发布、展示流程。为了丰富App的功能和用户体验,今天我们将在此基础上进行两大核心升级:一、为笔记增加分类,并在首页实现筛选功能;二、支持用户发布视频笔记。


一、首页分类筛选

首先,我们参考主流内容App的设计,在首页的“发现”模块顶部增加一个分类导航栏,让用户可以快速筛选自己感兴趣的内容。

最终效果如下:

在这里插入图片描述

1. 后端实现

要实现分类,必须先有分类的存储。我们需要创建一张 business_category 表来管理所有分类。

CREATE TABLE `business_category` (`CATEGORY_ID` varchar(32) NOT NULL COMMENT '分类id',`CATEGORY_NAME` varchar(255) DEFAULT NULL COMMENT '分类名称',`SORT` int(11) DEFAULT '0' COMMENT '排序',`DELETED` tinyint(2) DEFAULT '0' COMMENT '0正常 1删除',`CREATE_TIME` datetime DEFAULT NULL,`UPDATE_TIME` datetime DEFAULT NULL,PRIMARY KEY (`CATEGORY_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='笔记分类表';

我们增加了 SORT 字段,方便后台进行排序管理。

接着,在后端的 NoteController.java 中,我们对查询笔记的接口进行改造,使其支持按 noteCategory 参数进行过滤。

// Mybatis-Plus Wrapper
QueryWrapper<Note> queryWrapper = new QueryWrapper<>();
// ...其他查询条件
// 如果分类ID不为空,则增加分类筛选条件
if (StringUtils.isNotBlank(noteCategory)) {queryWrapper.eq("NOTE_CATEGORY", noteCategory);
}
// ...执行查询

同时,提供一个 /api/getCategories 接口,用于让App端获取所有已排序的分类列表。

2. 前端实现

后台管理:
我们在后台管理系统中,创建了对应的分类管理页面,实现了对笔记分类的增、删、改、查以及拖拽排序功能。
在这里插入图片描述

App端 (index.vue):
在首页 onLoad 时,调用接口获取分类数据。
在这里插入图片描述

onLoad() {this.getCategories();// ...
},
methods:{getCategories() {uni.app.get('/getCategories', {}, (res) => {if (res.code === 200) {// 将后台返回的分类列表处理成导航组件需要的数据格式const categories = res.data.map(item => ({id: item.categoryId,name: item.categoryName}));// 在最前面加上“推荐”this.navItems = [{ id: '', name: '推荐' }, ...categories];}});},// ...
}

然后使用 gui-switch-navigation-shopping 组件来渲染这个可横向滚动的导航栏。当用户点击不同分类时,触发 @change 事件,调用查询笔记的接口并传入当前分类的ID。

<gui-switch-navigation-shopping :data="navItems" :currentIndex="navCurrentIndex"@change="navchange">
</gui-switch-navigation-shopping>// methods
navchange: function(index) {this.navCurrentIndex = index;// this.navItems[index].id 就是分类IDthis.noteCategory = this.navItems[index].id;// 清空现有列表,重新加载数据this.notes = [];this.page = 1;this.getNotes(); 
}

至此,首页的分类筛选功能就完成了。


二、支持视频笔记

图文内容已经无法满足所有创作场景,接下来我们为项目增加发布视频笔记的功能。

创建页效果:
在这里插入图片描述

1. 数据库与后端修改

首先,我们需要在笔记表 business_note 中增加一个字段来存储视频的地址。

ALTER TABLE `business_note` 
ADD COLUMN `VIDEO_URL` varchar(500) NULL COMMENT '视频地址' AFTER `FIRST_PICTURE`;

然后在对应的实体类 Note.java, NoteDto.java, NoteVo.java 中都加上 videoUrl 属性。

最后,修改发布笔记的接口 addNote,使其能够接收并保存 videoUrl 字段。

2. 前端实现 (create.vue)

我们对发布页 create.vue 进行了改造。

笔记类型选择:
将原来的Tab切换改为了点击后从底部弹出的ActionSheet,交互更友好。

文件上传:
当用户选择发布“视频笔记”时,界面会展示两个上传入口:一个用于上传视频,一个用于上传封面。

<!-- v-if="note.noteType === 2" -->
<view><view class="gui-h6">上传视频</view><!-- 视频上传组件 -->...
</view>
<view style="margin-top:20rpx;"><view class="gui-h6">上传封面</view><!-- 封面上传组件 -->...
</view>

提交逻辑:
submit 方法中,我们对视频笔记的提交流程进行了重构。使用 Promise.all 来并发上传视频文件和封面图片,可以有效提升上传效率。

async submit() {// ...表单校验...uni.showLoading({ title: '发布中...' });if (this.note.noteType === 2) { // 视频笔记if (!this.videoTempPath || !this.coverTempPath) {// ...提示用户选择文件...return;}try {// 并发上传封面和视频const [coverRes, videoRes] = await Promise.all([this.uploadFile(this.coverTempPath, 'avatar'),this.uploadFile(this.videoTempPath, 'video')]);// 从返回结果中获取完整URL和文件IDthis.note.firstPicture = coverRes.data; // 封面URLthis.note.videoUrl = videoRes.data;     // 视频URLthis.note.imgs = [coverRes.result.fileId]; // 封面ID// 调用接口,将数据提交到后端this.postNoteData();} catch (error) {uni.hideLoading();uni.showToast({ title: `上传失败: ${error}`, icon: "none" });}} else { // 图文笔记// ...执行原来的图文上传逻辑...}
}

通过以上改造,我们就完整地实现了视频笔记的发布功能。在首页信息流和笔记详情页,只需要将 note.videoUrl 绑定到 <video> 组件的 src 属性上即可播放。
在这里插入图片描述


后面我们计划实现商城功能,敬请期待。

代码地址
https://gitee.com/ddeatrr/springboot_vue_xhs

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

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

相关文章

Python与Web3.py库交互实践

目录 Python与Web3.py库交互实践引言:连接Python与区块链的桥梁1. 环境配置与基础连接1.1 安装Web3.py1.2 连接以太坊节点2. 基础区块链交互2.1 账户与余额查询2.2 创建并发送交易3. 智能合约交互3.1 加载和部署合约3.2 与已部署合约交互4. 高级功能实践4.1 事件监听4.2 与ERC…

《汇编语言:基于X86处理器》第6章 条件处理(2)

本章向程序员的汇编语言工具箱中引入一个重要的内容&#xff0c;使得编写出来的程序具备作决策的功能。几乎所有的程序都需要这种能力。首先&#xff0c;介绍布尔操作&#xff0c;由于能影响CPU状态标志&#xff0c;它们是所有条件指令的核心。然后&#xff0c;说明怎样使用演绎…

深度剖析NumPy核心函数reshape()

深度剖析NumPy核心函数reshape reshape()函数基础概念reshape()函数语法与参数详解reshape()函数使用示例基本的形状重塑使用-1自动计算维度多维数组的形状重塑不同order参数的效果 reshape()函数的应用场景数据预处理机器学习模型输入算法实现 当我们使用np.array()创建好数组…

Linux平台MinGW32/MinGW64交叉编译完全指南:原理、部署与组件详解

一、MinGW是什么&#xff1f;为什么需要交叉编译&#xff1f; MinGW&#xff08;Minimalist GNU for Windows&#xff09;是一套在Linux上构建Windows应用程序的完整工具链。它允许开发者&#xff1a; 在Linux环境下编译Windows可执行文件&#xff08;.exe/.dll&#xff09;避…

为什么我画的频谱图和audacity、audition不一样?

文章目录 系列文章目录 目录 文章目录 前言 一、问题引入 二、使用步骤 三、分析和改进 总结 前言 我们知道audacity和audition都有频谱分析这个窗口&#xff0c;一般过程肯定是分帧加窗&#xff0c;fft变换然后呈现&#xff0c; 大体这个过程是没问题的&#xff0c;但为什…

责任链模式 Go 语言实战

责任链模式&#xff08;Chain of Responsibility&#xff09; 责任链模式是一种行为设计模式&#xff0c;它允许将请求沿着处理者链进行传递&#xff0c;直到有一个处理者能够处理它。这个模式的主要目的是解耦请求的发送者和接收者&#xff0c;使得多个对象都有机会处理这个请…

使用开源项目youlai_boot 导入到ecplise 中出现很多错误

我是使用ecplise 导入得youlai_boot 这个项目&#xff0c;但是导入到ecplise 中一直出现报错&#xff0c;然后各种maven clean 和maven install 以及update Maven 都没有效果不知道怎么办才好&#xff0c;怎么样解决这个问题&#xff0c;原来是我本地的环境中没有安装 lombok.…

06_Americanas精益管理项目_数据分析

文章目录 Americanas精益管理项目_数据分析(一)思维方法1、数据分析思维2、零售行业-万能「人货场」分析框架(二)商品分析1、品类销量分析2、销量趋势分析3、帕累托法则分析4、商品TopN分析(三)用户分析(四)场景分析Americanas精益管理项目_数据分析 数据分析与数据开…

ES6从入门到精通:类与继承

ES6 类的基本概念 ES6 引入了基于类的面向对象编程语法&#xff0c;通过 class 关键字定义类。类可以包含构造函数、方法和属性。 class Person {constructor(name) {this.name name;}greet() {console.log(Hello, ${this.name}!);} }const person new Person(Alice); pers…

【经验】新版Chrome中Proxy SwitchyOmega2已实效,改为ZeroOmega

1、问题描述 手欠更新了 Chrome 导致无法“上网”&#xff0c;原因是 Proxy SwitchyOmega2 已实效。 2、解决方法 2.1 下载 新版Chrome中Proxy SwitchyOmega2已实效&#xff0c;改为ZeroOmega&#xff1b; 想方设法去下载 ZeroOmega 的crx包&#xff0c;最新的为&#xff1…

在windows上设置python的环境

安装好了python,再具体说下python语言的相关环境。 #01 关于Python Python 是一个高级别的、边运行边解释的、动态类型的编程语言,以简洁的语法、强大的功能和丰富的资源库而闻名。广泛应用于 Web 开发、数据分析、人工智能、自动化脚本等多个领域。 目前 Python 语言有两…

3D 建模与点云建模:从虚拟构建到实景复刻的数字孪生双引擎

在数字化浪潮席卷全球的当下&#xff0c;3D 建模与点云建模如同数字世界的左膀右臂&#xff0c;一个以抽象化的创意构建虚拟蓝图&#xff0c;一个以高精度的实景数据复刻现实世界。它们不仅深刻重塑了影视娱乐、工业制造、建筑设计等传统领域&#xff0c;更成为数字孪生技术蓬勃…

智能检测原理和架构

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 智能检测系统基于AI和大数据分析技术&#xff0c;通过主动感知、行为建模与实时响应构建动态防御体系。其核心在于将传统规则匹配升级为**多模态威胁认知**&#xff0c;实现对新型攻击&#xff08;如AI…

2025年6月个人工作生活总结

本文为 2025年6月工作生活总结。 研发编码 某国产操作系统curl下载sftp服务器文件问题记录 场景&#xff1a; 某国产系统curl版本信息&#xff1a; # curl --version curl 7.71.1 (x86_64-koji-linux-gnu) libcurl/7.71.1 OpenSSL/1.1.1f-fips zlib/1.2.11 brotli/1.0.7 li…

Java 导出PDF 1、内容可以插入自定义表格 2、内容插入图片

Java PDF导出工具&#xff1a;自定义表格与图片插入 下面我将实现一个Java PDF导出工具&#xff0c;支持插入自定义表格和图片的功能。这个解决方案使用iText 7库&#xff0c;提供了一个直观的用户界面&#xff0c;可以预览生成的PDF内容。 import javax.swing.*; import jav…

sklearn机器学习概述及API详细使用指南

一、机器学习与sklearn简介 机器学习是人工智能的一个分支&#xff0c;它通过算法让计算机从数据中学习规律&#xff0c;并基于这些规律做出预测或决策。scikit-learn&#xff08;简称sklearn&#xff09;是Python中最流行的机器学习库之一&#xff0c;它提供了各种监督学习和…

「日拱一码」015 机器学习常用库——scikit-learn

目录 数据预处理 数据标准化&#xff08;StandardScaler&#xff09; 数据归一化&#xff08;MinMaxScaler&#xff09; 数据离散化&#xff08;KBinsDiscretizer&#xff09; 缺失值处理&#xff08;SimpleImputer&#xff09; 特征选择 基于单变量特征选择&#xff08…

网络编程学习路线

C网络编程从零基础到精通的学习路线&#xff0c;每一步都和你的项目实际需求紧密结合&#xff0c;帮助你真正做到“学以致用”。 C网络编程学习路线&#xff08;结合FileHub项目&#xff09; 第一阶段&#xff1a;网络编程基础入门 1. 计算机网络基础 理解OSI七层模型、TCP/I…

NLP:文本张量表示方法

本文目录&#xff1a; 一、one-hot编码二、word2vec模型&#xff08;一&#xff09;概念1.CBOW(Continuous bag of words)模式2.skipgram模式:3.词向量的检索获取 &#xff08;二&#xff09;word2vec的训练和使用1. 获取训练数据2.查看原始数据3.原始数据处理&#xff0c;并查…

高阶数据结构------并查集

并查集 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个集合&#xff0c;然后按照一定的规律将归于同一组的元素集合合并。在此过程中要反复用到查询某一个元素归属于哪一个集合的运算。适合于描述这类问题的抽象…