博主介绍:
国内互联网知名博主 · 5年软件开发师
🎯 研究方向:
✔ 项目指导 | PPT | 代码实现 | 源码定制 | 代码讲解
Java(SpringBoot / SSM) · Python · Vue ·Mysql数据库 · 微信小程序 · Android
大数据 · 机器学习/深度学习 · React · Go · PHP · Node.js等
源码免费获取:
如需完整源码及数据库脚本,可关注并私信获取,或在评论区留言交流技术问题
本文设计并实现音乐播放器微信小程序,系统包含 Web 管理后台与微信小程序端,设置管理员与普通用户两类角色。管理员可对音乐信息、用户评论、收藏记录、论坛帖子及公告进行维护,支持音乐新增、上下架、多条件检索与在线音频预览;小程序用户可浏览、搜索音乐,在线播放音频,收藏音乐并发表评论,同时查看平台公告、参与论坛交流。该系统实现音乐资源数字化管理,方便用户随时随地收听音乐,提升音乐资源管理与使用效率。
音乐播放器小程序功能描述
系统分为后台管理端(管理员) 和微信小程序端(普通用户),实现音乐在线播放、收藏、评论、论坛交流等功能。
技术栈:SpringBoot + MyBatis-Plus + MySQL + 微信小程序前端,核心为音乐模块,对应后台音乐管理页面、小程序音乐播放页面
一、管理员(后台)功能
- 首页:后台主页,查看系统概览信息。
- 个人中心:管理员修改账号、密码等个人信息。
- 管理员管理:维护后台管理员账号,新增、编辑、删除管理员。
- 操作日志管理:记录并查看后台所有用户的操作记录,用于系统审计。
- 基础数据管理:维护音乐类型、二级分类等基础字典数据。
- 论坛管理:管理论坛帖子,审核、删除用户发布的内容。
- 公告信息管理:发布、编辑、删除平台公告,小程序端可展示。
- 通知管理:管理系统消息通知。
- 音乐管理 (核心模块)
- 支持按音乐名称、音乐类型、二级类型多条件查询;
- 新增、批量删除音乐信息,导出报表;
- 录入音乐编号、封面图片、音频文件、关键词、音乐类型、上下架状态、录入时间;
- 在线预览播放音频,对音乐进行详情查看、编辑、上下架操作。
- 音乐评论管理:查看、管理小程序用户对音乐的评论内容。
- 音乐收藏管理:查看用户的音乐收藏记录。
- 用户管理:管理小程序注册用户信息。
- 轮播图信息:配置小程序首页轮播图片。
二、普通用户(微信小程序端)功能
底部导航包含:首页、公告信息、音乐、论坛、我的。
- 首页:展示轮播图,推荐音乐。
- 公告信息:查看管理员发布的平台公告。
- 音乐模块(核心)
- 搜索框输入音乐名称检索,支持按音乐类型筛选;
- 列表展示音乐封面、音乐名称、音乐类型;点击进入详情页,在线播放音频;
- 可收藏音乐、发表音乐评论。
- 论坛:浏览、发布、评论帖子,在线交流。
- 我的(个人中心):管理个人资料,查看我的收藏、我的评论、我的发帖。
运行截图:




核心代码:
java
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Map;
@RestController
@RequestMapping("/music")
public class MusicController {
@Resource
private MusicService musicService;
/**
* 后台分页多条件查询:音乐名称、音乐类型、二级类型(后台管理页面查询)
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String,Object> params, MusicEntity music){
LambdaQueryWrapper<MusicEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.like(music.getMusicName() != null, MusicEntity::getMusicName, music.getMusicName());
wrapper.eq(music.getMusicType() != null, MusicEntity::getMusicType, music.getMusicType());
wrapper.eq(music.getSecondType() != null, MusicEntity::getSecondType, music.getSecondType());
Page<MusicEntity> page = musicService.queryPage(params, wrapper);
return R.ok().put("data", page);
}
/**
* 新增音乐
*/
@PostMapping("/save")
public R save(@RequestBody MusicEntity music){
musicService.save(music);
return R.ok();
}
/**
* 修改音乐(上下架、编辑信息)
*/
@PostMapping("/update")
public R update(@RequestBody MusicEntity music){
musicService.updateById(music);
return R.ok();
}
/**
* 批量删除音乐
*/
@PostMapping("/delete")
public R delete(@RequestBody Long[] ids){
musicService.removeByIds(Arrays.asList(ids));
return R.ok();
}
/**
* 获取音乐详情(小程序播放页面)
*/
@GetMapping("/info/{id}")
public R info(@PathVariable Long id){
MusicEntity music = musicService.getById(id);
return R.ok().put("data", music);
}
/**
* 小程序端:查询上架的音乐列表
*/
@RequestMapping("/list")
public R list(MusicEntity music){
LambdaQueryWrapper<MusicEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(MusicEntity::getIsUp,"上架");
wrapper.like(music.getMusicName()!=null,MusicEntity::getMusicName,music.getMusicName());
wrapper.eq(music.getMusicType()!=null,MusicEntity::getMusicType,music.getMusicType());
return R.ok().put("data",musicService.list(wrapper));
}
}