index.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <template>
  2. <div v-if="errorLogs.length > 0" class="errLog-container">
  3. <el-badge :is-dot="true" @click="dialogTableVisible = true">
  4. <el-button style="padding: 8px 10px;" size="small" type="danger">
  5. <svg-icon name="bug" />
  6. </el-button>
  7. </el-badge>
  8. <el-dialog v-model="dialogTableVisible" width="80%" append-to-body>
  9. <template #title>
  10. <span style="padding-right: 10px;">错误日志</span>
  11. <el-button
  12. size="mini"
  13. type="primary"
  14. icon="el-icon-delete"
  15. @click="clearAll"
  16. >
  17. Clear All
  18. </el-button>
  19. </template>
  20. <el-table :data="errorLogs" border>
  21. <el-table-column label="Message">
  22. <template #default="{ row }">
  23. <div style="margin-bottom:10px">
  24. <span class="message-title" style="padding-right: 16px;">
  25. 页面:
  26. </span>
  27. <el-tag type="success">
  28. {{ row.url }}
  29. </el-tag>
  30. </div>
  31. <div style="margin-bottom:10px">
  32. <span class="message-title">事件源:</span>
  33. <el-tag type="primary">
  34. {{ row.info && row.info }}
  35. </el-tag>
  36. </div>
  37. <div style="margin-bottom:10px">
  38. <span class="message-title">错误提示:</span>
  39. <el-tag type="danger">
  40. {{ row.err && row.err.message }}
  41. </el-tag>
  42. </div>
  43. <div v-if="row.err && row.err.config">
  44. <span class="message-title" style="padding-right: 16px;">
  45. 接口地址:
  46. </span>
  47. <el-tag type="info">
  48. {{ row.err && row.err.config && row.err.config.url }}
  49. </el-tag>
  50. </div>
  51. </template>
  52. </el-table-column>
  53. <el-table-column label="Stack">
  54. <template #default="{ row }">
  55. {{ row.err && row.err.stack }}
  56. </template>
  57. </el-table-column>
  58. </el-table>
  59. </el-dialog>
  60. </div>
  61. </template>
  62. <script>
  63. import { defineComponent, ref } from 'vue'
  64. import { useErrorlog } from '@/pinia/modules/errorLog'
  65. import { storeToRefs } from 'pinia'
  66. export default defineComponent({
  67. name: 'ErrorLog',
  68. setup() {
  69. const dialogTableVisible = ref(false)
  70. const errorStore = useErrorlog()
  71. const { logs: errorLogs } = storeToRefs(errorStore)
  72. const { clearErrorLog } = errorStore
  73. const clearAll = () => {
  74. dialogTableVisible.value = false
  75. clearErrorLog()
  76. }
  77. return {
  78. dialogTableVisible,
  79. errorLogs,
  80. clearAll,
  81. }
  82. },
  83. })
  84. </script>
  85. <style scoped>
  86. .errLog-container {
  87. margin-right: 10px;
  88. }
  89. .message-title {
  90. font-size: 16px;
  91. color: #333;
  92. font-weight: bold;
  93. padding-right: 8px;
  94. }
  95. </style>