@hkyhy/marsun-components-core 0.1.122 → 0.1.124

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.
Files changed (63) hide show
  1. package/README.md +1 -0
  2. package/dist/components/File/FileItem/index.js +65 -55
  3. package/dist/components/File/FileItem/index.js.map +1 -1
  4. package/dist/components/File/FilePreview/FilePreviewContent.js +114 -90
  5. package/dist/components/File/FilePreview/FilePreviewContent.js.map +1 -1
  6. package/dist/components/File/FilePreview/index.js +43 -33
  7. package/dist/components/File/FilePreview/index.js.map +1 -1
  8. package/dist/components/File/index.d.ts +1 -0
  9. package/dist/components/File/utils/authedFetch.d.ts +12 -0
  10. package/dist/components/File/utils/authedFetch.js +50 -0
  11. package/dist/components/File/utils/authedFetch.js.map +1 -0
  12. package/dist/components/Form/index.d.ts +1 -1
  13. package/dist/components/Form/kneFormInfo.d.ts +2 -0
  14. package/dist/components/Form/kneFormInfo.js +30 -27
  15. package/dist/components/Form/kneFormInfo.js.map +1 -1
  16. package/dist/components/FormInfo/fields.d.ts +2 -0
  17. package/dist/components/FormInfo/fields.js +22 -19
  18. package/dist/components/FormInfo/fields.js.map +1 -1
  19. package/dist/components/FormInfo/index.d.ts +1 -1
  20. package/dist/components/InfoPage/Content/index.d.ts +8 -1
  21. package/dist/components/InfoPage/Content/index.js +103 -57
  22. package/dist/components/InfoPage/Content/index.js.map +1 -1
  23. package/dist/components/InfoPage/Content/style.module.scss.js +10 -8
  24. package/dist/components/InfoPage/Content/style.module.scss.js.map +1 -1
  25. package/dist/components/InfoPage/index.d.ts +13 -1
  26. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.d.ts +8 -1
  27. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js +148 -142
  28. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js.map +1 -1
  29. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.module.scss.js +5 -4
  30. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.module.scss.js.map +1 -1
  31. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.d.ts +10 -2
  32. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js +122 -116
  33. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js.map +1 -1
  34. package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.js +20 -31
  35. package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.js.map +1 -1
  36. package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.module.scss.js +1 -2
  37. package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.module.scss.js.map +1 -1
  38. package/dist/components/Tools/ActionTracking/CreateAction/index.d.ts +1 -1
  39. package/dist/components/Tools/ActionTracking/CreateAction/submitHelpers.d.ts +5 -0
  40. package/dist/components/Tools/ActionTracking/CreateAction/submitHelpers.js +37 -18
  41. package/dist/components/Tools/ActionTracking/CreateAction/submitHelpers.js.map +1 -1
  42. package/dist/components/Tools/ActionTracking/CreateAction/types.d.ts +9 -0
  43. package/dist/components/Tools/ActionTracking/index.d.ts +1 -1
  44. package/dist/components/Tools/Inbox/InboxBell/InboxBell.d.ts +14 -3
  45. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js +136 -95
  46. package/dist/components/Tools/Inbox/InboxBell/InboxBell.js.map +1 -1
  47. package/dist/components/Tools/Inbox/InboxBell/index.d.ts +1 -1
  48. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js +18 -16
  49. package/dist/components/Tools/Inbox/InboxBell/style.module.scss.js.map +1 -1
  50. package/dist/components/Tools/Inbox/index.d.ts +2 -1
  51. package/dist/components/Tools/Inbox/requestInboxBadgeRefresh.d.ts +9 -0
  52. package/dist/components/Tools/Inbox/requestInboxBadgeRefresh.js +15 -0
  53. package/dist/components/Tools/Inbox/requestInboxBadgeRefresh.js.map +1 -0
  54. package/dist/components/Tools/index.d.ts +3 -2
  55. package/dist/file.js +24 -19
  56. package/dist/file.js.map +1 -1
  57. package/dist/form-info.js +46 -45
  58. package/dist/index.d.ts +1 -0
  59. package/dist/index.js +534 -524
  60. package/dist/index.js.map +1 -1
  61. package/dist/marsun-components-core.css +1 -1
  62. package/dist/styles/global.css +1 -1
  63. package/package.json +1 -1
