+
暂无符合条件个股
完整数据下无信号会保留为空,不补造候选。
diff --git a/next/frontend/src/pages/screener/StagePanel.vue b/next/frontend/src/pages/screener/StagePanel.vue
index eedf354..14b6bc1 100644
--- a/next/frontend/src/pages/screener/StagePanel.vue
+++ b/next/frontend/src/pages/screener/StagePanel.vue
@@ -9,7 +9,18 @@ const emit = defineEmits<{ track: [run: ScreenerRun, candidate: Candidate] }>();
const selected = ref(props.runs[0]?.strategy_id ?? props.strategies[0]?.id ?? "");
const run = computed(() => props.runs.find((item) => item.strategy_id === selected.value));
const strategy = computed(() => props.strategies.find((item) => item.id === (run.value?.strategy_id ?? selected.value)));
-const hasRun = computed(() => Boolean(run.value));
+const runState = computed<"idle" | "running" | "failed" | "completed">(() => {
+ if (!run.value || run.value.status === "pending") return "idle";
+ if (run.value.status === "running") return "running";
+ if (run.value.status === "failed") return "failed";
+ return "completed";
+});
+const runStateLabel = computed(() => ({
+ idle: "未执行",
+ running: "执行中",
+ failed: "失败",
+ completed: "已完成",
+})[runState.value]);
watch(
() => props.runs,
@@ -26,10 +37,13 @@ watch(
当前阶段自动候选{{ strategy?.display_name ?? "等待盘后判定" }}
{{ strategy?.description ?? "每日收盘数据定稿后自动生成,结果允许为空。" }}
- 盘后自动
+ {{ runStateLabel }}
- 阶段识别策略匹配自动计算结果归档
+ 阶段识别
+ 策略匹配
+ 自动计算
+ 结果归档