openxiangda 2.44.0 → 2.48.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/components/platform-fields/JsonField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/JsonField.js +6 -1
- package/dist/browser/components/platform-fields/JsonField.js.map +1 -1
- package/dist/browser/components/platform-fields/MobileManagedFileField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/MobileManagedFileField.js +6 -1
- package/dist/browser/components/platform-fields/MobileManagedFileField.js.map +1 -1
- package/dist/browser/components/platform-fields/MobileSubtableValidation.d.ts +2 -1
- package/dist/browser/components/platform-fields/MobileSubtableValidation.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/MobileSubtableValidation.js +3 -1
- package/dist/browser/components/platform-fields/MobileSubtableValidation.js.map +1 -1
- package/dist/browser/components/platform-fields/RichTextField.d.ts +3 -2
- package/dist/browser/components/platform-fields/RichTextField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/RichTextField.js +96 -44
- package/dist/browser/components/platform-fields/RichTextField.js.map +1 -1
- package/dist/browser/components/platform-fields/SignatureField.d.ts +5 -4
- package/dist/browser/components/platform-fields/SignatureField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/SignatureField.js +69 -16
- package/dist/browser/components/platform-fields/SignatureField.js.map +1 -1
- package/dist/browser/components/platform-fields/SubtableField.d.ts +18 -2
- package/dist/browser/components/platform-fields/SubtableField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/SubtableField.js +146 -57
- package/dist/browser/components/platform-fields/SubtableField.js.map +1 -1
- package/dist/browser/components/platform-fields/subtable-pagination.d.ts +20 -0
- package/dist/browser/components/platform-fields/subtable-pagination.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/subtable-pagination.js +39 -0
- package/dist/browser/components/platform-fields/subtable-pagination.js.map +1 -0
- package/dist/browser/components/platform-fields/subtable-value.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/subtable-value.js +2 -1
- package/dist/browser/components/platform-fields/subtable-value.js.map +1 -1
- package/dist/browser/components/platform-fields/surface-field-validation.d.ts +31 -0
- package/dist/browser/components/platform-fields/surface-field-validation.d.ts.map +1 -0
- package/dist/browser/components/platform-fields/surface-field-validation.js +36 -0
- package/dist/browser/components/platform-fields/surface-field-validation.js.map +1 -0
- package/dist/browser/components/resource/SurfaceFields.d.ts +1 -1
- package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -1
- package/dist/browser/components/resource/SurfaceFields.js +38 -64
- package/dist/browser/components/resource/SurfaceFields.js.map +1 -1
- package/dist/browser/components/resource/resource-form-operations.d.ts.map +1 -1
- package/dist/browser/components/resource/resource-form-operations.js +5 -1
- package/dist/browser/components/resource/resource-form-operations.js.map +1 -1
- package/dist/browser/components/workflow/StandardWorkflowPages.d.ts.map +1 -1
- package/dist/browser/components/workflow/StandardWorkflowPages.js +30 -13
- package/dist/browser/components/workflow/StandardWorkflowPages.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowDiagram.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowDiagram.js +14 -1
- package/dist/browser/components/workflow/WorkflowDiagram.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowFlowCanvas.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowFlowCanvas.js +27 -8
- package/dist/browser/components/workflow/WorkflowFlowCanvas.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowTaskFiles.d.ts +5 -3
- package/dist/browser/components/workflow/WorkflowTaskFiles.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowTaskFiles.js +67 -27
- package/dist/browser/components/workflow/WorkflowTaskFiles.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowTaskForm.d.ts +4 -0
- package/dist/browser/components/workflow/WorkflowTaskForm.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowTaskForm.js +49 -15
- package/dist/browser/components/workflow/WorkflowTaskForm.js.map +1 -1
- package/dist/browser/components/workflow/standard-process-values.d.ts +10 -0
- package/dist/browser/components/workflow/standard-process-values.d.ts.map +1 -0
- package/dist/browser/components/workflow/standard-process-values.js +25 -0
- package/dist/browser/components/workflow/standard-process-values.js.map +1 -0
- package/dist/browser/components/workflow/workflow-graph-presentation.d.ts +19 -0
- package/dist/browser/components/workflow/workflow-graph-presentation.d.ts.map +1 -0
- package/dist/browser/components/workflow/workflow-graph-presentation.js +28 -0
- package/dist/browser/components/workflow/workflow-graph-presentation.js.map +1 -0
- package/dist/browser/components/workflow/workflow-task-field-codec.d.ts +4 -0
- package/dist/browser/components/workflow/workflow-task-field-codec.d.ts.map +1 -0
- package/dist/browser/components/workflow/workflow-task-field-codec.js +9 -0
- package/dist/browser/components/workflow/workflow-task-field-codec.js.map +1 -0
- package/dist/browser/components/workflow/workflow-task-subtable.d.ts +7 -0
- package/dist/browser/components/workflow/workflow-task-subtable.d.ts.map +1 -0
- package/dist/browser/components/workflow/workflow-task-subtable.js +58 -0
- package/dist/browser/components/workflow/workflow-task-subtable.js.map +1 -0
- package/dist/browser/mobile-fields.css +4 -0
- package/dist/browser/record-detail.css +4 -2
- package/dist/browser/styles.css +11 -0
- package/dist/browser/workflow-task-file-upload.d.ts.map +1 -1
- package/dist/browser/workflow-task-file-upload.js +1 -0
- package/dist/browser/workflow-task-file-upload.js.map +1 -1
- package/documentation/field-components.md +1 -1
- package/documentation/getting-started.md +7 -7
- package/documentation/manifest.json +4 -4
- package/documentation/workflow-events.md +94 -4
- package/package.json +21 -27
- package/releases/2.48.1.json +30 -0
- package/releases/2.48.2.json +29 -0
- package/skills/manifest.json +1 -1
- package/skills/openxiangda-v2/SKILL.md +4 -4
- package/skills/openxiangda-v2/references/field-components.md +1 -1
- package/skills/openxiangda-v2/references/getting-started.md +7 -7
- package/skills/openxiangda-v2/references/workflow-events.md +94 -4
- package/dist/browser/components/platform-fields/MobileRichTextField.d.ts +0 -4
- package/dist/browser/components/platform-fields/MobileRichTextField.d.ts.map +0 -1
- package/dist/browser/components/platform-fields/MobileRichTextField.js +0 -38
- package/dist/browser/components/platform-fields/MobileRichTextField.js.map +0 -1
- package/releases/2.43.0.json +0 -38
- package/releases/2.44.0.json +0 -36
|
@@ -7,6 +7,12 @@ import { Alert, Button, Image, Modal, Space, Spin, Typography, } from 'antd';
|
|
|
7
7
|
import { useCallback, useEffect, useRef, useState, } from 'react';
|
|
8
8
|
import { fetchDataFileBlob, fetchWorkflowDataFileBlob, } from '../../platform-client';
|
|
9
9
|
const CANVAS_HEIGHT = 240;
|
|
10
|
+
const MAX_TASK_POINTS = 512;
|
|
11
|
+
function sampledPoints(input, maximum) {
|
|
12
|
+
if (input.length <= maximum)
|
|
13
|
+
return input.slice();
|
|
14
|
+
return Array.from({ length: maximum }, (_, index) => input[Math.round(index * (input.length - 1) / (maximum - 1))]);
|
|
15
|
+
}
|
|
10
16
|
async function sha256(blob) {
|
|
11
17
|
const digest = await crypto.subtle.digest('SHA-256', await blob.arrayBuffer());
|
|
12
18
|
return [...new Uint8Array(digest)]
|
|
@@ -27,8 +33,11 @@ function SignatureImage({ value, resourceCode, workflowBinding, mobile = false,
|
|
|
27
33
|
useEffect(() => {
|
|
28
34
|
let active = true;
|
|
29
35
|
let objectUrl = '';
|
|
30
|
-
|
|
36
|
+
setSource('');
|
|
37
|
+
if (!resourceCode && !workflowBinding) {
|
|
38
|
+
setLoading(false);
|
|
31
39
|
return;
|
|
40
|
+
}
|
|
32
41
|
setLoading(true);
|
|
33
42
|
const request = workflowBinding
|
|
34
43
|
? fetchWorkflowDataFileBlob(workflowBinding, value.file.id)
|
|
@@ -56,6 +65,7 @@ function SignatureImage({ value, resourceCode, workflowBinding, mobile = false,
|
|
|
56
65
|
}, [
|
|
57
66
|
resourceCode,
|
|
58
67
|
value.file.id,
|
|
68
|
+
workflowBinding?.taskId,
|
|
59
69
|
workflowBinding?.instanceId,
|
|
60
70
|
workflowBinding?.resourceCode,
|
|
61
71
|
workflowBinding?.recordId,
|
|
@@ -68,7 +78,7 @@ function SignatureImage({ value, resourceCode, workflowBinding, mobile = false,
|
|
|
68
78
|
export function SignatureValueDisplay({ value, resourceCode, workflowBinding, }) {
|
|
69
79
|
return (_jsxs("div", { className: "oxa-signature-value", children: [_jsx(SignatureImage, { resourceCode: resourceCode, value: value, workflowBinding: workflowBinding }), _jsxs(Typography.Text, { type: "secondary", children: [value.signer?.label || '业务签名', " \u00B7 ", _jsx(PresentationTime, { value: value.signedAt })] }), _jsxs(Typography.Text, { className: "oxa-signature-hash", type: "secondary", children: ["SHA-256 ", value.hash.slice(0, 16), "..."] })] }));
|
|
70
80
|
}
|
|
71
|
-
export function SignatureField({ value, onChange, onUpload, signer, resourceCode, disabled = false, mobile = false, }) {
|
|
81
|
+
export function SignatureField({ value, onChange, onUpload, signer, resourceCode, workflowBinding, disabled = false, mobile = false, }) {
|
|
72
82
|
const canvas = useRef(null);
|
|
73
83
|
const drawing = useRef(false);
|
|
74
84
|
const points = useRef([]);
|
|
@@ -76,6 +86,18 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
|
|
|
76
86
|
const [drawn, setDrawn] = useState(false);
|
|
77
87
|
const [saving, setSaving] = useState(false);
|
|
78
88
|
const [error, setError] = useState('');
|
|
89
|
+
const scope = JSON.stringify([resourceCode, workflowBinding?.taskId, workflowBinding?.instanceId,
|
|
90
|
+
workflowBinding?.resourceCode, workflowBinding?.recordId, workflowBinding?.fieldCode]);
|
|
91
|
+
const generation = useRef(0);
|
|
92
|
+
useEffect(() => {
|
|
93
|
+
generation.current += 1;
|
|
94
|
+
setOpen(false);
|
|
95
|
+
setSaving(false);
|
|
96
|
+
setError('');
|
|
97
|
+
drawing.current = false;
|
|
98
|
+
return () => { generation.current += 1; };
|
|
99
|
+
}, [scope]);
|
|
100
|
+
const locked = disabled || saving;
|
|
79
101
|
const prepare = useCallback(() => {
|
|
80
102
|
const element = canvas.current;
|
|
81
103
|
if (!element)
|
|
@@ -112,12 +134,16 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
|
|
|
112
134
|
};
|
|
113
135
|
};
|
|
114
136
|
const clear = () => {
|
|
137
|
+
if (locked)
|
|
138
|
+
return;
|
|
115
139
|
points.current = [];
|
|
116
140
|
setDrawn(false);
|
|
117
141
|
setError('');
|
|
118
142
|
prepare();
|
|
119
143
|
};
|
|
120
144
|
const save = async () => {
|
|
145
|
+
if (locked)
|
|
146
|
+
return;
|
|
121
147
|
if (!canvas.current || !points.current.length) {
|
|
122
148
|
setError('请先完成签名');
|
|
123
149
|
return;
|
|
@@ -128,6 +154,11 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
|
|
|
128
154
|
}
|
|
129
155
|
setSaving(true);
|
|
130
156
|
setError('');
|
|
157
|
+
const originalGeneration = generation.current;
|
|
158
|
+
const signedAt = new Date().toISOString();
|
|
159
|
+
const originalPoints = workflowBinding?.taskId
|
|
160
|
+
? sampledPoints(points.current, MAX_TASK_POINTS) : points.current.slice();
|
|
161
|
+
let uploadStarted = false;
|
|
131
162
|
try {
|
|
132
163
|
const blob = await new Promise(resolve => canvas.current?.toBlob(resolve, 'image/png'));
|
|
133
164
|
if (!blob)
|
|
@@ -136,25 +167,44 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
|
|
|
136
167
|
const file = new File([blob], `signature-${Date.now()}.png`, {
|
|
137
168
|
type: 'image/png',
|
|
138
169
|
});
|
|
139
|
-
const
|
|
140
|
-
onChange?.({
|
|
141
|
-
file: managedFile(uploaded),
|
|
170
|
+
const envelope = {
|
|
142
171
|
...(signer ? { signer } : {}),
|
|
143
|
-
signedAt
|
|
144
|
-
points:
|
|
172
|
+
signedAt,
|
|
173
|
+
points: originalPoints,
|
|
145
174
|
hash,
|
|
146
|
-
}
|
|
147
|
-
|
|
175
|
+
};
|
|
176
|
+
const adopt = (uploaded) => {
|
|
177
|
+
if (generation.current !== originalGeneration)
|
|
178
|
+
return;
|
|
179
|
+
onChange?.({ ...envelope, file: managedFile(uploaded) });
|
|
180
|
+
setOpen(false);
|
|
181
|
+
setError('');
|
|
182
|
+
};
|
|
183
|
+
if (generation.current !== originalGeneration)
|
|
184
|
+
return;
|
|
185
|
+
uploadStarted = true;
|
|
186
|
+
adopt(await onUpload(file, adopt));
|
|
148
187
|
}
|
|
149
188
|
catch (reason) {
|
|
150
|
-
|
|
189
|
+
if (generation.current !== originalGeneration)
|
|
190
|
+
return;
|
|
191
|
+
if (workflowBinding?.taskId && uploadStarted) {
|
|
192
|
+
// The task recovery panel owns upload failures and the original envelope.
|
|
193
|
+
setOpen(false);
|
|
194
|
+
setError('');
|
|
195
|
+
}
|
|
196
|
+
else
|
|
197
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
151
198
|
}
|
|
152
199
|
finally {
|
|
153
|
-
|
|
200
|
+
if (generation.current === originalGeneration)
|
|
201
|
+
setSaving(false);
|
|
154
202
|
}
|
|
155
203
|
};
|
|
156
204
|
const canvasContent = (_jsxs("div", { className: "oxa-signature-pad", children: [_jsx("canvas", { "aria-label": "\u624B\u5199\u7B7E\u540D\u753B\u5E03", className: "oxa-signature-canvas", onPointerCancel: () => { drawing.current = false; }, onPointerDown: event => {
|
|
157
205
|
event.preventDefault();
|
|
206
|
+
if (locked)
|
|
207
|
+
return;
|
|
158
208
|
event.currentTarget.setPointerCapture(event.pointerId);
|
|
159
209
|
drawing.current = true;
|
|
160
210
|
const next = point(event);
|
|
@@ -169,7 +219,7 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
|
|
|
169
219
|
setDrawn(true);
|
|
170
220
|
}, onPointerMove: event => {
|
|
171
221
|
event.preventDefault();
|
|
172
|
-
if (!drawing.current)
|
|
222
|
+
if (locked || !drawing.current)
|
|
173
223
|
return;
|
|
174
224
|
const previous = points.current[points.current.length - 1];
|
|
175
225
|
const next = point(event);
|
|
@@ -181,15 +231,18 @@ export function SignatureField({ value, onChange, onUpload, signer, resourceCode
|
|
|
181
231
|
context.stroke();
|
|
182
232
|
}
|
|
183
233
|
points.current.push(next);
|
|
234
|
+
if (workflowBinding?.taskId && points.current.length > 4096) {
|
|
235
|
+
points.current = sampledPoints(points.current, 2048);
|
|
236
|
+
}
|
|
184
237
|
}, onPointerUp: event => {
|
|
185
238
|
if (event.currentTarget.hasPointerCapture(event.pointerId)) {
|
|
186
239
|
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
187
240
|
}
|
|
188
241
|
drawing.current = false;
|
|
189
|
-
}, ref: canvas }), error && _jsx(Alert, { showIcon: true, title: error, type: "error" }), mobile ? _jsx(MobileButton, { disabled:
|
|
190
|
-
const dialog = mobile ? (_jsx(Popup, { visible: open, bodyClassName: "oxa-mobile-signature-sheet", onMaskClick: () => !
|
|
242
|
+
}, ref: canvas }), error && _jsx(Alert, { showIcon: true, title: error, type: "error" }), mobile ? _jsx(MobileButton, { disabled: locked, onClick: clear, children: "\u6E05\u7A7A\u753B\u5E03" }) : _jsx(Button, { disabled: locked, icon: _jsx(ClearOutlined, {}), onClick: clear, children: "\u6E05\u7A7A\u753B\u5E03" })] }));
|
|
243
|
+
const dialog = mobile ? (_jsx(Popup, { visible: open, bodyClassName: "oxa-mobile-signature-sheet", onMaskClick: () => !locked && setOpen(false), destroyOnClose: true, children: _jsxs("section", { role: "dialog", "aria-label": "\u624B\u5199\u7B7E\u540D", children: [_jsx(MobileSheetHeader, { title: "\u624B\u5199\u7B7E\u540D", disabled: !drawn || locked, confirmText: saving ? '保存中…' : '保存签名', onCancel: () => !locked && setOpen(false), onConfirm: () => void save() }), canvasContent] }) })) : (_jsx(Modal, { destroyOnHidden: true, okButtonProps: { disabled: !drawn || locked }, cancelButtonProps: { disabled: locked }, closable: !locked, maskClosable: !locked, keyboard: !locked, okText: "\u4FDD\u5B58\u7B7E\u540D", onCancel: () => !locked && setOpen(false), onOk: () => void save(), open: open, confirmLoading: saving, title: "\u624B\u5199\u7B7E\u540D", width: 720, children: canvasContent }));
|
|
191
244
|
if (mobile)
|
|
192
|
-
return _jsxs("div", { className: "oxa-mobile-signature-field oxa-mobile-scope", children: [_jsx(MobileButton, { className: "oxa-mobile-signature-preview", fill: "none", disabled:
|
|
193
|
-
return (_jsxs("div", { className: "oxa-signature-field", children: [value ? (_jsx(SignatureValueDisplay, { resourceCode: resourceCode, value: value })) : (_jsx(Typography.Text, { type: "secondary", children: "\u5C1A\u672A\u7B7E\u540D" })), !disabled && (_jsxs(Space, { children: [_jsx(Button, { icon: _jsx(EditOutlined, {}), onClick: () => setOpen(true), children: value ? '重新签名' : '开始签名' }), value && (_jsx(Button, { "aria-label": "\u6E05\u9664\u7B7E\u540D", icon: _jsx(DeleteOutlined, {}), onClick: () => onChange?.(
|
|
245
|
+
return _jsxs("div", { className: "oxa-mobile-signature-field oxa-mobile-scope", children: [_jsx(MobileButton, { className: "oxa-mobile-signature-preview", fill: "none", disabled: locked, "aria-label": value ? '重新签名' : '开始签名', onClick: () => setOpen(true), children: value ? _jsx(SignatureImage, { mobile: true, resourceCode: resourceCode, workflowBinding: workflowBinding, value: value }) : _jsx("span", { children: "\u70B9\u51FB\u624B\u5199\u7B7E\u540D" }) }), value && _jsx(MobileButton, { disabled: locked, className: "oxa-mobile-signature-clear", fill: "none", "aria-label": "\u6E05\u9664\u7B7E\u540D", onClick: () => onChange?.(null), children: "\u00D7" }), dialog] });
|
|
246
|
+
return (_jsxs("div", { className: "oxa-signature-field", children: [value ? (_jsx(SignatureValueDisplay, { resourceCode: resourceCode, workflowBinding: workflowBinding, value: value })) : (_jsx(Typography.Text, { type: "secondary", children: "\u5C1A\u672A\u7B7E\u540D" })), !disabled && (_jsxs(Space, { children: [_jsx(Button, { disabled: locked, icon: _jsx(EditOutlined, {}), onClick: () => setOpen(true), children: value ? '重新签名' : '开始签名' }), value && (_jsx(Button, { "aria-label": "\u6E05\u9664\u7B7E\u540D", icon: _jsx(DeleteOutlined, {}), disabled: locked, onClick: () => onChange?.(null) }))] })), dialog] }));
|
|
194
247
|
}
|
|
195
248
|
//# sourceMappingURL=SignatureField.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SignatureField.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SignatureField.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"SignatureField.js","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SignatureField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { DataResourceSurface, WorkflowTaskSubtablePage } from 'openxiangda-contracts/browser';
|
|
2
|
+
import { type WorkflowFileBinding } from '../../platform-client';
|
|
3
|
+
import { type SurfaceField, type SurfaceFieldRenderers } from '../resource/SurfaceFields';
|
|
2
4
|
import type { SubtableDraftRow } from './subtable-value';
|
|
3
5
|
export interface SubtableFieldProps {
|
|
4
6
|
field: SurfaceField;
|
|
@@ -9,8 +11,22 @@ export interface SubtableFieldProps {
|
|
|
9
11
|
value?: SubtableDraftRow[];
|
|
10
12
|
onChange?: (value: SubtableDraftRow[]) => void;
|
|
11
13
|
view?: 'form' | 'detail';
|
|
14
|
+
/** Absolute visible-row position supplied by the task's complete validation. */
|
|
15
|
+
revealRow?: {
|
|
16
|
+
index: number;
|
|
17
|
+
};
|
|
18
|
+
/** Already qualified task projection. Never use ordinary child CRUD here. */
|
|
19
|
+
task?: {
|
|
20
|
+
surface: DataResourceSurface;
|
|
21
|
+
page: WorkflowTaskSubtablePage;
|
|
22
|
+
binding?: WorkflowFileBinding;
|
|
23
|
+
rows?: Array<Record<string, unknown>>;
|
|
24
|
+
uploadEnabled?: boolean;
|
|
25
|
+
upload?: (rowKey: string, ...args: Parameters<NonNullable<SurfaceFieldRenderers['upload']>>) => Promise<import('openxiangda-contracts/browser').DataFileRef>;
|
|
26
|
+
signer?: SurfaceFieldRenderers['signer'];
|
|
27
|
+
};
|
|
12
28
|
}
|
|
13
|
-
export declare function SubtableField({ field, disabled, mobile, operation, parentRecordId, value, onChange, view, }: SubtableFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
export declare function SubtableField({ field, disabled, mobile, operation, parentRecordId, value, onChange, view, revealRow, task, }: SubtableFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
14
30
|
export declare function SubtableValueDisplay({ field, parentRecordId, mobile, }: {
|
|
15
31
|
field: SurfaceField;
|
|
16
32
|
parentRecordId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubtableField.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SubtableField.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SubtableField.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/platform-fields/SubtableField.tsx"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAEV,mBAAmB,EACnB,wBAAwB,EACzB,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EAA8B,KAAK,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAI7F,OAAO,EAIL,KAAK,YAAY,EACjB,KAAK,qBAAqB,EAC3B,MAAM,2BAA2B,CAAC;AAKnC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAgBzD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,YAAY,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,IAAI,CAAC;IAC/C,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACzB,gFAAgF;IAChF,SAAS,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,6EAA6E;IAC7E,IAAI,CAAC,EAAE;QAAE,OAAO,EAAE,mBAAmB,CAAC;QAAC,IAAI,EAAE,wBAAwB,CAAC;QAAC,OAAO,CAAC,EAAE,mBAAmB,CAAC;QACnG,IAAI,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAAC,aAAa,CAAC,EAAE,OAAO,CAAC;QAC/D,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,qBAAqB,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,+BAA+B,EAAE,WAAW,CAAC,CAAC;QAC7J,MAAM,CAAC,EAAE,qBAAqB,CAAC,QAAQ,CAAC,CAAC;KAAE,CAAC;CAC/C;AAED,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,QAAQ,EACR,MAAM,EACN,SAAS,EACT,cAAc,EACd,KAAK,EACL,QAAQ,EACR,IAAa,EACb,SAAS,EACT,IAAI,GACL,EAAE,kBAAkB,2CAgQpB;AAkCD,wBAAgB,oBAAoB,CAAC,EACnC,KAAK,EACL,cAAc,EACd,MAAM,GACP,EAAE;IACD,KAAK,EAAE,YAAY,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,2CAWA"}
|
|
@@ -1,20 +1,22 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { Button as MobileButton } from '../../mobile';
|
|
3
3
|
import { DownOutlined, ExpandOutlined, CompressOutlined, ImportOutlined, DownloadOutlined, PlusOutlined, UpOutlined, } from '@ant-design/icons';
|
|
4
|
-
import { Alert, Button, Empty, Form, Upload, App, Space, Spin, Tooltip, Typography, } from 'antd';
|
|
5
|
-
import { useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
6
|
-
import { MobileSubtableValidationContext } from './MobileSubtableValidation';
|
|
4
|
+
import { Alert, Button, Empty, Form, Pagination, Upload, App, Space, Spin, Tooltip, Typography, } from 'antd';
|
|
5
|
+
import { useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
6
|
+
import { MobileSubtableValidationContext, SubtableEditActivityContext } from './MobileSubtableValidation';
|
|
7
|
+
import { moveSubtableRow, subtablePage, SUBTABLE_PAGE_SIZE, SubtableRowValidationError, validateSubtableRows } from './subtable-pagination';
|
|
7
8
|
import { createNativeResourceClient } from '../../platform-client';
|
|
9
|
+
import { workflowTaskPageFieldState } from 'openxiangda-contracts/browser';
|
|
8
10
|
import { useRuntime } from '../../runtime';
|
|
9
11
|
import { useResourceDefinitions } from '../../resource-definitions';
|
|
10
12
|
import { MobileSurfaceFieldControl, SurfaceFieldControl, SurfaceFieldValue, } from '../resource/SurfaceFields';
|
|
11
13
|
import { fieldValueForData, fieldValueForForm, } from './field-form-codec';
|
|
12
14
|
import { buildResourceImportTemplate, parseResourceImportFile } from '../resource/resource-import';
|
|
13
15
|
import { selectedSurfaceFields } from '../resource/resource-field-selection';
|
|
14
|
-
export function SubtableField({ field, disabled, mobile, operation, parentRecordId, value, onChange, view = 'form', }) {
|
|
16
|
+
export function SubtableField({ field, disabled, mobile, operation, parentRecordId, value, onChange, view = 'form', revealRow, task, }) {
|
|
15
17
|
const definitions = useResourceDefinitions();
|
|
16
18
|
const config = field.subtable;
|
|
17
|
-
const definition = config ? definitions[config.resourceCode] : undefined;
|
|
19
|
+
const definition = config ? task ? { code: config.resourceCode, name: field.label, capabilities: { read: '', create: '', update: '', delete: '' }, surface: task.surface } : definitions[config.resourceCode] : undefined;
|
|
18
20
|
const { hasCapability, hasReadCapability, identity } = useRuntime();
|
|
19
21
|
const [internalRows, setInternalRows] = useState([]);
|
|
20
22
|
const [loading, setLoading] = useState(false);
|
|
@@ -22,27 +24,101 @@ export function SubtableField({ field, disabled, mobile, operation, parentRecord
|
|
|
22
24
|
const [loadAttempt, setLoadAttempt] = useState(0);
|
|
23
25
|
const [fullScreen, setFullScreen] = useState(false);
|
|
24
26
|
const [importing, setImporting] = useState(false);
|
|
27
|
+
const [requestedPage, setRequestedPage] = useState(1);
|
|
28
|
+
const [uploads, setUploads] = useState(0);
|
|
29
|
+
const [pendingEdits, setPendingEdits] = useState(() => new Set());
|
|
30
|
+
const reportPending = useCallback((key, pending) => setPendingEdits(current => {
|
|
31
|
+
if (current.has(key) === pending)
|
|
32
|
+
return current;
|
|
33
|
+
const next = new Set(current);
|
|
34
|
+
if (pending)
|
|
35
|
+
next.add(key);
|
|
36
|
+
else
|
|
37
|
+
next.delete(key);
|
|
38
|
+
return next;
|
|
39
|
+
}), []);
|
|
40
|
+
const registerValidation = useContext(MobileSubtableValidationContext);
|
|
25
41
|
const { message } = App.useApp();
|
|
26
42
|
const loadedKey = useRef('');
|
|
27
43
|
const rows = value ?? internalRows;
|
|
28
44
|
const maxRows = config?.maxRows ?? 20;
|
|
29
|
-
const
|
|
45
|
+
const rowsRef = useRef(rows);
|
|
46
|
+
rowsRef.current = rows;
|
|
47
|
+
const page = subtablePage(rows, requestedPage);
|
|
48
|
+
const visibleRows = page.visible;
|
|
49
|
+
const navigationBlocked = Boolean((task && disabled) || importing || uploads || pendingEdits.size);
|
|
50
|
+
useEffect(() => { setRequestedPage(current => Math.min(current, page.pages)); }, [page.pages]);
|
|
51
|
+
useEffect(() => { if (revealRow)
|
|
52
|
+
setRequestedPage(Math.floor(revealRow.index / SUBTABLE_PAGE_SIZE) + 1); }, [revealRow]);
|
|
30
53
|
const childFields = useMemo(() => childSurfaceFields(definition?.surface, config?.foreignKey, config?.orderField, view), [config?.foreignKey, config?.orderField, definition?.surface, view]);
|
|
31
|
-
const readableFields = childFields.filter(child => fieldReadable(child, hasReadCapability, identity.isAppSuperAdmin));
|
|
54
|
+
const readableFields = childFields.filter(child => task || fieldReadable(child, hasReadCapability, identity.isAppSuperAdmin));
|
|
32
55
|
const canCreate = Boolean(definition &&
|
|
33
56
|
!disabled &&
|
|
34
|
-
(identity.isAppSuperAdmin || hasCapability(definition.capabilities.create)));
|
|
57
|
+
(task ? task.page.create === true : identity.isAppSuperAdmin || hasCapability(definition.capabilities.create)));
|
|
35
58
|
const canUpdate = Boolean(definition &&
|
|
36
59
|
!disabled &&
|
|
37
|
-
(identity.isAppSuperAdmin || hasCapability(definition.capabilities.update)));
|
|
60
|
+
(task ? true : identity.isAppSuperAdmin || hasCapability(definition.capabilities.update)));
|
|
38
61
|
const canDelete = Boolean(definition &&
|
|
39
62
|
!disabled &&
|
|
40
|
-
(identity.isAppSuperAdmin || hasCapability(definition.capabilities.delete)));
|
|
63
|
+
(task ? task.page.delete === true : identity.isAppSuperAdmin || hasCapability(definition.capabilities.delete)));
|
|
41
64
|
const emit = (next) => {
|
|
65
|
+
rowsRef.current = next;
|
|
42
66
|
setInternalRows(next);
|
|
43
67
|
onChange?.(next);
|
|
44
68
|
};
|
|
69
|
+
const stateCache = new Map();
|
|
70
|
+
const taskState = (child, row) => {
|
|
71
|
+
if (!task)
|
|
72
|
+
return undefined;
|
|
73
|
+
if (!stateCache.has(row.key))
|
|
74
|
+
stateCache.set(row.key, workflowTaskPageFieldState({ title: field.label, fields: task.page.fields }, {
|
|
75
|
+
...row.snapshot, ...Object.fromEntries(Object.entries(row.data).map(([code, value]) => [code, fieldValueForData(task.surface.fields[code], value)])),
|
|
76
|
+
}));
|
|
77
|
+
return stateCache.get(row.key).find(state => state.code === child.key);
|
|
78
|
+
};
|
|
79
|
+
const canReadField = (child, row) => task ? !row || taskState(child, row)?.visible === true : fieldReadable(child, hasReadCapability, identity.isAppSuperAdmin);
|
|
80
|
+
const canWriteField = (child, operation, row) => task
|
|
81
|
+
? (!row ? task.page.fields.some(item => item.code === child.key && !item.readonly) : Boolean(taskState(child, row)?.visible && !taskState(child, row)?.readonly))
|
|
82
|
+
: fieldWritable(child, operation, hasCapability, identity.isAppSuperAdmin);
|
|
83
|
+
const uploadFor = (row) => async (current, file, recordId, onRecovered) => {
|
|
84
|
+
setUploads(count => count + 1);
|
|
85
|
+
try {
|
|
86
|
+
return await (task
|
|
87
|
+
? task.upload ? task.upload(row.key, current, file, recordId, onRecovered) : Promise.reject(new Error('当前任务未提供子行上传能力'))
|
|
88
|
+
: createNativeResourceClient(definition.code, definition.surface).upload(current.key, file, recordId));
|
|
89
|
+
}
|
|
90
|
+
finally {
|
|
91
|
+
setUploads(count => count - 1);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const rowBinding = (row) => task?.binding ? { ...task.binding, resourceCode: config.resourceCode, recordId: row.key } : undefined;
|
|
95
|
+
const uploadBlocked = (child, row) => Boolean(task && ['file', 'image', 'signature', 'text.rich'].includes(child.type) &&
|
|
96
|
+
(task.uploadEnabled === false || !workflowTaskPageFieldState({ title: field.label, fields: task.page.fields }, task.rows?.find(value => String(value.id) === row.key) || {})
|
|
97
|
+
.some(state => state.code === child.key && state.visible && !state.readonly)));
|
|
98
|
+
const rowFields = (row) => childFields.map(child => task ? { ...child, requiredHint: false } : child);
|
|
99
|
+
const requiredHint = (child, row) => taskState(child, row)?.required
|
|
100
|
+
? _jsx(Typography.Text, { type: "secondary", children: "\u5B8C\u6210\u4EFB\u52A1\u524D\u5FC5\u586B" }) : undefined;
|
|
101
|
+
useEffect(() => registerValidation?.(`all:${field.key}`, async () => {
|
|
102
|
+
if (disabled)
|
|
103
|
+
return;
|
|
104
|
+
if (uploads || pendingEdits.size)
|
|
105
|
+
throw new Error('请先完成当前页的编辑或处理待上传文件');
|
|
106
|
+
try {
|
|
107
|
+
await validateSubtableRows(rows, row => {
|
|
108
|
+
const operation = row.state === 'persisted' ? 'update' : 'create';
|
|
109
|
+
const writable = task ? row.state === 'persisted' || task.page.create === true : row.state === 'persisted' ? canUpdate : canCreate;
|
|
110
|
+
return rowFields(row).filter(child => writable && canWriteField(child, operation, row) && !uploadBlocked(child, row));
|
|
111
|
+
}, mobile);
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
if (error instanceof SubtableRowValidationError)
|
|
115
|
+
setRequestedPage(Math.floor(error.rowIndex / SUBTABLE_PAGE_SIZE) + 1);
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}));
|
|
45
119
|
useEffect(() => {
|
|
120
|
+
if (task)
|
|
121
|
+
return;
|
|
46
122
|
if (!parentRecordId || !definition || !config) {
|
|
47
123
|
if (operation === 'create' && value === undefined && internalRows.length === 0) {
|
|
48
124
|
onChange?.([]);
|
|
@@ -95,28 +171,32 @@ export function SubtableField({ field, disabled, mobile, operation, parentRecord
|
|
|
95
171
|
: rows.map(row => row.key === target.key ? { ...row, state: 'deleted' } : row));
|
|
96
172
|
};
|
|
97
173
|
const moveRow = (index, direction) => {
|
|
98
|
-
|
|
99
|
-
if (target < 0 || target >= visibleRows.length)
|
|
174
|
+
if (navigationBlocked || (task && !task.page.reorder))
|
|
100
175
|
return;
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
emit([...reordered, ...rows.filter(row => row.state === 'deleted')]);
|
|
176
|
+
emit(moveSubtableRow(rowsRef.current, index, direction));
|
|
177
|
+
setRequestedPage(Math.floor((index + direction) / SUBTABLE_PAGE_SIZE) + 1);
|
|
104
178
|
};
|
|
179
|
+
const changeRow = (row, data) => emit(rowsRef.current.map(current => current.key === row.key
|
|
180
|
+
? { ...current, data: { ...current.data, ...data }, snapshot: { ...current.snapshot, ...Object.fromEntries(Object.entries(data).map(([key, item]) => [key, fieldValueForData(definition.surface.fields[key], item)])) } } : current));
|
|
181
|
+
const pagination = _jsxs("div", { className: "oxa-subtable-pagination", "aria-label": `${field.label}分页`, children: [_jsx("span", { role: "status", children: visibleRows.length ? `${page.start + 1}–${Math.min(page.start + SUBTABLE_PAGE_SIZE, visibleRows.length)} / ${visibleRows.length} 项` : '0 项' }), page.pages > 1 && (mobile ? _jsxs(Space, { children: [_jsx(MobileButton, { fill: "outline", "aria-label": `${field.label}上一页`, disabled: navigationBlocked || page.page === 1, onClick: () => setRequestedPage(page.page - 1), children: "\u4E0A\u4E00\u9875" }), _jsxs("span", { children: [page.page, " / ", page.pages] }), _jsx(MobileButton, { fill: "outline", "aria-label": `${field.label}下一页`, disabled: navigationBlocked || page.page === page.pages, onClick: () => setRequestedPage(page.page + 1), children: "\u4E0B\u4E00\u9875" })] }) : _jsx(Pagination, { size: "small", current: page.page, total: visibleRows.length, pageSize: SUBTABLE_PAGE_SIZE, showSizeChanger: false, disabled: navigationBlocked, onChange: setRequestedPage })), (uploads > 0 || pendingEdits.size > 0) && _jsx("span", { children: "\u8BF7\u5148\u5B8C\u6210\u5F53\u524D\u9875\u7684\u7F16\u8F91\u6216\u5904\u7406\u5F85\u4E0A\u4F20\u6587\u4EF6" })] });
|
|
105
182
|
if (mobile)
|
|
106
|
-
return _jsxs("div", { className: "oxa-mobile-inline-subtable oxa-mobile-scope", children: [loadError && _jsxs("div", { role: "alert", children: [loadError, _jsx(MobileButton, { onClick: () => { loadedKey.current = ''; setLoadAttempt(attempt => attempt + 1); }, children: "\u91CD\u8BD5" })] }), loading ? _jsx("span", { role: "status", children: "\u52A0\u8F7D\u4E2D\u2026" }) :
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
183
|
+
return _jsx(SubtableEditActivityContext.Provider, { value: reportPending, children: _jsxs("div", { className: "oxa-mobile-inline-subtable oxa-mobile-scope", children: [loadError && _jsxs("div", { role: "alert", children: [loadError, _jsx(MobileButton, { onClick: () => { loadedKey.current = ''; setLoadAttempt(attempt => attempt + 1); }, children: "\u91CD\u8BD5" })] }), pagination, loading ? _jsx("span", { role: "status", children: "\u52A0\u8F7D\u4E2D\u2026" }) : page.rows.map((row, offset) => {
|
|
184
|
+
const index = page.start + offset;
|
|
185
|
+
const rowOperation = row.state === 'persisted' ? 'update' : 'create';
|
|
186
|
+
const writable = task ? row.state === 'persisted' || task.page.create === true : row.state === 'persisted' ? canUpdate : canCreate;
|
|
187
|
+
const fields = rowFields(row).filter(child => canReadField(child, row) || (writable && canWriteField(child, rowOperation, row)));
|
|
188
|
+
return _jsx(MobileSubtableRow, { row: row, index: index, fields: fields, disabled: disabled, resourceCode: definition.code, operation: rowOperation, canWrite: child => writable && canWriteField(child, rowOperation, row), canDelete: !navigationBlocked && (row.state === 'persisted' ? canDelete : canCreate), onRemove: () => removeRow(row), onChange: data => changeRow(row, data), workflowFileBinding: rowBinding(row), upload: uploadFor(row), signer: task?.signer, uploadBlocked: child => uploadBlocked(child, row), taskMode: Boolean(task), hint: child => requiredHint(child, row), actions: task?.page.reorder && _jsxs(Space, { children: [_jsx(MobileButton, { fill: "none", disabled: navigationBlocked || index === 0, "aria-label": `上移第${index + 1}项`, onClick: () => moveRow(index, -1), children: "\u4E0A\u79FB" }), _jsx(MobileButton, { fill: "none", disabled: navigationBlocked || index === visibleRows.length - 1, "aria-label": `下移第${index + 1}项`, onClick: () => moveRow(index, 1), children: "\u4E0B\u79FB" })] }) }, row.key);
|
|
189
|
+
}), !disabled && _jsxs(MobileButton, { block: true, fill: "none", color: "primary", disabled: navigationBlocked || !canCreate || visibleRows.length >= maxRows, onClick: () => { emit([...rows, { key: crypto.randomUUID(), state: 'created', data: {} }]); setRequestedPage(Math.floor(visibleRows.length / SUBTABLE_PAGE_SIZE) + 1); }, children: [_jsx(PlusOutlined, {}), " \u65B0\u589E\u4E00\u9879"] })] }) });
|
|
190
|
+
const fields = childFields.filter(child => canReadField(child) || (canCreate && canWriteField(child, 'create')) || (canUpdate && canWriteField(child, 'update')));
|
|
191
|
+
const writableCodes = fields.filter(child => canWriteField(child, 'create')).map(child => child.key);
|
|
192
|
+
const appendRows = (data) => {
|
|
193
|
+
const start = subtablePage(rowsRef.current, 1).visible.length;
|
|
194
|
+
emit([...rowsRef.current, ...data.map(item => ({
|
|
195
|
+
key: crypto.randomUUID(), state: 'created',
|
|
196
|
+
data: Object.fromEntries(Object.entries(item).map(([key, value]) => [key, fieldValueForForm(definition.surface.fields[key], value)])),
|
|
197
|
+
}))]);
|
|
198
|
+
setRequestedPage(Math.floor(start / SUBTABLE_PAGE_SIZE) + 1);
|
|
199
|
+
};
|
|
120
200
|
const downloadTemplate = async () => {
|
|
121
201
|
const template = await buildResourceImportTemplate(field.label, definition.surface, writableCodes);
|
|
122
202
|
const url = URL.createObjectURL(new Blob([template.content]));
|
|
@@ -126,30 +206,37 @@ export function SubtableField({ field, disabled, mobile, operation, parentRecord
|
|
|
126
206
|
link.click();
|
|
127
207
|
setTimeout(() => URL.revokeObjectURL(url), 0);
|
|
128
208
|
};
|
|
129
|
-
return _jsxs("div", { className: `oxa-subtable-field oxa-subtable-inline ${fullScreen ? 'is-fullscreen' : ''}`, children: [loadError && _jsx(Alert, { type: "error", title: loadError, action: _jsx(Button, { onClick: () => { loadedKey.current = ''; setLoadAttempt(value => value + 1); }, children: "\u91CD\u8BD5" }) }), _jsx("div", { className: "oxa-subtable-scroll", children: _jsxs("table", { "aria-label": field.label, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "oxa-subtable-number", children: _jsx(Tooltip, { title: fullScreen ? '退出全屏' : '全屏', children: _jsx(Button, { type: "text", "aria-label": fullScreen ? '退出子表全屏' : '子表全屏', icon: fullScreen ? _jsx(CompressOutlined, {}) : _jsx(ExpandOutlined, {}), onClick: () => setFullScreen(!fullScreen) }) }) }), fields.map(child => _jsx("th", { children: child.label }, child.key)), !disabled && _jsx("th", { children: "\u64CD\u4F5C" })] }) }), _jsxs("tbody", { children: [loading ? _jsx("tr", { children: _jsx("td", { colSpan: fields.length + 2, children: _jsx(Spin, {}) }) }) :
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
209
|
+
return _jsx(SubtableEditActivityContext.Provider, { value: reportPending, children: _jsxs("div", { className: `oxa-subtable-field oxa-subtable-inline ${fullScreen ? 'is-fullscreen' : ''}`, children: [loadError && _jsx(Alert, { type: "error", title: loadError, action: _jsx(Button, { onClick: () => { loadedKey.current = ''; setLoadAttempt(value => value + 1); }, children: "\u91CD\u8BD5" }) }), pagination, _jsx("div", { className: "oxa-subtable-scroll", children: _jsxs("table", { "aria-label": field.label, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { className: "oxa-subtable-number", children: _jsx(Tooltip, { title: fullScreen ? '退出全屏' : '全屏', children: _jsx(Button, { type: "text", "aria-label": fullScreen ? '退出子表全屏' : '子表全屏', icon: fullScreen ? _jsx(CompressOutlined, {}) : _jsx(ExpandOutlined, {}), onClick: () => setFullScreen(!fullScreen) }) }) }), fields.map(child => _jsx("th", { children: child.label }, child.key)), !disabled && _jsx("th", { children: "\u64CD\u4F5C" })] }) }), _jsxs("tbody", { children: [loading ? _jsx("tr", { children: _jsx("td", { colSpan: fields.length + 2, children: _jsx(Spin, {}) }) }) : page.rows.map((row, offset) => {
|
|
210
|
+
const index = page.start + offset;
|
|
211
|
+
const rowOperation = row.state === 'persisted' ? 'update' : 'create';
|
|
212
|
+
const writable = task ? row.state === 'persisted' || task.page.create === true : row.state === 'persisted' ? canUpdate : canCreate;
|
|
213
|
+
return _jsx(DesktopSubtableRow, { row: row, index: index, fields: fields.map(child => task ? { ...child, requiredHint: false } : child), operation: rowOperation, resourceCode: definition.code, disabled: disabled, taskMode: Boolean(task), canRead: child => canReadField(child, row), canWrite: child => writable && canWriteField(child, rowOperation, row), onChange: data => changeRow(row, data), workflowFileBinding: rowBinding(row), upload: uploadFor(row), signer: task?.signer, uploadBlocked: child => uploadBlocked(child, row), hint: child => requiredHint(child, row), actions: _jsxs(Space, { size: 0, children: [_jsx(Button, { type: "text", "aria-label": `上移第${index + 1}项`, disabled: navigationBlocked || index === 0 || !writable || Boolean(task && !task.page.reorder), icon: _jsx(UpOutlined, {}), onClick: () => moveRow(index, -1) }), _jsx(Button, { type: "text", "aria-label": `下移第${index + 1}项`, disabled: navigationBlocked || index === visibleRows.length - 1 || !writable || Boolean(task && !task.page.reorder), icon: _jsx(DownOutlined, {}), onClick: () => moveRow(index, 1) }), _jsx(Button, { type: "link", danger: true, disabled: navigationBlocked || (row.state === 'persisted' ? !canDelete : !canCreate), onClick: () => removeRow(row), children: "\u5220\u9664" })] }) }, row.key);
|
|
214
|
+
}), !loading && !visibleRows.length && _jsx("tr", { children: _jsx("td", { colSpan: fields.length + 2, children: _jsx(Empty, { image: Empty.PRESENTED_IMAGE_SIMPLE, description: "\u6682\u65E0\u660E\u7EC6" }) }) })] })] }) }), !disabled && _jsxs("div", { className: "oxa-subtable-toolbar", children: [_jsxs(Space, { wrap: true, children: [_jsx(Button, { icon: _jsx(PlusOutlined, {}), disabled: navigationBlocked || !canCreate || visibleRows.length >= maxRows, onClick: () => appendRows([{}]), children: "\u65B0\u589E\u4E00\u9879" }), _jsx(Upload, { accept: ".csv,.xls,.xlsx", showUploadList: false, disabled: navigationBlocked || !canCreate || visibleRows.length >= maxRows, beforeUpload: async (file) => {
|
|
215
|
+
setImporting(true);
|
|
216
|
+
try {
|
|
217
|
+
const parsed = await parseResourceImportFile(file, definition.code, definition.surface, writableCodes);
|
|
218
|
+
if (parsed.errors.length)
|
|
219
|
+
throw new Error(parsed.errors.slice(0, 3).join(';'));
|
|
220
|
+
if (visibleRows.length + parsed.rows.length > maxRows)
|
|
221
|
+
throw new Error(`子表单最多 ${maxRows} 项`);
|
|
222
|
+
appendRows(parsed.rows.map(row => row.data));
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
message.error(error instanceof Error ? error.message : '导入失败');
|
|
226
|
+
}
|
|
227
|
+
finally {
|
|
228
|
+
setImporting(false);
|
|
229
|
+
}
|
|
230
|
+
return false;
|
|
231
|
+
}, children: _jsx(Button, { icon: _jsx(ImportOutlined, {}), loading: importing, disabled: navigationBlocked || !canCreate || visibleRows.length >= maxRows, children: "\u6279\u91CF\u5BFC\u5165" }) }), _jsx(Button, { type: "link", icon: _jsx(DownloadOutlined, {}), disabled: !canCreate, onClick: () => void downloadTemplate().catch(error => message.error(String(error))), children: "\u4E0B\u8F7D\u6A21\u677F" })] }), _jsxs(Typography.Text, { type: "secondary", children: [visibleRows.length, " / ", maxRows] })] })] }) });
|
|
232
|
+
}
|
|
233
|
+
function rowDisplayValue(row, field, taskMode) {
|
|
234
|
+
if (taskMode && Object.prototype.hasOwnProperty.call(row.data, field.key)) {
|
|
235
|
+
return fieldValueForData(field, row.data[field.key]);
|
|
236
|
+
}
|
|
237
|
+
return row.snapshot?.[field.key] ?? row.data[field.key];
|
|
151
238
|
}
|
|
152
|
-
function DesktopSubtableRow({ row, index, fields, operation, resourceCode, disabled, canRead, canWrite, onChange, upload, actions }) {
|
|
239
|
+
function DesktopSubtableRow({ row, index, fields, operation, resourceCode, disabled, canRead, canWrite, onChange, upload, actions, workflowFileBinding, taskMode, hint, signer, uploadBlocked }) {
|
|
153
240
|
const [form] = Form.useForm();
|
|
154
241
|
const registerValidation = useContext(MobileSubtableValidationContext);
|
|
155
242
|
useEffect(() => registerValidation?.(row.key, async () => {
|
|
@@ -161,8 +248,8 @@ function DesktopSubtableRow({ row, index, fields, operation, resourceCode, disab
|
|
|
161
248
|
}
|
|
162
249
|
}), [form, index, registerValidation, row.key]);
|
|
163
250
|
useEffect(() => { form.setFieldsValue(row.data); }, [form, row.data]);
|
|
164
|
-
return _jsx(Form, { component: false, name: `subtable-${row.key}`, form: form, initialValues: row.data, onValuesChange: (_changed, all) => onChange(all), children: _jsxs("tr", { children: [_jsx("td", { className: "oxa-subtable-number", children: index + 1 }), fields.map(field => _jsx("td", { children: canWrite(field) ? _jsx(SurfaceFieldControl, { field: field, disabled:
|
|
165
|
-
: canRead(field) ? _jsx(SurfaceFieldValue, { field: field, resourceCode: resourceCode,
|
|
251
|
+
return _jsx(Form, { component: false, layout: "vertical", name: `subtable-${row.key}`, form: form, initialValues: row.data, onValuesChange: (_changed, all) => onChange(all), children: _jsxs("tr", { children: [_jsx("td", { className: "oxa-subtable-number", children: index + 1 }), fields.map(field => _jsx("td", { children: canWrite(field) ? _jsxs(_Fragment, { children: [_jsx(SurfaceFieldControl, { field: field, disabled: Boolean(disabled || uploadBlocked?.(field)), operation: operation, recordId: row.id, resourceCode: resourceCode, workflowFileBinding: workflowFileBinding && { ...workflowFileBinding, fieldCode: field.key }, renderers: { upload, signer } }), uploadBlocked?.(field) && _jsx(Typography.Text, { type: "secondary", children: "\u8BF7\u5148\u4FDD\u5B58\u8865\u586B\uFF0C\u8BA9\u8BE5\u9644\u4EF6\u5B57\u6BB5\u751F\u6548\uFF0C\u518D\u4E0A\u4F20\u6587\u4EF6\u3002" }), hint?.(field)] })
|
|
252
|
+
: canRead(field) ? _jsx(SurfaceFieldValue, { field: field, resourceCode: resourceCode, workflowFileBinding: workflowFileBinding && { ...workflowFileBinding, fieldCode: field.key }, value: rowDisplayValue(row, field, taskMode) }) : '—' }, field.key)), !disabled && _jsx("td", { children: actions })] }) });
|
|
166
253
|
}
|
|
167
254
|
export function SubtableValueDisplay({ field, parentRecordId, mobile, }) {
|
|
168
255
|
return (_jsx(SubtableField, { disabled: true, field: field, mobile: mobile, operation: "update", parentRecordId: parentRecordId, view: "detail" }));
|
|
@@ -225,7 +312,7 @@ function draftFromRecord(record, surface, foreignKey, orderField) {
|
|
|
225
312
|
snapshot: record,
|
|
226
313
|
};
|
|
227
314
|
}
|
|
228
|
-
function MobileSubtableRow({ row, index, fields, operation, resourceCode, canWrite, canDelete, onRemove, onChange, upload }) {
|
|
315
|
+
function MobileSubtableRow({ row, index, fields, operation, resourceCode, canWrite, canDelete, onRemove, onChange, upload, actions, workflowFileBinding, taskMode, hint, signer, uploadBlocked, disabled }) {
|
|
229
316
|
const [form] = Form.useForm();
|
|
230
317
|
const [expanded, setExpanded] = useState(true);
|
|
231
318
|
const registerValidation = useContext(MobileSubtableValidationContext);
|
|
@@ -239,6 +326,8 @@ function MobileSubtableRow({ row, index, fields, operation, resourceCode, canWri
|
|
|
239
326
|
}
|
|
240
327
|
}), [form, index, registerValidation, row.key]);
|
|
241
328
|
useEffect(() => { form.setFieldsValue(row.data); }, [form, row.data]);
|
|
242
|
-
return _jsxs("div", { className: "oxa-mobile-subtable-card", children: [_jsxs("header", { children: [_jsxs(MobileButton, { fill: "none", "aria-label": `${expanded ? '折叠' : '展开'}第${index + 1}项`, "aria-expanded": expanded, onClick: () => setExpanded(!expanded), children: [expanded ? '▾' : '▸', " ", index + 1] }), canDelete && _jsx(MobileButton, { fill: "none", onClick: onRemove, children: "\u5220\u9664" })] }), _jsx("div", { hidden: !expanded, style: !expanded ? { display: 'none' } : undefined, children: _jsx(Form, { component: false, name: `subtable-${row.key}`, form: form, initialValues: row.data, onValuesChange: (_changed, all) => onChange(all), children: fields.map(field =>
|
|
329
|
+
return _jsxs("div", { className: "oxa-mobile-subtable-card", children: [_jsxs("header", { children: [_jsxs(MobileButton, { fill: "none", "aria-label": `${expanded ? '折叠' : '展开'}第${index + 1}项`, "aria-expanded": expanded, onClick: () => setExpanded(!expanded), children: [expanded ? '▾' : '▸', " ", index + 1] }), canDelete && _jsx(MobileButton, { fill: "none", onClick: onRemove, children: "\u5220\u9664" }), actions] }), _jsx("div", { hidden: !expanded, style: !expanded ? { display: 'none' } : undefined, children: _jsx(Form, { component: false, layout: "vertical", name: `subtable-${row.key}`, form: form, initialValues: row.data, onValuesChange: (_changed, all) => onChange(all), children: fields.map(field => canWrite(field) || !taskMode
|
|
330
|
+
? _jsxs("div", { children: [_jsx(MobileSurfaceFieldControl, { field: field, disabled: Boolean(disabled || !canWrite(field) || uploadBlocked?.(field)), operation: operation, recordId: row.id, resourceCode: resourceCode, workflowFileBinding: workflowFileBinding && { ...workflowFileBinding, fieldCode: field.key }, renderers: { upload, signer } }), uploadBlocked?.(field) && _jsx(Typography.Text, { type: "secondary", children: "\u8BF7\u5148\u4FDD\u5B58\u8865\u586B\uFF0C\u8BA9\u8BE5\u9644\u4EF6\u5B57\u6BB5\u751F\u6548\uFF0C\u518D\u4E0A\u4F20\u6587\u4EF6\u3002" }), hint?.(field)] }, field.key)
|
|
331
|
+
: _jsxs("div", { children: [_jsx(Typography.Text, { type: "secondary", children: field.label }), _jsx(SurfaceFieldValue, { field: field, resourceCode: resourceCode, workflowFileBinding: workflowFileBinding && { ...workflowFileBinding, fieldCode: field.key }, mobile: true, value: rowDisplayValue(row, field, taskMode) })] }, field.key)) }) })] });
|
|
243
332
|
}
|
|
244
333
|
//# sourceMappingURL=SubtableField.js.map
|