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