openxiangda 2.48.2 → 2.59.1

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 (245) hide show
  1. package/README.md +1 -0
  2. package/dist/browser/AuthoritativeSelector.d.ts +4 -2
  3. package/dist/browser/AuthoritativeSelector.d.ts.map +1 -1
  4. package/dist/browser/AuthoritativeSelector.js +42 -12
  5. package/dist/browser/AuthoritativeSelector.js.map +1 -1
  6. package/dist/browser/FilePreviewPage.d.ts.map +1 -1
  7. package/dist/browser/FilePreviewPage.js +4 -0
  8. package/dist/browser/FilePreviewPage.js.map +1 -1
  9. package/dist/browser/components/administration/RoleMembershipManager.d.ts.map +1 -1
  10. package/dist/browser/components/administration/RoleMembershipManager.js +5 -5
  11. package/dist/browser/components/administration/RoleMembershipManager.js.map +1 -1
  12. package/dist/browser/components/administration/scope-applicability.d.ts +3 -0
  13. package/dist/browser/components/administration/scope-applicability.d.ts.map +1 -0
  14. package/dist/browser/components/administration/scope-applicability.js +7 -0
  15. package/dist/browser/components/administration/scope-applicability.js.map +1 -0
  16. package/dist/browser/components/platform-fields/ConstrainedUserField.d.ts +16 -0
  17. package/dist/browser/components/platform-fields/ConstrainedUserField.d.ts.map +1 -0
  18. package/dist/browser/components/platform-fields/ConstrainedUserField.js +140 -0
  19. package/dist/browser/components/platform-fields/ConstrainedUserField.js.map +1 -0
  20. package/dist/browser/components/platform-fields/DateTimeField.d.ts +1 -1
  21. package/dist/browser/components/platform-fields/DateTimeField.d.ts.map +1 -1
  22. package/dist/browser/components/platform-fields/DateTimeField.js +15 -8
  23. package/dist/browser/components/platform-fields/DateTimeField.js.map +1 -1
  24. package/dist/browser/components/platform-fields/ManagedMediaPlayer.d.ts +19 -0
  25. package/dist/browser/components/platform-fields/ManagedMediaPlayer.d.ts.map +1 -0
  26. package/dist/browser/components/platform-fields/ManagedMediaPlayer.js +42 -0
  27. package/dist/browser/components/platform-fields/ManagedMediaPlayer.js.map +1 -0
  28. package/dist/browser/components/platform-fields/MobileDateTimeField.d.ts +1 -1
  29. package/dist/browser/components/platform-fields/MobileDateTimeField.d.ts.map +1 -1
  30. package/dist/browser/components/platform-fields/MobileDateTimeField.js +5 -3
  31. package/dist/browser/components/platform-fields/MobileDateTimeField.js.map +1 -1
  32. package/dist/browser/components/platform-fields/MobileSelection.d.ts +3 -1
  33. package/dist/browser/components/platform-fields/MobileSelection.d.ts.map +1 -1
  34. package/dist/browser/components/platform-fields/MobileSelection.js +2 -2
  35. package/dist/browser/components/platform-fields/MobileSelection.js.map +1 -1
  36. package/dist/browser/components/platform-fields/MobileZonedDateTimeField.js +2 -2
  37. package/dist/browser/components/platform-fields/MobileZonedDateTimeField.js.map +1 -1
  38. package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts +4 -2
  39. package/dist/browser/components/platform-fields/ResourceReferenceField.d.ts.map +1 -1
  40. package/dist/browser/components/platform-fields/ResourceReferenceField.js +3 -3
  41. package/dist/browser/components/platform-fields/ResourceReferenceField.js.map +1 -1
  42. package/dist/browser/components/platform-fields/SubtableField.d.ts +11 -2
  43. package/dist/browser/components/platform-fields/SubtableField.d.ts.map +1 -1
  44. package/dist/browser/components/platform-fields/SubtableField.js +55 -24
  45. package/dist/browser/components/platform-fields/SubtableField.js.map +1 -1
  46. package/dist/browser/components/platform-fields/ZonedDateTimeField.js +2 -2
  47. package/dist/browser/components/platform-fields/ZonedDateTimeField.js.map +1 -1
  48. package/dist/browser/components/platform-fields/managed-media-read.d.ts +19 -0
  49. package/dist/browser/components/platform-fields/managed-media-read.d.ts.map +1 -0
  50. package/dist/browser/components/platform-fields/managed-media-read.js +32 -0
  51. package/dist/browser/components/platform-fields/managed-media-read.js.map +1 -0
  52. package/dist/browser/components/platform-fields/reference-binding-change.d.ts +6 -0
  53. package/dist/browser/components/platform-fields/reference-binding-change.d.ts.map +1 -0
  54. package/dist/browser/components/platform-fields/reference-binding-change.js +32 -0
  55. package/dist/browser/components/platform-fields/reference-binding-change.js.map +1 -0
  56. package/dist/browser/components/platform-fields/user-candidate-context.d.ts +54 -0
  57. package/dist/browser/components/platform-fields/user-candidate-context.d.ts.map +1 -0
  58. package/dist/browser/components/platform-fields/user-candidate-context.js +70 -0
  59. package/dist/browser/components/platform-fields/user-candidate-context.js.map +1 -0
  60. package/dist/browser/components/platform-fields/zoned-date-time.d.ts +4 -0
  61. package/dist/browser/components/platform-fields/zoned-date-time.d.ts.map +1 -1
  62. package/dist/browser/components/platform-fields/zoned-date-time.js +9 -1
  63. package/dist/browser/components/platform-fields/zoned-date-time.js.map +1 -1
  64. package/dist/browser/components/resource/GeneratedResourceCrud.d.ts.map +1 -1
  65. package/dist/browser/components/resource/GeneratedResourceCrud.js +28 -4
  66. package/dist/browser/components/resource/GeneratedResourceCrud.js.map +1 -1
  67. package/dist/browser/components/resource/GeneratedResourceForm.js +3 -3
  68. package/dist/browser/components/resource/GeneratedResourceForm.js.map +1 -1
  69. package/dist/browser/components/resource/RecordDetailFrame.d.ts +3 -1
  70. package/dist/browser/components/resource/RecordDetailFrame.d.ts.map +1 -1
  71. package/dist/browser/components/resource/RecordDetailFrame.js +2 -2
  72. package/dist/browser/components/resource/RecordDetailFrame.js.map +1 -1
  73. package/dist/browser/components/resource/ResourceFormFrame.d.ts +3 -2
  74. package/dist/browser/components/resource/ResourceFormFrame.d.ts.map +1 -1
  75. package/dist/browser/components/resource/ResourceFormFrame.js +13 -2
  76. package/dist/browser/components/resource/ResourceFormFrame.js.map +1 -1
  77. package/dist/browser/components/resource/ResourceRecordComments.d.ts +13 -0
  78. package/dist/browser/components/resource/ResourceRecordComments.d.ts.map +1 -0
  79. package/dist/browser/components/resource/ResourceRecordComments.js +75 -0
  80. package/dist/browser/components/resource/ResourceRecordComments.js.map +1 -0
  81. package/dist/browser/components/resource/ResourceRecordDeletion.d.ts +7 -0
  82. package/dist/browser/components/resource/ResourceRecordDeletion.d.ts.map +1 -0
  83. package/dist/browser/components/resource/ResourceRecordDeletion.js +53 -0
  84. package/dist/browser/components/resource/ResourceRecordDeletion.js.map +1 -0
  85. package/dist/browser/components/resource/ResourceRecordPrintPreview.d.ts +16 -0
  86. package/dist/browser/components/resource/ResourceRecordPrintPreview.d.ts.map +1 -0
  87. package/dist/browser/components/resource/ResourceRecordPrintPreview.js +92 -0
  88. package/dist/browser/components/resource/ResourceRecordPrintPreview.js.map +1 -0
  89. package/dist/browser/components/resource/SurfaceFields.d.ts +12 -3
  90. package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -1
  91. package/dist/browser/components/resource/SurfaceFields.js +24 -8
  92. package/dist/browser/components/resource/SurfaceFields.js.map +1 -1
  93. package/dist/browser/components/resource/generated-resource-definition.d.ts +13 -0
  94. package/dist/browser/components/resource/generated-resource-definition.d.ts.map +1 -1
  95. package/dist/browser/components/resource/record-comment-session.d.ts +17 -0
  96. package/dist/browser/components/resource/record-comment-session.d.ts.map +1 -0
  97. package/dist/browser/components/resource/record-comment-session.js +64 -0
  98. package/dist/browser/components/resource/record-comment-session.js.map +1 -0
  99. package/dist/browser/components/resource/record-deletion-session.d.ts +19 -0
  100. package/dist/browser/components/resource/record-deletion-session.d.ts.map +1 -0
  101. package/dist/browser/components/resource/record-deletion-session.js +64 -0
  102. package/dist/browser/components/resource/record-deletion-session.js.map +1 -0
  103. package/dist/browser/components/resource/record-print-session.d.ts +12 -0
  104. package/dist/browser/components/resource/record-print-session.d.ts.map +1 -0
  105. package/dist/browser/components/resource/record-print-session.js +32 -0
  106. package/dist/browser/components/resource/record-print-session.js.map +1 -0
  107. package/dist/browser/components/resource/resource-field-selection.d.ts +2 -0
  108. package/dist/browser/components/resource/resource-field-selection.d.ts.map +1 -1
  109. package/dist/browser/components/resource/useResourceFormDrafts.d.ts.map +1 -1
  110. package/dist/browser/components/workflow/StandardWorkflowPages.d.ts +28 -5
  111. package/dist/browser/components/workflow/StandardWorkflowPages.d.ts.map +1 -1
  112. package/dist/browser/components/workflow/StandardWorkflowPages.js +143 -51
  113. package/dist/browser/components/workflow/StandardWorkflowPages.js.map +1 -1
  114. package/dist/browser/components/workflow/WorkflowDelegationManager.js +13 -8
  115. package/dist/browser/components/workflow/WorkflowDelegationManager.js.map +1 -1
  116. package/dist/browser/components/workflow/WorkflowDiagram.d.ts.map +1 -1
  117. package/dist/browser/components/workflow/WorkflowDiagram.js +5 -2
  118. package/dist/browser/components/workflow/WorkflowDiagram.js.map +1 -1
  119. package/dist/browser/components/workflow/WorkflowFlowCanvas.d.ts.map +1 -1
  120. package/dist/browser/components/workflow/WorkflowFlowCanvas.js +2 -1
  121. package/dist/browser/components/workflow/WorkflowFlowCanvas.js.map +1 -1
  122. package/dist/browser/components/workflow/WorkflowNodeCard.d.ts +1 -1
  123. package/dist/browser/components/workflow/WorkflowNodeCard.d.ts.map +1 -1
  124. package/dist/browser/components/workflow/WorkflowNodeCard.js +7 -5
  125. package/dist/browser/components/workflow/WorkflowNodeCard.js.map +1 -1
  126. package/dist/browser/components/workflow/WorkflowNodeConfigurationEditor.d.ts.map +1 -1
  127. package/dist/browser/components/workflow/WorkflowNodeConfigurationEditor.js +14 -11
  128. package/dist/browser/components/workflow/WorkflowNodeConfigurationEditor.js.map +1 -1
  129. package/dist/browser/components/workflow/WorkflowRecordEditor.js +1 -1
  130. package/dist/browser/components/workflow/WorkflowRecordEditor.js.map +1 -1
  131. package/dist/browser/components/workflow/WorkflowRecordHistoryPanel.d.ts +9 -0
  132. package/dist/browser/components/workflow/WorkflowRecordHistoryPanel.d.ts.map +1 -0
  133. package/dist/browser/components/workflow/WorkflowRecordHistoryPanel.js +50 -0
  134. package/dist/browser/components/workflow/WorkflowRecordHistoryPanel.js.map +1 -0
  135. package/dist/browser/components/workflow/WorkflowTaskForm.d.ts +4 -1
  136. package/dist/browser/components/workflow/WorkflowTaskForm.d.ts.map +1 -1
  137. package/dist/browser/components/workflow/WorkflowTaskForm.js +34 -10
  138. package/dist/browser/components/workflow/WorkflowTaskForm.js.map +1 -1
  139. package/dist/browser/components/workflow/standard-process-values.d.ts +10 -2
  140. package/dist/browser/components/workflow/standard-process-values.d.ts.map +1 -1
  141. package/dist/browser/components/workflow/standard-process-values.js +22 -1
  142. package/dist/browser/components/workflow/standard-process-values.js.map +1 -1
  143. package/dist/browser/components/workflow/workflow-flow-layout.d.ts.map +1 -1
  144. package/dist/browser/components/workflow/workflow-flow-layout.js +33 -3
  145. package/dist/browser/components/workflow/workflow-flow-layout.js.map +1 -1
  146. package/dist/browser/components/workflow/workflow-submission-form.d.ts +22 -0
  147. package/dist/browser/components/workflow/workflow-submission-form.d.ts.map +1 -0
  148. package/dist/browser/components/workflow/workflow-submission-form.js +64 -0
  149. package/dist/browser/components/workflow/workflow-submission-form.js.map +1 -0
  150. package/dist/browser/components/workflow/workflow-task-required-errors.d.ts +10 -0
  151. package/dist/browser/components/workflow/workflow-task-required-errors.d.ts.map +1 -0
  152. package/dist/browser/components/workflow/workflow-task-required-errors.js +28 -0
  153. package/dist/browser/components/workflow/workflow-task-required-errors.js.map +1 -0
  154. package/dist/browser/durable-command.d.ts.map +1 -1
  155. package/dist/browser/durable-command.js +7 -2
  156. package/dist/browser/durable-command.js.map +1 -1
  157. package/dist/browser/managed-read-recovery.d.ts +2 -0
  158. package/dist/browser/managed-read-recovery.d.ts.map +1 -1
  159. package/dist/browser/managed-read-recovery.js +6 -1
  160. package/dist/browser/managed-read-recovery.js.map +1 -1
  161. package/dist/browser/platform-client.d.ts +37 -1
  162. package/dist/browser/platform-client.d.ts.map +1 -1
  163. package/dist/browser/platform-client.js +199 -6
  164. package/dist/browser/platform-client.js.map +1 -1
  165. package/dist/browser/record-comments.css +14 -0
  166. package/dist/browser/record-deletion.css +11 -0
  167. package/dist/browser/record-print.css +31 -0
  168. package/dist/browser/runtime-authorization-recovery.d.ts.map +1 -1
  169. package/dist/browser/runtime-authorization-recovery.js +34 -9
  170. package/dist/browser/runtime-authorization-recovery.js.map +1 -1
  171. package/dist/browser/runtime.d.ts +3 -1
  172. package/dist/browser/runtime.d.ts.map +1 -1
  173. package/dist/browser/runtime.js.map +1 -1
  174. package/dist/browser/styles.css +30 -0
  175. package/dist/browser/workflow-operation-input.d.ts +15 -0
  176. package/dist/browser/workflow-operation-input.d.ts.map +1 -0
  177. package/dist/browser/workflow-operation-input.js +64 -0
  178. package/dist/browser/workflow-operation-input.js.map +1 -0
  179. package/dist/config.d.ts +2 -1
  180. package/dist/config.d.ts.map +1 -1
  181. package/dist/config.js +2 -1
  182. package/dist/config.js.map +1 -1
  183. package/dist/core.d.ts +6 -2
  184. package/dist/core.d.ts.map +1 -1
  185. package/dist/core.js +3 -1
  186. package/dist/core.js.map +1 -1
  187. package/dist/expressions.d.ts +4 -0
  188. package/dist/expressions.d.ts.map +1 -0
  189. package/dist/expressions.js +3 -0
  190. package/dist/expressions.js.map +1 -0
  191. package/dist/field-kit.d.ts +3 -0
  192. package/dist/field-kit.d.ts.map +1 -1
  193. package/dist/field-kit.js +3 -0
  194. package/dist/field-kit.js.map +1 -1
  195. package/dist/nest.d.ts +1 -1
  196. package/dist/nest.d.ts.map +1 -1
  197. package/dist/nest.js.map +1 -1
  198. package/dist/react.d.ts +6 -2
  199. package/dist/react.d.ts.map +1 -1
  200. package/dist/react.js +5 -1
  201. package/dist/react.js.map +1 -1
  202. package/dist/testing.d.ts +1 -1
  203. package/dist/testing.d.ts.map +1 -1
  204. package/dist/testing.js +1 -1
  205. package/dist/testing.js.map +1 -1
  206. package/documentation/administration.md +40 -1
  207. package/documentation/backend.md +189 -3
  208. package/documentation/data-authz.md +72 -2
  209. package/documentation/declarations-cheatsheet.md +11 -1
  210. package/documentation/development.md +7 -0
  211. package/documentation/field-components.md +80 -0
  212. package/documentation/frontend.md +8 -0
  213. package/documentation/getting-started.md +60 -7
  214. package/documentation/managed-concurrency-frontend.md +10 -4
  215. package/documentation/manifest.json +12 -12
  216. package/documentation/testing.md +17 -0
  217. package/documentation/workflow-events.md +403 -9
  218. package/package.json +32 -20
  219. package/releases/2.51.0.json +32 -0
  220. package/releases/2.54.4.json +30 -0
  221. package/releases/2.54.6.json +30 -0
  222. package/releases/2.55.0.json +34 -0
  223. package/releases/2.55.1.json +32 -0
  224. package/releases/2.55.5.json +30 -0
  225. package/releases/2.55.6.json +32 -0
  226. package/releases/2.57.1.json +31 -0
  227. package/releases/2.58.0.json +37 -0
  228. package/releases/2.58.1.json +31 -0
  229. package/releases/2.59.0.json +36 -0
  230. package/releases/2.59.1.json +37 -0
  231. package/skills/manifest.json +1 -1
  232. package/skills/openxiangda-v2/SKILL.md +4 -4
  233. package/skills/openxiangda-v2/references/administration.md +40 -1
  234. package/skills/openxiangda-v2/references/backend.md +189 -3
  235. package/skills/openxiangda-v2/references/data-authz.md +72 -2
  236. package/skills/openxiangda-v2/references/declarations-cheatsheet.md +11 -1
  237. package/skills/openxiangda-v2/references/development.md +7 -0
  238. package/skills/openxiangda-v2/references/field-components.md +80 -0
  239. package/skills/openxiangda-v2/references/frontend.md +8 -0
  240. package/skills/openxiangda-v2/references/getting-started.md +60 -7
  241. package/skills/openxiangda-v2/references/managed-concurrency-frontend.md +10 -4
  242. package/skills/openxiangda-v2/references/testing.md +17 -0
  243. package/skills/openxiangda-v2/references/workflow-events.md +403 -9
  244. package/releases/2.48.1.json +0 -30
  245. package/releases/2.48.2.json +0 -29
