• 添加、编辑和删除 前后端联调


    一、添加  UI引入

    1. <template>
    2. <div>
    3. <el-card class="box-card" style="height: 620px">
    4. <el-input v-model="query.name" style="width:200px" placeholder="请输入用户姓名" clearable></el-input>
    5. &nbsp
    6. &nbsp
    7. &nbsp
    8. <el-button type="primary" @click="getUserList">查询</el-button>
    9. &nbsp
    10. <el-button type="primary" @click="handleCreate">新增</el-button>
    11. <el-table
    12. :data="tableData"
    13. border
    14. style="width: 100%">
    15. <el-table-column
    16. prop="id"
    17. label="ID"
    18. width="180">
    19. </el-table-column>
    20. <el-table-column
    21. prop="name"
    22. label="姓名"
    23. width="180">
    24. </el-table-column>
    25. <el-table-column
    26. prop="sex"
    27. label="性别">
    28. </el-table-column>
    29. <el-table-column
    30. prop="phone"
    31. label="手机号">
    32. </el-table-column>
    33. <el-table-column
    34. prop="avatar"
    35. label="头像">
    36. </el-table-column>
    37. <el-table-column label="操作">
    38. <template slot-scope="scope">
    39. <el-button
    40. size="mini"
    41. @click="handleEdit(scope.$index, scope.row)">编辑</el-button>
    42. <el-button
    43. size="mini"
    44. type="danger"
    45. @click="handleDelete(scope.$index, scope.row)">删除</el-button>
    46. </template>
    47. </el-table-column>
    48. </el-table>
    49. <el-pagination
    50. @size-change="handleSizeChange"
    51. @current-change="handleCurrentChange"
    52. :current-page="this.query.page"
    53. :page-sizes="[5, 10, 20, 30]"
    54. :page-size="this.query.size"
    55. layout="total, sizes, prev, pager, next, jumper"
    56. :total="this.total">
    57. </el-pagination>
    58. </el-card>
    59. <el-dialog title="新增用户" :visible.sync="dialogFormVisible" width="40%" center>
    60. <el-form :model="form" :rules="rules" ref="foreName">
    61. <el-form-item label="用户姓名" :label-width="formLabelWidth" prop="name">
    62. <el-input style="width: 90%" v-model="form.name" autocomplete="off"></el-input>
    63. </el-form-item>
    64. <el-form-item label="手机号" :label-width="formLabelWidth" prop="phone">
    65. <el-input style="width: 90%" v-model="form.phone" autocomplete="off"></el-input>
    66. </el-form-item>
    67. <el-form-item label="性别" :label-width="formLabelWidth" prop="sex">
    68. <el-select style="width: 90%" v-model="form.sex" placeholder="请选择性别">
    69. <el-option label="男" value="男"></el-option>
    70. <el-option label="女" value="女"></el-option>
    71. </el-select>
    72. </el-form-item>
    73. <el-form-item label="头像" :label-width="formLabelWidth" prop="avatar">
    74. <el-input style="width: 90%" v-model="form.avatar" autocomplete="off"></el-input>
    75. </el-form-item>
    76. </el-form>
    77. <div slot="footer" class="dialog-footer">
    78. <el-button @click="dialogFormVisible = false">取 消</el-button>
    79. <el-button type="primary" @click="submitForm">确 定</el-button>
    80. </div>
    81. </el-dialog>
    82. </div>
    83. </template>
    84. <script>
    85. export default {
    86. name: 'HomeView',
    87. data() {
    88. return {
    89. query: {
    90. page: 1,
    91. size: 5,
    92. name: '',
    93. },
    94. total:0,
    95. currentPage4: 4,
    96. dialogFormVisible: false,
    97. formLabelWidth:'80px',
    98. form:{
    99. name:'',
    100. sex:'',
    101. phone:'',
    102. avatar:''
    103. },
    104. rules: {
    105. name: [
    106. { required: true, message: '请输入用户姓名', trigger: 'blur' },
    107. { min: 3, max: 5, message: '长度在 2 到 10 个字符', trigger: 'blur' }
    108. ],
    109. sex: [
    110. { required: true, message: '请选择性别', trigger: 'change' }
    111. ],
    112. phone: [
    113. //手机号格式校验规则
    114. { required: true, message: '请填写手机号', trigger: 'blur' },
    115. { pattern:/^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/
    116. , message: '手机号格式不正确', trigger: 'blur' }
    117. ],
    118. avatar: [
    119. { required: true, message: '请上传头像', trigger: 'change' }
    120. ]
    121. },
    122. tableData: [],
    123. }
    124. },
    125. methods: {
    126. submitForm(){
    127. this.$refs.foreName.validate((valid)=>{
    128. if(valid){
    129. //校验成功,提交给后端,并关闭输入表单
    130. console.log('校验成功',this.form);
    131. this.dialogFormVisible = false;
    132. }
    133. })
    134. },
    135. handleCreate(){
    136. this.dialogFormVisible = true;
    137. },
    138. handleEdit(index, row) {
    139. console.log(index, row);
    140. },
    141. handleDelete(index, row) {
    142. console.log(index, row);
    143. },
    144. handleSizeChange(val) {
    145. console.log(`每页 ${val} 条`);
    146. this.query.size = val;
    147. this.getUserList()
    148. },
    149. handleCurrentChange(val) {
    150. console.log(`当前页: ${val}`);
    151. this.query.page = val;
    152. this.getUserList()
    153. },
    154. getUserList(){
    155. this.axios.get("http://localhost:3333/user/getList",{
    156. params:{
    157. name:this.query.name, //参数让其等于输入框输入的name
    158. page:this.query.page,
    159. size:this.query.size
    160. }
    161. }).then((resp)=>{
    162. console.log(resp,'resp');
    163. this.tableData = resp.data.content.list;
    164. this.total = resp.data.content.total;
    165. });
    166. }
    167. },
    168. created() {//Vue生命周期函数,此处的目的是页面打开,就调用函数,将数据库中的数据显示出来
    169. this.getUserList();
    170. }
    171. }
    172. </script>

    二、编辑 UI引入

    1. <template>
    2. <div>
    3. <el-card class="box-card" style="height: 620px">
    4. <el-input v-model="query.name" style="width:200px" placeholder="请输入用户姓名" clearable></el-input>
    5. &nbsp
    6. &nbsp
    7. &nbsp
    8. <el-button type="primary" @click="getUserList">查询</el-button>
    9. &nbsp
    10. <el-button type="primary" @click="handleCreate">新增</el-button>
    11. <el-table
    12. :data="tableData"
    13. border
    14. style="width: 100%">
    15. <el-table-column
    16. prop="id"
    17. label="ID"
    18. width="180">
    19. </el-table-column>
    20. <el-table-column
    21. prop="name"
    22. label="姓名"
    23. width="180">
    24. </el-table-column>
    25. <el-table-column
    26. prop="sex"
    27. label="性别">
    28. </el-table-column>
    29. <el-table-column
    30. prop="phone"
    31. label="手机号">
    32. </el-table-column>
    33. <el-table-column
    34. prop="avatar"
    35. label="头像">
    36. </el-table-column>
    37. <el-table-column label="操作">
    38. <template slot-scope="scope">
    39. <el-button
    40. size="mini"
    41. @click="handleEdit(scope.row)">编辑</el-button>
    42. <el-button
    43. size="mini"
    44. type="danger"
    45. @click="handleDelete(scope.$index, scope.row)">删除</el-button>
    46. </template>
    47. </el-table-column>
    48. </el-table>
    49. <el-pagination
    50. @size-change="handleSizeChange"
    51. @current-change="handleCurrentChange"
    52. :current-page="this.query.page"
    53. :page-sizes="[5, 10, 20, 30]"
    54. :page-size="this.query.size"
    55. layout="total, sizes, prev, pager, next, jumper"
    56. :total="this.total">
    57. </el-pagination>
    58. </el-card>
    59. <el-dialog title="新增用户" :visible.sync="dialogFormVisible" width="40%" center>
    60. <el-form :model="form" :rules="rules" ref="foreName">
    61. <el-form-item label="用户姓名" :label-width="formLabelWidth" prop="name">
    62. <el-input style="width: 90%" v-model="form.name" autocomplete="off"></el-input>
    63. </el-form-item>
    64. <el-form-item label="手机号" :label-width="formLabelWidth" prop="phone">
    65. <el-input style="width: 90%" v-model="form.phone" autocomplete="off"></el-input>
    66. </el-form-item>
    67. <el-form-item label="性别" :label-width="formLabelWidth" prop="sex">
    68. <el-select style="width: 90%" v-model="form.sex" placeholder="请选择性别">
    69. <el-option label="男" value="男"></el-option>
    70. <el-option label="女" value="女"></el-option>
    71. </el-select>
    72. </el-form-item>
    73. <el-form-item label="头像" :label-width="formLabelWidth" prop="avatar">
    74. <el-input style="width: 90%" v-model="form.avatar" autocomplete="off"></el-input>
    75. </el-form-item>
    76. </el-form>
    77. <div slot="footer" class="dialog-footer">
    78. <el-button @click="dialogFormVisible = false">取 消</el-button>
    79. <el-button type="primary" @click="submitForm">确 定</el-button>
    80. </div>
    81. </el-dialog>
    82. </div>
    83. </template>
    84. <script>
    85. export default {
    86. name: 'HomeView',
    87. data() {
    88. return {
    89. query: {
    90. page: 1,
    91. size: 5,
    92. name: '',
    93. },
    94. total:0,
    95. currentPage4: 4,
    96. dialogFormVisible: false,
    97. formLabelWidth:'80px',
    98. form:{
    99. name:'',
    100. sex:'',
    101. phone:'',
    102. avatar:''
    103. },
    104. rules: {
    105. name: [
    106. { required: true, message: '请输入用户姓名', trigger: 'blur' },
    107. { min: 3, max: 5, message: '长度在 2 到 10 个字符', trigger: 'blur' }
    108. ],
    109. sex: [
    110. { required: true, message: '请选择性别', trigger: 'change' }
    111. ],
    112. phone: [
    113. //手机号格式校验规则
    114. { required: true, message: '请填写手机号', trigger: 'blur' },
    115. { pattern:/^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/
    116. , message: '手机号格式不正确', trigger: 'blur' }
    117. ],
    118. avatar: [
    119. { required: true, message: '请上传头像', trigger: 'change' }
    120. ]
    121. },
    122. tableData: [],
    123. }
    124. },
    125. methods: {
    126. submitForm(){
    127. this.$refs.foreName.validate((valid)=>{
    128. if(valid){
    129. //校验成功,提交给后端,并关闭输入表单,新增和修改都是重新用新数据去覆盖旧数据,都是post请求
    130. console.log('校验成功',this.form);
    131. this.dialogFormVisible = false;
    132. }
    133. })
    134. },
    135. handleCreate(){
    136. this.form = {};
    137. this.dialogFormVisible = true;
    138. },
    139. handleEdit(row) {
    140. console.log(row);
    141. //点击编辑我们发现,row里面是数据,那我们就可以直接把row值赋给form
    142. //这样就可以达到点击编辑,就会显示出数据的效果
    143. this.form = row;
    144. this.dialogFormVisible = true
    145. },
    146. handleDelete(index, row) {
    147. console.log(index, row);
    148. },
    149. handleSizeChange(val) {
    150. console.log(`每页 ${val} 条`);
    151. this.query.size = val;
    152. this.getUserList()
    153. },
    154. handleCurrentChange(val) {
    155. console.log(`当前页: ${val}`);
    156. this.query.page = val;
    157. this.getUserList()
    158. },
    159. getUserList(){
    160. this.axios.get("http://localhost:3333/user/getList",{
    161. params:{
    162. name:this.query.name, //参数让其等于输入框输入的name
    163. page:this.query.page,
    164. size:this.query.size
    165. }
    166. }).then((resp)=>{
    167. console.log(resp,'resp');
    168. this.tableData = resp.data.content.list;
    169. this.total = resp.data.content.total;
    170. });
    171. }
    172. },
    173. created() {//Vue生命周期函数,此处的目的是页面打开,就调用函数,将数据库中的数据显示出来
    174. this.getUserList();
    175. }
    176. }
    177. </script>

    三、submitForm方法

    1. submitForm(){
    2. this.$refs.foreName.validate((valid)=>{
    3. if(valid){
    4. console.log('校验成功',this.form);
    5. //校验成功,提交给后端,并关闭输入表单,新增和修改都是重新用新数据去覆盖旧数据,都是post请求
    6. this.axios.post('http://localhost:3333/user/saveUser',this.form).then((resp)=>{
    7. let data = resp.data;//接受后端返回的数据 commonDto里的
    8. console.log(resp,'resp')
    9. if(data.success){
    10. //如果后端返回数据成功,关闭对话框,表单数据清空
    11. this.dialogFormVisible = false;
    12. this.dialogFormVisible1 = false;
    13. this.form = {};
    14. //重置表单校验状态
    15. this.$refs.foreName.resetFields();
    16. //调用初始化查询方法,因为新增或者修改了,后端会同步数据库,这时候需要重新调用getUserList方法
    17. //这样前端就直接显示出我们新增或者修改的用户数据了
    18. this.getUserList();
    19. //调用UI的message消息提示组件方法,提示操作成功
    20. this.$message({
    21. message: '恭喜你操作成功',
    22. type: 'success'
    23. });
    24. }
    25. })
    26. console.log('校验成功',this.form);
    27. this.dialogFormVisible = false;
    28. }
    29. })
    30. }

    四、删除

    1.后端代码

    1. @DeleteMapping("/delete/{id}")
    2. public CommonDto deleteUser(@PathVariable Long id){
    3. CommonDto<User> commonDto = new CommonDto<>();
    4. userService.removeById(id);
    5. commonDto.setMessage("删除成功");
    6. return commonDto;
    7. }

    2.前端

    1. handleDelete(row) {
    2. console.log(row);
    3. let id = row.id;
    4. this.axios.delete('http://localhost:3333/user/delete/'+ id).then((resp)=>{
    5. let data = resp.data;//接受后端返回的数据 commonDto里的
    6. console.log(resp,'resp')
    7. if(data.success){
    8. this.getUserList();
    9. //调用UI的message消息提示组件方法,提示操作成功
    10. this.$message({
    11. message: data.message,
    12. type: 'success'
    13. });
    14. }
    15. })
    16. },

  • 相关阅读:
    使用CCS软件查看PID曲线
    团队管理之高效开发基础认知
    判断 Mac显卡 mps 是否可以正常运行
    AUTOCAD——中心线绘制、CAD默认线宽是多少?可以修改吗?
    [Zer0pts2020]Can you guess it? basename特性 和preg_match 绕过
    days month 間隔
    内部类杂记
    Cesium加载geoserver发布的arcgis切片 4326坐标系
    Deepstream 6.1.1 以及 Python Binding 安装过程记录
    快解析结合友加畅捷通t1飞跃版
  • 原文地址:https://blog.csdn.net/m0_63732435/article/details/133499215