• Node+Vue3+mysql+ant design实现前后端分离——表格的添加、修改和删除


    在上一篇文章中,我们分享了如何运用NodeJS、Vue、MySQL以及其他技术来实现后台管理系统中的表格查询功能。今天,我们将继续探讨另外三个重要的功能实现原则。这些原则在构建后台管理系统时至关重要,同时还有导入和导出这两种功能也必不可少。关于导入和导出功能,我们会在下一次更新中详细介绍。下文中与上一篇文章重复的部分就不再进行详述,不懂的同学可以先看看上篇文章哦。

    一、MySQL建表

    首先,利用Navicat软件,在项目文件夹内创建"user_list"表格,并添置相关字段。此举便于nodejs连接数据库时提供特定需要的信息。如下图所示:

    为了后续便于前端更好的联调数据,这里建议在创建完表后,添加一条相应的数据。

    二、nodejs模拟数据并连接数据库

    初始表格数据及增删改操作,本节和上篇文章一样可用NodeJS进行模拟,无需额外在服务器端的 routes 目录创建新文件夹。为保持一致性,相关代码将与上篇文章所述查询数据置于同一文件内。数据库的连接与之前方法也相同,仅需进行一次配置。

    1. var express = require('express');
    2. var router = express.Router();
    3. //连接数据库
    4. var connection=require('../db/sql.js');
    5. //用户表格接口
    6. router.get('/api/user/getUserList', (req, res) => {
    7. const sqlStr = 'select * from user_list';
    8. connection.query(sqlStr, (error, results) => {
    9. if (error) return res.json({
    10. code: 404,
    11. message: '数据不存在',
    12. affextedRows: 0
    13. })
    14. res.json({
    15. code: 200,
    16. message: results,
    17. affextedRows: results.affextedRows
    18. })
    19. })
    20. })
    21. //条件查找--请查看上篇文章
    22. //添加用户信息
    23. router.post('/api/user/addUserList', (req, res) => {
    24. // console.log(req,'是')
    25. const username = req.body.username;
    26. const userPwd = req.body.userPwd;
    27. const phone = req.body.phone;
    28. const imgUrl=req.body.imgUrl||'https://img0.baidu.com/it/u=1307225259,750358157&fm=253&fmt=auto?w=500&h=500';
    29. const nickName=req.body.nickName;
    30. const sqlStr = "insert into user_list(username,userPwd,phone,imgUrl,nickName) values('" + username + "','" + userPwd + "','" + phone + "','" + imgUrl + "','" + nickName + "')";
    31. connection.query(sqlStr,(err, results) => {
    32. if (err) return res.json({
    33. code: 404,
    34. message: err,
    35. affectedRows: 0
    36. });
    37. res.json({
    38. code: 200,
    39. message: '添加成功',
    40. affectedRows: results.affectedRows
    41. });
    42. })
    43. });
    44. //修改用户信息
    45. router.post('/api/user/updateUserList', (req, res) => {
    46. // console.log(req.body,'是')
    47. const id = req.body.id;
    48. const username = req.body.username;
    49. const userPwd = req.body.userPwd;
    50. const phone = req.body.phone;
    51. const imgUrl=req.body.imgUrl||'https://img0.baidu.com/it/u=1307225259,750358157&fm=253&fmt=auto?w=500&h=500';
    52. const nickName=req.body.nickName;
    53. const sqlStr = "update user_list set username='" + username + "',userPwd='" + userPwd + "',phone='" + phone + "',imgUrl='" + imgUrl + "',nickName='" + nickName + "'where id=" + id
    54. connection.query(sqlStr,(err, results) => {
    55. if (err) return res.json({
    56. code: 404,
    57. message: err,
    58. affectedRows: 0
    59. });
    60. res.json({
    61. code: 200,
    62. message: '修改成功',
    63. affectedRows: results.affectedRows
    64. });
    65. })
    66. });
    67. //删除用户信息
    68. router.get('/api/user/deleteUserList/', (req, res) => {
    69. const id = req.query.id;
    70. // console.log(req.query,'shuju ')
    71. // console.log(name,'name')
    72. const sqlStr = "delete from user_list where id=? ";
    73. connection.query(sqlStr, id,(err, results) => {
    74. if (err){
    75. console.log(err,'错误信息提示:')
    76. return res.json({
    77. code: 404,
    78. message: err,
    79. affextedRows: 0
    80. });
    81. }
    82. res.json({
    83. code: 200,
    84. message: '删除成功',
    85. affextedRows: results.affextedRows
    86. });
    87. })
    88. })
    89. module.exports = router;

    三、前端界面开发

    在上述操作都完成后,接下来就是前端界面的开发以及数据联调了。

    (1)表格的添加和修改前端思想使用了ant design组件中的模态框以及表单,利用其表单的双向绑定来实现添加和修改数据,具体代码如下:

    1. <template>
    2. <div class="user-tab">
    3. <!-- 新增用户 -->
    4. <div class="tab-add-btn" @click="handleAddUser">
    5. <i class="iconfont icon-jiahaotianjia"></i>
    6. <span>新增用户</span>
    7. </div>
    8. <!-- 表格 -->
    9. <div class="tab-body">
    10. <a-table
    11. :columns="columns"
    12. bordered
    13. :data-source="dataSource"
    14. :pagination="pagination"
    15. :loading="tableLoading"
    16. rowKey="id"
    17. :scroll="{ y: 'calc(100vh - 380px - 10px)', x: 200 }"
    18. >
    19. <template #index="{ index }">
    20. {
    21. { index + 1 }}
    22. </template>
    23. <template #picture="{ record }">
    24. <img style="width: 100px; heigth: 100px" :src="record.picture" />
    25. </template>
    26. <template #action="{ record }">
    27. <a href="javascript:void(0)" @click="editGroup(record)">修改</a>
    28. &nbsp;&nbsp;
    29. <a href="javascript:void(0)" @click="removeGroup(record)">删除</a>
    30. </template>
    31. </a-table>
    32. </div>
    33. <!-- 弹窗 -->
    34. <div class="tab-modal">
    35. <a-modal v-model:visible="visible" :footer="null" ok-text="确认"
    36. cancel-text="取消">
    37. <a-tabs>
    38. <a-tab-pane key="1" :tab="submitDialogText === '1' ? '新增用户' : submitDialogText === '2' ? '修改信息' : ''">
    39. <a-form
    40. :label="{ span: 12, offset: 24 }"
    41. layout="horizontal"
    42. :rules="rules"
    43. :model="submitForm"
    44. style="padding: 15px 0 0 60px"
    45. >
    46. <a-row>
    47. <a-col :span="20">
    48. <a-form-item ref="adminName" label="用户账号" name="adminName">
    49. <a-input v-model:value="submitForm.adminName" placeholder="请输入账号" />
    50. </a-form-item>
    51. </a-col>
    52. <a-col :span="20">
    53. <a-form-item ref="adminPwd" label="用户密码" name="adminPwd">
    54. <a-input v-model:value="submitForm.adminPwd" placeholder="请
  • 相关阅读:
    联发科MTK(3G,4G,5G)核心板/芯片简介
    Metalama简介5.配合VisualStudio自定义重构或快速操作功能
    java毕业设计茶叶企业管理系统Mybatis+系统+数据库+调试部署
    本机使用python操作hdfs搭建及常见问题
    《斯坦福数据挖掘教程·第三版》读书笔记(英文版)Chapter 4 Mining Data Streams
    MATLAB系统辨识工具箱-System Identification Toolbox
    C-Pack: Packaged Resources To Advance General Chinese Embedding
    初探富文本之基于虚拟滚动的大型文档性能优化方案
    jupyter使用tensorflow遇到的问题
    Linux系统管理技术手册——第12章 软件安装和管理
  • 原文地址:https://blog.csdn.net/qq_53541336/article/details/138156398