crushing0853.html 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Document</title>
  7. <!-- Import style -->
  8. <link rel="stylesheet" href="//unpkg.com/element-plus/dist/index.css" />
  9. <!-- Import Vue 3 -->
  10. <script src="//unpkg.com/vue@3"></script>
  11. <!-- Import component library -->
  12. <script src="//unpkg.com/element-plus"></script>
  13. <script src="https://unpkg.com/axios@1.6.7/dist/axios.min.js"></script>
  14. <script src="https://cdn.tailwindcss.com"></script>
  15. </head>
  16. <body>
  17. <div id="app" class="p-4">
  18. <div class="flex mb-4">
  19. <el-select v-model="status" placeholder="Select">
  20. <el-option label="All" value="all"></el-option>
  21. <el-option label="Success" value="true"></el-option>
  22. <el-option label="Failed" value="false"></el-option>
  23. </el-select>
  24. <el-button class="ml-4" @click="getData">Search</el-button>
  25. </div>
  26. <el-table :data="data" size="small" v-loading="loading">
  27. <el-table-column prop="id" label="ID" width="80"></el-table-column>
  28. <el-table-column prop="createdAt" label="Created At" :formatter="timeFormatter"></el-table-column>
  29. <el-table-column prop="email" label="Email"></el-table-column>
  30. <el-table-column prop="password" label="Password"></el-table-column>
  31. <el-table-column prop="success" label="Success"></el-table-column>
  32. <el-table-column prop="result" label="Balance" show-overflow-tooltip></el-table-column>
  33. </el-table>
  34. <el-pagination layout="prev, pager, next" :total="total" :page-size="20" v-model:current-page="page" />
  35. </div>
  36. <script>
  37. const { createApp, ref, onMounted, watch } = Vue
  38. const app = createApp({
  39. setup() {
  40. const message = ref('Hello vue!')
  41. const data = ref([])
  42. const page = ref(1)
  43. const status = ref('all')
  44. const total = ref(0)
  45. const loading = ref(false)
  46. function getData() {
  47. loading.value = true
  48. axios.get('/list', {
  49. params: {
  50. page: page.value - 1,
  51. success: status.value === 'all' ? undefined : status.value
  52. }
  53. }).then(res => {
  54. data.value = res.data.data
  55. total.value = res.data.total
  56. loading.value = false
  57. }).catch(e => {
  58. loading.value = false
  59. })
  60. }
  61. function timeFormatter(row, column, cellValue, index) {
  62. return new Date(row.createdAt).toLocaleString()
  63. }
  64. onMounted(function () {
  65. getData()
  66. })
  67. watch(page, function () {
  68. getData()
  69. })
  70. watch(status, function () {
  71. page.value = 1
  72. getData()
  73. })
  74. return {
  75. message, getData, data, page, timeFormatter, status, total, loading
  76. }
  77. }
  78. })
  79. app.use(ElementPlus)
  80. app.mount('#app')
  81. </script>
  82. </body>
  83. </html>