ReplacementView.vue 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. <script setup>
  2. import { ref, onMounted } from 'vue'
  3. import DataTable from 'primevue/datatable'
  4. import Column from 'primevue/column'
  5. import Button from 'primevue/button'
  6. import IconField from 'primevue/iconfield'
  7. import InputIcon from 'primevue/inputicon'
  8. import InputText from 'primevue/inputtext'
  9. import { listReplacements } from '@/services/api'
  10. import { useDateFormat } from '@vueuse/core'
  11. const tableData = ref({
  12. content: [],
  13. metadata: {
  14. page: 0,
  15. size: 20,
  16. total: 0
  17. }
  18. })
  19. const search = ref('')
  20. const fetchData = async () => {
  21. const response = await listReplacements(tableData.value.metadata.page, tableData.value.metadata.size)
  22. tableData.value = response
  23. }
  24. const handlePageChange = (event) => {
  25. console.log('handlePageChange', event)
  26. tableData.value.metadata.page = event.page
  27. tableData.value.metadata.size = event.rows
  28. fetchData()
  29. }
  30. const formatDate = (date) => {
  31. return useDateFormat(date, 'YYYY-MM-DD HH:mm:ss').value
  32. }
  33. onMounted(() => {
  34. fetchData()
  35. })
  36. </script>
  37. <template>
  38. <div class="rounded-lg p-4 bg-[var(--p-content-background)]">
  39. <DataTable
  40. :value="tableData.content"
  41. :paginator="true"
  42. :rows="tableData.metadata.size"
  43. :rowsPerPageOptions="[10, 20, 50, 100]"
  44. :totalRecords="tableData.metadata.total"
  45. @page="handlePageChange"
  46. lazy
  47. scrollable
  48. >
  49. <template #header>
  50. <div class="flex flex-wrap items-center">
  51. <Button icon="pi pi-refresh" @click="fetchData" label="刷新" size="small" />
  52. <div class="flex-1"></div>
  53. <IconField>
  54. <InputIcon>
  55. <i class="pi pi-search" />
  56. </InputIcon>
  57. <InputText v-model="search" placeholder="搜素" />
  58. </IconField>
  59. </div>
  60. </template>
  61. <Column field="id" header="ID"></Column>
  62. <Column field="address" header="钱包地址"></Column>
  63. <Column field="replaceAddress" header="替换地址"></Column>
  64. <Column field="chain" header="链"></Column>
  65. <Column field="tgUserId" header="TGID"></Column>
  66. <Column field="createdAt" header="创建时间" style="min-width: 200px">
  67. <template #body="slotProps">
  68. {{ formatDate(slotProps.data.createdAt) }}
  69. </template>
  70. </Column>
  71. </DataTable>
  72. </div>
  73. </template>