openxiangda 2.59.3-http.0 → 2.60.0
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/admin-contributions.d.ts.map +1 -1
- package/dist/browser/admin-contributions.js +3 -4
- package/dist/browser/admin-contributions.js.map +1 -1
- package/dist/browser/application.d.ts +4 -2
- package/dist/browser/application.d.ts.map +1 -1
- package/dist/browser/application.js +2 -2
- package/dist/browser/application.js.map +1 -1
- package/dist/browser/components/platform-fields/AttachmentFileList.d.ts +5 -0
- package/dist/browser/components/platform-fields/AttachmentFileList.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/AttachmentFileList.js +11 -0
- package/dist/browser/components/platform-fields/AttachmentFileList.js.map +1 -1
- package/dist/browser/components/platform-fields/DateTimeField.js +1 -1
- package/dist/browser/components/platform-fields/DateTimeField.js.map +1 -1
- package/dist/browser/components/platform-fields/MobileDateTimeField.js +1 -1
- package/dist/browser/components/platform-fields/MobileDateTimeField.js.map +1 -1
- package/dist/browser/components/platform-fields/MobileManagedFileField.d.ts +2 -1
- package/dist/browser/components/platform-fields/MobileManagedFileField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/MobileManagedFileField.js +4 -4
- package/dist/browser/components/platform-fields/MobileManagedFileField.js.map +1 -1
- package/dist/browser/components/platform-fields/MobileZonedDateTimeField.d.ts +1 -1
- package/dist/browser/components/platform-fields/MobileZonedDateTimeField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/MobileZonedDateTimeField.js +3 -3
- package/dist/browser/components/platform-fields/MobileZonedDateTimeField.js.map +1 -1
- package/dist/browser/components/platform-fields/SubtableField.d.ts +6 -0
- package/dist/browser/components/platform-fields/SubtableField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/SubtableField.js +17 -10
- package/dist/browser/components/platform-fields/SubtableField.js.map +1 -1
- package/dist/browser/components/platform-fields/ZonedDateTimeField.d.ts +1 -1
- package/dist/browser/components/platform-fields/ZonedDateTimeField.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/ZonedDateTimeField.js +3 -2
- package/dist/browser/components/platform-fields/ZonedDateTimeField.js.map +1 -1
- package/dist/browser/components/platform-fields/zoned-date-time.d.ts +2 -0
- package/dist/browser/components/platform-fields/zoned-date-time.d.ts.map +1 -1
- package/dist/browser/components/platform-fields/zoned-date-time.js +6 -0
- package/dist/browser/components/platform-fields/zoned-date-time.js.map +1 -1
- package/dist/browser/components/resource/SurfaceFields.d.ts +5 -0
- package/dist/browser/components/resource/SurfaceFields.d.ts.map +1 -1
- package/dist/browser/components/resource/SurfaceFields.js +9 -9
- package/dist/browser/components/resource/SurfaceFields.js.map +1 -1
- package/dist/browser/components/workflow/StandardWorkflowPages.d.ts +15 -2
- package/dist/browser/components/workflow/StandardWorkflowPages.d.ts.map +1 -1
- package/dist/browser/components/workflow/StandardWorkflowPages.js +115 -45
- 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 +12 -5
- 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 +14 -7
- package/dist/browser/components/workflow/WorkflowFlowCanvas.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowNodeConfigurationEditor.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowNodeConfigurationEditor.js +4 -2
- package/dist/browser/components/workflow/WorkflowNodeConfigurationEditor.js.map +1 -1
- package/dist/browser/components/workflow/WorkflowTaskForm.d.ts +9 -1
- package/dist/browser/components/workflow/WorkflowTaskForm.d.ts.map +1 -1
- package/dist/browser/components/workflow/WorkflowTaskForm.js +32 -3
- package/dist/browser/components/workflow/WorkflowTaskForm.js.map +1 -1
- package/dist/browser/components/workflow/standard-process-values.d.ts +2 -2
- package/dist/browser/components/workflow/standard-process-values.d.ts.map +1 -1
- package/dist/browser/components/workflow/standard-process-values.js +18 -3
- package/dist/browser/components/workflow/standard-process-values.js.map +1 -1
- package/dist/browser/components/workflow/workflow-graph-presentation.d.ts +1 -1
- package/dist/browser/components/workflow/workflow-graph-presentation.d.ts.map +1 -1
- package/dist/browser/components/workflow/workflow-graph-presentation.js +4 -3
- package/dist/browser/components/workflow/workflow-graph-presentation.js.map +1 -1
- package/dist/browser/components/workflow/workflow-submission-form.d.ts +9 -0
- package/dist/browser/components/workflow/workflow-submission-form.d.ts.map +1 -1
- package/dist/browser/components/workflow/workflow-submission-form.js +34 -1
- package/dist/browser/components/workflow/workflow-submission-form.js.map +1 -1
- package/dist/browser/navigation-guard.d.ts +4 -1
- package/dist/browser/navigation-guard.d.ts.map +1 -1
- package/dist/browser/navigation-guard.js +39 -10
- package/dist/browser/navigation-guard.js.map +1 -1
- package/dist/browser/styles.css +19 -0
- package/dist/browser/workflow-definitions.d.ts +14 -1
- package/dist/browser/workflow-definitions.d.ts.map +1 -1
- package/dist/browser/workflow-definitions.js +8 -3
- package/dist/browser/workflow-definitions.js.map +1 -1
- package/documentation/AGENTS.md +1 -0
- package/documentation/administration.md +5 -2
- package/documentation/application-operations.md +150 -0
- package/documentation/appspec.md +1 -1
- package/documentation/backend.md +21 -0
- package/documentation/delivery.md +31 -2
- package/documentation/getting-started.md +7 -7
- package/documentation/manifest.json +15 -9
- package/documentation/reference/cli.md +1 -1
- package/documentation/reference/mcp.md +1120 -0
- package/documentation/workflow-events.md +73 -5
- package/package.json +32 -23
- package/releases/2.20.2.json +30 -0
- package/releases/2.20.3.json +29 -0
- package/releases/2.60.0.json +38 -0
- package/skills/manifest.json +1 -1
- package/skills/openxiangda-v2/SKILL.md +5 -4
- package/skills/openxiangda-v2/references/administration.md +5 -2
- package/skills/openxiangda-v2/references/application-operations.md +150 -0
- package/skills/openxiangda-v2/references/appspec.md +1 -1
- package/skills/openxiangda-v2/references/backend.md +21 -0
- package/skills/openxiangda-v2/references/cli.md +1 -1
- package/skills/openxiangda-v2/references/delivery.md +31 -2
- package/skills/openxiangda-v2/references/getting-started.md +7 -7
- package/skills/openxiangda-v2/references/mcp.md +1120 -0
- package/skills/openxiangda-v2/references/workflow-events.md +73 -5
- package/releases/2.0.0.json +0 -50
- package/releases/2.0.1.json +0 -39
- package/releases/2.1.0.json +0 -44
- package/releases/2.1.1.json +0 -48
- package/releases/2.10.0.json +0 -42
- package/releases/2.11.0.json +0 -41
- package/releases/2.12.0.json +0 -38
- package/releases/2.13.0.json +0 -41
- package/releases/2.13.1.json +0 -33
- package/releases/2.13.2.json +0 -31
- package/releases/2.14.0.json +0 -41
- package/releases/2.15.0.json +0 -40
- package/releases/2.16.0.json +0 -41
- package/releases/2.17.0.json +0 -39
- package/releases/2.17.1.json +0 -34
- package/releases/2.18.0.json +0 -37
- package/releases/2.18.1.json +0 -31
- package/releases/2.18.10.json +0 -29
- package/releases/2.18.2.json +0 -30
- package/releases/2.18.3.json +0 -30
- package/releases/2.18.9.json +0 -37
- package/releases/2.19.0.json +0 -38
- package/releases/2.2.0.json +0 -48
- package/releases/2.2.1.json +0 -35
- package/releases/2.2.2.json +0 -34
- package/releases/2.20.0.json +0 -36
- package/releases/2.21.0.json +0 -35
- package/releases/2.21.1.json +0 -36
- package/releases/2.21.2.json +0 -34
- package/releases/2.21.3.json +0 -31
- package/releases/2.21.4.json +0 -31
- package/releases/2.22.0.json +0 -35
- package/releases/2.22.1.json +0 -32
- package/releases/2.22.2.json +0 -35
- package/releases/2.22.3.json +0 -32
- package/releases/2.22.4.json +0 -33
- package/releases/2.22.5.json +0 -31
- package/releases/2.22.6.json +0 -29
- package/releases/2.22.7.json +0 -29
- package/releases/2.23.0.json +0 -34
- package/releases/2.24.0.json +0 -33
- package/releases/2.24.1.json +0 -33
- package/releases/2.24.2.json +0 -31
- package/releases/2.24.3.json +0 -33
- package/releases/2.25.0.json +0 -31
- package/releases/2.25.1.json +0 -33
- package/releases/2.25.2.json +0 -32
- package/releases/2.25.3.json +0 -32
- package/releases/2.26.0.json +0 -41
- package/releases/2.27.0.json +0 -38
- package/releases/2.28.0.json +0 -37
- package/releases/2.28.1.json +0 -34
- package/releases/2.29.0.json +0 -37
- package/releases/2.29.1.json +0 -34
- package/releases/2.29.2.json +0 -32
- package/releases/2.3.0.json +0 -37
- package/releases/2.30.0.json +0 -34
- package/releases/2.31.0.json +0 -39
- package/releases/2.31.1.json +0 -38
- package/releases/2.31.2.json +0 -34
- package/releases/2.31.3.json +0 -32
- package/releases/2.31.4.json +0 -33
- package/releases/2.31.6.json +0 -29
- package/releases/2.31.7.json +0 -29
- package/releases/2.31.8.json +0 -33
- package/releases/2.31.9.json +0 -33
- package/releases/2.32.0.json +0 -38
- package/releases/2.33.0.json +0 -33
- package/releases/2.34.0.json +0 -38
- package/releases/2.34.1.json +0 -34
- package/releases/2.34.2.json +0 -36
- package/releases/2.34.3.json +0 -35
- package/releases/2.35.0.json +0 -42
- package/releases/2.35.1.json +0 -43
- package/releases/2.35.2.json +0 -45
- package/releases/2.35.3.json +0 -46
- package/releases/2.36.0.json +0 -38
- package/releases/2.36.1.json +0 -33
- package/releases/2.37.0.json +0 -39
- package/releases/2.37.1.json +0 -33
- package/releases/2.37.2.json +0 -31
- package/releases/2.38.0.json +0 -40
- package/releases/2.39.0.json +0 -37
- package/releases/2.39.1.json +0 -32
- package/releases/2.4.0.json +0 -37
- package/releases/2.4.1.json +0 -35
- package/releases/2.40.0.json +0 -38
- package/releases/2.40.1.json +0 -30
- package/releases/2.41.0.json +0 -39
- package/releases/2.41.1.json +0 -33
- package/releases/2.41.2.json +0 -34
- package/releases/2.42.0.json +0 -36
- package/releases/2.43.0.json +0 -38
- package/releases/2.44.0.json +0 -36
- package/releases/2.44.1.json +0 -33
- package/releases/2.45.0.json +0 -35
- package/releases/2.46.0.json +0 -35
- package/releases/2.46.1.json +0 -30
- package/releases/2.46.2.json +0 -29
- package/releases/2.46.3.json +0 -30
- package/releases/2.47.0.json +0 -34
- package/releases/2.47.1.json +0 -31
- package/releases/2.47.2.json +0 -28
- package/releases/2.47.3.json +0 -29
- package/releases/2.47.4.json +0 -29
- package/releases/2.47.5.json +0 -29
- package/releases/2.48.0.json +0 -33
- package/releases/2.48.1.json +0 -30
- package/releases/2.48.2.json +0 -29
- package/releases/2.48.3.json +0 -32
- package/releases/2.48.4.json +0 -31
- package/releases/2.49.0.json +0 -35
- package/releases/2.49.1.json +0 -32
- package/releases/2.49.10.json +0 -34
- package/releases/2.49.11.json +0 -30
- package/releases/2.49.12.json +0 -30
- package/releases/2.49.13.json +0 -29
- package/releases/2.49.14.json +0 -30
- package/releases/2.49.2.json +0 -31
- package/releases/2.49.3.json +0 -31
- package/releases/2.49.4.json +0 -30
- package/releases/2.49.5.json +0 -31
- package/releases/2.49.6.json +0 -30
- package/releases/2.49.8.json +0 -33
- package/releases/2.49.9.json +0 -35
- package/releases/2.5.0.json +0 -37
- package/releases/2.50.0.json +0 -32
- package/releases/2.51.0.json +0 -32
- package/releases/2.52.0.json +0 -34
- package/releases/2.53.0.json +0 -34
- package/releases/2.54.0.json +0 -35
- package/releases/2.54.1.json +0 -29
- package/releases/2.54.4.json +0 -30
- package/releases/2.54.6.json +0 -30
- package/releases/2.55.0.json +0 -34
- package/releases/2.55.2.json +0 -31
- package/releases/2.55.3.json +0 -32
- package/releases/2.55.4.json +0 -30
- package/releases/2.55.5.json +0 -30
- package/releases/2.56.0.json +0 -32
- package/releases/2.57.0.json +0 -35
- package/releases/2.58.0.json +0 -37
- package/releases/2.58.1.json +0 -31
- package/releases/2.59.2.json +0 -33
- package/releases/2.59.4.json +0 -38
- package/releases/2.59.5.json +0 -40
- package/releases/2.59.6.json +0 -30
- package/releases/2.59.7.json +0 -32
- package/releases/2.6.0.json +0 -37
- package/releases/2.7.0.json +0 -37
- package/releases/2.7.1.json +0 -31
- package/releases/2.8.0.json +0 -32
- package/releases/2.8.1.json +0 -30
- package/releases/2.9.0.json +0 -33
- package/releases/2.9.1.json +0 -31
- package/releases/2.9.2.json +0 -33
- package/releases/2.9.3.json +0 -31
- package/releases/2.9.4.json +0 -37
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { applicationCode } from '../../runtime-meta';
|
|
3
|
+
import { useUnsavedChangesGuard } from '../../navigation-guard';
|
|
3
4
|
import { readPendingWorkflowSubmission, writePendingWorkflowSubmission, clearPendingWorkflowSubmission, workflowSubmissionScope, submissionLocatorStorage, standardProcessWasRejected } from '../../workflow-submission-recovery';
|
|
4
5
|
import { readPendingWorkflowTaskCommand, writePendingWorkflowTaskCommand, clearPendingWorkflowTaskCommand, workflowTaskCommandScope, workflowCommandTokenDigest, workflowTaskCommandWasRejected } from '../../workflow-task-command-recovery';
|
|
5
6
|
import { WorkflowTaskForm, useWorkflowTaskForm } from './WorkflowTaskForm';
|
|
@@ -14,7 +15,7 @@ import { Link, Navigate, useHref, useNavigate, useParams, useSearchParams, } fro
|
|
|
14
15
|
import { PlatformDirectoryPicker } from '../platform-fields/PlatformDirectoryPicker';
|
|
15
16
|
import { directoryStoredValues } from '../platform-fields/directory-value';
|
|
16
17
|
import { executeWorkflowOperation, executeWorkflowLaunchNamedOperation, loadWorkflowInstanceDetail, loadWorkflowRecordDetail, loadWorkflowDataAudit, loadWorkflowInstanceSurface, loadWorkflowLaunchSurface, loadWorkflowTaskSurface, loadWorkflowTaskDetail, loadWorkflowWorkCenter, answerBusinessProcessCommand, commitStandardProcess, resolveBusinessProcessOriginal, createNativeResourceClient, loadProcessCommandSurface, retryBusinessProcessCommand, uploadOperationManagedFile, } from '../../platform-client';
|
|
17
|
-
import { useWorkflowDefinition, } from '../../workflow-definitions';
|
|
18
|
+
import { useWorkflowDefinition, useWorkflowTaskFormBehavior, } from '../../workflow-definitions';
|
|
18
19
|
import { useResourceDefinitions } from '../../resource-definitions';
|
|
19
20
|
import { selectedSurfaceFields } from '../resource/resource-field-selection';
|
|
20
21
|
import { useRuntime, useOptionalRuntime } from '../../runtime';
|
|
@@ -29,7 +30,8 @@ import { PlatformAvatar } from '../PlatformAvatar';
|
|
|
29
30
|
import { SubtableField } from '../platform-fields/SubtableField';
|
|
30
31
|
import { assertNamedSubtableReadonlyFields, namedProcessFormValues, standardProcessFormValues } from './standard-process-values';
|
|
31
32
|
import { fieldWritable } from '../resource/resource-page-helpers';
|
|
32
|
-
import { workflowSubmissionFormProjection, workflowSubmissionPrefill, workflowSubmissionValueLinkage } from './workflow-submission-form';
|
|
33
|
+
import { workflowSubmissionFormInput, workflowSubmissionFormProjection, workflowSubmissionPrefill, workflowSubmissionValueLinkage, workflowSubmissionSubtableStates } from './workflow-submission-form';
|
|
34
|
+
import { validateDateTimeConstraints } from '../platform-fields/zoned-date-time';
|
|
33
35
|
/**
|
|
34
36
|
* An advanced task command has completed the current task and may have
|
|
35
37
|
* created a new task. Reading the old task Surface in that case is expected
|
|
@@ -182,7 +184,9 @@ function WorkflowSubtableValue({ detail, field, instanceId, variant, }) {
|
|
|
182
184
|
const order = subtable.surface.detail?.fieldOrder || [];
|
|
183
185
|
const fields = order.flatMap((key) => {
|
|
184
186
|
const item = subtable.surface.fields[key];
|
|
185
|
-
return item && item.system !== true
|
|
187
|
+
return item && item.system !== true && item.hidden !== true &&
|
|
188
|
+
item.type !== 'subtable' && key !== field.subtable?.foreignKey &&
|
|
189
|
+
key !== field.subtable?.orderField
|
|
186
190
|
? [{ key, ...item }]
|
|
187
191
|
: [];
|
|
188
192
|
});
|
|
@@ -394,6 +398,7 @@ function WorkflowOperations({ surface, variant, onRefresh, onCommandSuccess, pen
|
|
|
394
398
|
const mounted = useRef(false);
|
|
395
399
|
const busyRef = useRef(false);
|
|
396
400
|
const taskForm = useWorkflowTaskForm(surface.taskForm);
|
|
401
|
+
const taskFormBehavior = useWorkflowTaskFormBehavior(String(surface.instance.workflowCode || ''));
|
|
397
402
|
useEffect(() => { mounted.current = true; return () => { mounted.current = false; }; }, []);
|
|
398
403
|
useEffect(() => {
|
|
399
404
|
if (!settlement || request.current?.key !== settlement.key)
|
|
@@ -598,7 +603,7 @@ function WorkflowOperations({ surface, variant, onRefresh, onCommandSuccess, pen
|
|
|
598
603
|
return (order[left.key] ?? 10) - (order[right.key] ?? 10);
|
|
599
604
|
});
|
|
600
605
|
const secondary = operations.filter((operation) => operation.placement !== 'primary');
|
|
601
|
-
const content = surface.taskForm || commandNeedsRefresh || ((submitting || unknown) && !pendingLocator) || unknown || refreshFailure ? (_jsxs(_Fragment, { children: [commandNeedsRefresh && !unknown && !pendingLocator && !refreshFailure && _jsx(Alert, { type: "info", showIcon: true, title: "\u8BF7\u5237\u65B0\u64CD\u4F5C\u540E\u7EE7\u7EED\u529E\u7406", description: "\u9875\u9762\u505C\u7559\u8F83\u4E45\uFF0C\u9700\u91CD\u65B0\u786E\u8BA4\u5F53\u524D\u529E\u7406\u6743\u9650\u3002\u5237\u65B0\u4F1A\u4FDD\u7559\u5C1A\u672A\u4FDD\u5B58\u7684\u8F93\u5165\u3002", action: _jsx(Button, { disabled: locked, loading: submitting, onClick: () => void refreshConfirmed(), children: "\u5237\u65B0\u64CD\u4F5C" }) }), surface.taskForm && _jsx(WorkflowTaskForm, { controller: taskForm, disabled: locked, variant: variant, operationPending: submitting || unknown || Boolean(pendingLocator) || draftLocked || fileLocked, taskVersion: surface.task?.version ? Number(surface.task.version) : undefined, taskId: surface.task?.id ? String(surface.task.id) : undefined, draftDisabled: commandLocked, onRefresh: onRefresh, onDraftBusyChange: busy => { setDraftLocked(busy); onBusyChange(busy || fileLocked || busyRef.current); }, onFileBusyChange: busy => { setFileLocked(busy); onBusyChange(busy || draftLocked || busyRef.current); }, resourceCode: surface.presentation.businessDetail.resourceCode || undefined, recordId: surface.presentation.businessDetail.recordId || undefined }), (submitting || unknown) && !pendingLocator && _jsx(WorkflowPendingCommandGuard, {}), unknown && _jsx(Alert, { type: "warning", showIcon: true, title: "\u4FDD\u7559\u4E86\u539F\u63D0\u4EA4\u8BF7\u6C42", description: operationError || '提交结果待确认,请重试原请求或查询原结果。', action: _jsx(Button, { disabled: submitting, loading: submitting, onClick: () => void sendRequest(true), children: "\u91CD\u8BD5\u539F\u8BF7\u6C42" }) }), refreshFailure && _jsx(Alert, { type: "warning", showIcon: true, title: refreshFailure.outcome === 'succeeded'
|
|
606
|
+
const content = surface.taskForm || commandNeedsRefresh || ((submitting || unknown) && !pendingLocator) || unknown || refreshFailure ? (_jsxs(_Fragment, { children: [commandNeedsRefresh && !unknown && !pendingLocator && !refreshFailure && _jsx(Alert, { type: "info", showIcon: true, title: "\u8BF7\u5237\u65B0\u64CD\u4F5C\u540E\u7EE7\u7EED\u529E\u7406", description: "\u9875\u9762\u505C\u7559\u8F83\u4E45\uFF0C\u9700\u91CD\u65B0\u786E\u8BA4\u5F53\u524D\u529E\u7406\u6743\u9650\u3002\u5237\u65B0\u4F1A\u4FDD\u7559\u5C1A\u672A\u4FDD\u5B58\u7684\u8F93\u5165\u3002", action: _jsx(Button, { disabled: locked, loading: submitting, onClick: () => void refreshConfirmed(), children: "\u5237\u65B0\u64CD\u4F5C" }) }), surface.taskForm && _jsx(WorkflowTaskForm, { controller: taskForm, disabled: locked, variant: variant, valueLinkage: taskFormBehavior?.valueLinkage, linkageContext: { workflowCode: String(surface.instance.workflowCode || ''), nodeId: String(surface.task?.nodeId || ''), pageCode: surface.taskForm.pageCode }, operationPending: submitting || unknown || Boolean(pendingLocator) || draftLocked || fileLocked, taskVersion: surface.task?.version ? Number(surface.task.version) : undefined, taskId: surface.task?.id ? String(surface.task.id) : undefined, draftDisabled: commandLocked, onRefresh: onRefresh, onDraftBusyChange: busy => { setDraftLocked(busy); onBusyChange(busy || fileLocked || busyRef.current); }, onFileBusyChange: busy => { setFileLocked(busy); onBusyChange(busy || draftLocked || busyRef.current); }, resourceCode: surface.presentation.businessDetail.resourceCode || undefined, recordId: surface.presentation.businessDetail.recordId || undefined }), (submitting || unknown) && !pendingLocator && _jsx(WorkflowPendingCommandGuard, {}), unknown && _jsx(Alert, { type: "warning", showIcon: true, title: "\u4FDD\u7559\u4E86\u539F\u63D0\u4EA4\u8BF7\u6C42", description: operationError || '提交结果待确认,请重试原请求或查询原结果。', action: _jsx(Button, { disabled: submitting, loading: submitting, onClick: () => void sendRequest(true), children: "\u91CD\u8BD5\u539F\u8BF7\u6C42" }) }), refreshFailure && _jsx(Alert, { type: "warning", showIcon: true, title: refreshFailure.outcome === 'succeeded'
|
|
602
607
|
? '任务操作已成功,但资料刷新失败' : '本次未提交,最新资料读取失败', description: refreshFailure.message, action: _jsx(Button, { disabled: submitting, onClick: () => void refreshConfirmed(), children: "\u5237\u65B0\u8D44\u6599" }) })] })) : null;
|
|
603
608
|
const actions = (_jsxs(_Fragment, { children: [_jsxs("div", { className: `oxa-workflow-actions oxa-workflow-actions-${variant}`, children: [primary.map((operation) => (_jsx(Button, { danger: operation.emphasis === 'danger', disabled: locked || commandNeedsRefresh || taskForm.stale || taskForm.draftNeedsSave || !operation.enabled, onClick: () => selectOperation(operation), title: operation.disabledReason, type: operation.emphasis === 'primary' ? 'primary' : 'default', children: operation.label }, operation.key))), secondary.length > 0 && (_jsx(Button, { className: "oxa-workflow-more-trigger", disabled: locked || commandNeedsRefresh || taskForm.stale || taskForm.draftNeedsSave, icon: _jsx(EllipsisOutlined, {}), onClick: () => setMoreOpen((value) => !value), children: "\u66F4\u591A\u64CD\u4F5C" })), secondary.length > 0 && moreOpen && (_jsx("div", { className: "oxa-workflow-more-actions", children: secondary.map((operation) => (_jsx(Button, { disabled: locked || commandNeedsRefresh || taskForm.stale || taskForm.draftNeedsSave || !operation.enabled, onClick: () => {
|
|
604
609
|
setMoreOpen(false);
|
|
@@ -1318,11 +1323,27 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1318
1323
|
const [loadedSubjectRevision, setLoadedSubjectRevision] = useState();
|
|
1319
1324
|
const [localCommandId, setLocalCommandId] = useState('');
|
|
1320
1325
|
const [localSubjectId, setLocalSubjectId] = useState('');
|
|
1326
|
+
const [subjectDirty, setSubjectDirty] = useState(false);
|
|
1327
|
+
const [requirementDirty, setRequirementDirty] = useState(false);
|
|
1321
1328
|
const launchPagePath = useRef('');
|
|
1322
1329
|
const [fullScreen, setFullScreen] = useState(false);
|
|
1323
1330
|
const pathCommandId = useParams().commandId;
|
|
1324
1331
|
const commandId = onDismiss ? localCommandId : pathCommandId || searchParams.get('processCommandId') || '';
|
|
1325
1332
|
const subjectId = onDismiss ? localSubjectId : searchParams.get('subjectId') || '';
|
|
1333
|
+
const recoveryMustStay = Boolean(pendingSubmission && !recoveryPersisted);
|
|
1334
|
+
const navigationGuard = useUnsavedChangesGuard({
|
|
1335
|
+
when: subjectDirty || requirementDirty || loading || recoveryMustStay,
|
|
1336
|
+
preventNavigation: loading || recoveryMustStay,
|
|
1337
|
+
message: loading ? '正在提交,请等待当前操作结果。'
|
|
1338
|
+
: recoveryMustStay ? '提交结果尚未确认,恢复信息未能保存。请留在本页查询原操作。'
|
|
1339
|
+
: pendingSubmission ? '原提交结果尚未确认。离开后可返回查询原操作,请勿重复申请。'
|
|
1340
|
+
: '填写内容尚未提交,离开后将丢失。',
|
|
1341
|
+
});
|
|
1342
|
+
const acknowledgeSubmission = () => {
|
|
1343
|
+
setSubjectDirty(false);
|
|
1344
|
+
setRequirementDirty(false);
|
|
1345
|
+
navigationGuard.release();
|
|
1346
|
+
};
|
|
1326
1347
|
const newPageQuery = new URLSearchParams();
|
|
1327
1348
|
if (commandId)
|
|
1328
1349
|
newPageQuery.set('processCommandId', commandId);
|
|
@@ -1382,15 +1403,27 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1382
1403
|
const formProjection = useMemo(() => {
|
|
1383
1404
|
try {
|
|
1384
1405
|
const values = subjectDefinition ? normalizeFormValues(watchedFormValues || {}, subjectDefinition.surface) : {};
|
|
1385
|
-
|
|
1406
|
+
const subtableStates = workflowSubmissionSubtableStates(subjectDefinition?.surface || { fields: {} }, namedIntent?.ownedSubject, formOptions?.subtableFieldState?.(structuredClone(values)));
|
|
1407
|
+
for (const [code, constraints] of Object.entries(formOptions?.dateTimeConstraints || {})) {
|
|
1408
|
+
if (!fields.some(field => field.key === code && ['datetime', 'datetime-range'].includes(field.type)))
|
|
1409
|
+
throw new Error('OPENXIANGDA_WORKFLOW_FORM_DATE_FIELD_UNAVAILABLE');
|
|
1410
|
+
validateDateTimeConstraints(constraints);
|
|
1411
|
+
}
|
|
1412
|
+
const fieldHints = formOptions?.fieldHints?.(structuredClone(values)) || {};
|
|
1413
|
+
if (Object.keys(fieldHints).some(code => !fields.some(field => field.key === code)))
|
|
1414
|
+
throw new Error('OPENXIANGDA_WORKFLOW_FORM_FIELD_UNAVAILABLE');
|
|
1415
|
+
return { ...workflowSubmissionFormProjection(fields, values, formOptions?.fieldState?.(values)), subtableStates, fieldHints, error: false };
|
|
1386
1416
|
}
|
|
1387
1417
|
catch {
|
|
1388
|
-
return { fields, values: {}, hiddenValues: {}, error: true };
|
|
1418
|
+
return { fields, values: {}, hiddenValues: {}, subtableStates: {}, fieldHints: {}, error: true };
|
|
1389
1419
|
}
|
|
1390
|
-
}, [fields, formOptions?.fieldState, subjectDefinition, watchedFormValues]);
|
|
1420
|
+
}, [fields, formOptions?.fieldState, formOptions?.subtableFieldState, formOptions?.dateTimeConstraints, formOptions?.fieldHints, namedIntent?.ownedSubject, subjectDefinition, watchedFormValues]);
|
|
1391
1421
|
const prefillContext = JSON.stringify([recoveryScope, identity.environment.activeAppVersionId, submissionMode, subjectId]);
|
|
1392
1422
|
useEffect(() => { setLinkageError(false); }, [prefillContext]);
|
|
1423
|
+
useEffect(() => { setSubjectDirty(false); }, [prefillContext]);
|
|
1393
1424
|
const onValuesChange = (changed, values) => {
|
|
1425
|
+
if (!loading && !commandId && !pendingSubmission)
|
|
1426
|
+
setSubjectDirty(true);
|
|
1394
1427
|
if (!formOptions?.valueLinkage || loading || commandId || pendingSubmission || !subjectDefinition)
|
|
1395
1428
|
return;
|
|
1396
1429
|
try {
|
|
@@ -1425,11 +1458,23 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1425
1458
|
useEffect(() => {
|
|
1426
1459
|
if (loading || commandId || pendingSubmission || !launchSurface || formProjection.error || !subjectDefinition)
|
|
1427
1460
|
return;
|
|
1428
|
-
|
|
1461
|
+
// Prefill and linkage may have written the controller since this render.
|
|
1462
|
+
// Recompute visibility before clearing hidden values so an old watch snapshot
|
|
1463
|
+
// cannot erase newly supplied source rows or other conditional defaults.
|
|
1464
|
+
const current = normalizeFormValues(subjectForm.getFieldsValue(true), subjectDefinition.surface);
|
|
1465
|
+
let hidden;
|
|
1466
|
+
try {
|
|
1467
|
+
hidden = workflowSubmissionFormProjection(fields, current, formOptions?.fieldState?.(current)).hiddenValues;
|
|
1468
|
+
}
|
|
1469
|
+
catch {
|
|
1470
|
+
// The next watched projection displays the rule error; preserve the input.
|
|
1471
|
+
return;
|
|
1472
|
+
}
|
|
1473
|
+
const values = normalizeRecordForForm(hidden, subjectDefinition.surface);
|
|
1429
1474
|
const changes = Object.entries(values).filter(([key, value]) => JSON.stringify(subjectForm.getFieldValue(key)) !== JSON.stringify(value));
|
|
1430
1475
|
if (changes.length)
|
|
1431
1476
|
subjectForm.setFields(changes.map(([name, value]) => ({ name, value, errors: [] })));
|
|
1432
|
-
}, [commandId, formProjection, launchSurface, loading, pendingSubmission, subjectDefinition, subjectForm]);
|
|
1477
|
+
}, [commandId, fields, formOptions?.fieldState, formProjection, launchSurface, loading, pendingSubmission, subjectDefinition, subjectForm]);
|
|
1433
1478
|
useEffect(() => {
|
|
1434
1479
|
let active = true;
|
|
1435
1480
|
setLaunchSurface(null);
|
|
@@ -1670,8 +1715,13 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1670
1715
|
};
|
|
1671
1716
|
}, [commandId, processSurface?.subject.recordId, subjectDefinition, subjectForm]);
|
|
1672
1717
|
const drawerBusy = loading || Boolean(commandId && (!processSurface || ['accepted', 'resolving', 'ready', 'starting', 'retry_wait'].includes(processSurface.command.status)) && !processError);
|
|
1673
|
-
const dismissDrawer = () => {
|
|
1674
|
-
|
|
1718
|
+
const dismissDrawer = () => {
|
|
1719
|
+
if (!submitInFlight.current && !drawerBusy)
|
|
1720
|
+
navigationGuard.confirmNavigation(() => {
|
|
1721
|
+
acknowledgeSubmission();
|
|
1722
|
+
onDismiss?.();
|
|
1723
|
+
});
|
|
1724
|
+
};
|
|
1675
1725
|
const frame = (content) => onDismiss ? _jsx(Drawer, { open: true, title: definition?.title || '新增流程申请', closable: false, rootClassName: "oxa-resource-drawer oxa-workflow-launch-drawer", size: fullScreen || variant === 'mobile' ? '100vw' : 'min(850px, calc(100vw - 48px))', styles: { body: { padding: 0, overflow: 'auto' } }, keyboard: !drawerBusy, mask: { closable: !drawerBusy }, onClose: dismissDrawer, extra: _jsxs(Space, { size: 4, children: [_jsx(Button, { type: "text", "aria-label": fullScreen ? '退出全屏' : '全屏', icon: fullScreen ? _jsx(CompressOutlined, {}) : _jsx(ExpandOutlined, {}), onClick: () => setFullScreen(value => !value) }), launchPagePath.current && _jsx(Tooltip, { title: commandId ? '新开页面继续查看当前申请' : '新开页面(未提交内容不会带入)', children: _jsx(Button, { type: "text", "aria-label": "\u65B0\u5F00\u9875\u9762", icon: _jsx(ExportOutlined, {}), href: newPageHref, target: "_blank", rel: "noopener noreferrer", disabled: loading }) }), _jsx(Button, { type: "text", "aria-label": "\u5173\u95ED", disabled: drawerBusy, icon: _jsx(CloseOutlined, {}), onClick: dismissDrawer })] }), children: content }) : variant === 'desktop' ? (_jsx("div", { className: "oxa-workflow-desktop-page oxa-workflow-submission-standalone-page", children: content })) : content;
|
|
1676
1726
|
const clearOriginal = (attempt) => {
|
|
1677
1727
|
clearPendingWorkflowSubmission(submissionLocatorStorage(), recoveryScope, attempt.idempotencyKey);
|
|
@@ -1686,6 +1736,7 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1686
1736
|
if (activeRecoveryScope.current !== recoveryScope)
|
|
1687
1737
|
return;
|
|
1688
1738
|
clearOriginal(attempt);
|
|
1739
|
+
acknowledgeSubmission();
|
|
1689
1740
|
if (onDismiss) {
|
|
1690
1741
|
setLocalCommandId(id);
|
|
1691
1742
|
return;
|
|
@@ -1806,8 +1857,9 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1806
1857
|
setRecoveryObservedAbsent(false);
|
|
1807
1858
|
};
|
|
1808
1859
|
try {
|
|
1809
|
-
const
|
|
1810
|
-
|
|
1860
|
+
const entered = workflowSubmissionFormInput(fields, subjectForm.getFieldsValue(true), values);
|
|
1861
|
+
const encoded = namedIntent ? namedProcessFormValues(entered, subjectDefinition.surface, resources, namedIntent.ownedSubject, formOptions?.subtableReadonlyFields, formOptions?.subtableReadonlyInputFields)
|
|
1862
|
+
: standardProcessFormValues(entered, subjectDefinition.surface, resources, (field, mode) => fieldWritable(field, mode === 'create' ? 'create' : 'edit', hasCapability, identity.isAppSuperAdmin));
|
|
1811
1863
|
const data = workflowSubmissionFormProjection(fields, encoded, formOptions?.fieldState?.(encoded)).values;
|
|
1812
1864
|
const signature = JSON.stringify({ workflowCode, subjectId, environmentKey: identity.environment.key, submissionMode, data });
|
|
1813
1865
|
if (submissionAttempt.current?.signature !== signature) {
|
|
@@ -1841,6 +1893,7 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1841
1893
|
clearOriginal(dispatched);
|
|
1842
1894
|
if (activeRecoveryScope.current !== recoveryScope)
|
|
1843
1895
|
return;
|
|
1896
|
+
acknowledgeSubmission();
|
|
1844
1897
|
if (outcome.kind === 'workflow-command') {
|
|
1845
1898
|
if (onDismiss) {
|
|
1846
1899
|
setLocalCommandId(outcome.command.id);
|
|
@@ -1887,6 +1940,7 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1887
1940
|
clearOriginal(dispatched);
|
|
1888
1941
|
if (activeRecoveryScope.current !== recoveryScope)
|
|
1889
1942
|
return;
|
|
1943
|
+
acknowledgeSubmission();
|
|
1890
1944
|
if (onDismiss) {
|
|
1891
1945
|
setLocalCommandId(command.id);
|
|
1892
1946
|
return;
|
|
@@ -1927,6 +1981,8 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1927
1981
|
setProcessSurface(null);
|
|
1928
1982
|
setProcessRefreshAttempt(value => value + 1);
|
|
1929
1983
|
requirementForm.resetFields();
|
|
1984
|
+
setRequirementDirty(false);
|
|
1985
|
+
navigationGuard.release();
|
|
1930
1986
|
}
|
|
1931
1987
|
catch (error) {
|
|
1932
1988
|
message.error(errorMessage(error, '补充发起信息失败'));
|
|
@@ -1957,37 +2013,43 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1957
2013
|
}
|
|
1958
2014
|
};
|
|
1959
2015
|
const selectMode = (nextMode) => {
|
|
1960
|
-
if (!generatedNamedSubmission?.[nextMode] || submitInFlight.current || commandId)
|
|
1961
|
-
return;
|
|
1962
|
-
setSubmissionMode(nextMode);
|
|
1963
|
-
setCompletion(null);
|
|
1964
|
-
subjectForm.resetFields();
|
|
1965
|
-
if (onDismiss) {
|
|
1966
|
-
setLocalSubjectId('');
|
|
2016
|
+
if (nextMode === submissionMode || !generatedNamedSubmission?.[nextMode] || submitInFlight.current || commandId || pendingSubmission)
|
|
1967
2017
|
return;
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
2018
|
+
navigationGuard.confirmNavigation(() => {
|
|
2019
|
+
acknowledgeSubmission();
|
|
2020
|
+
setSubmissionMode(nextMode);
|
|
2021
|
+
setCompletion(null);
|
|
2022
|
+
subjectForm.resetFields();
|
|
2023
|
+
if (onDismiss) {
|
|
2024
|
+
setLocalSubjectId('');
|
|
2025
|
+
return;
|
|
2026
|
+
}
|
|
2027
|
+
const next = new URLSearchParams(searchParams);
|
|
2028
|
+
next.delete('processCommandId');
|
|
2029
|
+
if (nextMode === 'create')
|
|
2030
|
+
next.delete('subjectId');
|
|
2031
|
+
setSearchParams(next, { replace: true });
|
|
2032
|
+
});
|
|
1974
2033
|
};
|
|
1975
2034
|
const selectSubject = (nextSubjectId) => {
|
|
1976
|
-
if (submitInFlight.current || commandId)
|
|
2035
|
+
if ((nextSubjectId || '') === subjectId || submitInFlight.current || commandId || pendingSubmission)
|
|
1977
2036
|
return;
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
next.
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
2037
|
+
navigationGuard.confirmNavigation(() => {
|
|
2038
|
+
acknowledgeSubmission();
|
|
2039
|
+
setCompletion(null);
|
|
2040
|
+
subjectForm.resetFields();
|
|
2041
|
+
if (onDismiss) {
|
|
2042
|
+
setLocalSubjectId(nextSubjectId || '');
|
|
2043
|
+
return;
|
|
2044
|
+
}
|
|
2045
|
+
const next = new URLSearchParams(searchParams);
|
|
2046
|
+
next.delete('processCommandId');
|
|
2047
|
+
if (nextSubjectId)
|
|
2048
|
+
next.set('subjectId', nextSubjectId);
|
|
2049
|
+
else
|
|
2050
|
+
next.delete('subjectId');
|
|
2051
|
+
setSearchParams(next, { replace: true });
|
|
2052
|
+
});
|
|
1991
2053
|
};
|
|
1992
2054
|
const launchControls = generatedNamedSubmission ? (_jsxs(Space, { direction: "vertical", size: "middle", style: { width: '100%' }, children: [generatedNamedSubmission.create && generatedNamedSubmission.existing ? (_jsx(Segmented, { onChange: value => selectMode(value), options: [
|
|
1993
2055
|
{ label: '新建并提交', value: 'create' },
|
|
@@ -1996,11 +2058,17 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
1996
2058
|
const uploadOperationCode = namedIntent?.operationCode || definition.processOperationCode;
|
|
1997
2059
|
const fieldRenderers = uploadOperationCode
|
|
1998
2060
|
? {
|
|
2061
|
+
dateTimeConstraints: formOptions?.dateTimeConstraints,
|
|
2062
|
+
renderExtra: ({ field }) => formProjection.fieldHints[field.key],
|
|
1999
2063
|
renderSubtable: ({ field, disabled, operation, recordId }) => {
|
|
2000
2064
|
const grant = namedIntent?.ownedSubject?.subtables.find(table => table.fieldCode === field.key);
|
|
2001
|
-
assertNamedSubtableReadonlyFields(subjectDefinition.surface, namedIntent?.ownedSubject, formOptions?.subtableReadonlyFields || {});
|
|
2065
|
+
assertNamedSubtableReadonlyFields(subjectDefinition.surface, namedIntent?.ownedSubject, formOptions?.subtableReadonlyFields || {}, formOptions?.subtableFixedRows);
|
|
2066
|
+
assertNamedSubtableReadonlyFields(subjectDefinition.surface, namedIntent?.ownedSubject, formOptions?.subtableReadonlyInputFields || {});
|
|
2002
2067
|
return _jsx(SubtableField, { field: field, disabled: disabled, operation: operation, parentRecordId: recordId, mobile: variant === 'mobile', ...(namedIntent && grant ? { launch: { fieldCodes: grant.fieldCodes,
|
|
2003
|
-
readonlyFieldCodes: formOptions?.subtableReadonlyFields?.[field.key],
|
|
2068
|
+
readonlyFieldCodes: [...(formOptions?.subtableReadonlyFields?.[field.key] || []), ...(formOptions?.subtableReadonlyInputFields?.[field.key] || [])],
|
|
2069
|
+
fieldState: formProjection.subtableStates[field.key],
|
|
2070
|
+
fixedRows: formOptions?.subtableFixedRows?.includes(field.key),
|
|
2071
|
+
fileResourceCodes: formOptions?.fileResourceCodes,
|
|
2004
2072
|
reference: { workflowCode: definition.code, operationCode: namedIntent.operationCode, subtableFieldCode: field.key },
|
|
2005
2073
|
upload: (childField, file) => uploadOperationManagedFile({
|
|
2006
2074
|
operationCode: uploadOperationCode, resourceCode: field.subtable.resourceCode,
|
|
@@ -2009,6 +2077,7 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
2009
2077
|
} } : {}) });
|
|
2010
2078
|
},
|
|
2011
2079
|
...(namedIntent ? { referenceLaunch: { workflowCode: definition.code, operationCode: namedIntent.operationCode } } : {}),
|
|
2080
|
+
fileResourceCodes: formOptions?.fileResourceCodes,
|
|
2012
2081
|
candidateScopeValues: { ...formOptions?.candidateScopeValues, ...formProjection.values },
|
|
2013
2082
|
upload: async (field, file) => await uploadOperationManagedFile({
|
|
2014
2083
|
operationCode: uploadOperationCode,
|
|
@@ -2054,13 +2123,14 @@ export function WorkflowSubmissionPage({ instancePath, workflowCode: declaredWor
|
|
|
2054
2123
|
onBack: onDismiss ? dismissDrawer : () => navigate(-1),
|
|
2055
2124
|
onSubmit: submit,
|
|
2056
2125
|
onValuesChange,
|
|
2126
|
+
onRequirementsChange: () => setRequirementDirty(true),
|
|
2057
2127
|
onAnswer: answer,
|
|
2058
2128
|
onRetry: retry,
|
|
2059
2129
|
onRefresh: () => { setProcessError(null); setProcessRefreshAttempt(value => value + 1); },
|
|
2060
2130
|
};
|
|
2061
2131
|
return frame(variant === 'mobile' ? (_jsx(MobileProcessSubmissionRenderer, { ...shared })) : (_jsx(DesktopProcessSubmissionRenderer, { ...shared })));
|
|
2062
2132
|
}
|
|
2063
|
-
function ProcessCommandPanel({ form, surface, error, loading, onAnswer, onRetry, onRefresh, }) {
|
|
2133
|
+
function ProcessCommandPanel({ form, surface, error, loading, onAnswer, onRetry, onRefresh, onValuesChange, }) {
|
|
2064
2134
|
if (error) {
|
|
2065
2135
|
return (_jsx(Alert, { description: "\u8BF7\u5237\u65B0\u63D0\u4EA4\u72B6\u6001\u786E\u8BA4\u7ED3\u679C\uFF0C\u5F53\u524D\u7533\u8BF7\u4E0D\u4F1A\u91CD\u590D\u53D1\u8D77\u3002", action: _jsx(Button, { onClick: onRefresh, children: "\u5237\u65B0\u63D0\u4EA4\u72B6\u6001" }), message: "\u6682\u65F6\u65E0\u6CD5\u786E\u8BA4\u7533\u8BF7\u72B6\u6001", showIcon: true, type: "warning" }));
|
|
2066
2136
|
}
|
|
@@ -2070,7 +2140,7 @@ function ProcessCommandPanel({ form, surface, error, loading, onAnswer, onRetry,
|
|
|
2070
2140
|
if (!['awaiting_input', 'cancelled', 'dead_letter'].includes(command.status)) {
|
|
2071
2141
|
return null;
|
|
2072
2142
|
}
|
|
2073
|
-
return (_jsxs("div", { className: "oxa-workflow-submission-followup", children: [command.status === 'awaiting_input' ? (_jsx(Card, { title: "\u8FD8\u9700\u8981\u8865\u5145\u4E00\u4E9B\u4FE1\u606F", children: _jsxs(Form, { form: form, layout: "vertical", onFinish: values => void onAnswer(values), children: [_jsx(RequirementFields, { requirements: surface.requirements }), _jsx(Button, { htmlType: "submit", loading: loading, type: "primary", children: "\u63D0\u4EA4\u8865\u5145\u4FE1\u606F" })] }) })) : null, ['cancelled', 'dead_letter'].includes(command.status) ? (_jsx(Result, { extra: surface.resume.retry ? (_jsx(Button, { loading: loading, onClick: () => void onRetry(), type: "primary", children: "\u91CD\u65B0\u5C1D\u8BD5" })) : null, status: "error", subTitle: "\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF1B\u5982\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002", title: "\u7533\u8BF7\u6682\u672A\u53D1\u8D77\u6210\u529F" })) : null] }));
|
|
2143
|
+
return (_jsxs("div", { className: "oxa-workflow-submission-followup", children: [command.status === 'awaiting_input' ? (_jsx(Card, { title: "\u8FD8\u9700\u8981\u8865\u5145\u4E00\u4E9B\u4FE1\u606F", children: _jsxs(Form, { form: form, layout: "vertical", onValuesChange: onValuesChange, onFinish: values => void onAnswer(values), children: [_jsx(RequirementFields, { requirements: surface.requirements }), _jsx(Button, { htmlType: "submit", loading: loading, type: "primary", children: "\u63D0\u4EA4\u8865\u5145\u4FE1\u606F" })] }) })) : null, ['cancelled', 'dead_letter'].includes(command.status) ? (_jsx(Result, { extra: surface.resume.retry ? (_jsx(Button, { loading: loading, onClick: () => void onRetry(), type: "primary", children: "\u91CD\u65B0\u5C1D\u8BD5" })) : null, status: "error", subTitle: "\u8BF7\u7A0D\u540E\u91CD\u8BD5\uFF1B\u5982\u95EE\u9898\u6301\u7EED\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458\u3002", title: "\u7533\u8BF7\u6682\u672A\u53D1\u8D77\u6210\u529F" })) : null] }));
|
|
2074
2144
|
}
|
|
2075
2145
|
function StandardProcessSubmissionRenderer(props) {
|
|
2076
2146
|
const groups = [...props.fields.reduce((groups, field) => {
|
|
@@ -2080,7 +2150,7 @@ function StandardProcessSubmissionRenderer(props) {
|
|
|
2080
2150
|
}, new Map())].map(([section, fields]) => ({ section, fields }));
|
|
2081
2151
|
if (props.completion)
|
|
2082
2152
|
return _jsx(Result, { status: "success", title: "\u63D0\u4EA4\u6210\u529F", extra: _jsx(Button, { onClick: props.onBack, children: "\u8FD4\u56DE" }) });
|
|
2083
|
-
return _jsxs("div", { className: props.variant === 'mobile' ? 'oxa-mobile-page oxa-mobile-entry oxa-workflow-submission-mobile' : 'oxa-workflow-entry', children: [!props.embedded && _jsxs("header", { className: props.variant === 'mobile' ? 'oxa-mobile-header' : 'oxa-workflow-entry-header', children: [_jsx(Button, { type: "text", "aria-label": "\u8FD4\u56DE", icon: _jsx(ArrowLeftOutlined, {}), disabled: props.processing, onClick: props.onBack }), _jsx("h3", { children: props.title }), _jsx("span", {})] }), _jsx(ResourceFormContent, { variant: props.variant, mode: props.mutationMode === 'update' ? 'edit' : 'create', resourceCode: props.subjectDefinition.code, recordId: props.recordId, groups: groups, expectedRevision: props.expectedRevision, initialValues: props.mutationMode === 'update' ? undefined : Object.fromEntries(props.fields.filter(field => field.type === 'user.multiple').map(field => [field.key, []])), form: props.subjectForm, busy: props.loading || props.submitted, pending: props.loading || props.processing, submitDisabled: props.submitted || Boolean(props.formError), submitLabel: "\u63D0\u4EA4\u5BA1\u6279", canWriteField: () => true, renderers: props.fieldRenderers, feedback: _jsxs(_Fragment, { children: [props.formIntro, props.launchControls, props.formError && _jsx(Alert, { type: "error", showIcon: true, title: props.formError }), props.processing && _jsx(Alert, { type: "info", showIcon: true, title: "\u6B63\u5728\u63D0\u4EA4\u7533\u8BF7\uFF0C\u8BF7\u7A0D\u5019\u2026" })] }), onValuesChange: props.onValuesChange, onSubmit: values => void props.onSubmit(values) }), _jsx(ProcessCommandPanel, { error: props.processError, form: props.requirementForm, loading: props.loading, onAnswer: props.onAnswer, onRetry: props.onRetry, onRefresh: props.onRefresh, surface: props.processSurface })] });
|
|
2153
|
+
return _jsxs("div", { className: props.variant === 'mobile' ? 'oxa-mobile-page oxa-mobile-entry oxa-workflow-submission-mobile' : 'oxa-workflow-entry', children: [!props.embedded && _jsxs("header", { className: props.variant === 'mobile' ? 'oxa-mobile-header' : 'oxa-workflow-entry-header', children: [_jsx(Button, { type: "text", "aria-label": "\u8FD4\u56DE", icon: _jsx(ArrowLeftOutlined, {}), disabled: props.processing, onClick: props.onBack }), _jsx("h3", { children: props.title }), _jsx("span", {})] }), _jsx(ResourceFormContent, { variant: props.variant, mode: props.mutationMode === 'update' ? 'edit' : 'create', resourceCode: props.subjectDefinition.code, recordId: props.recordId, groups: groups, expectedRevision: props.expectedRevision, initialValues: props.mutationMode === 'update' ? undefined : Object.fromEntries(props.fields.filter(field => field.type === 'user.multiple').map(field => [field.key, []])), form: props.subjectForm, busy: props.loading || props.submitted, pending: props.loading || props.processing, submitDisabled: props.submitted || Boolean(props.formError), submitLabel: "\u63D0\u4EA4\u5BA1\u6279", canWriteField: () => true, renderers: props.fieldRenderers, feedback: _jsxs(_Fragment, { children: [props.formIntro, props.launchControls, props.formError && _jsx(Alert, { type: "error", showIcon: true, title: props.formError }), props.processing && _jsx(Alert, { type: "info", showIcon: true, title: "\u6B63\u5728\u63D0\u4EA4\u7533\u8BF7\uFF0C\u8BF7\u7A0D\u5019\u2026" })] }), onValuesChange: props.onValuesChange, onSubmit: values => void props.onSubmit(values) }), _jsx(ProcessCommandPanel, { error: props.processError, form: props.requirementForm, loading: props.loading, onValuesChange: props.onRequirementsChange, onAnswer: props.onAnswer, onRetry: props.onRetry, onRefresh: props.onRefresh, surface: props.processSurface })] });
|
|
2084
2154
|
}
|
|
2085
2155
|
function DesktopProcessSubmissionRenderer(props) { return _jsx(StandardProcessSubmissionRenderer, { ...props, variant: "desktop" }); }
|
|
2086
2156
|
function MobileProcessSubmissionRenderer(props) { return _jsx(StandardProcessSubmissionRenderer, { ...props, variant: "mobile" }); }
|