From b4bab7ab32edba7cb5f2f68ddf81e36027c8fd55 Mon Sep 17 00:00:00 2001
From: may <1742057357@qq.com>
Date: Sat, 24 Oct 2026 12:27:32 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1?=
=?UTF-8?q?=E5=88=97=E8=A1=A8=E9=97=B4=E9=9A=94/=E6=97=B6=E7=82=B9?=
=?UTF-8?q?=E5=88=97=E4=BA=BA=E6=80=A7=E5=8C=96=E5=B1=95=E7=A4=BA?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 一次性延迟/固定间隔的 ISO-8601 时长(PT30S、PT1H30M)转中文(30 秒后 / 每 1 小时)
- 每日时点的 JSON 数组(["09:00"])转"每日 09:00",多时点顿号分隔
- 解析失败或未知格式按原文兜底,列表与详情抽屉共用格式化
---
src/views/workflow/timer/index.vue | 52 ++++++++++++++++++++++++++++--
1 file changed, 50 insertions(+), 2 deletions(-)
diff --git a/src/views/workflow/timer/index.vue b/src/views/workflow/timer/index.vue
index 3845668c..3900897f 100644
--- a/src/views/workflow/timer/index.vue
+++ b/src/views/workflow/timer/index.vue
@@ -124,7 +124,11 @@
{{ TRIGGER_TYPE_NAMES[scope.row.triggerType || ''] || scope.row.triggerType || '-' }}
-
+
+
+ {{ formatTriggerInterval(scope.row.triggerType, scope.row.triggerInterval) }}
+
+
@@ -177,7 +181,7 @@
{{ detail.eventTypeName || '-' }}
{{ detail.eventName || '-' }}
{{ TRIGGER_TYPE_NAMES[detail.triggerType || ''] || '-' }}
- {{ detail.triggerInterval || '-' }}
+ {{ formatTriggerInterval(detail.triggerType, detail.triggerInterval) }}
{{ detail.timezone || '-' }}
{{ detail.nextTriggerAt || '-' }}
{{ detail.statusName || detail.status }}
@@ -249,6 +253,50 @@ const TRIGGER_TYPE_NAMES: Record = {
POINT_IN_TIME: '每日时点'
};
+/** ISO-8601 时长转中文:PT30S → "30 秒",PT1H30M → "1 小时 30 分钟",解析失败返回原文 */
+function formatIsoDuration(value: string): string {
+ const m = /^P(?:(\d+)D)?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/.exec(value.trim());
+ if (!m) return value;
+ const parts: string[] = [];
+ if (m[1]) parts.push(`${m[1]} 天`);
+ if (m[2]) parts.push(`${m[2]} 小时`);
+ if (m[3]) parts.push(`${m[3]} 分钟`);
+ if (m[4]) parts.push(`${m[4]} 秒`);
+ return parts.length ? parts.join(' ') : value;
+}
+
+/** 间隔/时点列展示:按触发策略把原始值转成可读描述,解析失败按原文展示 */
+function formatTriggerInterval(triggerType: string | undefined, triggerInterval: string | undefined): string {
+ const raw = (triggerInterval || '').trim();
+ if (!raw) return '-';
+ try {
+ if (triggerType === 'POINT_IN_TIME') {
+ const arr = JSON.parse(raw);
+ const times = Array.isArray(arr) ? arr : [raw];
+ return times.length ? `每日 ${times.map((t: string) => String(t)).join('、')}` : raw;
+ }
+ if (triggerType === 'AFTER') {
+ let value = raw;
+ try {
+ // 兼容 JSON 数组存储;纯时长字符串(非合法 JSON)按原文处理
+ const parsed = JSON.parse(raw);
+ if (Array.isArray(parsed) && parsed.length) value = String(parsed[0]);
+ } catch {
+ // 纯时长字符串
+ }
+ const dur = formatIsoDuration(value);
+ return dur === value ? raw : `${dur}后`;
+ }
+ if (triggerType === 'FIXED') {
+ const dur = formatIsoDuration(raw);
+ return dur === raw ? raw : `每 ${dur}`;
+ }
+ } catch {
+ // 非法 JSON 或未知格式,按原文展示
+ }
+ return raw;
+}
+
const { showSearch } = useSearchToggle();
const { loading, withLoading } = useLoading(true);
const queryFormRef = ref();