编写前台数据展示页

1.在src/views目录下创建一个目录,目录名称为系统名称todo,该目录下面以后就存放该系统的页面文件

2.在src/views/todo目录下创建 todo-add-or-update.vue 文件,并将 src/views/basic/examples/template/ 中对应的文件内容复制进来即可

  1. <template>
  2. <div>
  3. <!--这是表单-->
  4. <el-form :inline="true" :model="dataForm" @keyup.enter.native="getDataList()">
  5. <el-form-item>
  6. <el-input v-model="dataForm.searchKey" placeholder="请输入查询条件" clearable :autofocus="true">
  7. <el-button slot="append" icon="el-icon-search" @click="getDataList()"></el-button>
  8. </el-input>
  9. </el-form-item>
  10. <el-form-item>
  11. <el-button type="primary" @click="addOrUpdateHandle()" icon="el-icon-plus" v-if="isAuth('todo:save')">
  12. 新增
  13. </el-button>
  14. <el-button type="danger" @click="deleteHandle()" :disabled="dataListSelections.length <= 0"
  15. icon="el-icon-delete">批量删除
  16. </el-button>
  17. </el-form-item>
  18. </el-form>
  19. <!--这是表格-->
  20. <el-table
  21. :data="dataList"
  22. border
  23. v-loading="dataListLoading"
  24. @selection-change="selectionChangeHandle"
  25. style="width: 100%;">
  26. <el-table-column
  27. type="selection"
  28. header-align="center"
  29. align="center"
  30. width="50">
  31. </el-table-column>
  32. <el-table-column
  33. prop="name"
  34. header-align="center"
  35. align="center"
  36. label="待办事项">
  37. </el-table-column>
  38. <el-table-column
  39. prop="status"
  40. header-align="center"
  41. align="center"
  42. label="状态">
  43. <template slot-scope="scope">
  44. <el-tag v-if="scope.row.status === 1" size="small">已完成</el-tag>
  45. <el-tag v-else size="small" type="danger">未完成</el-tag>
  46. </template>
  47. </el-table-column>
  48. <el-table-column
  49. fixed="right"
  50. header-align="center"
  51. align="center"
  52. width="150"
  53. label="操作">
  54. <template slot-scope="scope">
  55. <el-button type="text" icon="el-icon-edit" @click="addOrUpdateHandle(scope.row.id)">修改</el-button>
  56. <el-button type="text" icon="el-icon-delete" @click="deleteHandle(scope.row.id)">删除</el-button>
  57. </template>
  58. </el-table-column>
  59. </el-table>
  60. <!--这是分页-->
  61. <el-pagination
  62. @size-change="sizeChangeHandle"
  63. @current-change="currentChangeHandle"
  64. :current-page="pageIndex"
  65. :page-sizes="[10, 20, 50, 100]"
  66. :page-size="pageSize"
  67. :total="totalPage"
  68. background
  69. layout="total, prev, pager, next">
  70. </el-pagination>
  71. <!-- 弹窗, 新增 / 修改 -->
  72. <add-or-update v-if="addOrUpdateVisible" ref="addOrUpdate" @refreshDataList="getDataList"></add-or-update>
  73. </div>
  74. </template>
  75. <script>
  76. import AddOrUpdate from './todo-add-or-update'
  77. import {pageMixins} from '@/mixins/page'
  78. export default {
  79. data() {
  80. return {
  81. dataForm: {
  82. searchKey: ''
  83. },
  84. dataList: [],
  85. dataListLoading: false,
  86. dataListSelections: [],
  87. addOrUpdateVisible: false
  88. }
  89. },
  90. mixins: [pageMixins],
  91. components: {
  92. AddOrUpdate
  93. },
  94. activated() {
  95. this.getDataList()
  96. },
  97. methods: {
  98. // 获取数据列表
  99. getDataList() {
  100. this.dataListLoading = true
  101. this.$get('/todo/list', {
  102. 'page': this.pageIndex,
  103. 'limit': this.pageSize,
  104. 'searchKey': this.dataForm.searchKey
  105. }).then(data => {
  106. // 查询成功后,将获取的数据放入dataList中进行页面渲染
  107. this.dataListLoading = false
  108. this.dataList = data.list
  109. this.totalPage = data.totalCount
  110. })
  111. },
  112. // 多选触发、传入的是多选的数组对象
  113. selectionChangeHandle(val) {
  114. this.dataListSelections = val
  115. },
  116. // 新增 / 修改
  117. addOrUpdateHandle(id) {
  118. this.addOrUpdateVisible = true
  119. // 保证在下一次页面渲染完成后执行
  120. this.$nextTick(() => {
  121. this.$refs.addOrUpdate.init(id)
  122. })
  123. },
  124. // 删除
  125. deleteHandle(id) {
  126. // 批量删除
  127. var ids = id ? [id] : this.dataListSelections.map(item => {
  128. return item.id
  129. })
  130. this.$confirm(`确定进行${id ? '删除' : '批量删除'}操作?`, '提示', {
  131. confirmButtonText: '确定',
  132. cancelButtonText: '取消',
  133. type: 'warning'
  134. }).then(() => {
  135. // 确定后调用接口进行批量删除
  136. this.$post('/todo/delete', ids).then(data => {
  137. this.$message.success('操作成功')
  138. // 删除成功后页面数据手动刷新
  139. this.getDataList()
  140. })
  141. }).catch(() => {
  142. })
  143. }
  144. }
  145. }
  146. </script>

