weaver-e10-builder 1.6.4 → 1.6.5
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/commands/actionflow.d.ts.map +1 -1
- package/dist/commands/actionflow.js +2 -0
- package/dist/commands/actionflow.js.map +1 -1
- package/dist/commands/form-add-detail-table.js +3 -3
- package/dist/commands/form-add-detail-table.js.map +1 -1
- package/dist/commands/form-browser-definition.js +8 -8
- package/dist/commands/form-browser-definition.js.map +1 -1
- package/dist/commands/form-code.js +7 -7
- package/dist/commands/form-code.js.map +1 -1
- package/dist/commands/form-data.js +1 -1
- package/dist/commands/form-data.js.map +1 -1
- package/dist/commands/form-ebuilder-scope.js +8 -8
- package/dist/commands/form-ebuilder-scope.js.map +1 -1
- package/dist/commands/form-engine-linkage.js +12 -12
- package/dist/commands/form-engine-linkage.js.map +1 -1
- package/dist/commands/form-layout-diff.js +1 -1
- package/dist/commands/form-layout-diff.js.map +1 -1
- package/dist/commands/form-layout-edit.js +1 -1
- package/dist/commands/form-layout-edit.js.map +1 -1
- package/dist/commands/form-layout-init-reviewed.js +1 -1
- package/dist/commands/form-layout-init-reviewed.js.map +1 -1
- package/dist/commands/form-layout-init.js +2 -2
- package/dist/commands/form-layout-init.js.map +1 -1
- package/dist/commands/form-layout-template-easy.js +1 -1
- package/dist/commands/form-layout-template-easy.js.map +1 -1
- package/dist/commands/form-layout.js +4 -4
- package/dist/commands/form-layout.js.map +1 -1
- package/dist/commands/form-view.d.ts.map +1 -1
- package/dist/commands/form-view.js +1 -2
- package/dist/commands/form-view.js.map +1 -1
- package/dist/commands/form.js +3 -3
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/report-admin.js +1 -1
- package/dist/commands/report-admin.js.map +1 -1
- package/dist/commands/report-query.js +1 -1
- package/dist/commands/report-query.js.map +1 -1
- package/dist/commands/report.js +1 -1
- package/dist/commands/report.js.map +1 -1
- package/dist/commands/wf-form-layout-init-reviewed.d.ts +3 -0
- package/dist/commands/wf-form-layout-init-reviewed.d.ts.map +1 -0
- package/dist/commands/wf-form-layout-init-reviewed.js +71 -0
- package/dist/commands/wf-form-layout-init-reviewed.js.map +1 -0
- package/dist/commands/wf-form.d.ts +1 -0
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +16 -16
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-advanced.js +1 -1
- package/dist/commands/workflow-advanced.js.map +1 -1
- package/dist/commands/workflow-basic-info.js +4 -4
- package/dist/commands/workflow-basic-info.js.map +1 -1
- package/dist/commands/workflow.js +6 -6
- package/dist/commands/workflow.js.map +1 -1
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/classified_protection_source.d.ts +10 -0
- package/dist/services/actionflow/classified_protection_source.d.ts.map +1 -0
- package/dist/services/actionflow/classified_protection_source.js +27 -0
- package/dist/services/actionflow/classified_protection_source.js.map +1 -0
- package/dist/services/actionflow/components/action_eb_add.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_add.js +4 -5
- package/dist/services/actionflow/components/action_eb_add.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update.js +13 -1
- package/dist/services/actionflow/components/action_eb_update.js.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.d.ts +12 -0
- package/dist/services/actionflow/components/action_eb_update_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/components/action_eb_update_compiler.js +88 -3
- package/dist/services/actionflow/components/action_eb_update_compiler.js.map +1 -1
- package/dist/services/actionflow/components/approve_create.d.ts.map +1 -1
- package/dist/services/actionflow/components/approve_create.js +6 -10
- package/dist/services/actionflow/components/approve_create.js.map +1 -1
- package/dist/services/actionflow/components/condition.d.ts.map +1 -1
- package/dist/services/actionflow/components/condition.js +3 -2
- package/dist/services/actionflow/components/condition.js.map +1 -1
- package/dist/services/actionflow/components/eb_get_data_by_id.d.ts.map +1 -1
- package/dist/services/actionflow/components/eb_get_data_by_id.js +9 -1
- package/dist/services/actionflow/components/eb_get_data_by_id.js.map +1 -1
- package/dist/services/actionflow/components/send_message.js +1 -1
- package/dist/services/actionflow/components/send_message.js.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.js +20 -11
- package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +9 -1
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/design_client.d.ts +4 -0
- package/dist/services/actionflow/design_client.d.ts.map +1 -1
- package/dist/services/actionflow/design_client.js +65 -0
- package/dist/services/actionflow/design_client.js.map +1 -1
- package/dist/services/actionflow/form_source.d.ts +9 -2
- package/dist/services/actionflow/form_source.d.ts.map +1 -1
- package/dist/services/actionflow/form_source.js +21 -6
- package/dist/services/actionflow/form_source.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +153 -37
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/preflight_service.d.ts +14 -3
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +276 -42
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +154 -23
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/workflow-layout-init-reviewed.d.ts +35 -0
- package/dist/services/workflow-layout-init-reviewed.d.ts.map +1 -0
- package/dist/services/workflow-layout-init-reviewed.js +120 -0
- package/dist/services/workflow-layout-init-reviewed.js.map +1 -0
- package/package.json +1 -1
- package/skill-docs/SKILL.md +4 -4
- package/skill-docs/actionflows/SKILL.md +2 -0
- package/skill-docs/actionflows/references/components/ebuilder/ActionEbUpdate.md +2 -0
- package/skill-docs/actionflows/references/components/ebuilder/EventButton.md +1 -1
- package/skill-docs/actionflows/references/components/logic/Condition.md +2 -0
- package/skill-docs/actionflows/references/components/message/SendMessage.md +2 -2
- package/skill-docs/actionflows/references/components/workflow/ApproveCommit.md +17 -17
- package/skill-docs/actionflows/references/components/workflow/ApproveCreate.md +1 -1
- package/skill-docs/actionflows/references/components/workflow/ApproveSave.md +1 -1
- package/skill-docs/actionflows/references/components/workflow/ApproveSendBack.md +17 -17
- package/skill-docs/references/common/ref-cli-commands.md +1 -0
- package/skill-docs/references/form/guide-browser-definition.md +73 -40
- package/skill-docs/references/form/layout/code-block/layout-css.md +41 -0
- package/skill-docs/references/form/layout/initialization.md +2 -0
- package/skill-docs/references/form/layout/layout-overview.md +8 -0
- package/skill-docs/references/form/layout/template/advanced.md +21 -0
- package/skill-docs/references/form/layout/template/easy.md +2 -0
- package/skill-docs/references/form/layout/template/flow.md +2 -0
- package/skill-docs/references/form/layout/template/template-guide.md +3 -1
- package/skill-docs/references/form/layout/workflow-layout.md +13 -1
- package/skill-docs/references/form/ref-form-fields.md +18 -4
- package/skill-docs/references/workflow/guide-workflow-odoc.md +1 -1
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { initWorkflowFormLayout } from '../commands/wf-form.js';
|
|
2
|
+
import { businessData, environmentOrigin, fieldsHash, readLayoutContext, readLayoutSnapshot, snapshotHash } from './form-layout-io.js';
|
|
3
|
+
import { flattenComponents } from './form-layout-source/binding.js';
|
|
4
|
+
import { assert, digest } from './form-layout-source/schema.js';
|
|
5
|
+
import { resolveStyleTemplateId } from './form-style-template.js';
|
|
6
|
+
import { readEasyTemplateEvidence, readTemplateEvidence, verifyAppliedEasyTemplate, verifyAppliedTemplate } from './form-layout-template-verification.js';
|
|
7
|
+
import { EasyTemplateService } from './form-layout-template-easy.js';
|
|
8
|
+
const DEFAULTS = { FLOW: { id: '820000000000000001', name: '标准版' },
|
|
9
|
+
EXCEL: { id: '700000000000000008', name: '表格版' } };
|
|
10
|
+
export async function prepareWorkflowLayoutInit(client, baseUrl, target, options) {
|
|
11
|
+
assert(target.module === 'workflow', '只支持原生流程表单');
|
|
12
|
+
const context = await readLayoutContext(client, baseUrl, target);
|
|
13
|
+
const snapshot = context.snapshot;
|
|
14
|
+
const layout = snapshot.formLayout;
|
|
15
|
+
const multi = snapshot.formLayoutMultiple || {};
|
|
16
|
+
const layoutType = String(multi.layoutType || layout.pageLayouts?.[0]?.layoutType || '');
|
|
17
|
+
assert(layoutType === 'FLOW' || layoutType === 'EXCEL', '布局类型必须为 FLOW 或 EXCEL');
|
|
18
|
+
const terminal = String(multi.terminalType || 'PC').toUpperCase();
|
|
19
|
+
assert(terminal === 'PC', '当前模板目录与效果核对仅支持 PC 布局');
|
|
20
|
+
const layoutId = String(layout.id || '');
|
|
21
|
+
const layoutMultiId = String(multi.id || layout.multipleLayoutId || '');
|
|
22
|
+
assert(layoutId && layoutMultiId, '布局身份不完整');
|
|
23
|
+
const defaultSnapshot = target.viewId
|
|
24
|
+
? await readLayoutSnapshot(client, baseUrl, { module: 'workflow', formId: target.formId, routeKind: 'default' })
|
|
25
|
+
: snapshot;
|
|
26
|
+
const defaultLayoutId = String(defaultSnapshot.formLayout?.id || '');
|
|
27
|
+
assert(defaultLayoutId, '默认布局 ID 缺失');
|
|
28
|
+
const config = businessData(await client.post(`${baseUrl}/api/workflow/core/form/view/relate/getConfig`, {
|
|
29
|
+
formId: target.formId, module: 'workflow', apiModule: 'workflow/form', layoutId: defaultLayoutId,
|
|
30
|
+
customParam: { terminal: '', objId: target.formId }, initMode: 5, groupFieldIds: [],
|
|
31
|
+
designerParam: { sourceModule: 'workflow' },
|
|
32
|
+
}, { ebbusinessid: target.formId }), '读取流程表单初始化配置');
|
|
33
|
+
assert(Array.isArray(config?.configs) && config.configs.length > 0, '初始化字段配置为空,已阻断重建');
|
|
34
|
+
assert(!(options.styleTemplate && options.easyTemplate), '高级/流式模板与简易模板只能选择一种');
|
|
35
|
+
let template;
|
|
36
|
+
let templateEvidence;
|
|
37
|
+
if (options.easyTemplate) {
|
|
38
|
+
assert(layoutType === 'EXCEL', '简易模板只能应用于表格式 PC 布局');
|
|
39
|
+
const rows = (await new EasyTemplateService(client, baseUrl).list()).result;
|
|
40
|
+
const requested = options.easyTemplate.trim();
|
|
41
|
+
const matches = rows.filter(row => String(row.id) === requested || String(row.templateName) === requested);
|
|
42
|
+
assert(matches.length === 1, matches.length ? '简易模板名称重复,请改用 ID' : `简易模板不存在:${requested}`);
|
|
43
|
+
template = { id: String(matches[0].id), name: String(matches[0].templateName) };
|
|
44
|
+
templateEvidence = await readEasyTemplateEvidence(client, baseUrl, template.id);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
template = options.styleTemplate
|
|
48
|
+
? await resolveStyleTemplateId(client, baseUrl, target.formId, layoutType, options.styleTemplate)
|
|
49
|
+
: DEFAULTS[layoutType];
|
|
50
|
+
templateEvidence = options.styleTemplate
|
|
51
|
+
? await readTemplateEvidence(client, baseUrl, layoutType, template.id) : undefined;
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
schemaVersion: 'e10.workflow-layout-init-plan/v1', origin: environmentOrigin(baseUrl), target,
|
|
55
|
+
snapshotHash: snapshotHash(snapshot), fieldHash: fieldsHash(context.fields),
|
|
56
|
+
configHash: digest(config.configs), optionsHash: digest(options), layoutId, layoutMultiId,
|
|
57
|
+
layoutType, terminal: 'PC', template, ...(templateEvidence ? { templateEvidence } : {}),
|
|
58
|
+
componentCountBefore: layout.pageLayouts.reduce((n, page) => n + flattenComponents(page.comps || []).length, 0),
|
|
59
|
+
affectedAreas: ['布局排版与组件', '字段、明细表和分组', '模板样式及页面样式', '可能存在的布局代码块'],
|
|
60
|
+
mutationStarted: false,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
export async function applyWorkflowLayoutInit(client, baseUrl, target, options, reviewed) {
|
|
64
|
+
assert(reviewed?.schemaVersion === 'e10.workflow-layout-init-plan/v1' && reviewed.mutationStarted === false, '需要有效的流程布局初始化预览');
|
|
65
|
+
assert(reviewed.origin === environmentOrigin(baseUrl) && digest(reviewed.target) === digest(target), '预览环境或目标不一致');
|
|
66
|
+
assert(reviewed.optionsHash === digest(options), '初始化选项在预览后发生变化');
|
|
67
|
+
const current = await prepareWorkflowLayoutInit(client, baseUrl, target, options);
|
|
68
|
+
assert(current.snapshotHash === reviewed.snapshotHash && current.fieldHash === reviewed.fieldHash, '[LAYOUT_SNAPSHOT_CHANGED] 布局或字段在预览后发生变化,请重新预览');
|
|
69
|
+
assert(digest(current) === digest(reviewed), '模板、字段配置或初始化计划已变化,请重新预览');
|
|
70
|
+
let accepted = null;
|
|
71
|
+
let error;
|
|
72
|
+
try {
|
|
73
|
+
await initWorkflowFormLayout(client, baseUrl, target.formId, {
|
|
74
|
+
layoutId: target.viewId, styleTemplate: current.template.id,
|
|
75
|
+
styleTemplateType: options.easyTemplate ? 0 : 1,
|
|
76
|
+
readOnly: options.readOnly, required: options.required,
|
|
77
|
+
singleRow: options.singleRow, generateCollapse: options.generateCollapse,
|
|
78
|
+
});
|
|
79
|
+
accepted = true;
|
|
80
|
+
}
|
|
81
|
+
catch (caught) {
|
|
82
|
+
error = caught.message;
|
|
83
|
+
}
|
|
84
|
+
const issues = [];
|
|
85
|
+
let afterSnapshotHash;
|
|
86
|
+
let componentCountAfter = 0;
|
|
87
|
+
let templateEffectVerified = current.templateEvidence ? false : null;
|
|
88
|
+
try {
|
|
89
|
+
const after = await readLayoutContext(client, baseUrl, target);
|
|
90
|
+
afterSnapshotHash = snapshotHash(after.snapshot);
|
|
91
|
+
const layout = after.snapshot.formLayout;
|
|
92
|
+
componentCountAfter = layout.pageLayouts.reduce((n, page) => n + flattenComponents(page.comps || []).length, 0);
|
|
93
|
+
if (String(layout.id) !== current.layoutId ||
|
|
94
|
+
String(after.snapshot.formLayoutMultiple?.id || layout.multipleLayoutId || '') !== current.layoutMultiId)
|
|
95
|
+
issues.push('回读布局身份不一致');
|
|
96
|
+
if (!componentCountAfter)
|
|
97
|
+
issues.push('回读布局没有组件');
|
|
98
|
+
if (fieldsHash(after.fields) !== current.fieldHash)
|
|
99
|
+
issues.push('表单字段定义发生变化');
|
|
100
|
+
if (afterSnapshotHash === current.snapshotHash)
|
|
101
|
+
issues.push('回读布局快照未变化,无法确认初始化已生效');
|
|
102
|
+
if (current.templateEvidence) {
|
|
103
|
+
const templateIssues = current.templateEvidence.kind === 'easy'
|
|
104
|
+
? verifyAppliedEasyTemplate(current.templateEvidence, layout)
|
|
105
|
+
: verifyAppliedTemplate(current.templateEvidence, layout);
|
|
106
|
+
issues.push(...templateIssues);
|
|
107
|
+
templateEffectVerified = templateIssues.length === 0;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch (caught) {
|
|
111
|
+
issues.push(`独立回读失败:${caught.message}`);
|
|
112
|
+
}
|
|
113
|
+
return { saved: issues.length === 0 && accepted === true, accepted,
|
|
114
|
+
mutationStarted: true,
|
|
115
|
+
beforeSnapshotHash: current.snapshotHash, afterSnapshotHash,
|
|
116
|
+
layoutId: current.layoutId, template: current.template, templateEffectVerified,
|
|
117
|
+
componentCountBefore: current.componentCountBefore, componentCountAfter,
|
|
118
|
+
issues, ...(error ? { error } : {}) };
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=workflow-layout-init-reviewed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-layout-init-reviewed.js","sourceRoot":"","sources":["../../src/services/workflow-layout-init-reviewed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAqB,MAAM,qBAAqB,CAAC;AAC1J,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,qBAAqB,EACrD,MAAM,wCAAwC,CAAC;AACnG,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAarE,MAAM,QAAQ,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE;IAChE,KAAK,EAAE,EAAE,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,MAAoB,EAAE,OAAe,EACnF,MAAoB,EAAE,OAA4B;IAClD,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,UAAU,EAAE,WAAW,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACjE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAClC,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC;IACnC,MAAM,KAAK,GAAG,QAAQ,CAAC,kBAAkB,IAAI,EAAE,CAAC;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;IACzF,MAAM,CAAC,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,OAAO,EAAE,sBAAsB,CAAC,CAAC;IAChF,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;IAClE,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,sBAAsB,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;IACxE,MAAM,CAAC,QAAQ,IAAI,aAAa,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM;QACnC,CAAC,CAAC,MAAM,kBAAkB,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC;QAChH,CAAC,CAAC,QAAQ,CAAC;IACb,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,MAAM,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IACtC,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,OAAO,+CAA+C,EAAE;QACvG,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe;QAChG,WAAW,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,aAAa,EAAE,EAAE;QACnF,aAAa,EAAE,EAAE,YAAY,EAAE,UAAU,EAAE;KAC5C,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;IACpD,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC;IACvF,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,YAAY,CAAC,EAAE,oBAAoB,CAAC,CAAC;IAC/E,IAAI,QAAsC,CAAC;IAC3C,IAAI,gBAAqE,CAAC;IAC1E,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,MAAM,CAAC,UAAU,KAAK,OAAO,EAAE,oBAAoB,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC5E,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,SAAS,CAAC,CAAC;QAC3G,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC;QAC1F,QAAQ,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;QAChF,gBAAgB,GAAG,MAAM,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,OAAO,CAAC,aAAa;YAC9B,CAAC,CAAC,MAAM,sBAAsB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,aAAa,CAAC;YACjG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QACzB,gBAAgB,GAAG,OAAO,CAAC,aAAa;YACtC,CAAC,CAAC,MAAM,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvF,CAAC;IACD,OAAO;QACL,aAAa,EAAE,kCAAkC,EAAE,MAAM,EAAE,iBAAiB,CAAC,OAAO,CAAC,EAAE,MAAM;QAC7F,YAAY,EAAE,YAAY,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC;QAC3E,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,aAAa;QACzF,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvF,oBAAoB,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,IAAS,EAAE,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5H,aAAa,EAAE,CAAC,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,CAAC;QAClE,eAAe,EAAE,KAAK;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,MAAoB,EAAE,OAAe,EACjF,MAAoB,EAAE,OAA4B,EAAE,QAA0B;IAC9E,MAAM,CAAC,QAAQ,EAAE,aAAa,KAAK,kCAAkC,IAAI,QAAQ,CAAC,eAAe,KAAK,KAAK,EACzG,gBAAgB,CAAC,CAAC;IACpB,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,iBAAiB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,EACjG,YAAY,CAAC,CAAC;IAChB,MAAM,CAAC,QAAQ,CAAC,WAAW,KAAK,MAAM,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,MAAM,yBAAyB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAClF,MAAM,CAAC,OAAO,CAAC,YAAY,KAAK,QAAQ,CAAC,YAAY,IAAI,OAAO,CAAC,SAAS,KAAK,QAAQ,CAAC,SAAS,EAC/F,+CAA+C,CAAC,CAAC;IACnD,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,EAAE,wBAAwB,CAAC,CAAC;IACvE,IAAI,QAAQ,GAAmB,IAAI,CAAC;IACpC,IAAI,KAAyB,CAAC;IAC9B,IAAI,CAAC;QACH,MAAM,sBAAsB,CAAC,MAAa,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;YAClE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE;YAC3D,iBAAiB,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ;YACtD,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;SACzE,CAAC,CAAC;QACH,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC;IAAC,OAAO,MAAW,EAAE,CAAC;QAAC,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC;IAAC,CAAC;IACjD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,iBAAqC,CAAC;IAC1C,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,IAAI,sBAAsB,GAAmB,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACrF,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC/D,iBAAiB,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QACzC,mBAAmB,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,IAAS,EAAE,EAAE,CAAC,CAAC,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC7H,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,OAAO,CAAC,QAAQ;YACxC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,kBAAkB,EAAE,EAAE,IAAI,MAAM,CAAC,gBAAgB,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,aAAa;YACxG,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3B,IAAI,CAAC,mBAAmB;YAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAClD,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9E,IAAI,iBAAiB,KAAK,OAAO,CAAC,YAAY;YAAE,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACpF,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC7B,MAAM,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,IAAI,KAAK,MAAM;gBAC7D,CAAC,CAAC,yBAAyB,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC;gBAC7D,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;YAC/B,sBAAsB,GAAG,cAAc,CAAC,MAAM,KAAK,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAAC,OAAO,MAAW,EAAE,CAAC;QAAC,MAAM,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAAC,CAAC;IAClE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,IAAI,EAAE,QAAQ;QAChE,eAAe,EAAE,IAAI;QACrB,kBAAkB,EAAE,OAAO,CAAC,YAAY,EAAE,iBAAiB;QAC3D,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,sBAAsB;QAC9E,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAAE,mBAAmB;QACvE,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AAC1C,CAAC"}
|
package/package.json
CHANGED
package/skill-docs/SKILL.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
name: weaver-e10-builder
|
|
3
3
|
display_name: 泛微E10智能搭建Skill
|
|
4
4
|
display_name_en: E10 Builder
|
|
5
|
-
description: 泛微E10智能搭建skill v2(通用版),辅助编写泛微Ebuilder自定义应用,对应CLI版本1.6.
|
|
6
|
-
description_zh: 泛微Ebuilder低代码应用智能搭建工具 v2(通用版),辅助编写自定义应用(表单/流程/列表/动作流/权限/分组/编号等),与 e10-cli 配套使用,当前对应 CLI 版本 1.6.
|
|
7
|
-
description_en: E10 Ebuilder low-code app builder skill v2 (general) — helps build Weaver E10 custom apps (forms/workflows/lists/actionflows/permissions/groups/numbering) via e10-cli, currently paired with CLI 1.6.
|
|
5
|
+
description: 泛微E10智能搭建skill v2(通用版),辅助编写泛微Ebuilder自定义应用,对应CLI版本1.6.5
|
|
6
|
+
description_zh: 泛微Ebuilder低代码应用智能搭建工具 v2(通用版),辅助编写自定义应用(表单/流程/列表/动作流/权限/分组/编号等),与 e10-cli 配套使用,当前对应 CLI 版本 1.6.5。
|
|
7
|
+
description_en: E10 Ebuilder low-code app builder skill v2 (general) — helps build Weaver E10 custom apps (forms/workflows/lists/actionflows/permissions/groups/numbering) via e10-cli, currently paired with CLI 1.6.5.
|
|
8
8
|
category: coding
|
|
9
|
-
version: 1.6.
|
|
9
|
+
version: 1.6.5
|
|
10
10
|
author: 泛微网络科技股份有限公司
|
|
11
11
|
auto: true
|
|
12
12
|
---
|
|
@@ -118,6 +118,8 @@ e10-cli actionflow component-describe <type>
|
|
|
118
118
|
e10-cli actionflow generate '{"planFile":"@<绝对路径>","appName":"AI-名称"}' --out generate-result.json # 默认保存并启用
|
|
119
119
|
e10-cli actionflow generate '{"planFile":"@...","mode":"stash"}' # 显式暂存(不启用)
|
|
120
120
|
e10-cli actionflow application-list '{"name":"动作流名称"}' # 先发现动作流应用,再用唯一结果的精确 appId
|
|
121
|
+
e10-cli actionflow application-categories '{"name":"类别名称"}' # 查询动作流类别
|
|
122
|
+
e10-cli actionflow application-update '{"appId":"动作流ID","name":"新名称","categoryId":"类别ID","description":"描述"}' # 只传需要修改的字段;categoryId 为 0 时清空类别
|
|
121
123
|
e10-cli actionflow activate-version '{"appId":"动作流ID","sceneId":"版本场景ID"}' # 只切换默认打开版本,不改变启用状态
|
|
122
124
|
e10-cli actionflow enable '{"appId":"动作流ID"}' # 单独启用,不修改设计、不创建版本
|
|
123
125
|
e10-cli actionflow disable '{"appId":"动作流ID"}' # 单独禁用,不修改设计、不创建版本
|
|
@@ -26,6 +26,8 @@
|
|
|
26
26
|
|
|
27
27
|
`basisValue` 只是 `id` 和 `fieldUpdate` 的批量开关,不能用于条件筛选更新。CLI 会在编译前校验这些组合,避免把一个模式的定位参数静默带入另一个模式。
|
|
28
28
|
|
|
29
|
+
当 `id` 或 `fieldUpdate` 配置了 `basisValue` 时,如果 `updateId` 或 `updateFieldCondition.updateField[].assign` 的来源字段 `paramKey` 明确位于该依据值下级(例如依据值为 `100.12345[]`,来源字段为 `100.12345[].67890`),CLI 会按前端“依据值下级”协议编译为 `type:"10"`、`config.switchType:"sub"`。只有路径明确以该依据值加 `.` 开头时才会转换;不相关的明细字段仍按普通动态上下文编译,不凭路径形状猜测依据关系。`basisValue` 和来源字段都应使用前置上下文接口返回的真实字段元数据。
|
|
30
|
+
|
|
29
31
|
### 明细表策略
|
|
30
32
|
|
|
31
33
|
更新组件的 `ActionEbDlg` 会为每张明细表单独保存策略。`detail` 每项至少包含 `detailTableId`,可使用以下结构:
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
`buttonLocation` 只能是 `before`(按钮默认动作前)或 `after`(默认动作后)。多选记录场景的 `triggerType` 为 `sequence`、`merge` 或 `parallel`。需要异步时在对应按钮项写 `asyncExecution:true`。
|
|
30
30
|
|
|
31
|
-
使用 `before` 时,CLI
|
|
31
|
+
使用 `before` 时,CLI 会实时调用前端 EventButton 浏览器使用的 `ebuilderButton` 接口。返回记录中的 `needTriggerBefore` 决定按钮是否支持“执行前”;系统保存按钮的 `buttonKey=save` 或 `editSave` 仍兼容按前端规则视为支持。不能仅凭按钮名称或手工传 `before` 绕过这个校验。按钮名称也会以当前租户实时返回值为准。
|
|
32
32
|
|
|
33
33
|
## 上下文
|
|
34
34
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
## 何时使用
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
向人员、部门、分部、角色、群组、岗位、人员范围、外部联系人、全员或上游对象发送 IM 消息。
|
|
6
6
|
|
|
7
7
|
## 先查询
|
|
8
8
|
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
}
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
提醒对象使用 `receiver.type` 指定前端 `objType`:`resource`/`user`(人员)、`department`(部门)、`subcompany`(分部)、`role`(角色)、`group`(群组)、`position`(岗位)、`employeeScope`(人员范围)、`employeeShare`(人力资源条件)、`employeeOrganization`(人员组织多选)、`external`(外部联系人)、`all` 或 `allExternal`。固定对象使用 `{type,id,name}`;同一类型多选使用 `persons:[{id,name}]`,也可直接传前端多选 FormulaBean。部门/分部可传 `departmentAttribute` 和 `seclevel`,角色可传 `roleLevel`,岗位可传 `positionLevel`、`positionLevelDepartment`、`positionLevelSubcompany`、`positionAttribute`。动态对象使用 `kind:"context"`、`paramKey` 和 `label`,并可通过 `objectType` 指定非人员类型,例如 `{"type":"department","kind":"context","paramKey":"<真实部门字段paramKey>","label":"所属部门"}`。CLI 会按前端逻辑写入 `shareList` 的 `obj_id` / `obj_id_*` 字段;`objectList` 仅保留旧版兼容数据。模板上下文只传 `paramKey` 和 `label`,由 CLI 按消息编辑器的动态片段结构编译,并绑定当前触发节点。对定时批量、按日期字段、表单数据等 e-builder 记录触发器,未显式提供链接时 CLI 自动生成 `msgPcLink` / `msgMobileLink` 的 PC/移动端详情链接:`formId` 为触发表单 ID 固定值,`dataId` 为上游“数据ID”动态上下文。显式 `msgPcLink` / `msgMobileLink` 会覆盖该默认行为。
|
|
27
27
|
|
|
28
28
|
## 最小计划
|
|
29
29
|
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# 提交流程(`ApproveCommit`)
|
|
2
|
-
|
|
3
|
-
## 何时使用
|
|
4
|
-
|
|
5
|
-
对已有流程进行审批提交,并可更新流程表单。
|
|
6
|
-
|
|
7
|
-
## 先查询
|
|
8
|
-
|
|
9
|
-
查询流程、实例上下文、操作人和目标流程表单字段。
|
|
10
|
-
|
|
11
|
-
## 不可猜测
|
|
12
|
-
|
|
13
|
-
只能对真实实例提交;字段映射不能跨流程猜测。
|
|
14
|
-
|
|
15
|
-
## 最小计划
|
|
16
|
-
|
|
17
|
-
`workflowPath`、`requestId`、`operator
|
|
1
|
+
# 提交流程(`ApproveCommit`)
|
|
2
|
+
|
|
3
|
+
## 何时使用
|
|
4
|
+
|
|
5
|
+
对已有流程进行审批提交,并可更新流程表单。
|
|
6
|
+
|
|
7
|
+
## 先查询
|
|
8
|
+
|
|
9
|
+
查询流程、实例上下文、操作人和目标流程表单字段。
|
|
10
|
+
|
|
11
|
+
## 不可猜测
|
|
12
|
+
|
|
13
|
+
只能对真实实例提交;字段映射不能跨流程猜测。
|
|
14
|
+
|
|
15
|
+
## 最小计划
|
|
16
|
+
|
|
17
|
+
`workflowPath`、`requestId`、`operator`。流程表单设置通过 `mapping`、`constants`、`formula`、`detail` 编译进后端 `formData`;`formula` 是 CLI 的字段赋值描述,不是 DTO 顶层字段。`dataDrWithCalc` 对应表单设置里的数据钻取及计算开关。提交流程的 `requestLevel` 支持 `-1/0/1/2`。明细默认 `default` 表示不更新,填写依据值或明细赋值时需明确配置 `operateType`,更新/删除还需提供对应条件和策略。
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
|
|
15
15
|
## 最小计划
|
|
16
16
|
|
|
17
|
-
`workflowPath`、`operator`、`requestName`;按需求补充表单赋值。`requestName`、`
|
|
17
|
+
`workflowPath`、`operator`、`requestName`;按需求补充表单赋值。`requestName`、`odocId`、`dataId`、`secretLevel`、`secretLevelValidity` 均支持统一动态赋值。密级选项从当前租户 `getResourceInfo4Component` 接口读取;密级保护启用且未指定密级时,按前端逻辑默认取第一项,固定密级也会按实时选项 ID/名称校验。`dataId` 对应后端 `FormulaBean`,只在目标流程需要关联卡片数据 ID 时配置;未配置时省略。前端“创建后流转”默认值为 `1`。
|
|
@@ -14,4 +14,4 @@
|
|
|
14
14
|
|
|
15
15
|
## 最小计划
|
|
16
16
|
|
|
17
|
-
`workflowPath`、`requestId`、`operator
|
|
17
|
+
`workflowPath`、`requestId`、`operator`;按需求补充表单赋值。保存流程复用前端表单设置能力:主表和明细通过 `mapping`、`constants`、`formula`、`detail` 描述,CLI 会将它们编译进后端 DTO 的 `formData`,并实时读取真实主表/明细字段校验目标。`formula` 是 CLI 的字段赋值描述,不是后端 DTO 的顶层字段。`dataDrWithCalc` 对应表单设置中的“启用数据钻取及数据计算”,编译后写入 `formData.dataDrWithCalc`。`requestLevel` 对应后端顶层字段,取值为 `-1` 未设置、`0` 正常、`1` 重要、`2` 紧急,默认 `0`。`requestId`、`requestName`、`odocId` 和 `onlySaveForm` 支持动态赋值;`onlySaveForm` 默认 `false`。明细操作沿用前端规则:默认 `default` 表示不更新;配置赋值时必须明确选择新增、更新、覆盖等操作及其所需依据/策略。
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
# 退回流程(`ApproveSendBack`)
|
|
2
|
-
|
|
3
|
-
## 何时使用
|
|
4
|
-
|
|
5
|
-
将流程退回至一个指定节点。
|
|
6
|
-
|
|
7
|
-
## 先查询
|
|
8
|
-
|
|
9
|
-
查询流程定义、实例、真实退回节点和操作人。
|
|
10
|
-
|
|
11
|
-
## 不可猜测
|
|
12
|
-
|
|
13
|
-
退回节点必须属于该流程;不能以节点名称或猜测 ID 代替。
|
|
14
|
-
|
|
15
|
-
## 最小计划
|
|
16
|
-
|
|
17
|
-
`workflowPath`、`requestId`、`rejectToNodeId`、`operator
|
|
1
|
+
# 退回流程(`ApproveSendBack`)
|
|
2
|
+
|
|
3
|
+
## 何时使用
|
|
4
|
+
|
|
5
|
+
将流程退回至一个指定节点。
|
|
6
|
+
|
|
7
|
+
## 先查询
|
|
8
|
+
|
|
9
|
+
查询流程定义、实例、真实退回节点和操作人。
|
|
10
|
+
|
|
11
|
+
## 不可猜测
|
|
12
|
+
|
|
13
|
+
退回节点必须属于该流程;不能以节点名称或猜测 ID 代替。
|
|
14
|
+
|
|
15
|
+
## 最小计划
|
|
16
|
+
|
|
17
|
+
`workflowPath`、`requestId`、`rejectToNodeId`、`operator`。流程表单设置通过 `mapping`、`constants`、`formula`、`detail` 编译进后端 `formData`;`formula` 是 CLI 的字段赋值描述,不是 DTO 顶层字段。`dataDrWithCalc` 对应表单设置里的数据钻取及计算开关。明细默认 `default` 表示不更新,填写依据值或明细赋值时需明确配置 `operateType`,更新/删除还需提供对应条件和策略。
|
|
@@ -301,6 +301,7 @@
|
|
|
301
301
|
| `e10-cli wf-form add-detail-table <formId> <明细表名> [首字段名] [--init]` | 给流程表单加明细子表(saveSubForm+首字段+可选 init 放入布局)。机制同 eb 表 `form add-detail-table` |
|
|
302
302
|
| `e10-cli wf-form field-options <formId> <fieldId> --options '[{"name":"事假"},...]' [--default <序号>]` | 给流程表单 Select/SelectMultiple 配选项(read-modify-write:getFormField 读全字段→改 options→saveFormFieldNew 重存)。`--options` 支持 `@文件`;`--default` 默认选项 valueKey |
|
|
303
303
|
| `e10-cli wf-form layout init <formId> [--layout-id <布局ID>]` | 初始化/重建流程表单布局(initLayout,按 layoutType 选模板,默认 FLOW)。**`--layout-id` 指定要重建哪一套**(节点独立布局的 layoutId),不传则重建默认布局;字段属性用 `--read-only`/`--required`/`--single-row` 覆盖 |
|
|
304
|
+
| `e10-cli wf-form layout init-reviewed <formId> [--layout-id <布局ID>] --style-template <名称或ID> [--preview-only --out <计划文件>\|--preview @<计划文件>]` | 原生流程表单(含公文流程)PC 布局的审阅式模板应用:按 FLOW/EXCEL 类型查询并校验模板,预览后执行,保存后独立回读组件和模板效果。表格式简易模板用 `--easy-template` 替代 `--style-template`;不传模板则采用该布局类型默认模板。 |
|
|
304
305
|
| `e10-cli wf-form layout add <formId> --name <布局名>` | 新增一套流程表单布局。`--layout-type FLOW|EXCEL`(默认 FLOW)、`--terminal-type PC|MOBILE`(默认 PC)、`--describe`、`--workflow-id`;返回 `layoutId`,多套布局并存且不覆盖原布局 |
|
|
305
306
|
| `e10-cli wf-form code layout read/set <formId> --layout-id <id> --terminal PC\|MOBILE [--js <文件>] [--css <文件>]` | 读取或写入指定原生工作流程表单布局源码;代码写法读代码块指南。**源码 ecode 必须用 `encodeURI`,不能用 `encodeURIComponent`(设计器 `decodeURI` 读取)** |
|
|
306
307
|
| `e10-cli wf-form code layout preview/apply <formId> --layout-id <id> --terminal PC\|MOBILE [--js <文件>] [--css <文件>]` | 流程表单布局代码块的独立预览与回读写入;预览用 `--out`,应用用 `--preview @<文件>`。 |
|
|
@@ -58,42 +58,26 @@ e10-cli form-engine browser-definition scope set <formId> <fieldId> --module <mo
|
|
|
58
58
|
|
|
59
59
|
`records` 是完整范围记录,按 `get` 回读的 ID 更新既有项。人员范围与流程操作者的选项概念相近,但并非全量相同,必须以 `describe` 返回的可选布局为准。加入多项范围时,其可选数据取并集;未设置范围时不应把它误判为“空范围”。
|
|
60
60
|
|
|
61
|
-
###
|
|
61
|
+
### 关联 EBuilder:先选配置方式
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
关联 EBuilder 的数据范围决定**目标表单的哪些记录可以在浏览弹窗中选择**。先按规则复杂度选择命令:
|
|
64
64
|
|
|
65
|
-
|
|
65
|
+
| 需求 | 配置方式 | 适用范围 |
|
|
66
|
+
| --- | --- | --- |
|
|
67
|
+
| 按目标表单字段设置一层“且/或”条件 | `form ebuilder-scope get/set/clear` | 可使用固定值、目标字段选项、当前表单字段或目标表单字段作条件值 |
|
|
68
|
+
| `A OR (B AND C)` 等混合嵌套条件 | `form-engine browser-definition scope get/set` | 读取候选布局后编写完整条件树 |
|
|
66
69
|
|
|
67
|
-
|
|
70
|
+
先区分两张表单:**当前表单**是用户正在填写、包含关联 EBuilder 字段的源表单;**目标表单**是该关联字段打开浏览弹窗后列出记录的 EBuilder 表单。每条条件的左侧 `field` 始终选择**目标表单字段**,右侧取值来源决定比较方式:
|
|
68
71
|
|
|
69
|
-
|
|
72
|
+
| 右侧取值方式 | 左侧 `field` | 右侧字段 | 适用场景 |
|
|
73
|
+
| --- | --- | --- | --- |
|
|
74
|
+
| 固定值 `value` | 目标表单字段 | 手工输入的值或目标字段的选项 | 只允许选择状态为“启用”的目标记录 |
|
|
75
|
+
| 变量字段 `valueFrom: "currentFormField"` | 目标表单字段 | 当前表单字段 `valueField` | 只允许选择“所属项目”等于当前申请“相关项目”的任务;当前表单字段值作为筛选变量 |
|
|
76
|
+
| 本表字段 `valueFrom: "targetFormField"` | 目标表单字段 | 同一目标表单的另一个字段 `valueField` | 在每条目标记录内部比较两个字段;不引用当前表单的值 |
|
|
70
77
|
|
|
71
|
-
|
|
72
|
-
{
|
|
73
|
-
"key": "root", "relationship": "0", "isParent": true, "parentNode": "",
|
|
74
|
-
"isNewFilter": true, "version": 1, "showFilterIsNull": false,
|
|
75
|
-
"datas": [
|
|
76
|
-
{ "key": "a", "parentNode": "root", "isParent": false, "type": "condition",
|
|
77
|
-
"id": "name", "fieldName": "name", "fieldType": "String", "compType": "Text", "text": "标题",
|
|
78
|
-
"conditions": { "func": "eq", "value": "A", "selectValue": { "id": "manualInput", "content": "手动输入", "type": "SELECTION_CUSTOM" }, "customValue": "A", "customBrowserValue": [] } },
|
|
79
|
-
{ "key": "group-bc", "parentNode": "root", "relationship": "1", "isParent": true,
|
|
80
|
-
"datas": [
|
|
81
|
-
{ "key": "b", "parentNode": "group-bc", "isParent": false, "type": "condition",
|
|
82
|
-
"id": "name", "fieldName": "name", "fieldType": "String", "compType": "Text", "text": "标题",
|
|
83
|
-
"conditions": { "func": "eq", "value": "B", "selectValue": { "id": "manualInput", "content": "手动输入", "type": "SELECTION_CUSTOM" }, "customValue": "B", "customBrowserValue": [] } },
|
|
84
|
-
{ "key": "c", "parentNode": "group-bc", "isParent": false, "type": "condition",
|
|
85
|
-
"id": "name", "fieldName": "name", "fieldType": "String", "compType": "Text", "text": "标题",
|
|
86
|
-
"conditions": { "func": "eq", "value": "C", "selectValue": { "id": "manualInput", "content": "手动输入", "type": "SELECTION_CUSTOM" }, "customValue": "C", "customBrowserValue": [] } }
|
|
87
|
-
] }
|
|
88
|
-
]
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
上面展示的是 `scopeInfoRender` **解码后的条件树**,用于说明嵌套关系;实际 `scope.json` 须把整棵树序列化为 JSON 字符串,放入 `{"records":[{"scopeType":"scopeSql","scopeInfoRender":"<序列化后的条件树>"}]}`。字段 `id/fieldName/fieldType/compType`、`conditions` 的操作符和值结构要按目标字段和 `scope get` 返回的同类条件填写;选项、表单字段、变量字段等值的配置形状与示例的手动文本值不同。更新已有规则时保留其记录 ID(CLI 在未给 ID 时也会按 `scopeType` 查找并沿用已有 ID)。保存后再次 `scope get`,核对树层级、每层 `relationship`、字段和值及记录 ID。工作流程场景还须传 `--workflow-id`,并在所属工作流程的实际使用场景核对筛选效果。
|
|
78
|
+
“本表字段”的“本表”指**被浏览的目标表单**。如果需求写着“关联任务只能选当前所选项目的任务”,右侧应选**变量字段**,不能选本表字段。空值判断 `isnull`、`notnull` 没有右侧取值。旧 `form ebuilder-filter` 修改的是字段布局中的过滤参数,不保证被浏览数据定义识别;设置浏览弹窗可选记录使用本节的数据范围命令。
|
|
93
79
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
关联 EBuilder 字段的数据范围决定**目标表单的哪些记录可以在浏览弹窗中选择**。只需按目标表单主表字段给出一层 AND/OR 条件时,可使用 `form ebuilder-scope`;复杂嵌套条件使用上面的完整条件树。
|
|
80
|
+
#### 常用规则:查询、设置与清空
|
|
97
81
|
|
|
98
82
|
```bash
|
|
99
83
|
e10-cli form ebuilder-scope get <源objId> <appId> <EBuilder字段fieldId>
|
|
@@ -101,7 +85,11 @@ e10-cli form ebuilder-scope set <源objId> <appId> <EBuilder字段fieldId> --rul
|
|
|
101
85
|
e10-cli form ebuilder-scope clear <源objId> <appId> <EBuilder字段fieldId>
|
|
102
86
|
```
|
|
103
87
|
|
|
104
|
-
`源objId` 是包含关联字段的表单对象 ID;`appId` 是应用 ID;`fieldId` 是该关联字段的 ID。规则中的 `field`
|
|
88
|
+
`源objId` 是包含关联字段的表单对象 ID;`appId` 是应用 ID;`fieldId` 是该关联字段的 ID。规则中的 `field` 指目标表单主表字段,可填字段名或 ID,重名时用 ID。`--logic and|or` 控制所有规则的关系,缺省为 `and`。`--fill-null` 可在需要关联字段为空时填充的场景下使用,缺省关闭。
|
|
89
|
+
|
|
90
|
+
规则文件是 JSON 数组。操作符与条件取值写法如下:
|
|
91
|
+
|
|
92
|
+
例如,同时按客户状态和名称设置固定值条件:
|
|
105
93
|
|
|
106
94
|
```json
|
|
107
95
|
[
|
|
@@ -110,13 +98,16 @@ e10-cli form ebuilder-scope clear <源objId> <appId> <EBuilder字段fieldId>
|
|
|
110
98
|
]
|
|
111
99
|
```
|
|
112
100
|
|
|
113
|
-
|
|
|
114
|
-
| --- | --- |
|
|
115
|
-
| `operator` | `eq
|
|
116
|
-
| `value` |
|
|
117
|
-
|
|
|
101
|
+
| 项目 | 写法 | 含义与限制 |
|
|
102
|
+
| --- | --- | --- |
|
|
103
|
+
| `operator` | `eq`、`neq`、`like`、`isnull`、`notnull` | 等于、不等于、包含、为空、不为空;空值条件不填条件值 |
|
|
104
|
+
| 固定值 | `"value":"上海"` | 文本、数字、日期填目标值;选项类字段可填选项名或唯一选项值 ID,CLI 按实际选项匹配 |
|
|
105
|
+
| 当前表单字段 | `"valueFrom":"currentFormField","valueField":"相关项目"` | 选择“变量字段”:左侧仍是目标表单字段,右侧引用源表单主表字段的当前值 |
|
|
106
|
+
| 目标表单字段 | `"valueFrom":"targetFormField","valueField":"项目简介"` | 选择“本表字段”:左侧和右侧均来自被浏览的目标表单主表字段,逐条目标记录内部比较 |
|
|
107
|
+
|
|
108
|
+
字段引用时不填固定 `value`;`valueField` 可填字段名或 ID,重名时用 ID。CLI 先查询字段候选,再分别生成变量字段或本表字段的配置。目前字段引用只验证了**条件左侧为关联浏览字段**的情况;简便规则只读取源表单和目标表单的主表字段,不用于目标明细字段。
|
|
118
109
|
|
|
119
|
-
|
|
110
|
+
例如,浏览“关联项目”时,让目标表的“关联合同”等于当前表单的“关联合同”;再让目标表的“关联客户”等于目标表自己的“项目简介”:
|
|
120
111
|
|
|
121
112
|
```json
|
|
122
113
|
[
|
|
@@ -125,15 +116,57 @@ e10-cli form ebuilder-scope clear <源objId> <appId> <EBuilder字段fieldId>
|
|
|
125
116
|
]
|
|
126
117
|
```
|
|
127
118
|
|
|
128
|
-
|
|
119
|
+
例如,浏览“关联任务”时,只允许选择“所属项目”等于当前申请的“相关项目”、且“任务状态”不为“已完成”的任务,`scope-rules.json` 可写为:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
[
|
|
123
|
+
{"field":"所属项目","operator":"eq","valueFrom":"currentFormField","valueField":"相关项目"},
|
|
124
|
+
{"field":"任务状态","operator":"neq","value":"已完成"}
|
|
125
|
+
]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
此例须先确认“所属项目”是关联浏览字段、“任务状态”的选项中确有“已完成”,再用 `--logic and` 写入。选项名称或值 ID 均由 CLI 对照目标字段的实际选项。另一个字段引用例子是 `{"field":"关联客户","operator":"eq","valueFrom":"targetFormField","valueField":"项目简介"}`,表示目标表单内两个字段相比较。
|
|
129
|
+
|
|
130
|
+
`set --rules` 会按本次数组重建整组简便规则,修改前先 `get` 并保留仍需生效的条件。写入后再次 `get` 回读,并在实际表单的浏览弹窗核对可选记录。字段引用已验证写入与回读;随当前表单字段值变化的实时筛选效果仍须在实际场景核对。
|
|
129
131
|
|
|
130
|
-
|
|
132
|
+
只允许选择状态为“启用”的客户时,也可直接传规则数组:
|
|
131
133
|
|
|
132
134
|
```bash
|
|
133
135
|
e10-cli form ebuilder-scope set <源objId> <appId> <EBuilder字段fieldId> --rules '[{"field":"客户状态","operator":"eq","value":"启用"}]'
|
|
134
136
|
```
|
|
135
137
|
|
|
136
|
-
|
|
138
|
+
#### 复杂规则:完整条件树
|
|
139
|
+
|
|
140
|
+
关联 EBuilder 使用 `scopeType=scopeSql` 的条件树。需要 `A OR (B AND C)` 等混合逻辑时,使用 `form-engine browser-definition scope get/set` 读写完整 `records[].scopeInfoRender`。先用 `scope get` 读取原配置和候选布局,按目标表实际字段、字段类型与可选操作符调整条件树,再保存并回读。
|
|
141
|
+
|
|
142
|
+
条件树中的 `datas` 可以同时包含字段条件和子条件组;组的 `relationship` 为 `1`(AND/所有条件)或 `0`(OR/任一条件)。每个组有唯一 `key`,子项的 `parentNode` 指向直接父组的 `key`。例如 `A OR (B AND C)` 的结构是:
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"key": "root", "relationship": "0", "isParent": true, "parentNode": "",
|
|
147
|
+
"isNewFilter": true, "version": 1, "showFilterIsNull": false,
|
|
148
|
+
"datas": [
|
|
149
|
+
{ "key": "a", "parentNode": "root", "isParent": false, "type": "condition",
|
|
150
|
+
"id": "name", "fieldName": "name", "fieldType": "String", "compType": "Text", "text": "标题",
|
|
151
|
+
"conditions": { "func": "eq", "value": "A", "selectValue": { "id": "manualInput", "content": "手动输入", "type": "SELECTION_CUSTOM" }, "customValue": "A", "customBrowserValue": [] } },
|
|
152
|
+
{ "key": "group-bc", "parentNode": "root", "relationship": "1", "isParent": true,
|
|
153
|
+
"datas": [
|
|
154
|
+
{ "key": "b", "parentNode": "group-bc", "isParent": false, "type": "condition",
|
|
155
|
+
"id": "name", "fieldName": "name", "fieldType": "String", "compType": "Text", "text": "标题",
|
|
156
|
+
"conditions": { "func": "eq", "value": "B", "selectValue": { "id": "manualInput", "content": "手动输入", "type": "SELECTION_CUSTOM" }, "customValue": "B", "customBrowserValue": [] } },
|
|
157
|
+
{ "key": "c", "parentNode": "group-bc", "isParent": false, "type": "condition",
|
|
158
|
+
"id": "name", "fieldName": "name", "fieldType": "String", "compType": "Text", "text": "标题",
|
|
159
|
+
"conditions": { "func": "eq", "value": "C", "selectValue": { "id": "manualInput", "content": "手动输入", "type": "SELECTION_CUSTOM" }, "customValue": "C", "customBrowserValue": [] } }
|
|
160
|
+
] }
|
|
161
|
+
]
|
|
162
|
+
}
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
上面展示的是 `scopeInfoRender` **解码后的条件树**,用于说明嵌套关系;实际 `scope.json` 须把整棵树序列化为 JSON 字符串,放入 `{"records":[{"scopeType":"scopeSql","scopeInfoRender":"<序列化后的条件树>"}]}`。字段 `id/fieldName/fieldType/compType`、`conditions` 的操作符和值结构要按目标字段和 `scope get` 返回的同类条件填写;选项、表单字段、变量字段等值的配置形状与示例的手动文本值不同。更新已有规则时保留其记录 ID(CLI 在未给 ID 时也会按 `scopeType` 查找并沿用已有 ID)。保存后再次 `scope get`,核对树层级、每层 `relationship`、字段和值及记录 ID。工作流程场景还须传 `--workflow-id`,并在所属工作流程的实际使用场景核对筛选效果。
|
|
166
|
+
|
|
167
|
+
### 自定义浏览框
|
|
168
|
+
|
|
169
|
+
先用 `inspect` 找出目标字段及其 `bcw/customBrowser_*` 来源,再用 `describe` 或 `scope get` 读取当前配置和 `conditionLayout`。候选布局按当前浏览框动态返回,每个字段提供 `id/text/type/compType/conditionType` 等信息;条件树叶节点的字段 ID 与操作符须来自这份布局。`scopeInfoRender` 使用平台的完整条件树 JSON 字符串,组节点的 `datas` 可嵌套 AND/OR 条件。日期区间在候选操作符中记作 `between`,已见保存条件采用 `conditions.func="range"` 且 `value` 为两个日期值;其他操作符和值结构按该字段实际候选及现有配置填写。高级搜索同样先读该浏览框返回的 `layout.items`,再构造 `commonLines/commonCells/lines/cells/searchValue`。Tab 是否可配以 `inspect` 的 `tabs.platform` 为准。
|
|
137
170
|
|
|
138
171
|
### 人员范围码表与简化规则
|
|
139
172
|
|
|
@@ -77,6 +77,20 @@ e10-cli form code layout apply <表单objId> --layout-id <布局ID> --terminal P
|
|
|
77
77
|
|
|
78
78
|
多行文本、日期、下拉、浏览框可能由 `textarea`、`.ui-input-wrap`、`.ui-select-input`、`.ui-browser` 或更外层绘制边框;逐个定位实际画线元素。避免对 `.ebpage input` 或 `.ebpage *` 一次性去边框,这会误伤选择标记、上传区和表格线。
|
|
79
79
|
|
|
80
|
+
### 流式 PC 布局:分组与下拉框
|
|
81
|
+
|
|
82
|
+
已确认的流式 PC 页面以 `.weapp-ebpv-styled-flow` 标识布局容器。分组使用 `.weapp-form-widget__Collapse`;标题下方的蓝线是 `.weapp-form-collapse .ui-collapse-panel__title` 的 `border-bottom`,已观察到 `1px solid #1C69DB`。这条线也可由分组标题的布局样式设置产生;需要统一外观时优先检查分组标题配置,不要把设计器选中时的蓝色虚线框当成运行时边框。
|
|
83
|
+
|
|
84
|
+
下拉字段外层带 `.weapp-form-widget__Select`。实际画出灰色外框的是其 `.weapp-form-widget-content-container`:四侧计算样式均为 `1px solid #E2E2E2`。内部的 `.ui-select-input` 和 `.ui-input-wrap.ui-select-input` 四侧边框为 `none`;只修改内部节点的 `border` 无法替换可见外框。若目标布局需要给下拉外框单独配色,可在布局 CSS 中限定字段类型:
|
|
85
|
+
|
|
86
|
+
```css
|
|
87
|
+
.weapp-ebpv-styled-flow .weapp-form-widget__Select .weapp-form-widget-content-container {
|
|
88
|
+
border-color: #2F6FED;
|
|
89
|
+
}
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
此选择器依据页面 DOM 和计算样式确定,写入后的覆盖效果仍需在目标布局检查。不要把具体 `#widget_…` 或 `.weapp-form-layout_…` 的生成 ID 写进可复用规则。流式明细表已观察到 `.weapp-form-detail-table--FLOW`、`.weapp-form-detail-table-field-header` 和 `td.weapp-form-detail-table-column`;表头和格线的绘制节点尚需分别核对,不能直接套用表格式的 `.excelTableView-content-excel-table` 规则。
|
|
93
|
+
|
|
80
94
|
### 表格式布局的明细表
|
|
81
95
|
|
|
82
96
|
以下规则针对已识别的表格式 PC 明细表结构。流式明细表只有在实际存在这些类和表格元素时才可复用。
|
|
@@ -97,6 +111,33 @@ e10-cli form code layout apply <表单objId> --layout-id <布局ID> --terminal P
|
|
|
97
111
|
|
|
98
112
|
明细表标题对齐与基础边框先用布局网格设置。需要 CSS 补充表头配色时,同时检查内容表与固定表头 `.excelTableView-content-excel-table-fixed-first-row`。把背景写到 `td` 上,是为了避免单元格自带背景遮住整行状态色。
|
|
99
113
|
|
|
114
|
+
## 常见样式场景
|
|
115
|
+
|
|
116
|
+
以下按视觉目标选择写法。除了前文已识别的表格式组件路径,`.wea-form-*`、`.wea-detail-*` 等类名只作结构示意;使用前要从目标布局的实际 DOM 中取得选择器。优先用布局样式、排版、网格和字段属性完成平台已有的设置,CSS 负责其余视觉细节。
|
|
117
|
+
|
|
118
|
+
| 场景 | 写法与检查点 |
|
|
119
|
+
| --- | --- |
|
|
120
|
+
| URL/长文本限制行数 | 若目标页面确有 `.wea-url > span > p` 路径,可对其使用 `display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:3; overflow:hidden`。要只影响明细表时,在选择器前加实际明细容器作用域;检查悬停、编辑态与完整内容的可访问方式。 |
|
|
121
|
+
| 只读态视觉区分 | 找到真实的只读状态标记与输入框包裹层,再调整背景、边框和字色。隐藏清除按钮或下拉箭头只改变外观,不改变字段权限;先检查布局样式中已有的只读背景选项。 |
|
|
122
|
+
| 明细表表头与行 | 可设置表头配色、隔行色、悬停与数字对齐;表格式布局沿用上节的真实 DOM 路径,同时检查固定表头。数字列须用实际列标记限定,避免把文本列也右对齐。 |
|
|
123
|
+
| 按钮与表头 | 可补充品牌色、圆角、阴影或渐变;先检查布局样式中的按钮及表头配置,并确认选择器只覆盖目标布局与目标按钮,不误改弹窗按钮。 |
|
|
124
|
+
| 紧凑排版 | 可微调标题、字段间距和字号;列数、标题位置及网格尺寸仍用布局配置。不要通过 `float` 等规则重排字段。 |
|
|
125
|
+
| 必填与错误提示 | 可强化已有必填标记和错误状态的颜色、边框;先确认平台是否已经绘制星号,避免用 `::before` 重复生成。CSS 不代替必填和校验规则。 |
|
|
126
|
+
| 打印 | 用 `@media print` 隐藏实际页面的工具栏与操作按钮,并检查表头对比度、分页、固定表头及打印预览;不要假定屏幕上的按钮类名适用于打印页面。 |
|
|
127
|
+
|
|
128
|
+
例如,已确认目标布局存在 `.wea-url > span > p` 时,可在该布局的 CSS 文件中加入:
|
|
129
|
+
|
|
130
|
+
```css
|
|
131
|
+
.wea-url > span > p {
|
|
132
|
+
display: -webkit-box;
|
|
133
|
+
-webkit-box-orient: vertical;
|
|
134
|
+
-webkit-line-clamp: 3;
|
|
135
|
+
overflow: hidden;
|
|
136
|
+
}
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
其他场景先取目标元素及其父层的 DOM,再把上表中的目标映射为实际选择器;不要把示意类名直接保存到布局源码。获取 DOM 时,记录布局类型、终端以及普通/只读/报错等对应状态即可,不需要整页源码。
|
|
140
|
+
|
|
100
141
|
## 表格式与流式如何选规则
|
|
101
142
|
|
|
102
143
|
| 对象 | 表格式布局 | 流式布局 |
|
|
@@ -37,3 +37,5 @@ e10-cli form layout init-reviewed <objId> --config @init-config.json --preview @
|
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
初始化会重建整套布局,即使只覆盖一个字段也是如此。对已有布局的单字段属性调整,应先评估是否有更局部的字段属性命令;不要为了一个开关重建已精细设计的布局。`display/show` 会影响显示状态,执行后还应在实际表单预览中核对可见性。
|
|
40
|
+
|
|
41
|
+
原生工作流程表单及公文流程的 PC 布局使用 `wf-form layout init-reviewed` 完成同类模板的预览、应用和回读;参数与适用范围见[流程表单布局](workflow-layout.md)。EB 表单的 `form layout init-reviewed` 不接受流程表单 ID。
|
|
@@ -52,6 +52,8 @@
|
|
|
52
52
|
|
|
53
53
|
高级表格式模板的网格、模板 CSS 与实际布局 CSS 是不同的保存对象。模板被应用后,仍需回读实际布局并检查页面效果。当前 PC 流式模板的独立编辑、启停及删除不作为可用能力;按[流式模板指南](template/flow.md)中已经确认的能力操作。
|
|
54
54
|
|
|
55
|
+
创建或编辑布局时,应先把用户期望的**整体效果**拆成结构、单元格、组件、通用样式和运行状态,再选择相应能力组合完成。表格式的行列、合并、字段位置及单元格字体、背景、边框由网格或模板设置承担;组件的通用属性按已支持的布局样式设置;主题色、悬停、高亮及控件的特殊呈现可由 CSS 补足;需要交互逻辑时再使用 JS。一个效果涉及多个层级时,应把相关配置一起完成并在实际布局中核对,不应只修改其中一个层级就认为整体效果已经实现。
|
|
56
|
+
|
|
55
57
|
## 通用核对顺序
|
|
56
58
|
|
|
57
59
|
1. 查询目标表单、布局 ID、布局类型、终端及字段;已有精细布局先导出底稿。
|
|
@@ -60,6 +62,12 @@
|
|
|
60
62
|
4. 按原配置与预览结果应用,随后独立回读。布局代码还须在实际页面检查运行效果;CSS 还须检查 PC/移动端和组件状态。
|
|
61
63
|
5. 若目标布局或字段在预览后发生变化,重新读取并预览,不沿用旧报告。
|
|
62
64
|
|
|
65
|
+
## 问题反馈
|
|
66
|
+
|
|
67
|
+
创建模板、创建或调整布局时,正常的配置选择、预览和回读按任务连续完成;**一般情况不需要停下来要求用户确认,也不需要逐项报告无问题的检查结果**。
|
|
68
|
+
|
|
69
|
+
遇到冲突、校验失败或预览效果异常时,应向用户说清楚:**哪个模板或布局、哪个区域/字段/单元格出了什么问题,对保存或实际显示有什么影响,准备如何修正**。例如列宽总和不符、组件位置重叠、分组或明细区域落在窄列、模板与布局类型不匹配、草稿引入新的结构问题。可修正的问题先依据预览和现有配置修正,再重新核对;无法继续时说明具体阻断原因及所需信息。不要只转述 `canApply=false`、`issues` 或笼统地说“布局有问题”。
|
|
70
|
+
|
|
63
71
|
各命令的完整参数见[CLI 命令参考](../../common/ref-cli-commands.md)。
|
|
64
72
|
|
|
65
73
|
## 相关能力
|