ProxiesStcp.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <template>
  2. <div>
  3. <el-table :data="proxies" :default-sort="{ prop: 'name', order: 'ascending' }" style="width: 100%">
  4. <el-table-column type="expand">
  5. <template slot-scope="props">
  6. <el-popover ref="popover4" placement="right" width="600" style="margin-left: 0px" trigger="click">
  7. <my-traffic-chart :proxy-name="props.row.name" />
  8. </el-popover>
  9. <el-button v-popover:popover4 type="primary" size="small" icon="view" :name="props.row.name" style="margin-bottom: 10px" @click="fetchData2">
  10. Traffic Statistics
  11. </el-button>
  12. <el-form label-position="left" inline class="demo-table-expand">
  13. <el-form-item label="Name">
  14. <span>{{ props.row.name }}</span>
  15. </el-form-item>
  16. <el-form-item label="Type">
  17. <span>{{ props.row.type }}</span>
  18. </el-form-item>
  19. <el-form-item label="Encryption">
  20. <span>{{ props.row.encryption }}</span>
  21. </el-form-item>
  22. <el-form-item label="Compression">
  23. <span>{{ props.row.compression }}</span>
  24. </el-form-item>
  25. <el-form-item label="Last Start">
  26. <span>{{ props.row.last_start_time }}</span>
  27. </el-form-item>
  28. <el-form-item label="Last Close">
  29. <span>{{ props.row.last_close_time }}</span>
  30. </el-form-item>
  31. </el-form>
  32. </template>
  33. </el-table-column>
  34. <el-table-column label="Name" prop="name" sortable />
  35. <el-table-column label="Connections" prop="conns" sortable />
  36. <el-table-column label="Traffic In" prop="traffic_in" :formatter="formatTrafficIn" sortable />
  37. <el-table-column label="Traffic Out" prop="traffic_out" :formatter="formatTrafficOut" sortable />
  38. <el-table-column label="status" prop="status" sortable>
  39. <template slot-scope="scope">
  40. <el-tag v-if="scope.row.status === 'online'" type="success">{{ scope.row.status }}</el-tag>
  41. <el-tag v-else type="danger">{{ scope.row.status }}</el-tag>
  42. </template>
  43. </el-table-column>
  44. </el-table>
  45. </div>
  46. </template>
  47. <script>
  48. import Humanize from 'humanize-plus'
  49. import Traffic from './Traffic.vue'
  50. import { StcpProxy } from '../utils/proxy.js'
  51. export default {
  52. components: {
  53. 'my-traffic-chart': Traffic
  54. },
  55. data() {
  56. return {
  57. proxies: []
  58. }
  59. },
  60. mounted() {
  61. this.initData()
  62. },
  63. methods: {
  64. formatTrafficIn(row, column) {
  65. return Humanize.fileSize(row.traffic_in)
  66. },
  67. formatTrafficOut(row, column) {
  68. return Humanize.fileSize(row.traffic_out)
  69. },
  70. async initData() {
  71. const json = await this.$fetch('proxy/stcp')
  72. if (!json) return
  73. this.proxies = []
  74. for (const proxyStats of json.proxies) {
  75. this.proxies.push(new StcpProxy(proxyStats))
  76. }
  77. }
  78. }
  79. }
  80. </script>
  81. <style>
  82. </style>