1、后端编写

1.1 Service服务层编写

  1. package com.gmw.musicserver.service;
  2. import com.gmw.musicserver.entity.Consumer;
  3. import com.baomidou.mybatisplus.extension.service.IService;
  4. import java.util.List;
  5. /**
  6. * <p>
  7. * 用户表 服务类
  8. * 前端用户service接口
  9. * </p>
  10. *
  11. * @author 未进化的程序猿
  12. * @since 2022-01-26
  13. */
  14. public interface ConsumerService extends IService<Consumer> {
  15. /**
  16. *增加用户
  17. */
  18. public boolean insertConsumer(Consumer consumer);
  19. /**
  20. *修改用户
  21. */
  22. public boolean updateConsumer(Consumer consumer);
  23. /**
  24. * 删除用户
  25. */
  26. public boolean deleteConsumer(Integer id);
  27. /**
  28. * 根据主键查询整个对象
  29. */
  30. public Consumer selectByPrimaryKey(Integer id);
  31. /**
  32. * 查询所有用户
  33. */
  34. public List<Consumer> allConsumer();
  35. /**
  36. * 修改密码
  37. */
  38. public boolean verifyPassword(String username,String password);
  39. /**
  40. * 根据账号查询
  41. */
  42. public Consumer getByUsername(String username);
  43. }
  1. package com.gmw.musicserver.service.impl;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.gmw.musicserver.entity.Consumer;
  4. import com.gmw.musicserver.mapper.ConsumerMapper;
  5. import com.gmw.musicserver.service.ConsumerService;
  6. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  7. import org.springframework.stereotype.Service;
  8. import java.util.List;
  9. /**
  10. * <p>
  11. * 用户表 服务实现类
  12. * </p>
  13. *
  14. * @author 未进化的程序猿
  15. * @since 2022-01-26
  16. */
  17. @Service
  18. public class ConsumerServiceImpl extends ServiceImpl<ConsumerMapper, Consumer> implements ConsumerService {
  19. /**
  20. * 增加用户
  21. *
  22. * @param consumer
  23. */
  24. @Override
  25. public boolean insertConsumer(Consumer consumer) {
  26. return this.baseMapper.insert(consumer) > 0;
  27. }
  28. /**
  29. * 修改用户
  30. *
  31. * @param consumer
  32. */
  33. @Override
  34. public boolean updateConsumer(Consumer consumer) {
  35. return this.baseMapper.updateById(consumer) > 0;
  36. }
  37. /**
  38. * 删除用户
  39. *
  40. * @param id
  41. */
  42. @Override
  43. public boolean deleteConsumer(Integer id) {
  44. return this.baseMapper.deleteById(id) > 0;
  45. }
  46. /**
  47. * 根据主键查询整个对象
  48. *
  49. * @param id
  50. */
  51. @Override
  52. public Consumer selectByPrimaryKey(Integer id) {
  53. return this.baseMapper.selectById(id);
  54. }
  55. /**
  56. * 查询所有用户
  57. */
  58. @Override
  59. public List<Consumer> allConsumer() {
  60. return this.baseMapper.selectList(null);
  61. }
  62. /**
  63. * 修改密码
  64. *
  65. * @param username
  66. * @param password
  67. */
  68. @Override
  69. public boolean verifyPassword(String username, String password) {
  70. QueryWrapper<Consumer> queryWrapper = new QueryWrapper<>();
  71. queryWrapper.eq("username",username);
  72. queryWrapper.eq("password",password);
  73. return this.baseMapper.selectCount(queryWrapper) > 0;
  74. }
  75. /**
  76. * 根据账号查询
  77. *
  78. * @param username
  79. */
  80. @Override
  81. public Consumer getByUsername(String username) {
  82. QueryWrapper<Consumer> queryWrapper = new QueryWrapper<>();
  83. queryWrapper.eq("username",username);
  84. return this.baseMapper.selectOne(queryWrapper);
  85. }
  86. }