@@ -0,0 +1,75 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useId, useLayoutEffect, useRef, useState } from 'react';
3
+ import { Alert, Button, Input, Space } from 'antd';
4
+ import { useRuntime } from '../../runtime';
5
+ import { useUnsavedChangesGuard } from '../../navigation-guard';
6
+ import { createNativeRecordComment, loadNativeRecordCommentReceipt, loadNativeRecordComments, OpenXiangdaPlatformRequestError } from '../../platform-client';
7
+ import { usePresentationTimeZone } from '../../presentation-time';
8
+ import { detailTime } from './RecordDetailFrame';
9
+ import { createRecordCommentSession } from './record-comment-session';
10
+ export function RecordCommentList({ data, timeZone }) {
11
+ return data.items.length ? _jsx("ol", { className: "oxa-record-comments-list", children: data.items.map(comment => _jsxs("li", { children: [_jsxs("div", { children: [_jsx("strong", { children: comment.isOwn ? '我' : comment.authorUserId }), _jsx("time", { dateTime: comment.createdAt, children: detailTime(comment.createdAt, timeZone) })] }), _jsx("p", { children: comment.body })] }, comment.id)) }) : _jsx("p", { className: "oxa-record-comments-empty", children: "\u6682\u65E0\u8BC4\u8BBA" });
12
+ }
13
+ /** The key remount drops late responses and drafts across record or authority changes. */
14
+ export function ResourceRecordComments(props) {
15
+ const { identity, identityEpoch, perspective } = useRuntime();
16
+ const key = JSON.stringify([props.resourceCode, props.recordId, identityEpoch, identity.userId,
17
+ identity.environment.headRevision, identity.environment.authzRevisionId, identity.environment.authzVersion,
18
+ identity.environment.scopeDataVersion, perspective?.code, props.canRead, props.canCreate]);
19
+ return _jsx(RecordCommentsBody, { ...props }, key);
20
+ }
21
+ function RecordCommentsBody({ resourceCode, recordId, canRead = true, canCreate = false }) {
22
+ const inputId = useId();
23
+ const timeZone = usePresentationTimeZone();
24
+ const [draft, setDraft] = useState('');
25
+ const [cursors, setCursors] = useState([undefined]);
26
+ const cursor = cursors[cursors.length - 1];
27
+ const [reload, setReload] = useState(0);
28
+ const [page, setPage] = useState({ key: '' });
29
+ const pageKey = JSON.stringify([cursor, reload]);
30
+ const [mutation, setMutation] = useState({ busy: false });
31
+ const session = useRef(null);
32
+ useUnsavedChangesGuard({ when: Boolean(draft || mutation.pending), preventNavigation: mutation.busy || Boolean(mutation.pending),
33
+ message: mutation.pending ? '评论提交结果尚待确认,请先核对原请求。' : '评论尚未提交,离开后将丢失。' });
34
+ useLayoutEffect(() => {
35
+ const current = createRecordCommentSession(input => createNativeRecordComment(resourceCode, recordId, input), key => loadNativeRecordCommentReceipt(resourceCode, recordId, key), state => {
36
+ setMutation(state);
37
+ if (state.receipt) {
38
+ setDraft('');
39
+ setCursors([undefined]);
40
+ setReload(value => value + 1);
41
+ }
42
+ });
43
+ session.current = current;
44
+ return () => { current.close(); if (session.current === current)
45
+ session.current = null; };
46
+ }, [resourceCode, recordId]);
47
+ useEffect(() => {
48
+ if (!canRead)
49
+ return;
50
+ let active = true;
51
+ setPage({ key: pageKey });
52
+ void loadNativeRecordComments(resourceCode, recordId, { limit: 20, cursor })
53
+ .then(data => { if (active)
54
+ setPage({ key: pageKey, data }); })
55
+ .catch(error => { if (active)
56
+ setPage({ key: pageKey, error }); });
57
+ return () => { active = false; };
58
+ }, [resourceCode, recordId, cursor, pageKey, canRead]);
59
+ useEffect(() => {
60
+ if (!draft && !mutation.pending)
61
+ return;
62
+ const protect = (event) => { event.preventDefault(); event.returnValue = ''; };
63
+ window.addEventListener('beforeunload', protect);
64
+ return () => window.removeEventListener('beforeunload', protect);
65
+ }, [draft, mutation.pending]);
66
+ const data = page.key === pageKey ? page.data : undefined;
67
+ const error = page.key === pageKey ? page.error : undefined;
68
+ const status = error instanceof OpenXiangdaPlatformRequestError ? error.status : 0;
69
+ const errorText = status === 403 ? '当前用户无权查看此申请的评论。' : status === 404
70
+ ? '申请不存在或不在可查看范围内。' : '评论读取失败,请重新读取。';
71
+ return _jsxs("section", { className: "oxa-record-comments", "aria-label": "\u8D44\u6599\u8BC4\u8BBA", children: [canRead && _jsxs("div", { "aria-busy": !data && !error, children: [error ? _jsx(Alert, { type: "error", title: errorText, action: _jsx(Button, { onClick: () => setReload(value => value + 1), children: "\u91CD\u65B0\u8BFB\u53D6" }) })
72
+ : data ? _jsx(RecordCommentList, { data: data, timeZone: timeZone }) : _jsx("p", { role: "status", children: "\u6B63\u5728\u8BFB\u53D6\u8BC4\u8BBA\u2026" }), data && _jsxs("nav", { "aria-label": "\u8BC4\u8BBA\u5206\u9875", children: [_jsx(Button, { disabled: cursors.length === 1, onClick: () => setCursors(value => value.slice(0, -1)), children: "\u4E0A\u4E00\u9875" }), _jsxs("span", { children: ["\u7B2C ", cursors.length, " \u9875"] }), _jsx(Button, { disabled: !data.nextCursor, onClick: () => setCursors(value => [...value, data.nextCursor]), children: "\u4E0B\u4E00\u9875" }), _jsx(Button, { onClick: () => { setCursors([undefined]); setReload(value => value + 1); }, children: "\u5237\u65B0" })] })] }), canCreate && _jsxs("form", { onSubmit: event => { event.preventDefault(); void session.current?.send(draft); }, children: [_jsx("label", { htmlFor: inputId, children: "\u6DFB\u52A0\u8BC4\u8BBA" }), _jsx(Input.TextArea, { id: inputId, value: draft, onChange: event => setDraft(event.target.value), maxLength: 4000, showCount: true, autoSize: { minRows: 3, maxRows: 8 }, disabled: mutation.busy || Boolean(mutation.pending) }), mutation.unknown ? _jsx(Alert, { type: "warning", title: "\u63D0\u4EA4\u7ED3\u679C\u5C1A\u672A\u786E\u8BA4", description: _jsxs(_Fragment, { children: [_jsx("p", { children: "\u5148\u6838\u5BF9\u539F\u8BF7\u6C42\uFF0C\u518D\u7EE7\u7EED\u8BC4\u8BBA\u3002\u79BB\u5F00\u540E\u53EF\u4FDD\u7559\u4E0B\u9762\u7684\u8BF7\u6C42\u7F16\u53F7\u548C\u6B63\u6587\uFF0C\u7528\u4E8E\u6062\u590D\u7ED3\u679C\u3002" }), _jsxs("details", { children: [_jsx("summary", { children: "\u539F\u8BF7\u6C42" }), _jsx("code", { children: mutation.pending?.idempotencyKey }), _jsx("p", { className: "oxa-record-comments-pending", children: mutation.pending?.body })] }), _jsxs(Space, { wrap: true, children: [_jsx(Button, { loading: mutation.busy, disabled: mutation.busy, onClick: () => void session.current?.recover(), children: "\u6838\u5BF9\u63D0\u4EA4\u7ED3\u679C" }), mutation.retryAllowed && _jsx(Button, { disabled: mutation.busy, onClick: () => void session.current?.retry(), children: "\u7528\u539F\u8BF7\u6C42\u91CD\u8BD5" })] })] }) }) : mutation.error ? _jsx(Alert, { type: "error", title: "\u8BC4\u8BBA\u672A\u63D0\u4EA4", description: mutation.error instanceof Error ? mutation.error.message : '请重新读取申请与权限后再试。' })
73
+ : mutation.receipt ? _jsx("p", { role: "status", children: "\u8BC4\u8BBA\u5DF2\u63D0\u4EA4" }) : null, _jsx(Button, { htmlType: "submit", type: "primary", loading: mutation.busy, disabled: !draft.trim() || Boolean(mutation.pending), children: "\u53D1\u8868\u8BC4\u8BBA" })] })] });
74
+ }
75
+ //# sourceMappingURL=ResourceRecordComments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceRecordComments.js","sourceRoot":"","sources":["../../../../src/browser/components/resource/ResourceRecordComments.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare function ResourceRecordDeletion(props: {
2
+ resourceCode: string;
3
+ recordId: string;
4
+ onClose: () => void;
5
+ onDeleted?: () => void;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=ResourceRecordDeletion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceRecordDeletion.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/resource/ResourceRecordDeletion.tsx"],"names":[],"mappings":"AAOA,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,2CAKpI"}
@@ -0,0 +1,53 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useId, useLayoutEffect, useRef, useState } from 'react';
3
+ import { Alert, Button, Input, Modal, Space } from 'antd';
4
+ import { useRuntime } from '../../runtime';
5
+ import { useUnsavedChangesGuard } from '../../navigation-guard';
6
+ import { deleteNativeRecordWithPreview, previewNativeRecordDeletion, recoverNativeRecordDeletion } from '../../platform-client';
7
+ import { createRecordDeletionSession } from './record-deletion-session';
8
+ export function ResourceRecordDeletion(props) {
9
+ const { identity, identityEpoch } = useRuntime();
10
+ const key = JSON.stringify([props.resourceCode, props.recordId, identityEpoch, identity.userId, identity.environment.headRevision,
11
+ identity.environment.authzRevisionId, identity.environment.authzVersion, identity.environment.scopeDataVersion]);
12
+ return _jsx(RecordDeletionBody, { ...props }, key);
13
+ }
14
+ function RecordDeletionBody({ resourceCode, recordId, onClose, onDeleted }) {
15
+ const reasonId = useId();
16
+ const [reason, setReason] = useState('');
17
+ const [state, setState] = useState({ busy: false });
18
+ const session = useRef(null);
19
+ const protectedRequest = state.busy || Boolean(state.pending);
20
+ useUnsavedChangesGuard({ when: !state.receipt?.deleted && Boolean(reason || state.pending), preventNavigation: protectedRequest,
21
+ message: state.pending ? '删除结果尚待确认,请先核对原请求。' : '删除尚未确认,离开后将丢失填写的原因。' });
22
+ useLayoutEffect(() => {
23
+ const current = createRecordDeletionSession(() => previewNativeRecordDeletion(resourceCode, recordId), input => deleteNativeRecordWithPreview(resourceCode, recordId, input), input => recoverNativeRecordDeletion(resourceCode, recordId, input), setState);
24
+ session.current = current;
25
+ return () => { current.close(); if (session.current === current)
26
+ session.current = null; };
27
+ }, [resourceCode, recordId]);
28
+ const preview = state.preview;
29
+ const [now, setNow] = useState(Date.now);
30
+ useEffect(() => {
31
+ setNow(Date.now());
32
+ if (!preview?.expiresAt)
33
+ return;
34
+ const remaining = Date.parse(preview.expiresAt) - Date.now();
35
+ if (!Number.isFinite(remaining) || remaining <= 0)
36
+ return;
37
+ const timeout = setTimeout(() => setNow(Date.now()), remaining + 1);
38
+ return () => clearTimeout(timeout);
39
+ }, [preview]);
40
+ const expired = Boolean(preview?.expiresAt && Date.parse(preview.expiresAt) <= now);
41
+ const blocked = preview?.blocker === 'pending_launch' ? '申请的流程正在启动或等待恢复,请先完成处理。'
42
+ : preview?.blocker === 'multiple_workflows' ? '此申请关联多个流程,请由流程管理员核对后处理。'
43
+ : '申请明细关联其他流程,请先核对这些流程。';
44
+ const done = state.receipt?.deleted;
45
+ const finish = () => { onClose(); onDeleted?.(); };
46
+ return _jsx(Modal, { open: true, title: done ? '资料已删除' : '删除资料', width: "min(560px, calc(100vw - 32px))", rootClassName: "oxa-record-deletion-modal", mask: { closable: !protectedRequest }, keyboard: !protectedRequest, closable: !protectedRequest, onCancel: done ? finish : onClose, footer: done
47
+ ? _jsx(Button, { type: "primary", onClick: finish, children: "\u8FD4\u56DE\u5217\u8868" })
48
+ : _jsxs(Space, { wrap: true, children: [_jsx(Button, { disabled: protectedRequest, onClick: onClose, children: "\u53D6\u6D88" }), !state.pending && _jsx(Button, { disabled: !reason.trim() || state.busy, loading: state.busy, onClick: () => void session.current?.preview(), children: "\u9884\u89C8\u5220\u9664\u5F71\u54CD" }), preview?.canCommit && !state.pending && _jsx(Button, { danger: true, type: "primary", disabled: state.busy || !reason.trim() || expired, onClick: () => void session.current?.confirm(reason), children: "\u786E\u8BA4\u5220\u9664" })] }), children: done ? _jsx(Alert, { type: "success", title: "\u7533\u8BF7\u4E0E\u5173\u8054\u660E\u7EC6\u5DF2\u5220\u9664", description: "\u5982\u6709\u5173\u8054\u6D41\u7A0B\uFF0C\u5176\u5F85\u529E\u5DF2\u505C\u6B62\uFF0C\u6D41\u7A0B\u5165\u53E3\u5DF2\u5173\u95ED\u3002" }) : _jsxs(_Fragment, { children: [_jsx("p", { children: "\u5220\u9664\u540E\u5C06\u65E0\u6CD5\u901A\u8FC7\u7533\u8BF7\u548C\u6D41\u7A0B\u5165\u53E3\u67E5\u770B\u8FD9\u4E9B\u8D44\u6599\u3002\u8BF7\u5148\u586B\u5199\u539F\u56E0\u5E76\u6838\u5BF9\u5F71\u54CD\u3002" }), _jsx("label", { htmlFor: reasonId, children: "\u5220\u9664\u539F\u56E0" }), _jsx(Input.TextArea, { id: reasonId, value: reason, onChange: event => setReason(event.target.value), maxLength: 1000, showCount: true, autoSize: { minRows: 3, maxRows: 6 }, disabled: protectedRequest }), preview && _jsxs("section", { className: "oxa-record-deletion-impact", "aria-label": "\u5220\u9664\u5F71\u54CD", children: [_jsxs("p", { children: [preview.canCommit ? '将删除' : '涉及', " ", _jsx("strong", { children: preview.resourceName }), " \u7684\u8FD9\u6761\u8D44\u6599\u53CA\u5173\u8054\u660E\u7EC6\uFF0C\u5171 ", _jsx("strong", { children: preview.affectedRecords }), " \u6761\u3002"] }), preview.workflowCount > 0 && _jsxs("p", { children: ["\u6D89\u53CA ", _jsx("strong", { children: preview.workflowCount }), " \u4E2A\u6D41\u7A0B", preview.canCommit
49
+ ? _jsxs(_Fragment, { children: ["\uFF0C\u5C06\u505C\u6B62 ", _jsx("strong", { children: preview.cancelledTaskCount }), " \u4E2A\u5F85\u529E\uFF0C\u529E\u7406\u5386\u53F2\u5165\u53E3\u4E5F\u4F1A\u5173\u95ED\u3002"] })
50
+ : ',请先核对流程关联。'] }), !preview.canCommit && _jsx(Alert, { type: "warning", title: "\u5F53\u524D\u65E0\u6CD5\u5220\u9664", description: blocked }), preview.canCommit && expired && _jsx(Alert, { type: "warning", title: "\u9884\u89C8\u5DF2\u5230\u671F\uFF0C\u8BF7\u91CD\u65B0\u9884\u89C8" })] }), state.unknown ? _jsx(Alert, { type: "warning", title: "\u5220\u9664\u7ED3\u679C\u5C1A\u5F85\u786E\u8BA4", description: _jsxs(_Fragment, { children: [_jsxs("p", { children: ["\u8BF7\u5148\u6838\u5BF9\u539F\u8BF7\u6C42\uFF0C\u907F\u514D\u91CD\u590D\u64CD\u4F5C\u3002\u8BF7\u6C42\u7F16\u53F7\uFF1A", _jsx("code", { children: state.pending?.idempotencyKey })] }), _jsxs(Space, { wrap: true, children: [_jsx(Button, { loading: state.busy, disabled: state.busy, onClick: () => void session.current?.recover(), children: "\u6838\u5BF9\u5220\u9664\u7ED3\u679C" }), state.retryAllowed && _jsx(Button, { disabled: state.busy || expired, onClick: () => void session.current?.retry(), children: "\u7528\u539F\u8BF7\u6C42\u91CD\u8BD5" })] })] }) }) : state.error || state.receipt && !state.receipt.deleted
51
+ ? _jsx(Alert, { type: "error", title: "\u8D44\u6599\u672A\u5220\u9664\uFF0C\u8BF7\u91CD\u65B0\u6838\u5BF9", description: "\u6743\u9650\u3001\u8D44\u6599\u6216\u6D41\u7A0B\u53EF\u80FD\u5DF2\u53D8\u5316\u3002\u91CD\u65B0\u9884\u89C8\u540E\u518D\u8FDB\u884C\u5220\u9664\u3002" }) : null] }) });
52
+ }
53
+ //# sourceMappingURL=ResourceRecordDeletion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceRecordDeletion.js","sourceRoot":"","sources":["../../../../src/browser/components/resource/ResourceRecordDeletion.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { DataRecordPrint } from 'openxiangda-contracts/browser';
2
+ type PrintField = DataRecordPrint['fields'][number];
3
+ /** Print plain data. Files stay names, and rich text never becomes executable markup. */
4
+ export declare function recordPrintFieldText(field: PrintField, value: unknown, timeZone?: string): string;
5
+ export declare function ResourceRecordPrintDocument({ snapshot, timeZone }: {
6
+ snapshot: DataRecordPrint;
7
+ timeZone?: string;
8
+ }): import("react/jsx-runtime").JSX.Element;
9
+ export declare function ResourceRecordPrintPreview({ resourceCode, recordId, viewCode, onClose }: {
10
+ resourceCode: string;
11
+ recordId: string;
12
+ viewCode?: string;
13
+ onClose: () => void;
14
+ }): import("react/jsx-runtime").JSX.Element | null;
15
+ export {};
16
+ //# sourceMappingURL=ResourceRecordPrintPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceRecordPrintPreview.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/resource/ResourceRecordPrintPreview.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAOrE,KAAK,UAAU,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD,yFAAyF;AACzF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CA+BjG;AAED,wBAAgB,2BAA2B,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,eAAe,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,2CAUnH;AAED,wBAAgB,0BAA0B,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;IACxF,YAAY,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAC;CAChF,kDA4CA"}
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Alert, Button, Modal, Spin } from 'antd';
3
+ import { useEffect, useLayoutEffect, useRef, useState } from 'react';
4
+ import { loadNativeRecordPrint, OpenXiangdaPlatformRequestError } from '../../platform-client';
5
+ import { useRuntime } from '../../runtime';
6
+ import { usePresentationTimeZone } from '../../presentation-time';
7
+ import { detailTime } from './RecordDetailFrame';
8
+ import { createRecordPrintSession } from './record-print-session';
9
+ /** Print plain data. Files stay names, and rich text never becomes executable markup. */
10
+ export function recordPrintFieldText(field, value, timeZone) {
11
+ if (value == null || value === '' || (Array.isArray(value) && !value.length))
12
+ return '—';
13
+ if (Array.isArray(value))
14
+ return value.map(item => recordPrintFieldText(field, item, timeZone)).join('、');
15
+ if (field.type === 'boolean')
16
+ return value === true ? '是' : value === false ? '否' : String(value);
17
+ if (field.type === 'datetime')
18
+ return detailTime(value, timeZone) || String(value);
19
+ if (field.type === 'text.rich' && typeof value === 'string' && typeof DOMParser !== 'undefined') {
20
+ const document = new DOMParser().parseFromString(value, 'text/html');
21
+ document.querySelectorAll('script,style,template').forEach(node => node.remove());
22
+ document.querySelectorAll('br').forEach(node => node.replaceWith('\n'));
23
+ document.querySelectorAll('p,div,li,h1,h2,h3,blockquote').forEach(node => node.append('\n'));
24
+ return document.body.textContent?.trim() || '—';
25
+ }
26
+ if (typeof value === 'object') {
27
+ const item = value;
28
+ if (field.type === 'option.single' || field.type === 'option.multiple')
29
+ return field.options?.find(option => option.value === item.value)?.label || String(item.label || item.value || '—');
30
+ if (field.type === 'file' || field.type === 'image') {
31
+ const bytes = typeof item.size === 'number' ? item.size : typeof item.fileSize === 'number' ? item.fileSize : null;
32
+ return `${String(item.name || item.fileName || '附件')}${bytes != null ? `(${bytes} 字节)` : ''}`;
33
+ }
34
+ if (field.type === 'signature')
35
+ return `签名记录${item.signedAt ? ` · ${detailTime(item.signedAt, timeZone)}` : ''}`;
36
+ if (field.type === 'date-range' || field.type === 'datetime-range')
37
+ return [item.start, item.end].map(value => field.type === 'datetime-range' ? detailTime(value, timeZone) : String(value || '')).join(' 至 ');
38
+ if (field.type === 'address')
39
+ return String(item.fullAddress || [item.country, item.province, item.city, item.district, item.street, item.detail]
40
+ .map(part => part && typeof part === 'object' ? part.label || '' : part || '').join(''));
41
+ if (field.type === 'location')
42
+ return String(item.name || item.address || `${item.longitude}, ${item.latitude}`);
43
+ if ('label' in item || 'displayName' in item)
44
+ return String(item.label || item.displayName || item.value || '—');
45
+ return JSON.stringify(value);
46
+ }
47
+ const option = field.options?.find(item => String(item.value) === String(value));
48
+ return option?.label || String(value);
49
+ }
50
+ export function ResourceRecordPrintDocument({ snapshot, timeZone }) {
51
+ const groups = new Map();
52
+ snapshot.fields.forEach(field => { const title = field.section || '基本信息'; groups.set(title, [...(groups.get(title) || []), field]); });
53
+ return _jsxs("article", { className: "oxa-record-print-document", "aria-label": `${snapshot.resourceName}打印资料`, children: [_jsxs("header", { children: [_jsx("h1", { children: snapshot.viewName || snapshot.resourceName }), _jsxs("p", { children: ["\u8D44\u6599\u8BFB\u53D6\u4E8E ", detailTime(snapshot.preparedAt, timeZone)] })] }), [...groups].map(([title, fields]) => _jsxs("section", { children: [_jsx("h2", { children: title }), _jsx("dl", { children: fields.map(field => _jsxs("div", { className: ['text.long', 'text.rich', 'file', 'image', 'json.object', 'json.array'].includes(field.type) ? 'is-wide' : undefined, children: [_jsx("dt", { children: field.label }), _jsx("dd", { children: recordPrintFieldText(field, snapshot.data[field.code], timeZone) })] }, field.code)) })] }, title))] });
54
+ }
55
+ export function ResourceRecordPrintPreview({ resourceCode, recordId, viewCode, onClose }) {
56
+ const { identity, identityEpoch, perspective } = useRuntime();
57
+ const timeZone = usePresentationTimeZone();
58
+ const key = JSON.stringify([resourceCode, recordId, viewCode, identityEpoch, identity.userId,
59
+ identity.environment.headRevision, identity.environment.authzRevisionId, identity.environment.authzVersion, identity.environment.scopeDataVersion, perspective?.code]);
60
+ const [state, setState] = useState({ busy: true, key: '' });
61
+ const [host, setHost] = useState();
62
+ useEffect(() => {
63
+ const element = document.createElement('div');
64
+ element.className = 'oxa-record-print-host';
65
+ document.body.append(element);
66
+ setHost(element);
67
+ return () => { element.remove(); };
68
+ }, []);
69
+ const session = useRef(undefined);
70
+ useLayoutEffect(() => {
71
+ const current = createRecordPrintSession(() => loadNativeRecordPrint(resourceCode, recordId, { viewCode }), next => setState({ ...next, key }), () => new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(() => resolve()))), () => window.print());
72
+ session.current = current;
73
+ void current.read();
74
+ return () => { current.close(); if (session.current === current)
75
+ session.current = undefined; };
76
+ }, [key, resourceCode, recordId, viewCode]);
77
+ const close = () => { session.current?.close(); onClose(); };
78
+ const data = state.key === key ? state.data : undefined;
79
+ const error = state.key === key ? state.error : undefined;
80
+ const busy = state.key !== key || state.busy;
81
+ const status = error instanceof OpenXiangdaPlatformRequestError ? error.status : 0;
82
+ const errorMessage = status === 403 ? '当前用户无权打印此资料。'
83
+ : status === 404 ? '资料不存在或已无法访问。'
84
+ : status === 409 ? '此详情包含暂不支持打印的内容,请联系应用管理员。'
85
+ : status === 413 ? '资料超过本页打印容量,请联系应用管理员。'
86
+ : '打印资料读取失败,请重试。';
87
+ if (!host)
88
+ return null;
89
+ return _jsx(Modal, { open: true, title: "\u6253\u5370\u9884\u89C8", getContainer: host, width: "min(900px, calc(100vw - 24px))", onCancel: close, footer: _jsxs(_Fragment, { children: [_jsx(Button, { disabled: busy, onClick: () => void session.current?.read(), children: "\u91CD\u65B0\u8BFB\u53D6" }), _jsx(Button, { onClick: close, children: "\u5173\u95ED" }), _jsx(Button, { type: "primary", disabled: !data || busy, loading: busy && Boolean(data), onClick: () => void session.current?.read(true), children: "\u6253\u5370" })] }), children: _jsx("div", { className: "oxa-record-print", "aria-busy": busy, children: error ? _jsx(Alert, { type: "error", showIcon: true, title: errorMessage, action: _jsx(Button, { onClick: () => void session.current?.read(), children: "\u91CD\u8BD5" }) })
90
+ : data ? _jsx(ResourceRecordPrintDocument, { snapshot: data, timeZone: timeZone }) : _jsxs("div", { className: "oxa-record-print-loading", children: [_jsx(Spin, {}), _jsx("p", { children: "\u6B63\u5728\u8BFB\u53D6\u53EF\u6253\u5370\u8D44\u6599\u2026" })] }) }) });
91
+ }
92
+ //# sourceMappingURL=ResourceRecordPrintPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ResourceRecordPrintPreview.js","sourceRoot":"","sources":["../../../../src/browser/components/resource/ResourceRecordPrintPreview.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import type { DataAuditEntry, DataEventFieldChange, DataFieldSurface, DataFieldSourceLaunchBinding, DataFileRef, EventValueDigest, UserReferenceValue } from 'openxiangda-contracts/browser';
1
+ import type { DataAuditEntry, DataEventFieldChange, DataFieldSurface, DataFieldSourceLaunchBinding, DataRecordEditInput, DataFileRef, EventValueDigest, UserReferenceValue, WorkflowTaskSourceBinding } from 'openxiangda-contracts/browser';
2
2
  import { type ReactNode } from 'react';
