1、后端编写
1.1 歌单服务模块编写
1)Service服务层编写
package com.gmw.musicserver.service;import com.gmw.musicserver.entity.SongList;import com.gmw.musicserver.entity.SongSheet;import com.baomidou.mybatisplus.extension.service.IService;import java.util.List;/*** <p>* 歌单表 服务类* </p>** @author 未进化的程序猿* @since 2022-01-26*/public interface SongSheetService extends IService<SongSheet> {/***增加歌单*/public boolean insertSongSheet(SongSheet songSheet);/***修改歌单*/public boolean updateSongSheet(SongSheet songSheet);/*** 删除歌单*/public boolean deleteSongSheet(Integer id);/*** 根据主键查询整个对象*/public SongSheet selectByPrimaryKey(Integer id);/*** 查询所有歌单*/public List<SongSheet> allSongList();/*** 根据标题精确查询歌单列表*/public List<SongSheet> songListOfTitle(String title);/*** 根据标题模糊查询歌单列表*/public List<SongSheet> likeTitle(String title);/*** 根据风格模糊查询歌单列表*/public List<SongSheet> likeStyle(String style);}
package com.gmw.musicserver.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.gmw.musicserver.entity.SongSheet;import com.gmw.musicserver.mapper.SongSheetMapper;import com.gmw.musicserver.service.SongSheetService;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.stereotype.Service;import java.util.List;/*** <p>* 歌单表 服务实现类* </p>** @author 未进化的程序猿* @since 2022-01-26*/@Servicepublic class SongSheetServiceImpl extends ServiceImpl<SongSheetMapper, SongSheet> implements SongSheetService {/*** 增加歌单** @param songSheet*/@Overridepublic boolean insertSongSheet(SongSheet songSheet) {return this.baseMapper.insert(songSheet) > 0;}/*** 修改歌单** @param songSheet*/@Overridepublic boolean updateSongSheet(SongSheet songSheet) {return this.baseMapper.updateById(songSheet) > 0;}/*** 删除歌单** @param id*/@Overridepublic boolean deleteSongSheet(Integer id) {return this.baseMapper.deleteById(id) > 0;}/*** 根据主键查询整个对象** @param id*/@Overridepublic SongSheet selectByPrimaryKey(Integer id) {return this.baseMapper.selectById(id);}/*** 查询所有歌单*/@Overridepublic List<SongSheet> allSongList() {return this.baseMapper.selectList(null);}/*** 根据标题精确查询歌单列表** @param title*/@Overridepublic List<SongSheet> songListOfTitle(String title) {QueryWrapper<SongSheet> queryWrapper = new QueryWrapper<>();queryWrapper.eq("title",title);return this.baseMapper.selectList(queryWrapper);}/*** 根据标题模糊查询歌单列表** @param title*/@Overridepublic List<SongSheet> likeTitle(String title) {QueryWrapper<SongSheet> queryWrapper = new QueryWrapper<>();queryWrapper.like("title",title);return this.baseMapper.selectList(queryWrapper);}/*** 根据风格模糊查询歌单列表** @param style*/@Overridepublic List<SongSheet> likeStyle(String style) {QueryWrapper<SongSheet> queryWrapper = new QueryWrapper<>();queryWrapper.like("style",style);return this.baseMapper.selectList(queryWrapper);}}
2)Controller控制层编写
package com.gmw.musicserver.controller;import com.gmw.musicserver.commonutils.R;import com.gmw.musicserver.entity.Song;import com.gmw.musicserver.entity.SongSheet;import com.gmw.musicserver.service.SongSheetService;import io.swagger.models.auth.In;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;import java.io.File;import java.io.IOException;import java.util.List;/*** <p>* 歌单表 前端控制器* </p>** @author 未进化的程序猿* @since 2022-01-26*/@RestController@RequestMapping("/musicserver/songSheet")public class SongSheetController {public static final Logger logger = LoggerFactory.getLogger(SongSheetController.class);@Autowiredpublic SongSheetService songSheetService;/*** 添加歌单*/@PostMapping(value = "/addSongSheet")public R addSongSheet(HttpServletRequest request){String title = request.getParameter("title").trim(); //标题String pic = request.getParameter("pic").trim(); //歌单图片String introduction = request.getParameter("introduction").trim();//简介String style = request.getParameter("style").trim(); //风格//保存到歌单的对象中SongSheet songSheet = new SongSheet();songSheet.setTitle(title);songSheet.setPic(pic);songSheet.setIntroduction(introduction);songSheet.setStyle(style);logger.info("保存的歌单对象: {}",songSheet);boolean flag = this.songSheetService.insertSongSheet(songSheet);if(flag){ //保存成功return R.ok().message("保存歌单成功!!");}return R.error().message("保存歌单失败!!");}/*** 修改歌单*/@PostMapping(value = "/updateSongSheet")public R updateSongSheet(HttpServletRequest request){String id = request.getParameter("id").trim(); //主键String title = request.getParameter("title").trim(); //标题String introduction = request.getParameter("introduction").trim();//简介String style = request.getParameter("style").trim(); //风格//保存到歌单的对象中SongSheet songSheet = new SongSheet();songSheet.setId(Integer.parseInt(id));songSheet.setTitle(title);songSheet.setIntroduction(introduction);songSheet.setStyle(style);logger.info("修改歌单保存的歌单对象: {}",songSheet);boolean flag = this.songSheetService.updateSongSheet(songSheet);if(flag){ //保存成功return R.ok().message("修改歌单成功!!");}return R.error().message("修改歌单失败!!");}/*** 删除歌单*/@GetMapping(value = "/deleteSongSheet")public R deleteSongSheet(HttpServletRequest request){String id = request.getParameter("id").trim(); //主键//-TODO 先查询到数据库中对应的文件地址,删除掉它再进行下面的代码//通过ID主键查询歌手对象SongSheet songSheet = this.songSheetService.selectByPrimaryKey(Integer.parseInt(id));//获取歌曲图片String songPic = songSheet.getPic();logger.info("歌单图片: {}",songPic);//如果文件的相对路径是/img/songListPic/123.jpg就没必要删除//因为它是当作默认相对路径的,需要用到if(!songPic.equals("/img/songListPic/123.jpg")){//获取歌曲保存的文件目录String songPath = System.getProperty("user.dir") + songPic;logger.info("获取歌单保存的文件目录: {}",songPath);File file = new File(songPath);if(file.isFile()){//判断如果是文件的话,就删除文件boolean isDelete = file.delete();logger.info("是否删除成功: {}",isDelete);if(!isDelete){return R.error().message("删除歌曲失败!!");}}}boolean flag = this.songSheetService.deleteSongSheet(Integer.parseInt(id));if(flag) {return R.ok().message("删除歌单成功!!");}return R.error().message("删除歌单失败!!");}/*** 根据主键查询整个对象*/@GetMapping(value = "/selectByPrimaryKey")public R selectByPrimaryKey(HttpServletRequest request){String id = request.getParameter("id").trim(); //主键SongSheet songSheet = this.songSheetService.selectByPrimaryKey(Integer.parseInt(id));return R.ok().data("songSheet",songSheet);}/*** 查询所有歌单*/@GetMapping(value = "/allSongSheet")public R allSongSheet(HttpServletRequest request){List<SongSheet> songSheetList = this.songSheetService.allSongList();logger.info("查询所有的歌单: {}",songSheetList);return R.ok().data("list",songSheetList);}/*** 根据标题精确查询歌单列表*/@GetMapping(value = "/songListOfTitle")public R songListOfName(HttpServletRequest request){String title = request.getParameter("title").trim(); //歌单标题List<SongSheet> songSheetList = this.songSheetService.songListOfTitle(title);return R.ok().data("list",songSheetList);}/*** 根据标题模糊查询歌单列表*/@GetMapping(value = "/likeTitle")public R likeTitle(HttpServletRequest request){String title = request.getParameter("title").trim(); //歌单标题List<SongSheet> songSheetList = this.songSheetService.likeTitle(title);return R.ok().data("list",songSheetList);}/*** 根据风格模糊查询歌单列表*/@GetMapping(value = "/likeStyle")public Object likeStyle(HttpServletRequest request){String style = request.getParameter("style").trim(); //歌单风格List<SongSheet> songSheetList = this.songSheetService.likeStyle(style);return R.ok().data("list",songSheetList);}/*** 更新歌单图片*/@PostMapping(value = "/updateSongSheetPic")public R updateSongSheetPic(@RequestParam("file") MultipartFile file, @RequestParam("id")int id){/*** 更新歌单图片之前,必须把原来的歌单图片删除掉*///通过ID主键查询歌单对象SongSheet songSheet = this.songSheetService.selectByPrimaryKey(id);//获取歌曲图片String pic = songSheet.getPic();logger.info("歌单图片: {}",pic);//如果文件的相对路径是/img/songListPic/123.jpg就没必要删除//因为它是当作默认相对路径的,需要用到if(!pic.equals("/img/songListPic/123.jpg")){//获取歌曲保存的文件目录String songPath = System.getProperty("user.dir") + pic;logger.info("获取歌单保存的文件目录: {}",songPath);File file1 = new File(songPath);if(file1.isFile()){file1.delete();}}//开始更新歌曲图片if(file.isEmpty()){return R.error().message("图片上传失败!!");}//文件名=当前时间到毫秒+原来的文件名String fileName = System.currentTimeMillis()+file.getOriginalFilename();//文件路径String filePath = System.getProperty("user.dir")+System.getProperty("file.separator")+"img"+System.getProperty("file.separator")+"songListPic";//如果文件路径不存在,新增该路径File file1 = new File(filePath);if(!file1.exists()){file1.mkdir();}//实际的文件地址File dest = new File(filePath+System.getProperty("file.separator")+fileName);//存储到数据库里的相对文件地址String storeAvatorPath = "/img/songListPic/"+fileName;try {file.transferTo(dest);SongSheet songSheet1 = new SongSheet();songSheet1.setId(id);songSheet1.setPic(storeAvatorPath);boolean flag = this.songSheetService.updateSongSheet(songSheet1);if(flag){return R.ok().message("图片上传成功!!");}else {return R.error().message("图片上传失败!!");}} catch (IOException e) {return R.error().message("图片上传失败!!");}}}
1.2 歌单包含歌曲服务模块编写
1)Service服务层编写
package com.gmw.musicserver.service;import com.baomidou.mybatisplus.extension.service.IService;import com.gmw.musicserver.entity.SongList;import java.util.List;/*** <p>* 歌单包含歌曲列表 服务类* 歌单里面的歌曲service接口* </p>** @author 未进化的程序猿* @since 2022-01-26*/public interface SongListService extends IService<SongList> {/***增加歌单里面的歌曲*/public boolean insertSongList(SongList songList);/***修改歌单里面的歌曲*/public boolean updateSongList(SongList songList);/*** 删除歌单里面的歌曲*/public boolean deleteSongList(Integer id);/*** 根据歌曲id和歌单id删除*/public boolean deleteBySongIdAndSongListId(Integer songId,Integer songListId);/*** 根据主键查询整个对象*/public SongList selectByPrimaryKey(Integer id);/*** 查询所有歌单里面的歌曲*/public List<SongList> allSongList();/*** 根据歌单id查询所有的歌曲*/public List<SongList> listSongOfSongListId(Integer songListId);}
package com.gmw.musicserver.service.impl;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;import com.gmw.musicserver.entity.SongList;import com.gmw.musicserver.mapper.SongListMapper;import com.gmw.musicserver.service.SongListService;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import org.springframework.stereotype.Service;import java.util.List;/*** <p>* 歌单包含歌曲列表 服务实现类* </p>** @author 未进化的程序猿* @since 2022-01-26*/@Servicepublic class SongListServiceImpl extends ServiceImpl<SongListMapper, SongList> implements SongListService {/*** 增加歌单里面的歌曲** @param songList*/@Overridepublic boolean insertSongList(SongList songList) {return this.baseMapper.insert(songList) > 0;}/*** 修改歌单里面的歌曲** @param songList*/@Overridepublic boolean updateSongList(SongList songList) {return this.baseMapper.updateById(songList) > 0;}/*** 删除歌单里面的歌曲** @param id*/@Overridepublic boolean deleteSongList(Integer id) {return this.baseMapper.deleteById(id) > 0;}/*** 根据歌曲id和歌单id删除** @param songId* @param songListId*/@Overridepublic boolean deleteBySongIdAndSongListId(Integer songId, Integer songListId) {QueryWrapper<SongList> queryWrapper = new QueryWrapper<>();queryWrapper.eq("song_id",songId);queryWrapper.eq("song_sheet_id",songListId);return this.baseMapper.delete(queryWrapper) > 0;}/*** 根据主键查询整个对象** @param id*/@Overridepublic SongList selectByPrimaryKey(Integer id) {return this.baseMapper.selectById(id);}/*** 查询所有歌单里面的歌曲*/@Overridepublic List<SongList> allSongList() {return this.baseMapper.selectList(null);}/*** 根据歌单id查询所有的歌曲** @param songListId*/@Overridepublic List<SongList> listSongOfSongListId(Integer songListId) {QueryWrapper<SongList> queryWrapper = new QueryWrapper<>();queryWrapper.eq("song_sheet_id",songListId);return this.baseMapper.selectList(queryWrapper);}}
2)Controller控制层编写
package com.gmw.musicserver.controller;import com.gmw.musicserver.commonutils.R;import com.gmw.musicserver.entity.SongList;import com.gmw.musicserver.service.SongListService;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;import java.util.List;/*** <p>* 歌单包含歌曲列表 前端控制器* </p>** @author 未进化的程序猿* @since 2022-01-26*/@RestController@RequestMapping("/musicserver/songList")public class SongListController {public static final Logger logger = LoggerFactory.getLogger(SongListController.class);@Autowiredpublic SongListService songListService;/*** 给歌单添加歌曲*/@PostMapping(value = "/addListSong")public R addListSong(HttpServletRequest request){//获取前端传来的参数String songId = request.getParameter("songId").trim(); //歌曲idString songListId = request.getParameter("songListId").trim(); //歌单idSongList songList = new SongList();songList.setSongId(Integer.parseInt(songId));songList.setSongSheetId(Integer.parseInt(songListId));logger.info("歌单添加歌曲对象: {}",songList);boolean flag = this.songListService.insertSongList(songList);if(flag){return R.ok().message("添加歌单歌曲成功!!");}return R.error().message("添加歌单歌曲失败!!");}/*** 根据歌单id查询歌曲*/@GetMapping(value = "/detail")public R detail(HttpServletRequest request){String songListId = request.getParameter("songListId");List<SongList> lists = this.songListService.listSongOfSongListId(Integer.parseInt(songListId));return R.ok().data("list",lists);}/*** 删除歌单里的歌曲*/@GetMapping(value = "/delete")public Object delete(HttpServletRequest request){String songId = request.getParameter("songId").trim(); //歌曲idString songListId = request.getParameter("songListId").trim(); //歌单idboolean flag = this.songListService.deleteBySongIdAndSongListId(Integer.parseInt(songId),Integer.parseInt(songListId));if (flag){return R.ok().message("删除歌单歌曲成功!!");}return R.error().message("删除歌单歌曲失败!!");}}
1.3 在歌曲管理模块Controller控制层中添加(根据歌曲id查询歌曲对象/根据歌手id查询歌曲)
/*** 根据歌曲id查询歌曲对象*/@GetMapping(value = "/detail")public R detail(HttpServletRequest request){String songId = request.getParameter("songId");Song song = this.songService.selectByPrimaryKey(Integer.parseInt(songId));return R.ok().data("song",song);}/*** 根据歌手名称查询歌曲*/@GetMapping(value = "/songOfSongName")public R songOfSongName(HttpServletRequest request){String songName = request.getParameter("songName");List<Song> songList = this.songService.songOfName(songName);return R.ok().data("list",songList);}
2、前端编写
2.1 歌单管理模块

<template><div class="table"><div class="container"><div class="handle-box"><el-button type="primary" size="mini" @click="delAll">批量删除</el-button><el-input v-model="select_word" size="mini" placeholder="筛选关键字" class="handle-input"></el-input><el-button type="primary" size="mini" @click="centerDialogVisible = true">添加歌单</el-button></div></div><el-table size="mini" ref="multipleTable" border style="width:100%" height="680px" :data="data" @selection-change="handleSelectionChange"><el-table-column type="selection" width="40"></el-table-column><el-table-column label="歌单图片" width="110" align="center"><template slot-scope="scope"><div class="songList-img"><img :src="getUrl(scope.row.pic)" style="width:100%"/></div><el-upload :action="uploadUrl(scope.row.id)" :before-upload="beforeAvatorUpload":on-success="handleAvatorSuccess"><el-button size="mini">更新图片</el-button></el-upload></template></el-table-column><el-table-column prop="title" label="标题" width="120" align="center"></el-table-column><el-table-column label="简介"><template slot-scope="scope"><p style="height:100px;overflow:scroll">{{scope.row.introduction}}</p></template></el-table-column><el-table-column prop="style" label="风格" width="120" align="center"></el-table-column><el-table-column label="歌曲管理" width="110" align="center"><template slot-scope="scope"><el-button size="mini" @click="songEdit(scope.row.id)">歌曲管理</el-button></template></el-table-column><el-table-column label="操作" width="150" align="center"><template slot-scope="scope"><el-button size="mini" @click="handleEdit(scope.row)">编辑</el-button><el-button size="mini" type="danger" @click="handleDelete(scope.row.id)">删除</el-button></template></el-table-column></el-table><div class="pagination"><el-paginationbackgroundlayout = "total,prev,pager,next":current-page="currentPage":page-size="pageSize":total="tableData.length"@current-change="handleCurrentChange"></el-pagination></div><el-dialog title="添加歌单" :visible.sync="centerDialogVisible" width="400px" center><el-form :model="registerForm" ref="registerForm" label-width="80px"><el-form-item prop="title" label="标题" size="mini"><el-input v-model="registerForm.title" placeholder="标题"></el-input></el-form-item><el-form-item prop="introduction" label="简介" size="mini"><el-input v-model="registerForm.introduction" placeholder="简介" type="textarea"></el-input></el-form-item><el-form-item prop="style" label="风格" size="mini"><el-input v-model="registerForm.style" placeholder="风格"></el-input></el-form-item></el-form><span slot="footer"><el-button size="mini" @click="centerDialogVisible = false">取消</el-button><el-button size="mini" @click="addSongList">确定</el-button></span></el-dialog><el-dialog title="修改歌单" :visible.sync="editVisible" width="400px" center><el-form :model="form" ref="form" label-width="80px"><el-form-item prop="title" label="标题" size="mini"><el-input v-model="form.title" placeholder="标题"></el-input></el-form-item><el-form-item prop="introduction" label="简介" size="mini"><el-input v-model="form.introduction" placeholder="简介" type="textarea"></el-input></el-form-item><el-form-item prop="style" label="风格" size="mini"><el-input v-model="form.style" placeholder="风格"></el-input></el-form-item></el-form><span slot="footer"><el-button size="mini" @click="editVisible = false">取消</el-button><el-button size="mini" @click="editSave">确定</el-button></span></el-dialog><el-dialog title="删除歌单" :visible.sync="delVisible" width="300px" center><div align="center">删除不可恢复,是否确定删除?</div><span slot="footer"><el-button size="mini" @click="delVisible = false">取消</el-button><el-button size="mini" @click="deleteRow">确定</el-button></span></el-dialog></div></template><script>import {getAllSongList,setSongList,updateSongList,delSongList} from '../api/songsheet/index';import { mixin } from '../mixins/index';export default {mixins: [mixin],data(){return{centerDialogVisible: false, //添加弹窗是否显示editVisible: false, //编辑弹窗是否显示delVisible: false, //删除弹窗是否显示registerForm:{ //添加框title: '',introduction: '',style: ''},form:{ //编辑框id: '',title: '',introduction: '',style: ''},tableData: [],tempData: [],select_word: '',pageSize: 5, //分页每页大小currentPage: 1, //当前页idx: -1, //当前选择项multipleSelection: [] //哪些项已经打勾}},computed:{//计算当前搜索结果表里的数据data(){return this.tableData.slice((this.currentPage - 1) * this.pageSize,this.currentPage * this.pageSize)}},watch:{//搜索框里面的内容发生变化的时候,搜索结果table列表的内容跟着它的内容发生变化select_word: function(){if(this.select_word == ''){this.tableData = this.tempData;}else{this.tableData = [];for(let item of this.tempData){if(item.title.includes(this.select_word)){this.tableData.push(item);}}}}},created(){this.getData();},methods:{//获取当前页handleCurrentChange(val){this.currentPage = val;},//查询所有歌单getData(){this.tempData = [];this.tableData = [];getAllSongList().then(res => {this.tempData = res.data.list;this.tableData = res.data.list;this.currentPage = 1;})},//添加歌单addSongList(){var _this = this;let params = new URLSearchParams();params.append('title',this.registerForm.title);params.append('pic','/img/songListPic/123.jpg');params.append('introduction',this.registerForm.introduction);params.append('style',this.registerForm.style);setSongList(params).then(res => {if(res.code == 20000){this.getData();this.notify("添加成功","success");//添加成功后删除文本框里面的值_this.registerForm = {}}else{this.notify("添加失败","error");_this.registerForm = {}}}).catch(err => {console.log(err);});this.centerDialogVisible = false;},//弹出编辑页面handleEdit(row){this.editVisible = true;this.form = {id: row.id,title: row.title,introduction: row.introduction,style: row.style}},//保存编辑页面修改的数据editSave(){let params = new URLSearchParams();params.append('id',this.form.id);params.append('title',this.form.title);params.append('introduction',this.form.introduction);params.append('style',this.form.style);updateSongList(params).then(res => {if(res.code == 20000){this.getData();this.notify("修改成功","success");}else{this.notify("修改失败","error");}}).catch(err => {console.log(err);});this.editVisible = false;},//更新图片uploadUrl(id){return `${this.$store.state.HOST}/musicserver/songSheet/updateSongSheetPic?id=${id}`},//删除一个歌单deleteRow(){delSongList(this.idx).then(res => {if(res.code == 20000){this.getData();this.notify("删除成功","success");}else{this.notify("删除失败","error");}}).catch(err => {console.log(err);});this.delVisible = false;},//转向歌曲管理页面,id表示歌单的IDsongEdit(id){this.$router.push({path:`/ListSong`,query:{id}});}}}</script><style scoped>.handle-box{margin-bottom: 20px;}.songList-img{width: 100%;height: 80px;border-radius: 5px;margin-bottom: 5px;overflow: hidden;}.handle-input{width: 300px;display: inline-block;}.pagination{display: flex;justify-content: center;}</style>
编写请求后端服务接口方法
import {get,post} from '../http'
//============歌单相关================
//查询歌单
export const getAllSongList =() => get(`musicserver/songSheet/allSongSheet`);
//添加歌单
export const setSongList = (params) => post(`musicserver/songSheet/addSongSheet`,params);
//编辑歌单
export const updateSongList = (params) => post(`musicserver/songSheet/updateSongSheet`,params);
//删除歌单
export const delSongList = (id) => get(`musicserver/songSheet/deleteSongSheet?id=${id}`);
引入请求后端接口方法
2.2 歌单包含歌曲模块列表


歌曲模块列表展示
<template>
<div class="table">
<div class="crumbs">
<i class="el-icon-tickets"></i>歌单歌曲信息
</div>
<div class="container">
<div class="handle-box">
<el-button type="primary" size="mini" @click="delAll">批量删除</el-button>
<el-input v-model="select_word" size="mini" placeholder="请输入歌曲名" class="handle-input"></el-input>
<el-button type="primary" size="mini" @click="centerDialogVisible = true">添加歌曲</el-button>
</div>
</div>
<el-table size="mini" ref="multipleTable" border style="width:100%" height="680px" :data="tableData" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="40"></el-table-column>
<el-table-column prop="name" label="歌手-歌名" align="center"></el-table-column>
<el-table-column label="操作" width="150" align="center">
<template slot-scope="scope">
<el-button size="mini" type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog title="添加歌曲" :visible.sync="centerDialogVisible" width="400px" center>
<el-form :model="registerForm" ref="registerForm" label-width="80px" action="" id="tf">
<el-form-item prop="singerName" label="歌手名字" size="mini">
<el-input v-model="registerForm.singerName" placeholder="歌手名字"></el-input>
</el-form-item>
<el-form-item prop="songName" label="歌曲名字" size="mini">
<el-input v-model="registerForm.songName" placeholder="歌曲名字"></el-input>
</el-form-item>
</el-form>
<span slot="footer">
<el-button size="mini" @click="centerDialogVisible = false">取消</el-button>
<el-button size="mini" @click="getSongId">确定</el-button>
</span>
</el-dialog>
<el-dialog title="删除歌曲" :visible.sync="delVisible" width="300px" center>
<div align="center">删除不可恢复,是否确定删除?</div>
<span slot="footer">
<el-button size="mini" @click="delVisible = false">取消</el-button>
<el-button size="mini" @click="deleteRow">确定</el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import { mixin } from '../mixins/index';
import {listSongDetail,listSongAdd,delListSong} from '../api/songlist/index';
import {songOfSongId,songOfSongName} from '../api/song/index'
export default {
mixins: [mixin],
data(){
return{
centerDialogVisible: false, //添加弹窗是否显示
delVisible: false, //删除弹窗是否显示
registerForm:{ //添加框
singerName: '', //歌手名字
songName: '' //歌曲名字
},
tableData: [],
tempData: [],
select_word: '',
idx: -1, //当前选择项
multipleSelection: [], //哪些项已经打勾
songListId: '' //歌单id
}
},
watch:{
//搜索框里面的内容发生变化的时候,搜索结果table列表的内容跟着它的内容发生变化
select_word: function(){
if(this.select_word == ''){
this.tableData = this.tempData;
}else{
this.tableData = [];
for(let item of this.tempData){
if(item.name.includes(this.select_word)){
this.tableData.push(item);
}
}
}
}
},
created(){
//获取歌单管理从路由传过来的歌单id
this.songListId = this.$route.query.id;
this.getData();
},
methods:{
//查询所有歌手
getData(){
this.tempData = [];
this.tableData = [];
//通过歌单id,查询该歌单下的所有歌曲
listSongDetail(this.songListId).then(res => {
//通过每一项的歌曲id,获取到每一项的歌曲对象
for(let item of res.data.list){
this.getSong(item.songId);
}
})
},
//根据歌曲id查询歌曲对象,放到tempData和tableData里面
getSong(id){
songOfSongId(id)
.then(res => {
this.tempData.push(res.data.song);
this.tableData.push(res.data.song);
})
.catch(err => {
console.log(err);
});
},
//添加歌曲前的准备,获取到歌曲id
getSongId(){
let _this = this;
//添加歌曲之前,通过歌手名称+歌曲名称拼接,查找到歌曲对象,并获取到这个对象的歌曲id,然后,传送给后端保存
var songOfName = _this.registerForm.singerName+"-"+_this.registerForm.songName;
songOfSongName(songOfName).then(
res => {
_this.addSong(res.data.list[0].id)
}
)
},
//添加歌曲
addSong(songId){
let _this = this;
let params = new URLSearchParams();
params.append('songId',songId);
params.append('songListId',this.songListId);
listSongAdd(params)
.then(res => {
if(res.code == 20000){
this.getData();
this.notify("添加成功","success");
}else{
this.notify("添加失败","error");
}
})
.catch(err => {
console.log(err);
});
_this.centerDialogVisible = false;
},
//删除一条歌曲
deleteRow(){
delListSong(this.idx,this.songListId)
.then(res => {
if(res.code == 20000){
this.getData();
this.notify("删除成功","success");
}else{
this.notify("删除失败","error");
}
})
.catch(err => {
console.log(err);
});
this.delVisible = false;
}
}
}
</script>
<style scoped>
.handle-box{
margin-bottom: 20px;
}
.song-img{
width: 100%;
height: 80px;
border-radius: 5px;
margin-bottom: 5px;
overflow: hidden;
}
.handle-input{
width: 300px;
display: inline-block;
}
.pagination{
display: flex;
justify-content: center;
}
.play {
position: absolute;
z-index: 100;
width: 80px;
height: 80px;
display: flex;
align-items: center;
justify-content: center;
cursor: pointer;
top: 18px;
left: 15px;
}
.icon {
width: 2em;
height: 2em;
color: white;
fill: currentColor;
overflow: hidden;
}
</style>
添加歌曲


添加歌曲之前,通过歌手名称+歌曲名称拼接,查找到歌曲对象,并获取到这个对象的歌曲id,然后,传送给后端保存

调用请求后端服务接口的方法

//根据歌曲id查询歌曲对象
export const songOfSongId =(id) => get(`musicserver/song/detail?songId=${id}`);
//根据歌曲名获取歌曲对象
export const songOfSongName =(songName) => get(`musicserver/song/songOfSongName?songName=${songName}`);

import {get,post} from '../http'
//============歌单的歌曲相关============
//根据歌单id查询歌曲列表
export const listSongDetail = (songListId) => get(`musicserver/songList/detail?songListId=${songListId}`);
//给歌单增加歌曲
export const listSongAdd = (params) => post(`musicserver/songList/addListSong`,params);
//删除歌单的歌曲
export const delListSong = (songId,songListId) => get(`musicserver/songList/delete?songId=${songId}&songListId=${songListId}`);
引入请求后端接口方法
添加歌曲
删除歌曲




