從零用java實現 小紅書 springboot vue uniapp (12)實現分類篩選與視頻筆記功能

移動端演示 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;然后按照一定的規律將歸于同一組的元素集合合并。在此過程中要反復用到查詢某一個元素歸屬于哪一個集合的運算。適合于描述這類問題的抽象…