3
+ import { type WorkflowCandidateBinding } from '../platform-fields/user-candidate-context';
3
4
  import type { WorkflowFileBinding } from '../../platform-client';
4
5
  export type SurfaceField = DataFieldSurface & {
5
6
  key: string;
@@ -34,6 +35,7 @@ export declare function listSurfaceFields(fields: Record<string, DataFieldSurfac
34
35
  searchable?: boolean;
35
36
  sortable?: boolean;
36
37
  source?: import("openxiangda-contracts").DataFieldResourceSource;
38
+ userCandidates?: import("openxiangda-contracts").DataFieldUserCandidates;
37
39
  timePrecision?: "minute" | "second";
38
40
  serial?: {
39
41
  prefix?: string;
@@ -44,6 +46,7 @@ export declare function listSurfaceFields(fields: Record<string, DataFieldSurfac
44
46
  resourceCode: string;
45
47
  foreignKey: string;
46
48
  orderField: string;
49
+ minRows?: number;
47
50
  maxRows?: number;
48
51
  };
49
52
  key: string;
@@ -54,6 +57,8 @@ export interface SurfaceFieldEditContext {
54
57
  operation: 'create' | 'update';
55
58
  resourceCode?: string;
56
59
  recordId?: string;
60
+ expectedRevision?: number;
61
+ workflowCandidateBinding?: WorkflowCandidateBinding;
57
62
  workflowFileBinding?: WorkflowFileBinding;
58
63
  }
59
64
  export interface SurfaceFieldValueContext {
@@ -66,6 +71,10 @@ export interface SurfaceFieldValueContext {
66
71
  }
67
72
  export interface SurfaceFieldRenderers {
68
73
  referenceLaunch?: DataFieldSourceLaunchBinding;
74
+ referenceTask?: WorkflowTaskSourceBinding;
75
+ /** Search intent only; never part of a Native write or workflow payload. */
76
+ candidateScopeValues?: Readonly<Record<string, unknown>>;
77
+ recordEditInput?: DataRecordEditInput;
69
78
  renderExtra?: (context: SurfaceFieldEditContext) => ReactNode;
70
79
  renderScope?: (context: SurfaceFieldEditContext) => ReactNode;
71
80
  renderSubtable?: (context: SurfaceFieldEditContext) => ReactNode;
@@ -85,11 +94,11 @@ export declare function SurfaceFilterControl({ field, resourceCode, value, onCha
85
94
  range?: boolean;
86
95
  renderers?: Pick<SurfaceFieldRenderers, 'renderScope' | 'renderFilter'>;
87
96
  }): string | number | bigint | boolean | Iterable<ReactNode> | Promise<string | number | bigint | boolean | import("react").ReactPortal | import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>> | Iterable<ReactNode> | null | undefined> | import("react/jsx-runtime").JSX.Element | null;
88
- export declare function SurfaceFieldControl({ field, disabled, operation, resourceCode, recordId, workflowFileBinding, renderers, }: SurfaceFieldEditContext & {
97
+ export declare function SurfaceFieldControl({ field, disabled, operation, resourceCode, recordId, expectedRevision, workflowCandidateBinding, workflowFileBinding, renderers, }: SurfaceFieldEditContext & {
89
98
  renderers?: SurfaceFieldRenderers;
90
99
  }): import("react/jsx-runtime").JSX.Element;
91
100
  /** Mobile controls share canonical values and the form controller with desktop. */
92
- export declare function MobileSurfaceFieldControl({ field, disabled, operation, resourceCode, recordId, workflowFileBinding, renderers, }: SurfaceFieldEditContext & {
101
+ export declare function MobileSurfaceFieldControl({ field, disabled, operation, resourceCode, recordId, expectedRevision, workflowCandidateBinding, workflowFileBinding, renderers, }: SurfaceFieldEditContext & {
93
102
  renderers?: SurfaceFieldRenderers;
94
103
  }): import("react/jsx-runtime").JSX.Element;
95
104
  export declare function SurfaceFieldValue({ field, value, resourceCode, workflowFileBinding, presentation, mobile, renderers, }: SurfaceFieldValueContext & {
@@ -1 +1 @@
1
- {"version":3,"file":"SurfaceFields.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/resource/SurfaceFields.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SurfaceFields.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/resource/SurfaceFields.tsx"],"names":[],"mappings":"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"}
@@ -15,6 +15,8 @@ import { MobileFieldFrame } from '../platform-fields/MobileFieldFrame';
15
15
  import { JsonField, JsonValueDisplay } from '../platform-fields/JsonField';
16
16
  import { LocationField, LocationValueDisplay } from '../platform-fields/LocationField';
17
17
  import { PlatformDirectoryPicker } from '../platform-fields/PlatformDirectoryPicker';
18
+ import { ConstrainedUserField } from '../platform-fields/ConstrainedUserField';
19
+ import { userCandidateFieldContext } from '../platform-fields/user-candidate-context';
18
20
  import { ResourceReferenceField } from '../platform-fields/ResourceReferenceField';
19
21
  import { RichTextField, RichTextValueDisplay } from '../platform-fields/RichTextField';
20
22
  import { SignatureField, SignatureValueDisplay } from '../platform-fields/SignatureField';
@@ -61,6 +63,14 @@ export function listSurfaceFields(fields) {
61
63
  .filter(([, field]) => field.list && !(field.hidden ?? field.system ?? false))
62
64
  .map(([key, field]) => ({ key, ...field }));
63
65
  }
66
+ function CandidateFieldControl({ field, mobile, disabled, operation, resourceCode, recordId, expectedRevision, workflowCandidateBinding, renderers, value, onChange, id }) {
67
+ const result = userCandidateFieldContext({ resourceCode, fieldCode: field.key, operation, recordId,
68
+ expectedRevision, workflowCandidateBinding, launch: renderers?.referenceLaunch, action: renderers?.recordEditInput,
69
+ requiresSavedScope: Boolean(field.userCandidates?.scope?.field),
70
+ prospectiveScope: field.userCandidates?.scope?.creation === 'prospective',
71
+ scopeValue: field.userCandidates?.scope?.field ? renderers?.candidateScopeValues?.[field.userCandidates.scope.field] : undefined });
72
+ return _jsx(ConstrainedUserField, { mobile: mobile, disabled: disabled, multiple: field.type.endsWith('.multiple'), placeholder: `选择${field.label}`, context: result.context, unavailableReason: result.error, value: value, onChange: onChange, id: id });
73
+ }
64
74
  function numberInputProps(field) {
65
75
  const scale = field.type === 'number.integer' ? 0 : field.scale;
66
76
  return {
@@ -140,7 +150,10 @@ function DesktopBooleanField({ field, disabled, checked, id, onChange }) {
140
150
  const radioName = useId();
141
151
  return _jsxs(Space, { children: [_jsx(Radio.Group, { id: id, name: radioName, "aria-label": field.label, disabled: disabled, value: typeof checked === 'boolean' ? checked : undefined, options: [{ label: '是', value: true }, { label: '否', value: false }], onChange: event => onChange?.(event.target.value) }), typeof checked !== 'boolean' && _jsx(Typography.Text, { type: "secondary", children: "\u672A\u9009\u62E9" })] });
142
152
  }
143
- export function SurfaceFieldControl({ field, disabled, operation, resourceCode, recordId, workflowFileBinding, renderers, }) {
153
+ export function SurfaceFieldControl({ field, disabled, operation, resourceCode, recordId, expectedRevision, workflowCandidateBinding, workflowFileBinding, renderers, }) {
154
+ const taskSourceBinding = renderers?.referenceTask || (workflowCandidateBinding?.taskId && expectedRevision && workflowCandidateBinding.expectedTaskVersion
155
+ ? { taskId: workflowCandidateBinding.taskId, expectedRevision, expectedTaskVersion: workflowCandidateBinding.expectedTaskVersion }
156
+ : undefined);
144
157
  const subtableValidation = useMobileSubtableValidation();
145
158
  const rules = [...surfaceFieldValidationRules(field, false, disabled),
146
159
  ...(field.widget === 'subtable' && !disabled ? [{ validator: subtableValidation.validator }] : [])];
@@ -176,7 +189,7 @@ export function SurfaceFieldControl({ field, disabled, operation, resourceCode,
176
189
  case 'multi-select':
177
190
  case 'radio':
178
191
  case 'checkbox':
179
- control = field.source ? (_jsx(ResourceReferenceField, { disabled: disabled, field: field, fieldCode: field.key, operation: operation, launch: renderers?.referenceLaunch, resourceCode: resourceCode })) : (_jsx(StaticOptionField, { disabled: disabled, field: field }));
192
+ control = field.source ? (_jsx(ResourceReferenceField, { disabled: disabled, field: field, fieldCode: field.key, operation: taskSourceBinding ? 'update' : operation, launch: renderers?.referenceLaunch, action: renderers?.recordEditInput, task: taskSourceBinding, resourceCode: resourceCode })) : (_jsx(StaticOptionField, { disabled: disabled, field: field }));
180
193
  break;
181
194
  case 'email':
182
195
  control = _jsx(Input, { ...common, type: "email" });
@@ -189,10 +202,10 @@ export function SurfaceFieldControl({ field, disabled, operation, resourceCode,
189
202
  break;
190
203
  case 'directory-user':
191
204
  case 'directory-department':
192
- control = (_jsx(PlatformDirectoryPicker, { disabled: disabled, kind: field.widget === 'directory-user' ? 'user' : 'department', multiple: field.type.endsWith('.multiple'), placeholder: `搜索并选择${field.label}` }));
205
+ control = field.userCandidates ? (_jsx(CandidateFieldControl, { field: field, disabled: disabled, operation: operation, resourceCode: resourceCode, recordId: recordId, expectedRevision: expectedRevision, workflowCandidateBinding: workflowCandidateBinding, renderers: renderers })) : (_jsx(PlatformDirectoryPicker, { disabled: disabled, kind: field.widget === 'directory-user' ? 'user' : 'department', multiple: field.type.endsWith('.multiple'), placeholder: `搜索并选择${field.label}` }));
193
206
  break;
194
207
  case 'resource':
195
- control = (_jsx(ResourceReferenceField, { disabled: disabled, field: field, fieldCode: field.key, operation: operation, launch: renderers?.referenceLaunch, resourceCode: resourceCode }));
208
+ control = (_jsx(ResourceReferenceField, { disabled: disabled, field: field, fieldCode: field.key, operation: taskSourceBinding ? 'update' : operation, launch: renderers?.referenceLaunch, action: renderers?.recordEditInput, task: taskSourceBinding, resourceCode: resourceCode }));
196
209
  break;
197
210
  case 'cascade':
198
211
  control = _jsx(CascadeField, { disabled: disabled, field: field });
@@ -249,7 +262,10 @@ export function SurfaceFieldControl({ field, disabled, operation, resourceCode,
249
262
  return field.widget === 'subtable' ? _jsx(MobileSubtableValidationContext.Provider, { value: subtableValidation.register, children: frame }) : frame;
250
263
  }
251
264
  /** Mobile controls share canonical values and the form controller with desktop. */
252
- export function MobileSurfaceFieldControl({ field, disabled, operation, resourceCode, recordId, workflowFileBinding, renderers, }) {
265
+ export function MobileSurfaceFieldControl({ field, disabled, operation, resourceCode, recordId, expectedRevision, workflowCandidateBinding, workflowFileBinding, renderers, }) {
266
+ const taskSourceBinding = renderers?.referenceTask || (workflowCandidateBinding?.taskId && expectedRevision && workflowCandidateBinding.expectedTaskVersion
267
+ ? { taskId: workflowCandidateBinding.taskId, expectedRevision, expectedTaskVersion: workflowCandidateBinding.expectedTaskVersion }
268
+ : undefined);
253
269
  const subtableValidation = useMobileSubtableValidation();
254
270
  const rules = [...surfaceFieldValidationRules(field, true, disabled),
255
271
  ...(field.widget === 'subtable' && !disabled ? [{ validator: subtableValidation.validator }] : [])];
@@ -280,7 +296,7 @@ export function MobileSurfaceFieldControl({ field, disabled, operation, resource
280
296
  case 'multi-select':
281
297
  case 'radio':
282
298
  case 'checkbox':
283
- control = field.source ? (_jsx(ResourceReferenceField, { disabled: disabled, field: field, fieldCode: field.key, mobile: true, operation: operation, launch: renderers?.referenceLaunch, resourceCode: resourceCode })) : (_jsx(MobileOptionField, { disabled: disabled, field: field }));
299
+ control = field.source ? (_jsx(ResourceReferenceField, { disabled: disabled, field: field, fieldCode: field.key, mobile: true, operation: taskSourceBinding ? 'update' : operation, launch: renderers?.referenceLaunch, action: renderers?.recordEditInput, task: taskSourceBinding, resourceCode: resourceCode })) : (_jsx(MobileOptionField, { disabled: disabled, field: field }));
284
300
  break;
285
301
  case 'email':
286
302
  control = _jsx(MobileTextField, { disabled: disabled, field: field });
@@ -293,10 +309,10 @@ export function MobileSurfaceFieldControl({ field, disabled, operation, resource
293
309
  break;
294
310
  case 'directory-user':
295
311
  case 'directory-department':
296
- control = (_jsx(PlatformDirectoryPicker, { mobile: true, disabled: disabled, kind: field.widget === 'directory-user' ? 'user' : 'department', multiple: field.type.endsWith('.multiple'), placeholder: `搜索并选择${field.label}` }));
312
+ control = field.userCandidates ? (_jsx(CandidateFieldControl, { mobile: true, field: field, disabled: disabled, operation: operation, resourceCode: resourceCode, recordId: recordId, expectedRevision: expectedRevision, workflowCandidateBinding: workflowCandidateBinding, renderers: renderers })) : (_jsx(PlatformDirectoryPicker, { mobile: true, disabled: disabled, kind: field.widget === 'directory-user' ? 'user' : 'department', multiple: field.type.endsWith('.multiple'), placeholder: `搜索并选择${field.label}` }));
297
313
  break;
298
314
  case 'resource':
299
- control = (_jsx(ResourceReferenceField, { disabled: disabled, field: field, fieldCode: field.key, mobile: true, operation: operation, launch: renderers?.referenceLaunch, resourceCode: resourceCode }));
315
+ control = (_jsx(ResourceReferenceField, { disabled: disabled, field: field, fieldCode: field.key, mobile: true, operation: taskSourceBinding ? 'update' : operation, launch: renderers?.referenceLaunch, action: renderers?.recordEditInput, task: taskSourceBinding, resourceCode: resourceCode }));
300
316
  break;
301
317
  case 'cascade':
302
318
  control = _jsx(CascadeField, { disabled: disabled, field: field, mobile: true });