Menu2.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <script setup lang="tsx">
  2. import { ContentWrap } from '@/components/ContentWrap'
  3. import { useI18n } from '@/hooks/web/useI18n'
  4. import { Table, TableColumn } from '@/components/Table'
  5. import { getTableListApi } from '@/api/table'
  6. import { TableData } from '@/api/table/types'
  7. import { ref } from 'vue'
  8. import { ElTag, ElPagination } from 'element-plus'
  9. import { BaseButton } from '@/components/Button'
  10. import TableColumns from './modules/TableColumn'
  11. interface Params {
  12. pageIndex?: number
  13. pageSize?: number
  14. }
  15. const { t } = useI18n()
  16. const columns: TableColumn[] = [
  17. ...TableColumns,
  18. {
  19. field: 'action',
  20. label: '操作',
  21. slots: {
  22. default: (data) => {
  23. return (
  24. <div class="flex gap-2">
  25. <BaseButton type="primary" onClick={() => actionFn(data)}>
  26. 操作
  27. </BaseButton>
  28. <BaseButton type="danger" onClick={() => handleDelete(data)}>
  29. 删除
  30. </BaseButton>
  31. </div>
  32. )
  33. }
  34. }
  35. }
  36. ]
  37. const loading = ref(true)
  38. const tableDataList = ref<TableData[]>([])
  39. // 分页相关数据
  40. const currentPage = ref(1)
  41. const pageSize = ref(10)
  42. const total = ref(0)
  43. const getTableList = async (params?: Params) => {
  44. loading.value = true
  45. const res = await getTableListApi(
  46. params || {
  47. pageIndex: currentPage.value,
  48. pageSize: pageSize.value
  49. }
  50. )
  51. .catch(() => {})
  52. .finally(() => {
  53. loading.value = false
  54. })
  55. if (res) {
  56. tableDataList.value = res.data.list
  57. total.value = res.data.total // 设置总数
  58. }
  59. }
  60. // 分页方法
  61. const handleSizeChange = (val: number) => {
  62. pageSize.value = val
  63. getTableList()
  64. }
  65. const handleCurrentChange = (val: number) => {
  66. currentPage.value = val
  67. getTableList()
  68. }
  69. // 初始加载
  70. getTableList()
  71. const actionFn = (data: any) => {
  72. console.log(data)
  73. }
  74. // 添加删除方法
  75. const handleDelete = (data: any) => {
  76. console.log('删除', data)
  77. }
  78. </script>
  79. <template>
  80. <ContentWrap :title="t('tableDemo.table')" :message="t('tableDemo.tableDes')">
  81. <div class="table-container">
  82. <Table
  83. :columns="columns"
  84. :data="tableDataList"
  85. :loading="loading"
  86. :defaultSort="{ prop: 'display_time', order: 'descending' }"
  87. />
  88. <div class="pagination-container">
  89. <el-pagination
  90. v-model:current-page="currentPage"
  91. v-model:page-size="pageSize"
  92. :page-sizes="[10, 20, 50, 100]"
  93. :total="total"
  94. layout="total, sizes, prev, pager, next, jumper"
  95. @size-change="handleSizeChange"
  96. @current-change="handleCurrentChange"
  97. />
  98. </div>
  99. </div>
  100. </ContentWrap>
  101. </template>
  102. <style lang="less" scoped>
  103. .table-container {
  104. .pagination-container {
  105. margin-top: 20px;
  106. display: flex;
  107. justify-content: flex-end;
  108. }
  109. }
  110. </style>