@@ -1,141 +1,147 @@
1
- import { jsx as O } from "react/jsx-runtime";
2
- import { useState as gt, useRef as P, useCallback as j, useMemo as vt } from "react";
3
- import { message as M } from "antd";
4
- import ut from "classnames";
5
- import yt from "./CreateActionForm.js";
6
- import { addDaysYmd as St, validateCreateActionPersons as ht, createActionPersonWarnMessage as It, personDisplayName as T } from "./submitHelpers.js";
7
- import kt from "./CreateActionModal.module.scss.js";
8
- import wt from "../../../FormInfo/FormModal.js";
9
- const Lt = ({
10
- open: A,
11
- onClose: x,
12
- onCreated: C,
13
- variant: H = "create",
14
- prefill: t,
15
- lockPrefill: V = !1,
16
- lockedContext: c,
17
- varietyLabel: W,
18
- titlePlaceholder: Y,
19
- metricPlaceholder: $,
20
- title: q,
21
- okText: z,
22
- dimensionOptions: g,
23
- loaders: G,
24
- emptyAssigneeHint: J,
25
- emptyAllocatorHint: K,
26
- onSubmit: Q,
27
- onAllocatorConfirmed: h,
1
+ import { jsx as Y } from "react/jsx-runtime";
2
+ import { useState as Io, useRef as x, useCallback as z, useMemo as Mo } from "react";
3
+ import { message as U } from "antd";
4
+ import bo from "classnames";
5
+ import wo from "dayjs";
6
+ import Bo from "./CreateActionForm.js";
7
+ import { addDaysYmd as Uo, validateCreateActionPersons as jo, createActionPersonWarnMessage as Lo, normalizeDueDateYmd as No, personDisplayName as C } from "./submitHelpers.js";
8
+ import Po from "./CreateActionModal.module.scss.js";
9
+ import Ro from "../../../FormInfo/FormModal.js";
10
+ const zo = ({
11
+ open: V,
12
+ onClose: W,
13
+ onCreated: $,
14
+ variant: q = "create",
15
+ prefill: o,
16
+ lockPrefill: G = !1,
17
+ lockedContext: r,
18
+ scopeMode: J = "form",
19
+ varietyLabel: K,
20
+ titlePlaceholder: Q,
21
+ metricPlaceholder: X,
22
+ noneScopeHint: Z,
23
+ title: D,
24
+ okText: p,
25
+ dimensionOptions: i,
26
+ loaders: f,
27
+ emptyAssigneeHint: l,
28
+ emptyAllocatorHint: oo,
29
+ onSubmit: to,
30
+ onAllocatorConfirmed: k,
28
31
  defaultStatus: I = "approved",
29
- defaultDueDays: U = 7,
30
- width: X = 560,
31
- zIndex: Z = 1300
32
+ defaultDueDays: j = 7,
33
+ width: eo = 560,
34
+ zIndex: so = 1300
32
35
  }) => {
33
- var _, E, F;
34
- const [D, b] = gt(!1), B = P([]), R = P([]), p = j((o) => {
35
- B.current = o;
36
- }, []), f = j((o) => {
37
- R.current = o;
38
- }, []), v = H === "dispatch", s = !!(c && c.length > 0), r = ((_ = t == null ? void 0 : t.factory) == null ? void 0 : _.trim()) || "", u = ((E = t == null ? void 0 : t.variety) == null ? void 0 : E.trim()) || "", y = ((F = t == null ? void 0 : t.metric) == null ? void 0 : F.trim()) || "", l = !s && (v || V) && !!(r || u || y), tt = q || (v ? "下发任务" : "新建跟踪任务"), ot = z || (v ? "下发" : "创建"), st = vt(() => {
39
- var a, i, d;
40
- const o = {};
41
- return (c || []).forEach((m, S) => {
42
- o[`lockedContext_${S}`] = m.value;
36
+ var R, _, E;
37
+ const [ao, L] = Io(!1), N = x([]), P = x([]), no = z((t) => {
38
+ N.current = t;
39
+ }, []), co = z((t) => {
40
+ P.current = t;
41
+ }, []), g = q === "dispatch", s = !!(r && r.length > 0), e = !s && J === "none", d = ((R = o == null ? void 0 : o.factory) == null ? void 0 : R.trim()) || "", y = ((_ = o == null ? void 0 : o.variety) == null ? void 0 : _.trim()) || "", S = ((E = o == null ? void 0 : o.metric) == null ? void 0 : E.trim()) || "", ro = !s && !e && (g || G) && !!(d || y || S), io = D || (g ? "下发任务" : "新建跟踪任务"), mo = p || (g ? "下发" : "创建"), vo = Mo(() => {
42
+ var n, m, v;
43
+ const t = {};
44
+ return (r || []).forEach((u, h) => {
45
+ t[`lockedContext_${h}`] = u.value;
43
46
  }), {
44
- title: ((a = t == null ? void 0 : t.title) == null ? void 0 : a.trim()) || "",
45
- dimension: ((i = t == null ? void 0 : t.dimension) == null ? void 0 : i.trim()) || ((d = g[0]) == null ? void 0 : d.value) || "",
47
+ title: ((n = o == null ? void 0 : o.title) == null ? void 0 : n.trim()) || "",
48
+ dimension: ((m = o == null ? void 0 : o.dimension) == null ? void 0 : m.trim()) || ((v = i[0]) == null ? void 0 : v.value) || "",
46
49
  status: I,
47
50
  allocatorUserId: "",
48
51
  assigneeUserId: "",
49
- dueDate: St(U),
50
- factory: r,
51
- variety: s ? "" : u,
52
- metric: s ? "" : y,
53
- ...o
52
+ dueDate: wo(Uo(j)),
53
+ factory: s || e ? "" : d,
54
+ variety: s || e ? "" : y,
55
+ metric: s || e ? "" : S,
56
+ ...t
54
57
  };
55
58
  }, [
56
- c,
57
59
  r,
58
- u,
60
+ d,
59
61
  y,
62
+ S,
60
63
  s,
61
- t == null ? void 0 : t.title,
62
- t == null ? void 0 : t.dimension,
63
- g,
64
+ e,
65
+ o == null ? void 0 : o.title,
66
+ o == null ? void 0 : o.dimension,
67
+ i,
64
68
  I,
65
- U
66
- ]), et = async (o) => {
67
- var L;
68
- const a = ht(
69
- String(o.allocatorUserId || ""),
70
- String(o.assigneeUserId || ""),
71
- R.current,
72
- B.current
69
+ j
70
+ ]), uo = async (t) => {
71
+ var F, O, T;
72
+ const n = jo(
73
+ String(t.allocatorUserId || ""),
74
+ String(t.assigneeUserId || ""),
75
+ P.current,
76
+ N.current
73
77
  );
74
- if (!a.ok)
75
- throw M.warning(It(a.code)), new Error(a.code);
76
- const { allocator: i, assignee: d } = a, m = i.value, S = d.value;
77
- h == null || h(m), b(!0);
78
+ if (!n.ok)
79
+ throw U.warning(Lo(n.code)), new Error(n.code);
80
+ const { allocator: m, assignee: v } = n, u = m.value, h = v.value;
81
+ k == null || k(u), L(!0);
78
82
  try {
79
- const e = String(o.dueDate ?? "").trim(), n = T(d, S), at = T(i, m), k = s ? r : String(o.factory || "").trim(), N = s ? "" : String(o.variety || "").trim(), w = s ? "" : String(o.metric || "").trim(), nt = String(o.title || "").trim(), ct = String(o.dimension || "").trim() || String((t == null ? void 0 : t.dimension) || "").trim() || ((L = g[0]) == null ? void 0 : L.value) || "", rt = s ? (c || []).map((mt) => mt.value).filter(Boolean).join(" · ") : [k, N, w].filter(Boolean).join(" · "), it = {
80
- title: nt,
81
- dimension: ct,
82
- status: String(o.status || I),
83
- assignee: n,
84
- assigneeUserId: S,
85
- allocator: at,
86
- allocatorUserId: m,
87
- owner: n,
88
- dueDate: e || void 0,
89
- factory: k,
90
- variety: N,
91
- metric: w,
92
- factoryCode: (t == null ? void 0 : t.factoryCode) || void 0,
93
- factoryName: k || void 0,
94
- verifyMetric: w || void 0,
95
- eventLabel: rt
96
- }, dt = await Q(it);
97
- M.success(v ? "已下发任务" : "已创建跟踪任务"), C(dt);
98
- } catch (e) {
99
- const n = e instanceof Error ? e.message : "";
100
- throw n === "missing_allocator" || n === "invalid_allocator" || n === "missing_assignee" || n === "invalid_assignee" || M.error(e instanceof Error ? e.message : "创建失败"), e;
83
+ const a = No(t.dueDate), c = C(v, h), go = C(m, u), M = s ? d : e ? "" : String(t.factory || "").trim(), A = s || e ? "" : String(t.variety || "").trim(), b = s || e ? "" : String(t.metric || "").trim(), H = String(t.title || "").trim(), w = String(t.dimension || "").trim() || String((o == null ? void 0 : o.dimension) || "").trim() || ((F = i[0]) == null ? void 0 : F.value) || "", yo = ((T = (O = i.find((B) => B.value === w)) == null ? void 0 : O.label) == null ? void 0 : T.trim()) || w, So = s ? (r || []).map((B) => B.value).filter(Boolean).join(" · ") : e ? [H, yo].filter(Boolean).join(" · ") : [M, A, b].filter(Boolean).join(" · "), ho = {
84
+ title: H,
85
+ dimension: w,
86
+ status: String(t.status || I),
87
+ assignee: c,
88
+ assigneeUserId: h,
89
+ allocator: go,
90
+ allocatorUserId: u,
91
+ owner: c,
92
+ dueDate: a || void 0,
93
+ factory: M,
94
+ variety: A,
95
+ metric: b,
96
+ factoryCode: e ? void 0 : (o == null ? void 0 : o.factoryCode) || void 0,
97
+ factoryName: M || void 0,
98
+ verifyMetric: b || void 0,
99
+ eventLabel: So
100
+ }, ko = await to(ho);
101
+ U.success(g ? "已下发任务" : "已创建跟踪任务"), $(ko);
102
+ } catch (a) {
103
+ const c = a instanceof Error ? a.message : "";
104
+ throw c === "missing_allocator" || c === "invalid_allocator" || c === "missing_assignee" || c === "invalid_assignee" || U.error(a instanceof Error ? a.message : "创建失败"), a;
101
105
  } finally {
102
- b(!1);
106
+ L(!1);
103
107
  }
104
108
  };
105
- return /* @__PURE__ */ O(
106
- wt,
109
+ return /* @__PURE__ */ Y(
110
+ Ro,
107
111
  {
108
- className: ut("create-action-modal", kt["create-action-modal"]),
109
- title: tt,
110
- open: A,
111
- onCancel: x,
112
+ className: bo("create-action-modal", Po["create-action-modal"]),
113
+ title: io,
114
+ open: V,
115
+ onCancel: W,
112
116
  autoClose: !0,
113
- okText: ot,
114
- width: X,
115
- zIndex: Z,
117
+ okText: mo,
118
+ width: eo,
119
+ zIndex: so,
116
120
  destroyOnHidden: !0,
117
- okButtonProps: { loading: D },
121
+ okButtonProps: { loading: ao },
118
122
  formProps: {
119
- data: st,
120
- onSubmit: et
123
+ data: vo,
124
+ onSubmit: uo
121
125
  },
122
- children: /* @__PURE__ */ O(
123
- yt,
126
+ children: /* @__PURE__ */ Y(
127
+ Bo,
124
128
  {
125
- onAssigneeOptionsReady: p,
126
- onAllocatorOptionsReady: f,
127
- lockedContext: s ? c : void 0,
128
- varietyLabel: s ? void 0 : W,
129
- titlePlaceholder: Y,
130
- metricPlaceholder: $,
131
- dimensionOptions: g,
132
- loaders: G,
133
- emptyAssigneeHint: J,
134
- emptyAllocatorHint: K,
135
- scopeLock: l ? {
136
- factory: r || void 0,
137
- variety: u || void 0,
138
- metric: y || void 0
129
+ onAssigneeOptionsReady: no,
130
+ onAllocatorOptionsReady: co,
131
+ lockedContext: s ? r : void 0,
132
+ scopeMode: s ? "locked" : e ? "none" : "form",
133
+ varietyLabel: s || e ? void 0 : K,
134
+ titlePlaceholder: Q,
135
+ metricPlaceholder: e ? void 0 : X,
136
+ noneScopeHint: e ? Z : void 0,
137
+ dimensionOptions: i,
138
+ loaders: f,
139
+ emptyAssigneeHint: l,
140
+ emptyAllocatorHint: oo,
141
+ scopeLock: ro ? {
142
+ factory: d || void 0,
143
+ variety: y || void 0,
144
+ metric: S || void 0
139
145
  } : void 0
140
146
  }
141
147
  )
@@ -143,6 +149,6 @@ const Lt = ({
143
149
  );
144
150
  };
145
151
  export {
146
- Lt as default
152
+ zo as default
147
153
  };
148
154
  //# 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 CreateActionForm from './CreateActionForm';\nimport {\n addDaysYmd,\n createActionPersonWarnMessage,\n personDisplayName,\n validateCreateActionPersons,\n} from './submitHelpers';\nimport type {\n ActionPersonOption,\n CreateActionDimensionOption,\n CreateActionLoaders,\n CreateActionPrefill,\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 /** @deprecated 有 lockedContext 时忽略 */\n varietyLabel?: string;\n /** F4:任务标题 placeholder */\n titlePlaceholder?: string;\n /** F4:关联指标 placeholder */\n metricPlaceholder?: 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)\n * - `dimensionOptions`:任务类型码表(展示名取自 App 数据)\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 varietyLabel,\n titlePlaceholder,\n metricPlaceholder,\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 scopeFactory = prefill?.factory?.trim() || '';\n const scopeVariety = prefill?.variety?.trim() || '';\n const scopeMetric = prefill?.metric?.trim() || '';\n const lockScope =\n !useLocked &&\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: addDaysYmd(defaultDueDays),\n factory: scopeFactory,\n variety: useLocked ? '' : scopeVariety,\n metric: useLocked ? '' : scopeMetric,\n ...lockedFields,\n };\n }, [\n lockedContext,\n scopeFactory,\n scopeVariety,\n scopeMetric,\n useLocked,\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 = String(formData.dueDate ?? '').trim();\n const assignee = personDisplayName(fromOptions, assigneeUserId);\n const allocator = personDisplayName(allocatorOpt, allocatorUserId);\n const factory = useLocked ? scopeFactory : String(formData.factory || '').trim();\n const variety = useLocked ? '' : String(formData.variety || '').trim();\n const metric = useLocked ? '' : 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 eventLabel = useLocked\n ? (lockedContext || [])\n .map((f) => f.value)\n .filter(Boolean)\n .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: 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 varietyLabel={useLocked ? undefined : varietyLabel}\n titlePlaceholder={titlePlaceholder}\n metricPlaceholder={metricPlaceholder}\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","varietyLabel","titlePlaceholder","metricPlaceholder","titleProp","okTextProp","dimensionOptions","loaders","emptyAssigneeHint","emptyAllocatorHint","onSubmit","onAllocatorConfirmed","defaultStatus","defaultDueDays","width","zIndex","saving","setSaving","useState","assigneeOptsRef","useRef","allocatorOptsRef","onAssigneeOptionsReady","useCallback","opts","onAllocatorOptionsReady","isDispatch","useLocked","scopeFactory","_a","scopeVariety","_b","scopeMetric","_c","lockScope","modalTitle","okText","formInitialData","useMemo","lockedFields","field","idx","addDaysYmd","handleSubmit","formData","checked","validateCreateActionPersons","message","createActionPersonWarnMessage","allocatorOpt","fromOptions","allocatorUserId","assigneeUserId","due","assignee","personDisplayName","allocator","factory","variety","metric","title","dimension","eventLabel","f","payload","actionId","err","code","jsx","FormModal","classNames","styles","CreateActionForm"],"mappings":";;;;;;;;AAkEA,MAAMA,KAAsD,CAAC;AAAA,EAC3D,MAAAC;AAAA,EACA,SAAAC;AAAA,EACA,WAAAC;AAAA,EACA,SAAAC,IAAU;AAAA,EACV,SAAAC;AAAA,EACA,aAAAC,IAAc;AAAA,EACd,eAAAC;AAAA,EACA,cAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,OAAOC;AAAA,EACP,QAAQC;AAAA,EACR,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,oBAAAC;AAAA,EACA,UAAAC;AAAA,EACA,sBAAAC;AAAA,EACA,eAAAC,IAAgB;AAAA,EAChB,gBAAAC,IAAiB;AAAA,EACjB,OAAAC,IAAQ;AAAA,EACR,QAAAC,IAAS;AACX,MAAM;;AACJ,QAAM,CAACC,GAAQC,CAAS,IAAIC,GAAS,EAAK,GACpCC,IAAkBC,EAA6B,EAAE,GACjDC,IAAmBD,EAA6B,EAAE,GAClDE,IAAyBC,EAAY,CAACC,MAA+B;AACzE,IAAAL,EAAgB,UAAUK;AAAA,EAC5B,GAAG,CAAA,CAAE,GACCC,IAA0BF,EAAY,CAACC,MAA+B;AAC1E,IAAAH,EAAiB,UAAUG;AAAA,EAC7B,GAAG,CAAA,CAAE,GAECE,IAAa7B,MAAY,YACzB8B,IAAY,GAAQ3B,KAAiBA,EAAc,SAAS,IAC5D4B,MAAeC,IAAA/B,KAAA,gBAAAA,EAAS,YAAT,gBAAA+B,EAAkB,WAAU,IAC3CC,MAAeC,IAAAjC,KAAA,gBAAAA,EAAS,YAAT,gBAAAiC,EAAkB,WAAU,IAC3CC,MAAcC,IAAAnC,KAAA,gBAAAA,EAAS,WAAT,gBAAAmC,EAAiB,WAAU,IACzCC,IACJ,CAACP,MACAD,KAAc3B,MACf,GAAQ6B,KAAgBE,KAAgBE,IAEpCG,KAAa/B,MAAcsB,IAAa,SAAS,WACjDU,KAAS/B,MAAeqB,IAAa,OAAO,OAE5CW,KAAkBC,GAAQ,MAAM;;AACpC,UAAMC,IAAuC,CAAA;AAC7C,YAACvC,KAAiB,CAAA,GAAI,QAAQ,CAACwC,GAAOC,MAAQ;AAC5C,MAAAF,EAAa,iBAAiBE,CAAG,EAAE,IAAID,EAAM;AAAA,IAC/C,CAAC,GACM;AAAA,MACL,SAAOX,IAAA/B,KAAA,gBAAAA,EAAS,UAAT,gBAAA+B,EAAgB,WAAU;AAAA,MACjC,aAAWE,IAAAjC,KAAA,gBAAAA,EAAS,cAAT,gBAAAiC,EAAoB,aAAUE,IAAA3B,EAAiB,CAAC,MAAlB,gBAAA2B,EAAqB,UAAS;AAAA,MACvE,QAAQrB;AAAA,MACR,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB,SAAS8B,GAAW7B,CAAc;AAAA,MAClC,SAASe;AAAA,MACT,SAASD,IAAY,KAAKG;AAAA,MAC1B,QAAQH,IAAY,KAAKK;AAAA,MACzB,GAAGO;AAAA,IAAA;AAAA,EAEP,GAAG;AAAA,IACDvC;AAAA,IACA4B;AAAA,IACAE;AAAA,IACAE;AAAA,IACAL;AAAA,IACA7B,KAAA,gBAAAA,EAAS;AAAA,IACTA,KAAA,gBAAAA,EAAS;AAAA,IACTQ;AAAA,IACAM;AAAA,IACAC;AAAA,EAAA,CACD,GAEK8B,KAAe,OAAOC,MAAsC;;AAChE,UAAMC,IAAUC;AAAA,MACd,OAAOF,EAAS,mBAAmB,EAAE;AAAA,MACrC,OAAOA,EAAS,kBAAkB,EAAE;AAAA,MACpCvB,EAAiB;AAAA,MACjBF,EAAgB;AAAA,IAAA;AAElB,QAAI,CAAC0B,EAAQ;AACX,YAAAE,EAAQ,QAAQC,GAA8BH,EAAQ,IAAI,CAAC,GACrD,IAAI,MAAMA,EAAQ,IAAI;AAG9B,UAAM,EAAE,WAAWI,GAAc,UAAUC,MAAgBL,GACrDM,IAAkBF,EAAa,OAC/BG,IAAiBF,EAAY;AACnC,IAAAvC,KAAA,QAAAA,EAAuBwC,IAEvBlC,EAAU,EAAI;AACd,QAAI;AACF,YAAMoC,IAAM,OAAOT,EAAS,WAAW,EAAE,EAAE,KAAA,GACrCU,IAAWC,EAAkBL,GAAaE,CAAc,GACxDI,KAAYD,EAAkBN,GAAcE,CAAe,GAC3DM,IAAU9B,IAAYC,IAAe,OAAOgB,EAAS,WAAW,EAAE,EAAE,KAAA,GACpEc,IAAU/B,IAAY,KAAK,OAAOiB,EAAS,WAAW,EAAE,EAAE,KAAA,GAC1De,IAAShC,IAAY,KAAK,OAAOiB,EAAS,UAAU,EAAE,EAAE,KAAA,GACxDgB,KAAQ,OAAOhB,EAAS,SAAS,EAAE,EAAE,KAAA,GACrCiB,KACJ,OAAOjB,EAAS,aAAa,EAAE,EAAE,UACjC,QAAO9C,KAAA,gBAAAA,EAAS,cAAa,EAAE,EAAE,KAAA,OACjC+B,IAAAvB,EAAiB,CAAC,MAAlB,gBAAAuB,EAAqB,UACrB,IACIiC,KAAanC,KACd3B,KAAiB,CAAA,GACf,IAAI,CAAC+D,OAAMA,GAAE,KAAK,EAClB,OAAO,OAAO,EACd,KAAK,KAAK,IACb,CAACN,GAASC,GAASC,CAAM,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK,GAEnDK,KAAqC;AAAA,QACzC,OAAAJ;AAAA,QACA,WAAAC;AAAA,QACA,QAAQ,OAAOjB,EAAS,UAAUhC,CAAa;AAAA,QAC/C,UAAA0C;AAAA,QACA,gBAAAF;AAAA,QACA,WAAAI;AAAA,QACA,iBAAAL;AAAA,QACA,OAAOG;AAAA,QACP,SAASD,KAAO;AAAA,QAChB,SAAAI;AAAA,QACA,SAAAC;AAAA,QACA,QAAAC;AAAA,QACA,cAAa7D,KAAA,gBAAAA,EAAS,gBAAe;AAAA,QACrC,aAAa2D,KAAW;AAAA,QACxB,cAAcE,KAAU;AAAA,QACxB,YAAAG;AAAA,MAAA,GAGIG,KAAW,MAAMvD,EAASsD,EAAO;AACvC,MAAAjB,EAAQ,QAAQrB,IAAa,UAAU,SAAS,GAChD9B,EAAUqE,EAAQ;AAAA,IACpB,SAASC,GAAK;AACZ,YAAMC,IAAOD,aAAe,QAAQA,EAAI,UAAU;AAClD,YACEC,MAAS,uBACTA,MAAS,uBACTA,MAAS,sBACTA,MAAS,sBAIXpB,EAAQ,MAAMmB,aAAe,QAAQA,EAAI,UAAU,MAAM,GACnDA;AAAA,IACR,UAAA;AACE,MAAAjD,EAAU,EAAK;AAAA,IACjB;AAAA,EACF;AAEA,SACE,gBAAAmD;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,WAAWC,GAAW,uBAAuBC,GAAO,qBAAqB,CAAC;AAAA,MAC1E,OAAOpC;AAAA,MACP,MAAAzC;AAAA,MACA,UAAUC;AAAA,MACV,WAAS;AAAA,MACT,QAAAyC;AAAA,MACA,OAAAtB;AAAA,MACA,QAAAC;AAAA,MACA,iBAAe;AAAA,MACf,eAAe,EAAE,SAASC,EAAA;AAAA,MAC1B,WAAW;AAAA,QACT,MAAMqB;AAAA,QACN,UAAUM;AAAA,MAAA;AAAA,MAGZ,UAAA,gBAAAyB;AAAA,QAACI;AAAA,QAAA;AAAA,UACC,wBAAAlD;AAAA,UACA,yBAAAG;AAAA,UACA,eAAeE,IAAY3B,IAAgB;AAAA,UAC3C,cAAc2B,IAAY,SAAY1B;AAAA,UACtC,kBAAAC;AAAA,UACA,mBAAAC;AAAA,UACA,kBAAAG;AAAA,UACA,SAAAC;AAAA,UACA,mBAAAC;AAAA,UACA,oBAAAC;AAAA,UACA,WACEyB,IACI;AAAA,YACE,SAASN,KAAgB;AAAA,YACzB,SAASE,KAAgB;AAAA,YACzB,QAAQE,KAAe;AAAA,UAAA,IAEzB;AAAA,QAAA;AAAA,MAAA;AAAA,IAER;AAAA,EAAA;AAGN;"}
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,20 +1,20 @@
1
- import { jsx as e, jsxs as p } from "react/jsx-runtime";
1
+ import { jsx as e, jsxs as t } from "react/jsx-runtime";
2
2
  import s from "classnames";
3
- import u from "./PersonRoleCascader.js";
4
- import a from "./PersonRoleCascaderField.module.scss.js";
3
+ import p from "./PersonRoleCascader.js";
4
+ import u from "./PersonRoleCascaderField.module.scss.js";
5
5
  import { useField as _ } from "@kne/react-form";
6
6
  const R = ({
7
- name: l,
7
+ name: a,
8
8
  label: r,
9
9
  cascadeOptions: o,
10
10
  loading: i,
11
- disabled: c,
12
- placeholder: d,
13
- emptyHint: m,
14
- defaultUserId: f
11
+ disabled: l,
12
+ placeholder: m,
13
+ emptyHint: c,
14
+ defaultUserId: d
15
15
  }) => {
16
- const { value: n, onChange: t } = _({
17
- name: l,
16
+ const { value: f, onChange: n } = _({
17
+ name: a,
18
18
  label: r,
19
19
  rule: "REQ"
20
20
  });
@@ -24,32 +24,21 @@ const R = ({
24
24
  className: s(
25
25
  "react-form__field",
26
26
  "person-role-cascader-field",
27
- a["person-role-cascader-field"]
27
+ u["person-role-cascader-field"]
28
28
  ),
29
- children: /* @__PURE__ */ p("div", { className: "react-form__field-main", children: [
30
- /* @__PURE__ */ e(
31
- "div",
32
- {
33
- className: s(
34
- "react-form__field-label",
35
- "is-req",
36
- "marsun-form-info-is-req",
37
- a["person-role-cascader-field-label"]
38
- ),
39
- children: r
40
- }
41
- ),
29
+ children: /* @__PURE__ */ t("div", { className: "react-form__field-main", children: [
30
+ /* @__PURE__ */ e("div", { className: s("react-form__field-label", "is-req", "marsun-form-info-is-req"), children: r }),
42
31
  /* @__PURE__ */ e("div", { className: "react-form__field-input", children: /* @__PURE__ */ e(
43
- u,
32
+ p,
44
33
  {
45
- value: String(n ?? ""),
46
- onChange: t,
34
+ value: String(f ?? ""),
35
+ onChange: n,
47
36
  cascadeOptions: o,
48
37
  loading: i,
49
- disabled: c,
50
- placeholder: d,
51
- emptyHint: m,
52
- defaultUserId: f
38
+ disabled: l,
39
+ placeholder: m,
40
+ emptyHint: c,
41
+ defaultUserId: d
53
42
  }
54
43
  ) })
55
44
  ] })
@@ -1 +1 @@
1
- {"version":3,"file":"PersonRoleCascaderField.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.tsx"],"sourcesContent":["import { useField } from '../../../Form';\nimport classNames from 'classnames';\nimport PersonRoleCascader from './PersonRoleCascader';\nimport type { ActionPersonCascadeOption } from './types';\nimport styles from './PersonRoleCascaderField.module.scss';\n\nexport type PersonRoleCascaderFieldProps = {\n /** 写入 FormInfo 的字段名(userId) */\n name: string;\n label: string;\n cascadeOptions: ActionPersonCascadeOption[];\n loading?: boolean;\n disabled?: boolean;\n placeholder?: string;\n emptyHint?: string;\n /** 默认选中的 userId(如上次分配人) */\n defaultUserId?: string;\n};\n\n/**\n * form-info 包装:useField 注册 + 与 FormInfo 字段同壳(label / 间距 / 必填星号)。\n * 勿传 errMsg(kne getErrMsg 会无条件画红字)。\n */\nconst PersonRoleCascaderField: React.FC<PersonRoleCascaderFieldProps> = ({\n name,\n label,\n cascadeOptions,\n loading,\n disabled,\n placeholder,\n emptyHint,\n defaultUserId,\n}) => {\n const { value, onChange } = useField({\n name,\n label,\n rule: 'REQ',\n }) as {\n value?: unknown;\n onChange: (next: string) => void;\n };\n\n return (\n <div\n className={classNames(\n 'react-form__field',\n 'person-role-cascader-field',\n styles['person-role-cascader-field'],\n )}\n >\n <div className=\"react-form__field-main\">\n <div\n className={classNames(\n 'react-form__field-label',\n 'is-req',\n 'marsun-form-info-is-req',\n styles['person-role-cascader-field-label'],\n )}\n >\n {label}\n </div>\n <div className=\"react-form__field-input\">\n <PersonRoleCascader\n value={String(value ?? '')}\n onChange={onChange}\n cascadeOptions={cascadeOptions}\n loading={loading}\n disabled={disabled}\n placeholder={placeholder}\n emptyHint={emptyHint}\n defaultUserId={defaultUserId}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default PersonRoleCascaderField;\n"],"names":["PersonRoleCascaderField","name","label","cascadeOptions","loading","disabled","placeholder","emptyHint","defaultUserId","value","onChange","useField","jsx","classNames","styles","jsxs","PersonRoleCascader"],"mappings":";;;;;AAuBA,MAAMA,IAAkE,CAAC;AAAA,EACvE,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AACF,MAAM;AACJ,QAAM,EAAE,OAAAC,GAAO,UAAAC,EAAA,IAAaC,EAAS;AAAA,IACnC,MAAAV;AAAA,IACA,OAAAC;AAAA,IACA,MAAM;AAAA,EAAA,CACP;AAKD,SACE,gBAAAU;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACA;AAAA,QACAC,EAAO,4BAA4B;AAAA,MAAA;AAAA,MAGrC,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,QAAA,gBAAAH;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAWC;AAAA,cACT;AAAA,cACA;AAAA,cACA;AAAA,cACAC,EAAO,kCAAkC;AAAA,YAAA;AAAA,YAG1C,UAAAZ;AAAA,UAAA;AAAA,QAAA;AAAA,QAEH,gBAAAU,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA,gBAAAA;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,OAAO,OAAOP,KAAS,EAAE;AAAA,YACzB,UAAAC;AAAA,YACA,gBAAAP;AAAA,YACA,SAAAC;AAAA,YACA,UAAAC;AAAA,YACA,aAAAC;AAAA,YACA,WAAAC;AAAA,YACA,eAAAC;AAAA,UAAA;AAAA,QAAA,EACF,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
1
+ {"version":3,"file":"PersonRoleCascaderField.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.tsx"],"sourcesContent":["import { useField } from '../../../Form';\nimport classNames from 'classnames';\nimport PersonRoleCascader from './PersonRoleCascader';\nimport type { ActionPersonCascadeOption } from './types';\nimport styles from './PersonRoleCascaderField.module.scss';\n\nexport type PersonRoleCascaderFieldProps = {\n /** 写入 FormInfo 的字段名(userId) */\n name: string;\n label: string;\n cascadeOptions: ActionPersonCascadeOption[];\n loading?: boolean;\n disabled?: boolean;\n placeholder?: string;\n emptyHint?: string;\n /** 默认选中的 userId(如上次分配人) */\n defaultUserId?: string;\n};\n\n/**\n * form-info 包装:useField 注册 + 与 FormInfo 字段同壳(label / 间距 / 必填星号)。\n * 勿传 errMsg(kne getErrMsg 会无条件画红字)。\n */\nconst PersonRoleCascaderField: React.FC<PersonRoleCascaderFieldProps> = ({\n name,\n label,\n cascadeOptions,\n loading,\n disabled,\n placeholder,\n emptyHint,\n defaultUserId,\n}) => {\n const { value, onChange } = useField({\n name,\n label,\n rule: 'REQ',\n }) as {\n value?: unknown;\n onChange: (next: string) => void;\n };\n\n return (\n <div\n className={classNames(\n 'react-form__field',\n 'person-role-cascader-field',\n styles['person-role-cascader-field'],\n )}\n >\n <div className=\"react-form__field-main\">\n <div className={classNames('react-form__field-label', 'is-req', 'marsun-form-info-is-req')}>\n {label}\n </div>\n <div className=\"react-form__field-input\">\n <PersonRoleCascader\n value={String(value ?? '')}\n onChange={onChange}\n cascadeOptions={cascadeOptions}\n loading={loading}\n disabled={disabled}\n placeholder={placeholder}\n emptyHint={emptyHint}\n defaultUserId={defaultUserId}\n />\n </div>\n </div>\n </div>\n );\n};\n\nexport default PersonRoleCascaderField;\n"],"names":["PersonRoleCascaderField","name","label","cascadeOptions","loading","disabled","placeholder","emptyHint","defaultUserId","value","onChange","useField","jsx","classNames","styles","jsxs","PersonRoleCascader"],"mappings":";;;;;AAuBA,MAAMA,IAAkE,CAAC;AAAA,EACvE,MAAAC;AAAA,EACA,OAAAC;AAAA,EACA,gBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,UAAAC;AAAA,EACA,aAAAC;AAAA,EACA,WAAAC;AAAA,EACA,eAAAC;AACF,MAAM;AACJ,QAAM,EAAE,OAAAC,GAAO,UAAAC,EAAA,IAAaC,EAAS;AAAA,IACnC,MAAAV;AAAA,IACA,OAAAC;AAAA,IACA,MAAM;AAAA,EAAA,CACP;AAKD,SACE,gBAAAU;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACA;AAAA,QACAC,EAAO,4BAA4B;AAAA,MAAA;AAAA,MAGrC,UAAA,gBAAAC,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,QAAA,gBAAAH,EAAC,SAAI,WAAWC,EAAW,2BAA2B,UAAU,yBAAyB,GACtF,UAAAX,GACH;AAAA,QACA,gBAAAU,EAAC,OAAA,EAAI,WAAU,2BACb,UAAA,gBAAAA;AAAA,UAACI;AAAA,UAAA;AAAA,YACC,OAAO,OAAOP,KAAS,EAAE;AAAA,YACzB,UAAAC;AAAA,YACA,gBAAAP;AAAA,YACA,SAAAC;AAAA,YACA,UAAAC;AAAA,YACA,aAAAC;AAAA,YACA,WAAAC;AAAA,YACA,eAAAC;AAAA,UAAA;AAAA,QAAA,EACF,CACF;AAAA,MAAA,EAAA,CACF;AAAA,IAAA;AAAA,EAAA;AAGN;"}
@@ -1,6 +1,5 @@
1
1
  const e = {
2
- "person-role-cascader-field": "_person-role-cascader-field_1gale_3",
3
- "person-role-cascader-field-label": "_person-role-cascader-field-label_1gale_8"
2
+ "person-role-cascader-field": "_person-role-cascader-field_1ok94_3"
4
3
  };
5
4
  export {
6
5
  e as default
@@ -1 +1 @@
1
- {"version":3,"file":"PersonRoleCascaderField.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
1
+ {"version":3,"file":"PersonRoleCascaderField.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;"}
@@ -9,4 +9,4 @@ export type { PersonRoleCascaderFieldProps } from './PersonRoleCascaderField';
9
9
  export { SetFormFields } from './SetFormFields';
10
10
  export { findPersonCascadePath, cascadePathStillValid } from './personCascadePath';
11
11
  export { validateCreateActionPersons, createActionPersonWarnMessage, personDisplayName, addDaysYmd, } from './submitHelpers';
12
- export type { CreateActionPrefill, CreateActionScopeLock, LockedContextField, ActionPersonCascadeOption, ActionPersonOption, CreateActionPersonCatalog, CreateActionSelectOption, CreateActionDimensionOption, CreateActionLoaders, CreateActionSelectPageQuery, CreateActionSelectPageResult, CreateActionSubmitPayload, CreateActionPersonValidateError, CreateActionPersonValidateResult, } from './types';
12
+ export type { CreateActionPrefill, CreateActionScopeLock, CreateActionScopeMode, LockedContextField, ActionPersonCascadeOption, ActionPersonOption, CreateActionPersonCatalog, CreateActionSelectOption, CreateActionDimensionOption, CreateActionLoaders, CreateActionSelectPageQuery, CreateActionSelectPageResult, CreateActionSubmitPayload, CreateActionPersonValidateError, CreateActionPersonValidateResult, } from './types';
@@ -6,3 +6,8 @@ export declare function createActionPersonWarnMessage(code: Extract<CreateAction
6
6
  }>['code']): string;
7
7
  export declare function personDisplayName(opt: ActionPersonOption | undefined, userId: string): string;
8
8
  export declare function addDaysYmd(days: number, from?: Date): string;
9
+ /**
10
+ * FormInfo DatePicker 提交值规范化为 YYYY-MM-DD。
11
+ * kne/antd 可能给出 Dayjs 或已格式化字符串。
12
+ */
13
+ export declare function normalizeDueDateYmd(raw: unknown): string;
@@ -4,32 +4,51 @@ const c = {
4
4
  missing_assignee: "请选择执行人",
5
5
  invalid_assignee: "执行人无效,请从角色级联中重新选择"
6
6
  };
7
- function d(e, a, n, r) {
8
- const t = String(e || "").trim();
9
- if (!t) return { ok: !1, code: "missing_allocator" };
10
- const i = n.find((s) => s.value === t);
11
- if (!i) return { ok: !1, code: "invalid_allocator" };
12
- const o = String(a || "").trim();
7
+ function u(e, t, n, r) {
8
+ const i = String(e || "").trim();
9
+ if (!i) return { ok: !1, code: "missing_allocator" };
10
+ const a = n.find((s) => s.value === i);
11
+ if (!a) return { ok: !1, code: "invalid_allocator" };
12
+ const o = String(t || "").trim();
13
13
  if (!o) return { ok: !1, code: "missing_assignee" };
14
14
  const l = r.find((s) => s.value === o);
15
- return l ? { ok: !0, allocator: i, assignee: l } : { ok: !1, code: "invalid_assignee" };
15
+ return l ? { ok: !0, allocator: a, assignee: l } : { ok: !1, code: "invalid_assignee" };
16
16
  }
17
- function g(e) {
17
+ function d(e) {
18
18
  return c[e];
19
19
  }
20
- function f(e, a) {
21
- return e ? e.displayName ? e.displayName : typeof e.label == "string" && e.label.trim() ? e.label : a : a;
20
+ function g(e, t) {
21
+ return e ? e.displayName ? e.displayName : typeof e.label == "string" && e.label.trim() ? e.label : t : t;
22
22
  }
23
- function u(e, a = /* @__PURE__ */ new Date()) {
24
- const n = new Date(a);
23
+ function f(e, t = /* @__PURE__ */ new Date()) {
24
+ const n = new Date(t);
25
25
  n.setDate(n.getDate() + e);
26
- const r = n.getFullYear(), t = String(n.getMonth() + 1).padStart(2, "0"), i = String(n.getDate()).padStart(2, "0");
27
- return `${r}-${t}-${i}`;
26
+ const r = n.getFullYear(), i = String(n.getMonth() + 1).padStart(2, "0"), a = String(n.getDate()).padStart(2, "0");
27
+ return `${r}-${i}-${a}`;
28
+ }
29
+ function m(e) {
30
+ if (e == null || e === "") return "";
31
+ if (typeof e == "string") {
32
+ const t = e.trim();
33
+ return t.length >= 10 ? t.slice(0, 10) : t;
34
+ }
35
+ if (typeof e == "object") {
36
+ const t = e;
37
+ if (typeof t.format == "function")
38
+ try {
39
+ return t.format("YYYY-MM-DD");
40
+ } catch {
41
+ }
42
+ if (t.$d instanceof Date && !Number.isNaN(t.$d.getTime()))
43
+ return f(0, t.$d);
44
+ }
45
+ return String(e).trim().slice(0, 10);
28
46
  }
29
47
  export {
30
- u as addDaysYmd,
31
- g as createActionPersonWarnMessage,
32
- f as personDisplayName,
33
- d as validateCreateActionPersons
48
+ f as addDaysYmd,
49
+ d as createActionPersonWarnMessage,
50
+ m as normalizeDueDateYmd,
51
+ g as personDisplayName,
52
+ u as validateCreateActionPersons
34
53
  };
35
54
  //# sourceMappingURL=submitHelpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"submitHelpers.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/submitHelpers.ts"],"sourcesContent":["import type { ActionPersonOption, CreateActionPersonValidateResult } from './types';\n\nconst WARN: Record<\n NonNullable<Extract<CreateActionPersonValidateResult, { ok: false }>['code']>,\n string\n> = {\n missing_allocator: '请选择分配人',\n invalid_allocator: '分配人无效,请从角色级联中重新选择',\n missing_assignee: '请选择执行人',\n invalid_assignee: '执行人无效,请从角色级联中重新选择',\n};\n\n/** 提交前校验分配人/执行人(纯函数,供 Modal 与 vitest) */\nexport function validateCreateActionPersons(\n allocatorUserId: string,\n assigneeUserId: string,\n allocatorOptions: ActionPersonOption[],\n assigneeOptions: ActionPersonOption[],\n): CreateActionPersonValidateResult {\n const allocatorId = String(allocatorUserId || '').trim();\n if (!allocatorId) return { ok: false, code: 'missing_allocator' };\n const allocator = allocatorOptions.find((o) => o.value === allocatorId);\n if (!allocator) return { ok: false, code: 'invalid_allocator' };\n\n const assigneeId = String(assigneeUserId || '').trim();\n if (!assigneeId) return { ok: false, code: 'missing_assignee' };\n const assignee = assigneeOptions.find((o) => o.value === assigneeId);\n if (!assignee) return { ok: false, code: 'invalid_assignee' };\n\n return { ok: true, allocator, assignee };\n}\n\nexport function createActionPersonWarnMessage(\n code: Extract<CreateActionPersonValidateResult, { ok: false }>['code'],\n): string {\n return WARN[code];\n}\n\nexport function personDisplayName(opt: ActionPersonOption | undefined, userId: string): string {\n if (!opt) return userId;\n if (opt.displayName) return opt.displayName;\n if (typeof opt.label === 'string' && opt.label.trim()) return opt.label;\n return userId;\n}\n\nexport function addDaysYmd(days: number, from: Date = new Date()): string {\n const d = new Date(from);\n d.setDate(d.getDate() + days);\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n}\n"],"names":["WARN","validateCreateActionPersons","allocatorUserId","assigneeUserId","allocatorOptions","assigneeOptions","allocatorId","allocator","o","assigneeId","assignee","createActionPersonWarnMessage","code","personDisplayName","opt","userId","addDaysYmd","days","from","d","y","m","day"],"mappings":"AAEA,MAAMA,IAGF;AAAA,EACF,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,kBAAkB;AACpB;AAGO,SAASC,EACdC,GACAC,GACAC,GACAC,GACkC;AAClC,QAAMC,IAAc,OAAOJ,KAAmB,EAAE,EAAE,KAAA;AAClD,MAAI,CAACI,EAAa,QAAO,EAAE,IAAI,IAAO,MAAM,oBAAA;AAC5C,QAAMC,IAAYH,EAAiB,KAAK,CAACI,MAAMA,EAAE,UAAUF,CAAW;AACtE,MAAI,CAACC,EAAW,QAAO,EAAE,IAAI,IAAO,MAAM,oBAAA;AAE1C,QAAME,IAAa,OAAON,KAAkB,EAAE,EAAE,KAAA;AAChD,MAAI,CAACM,EAAY,QAAO,EAAE,IAAI,IAAO,MAAM,mBAAA;AAC3C,QAAMC,IAAWL,EAAgB,KAAK,CAACG,MAAMA,EAAE,UAAUC,CAAU;AACnE,SAAKC,IAEE,EAAE,IAAI,IAAM,WAAAH,GAAW,UAAAG,EAAA,IAFR,EAAE,IAAI,IAAO,MAAM,mBAAA;AAG3C;AAEO,SAASC,EACdC,GACQ;AACR,SAAOZ,EAAKY,CAAI;AAClB;AAEO,SAASC,EAAkBC,GAAqCC,GAAwB;AAC7F,SAAKD,IACDA,EAAI,cAAoBA,EAAI,cAC5B,OAAOA,EAAI,SAAU,YAAYA,EAAI,MAAM,KAAA,IAAeA,EAAI,QAC3DC,IAHUA;AAInB;AAEO,SAASC,EAAWC,GAAcC,IAAa,oBAAI,QAAgB;AACxE,QAAMC,IAAI,IAAI,KAAKD,CAAI;AACvB,EAAAC,EAAE,QAAQA,EAAE,QAAA,IAAYF,CAAI;AAC5B,QAAMG,IAAID,EAAE,YAAA,GACNE,IAAI,OAAOF,EAAE,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG,GAC5CG,IAAM,OAAOH,EAAE,QAAA,CAAS,EAAE,SAAS,GAAG,GAAG;AAC/C,SAAO,GAAGC,CAAC,IAAIC,CAAC,IAAIC,CAAG;AACzB;"}
1
+ {"version":3,"file":"submitHelpers.js","sources":["../../../../../src/components/Tools/ActionTracking/CreateAction/submitHelpers.ts"],"sourcesContent":["import type { ActionPersonOption, CreateActionPersonValidateResult } from './types';\n\nconst WARN: Record<\n NonNullable<Extract<CreateActionPersonValidateResult, { ok: false }>['code']>,\n string\n> = {\n missing_allocator: '请选择分配人',\n invalid_allocator: '分配人无效,请从角色级联中重新选择',\n missing_assignee: '请选择执行人',\n invalid_assignee: '执行人无效,请从角色级联中重新选择',\n};\n\n/** 提交前校验分配人/执行人(纯函数,供 Modal 与 vitest) */\nexport function validateCreateActionPersons(\n allocatorUserId: string,\n assigneeUserId: string,\n allocatorOptions: ActionPersonOption[],\n assigneeOptions: ActionPersonOption[],\n): CreateActionPersonValidateResult {\n const allocatorId = String(allocatorUserId || '').trim();\n if (!allocatorId) return { ok: false, code: 'missing_allocator' };\n const allocator = allocatorOptions.find((o) => o.value === allocatorId);\n if (!allocator) return { ok: false, code: 'invalid_allocator' };\n\n const assigneeId = String(assigneeUserId || '').trim();\n if (!assigneeId) return { ok: false, code: 'missing_assignee' };\n const assignee = assigneeOptions.find((o) => o.value === assigneeId);\n if (!assignee) return { ok: false, code: 'invalid_assignee' };\n\n return { ok: true, allocator, assignee };\n}\n\nexport function createActionPersonWarnMessage(\n code: Extract<CreateActionPersonValidateResult, { ok: false }>['code'],\n): string {\n return WARN[code];\n}\n\nexport function personDisplayName(opt: ActionPersonOption | undefined, userId: string): string {\n if (!opt) return userId;\n if (opt.displayName) return opt.displayName;\n if (typeof opt.label === 'string' && opt.label.trim()) return opt.label;\n return userId;\n}\n\nexport function addDaysYmd(days: number, from: Date = new Date()): string {\n const d = new Date(from);\n d.setDate(d.getDate() + days);\n const y = d.getFullYear();\n const m = String(d.getMonth() + 1).padStart(2, '0');\n const day = String(d.getDate()).padStart(2, '0');\n return `${y}-${m}-${day}`;\n}\n\n/**\n * FormInfo DatePicker 提交值规范化为 YYYY-MM-DD。\n * kne/antd 可能给出 Dayjs 或已格式化字符串。\n */\nexport function normalizeDueDateYmd(raw: unknown): string {\n if (raw == null || raw === '') return '';\n if (typeof raw === 'string') {\n const s = raw.trim();\n return s.length >= 10 ? s.slice(0, 10) : s;\n }\n if (typeof raw === 'object') {\n const maybe = raw as { format?: (pattern: string) => string; $d?: Date };\n if (typeof maybe.format === 'function') {\n try {\n return maybe.format('YYYY-MM-DD');\n } catch {\n /* fall through */\n }\n }\n if (maybe.$d instanceof Date && !Number.isNaN(maybe.$d.getTime())) {\n return addDaysYmd(0, maybe.$d);\n }\n }\n return String(raw).trim().slice(0, 10);\n}\n"],"names":["WARN","validateCreateActionPersons","allocatorUserId","assigneeUserId","allocatorOptions","assigneeOptions","allocatorId","allocator","o","assigneeId","assignee","createActionPersonWarnMessage","code","personDisplayName","opt","userId","addDaysYmd","days","from","d","y","m","day","normalizeDueDateYmd","raw","s","maybe"],"mappings":"AAEA,MAAMA,IAGF;AAAA,EACF,mBAAmB;AAAA,EACnB,mBAAmB;AAAA,EACnB,kBAAkB;AAAA,EAClB,kBAAkB;AACpB;AAGO,SAASC,EACdC,GACAC,GACAC,GACAC,GACkC;AAClC,QAAMC,IAAc,OAAOJ,KAAmB,EAAE,EAAE,KAAA;AAClD,MAAI,CAACI,EAAa,QAAO,EAAE,IAAI,IAAO,MAAM,oBAAA;AAC5C,QAAMC,IAAYH,EAAiB,KAAK,CAACI,MAAMA,EAAE,UAAUF,CAAW;AACtE,MAAI,CAACC,EAAW,QAAO,EAAE,IAAI,IAAO,MAAM,oBAAA;AAE1C,QAAME,IAAa,OAAON,KAAkB,EAAE,EAAE,KAAA;AAChD,MAAI,CAACM,EAAY,QAAO,EAAE,IAAI,IAAO,MAAM,mBAAA;AAC3C,QAAMC,IAAWL,EAAgB,KAAK,CAACG,MAAMA,EAAE,UAAUC,CAAU;AACnE,SAAKC,IAEE,EAAE,IAAI,IAAM,WAAAH,GAAW,UAAAG,EAAA,IAFR,EAAE,IAAI,IAAO,MAAM,mBAAA;AAG3C;AAEO,SAASC,EACdC,GACQ;AACR,SAAOZ,EAAKY,CAAI;AAClB;AAEO,SAASC,EAAkBC,GAAqCC,GAAwB;AAC7F,SAAKD,IACDA,EAAI,cAAoBA,EAAI,cAC5B,OAAOA,EAAI,SAAU,YAAYA,EAAI,MAAM,KAAA,IAAeA,EAAI,QAC3DC,IAHUA;AAInB;AAEO,SAASC,EAAWC,GAAcC,IAAa,oBAAI,QAAgB;AACxE,QAAMC,IAAI,IAAI,KAAKD,CAAI;AACvB,EAAAC,EAAE,QAAQA,EAAE,QAAA,IAAYF,CAAI;AAC5B,QAAMG,IAAID,EAAE,YAAA,GACNE,IAAI,OAAOF,EAAE,SAAA,IAAa,CAAC,EAAE,SAAS,GAAG,GAAG,GAC5CG,IAAM,OAAOH,EAAE,QAAA,CAAS,EAAE,SAAS,GAAG,GAAG;AAC/C,SAAO,GAAGC,CAAC,IAAIC,CAAC,IAAIC,CAAG;AACzB;AAMO,SAASC,EAAoBC,GAAsB;AACxD,MAAIA,KAAO,QAAQA,MAAQ,GAAI,QAAO;AACtC,MAAI,OAAOA,KAAQ,UAAU;AAC3B,UAAMC,IAAID,EAAI,KAAA;AACd,WAAOC,EAAE,UAAU,KAAKA,EAAE,MAAM,GAAG,EAAE,IAAIA;AAAA,EAC3C;AACA,MAAI,OAAOD,KAAQ,UAAU;AAC3B,UAAME,IAAQF;AACd,QAAI,OAAOE,EAAM,UAAW;AAC1B,UAAI;AACF,eAAOA,EAAM,OAAO,YAAY;AAAA,MAClC,QAAQ;AAAA,MAER;AAEF,QAAIA,EAAM,cAAc,QAAQ,CAAC,OAAO,MAAMA,EAAM,GAAG,QAAA,CAAS;AAC9D,aAAOV,EAAW,GAAGU,EAAM,EAAE;AAAA,EAEjC;AACA,SAAO,OAAOF,CAAG,EAAE,OAAO,MAAM,GAAG,EAAE;AACvC;"}
@@ -20,6 +20,14 @@ export type LockedContextField = {
20
20
  label: string;
21
21
  value: string;
22
22
  };
23
+ /**
24
+ * 建单业务上下文字段模式。
25
+ * - `form`:可编辑分厂/品种/指标(S3 默认)
26
+ * - `locked`:只读 lockedContext(域下发)
27
+ * - `none`:不出分厂/品种/指标(EAM `/actions` 主动新建)
28
+ * 有 `lockedContext` 时强制 `locked`,忽略传入值。
29
+ */
30
+ export type CreateActionScopeMode = 'form' | 'locked' | 'none';
23
31
  /** 角色→用户两级级联节点 */
24
32
  export type ActionPersonCascadeOption = {
25
33
  value: string;
@@ -89,6 +97,7 @@ export type CreateActionSubmitPayload = {
89
97
  allocatorUserId: string;
90
98
  owner: string;
91
99
  dueDate?: string;
100
+ /** scopeMode=none / locked 时可空 */
92
101
  factory: string;
93
102
  variety: string;
94
103
  metric: string;
@@ -1,7 +1,7 @@
1
1
  export { default as ActionTrackingShell } from './Shell';
2
2
  export type { ActionTrackingShellProps } from './Shell';
3
3
  export { CreateActionModal, CreateActionForm, renderPersonOptionLabel, CREATE_ACTION_VARIETY_PAGE_SIZE, PersonRoleCascader, PersonRoleCascaderField, SetFormFields, findPersonCascadePath, cascadePathStillValid, validateCreateActionPersons, createActionPersonWarnMessage, personDisplayName, addDaysYmd, } from './CreateAction';
4
- export type { CreateActionModalProps, CreateActionFormProps, PersonRoleCascaderProps, PersonRoleCascaderFieldProps, CreateActionPrefill, CreateActionScopeLock, LockedContextField, ActionPersonCascadeOption, ActionPersonOption, CreateActionPersonCatalog, CreateActionSelectOption, CreateActionDimensionOption, CreateActionLoaders, CreateActionSelectPageQuery, CreateActionSelectPageResult, CreateActionSubmitPayload, CreateActionPersonValidateError, CreateActionPersonValidateResult, } from './CreateAction';
4
+ export type { CreateActionModalProps, CreateActionFormProps, PersonRoleCascaderProps, PersonRoleCascaderFieldProps, CreateActionPrefill, CreateActionScopeLock, CreateActionScopeMode, LockedContextField, ActionPersonCascadeOption, ActionPersonOption, CreateActionPersonCatalog, CreateActionSelectOption, CreateActionDimensionOption, CreateActionLoaders, CreateActionSelectPageQuery, CreateActionSelectPageResult, CreateActionSubmitPayload, CreateActionPersonValidateError, CreateActionPersonValidateResult, } from './CreateAction';
5
5
  export { ActionFilterBar, ActionListTable, defaultCreatedRange, normalizeActionFilters, canQueryActionList, resetActionFiltersToDefault, } from './List';
6
6
  export type { ActionFilterBarProps, ActionListTableProps, ActionListFilters, ActionListRowBase, ActionListSelectOption, ActionListColumns, ActionListEmptyConfig, } from './List';
7
7
  export { default as ActionFollowModal } from './Follow';