SelfCheck.vue 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. <script setup lang="ts">
  2. import { CheckCircleOutlined, CloseCircleOutlined, WarningOutlined } from '@ant-design/icons-vue'
  3. import { useSelfCheckStore } from './store'
  4. import { taskManager } from './tasks'
  5. const store = useSelfCheckStore()
  6. const { data, loading, fixing } = storeToRefs(store)
  7. onMounted(() => {
  8. store.check()
  9. })
  10. </script>
  11. <template>
  12. <ACard :title="$gettext('Self Check')">
  13. <template #extra>
  14. <AButton
  15. type="link"
  16. size="small"
  17. :loading="loading"
  18. @click="store.check"
  19. >
  20. {{ $gettext('Recheck') }}
  21. </AButton>
  22. </template>
  23. <AList>
  24. <AListItem v-for="(item, index) in data" :key="index">
  25. <template v-if="item.status === 'error'" #actions>
  26. <AButton type="link" size="small" :loading="fixing[item.name]" @click="store.fix(item.name)">
  27. {{ $gettext('Attempt to fix') }}
  28. </AButton>
  29. </template>
  30. <AListItemMeta>
  31. <template #title>
  32. {{ taskManager.getTask(item.name)?.name?.() }}
  33. </template>
  34. <template #description>
  35. <div>
  36. {{ taskManager.getTask(item.name)?.description?.() }}
  37. </div>
  38. <div v-if="item.status !== 'success'" class="mt-1">
  39. <ATag :color="item.status === 'warning' ? 'warning' : 'error'">
  40. {{ item.message || item.err?.message || $gettext('Unknown issue') }}
  41. </ATag>
  42. </div>
  43. </template>
  44. <template #avatar>
  45. <div class="text-23px">
  46. <CheckCircleOutlined v-if="item.status === 'success'" class="text-green" />
  47. <WarningOutlined v-else-if="item.status === 'warning'" class="text-yellow" />
  48. <CloseCircleOutlined v-else class="text-red" />
  49. </div>
  50. </template>
  51. </AListItemMeta>
  52. </AListItem>
  53. </AList>
  54. </ACard>
  55. </template>
  56. <style scoped lang="less">
  57. :deep(.ant-list-item-meta) {
  58. align-items: center !important;
  59. }
  60. .text-yellow {
  61. color: #faad14;
  62. }
  63. </style>