• Vue之ElementUI实现CUD(增删改)及表单验证


    目录

    前言 

    一、CUD(增删改)功能实现

    1. 配置CUD(增删改)功能的接口

     2. 编写新增窗体界面及完成新增功能

    效果

     ​编辑

    3. 编写编辑功能代码

    添加操作栏

    编写功能js代码

    效果展示

    4. 编写删除功能的代码及提示框

    删除功能的方法

     展示效果

    二、表单验证

    功能js编写

    规则

     启用表单

    效果

     ​编辑


    前言 

            上期的博客中我与大家分享了有关Vue和ElementUI实现项目左侧的动态树形菜单栏及将数据从数据库拿到在前端与数据表格进行绑定交互,而且还实现了模糊查询和分页条的功能。今天的这期博客Vue之ElementUI实现CUD(增删改)及表单验证是居于上一期博客的数据表格的基础上实现增删改及表单验证的功能,希望大家能够耐心仔细阅读完,谢谢大家的支持。

    一、CUD(增删改)功能实现

    1. 配置CUD(增删改)功能的接口

            在action.js文件中配置CUD(增删改)功能的请求接口方法,方便后续代码开发调用。

    注意:在准备进行后续开发的时候,记得将src文件下的main.js文件中的process.env.MOCK && require('@/mock')即mockjs注释掉否则影响开发。

     2. 编写新增窗体界面及完成新增功能

    1. <template>
    2. <div class="books" style="padding: 20px;">
    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="primary" @click="onSubmit">搜索el-button>
    9. <el-button type="primary" @click="open">新增el-button>
    10. el-form-item>
    11. el-form>
    12. <el-table :data="tableData" stripe style="width: 100%">
    13. <el-table-column prop="id" label="书籍编号" width="180">
    14. el-table-column>
    15. <el-table-column prop="bookname" label="书籍名称" width="180">
    16. el-table-column>
    17. <el-table-column prop="price" label="书籍价格">
    18. el-table-column>
    19. <el-table-column prop="booktype" label="书籍类型">
    20. el-table-column>
    21. el-table>
    22. <div class="block" style="padding: 20px;">
    23. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"
    24. :page-sizes="[10, 20, 30, 40]" :page-size="rows" layout="total, sizes, prev, pager, next, jumper"
    25. :total="total">
    26. el-pagination>
    27. div>
    28. <el-dialog :title="title" :visible.sync="dialogFormVisible" @close="clear">
    29. <el-form :model="book">
    30. <el-form-item label="书籍编号" :label-width="formLabelWidth">
    31. <el-input v-model="book.id" autocomplete="off">el-input>
    32. el-form-item>
    33. <el-form-item label="书籍名称" :label-width="formLabelWidth">
    34. <el-input v-model="book.bookname" autocomplete="off">el-input>
    35. el-form-item>
    36. <el-form-item label="书籍价格" :label-width="formLabelWidth">
    37. <el-input v-model="book.price" autocomplete="off">el-input>
    38. el-form-item>
    39. <el-form-item label="书籍类别" :label-width="formLabelWidth">
    40. <el-select v-model="book.booktype" placeholder="请选择活动区域">
    41. <el-option v-for="t in types" :label="t.name" :value="t.name" :key="'key_'+t.id">el-option>
    42. el-select>
    43. el-form-item>
    44. el-form>
    45. <div slot="footer" class="dialog-footer">
    46. <el-button @click="dialogFormVisible = false">取 消el-button>
    47. <el-button type="primary" @click="dosub">确 定el-button>
    48. div>
    49. el-dialog>
    50. div>
    51. template>
    52. <script>
    53. export default {
    54. data() {
    55. return {
    56. bookname: '',
    57. tableData: [],
    58. rows: 10,
    59. page: 1,
    60. total: 0,
    61. title: '新增窗体',
    62. dialogFormVisible: false,
    63. formLabelWidth: '100px',
    64. book: {
    65. id: '',
    66. bookname: '',
    67. price: '',
    68. booktype: ''
    69. },
    70. types: []
    71. }
    72. },
    73. methods: {
    74. // 提交
    75. dosub(){
    76. let url = this.axios.urls.Book_ADD;
    77. if(this.title == '编辑窗体'){
    78. url = this.axios.urls.Book_UPD;
    79. }
    80. let params = {
    81. id:this.book.id,
    82. bookname:this.book.bookname,
    83. price:this.book.price,
    84. booktype:this.book.booktype
    85. }
    86. this.axios.post(url, params).then(r => {
    87. console.log(r);
    88. this.clear();//关闭
    89. this.query({});//刷新
    90. }).catch(e => {
    91. })
    92. },
    93. // 初始化窗体
    94. clear() {
    95. this.dialogFormVisible = false;
    96. this.title='新增窗体';
    97. this.book={
    98. id: '',
    99. bookname: '',
    100. price: '',
    101. booktype: ''
    102. }
    103. },
    104. open() {
    105. // 待开窗体
    106. this.dialogFormVisible = true;
    107. },
    108. // 定义一个查询的方法,方便调用减少代码冗余
    109. query(params) {
    110. // 向后台请求数据的访问路径
    111. let url = this.axios.urls.BookList;
    112. this.axios.get(url, {
    113. params: params
    114. }).then(r => {
    115. console.log(r);
    116. this.tableData = r.data.rows;
    117. this.total = r.data.total;
    118. }).catch(e => {
    119. })
    120. },
    121. onSubmit() {
    122. let params = {
    123. bookname: this.bookname,
    124. }
    125. // 调用查询方法
    126. this.query(params);
    127. },
    128. handleSizeChange(r) { //当页大小发生变化
    129. // 输出查看
    130. console.log("当前页大小:" + r);
    131. let params = {
    132. bookname: this.bookname,
    133. rows: r,
    134. page: this.page
    135. }
    136. // 调用查询方法
    137. this.query(params);
    138. },
    139. handleCurrentChange(p) { //当当前页页码大小发生变化
    140. // 输出查看
    141. console.log("当前页码:" + p);
    142. let params = {
    143. bookname: this.bookname,
    144. page: p,
    145. rows: this.rows
    146. }
    147. // 调用查询方法
    148. this.query(params);
    149. }
    150. },
    151. created() {
    152. // 调用查询方法
    153. this.query({});
    154. this.types = [{
    155. id: 1,
    156. name: '爱情'
    157. }, {
    158. id: 2,
    159. name: '玄幻'
    160. }, {
    161. id: 3,
    162. name: '激情'
    163. }]
    164. }
    165. }
    166. script>
    167. <style>
    168. style>

    注意事项:

            记得在提交新增请求数据后,加上 this.clear();//关闭
              this.query({});//刷新
    两行代码。

    效果

     

    3. 编写编辑功能代码

    添加操作栏

    1. <el-table-column label="操作">
    2. <template slot-scope="scope">
    3. <el-button size="mini" @click="open(scope.$index, scope.row)">编辑el-button>
    4. <el-button size="mini" type="danger" @click="handleDelete(scope.$index, scope.row)">删除el-button>
    5. template>
    6. el-table-column>

    编写功能js代码

    效果展示

    4. 编写删除功能的代码及提示框

    删除功能的方法

    1. del(idx, row) {
    2. this.$confirm('此操作将永久删除id为'+row.id+', 是否继续?', '提示', {
    3. confirmButtonText: '确定',
    4. cancelButtonText: '取消',
    5. type: 'warning'
    6. }).then(() => {
    7. let url = this.axios.urls.Book_DEL;
    8. this.axios.post(url, {id:row.id}).then(r => {
    9. console.log(r);
    10. this.$message({
    11. type: 'success',
    12. message: '删除成功!'
    13. });
    14. this.query({}); //刷新
    15. }).catch(e => {
    16. })
    17. }).catch(() => {
    18. this.$message({
    19. type: 'info',
    20. message: '已取消删除'
    21. });
    22. });
    23. },

     

     展示效果

    二、表单验证

    在form表单中要包含:rules="rules" ref="ruleForm"代码。

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

     

    功能js编写

    规则
    1. rules: {
    2. bookname: [{
    3. required: true,
    4. message: '请输入书籍名称',
    5. trigger: 'blur'
    6. },
    7. {
    8. min: 3,
    9. max: 5,
    10. message: '长度在 1 到 9 个字符',
    11. trigger: 'blur'
    12. }
    13. ],
    14. price: [{
    15. required: true,
    16. message: '请输入书籍价格',
    17. trigger: 'blur'
    18. }],
    19. booktype: [{
    20. required: true,
    21. message: '请选择书籍类型',
    22. trigger: 'change'
    23. }]
    24. }

     启用表单
    1. this.$refs[formName].validate((valid) => {
    2. if (valid) {
    3. alert('submit!');
    4. } else {
    5. console.log('error submit!!');
    6. return false;
    7. }
    8. });

    效果

     

     今天的分享到此结束,感谢支持,三连加关注就是对博主最大的支持。

     

  • 相关阅读:
    S/4 HANA 大白话 - 财务会计-4 应付、应收账款
    仓库是时候实施物联网了吗
    深入react源码看setState究竟做了什么?
    为什么数据库不应该使用外键
    电源自动测试系统-DC/DC 电源自动测试系统NSAT-8000,免费看方案视频效果
    golang 多个struct 转换融合为一个json,平级融合或者多级融合
    java计算机毕业设计高校社团管理系统MyBatis+系统+LW文档+源码+调试部署
    xxl-job环境搭建详细
    Rust标准库-实现一个TCP服务、Rust使用套接字
    Javaweb-JSP详解Toretto
  • 原文地址:https://blog.csdn.net/weixin_74352229/article/details/133344786