Pending.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. <template>
  2. <v-card elevation="1">
  3. <!-- 顶部组件 -->
  4. <Top :query='query' :page='page' :table='table'></Top>
  5. <!-- 中间表格组件 -->
  6. <Table :query='query' :page='page' :table='table'></Table>
  7. </v-card>
  8. </template>
  9. <script>
  10. import Top from '@/components/viewer/Top'
  11. import Table from '@/components/viewer/Table'
  12. import EthMev from "@/plugins/model/EthMev";
  13. import NumKit from "@/plugins/kit/NumKit";
  14. export default {
  15. name: 'Pending',
  16. components: {Top, Table},
  17. data: () => ({
  18. query: {
  19. block: '',
  20. hash: '',
  21. dataVague: ''
  22. },
  23. page: {
  24. name: 'Pending Page'
  25. },
  26. table: {
  27. search: '',
  28. loading: false,
  29. groupBy: 'block',
  30. sortBy: ['block', 'gasPrice', 'pending'],
  31. sortDesc: [false, true, false],
  32. pageSize: 200,
  33. data: [],
  34. headers: [
  35. {text: "Option", value: 'option'},
  36. {text: 'Block', value: 'block'},
  37. {text: 'Hash', value: 'hash'},
  38. {text: 'From', value: 'from'},
  39. {text: 'To', value: 'to'},
  40. {text: 'GasPrice', value: 'gasPrice'},
  41. {text: 'Type', value: 'type'},
  42. {text: 'Index', value: 'index'},
  43. {text: 'State', value: 'state'},
  44. {text: 'Mev', value: 'mev'},
  45. {text: 'Pending', value: 'pending'},
  46. {text: 'TradeInfo', value: 'tradeInfo'}
  47. ]
  48. }
  49. }),
  50. methods: {
  51. // 获取数据
  52. async generateTableData() {
  53. this.table.data.length = 0
  54. this.table.loading = true
  55. const rst = await EthMev.getEthMevPendingData(this.query.block, this.query.hash, this.query.dataVague)
  56. this.table.loading = false
  57. if (!rst.data.state) {
  58. this.$msgkit.error(rst.data.msg)
  59. return
  60. }
  61. this.$msgkit.success(rst.data.msg)
  62. this.table.data = rst.data.data
  63. this.table.data.map(function (one) {
  64. try {
  65. let dataObj = one.dataObj
  66. one.tradeInfo = dataObj.tradeInfo
  67. one.from = dataObj.fromAdd
  68. one.to = dataObj.toAdd
  69. one.gasPrice = NumKit._N(parseInt(dataObj.gasPrice) / (1E9), 2)
  70. one.index = dataObj.index
  71. one.type = dataObj.type
  72. one.state = dataObj.status
  73. one.pending = dataObj.pending
  74. } catch (e) {
  75. one.tradeInfo = []
  76. }
  77. })
  78. }
  79. },
  80. provide() {
  81. return {
  82. generateTableData: this.generateTableData
  83. }
  84. },
  85. async mounted () {
  86. await this.generateTableData()
  87. }
  88. }
  89. </script>
  90. <style>
  91. #dataTable {
  92. height: 410px;
  93. }
  94. #dataTableHeader {
  95. max-width: none;
  96. }
  97. .tradeLabel {
  98. width: 250px;
  99. }
  100. thead.v-data-table-header {
  101. position: fixed !important;
  102. bottom: 0 !important;
  103. z-index: 999;
  104. background-color: rgba(255, 255, 255, 255);
  105. width: 96.35%;
  106. border-top: grey 1px solid;
  107. }
  108. div.tokenName {
  109. text-align: left;
  110. width: 100%;
  111. }
  112. div.tokenAmount {
  113. text-align: right;
  114. width: 100%;
  115. }
  116. span.v-chip__content {
  117. width: 100%;
  118. }
  119. </style>