1.2 Controller控制层编写

  1. package com.gmw.musicserver.controller;
  2. import com.gmw.musicserver.commonutils.R;
  3. import com.gmw.musicserver.entity.Consumer;
  4. import com.gmw.musicserver.entity.Song;
  5. import com.gmw.musicserver.service.ConsumerService;
  6. import io.swagger.models.auth.In;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.web.bind.annotation.*;
  11. import org.springframework.web.multipart.MultipartFile;
  12. import javax.servlet.http.HttpServletRequest;
  13. import java.io.File;
  14. import java.io.IOException;
  15. import java.text.DateFormat;
  16. import java.text.ParseException;
  17. import java.text.SimpleDateFormat;
  18. import java.util.Date;
  19. import java.util.List;
  20. /**
  21. * <p>
  22. * 用户表 前端控制器
  23. * </p>
  24. *
  25. * @author 未进化的程序猿
  26. * @since 2022-01-26
  27. */
  28. @RestController
  29. @RequestMapping("/musicserver/consumer")
  30. public class ConsumerController {
  31. public static final Logger logger = LoggerFactory.getLogger(ConsumerController.class);
  32. @Autowired
  33. private ConsumerService consumerService;
  34. /**
  35. * 添加前端用户
  36. */
  37. @PostMapping(value = "/addConsumer")
  38. public R addConsumer(HttpServletRequest request){
  39. String username = request.getParameter("username").trim(); //账号
  40. String password = request.getParameter("password").trim(); //密码
  41. String sex = request.getParameter("sex").trim(); //性别
  42. String phoneNum = request.getParameter("phoneNum").trim(); //手机号
  43. String email = request.getParameter("email").trim(); //电子邮箱
  44. String birth = request.getParameter("birth").trim(); //生日
  45. String introduction = request.getParameter("introduction").trim();//签名
  46. String location = request.getParameter("location").trim(); //地区
  47. String avator = request.getParameter("avator").trim(); //头像地址
  48. if(username==null||username.equals("")){
  49. return R.error().message("用户名不能为空!!");
  50. }
  51. if(password==null||password.equals("")){
  52. return R.error().message("密码不能为空!!");
  53. }
  54. //把生日转换成Date格式
  55. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  56. Date birthDate = new Date();
  57. try {
  58. birthDate = dateFormat.parse(birth);
  59. } catch (ParseException e) {
  60. e.printStackTrace();
  61. }
  62. //保存到前端用户的对象中
  63. Consumer consumer = new Consumer();
  64. consumer.setUsername(username);
  65. consumer.setPassword(password);
  66. consumer.setSex(Integer.parseInt(sex));
  67. consumer.setPhoneNum(phoneNum);
  68. consumer.setEmail(email);
  69. consumer.setBirth(birthDate);
  70. consumer.setIntroduction(introduction);
  71. consumer.setLocation(location);
  72. consumer.setAvator(avator);
  73. logger.info("保存前端用户对象: {}",consumer);
  74. boolean flag = this.consumerService.insertConsumer(consumer);
  75. if(flag){ //保存成功
  76. return R.ok().message("添加成功!!");
  77. }else {
  78. return R.error().message("添加失败!!");
  79. }
  80. }
  81. /**
  82. * 修改前端用户
  83. */
  84. @PostMapping(value = "/updateConsumer")
  85. public R updateConsumer(HttpServletRequest request){
  86. String id = request.getParameter("id").trim(); //主键
  87. String username = request.getParameter("username").trim(); //账号
  88. String password = request.getParameter("password").trim(); //密码
  89. String sex = request.getParameter("sex").trim(); //性别
  90. String phoneNum = request.getParameter("phoneNum").trim(); //手机号
  91. String email = request.getParameter("email").trim(); //电子邮箱
  92. String birth = request.getParameter("birth").trim(); //生日
  93. String introduction = request.getParameter("introduction").trim();//签名
  94. String location = request.getParameter("location").trim(); //地区
  95. if(username==null||username.equals("")){
  96. return R.error().message("用户名不能为空!!");
  97. }
  98. if(password==null||password.equals("")){
  99. return R.error().message("密码不能为空!!");
  100. }
  101. //把生日转换成Date格式
  102. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  103. Date birthDate = new Date();
  104. try {
  105. birthDate = dateFormat.parse(birth);
  106. } catch (ParseException e) {
  107. e.printStackTrace();
  108. }
  109. //保存到前端用户的对象中
  110. Consumer consumer = new Consumer();
  111. consumer.setId(Integer.parseInt(id));
  112. consumer.setUsername(username);
  113. consumer.setPassword(password);
  114. consumer.setSex(Integer.parseInt(sex));
  115. consumer.setPhoneNum(phoneNum);
  116. consumer.setEmail(email);
  117. consumer.setBirth(birthDate);
  118. consumer.setIntroduction(introduction);
  119. consumer.setLocation(location);
  120. logger.info("保存前端用户修改对象: {}",consumer);
  121. boolean flag = this.consumerService.updateConsumer(consumer);
  122. if(flag){ //保存成功
  123. return R.ok().message("修改成功!!");
  124. }else {
  125. return R.error().message("修改失败!!");
  126. }
  127. }
  128. /**
  129. * 删除前端用户
  130. */
  131. @GetMapping(value = "/deleteConsumer")
  132. public R deleteConsumer(HttpServletRequest request){
  133. String id = request.getParameter("id").trim(); //主键
  134. //-TODO 先查询到数据库中对应的文件地址,删除掉它再进行下面的代码
  135. //通过ID主键查询用户对象
  136. Consumer consumer = this.consumerService.selectByPrimaryKey(Integer.parseInt(id));
  137. //获取用户图片
  138. String avator = consumer.getAvator();
  139. logger.info("获取用户图片: {}",avator);
  140. //如果文件的相对路径是/img/avatorImages/user.jpg就没必要删除
  141. //因为它是当作默认相对路径的,需要用到
  142. if(!avator.equals("/img/avatorImages/user.jpg")){
  143. //获取用户图片保存的文件目录
  144. String avatorPath = System.getProperty("user.dir") + avator;
  145. logger.info("获取用户图片保存的文件目录: {}",avatorPath);
  146. File file = new File(avatorPath);
  147. if(file.isFile()){
  148. //判断如果是文件的话,就删除文件
  149. boolean isDelete = file.delete();
  150. logger.info("是否删除成功: {}",isDelete);
  151. if(!isDelete){
  152. return R.error().message("删除用户失败!!");
  153. }
  154. }
  155. }
  156. boolean flag = this.consumerService.deleteConsumer(Integer.parseInt(id));
  157. if(flag){
  158. return R.ok().message("删除成功!!");
  159. }
  160. return R.error().message("删除失败!!");
  161. }
  162. /**
  163. * 根据主键查询整个对象
  164. */
  165. @GetMapping(value = "/selectByPrimaryKey")
  166. public R selectByPrimaryKey(HttpServletRequest request){
  167. String id = request.getParameter("id").trim(); //主键
  168. Consumer consumer = this.consumerService.selectByPrimaryKey(Integer.parseInt(id));
  169. return R.ok().data("consumer",consumer);
  170. }
  171. /**
  172. * 查询所有前端用户
  173. */
  174. @GetMapping(value = "/allConsumer")
  175. public R allConsumer(HttpServletRequest request){
  176. List<Consumer> consumers = this.consumerService.allConsumer();
  177. return R.ok().data("list",consumers);
  178. }
  179. /**
  180. * 更新前端用户图片
  181. */
  182. @PostMapping(value = "/updateConsumerPic")
  183. public R updateConsumerPic(@RequestParam("file") MultipartFile avatorFile, @RequestParam("id")int id){
  184. /**
  185. * 更新用户图片之前,必须把原来的用户图片删除掉
  186. */
  187. //通过ID主键查询用户对象
  188. Consumer consumer1 = this.consumerService.selectByPrimaryKey(id);
  189. //获取用户图片
  190. String avator = consumer1.getAvator();
  191. logger.info("获取用户图片: {}",avator);
  192. //如果文件的相对路径是/img/avatorImages/user.jpg就没必要删除
  193. //因为它是当作默认相对路径的,需要用到
  194. if(!avator.equals("/img/avatorImages/user.jpg")){
  195. //获取用户图片保存的文件目录
  196. String avatorPath = System.getProperty("user.dir") + avator;
  197. logger.info("获取用户图片保存的文件目录: {}",avator);
  198. File file1 = new File(avator);
  199. if(file1.isFile()){
  200. file1.delete();
  201. }
  202. }
  203. //开始更新用户图片
  204. if(avatorFile.isEmpty()){
  205. return R.error().message("文件上传失败!!");
  206. }
  207. //文件名=当前时间到毫秒+原来的文件名
  208. String fileName = System.currentTimeMillis()+avatorFile.getOriginalFilename();
  209. //文件路径
  210. String filePath = System.getProperty("user.dir")+System.getProperty("file.separator")
  211. + "img" + System.getProperty("file.separator") + "avatorImages";
  212. //如果文件路径不存在,新增该路径
  213. File file1 = new File(filePath);
  214. if(!file1.exists()){
  215. file1.mkdir();
  216. }
  217. //实际的文件地址
  218. File dest = new File(filePath+System.getProperty("file.separator")+fileName);
  219. //存储到数据库里的相对文件地址
  220. String storeAvatorPath = "/img/avatorImages/"+fileName;
  221. try {
  222. avatorFile.transferTo(dest);
  223. Consumer consumer = new Consumer();
  224. consumer.setId(id);
  225. consumer.setAvator(storeAvatorPath);
  226. boolean flag = this.consumerService.updateConsumer(consumer);
  227. if(flag){
  228. return R.ok().message("文件上传成功!!");
  229. }else {
  230. return R.error().message("文件上传失败!!");
  231. }
  232. } catch (IOException e) {
  233. return R.error().message("文件上传失败!! "+ e.getMessage());
  234. }
  235. }
  236. }

