@hkyhy/marsun-components-core 0.1.135 → 0.1.137

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -136,6 +136,8 @@ node scripts/version-check.mjs --apply # → 0.1.99
136
136
 
137
137
  也可在 Actions 中手动运行 **Publish npm**,填写已有 tag 重新发布。
138
138
 
139
+ - 2026-10-22:`v0.1.137` — InboxBell:`action_assigned_ack` 恒「查看任务」(禁「去执行」);Related S3-1721
140
+ - 2026-10-21:`v0.1.136` — MessageCenter 推送规则级别改为业务 DI `levelOptions`(禁写死 L1/L2/L3;S3 可注入 L2+)
139
141
  - 2026-10-16:`v0.1.135` — 新建跟踪任务分配人/执行人必填星与任务类型同为 `is-req`(去掉 `marsun-form-info-is-req`)
140
142
  - 2026-10-14:`v0.1.134` — InboxBell Drawer「清空未读」可选 `markAllRead`;Demo/vitest
141
143
  - 2026-10-12:`v0.1.133` — DispositionBar 短徽章;模板来源 Tag;ActionList 去壳/铃铛摘要色;执行门禁 SSOT;vite external 子路径防双 React(feat 分支曾误标 0.1.135 未进 main,顺号回正)
@@ -5,6 +5,7 @@ const l = {
5
5
  dispose_escalation: "处置升级",
6
6
  action_overdue: "行动超期",
7
7
  action_assigned: "任务分配",
8
+ action_assigned_ack: "分配确认",
8
9
  action_status_changed: "状态变更",
9
10
  action_claimed: "任务认领",
10
11
  action_followed: "任务跟进",
@@ -14,82 +15,83 @@ const l = {
14
15
  "remind.claim_due": "claim_due",
15
16
  "action.overdue": "action_overdue",
16
17
  "action.assigned": "action_assigned",
18
+ "action.assigned_ack": "action_assigned_ack",
17
19
  "action.status_changed": "action_status_changed",
18
20
  "action.status": "action_status_changed",
19
21
  "action.due_soon": "action_overdue",
20
22
  "action.claimed": "action_claimed",
21
23
  "action.followed": "action_followed"
22
24
  }, f = /* @__PURE__ */ new Set(["done", "reviewed", "cancelled", "closed"]);
23
- function m(i) {
24
- const e = String(i || "").trim().toLowerCase();
25
- if (!e) return "";
26
- if (l[e]) return e;
27
- if (d[e]) return d[e];
28
- const t = e.replace(/\./g, "_");
29
- return l[t] ? t : e;
25
+ function m(e) {
26
+ const i = String(e || "").trim().toLowerCase();
27
+ if (!i) return "";
28
+ if (l[i]) return i;
29
+ if (d[i]) return d[i];
30
+ const t = i.replace(/\./g, "_");
31
+ return l[t] ? t : i;
30
32
  }
31
- function p(i) {
32
- return !!(i && l[i]);
33
+ function p(e) {
34
+ return !!(e && l[e]);
33
35
  }
34
- function s(i) {
35
- const e = [i.eventKey, i.scene, i.category].map((t) => m(t));
36
- for (const t of e)
36
+ function s(e) {
37
+ const i = [e.eventKey, e.scene, e.category].map((t) => m(t));
38
+ for (const t of i)
37
39
  if (p(t)) return t;
38
- return e.find(Boolean) || "";
40
+ return i.find(Boolean) || "";
39
41
  }
40
- function k(i) {
41
- const e = s(i);
42
- return e && l[e] || "";
42
+ function b(e) {
43
+ const i = s(e);
44
+ return i && l[i] || "";
43
45
  }
44
- function w(i) {
45
- const e = s(i);
46
- return e === "claim_due" || e === "claim_overdue" || e === "action_overdue" || e === "action_assigned" || e === "action_status_changed" || e === "action_claimed" || e === "action_followed" || e === "inspect_alert";
46
+ function g(e) {
47
+ const i = s(e);
48
+ return i === "claim_due" || i === "claim_overdue" || i === "action_overdue" || i === "action_assigned" || i === "action_assigned_ack" || i === "action_status_changed" || i === "action_claimed" || i === "action_followed" || i === "inspect_alert";
47
49
  }
48
- function _(i) {
49
- return String(i || "").trim().toLowerCase();
50
+ function _(e) {
51
+ return String(e || "").trim().toLowerCase();
50
52
  }
51
- function v(i) {
52
- return f.has(_(i));
53
+ function k(e) {
54
+ return f.has(_(e));
53
55
  }
54
- function y(i, e) {
55
- return String(i.messageType || "").trim().toLowerCase() === "action" ? !0 : e.startsWith("action_") || e === "action_overdue" || e === "action_assigned" || e === "action_status_changed" || e === "action_claimed" || e === "action_followed";
56
+ function v(e, i) {
57
+ return String(e.messageType || "").trim().toLowerCase() === "action" ? !0 : i.startsWith("action_") || i === "action_overdue" || i === "action_assigned" || i === "action_assigned_ack" || i === "action_status_changed" || i === "action_claimed" || i === "action_followed";
56
58
  }
57
- function c(i, e) {
58
- return e ? { primary: { kind: "view_task", label: "查看任务" } } : String(i.href || "").trim() ? { primary: { kind: "view_href", label: "查看" } } : { primary: { kind: "open_actions", label: "查看任务" } };
59
+ function c(e, i) {
60
+ return i ? { primary: { kind: "view_task", label: "查看任务" } } : String(e.href || "").trim() ? { primary: { kind: "view_href", label: "查看" } } : { primary: { kind: "open_actions", label: "查看任务" } };
59
61
  }
60
- function g(i) {
61
- const e = s(i), t = String(i.actionId || "").trim(), n = String(i.alertId || "").trim(), r = _(i.actionStatus), a = v(r), o = !!i.started || a || r === "in_progress" || e === "action_followed" || e === "action_claimed", u = !!i.claimed || !!t || e === "action_claimed";
62
- return e === "claim_due" || e === "claim_overdue" ? u ? t ? { primary: { kind: "view_task", label: "查看任务" } } : { primary: { kind: "view_alert", label: "查看预警" } } : { primary: { kind: "claim_alert", label: "去认领" } } : e === "action_claimed" || e === "action_followed" || e === "action_status_changed" ? c(i, t) : e === "action_overdue" || e === "action_assigned" ? a || o ? c(i, t) : t ? { primary: { kind: "start_action", label: "去执行" } } : String(i.href || "").trim() ? { primary: { kind: "view_href", label: "查看" } } : {} : e === "dispose_escalation" ? t ? {
62
+ function w(e) {
63
+ const i = s(e), t = String(e.actionId || "").trim(), a = String(e.alertId || "").trim(), n = _(e.actionStatus), r = k(n), o = !!e.started || r || n === "in_progress" || i === "action_followed" || i === "action_claimed", u = !!e.claimed || !!t || i === "action_claimed";
64
+ return i === "claim_due" || i === "claim_overdue" ? u ? t ? { primary: { kind: "view_task", label: "查看任务" } } : { primary: { kind: "view_alert", label: "查看预警" } } : { primary: { kind: "claim_alert", label: "去认领" } } : i === "action_claimed" || i === "action_followed" || i === "action_status_changed" || i === "action_assigned_ack" ? c(e, t) : i === "action_overdue" || i === "action_assigned" ? r || o ? c(e, t) : t ? { primary: { kind: "start_action", label: "去执行" } } : String(e.href || "").trim() ? { primary: { kind: "view_href", label: "查看" } } : {} : i === "dispose_escalation" ? t ? {
63
65
  primary: { kind: "view_task", label: "查看任务" },
64
- secondary: n ? { kind: "view_alert", label: "查看预警" } : void 0
66
+ secondary: a ? { kind: "view_alert", label: "查看预警" } : void 0
65
67
  } : {
66
68
  primary: { kind: "view_alert", label: "查看预警" },
67
69
  secondary: { kind: "open_actions", label: "去任务跟踪" }
68
- } : e.startsWith("rca") || e === "rca_approved" ? { primary: { kind: "view_rca", label: "查看根因" } } : e === "inspect_alert" || e === "l3_parallel" ? t ? {
70
+ } : i.startsWith("rca") || i === "rca_approved" ? { primary: { kind: "view_rca", label: "查看根因" } } : i === "inspect_alert" || i === "l3_parallel" ? t ? {
69
71
  primary: { kind: "view_alert", label: "查看预警" },
70
72
  secondary: { kind: "view_task", label: "查看任务" }
71
- } : { primary: { kind: "view_alert", label: "查看预警" } } : y(i, e) ? a || o || e === "action_claimed" ? c(i, t) : t ? { primary: { kind: "start_action", label: "去执行" } } : c(i, t) : n ? t ? {
73
+ } : { primary: { kind: "view_alert", label: "查看预警" } } : v(e, i) ? r || o || i === "action_claimed" ? c(e, t) : t ? { primary: { kind: "start_action", label: "去执行" } } : c(e, t) : a ? t ? {
72
74
  primary: { kind: "view_alert", label: "查看预警" },
73
75
  secondary: { kind: "view_task", label: "查看任务" }
74
- } : { primary: { kind: "view_alert", label: "查看预警" } } : t ? a || o ? { primary: { kind: "view_task", label: "查看任务" } } : { primary: { kind: "start_action", label: "去执行" } } : String(i.href || "").trim() ? { primary: { kind: "view_href", label: "查看" } } : {};
76
+ } : { primary: { kind: "view_alert", label: "查看预警" } } : t ? r || o ? { primary: { kind: "view_task", label: "查看任务" } } : { primary: { kind: "start_action", label: "去执行" } } : String(e.href || "").trim() ? { primary: { kind: "view_href", label: "查看" } } : {};
75
77
  }
76
- function b(i) {
77
- const e = (r) => r && !r.disabled ? { ...r, disabled: void 0 } : void 0;
78
- let t = e(i.primary), n = e(i.secondary);
79
- return !t && n && (t = n, n = void 0), t && n && t.kind === n.kind && (n = void 0), { primary: t, secondary: n };
78
+ function y(e) {
79
+ const i = (n) => n && !n.disabled ? { ...n, disabled: void 0 } : void 0;
80
+ let t = i(e.primary), a = i(e.secondary);
81
+ return !t && a && (t = a, a = void 0), t && a && t.kind === a.kind && (a = void 0), { primary: t, secondary: a };
80
82
  }
81
- function S(i, e) {
82
- const t = b(i), n = (o) => o && o.kind === "create_task" ? void 0 : o;
83
- let r = n(t.primary), a = n(t.secondary);
84
- return !r && a && (r = a, a = void 0), { primary: r, secondary: a };
83
+ function S(e, i) {
84
+ const t = y(e), a = (o) => o && o.kind === "create_task" ? void 0 : o;
85
+ let n = a(t.primary), r = a(t.secondary);
86
+ return !n && r && (n = r, r = void 0), { primary: n, secondary: r };
85
87
  }
86
88
  export {
87
89
  S as filterInboxActionsForHost,
88
- k as inboxSceneLabel,
89
- w as isInboxButtonDriven,
90
- v as isTerminalActionStatus,
91
- b as normalizeInboxActions,
92
- g as resolveInboxItemActions,
90
+ b as inboxSceneLabel,
91
+ g as isInboxButtonDriven,
92
+ k as isTerminalActionStatus,
93
+ y as normalizeInboxActions,
94
+ w as resolveInboxItemActions,
93
95
  s as resolveInboxSceneKey
94
96
  };
95
97
  //# sourceMappingURL=inboxItemActions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"inboxItemActions.js","sources":["../../../../../src/components/Tools/Inbox/InboxBell/inboxItemActions.ts"],"sourcesContent":["export type InboxItemActionKind =\n | 'view_alert'\n | 'claim_alert'\n | 'start_action'\n | 'view_task'\n /** @deprecated 铃铛永不解析;保留类型以免破对外联合 */\n | 'create_task'\n | 'open_actions'\n | 'view_rca'\n | 'view_href';\n\nexport type InboxItemQuickAction = {\n kind: InboxItemActionKind;\n label: string;\n /** 解析中间态用;渲染前会被 normalize 丢掉,禁止灰显占位 */\n disabled?: boolean;\n};\n\nexport type InboxItemActionsResolved = {\n primary?: InboxItemQuickAction;\n secondary?: InboxItemQuickAction;\n};\n\nexport type InboxItemActionSource = {\n category?: string | null;\n scene?: string | null;\n eventKey?: string | null;\n messageType?: string | null;\n alertId?: string | null;\n actionId?: string | null;\n claimed?: boolean;\n started?: boolean;\n /** 行动项当前状态:approved/in_progress/done/reviewed/cancelled 等 */\n actionStatus?: string | null;\n href?: string | null;\n};\n\nconst SCENE_LABEL: Record<string, string> = {\n inspect_alert: '巡检预警',\n claim_due: '认领到期',\n claim_overdue: '认领到期',\n dispose_escalation: '处置升级',\n action_overdue: '行动超期',\n action_assigned: '任务分配',\n action_status_changed: '状态变更',\n action_claimed: '任务认领',\n action_followed: '任务跟进',\n l3_parallel: 'L3并行',\n};\n\nconst SCENE_ALIAS: Record<string, string> = {\n 'alert.inspect': 'inspect_alert',\n 'remind.claim_due': 'claim_due',\n 'action.overdue': 'action_overdue',\n 'action.assigned': 'action_assigned',\n 'action.status_changed': 'action_status_changed',\n 'action.status': 'action_status_changed',\n 'action.due_soon': 'action_overdue',\n 'action.claimed': 'action_claimed',\n 'action.followed': 'action_followed',\n};\n\nconst TERMINAL_STATUS = new Set(['done', 'reviewed', 'cancelled', 'closed']);\n\nfunction canonScene(raw?: string | null): string {\n const c = String(raw || '')\n .trim()\n .toLowerCase();\n if (!c) return '';\n if (SCENE_LABEL[c]) return c;\n if (SCENE_ALIAS[c]) return SCENE_ALIAS[c];\n const underscored = c.replace(/\\./g, '_');\n if (SCENE_LABEL[underscored]) return underscored;\n return c;\n}\n\n/** 是否已映射到 SCENE_LABEL 已知键(非原样回落的未知串) */\nfunction isKnownSceneKey(key: string): boolean {\n return Boolean(key && SCENE_LABEL[key]);\n}\n\n/**\n * 场景键:优先能映射到已知场景的 eventKey → scene → category;\n * 避免脏 category 压过正确 eventKey(如 action.status_changed)。\n */\nexport function resolveInboxSceneKey(item: InboxItemActionSource): string {\n const candidates = [item.eventKey, item.scene, item.category].map((x) => canonScene(x));\n for (const c of candidates) {\n if (isKnownSceneKey(c)) return c;\n }\n return candidates.find(Boolean) || '';\n}\n\nexport function inboxSceneLabel(item: InboxItemActionSource): string {\n const key = resolveInboxSceneKey(item);\n if (!key) return '';\n return SCENE_LABEL[key] || '';\n}\n\nexport function isInboxButtonDriven(item: InboxItemActionSource): boolean {\n const c = resolveInboxSceneKey(item);\n return (\n c === 'claim_due' ||\n c === 'claim_overdue' ||\n c === 'action_overdue' ||\n c === 'action_assigned' ||\n c === 'action_status_changed' ||\n c === 'action_claimed' ||\n c === 'action_followed' ||\n c === 'inspect_alert'\n );\n}\n\nfunction normStatus(raw?: string | null): string {\n return String(raw || '')\n .trim()\n .toLowerCase();\n}\n\nexport function isTerminalActionStatus(status?: string | null): boolean {\n return TERMINAL_STATUS.has(normStatus(status));\n}\n\nfunction isActionMessage(n: InboxItemActionSource, scene: string): boolean {\n const mt = String(n.messageType || '')\n .trim()\n .toLowerCase();\n if (mt === 'action') return true;\n return (\n scene.startsWith('action_') ||\n scene === 'action_overdue' ||\n scene === 'action_assigned' ||\n scene === 'action_status_changed' ||\n scene === 'action_claimed' ||\n scene === 'action_followed'\n );\n}\n\nfunction viewTaskOrHref(n: InboxItemActionSource, actionId: string): InboxItemActionsResolved {\n if (actionId) return { primary: { kind: 'view_task', label: '查看任务' } };\n if (String(n.href || '').trim()) return { primary: { kind: 'view_href', label: '查看' } };\n return { primary: { kind: 'open_actions', label: '查看任务' } };\n}\n\n/**\n * 解析卡片底栏动作。\n * 约定:禁用态不返回(由 normalize 再保险);终态任务只给「查看任务」;永不解析新建任务。\n */\nexport function resolveInboxItemActions(n: InboxItemActionSource): InboxItemActionsResolved {\n const c = resolveInboxSceneKey(n);\n const actionId = String(n.actionId || '').trim();\n const alertId = String(n.alertId || '').trim();\n const status = normStatus(n.actionStatus);\n const terminal = isTerminalActionStatus(status);\n const started =\n Boolean(n.started) ||\n terminal ||\n status === 'in_progress' ||\n c === 'action_followed' ||\n c === 'action_claimed';\n const claimed = Boolean(n.claimed) || Boolean(actionId) || c === 'action_claimed';\n\n if (c === 'claim_due' || c === 'claim_overdue') {\n if (claimed) {\n return actionId\n ? { primary: { kind: 'view_task', label: '查看任务' } }\n : { primary: { kind: 'view_alert', label: '查看预警' } };\n }\n return { primary: { kind: 'claim_alert', label: '去认领' } };\n }\n\n // 已认领 / 已跟进 / 状态变更:只看任务(勿落「查看预警」)\n if (c === 'action_claimed' || c === 'action_followed' || c === 'action_status_changed') {\n return viewTaskOrHref(n, actionId);\n }\n\n if (c === 'action_overdue' || c === 'action_assigned') {\n if (terminal || started) {\n return viewTaskOrHref(n, actionId);\n }\n if (!actionId) {\n return String(n.href || '').trim() ? { primary: { kind: 'view_href', label: '查看' } } : {};\n }\n return { primary: { kind: 'start_action', label: '去执行' } };\n }\n\n if (c === 'dispose_escalation') {\n if (actionId) {\n return {\n primary: { kind: 'view_task', label: '查看任务' },\n secondary: alertId ? { kind: 'view_alert', label: '查看预警' } : undefined,\n };\n }\n return {\n primary: { kind: 'view_alert', label: '查看预警' },\n secondary: { kind: 'open_actions', label: '去任务跟踪' },\n };\n }\n\n if (c.startsWith('rca') || c === 'rca_approved') {\n return { primary: { kind: 'view_rca', label: '查看根因' } };\n }\n\n if (c === 'inspect_alert' || c === 'l3_parallel') {\n if (actionId) {\n return {\n primary: { kind: 'view_alert', label: '查看预警' },\n secondary: { kind: 'view_task', label: '查看任务' },\n };\n }\n return { primary: { kind: 'view_alert', label: '查看预警' } };\n }\n\n // 行动类消息(含历史 category 空):优先任务,禁止误用「查看预警」\n if (isActionMessage(n, c)) {\n if (terminal || started || c === 'action_claimed') {\n return viewTaskOrHref(n, actionId);\n }\n if (actionId) {\n return { primary: { kind: 'start_action', label: '去执行' } };\n }\n return viewTaskOrHref(n, actionId);\n }\n\n if (alertId) {\n if (actionId) {\n return {\n primary: { kind: 'view_alert', label: '查看预警' },\n secondary: { kind: 'view_task', label: '查看任务' },\n };\n }\n return { primary: { kind: 'view_alert', label: '查看预警' } };\n }\n\n if (actionId) {\n if (terminal || started) return { primary: { kind: 'view_task', label: '查看任务' } };\n return { primary: { kind: 'start_action', label: '去执行' } };\n }\n\n if (String(n.href || '').trim()) {\n return { primary: { kind: 'view_href', label: '查看' } };\n }\n\n return {};\n}\n\n/** 去掉 disabled;主按钮空时把次按钮升格;统一主/次语义 */\nexport function normalizeInboxActions(\n resolved: InboxItemActionsResolved,\n): InboxItemActionsResolved {\n const usable = (a?: InboxItemQuickAction) =>\n a && !a.disabled ? { ...a, disabled: undefined } : undefined;\n let primary = usable(resolved.primary);\n let secondary = usable(resolved.secondary);\n if (!primary && secondary) {\n primary = secondary;\n secondary = undefined;\n }\n if (primary && secondary && primary.kind === secondary.kind) {\n secondary = undefined;\n }\n return { primary, secondary };\n}\n\n/** 铃铛永不展示「新建任务」(解析路径已停产;此处再防御) */\nexport function filterInboxActionsForHost(\n resolved: InboxItemActionsResolved,\n _hasItemAction: boolean,\n): InboxItemActionsResolved {\n const base = normalizeInboxActions(resolved);\n const dropCreate = (a?: InboxItemQuickAction) => (a && a.kind === 'create_task' ? undefined : a);\n let primary = dropCreate(base.primary);\n let secondary = dropCreate(base.secondary);\n if (!primary && secondary) {\n primary = secondary;\n secondary = undefined;\n }\n return { primary, secondary };\n}\n"],"names":["SCENE_LABEL","SCENE_ALIAS","TERMINAL_STATUS","canonScene","raw","c","underscored","isKnownSceneKey","key","resolveInboxSceneKey","item","candidates","x","inboxSceneLabel","isInboxButtonDriven","normStatus","isTerminalActionStatus","status","isActionMessage","n","scene","viewTaskOrHref","actionId","resolveInboxItemActions","alertId","terminal","started","claimed","normalizeInboxActions","resolved","usable","a","primary","secondary","filterInboxActionsForHost","_hasItemAction","base","dropCreate"],"mappings":"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"}
1
+ {"version":3,"file":"inboxItemActions.js","sources":["../../../../../src/components/Tools/Inbox/InboxBell/inboxItemActions.ts"],"sourcesContent":["export type InboxItemActionKind =\n | 'view_alert'\n | 'claim_alert'\n | 'start_action'\n | 'view_task'\n /** @deprecated 铃铛永不解析;保留类型以免破对外联合 */\n | 'create_task'\n | 'open_actions'\n | 'view_rca'\n | 'view_href';\n\nexport type InboxItemQuickAction = {\n kind: InboxItemActionKind;\n label: string;\n /** 解析中间态用;渲染前会被 normalize 丢掉,禁止灰显占位 */\n disabled?: boolean;\n};\n\nexport type InboxItemActionsResolved = {\n primary?: InboxItemQuickAction;\n secondary?: InboxItemQuickAction;\n};\n\nexport type InboxItemActionSource = {\n category?: string | null;\n scene?: string | null;\n eventKey?: string | null;\n messageType?: string | null;\n alertId?: string | null;\n actionId?: string | null;\n claimed?: boolean;\n started?: boolean;\n /** 行动项当前状态:approved/in_progress/done/reviewed/cancelled 等 */\n actionStatus?: string | null;\n href?: string | null;\n};\n\nconst SCENE_LABEL: Record<string, string> = {\n inspect_alert: '巡检预警',\n claim_due: '认领到期',\n claim_overdue: '认领到期',\n dispose_escalation: '处置升级',\n action_overdue: '行动超期',\n action_assigned: '任务分配',\n action_assigned_ack: '分配确认',\n action_status_changed: '状态变更',\n action_claimed: '任务认领',\n action_followed: '任务跟进',\n l3_parallel: 'L3并行',\n};\n\nconst SCENE_ALIAS: Record<string, string> = {\n 'alert.inspect': 'inspect_alert',\n 'remind.claim_due': 'claim_due',\n 'action.overdue': 'action_overdue',\n 'action.assigned': 'action_assigned',\n 'action.assigned_ack': 'action_assigned_ack',\n 'action.status_changed': 'action_status_changed',\n 'action.status': 'action_status_changed',\n 'action.due_soon': 'action_overdue',\n 'action.claimed': 'action_claimed',\n 'action.followed': 'action_followed',\n};\n\nconst TERMINAL_STATUS = new Set(['done', 'reviewed', 'cancelled', 'closed']);\n\nfunction canonScene(raw?: string | null): string {\n const c = String(raw || '')\n .trim()\n .toLowerCase();\n if (!c) return '';\n if (SCENE_LABEL[c]) return c;\n if (SCENE_ALIAS[c]) return SCENE_ALIAS[c];\n const underscored = c.replace(/\\./g, '_');\n if (SCENE_LABEL[underscored]) return underscored;\n return c;\n}\n\n/** 是否已映射到 SCENE_LABEL 已知键(非原样回落的未知串) */\nfunction isKnownSceneKey(key: string): boolean {\n return Boolean(key && SCENE_LABEL[key]);\n}\n\n/**\n * 场景键:优先能映射到已知场景的 eventKey → scene → category;\n * 避免脏 category 压过正确 eventKey(如 action.status_changed)。\n */\nexport function resolveInboxSceneKey(item: InboxItemActionSource): string {\n const candidates = [item.eventKey, item.scene, item.category].map((x) => canonScene(x));\n for (const c of candidates) {\n if (isKnownSceneKey(c)) return c;\n }\n return candidates.find(Boolean) || '';\n}\n\nexport function inboxSceneLabel(item: InboxItemActionSource): string {\n const key = resolveInboxSceneKey(item);\n if (!key) return '';\n return SCENE_LABEL[key] || '';\n}\n\nexport function isInboxButtonDriven(item: InboxItemActionSource): boolean {\n const c = resolveInboxSceneKey(item);\n return (\n c === 'claim_due' ||\n c === 'claim_overdue' ||\n c === 'action_overdue' ||\n c === 'action_assigned' ||\n c === 'action_assigned_ack' ||\n c === 'action_status_changed' ||\n c === 'action_claimed' ||\n c === 'action_followed' ||\n c === 'inspect_alert'\n );\n}\n\nfunction normStatus(raw?: string | null): string {\n return String(raw || '')\n .trim()\n .toLowerCase();\n}\n\nexport function isTerminalActionStatus(status?: string | null): boolean {\n return TERMINAL_STATUS.has(normStatus(status));\n}\n\nfunction isActionMessage(n: InboxItemActionSource, scene: string): boolean {\n const mt = String(n.messageType || '')\n .trim()\n .toLowerCase();\n if (mt === 'action') return true;\n return (\n scene.startsWith('action_') ||\n scene === 'action_overdue' ||\n scene === 'action_assigned' ||\n scene === 'action_assigned_ack' ||\n scene === 'action_status_changed' ||\n scene === 'action_claimed' ||\n scene === 'action_followed'\n );\n}\n\nfunction viewTaskOrHref(n: InboxItemActionSource, actionId: string): InboxItemActionsResolved {\n if (actionId) return { primary: { kind: 'view_task', label: '查看任务' } };\n if (String(n.href || '').trim()) return { primary: { kind: 'view_href', label: '查看' } };\n return { primary: { kind: 'open_actions', label: '查看任务' } };\n}\n\n/**\n * 解析卡片底栏动作。\n * 约定:禁用态不返回(由 normalize 再保险);终态任务只给「查看任务」;永不解析新建任务。\n */\nexport function resolveInboxItemActions(n: InboxItemActionSource): InboxItemActionsResolved {\n const c = resolveInboxSceneKey(n);\n const actionId = String(n.actionId || '').trim();\n const alertId = String(n.alertId || '').trim();\n const status = normStatus(n.actionStatus);\n const terminal = isTerminalActionStatus(status);\n const started =\n Boolean(n.started) ||\n terminal ||\n status === 'in_progress' ||\n c === 'action_followed' ||\n c === 'action_claimed';\n const claimed = Boolean(n.claimed) || Boolean(actionId) || c === 'action_claimed';\n\n if (c === 'claim_due' || c === 'claim_overdue') {\n if (claimed) {\n return actionId\n ? { primary: { kind: 'view_task', label: '查看任务' } }\n : { primary: { kind: 'view_alert', label: '查看预警' } };\n }\n return { primary: { kind: 'claim_alert', label: '去认领' } };\n }\n\n // 已认领 / 已跟进 / 状态变更 / 分配人确认:只看任务(勿落「去执行」「查看预警」)\n if (\n c === 'action_claimed' ||\n c === 'action_followed' ||\n c === 'action_status_changed' ||\n c === 'action_assigned_ack'\n ) {\n return viewTaskOrHref(n, actionId);\n }\n\n if (c === 'action_overdue' || c === 'action_assigned') {\n if (terminal || started) {\n return viewTaskOrHref(n, actionId);\n }\n if (!actionId) {\n return String(n.href || '').trim() ? { primary: { kind: 'view_href', label: '查看' } } : {};\n }\n return { primary: { kind: 'start_action', label: '去执行' } };\n }\n\n if (c === 'dispose_escalation') {\n if (actionId) {\n return {\n primary: { kind: 'view_task', label: '查看任务' },\n secondary: alertId ? { kind: 'view_alert', label: '查看预警' } : undefined,\n };\n }\n return {\n primary: { kind: 'view_alert', label: '查看预警' },\n secondary: { kind: 'open_actions', label: '去任务跟踪' },\n };\n }\n\n if (c.startsWith('rca') || c === 'rca_approved') {\n return { primary: { kind: 'view_rca', label: '查看根因' } };\n }\n\n if (c === 'inspect_alert' || c === 'l3_parallel') {\n if (actionId) {\n return {\n primary: { kind: 'view_alert', label: '查看预警' },\n secondary: { kind: 'view_task', label: '查看任务' },\n };\n }\n return { primary: { kind: 'view_alert', label: '查看预警' } };\n }\n\n // 行动类消息(含历史 category 空):优先任务,禁止误用「查看预警」\n if (isActionMessage(n, c)) {\n if (terminal || started || c === 'action_claimed') {\n return viewTaskOrHref(n, actionId);\n }\n if (actionId) {\n return { primary: { kind: 'start_action', label: '去执行' } };\n }\n return viewTaskOrHref(n, actionId);\n }\n\n if (alertId) {\n if (actionId) {\n return {\n primary: { kind: 'view_alert', label: '查看预警' },\n secondary: { kind: 'view_task', label: '查看任务' },\n };\n }\n return { primary: { kind: 'view_alert', label: '查看预警' } };\n }\n\n if (actionId) {\n if (terminal || started) return { primary: { kind: 'view_task', label: '查看任务' } };\n return { primary: { kind: 'start_action', label: '去执行' } };\n }\n\n if (String(n.href || '').trim()) {\n return { primary: { kind: 'view_href', label: '查看' } };\n }\n\n return {};\n}\n\n/** 去掉 disabled;主按钮空时把次按钮升格;统一主/次语义 */\nexport function normalizeInboxActions(\n resolved: InboxItemActionsResolved,\n): InboxItemActionsResolved {\n const usable = (a?: InboxItemQuickAction) =>\n a && !a.disabled ? { ...a, disabled: undefined } : undefined;\n let primary = usable(resolved.primary);\n let secondary = usable(resolved.secondary);\n if (!primary && secondary) {\n primary = secondary;\n secondary = undefined;\n }\n if (primary && secondary && primary.kind === secondary.kind) {\n secondary = undefined;\n }\n return { primary, secondary };\n}\n\n/** 铃铛永不展示「新建任务」(解析路径已停产;此处再防御) */\nexport function filterInboxActionsForHost(\n resolved: InboxItemActionsResolved,\n _hasItemAction: boolean,\n): InboxItemActionsResolved {\n const base = normalizeInboxActions(resolved);\n const dropCreate = (a?: InboxItemQuickAction) => (a && a.kind === 'create_task' ? undefined : a);\n let primary = dropCreate(base.primary);\n let secondary = dropCreate(base.secondary);\n if (!primary && secondary) {\n primary = secondary;\n secondary = undefined;\n }\n return { primary, secondary };\n}\n"],"names":["SCENE_LABEL","SCENE_ALIAS","TERMINAL_STATUS","canonScene","raw","c","underscored","isKnownSceneKey","key","resolveInboxSceneKey","item","candidates","x","inboxSceneLabel","isInboxButtonDriven","normStatus","isTerminalActionStatus","status","isActionMessage","n","scene","viewTaskOrHref","actionId","resolveInboxItemActions","alertId","terminal","started","claimed","normalizeInboxActions","resolved","usable","a","primary","secondary","filterInboxActionsForHost","_hasItemAction","base","dropCreate"],"mappings":"AAqCA,MAAMA,IAAsC;AAAA,EAC1C,eAAe;AAAA,EACf,WAAW;AAAA,EACX,eAAe;AAAA,EACf,oBAAoB;AAAA,EACpB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,qBAAqB;AAAA,EACrB,uBAAuB;AAAA,EACvB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,aAAa;AACf,GAEMC,IAAsC;AAAA,EAC1C,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,mBAAmB;AAAA,EACnB,uBAAuB;AAAA,EACvB,yBAAyB;AAAA,EACzB,iBAAiB;AAAA,EACjB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,mBAAmB;AACrB,GAEMC,wBAAsB,IAAI,CAAC,QAAQ,YAAY,aAAa,QAAQ,CAAC;AAE3E,SAASC,EAAWC,GAA6B;AAC/C,QAAMC,IAAI,OAAOD,KAAO,EAAE,EACvB,KAAA,EACA,YAAA;AACH,MAAI,CAACC,EAAG,QAAO;AACf,MAAIL,EAAYK,CAAC,EAAG,QAAOA;AAC3B,MAAIJ,EAAYI,CAAC,EAAG,QAAOJ,EAAYI,CAAC;AACxC,QAAMC,IAAcD,EAAE,QAAQ,OAAO,GAAG;AACxC,SAAIL,EAAYM,CAAW,IAAUA,IAC9BD;AACT;AAGA,SAASE,EAAgBC,GAAsB;AAC7C,SAAO,GAAQA,KAAOR,EAAYQ,CAAG;AACvC;AAMO,SAASC,EAAqBC,GAAqC;AACxE,QAAMC,IAAa,CAACD,EAAK,UAAUA,EAAK,OAAOA,EAAK,QAAQ,EAAE,IAAI,CAACE,MAAMT,EAAWS,CAAC,CAAC;AACtF,aAAWP,KAAKM;AACd,QAAIJ,EAAgBF,CAAC,EAAG,QAAOA;AAEjC,SAAOM,EAAW,KAAK,OAAO,KAAK;AACrC;AAEO,SAASE,EAAgBH,GAAqC;AACnE,QAAMF,IAAMC,EAAqBC,CAAI;AACrC,SAAKF,KACER,EAAYQ,CAAG,KAAK;AAC7B;AAEO,SAASM,EAAoBJ,GAAsC;AACxE,QAAML,IAAII,EAAqBC,CAAI;AACnC,SACEL,MAAM,eACNA,MAAM,mBACNA,MAAM,oBACNA,MAAM,qBACNA,MAAM,yBACNA,MAAM,2BACNA,MAAM,oBACNA,MAAM,qBACNA,MAAM;AAEV;AAEA,SAASU,EAAWX,GAA6B;AAC/C,SAAO,OAAOA,KAAO,EAAE,EACpB,KAAA,EACA,YAAA;AACL;AAEO,SAASY,EAAuBC,GAAiC;AACtE,SAAOf,EAAgB,IAAIa,EAAWE,CAAM,CAAC;AAC/C;AAEA,SAASC,EAAgBC,GAA0BC,GAAwB;AAIzE,SAHW,OAAOD,EAAE,eAAe,EAAE,EAClC,KAAA,EACA,YAAA,MACQ,WAAiB,KAE1BC,EAAM,WAAW,SAAS,KAC1BA,MAAU,oBACVA,MAAU,qBACVA,MAAU,yBACVA,MAAU,2BACVA,MAAU,oBACVA,MAAU;AAEd;AAEA,SAASC,EAAeF,GAA0BG,GAA4C;AAC5F,SAAIA,IAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,OAAO,SAAO,IAC/D,OAAOH,EAAE,QAAQ,EAAE,EAAE,KAAA,IAAe,EAAE,SAAS,EAAE,MAAM,aAAa,OAAO,OAAK,IAC7E,EAAE,SAAS,EAAE,MAAM,gBAAgB,OAAO,SAAO;AAC1D;AAMO,SAASI,EAAwBJ,GAAoD;AAC1F,QAAMd,IAAII,EAAqBU,CAAC,GAC1BG,IAAW,OAAOH,EAAE,YAAY,EAAE,EAAE,KAAA,GACpCK,IAAU,OAAOL,EAAE,WAAW,EAAE,EAAE,KAAA,GAClCF,IAASF,EAAWI,EAAE,YAAY,GAClCM,IAAWT,EAAuBC,CAAM,GACxCS,IACJ,EAAQP,EAAE,WACVM,KACAR,MAAW,iBACXZ,MAAM,qBACNA,MAAM,kBACFsB,IAAU,EAAQR,EAAE,WAAY,EAAQG,KAAajB,MAAM;AAEjE,SAAIA,MAAM,eAAeA,MAAM,kBACzBsB,IACKL,IACH,EAAE,SAAS,EAAE,MAAM,aAAa,OAAO,OAAA,EAAO,IAC9C,EAAE,SAAS,EAAE,MAAM,cAAc,OAAO,SAAO,IAE9C,EAAE,SAAS,EAAE,MAAM,eAAe,OAAO,QAAM,IAKtDjB,MAAM,oBACNA,MAAM,qBACNA,MAAM,2BACNA,MAAM,wBAECgB,EAAeF,GAAGG,CAAQ,IAG/BjB,MAAM,oBAAoBA,MAAM,oBAC9BoB,KAAYC,IACPL,EAAeF,GAAGG,CAAQ,IAE9BA,IAGE,EAAE,SAAS,EAAE,MAAM,gBAAgB,OAAO,QAAM,IAF9C,OAAOH,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,aAAa,OAAO,KAAA,EAAK,IAAM,CAAA,IAKvFd,MAAM,uBACJiB,IACK;AAAA,IACL,SAAS,EAAE,MAAM,aAAa,OAAO,OAAA;AAAA,IACrC,WAAWE,IAAU,EAAE,MAAM,cAAc,OAAO,WAAW;AAAA,EAAA,IAG1D;AAAA,IACL,SAAS,EAAE,MAAM,cAAc,OAAO,OAAA;AAAA,IACtC,WAAW,EAAE,MAAM,gBAAgB,OAAO,QAAA;AAAA,EAAQ,IAIlDnB,EAAE,WAAW,KAAK,KAAKA,MAAM,iBACxB,EAAE,SAAS,EAAE,MAAM,YAAY,OAAO,SAAO,IAGlDA,MAAM,mBAAmBA,MAAM,gBAC7BiB,IACK;AAAA,IACL,SAAS,EAAE,MAAM,cAAc,OAAO,OAAA;AAAA,IACtC,WAAW,EAAE,MAAM,aAAa,OAAO,OAAA;AAAA,EAAO,IAG3C,EAAE,SAAS,EAAE,MAAM,cAAc,OAAO,SAAO,IAIpDJ,EAAgBC,GAAGd,CAAC,IAClBoB,KAAYC,KAAWrB,MAAM,mBACxBgB,EAAeF,GAAGG,CAAQ,IAE/BA,IACK,EAAE,SAAS,EAAE,MAAM,gBAAgB,OAAO,QAAM,IAElDD,EAAeF,GAAGG,CAAQ,IAG/BE,IACEF,IACK;AAAA,IACL,SAAS,EAAE,MAAM,cAAc,OAAO,OAAA;AAAA,IACtC,WAAW,EAAE,MAAM,aAAa,OAAO,OAAA;AAAA,EAAO,IAG3C,EAAE,SAAS,EAAE,MAAM,cAAc,OAAO,SAAO,IAGpDA,IACEG,KAAYC,IAAgB,EAAE,SAAS,EAAE,MAAM,aAAa,OAAO,SAAO,IACvE,EAAE,SAAS,EAAE,MAAM,gBAAgB,OAAO,QAAM,IAGrD,OAAOP,EAAE,QAAQ,EAAE,EAAE,SAChB,EAAE,SAAS,EAAE,MAAM,aAAa,OAAO,OAAK,IAG9C,CAAA;AACT;AAGO,SAASS,EACdC,GAC0B;AAC1B,QAAMC,IAAS,CAACC,MACdA,KAAK,CAACA,EAAE,WAAW,EAAE,GAAGA,GAAG,UAAU,OAAA,IAAc;AACrD,MAAIC,IAAUF,EAAOD,EAAS,OAAO,GACjCI,IAAYH,EAAOD,EAAS,SAAS;AACzC,SAAI,CAACG,KAAWC,MACdD,IAAUC,GACVA,IAAY,SAEVD,KAAWC,KAAaD,EAAQ,SAASC,EAAU,SACrDA,IAAY,SAEP,EAAE,SAAAD,GAAS,WAAAC,EAAA;AACpB;AAGO,SAASC,EACdL,GACAM,GAC0B;AAC1B,QAAMC,IAAOR,EAAsBC,CAAQ,GACrCQ,IAAa,CAACN,MAA8BA,KAAKA,EAAE,SAAS,gBAAgB,SAAYA;AAC9F,MAAIC,IAAUK,EAAWD,EAAK,OAAO,GACjCH,IAAYI,EAAWD,EAAK,SAAS;AACzC,SAAI,CAACJ,KAAWC,MACdD,IAAUC,GACVA,IAAY,SAEP,EAAE,SAAAD,GAAS,WAAAC,EAAA;AACpB;"}
@@ -1,26 +1,26 @@
1
1
  import { jsxs as V, jsx as n } from "react/jsx-runtime";
2
2
  import { message as p } from "antd";
3
- import { useMemo as c, useState as a, useCallback as ee, useEffect as Re } from "react";
4
- import { generateTemplateCode as Oe } from "../utils/templateCode.js";
5
- import { buildTemplateColumns as ze } from "./List/columns.js";
6
- import { TemplateFormModal as Fe } from "./Modal/TemplateFormModal.js";
7
- import { PushRulesPanel as Ue } from "./PushRulesPanel/index.js";
8
- import { VariablesPanel as $e } from "./VariablesPanel/index.js";
9
- import { resolveMessageAdminPermissions as je, previewVarsFromVariables as xe, variablesFromCatalog as De } from "./types.js";
3
+ import { useMemo as c, useState as a, useCallback as ee, useEffect as Fe } from "react";
4
+ import { generateTemplateCode as Ue } from "../utils/templateCode.js";
5
+ import { buildTemplateColumns as $e } from "./List/columns.js";
6
+ import { TemplateFormModal as je } from "./Modal/TemplateFormModal.js";
7
+ import { PushRulesPanel as xe } from "./PushRulesPanel/index.js";
8
+ import { VariablesPanel as De } from "./VariablesPanel/index.js";
9
+ import { resolveMessageAdminPermissions as Le, previewVarsFromVariables as Qe, variablesFromCatalog as _e } from "./types.js";
10
10
  import N from "./style.module.scss.js";
11
11
  import re from "../../../Alert/Alert.js";
12
- import Le from "../../../Layout/PageSpin/index.js";
12
+ import qe from "../../../Layout/PageSpin/index.js";
13
13
  import te from "../../../Empty/Empty.js";
14
- import Qe from "../../../Table/Table.js";
15
- import _e from "../../../StateBar/StateBar.js";
16
- import qe from "../../../InteractiveBlock/InteractiveBlock.js";
17
- function Ge(s) {
14
+ import Ge from "../../../Table/Table.js";
15
+ import He from "../../../StateBar/StateBar.js";
16
+ import Je from "../../../InteractiveBlock/InteractiveBlock.js";
17
+ function We(s) {
18
18
  return s ? Array.isArray(s) ? { events: s, variables: [] } : {
19
19
  events: Array.isArray(s.events) ? s.events : [],
20
- variables: De(s)
20
+ variables: _e(s)
21
21
  } : { events: [], variables: [] };
22
22
  }
23
- const cr = ({
23
+ const pr = ({
24
24
  fetchTemplates: s,
25
25
  saveTemplate: B,
26
26
  fetchEventCatalog: v,
@@ -37,18 +37,21 @@ const cr = ({
37
37
  savePushRule: z,
38
38
  setPushRuleEnabled: ne,
39
39
  deletePushRule: se,
40
+ levelOptions: le,
41
+ defaultLevels: ie,
42
+ levelFieldTips: ce,
40
43
  fetchVariables: F,
41
44
  saveVariable: U,
42
- deleteVariable: le,
43
- emptyText: ie = "暂无消息模板",
45
+ deleteVariable: me,
46
+ emptyText: ue = "暂无消息模板",
44
47
  className: $,
45
48
  codePrefix: j = "MEQ"
46
49
  }) => {
47
50
  const E = c(
48
- () => je(R, K),
51
+ () => Le(R, K),
49
52
  [R, K]
50
- ), t = E.template, h = E.push, w = E.variable, [C, x] = a([]), [i, D] = a([]), [k, L] = a([]), [Q, ce] = a([]), [me, ue] = a([]), [pe, de] = a(""), [ge, be] = a(""), [_, q] = a(!1), [G, H] = a(""), [S, J] = a(""), [W, d] = a(null), [X, Y] = a(!1), [u, ve] = a("template"), [fe, ye] = a(0), [Ee, he] = a(0), P = c(() => k.length ? k : m != null && m.length ? m : [], [k, m]), we = c(
51
- () => M || xe(P),
53
+ ), t = E.template, h = E.push, w = E.variable, [C, x] = a([]), [i, D] = a([]), [k, L] = a([]), [Q, pe] = a([]), [de, ge] = a([]), [be, ve] = a(""), [fe, ye] = a(""), [_, q] = a(!1), [G, H] = a(""), [S, J] = a(""), [W, d] = a(null), [X, Y] = a(!1), [u, Ee] = a("template"), [he, we] = a(0), [Ce, ke] = a(0), P = c(() => k.length ? k : m != null && m.length ? m : [], [k, m]), Se = c(
54
+ () => M || Qe(P),
52
55
  [M, P]
53
56
  ), g = ee(async () => {
54
57
  q(!0), H(""), J("");
@@ -79,20 +82,20 @@ const cr = ({
79
82
  })
80
83
  ]);
81
84
  if (x(Array.isArray(e) ? e : []), o.ok) {
82
- const r = Ge(
85
+ const r = We(
83
86
  o.raw
84
87
  );
85
88
  D(r.events), L(r.variables);
86
89
  } else
87
90
  D([]), L([]), J(o.error);
88
- ce(l.raw), de(l.ok ? "" : l.error), ue(A.raw), be(A.ok ? "" : A.error);
91
+ pe(l.raw), ve(l.ok ? "" : l.error), ge(A.raw), ye(A.ok ? "" : A.error);
89
92
  } catch (e) {
90
93
  H(e instanceof Error ? e.message : String(e)), x([]);
91
94
  } finally {
92
95
  q(!1);
93
96
  }
94
97
  }, [s, v, f, y]);
95
- Re(() => {
98
+ Fe(() => {
96
99
  g();
97
100
  }, [g]);
98
101
  const Z = ee(
@@ -101,11 +104,11 @@ const cr = ({
101
104
  return ((o = i.find((l) => l.eventKey === e)) == null ? void 0 : o.label) || e || "—";
102
105
  },
103
106
  [i]
104
- ), Ce = () => {
107
+ ), Pe = () => {
105
108
  if (!t.create) return;
106
109
  const e = i[0];
107
110
  Y(!0), d({
108
- code: Oe(j),
111
+ code: Ue(j),
109
112
  eventKey: e == null ? void 0 : e.eventKey,
110
113
  scenario: e == null ? void 0 : e.label,
111
114
  label: e == null ? void 0 : e.label,
@@ -116,15 +119,15 @@ const cr = ({
116
119
  enabled: !1,
117
120
  channel: "in_app"
118
121
  });
119
- }, ke = (e) => {
122
+ }, Te = (e) => {
120
123
  t.update && (Y(!1), d({ ...e }));
121
- }, Se = async (e) => {
124
+ }, Ae = async (e) => {
122
125
  if (!B) {
123
126
  p.warning("未配置保存接口");
124
127
  return;
125
128
  }
126
129
  await B(e), p.success("已保存"), d(null), await g();
127
- }, Pe = async (e, o) => {
130
+ }, Ne = async (e, o) => {
128
131
  if (!I) {
129
132
  p.warning("未配置启用接口");
130
133
  return;
@@ -134,48 +137,51 @@ const cr = ({
134
137
  } catch (l) {
135
138
  p.error(l instanceof Error ? l.message : String(l));
136
139
  }
137
- }, Te = c(
138
- () => ze({
140
+ }, Be = c(
141
+ () => $e({
139
142
  canUpdate: t.update,
140
143
  eventLabel: Z,
141
- onEdit: ke,
142
- onToggleEnabled: (e, o) => void Pe(e, o)
144
+ onEdit: Te,
145
+ onToggleEnabled: (e, o) => void Ne(e, o)
143
146
  }),
144
147
  [t.update, Z]
145
- ), T = !!(O && z), b = !!(F && U), Ae = T ? /* @__PURE__ */ n(
146
- Ue,
148
+ ), T = !!(O && z), b = !!(F && U), Ie = T ? /* @__PURE__ */ n(
149
+ xe,
147
150
  {
148
151
  crud: h,
149
152
  catalog: i,
150
153
  templates: C,
151
154
  roleOptions: Q,
152
- userOptions: me,
153
- audienceRolesError: pe,
154
- audienceUsersError: ge,
155
+ userOptions: de,
156
+ audienceRolesError: be,
157
+ audienceUsersError: fe,
158
+ levelOptions: le,
159
+ defaultLevels: ie,
160
+ levelFieldTips: ce,
155
161
  fetchPushRules: O,
156
162
  savePushRule: z,
157
163
  setPushRuleEnabled: ne,
158
164
  deletePushRule: se,
159
- createNonce: fe
165
+ createNonce: he
160
166
  }
161
167
  ) : oe ?? /* @__PURE__ */ n(
162
- qe,
168
+ Je,
163
169
  {
164
170
  title: "消息推送",
165
171
  info: [{ label: "说明", value: "未接线 fetchPushRules:请业务注入推送规则 API。" }],
166
172
  description: "推送规则 CRUD 须由业务 DI 提供。",
167
173
  surface: "inset"
168
174
  }
169
- ), Ne = b ? /* @__PURE__ */ n(
170
- $e,
175
+ ), Me = b ? /* @__PURE__ */ n(
176
+ De,
171
177
  {
172
178
  crud: w,
173
179
  fetchVariables: F,
174
180
  saveVariable: U,
175
- deleteVariable: le,
176
- createNonce: Ee
181
+ deleteVariable: me,
182
+ createNonce: Ce
177
183
  }
178
- ) : null, Be = /* @__PURE__ */ V("div", { className: N.pane, children: [
184
+ ) : null, Ke = /* @__PURE__ */ V("div", { className: N.pane, children: [
179
185
  G ? /* @__PURE__ */ n(re, { type: "error", showIcon: !0, message: G, style: { marginBottom: 12 } }) : null,
180
186
  S ? /* @__PURE__ */ n(
181
187
  re,
@@ -186,20 +192,20 @@ const cr = ({
186
192
  style: { marginBottom: 12 }
187
193
  }
188
194
  ) : null,
189
- /* @__PURE__ */ n(Le, { spinning: _, children: t.read ? C.length === 0 && !_ ? /* @__PURE__ */ n(te, { description: ie }) : /* @__PURE__ */ n(
190
- Qe,
195
+ /* @__PURE__ */ n(qe, { spinning: _, children: t.read ? C.length === 0 && !_ ? /* @__PURE__ */ n(te, { description: ue }) : /* @__PURE__ */ n(
196
+ Ge,
191
197
  {
192
198
  rowKey: (e) => e.id || e.code || String(e.eventKey),
193
199
  tableName: "msg-center-message-templates",
194
200
  columnConfigEnabled: !1,
195
201
  columnResizeEnabled: !1,
196
- columns: Te,
202
+ columns: Be,
197
203
  dataSource: C,
198
204
  pagination: !1,
199
205
  size: "small"
200
206
  }
201
207
  ) : /* @__PURE__ */ n(te, { description: "无消息模板读取权限" }) })
202
- ] }), Ie = c(
208
+ ] }), Re = c(
203
209
  () => [
204
210
  {
205
211
  label: "编号",
@@ -217,24 +223,24 @@ const cr = ({
217
223
  ...t.read ? [] : [{ label: "读取", value: "无消息模板读取权限。" }]
218
224
  ],
219
225
  [t.create, t.update, t.read]
220
- ), Me = c(() => u === "push" && T ? {
226
+ ), Oe = c(() => u === "push" && T ? {
221
227
  variant: "button",
222
228
  buttonType: "primary",
223
229
  label: "新建推送规则",
224
230
  disabled: !h.create,
225
- onClick: () => ye((e) => e + 1)
231
+ onClick: () => we((e) => e + 1)
226
232
  } : u === "variables" && b ? {
227
233
  variant: "button",
228
234
  buttonType: "primary",
229
235
  label: "新建变量",
230
236
  disabled: !w.create,
231
- onClick: () => he((e) => e + 1)
237
+ onClick: () => ke((e) => e + 1)
232
238
  } : {
233
239
  variant: "button",
234
240
  buttonType: "primary",
235
241
  label: "新建模板",
236
242
  disabled: !t.create || u !== "template",
237
- onClick: () => Ce()
243
+ onClick: () => Pe()
238
244
  }, [
239
245
  u,
240
246
  T,
@@ -244,39 +250,39 @@ const cr = ({
244
250
  t.create,
245
251
  i,
246
252
  j
247
- ]), Ke = [
253
+ ]), ze = [
248
254
  {
249
255
  key: "template",
250
256
  label: "消息模板",
251
- info: Ie,
252
- children: Be
257
+ info: Re,
258
+ children: Ke
253
259
  },
254
260
  {
255
261
  key: "push",
256
262
  label: "消息推送",
257
- children: Ae
263
+ children: Ie
258
264
  },
259
265
  ...b ? [
260
266
  {
261
267
  key: "variables",
262
268
  label: "变量",
263
- children: Ne
269
+ children: Me
264
270
  }
265
271
  ] : []
266
272
  ];
267
273
  return /* @__PURE__ */ V("div", { className: $ ? `${N.root} ${$}` : N.root, children: [
268
274
  /* @__PURE__ */ n(
269
- _e,
275
+ He,
270
276
  {
271
277
  type: "tab",
272
278
  activeKey: u,
273
- onChange: (e) => ve(String(e)),
274
- actions: [Me],
275
- stateOption: Ke
279
+ onChange: (e) => Ee(String(e)),
280
+ actions: [Oe],
281
+ stateOption: ze
276
282
  }
277
283
  ),
278
284
  /* @__PURE__ */ n(
279
- Fe,
285
+ je,
280
286
  {
281
287
  open: !!W,
282
288
  isCreate: X,
@@ -285,16 +291,16 @@ const cr = ({
285
291
  roleOptions: Q,
286
292
  variables: P,
287
293
  catalogError: S,
288
- previewVars: we,
294
+ previewVars: Se,
289
295
  canWrite: X ? t.create : t.update,
290
296
  onCancel: () => d(null),
291
- onSubmit: Se,
297
+ onSubmit: Ae,
292
298
  renderAudienceField: ae
293
299
  }
294
300
  )
295
301
  ] });
296
302
  };
297
303
  export {
298
- cr as MessageTemplateAdmin
304
+ pr as MessageTemplateAdmin
299
305
  };
300
306
  //# sourceMappingURL=MessageTemplateAdmin.js.map