ProcessingStatus.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <script setup lang="tsx">
  2. import { SyncOutlined } from '@ant-design/icons-vue'
  3. import { useSSE } from '@/composables/useSSE'
  4. import { useGlobalStore } from '@/pinia'
  5. const { connect } = useSSE()
  6. const globalStore = useGlobalStore()
  7. const { processingStatus } = storeToRefs(globalStore)
  8. connect({
  9. url: '/api/system/processing',
  10. onMessage: data => {
  11. processingStatus.value = data
  12. },
  13. })
  14. const isProcessing = computed(() => {
  15. return Object.values(processingStatus.value).some(v => v)
  16. })
  17. </script>
  18. <template>
  19. <div v-if="isProcessing">
  20. <APopover>
  21. <template #content>
  22. <div>
  23. <div>
  24. <ABadge
  25. v-if="processingStatus.index_scanning"
  26. status="processing"
  27. :text="$gettext('Indexing...')"
  28. />
  29. </div>
  30. <div>
  31. <ABadge
  32. v-if="processingStatus.auto_cert_processing"
  33. status="processing"
  34. :text="$gettext('AutoCert is running...')"
  35. />
  36. </div>
  37. </div>
  38. </template>
  39. <SyncOutlined spin />
  40. </APopover>
  41. </div>
  42. </template>