index.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. <template>
  2. <div class="department-management-container">
  3. <vab-query-form>
  4. <vab-query-form-left-panel :span="12">
  5. <el-button
  6. icon="el-icon-plus"
  7. type="primary"
  8. @click="handleEdit($event)">
  9. 添加
  10. </el-button>
  11. <el-button
  12. icon="el-icon-delete"
  13. type="danger"
  14. @click="handleDelete($event)">
  15. 批量删除
  16. </el-button>
  17. </vab-query-form-left-panel>
  18. <vab-query-form-right-panel :span="12">
  19. <el-form :inline="true" :model="queryForm" @submit.native.prevent>
  20. <el-form-item>
  21. <el-input
  22. v-model.trim="queryForm.name"
  23. clearable
  24. placeholder="请输入名称" />
  25. </el-form-item>
  26. <el-form-item>
  27. <el-button icon="el-icon-search" type="primary" @click="queryData">
  28. 查询
  29. </el-button>
  30. </el-form-item>
  31. </el-form>
  32. </vab-query-form-right-panel>
  33. </vab-query-form>
  34. <el-table
  35. v-loading="listLoading"
  36. border
  37. :data="list"
  38. default-expand-all
  39. :height="$baseTableHeight(1)"
  40. row-key="id"
  41. :tree-props="{ children: 'children' }"
  42. @selection-change="setSelectRows">
  43. <el-table-column show-overflow-tooltip type="selection" />
  44. <el-table-column label="名称" prop="name" show-overflow-tooltip />
  45. <el-table-column label="父节点Id" prop="parentId" show-overflow-tooltip />
  46. <el-table-column label="排序" prop="order" show-overflow-tooltip />
  47. <el-table-column
  48. label="创建时间"
  49. prop="createTime"
  50. show-overflow-tooltip />
  51. <el-table-column label="操作" width="85">
  52. <template #default="{ row }">
  53. <el-button type="text" @click="handleEdit(row)">编辑</el-button>
  54. <el-button
  55. :disabled="!row.parentId"
  56. type="text"
  57. @click="handleDelete({ row })">
  58. 删除
  59. </el-button>
  60. </template>
  61. </el-table-column>
  62. <template #empty>
  63. <el-image
  64. class="vab-data-empty"
  65. :src="require('@/assets/empty_images/data_empty.png')" />
  66. </template>
  67. </el-table>
  68. <el-pagination
  69. background
  70. :current-page="queryForm.pageNo"
  71. :layout="layout"
  72. :page-size="queryForm.pageSize"
  73. :total="total"
  74. @current-change="handleCurrentChange"
  75. @size-change="handleSizeChange" />
  76. <edit ref="edit" @fetch-data="fetchData" />
  77. </div>
  78. </template>
  79. <script>
  80. import { doDelete, getList } from '@/api/dept'
  81. import Edit from './components/DeptEdit'
  82. export default {
  83. name: 'Dept',
  84. components: { Edit },
  85. data() {
  86. return {
  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. created() {
  100. this.fetchData()
  101. },
  102. methods: {
  103. setSelectRows(val) {
  104. this.selectRows = val
  105. },
  106. handleEdit(row) {
  107. if (row.id) {
  108. this.$refs['edit'].showEdit(row)
  109. } else {
  110. this.$refs['edit'].showEdit()
  111. }
  112. },
  113. handleDelete(row) {
  114. if (row.id) {
  115. this.$baseConfirm('你确定要删除当前项吗', null, async () => {
  116. const { msg } = await doDelete({ ids: row.id })
  117. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  118. await this.fetchData()
  119. })
  120. } else {
  121. if (this.selectRows.length > 0) {
  122. const ids = this.selectRows.map((item) => item.id).join()
  123. this.$baseConfirm('你确定要删除选中项吗', null, async () => {
  124. const { msg } = await doDelete({ ids })
  125. this.$baseMessage(msg, 'success', 'vab-hey-message-success')
  126. await this.fetchData()
  127. })
  128. } else {
  129. this.$baseMessage('未选中任何行', 'error', 'vab-hey-message-error')
  130. }
  131. }
  132. },
  133. handleSizeChange(val) {
  134. this.queryForm.pageSize = val
  135. this.fetchData()
  136. },
  137. handleCurrentChange(val) {
  138. this.queryForm.pageNo = val
  139. this.fetchData()
  140. },
  141. queryData() {
  142. this.queryForm.pageNo = 1
  143. this.fetchData()
  144. },
  145. async fetchData() {
  146. this.listLoading = true
  147. const {
  148. data: { list, total },
  149. } = await getList(this.queryForm)
  150. this.list = list
  151. this.total = total
  152. this.listLoading = false
  153. },
  154. },
  155. }
  156. </script>