weaver-e10-builder 1.5.12 → 1.5.14
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 +1 -0
- package/dist/commands/actionflow.js.map +1 -1
- package/dist/commands/designer-common.d.ts.map +1 -1
- package/dist/commands/designer-common.js +91 -0
- package/dist/commands/designer-common.js.map +1 -1
- package/dist/commands/designer-setters.d.ts.map +1 -1
- package/dist/commands/designer-setters.js +148 -47
- package/dist/commands/designer-setters.js.map +1 -1
- package/dist/commands/form-add-detail-table.d.ts.map +1 -1
- package/dist/commands/form-add-detail-table.js +150 -8
- package/dist/commands/form-add-detail-table.js.map +1 -1
- package/dist/commands/form-browser-definition.d.ts +14 -0
- package/dist/commands/form-browser-definition.d.ts.map +1 -0
- package/dist/commands/form-browser-definition.js +493 -0
- package/dist/commands/form-browser-definition.js.map +1 -0
- package/dist/commands/form-code.d.ts +5 -0
- package/dist/commands/form-code.d.ts.map +1 -0
- package/dist/commands/form-code.js +276 -0
- package/dist/commands/form-code.js.map +1 -0
- package/dist/commands/form-engine-linkage.d.ts +3 -0
- package/dist/commands/form-engine-linkage.d.ts.map +1 -0
- package/dist/commands/form-engine-linkage.js +199 -0
- package/dist/commands/form-engine-linkage.js.map +1 -0
- package/dist/commands/form-formula.d.ts.map +1 -1
- package/dist/commands/form-formula.js +11 -6
- package/dist/commands/form-formula.js.map +1 -1
- package/dist/commands/form-layout-template-advanced.d.ts +3 -0
- package/dist/commands/form-layout-template-advanced.d.ts.map +1 -0
- package/dist/commands/form-layout-template-advanced.js +115 -0
- package/dist/commands/form-layout-template-advanced.js.map +1 -0
- package/dist/commands/form-layout-template-easy.d.ts +3 -0
- package/dist/commands/form-layout-template-easy.d.ts.map +1 -0
- package/dist/commands/form-layout-template-easy.js +59 -0
- package/dist/commands/form-layout-template-easy.js.map +1 -0
- package/dist/commands/form-layout.d.ts.map +1 -1
- package/dist/commands/form-layout.js +77 -0
- package/dist/commands/form-layout.js.map +1 -1
- package/dist/commands/form-list-filter.js +1 -1
- package/dist/commands/form-list-filter.js.map +1 -1
- package/dist/commands/form-list-utils.d.ts +5 -0
- package/dist/commands/form-list-utils.d.ts.map +1 -1
- package/dist/commands/form-list-utils.js +23 -3
- package/dist/commands/form-list-utils.js.map +1 -1
- package/dist/commands/form-permission.d.ts.map +1 -1
- package/dist/commands/form-permission.js +55 -19
- package/dist/commands/form-permission.js.map +1 -1
- package/dist/commands/form-physical-table.d.ts.map +1 -1
- package/dist/commands/form-physical-table.js +8 -2
- package/dist/commands/form-physical-table.js.map +1 -1
- package/dist/commands/form.d.ts.map +1 -1
- package/dist/commands/form.js +476 -30
- package/dist/commands/form.js.map +1 -1
- package/dist/commands/menu.d.ts +68 -2
- package/dist/commands/menu.d.ts.map +1 -1
- package/dist/commands/menu.js +186 -41
- package/dist/commands/menu.js.map +1 -1
- package/dist/commands/page.d.ts.map +1 -1
- package/dist/commands/page.js +29 -6
- package/dist/commands/page.js.map +1 -1
- package/dist/commands/special.d.ts.map +1 -1
- package/dist/commands/special.js +3 -2
- package/dist/commands/special.js.map +1 -1
- package/dist/commands/wf-form.d.ts.map +1 -1
- package/dist/commands/wf-form.js +76 -31
- package/dist/commands/wf-form.js.map +1 -1
- package/dist/commands/workflow-auth-resp.js +2 -2
- package/dist/commands/workflow-auth-resp.js.map +1 -1
- package/dist/commands/workflow-base-settings.d.ts +3 -0
- package/dist/commands/workflow-base-settings.d.ts.map +1 -0
- package/dist/commands/workflow-base-settings.js +73 -0
- package/dist/commands/workflow-base-settings.js.map +1 -0
- package/dist/commands/workflow-condition.d.ts.map +1 -1
- package/dist/commands/workflow-condition.js +59 -450
- package/dist/commands/workflow-condition.js.map +1 -1
- package/dist/commands/workflow-export.d.ts +9 -0
- package/dist/commands/workflow-export.d.ts.map +1 -0
- package/dist/commands/workflow-export.js +121 -0
- package/dist/commands/workflow-export.js.map +1 -0
- package/dist/commands/workflow-node.d.ts.map +1 -1
- package/dist/commands/workflow-node.js +28 -53
- package/dist/commands/workflow-node.js.map +1 -1
- package/dist/commands/workflow-operator-batch.d.ts +3 -0
- package/dist/commands/workflow-operator-batch.d.ts.map +1 -0
- package/dist/commands/workflow-operator-batch.js +35 -0
- package/dist/commands/workflow-operator-batch.js.map +1 -0
- package/dist/commands/workflow-subprocess.d.ts.map +1 -1
- package/dist/commands/workflow-subprocess.js +21 -33
- package/dist/commands/workflow-subprocess.js.map +1 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +36 -37
- package/dist/commands/workflow.js.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/services/actionflow/browser_source.d.ts +9 -0
- package/dist/services/actionflow/browser_source.d.ts.map +1 -0
- package/dist/services/actionflow/browser_source.js +12 -0
- package/dist/services/actionflow/browser_source.js.map +1 -0
- package/dist/services/actionflow/components/date_trigger.js +1 -1
- package/dist/services/actionflow/components/date_trigger.js.map +1 -1
- package/dist/services/actionflow/components/document_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/document_actions.js +178 -25
- package/dist/services/actionflow/components/document_actions.js.map +1 -1
- package/dist/services/actionflow/components/enquiry_form.js +1 -1
- package/dist/services/actionflow/components/enquiry_form.js.map +1 -1
- package/dist/services/actionflow/components/logic_flow_set.d.ts.map +1 -1
- package/dist/services/actionflow/components/logic_flow_set.js +80 -8
- package/dist/services/actionflow/components/logic_flow_set.js.map +1 -1
- package/dist/services/actionflow/components/meeting_create.d.ts.map +1 -1
- package/dist/services/actionflow/components/meeting_create.js +1 -0
- package/dist/services/actionflow/components/meeting_create.js.map +1 -1
- package/dist/services/actionflow/components/schedule_create.d.ts.map +1 -1
- package/dist/services/actionflow/components/schedule_create.js +2 -0
- package/dist/services/actionflow/components/schedule_create.js.map +1 -1
- package/dist/services/actionflow/components/time_batch_trigger.js +1 -1
- package/dist/services/actionflow/components/time_batch_trigger.js.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.d.ts.map +1 -1
- package/dist/services/actionflow/components/workflow_actions.js +6 -2
- package/dist/services/actionflow/components/workflow_actions.js.map +1 -1
- package/dist/services/actionflow/context_preflight.d.ts +5 -0
- package/dist/services/actionflow/context_preflight.d.ts.map +1 -1
- package/dist/services/actionflow/context_preflight.js +186 -35
- package/dist/services/actionflow/context_preflight.js.map +1 -1
- package/dist/services/actionflow/filter_rules.d.ts.map +1 -1
- package/dist/services/actionflow/filter_rules.js +9 -8
- package/dist/services/actionflow/filter_rules.js.map +1 -1
- package/dist/services/actionflow/form_source.d.ts +2 -0
- package/dist/services/actionflow/form_source.d.ts.map +1 -1
- package/dist/services/actionflow/form_source.js +8 -0
- package/dist/services/actionflow/form_source.js.map +1 -1
- package/dist/services/actionflow/formula_service.d.ts +2 -1
- package/dist/services/actionflow/formula_service.d.ts.map +1 -1
- package/dist/services/actionflow/formula_service.js +69 -34
- package/dist/services/actionflow/formula_service.js.map +1 -1
- package/dist/services/actionflow/logicflow_source.d.ts +5 -0
- package/dist/services/actionflow/logicflow_source.d.ts.map +1 -0
- package/dist/services/actionflow/logicflow_source.js +15 -0
- package/dist/services/actionflow/logicflow_source.js.map +1 -0
- package/dist/services/actionflow/preflight_service.d.ts +15 -0
- package/dist/services/actionflow/preflight_service.d.ts.map +1 -1
- package/dist/services/actionflow/preflight_service.js +561 -29
- package/dist/services/actionflow/preflight_service.js.map +1 -1
- package/dist/services/actionflow/runtime_metadata.d.ts +8 -0
- package/dist/services/actionflow/runtime_metadata.d.ts.map +1 -1
- package/dist/services/actionflow/runtime_metadata.js +25 -0
- package/dist/services/actionflow/runtime_metadata.js.map +1 -1
- package/dist/services/actionflow/workflow_compiler.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_compiler.js +75 -23
- package/dist/services/actionflow/workflow_compiler.js.map +1 -1
- package/dist/services/actionflow/workflow_source.d.ts +2 -0
- package/dist/services/actionflow/workflow_source.d.ts.map +1 -1
- package/dist/services/actionflow/workflow_source.js +7 -0
- package/dist/services/actionflow/workflow_source.js.map +1 -1
- package/dist/services/auth-resp-condition.d.ts +7 -3
- package/dist/services/auth-resp-condition.d.ts.map +1 -1
- package/dist/services/auth-resp-condition.js +58 -63
- package/dist/services/auth-resp-condition.js.map +1 -1
- package/dist/services/browser.d.ts +5 -0
- package/dist/services/browser.d.ts.map +1 -1
- package/dist/services/browser.js +16 -4
- package/dist/services/browser.js.map +1 -1
- package/dist/services/condition-rules.d.ts +2 -30
- package/dist/services/condition-rules.d.ts.map +1 -1
- package/dist/services/condition-rules.js +3 -219
- package/dist/services/condition-rules.js.map +1 -1
- package/dist/services/designer-dataset.d.ts +45 -0
- package/dist/services/designer-dataset.d.ts.map +1 -0
- package/dist/services/designer-dataset.js +156 -0
- package/dist/services/designer-dataset.js.map +1 -0
- package/dist/services/form-association.d.ts +7 -0
- package/dist/services/form-association.d.ts.map +1 -1
- package/dist/services/form-association.js +22 -1
- package/dist/services/form-association.js.map +1 -1
- package/dist/services/form-code.d.ts +53 -0
- package/dist/services/form-code.d.ts.map +1 -0
- package/dist/services/form-code.js +370 -0
- package/dist/services/form-code.js.map +1 -0
- package/dist/services/form-create.d.ts +20 -0
- package/dist/services/form-create.d.ts.map +1 -1
- package/dist/services/form-create.js +73 -1
- package/dist/services/form-create.js.map +1 -1
- package/dist/services/form-field-build.d.ts +1 -1
- package/dist/services/form-field-build.d.ts.map +1 -1
- package/dist/services/form-field-build.js +20 -1
- package/dist/services/form-field-build.js.map +1 -1
- package/dist/services/form-field-drop.d.ts +2 -0
- package/dist/services/form-field-drop.d.ts.map +1 -1
- package/dist/services/form-field-drop.js +2 -0
- package/dist/services/form-field-drop.js.map +1 -1
- package/dist/services/form-layout-detail-insert.d.ts +58 -0
- package/dist/services/form-layout-detail-insert.d.ts.map +1 -0
- package/dist/services/form-layout-detail-insert.js +293 -0
- package/dist/services/form-layout-detail-insert.js.map +1 -0
- package/dist/services/form-layout-insert.d.ts.map +1 -1
- package/dist/services/form-layout-insert.js +34 -2
- package/dist/services/form-layout-insert.js.map +1 -1
- package/dist/services/form-layout-source/compile.d.ts.map +1 -1
- package/dist/services/form-layout-source/compile.js +11 -4
- package/dist/services/form-layout-source/compile.js.map +1 -1
- package/dist/services/form-layout-template-advanced.d.ts +330 -0
- package/dist/services/form-layout-template-advanced.d.ts.map +1 -0
- package/dist/services/form-layout-template-advanced.js +1437 -0
- package/dist/services/form-layout-template-advanced.js.map +1 -0
- package/dist/services/form-layout-template-easy.d.ts +34 -0
- package/dist/services/form-layout-template-easy.d.ts.map +1 -0
- package/dist/services/form-layout-template-easy.js +159 -0
- package/dist/services/form-layout-template-easy.js.map +1 -0
- package/dist/services/form-layout-template-flow.d.ts +23 -0
- package/dist/services/form-layout-template-flow.d.ts.map +1 -0
- package/dist/services/form-layout-template-flow.js +99 -0
- package/dist/services/form-layout-template-flow.js.map +1 -0
- package/dist/services/form-linkage-condition.d.ts +15 -0
- package/dist/services/form-linkage-condition.d.ts.map +1 -1
- package/dist/services/form-linkage-condition.js +19 -10
- package/dist/services/form-linkage-condition.js.map +1 -1
- package/dist/services/form-permission-archive.d.ts +23 -1
- package/dist/services/form-permission-archive.d.ts.map +1 -1
- package/dist/services/form-permission-archive.js +54 -2
- package/dist/services/form-permission-archive.js.map +1 -1
- package/dist/services/form-physical-table.d.ts +10 -0
- package/dist/services/form-physical-table.d.ts.map +1 -1
- package/dist/services/form-physical-table.js +20 -0
- package/dist/services/form-physical-table.js.map +1 -1
- package/dist/services/form-sub-detail.d.ts +25 -0
- package/dist/services/form-sub-detail.d.ts.map +1 -1
- package/dist/services/form-sub-detail.js +64 -0
- package/dist/services/form-sub-detail.js.map +1 -1
- package/dist/services/form-view-linkage-functions.d.ts +19 -0
- package/dist/services/form-view-linkage-functions.d.ts.map +1 -0
- package/dist/services/form-view-linkage-functions.js +90 -0
- package/dist/services/form-view-linkage-functions.js.map +1 -0
- package/dist/services/matrix-condition.d.ts +32 -1
- package/dist/services/matrix-condition.d.ts.map +1 -1
- package/dist/services/matrix-condition.js +169 -6
- package/dist/services/matrix-condition.js.map +1 -1
- package/dist/services/menu-catalog.d.ts +24 -1
- package/dist/services/menu-catalog.d.ts.map +1 -1
- package/dist/services/menu-catalog.js +49 -2
- package/dist/services/menu-catalog.js.map +1 -1
- package/dist/services/workflow-base-settings.d.ts +117 -0
- package/dist/services/workflow-base-settings.d.ts.map +1 -0
- package/dist/services/workflow-base-settings.js +504 -0
- package/dist/services/workflow-base-settings.js.map +1 -0
- package/dist/services/workflow-condition-core.d.ts +48 -0
- package/dist/services/workflow-condition-core.d.ts.map +1 -0
- package/dist/services/workflow-condition-core.js +316 -0
- package/dist/services/workflow-condition-core.js.map +1 -0
- package/dist/services/workflow-context.d.ts +10 -0
- package/dist/services/workflow-context.d.ts.map +1 -0
- package/dist/services/workflow-context.js +15 -0
- package/dist/services/workflow-context.js.map +1 -0
- package/dist/services/workflow-export.d.ts +80 -0
- package/dist/services/workflow-export.d.ts.map +1 -0
- package/dist/services/workflow-export.js +150 -0
- package/dist/services/workflow-export.js.map +1 -0
- package/dist/services/workflow-field-permission-route.d.ts +75 -0
- package/dist/services/workflow-field-permission-route.d.ts.map +1 -0
- package/dist/services/workflow-field-permission-route.js +52 -0
- package/dist/services/workflow-field-permission-route.js.map +1 -0
- package/dist/services/workflow-field-permission.d.ts +18 -0
- package/dist/services/workflow-field-permission.d.ts.map +1 -0
- package/dist/services/workflow-field-permission.js +40 -0
- package/dist/services/workflow-field-permission.js.map +1 -0
- package/dist/services/workflow-node-layout.d.ts +11 -10
- package/dist/services/workflow-node-layout.d.ts.map +1 -1
- package/dist/services/workflow-node-layout.js +24 -62
- package/dist/services/workflow-node-layout.js.map +1 -1
- package/dist/services/workflow-operator-batch-condition.d.ts +23 -0
- package/dist/services/workflow-operator-batch-condition.d.ts.map +1 -0
- package/dist/services/workflow-operator-batch-condition.js +56 -0
- package/dist/services/workflow-operator-batch-condition.js.map +1 -0
- package/dist/services/workflow-operator.d.ts +12 -5
- package/dist/services/workflow-operator.d.ts.map +1 -1
- package/dist/services/workflow-operator.js +41 -16
- package/dist/services/workflow-operator.js.map +1 -1
- package/package.json +1 -1
- package/skill-docs/SKILL.md +155 -290
- package/skill-docs/_catalog.md +12 -3
- package/skill-docs/actionflows/references/components/document/GetDocumentInfo.md +17 -17
- package/skill-docs/actionflows/references/components/logic/LogicFlowSet.md +23 -17
- package/skill-docs/assets/form-template/style-templates-advanced-base-example.json +1420 -0
- package/skill-docs/assets/form-template/style-templates-advanced-base.css +33 -0
- package/skill-docs/assets/form-template/style-templates-advanced-blue-crystal-example.json +1094 -0
- package/skill-docs/assets/form-template/style-templates-advanced-document-example.json +1251 -0
- package/skill-docs/assets/form-template/style-templates-advanced-grid-example.json +39 -0
- package/skill-docs/assets/form-template/style-templates-advanced-page-example.json +38 -0
- package/skill-docs/assets/form-template/style-templates-advanced-placements-example.json +30 -0
- package/skill-docs/assets/form-template/style-templates-advanced-standard-example.json +53 -0
- package/skill-docs/assets/form-template/style-templates-advanced-structure-example.json +25 -0
- package/skill-docs/assets/form-template/style-templates-advanced-table-example.json +1420 -0
- package/skill-docs/references/code-block/guide-code-block.md +141 -0
- package/skill-docs/references/code-block/guide-layout-css.md +107 -0
- package/skill-docs/references/code-block/ref-controls.md +60 -0
- package/skill-docs/references/code-block/ref-coverage.md +32 -0
- package/skill-docs/references/code-block/ref-details.md +57 -0
- package/skill-docs/references/code-block/ref-events-validation.md +42 -0
- package/skill-docs/references/code-block/ref-foundations-fields.md +56 -0
- package/skill-docs/references/code-block/ref-recipes.md +164 -0
- package/skill-docs/references/code-block/ref-troubleshooting.md +49 -0
- package/skill-docs/references/code-block/ref-ui-global.md +47 -0
- package/skill-docs/references/coding/guide-page-code.md +2 -0
- package/skill-docs/references/coding/ref-compile-rules.md +2 -0
- package/skill-docs/references/common/capability-boundaries.md +15 -0
- package/skill-docs/references/common/guide-install.md +44 -0
- package/skill-docs/references/common/guide-plan-template.md +2 -1
- package/skill-docs/references/common/map.md +11 -1
- package/skill-docs/references/common/ref-cli-commands.md +689 -648
- package/skill-docs/references/ebuilder-designer/guide-designer-factory.md +8 -4
- package/skill-docs/references/form/form-template/style-templates-advanced-css-guide.md +167 -0
- package/skill-docs/references/form/form-template/style-templates-advanced.md +315 -0
- package/skill-docs/references/form/form-template/style-templates-easy.md +55 -0
- package/skill-docs/references/form/form-template/style-templates-flow.md +27 -0
- package/skill-docs/references/form/form-template/style-templates.md +29 -0
- package/skill-docs/references/form/guide-browser-definition.md +148 -0
- package/skill-docs/references/form/guide-create-form.md +258 -250
- package/skill-docs/references/form/guide-field-linkage.md +56 -14
- package/skill-docs/references/form/guide-form-archive-permission.md +29 -6
- package/skill-docs/references/form/guide-form-formula-functions.md +11 -0
- package/skill-docs/references/form/guide-form-layout-incremental.md +28 -0
- package/skill-docs/references/form/guide-form-layout-planning.md +11 -0
- package/skill-docs/references/form/guide-form-layout-source.md +4 -0
- package/skill-docs/references/form/guide-form-linkage.md +295 -269
- package/skill-docs/references/form/guide-form-physical-table.md +2 -0
- package/skill-docs/references/form/guide-form-view.md +3 -0
- package/skill-docs/references/form/ref-form-fields.md +301 -293
- package/skill-docs/references/form/ref-list-filter-date-params.md +83 -0
- package/skill-docs/references/menu/system-menus.md +12 -0
- package/skill-docs/references/workflow/condition-core-contract.md +63 -0
- package/skill-docs/references/workflow/guide-base-auth-share-remind.md +126 -0
- package/skill-docs/references/workflow/guide-workflow-condition.md +476 -447
- package/skill-docs/references/workflow/guide-workflow-node-layout.md +6 -0
- package/skill-docs/references/workflow/guide-workflow.md +29 -3
- package/skill-docs/references/form/style-templates.md +0 -97
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
# 按效果查代码模式
|
|
2
|
+
|
|
3
|
+
本页覆盖原案例中的独立做法。字段 Key、接口和字段对象均需替换为目标表单真实数据;示例中出现的模拟接口、固定附件对象和测试 ID 不能作为正式值。
|
|
4
|
+
|
|
5
|
+
| 想要的效果 | 组合方法 | 关键检查 |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| 保存前汇总明细人员到主表并去重 | `registerCheckEvent(OPER_SAVE)` → `getDetailAllRowIndexStr` → 逐行 `getBrowserOptionEntity` → 按 id 去重 → `changeFieldValue(...,{specialObj})` → `successFn` | 空行、重复人员、失败回调;仅拦表单保存 |
|
|
8
|
+
| 附件字段回填且可预览 | 从附件模块/现有字段取完整对象 → `changeFieldValue(...,{specialObj:[{id,name,data,type:'file'}]})` | 文件权限、预览/下载入口;不可只传 id/name |
|
|
9
|
+
| 多级选项等复杂值赋值 | 先 `getFieldObj` 观察已有对象 → 按 `data.content` 或 `data.dataOptions` 等原结构写 `specialObj` | 选项模板、次级选项正确显示 |
|
|
10
|
+
| 将明细富文本显示为按钮或链接 | `getDetailAllRowIndexStr` 遍历每行 → `proxyFieldComp` 替换该行内容;添加行事件补新行 | 点击跳转地址与作用范围 |
|
|
11
|
+
| 按两个维度分类、累加到另一明细表 | `getDetailData` 建组合 Key → 对目标行更新/新增/删除 → 监听来源值变化和增删行 | 组合 Key 唯一、消失分组删除、重复事件 |
|
|
12
|
+
| 全表单跨模块识别字段并回填外部数据 | 全局 ecode `onFormReady` 取当前实例并限制 module/formId → 字段事件 → 调受支持接口 → `changeMoreField` | 权限、数据范围、主表/明细位置、失败与清空逻辑 |
|
|
13
|
+
| 明细数字合计并算各行占比 | 读取明细每行数值 → `reduce` 求和 → 主表回写 → 逐行占比赋值;监听值变化及增删行 | 空值、非数字、总额 0、精度 |
|
|
14
|
+
| 联动带出后再汇总并触发后续联动 | 对带出字段监听联动 scope → 汇总 → 写主表 → 必要时 `triggerFieldAllLinkage` | 避免循环;确认事件是否实际触发 |
|
|
15
|
+
| 合并多个主表浏览/选项字段 | 多字段 `getBrowserOptionEntity` → 合并或按 id 去重 → 主表 `specialObj` 赋值 | 是否保留重复项、空字段 |
|
|
16
|
+
| 按同行条件选择明细人员合并到主表 | `getDetailData` → 判断同行选项值 → 取人员对象 → 去重 → `changeFieldValue` | 条件变化、增删行后重算 |
|
|
17
|
+
| 子明细按父行汇总金额 | 父、子关系字段匹配 → 筛子表数据 → 合计 → 回写父表指定 `rowId` | 父标识唯一、子行归属、父行删除后的处理 |
|
|
18
|
+
| 按显示序号生成明细值 | 明细行数组按显示顺序 `map((row,index)=>...)` → `changeDetailData`;监听增删行 | 排序后重新计算,避免把序号当 rowId |
|
|
19
|
+
| 某字段为空时触发另一字段联动 | `getFieldValue` 判空 → `triggerFieldAllLinkage(target)`;载入与源字段变化均执行 | 空字符串、0 与未选择的判定 |
|
|
20
|
+
| 自定义页面参数传递/组件换肤 | 全局 ecode `regOvProps` 或表单字段 `proxyFieldContentComp`,按生效范围选择 | 组件名/props 契约、编译入口 |
|
|
21
|
+
|
|
22
|
+
上述模式涉及的完整 API、参数与风险分别见 [事件](ref-events-validation.md)、[字段](ref-foundations-fields.md)、[明细](ref-details.md)、[控件](ref-controls.md) 和 [组件交互](ref-ui-global.md)。原案例存在重复与少量不完整代码:例如重复的“保存前汇总人员”,附件数据依赖文档模块,组件 props 示例有语法笔误,数字合计示例用 `eval`,全局回填示例包含模拟数据。这里保留其实现思路,代码应按专题中可运行的结构重新组装。
|
|
23
|
+
|
|
24
|
+
## 保存前汇总明细人员并去重
|
|
25
|
+
|
|
26
|
+
先定位明细、明细人员字段和主表目标字段;仅在表单数据保存前执行。需要流程“提交”时改用流程 SDK 的节点提交事件。
|
|
27
|
+
|
|
28
|
+
```js
|
|
29
|
+
const table = formSdk.convertFieldNameToId('people_detail', 'main');
|
|
30
|
+
const detailPerson = formSdk.convertFieldNameToId('person', table);
|
|
31
|
+
const mainPeople = formSdk.convertFieldNameToId('all_people', 'main');
|
|
32
|
+
formSdk.registerCheckEvent(window.WeFormSDK.OPER_SAVE, (ok, stop) => {
|
|
33
|
+
try {
|
|
34
|
+
const rowIds = (formSdk.getDetailAllRowIndexStr(table) || '').split(',').filter(Boolean);
|
|
35
|
+
const unique = new Map();
|
|
36
|
+
for (const rowId of rowIds) {
|
|
37
|
+
for (const item of formSdk.getBrowserOptionEntity(`${detailPerson}_${rowId}`) || []) {
|
|
38
|
+
if (item?.id) unique.set(String(item.id), item);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
formSdk.changeFieldValue(mainPeople, {specialObj: [...unique.values()]});
|
|
42
|
+
ok();
|
|
43
|
+
} catch (error) {
|
|
44
|
+
stop({msg: '人员汇总失败,请检查明细数据'});
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## 明细数值汇总并计算占比
|
|
50
|
+
|
|
51
|
+
值变化、增行、删行和初次载入都要重新计算;`getDetailData` 的每行包含 `rowId`。示例以数值 0 处理空值,业务若要求空值报错,应另作校验。
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
const table = formSdk.convertFieldNameToId('cost_detail', 'main');
|
|
55
|
+
const detailAmount = formSdk.convertFieldNameToId('amount', table);
|
|
56
|
+
const detailShare = formSdk.convertFieldNameToId('share', table);
|
|
57
|
+
const mainTotal = formSdk.convertFieldNameToId('total', 'main');
|
|
58
|
+
function recalculate() {
|
|
59
|
+
const rows = formSdk.getDetailData(table) || [];
|
|
60
|
+
const total = rows.reduce((sum, row) => sum + Number(row[detailAmount]?.value || 0), 0);
|
|
61
|
+
formSdk.changeFieldValue(mainTotal, {value: String(total)}, {jsApiChange: false});
|
|
62
|
+
for (const row of rows) {
|
|
63
|
+
const amount = Number(row[detailAmount]?.value || 0);
|
|
64
|
+
formSdk.changeFieldValue(`${detailShare}_${row.rowId}`, {value: String(total ? amount / total : 0)}, {jsApiChange: false});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
formSdk.bindFieldChangeEvent(detailAmount, recalculate);
|
|
68
|
+
formSdk.registerAction(`${window.WeFormSDK.ACTION_ADDROW}${table}`, recalculate);
|
|
69
|
+
formSdk.registerAction(`${window.WeFormSDK.ACTION_DELROW}${table}`, recalculate);
|
|
70
|
+
recalculate();
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
如汇总源值本身来自字段联动,普通字段变化事件可能不触发;依目标基线使用 `scope: window.WeFormSDK.CHANGE_EVENT_LINKAGE` 或监听 `ACTION_DATA_LINKAGE`。占比输出为 0~1 还是 0~100,须按目标字段的百分比显示方式确定。不要直接打开全局联动事件开关而不检查既有监听是否形成循环。
|
|
74
|
+
|
|
75
|
+
## 父子明细按关系字段回写
|
|
76
|
+
|
|
77
|
+
父、子明细的关系字段值相同才能归属同一父行。先配置真实二级明细关系,再对每个父行筛选对应子行。这里的业务主键与 `rowId` 分开。
|
|
78
|
+
|
|
79
|
+
```js
|
|
80
|
+
const parentTable = formSdk.convertFieldNameToId('parent_detail', 'main');
|
|
81
|
+
const childTable = formSdk.convertFieldNameToId('child_detail', 'main');
|
|
82
|
+
const parentKey = formSdk.convertFieldNameToId('parent_key', parentTable);
|
|
83
|
+
const parentTotal = formSdk.convertFieldNameToId('parent_total', parentTable);
|
|
84
|
+
const childKey = formSdk.convertFieldNameToId('child_parent_key', childTable);
|
|
85
|
+
const childAmount = formSdk.convertFieldNameToId('child_amount', childTable);
|
|
86
|
+
function recalculateParents() {
|
|
87
|
+
const children = formSdk.getDetailData(childTable) || [];
|
|
88
|
+
for (const parent of formSdk.getDetailData(parentTable) || []) {
|
|
89
|
+
const key = parent[parentKey]?.value;
|
|
90
|
+
const total = children.filter(row => row[childKey]?.value === key)
|
|
91
|
+
.reduce((sum, row) => sum + Number(row[childAmount]?.value || 0), 0);
|
|
92
|
+
formSdk.changeFieldValue(`${parentTotal}_${parent.rowId}`, {value: String(total)}, {jsApiChange: false});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
formSdk.bindFieldChangeEvent(childAmount, recalculateParents);
|
|
96
|
+
formSdk.registerAction(`${window.WeFormSDK.ACTION_ADDROW}${childTable}`, recalculateParents);
|
|
97
|
+
formSdk.registerAction(`${window.WeFormSDK.ACTION_DELROW}${childTable}`, recalculateParents);
|
|
98
|
+
recalculateParents();
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
关系字段若为选项而非文本,按 `getFieldObj` 的 `specialObj` 比较 ID。父行标识必须唯一;删除父行后的子行处置应由业务规则明确。用 `getDetailData` 复制子行时不要复制旧 `rowId`。
|
|
102
|
+
|
|
103
|
+
## 来源明细按两列分组,同步到目标明细
|
|
104
|
+
|
|
105
|
+
来源中按“部门 ID + 类型 ID”分组求和;目标中已有分组更新、缺失分组新增、来源已消失的分组删除。监听来源的两列条件字段、数值字段与增删行事件。下面只展示同步函数,绑定方式同上方汇总案例。
|
|
106
|
+
|
|
107
|
+
```js
|
|
108
|
+
function syncGroups(sourceTable, targetTable, sourceDept, sourceType, sourceAmount,
|
|
109
|
+
targetDept, targetType, targetAmount) {
|
|
110
|
+
const groups = new Map();
|
|
111
|
+
for (const row of formSdk.getDetailData(sourceTable) || []) {
|
|
112
|
+
const dept = row[sourceDept]?.specialObj?.[0];
|
|
113
|
+
const type = row[sourceType]?.specialObj?.[0];
|
|
114
|
+
if (!dept?.id || !type?.id) continue;
|
|
115
|
+
const key = `${dept.id}:${type.id}`;
|
|
116
|
+
const item = groups.get(key) || {dept, type, total: 0};
|
|
117
|
+
item.total += Number(row[sourceAmount]?.value || 0);
|
|
118
|
+
groups.set(key, item);
|
|
119
|
+
}
|
|
120
|
+
const existing = new Map();
|
|
121
|
+
for (const row of formSdk.getDetailData(targetTable) || []) {
|
|
122
|
+
const deptId = row[targetDept]?.specialObj?.[0]?.id;
|
|
123
|
+
const typeId = row[targetType]?.specialObj?.[0]?.id;
|
|
124
|
+
if (!deptId || !typeId || !groups.has(`${deptId}:${typeId}`)) {
|
|
125
|
+
formSdk.delDetailRow(targetTable, row.rowId);
|
|
126
|
+
} else {
|
|
127
|
+
existing.set(`${deptId}:${typeId}`, row.rowId);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
for (const [key, item] of groups) {
|
|
131
|
+
const rowId = existing.get(key);
|
|
132
|
+
if (rowId) {
|
|
133
|
+
formSdk.changeFieldValue(`${targetAmount}_${rowId}`, {value: String(item.total)}, {jsApiChange: false});
|
|
134
|
+
} else {
|
|
135
|
+
formSdk.addDetailRow(targetTable, {
|
|
136
|
+
[targetDept]: {specialObj: [item.dept]},
|
|
137
|
+
[targetType]: {specialObj: [item.type]},
|
|
138
|
+
[targetAmount]: {value: String(item.total)}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
这种同步会删除目标中无来源的行,只有目标表完全由来源派生时才适用;若允许用户手工维护目标行,应改为保留手工行并有明确的来源标识。跨字段 `id` 类型与数值精度须按实际表单处理。
|
|
146
|
+
|
|
147
|
+
## 根据明细同行条件筛人员,合并到主表
|
|
148
|
+
|
|
149
|
+
对每行读取条件选项,按不同条件分别取对应人员字段,再按人员 ID 去重并写入主表。初次载入、条件/人员字段变化、明细增删行均重新执行。
|
|
150
|
+
|
|
151
|
+
```js
|
|
152
|
+
function syncPeople(table, conditionField, firstPeopleField, secondPeopleField, mainPeopleField) {
|
|
153
|
+
const people = new Map();
|
|
154
|
+
for (const row of formSdk.getDetailData(table) || []) {
|
|
155
|
+
const choice = row[conditionField]?.specialObj?.[0]?.id;
|
|
156
|
+
const selected = choice === '0' ? row[firstPeopleField]?.specialObj :
|
|
157
|
+
choice === '1' ? row[secondPeopleField]?.specialObj : [];
|
|
158
|
+
for (const person of selected || []) if (person?.id) people.set(String(person.id), person);
|
|
159
|
+
}
|
|
160
|
+
formSdk.changeFieldValue(mainPeopleField, {specialObj: [...people.values()]}, {jsApiChange: false});
|
|
161
|
+
}
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
条件选项 ID `'0'/'1'` 是示例占位,须读取真实选项 ID。若人员字段由系统联动带出,还要按[事件指南](ref-events-validation.md)监听联动完成事件。
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# JSSDK 排查、版本与边界
|
|
2
|
+
|
|
3
|
+
## 代码不生效时
|
|
4
|
+
|
|
5
|
+
1. 确认保存的是目标表单的目标布局及目标终端,或正确的表单级/全局 ecode;JS 编译通过且代码已启用,CSS 单独保存。浏览器打开的是最新布局而非另一设备布局。
|
|
6
|
+
2. 确认 `formSdk` 取自当前表单实例;全局 ecode 用 `onFormReady` 的事件实例并限定 formId/module。较早基线的 `pageSdk.on('formReady')` 与新基线闭包方式不要混用到未支持的入口。
|
|
7
|
+
3. 用 `getBaseInfo`、`convertFieldNameToId`、`getFieldInfo` 检查当前表单和字段;数据 Key 不是字段名或物理表名。明细字段要指定明细表位置,行操作要取得真实 `rowId`。
|
|
8
|
+
4. 用 `getFieldObj` 对照目标类型的数据形状。文本/数字/日期常用 `{value}`;浏览/动态选项/附件常用 `{specialObj}`。附件预览还依赖完整 `data`。
|
|
9
|
+
5. 检查事件是否属于“表单保存”“流程提交”“用户改变”“联动改变”中的哪一种;必要时分开绑定。拦截回调必须调用通过或阻断函数;异步超时约 25 秒。
|
|
10
|
+
6. 检查权限和组件边界。流程节点默认只读或权限锁定的字段,不能仅靠 `changeFieldAttr(2)` 放开;JS 渲染也不改变后端权限。
|
|
11
|
+
|
|
12
|
+
开发调试时可按环境入口临时屏蔽不同层级二开:ecode 平台、全局初始化代码、布局源码对应不同入口。调试开关仅用于定位,不作为正式配置。对含多表单、父子页面、明细新行的场景,还要检查实例、`postMessage` 来源与渲染时机。
|
|
13
|
+
|
|
14
|
+
## 设计器源码面板为空 / ECode decode failed
|
|
15
|
+
|
|
16
|
+
- **症状**:打开布局源码时控制台报 `ECode decode failed, SyntaxError: Expected ':' after property name in JSON at position 5`,源码面板为空,预览按钮失效。
|
|
17
|
+
- **原因**:`sourceCode.ecode` 被 `encodeURIComponent` 写入。设计器用 `JSON.parse(decodeURI(ecode))` 读取,而 `decodeURI` 不还原 `%3A`(冒号),JSON 变成 `{"js"%3A...}`。
|
|
18
|
+
- **处理**:用 `form code layout set` / `wf-form code layout set` 重新写入(CLI 已使用 `encodeURI`,并在写入前、回读后按设计器路径自检)。临时恢复可把 `sourceCode.ecode` 置为空字符串,再用空 JS/CSS 文件重写。
|
|
19
|
+
- **手工调接口**:必须用 `encodeURI(JSON.stringify({js, css}))`,不要用 `encodeURIComponent`。
|
|
20
|
+
|
|
21
|
+
## 基线速查
|
|
22
|
+
|
|
23
|
+
| 功能 | 原技术资料标注的最低基线 |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `changeFieldValue` 的联动控制参数 | 241001 |
|
|
26
|
+
| `valueInfo.type/contentObj` 特殊字段 | 241201 |
|
|
27
|
+
| 字段联动拦截及联动动作的 `runData` | 240601 |
|
|
28
|
+
| 字段变化事件的联动 `scope` | 250401;明细专用事件的扩展参数 250901 |
|
|
29
|
+
| 明细批量添加 `addDetailData` | 241201 |
|
|
30
|
+
| 布局/表单代码直接取得当前 `formSdk` | 主体说明标注 250101;另有一处写 241201,稳妥按 250101 判断 |
|
|
31
|
+
| 明细批量更新 `changeDetailData` | 250101 |
|
|
32
|
+
| `changeTabItemAttr` | 20250501 |
|
|
33
|
+
| `controlOptionDisable` | 20250501 |
|
|
34
|
+
| `convertFieldNameToId` 用明细表数据 Key 定位明细字段 | 260601 |
|
|
35
|
+
| `getDetailData` 按当前明细筛选条件取数 | 260401 |
|
|
36
|
+
| `triggerFieldAllLinkage(...).then(...)` | 250901 |
|
|
37
|
+
| 联动赋值导致的明细行变化事件扩展 | 251101 |
|
|
38
|
+
| `pluginGet/pluginExecute` | 260201 |
|
|
39
|
+
|
|
40
|
+
先确认目标环境版本和实际 API 可用性;未达到基线时不要假设同名功能可用。
|
|
41
|
+
|
|
42
|
+
## 原案例中需纠正的写法
|
|
43
|
+
|
|
44
|
+
- 字段赋值示例声明 `textFieldMark` 后却调用 `fieldMark`,日期示例声明 `dateFieldMark` 后调用 `selectFieldMark`;按真正声明的目标字段写。
|
|
45
|
+
- 字段属性示例的明细行模板字符串缺少引号闭合;正确形式为 `` `${detailField}_${rowId}` ``。
|
|
46
|
+
- `getFieldCom` 章节示例调用了 `getFieldInfo`;两者用途不同,前者为组件引用,后者为字段信息。
|
|
47
|
+
- 明细“默认使用末行”章节的示例实际调用 `setDetailAddUseCopy`;先确认所需是复制末行,而非仅控制默认光标或位置。
|
|
48
|
+
- 案例中的 `eval(numbers.join('+'))`、测试 URL、固定附件元数据、模拟外部查询结果不能直接用于业务配置。数值合计用显式转换与 `reduce`,外部接口须有真实契约。
|
|
49
|
+
- 全局 ecode 的 `import`、JSX、`regOvProps` 示例不要直接粘入布局源码;按目标编辑器支持的语法重写。布局源码中的局部字段组件复写则按其 API 单独处理。
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# 组件渲染、全局交互与扩展
|
|
2
|
+
|
|
3
|
+
## 当前表单与全局操作
|
|
4
|
+
|
|
5
|
+
`formSdk.getBaseInfo()` 读取当前表单基本信息;`formSdk.isMobile()` 判断移动端。布局级代码优先使用当前作用域 `formSdk`;提示、弹窗由全局 `window.WeFormSDK` 提供。
|
|
6
|
+
|
|
7
|
+
| 效果 | API 与要点 |
|
|
8
|
+
|---|---|
|
|
9
|
+
| 提示 | `window.WeFormSDK.showMessage(message, type?, duration?)`;type 为 `1` 警告、`2` 错误、`3` 成功;时长单位秒 |
|
|
10
|
+
| 确认 | `window.WeFormSDK.showConfirm(content, onOk, onCancel?, {title,okText,cancelText}?)`;title 仅 PC 有效 |
|
|
11
|
+
| 自定义弹窗 | `window.WeFormSDK.openCustomDialog({content,width,height,onOk,onCancel,footer?,...})`;返回对象可 `destroy()` |
|
|
12
|
+
| 页面刷新 | `formSdk.reloadPage(params?)` |
|
|
13
|
+
| 提交附加参数 | `formSdk.appendSubmitParam({customParam:{...}})`;接收端仍须能处理该参数 |
|
|
14
|
+
| 主动做必填检查 | `formSdk.verifyFormRequired(mustAddDetail?,fieldRequired?)` |
|
|
15
|
+
| 全局加载 | `window.WeFormSDK.getLoadingGlobal()` 取加载控件,调用 `start()`、`end()`、`destroy()` |
|
|
16
|
+
| 关闭页面提示 | `formSdk.setFormTipCloseStatus(true/false)`;只控制提示状态,不执行保存 |
|
|
17
|
+
|
|
18
|
+
自定义 footer 使用 `@weapp/ui` 的 import/JSX 是 ecode 构建环境示例;布局源码只允许其编辑器可编译的语法和已暴露对象,不能直接套用 ecode 依赖。
|
|
19
|
+
|
|
20
|
+
## 字段区域事件和局部渲染
|
|
21
|
+
|
|
22
|
+
`bindFieldAction(type, fields, handler)` 绑定失焦、聚焦、点击、双击、移入/移出;事件类型为 `onblur/onfocus/onclick/ondbclick/mouseover/mouseout`。
|
|
23
|
+
|
|
24
|
+
| 需求 | API |
|
|
25
|
+
|---|---|
|
|
26
|
+
| 将当前字段内容替换为自定义内容 | `proxyFieldComp(fieldMark, reactNode或文本, range?)` |
|
|
27
|
+
| 在字段后追加内容 | `afterFieldComp(fieldMark, reactNode或文本, range?)` |
|
|
28
|
+
| 用函数包装原字段内容并利用 props 决定样式 | `proxyFieldContentComp(fieldMark, (props, componentFn) => React.createElement(..., componentFn()))` |
|
|
29
|
+
|
|
30
|
+
`range` 省略时作用于全部读写状态;`'1'` 只读、`'2'` 可编辑、`'3'` 必填,多个值以逗号分隔。`proxyFieldContentComp` 的回调必须返回组件,第二参数 `componentFn` 可生成原字段内容。`React` 可用性和编译语法要以目标代码入口为准。明细字段不加行 ID 可作用于整列,指定行则加 `_rowId`;新添行的专门逻辑应在添加行事件后检查是否生效。此能力是当前表单字段的局部渲染,不等于发布平台级新组件,也不等于改写后端接口。
|
|
31
|
+
|
|
32
|
+
```js
|
|
33
|
+
const field = formSdk.convertFieldNameToId('status', 'main');
|
|
34
|
+
formSdk.proxyFieldContentComp(field, (props, original) =>
|
|
35
|
+
React.createElement('div', {style: {backgroundColor: props?.widgetValue?.content === '1' ? '#e3f2fd' : ''}}, original())
|
|
36
|
+
);
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 插件与页面间通信
|
|
40
|
+
|
|
41
|
+
260201 及以后基线提供 `formSdk.pluginGet(fieldMark, property)` 和 `formSdk.pluginExecute(fieldMark, method, ...args)`;只能操作该插件实际公开的属性/方法。具体 WPS 或其他插件须取得该插件契约,不能从 JSSDK 通用接口推断方法名。
|
|
42
|
+
|
|
43
|
+
`window.open` 打开的子页面可通过 `window.opener` 访问父窗口;同源时可操作父页面的表单实例。跨源时用 `postMessage`,接收方检查 `event.origin` 和 `event.data.type`,发送方指定目标 origin;只发送必要数据,不传鉴权信息。
|
|
44
|
+
|
|
45
|
+
子表控件数据变化后,如需刷新相关显示,布局源码中可调用 `pageSdk.events.emit('field.change', '纯数字字段ID')`;ecode 中可调用 `window.ebuilderSDK.getPageSDK().events.emit('field.change', '纯数字字段ID')`。原资料还提到可附第三个字段数据参数:文本传文本,浏览型传以逗号分隔的 ID;按实际刷新需求决定是否传值。此处第二参数是纯数字字段 ID,不是带 `field` 前缀的标识。
|
|
46
|
+
|
|
47
|
+
全局 ecode 的 `regOvProps` 可复写特定组件 props,但其包名与目标组件名是项目级契约;它和布局内 `proxyFieldContentComp` 是不同层级。采用哪一层,应以所需生效范围为准。
|
|
@@ -217,6 +217,8 @@ if (editingId) {
|
|
|
217
217
|
| **资源统一用 `${appRes}/相对路径`**(如 `${appRes}/logo.png`) | `${appRes}` 是平台模板变量,导入后自动替换成正式静态地址。**禁止**写 `./resources/...`、`../resources/...`、`/resources/...`,发布后必 404。 |
|
|
218
218
|
| **禁止在线资源** | 不要 `loadjs('http(s)://...')`、CDN、外链脚本——平台不加载外网资源。确需第三方脚本:先下载进项目,再按上一条 `${appRes}` 引用。 |
|
|
219
219
|
| **禁止在 JS 里 `import` CSS** | ecode 没有 CSS 模块解析,`import './x.css'` 不会生效,样式静默丢失。少量样式用内联 style;独立 CSS 文件的打包规则见 `ref-compile-rules.md`「E10 打包与平台加载规则」。 |
|
|
220
|
+
| **HTML 原型:样式严格 100% 还原** | 用户提供 HTML 原型时,页面样式必须与原型严格一致(布局、间距、字号、颜色、圆角、边框、层级),不得用平台默认样式近似代替;交付前逐项对照原型自检。 |
|
|
221
|
+
| **HTML 复刻:样式写进代码,不建独立 CSS 文件** | 用户提供 HTML/设计稿并要求完整复刻时,样式全部写在组件代码里(内联 `style` / 代码内样式对象),**不要生成独立 `.css` 文件**——拆出去不保证被加载,复刻会静默丢样式。 |
|
|
220
222
|
| **全部用 ESM `import` / `export`,禁止 `module.exports`** | 平台按模块加载,CommonJS 导出解析不到。 |
|
|
221
223
|
| **只用白名单组件及其文档化 props** | 拿不准的组件 / prop / 图标名,先查 `references/components/`,不要凭记忆从 `@weapp/ui` 编造。 |
|
|
222
224
|
| **不碰平台组件内部** | 不读 `props.children[...]`(含可选链写法)、不依赖内部 class / `weId` 段、不做全局无条件 `regOvComponent` 复写——内部结构不是稳定 API,平台升级即坏。 |
|
|
@@ -112,6 +112,8 @@ e10-cli project import <projectId> .target/xxx.zip --main-url /sp/custom/...
|
|
|
112
112
|
### CSS 规则
|
|
113
113
|
|
|
114
114
|
- **禁止在 JS 里 `import` CSS**:ecode 无 CSS 模块解析,写了必丢、发布后无样式。
|
|
115
|
+
- **用户提供 HTML 原型时,页面样式严格 100% 还原**(布局、间距、字号、颜色、圆角、边框、层级),不用平台默认样式近似代替。
|
|
116
|
+
- **完整复刻用户提供的 HTML 时,样式一律内联进代码**(内联 style / 代码内样式对象),不要拆成独立 `.css` 文件:拆出去既不保证加载,也容易与页面结构脱节,复刻效果走样。
|
|
115
117
|
- 少量页面样式用内联 style;确需独立 `.css` 文件时,确认它在 `build.json` 的 codes 里(首次自动生成时 `.css` 会登记为 `y`;文件是后加的要自行补登记),否则平台不合并加载。
|
|
116
118
|
- 业务 CSS 选择器挂在页面根容器下,避免裸 `.类名`、`body`、`:root` 或平台内部 class 污染全局。
|
|
117
119
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# 平台与 CLI 能力边界
|
|
2
|
+
|
|
3
|
+
> 下列能力 **CLI 不支持、平台也不支持**。不要声称可以做,也不要输出操作步骤;直接告知用户「当前平台/CLI 不支持」。
|
|
4
|
+
|
|
5
|
+
| 不支持的能力 | 说明 |
|
|
6
|
+
|---|---|
|
|
7
|
+
| H5 / 移动端菜单 | 移动端是独立体系(不同 URL + 不同 pageId),尚未整理,禁止编造 |
|
|
8
|
+
|
|
9
|
+
## 判断「CLI 支不支持」的正确方式
|
|
10
|
+
|
|
11
|
+
1. 先查 `references/common/ref-cli-commands.md` 的对应命令与参数;
|
|
12
|
+
2. 再跑 `e10-cli <命令> --help` 确认当前版本有没有该选项;
|
|
13
|
+
3. 仍无法确认时,问用户或如实说明「当前版本没有对应命令」。
|
|
14
|
+
|
|
15
|
+
**禁止绕行**:不要为了完成配置临时编写 `.mjs` 脚本调用内部接口,也不要让用户直接操作浏览器或设计器代替命令;确认没有命令时,保留该项未完成状态并说明影响。
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# 安装、升级与文档同步
|
|
2
|
+
|
|
3
|
+
## 版本必须匹配
|
|
4
|
+
|
|
5
|
+
skill 与 CLI 的版本要一致(见 SKILL.md frontmatter 的 `version`)。版本不一致时,命令、选项和文档可能对不上。
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
e10-cli --version # 应与 SKILL.md 标注的版本一致
|
|
9
|
+
npm install -g weaver-e10-builder
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## CLI 升级
|
|
13
|
+
|
|
14
|
+
- 一般工具:先 `npm rm -g weaver-e10-builder` 卸掉旧包,再重新安装,避免 bin 残留冲突。
|
|
15
|
+
- WorkBuddy:先直接用 bash 删除旧包目录(不走 npm 删除),再用 npm 纯安装,并指定一个有权限的工作目录作为缓存地址。
|
|
16
|
+
|
|
17
|
+
## skill 安装 / 升级
|
|
18
|
+
|
|
19
|
+
先卸旧(旧名 `skill-e10-cli`),再装新:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npx -y skills remove skill-e10-cli
|
|
23
|
+
npx -y skills add ./weaver-e10-builder.zip --skill -y
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`skills remove` 无效时手动删除后再 add:
|
|
27
|
+
|
|
28
|
+
- Claude Code:`rm -rf ~/.claude/skills/skill-e10-cli` → 新 skill 装到 `~/.claude/skills/weaver-e10-builder`
|
|
29
|
+
- WorkBuddy:`rm -rf ~/.workbuddy/skills/skill-e10-cli` → 新 skill 装到 `~/.workbuddy/skills/weaver-e10-builder`
|
|
30
|
+
|
|
31
|
+
## 文档树同步
|
|
32
|
+
|
|
33
|
+
1.1.0 起发布的 skill 是**薄指令层**:只带 SKILL.md、`_catalog.md`、actionflows 指令层和 scripts,不含深目录文档树(适配 marketplace 两级目录限制)。完整文档随配套 CLI 的 `skill-docs` 分发。
|
|
34
|
+
|
|
35
|
+
- 每次 `e10-cli auth status` 会自动探测本机已装 skill(`~/.claude/skills`、`~/.workbuddy/skills`、`~/.codex/skills`)并同步文档;版本一致则跳过。
|
|
36
|
+
- 手动刷新:`e10-cli skill sync`;可 `--target <安装根目录>` 指定其他工具目录。
|
|
37
|
+
- 装完 skill 后看到 references 文档多出/更新、旧文档被清理,都是正常的同步现象,不是装错或重复安装。
|
|
38
|
+
- 读 `references/...` 提示文件不存在 → 先 `e10-cli skill sync`,或确认 skill 已装后重跑 `e10-cli auth status`。
|
|
39
|
+
|
|
40
|
+
## 文档读取与模板拷贝
|
|
41
|
+
|
|
42
|
+
- 文档在 skill 目录内(如 `~/.claude/skills/weaver-e10-builder/`),`references/...`、`actionflows/...`、`assets/...` 均相对该目录。
|
|
43
|
+
- 按决策树命中哪个读哪个,不要一次性全部读入。
|
|
44
|
+
- 页面模板用 `e10-cli skill copy [目录]` 拷到工作区(默认当前目录,放出 `references/`、`actionflows/`、`assets/`)。
|
|
@@ -92,6 +92,7 @@
|
|
|
92
92
|
- [ ] 编号规则 | 表单/字段:<名称> | 组成与位数:<内容> | 核验:生成值
|
|
93
93
|
- [ ] 表单权限 | 表单/主体:<名称> | 新建/查看/编辑/删除范围:<内容> | 核验:授权结果
|
|
94
94
|
- [ ] 表单页按钮 | 表单/页面/位置:<名称> | 目标与字段映射:<内容> | 核验:点击结果
|
|
95
|
+
- [ ] 表单代码块 | 表单/布局/终端/代码层级:<名称> | 触发时机、字段/明细 Key、预期效果:<内容> | 方法参考:`code-block/guide-code-block.md` | 核验:读回与运行场景;无受支持写入命令时保持未完成并说明影响
|
|
95
96
|
|
|
96
97
|
> 每个功能批次先核对覆盖表单清单,再逐表配置;同一表单有多条独立规则时继续拆行。建表时已配置并核验的分组、必填、只读、默认值等写在 2.1 的表单项结果中,不重复执行。
|
|
97
98
|
|
|
@@ -150,7 +151,7 @@
|
|
|
150
151
|
|---|---|---|---|
|
|
151
152
|
| <章节及要求> | 待业务确认/待环境核查/需其他方式补充/已确认无法实现 | <内容> | <内容> |
|
|
152
153
|
|
|
153
|
-
>
|
|
154
|
+
> 当前 CLI 暂不支持的配置项保持 `[ ]`,在此说明能力缺口及影响;不得用临时脚本、内部接口或浏览器操作代做,也不得以替代配置冒充完成。其他状态继续保留相应待办与依赖。
|
|
154
155
|
|
|
155
156
|
### 6. 阶段验收与交付资源
|
|
156
157
|
- 第一阶段:全部应建表单的字段、明细、布局和默认台账已核对;表单级与视图级需求逐项销号,后续流程依赖已标注。
|
|
@@ -9,6 +9,15 @@
|
|
|
9
9
|
3. 规划状态区分:**待业务确认**(语义或取值有歧义)、**待环境核查**(资源、权限或环境行为未证实)、**需其他方式补充**(现有 CLI 只能完成一部分)、**已确认无法实现**(核实无可行路径)。只有最后一种写入 plan 的“无法实现的项”,原需求项保持未完成。
|
|
10
10
|
4. 按资源依赖组织 plan;关键配置写明读回点和最小业务验收点。接口保存、配置读回与页面实际生效是不同层次,按风险选择必要的检查。
|
|
11
11
|
|
|
12
|
+
## 平台概念
|
|
13
|
+
|
|
14
|
+
- **Ecode** — 存放和运行代码的平台;自定义页面在这里编码、构建、运行。
|
|
15
|
+
- **Ebuilder 应用** — 独立概念,包含表单、流程等资源(与 Ecode 项目不同)。
|
|
16
|
+
- **默认台账与菜单入口是两件事** — 表单创建后会生成默认台账/列表视图,但 `form create` 默认不加应用菜单;需要入口时用 `--menu`,或建表后 `menu add-table`。默认台账已存在不等于菜单入口已存在。
|
|
17
|
+
- 只有图表仪表盘、跨表单聚合视图、特殊交互流程、对外公开页面等场景才需要自定义页面。
|
|
18
|
+
- 所有系统交互命令均通过 `e10-cli` 执行(已全局 link)。auth 文件自动查找,也可 `--auth <path>` 指定。
|
|
19
|
+
- 当前登录用户的 userId 是固定变量 `TEAMS.currentUser.id`,前端代码里可以直接使用。
|
|
20
|
+
|
|
12
21
|
## 一、资源地图:创建、复用或修改什么
|
|
13
22
|
|
|
14
23
|
| 资源 | 使用场景与解决的问题 | 依赖与 plan 要点 | 能力边界与简要验收 | 详见 |
|
|
@@ -50,7 +59,7 @@
|
|
|
50
59
|
| 布局样表 | 从完整表格提取空间排布 | 写 FLOW/EXCEL、标题、行列、同排、空白和合并 | 字段清单与布局蓝图同时保留;验收实际位置 | [布局规划](../form/guide-form-layout-planning.md) |
|
|
51
60
|
| 字段分组 | 将业务字段归入折叠分段 | 写分组名称、顺序及成员字段 | 需求明确时配置;验收字段归属 | [布局规划](../form/guide-form-layout-planning.md) |
|
|
52
61
|
| 关联字段 | 选择客户、合同、流程等原生业务对象 | 写字段子类、目标对象、单/多选 | 关联对象与通用浏览来源分别选型;验收选择范围 | [字段码表](../form/ref-form-fields.md) |
|
|
53
|
-
|
|
|
62
|
+
| 浏览数据定义 | 限定浏览可选数据、默认搜索及弹窗 Tab | 先查可配置字段,再查各字段开放的配置项与候选值 | 按浏览来源适配;验收实际可选数据、搜索与 Tab | [浏览数据定义](../form/guide-browser-definition.md) |
|
|
54
63
|
| 二级明细 | 父级每行挂载子级明细记录 | 主/子明细表;写父子行标识与层级 | 子表归属需按行核对 | [二级明细](../form/guide-form-sub-detail.md) |
|
|
55
64
|
| 字段公式 | 根据其他字段计算目标值 | 写表达式、目标字段和精度 | 验收公式读回与样例计算 | [公式](../form/guide-form-formula-functions.md) |
|
|
56
65
|
| 函数联动 | 字段变动或载入时赋值计算 | 写触发字段、目标字段、事件和表达式 | 与静态字段公式分开;验收触发结果 | [函数联动](../form/guide-formula-linkage.md) |
|
|
@@ -121,6 +130,7 @@
|
|
|
121
130
|
| 点击按钮打开关联任务或发起流程 | 视图按钮或表单按钮,逐项写目标、当前行过滤与预填映射 |
|
|
122
131
|
| 复杂自动写入其他表 | 动作流,写清触发、字段映射及目标记录定位;单纯本表计算选公式/联动 |
|
|
123
132
|
| 标准配置无法表达的页面交互 | 明确目标范围后规划配置式页面或定制页面,并单列发布和交互验收 |
|
|
133
|
+
| 当前表单布局中的字段、明细或交互需用 JS 实现 | 规划布局源码或表单级 ecode:写目标表单、布局/终端、触发事件、字段 Key、效果和运行检查;按[代码块指南](../code-block/guide-code-block.md)选 CLI 写入入口和对应 JSSDK 方法 |
|
|
124
134
|
|
|
125
135
|
## 四、常见依赖与计划顺序
|
|
126
136
|
|