openxiangda 2.0.0-alpha.104 → 2.0.0-alpha.106
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/README.md +23 -20
- package/bin/run.js +1 -0
- package/dist/browser/components/resource/RecordDetailFrame.js +1 -1
- package/dist/browser/components/resource/RecordDetailFrame.js.map +1 -1
- package/dist/browser/components/workflow/StandardWorkflowPages.d.ts.map +1 -1
- package/dist/browser/components/workflow/StandardWorkflowPages.js +25 -31
- package/dist/browser/components/workflow/StandardWorkflowPages.js.map +1 -1
- package/dist/browser/record-detail.css +3 -2
- package/documentation/AGENTS.md +23 -0
- package/documentation/administration.md +27 -0
- package/documentation/application-foundation.md +162 -0
- package/documentation/appspec.md +92 -0
- package/documentation/backend.md +85 -0
- package/documentation/concepts.md +61 -0
- package/documentation/data-authz.md +58 -0
- package/documentation/delivery.md +72 -0
- package/documentation/development.md +28 -0
- package/documentation/field-components.md +204 -0
- package/documentation/frontend.md +269 -0
- package/documentation/getting-started.md +59 -0
- package/documentation/manifest.json +108 -0
- package/documentation/public-access.md +151 -0
- package/documentation/reference/cli.md +26 -0
- package/documentation/reference/mcp.md +548 -0
- package/documentation/testing.md +51 -0
- package/documentation/upgrading.md +19 -0
- package/documentation/workflow-events.md +181 -0
- package/package.json +9 -8
- package/skills/manifest.json +2 -2
- package/skills/openxiangda-v2/SKILL.md +39 -52
- package/skills/openxiangda-v2/agents/openai.yaml +2 -2
- package/skills/openxiangda-v2/references/administration.md +27 -0
- package/skills/openxiangda-v2/references/application-foundation.md +162 -0
- package/skills/openxiangda-v2/references/appspec.md +71 -46
- package/skills/openxiangda-v2/references/architecture.md +57 -5
- package/skills/openxiangda-v2/references/backend.md +58 -252
- package/skills/openxiangda-v2/references/commands.md +23 -19
- package/skills/openxiangda-v2/references/data-authz.md +33 -389
- package/skills/openxiangda-v2/references/delivery.md +72 -49
- package/skills/openxiangda-v2/references/discovery.md +24 -11
- package/skills/openxiangda-v2/references/field-components.md +204 -0
- package/skills/openxiangda-v2/references/frontend.md +254 -280
- package/skills/openxiangda-v2/references/getting-started.md +59 -0
- package/skills/openxiangda-v2/references/mcp.md +548 -0
- package/skills/openxiangda-v2/references/public-access.md +76 -84
- package/skills/openxiangda-v2/references/testing.md +33 -56
- package/skills/openxiangda-v2/references/upgrading.md +19 -0
- package/skills/openxiangda-v2/references/workflow-events.md +143 -300
- package/skills/openxiangda-v2/references/workspace.md +0 -64
package/README.md
CHANGED
|
@@ -1,26 +1,29 @@
|
|
|
1
|
-
#
|
|
1
|
+
# OpenXiangda 2.0
|
|
2
2
|
|
|
3
|
-
`openxiangda`
|
|
4
|
-
stable subpaths instead of depending on physical implementation packages:
|
|
3
|
+
`openxiangda` 是应用开发统一安装的根包,提供 CLI、MCP、中文使用资料及同版本的 `openxiangda-v2` Skill。已有项目使用锁定版本;新项目使用明确的 2.0 版本。不要用未指定版本的全局命令判断项目行为。
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
```bash
|
|
6
|
+
pnpm openxiangda context --json
|
|
7
|
+
pnpm openxiangda docs
|
|
8
|
+
pnpm openxiangda docs getting-started
|
|
9
|
+
pnpm openxiangda skill install --workspace . --force
|
|
10
|
+
pnpm openxiangda dev
|
|
11
|
+
```
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
`openxiangda-v2` AI Skill distribution. OpenXiangda 1.x remains on the 1.x
|
|
14
|
-
version line and is not a compatibility target for this package.
|
|
13
|
+
应用导入统一子路径:
|
|
15
14
|
|
|
16
|
-
|
|
15
|
+
| 子路径 | 用途 |
|
|
16
|
+
| --- | --- |
|
|
17
|
+
| `openxiangda/config` | 模型、任务页、权限与应用声明 |
|
|
18
|
+
| `openxiangda/core` | 数据客户端与契约 |
|
|
19
|
+
| `openxiangda/react` | PC 页面、管理入口与标准组件 |
|
|
20
|
+
| `openxiangda/mobile` | 手机端组件 |
|
|
21
|
+
| `openxiangda/field-kit` | 字段、表单与详情 |
|
|
22
|
+
| `openxiangda/nest` | 按需启用的业务后端 |
|
|
23
|
+
| `openxiangda/testing` | 权限与业务测试辅助 |
|
|
17
24
|
|
|
18
|
-
`
|
|
19
|
-
locale and contextual message/notification support. Standalone component consumers
|
|
20
|
-
can wrap their content in `OpenXiangdaUiProvider`. Custom admin pages use
|
|
21
|
-
`OpenXiangdaAdminPage`; business fields use `openxiangda/field-kit`.
|
|
25
|
+
默认在本地运行 React,连接远端测试平台;标准 CRUD、审批和通知无需自建后端。`check` 是统一校验入口;`deploy` 已包含校验。生产通过 `deploy --environment production --from <test-deployment-id>` 复用成功测试版本。
|
|
22
26
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
stylesheet; do not import the upstream mobile root entry's document reset.
|
|
27
|
+
MCP 使用 `pnpm exec openxiangda --mcp-stdio --cwd <工作区绝对路径>`。先读取 workspace_context,再使用 docs_read 查询同版本中文正文。完整参数可运行 `pnpm openxiangda docs mcp`。
|
|
28
|
+
|
|
29
|
+
`OpenXiangdaApplication` 包含默认 Ant Design 样式、中文语言和消息上下文;独立组件可使用 `OpenXiangdaUiProvider`。管理页面使用 `OpenXiangdaAdminPage`,字段使用 Field Kit。自定义样式限制在组件内,应用负责全局重置;手机端只导入本包的局部样式,不引入上游移动库的全局重置。
|
package/bin/run.js
CHANGED
|
@@ -9,6 +9,7 @@ const packageManifest = JSON.parse(
|
|
|
9
9
|
);
|
|
10
10
|
process.env.OPENXIANGDA_DISTRIBUTION_NAME = packageManifest.name;
|
|
11
11
|
process.env.OPENXIANGDA_DISTRIBUTION_VERSION = packageManifest.version;
|
|
12
|
+
process.env.OPENXIANGDA_DOCUMENTATION_ROOT = join(packageRoot, 'documentation');
|
|
12
13
|
const packagedSkills = join(packageRoot, 'skills');
|
|
13
14
|
if (existsSync(packagedSkills)) {
|
|
14
15
|
process.env.OPENXIANGDA_SKILLS_ROOT ||= packagedSkills;
|
|
@@ -16,7 +16,7 @@ export function RecordDetailFrame({ variant = 'desktop', title, heading, status,
|
|
|
16
16
|
const fullScreen = drawerState?.fullScreen ?? localFullScreen;
|
|
17
17
|
const setFullScreen = drawerState?.setFullScreen || setLocalFullScreen;
|
|
18
18
|
const time = detailTime(updatedAt);
|
|
19
|
-
const content = _jsxs("section", { className: `oxa-record-detail oxa-record-detail-${variant} ${drawer ? 'is-drawer' : 'is-page'} ${editing ? 'is-editing' : ''}`, "data-detail-frame": "standard", children: [_jsx("header", { className: "oxa-record-detail-header", children: _jsxs("div", { className: "oxa-record-detail-width", children: [_jsxs("div", { className: "oxa-record-detail-heading", children: [!drawer && _jsx(Button, { type: "text", "aria-label": "\u8FD4\u56DE", icon: _jsx(ArrowLeftOutlined, {}), disabled: busy, onClick: onClose }), _jsx("h2", { children: editing ? '编辑数据' : title })] }), _jsxs(Space, { size: 4, children: [onEdit && !editing && _jsx(Button, { type: "link", onClick: onEdit, children: "\u7F16\u8F91" }), drawer && _jsx(Tooltip, { title: fullScreen ? '退出全屏' : '全屏', children: _jsx(Button, { type: "text", "aria-label": fullScreen ? '退出全屏' : '全屏', icon: fullScreen ? _jsx(CompressOutlined, {}) : _jsx(ExpandOutlined, {}), onClick: () => setFullScreen(!fullScreen) }) }), drawer && newPageHref && !editing && _jsx(Tooltip, { title: "\u65B0\u5F00\u9875\u9762", children: _jsx(Button, { type: "text", "aria-label": "\u65B0\u5F00\u9875\u9762", icon: _jsx(ExportOutlined, {}), href: newPageHref, target: "_blank", rel: "noopener noreferrer" }) }), _jsx(Tooltip, { title: "\u5173\u95ED", children: _jsx(Button, { type: "text", "aria-label": "\u5173\u95ED", icon: _jsx(CloseOutlined, {}), disabled: busy, onClick: onClose }) })] })] }) }), _jsx("main", { className: "oxa-record-detail-body", children: _jsxs("div", { className: "oxa-record-detail-width", children: [heading && !editing && _jsxs("div", { className: "oxa-record-detail-hero", children: [_jsxs("div", { children: [_jsx("h1", { children: heading }), status] }), metadata && _jsx("div", { className: "oxa-record-detail-metadata", children: metadata })] }), editing || children] }) }), !editing && _jsx("footer", { className: "oxa-record-detail-footer", children: _jsxs("div", { className: "oxa-record-detail-width", children: [_jsx("span", { className: "oxa-record-detail-updated", children: time ? `更新于 ${time}` : '' }), _jsx("div", { className: "oxa-record-detail-actions", children: footer || _jsxs(Space, { children: [_jsx(Button, { disabled: busy, onClick: onClose, children: "\u5173\u95ED" }), onEdit && _jsx(Button, { type: "primary", onClick: onEdit, children: "\u7F16\u8F91" })] }) })] }) })] });
|
|
19
|
+
const content = _jsxs("section", { className: `oxa-record-detail oxa-record-detail-${variant} ${drawer ? 'is-drawer' : 'is-page'} ${editing ? 'is-editing' : ''}`, "data-detail-frame": "standard", children: [_jsx("header", { className: "oxa-record-detail-header", children: _jsxs("div", { className: "oxa-record-detail-width", children: [_jsxs("div", { className: "oxa-record-detail-heading", children: [!drawer && _jsx(Button, { type: "text", "aria-label": "\u8FD4\u56DE", icon: _jsx(ArrowLeftOutlined, {}), disabled: busy, onClick: onClose }), _jsx("h2", { children: editing ? '编辑数据' : title })] }), _jsxs(Space, { size: 4, children: [onEdit && !editing && _jsx(Button, { type: "link", onClick: onEdit, children: "\u7F16\u8F91" }), drawer && _jsx(Tooltip, { title: fullScreen ? '退出全屏' : '全屏', children: _jsx(Button, { type: "text", "aria-label": fullScreen ? '退出全屏' : '全屏', icon: fullScreen ? _jsx(CompressOutlined, {}) : _jsx(ExpandOutlined, {}), onClick: () => setFullScreen(!fullScreen) }) }), drawer && newPageHref && !editing && _jsx(Tooltip, { title: "\u65B0\u5F00\u9875\u9762", children: _jsx(Button, { type: "text", "aria-label": "\u65B0\u5F00\u9875\u9762", icon: _jsx(ExportOutlined, {}), href: newPageHref, target: "_blank", rel: "noopener noreferrer" }) }), _jsx(Tooltip, { title: "\u5173\u95ED", children: _jsx(Button, { type: "text", "aria-label": "\u5173\u95ED", icon: _jsx(CloseOutlined, {}), disabled: busy, onClick: onClose }) })] })] }) }), _jsx("main", { className: "oxa-record-detail-body", children: _jsxs("div", { className: "oxa-record-detail-width", children: [heading && !editing && _jsxs("div", { className: "oxa-record-detail-hero", children: [_jsxs("div", { children: [_jsx("h1", { children: heading }), status] }), metadata && _jsx("div", { className: "oxa-record-detail-metadata", children: metadata })] }), editing || children] }) }), !editing && footer !== null && _jsx("footer", { className: "oxa-record-detail-footer", children: _jsxs("div", { className: "oxa-record-detail-width", children: [_jsx("span", { className: "oxa-record-detail-updated", children: time ? `更新于 ${time}` : '' }), _jsx("div", { className: "oxa-record-detail-actions", children: footer || _jsxs(Space, { children: [_jsx(Button, { disabled: busy, onClick: onClose, children: "\u5173\u95ED" }), onEdit && _jsx(Button, { type: "primary", onClick: onEdit, children: "\u7F16\u8F91" })] }) })] }) })] });
|
|
20
20
|
return drawer ? _jsx(Drawer, { open: true, "aria-label": editing ? '编辑数据' : title, rootClassName: "oxa-resource-drawer oxa-record-detail-drawer", size: fullScreen ? '100vw' : 'min(850px, calc(100vw - 48px))', styles: { body: { padding: 0, overflow: 'hidden' } }, closable: false, keyboard: !busy, mask: { closable: !busy }, onClose: onClose, children: content }) : content;
|
|
21
21
|
}
|
|
22
22
|
export function RecordDetailSections({ groups, renderValue }) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RecordDetailFrame.js","sourceRoot":"","sources":["../../../../src/browser/components/resource/RecordDetailFrame.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"RecordDetailFrame.js","sourceRoot":"","sources":["../../../../src/browser/components/resource/RecordDetailFrame.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StandardWorkflowPages.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/workflow/StandardWorkflowPages.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"StandardWorkflowPages.d.ts","sourceRoot":"","sources":["../../../../src/browser/components/workflow/StandardWorkflowPages.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
-
import { ArrowLeftOutlined, ClockCircleOutlined,
|
|
2
|
+
import { ArrowLeftOutlined, ClockCircleOutlined, EllipsisOutlined, ReloadOutlined, CloseOutlined, ExpandOutlined, CompressOutlined, ExportOutlined, } from '@ant-design/icons';
|
|
3
3
|
import { Alert, App, Button, Card, Drawer, Empty, Form, Input, Modal, Result, Segmented, Select, Space, Spin, Table, Tabs, Tag, Tooltip, Typography, } from 'antd';
|
|
4
4
|
import { normalizeWorkflowBusinessDetail, } from 'openxiangda-contracts/browser';
|
|
5
5
|
import { useCallback, useEffect, useMemo, useRef, useState, } from 'react';
|
|
6
6
|
import { Link, Navigate, useHref, useNavigate, useParams, useSearchParams, } from 'react-router-dom';
|
|
7
7
|
import { Shell } from '../../Shell';
|
|
8
|
-
import {
|
|
8
|
+
import { PlatformDirectoryPicker } from '../platform-fields/PlatformDirectoryPicker';
|
|
9
|
+
import { directoryStoredValues } from '../platform-fields/directory-value';
|
|
10
|
+
import { executeWorkflowOperation, executeWorkflowLaunchNamedOperation, loadWorkflowInstanceDetail, loadWorkflowRecordDetail, loadWorkflowDataAudit, loadWorkflowInstanceSurface, loadWorkflowLaunchSurface, loadWorkflowTaskSurface, loadWorkflowTaskDetail, loadWorkflowWorkCenter, answerBusinessProcessCommand, commitStandardProcess, createNativeResourceClient, loadProcessCommandSurface, retryBusinessProcessCommand, uploadOperationManagedFile, } from '../../platform-client';
|
|
9
11
|
import { useWorkflowDefinition, } from '../../workflow-definitions';
|
|
10
12
|
import { useResourceDefinitions } from '../../resource-definitions';
|
|
11
13
|
import { selectedSurfaceFields } from '../resource/resource-field-selection';
|
|
@@ -75,6 +77,9 @@ function workflowStatus(status) {
|
|
|
75
77
|
};
|
|
76
78
|
return states[status] || { label: status || '未知', color: 'default' };
|
|
77
79
|
}
|
|
80
|
+
function workflowHasEnded(instance) {
|
|
81
|
+
return ['completed', 'approved', 'rejected', 'withdrawn', 'terminated', 'cancelled', 'expired'].includes(instance.status);
|
|
82
|
+
}
|
|
78
83
|
function StatusTag({ status }) {
|
|
79
84
|
const state = workflowStatus(status);
|
|
80
85
|
return _jsx(Tag, { color: state.color, children: state.label });
|
|
@@ -302,28 +307,15 @@ export function WorkflowTimelineSection({ timeline, }) {
|
|
|
302
307
|
return (_jsxs("div", { className: timelineTone(item.status), children: [_jsx("span", { className: "oxa-workflow-timeline-dot", children: _jsx(WorkflowStatusIcon, { status: item.status }) }), _jsxs("div", { children: [_jsxs("div", { className: "oxa-workflow-timeline-title", children: [_jsx("strong", { children: item.title }), _jsx(StatusTag, { status: item.status })] }), visiblePeople.length > 0 && (_jsx("div", { className: "oxa-workflow-timeline-assignees", children: visiblePeople.map((person, index) => (_jsxs("div", { children: [_jsx(PlatformAvatar, { avatarUrl: person.avatarUrl, size: 20 }), _jsxs("span", { children: [_jsx(Typography.Text, { children: person.displayName }), person.departmentDisplayName && (_jsx("small", { children: person.departmentDisplayName }))] })] }, `${person.userId || person.displayName}:${index}`))) })), operations.length > 0 && (_jsx("div", { className: "oxa-workflow-timeline-operations", children: operations.map((operation) => (_jsxs("div", { children: [_jsx(PlatformAvatar, { avatarUrl: operation.actor.avatarUrl, size: 20 }), _jsxs("span", { className: "oxa-workflow-operation-content", children: [_jsxs("span", { children: [_jsx(Typography.Text, { children: operation.actor.displayName }), _jsx("strong", { children: operation.operationLabel })] }), operation.reason && (_jsxs("span", { className: "oxa-workflow-operation-opinion", children: [_jsx(Typography.Text, { type: "secondary", children: "\u610F\u89C1" }), _jsx(Typography.Text, { children: operation.reason })] }))] })] }, operation.id))) })), item.terminalReason && !operations.some(operation => operation.reason) && (_jsxs(Typography.Text, { type: "secondary", children: ["\u539F\u56E0\uFF1A", item.terminalReason] })), item.primaryDisplayTime && (_jsx("time", { className: "oxa-workflow-primary-time", children: formatTime(item.primaryDisplayTime) }))] })] }, item.key));
|
|
303
308
|
}) })) : (_jsx(Empty, { description: "\u6682\u65E0\u6D41\u7A0B\u8F68\u8FF9", image: Empty.PRESENTED_IMAGE_SIMPLE })) }));
|
|
304
309
|
}
|
|
305
|
-
function
|
|
306
|
-
const [
|
|
307
|
-
const
|
|
308
|
-
const
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
.then((page) => {
|
|
315
|
-
if (current !== sequence.current)
|
|
316
|
-
return;
|
|
317
|
-
setOptions(page.items.map((item) => ({ label: item.label, value: item.id })));
|
|
318
|
-
})
|
|
319
|
-
.catch(() => { if (current === sequence.current)
|
|
320
|
-
setOptions([]); })
|
|
321
|
-
.finally(() => {
|
|
322
|
-
if (current === sequence.current)
|
|
323
|
-
setLoading(false);
|
|
324
|
-
});
|
|
325
|
-
};
|
|
326
|
-
return (_jsx(Select, { id: id, mode: multiple ? 'multiple' : undefined, maxCount: maxCount, filterOption: false, loading: loading, onChange: onChange, onSearch: search, options: options, placeholder: placeholder || '搜索并选择人员', showSearch: true, value: value }));
|
|
310
|
+
function WorkflowMemberPicker({ id, placeholder, value, onChange, multiple = false, variant }) {
|
|
311
|
+
const [snapshots, setSnapshots] = useState([]);
|
|
312
|
+
const ids = Array.isArray(value) ? value : value ? [value] : [];
|
|
313
|
+
const selected = ids.map(id => snapshots.find(item => item.value === id) || { value: id, label: '已选成员' });
|
|
314
|
+
return _jsx(PlatformDirectoryPicker, { id: id, kind: "user", mobile: variant === 'mobile', multiple: multiple, placeholder: placeholder || '请选择成员', value: multiple ? selected : selected[0], onChange: next => {
|
|
315
|
+
const items = directoryStoredValues(next);
|
|
316
|
+
setSnapshots(items);
|
|
317
|
+
onChange?.(multiple ? items.map(item => item.value) : items[0]?.value);
|
|
318
|
+
} });
|
|
327
319
|
}
|
|
328
320
|
function schemaProperties(operation) {
|
|
329
321
|
const schema = operation.inputSchema;
|
|
@@ -335,7 +327,7 @@ function schemaProperties(operation) {
|
|
|
335
327
|
required: schema.required?.includes(key) === true,
|
|
336
328
|
}));
|
|
337
329
|
}
|
|
338
|
-
function OperationFields({ operation, }) {
|
|
330
|
+
function OperationFields({ operation, variant, }) {
|
|
339
331
|
return (_jsx(_Fragment, { children: schemaProperties(operation).map(({ key, property, required, ui }) => {
|
|
340
332
|
const rules = [
|
|
341
333
|
...(required ? [{ required: true, message: `请填写${property.title || key}` }] : []),
|
|
@@ -349,7 +341,7 @@ function OperationFields({ operation, }) {
|
|
|
349
341
|
];
|
|
350
342
|
let control = _jsx(Input, { placeholder: ui.placeholder });
|
|
351
343
|
if (ui.component === 'user_select')
|
|
352
|
-
control = _jsx(
|
|
344
|
+
control = _jsx(WorkflowMemberPicker, { variant: variant, multiple: property.type === 'array' || ui.mode === 'multiple', placeholder: ui.placeholder || `请选择${property.title || '成员'}` });
|
|
353
345
|
else if (property.enum) {
|
|
354
346
|
control = (_jsx(Select, { options: property.enum.map((value, index) => ({
|
|
355
347
|
label: property.enumNames?.[index] || value,
|
|
@@ -373,9 +365,9 @@ function OperationDialog({ operation, submitting, variant, onCancel, onSubmit, }
|
|
|
373
365
|
if (!operation)
|
|
374
366
|
return null;
|
|
375
367
|
const ui = operation.uiSchema;
|
|
376
|
-
const formNode = (_jsxs(Form, { form: form, layout: "vertical", onFinish: onSubmit, children: [ui.confirmation?.description && (_jsx(Alert, { className: "oxa-workflow-operation-alert", description: ui.confirmation.description, showIcon: true, type: operation.emphasis === 'danger' ? 'warning' : 'info' })), _jsx(OperationFields, { operation: operation })] }));
|
|
368
|
+
const formNode = (_jsxs(Form, { form: form, layout: "vertical", onFinish: onSubmit, children: [ui.confirmation?.description && (_jsx(Alert, { className: "oxa-workflow-operation-alert", description: ui.confirmation.description, showIcon: true, type: operation.emphasis === 'danger' ? 'warning' : 'info' })), _jsx(OperationFields, { operation: operation, variant: variant })] }));
|
|
377
369
|
if (variant === 'mobile') {
|
|
378
|
-
return (_jsx(Drawer, { extra: _jsx(Button, { loading: submitting, onClick: () => form.submit(), type: "primary", children: ui.confirmText || `确认${operation.label}` }), onClose: onCancel, open: true, placement: "bottom", size: "
|
|
370
|
+
return (_jsx(Drawer, { extra: _jsx(Button, { loading: submitting, onClick: () => form.submit(), type: "primary", children: ui.confirmText || `确认${operation.label}` }), rootClassName: "oxa-workflow-operation-drawer", styles: { body: { overflowY: 'auto', minHeight: 0 } }, keyboard: !submitting, mask: { closable: !submitting }, closable: !submitting, onClose: submitting ? undefined : onCancel, open: true, placement: "bottom", size: "min(640px, 92dvh)", title: operation.label, children: formNode }));
|
|
379
371
|
}
|
|
380
372
|
return (_jsx(Modal, { cancelText: "\u53D6\u6D88", confirmLoading: submitting, okText: ui.confirmText || `确认${operation.label}`, onCancel: onCancel, onOk: () => form.submit(), open: true, title: operation.label, children: formNode }));
|
|
381
373
|
}
|
|
@@ -734,11 +726,13 @@ function StandardWorkflowDetailRenderer({ surface, timeline, warning, operations
|
|
|
734
726
|
const activeNode = timeline?.display?.entries.find(entry => entry.status === 'active');
|
|
735
727
|
const people = activeNode?.people.map(person => person.displayName).filter(Boolean).join('、');
|
|
736
728
|
const statusTone = workflowStatus(instance.status).color;
|
|
737
|
-
const bannerTone = statusTone === '
|
|
729
|
+
const bannerTone = statusTone === 'error' ? 'error' : 'active';
|
|
730
|
+
const edit = workflowHasEnded(instance) ? onEdit : undefined;
|
|
731
|
+
const hasActions = standardWorkflowOperations(surface).length > 0;
|
|
738
732
|
const loadAudit = useCallback(() => loadWorkflowDataAudit(instance.id), [instance.id]);
|
|
739
733
|
const back = onClose || (() => navigate(variant === 'mobile' ? '/m/work-center' : '/work-center'));
|
|
740
734
|
return _jsxs(RecordDetailFrame, { variant: variant, title: "\u7533\u8BF7\u8BE6\u60C5", heading: title, status: _jsx(StatusTag, { status: instance.status }), metadata: [summary.initiator?.displayName || summary.initiatorDisplayName, summary.initiator?.departmentDisplayName || summary.departmentDisplayName,
|
|
741
|
-
summary.submittedAt ? `${detailTime(summary.submittedAt)} 创建` : ''].filter(Boolean).join(' · '), updatedAt: business.record.updated_at || instance.completedAt || instance.startedAt, onClose: back, onEdit:
|
|
735
|
+
summary.submittedAt ? `${detailTime(summary.submittedAt)} 创建` : ''].filter(Boolean).join(' · '), updatedAt: business.record.updated_at || instance.completedAt || instance.startedAt, onClose: back, onEdit: edit, editing: editing, busy: busy, drawer: drawer, drawerState: drawerState, newPageHref: newPageHref, footer: hasActions || edit ? _jsxs(_Fragment, { children: [operations, edit && _jsx(Button, { onClick: edit, children: "\u7F16\u8F91" })] }) : null, children: [warning && _jsx(Alert, { description: warning, showIcon: true, type: "warning" }), !workflowHasEnded(instance) && activeNode && _jsxs("div", { className: `oxa-workflow-current-node is-${bannerTone}`, role: "status", children: [_jsxs("span", { children: [_jsx(ClockCircleOutlined, {}), "\u5F53\u524D\u8282\u70B9\uFF1A", activeNode.title] }), people && _jsxs("span", { children: ["\u7B49\u5F85", people, "\u5904\u7406"] })] }), _jsx(Tabs, { activeKey: tab, onChange: setTab, items: [
|
|
742
736
|
{ key: 'application', label: '申请内容', children: _jsx(WorkflowBusinessDetailSections, { surface: surface, variant: variant }) },
|
|
743
737
|
{ key: 'history', label: '审批历史', children: _jsx(WorkflowTimelineSection, { timeline: timeline }) },
|
|
744
738
|
{ key: 'changes', label: '变更记录', children: tab === 'changes' && business.surface && business.resourceCode && business.recordId
|
|
@@ -852,7 +846,7 @@ function WorkflowDetailPage({ kind, variant, resourceCode, recordId, onDismiss,
|
|
|
852
846
|
? _jsx(WorkflowTaskOperationsPanel, { onCommandCompleted: onCommandCompleted, surface: surface, taskId: task.id, variant: variant }, task.id)
|
|
853
847
|
: _jsx(WorkflowInstanceOperationsPanel, { instanceId: instance.id, onCommandCompleted: onCommandCompleted, surface: surface, variant: variant });
|
|
854
848
|
return _jsx(StandardWorkflowDetailRenderer, { surface: surface, timeline: timeline, warning: error, operations: operations, variant: variant, drawer: Boolean(onDismiss), drawerState: drawerState, newPageHref: newPageHref, onClose: editing ? () => { if (!editBusy)
|
|
855
|
-
setEditing(false); } : close, busy: editBusy, editing: editing && business?.resourceCode && business.recordId ? _jsx(WorkflowRecordEditor, { resourceCode: business.resourceCode, recordId: business.recordId, variant: variant, presentation: "embedded", onBusyChange: setEditBusy, onDismiss: () => setEditing(false), onSaved: () => { setEditing(false); void refresh(); } }) : undefined, onEdit: identity.isAppSuperAdmin && (business?.status === 'ready' || business?.status === 'stale') ? () => setEditing(true) : undefined });
|
|
849
|
+
setEditing(false); } : close, busy: editBusy, editing: editing && business?.resourceCode && business.recordId ? _jsx(WorkflowRecordEditor, { resourceCode: business.resourceCode, recordId: business.recordId, variant: variant, presentation: "embedded", onBusyChange: setEditBusy, onDismiss: () => setEditing(false), onSaved: () => { setEditing(false); void refresh(); } }) : undefined, onEdit: workflowHasEnded(instance) && identity.isAppSuperAdmin && (business?.status === 'ready' || business?.status === 'stale') ? () => setEditing(true) : undefined });
|
|
856
850
|
}
|
|
857
851
|
export function WorkflowRecordDetailPage({ variant = 'desktop', ...props }) { return _jsx(WorkflowDetailPage, { ...props, variant: variant, kind: "record" }); }
|
|
858
852
|
export function WorkflowTaskPage({ variant = 'desktop', }) {
|