@hkyhy/marsun-components-core 0.1.123 → 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 (46) 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/Tools/ActionTracking/CreateAction/CreateActionForm.d.ts +8 -1
  21. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js +148 -142
  22. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.js.map +1 -1
  23. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.module.scss.js +5 -4
  24. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionForm.module.scss.js.map +1 -1
  25. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.d.ts +10 -2
  26. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js +122 -116
  27. package/dist/components/Tools/ActionTracking/CreateAction/CreateActionModal.js.map +1 -1
  28. package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.js +20 -31
  29. package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.js.map +1 -1
  30. package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.module.scss.js +1 -2
  31. package/dist/components/Tools/ActionTracking/CreateAction/PersonRoleCascaderField.module.scss.js.map +1 -1
  32. package/dist/components/Tools/ActionTracking/CreateAction/index.d.ts +1 -1
  33. package/dist/components/Tools/ActionTracking/CreateAction/submitHelpers.d.ts +5 -0
  34. package/dist/components/Tools/ActionTracking/CreateAction/submitHelpers.js +37 -18
  35. package/dist/components/Tools/ActionTracking/CreateAction/submitHelpers.js.map +1 -1
  36. package/dist/components/Tools/ActionTracking/CreateAction/types.d.ts +9 -0
  37. package/dist/components/Tools/ActionTracking/index.d.ts +1 -1
  38. package/dist/components/Tools/index.d.ts +1 -1
  39. package/dist/file.js +24 -19
  40. package/dist/file.js.map +1 -1
  41. package/dist/form-info.js +46 -45
  42. package/dist/index.js +452 -446
  43. package/dist/index.js.map +1 -1
  44. package/dist/marsun-components-core.css +1 -1
  45. package/dist/styles/global.css +1 -1
  46. 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":";;;;;;;;;;;;;AA6BO,MAAMA,IAAkC,IAEzCC,IAA0B;AAEhC,SAASC,EAAqBC,GAAqBC,GAA8C;AAC/F,SAAO,QAAQ,KAAK;AAAA,IAClBD,EAAQ;AAAA,MACN,CAACE,OAAW,EAAE,QAAQ,aAAsB,OAAAA,EAAA;AAAA,MAC5C,CAACC,OAAY,EAAE,QAAQ,YAAqB,QAAAA,EAAA;AAAA,IAAO;AAAA,IAErD,IAAI,QAAiC,CAACC,MAAY;AAChD,iBAAW,MAAMA,EAAQ,EAAE,QAAQ,YAAY,QAAQ,IAAI,MAAM,SAAS,EAAA,CAAG,GAAGH,CAAE;AAAA,IACpF,CAAC;AAAA,EAAA,CACF;AACH;AAEA,SAASI,GAAeC,GAAsB;AAC5C,SAAIA,KAAO,QAAQA,MAAQ,KAAW,KAClC,MAAM,QAAQA,CAAG,IAAU,OAAOA,EAAI,CAAC,KAAK,EAAE,EAAE,KAAA,IAChD,OAAOA,KAAQ,WAEV,OADGA,EACM,SAAS,EAAE,EAAE,KAAA,IAExB,OAAOA,CAAG,EAAE,KAAA;AACrB;AA2BO,SAASC,GAAwBC,GAAcC,GAAwB;AAC5E,SAAKA,IAEH,gBAAAC,EAAC,QAAA,EAAK,WAAWC,EAAO,iBAAiB,GACvC,UAAA;AAAA,IAAA,gBAAAC,EAAC,QAAA,EAAK,WAAWD,EAAO,sBAAsB,GAAI,UAAAH,GAAK;AAAA,sBACtD,QAAA,EAAK,WAAWG,EAAO,qBAAqB,GAAI,UAAAF,EAAA,CAAI;AAAA,EAAA,GACvD,IALeD;AAOnB;AAWA,MAAMK,KAAoD,CAAC;AAAA,EACzD,WAAAC;AAAA,EACA,cAAAC;AAAA,EACA,eAAAC;AAAA,EACA,WAAWC,IAAgB;AAAA,EAC3B,kBAAAC;AAAA,EACA,mBAAAC;AAAA,EACA,eAAAC;AAAA,EACA,kBAAAC;AAAA,EACA,SAAAC;AAAA,EACA,mBAAAC,IAAoB;AAAA,EACpB,oBAAAC,KAAqB;AAAA,EACrB,sBAAAC,KAAuB;AAAA,EACvB,qBAAAC,KAAsB;AAAA,EACtB,wBAAAC;AAAA,EACA,yBAAAC;AACF,MAAM;;AACJ,QAAMC,IAAUC,GAAA,GACV,CAACC,IAAiBC,CAAkB,IAAIC,EAAsC,CAAA,CAAE,GAChF,CAACC,IAAkBC,CAAmB,IAAIF,EAAsC,CAAA,CAAE,GAClF,CAACG,GAAgBC,CAAiB,IAAIJ,EAAqC,CAAA,CAAE,GAC7E,CAACK,GAAeC,CAAgB,IAAIN,EAAS,EAAI,GACjD,CAACO,GAAgBC,CAAiB,IAAIR,EAAS,EAAK,GACpD,CAACS,GAAwBC,EAAyB,IAAIV,EAAS,EAAE,GACjE,CAACW,GAAYC,CAAa,IAAIZ,EAAS,MAAA;;AAAM,aAAAa,IAAAhC,KAAA,gBAAAA,EAAW,YAAX,gBAAAgC,EAAoB,WAAU;AAAA,GAAE,GAC7EC,IAAaC,KAAOF,IAAAhC,KAAA,gBAAAA,EAAW,YAAX,gBAAAgC,EAAoB,WAAU,EAAE,GAEpDG,IAAmB,GAAQjC,KAAiBA,EAAc,SAAS,IAMnEkC,KAL2CD,IAC7C,WACAhC,MAAkB,SAChB,SACA,YACqC,QACrCkC,IAAc,IAAQC,IAAAtC,KAAA,gBAAAA,EAAW,YAAX,QAAAsC,EAAoB,SAC1CC,IAAc,IAAQC,IAAAxC,KAAA,gBAAAA,EAAW,YAAX,QAAAwC,EAAoB,SAC1CC,KAAa,IAAQC,IAAA1C,KAAA,gBAAAA,EAAW,WAAX,QAAA0C,EAAmB,SACxCC,IAAiB,OAAOnC,EAAQ,mBAAoB,YACpDoC,IAAiB,EAAQd,KAAeS,GAExCM,KAAuBC,EAAQ,MAAM;;AACzC,UAAMC,KAASf,IAAAhC,KAAA,gBAAAA,EAAW,YAAX,gBAAAgC,EAAoB;AAEnC,WADI,CAACe,KACDzB,EAAe,KAAK,CAAC0B,MAAMA,EAAE,UAAUD,CAAM,IAAUzB,IACpD,CAAC,EAAE,OAAOyB,GAAQ,OAAOA,EAAA,GAAU,GAAGzB,CAAc;AAAA,EAC7D,GAAG,CAACA,GAAgBtB,KAAA,gBAAAA,EAAW,OAAO,CAAC,GAEjCiD,IAAmBH,EAAQ,MAAM;AACrC,QAAI,CAACH,KAAkB,CAACnC,EAAQ,gBAAiB;AACjD,UAAM0C,IAAW1C,EAAQ;AACzB,WAAO2C,GAA0B;AAAA,MAC/B,UAAUpE;AAAA,MACV,UAAU,CAACqE,MACTF,EAAS;AAAA,QACP,GAAGE;AAAA,QACH,SAASnB,EAAW;AAAA,MAAA,CACrB;AAAA,MACH,SAAS,MAAMoB,EAAQ,MAAM,UAAU;AAAA,IAAA,CACxC;AAAA,EACH,GAAG,CAACV,GAAgBnC,EAAQ,eAAe,CAAC,GAEtC8C,KAAwBR;AAAA,IAC5B,MAAMS,GAA+BxE,CAA+B;AAAA,IACpE,CAAA;AAAA,EAAC,GAGGyE,KAAoBV;AAAA,IACxB,MAAMW,GAA2B1E,CAA+B;AAAA,IAChE,CAAA;AAAA,EAAC,GAGG2E,KAAiBC;AAAA,IACrB,CAACC,MAAkC;AACjC,UAAIzB,KAAoBC,EAAc;AACtC,YAAMyB,IAAOtE,GAAeqE,EAAK,OAAO;AACxC,UAAIC,MAAS5B,EAAW,QAAS;AACjC,YAAM6B,IAAO7B,EAAW;AACxB,MAAAA,EAAW,UAAU4B,GACrB9B,EAAc8B,CAAI,GACdC,KAAQD,MAASC,KAAQnB,KAAkB,CAACJ,KAC9C,eAAe,MAAM;AACnB,QAAAxB,EAAQ,QAAQ,cAAc,EAAE,MAAM,UAAA,GAAa,IAAI,EAAE,aAAa,IAAO;AAAA,MAC/E,CAAC;AAAA,IAEL;AAAA,IACA,CAACA,EAAQ,SAAS4B,GAAgBJ,GAAaJ,GAAkBC,CAAY;AAAA,EAAA;AAG/E,EAAA2B,EAAU,MAAM;;AACd,UAAMhB,MAASf,IAAAhC,KAAA,gBAAAA,EAAW,YAAX,gBAAAgC,EAAoB,WAAU;AAC7C,IAAKe,MACLd,EAAW,UAAUc,GACrBhB,EAAcgB,CAAM;AAAA,EACtB,GAAG,CAAC/C,KAAA,gBAAAA,EAAW,OAAO,CAAC,GAGvB+D,EAAU,MAAM;AACd,QAAIC,IAAY;AAChB,WAAAvC,EAAiB,EAAI,GACrB,QAAQ,IAAI;AAAA,MACVxC,EAAkBuB,EAAQ,oBAAA,GAAuBxB,CAAuB;AAAA,MACxEC,EAAkBuB,EAAQ,qBAAA,GAAwBxB,CAAuB;AAAA,IAAA,CAC1E,EACE,KAAK,CAAC,CAACiF,GAAUC,CAAQ,MAAM;AAC9B,UAAI,CAAAF;AASJ,YARIC,EAAS,WAAW,eACtB/C,EAAmB+C,EAAS,MAAM,cAAc,GAChDpD,KAAA,QAAAA,EAAyBoD,EAAS,MAAM,aAExCZ,EAAQ,MAAM,WAAW,GACzBnC,EAAmB,CAAA,CAAE,GACrBL,KAAA,QAAAA,EAAyB,CAAA,KAEvBqD,EAAS,WAAW,aAAa;AACnC,UAAA7C,EAAoB6C,EAAS,MAAM,cAAc,GACjDpD,KAAA,QAAAA,EAA0BoD,EAAS,MAAM;AACzC,gBAAMC,IAAO3D,EAAQ;AACrB,UAAAqB,GAA0BsC,IAAOA,EAAKD,EAAS,MAAM,OAAO,IAAI,EAAE;AAAA,QACpE;AACE,UAAAb,EAAQ,MAAM,WAAW,GACzBhC,EAAoB,CAAA,CAAE,GACtBP,KAAA,QAAAA,EAA0B,CAAA;AAAA,IAE9B,CAAC,EACA,QAAQ,MAAM;AACb,MAAKkD,KAAWvC,EAAiB,EAAK;AAAA,IACxC,CAAC,GACI,MAAM;AACX,MAAAuC,IAAY;AAAA,IACd;AAAA,EAEF,GAAG,CAAA,CAAE,GAGLD,EAAU,MAAM;AACd,QAAI5B,KAAoBC,KAAgB,CAAC5B,EAAQ,mBAAoB;AACrE,QAAIwD,IAAY;AAChB,WAAArC,EAAkB,EAAI,GACtB1C,EAAkBuB,EAAQ,mBAAA,GAAsBxB,CAAuB,EACpE,KAAK,CAACoF,MAAiB;AACtB,MAAIJ,MACAI,EAAa,WAAW,cAC1B7C,EAAkB6C,EAAa,KAAK,KAEpCf,EAAQ,MAAM,UAAU,GACxB9B,EAAkB,CAAA,CAAE;AAAA,IAExB,CAAC,EACA,QAAQ,MAAM;AACb,MAAKyC,KAAWrC,EAAkB,EAAK;AAAA,IACzC,CAAC,GACI,MAAM;AACX,MAAAqC,IAAY;AAAA,IACd;AAAA,EAEF,GAAG,CAAA,CAAE;AAEL,QAAMK,KAA2BlC,KAC5BjC,KAAiB,CAAA,GAAI,IAAI,CAACoE,GAAOC,MAChC,gBAAAzE;AAAA,IAAC0E;AAAA,IAAA;AAAA,MAEC,MAAM,iBAAiBD,CAAG;AAAA,MAC1B,OAAOD,EAAM;AAAA,MACb,UAAQ;AAAA,IAAA;AAAA,IAHH,UAAUC,CAAG,IAAID,EAAM,KAAK;AAAA,EAAA,CAKpC,IACDlC,IACE,KACA;AAAA,IACE,gBAAAtC;AAAA,MAAC2E;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAM;AAAA,QACN,QAAM;AAAA,QACN,SAAS5B;AAAA,QACT,aAAanB,IAAiB,UAAU;AAAA,QACxC,UAAUA,KAAkBW;AAAA,QAC5B,YAAY,CAACA;AAAA,MAAA;AAAA,MAPT;AAAA,IAAA;AAAA,IASNM,KAAkBM,IAChB,gBAAAnD;AAAA,MAAC2E;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAOxE,KAAgB;AAAA,QACvB,QAAM;AAAA,QACN,KAAKgD;AAAA,QACL,gBAAgBK;AAAA,QAChB,YAAYE;AAAA,QACZ,aAAaZ,IAAiB,SAAS;AAAA,QACvC,UAAUL,KAAe,CAACK;AAAA,QAC1B,YAAY,CAACL;AAAA,QACb,mBAAkB;AAAA,MAAA;AAAA,MAVb,WAAWT,KAAc,MAAM;AAAA,IAAA,IAatC,gBAAAhC;AAAA,MAAC2E;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAOxE,KAAgB;AAAA,QACvB,QAAM;AAAA,QACN,SAAS,CAAA;AAAA,QACT,aAAY;AAAA,QACZ,UAAQ;AAAA,MAAA;AAAA,MANJ;AAAA,IAAA;AAAA,IASR,gBAAAH;AAAA,MAAC0E;AAAA,MAAA;AAAA,QAEC,MAAK;AAAA,QACL,OAAM;AAAA,QACN,aAAanE,KAAqB;AAAA,QAClC,WAAW;AAAA,QACX,UAAUoC;AAAA,MAAA;AAAA,MALN;AAAA,IAAA;AAAA,EAMN;AAGR,SACE,gBAAA7C,EAAC,SAAI,WAAW8E,EAAW,sBAAsB7E,EAAO,oBAAoB,CAAC,GAC3E,UAAA;AAAA,IAAA,gBAAAC,EAAC6E,IAAA,EAAa,UAAUjB,GAAA,CAAgB;AAAA,sBACvCkB,IAAA,EAAc,OAAO,EAAE,iBAAiBhD,KAA0B;AAAA,IACnE,gBAAA9B;AAAA,MAAC+E;AAAA,MAAA;AAAA,QACC,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,gBAAA/E;AAAA,YAAC0E;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,MAAK;AAAA,cACL,aAAapE,KAAoB;AAAA,cACjC,WAAW;AAAA,YAAA;AAAA,YALP;AAAA,UAAA;AAAA,UAON,gBAAAN;AAAA,YAAC2E;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,MAAK;AAAA,cACL,QAAM;AAAA,cACN,SAASlE;AAAA,cACT,aAAY;AAAA,YAAA;AAAA,YANR;AAAA,UAAA;AAAA,UAQN,gBAAAT;AAAA,YAACgF;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,gBAAgB1D;AAAA,cAChB,SAASI;AAAA,cACT,WAAWd;AAAA,cACX,aAAaC;AAAA,cACb,eAAeiB;AAAA,YAAA;AAAA,YAPX;AAAA,UAAA;AAAA,UASN,gBAAA9B;AAAA,YAACgF;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,gBAAgB7D;AAAA,cAChB,SAASO;AAAA,cACT,WAAWf;AAAA,cACX,aAAaG;AAAA,YAAA;AAAA,YANT;AAAA,UAAA;AAAA,UAQN,gBAAAd;AAAA,YAACiF;AAAA,YAAA;AAAA,cAEC,MAAK;AAAA,cACL,OAAM;AAAA,cACN,WAAU;AAAA,cACV,QAAO;AAAA,cACP,aAAY;AAAA,cACZ,YAAU;AAAA,YAAA;AAAA,YANN;AAAA,UAAA;AAAA,UAQN,GAAGV;AAAA,QAAA;AAAA,MACL;AAAA,IAAA;AAAA,IAEDjC,KAAgB9B,IACf,gBAAAR,EAAC,KAAA,EAAE,WAAW4E,EAAW,2BAA2B7E,EAAO,yBAAyB,CAAC,GAClF,UAAAS,EAAA,CACH,IACE;AAAA,EAAA,GACN;AAEJ;"}
@@ -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 恒真)