From e4b828ead9456a666bbd51ec40c3ad99b4712ec6 Mon Sep 17 00:00:00 2001 From: ikmkj <1@qq,com> Date: Fri, 25 Jul 2025 21:47:18 +0800 Subject: [PATCH] =?UTF-8?q?feat(comment):=20=E6=B7=BB=E5=8A=A0=E9=9F=B3?= =?UTF-8?q?=E4=B9=90=E8=AF=84=E8=AE=BA=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=83=AD=E9=97=A8=E9=9F=B3=E4=B9=90=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 CommentServiceImpl 中增加针对音乐的评论计数逻辑 - 在 Home.vue 中添加热门音乐推荐模块 - 修改 Music.vue 中的热门音乐获取逻辑,支持分页 - 在 MusicDetail.vue 中实现评论列表展示和评论提交功能 - 更新 MusicList.vue,增加音乐详情查看按钮 - 在 MusicServiceImpl 中同步更新播放次数和点赞数 --- .../service/impl/CommentServiceImpl.java | 14 + .../service/impl/MusicServiceImpl.java | 5 +- music-qianduan/src/api/music.js | 3 +- music-qianduan/src/components/MusicList.vue | 19 +- music-qianduan/src/views/Home.vue | 52 +++- music-qianduan/src/views/Music.vue | 37 ++- music-qianduan/src/views/MusicDetail.vue | 291 +++++++++++++++++- 7 files changed, 391 insertions(+), 30 deletions(-) diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/CommentServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/CommentServiceImpl.java index e06ccfb..2ae5398 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/CommentServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/CommentServiceImpl.java @@ -8,6 +8,7 @@ import com.test.musichouduan.entity.Comment; import com.test.musichouduan.entity.User; import com.test.musichouduan.exception.BusinessException; import com.test.musichouduan.repository.CommentRepository; +import com.test.musichouduan.repository.MusicRepository; import com.test.musichouduan.repository.UserRepository; import com.test.musichouduan.service.CommentService; import org.springframework.messaging.simp.SimpMessagingTemplate; // 添加导入 @@ -38,6 +39,9 @@ public class CommentServiceImpl implements CommentService { @Autowired private UserRepository userRepository; + @Autowired + private MusicRepository musicRepository; + @Autowired private SimpMessagingTemplate messagingTemplate; // 注入 SimpMessagingTemplate @@ -100,6 +104,16 @@ public class CommentServiceImpl implements CommentService { // 保存评论 Comment savedComment = commentRepository.save(comment); + // 如果评论的是音乐 (targetType=1, 这个值需要与前端约定好) + // 通常可以定义一个枚举或常量类来管理这些类型值 + if (savedComment.getTargetType() == 1) { + musicRepository.findById(savedComment.getTargetId()).ifPresent(music -> { + int currentCommentCount = music.getCommentCount() != null ? music.getCommentCount() : 0; + music.setCommentCount(currentCommentCount + 1); + musicRepository.save(music); + }); + } + // 将新评论转换为DTO CommentDTO savedCommentDTO = convertToDTO(savedComment); diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java index 4e6dea6..5321e59 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java @@ -537,7 +537,10 @@ public class MusicServiceImpl implements MusicService { Music music = musicOpt.get(); // 增加播放次数 - music.setPlayCount(music.getPlayCount() + 1); + long currentPlayCount = music.getPlayCount() != null ? music.getPlayCount() : 0; + music.setPlayCount(currentPlayCount + 1); + // 根据要求,将点赞数与播放次数同步 + music.setLikeCount((int) (currentPlayCount + 1)); musicRepository.save(music); // 如果用户已登录,记录播放历史 diff --git a/music-qianduan/src/api/music.js b/music-qianduan/src/api/music.js index 6eef1e1..59f52eb 100644 --- a/music-qianduan/src/api/music.js +++ b/music-qianduan/src/api/music.js @@ -65,7 +65,8 @@ export function getMusicById(id) { * @returns {Promise} */ export function getHotMusic(limit = 10) { - return api.get('/music/hot', { + // 更新:调用新的热门音乐接口 + return api.get('/hot-music/list', { params: { limit } }) } diff --git a/music-qianduan/src/components/MusicList.vue b/music-qianduan/src/components/MusicList.vue index 6d5a38f..ea4151b 100644 --- a/music-qianduan/src/components/MusicList.vue +++ b/music-qianduan/src/components/MusicList.vue @@ -72,6 +72,15 @@ + + + + @@ -105,7 +114,8 @@ @@ -330,10 +530,79 @@ onMounted(() => { gap: 15px; } -.music-description, .music-lyric { +.music-description { margin-bottom: 30px; } +.content-toggle { + margin-bottom: 20px; +} + +.comment-section { + margin-top: 20px; +} + +.comment-input { + margin-bottom: 20px; + display: flex; + flex-direction: column; + gap: 10px; +} + +.comment-submit-actions { + display: flex; + justify-content: flex-end; + gap: 10px; +} + +.comment-list { + margin-top: 20px; +} + +.comment-item { + display: flex; + margin-bottom: 20px; + padding-bottom: 20px; + border-bottom: 1px solid #eee; +} + +.comment-avatar { + margin-right: 15px; +} + +.comment-content { + flex: 1; +} + +.comment-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 5px; +} + +.comment-user { + font-weight: bold; +} + +.child-comment-input { + margin-top: 10px; +} + +.comment-text { + margin-bottom: 5px; + color: #333; + line-height: 1.5; +} + +.comment-footer { + display: flex; + justify-content: space-between; + align-items: center; + font-size: 0.8rem; + color: #999; +} + .music-description h2, .music-lyric h2, .related-music h2 { font-size: 20px; margin-bottom: 15px;