2、前端编写

image.png

  1. <template>
  2. <div class="table">
  3. <div class="container">
  4. <div class="handle-box">
  5. <el-button type="primary" size="mini" @click="delAll">批量删除</el-button>
  6. <el-input v-model="select_word" size="mini" placeholder="筛选相关用户" class="handle-input"></el-input>
  7. <el-button type="primary" size="mini" @click="centerDialogVisible = true">添加新用户</el-button>
  8. </div>
  9. </div>
  10. <el-table size="mini" ref="multipleTable" border style="width:100%" height="680px" :data="data" @selection-change="handleSelectionChange">
  11. <el-table-column type="selection" width="40"></el-table-column>
  12. <el-table-column label="用户图片" width="110" align="center">
  13. <template slot-scope="scope">
  14. <div class="consumer-img">
  15. <img :src="getUrl(scope.row.avator)" style="width:100%"/>
  16. </div>
  17. <el-upload :action="uploadUrl(scope.row.id)" :before-upload="beforeAvatorUpload"
  18. :on-success="handleAvatorSuccess">
  19. <el-button size="mini">更新图片</el-button>
  20. </el-upload>
  21. </template>
  22. </el-table-column>
  23. <el-table-column prop="username" label="用户名" width="120" align="center"></el-table-column>
  24. <el-table-column label="性别" width="50" align="center">
  25. <template slot-scope="scope">
  26. {{changeSex(scope.row.sex)}}
  27. </template>
  28. </el-table-column>
  29. <el-table-column prop="phoneNum" label="手机号" width="120" align="center"></el-table-column>
  30. <el-table-column prop="email" label="电子邮箱" width="240" align="center"></el-table-column>
  31. <el-table-column label="生日" width="120" align="center">
  32. <template slot-scope="scope">
  33. {{attachBirth(scope.row.birth)}}
  34. </template>
  35. </el-table-column>
  36. <el-table-column prop="introduction" label="签名" align="center"></el-table-column>
  37. <el-table-column prop="location" label="地区" width="100" align="center"></el-table-column>
  38. <el-table-column label="操作" width="150" align="center">
  39. <template slot-scope="scope">
  40. <el-button size="mini" @click="handleEdit(scope.row)">编辑</el-button>
  41. <el-button size="mini" type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
  42. </template>
  43. </el-table-column>
  44. </el-table>
  45. <div class="pagination">
  46. <el-pagination
  47. background
  48. layout = "total,prev,pager,next"
  49. :current-page="currentPage"
  50. :page-size="pageSize"
  51. :total="tableData.length"
  52. @current-change="handleCurrentChange"
  53. >
  54. </el-pagination>
  55. </div>
  56. <el-dialog title="添加新用户" :visible.sync="centerDialogVisible" width="400px" center>
  57. <el-form :model="registerForm" ref="registerForm" label-width="80px" :rules="rules">
  58. <el-form-item prop="username" label="用户名" size="mini">
  59. <el-input v-model="registerForm.username" placeholder="用户名"></el-input>
  60. </el-form-item>
  61. <el-form-item prop="password" label="密码" size="mini">
  62. <el-input type="password" v-model="registerForm.password" placeholder="密码"></el-input>
  63. </el-form-item>
  64. <el-form-item label="性别" size="mini">
  65. <input type="radio" name="sex" value="0" v-model="registerForm.sex">&nbsp;女&nbsp;&nbsp;
  66. <input type="radio" name="sex" value="1" v-model="registerForm.sex">&nbsp;男
  67. </el-form-item>
  68. <el-form-item prop="phoneNum" label="手机号" size="mini">
  69. <el-input v-model="registerForm.phoneNum" placeholder="手机号"></el-input>
  70. </el-form-item>
  71. <el-form-item prop="email" label="电子邮箱" size="mini">
  72. <el-input v-model="registerForm.email" placeholder="电子邮箱"></el-input>
  73. </el-form-item>
  74. <el-form-item prop="birth" label="生日" size="mini">
  75. <el-date-picker type="date" placeholder="选择日期" v-model="registerForm.birth" style="width:100%"></el-date-picker>
  76. </el-form-item>
  77. <el-form-item prop="introduction" label="签名" size="mini">
  78. <el-input v-model="registerForm.introduction" placeholder="签名"></el-input>
  79. </el-form-item>
  80. <el-form-item prop="location" label="地区" size="mini">
  81. <el-input v-model="registerForm.location" placeholder="地区"></el-input>
  82. </el-form-item>
  83. </el-form>
  84. <span slot="footer">
  85. <el-button size="mini" @click="centerDialogVisible = false">取消</el-button>
  86. <el-button size="mini" @click="addConsumer">确定</el-button>
  87. </span>
  88. </el-dialog>
  89. <el-dialog title="修改用户" :visible.sync="editVisible" width="400px" center>
  90. <el-form :model="form" ref="form" label-width="80px" :rules="rules">
  91. <el-form-item prop="username" label="用户名" size="mini">
  92. <el-input v-model="form.username" placeholder="用户名"></el-input>
  93. </el-form-item>
  94. <el-form-item prop="password" label="密码" size="mini">
  95. <el-input type="password" v-model="form.password" placeholder="密码"></el-input>
  96. </el-form-item>
  97. <el-form-item label="性别" size="mini">
  98. <input type="radio" name="sex" value="0" v-model="form.sex">&nbsp;女&nbsp;&nbsp;
  99. <input type="radio" name="sex" value="1" v-model="form.sex">&nbsp;男
  100. </el-form-item>
  101. <el-form-item prop="phoneNum" label="手机号" size="mini">
  102. <el-input v-model="form.phoneNum" placeholder="手机号"></el-input>
  103. </el-form-item>
  104. <el-form-item prop="email" label="电子邮箱" size="mini">
  105. <el-input v-model="form.email" placeholder="电子邮箱"></el-input>
  106. </el-form-item>
  107. <el-form-item prop="birth" label="生日" size="mini">
  108. <el-date-picker type="date" placeholder="选择日期" v-model="form.birth" style="width:100%"></el-date-picker>
  109. </el-form-item>
  110. <el-form-item prop="introduction" label="签名" size="mini">
  111. <el-input v-model="form.introduction" placeholder="签名"></el-input>
  112. </el-form-item>
  113. <el-form-item prop="location" label="地区" size="mini">
  114. <el-input v-model="form.location" placeholder="地区"></el-input>
  115. </el-form-item>
  116. </el-form>
  117. <span slot="footer">
  118. <el-button size="mini" @click="editVisible = false">取消</el-button>
  119. <el-button size="mini" @click="editSave">确定</el-button>
  120. </span>
  121. </el-dialog>
  122. <el-dialog title="删除用户" :visible.sync="delVisible" width="300px" center>
  123. <div align="center">删除不可恢复,是否确定删除?</div>
  124. <span slot="footer">
  125. <el-button size="mini" @click="delVisible = false">取消</el-button>
  126. <el-button size="mini" @click="deleteRow">确定</el-button>
  127. </span>
  128. </el-dialog>
  129. </div>
  130. </template>
  131. <script>
  132. import {getAllConsumer,setConsumer,updateConsumer,delConsumer} from '../api/consumer/index';
  133. import { mixin } from '../mixins/index';
  134. export default {
  135. mixins: [mixin],
  136. data(){
  137. return{
  138. centerDialogVisible: false, //添加弹窗是否显示
  139. editVisible: false, //编辑弹窗是否显示
  140. delVisible: false, //删除弹窗是否显示
  141. registerForm:{ //添加框
  142. username: '',
  143. password: '',
  144. sex: '1',
  145. phoneNum: '',
  146. email: '',
  147. birth: '',
  148. introduction: '',
  149. location: ''
  150. },
  151. form:{ //编辑框
  152. id: '',
  153. username: '',
  154. password: '',
  155. sex: '',
  156. phoneNum: '',
  157. email: '',
  158. birth: '',
  159. introduction: '',
  160. location: ''
  161. },
  162. tableData: [],
  163. tempData: [],
  164. select_word: '',
  165. pageSize: 5, //分页每页大小
  166. currentPage: 1, //当前页
  167. idx: -1, //当前选择项
  168. multipleSelection: [], //哪些项已经打勾
  169. rules: {
  170. username: [
  171. {required: true,message: '请输入用户名',trigger: 'blur'}
  172. ],
  173. password: [
  174. {required: true,message: '请输入密码',trigger: 'blur'}
  175. ],
  176. phoneNum: [
  177. {required: true,message: '请输入手机号',trigger: 'blur'}
  178. ],
  179. email: [
  180. {required: true,message: '请输入电子邮箱',trigger: 'blur'},
  181. {type: 'email',message:'请输入正确的电子邮箱地址',trigger:['blur','change']}
  182. ],
  183. introduction: [
  184. {required: true,message: '请输入签名',trigger: 'blur'}
  185. ],
  186. location: [
  187. {required: true,message: '请输入地区',trigger: 'blur'}
  188. ]
  189. }
  190. }
  191. },
  192. computed:{
  193. //计算当前搜索结果表里的数据
  194. data(){
  195. return this.tableData.slice((this.currentPage - 1) * this.pageSize,this.currentPage * this.pageSize)
  196. }
  197. },
  198. watch:{
  199. //搜索框里面的内容发生变化的时候,搜索结果table列表的内容跟着它的内容发生变化
  200. select_word: function(){
  201. if(this.select_word == ''){
  202. this.tableData = this.tempData;
  203. }else{
  204. this.tableData = [];
  205. for(let item of this.tempData){
  206. if(item.username.includes(this.select_word)){
  207. this.tableData.push(item);
  208. }
  209. }
  210. }
  211. }
  212. },
  213. created(){
  214. this.getData();
  215. },
  216. methods:{
  217. //获取当前页
  218. handleCurrentChange(val){
  219. this.currentPage = val;
  220. },
  221. //查询所有用户
  222. getData(){
  223. this.tempData = [];
  224. this.tableData = [];
  225. getAllConsumer().then(res => {
  226. this.tempData = res.data.list;
  227. this.tableData = res.data.list;
  228. this.currentPage = 1;
  229. })
  230. },
  231. //添加用户
  232. addConsumer(){
  233. this.$refs['registerForm'].validate(valid =>{
  234. if(valid){
  235. let d = this.registerForm.birth;
  236. let datetime = d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
  237. let params = new URLSearchParams();
  238. params.append('username',this.registerForm.username);
  239. params.append('password',this.registerForm.password);
  240. params.append('sex',this.registerForm.sex);
  241. params.append('phoneNum',this.registerForm.phoneNum);
  242. params.append('email',this.registerForm.email);
  243. params.append('birth',datetime);
  244. params.append('introduction',this.registerForm.introduction);
  245. params.append('location',this.registerForm.location);
  246. params.append('avator','/img/avatorImages/user.jpg');
  247. setConsumer(params)
  248. .then(res => {
  249. if(res.code == 20000){
  250. this.getData();
  251. this.notify("添加成功","success");
  252. }else{
  253. this.notify("添加失败","error");
  254. }
  255. })
  256. .catch(err => {
  257. console.log(err);
  258. });
  259. this.centerDialogVisible = false;
  260. }
  261. })
  262. },
  263. //弹出编辑页面
  264. handleEdit(row){
  265. this.editVisible = true;
  266. this.form = {
  267. id: row.id,
  268. username: row.username,
  269. password: row.password,
  270. sex: row.sex,
  271. phoneNum: row.phoneNum,
  272. email: row.email,
  273. birth: row.birth,
  274. introduction: row.introduction,
  275. location: row.location
  276. }
  277. },
  278. //保存编辑页面修改的数据
  279. editSave(){
  280. this.$refs['form'].validate(valid =>{
  281. if(valid){
  282. let d = new Date(this.form.birth);
  283. let datetime = d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
  284. let params = new URLSearchParams();
  285. params.append('id',this.form.id);
  286. params.append('username',this.form.username);
  287. params.append('password',this.form.password);
  288. params.append('sex',this.form.sex);
  289. params.append('phoneNum',this.form.phoneNum);
  290. params.append('email',this.form.email);
  291. params.append('birth',datetime);
  292. params.append('introduction',this.form.introduction);
  293. params.append('location',this.form.location);
  294. updateConsumer(params)
  295. .then(res => {
  296. if(res.code == 20000){
  297. this.getData();
  298. this.notify("修改成功","success");
  299. }else{
  300. this.notify("修改失败","error");
  301. }
  302. })
  303. .catch(err => {
  304. console.log(err);
  305. });
  306. this.editVisible = false;
  307. }
  308. })
  309. },
  310. //更新图片
  311. uploadUrl(id){
  312. return `${this.$store.state.HOST}/musicserver/consumer/updateConsumerPic?id=${id}`
  313. },
  314. //删除一名用户
  315. deleteRow(){
  316. delConsumer(this.idx)
  317. .then(res => {
  318. if(res.code == 20000){
  319. this.getData();
  320. this.notify("删除成功","success");
  321. }else{
  322. this.notify("删除失败","error");
  323. }
  324. })
  325. .catch(err => {
  326. console.log(err);
  327. });
  328. this.delVisible = false;
  329. }
  330. }
  331. }
  332. </script>
  333. <style scoped>
  334. .handle-box{
  335. margin-bottom: 20px;
  336. }
  337. .consumer-img{
  338. width: 100%;
  339. height: 80px;
  340. border-radius: 5px;
  341. margin-bottom: 5px;
  342. overflow: hidden;
  343. }
  344. .handle-input{
  345. width: 300px;
  346. display: inline-block;
  347. }
  348. .pagination{
  349. display: flex;
  350. justify-content: center;
  351. }
  352. </style>

编写请求后端接口的方法
image.png
image.png

import {get,post} from '../http'
//============用户相关================
//查询用户
export const getAllConsumer =() => get(`musicserver/consumer/allConsumer`);
//添加用户
export const setConsumer = (params) => post(`musicserver/consumer/addConsumer`,params);
//编辑用户
export const updateConsumer = (params) => post(`musicserver/consumer/updateConsumer`,params);
//删除用户
export const delConsumer = (id) => get(`musicserver/consumer/deleteConsumer?id=${id}`);

引入请求后端接口方法
image.png