Просмотр исходного кода

feat: add auto-refresh functionality for environment list with configurable interval

Jacky 1 месяц назад
Родитель
Сommit
bb18ac84b2
2 измененных файлов с 90 добавлено и 1 удалено
  1. 10 1
      api/cluster/environment.go
  2. 80 0
      app/src/views/environments/list/Environment.vue

+ 10 - 1
api/cluster/environment.go

@@ -48,7 +48,16 @@ func GetEnvironmentList(c *gin.Context) {
 
 	core.SetTransformer(func(m *model.Environment) any {
 		return analytic.GetNode(m)
-	}).PagingList()
+	})
+
+	data, ok := core.ListAllData()
+	if !ok {
+		return
+	}
+
+	c.JSON(http.StatusOK, model.DataList{
+		Data: data,
+	})
 }
 
 func GetAllEnabledEnvironment(c *gin.Context) {

+ 80 - 0
app/src/views/environments/list/Environment.vue

@@ -13,6 +13,54 @@ const loadingFromSettings = ref(false)
 const loadingReload = ref(false)
 const loadingRestart = ref(false)
 
+// Auto refresh logic
+const isAutoRefresh = ref(true)
+const autoRefreshInterval = ref(5) // seconds
+const autoRefreshTimer = ref<NodeJS.Timeout | null>(null)
+
+function startAutoRefresh() {
+  if (autoRefreshTimer.value) {
+    clearInterval(autoRefreshTimer.value)
+  }
+
+  autoRefreshTimer.value = setInterval(() => {
+    if (curd.value) {
+      curd.value.refresh()
+    }
+  }, autoRefreshInterval.value * 1000)
+}
+
+function stopAutoRefresh() {
+  if (autoRefreshTimer.value) {
+    clearInterval(autoRefreshTimer.value)
+    autoRefreshTimer.value = null
+  }
+}
+
+// Watch for auto refresh state changes
+watch(isAutoRefresh, newValue => {
+  if (newValue) {
+    startAutoRefresh()
+    message.success($gettext('Auto refresh enabled'))
+  }
+  else {
+    stopAutoRefresh()
+    message.success($gettext('Auto refresh disabled'))
+  }
+})
+
+// Initialize auto refresh on mount if enabled
+onMounted(() => {
+  if (isAutoRefresh.value) {
+    startAutoRefresh()
+  }
+})
+
+// Clean up timer on component unmount
+onBeforeUnmount(() => {
+  stopAutoRefresh()
+})
+
 function loadFromSettings() {
   loadingFromSettings.value = true
   environment.load_from_settings().then(() => {
@@ -78,6 +126,7 @@ const inTrash = computed(() => {
             disabled: !record.status,
           }),
         },
+        pagination: false,
       }"
       :title="$gettext('Environments')"
       :api="environment"
@@ -89,6 +138,37 @@ const inTrash = computed(() => {
           {{ $gettext('Load from settings') }}
         </AButton>
       </template>
+
+      <template #afterListActions>
+        <div class="flex items-center gap-2">
+          <ASelect
+            v-model:value="autoRefreshInterval"
+            size="small"
+            class="w-16"
+            :disabled="isAutoRefresh"
+            @change="isAutoRefresh && startAutoRefresh()"
+          >
+            <ASelectOption :value="5">
+              5s
+            </ASelectOption>
+            <ASelectOption :value="10">
+              10s
+            </ASelectOption>
+            <ASelectOption :value="30">
+              30s
+            </ASelectOption>
+            <ASelectOption :value="60">
+              60s
+            </ASelectOption>
+          </ASelect>
+
+          <span>{{ $gettext('Auto Refresh') }}</span>
+          <ASwitch
+            v-model:checked="isAutoRefresh"
+            size="small"
+          />
+        </div>
+      </template>
     </StdCurd>
 
     <BatchUpgrader ref="refUpgrader" @success="curd.refresh()" />