@hkyhy/marsun-components-core 0.1.138 → 0.1.139
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/dist/components/Iam/client.d.ts +3 -0
- package/dist/components/Iam/index.d.ts +1 -1
- package/dist/components/Iam/pages/IamUsersPage.d.ts +15 -1
- package/dist/components/Iam/pages/IamUsersPage.js +171 -162
- package/dist/components/Iam/pages/IamUsersPage.js.map +1 -1
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.d.ts +2 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js +97 -83
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js.map +1 -1
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.d.ts +2 -0
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js +111 -106
- package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js.map +1 -1
- package/dist/components/Tools/ActionTracking/CreateAction/types.d.ts +4 -0
- package/dist/components/Tools/Inbox/InboxBell/inboxItemActions.js +60 -46
- package/dist/components/Tools/Inbox/InboxBell/inboxItemActions.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,145 +1,150 @@
|
|
|
1
1
|
import { jsx as Y } from "react/jsx-runtime";
|
|
2
|
-
import { useState as
|
|
3
|
-
import { message as
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import { addDaysYmd as
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
const
|
|
2
|
+
import { useState as Mt, useRef as x, useCallback as z, useMemo as bt } from "react";
|
|
3
|
+
import { message as j } from "antd";
|
|
4
|
+
import wt from "classnames";
|
|
5
|
+
import Bt from "dayjs";
|
|
6
|
+
import Ut from "./CreateActionForm.js";
|
|
7
|
+
import { addDaysYmd as jt, validateCreateActionPersons as Lt, createActionPersonWarnMessage as Nt, normalizeDueDateYmd as Pt, personDisplayName as C } from "./submitHelpers.js";
|
|
8
|
+
import Rt from "./CreateActionModal.module.scss.js";
|
|
9
|
+
import _t from "../../../FormInfo/FormModal.js";
|
|
10
|
+
const Ct = ({
|
|
11
11
|
open: V,
|
|
12
12
|
onClose: W,
|
|
13
13
|
onCreated: $,
|
|
14
14
|
variant: q = "create",
|
|
15
|
-
prefill:
|
|
15
|
+
prefill: t,
|
|
16
16
|
lockPrefill: G = !1,
|
|
17
|
-
lockedContext:
|
|
17
|
+
lockedContext: i,
|
|
18
18
|
scopeMode: J = "form",
|
|
19
19
|
varietyLabel: K,
|
|
20
20
|
titlePlaceholder: Q,
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
21
|
+
descriptionPlaceholder: X,
|
|
22
|
+
metricPlaceholder: Z,
|
|
23
|
+
noneScopeHint: D,
|
|
24
|
+
title: p,
|
|
25
|
+
okText: f,
|
|
26
|
+
dimensionOptions: d,
|
|
27
|
+
loaders: l,
|
|
28
|
+
emptyAssigneeHint: tt,
|
|
29
|
+
emptyAllocatorHint: ot,
|
|
30
|
+
onSubmit: st,
|
|
31
|
+
onAllocatorConfirmed: I,
|
|
32
|
+
defaultStatus: M = "approved",
|
|
33
|
+
defaultDueDays: L = 7,
|
|
34
|
+
width: et = 560,
|
|
35
|
+
zIndex: nt = 1300
|
|
35
36
|
}) => {
|
|
36
|
-
var
|
|
37
|
-
const [
|
|
38
|
-
|
|
39
|
-
}, []),
|
|
40
|
-
|
|
41
|
-
}, []),
|
|
42
|
-
var
|
|
43
|
-
const
|
|
44
|
-
return (
|
|
45
|
-
|
|
37
|
+
var _, E, F;
|
|
38
|
+
const [ct, N] = Mt(!1), P = x([]), R = x([]), at = z((o) => {
|
|
39
|
+
P.current = o;
|
|
40
|
+
}, []), it = z((o) => {
|
|
41
|
+
R.current = o;
|
|
42
|
+
}, []), u = q === "dispatch", e = !!(i && i.length > 0), s = !e && J === "none", m = ((_ = t == null ? void 0 : t.factory) == null ? void 0 : _.trim()) || "", y = ((E = t == null ? void 0 : t.variety) == null ? void 0 : E.trim()) || "", S = ((F = t == null ? void 0 : t.metric) == null ? void 0 : F.trim()) || "", rt = !e && !s && (u || G) && !!(m || y || S), dt = p || (u ? "下发任务" : "新建跟踪任务"), mt = f || (u ? "下发" : "创建"), vt = bt(() => {
|
|
43
|
+
var c, v, g, r;
|
|
44
|
+
const o = {};
|
|
45
|
+
return (i || []).forEach((h, k) => {
|
|
46
|
+
o[`lockedContext_${k}`] = h.value;
|
|
46
47
|
}), {
|
|
47
|
-
title: ((
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
title: ((c = t == null ? void 0 : t.title) == null ? void 0 : c.trim()) || "",
|
|
49
|
+
description: ((v = t == null ? void 0 : t.description) == null ? void 0 : v.trim()) || "",
|
|
50
|
+
dimension: ((g = t == null ? void 0 : t.dimension) == null ? void 0 : g.trim()) || ((r = d[0]) == null ? void 0 : r.value) || "",
|
|
51
|
+
status: M,
|
|
50
52
|
allocatorUserId: "",
|
|
51
53
|
assigneeUserId: "",
|
|
52
|
-
dueDate:
|
|
53
|
-
factory:
|
|
54
|
-
variety:
|
|
55
|
-
metric:
|
|
56
|
-
...
|
|
54
|
+
dueDate: Bt(jt(L)),
|
|
55
|
+
factory: e || s ? "" : m,
|
|
56
|
+
variety: e || s ? "" : y,
|
|
57
|
+
metric: e || s ? "" : S,
|
|
58
|
+
...o
|
|
57
59
|
};
|
|
58
60
|
}, [
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
i,
|
|
62
|
+
m,
|
|
61
63
|
y,
|
|
62
64
|
S,
|
|
63
|
-
s,
|
|
64
65
|
e,
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
66
|
+
s,
|
|
67
|
+
t == null ? void 0 : t.title,
|
|
68
|
+
t == null ? void 0 : t.description,
|
|
69
|
+
t == null ? void 0 : t.dimension,
|
|
70
|
+
d,
|
|
71
|
+
M,
|
|
72
|
+
L
|
|
73
|
+
]), gt = async (o) => {
|
|
74
|
+
var k, O, T;
|
|
75
|
+
const c = Lt(
|
|
76
|
+
String(o.allocatorUserId || ""),
|
|
77
|
+
String(o.assigneeUserId || ""),
|
|
78
|
+
R.current,
|
|
79
|
+
P.current
|
|
77
80
|
);
|
|
78
|
-
if (!
|
|
79
|
-
throw
|
|
80
|
-
const { allocator:
|
|
81
|
-
|
|
81
|
+
if (!c.ok)
|
|
82
|
+
throw j.warning(Nt(c.code)), new Error(c.code);
|
|
83
|
+
const { allocator: v, assignee: g } = c, r = v.value, h = g.value;
|
|
84
|
+
I == null || I(r), N(!0);
|
|
82
85
|
try {
|
|
83
|
-
const
|
|
86
|
+
const n = Pt(o.dueDate), a = C(g, h), ut = C(v, r), b = e ? m : s ? "" : String(o.factory || "").trim(), A = e || s ? "" : String(o.variety || "").trim(), w = e || s ? "" : String(o.metric || "").trim(), H = String(o.title || "").trim(), yt = String(o.description || "").trim(), B = String(o.dimension || "").trim() || String((t == null ? void 0 : t.dimension) || "").trim() || ((k = d[0]) == null ? void 0 : k.value) || "", St = ((T = (O = d.find((U) => U.value === B)) == null ? void 0 : O.label) == null ? void 0 : T.trim()) || B, ht = e ? (i || []).map((U) => U.value).filter(Boolean).join(" · ") : s ? [H, St].filter(Boolean).join(" · ") : [b, A, w].filter(Boolean).join(" · "), kt = {
|
|
84
87
|
title: H,
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
description: yt || void 0,
|
|
89
|
+
dimension: B,
|
|
90
|
+
status: String(o.status || M),
|
|
91
|
+
assignee: a,
|
|
88
92
|
assigneeUserId: h,
|
|
89
|
-
allocator:
|
|
90
|
-
allocatorUserId:
|
|
91
|
-
owner:
|
|
92
|
-
dueDate:
|
|
93
|
-
factory:
|
|
93
|
+
allocator: ut,
|
|
94
|
+
allocatorUserId: r,
|
|
95
|
+
owner: a,
|
|
96
|
+
dueDate: n || void 0,
|
|
97
|
+
factory: b,
|
|
94
98
|
variety: A,
|
|
95
|
-
metric:
|
|
96
|
-
factoryCode:
|
|
97
|
-
factoryName:
|
|
98
|
-
verifyMetric:
|
|
99
|
-
eventLabel:
|
|
100
|
-
},
|
|
101
|
-
|
|
102
|
-
} catch (
|
|
103
|
-
const
|
|
104
|
-
throw
|
|
99
|
+
metric: w,
|
|
100
|
+
factoryCode: s ? void 0 : (t == null ? void 0 : t.factoryCode) || void 0,
|
|
101
|
+
factoryName: b || void 0,
|
|
102
|
+
verifyMetric: w || void 0,
|
|
103
|
+
eventLabel: ht
|
|
104
|
+
}, It = await st(kt);
|
|
105
|
+
j.success(u ? "已下发任务" : "已创建跟踪任务"), $(It);
|
|
106
|
+
} catch (n) {
|
|
107
|
+
const a = n instanceof Error ? n.message : "";
|
|
108
|
+
throw a === "missing_allocator" || a === "invalid_allocator" || a === "missing_assignee" || a === "invalid_assignee" || j.error(n instanceof Error ? n.message : "创建失败"), n;
|
|
105
109
|
} finally {
|
|
106
|
-
|
|
110
|
+
N(!1);
|
|
107
111
|
}
|
|
108
112
|
};
|
|
109
113
|
return /* @__PURE__ */ Y(
|
|
110
|
-
|
|
114
|
+
_t,
|
|
111
115
|
{
|
|
112
|
-
className:
|
|
113
|
-
title:
|
|
116
|
+
className: wt("create-action-modal", Rt["create-action-modal"]),
|
|
117
|
+
title: dt,
|
|
114
118
|
open: V,
|
|
115
119
|
onCancel: W,
|
|
116
120
|
autoClose: !0,
|
|
117
|
-
okText:
|
|
118
|
-
width:
|
|
119
|
-
zIndex:
|
|
121
|
+
okText: mt,
|
|
122
|
+
width: et,
|
|
123
|
+
zIndex: nt,
|
|
120
124
|
destroyOnHidden: !0,
|
|
121
|
-
okButtonProps: { loading:
|
|
125
|
+
okButtonProps: { loading: ct },
|
|
122
126
|
formProps: {
|
|
123
|
-
data:
|
|
124
|
-
onSubmit:
|
|
127
|
+
data: vt,
|
|
128
|
+
onSubmit: gt
|
|
125
129
|
},
|
|
126
130
|
children: /* @__PURE__ */ Y(
|
|
127
|
-
|
|
131
|
+
Ut,
|
|
128
132
|
{
|
|
129
|
-
onAssigneeOptionsReady:
|
|
130
|
-
onAllocatorOptionsReady:
|
|
131
|
-
lockedContext:
|
|
132
|
-
scopeMode:
|
|
133
|
-
varietyLabel:
|
|
133
|
+
onAssigneeOptionsReady: at,
|
|
134
|
+
onAllocatorOptionsReady: it,
|
|
135
|
+
lockedContext: e ? i : void 0,
|
|
136
|
+
scopeMode: e ? "locked" : s ? "none" : "form",
|
|
137
|
+
varietyLabel: e || s ? void 0 : K,
|
|
134
138
|
titlePlaceholder: Q,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
139
|
+
descriptionPlaceholder: X,
|
|
140
|
+
metricPlaceholder: s ? void 0 : Z,
|
|
141
|
+
noneScopeHint: s ? D : void 0,
|
|
142
|
+
dimensionOptions: d,
|
|
143
|
+
loaders: l,
|
|
144
|
+
emptyAssigneeHint: tt,
|
|
145
|
+
emptyAllocatorHint: ot,
|
|
146
|
+
scopeLock: rt ? {
|
|
147
|
+
factory: m || void 0,
|
|
143
148
|
variety: y || void 0,
|
|
144
149
|
metric: S || void 0
|
|
145
150
|
} : void 0
|
|
@@ -149,6 +154,6 @@ const zo = ({
|
|
|
149
154
|
);
|
|
150
155
|
};
|
|
151
156
|
export {
|
|
152
|
-
|
|
157
|
+
Ct as default
|
|
153
158
|
};
|
|
154
159
|
//# sourceMappingURL=CreateActionModal.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateActionModal.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/CreateActionModal.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { FormModal } from '../../../FormInfo';\nimport { message } from 'antd';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport CreateActionForm from './CreateActionForm';\nimport {\n addDaysYmd,\n createActionPersonWarnMessage,\n normalizeDueDateYmd,\n personDisplayName,\n validateCreateActionPersons,\n} from './submitHelpers';\nimport type {\n ActionPersonOption,\n CreateActionDimensionOption,\n CreateActionLoaders,\n CreateActionPrefill,\n CreateActionScopeMode,\n CreateActionSubmitPayload,\n LockedContextField,\n} from './types';\nimport styles from './CreateActionModal.module.scss';\n\nexport type CreateActionModalProps = {\n open: boolean;\n onClose: () => void;\n onCreated: (actionId?: string) => void;\n variant?: 'create' | 'dispatch';\n prefill?: CreateActionPrefill;\n lockPrefill?: boolean;\n lockedContext?: LockedContextField[];\n /**\n * 业务上下文字段模式。有 lockedContext 时强制 locked。\n * 默认 form(S3);EAM `/actions` 主动新建传 none。\n */\n scopeMode?: CreateActionScopeMode;\n /** @deprecated 有 lockedContext 时忽略 */\n varietyLabel?: string;\n /** F4:任务标题 placeholder */\n titlePlaceholder?: string;\n /** F4:关联指标 placeholder */\n metricPlaceholder?: string;\n /** scopeMode=none 时短提示(App 注入) */\n noneScopeHint?: string;\n /** 弹窗标题;默认按 variant */\n title?: string;\n /** 主按钮文案;默认 下发/创建 */\n okText?: string;\n dimensionOptions: CreateActionDimensionOption[];\n loaders: CreateActionLoaders;\n emptyAssigneeHint?: string;\n emptyAllocatorHint?: string;\n /**\n * App 注入提交(对齐 EAM:校验通过后写 API / domainSubmit)。\n * 返回新建 actionId(可选)。\n */\n onSubmit: (payload: CreateActionSubmitPayload) => Promise<string | undefined>;\n /** 分配人确认后回调(App 可写 localStorage) */\n onAllocatorConfirmed?: (allocatorUserId: string) => void;\n defaultStatus?: string;\n defaultDueDays?: number;\n width?: number;\n zIndex?: number;\n};\n\n/**\n * 主动新建 / 预警下发任务 · FormModal + FormInfo。\n *\n * ## App 注入契约(W1)\n * - `loaders`:人员级联 + 分厂选项(禁 DEMO / 禁 core 直连业务 API;scopeMode=none 可不传分厂/品种)\n * - `dimensionOptions`:任务类型码表(展示名取自 App 数据)\n * - `scopeMode`:form(默认)| locked(有 lockedContext 强制)| none(EAM 主动新建)\n * - `titlePlaceholder` / `metricPlaceholder`:F4,由 App 注入业务文案\n * - `onSubmit`:对齐 EAM 提交面;actor / analysisId / eventSource / REST 由 App 补齐\n * - EP 门禁:由 App 决定是否打开本 Modal(禁 DEMO 恒真)\n */\nconst CreateActionModal: React.FC<CreateActionModalProps> = ({\n open,\n onClose,\n onCreated,\n variant = 'create',\n prefill,\n lockPrefill = false,\n lockedContext,\n scopeMode: scopeModeProp = 'form',\n varietyLabel,\n titlePlaceholder,\n metricPlaceholder,\n noneScopeHint,\n title: titleProp,\n okText: okTextProp,\n dimensionOptions,\n loaders,\n emptyAssigneeHint,\n emptyAllocatorHint,\n onSubmit,\n onAllocatorConfirmed,\n defaultStatus = 'approved',\n defaultDueDays = 7,\n width = 560,\n zIndex = 1300,\n}) => {\n const [saving, setSaving] = useState(false);\n const assigneeOptsRef = useRef<ActionPersonOption[]>([]);\n const allocatorOptsRef = useRef<ActionPersonOption[]>([]);\n const onAssigneeOptionsReady = useCallback((opts: ActionPersonOption[]) => {\n assigneeOptsRef.current = opts;\n }, []);\n const onAllocatorOptionsReady = useCallback((opts: ActionPersonOption[]) => {\n allocatorOptsRef.current = opts;\n }, []);\n\n const isDispatch = variant === 'dispatch';\n const useLocked = Boolean(lockedContext && lockedContext.length > 0);\n const useNoneScope = !useLocked && scopeModeProp === 'none';\n const scopeFactory = prefill?.factory?.trim() || '';\n const scopeVariety = prefill?.variety?.trim() || '';\n const scopeMetric = prefill?.metric?.trim() || '';\n const lockScope =\n !useLocked &&\n !useNoneScope &&\n (isDispatch || lockPrefill) &&\n Boolean(scopeFactory || scopeVariety || scopeMetric);\n\n const modalTitle = titleProp || (isDispatch ? '下发任务' : '新建跟踪任务');\n const okText = okTextProp || (isDispatch ? '下发' : '创建');\n\n const formInitialData = useMemo(() => {\n const lockedFields: Record<string, string> = {};\n (lockedContext || []).forEach((field, idx) => {\n lockedFields[`lockedContext_${idx}`] = field.value;\n });\n return {\n title: prefill?.title?.trim() || '',\n dimension: prefill?.dimension?.trim() || dimensionOptions[0]?.value || '',\n status: defaultStatus,\n allocatorUserId: '',\n assigneeUserId: '',\n dueDate: dayjs(addDaysYmd(defaultDueDays)),\n factory: useLocked || useNoneScope ? '' : scopeFactory,\n variety: useLocked || useNoneScope ? '' : scopeVariety,\n metric: useLocked || useNoneScope ? '' : scopeMetric,\n ...lockedFields,\n };\n }, [\n lockedContext,\n scopeFactory,\n scopeVariety,\n scopeMetric,\n useLocked,\n useNoneScope,\n prefill?.title,\n prefill?.dimension,\n dimensionOptions,\n defaultStatus,\n defaultDueDays,\n ]);\n\n const handleSubmit = async (formData: Record<string, unknown>) => {\n const checked = validateCreateActionPersons(\n String(formData.allocatorUserId || ''),\n String(formData.assigneeUserId || ''),\n allocatorOptsRef.current,\n assigneeOptsRef.current,\n );\n if (!checked.ok) {\n message.warning(createActionPersonWarnMessage(checked.code));\n throw new Error(checked.code);\n }\n\n const { allocator: allocatorOpt, assignee: fromOptions } = checked;\n const allocatorUserId = allocatorOpt.value;\n const assigneeUserId = fromOptions.value;\n onAllocatorConfirmed?.(allocatorUserId);\n\n setSaving(true);\n try {\n const due = normalizeDueDateYmd(formData.dueDate);\n const assignee = personDisplayName(fromOptions, assigneeUserId);\n const allocator = personDisplayName(allocatorOpt, allocatorUserId);\n const factory = useLocked\n ? scopeFactory\n : useNoneScope\n ? ''\n : String(formData.factory || '').trim();\n const variety = useLocked || useNoneScope ? '' : String(formData.variety || '').trim();\n const metric = useLocked || useNoneScope ? '' : String(formData.metric || '').trim();\n const title = String(formData.title || '').trim();\n const dimension =\n String(formData.dimension || '').trim() ||\n String(prefill?.dimension || '').trim() ||\n dimensionOptions[0]?.value ||\n '';\n const dimLabel =\n dimensionOptions.find((o) => o.value === dimension)?.label?.trim() || dimension;\n const eventLabel = useLocked\n ? (lockedContext || [])\n .map((f) => f.value)\n .filter(Boolean)\n .join(' · ')\n : useNoneScope\n ? [title, dimLabel].filter(Boolean).join(' · ')\n : [factory, variety, metric].filter(Boolean).join(' · ');\n\n const payload: CreateActionSubmitPayload = {\n title,\n dimension,\n status: String(formData.status || defaultStatus),\n assignee,\n assigneeUserId,\n allocator,\n allocatorUserId,\n owner: assignee,\n dueDate: due || undefined,\n factory,\n variety,\n metric,\n factoryCode: useNoneScope ? undefined : prefill?.factoryCode || undefined,\n factoryName: factory || undefined,\n verifyMetric: metric || undefined,\n eventLabel,\n };\n\n const actionId = await onSubmit(payload);\n message.success(isDispatch ? '已下发任务' : '已创建跟踪任务');\n onCreated(actionId);\n } catch (err) {\n const code = err instanceof Error ? err.message : '';\n if (\n code === 'missing_allocator' ||\n code === 'invalid_allocator' ||\n code === 'missing_assignee' ||\n code === 'invalid_assignee'\n ) {\n throw err;\n }\n message.error(err instanceof Error ? err.message : '创建失败');\n throw err;\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <FormModal\n className={classNames('create-action-modal', styles['create-action-modal'])}\n title={modalTitle}\n open={open}\n onCancel={onClose}\n autoClose\n okText={okText}\n width={width}\n zIndex={zIndex}\n destroyOnHidden\n okButtonProps={{ loading: saving }}\n formProps={{\n data: formInitialData,\n onSubmit: handleSubmit,\n }}\n >\n <CreateActionForm\n onAssigneeOptionsReady={onAssigneeOptionsReady}\n onAllocatorOptionsReady={onAllocatorOptionsReady}\n lockedContext={useLocked ? lockedContext : undefined}\n scopeMode={useLocked ? 'locked' : useNoneScope ? 'none' : 'form'}\n varietyLabel={useLocked || useNoneScope ? undefined : varietyLabel}\n titlePlaceholder={titlePlaceholder}\n metricPlaceholder={useNoneScope ? undefined : metricPlaceholder}\n noneScopeHint={useNoneScope ? noneScopeHint : undefined}\n dimensionOptions={dimensionOptions}\n loaders={loaders}\n emptyAssigneeHint={emptyAssigneeHint}\n emptyAllocatorHint={emptyAllocatorHint}\n scopeLock={\n lockScope\n ? {\n factory: scopeFactory || undefined,\n variety: scopeVariety || undefined,\n metric: scopeMetric || undefined,\n }\n : undefined\n }\n />\n </FormModal>\n );\n};\n\nexport default CreateActionModal;\n"],"names":["CreateActionModal","open","onClose","onCreated","variant","prefill","lockPrefill","lockedContext","scopeModeProp","varietyLabel","titlePlaceholder","metricPlaceholder","noneScopeHint","titleProp","okTextProp","dimensionOptions","loaders","emptyAssigneeHint","emptyAllocatorHint","onSubmit","onAllocatorConfirmed","defaultStatus","defaultDueDays","width","zIndex","saving","setSaving","useState","assigneeOptsRef","useRef","allocatorOptsRef","onAssigneeOptionsReady","useCallback","opts","onAllocatorOptionsReady","isDispatch","useLocked","useNoneScope","scopeFactory","_a","scopeVariety","_b","scopeMetric","_c","lockScope","modalTitle","okText","formInitialData","useMemo","lockedFields","field","idx","dayjs","addDaysYmd","handleSubmit","formData","checked","validateCreateActionPersons","message","createActionPersonWarnMessage","allocatorOpt","fromOptions","allocatorUserId","assigneeUserId","due","normalizeDueDateYmd","assignee","personDisplayName","allocator","factory","variety","metric","title","dimension","dimLabel","o","eventLabel","f","payload","actionId","err","code","jsx","FormModal","classNames","styles","CreateActionForm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreateActionModal.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/CreateActionModal.tsx"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\nimport { FormModal } from '../../../FormInfo';\nimport { message } from 'antd';\nimport classNames from 'classnames';\nimport dayjs from 'dayjs';\nimport CreateActionForm from './CreateActionForm';\nimport {\n addDaysYmd,\n createActionPersonWarnMessage,\n normalizeDueDateYmd,\n personDisplayName,\n validateCreateActionPersons,\n} from './submitHelpers';\nimport type {\n ActionPersonOption,\n CreateActionDimensionOption,\n CreateActionLoaders,\n CreateActionPrefill,\n CreateActionScopeMode,\n CreateActionSubmitPayload,\n LockedContextField,\n} from './types';\nimport styles from './CreateActionModal.module.scss';\n\nexport type CreateActionModalProps = {\n open: boolean;\n onClose: () => void;\n onCreated: (actionId?: string) => void;\n variant?: 'create' | 'dispatch';\n prefill?: CreateActionPrefill;\n lockPrefill?: boolean;\n lockedContext?: LockedContextField[];\n /**\n * 业务上下文字段模式。有 lockedContext 时强制 locked。\n * 默认 form(S3);EAM `/actions` 主动新建传 none。\n */\n scopeMode?: CreateActionScopeMode;\n /** @deprecated 有 lockedContext 时忽略 */\n varietyLabel?: string;\n /** F4:任务标题 placeholder */\n titlePlaceholder?: string;\n /** F4:任务描述 placeholder */\n descriptionPlaceholder?: string;\n /** F4:关联指标 placeholder */\n metricPlaceholder?: string;\n /** scopeMode=none 时短提示(App 注入) */\n noneScopeHint?: string;\n /** 弹窗标题;默认按 variant */\n title?: string;\n /** 主按钮文案;默认 下发/创建 */\n okText?: string;\n dimensionOptions: CreateActionDimensionOption[];\n loaders: CreateActionLoaders;\n emptyAssigneeHint?: string;\n emptyAllocatorHint?: string;\n /**\n * App 注入提交(对齐 EAM:校验通过后写 API / domainSubmit)。\n * 返回新建 actionId(可选)。\n */\n onSubmit: (payload: CreateActionSubmitPayload) => Promise<string | undefined>;\n /** 分配人确认后回调(App 可写 localStorage) */\n onAllocatorConfirmed?: (allocatorUserId: string) => void;\n defaultStatus?: string;\n defaultDueDays?: number;\n width?: number;\n zIndex?: number;\n};\n\n/**\n * 主动新建 / 预警下发任务 · FormModal + FormInfo。\n *\n * ## App 注入契约(W1)\n * - `loaders`:人员级联 + 分厂选项(禁 DEMO / 禁 core 直连业务 API;scopeMode=none 可不传分厂/品种)\n * - `dimensionOptions`:任务类型码表(展示名取自 App 数据)\n * - `scopeMode`:form(默认)| locked(有 lockedContext 强制)| none(EAM 主动新建)\n * - `titlePlaceholder` / `metricPlaceholder`:F4,由 App 注入业务文案\n * - `onSubmit`:对齐 EAM 提交面;actor / analysisId / eventSource / REST 由 App 补齐\n * - EP 门禁:由 App 决定是否打开本 Modal(禁 DEMO 恒真)\n */\nconst CreateActionModal: React.FC<CreateActionModalProps> = ({\n open,\n onClose,\n onCreated,\n variant = 'create',\n prefill,\n lockPrefill = false,\n lockedContext,\n scopeMode: scopeModeProp = 'form',\n varietyLabel,\n titlePlaceholder,\n descriptionPlaceholder,\n metricPlaceholder,\n noneScopeHint,\n title: titleProp,\n okText: okTextProp,\n dimensionOptions,\n loaders,\n emptyAssigneeHint,\n emptyAllocatorHint,\n onSubmit,\n onAllocatorConfirmed,\n defaultStatus = 'approved',\n defaultDueDays = 7,\n width = 560,\n zIndex = 1300,\n}) => {\n const [saving, setSaving] = useState(false);\n const assigneeOptsRef = useRef<ActionPersonOption[]>([]);\n const allocatorOptsRef = useRef<ActionPersonOption[]>([]);\n const onAssigneeOptionsReady = useCallback((opts: ActionPersonOption[]) => {\n assigneeOptsRef.current = opts;\n }, []);\n const onAllocatorOptionsReady = useCallback((opts: ActionPersonOption[]) => {\n allocatorOptsRef.current = opts;\n }, []);\n\n const isDispatch = variant === 'dispatch';\n const useLocked = Boolean(lockedContext && lockedContext.length > 0);\n const useNoneScope = !useLocked && scopeModeProp === 'none';\n const scopeFactory = prefill?.factory?.trim() || '';\n const scopeVariety = prefill?.variety?.trim() || '';\n const scopeMetric = prefill?.metric?.trim() || '';\n const lockScope =\n !useLocked &&\n !useNoneScope &&\n (isDispatch || lockPrefill) &&\n Boolean(scopeFactory || scopeVariety || scopeMetric);\n\n const modalTitle = titleProp || (isDispatch ? '下发任务' : '新建跟踪任务');\n const okText = okTextProp || (isDispatch ? '下发' : '创建');\n\n const formInitialData = useMemo(() => {\n const lockedFields: Record<string, string> = {};\n (lockedContext || []).forEach((field, idx) => {\n lockedFields[`lockedContext_${idx}`] = field.value;\n });\n return {\n title: prefill?.title?.trim() || '',\n description: prefill?.description?.trim() || '',\n dimension: prefill?.dimension?.trim() || dimensionOptions[0]?.value || '',\n status: defaultStatus,\n allocatorUserId: '',\n assigneeUserId: '',\n dueDate: dayjs(addDaysYmd(defaultDueDays)),\n factory: useLocked || useNoneScope ? '' : scopeFactory,\n variety: useLocked || useNoneScope ? '' : scopeVariety,\n metric: useLocked || useNoneScope ? '' : scopeMetric,\n ...lockedFields,\n };\n }, [\n lockedContext,\n scopeFactory,\n scopeVariety,\n scopeMetric,\n useLocked,\n useNoneScope,\n prefill?.title,\n prefill?.description,\n prefill?.dimension,\n dimensionOptions,\n defaultStatus,\n defaultDueDays,\n ]);\n\n const handleSubmit = async (formData: Record<string, unknown>) => {\n const checked = validateCreateActionPersons(\n String(formData.allocatorUserId || ''),\n String(formData.assigneeUserId || ''),\n allocatorOptsRef.current,\n assigneeOptsRef.current,\n );\n if (!checked.ok) {\n message.warning(createActionPersonWarnMessage(checked.code));\n throw new Error(checked.code);\n }\n\n const { allocator: allocatorOpt, assignee: fromOptions } = checked;\n const allocatorUserId = allocatorOpt.value;\n const assigneeUserId = fromOptions.value;\n onAllocatorConfirmed?.(allocatorUserId);\n\n setSaving(true);\n try {\n const due = normalizeDueDateYmd(formData.dueDate);\n const assignee = personDisplayName(fromOptions, assigneeUserId);\n const allocator = personDisplayName(allocatorOpt, allocatorUserId);\n const factory = useLocked\n ? scopeFactory\n : useNoneScope\n ? ''\n : String(formData.factory || '').trim();\n const variety = useLocked || useNoneScope ? '' : String(formData.variety || '').trim();\n const metric = useLocked || useNoneScope ? '' : String(formData.metric || '').trim();\n const title = String(formData.title || '').trim();\n const description = String(formData.description || '').trim();\n const dimension =\n String(formData.dimension || '').trim() ||\n String(prefill?.dimension || '').trim() ||\n dimensionOptions[0]?.value ||\n '';\n const dimLabel =\n dimensionOptions.find((o) => o.value === dimension)?.label?.trim() || dimension;\n const eventLabel = useLocked\n ? (lockedContext || [])\n .map((f) => f.value)\n .filter(Boolean)\n .join(' · ')\n : useNoneScope\n ? [title, dimLabel].filter(Boolean).join(' · ')\n : [factory, variety, metric].filter(Boolean).join(' · ');\n\n const payload: CreateActionSubmitPayload = {\n title,\n description: description || undefined,\n dimension,\n status: String(formData.status || defaultStatus),\n assignee,\n assigneeUserId,\n allocator,\n allocatorUserId,\n owner: assignee,\n dueDate: due || undefined,\n factory,\n variety,\n metric,\n factoryCode: useNoneScope ? undefined : prefill?.factoryCode || undefined,\n factoryName: factory || undefined,\n verifyMetric: metric || undefined,\n eventLabel,\n };\n\n const actionId = await onSubmit(payload);\n message.success(isDispatch ? '已下发任务' : '已创建跟踪任务');\n onCreated(actionId);\n } catch (err) {\n const code = err instanceof Error ? err.message : '';\n if (\n code === 'missing_allocator' ||\n code === 'invalid_allocator' ||\n code === 'missing_assignee' ||\n code === 'invalid_assignee'\n ) {\n throw err;\n }\n message.error(err instanceof Error ? err.message : '创建失败');\n throw err;\n } finally {\n setSaving(false);\n }\n };\n\n return (\n <FormModal\n className={classNames('create-action-modal', styles['create-action-modal'])}\n title={modalTitle}\n open={open}\n onCancel={onClose}\n autoClose\n okText={okText}\n width={width}\n zIndex={zIndex}\n destroyOnHidden\n okButtonProps={{ loading: saving }}\n formProps={{\n data: formInitialData,\n onSubmit: handleSubmit,\n }}\n >\n <CreateActionForm\n onAssigneeOptionsReady={onAssigneeOptionsReady}\n onAllocatorOptionsReady={onAllocatorOptionsReady}\n lockedContext={useLocked ? lockedContext : undefined}\n scopeMode={useLocked ? 'locked' : useNoneScope ? 'none' : 'form'}\n varietyLabel={useLocked || useNoneScope ? undefined : varietyLabel}\n titlePlaceholder={titlePlaceholder}\n descriptionPlaceholder={descriptionPlaceholder}\n metricPlaceholder={useNoneScope ? undefined : metricPlaceholder}\n noneScopeHint={useNoneScope ? noneScopeHint : undefined}\n dimensionOptions={dimensionOptions}\n loaders={loaders}\n emptyAssigneeHint={emptyAssigneeHint}\n emptyAllocatorHint={emptyAllocatorHint}\n scopeLock={\n lockScope\n ? {\n factory: scopeFactory || undefined,\n variety: scopeVariety || undefined,\n metric: scopeMetric || undefined,\n }\n : undefined\n }\n />\n </FormModal>\n );\n};\n\nexport default CreateActionModal;\n"],"names":["CreateActionModal","open","onClose","onCreated","variant","prefill","lockPrefill","lockedContext","scopeModeProp","varietyLabel","titlePlaceholder","descriptionPlaceholder","metricPlaceholder","noneScopeHint","titleProp","okTextProp","dimensionOptions","loaders","emptyAssigneeHint","emptyAllocatorHint","onSubmit","onAllocatorConfirmed","defaultStatus","defaultDueDays","width","zIndex","saving","setSaving","useState","assigneeOptsRef","useRef","allocatorOptsRef","onAssigneeOptionsReady","useCallback","opts","onAllocatorOptionsReady","isDispatch","useLocked","useNoneScope","scopeFactory","_a","scopeVariety","_b","scopeMetric","_c","lockScope","modalTitle","okText","formInitialData","useMemo","lockedFields","field","idx","_d","dayjs","addDaysYmd","handleSubmit","formData","checked","validateCreateActionPersons","message","createActionPersonWarnMessage","allocatorOpt","fromOptions","allocatorUserId","assigneeUserId","due","normalizeDueDateYmd","assignee","personDisplayName","allocator","factory","variety","metric","title","description","dimension","dimLabel","o","eventLabel","f","payload","actionId","err","code","jsx","FormModal","classNames","styles","CreateActionForm"],"mappings":"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"}
|
|
@@ -5,6 +5,8 @@ export type CreateActionPrefill = {
|
|
|
5
5
|
variety?: string;
|
|
6
6
|
metric?: string;
|
|
7
7
|
title?: string;
|
|
8
|
+
/** 任务描述预填(质量预警认领/下发等) */
|
|
9
|
+
description?: string;
|
|
8
10
|
dimension?: string;
|
|
9
11
|
bizDate?: string;
|
|
10
12
|
factoryCode?: string;
|
|
@@ -89,6 +91,8 @@ export type CreateActionLoaders = {
|
|
|
89
91
|
*/
|
|
90
92
|
export type CreateActionSubmitPayload = {
|
|
91
93
|
title: string;
|
|
94
|
+
/** 任务描述(可选) */
|
|
95
|
+
description?: string;
|
|
92
96
|
dimension: string;
|
|
93
97
|
status: string;
|
|
94
98
|
assignee: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const
|
|
1
|
+
const d = {
|
|
2
2
|
inspect_alert: "巡检预警",
|
|
3
3
|
claim_due: "认领到期",
|
|
4
4
|
claim_overdue: "认领到期",
|
|
@@ -6,91 +6,105 @@ const l = {
|
|
|
6
6
|
action_overdue: "行动超期",
|
|
7
7
|
action_assigned: "任务分配",
|
|
8
8
|
action_assigned_ack: "分配确认",
|
|
9
|
+
action_unassigned: "任务改派",
|
|
10
|
+
action_updated: "任务编辑",
|
|
9
11
|
action_status_changed: "状态变更",
|
|
10
12
|
action_claimed: "任务认领",
|
|
11
13
|
action_followed: "任务跟进",
|
|
14
|
+
action_approval_pending: "待审批",
|
|
15
|
+
action_approved: "已批准",
|
|
16
|
+
action_rejected: "已驳回",
|
|
17
|
+
action_approval_passed_ack: "审批回执",
|
|
18
|
+
action_approval_rejected_ack: "驳回回执",
|
|
12
19
|
l3_parallel: "L3并行"
|
|
13
|
-
},
|
|
20
|
+
}, l = {
|
|
14
21
|
"alert.inspect": "inspect_alert",
|
|
15
22
|
"remind.claim_due": "claim_due",
|
|
16
23
|
"action.overdue": "action_overdue",
|
|
17
24
|
"action.assigned": "action_assigned",
|
|
18
25
|
"action.assigned_ack": "action_assigned_ack",
|
|
26
|
+
"action.unassigned": "action_unassigned",
|
|
27
|
+
"action.updated": "action_updated",
|
|
19
28
|
"action.status_changed": "action_status_changed",
|
|
20
29
|
"action.status": "action_status_changed",
|
|
21
30
|
"action.due_soon": "action_overdue",
|
|
22
31
|
"action.claimed": "action_claimed",
|
|
23
|
-
"action.followed": "action_followed"
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
"action.followed": "action_followed",
|
|
33
|
+
"action.approval_pending": "action_approval_pending",
|
|
34
|
+
"action.approved": "action_approved",
|
|
35
|
+
"action.rejected": "action_rejected",
|
|
36
|
+
"action.approval_passed_ack": "action_approval_passed_ack",
|
|
37
|
+
"action.approval_rejected_ack": "action_approval_rejected_ack"
|
|
38
|
+
}, p = /* @__PURE__ */ new Set(["done", "reviewed", "cancelled", "closed", "rejected"]);
|
|
39
|
+
function f(e) {
|
|
40
|
+
const a = String(e || "").trim().toLowerCase();
|
|
41
|
+
if (!a) return "";
|
|
42
|
+
if (d[a]) return a;
|
|
43
|
+
if (l[a]) return l[a];
|
|
44
|
+
const i = a.replace(/\./g, "_");
|
|
45
|
+
return d[i] ? i : a;
|
|
32
46
|
}
|
|
33
|
-
function
|
|
34
|
-
return !!(e &&
|
|
47
|
+
function m(e) {
|
|
48
|
+
return !!(e && d[e]);
|
|
35
49
|
}
|
|
36
50
|
function s(e) {
|
|
37
|
-
const
|
|
38
|
-
for (const
|
|
39
|
-
if (
|
|
40
|
-
return
|
|
51
|
+
const a = [e.eventKey, e.scene, e.category].map((i) => f(i));
|
|
52
|
+
for (const i of a)
|
|
53
|
+
if (m(i)) return i;
|
|
54
|
+
return a.find(Boolean) || "";
|
|
41
55
|
}
|
|
42
|
-
function
|
|
43
|
-
const
|
|
44
|
-
return
|
|
56
|
+
function y(e) {
|
|
57
|
+
const a = s(e);
|
|
58
|
+
return a && d[a] || "";
|
|
45
59
|
}
|
|
46
|
-
function
|
|
47
|
-
const
|
|
48
|
-
return
|
|
60
|
+
function b(e) {
|
|
61
|
+
const a = s(e);
|
|
62
|
+
return a === "claim_due" || a === "claim_overdue" || a === "action_overdue" || a === "action_assigned" || a === "action_assigned_ack" || a === "action_unassigned" || a === "action_updated" || a === "action_status_changed" || a === "action_claimed" || a === "action_followed" || a === "inspect_alert";
|
|
49
63
|
}
|
|
50
64
|
function _(e) {
|
|
51
65
|
return String(e || "").trim().toLowerCase();
|
|
52
66
|
}
|
|
53
|
-
function
|
|
54
|
-
return
|
|
67
|
+
function v(e) {
|
|
68
|
+
return p.has(_(e));
|
|
55
69
|
}
|
|
56
|
-
function
|
|
57
|
-
return String(e.messageType || "").trim().toLowerCase() === "action" ? !0 :
|
|
70
|
+
function k(e, a) {
|
|
71
|
+
return String(e.messageType || "").trim().toLowerCase() === "action" ? !0 : a.startsWith("action_") || a === "action_overdue" || a === "action_assigned" || a === "action_assigned_ack" || a === "action_status_changed" || a === "action_claimed" || a === "action_followed";
|
|
58
72
|
}
|
|
59
|
-
function c(e,
|
|
60
|
-
return
|
|
73
|
+
function c(e, a) {
|
|
74
|
+
return a ? { primary: { kind: "view_task", label: "查看任务" } } : String(e.href || "").trim() ? { primary: { kind: "view_href", label: "查看" } } : { primary: { kind: "open_actions", label: "查看任务" } };
|
|
61
75
|
}
|
|
62
76
|
function w(e) {
|
|
63
|
-
const
|
|
64
|
-
return
|
|
77
|
+
const a = s(e), i = String(e.actionId || "").trim(), t = String(e.alertId || "").trim(), n = _(e.actionStatus), r = v(n), o = !!e.started || r || n === "in_progress" || a === "action_followed" || a === "action_claimed", u = !!e.claimed || !!i || a === "action_claimed";
|
|
78
|
+
return a === "claim_due" || a === "claim_overdue" ? u ? i ? { primary: { kind: "view_task", label: "查看任务" } } : { primary: { kind: "view_alert", label: "查看预警" } } : { primary: { kind: "claim_alert", label: "去认领" } } : a === "action_claimed" || a === "action_followed" || a === "action_unassigned" || a === "action_updated" || a === "action_assigned_ack" ? c(e, i) : a === "action_status_changed" ? n === "draft" && i ? { primary: { kind: "view_task", label: "去批准创建" } } : c(e, i) : a === "action_approval_pending" ? i ? { primary: { kind: "view_task", label: "去批准创建" } } : c(e, i) : a === "action_approved" || a === "action_rejected" || a === "action_approval_passed_ack" || a === "action_approval_rejected_ack" ? c(e, i) : a === "action_overdue" || a === "action_assigned" ? r || o ? c(e, i) : i ? { primary: { kind: "start_action", label: "去执行" } } : String(e.href || "").trim() ? { primary: { kind: "view_href", label: "查看" } } : {} : a === "dispose_escalation" ? i ? {
|
|
65
79
|
primary: { kind: "view_task", label: "查看任务" },
|
|
66
|
-
secondary:
|
|
80
|
+
secondary: t ? { kind: "view_alert", label: "查看预警" } : void 0
|
|
67
81
|
} : {
|
|
68
82
|
primary: { kind: "view_alert", label: "查看预警" },
|
|
69
83
|
secondary: { kind: "open_actions", label: "去任务跟踪" }
|
|
70
|
-
} :
|
|
84
|
+
} : a.startsWith("rca") || a === "rca_approved" ? { primary: { kind: "view_rca", label: "查看根因" } } : a === "inspect_alert" || a === "l3_parallel" ? i ? {
|
|
71
85
|
primary: { kind: "view_alert", label: "查看预警" },
|
|
72
86
|
secondary: { kind: "view_task", label: "查看任务" }
|
|
73
|
-
} : { primary: { kind: "view_alert", label: "查看预警" } } :
|
|
87
|
+
} : { primary: { kind: "view_alert", label: "查看预警" } } : k(e, a) ? r || o || a === "action_claimed" ? c(e, i) : i ? { primary: { kind: "start_action", label: "去执行" } } : c(e, i) : t ? i ? {
|
|
74
88
|
primary: { kind: "view_alert", label: "查看预警" },
|
|
75
89
|
secondary: { kind: "view_task", label: "查看任务" }
|
|
76
|
-
} : { primary: { kind: "view_alert", label: "查看预警" } } :
|
|
90
|
+
} : { primary: { kind: "view_alert", label: "查看预警" } } : i ? r || o ? { primary: { kind: "view_task", label: "查看任务" } } : { primary: { kind: "start_action", label: "去执行" } } : String(e.href || "").trim() ? { primary: { kind: "view_href", label: "查看" } } : {};
|
|
77
91
|
}
|
|
78
|
-
function
|
|
79
|
-
const
|
|
80
|
-
let
|
|
81
|
-
return !
|
|
92
|
+
function g(e) {
|
|
93
|
+
const a = (n) => n && !n.disabled ? { ...n, disabled: void 0 } : void 0;
|
|
94
|
+
let i = a(e.primary), t = a(e.secondary);
|
|
95
|
+
return !i && t && (i = t, t = void 0), i && t && i.kind === t.kind && (t = void 0), { primary: i, secondary: t };
|
|
82
96
|
}
|
|
83
|
-
function S(e,
|
|
84
|
-
const
|
|
85
|
-
let n =
|
|
97
|
+
function S(e, a) {
|
|
98
|
+
const i = g(e), t = (o) => o && o.kind === "create_task" ? void 0 : o;
|
|
99
|
+
let n = t(i.primary), r = t(i.secondary);
|
|
86
100
|
return !n && r && (n = r, r = void 0), { primary: n, secondary: r };
|
|
87
101
|
}
|
|
88
102
|
export {
|
|
89
103
|
S as filterInboxActionsForHost,
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
104
|
+
y as inboxSceneLabel,
|
|
105
|
+
b as isInboxButtonDriven,
|
|
106
|
+
v as isTerminalActionStatus,
|
|
107
|
+
g as normalizeInboxActions,
|
|
94
108
|
w as resolveInboxItemActions,
|
|
95
109
|
s as resolveInboxSceneKey
|
|
96
110
|
};
|
|
@@ -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_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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"}
|
|
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_unassigned: '任务改派',\n action_updated: '任务编辑',\n action_status_changed: '状态变更',\n action_claimed: '任务认领',\n action_followed: '任务跟进',\n action_approval_pending: '待审批',\n action_approved: '已批准',\n action_rejected: '已驳回',\n action_approval_passed_ack: '审批回执',\n action_approval_rejected_ack: '驳回回执',\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.unassigned': 'action_unassigned',\n 'action.updated': 'action_updated',\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 'action.approval_pending': 'action_approval_pending',\n 'action.approved': 'action_approved',\n 'action.rejected': 'action_rejected',\n 'action.approval_passed_ack': 'action_approval_passed_ack',\n 'action.approval_rejected_ack': 'action_approval_rejected_ack',\n};\n\n/** rejected = 审批驳回终态;禁再展示「去执行 / 已执行」 */\nconst TERMINAL_STATUS = new Set(['done', 'reviewed', 'cancelled', 'closed', 'rejected']);\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_unassigned' ||\n c === 'action_updated' ||\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_unassigned' ||\n c === 'action_updated' ||\n c === 'action_assigned_ack'\n ) {\n return viewTaskOrHref(n, actionId);\n }\n\n // 创建待批:引导批准创建(status=draft);其它状态变更仅查看\n if (c === 'action_status_changed') {\n if (status === 'draft' && actionId) {\n return { primary: { kind: 'view_task', label: '去批准创建' } };\n }\n return viewTaskOrHref(n, actionId);\n }\n\n // 审批链路:待审 → 去批准创建;已批/驳回/回执 → 只看任务(禁「去执行」「已执行」)\n if (c === 'action_approval_pending') {\n if (actionId) return { primary: { kind: 'view_task', label: '去批准创建' } };\n return viewTaskOrHref(n, actionId);\n }\n if (\n c === 'action_approved' ||\n c === 'action_rejected' ||\n c === 'action_approval_passed_ack' ||\n c === 'action_approval_rejected_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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"}
|