index.hbs 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <div class="{{ dashCase name }}-container table-auto-height">
  3. <vab-query-form>
  4. <vab-query-form-top-panel>
  5. <el-form inline label-width="49px" :model="queryForm" @submit.prevent>
  6. <el-form-item label="标题">
  7. <el-input v-model="queryForm.title" clearable placeholder="请输入标题" />
  8. </el-form-item>
  9. <el-form-item v-show="!fold" label="标题">
  10. <el-input v-model="queryForm.title" clearable placeholder="请输入标题" />
  11. </el-form-item>
  12. <el-form-item>
  13. <el-button :icon="Search" :loading="listLoading" native-type="submit" type="primary" @click="queryData">查询</el-button>
  14. <el-button class="hidden-xs-only" text type="primary" @click="handleFold">
  15. <span v-if="fold">展开</span>
  16. <span v-else>合并</span>
  17. <vab-icon class="vab-dropdown" :class="{ 'vab-dropdown-active': fold }" icon="arrow-up-s-line" />
  18. </el-button>
  19. </el-form-item>
  20. </el-form>
  21. </vab-query-form-top-panel>
  22. <vab-query-form-left-panel :span="24">
  23. <el-button :icon="Plus" type="primary" @click="handleAdd">添加</el-button>
  24. <el-button :icon="Delete" type="danger" @click="handleDelete">删除</el-button>
  25. </vab-query-form-left-panel>
  26. </vab-query-form>
  27. <el-table ref="tableSortRef" v-loading="listLoading" border :data="list" @selection-change="setSelectRows">
  28. <el-table-column type="selection" width="38" />
  29. <el-table-column align="center" label="标题" prop="title" show-overflow-tooltip />
  30. <el-table-column align="center" label="作者" prop="author" />
  31. <el-table-column align="center" label="操作" width="162">
  32. <template #default="{ row }">
  33. <el-button text type="primary" @click="handleEdit(row)">编辑</el-button>
  34. <el-button text type="danger" @click="handleDelete(row)">删除</el-button>
  35. </template>
  36. </el-table-column>
  37. <template #empty>
  38. <el-empty class="vab-data-empty" description="暂无数据" />
  39. </template>
  40. </el-table>
  41. <el-pagination
  42. background
  43. :current-page="queryForm.pageNo"
  44. :layout="layout"
  45. :page-size="queryForm.pageSize"
  46. :total="total"
  47. @current-change="handleCurrentChange"
  48. @size-change="handleSizeChange"
  49. />
  50. <{{ dashCase name }}-edit ref="editRef" @fetch-data="fetchData" />
  51. </div>
  52. </template>
  53. <script lang="ts" setup>
  54. import { Delete, Plus, Search } from '@element-plus/icons-vue'
  55. import { doDelete, getList } from '/@/api/{{ camelCase name }}'
  56. defineOptions({
  57. name: '{{ properCase name }}',
  58. })
  59. const $baseConfirm = inject<any>('$baseConfirm')
  60. const $baseMessage = inject<any>('$baseMessage')
  61. const editRef = ref<any>(null)
  62. const tableSortRef = ref<any>(null)
  63. const fold = ref<boolean>(true)
  64. const list = ref<any>([])
  65. const listLoading = ref<boolean>(true)
  66. const layout = ref<string>('total, sizes, prev, pager, next, jumper')
  67. const total = ref<any>(0)
  68. const selectRows = ref<any>([])
  69. const queryForm = reactive<any>({
  70. pageNo: 1,
  71. pageSize: 20,
  72. })
  73. onActivated(() => {
  74. tableSortRef.value.doLayout()
  75. fetchData()
  76. })
  77. const fetchData = async () => {
  78. listLoading.value = true
  79. const { data } = await getList(queryForm)
  80. list.value = data.list
  81. total.value = data.total
  82. listLoading.value = false
  83. }
  84. const handleSizeChange = (value: number) => {
  85. queryForm.pageNo = 1
  86. queryForm.pageSize = value
  87. fetchData()
  88. }
  89. const handleCurrentChange = (value: number) => {
  90. queryForm.pageNo = value
  91. fetchData()
  92. }
  93. const queryData = () => {
  94. queryForm.pageNo = 1
  95. fetchData()
  96. }
  97. const handleFold = () => {
  98. fold.value = !fold.value
  99. }
  100. const setSelectRows = (value: string) => {
  101. selectRows.value = value
  102. }
  103. const handleAdd = () => {
  104. editRef.value.showEdit()
  105. }
  106. const handleEdit = (row = {}) => {
  107. editRef.value.showEdit(row)
  108. }
  109. const handleDelete = (row: any) => {
  110. if (row.id) {
  111. $baseConfirm('您确定要删除当前项吗', null, async () => {
  112. const { msg }: any = await doDelete({ ids: row.id })
  113. $baseMessage(msg, 'success', 'hey')
  114. await fetchData()
  115. })
  116. } else {
  117. if (selectRows.value.length > 0) {
  118. const ids = selectRows.value.map((item: { id: any }) => item.id).join()
  119. $baseConfirm('您确定要删除选中项吗', null, async () => {
  120. const { msg }: any = await doDelete({ ids: ids })
  121. $baseMessage(msg, 'success', 'hey')
  122. await fetchData()
  123. })
  124. } else {
  125. $baseMessage('您未选中任何行', 'warning', 'hey')
  126. }
  127. }
  128. }
  129. onBeforeMount(() => {
  130. fetchData()
  131. })
  132. </script>