Element-UI(增删改查)

ゞ 浴缸里的玫瑰 2024-02-23 04:23 116阅读 0赞

一、导言

1、引言

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

它们的作用:

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

2、作用

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

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

增加(Add):在 Element UI 中,可以利用表单组件和对话框组件来实现数据的添加功能。通过表单组件,我们可以收集用户输入的数据,并通过提交操作将数据添加到数据库或服务器中。通过对话框组件,我们可以展示一个弹窗来收集用户输入的数据,然后将数据添加到系统中。
删除(Delete):在 Element UI 中,可以利用表格组件和对话框组件来实现数据的删除功能。通过表格组件,我们可以展示系统中已有的数据,并提供删除按钮供用户操作,当用户点击删除按钮时,可以弹出对话框来确认删除操作,并在确认后将数据从数据库或服务器中删除。
修改(Update):在 Element UI 中,可以利用表单组件和对话框组件来实现数据的修改功能。通过表单组件,我们可以展示系统中已有的数据,并提供编辑按钮供用户操作,当用户点击编辑按钮时,可以弹出对话框展示数据的编辑界面,并在用户提交修改后将数据更新到数据库或服务器中。
增删改操作可以帮助我们在 Element UI 中实现对数据的管理和维护。无论是添加新数据、删除旧数据还是修改现有数据,都可以通过 Element UI 提供的组件和功能快速实现,并提供友好的用户界面和交互体验。这有助于加快开发速度,提高系统的可用性和易用性。

二、CUD

1、增加修改

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

1.1、添加弹窗

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

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

514d022763864365b02bdf626c8bbb70.png

75dcd59b2fdd4f5fbb6b32efcb787e73.png

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. }

8b29af569d014e99952583883fd865f4.png

三,表单验证

1、添加规则

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

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

里面添加prop属性

794cbdcf49d3428dbca96b0c03e57c46.png

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

发表评论

表情:
评论列表 (有 0 条评论,116人围观)

还没有评论,来说两句吧...

相关阅读