• 【Element-UI】CUD(增删改)及form 表单验证(附源码)


    目录

    一、导言

    1、引言

    2、作用

    二、CUD

    1、增加修改

    1.1、添加弹窗

    1.2、定义变量

    1.3、定义方法

    1.4、完整代码

    2、删除

    2.1、定义方法

    三、表单验证

    1、添加规则

    2、定义规则

    3、提交事件

    4、前端完整代码


    一、导言

    1、引言

            增删改是计算机编程和数据库管理常用的三个操作,使用增删改操作可以帮助我们管理和维护系统或数据库中的数据,确保数据的准确性、完整性和一致性。它们是编程和数据库管理中非常常用的操作,有助于提高系统的灵活性和可维护性

    它们的作用:

    1. 增加(Add):通过增加操作,可以向系统或数据库中添加新的数据或功能。这对于扩展系统的能力和功能非常重要。例如,在一个学生成绩管理系统中,可以通过增加操作添加新的学生信息。
    2. 删除(Delete):删除操作可以从系统或数据库中移除不需要的数据或功能。这对于清理和维护数据的一致性非常重要。例如,在一个在线商城的数据库中,可以通过删除操作将已下架或过期的商品从数据库中移除。
    3. 修改(Update):修改操作可以对系统或数据库中已有的数据或功能进行更新或更改。这可以帮助保持数据的准确性和完整性。例如,在一个员工信息管理系统中,可以通过修改操作更新员工的工资信息。

    2、作用

            Element UI 是一个基于 Vue.js 的桌面端组件库,它提供了一套丰富的用户界面组件,包括表格、表单、对话框等,用于快速构建现代化的Web应用程序。

     Element UI 中使用增删改操作主要有以下作用:

    1. 增加(Add):在 Element UI 中,可以利用表单组件和对话框组件来实现数据的添加功能。通过表单组件,我们可以收集用户输入的数据,并通过提交操作将数据添加到数据库或服务器中。通过对话框组件,我们可以展示一个弹窗来收集用户输入的数据,然后将数据添加到系统中。
    2. 删除(Delete):在 Element UI 中,可以利用表格组件和对话框组件来实现数据的删除功能。通过表格组件,我们可以展示系统中已有的数据,并提供删除按钮供用户操作,当用户点击删除按钮时,可以弹出对话框来确认删除操作,并在确认后将数据从数据库或服务器中删除。
    3. 修改(Update):在 Element UI 中,可以利用表单组件和对话框组件来实现数据的修改功能。通过表单组件,我们可以展示系统中已有的数据,并提供编辑按钮供用户操作,当用户点击编辑按钮时,可以弹出对话框展示数据的编辑界面,并在用户提交修改后将数据更新到数据库或服务器中。

            增删改操作可以帮助我们在 Element UI 中实现对数据的管理和维护。无论是添加新数据、删除旧数据还是修改现有数据,都可以通过 Element UI 提供的组件和功能快速实现,并提供友好的用户界面和交互体验。这有助于加快开发速度,提高系统的可用性和易用性

    二、CUD

    1、增加修改

    在这之前我们要写好我们的后端代码,以便我们进行之后的操作

    1.1、添加弹窗

    首先进入我们的组件 | Element的官网,找到我们的弹窗组件。下面我也提供了。

    1. <el-button type="primary" plain @click="dialogFormVisible = true">新增el-button>
    2. <el-dialog title="新增页面" :visible.sync="dialogFormVisible" @close="clear">
    3. <el-form :model="book">
    4. <el-form-item label="书籍名称" :label-width="formLabelWidth">
    5. <el-input v-model="book.bookname" autocomplete="off">el-input>
    6. el-form-item>
    7. <el-form-item label="书籍价格" :label-width="formLabelWidth">
    8. <el-input v-model="book.price" autocomplete="off">el-input>
    9. el-form-item>
    10. <el-form-item label="书籍类型" :label-width="formLabelWidth">
    11. <el-select v-model="book.booktype" placeholder="请选择活动区域">
    12. <el-option v-for="t in types" :label="t.name" :value="t.name" :key="'key_'+t.id">el-option>
    13. el-select>
    14. el-form-item>
    15. el-form>
    16. <div slot="footer" class="dialog-footer">
    17. <el-button @click="dialogFormVisible = false">取 消el-button>
    18. <el-button type="primary" @click="editSubmit">确 定el-button>
    19. div>
    20. el-dialog>

    1.2、定义变量

    1. data() {
    2. return {
    3. // 是否打开弹窗
    4. dialogFormVisible: false,
    5. // 弹窗标题
    6. title: '新增页面',
    7. // 定义数组接收数据
    8. book:
    9. {id: '', bookname: '', price: '', booktype: ''}
    10. ,
    11. // 类型
    12. types: [],
    13. // 输入框长度
    14. formLabelWidth: '100px',
    15. }
    16. }

    1.3、定义方法

    1. // 初始化方法
    2. clear() {
    3. this.dialogFormVisible = false;
    4. this.title = '新增页面';
    5. this.book = {
    6. id: '',
    7. bookname: '',
    8. price: '',
    9. booktype: ''
    10. }
    11. }
    12. // 编辑
    13. handleEdit(index, row) {
    14. this.dialogFormVisible = true;
    15. if (row) {
    16. this.title = '编辑页面';
    17. this.book.id = row.id;
    18. this.book.bookname = row.bookname;
    19. this.book.price = row.price;
    20. this.book.booktype = row.booktype;
    21. }
    22. }
    23. // 增加修改提交
    24. editSubmit() {
    25. //表单验证
    26. this.$refs['book'].validate((valid) => {
    27. if (valid) {
    28. //验证通过执行增加修改方法
    29. let params = {
    30. id: this.book.id,
    31. bookname: this.book.bookname,
    32. price: this.book.price,
    33. booktype: this.book.booktype
    34. }
    35. //获取后台请求书籍数据的地址
    36. let url = this.axios.urls.BOOK_ADD;
    37. if (this.title == "编辑页面") {//如果是点击的编辑页面更改访问路径
    38. url = this.axios.urls.BOOK_EDIT;
    39. }
    40. this.axios.post(url, params).then(r => {
    41. this.clear();//关闭窗口
    42. this.query({});//刷新
    43. }).catch(e => {
    44. });
    45. } else {
    46. // console.log('error submit!!');
    47. return false;
    48. }
    49. });
    50. }
    51. created() {
    52. this.types = [{id: 1, name: '玄幻'},
    53. {id: 2, name: '计算机'},
    54. {id: 3, name: '散文'},
    55. {id: 4, name: '古典'},
    56. {id: 5, name: '文学'},
    57. {id: 6, name: '教育'},
    58. {id: 7, name: '悬疑'},]
    59. //初始化查询的方法
    60. this.query({})
    61. }

    1.4、完整代码

    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="primary" plain @click="onSubmit">查询el-button>
    9. <el-button type="primary" plain @click="dialogFormVisible = true">新增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="操作" min-width="180">
    18. <template slot-scope="scope">
    19. <el-button size="mini" icon="el-icon-edit-outline" type="primary"
    20. @click="handleEdit(scope.$index, scope.row)">编 辑
    21. el-button>
    22. <el-button size="mini" icon="el-icon-delete" type="danger" @click="handleDelete(scope.$index, scope.row)">
    23. el-button>
    24. template>
    25. el-table-column>
    26. el-table>
    27. <div class="block" style="padding: 20px;">
    28. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"
    29. background :page-sizes="[10, 20, 30, 40]" :page-size="rows"
    30. layout="total, sizes, prev, pager, next, jumper"
    31. :total="total">
    32. el-pagination>
    33. div>
    34. <el-dialog title="新增页面" :visible.sync="dialogFormVisible" @close="clear">
    35. <el-form :model="book">
    36. <el-form-item label="书籍名称" :label-width="formLabelWidth">
    37. <el-input v-model="book.bookname" autocomplete="off">el-input>
    38. el-form-item>
    39. <el-form-item label="书籍价格" :label-width="formLabelWidth">
    40. <el-input v-model="book.price" autocomplete="off">el-input>
    41. el-form-item>
    42. <el-form-item label="书籍类型" :label-width="formLabelWidth">
    43. <el-select v-model="book.booktype" placeholder="请选择活动区域">
    44. <el-option v-for="t in types" :label="t.name" :value="t.name" :key="'key_'+t.id">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="editSubmit">确 定el-button>
    51. div>
    52. el-dialog>
    53. div>
    54. template>
    55. <script>
    56. export default {
    57. data() {
    58. return {
    59. bookname: '',
    60. tableData: [],
    61. rows: 10,
    62. total: 0,
    63. page: 1,
    64. // 是否打开弹窗
    65. dialogFormVisible: false,
    66. // 弹窗标题
    67. title: '新增页面',
    68. // 定义数组接收数据
    69. book:
    70. {id: '', bookname: '', price: '', booktype: ''}
    71. ,
    72. // 类型
    73. types: [],
    74. // 输入框长度
    75. formLabelWidth: '100px',
    76. }
    77. },
    78. methods: {
    79. // 初始化方法
    80. clear() {
    81. this.dialogFormVisible = false;
    82. this.title = '新增页面';
    83. this.book = {
    84. id: '',
    85. bookname: '',
    86. price: '',
    87. booktype: ''
    88. }
    89. },
    90. // 编辑
    91. handleEdit(index, row) {
    92. this.dialogFormVisible = true;
    93. if (row) {
    94. this.title = '编辑页面';
    95. this.book.id = row.id;
    96. this.book.bookname = row.bookname;
    97. this.book.price = row.price;
    98. this.book.booktype = row.booktype;
    99. }
    100. },
    101. // 增加修改提交
    102. editSubmit() {
    103. let params = {
    104. id: this.book.id,
    105. bookname: this.book.bookname,
    106. price: this.book.price,
    107. booktype: this.book.booktype
    108. }
    109. //获取后台请求书籍数据的地址
    110. let url = this.axios.urls.BOOK_ADD;
    111. if (this.title == "编辑页面") {//如果是点击的编辑页面更改访问路径
    112. url = this.axios.urls.BOOK_EDIT;
    113. }
    114. this.axios.post(url, params).then(r => {
    115. this.clear();//关闭窗口
    116. this.query({});//刷新
    117. }).catch(e => {
    118. });
    119. },
    120. handleSizeChange(r) {
    121. //当页大小发生变化
    122. let params = {
    123. bookname: this.bookname,
    124. rows: r,
    125. page: this.page
    126. }
    127. this.query(params);
    128. },
    129. handleCurrentChange(p) {
    130. //当前页码大小发生变化
    131. let params = {
    132. bookname: this.bookname,
    133. rows: this.rows,
    134. // 分页
    135. page: p
    136. }
    137. // console.log(params)
    138. this.query(params);
    139. },
    140. query(params) {
    141. //获取后台请求书籍数据的地址
    142. let url = this.axios.urls.BOOK_BOOKLIST;
    143. this.axios.get(url, {
    144. params: params
    145. }).then(d => {
    146. this.tableData = d.data.rows;
    147. this.total = d.data.total;
    148. }).catch(e => {
    149. });
    150. },
    151. onSubmit() {
    152. let params = {
    153. bookname: this.bookname
    154. }
    155. console.log(params)
    156. this.query(params);
    157. this.bookname = ''
    158. }
    159. },
    160. //初始化调用
    161. created() {
    162. this.types = [{id: 1, name: '玄幻'},
    163. {id: 2, name: '计算机'},
    164. {id: 3, name: '散文'},
    165. {id: 4, name: '古典'},
    166. {id: 5, name: '文学'},
    167. {id: 6, name: '教育'},
    168. {id: 7, name: '悬疑'},]
    169. this.query({})
    170. }
    171. }
    172. script>
    173. <style>
    174. style>

    2、删除

    2.1、定义方法

    1. // 删除
    2. handleDelete(index, row) {
    3. console.log(index, row)
    4. let url = this.axios.urls.BOOK_DEL;
    5. this.axios.post(url, {id: row.id}).then(d => {
    6. this.query({})
    7. this.$message({
    8. message: '恭喜你,删除成功',
    9. type: 'success'
    10. });
    11. }).catch(e => {
    12. this.$message('已取消');
    13. });
    14. }

    三、表单验证

    1、添加规则

    需要在elementui里面的form表单里面添加:model="book" :rules="rules" ref="book":modelref必须是一样的

          <el-form :model="book" :rules="rules" ref="book">

    里面添加prop属性

    2、定义规则

    1. //表单验证
    2. rules: {
    3. //定义验证格式
    4. bookname: [
    5. {required: true, message: '请输入书籍名称', trigger: 'blur'},
    6. {min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur'}
    7. ],
    8. price: [
    9. {required: true, message: '请输入书籍价格', trigger: 'change'},
    10. {min: 1, max: 5, message: '长度在 1 到 5 个字符', trigger: 'blur'}
    11. ],
    12. booktype: [
    13. {required: true, message: '请输入书籍类型', trigger: 'blur'}
    14. ]
    15. }

    3、提交事件

    在提交的事件里面添加

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

    formName:form里面:model="book" 或者ref="book"  的名字

    1. // 增加修改提交
    2. editSubmit() {
    3. //表单验证
    4. this.$refs['book'].validate((valid) => {
    5. if (valid) {
    6. //验证通过执行增加修改方法
    7. let params = {
    8. id: this.book.id,
    9. bookname: this.book.bookname,
    10. price: this.book.price,
    11. booktype: this.book.booktype
    12. }
    13. //获取后台请求书籍数据的地址
    14. let url = this.axios.urls.BOOK_ADD;
    15. if (this.title == "编辑页面") {//如果是点击的编辑页面更改访问路径
    16. url = this.axios.urls.BOOK_EDIT;
    17. }
    18. this.axios.post(url, params).then(r => {
    19. this.clear();//关闭窗口
    20. this.query({});//刷新
    21. }).catch(e => {
    22. });
    23. } else {
    24. // console.log('error submit!!');
    25. return false;
    26. }
    27. });
    28. }

    当你的规则必配了就执行你的增加修改的方法,或者其他的方法

    4、前端完整代码

    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="primary" plain @click="onSubmit">查询el-button>
    9. <el-button type="primary" plain @click="dialogFormVisible = true">新增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="操作" min-width="180">
    18. <template slot-scope="scope">
    19. <el-button size="mini" icon="el-icon-edit-outline" type="primary"
    20. @click="handleEdit(scope.$index, scope.row)">编 辑
    21. el-button>
    22. <el-button size="mini" icon="el-icon-delete" type="danger" @click="handleDelete(scope.$index, scope.row)">
    23. el-button>
    24. template>
    25. el-table-column>
    26. el-table>
    27. <div class="block" style="padding: 20px;">
    28. <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="page"
    29. background :page-sizes="[10, 20, 30, 40]" :page-size="rows"
    30. layout="total, sizes, prev, pager, next, jumper"
    31. :total="total">
    32. el-pagination>
    33. div>
    34. <el-dialog title="新增页面" :visible.sync="dialogFormVisible" @close="clear">
    35. <el-form :model="book" :rules="rules" ref="book">
    36. <el-form-item label="书籍名称" :label-width="formLabelWidth" prop="bookname">
    37. <el-input v-model="book.bookname" autocomplete="off">el-input>
    38. el-form-item>
    39. <el-form-item label="书籍价格" :label-width="formLabelWidth" prop="price">
    40. <el-input v-model="book.price" autocomplete="off">el-input>
    41. el-form-item>
    42. <el-form-item label="书籍类型" :label-width="formLabelWidth" prop="booktype">
    43. <el-select v-model="book.booktype" placeholder="请选择活动区域">
    44. <el-option v-for="t in types" :label="t.name" :value="t.name" :key="'key_'+t.id">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="editSubmit">确 定el-button>
    51. div>
    52. el-dialog>
    53. div>
    54. template>
    55. <script>
    56. export default {
    57. data() {
    58. return {
    59. bookname: '',
    60. tableData: [],
    61. rows: 10,
    62. total: 0,
    63. page: 1,
    64. // 是否打开弹窗
    65. dialogFormVisible: false,
    66. // 弹窗标题
    67. title: '新增页面',
    68. // 定义数组接收数据
    69. book:
    70. {id: '', bookname: '', price: '', booktype: ''}
    71. ,
    72. // 类型
    73. types: [],
    74. // 输入框长度
    75. formLabelWidth: '100px',
    76. //表单验证
    77. rules: {
    78. //定义验证格式
    79. bookname: [
    80. {required: true, message: '请输入书籍名称', trigger: 'blur'},
    81. {min: 3, max: 10, message: '长度在 3 到 10 个字符', trigger: 'blur'}
    82. ],
    83. price: [
    84. {required: true, message: '请输入书籍价格', trigger: 'change'},
    85. {min: 1, max: 5, message: '长度在 1 到 5 个字符', trigger: 'blur'}
    86. ],
    87. booktype: [
    88. {required: true, message: '请输入书籍类型', trigger: 'blur'}
    89. ]
    90. },
    91. }
    92. },
    93. methods: {
    94. // 初始化方法
    95. clear() {
    96. this.dialogFormVisible = false;
    97. this.title = '新增页面';
    98. this.book = {
    99. id: '',
    100. bookname: '',
    101. price: '',
    102. booktype: ''
    103. }
    104. },
    105. // 编辑
    106. handleEdit(index, row) {
    107. this.dialogFormVisible = true;
    108. if (row) {
    109. this.title = '编辑页面';
    110. this.book.id = row.id;
    111. this.book.bookname = row.bookname;
    112. this.book.price = row.price;
    113. this.book.booktype = row.booktype;
    114. }
    115. },
    116. // 删除
    117. handleDelete(index, row) {
    118. console.log(index, row)
    119. let url = this.axios.urls.BOOK_DEL;
    120. this.axios.post(url, {id: row.id}).then(d => {
    121. this.query({})
    122. this.$message({
    123. message: '恭喜你,删除成功',
    124. type: 'success'
    125. });
    126. }).catch(e => {
    127. this.$message('已取消');
    128. });
    129. },
    130. // 增加修改提交
    131. editSubmit() {
    132. //表单验证
    133. this.$refs['book'].validate((valid) => {
    134. if (valid) {
    135. //验证通过执行增加修改方法
    136. let params = {
    137. id: this.book.id,
    138. bookname: this.book.bookname,
    139. price: this.book.price,
    140. booktype: this.book.booktype
    141. }
    142. //获取后台请求书籍数据的地址
    143. let url = this.axios.urls.BOOK_ADD;
    144. if (this.title == "编辑页面") {//如果是点击的编辑页面更改访问路径
    145. url = this.axios.urls.BOOK_EDIT;
    146. }
    147. this.axios.post(url, params).then(r => {
    148. this.clear();//关闭窗口
    149. this.query({});//刷新
    150. }).catch(e => {
    151. });
    152. } else {
    153. // console.log('error submit!!');
    154. return false;
    155. }
    156. });
    157. },
    158. handleSizeChange(r) {
    159. //当页大小发生变化
    160. let params = {
    161. bookname: this.bookname,
    162. rows: r,
    163. page: this.page
    164. }
    165. this.query(params);
    166. },
    167. handleCurrentChange(p) {
    168. //当前页码大小发生变化
    169. let params = {
    170. bookname: this.bookname,
    171. rows: this.rows,
    172. // 分页
    173. page: p
    174. }
    175. // console.log(params)
    176. this.query(params);
    177. },
    178. query(params) {
    179. //获取后台请求书籍数据的地址
    180. let url = this.axios.urls.BOOK_BOOKLIST;
    181. this.axios.get(url, {
    182. params: params
    183. }).then(d => {
    184. this.tableData = d.data.rows;
    185. this.total = d.data.total;
    186. }).catch(e => {
    187. });
    188. },
    189. onSubmit() {
    190. let params = {
    191. bookname: this.bookname
    192. }
    193. console.log(params)
    194. this.query(params);
    195. this.bookname = ''
    196. }
    197. },
    198. created() {
    199. this.types = [{id: 1, name: '玄幻'},
    200. {id: 2, name: '计算机'},
    201. {id: 3, name: '散文'},
    202. {id: 4, name: '古典'},
    203. {id: 5, name: '文学'},
    204. {id: 6, name: '教育'},
    205. {id: 7, name: '悬疑'},]
    206. this.query({})
    207. }
    208. }
    209. script>
    210. <style>
    211. style>

    我的分享就到这里,感谢大家在评论区讨论!!!

  • 相关阅读:
    【机器学习】推荐系统
    CVE-2020-1957 Apache Shiro 认证绕过漏洞
    CSP-J-2004-花生采摘
    XML配置文件(DTD详细讲解)
    花5分钟学习机器学习基础知识
    使用HTTP爬虫ip中的常见误区与解决方法
    汽车标定技术(五)--基于模型开发如何生成完整的A2L文件(1)
    VPN创建连接 提示错误 628: 在连接完成前,连接被远程计算机终止。
    初识上位机(上):搭建PLC模拟仿真环境
    LeetCode 15. 三数之和
  • 原文地址:https://blog.csdn.net/weixin_74383330/article/details/133343463