index.hbs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <template>
  2. <div class="{{ dashCase name }}-container">
  3. <vab-query-form>
  4. <vab-query-form-left-panel :span="12">
  5. <el-button icon="el-icon-plus" type="primary" @click="handleEdit">
  6. 添加
  7. </el-button>
  8. <el-button icon="el-icon-delete" type="danger" @click="handleDelete">
  9. 批量删除
  10. </el-button>
  11. </vab-query-form-left-panel>
  12. <vab-query-form-right-panel :span="12">
  13. <el-popover popper-class="custom-table-checkbox" trigger="hover">
  14. <el-checkbox-group v-model="checkList">
  15. <vab-draggable v-bind="dragOptions" :list="columns">
  16. <div v-for="(item, index) in columns" :key="item + index">
  17. <vab-icon icon="drag-drop-line" />
  18. <el-checkbox
  19. :disabled="item.disableCheck === true"
  20. :label="item.label"
  21. >
  22. {{ item.label }}
  23. </el-checkbox>
  24. </div>
  25. </vab-draggable>
  26. </el-checkbox-group>
  27. <template #reference>
  28. <el-button
  29. icon="el-icon-setting"
  30. style="margin: 0 0 10px 0 !important"
  31. type="primary"
  32. >
  33. 可拖拽列设置
  34. </el-button>
  35. </template>
  36. </el-popover>
  37. </vab-query-form-right-panel>
  38. </vab-query-form>
  39. <el-table
  40. v-loading="listLoading"
  41. border
  42. :data="list"
  43. :height="$baseTableHeight(1)"
  44. @selection-change="setSelectRows"
  45. >
  46. <el-table-column align="center" show-overflow-tooltip type="selection" />
  47. <el-table-column
  48. v-for="(item, index) in finallyColumns"
  49. :key="index"
  50. align="center"
  51. :label="item.label"
  52. :prop="item.prop"
  53. :sortable="item.sortable"
  54. :width="item.width"
  55. >
  56. </el-table-column>
  57. <el-table-column align="center" label="操作" width="85">
  58. <template #default="{ row }">
  59. <el-button type="text" @click="handleEdit(row)">编辑</el-button>
  60. <el-button type="text" @click="handleDelete(row)">删除</el-button>
  61. </template>
  62. </el-table-column>
  63. </el-table>
  64. <el-pagination
  65. background
  66. :current-page="queryForm.pageNo"
  67. :layout="layout"
  68. :page-size="queryForm.pageSize"
  69. :total="total"
  70. @current-change="handleCurrentChange"
  71. @size-change="handleSizeChange"
  72. />
  73. <edit ref="edit" @fetch-data="fetchData" />
  74. </div>
  75. </template>
  76. <script>
  77. import { getList, doDelete } from '@/api/{{moduleName}}/{{ camelCase name }}'
  78. import Edit from './components/{{ properCase name }}Edit'
  79. import VabDraggable from 'vuedraggable'
  80. export default {
  81. name: '{{ properCase name }}',
  82. components: { Edit },
  83. data() {
  84. return {
  85. checkList: [],
  86. columns: [],
  87. list: [],
  88. listLoading: true,
  89. layout: 'total, sizes, prev, pager, next, jumper',
  90. total: 0,
  91. selectRows: '',
  92. queryForm: {
  93. pageNo: 1,
  94. pageSize: 10,
  95. title: '',
  96. },
  97. }
  98. },
  99. computed: {
  100. dragOptions() {
  101. return {
  102. animation: 600,
  103. group: 'description',
  104. }
  105. },
  106. finallyColumns() {
  107. return this.columns.filter((item) =>
  108. this.checkList.includes(item.label)
  109. )
  110. },
  111. },
  112. created() {
  113. this.fetchData()
  114. },
  115. methods: {
  116. setSelectRows(val) {
  117. this.selectRows = val
  118. },
  119. handleEdit(row) {
  120. if (row.id) {
  121. this.$refs['edit'].showEdit(row)
  122. } else {
  123. this.$refs['edit'].showEdit()
  124. }
  125. },
  126. handleDelete(row) {
  127. if (row.id) {
  128. this.$baseConfirm('你确定要删除当前项吗', null, async () => {
  129. const { msg } = await doDelete({ ids: row.id })
  130. this.$baseMessage(msg, 'success')
  131. await this.fetchData()
  132. })
  133. } else {
  134. if (this.selectRows.length > 0) {
  135. const ids = this.selectRows.map((item) => item.id).join()
  136. this.$baseConfirm('你确定要删除选中项吗', null, async () => {
  137. const { msg } = await doDelete({ ids })
  138. this.$baseMessage(msg, 'success')
  139. await this.fetchData()
  140. })
  141. } else {
  142. this.$baseMessage('未选中任何行', 'error')
  143. return false
  144. }
  145. }
  146. },
  147. handleSizeChange(val) {
  148. this.queryForm.pageSize = val
  149. this.fetchData()
  150. },
  151. handleCurrentChange(val) {
  152. this.queryForm.pageNo = val
  153. this.fetchData()
  154. },
  155. queryData() {
  156. this.queryForm.pageNo = 1
  157. this.fetchData()
  158. },
  159. async fetchData() {
  160. this.listLoading = true
  161. const { data } = await getList(this.queryForm)
  162. const { list, total } = data
  163. this.list = list
  164. this.total = total
  165. this.listLoading = false
  166. },
  167. },
  168. }
  169. </script>