@hkyhy/marsun-components-core 0.1.136 → 0.1.138
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 +2 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.d.ts +7 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js +114 -102
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js.map +1 -1
- package/dist/components/Tools/Inbox/InboxBell/inboxItemActions.js +49 -47
- package/dist/components/Tools/Inbox/InboxBell/inboxItemActions.js.map +1 -1
- package/package.json +1 -1
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-23:`v0.1.138` — CreateActionForm:`allocatorDisabled` / `defaultAssigneeUserId`(Related S3-1523)
|
|
140
|
+
- 2026-10-22:`v0.1.137` — InboxBell:`action_assigned_ack` 恒「查看任务」(禁「去执行」);Related S3-1721
|
|
139
141
|
- 2026-10-21:`v0.1.136` — MessageCenter 推送规则级别改为业务 DI `levelOptions`(禁写死 L1/L2/L3;S3 可注入 L2+)
|
|
140
142
|
- 2026-10-16:`v0.1.135` — 新建跟踪任务分配人/执行人必填星与任务类型同为 `is-req`(去掉 `marsun-form-info-is-req`)
|
|
141
143
|
- 2026-10-14:`v0.1.134` — InboxBell Drawer「清空未读」可选 `markAllRead`;Demo/vitest
|
|
@@ -23,6 +23,13 @@ export type CreateActionFormProps = {
|
|
|
23
23
|
emptyAllocatorHint?: string;
|
|
24
24
|
allocatorPlaceholder?: string;
|
|
25
25
|
assigneePlaceholder?: string;
|
|
26
|
+
/**
|
|
27
|
+
* 分配人只读。新建/编辑均禁用改派(默认 true);
|
|
28
|
+
* 值由 pickDefaultAllocatorUserId / 表单初值写入。
|
|
29
|
+
*/
|
|
30
|
+
allocatorDisabled?: boolean;
|
|
31
|
+
/** 编辑回填:执行人 userId(级联选项就绪后写入) */
|
|
32
|
+
defaultAssigneeUserId?: string;
|
|
26
33
|
onAssigneeOptionsReady?: (options: ActionPersonOption[]) => void;
|
|
27
34
|
onAllocatorOptionsReady?: (options: ActionPersonOption[]) => void;
|
|
28
35
|
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { jsx as a, jsxs as
|
|
2
|
-
import { useState as u, useRef as
|
|
3
|
-
import
|
|
4
|
-
import { message as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import { SetFormFields as
|
|
1
|
+
import { jsx as a, jsxs as w } from "react/jsx-runtime";
|
|
2
|
+
import { useState as u, useRef as ye, useMemo as P, useCallback as he, useEffect as F } from "react";
|
|
3
|
+
import Se from "../../../Form/FormDataSync.js";
|
|
4
|
+
import { message as b } from "antd";
|
|
5
|
+
import J from "classnames";
|
|
6
|
+
import X from "./PersonRoleCascaderField.js";
|
|
7
|
+
import { SetFormFields as Pe } from "./SetFormFields.js";
|
|
8
8
|
import S from "./CreateActionForm.module.scss.js";
|
|
9
|
-
import { createPagedSuperSelectApi as
|
|
10
|
-
import { Input as
|
|
11
|
-
import { SuperSelect as
|
|
12
|
-
import
|
|
13
|
-
import { useFormApi as
|
|
14
|
-
const C = 20,
|
|
9
|
+
import { createPagedSuperSelectApi as be, pagedSuperSelectGetSearchProps as pe, pagedSuperSelectPagination as ve } from "../../../Form/createPagedSuperSelectApi.js";
|
|
10
|
+
import { Input as I, DatePicker as Fe } from "../../../FormInfo/fields.js";
|
|
11
|
+
import { SuperSelect as p } from "../../../Form/SuperSelect.js";
|
|
12
|
+
import Ie from "../../../FormInfo/FormInfo.js";
|
|
13
|
+
import { useFormApi as Ce } from "@kne/react-form";
|
|
14
|
+
const C = 20, U = 15e3;
|
|
15
15
|
function V(e, o) {
|
|
16
16
|
return Promise.race([
|
|
17
17
|
e.then(
|
|
@@ -23,104 +23,106 @@ function V(e, o) {
|
|
|
23
23
|
})
|
|
24
24
|
]);
|
|
25
25
|
}
|
|
26
|
-
function
|
|
26
|
+
function Ue(e) {
|
|
27
27
|
return e == null || e === "" ? "" : Array.isArray(e) ? String(e[0] ?? "").trim() : typeof e == "object" ? String(e.value ?? "").trim() : String(e).trim();
|
|
28
28
|
}
|
|
29
|
-
function
|
|
30
|
-
return o ? /* @__PURE__ */
|
|
29
|
+
function Ke(e, o) {
|
|
30
|
+
return o ? /* @__PURE__ */ w("span", { className: S["assignee-option"], children: [
|
|
31
31
|
/* @__PURE__ */ a("span", { className: S["assignee-option-name"], children: e }),
|
|
32
32
|
/* @__PURE__ */ a("span", { className: S["assignee-option-org"], children: o })
|
|
33
33
|
] }) : e;
|
|
34
34
|
}
|
|
35
|
-
const
|
|
35
|
+
const Qe = ({
|
|
36
36
|
scopeLock: e,
|
|
37
37
|
varietyLabel: o,
|
|
38
38
|
lockedContext: l,
|
|
39
|
-
scopeMode:
|
|
40
|
-
titlePlaceholder:
|
|
41
|
-
metricPlaceholder:
|
|
39
|
+
scopeMode: O = "form",
|
|
40
|
+
titlePlaceholder: R,
|
|
41
|
+
metricPlaceholder: k,
|
|
42
42
|
noneScopeHint: E,
|
|
43
|
-
dimensionOptions:
|
|
43
|
+
dimensionOptions: L,
|
|
44
44
|
loaders: n,
|
|
45
|
-
emptyAssigneeHint:
|
|
46
|
-
emptyAllocatorHint:
|
|
47
|
-
allocatorPlaceholder:
|
|
48
|
-
assigneePlaceholder:
|
|
49
|
-
|
|
45
|
+
emptyAssigneeHint: ee = "暂无执行人",
|
|
46
|
+
emptyAllocatorHint: te = "暂无分配人",
|
|
47
|
+
allocatorPlaceholder: re = "先选角色,再选分配人",
|
|
48
|
+
assigneePlaceholder: ae = "先选角色,再选执行人",
|
|
49
|
+
allocatorDisabled: le = !0,
|
|
50
|
+
defaultAssigneeUserId: ne = "",
|
|
51
|
+
onAssigneeOptionsReady: s,
|
|
50
52
|
onAllocatorOptionsReady: f
|
|
51
53
|
}) => {
|
|
52
|
-
var
|
|
53
|
-
const
|
|
54
|
+
var q, z, H, W;
|
|
55
|
+
const D = Ce(), [ie, M] = u([]), [oe, T] = u([]), [m, N] = u([]), [_, A] = u(!0), [j, x] = u(!1), [B, ue] = u(""), [Y, G] = u(() => {
|
|
54
56
|
var t;
|
|
55
57
|
return ((t = e == null ? void 0 : e.factory) == null ? void 0 : t.trim()) || "";
|
|
56
|
-
}), d =
|
|
58
|
+
}), d = ye(((q = e == null ? void 0 : e.factory) == null ? void 0 : q.trim()) || ""), c = !!(l && l.length > 0), g = (c ? "locked" : O === "none" ? "none" : "form") === "none", $ = !!((z = e == null ? void 0 : e.factory) != null && z.trim()), y = !!((H = e == null ? void 0 : e.variety) != null && H.trim()), se = !!((W = e == null ? void 0 : e.metric) != null && W.trim()), h = typeof n.loadVarietyPage == "function", K = !!Y || y, fe = P(() => {
|
|
57
59
|
var r;
|
|
58
60
|
const t = (r = e == null ? void 0 : e.factory) == null ? void 0 : r.trim();
|
|
59
|
-
return !t ||
|
|
60
|
-
}, [
|
|
61
|
+
return !t || m.some((i) => i.value === t) ? m : [{ value: t, label: t }, ...m];
|
|
62
|
+
}, [m, e == null ? void 0 : e.factory]), Q = P(() => {
|
|
61
63
|
if (!h || !n.loadVarietyPage) return;
|
|
62
64
|
const t = n.loadVarietyPage;
|
|
63
|
-
return
|
|
65
|
+
return be({
|
|
64
66
|
pageSize: C,
|
|
65
67
|
loadPage: (r) => t({
|
|
66
68
|
...r,
|
|
67
69
|
factory: d.current
|
|
68
70
|
}),
|
|
69
|
-
onError: () =>
|
|
71
|
+
onError: () => b.error("品种列表加载失败")
|
|
70
72
|
});
|
|
71
|
-
}, [h, n.loadVarietyPage]),
|
|
72
|
-
() =>
|
|
73
|
+
}, [h, n.loadVarietyPage]), me = P(
|
|
74
|
+
() => pe(C),
|
|
73
75
|
[]
|
|
74
|
-
),
|
|
75
|
-
() =>
|
|
76
|
+
), de = P(
|
|
77
|
+
() => ve(C),
|
|
76
78
|
[]
|
|
77
|
-
),
|
|
79
|
+
), ce = he(
|
|
78
80
|
(t) => {
|
|
79
81
|
if (c || g) return;
|
|
80
|
-
const r =
|
|
82
|
+
const r = Ue(t.factory);
|
|
81
83
|
if (r === d.current) return;
|
|
82
84
|
const i = d.current;
|
|
83
|
-
d.current = r,
|
|
84
|
-
|
|
85
|
+
d.current = r, G(r), i && r !== i && h && !y && queueMicrotask(() => {
|
|
86
|
+
D.openApi.setFieldValue({ name: "variety" }, "", { runValidate: !1 });
|
|
85
87
|
});
|
|
86
88
|
},
|
|
87
|
-
[
|
|
89
|
+
[D.openApi, h, y, c, g]
|
|
88
90
|
);
|
|
89
|
-
|
|
91
|
+
F(() => {
|
|
90
92
|
var r;
|
|
91
93
|
const t = ((r = e == null ? void 0 : e.factory) == null ? void 0 : r.trim()) || "";
|
|
92
|
-
t && (d.current = t,
|
|
93
|
-
}, [e == null ? void 0 : e.factory]),
|
|
94
|
+
t && (d.current = t, G(t));
|
|
95
|
+
}, [e == null ? void 0 : e.factory]), F(() => {
|
|
94
96
|
let t = !1;
|
|
95
|
-
return
|
|
96
|
-
V(n.loadAssigneeCatalog(),
|
|
97
|
-
V(n.loadAllocatorCatalog(),
|
|
97
|
+
return A(!0), Promise.all([
|
|
98
|
+
V(n.loadAssigneeCatalog(), U),
|
|
99
|
+
V(n.loadAllocatorCatalog(), U)
|
|
98
100
|
]).then(([r, i]) => {
|
|
99
101
|
if (!t)
|
|
100
|
-
if (r.status === "fulfilled" ? (
|
|
101
|
-
|
|
102
|
-
const
|
|
103
|
-
|
|
102
|
+
if (r.status === "fulfilled" ? (M(r.value.cascadeOptions), s == null || s(r.value.options)) : (b.error("执行人列表加载失败"), M([]), s == null || s([])), i.status === "fulfilled") {
|
|
103
|
+
T(i.value.cascadeOptions), f == null || f(i.value.options);
|
|
104
|
+
const Z = n.pickDefaultAllocatorUserId;
|
|
105
|
+
ue(Z ? Z(i.value.options) : "");
|
|
104
106
|
} else
|
|
105
|
-
|
|
107
|
+
b.error("分配人列表加载失败"), T([]), f == null || f([]);
|
|
106
108
|
}).finally(() => {
|
|
107
|
-
t ||
|
|
109
|
+
t || A(!1);
|
|
108
110
|
}), () => {
|
|
109
111
|
t = !0;
|
|
110
112
|
};
|
|
111
|
-
}, []),
|
|
113
|
+
}, []), F(() => {
|
|
112
114
|
if (c || g || !n.loadFactoryOptions) return;
|
|
113
115
|
let t = !1;
|
|
114
|
-
return
|
|
115
|
-
t || (r.status === "fulfilled" ?
|
|
116
|
+
return x(!0), V(n.loadFactoryOptions(), U).then((r) => {
|
|
117
|
+
t || (r.status === "fulfilled" ? N(r.value) : (b.error("分厂列表加载失败"), N([])));
|
|
116
118
|
}).finally(() => {
|
|
117
|
-
t ||
|
|
119
|
+
t || x(!1);
|
|
118
120
|
}), () => {
|
|
119
121
|
t = !0;
|
|
120
122
|
};
|
|
121
123
|
}, []);
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
+
const ge = c ? (l || []).map((t, r) => /* @__PURE__ */ a(
|
|
125
|
+
I,
|
|
124
126
|
{
|
|
125
127
|
name: `lockedContext_${r}`,
|
|
126
128
|
label: t.label,
|
|
@@ -129,35 +131,35 @@ const Ge = ({
|
|
|
129
131
|
`locked-${r}-${t.label}`
|
|
130
132
|
)) : g ? [] : [
|
|
131
133
|
/* @__PURE__ */ a(
|
|
132
|
-
|
|
134
|
+
p,
|
|
133
135
|
{
|
|
134
136
|
name: "factory",
|
|
135
137
|
label: "分厂",
|
|
136
138
|
single: !0,
|
|
137
|
-
options:
|
|
138
|
-
placeholder:
|
|
139
|
-
disabled:
|
|
140
|
-
allowClear:
|
|
139
|
+
options: fe,
|
|
140
|
+
placeholder: j ? "加载分厂…" : "选择分厂",
|
|
141
|
+
disabled: j || $,
|
|
142
|
+
allowClear: !$
|
|
141
143
|
},
|
|
142
144
|
"factory"
|
|
143
145
|
),
|
|
144
|
-
h &&
|
|
145
|
-
|
|
146
|
+
h && Q ? /* @__PURE__ */ a(
|
|
147
|
+
p,
|
|
146
148
|
{
|
|
147
149
|
name: "variety",
|
|
148
150
|
label: o || "品种",
|
|
149
151
|
single: !0,
|
|
150
|
-
api:
|
|
151
|
-
getSearchProps:
|
|
152
|
-
pagination:
|
|
153
|
-
placeholder:
|
|
154
|
-
disabled: y ||
|
|
152
|
+
api: Q,
|
|
153
|
+
getSearchProps: me,
|
|
154
|
+
pagination: de,
|
|
155
|
+
placeholder: K ? "选择品种" : "请先选择分厂",
|
|
156
|
+
disabled: y || !K,
|
|
155
157
|
allowClear: !y,
|
|
156
158
|
searchPlaceholder: "搜索品种"
|
|
157
159
|
},
|
|
158
|
-
`variety-${
|
|
160
|
+
`variety-${Y || "none"}`
|
|
159
161
|
) : /* @__PURE__ */ a(
|
|
160
|
-
|
|
162
|
+
p,
|
|
161
163
|
{
|
|
162
164
|
name: "variety",
|
|
163
165
|
label: o || "品种",
|
|
@@ -169,75 +171,85 @@ const Ge = ({
|
|
|
169
171
|
"variety"
|
|
170
172
|
),
|
|
171
173
|
/* @__PURE__ */ a(
|
|
172
|
-
|
|
174
|
+
I,
|
|
173
175
|
{
|
|
174
176
|
name: "metric",
|
|
175
177
|
label: "关联指标",
|
|
176
|
-
placeholder:
|
|
178
|
+
placeholder: k || "可选",
|
|
177
179
|
maxLength: 40,
|
|
178
|
-
disabled:
|
|
180
|
+
disabled: se
|
|
179
181
|
},
|
|
180
182
|
"metric"
|
|
181
183
|
)
|
|
182
|
-
];
|
|
183
|
-
return /* @__PURE__ */
|
|
184
|
-
/* @__PURE__ */ a(
|
|
185
|
-
/* @__PURE__ */ a(ye, { patch: { allocatorUserId: x } }),
|
|
184
|
+
], v = String(ne || "").trim();
|
|
185
|
+
return /* @__PURE__ */ w("div", { className: J("create-action-form", S["create-action-form"]), children: [
|
|
186
|
+
/* @__PURE__ */ a(Se, { onChange: ce }),
|
|
186
187
|
/* @__PURE__ */ a(
|
|
187
|
-
|
|
188
|
+
Pe,
|
|
189
|
+
{
|
|
190
|
+
patch: {
|
|
191
|
+
allocatorUserId: B,
|
|
192
|
+
...v ? { assigneeUserId: v } : {}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
),
|
|
196
|
+
/* @__PURE__ */ a(
|
|
197
|
+
Ie,
|
|
188
198
|
{
|
|
189
199
|
column: 1,
|
|
190
200
|
list: [
|
|
191
201
|
/* @__PURE__ */ a(
|
|
192
|
-
|
|
202
|
+
I,
|
|
193
203
|
{
|
|
194
204
|
name: "title",
|
|
195
205
|
label: "任务标题",
|
|
196
206
|
rule: "REQ",
|
|
197
|
-
placeholder:
|
|
207
|
+
placeholder: R || "请输入任务标题",
|
|
198
208
|
maxLength: 120
|
|
199
209
|
},
|
|
200
210
|
"title"
|
|
201
211
|
),
|
|
202
212
|
/* @__PURE__ */ a(
|
|
203
|
-
|
|
213
|
+
p,
|
|
204
214
|
{
|
|
205
215
|
name: "dimension",
|
|
206
216
|
label: "任务类型",
|
|
207
217
|
rule: "REQ",
|
|
208
218
|
single: !0,
|
|
209
|
-
options:
|
|
219
|
+
options: L,
|
|
210
220
|
placeholder: "选择任务类型"
|
|
211
221
|
},
|
|
212
222
|
"dimension"
|
|
213
223
|
),
|
|
214
224
|
/* @__PURE__ */ a(
|
|
215
|
-
|
|
225
|
+
X,
|
|
216
226
|
{
|
|
217
227
|
name: "allocatorUserId",
|
|
218
228
|
label: "分配人",
|
|
219
|
-
cascadeOptions:
|
|
220
|
-
loading:
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
229
|
+
cascadeOptions: oe,
|
|
230
|
+
loading: _,
|
|
231
|
+
disabled: le,
|
|
232
|
+
emptyHint: te,
|
|
233
|
+
placeholder: re,
|
|
234
|
+
defaultUserId: B
|
|
224
235
|
},
|
|
225
236
|
"allocatorUserId"
|
|
226
237
|
),
|
|
227
238
|
/* @__PURE__ */ a(
|
|
228
|
-
|
|
239
|
+
X,
|
|
229
240
|
{
|
|
230
241
|
name: "assigneeUserId",
|
|
231
242
|
label: "执行人",
|
|
232
|
-
cascadeOptions:
|
|
233
|
-
loading:
|
|
234
|
-
emptyHint:
|
|
235
|
-
placeholder:
|
|
243
|
+
cascadeOptions: ie,
|
|
244
|
+
loading: _,
|
|
245
|
+
emptyHint: ee,
|
|
246
|
+
placeholder: ae,
|
|
247
|
+
defaultUserId: v
|
|
236
248
|
},
|
|
237
249
|
"assigneeUserId"
|
|
238
250
|
),
|
|
239
251
|
/* @__PURE__ */ a(
|
|
240
|
-
|
|
252
|
+
Fe,
|
|
241
253
|
{
|
|
242
254
|
name: "dueDate",
|
|
243
255
|
label: "截止日期",
|
|
@@ -248,16 +260,16 @@ const Ge = ({
|
|
|
248
260
|
},
|
|
249
261
|
"dueDate"
|
|
250
262
|
),
|
|
251
|
-
...
|
|
263
|
+
...ge
|
|
252
264
|
]
|
|
253
265
|
}
|
|
254
266
|
),
|
|
255
|
-
g && E ? /* @__PURE__ */ a("p", { className:
|
|
267
|
+
g && E ? /* @__PURE__ */ a("p", { className: J("create-action-none-hint", S["create-action-none-hint"]), children: E }) : null
|
|
256
268
|
] });
|
|
257
269
|
};
|
|
258
270
|
export {
|
|
259
271
|
C as CREATE_ACTION_VARIETY_PAGE_SIZE,
|
|
260
|
-
|
|
261
|
-
|
|
272
|
+
Qe as default,
|
|
273
|
+
Ke as renderPersonOptionLabel
|
|
262
274
|
};
|
|
263
275
|
//# sourceMappingURL=CreateActionForm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateActionForm.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/CreateActionForm.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport {\n DatePicker,\n FormInfo,\n Input,\n SuperSelect,\n createPagedSuperSelectApi,\n pagedSuperSelectGetSearchProps,\n pagedSuperSelectPagination,\n} from '../../../FormInfo';\nimport FormDataSync from '../../../Form/FormDataSync';\nimport { useFormApi } from '../../../Form';\nimport { message } from 'antd';\nimport classNames from 'classnames';\nimport PersonRoleCascaderField from './PersonRoleCascaderField';\nimport { SetFormFields } from './SetFormFields';\nimport type {\n ActionPersonCascadeOption,\n ActionPersonOption,\n CreateActionDimensionOption,\n CreateActionLoaders,\n CreateActionScopeLock,\n CreateActionScopeMode,\n CreateActionSelectOption,\n LockedContextField,\n} from './types';\nimport styles from './CreateActionForm.module.scss';\n\n/** 建单品种下拉页大小(服务端分页) */\nexport const CREATE_ACTION_VARIETY_PAGE_SIZE = 20;\n\nconst CATALOG_LOAD_TIMEOUT_MS = 15_000;\n\nfunction settleWithTimeout<T>(promise: Promise<T>, ms: number): Promise<PromiseSettledResult<T>> {\n return Promise.race([\n promise.then(\n (value) => ({ status: 'fulfilled' as const, value }),\n (reason) => ({ status: 'rejected' as const, reason }),\n ),\n new Promise<PromiseSettledResult<T>>((resolve) => {\n setTimeout(() => resolve({ status: 'rejected', reason: new Error('timeout') }), ms);\n }),\n ]);\n}\n\nfunction asFactoryValue(raw: unknown): string {\n if (raw == null || raw === '') return '';\n if (Array.isArray(raw)) return String(raw[0] ?? '').trim();\n if (typeof raw === 'object') {\n const o = raw as { value?: unknown };\n return String(o.value ?? '').trim();\n }\n return String(raw).trim();\n}\n\nexport type CreateActionFormProps = {\n scopeLock?: CreateActionScopeLock;\n varietyLabel?: string;\n lockedContext?: LockedContextField[];\n /**\n * 业务上下文字段模式。有 lockedContext 时强制 locked。\n * 默认 form(S3);EAM 主动新建传 none。\n */\n scopeMode?: CreateActionScopeMode;\n /** F4:任务标题 placeholder(App 注入;禁写死业务文案) */\n titlePlaceholder?: string;\n /** F4:关联指标 placeholder */\n metricPlaceholder?: string;\n /** scopeMode=none 时展示在截止日期下的短提示(App 注入) */\n noneScopeHint?: string;\n dimensionOptions: CreateActionDimensionOption[];\n loaders: CreateActionLoaders;\n emptyAssigneeHint?: string;\n emptyAllocatorHint?: string;\n allocatorPlaceholder?: string;\n assigneePlaceholder?: string;\n onAssigneeOptionsReady?: (options: ActionPersonOption[]) => void;\n onAllocatorOptionsReady?: (options: ActionPersonOption[]) => void;\n};\n\nexport function renderPersonOptionLabel(name: string, org: string): ReactNode {\n if (!org) return name;\n return (\n <span className={styles['assignee-option']}>\n <span className={styles['assignee-option-name']}>{name}</span>\n <span className={styles['assignee-option-org']}>{org}</span>\n </span>\n );\n}\n\ntype OpenApiLike = {\n setFieldValue: (\n token: { name: string },\n value: unknown,\n options?: { runValidate?: boolean },\n ) => void;\n};\n\n/** 新建跟踪任务 / 下发任务字段(FormModal + FormInfo);数据经 loaders 注入 */\nconst CreateActionForm: React.FC<CreateActionFormProps> = ({\n scopeLock,\n varietyLabel,\n lockedContext,\n scopeMode: scopeModeProp = 'form',\n titlePlaceholder,\n metricPlaceholder,\n noneScopeHint,\n dimensionOptions,\n loaders,\n emptyAssigneeHint = '暂无执行人',\n emptyAllocatorHint = '暂无分配人',\n allocatorPlaceholder = '先选角色,再选分配人',\n assigneePlaceholder = '先选角色,再选执行人',\n onAssigneeOptionsReady,\n onAllocatorOptionsReady,\n}) => {\n const formApi = useFormApi() as { openApi: OpenApiLike };\n const [assigneeCascade, setAssigneeCascade] = useState<ActionPersonCascadeOption[]>([]);\n const [allocatorCascade, setAllocatorCascade] = useState<ActionPersonCascadeOption[]>([]);\n const [factoryOptions, setFactoryOptions] = useState<CreateActionSelectOption[]>([]);\n const [personLoading, setPersonLoading] = useState(true);\n const [factoryLoading, setFactoryLoading] = useState(false);\n const [defaultAllocatorUserId, setDefaultAllocatorUserId] = useState('');\n const [factoryKey, setFactoryKey] = useState(() => scopeLock?.factory?.trim() || '');\n const factoryRef = useRef(scopeLock?.factory?.trim() || '');\n\n const useLockedContext = Boolean(lockedContext && lockedContext.length > 0);\n const resolvedScopeMode: CreateActionScopeMode = useLockedContext\n ? 'locked'\n : scopeModeProp === 'none'\n ? 'none'\n : 'form';\n const useNoneScope = resolvedScopeMode === 'none';\n const lockFactory = Boolean(scopeLock?.factory?.trim());\n const lockVariety = Boolean(scopeLock?.variety?.trim());\n const lockMetric = Boolean(scopeLock?.metric?.trim());\n const hasVarietyPage = typeof loaders.loadVarietyPage === 'function';\n const canLoadVariety = Boolean(factoryKey) || lockVariety;\n\n const factorySelectOptions = useMemo(() => {\n const locked = scopeLock?.factory?.trim();\n if (!locked) return factoryOptions;\n if (factoryOptions.some((o) => o.value === locked)) return factoryOptions;\n return [{ value: locked, label: locked }, ...factoryOptions];\n }, [factoryOptions, scopeLock?.factory]);\n\n const varietySelectApi = useMemo(() => {\n if (!hasVarietyPage || !loaders.loadVarietyPage) return undefined;\n const loadPage = loaders.loadVarietyPage;\n return createPagedSuperSelectApi({\n pageSize: CREATE_ACTION_VARIETY_PAGE_SIZE,\n loadPage: (query) =>\n loadPage({\n ...query,\n factory: factoryRef.current,\n }),\n onError: () => message.error('品种列表加载失败'),\n });\n }, [hasVarietyPage, loaders.loadVarietyPage]);\n\n const varietyGetSearchProps = useMemo(\n () => pagedSuperSelectGetSearchProps(CREATE_ACTION_VARIETY_PAGE_SIZE),\n [],\n );\n\n const varietyPagination = useMemo(\n () => pagedSuperSelectPagination(CREATE_ACTION_VARIETY_PAGE_SIZE),\n [],\n );\n\n const handleFormSync = useCallback(\n (data: Record<string, unknown>) => {\n if (useLockedContext || useNoneScope) return;\n const next = asFactoryValue(data.factory);\n if (next === factoryRef.current) return;\n const prev = factoryRef.current;\n factoryRef.current = next;\n setFactoryKey(next);\n if (prev && next !== prev && hasVarietyPage && !lockVariety) {\n queueMicrotask(() => {\n formApi.openApi.setFieldValue({ name: 'variety' }, '', { runValidate: false });\n });\n }\n },\n [formApi.openApi, hasVarietyPage, lockVariety, useLockedContext, useNoneScope],\n );\n\n useEffect(() => {\n const locked = scopeLock?.factory?.trim() || '';\n if (!locked) return;\n factoryRef.current = locked;\n setFactoryKey(locked);\n }, [scopeLock?.factory]);\n\n /** 人员目录:独立加载 + 超时,避免拖死分厂 */\n useEffect(() => {\n let cancelled = false;\n setPersonLoading(true);\n Promise.all([\n settleWithTimeout(loaders.loadAssigneeCatalog(), CATALOG_LOAD_TIMEOUT_MS),\n settleWithTimeout(loaders.loadAllocatorCatalog(), CATALOG_LOAD_TIMEOUT_MS),\n ])\n .then(([usersRes, allocRes]) => {\n if (cancelled) return;\n if (usersRes.status === 'fulfilled') {\n setAssigneeCascade(usersRes.value.cascadeOptions);\n onAssigneeOptionsReady?.(usersRes.value.options);\n } else {\n message.error('执行人列表加载失败');\n setAssigneeCascade([]);\n onAssigneeOptionsReady?.([]);\n }\n if (allocRes.status === 'fulfilled') {\n setAllocatorCascade(allocRes.value.cascadeOptions);\n onAllocatorOptionsReady?.(allocRes.value.options);\n const pick = loaders.pickDefaultAllocatorUserId;\n setDefaultAllocatorUserId(pick ? pick(allocRes.value.options) : '');\n } else {\n message.error('分配人列表加载失败');\n setAllocatorCascade([]);\n onAllocatorOptionsReady?.([]);\n }\n })\n .finally(() => {\n if (!cancelled) setPersonLoading(false);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only load\n }, []);\n\n /** 分厂:与人员并行、互不阻塞(对齐 EAM CycleForm 静态 options) */\n useEffect(() => {\n if (useLockedContext || useNoneScope || !loaders.loadFactoryOptions) return;\n let cancelled = false;\n setFactoryLoading(true);\n settleWithTimeout(loaders.loadFactoryOptions(), CATALOG_LOAD_TIMEOUT_MS)\n .then((factoriesRes) => {\n if (cancelled) return;\n if (factoriesRes.status === 'fulfilled') {\n setFactoryOptions(factoriesRes.value);\n } else {\n message.error('分厂列表加载失败');\n setFactoryOptions([]);\n }\n })\n .finally(() => {\n if (!cancelled) setFactoryLoading(false);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only load\n }, []);\n\n const scopeFields: ReactNode[] = useLockedContext\n ? (lockedContext || []).map((field, idx) => (\n <Input\n key={`locked-${idx}-${field.label}`}\n name={`lockedContext_${idx}`}\n label={field.label}\n disabled\n />\n ))\n : useNoneScope\n ? []\n : [\n <SuperSelect\n key=\"factory\"\n name=\"factory\"\n label=\"分厂\"\n single\n options={factorySelectOptions}\n placeholder={factoryLoading ? '加载分厂…' : '选择分厂'}\n disabled={factoryLoading || lockFactory}\n allowClear={!lockFactory}\n />,\n hasVarietyPage && varietySelectApi ? (\n <SuperSelect\n key={`variety-${factoryKey || 'none'}`}\n name=\"variety\"\n label={varietyLabel || '品种'}\n single\n api={varietySelectApi}\n getSearchProps={varietyGetSearchProps}\n pagination={varietyPagination}\n placeholder={canLoadVariety ? '选择品种' : '请先选择分厂'}\n disabled={lockVariety || !canLoadVariety}\n allowClear={!lockVariety}\n searchPlaceholder=\"搜索品种\"\n />\n ) : (\n <SuperSelect\n key=\"variety\"\n name=\"variety\"\n label={varietyLabel || '品种'}\n single\n options={[]}\n placeholder=\"App 未注入 loadVarietyPage\"\n disabled\n />\n ),\n <Input\n key=\"metric\"\n name=\"metric\"\n label=\"关联指标\"\n placeholder={metricPlaceholder || '可选'}\n maxLength={40}\n disabled={lockMetric}\n />,\n ];\n\n return (\n <div className={classNames('create-action-form', styles['create-action-form'])}>\n <FormDataSync onChange={handleFormSync} />\n <SetFormFields patch={{ allocatorUserId: defaultAllocatorUserId }} />\n <FormInfo\n column={1}\n list={[\n <Input\n key=\"title\"\n name=\"title\"\n label=\"任务标题\"\n rule=\"REQ\"\n placeholder={titlePlaceholder || '请输入任务标题'}\n maxLength={120}\n />,\n <SuperSelect\n key=\"dimension\"\n name=\"dimension\"\n label=\"任务类型\"\n rule=\"REQ\"\n single\n options={dimensionOptions}\n placeholder=\"选择任务类型\"\n />,\n <PersonRoleCascaderField\n key=\"allocatorUserId\"\n name=\"allocatorUserId\"\n label=\"分配人\"\n cascadeOptions={allocatorCascade}\n loading={personLoading}\n emptyHint={emptyAllocatorHint}\n placeholder={allocatorPlaceholder}\n defaultUserId={defaultAllocatorUserId}\n />,\n <PersonRoleCascaderField\n key=\"assigneeUserId\"\n name=\"assigneeUserId\"\n label=\"执行人\"\n cascadeOptions={assigneeCascade}\n loading={personLoading}\n emptyHint={emptyAssigneeHint}\n placeholder={assigneePlaceholder}\n />,\n <DatePicker\n key=\"dueDate\"\n name=\"dueDate\"\n label=\"截止日期\"\n labelTips=\"可选\"\n format=\"YYYY-MM-DD\"\n placeholder=\"选择截止日期\"\n allowClear\n />,\n ...scopeFields,\n ]}\n />\n {useNoneScope && noneScopeHint ? (\n <p className={classNames('create-action-none-hint', styles['create-action-none-hint'])}>\n {noneScopeHint}\n </p>\n ) : null}\n </div>\n );\n};\n\nexport default CreateActionForm;\n"],"names":["CREATE_ACTION_VARIETY_PAGE_SIZE","CATALOG_LOAD_TIMEOUT_MS","settleWithTimeout","promise","ms","value","reason","resolve","asFactoryValue","raw","renderPersonOptionLabel","name","org","jsxs","styles","jsx","CreateActionForm","scopeLock","varietyLabel","lockedContext","scopeModeProp","titlePlaceholder","metricPlaceholder","noneScopeHint","dimensionOptions","loaders","emptyAssigneeHint","emptyAllocatorHint","allocatorPlaceholder","assigneePlaceholder","onAssigneeOptionsReady","onAllocatorOptionsReady","formApi","useFormApi","assigneeCascade","setAssigneeCascade","useState","allocatorCascade","setAllocatorCascade","factoryOptions","setFactoryOptions","personLoading","setPersonLoading","factoryLoading","setFactoryLoading","defaultAllocatorUserId","setDefaultAllocatorUserId","factoryKey","setFactoryKey","_a","factoryRef","useRef","useLockedContext","useNoneScope","lockFactory","_b","lockVariety","_c","lockMetric","_d","hasVarietyPage","canLoadVariety","factorySelectOptions","useMemo","locked","o","varietySelectApi","loadPage","createPagedSuperSelectApi","query","message","varietyGetSearchProps","pagedSuperSelectGetSearchProps","varietyPagination","pagedSuperSelectPagination","handleFormSync","useCallback","data","next","prev","useEffect","cancelled","usersRes","allocRes","pick","factoriesRes","scopeFields","field","idx","Input","SuperSelect","classNames","FormDataSync","SetFormFields","FormInfo","PersonRoleCascaderField","DatePicker"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreateActionForm.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/CreateActionForm.tsx"],"sourcesContent":["import { useCallback, useEffect, useMemo, useRef, useState, type ReactNode } from 'react';\nimport {\n DatePicker,\n FormInfo,\n Input,\n SuperSelect,\n createPagedSuperSelectApi,\n pagedSuperSelectGetSearchProps,\n pagedSuperSelectPagination,\n} from '../../../FormInfo';\nimport FormDataSync from '../../../Form/FormDataSync';\nimport { useFormApi } from '../../../Form';\nimport { message } from 'antd';\nimport classNames from 'classnames';\nimport PersonRoleCascaderField from './PersonRoleCascaderField';\nimport { SetFormFields } from './SetFormFields';\nimport type {\n ActionPersonCascadeOption,\n ActionPersonOption,\n CreateActionDimensionOption,\n CreateActionLoaders,\n CreateActionScopeLock,\n CreateActionScopeMode,\n CreateActionSelectOption,\n LockedContextField,\n} from './types';\nimport styles from './CreateActionForm.module.scss';\n\n/** 建单品种下拉页大小(服务端分页) */\nexport const CREATE_ACTION_VARIETY_PAGE_SIZE = 20;\n\nconst CATALOG_LOAD_TIMEOUT_MS = 15_000;\n\nfunction settleWithTimeout<T>(promise: Promise<T>, ms: number): Promise<PromiseSettledResult<T>> {\n return Promise.race([\n promise.then(\n (value) => ({ status: 'fulfilled' as const, value }),\n (reason) => ({ status: 'rejected' as const, reason }),\n ),\n new Promise<PromiseSettledResult<T>>((resolve) => {\n setTimeout(() => resolve({ status: 'rejected', reason: new Error('timeout') }), ms);\n }),\n ]);\n}\n\nfunction asFactoryValue(raw: unknown): string {\n if (raw == null || raw === '') return '';\n if (Array.isArray(raw)) return String(raw[0] ?? '').trim();\n if (typeof raw === 'object') {\n const o = raw as { value?: unknown };\n return String(o.value ?? '').trim();\n }\n return String(raw).trim();\n}\n\nexport type CreateActionFormProps = {\n scopeLock?: CreateActionScopeLock;\n varietyLabel?: string;\n lockedContext?: LockedContextField[];\n /**\n * 业务上下文字段模式。有 lockedContext 时强制 locked。\n * 默认 form(S3);EAM 主动新建传 none。\n */\n scopeMode?: CreateActionScopeMode;\n /** F4:任务标题 placeholder(App 注入;禁写死业务文案) */\n titlePlaceholder?: string;\n /** F4:关联指标 placeholder */\n metricPlaceholder?: string;\n /** scopeMode=none 时展示在截止日期下的短提示(App 注入) */\n noneScopeHint?: string;\n dimensionOptions: CreateActionDimensionOption[];\n loaders: CreateActionLoaders;\n emptyAssigneeHint?: string;\n emptyAllocatorHint?: string;\n allocatorPlaceholder?: string;\n assigneePlaceholder?: string;\n /**\n * 分配人只读。新建/编辑均禁用改派(默认 true);\n * 值由 pickDefaultAllocatorUserId / 表单初值写入。\n */\n allocatorDisabled?: boolean;\n /** 编辑回填:执行人 userId(级联选项就绪后写入) */\n defaultAssigneeUserId?: string;\n onAssigneeOptionsReady?: (options: ActionPersonOption[]) => void;\n onAllocatorOptionsReady?: (options: ActionPersonOption[]) => void;\n};\n\nexport function renderPersonOptionLabel(name: string, org: string): ReactNode {\n if (!org) return name;\n return (\n <span className={styles['assignee-option']}>\n <span className={styles['assignee-option-name']}>{name}</span>\n <span className={styles['assignee-option-org']}>{org}</span>\n </span>\n );\n}\n\ntype OpenApiLike = {\n setFieldValue: (\n token: { name: string },\n value: unknown,\n options?: { runValidate?: boolean },\n ) => void;\n};\n\n/** 新建跟踪任务 / 下发任务字段(FormModal + FormInfo);数据经 loaders 注入 */\nconst CreateActionForm: React.FC<CreateActionFormProps> = ({\n scopeLock,\n varietyLabel,\n lockedContext,\n scopeMode: scopeModeProp = 'form',\n titlePlaceholder,\n metricPlaceholder,\n noneScopeHint,\n dimensionOptions,\n loaders,\n emptyAssigneeHint = '暂无执行人',\n emptyAllocatorHint = '暂无分配人',\n allocatorPlaceholder = '先选角色,再选分配人',\n assigneePlaceholder = '先选角色,再选执行人',\n allocatorDisabled = true,\n defaultAssigneeUserId = '',\n onAssigneeOptionsReady,\n onAllocatorOptionsReady,\n}) => {\n const formApi = useFormApi() as { openApi: OpenApiLike };\n const [assigneeCascade, setAssigneeCascade] = useState<ActionPersonCascadeOption[]>([]);\n const [allocatorCascade, setAllocatorCascade] = useState<ActionPersonCascadeOption[]>([]);\n const [factoryOptions, setFactoryOptions] = useState<CreateActionSelectOption[]>([]);\n const [personLoading, setPersonLoading] = useState(true);\n const [factoryLoading, setFactoryLoading] = useState(false);\n const [defaultAllocatorUserId, setDefaultAllocatorUserId] = useState('');\n const [factoryKey, setFactoryKey] = useState(() => scopeLock?.factory?.trim() || '');\n const factoryRef = useRef(scopeLock?.factory?.trim() || '');\n\n const useLockedContext = Boolean(lockedContext && lockedContext.length > 0);\n const resolvedScopeMode: CreateActionScopeMode = useLockedContext\n ? 'locked'\n : scopeModeProp === 'none'\n ? 'none'\n : 'form';\n const useNoneScope = resolvedScopeMode === 'none';\n const lockFactory = Boolean(scopeLock?.factory?.trim());\n const lockVariety = Boolean(scopeLock?.variety?.trim());\n const lockMetric = Boolean(scopeLock?.metric?.trim());\n const hasVarietyPage = typeof loaders.loadVarietyPage === 'function';\n const canLoadVariety = Boolean(factoryKey) || lockVariety;\n\n const factorySelectOptions = useMemo(() => {\n const locked = scopeLock?.factory?.trim();\n if (!locked) return factoryOptions;\n if (factoryOptions.some((o) => o.value === locked)) return factoryOptions;\n return [{ value: locked, label: locked }, ...factoryOptions];\n }, [factoryOptions, scopeLock?.factory]);\n\n const varietySelectApi = useMemo(() => {\n if (!hasVarietyPage || !loaders.loadVarietyPage) return undefined;\n const loadPage = loaders.loadVarietyPage;\n return createPagedSuperSelectApi({\n pageSize: CREATE_ACTION_VARIETY_PAGE_SIZE,\n loadPage: (query) =>\n loadPage({\n ...query,\n factory: factoryRef.current,\n }),\n onError: () => message.error('品种列表加载失败'),\n });\n }, [hasVarietyPage, loaders.loadVarietyPage]);\n\n const varietyGetSearchProps = useMemo(\n () => pagedSuperSelectGetSearchProps(CREATE_ACTION_VARIETY_PAGE_SIZE),\n [],\n );\n\n const varietyPagination = useMemo(\n () => pagedSuperSelectPagination(CREATE_ACTION_VARIETY_PAGE_SIZE),\n [],\n );\n\n const handleFormSync = useCallback(\n (data: Record<string, unknown>) => {\n if (useLockedContext || useNoneScope) return;\n const next = asFactoryValue(data.factory);\n if (next === factoryRef.current) return;\n const prev = factoryRef.current;\n factoryRef.current = next;\n setFactoryKey(next);\n if (prev && next !== prev && hasVarietyPage && !lockVariety) {\n queueMicrotask(() => {\n formApi.openApi.setFieldValue({ name: 'variety' }, '', { runValidate: false });\n });\n }\n },\n [formApi.openApi, hasVarietyPage, lockVariety, useLockedContext, useNoneScope],\n );\n\n useEffect(() => {\n const locked = scopeLock?.factory?.trim() || '';\n if (!locked) return;\n factoryRef.current = locked;\n setFactoryKey(locked);\n }, [scopeLock?.factory]);\n\n /** 人员目录:独立加载 + 超时,避免拖死分厂 */\n useEffect(() => {\n let cancelled = false;\n setPersonLoading(true);\n Promise.all([\n settleWithTimeout(loaders.loadAssigneeCatalog(), CATALOG_LOAD_TIMEOUT_MS),\n settleWithTimeout(loaders.loadAllocatorCatalog(), CATALOG_LOAD_TIMEOUT_MS),\n ])\n .then(([usersRes, allocRes]) => {\n if (cancelled) return;\n if (usersRes.status === 'fulfilled') {\n setAssigneeCascade(usersRes.value.cascadeOptions);\n onAssigneeOptionsReady?.(usersRes.value.options);\n } else {\n message.error('执行人列表加载失败');\n setAssigneeCascade([]);\n onAssigneeOptionsReady?.([]);\n }\n if (allocRes.status === 'fulfilled') {\n setAllocatorCascade(allocRes.value.cascadeOptions);\n onAllocatorOptionsReady?.(allocRes.value.options);\n const pick = loaders.pickDefaultAllocatorUserId;\n setDefaultAllocatorUserId(pick ? pick(allocRes.value.options) : '');\n } else {\n message.error('分配人列表加载失败');\n setAllocatorCascade([]);\n onAllocatorOptionsReady?.([]);\n }\n })\n .finally(() => {\n if (!cancelled) setPersonLoading(false);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only load\n }, []);\n\n /** 分厂:与人员并行、互不阻塞(对齐 EAM CycleForm 静态 options) */\n useEffect(() => {\n if (useLockedContext || useNoneScope || !loaders.loadFactoryOptions) return;\n let cancelled = false;\n setFactoryLoading(true);\n settleWithTimeout(loaders.loadFactoryOptions(), CATALOG_LOAD_TIMEOUT_MS)\n .then((factoriesRes) => {\n if (cancelled) return;\n if (factoriesRes.status === 'fulfilled') {\n setFactoryOptions(factoriesRes.value);\n } else {\n message.error('分厂列表加载失败');\n setFactoryOptions([]);\n }\n })\n .finally(() => {\n if (!cancelled) setFactoryLoading(false);\n });\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps -- mount-only load\n }, []);\n\n const scopeFields: ReactNode[] = useLockedContext\n ? (lockedContext || []).map((field, idx) => (\n <Input\n key={`locked-${idx}-${field.label}`}\n name={`lockedContext_${idx}`}\n label={field.label}\n disabled\n />\n ))\n : useNoneScope\n ? []\n : [\n <SuperSelect\n key=\"factory\"\n name=\"factory\"\n label=\"分厂\"\n single\n options={factorySelectOptions}\n placeholder={factoryLoading ? '加载分厂…' : '选择分厂'}\n disabled={factoryLoading || lockFactory}\n allowClear={!lockFactory}\n />,\n hasVarietyPage && varietySelectApi ? (\n <SuperSelect\n key={`variety-${factoryKey || 'none'}`}\n name=\"variety\"\n label={varietyLabel || '品种'}\n single\n api={varietySelectApi}\n getSearchProps={varietyGetSearchProps}\n pagination={varietyPagination}\n placeholder={canLoadVariety ? '选择品种' : '请先选择分厂'}\n disabled={lockVariety || !canLoadVariety}\n allowClear={!lockVariety}\n searchPlaceholder=\"搜索品种\"\n />\n ) : (\n <SuperSelect\n key=\"variety\"\n name=\"variety\"\n label={varietyLabel || '品种'}\n single\n options={[]}\n placeholder=\"App 未注入 loadVarietyPage\"\n disabled\n />\n ),\n <Input\n key=\"metric\"\n name=\"metric\"\n label=\"关联指标\"\n placeholder={metricPlaceholder || '可选'}\n maxLength={40}\n disabled={lockMetric}\n />,\n ];\n\n const assigneeDefault = String(defaultAssigneeUserId || '').trim();\n\n return (\n <div className={classNames('create-action-form', styles['create-action-form'])}>\n <FormDataSync onChange={handleFormSync} />\n <SetFormFields\n patch={{\n allocatorUserId: defaultAllocatorUserId,\n ...(assigneeDefault ? { assigneeUserId: assigneeDefault } : {}),\n }}\n />\n <FormInfo\n column={1}\n list={[\n <Input\n key=\"title\"\n name=\"title\"\n label=\"任务标题\"\n rule=\"REQ\"\n placeholder={titlePlaceholder || '请输入任务标题'}\n maxLength={120}\n />,\n <SuperSelect\n key=\"dimension\"\n name=\"dimension\"\n label=\"任务类型\"\n rule=\"REQ\"\n single\n options={dimensionOptions}\n placeholder=\"选择任务类型\"\n />,\n <PersonRoleCascaderField\n key=\"allocatorUserId\"\n name=\"allocatorUserId\"\n label=\"分配人\"\n cascadeOptions={allocatorCascade}\n loading={personLoading}\n disabled={allocatorDisabled}\n emptyHint={emptyAllocatorHint}\n placeholder={allocatorPlaceholder}\n defaultUserId={defaultAllocatorUserId}\n />,\n <PersonRoleCascaderField\n key=\"assigneeUserId\"\n name=\"assigneeUserId\"\n label=\"执行人\"\n cascadeOptions={assigneeCascade}\n loading={personLoading}\n emptyHint={emptyAssigneeHint}\n placeholder={assigneePlaceholder}\n defaultUserId={assigneeDefault}\n />,\n <DatePicker\n key=\"dueDate\"\n name=\"dueDate\"\n label=\"截止日期\"\n labelTips=\"可选\"\n format=\"YYYY-MM-DD\"\n placeholder=\"选择截止日期\"\n allowClear\n />,\n ...scopeFields,\n ]}\n />\n {useNoneScope && noneScopeHint ? (\n <p className={classNames('create-action-none-hint', styles['create-action-none-hint'])}>\n {noneScopeHint}\n </p>\n ) : null}\n </div>\n );\n};\n\nexport default CreateActionForm;\n"],"names":["CREATE_ACTION_VARIETY_PAGE_SIZE","CATALOG_LOAD_TIMEOUT_MS","settleWithTimeout","promise","ms","value","reason","resolve","asFactoryValue","raw","renderPersonOptionLabel","name","org","jsxs","styles","jsx","CreateActionForm","scopeLock","varietyLabel","lockedContext","scopeModeProp","titlePlaceholder","metricPlaceholder","noneScopeHint","dimensionOptions","loaders","emptyAssigneeHint","emptyAllocatorHint","allocatorPlaceholder","assigneePlaceholder","allocatorDisabled","defaultAssigneeUserId","onAssigneeOptionsReady","onAllocatorOptionsReady","formApi","useFormApi","assigneeCascade","setAssigneeCascade","useState","allocatorCascade","setAllocatorCascade","factoryOptions","setFactoryOptions","personLoading","setPersonLoading","factoryLoading","setFactoryLoading","defaultAllocatorUserId","setDefaultAllocatorUserId","factoryKey","setFactoryKey","_a","factoryRef","useRef","useLockedContext","useNoneScope","lockFactory","_b","lockVariety","_c","lockMetric","_d","hasVarietyPage","canLoadVariety","factorySelectOptions","useMemo","locked","o","varietySelectApi","loadPage","createPagedSuperSelectApi","query","message","varietyGetSearchProps","pagedSuperSelectGetSearchProps","varietyPagination","pagedSuperSelectPagination","handleFormSync","useCallback","data","next","prev","useEffect","cancelled","usersRes","allocRes","pick","factoriesRes","scopeFields","field","idx","Input","SuperSelect","assigneeDefault","classNames","FormDataSync","SetFormFields","FormInfo","PersonRoleCascaderField","DatePicker"],"mappings":"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"}
|
|
@@ -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(
|
|
24
|
-
const
|
|
25
|
-
if (!
|
|
26
|
-
if (l[
|
|
27
|
-
if (d[
|
|
28
|
-
const t =
|
|
29
|
-
return l[t] ? t :
|
|
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(
|
|
32
|
-
return !!(
|
|
33
|
+
function p(e) {
|
|
34
|
+
return !!(e && l[e]);
|
|
33
35
|
}
|
|
34
|
-
function s(
|
|
35
|
-
const
|
|
36
|
-
for (const t of
|
|
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
|
|
40
|
+
return i.find(Boolean) || "";
|
|
39
41
|
}
|
|
40
|
-
function
|
|
41
|
-
const
|
|
42
|
-
return
|
|
42
|
+
function b(e) {
|
|
43
|
+
const i = s(e);
|
|
44
|
+
return i && l[i] || "";
|
|
43
45
|
}
|
|
44
|
-
function
|
|
45
|
-
const
|
|
46
|
-
return
|
|
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 _(
|
|
49
|
-
return String(
|
|
50
|
+
function _(e) {
|
|
51
|
+
return String(e || "").trim().toLowerCase();
|
|
50
52
|
}
|
|
51
|
-
function
|
|
52
|
-
return f.has(_(
|
|
53
|
+
function k(e) {
|
|
54
|
+
return f.has(_(e));
|
|
53
55
|
}
|
|
54
|
-
function
|
|
55
|
-
return String(
|
|
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(
|
|
58
|
-
return
|
|
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
|
|
61
|
-
const
|
|
62
|
-
return
|
|
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:
|
|
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
|
-
} :
|
|
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: "查看预警" } } :
|
|
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 ?
|
|
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
|
|
77
|
-
const
|
|
78
|
-
let t = e
|
|
79
|
-
return !t &&
|
|
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(
|
|
82
|
-
const t =
|
|
83
|
-
let
|
|
84
|
-
return !
|
|
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
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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":"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"}
|