index.hbs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  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. export default {
  80. name: '{{ properCase name }}',
  81. components: { Edit },
  82. data() {
  83. return {
  84. checkList: [],
  85. columns: [],
  86. list: [],
  87. listLoading: true,
  88. layout: 'total, sizes, prev, pager, next, jumper',
  89. total: 0,
  90. selectRows: '',
  91. queryForm: {
  92. pageNo: 1,
  93. pageSize: 10,
  94. title: '',
  95. },
  96. }
  97. },
  98. computed: {
  99. dragOptions() {
  100. return {
  101. animation: 600,
  102. group: 'description',
  103. }
  104. },
  105. finallyColumns() {
  106. return this.columns.filter((item) =>
  107. this.checkList.includes(item.label)
  108. )
  109. },
  110. },
  111. created() {
  112. this.fetchData()
  113. },
  114. methods: {
  115. setSelectRows(val) {
  116. this.selectRows = val
  117. },
  118. handleEdit(row) {
  119. if (row.id) {
  120. this.$refs['edit'].showEdit(row)
  121. } else {
  122. this.$refs['edit'].showEdit()
  123. }
  124. },
  125. handleDelete(row) {
  126. if (row.id) {
  127. this.$baseConfirm('你确定要删除当前项吗', null, async () => {
  128. const { msg } = await doDelete({ ids: row.id })
  129. this.$baseMessage(msg, 'success')
  130. await this.fetchData()
  131. })
  132. } else {
  133. if (this.selectRows.length > 0) {
  134. const ids = this.selectRows.map((item) => item.id).join()
  135. this.$baseConfirm('你确定要删除选中项吗', null, async () => {
  136. const { msg } = await doDelete({ ids })
  137. this.$baseMessage(msg, 'success')
  138. await this.fetchData()
  139. })
  140. } else {
  141. this.$baseMessage('未选中任何行', 'error')
  142. return false
  143. }
  144. }
  145. },
  146. handleSizeChange(val) {
  147. this.queryForm.pageSize = val
  148. this.fetchData()
  149. },
  150. handleCurrentChange(val) {
  151. this.queryForm.pageNo = val
  152. this.fetchData()
  153. },
  154. queryData() {
  155. this.queryForm.pageNo = 1
  156. this.fetchData()
  157. },
  158. async fetchData() {
  159. this.listLoading = true
  160. const { data } = await getList(this.queryForm)
  161. const { list, total } = data
  162. this.list = list
  163. this.total = total
  164. this.listLoading = false
  165. },
  166. },
  167. }
  168. </script>