编写前台数据修改页

在src/views/todo目录下创建 todo-add-or-update.vue 文件,并将 src/views/basic/examples/template/ 中对应的文件内容复制进来即可

  1. <template>
  2. <el-dialog
  3. :title="!dataForm.id ? '新增待办': '修改待办'"
  4. :close-on-click-modal="false"
  5. :visible.sync="visible"
  6. top="10vh"
  7. >
  8. <el-form
  9. :model="dataForm"
  10. :rules="dataRule"
  11. ref="dataForm"
  12. @keyup.enter.native="dataFormSubmit()"
  13. label-width="80px">
  14. <el-form-item label="待办事项" prop="name">
  15. <el-input v-model="dataForm.name" placeholder="待办事项"></el-input>
  16. </el-form-item>
  17. <el-form-item label="状态" prop="status">
  18. <el-radio-group v-model="dataForm.status">
  19. <el-radio :label="1">已完成</el-radio>
  20. <el-radio :label="-1">未完成</el-radio>
  21. </el-radio-group>
  22. </el-form-item>
  23. </el-form>
  24. <span slot="footer" class="dialog-footer">
  25. <el-button @click="visible = false" icon="el-icon-close">取消</el-button>
  26. <el-button type="primary" @click="dataFormSubmit()" icon="el-icon-check">确定</el-button>
  27. </span>
  28. </el-dialog>
  29. </template>
  30. <script>
  31. export default {
  32. data() {
  33. return {
  34. visible: false,
  35. dataForm: {
  36. id: 0,
  37. name: '',
  38. status: 0
  39. },
  40. dataRule: {
  41. name: [{required: true, message: '待办事项不能为空', trigger: 'blur'}]
  42. }
  43. }
  44. },
  45. methods: {
  46. init(id) {
  47. this.dataForm.id = id || 0
  48. this.$get(`/todo/info/${this.dataForm.id}`).then(data => {
  49. this.visible = true
  50. this.dataForm.id = data.id
  51. this.dataForm.name = data.name
  52. this.dataForm.status = data.status
  53. })
  54. },
  55. // 表单提交
  56. dataFormSubmit() {
  57. this.$refs['dataForm'].validate((valid) => {
  58. if (valid) { // 校验通过
  59. this.$post(`/todo/${!this.dataForm.id ? 'save' : 'update'}`, {
  60. 'id': this.dataForm.id || undefined,
  61. 'name': this.dataForm.name,
  62. 'status': this.dataForm.status
  63. }).then(data => {
  64. this.visible = false
  65. // 让父组件刷新列表数据
  66. this.$emit('refreshDataList')
  67. this.$message.success('操作成功')
  68. })
  69. }
  70. })
  71. }
  72. }
  73. }
  74. </script>