• 【Vue】数据表格增删改查与表单验证


    目录

    一、CRUD实现

    1.1 后台CRUD编写

    1.2 配置访问路径

    1.3 前端编写(及窗口)

    1.4 增删改查实现

    1.4.1 新增示例

    1.4.2 修改示例

    1.4.3 删除示例

    二、表单验证

    2.1 设置表单验证属性

    2.2 自定义验证规则

    2.3 使用规则

    2.4 效果演示


    一、CRUD实现

    1.1 后台CRUD编写

    1. package com.ycxw.ssm.controller;
    2. @Controller
    3. @RequestMapping("/book")
    4. public class BookController {
    5. @Autowired
    6. private IBookService bookService;
    7. @RequestMapping("/addBook")
    8. @ResponseBody
    9. public JsonResponseBody addBook(Book book){
    10. try {
    11. bookService.insert(book);
    12. return new JsonResponseBody<>("新增书本成功",true,0,null);
    13. } catch (Exception e) {
    14. e.printStackTrace();
    15. return new JsonResponseBody<>("新增书本失败",false,0,null);
    16. }
    17. }
    18. @RequestMapping("/editBook")
    19. @ResponseBody
    20. public JsonResponseBody editBook(Book book){
    21. try {
    22. bookService.updateByPrimaryKey(book);
    23. return new JsonResponseBody<>("编辑书本成功",true,0,null);
    24. } catch (Exception e) {
    25. e.printStackTrace();
    26. return new JsonResponseBody<>("编辑书本失败",false,0,null);
    27. }
    28. }
    29. @RequestMapping("/delBook")
    30. @ResponseBody
    31. public JsonResponseBody delBook(Book book){
    32. try {
    33. bookService.deleteByPrimaryKey(book.getId());
    34. return new JsonResponseBody<>("删除书本成功",true,0,null);
    35. } catch (Exception e) {
    36. e.printStackTrace();
    37. return new JsonResponseBody<>("删除书本失败",false,0,null);
    38. }
    39. }
    40. @RequestMapping("/queryBookPager")
    41. @ResponseBody
    42. public JsonResponseBody> queryBookPager(Book book, HttpServletRequest req){
    43. try {
    44. PageBean pageBean=new PageBean();
    45. pageBean.setRequest(req);
    46. List books = bookService.queryBookPager(book, pageBean);
    47. return new JsonResponseBody<>("OK",true,pageBean.getTotal(),books);
    48. } catch (Exception e) {
    49. e.printStackTrace();
    50. return new JsonResponseBody<>("分页查询书本失败",false,0,null);
    51. }
    52. }
    53. }

    1.2 配置访问路径

    src/api/action.js :

    1. //获取书本信息
    2. 'BOOKMSG_BOOKINFO_REQ': '/book/queryBookPager',
    3. //新增书本
    4. 'BOOK_ADD': '/book/addBook',
    5. //修改书本
    6. 'BOOK_EDIT': '/book/editBook',
    7. //删除书本
    8. 'BOOK_DEL': '/book/delBook',

    1.3 前端编写(及窗口)

    1. <template>
    2. <div class="Book" style="padding: 30px;">
    3. <el-form :inline="true" class="demo-form-inline">
    4. <el-form-item label="书籍名称 : ">
    5. <el-input v-model="bookname" placeholder="书籍名称">el-input>
    6. el-form-item>
    7. <el-form-item>
    8. <el-button type="warning" @click="onSubmit()">查询el-button>
    9. <el-button type="warning" icon="el-icon-plus" @click="addBook()">新增el-button>
    10. el-form-item>
    11. el-form>
    12. <el-table :data="tableData" style="width: 100%">
    13. <el-table-column prop="id" label="书籍ID">el-table-column>
    14. <el-table-column prop="bookname" label="书籍名称">el-table-column>
    15. <el-table-column prop="price" label="书籍价格">el-table-column>
    16. <el-table-column prop="booktype" label="书籍类型">el-table-column>
    17. <el-table-column label="操作">
    18. <template slot-scope="scope">
    19. <el-button size="mini" @click="handleEdit(scope.row)">编辑el-button>
    20. <el-button size="mini" type="danger" @click="handleDelete(scope.row)">删除el-button>
    21. template>
    22. el-table-column>
    23. el-table>
    24. <div class="block" style="padding: 20px;">
    25. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"
    26. background :page-sizes="[10, 20, 30, 40]" :page-size="rows" layout="total, sizes, prev, pager, next, jumper"
    27. :total="total">
    28. el-pagination>
    29. div>
    30. <el-dialog :title="dialogName" :visible.sync="dialogFormVisible" @close="closeBookForm" width="500px">
    31. <el-form :model="bookForm" :rules="rules" ref="bookForm" :label-position="center">
    32. <el-form-item v-show="optiontype == 'update'" label="编号" :label-width="formLabelWidth">
    33. <el-input v-model="bookForm.id" autocomplete="off" :style="{width: formEleWidth}">el-input>
    34. el-form-item>
    35. <el-form-item label="书名" :label-width="formLabelWidth" prop="bookname">
    36. <el-input v-model="bookForm.bookname" autocomplete="off" :style="{width: formEleWidth}">el-input>
    37. el-form-item>
    38. <el-form-item label="价格" :label-width="formLabelWidth" prop="price">
    39. <el-input v-model="bookForm.price" autocomplete="off" :style="{width: formEleWidth}">el-input>
    40. el-form-item>
    41. <el-form-item label="类型" :label-width="formLabelWidth" prop="booktype">
    42. <el-select v-model="bookForm.booktype" placeholder="选择类型" :style="{width:formEleWidth}">
    43. <el-option label="名著" value="mz">el-option>
    44. <el-option label="小说" value="xs">el-option>
    45. el-select>
    46. el-form-item>
    47. el-form>
    48. <div slot="footer" class="dialog-footer">
    49. <el-button @click="dialogFormVisible = false">取 消el-button>
    50. <el-button type="primary" @click="saveBook()">确 定el-button>
    51. div>
    52. el-dialog>
    53. div>
    54. template>

    注1:隐藏显示设置,通过Vue实例对象中的dialogFormVisible="true|false"来控制dialog显示隐藏
           :visible.sync="dialogFormVisible"
        
    注2:通过close或closed事件,在关闭dialog弹出框时清空form表单数据和验证信息;
           @close="dialogClose" 

    1.4 增删改查实现

    1.4.1 新增示例

    1.4.2 修改示例

    1.4.3 删除示例

    二、表单验证

    2.1 设置表单验证属性

            Form 组件提供了表单验证的功能,只需要通过 rules 属性传入约定的验证规则,并将 Form-Item 的 prop 属性设置为需校验的字段名即可。校验规则参见 async-validator

    2.2 自定义验证规则

            自定义验证规则,在data对象,return之前定义。定义完成后可在rules中使用,如下代码所示。

    注意:

    最后return时调用的callback,如果不调用则验证。

    1. //定义验证规则
    2. rules: {
    3. bookname: [{
    4. //是否必填
    5. required: true,
    6. //提示信息
    7. message: '请输入书籍名称',
    8. //事件
    9. trigger: 'blur'
    10. },
    11. {
    12. min: 3,
    13. max: 5,
    14. message: '长度在 3 到 5 个字符',
    15. trigger: 'blur'
    16. }
    17. ],
    18. price: [{
    19. required: true,
    20. //自定义规则
    21. validator: checkPrice,
    22. trigger: 'blur'
    23. }],
    24. booktype: [{
    25. required: true,
    26. message: '请选择类型',
    27. trigger: 'change'
    28. }]
    29. }

    2.3 使用规则

    注意:

    表单重置时必须先清空表单验证信息,再清空表单数据信息,通过form表单的ref属性来清空表单验证信息

     this.$refs['bookForm'].resetFields();

    语法:

    1. this.$refs['需要验证的表单名称'].validate((valid) => {
    2. if (valid) {
    3. //验证通过
    4. alert('submit!');
    5. } else {
    6. //验证失败
    7. console.log('error submit!!');
    8. return false;
    9. }
    10. });
    1. /* 新增书本 */
    2. saveBook() {
    3. this.$refs['bookForm'].validate((valid) => {
    4. if (valid) {
    5. //默认新增
    6. var url = this.axios.urls.BOOK_ADD;
    7. if (this.optiontype == 'update') {
    8. url = this.axios.urls.BOOK_EDIT;
    9. }
    10. console.log(url)
    11. this.axios.post(url, this.bookForm).then(d => {
    12. //关闭窗口
    13. this.closeBookForm();
    14. this.dialogFormVisible = false;
    15. this.query({});
    16. }).catch();
    17. } else {
    18. console.log('error submit!!');
    19. return false;
    20. }
    21. });
    22. },

    2.4 效果演示

  • 相关阅读:
    Docker使用过程中经常遇见的问题
    解决ul元素不能跟div同一行显示的办法
    抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。抖音矩阵系统。
    一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator
    HLS攻城拔寨之—数组优化
    路径规划算法 - 求解最短路径 - Dijkstra(迪杰斯特拉)算法
    基于PChmi.dll的上位机与PLC1200通讯
    OpenCV笔记
    服务访问质量(QoS)——流量整形与拥塞管理
    [SQL] IF
  • 原文地址:https://blog.csdn.net/Justw320/article/details/133354654