openyida 2026.9.21 → 2026.9.22-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +14 -20
- package/bin/yida.js +6 -11
- package/lib/app/app-list.js +3 -7
- package/lib/app/canvas-compile.js +12 -22
- package/lib/app/check-prd-completeness.js +0 -7
- package/lib/app/create-app.js +1 -4
- package/lib/app/create-form/args.js +12 -37
- package/lib/app/create-form/batch.js +11 -86
- package/lib/app/create-form.js +86 -193
- package/lib/app/create-page.js +17 -84
- package/lib/app/custom-theme.js +0 -11
- package/lib/app/form-field-validator.js +41 -26
- package/lib/app/form-open-guard.js +10 -97
- package/lib/app/get-form-config.js +0 -1
- package/lib/app/inline-css-guard.js +31 -1
- package/lib/app/services/form-compiler.js +4 -2
- package/lib/app/theme-from-design.js +41 -144
- package/lib/app/theme-presets.js +1 -1
- package/lib/app/update-app.js +13 -63
- package/lib/asset/ai-image.js +9 -59
- package/lib/asset/asset-cmd.js +7 -18
- package/lib/asset/asset-plan.js +9 -102
- package/lib/asset/asset-resolve.js +10 -55
- package/lib/asset/asset-status.js +4 -5
- package/lib/asset/host-capabilities.js +2 -11
- package/lib/asset/url-verify.js +4 -19
- package/lib/auth/dws-sync.js +148 -0
- package/lib/auth/token-auth.js +73 -9
- package/lib/auth/token-store.js +50 -0
- package/lib/connector/connector-test.js +5 -19
- package/lib/connector/contract.js +1 -3
- package/lib/core/agent-capabilities.js +16 -19
- package/lib/core/command-manifest.js +40 -329
- package/lib/core/locales/en.js +17 -74
- package/lib/core/locales/zh.js +16 -73
- package/lib/core/redact.js +10 -15
- package/lib/core/sample.js +30 -72
- package/lib/core/utils.js +4 -0
- package/lib/design-plan/design-plan.js +4 -51
- package/lib/design-plan/init.js +26 -121
- package/lib/design-plan/materialize.js +348 -451
- package/lib/design-plan/normalize.js +29 -74
- package/lib/design-plan/parallel.js +16 -71
- package/lib/design-plan/patch.js +16 -63
- package/lib/design-plan/preview.js +8 -6
- package/lib/design-plan/validate.js +11 -71
- package/lib/process/create-process.js +50 -84
- package/lib/samples/openyida-scaffold/canvas-form-drawer.canvas.jsx +90 -20
- package/lib/samples/openyida-scaffold/canvas-nav/content.jsx +13 -93
- package/lib/samples/openyida-scaffold/canvas-nav/data.jsx +18 -100
- package/lib/samples/openyida-scaffold/canvas-nav/mixed.jsx +4 -6
- package/lib/samples/openyida-scaffold/canvas-nav/shared.jsx +5 -5
- package/lib/samples/openyida-scaffold/canvas-nav/side.jsx +2 -1
- package/lib/samples/openyida-scaffold/canvas-nav/sidebar.jsx +1 -1
- package/lib/samples/openyida-scaffold/canvas-nav/top.jsx +9 -15
- package/lib/samples/yida-canvas-table-form/table-form-batch-submit.canvas.jsx +83 -9
- package/lib/samples/yida-rechart/trend-combo.canvas.jsx +87 -14
- package/package.json +1 -3
- package/scripts/postinstall.js +3 -3
- package/yida-skills/SKILL.md +16 -19
- package/yida-skills/references/official-example-schema-patterns.md +1 -1
- package/yida-skills/references/yida-api.md +0 -4
- package/yida-skills/skills/yida-app/SKILL.md +23 -46
- package/yida-skills/skills/yida-app/workflow/parallel-work.md +6 -15
- package/yida-skills/skills/yida-app/workflow/plan/step-1-understand.md +1 -1
- package/yida-skills/skills/yida-app/workflow/plan/step-2-confirm.md +1 -1
- package/yida-skills/skills/yida-app/workflow/plan/step-4-deliver.md +15 -29
- package/yida-skills/skills/yida-app/workflow/plan/workflow.md +11 -29
- package/yida-skills/skills/yida-app/workflow/step-1-resource-context.md +2 -4
- package/yida-skills/skills/yida-app/workflow/step-2-design.md +9 -23
- package/yida-skills/skills/yida-app/workflow/step-3-create-or-reuse-app.md +4 -6
- package/yida-skills/skills/yida-app/workflow/step-4-forms-processes.md +4 -15
- package/yida-skills/skills/yida-app/workflow/step-6-main-page.md +4 -6
- package/yida-skills/skills/yida-app/workflow/step-7-page-code.md +9 -15
- package/yida-skills/skills/yida-app/workflow/step-8-publish-navigation.md +11 -25
- package/yida-skills/skills/yida-app/workflow/step-9-output-finish.md +28 -68
- package/yida-skills/skills/yida-canvas-custom-page/SKILL.md +43 -42
- package/yida-skills/skills/yida-canvas-custom-page/references/canvas-style-implementation-guide.md +44 -60
- package/yida-skills/skills/yida-canvas-custom-page/references/canvas-theme-provider.md +50 -72
- package/yida-skills/skills/yida-canvas-custom-page/references/component-library-guide.md +1 -13
- package/yida-skills/skills/yida-canvas-custom-page/references/data-bridge-guide.md +1 -140
- package/yida-skills/skills/yida-canvas-custom-page/references/navigation-and-entry-guide.md +72 -101
- package/yida-skills/skills/yida-canvas-custom-page/references/page-generation-guide.md +32 -35
- package/yida-skills/skills/yida-canvas-custom-page/scripts/build-canvas-theme.js +3 -29
- package/yida-skills/skills/yida-canvas-custom-page/scripts/canvas-theme-provider.template.jsx +6 -69
- package/yida-skills/skills/yida-canvas-data-binding/SKILL.md +0 -26
- package/yida-skills/skills/yida-create-app/SKILL.md +0 -2
- package/yida-skills/skills/yida-create-form-page/SKILL.md +58 -72
- package/yida-skills/skills/yida-create-form-page/references/advanced-form-modes.md +5 -5
- package/yida-skills/skills/yida-create-form-page/references/association-form-field.md +4 -4
- package/yida-skills/skills/yida-create-form-page/references/batch-forms.md +5 -6
- package/yida-skills/skills/yida-create-form-page/references/field-definition-guide.md +19 -7
- package/yida-skills/skills/yida-create-form-page/references/form-field-properties.md +44 -62
- package/yida-skills/skills/yida-create-page/SKILL.md +6 -14
- package/yida-skills/skills/yida-create-process/SKILL.md +2 -13
- package/yida-skills/skills/yida-custom-page/SKILL.md +0 -2
- package/yida-skills/skills/yida-custom-page/references/design-system.md +1 -1
- package/yida-skills/skills/yida-dashboard/SKILL.md +4 -5
- package/yida-skills/skills/yida-data-management/SKILL.md +2 -4
- package/yida-skills/skills/yida-data-management/references/data-format-guide.md +4 -4
- package/yida-skills/skills/yida-design/SKILL.md +14 -29
- package/yida-skills/skills/yida-design/references/app/blueprint.md +70 -0
- package/yida-skills/skills/yida-design/references/app/navigation-patterns.md +43 -0
- package/yida-skills/skills/yida-design/references/app/role-journey.md +30 -0
- package/yida-skills/skills/yida-design/references/ask-human-interaction-contract.md +42 -67
- package/yida-skills/skills/yida-design/references/asset-workflow.md +2 -6
- package/yida-skills/skills/yida-design/references/design-mode.md +4 -4
- package/yida-skills/skills/yida-design/references/page-quality-gates.md +38 -26
- package/yida-skills/skills/yida-design/references/style-design-selection.md +137 -0
- package/yida-skills/skills/yida-design/references/style-designs/_design-md-template.md +185 -0
- package/yida-skills/skills/yida-design/references/style-designs/aqua-service-progress-dashboard.md +242 -0
- package/yida-skills/skills/yida-design/references/style-designs/blue-insight-operations-dashboard.md +243 -0
- package/yida-skills/skills/yida-design/references/style-designs/blue-productivity-insight-workbench.md +242 -0
- package/yida-skills/skills/yida-design/references/style-designs/command-filter-card-console.md +304 -0
- package/yida-skills/skills/yida-design/references/style-designs/contrast-command-analytics-workbench.md +261 -0
- package/yida-skills/skills/yida-design/references/style-designs/dark-stage-analytic-dashboard.md +369 -0
- package/yida-skills/skills/yida-design/references/style-designs/filterable-card-catalog.md +354 -0
- package/yida-skills/skills/yida-design/references/style-designs/green-timeline-progress-workbench.md +250 -0
- package/yida-skills/skills/yida-design/references/style-designs/registry.md +117 -0
- package/yida-skills/skills/yida-design/references/style-designs/soft-analytic-workbench.md +348 -0
- package/yida-skills/skills/yida-design/references/style-designs/soft-blue-grid-analytic-dashboard.md +658 -0
- package/yida-skills/skills/yida-design/references/style-designs/soft-bordered-analytic-workbench.md +385 -0
- package/yida-skills/skills/yida-design/references/style-designs/soft-curated-filter-gallery.md +300 -0
- package/yida-skills/skills/yida-design/references/style-designs/soft-modular-analytic-workbench.md +404 -0
- package/yida-skills/skills/yida-design/references/style-designs/soft-progress-analytics-workbench.md +382 -0
- package/yida-skills/skills/yida-design/references/style-designs/soft-timeline-analytics-workbench.md +367 -0
- package/yida-skills/skills/yida-design/references/style-designs/teal-rail-analytics-workbench.md +341 -0
- package/yida-skills/skills/yida-design/references/theme/app-custom-theme-template.css +432 -350
- package/yida-skills/skills/yida-design/references/visual-decision-engine.md +143 -19
- package/yida-skills/skills/yida-design/references/visual-scaffold-recipes.md +27 -15
- package/yida-skills/skills/yida-design/sub_skill/page-design/SKILL.md +0 -4
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/SKILL.md +8 -22
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/assets/README.md +10 -14
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/assets/build-plan-template.html +4 -9
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-compact-schema.md +27 -49
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/build-plan-schema.md +154 -33
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-design.md +127 -48
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/references/visual-theme-selection.md +51 -37
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/render_build_plan.py +48 -43
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/scripts/validate_design_themes.py +190 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/README.md +98 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-media-grid.md +339 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-modular-clarity.md +348 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/airy-structured-clarity.md +344 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/ambient-halo-layered.md +345 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/dark-focus-layered.md +355 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/dark-luminous-modular.md +377 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/deep-stage-duotone.md +352 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/hairline-runway-clarity.md +389 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/high-contrast-modular.md +364 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/index.json +329 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/interlocked-vivid-modules.md +348 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/matrix-grid-focus.md +345 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/media-rail-inspector.md +379 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/mist-layered-signal.md +347 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/modular-rail-signal.md +352 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/mono-grid-signal.md +386 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/ribbon-ledger-lift.md +384 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/segmented-meter-clarity.md +388 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/split-rail-precision.md +341 -0
- package/yida-skills/skills/yida-design/sub_skill/yida-design-plan/templates/design-themes/status-framed-media-grid.md +361 -0
- package/yida-skills/skills/yida-design/workflow/output-design.md +375 -117
- package/yida-skills/skills/yida-design/workflow/output-prd.md +185 -0
- package/yida-skills/skills/yida-design/workflow/step-1-read-brief.md +1 -1
- package/yida-skills/skills/yida-design/workflow/step-2-theme-system.md +29 -33
- package/yida-skills/skills/yida-design/workflow/step-4-wireframe-interaction.md +1 -3
- package/yida-skills/skills/yida-design/workflow/step-5-visual-states.md +106 -22
- package/yida-skills/skills/yida-design/workflow/step-6-handoff.md +22 -15
- package/yida-skills/skills/yida-form-permission/SKILL.md +0 -6
- package/yida-skills/skills/yida-image-assets/SKILL.md +50 -73
- package/yida-skills/skills/yida-image-assets/references/manifest-contract.md +52 -82
- package/yida-skills/skills/yida-image-assets/references/source-policy.md +15 -14
- package/yida-skills/skills/yida-integration/SKILL.md +0 -1
- package/yida-skills/skills/yida-login/SKILL.md +0 -2
- package/yida-skills/skills/yida-nav-group/SKILL.md +2 -4
- package/yida-skills/skills/yida-nav-shell/SKILL.md +12 -36
- package/yida-skills/skills/yida-nav-shell/references/nav-shell-patterns.md +136 -79
- package/yida-skills/skills/yida-page-config/SKILL.md +4 -13
- package/yida-skills/skills/yida-prd/SKILL.md +3 -5
- package/yida-skills/skills/yida-prd/references/app/blueprint.md +4 -4
- package/yida-skills/skills/yida-prd/references/app/navigation-patterns.md +3 -6
- package/yida-skills/skills/yida-prd/references/app/role-journey.md +3 -5
- package/yida-skills/skills/yida-prd/references/plan-content.md +0 -4
- package/yida-skills/skills/yida-prd/workflow/output-prd.md +11 -18
- package/yida-skills/skills/yida-prd/workflow/plan-business.md +4 -4
- package/yida-skills/skills/yida-prd/workflow/step-2-information-architecture.md +8 -11
- package/yida-skills/skills/yida-publish-page/SKILL.md +1 -9
- package/yida-skills/skills/yida-requirement-analysis/SKILL.md +39 -10
- package/yida-skills/skills/yida-requirement-analysis/workflow/prepare-brief.md +71 -40
- package/yida-skills/skills-index.json +16 -36
- package/lib/app/application-entry-urls.js +0 -31
- package/lib/app/application-style.js +0 -69
- package/lib/app/canvas-icon-exports.json +0 -6160
- package/lib/app/canvas-icon-guard.js +0 -87
- package/lib/app/canvas-navigation-guard.js +0 -84
- package/lib/app/canvas-path-guard.js +0 -78
- package/lib/app/canvas-theme-guard.js +0 -184
- package/lib/app/form-data-response-guard.js +0 -57
- package/lib/asset/asset-execution.js +0 -79
- package/lib/core/css-structure.js +0 -37
- package/lib/design/check-design.js +0 -51
- package/lib/design/document.js +0 -458
- package/lib/design/icon-contrast.js +0 -85
- package/lib/design/page-content.js +0 -11
- package/lib/design-plan/artifact-updates.js +0 -117
- package/lib/design-plan/confirmation.js +0 -13
- package/lib/design-plan/entry-navigation.js +0 -97
- package/lib/design-plan/navigation-policy.js +0 -38
- package/lib/design-plan/rebase.js +0 -60
- package/lib/design-plan/themes.js +0 -101
- package/lib/design-plan/visual-policy.js +0 -42
- package/lib/samples/openyida-scaffold/canvas-admin-entry.jsx +0 -62
- package/lib/samples/openyida-scaffold/canvas-navigation.jsx +0 -56
- package/lib/samples/openyida-scaffold/canvas-view-state.jsx +0 -74
- package/yida-skills/skills/yida-app/references/entry-navigation.md +0 -193
- package/yida-skills/skills/yida-canvas-custom-page/references/view-state-recovery.md +0 -52
- package/yida-skills/skills/yida-canvas-data-binding/references/business-action-permissions.md +0 -31
- package/yida-skills/skills/yida-design/references/application-style-library.md +0 -93
- package/yida-skills/skills/yida-design/references/application-theme-consistency.md +0 -150
- package/yida-skills/skills/yida-design/references/native-form-styles.md +0 -208
- package/yida-skills/skills/yida-design/references/navigation-decision.md +0 -53
- package/yida-skills/skills/yida-design/references/page-continuity.md +0 -42
- package/yida-skills/skills/yida-design/references/theme/application-style-recipes.css +0 -58
- package/yida-skills/skills/yida-design/references/theme-selection.md +0 -67
- package/yida-skills/skills/yida-design/scripts/validate_design_themes.py +0 -302
- package/yida-skills/skills/yida-design/templates/application-styles.json +0 -398
- package/yida-skills/skills/yida-design/templates/design-themes/README.md +0 -73
- package/yida-skills/skills/yida-design/templates/design-themes/app-amber/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-amber/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-amber/form-layout.json +0 -15
- package/yida-skills/skills/yida-design/templates/design-themes/app-editorial/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-editorial/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-editorial/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-executive/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-executive/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-executive/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-finance/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-finance/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-finance/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-glass/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-glass/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-glass/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-graphite/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-graphite/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-graphite/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-line/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-line/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-line/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-neon/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-neon/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-neon/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-nordic/app_theme.css +0 -754
- package/yida-skills/skills/yida-design/templates/design-themes/app-nordic/design.md +0 -279
- package/yida-skills/skills/yida-design/templates/design-themes/app-nordic/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-paper/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-paper/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-paper/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-platinum/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-platinum/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-platinum/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-plum/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-plum/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-plum/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-pop/app_theme.css +0 -758
- package/yida-skills/skills/yida-design/templates/design-themes/app-pop/design.md +0 -281
- package/yida-skills/skills/yida-design/templates/design-themes/app-pop/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-sage/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-sage/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-sage/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-teal/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-teal/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-teal/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-terminal/app_theme.css +0 -754
- package/yida-skills/skills/yida-design/templates/design-themes/app-terminal/design.md +0 -279
- package/yida-skills/skills/yida-design/templates/design-themes/app-terminal/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/app-ticket/app_theme.css +0 -752
- package/yida-skills/skills/yida-design/templates/design-themes/app-ticket/design.md +0 -278
- package/yida-skills/skills/yida-design/templates/design-themes/app-ticket/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/app-wire/app_theme.css +0 -748
- package/yida-skills/skills/yida-design/templates/design-themes/app-wire/design.md +0 -274
- package/yida-skills/skills/yida-design/templates/design-themes/app-wire/form-layout.json +0 -14
- package/yida-skills/skills/yida-design/templates/design-themes/basic-tokens.json +0 -118
- package/yida-skills/skills/yida-design/templates/design-themes/dark-inset-hairline/app_theme.css +0 -690
- package/yida-skills/skills/yida-design/templates/design-themes/dark-inset-hairline/design.md +0 -382
- package/yida-skills/skills/yida-design/templates/design-themes/dark-inset-hairline/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-fine-lines/app_theme.css +0 -691
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-fine-lines/design.md +0 -380
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-fine-lines/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-signal-panels/app_theme.css +0 -696
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-signal-panels/design.md +0 -378
- package/yida-skills/skills/yida-design/templates/design-themes/dark-rail-signal-panels/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/free-creative/app_theme.css +0 -689
- package/yida-skills/skills/yida-design/templates/design-themes/free-creative/design.md +0 -238
- package/yida-skills/skills/yida-design/templates/design-themes/free-creative/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/graphite-bevel-grid/app_theme.css +0 -692
- package/yida-skills/skills/yida-design/templates/design-themes/graphite-bevel-grid/design.md +0 -375
- package/yida-skills/skills/yida-design/templates/design-themes/graphite-bevel-grid/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-shared-bands/app_theme.css +0 -691
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-shared-bands/design.md +0 -362
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-shared-bands/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-soft-blocks/app_theme.css +0 -691
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-soft-blocks/design.md +0 -409
- package/yida-skills/skills/yida-design/templates/design-themes/hairline-soft-blocks/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/index.json +0 -464
- package/yida-skills/skills/yida-design/templates/design-themes/ink-glow-soft-panels/app_theme.css +0 -701
- package/yida-skills/skills/yida-design/templates/design-themes/ink-glow-soft-panels/design.md +0 -379
- package/yida-skills/skills/yida-design/templates/design-themes/ink-glow-soft-panels/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/inset-frame-pixel-rhythm/app_theme.css +0 -691
- package/yida-skills/skills/yida-design/templates/design-themes/inset-frame-pixel-rhythm/design.md +0 -404
- package/yida-skills/skills/yida-design/templates/design-themes/inset-frame-pixel-rhythm/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/outlined-texture-duotone/app_theme.css +0 -698
- package/yida-skills/skills/yida-design/templates/design-themes/outlined-texture-duotone/design.md +0 -389
- package/yida-skills/skills/yida-design/templates/design-themes/outlined-texture-duotone/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/soft-inset-surfaces/app_theme.css +0 -691
- package/yida-skills/skills/yida-design/templates/design-themes/soft-inset-surfaces/design.md +0 -372
- package/yida-skills/skills/yida-design/templates/design-themes/soft-inset-surfaces/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/soft-outline-rhythm/app_theme.css +0 -690
- package/yida-skills/skills/yida-design/templates/design-themes/soft-outline-rhythm/design.md +0 -455
- package/yida-skills/skills/yida-design/templates/design-themes/soft-outline-rhythm/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/soft-rail-bold-band/app_theme.css +0 -698
- package/yida-skills/skills/yida-design/templates/design-themes/soft-rail-bold-band/design.md +0 -394
- package/yida-skills/skills/yida-design/templates/design-themes/soft-rail-bold-band/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/soft-spectral-panels/app_theme.css +0 -692
- package/yida-skills/skills/yida-design/templates/design-themes/soft-spectral-panels/design.md +0 -391
- package/yida-skills/skills/yida-design/templates/design-themes/soft-spectral-panels/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/warm-canvas-contrast-panels/app_theme.css +0 -711
- package/yida-skills/skills/yida-design/templates/design-themes/warm-canvas-contrast-panels/design.md +0 -408
- package/yida-skills/skills/yida-design/templates/design-themes/warm-canvas-contrast-panels/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/design-themes/warm-rail-muted-panels/app_theme.css +0 -692
- package/yida-skills/skills/yida-design/templates/design-themes/warm-rail-muted-panels/design.md +0 -383
- package/yida-skills/skills/yida-design/templates/design-themes/warm-rail-muted-panels/form-layout.json +0 -13
- package/yida-skills/skills/yida-design/templates/navigation-styles.json +0 -769
- package/yida-skills/skills/yida-requirement-analysis/references/experience-groups.md +0 -79
- package/yida-skills/skills/yida-requirement-analysis/references/handoff.md +0 -68
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
#
|
|
1
|
+
# B 端导航壳形态目录
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
这里提供**选型方向 + 布局骨架 + 小段代码示例**。根据已确认的 PRD 和 `design.md` 选择一种主形态,再按业务设计外观;标签页可以叠加为二级导航。用户给过参考或已有满意实现时,沿用其设计,不用示例的默认样式覆盖。
|
|
4
|
+
|
|
5
|
+
应用及页面导航配置按 [导航技能](../SKILL.md#必做配置) 执行。导航数据、权限和跳转遵守下方契约,UI 按设计手写;不以选择 CLI 组件或拼装整套模板作为实现起点。
|
|
4
6
|
|
|
5
7
|
## 选型速查
|
|
6
8
|
|
|
@@ -12,66 +14,130 @@
|
|
|
12
14
|
| 悬浮胶囊 / Dock | 沉浸展示、轻量门户,减少常驻导航占位 | 3–6 项 | 底部胶囊或可收起菜单 |
|
|
13
15
|
| 标签页 | 同一模块的同级视图,不替代应用主导航 | 2–8 项 | 横向滚动 |
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
数量是布局参考,不是增删业务模块的依据。用户选择自定义导航后,由 Agent 按场景确定形态,用户已指定的形态优先;不把形态拆成导航提问选项,也不为这些样式再发起一轮提问。
|
|
16
18
|
|
|
17
19
|
## 通用设计要点
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
- 导航需要表达“应用是谁、当前在哪、还能去哪”。菜单名称与层级按业务组织;图标、文字、当前项和分组要有清晰主次。
|
|
22
|
+
- 选中态可用胶囊底色、指示条、下划线或字重组合,按整体设计选择,不规定所有应用采用同一种外观。
|
|
23
|
+
- 图标只作功能用途,使用同一套 `lucide-react` 或 `@ant-design/icons`;不用 emoji、字母占位和 CSS 拼图标。
|
|
24
|
+
- 应用名、用户区、搜索和操作按实际需要安排;少量菜单不必填满整条屏幕,复杂菜单不宜硬塞进一条胶囊。
|
|
25
|
+
- 页面内容与导航共同设计。浮导要留出间距,侧栏要给内容分配宽度;当前页已由菜单标明时,内容区不重复一个同名大标题。
|
|
26
|
+
- 颜色与材质消费应用主题,详见 [主题 token](#主题-token)。导航外观调整不改变业务接口、筛选逻辑、权限与跳转参数。
|
|
20
27
|
|
|
21
28
|
## 形态 1:左侧边栏
|
|
22
29
|
|
|
23
|
-
|
|
30
|
+
```text
|
|
31
|
+
应用名 │ 面包屑 / 页面操作
|
|
32
|
+
─────────┼──────────────────
|
|
33
|
+
概览 │
|
|
34
|
+
业务分组 │ 业务内容
|
|
35
|
+
订单 │
|
|
36
|
+
客户 │
|
|
37
|
+
折叠按钮 ↔ 可拖拽边缘
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
适合模块较多且经常跨模块工作的场景。分组可以用小标题、间距或分隔线区分;应用名、常用项、业务分组、底部操作按使用频率安排。可按设计采用实体侧栏或与页面背景留出间距的悬浮侧栏。必须落实下面的折叠和调宽交互。
|
|
24
41
|
|
|
25
42
|
## 形态 2:顶部导航
|
|
26
43
|
|
|
27
|
-
|
|
44
|
+
```text
|
|
45
|
+
╭─────────────────────────────────╮
|
|
46
|
+
│ 应用名 概览 订单 客户 操作 │
|
|
47
|
+
╰─────────────────────────────────╯
|
|
28
48
|
|
|
29
|
-
|
|
49
|
+
业务内容
|
|
50
|
+
```
|
|
30
51
|
|
|
31
|
-
|
|
52
|
+
自定义顶部导航默认推荐**浮导**:与顶部和两侧留出间距,根据菜单数量和内容宽度设计成紧凑胶囊、居中悬浮栏或较宽的浮动容器。明确已选贴边通栏时沿用用户选择。仍记录 `navigation.variant=top`,浮导是呈现方式,不需要额外选择一种导航归属。
|
|
32
53
|
|
|
33
|
-
|
|
54
|
+
浮导顶部间距必须留在 Canvas 内:根容器用 `display: flow-root` 阻止首子元素 margin 折叠,或改由根 padding 承载,不能让整个 Canvas 产生顶部偏移。
|
|
34
55
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
.brand-page .content { max-width: 1200px; margin: 0 auto; }
|
|
46
|
-
`}</style>
|
|
47
|
-
<CanvasNavigationContent layout="document" navigation={<CanvasNav headerOnly overlay title={brandName} items={items} activeKey={activeKey} onSelect={select} />}>
|
|
48
|
-
<section className="hero section" id="home" style={{ backgroundImage: heroBackground }}>
|
|
49
|
-
<div className="content">{renderHeroContent()}</div>
|
|
50
|
-
</section>
|
|
51
|
-
<section className="section" id="products">{renderProducts()}</section>
|
|
52
|
-
</CanvasNavigationContent>
|
|
53
|
-
</div>
|
|
56
|
+
位置、容器宽度、圆角、选中态和滚动行为写入 `design.md` 后实现;不把通栏套一个圆角就视为完成浮导设计。`sticky` 留在布局流中,`fixed` 叠在内容上,需要预留对应高度;移动端改为可展开的菜单,不能挤压文字。
|
|
57
|
+
|
|
58
|
+
## 形态 3:顶部+侧边
|
|
59
|
+
|
|
60
|
+
```text
|
|
61
|
+
应用名 业务域 A 业务域 B 用户
|
|
62
|
+
───────────────────────────────────────
|
|
63
|
+
域内模块 │
|
|
64
|
+
域内模块 │ 业务内容
|
|
65
|
+
折叠按钮 ↔ 可拖拽边缘
|
|
54
66
|
```
|
|
55
67
|
|
|
56
|
-
|
|
68
|
+
用于真实的两级信息架构。顶部承担业务域切换,侧栏仅显示当前域的模块;切换域时进入该域可见的默认模块或恢复上次入口。两层不要重复同一组菜单。侧栏同样必须支持折叠和拖拽调宽。
|
|
57
69
|
|
|
58
|
-
|
|
70
|
+
## 形态 4:悬浮胶囊 / Dock
|
|
59
71
|
|
|
60
|
-
|
|
72
|
+
```text
|
|
73
|
+
业务内容
|
|
61
74
|
|
|
62
|
-
|
|
75
|
+
╭──────────────────────╮
|
|
76
|
+
│ 概览 活动 我的记录 │
|
|
77
|
+
╰──────────────────────╯
|
|
78
|
+
```
|
|
63
79
|
|
|
64
|
-
|
|
80
|
+
适合少量高频入口的沉浸页或轻量门户。可以根据内容构图放在顶部、底部或侧边;已选择顶部导航时优先使用上面的顶部浮导方向。菜单保持紧凑,必要时收起,避开表单提交按钮、图表图例和移动端安全区。
|
|
81
|
+
|
|
82
|
+
以下是**底部胶囊定位**的小段样式参考,尺寸和材质按设计调整,不是整页 UI 模板:
|
|
83
|
+
|
|
84
|
+
```css
|
|
85
|
+
.business-nav-dock {
|
|
86
|
+
position: fixed;
|
|
87
|
+
left: 50%;
|
|
88
|
+
bottom: calc(20px + env(safe-area-inset-bottom, 0px));
|
|
89
|
+
transform: translateX(-50%);
|
|
90
|
+
display: flex;
|
|
91
|
+
gap: 4px;
|
|
92
|
+
max-width: calc(100vw - 32px);
|
|
93
|
+
padding: 6px;
|
|
94
|
+
border-radius: 999px;
|
|
95
|
+
background: var(--pod-shell-theme-bg-color, #fff);
|
|
96
|
+
box-shadow: var(--pod-nav-popup-shadow, 0 6px 24px rgba(0, 0, 0, 0.12));
|
|
97
|
+
}
|
|
98
|
+
```
|
|
65
99
|
|
|
66
|
-
|
|
100
|
+
同时为内容底部预留 Dock 实际高度与安全间距,并设置合适的层级和窄屏菜单策略;不能让导航遮住最后一行数据。
|
|
67
101
|
|
|
68
102
|
## 形态 5:标签页
|
|
69
103
|
|
|
70
|
-
|
|
104
|
+
在主导航下切换同模块视图,例如“待处理 / 已完成”。可用 antd `Tabs` 或按设计自绘,标签选中态与内容同步。长标签窄屏横向滚动;键盘支持方向键、Home、End 并跳过禁用项。只有页面内标签时保留平台导航,不因此关闭应用导航。
|
|
71
105
|
|
|
72
106
|
## 视图切换骨架
|
|
73
107
|
|
|
74
|
-
|
|
108
|
+
同页视图与跨真实页面分别处理:同页只切内容可用 React 状态;要分享、刷新恢复、前进后退则同步 URL hash;跨页面仅在目标保留同一导航壳时使用现有路由与数据桥;原生页面嵌入主内容区。不要为了套用一个导航示例,把 PRD 的多个真实页面改造成一个静态页。
|
|
109
|
+
|
|
110
|
+
下面只演示已过滤菜单的选中态与视图绑定。`views` 是当前页面自己的业务组件映射,布局与样式按选定形态补齐;需要 URL 同步的场景复用已有路由,不直接使用这个纯本地状态版本。
|
|
111
|
+
|
|
112
|
+
```jsx
|
|
113
|
+
import React from 'react';
|
|
114
|
+
|
|
115
|
+
function LocalViews({ items, views }) {
|
|
116
|
+
const [selectedKey, setSelectedKey] = React.useState(null);
|
|
117
|
+
const activeItem = items.find(item => item.key === selectedKey && !item.disabled)
|
|
118
|
+
|| items.find(item => !item.disabled);
|
|
119
|
+
if (!activeItem) return <p>无可用导航</p>;
|
|
120
|
+
const ActiveView = views[activeItem.key];
|
|
121
|
+
return (
|
|
122
|
+
<div className="business-shell">
|
|
123
|
+
<nav aria-label="业务导航">
|
|
124
|
+
{items.map(item => (
|
|
125
|
+
<button key={item.key} type="button" disabled={item.disabled}
|
|
126
|
+
aria-current={item.key === activeItem.key ? 'page' : undefined}
|
|
127
|
+
onClick={() => setSelectedKey(item.key)}>
|
|
128
|
+
{item.label}
|
|
129
|
+
</button>
|
|
130
|
+
))}
|
|
131
|
+
</nav>
|
|
132
|
+
<main aria-label={activeItem.label}>
|
|
133
|
+
{ActiveView ? <ActiveView /> : <p>当前入口暂不可用</p>}
|
|
134
|
+
</main>
|
|
135
|
+
</div>
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
页面变化时选中项必须仍在可见范围内;请求失败、加载中与空菜单按下方状态处理。`hashchange`、`matchMedia`、拖拽等监听在 effect 清理时移除。
|
|
75
141
|
|
|
76
142
|
## 侧栏交互
|
|
77
143
|
|
|
@@ -87,25 +153,7 @@ sticky 本身占位,共享网格建立叠加关系;先检查宿主滚动和
|
|
|
87
153
|
|
|
88
154
|
## 导航数据来源
|
|
89
155
|
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
先区分页面内展示与真实资源导航。公开官网的首页、文化介绍等页内视图直接使用本地数组;需要统一过滤/选择 helper 时,显式用 local,不请求 getAccessableNavs:
|
|
93
|
-
|
|
94
|
-
```jsx
|
|
95
|
-
const items = [
|
|
96
|
-
{ key: 'home', label: '首页', targetType: 'local', viewKey: 'home' },
|
|
97
|
-
{ key: 'culture', label: '文化介绍', targetType: 'local', viewKey: 'culture' },
|
|
98
|
-
];
|
|
99
|
-
const menus = await loadCanvasNavigation({ items, mode: 'local' });
|
|
100
|
-
const active = selectCanvasNavigation(menus, requestedKey, 'home');
|
|
101
|
-
// 按 active.viewKey 渲染真实本页组件,URL 同步沿用下方切换骨架。
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
local 不接受 href/url 或真实页面跳转。含 access 时仍需 appType 和真实 resolveAccess;未授权项隐藏,查询失败不放行。业务数据读取、预约提交和管理操作另按平台权限执行;不得删除受保护菜单的 access。规划中的 sceneKey/resource/access 仍保留,不能把公开内容的菜单显示与受保护业务授权混为一谈。
|
|
105
|
-
|
|
106
|
-
platform 只接绑定 formUuid/navUuid 的真实页面,local 或未绑定资源的叶子会在网络请求前报错。编译器也拦截静态可识别的误用;动态配置仍要验证。不要将“过滤后为空”或请求失败兜底为全量菜单。
|
|
107
|
-
|
|
108
|
-
下面的数据树过滤用于 mode=platform;独立资源任务用 mode=independent 和真实 resolveAccess,按 [访问态入口契约](../../yida-app/references/entry-navigation.md#自定义菜单过滤) 执行,不能将平台树展示规则当作业务授权。使用当前访问者登录态请求 `/{appType}/query/formdesign/getAccessableNavs.json`,获取可见范围;`formUuid` 和 CSRF 值来自当前页面运行态。已有请求和正确的过滤逻辑时直接复用;首次接入可使用下面的数据片段,其中 `filterCanvasNavigation(plannedItems, navs, hiddenNav)` 负责可见性过滤,不包含导航 UI:
|
|
156
|
+
自定义导航的数量、名称、顺序、分组和用途来自 PRD,通常工作台或首页在第一位。使用当前访问者登录态请求 `/{appType}/query/formdesign/getAccessableNavs.json`,获取可见范围;`formUuid` 和 CSRF 值来自当前页面运行态。已有请求和正确的过滤逻辑时直接复用;首次接入可使用下面的数据片段,其中 `filterCanvasNavigation(plannedItems, navs, hiddenNav)` 负责可见性过滤,不包含导航 UI:
|
|
109
157
|
|
|
110
158
|
```bash
|
|
111
159
|
openyida sample openyida-page-template canvas-nav-data --output .cache/samples/canvas-nav-data.jsx
|
|
@@ -122,9 +170,9 @@ const items = await loadCanvasNavigation({
|
|
|
122
170
|
});
|
|
123
171
|
```
|
|
124
172
|
|
|
125
|
-
`plannedItems`
|
|
173
|
+
`plannedItems` 使用下方菜单契约:每个任务入口有独立 key,绑定真实 `navUuid/formUuid`,保存业务 label、图标、入口用途及跳转参数。工作台的本地视图绑定承载它的自定义页面 formUuid;同一资源可以对应多个任务入口。分组可只配置 label 和 children,具有独立资源约束时同时绑定该资源。
|
|
126
174
|
|
|
127
|
-
|
|
175
|
+
数据片段递归过滤接口中 `hidden` 的节点,以及 `g_config.navConfig.hiddenNav` 命中 `slug` 或 `navUuid` 的节点及子树,再以可见资源 ID 筛选 PRD 菜单。返回值保持 PRD 的顺序、分组和展示配置;未规划的接口资源不会自动增加到菜单,失去所有可见子项的分组会移除。侧边、顶部和 Dock 使用规划的扁平入口;混合导航使用规划的两级结构。
|
|
128
176
|
|
|
129
177
|
页面首次加载或应用切换时清空旧菜单,取消旧请求,再加载当前应用菜单。按以下状态展示:
|
|
130
178
|
|
|
@@ -133,8 +181,8 @@ const items = await loadCanvasNavigation({
|
|
|
133
181
|
| 加载中 | 显示加载提示,菜单和对应内容等待加载完成 |
|
|
134
182
|
| 请求失败 | 显示重试入口 |
|
|
135
183
|
| 没有可见入口 | 显示“无可用导航” |
|
|
136
|
-
| 菜单加载完成 | 按当前地址选中可见入口;未指定入口时按 PRD
|
|
137
|
-
| 地址中的 hash 指向不可见入口 |
|
|
184
|
+
| 菜单加载完成 | 按当前地址选中可见入口;未指定入口时按 PRD 选择,通常先进入工作台 |
|
|
185
|
+
| 地址中的 hash 指向不可见入口 | 切至 PRD 顺序中的首个可见入口;没有可见入口时显示“无可用导航” |
|
|
138
186
|
|
|
139
187
|
页面访问和数据权限继续由平台校验。
|
|
140
188
|
|
|
@@ -163,7 +211,7 @@ const registration = items.find(item => item.key === 'registration');
|
|
|
163
211
|
|
|
164
212
|
**MUST**:自定义导航属于应用外壳,点击应用内导航后必须仍可见、可操作。原生提交页和数据管理页不包含这套自绘导航,不能直接用 `location.href` / `router.push` 替换顶层页面。`isRenderNav=false` 只隐藏原生导航,不会自动保留自绘导航。
|
|
165
213
|
|
|
166
|
-
|
|
214
|
+
例如供应商应用:导航“工作台”显示本地工作台,“准入申请”嵌入原生 submission 页,“供应商档案”嵌入原生 workbench 页;工作台里的“提交申请”“详情”按钮仍用标准 `FormOpenContainer` 抽屉。导航项不打开抽屉。
|
|
167
215
|
|
|
168
216
|
先提取并整体合并标准内容容器(合并重复 import):
|
|
169
217
|
|
|
@@ -171,9 +219,9 @@ const registration = items.find(item => item.key === 'registration');
|
|
|
171
219
|
openyida sample openyida-page-template canvas-nav-content --output .cache/samples/canvas-nav-content.jsx
|
|
172
220
|
```
|
|
173
221
|
|
|
174
|
-
`CanvasNavigationContent`
|
|
222
|
+
`CanvasNavigationContent` 的 `navigation` 接顶部导航,`children` 接本地工作台,`iframeSrc` 接原生页面地址;不传地址时显示 children,可用于无权限或加载失败提示。`contentKey` 变化会卸载旧内容并重置滚动。`height` 默认 `100dvh`,已有宿主或侧栏分配高度时传入该区域的确定高度(只有父级高度确定时才能用 `100%`)。`maxWidth`、`gutter`、`radius`、`background` 按 design.md 设置并在视图间保持一致;默认透明背景承接页面画布,不跨 iframe 改色。容器不负责鉴权、路由、草稿保存或判断跨域加载失败。
|
|
175
223
|
|
|
176
|
-
|
|
224
|
+
下面是交互骨架,导航外观按 `design.md` 实现。先执行 `openyida sample openyida-page-template canvas-nav-data` 获取并合并导航数据 helper(包含 `buildCanvasNavigationUrl`)。`items` 是已完成权限过滤的可见叶子菜单,仅包含当前壳内工作台与原生任务入口;资源 ID、`targetType` 和 `params` 来自真实配置。外链及带自身导航壳的跨页入口另走对应路由,不放入本例的 iframe 分支。
|
|
177
225
|
|
|
178
226
|
```jsx
|
|
179
227
|
import React, { useEffect, useState } from 'react';
|
|
@@ -190,21 +238,20 @@ function AppShell({ items, homeKey, appType, renderWorkbench }) {
|
|
|
190
238
|
window.removeEventListener('popstate', sync);
|
|
191
239
|
};
|
|
192
240
|
}, []);
|
|
193
|
-
const active =
|
|
241
|
+
const active = items.find(item => item.key === requestedKey) || items[0];
|
|
194
242
|
function select(item) {
|
|
195
243
|
if (item.disabled || item.key === active?.key) return;
|
|
196
244
|
const url = new URL(window.location.href);
|
|
197
245
|
const hash = new URLSearchParams(url.hash.slice(1));
|
|
198
246
|
hash.set('view', item.key);
|
|
199
247
|
url.hash = hash.toString();
|
|
200
|
-
window.history.pushState(
|
|
248
|
+
window.history.pushState(null, '', url.toString());
|
|
201
249
|
setRequestedKey(item.key);
|
|
202
250
|
}
|
|
203
251
|
return (
|
|
204
252
|
<CanvasNavigationContent
|
|
205
253
|
title={active?.label || '页面内容'}
|
|
206
254
|
contentKey={active?.key}
|
|
207
|
-
preserveScroll
|
|
208
255
|
iframeSrc={active && active.key !== homeKey
|
|
209
256
|
? buildCanvasNavigationUrl(active, appType, { embedded: true }) : undefined}
|
|
210
257
|
navigation={<nav aria-label="应用导航">
|
|
@@ -221,13 +268,13 @@ function AppShell({ items, homeKey, appType, renderWorkbench }) {
|
|
|
221
268
|
}
|
|
222
269
|
```
|
|
223
270
|
|
|
224
|
-
hash 的 `view` 保存任务入口 key,刷新及前进后退恢复选中内容,其他 query/hash
|
|
271
|
+
hash 的 `view` 保存任务入口 key,刷新及前进后退恢复选中内容,其他 query/hash 参数保留。该例约定 hash 为参数形式;已有路由协议的页面沿用原协议,不强行覆盖。嵌入地址必须指向真实内容资源,不能再次嵌入当前壳页或带同一导航的壳页,避免递归和双导航。仅 iframe 内页滚动;不再给 iframe 外套滚动卡片。嵌入失败时保留导航并显示错误和明确的新窗口入口,不自动跳走。
|
|
225
272
|
|
|
226
273
|
切换会卸载当前内容;存在未提交表单时,应结合原生页面支持的通信能力处理离开提示,不能声称本例自动保存草稿或能读取所有 iframe 的脏状态。
|
|
227
274
|
|
|
228
275
|
## MUST:主内容撑满剩余空间
|
|
229
276
|
|
|
230
|
-
|
|
277
|
+
自定义导航壳必须有确定的可用高度。独立全屏壳可用 `height: 100dvh`;已有宿主占用高度时使用宿主实际分配的确定高度,不能再叠加一个视口高度。仅 `min-height` 不能保证百分比高度链成立,也不要猜测 `calc(100vh - 80px)` 之类固定导航高度。
|
|
231
278
|
|
|
232
279
|
布局链逐层成立:壳 `display:flex; flex-direction:column`,导航 `flex-shrink:0`,main 同时具有 `display:flex; flex-direction:column; flex:1 1 0; min-height:0; overflow:hidden`;iframe 视口为 `position:relative; flex:1 1 0; min-height:0; overflow:hidden`,iframe 绝对定位填满该视口。仅给子级写 `flex:1`、父级仍为 block 不合格。工作台分支使用独立 `overflow:auto` 的滚动容器;原生页面分支仅 iframe 内页滚动。
|
|
233
280
|
|
|
@@ -242,8 +289,7 @@ hash 的 `view` 保存任务入口 key,刷新及前进后退恢复选中内容
|
|
|
242
289
|
| 菜单数据 | 用途 |
|
|
243
290
|
| --- | --- |
|
|
244
291
|
| `key` | 稳定且唯一的入口标识;分组和叶子项不重名 |
|
|
245
|
-
| `navUuid / formUuid` |
|
|
246
|
-
| `viewKey` | local 的本页视图标识,不是平台资源 ID |
|
|
292
|
+
| `navUuid / formUuid` | 真实平台资源标识,用于权限过滤;本地视图绑定承载页面 |
|
|
247
293
|
| `label / icon` | PRD 业务名称、可选功能图标 |
|
|
248
294
|
| `targetType` | 提交、页面或外链等入口用途,按上节确定 |
|
|
249
295
|
| `params` | 预填、来源和其他业务参数,构造 URL 时保留 |
|
|
@@ -256,7 +302,13 @@ hash 的 `view` 保存任务入口 key,刷新及前进后退恢复选中内容
|
|
|
256
302
|
|
|
257
303
|
### 路由模式与数据桥兜底
|
|
258
304
|
|
|
259
|
-
|
|
305
|
+
曾出现的错误:将完整 `/APP_xxx/workbench/FORM_xxx` 地址当成页面 ID 或相对路由传入,平台再次添加当前应用前缀,产生重复的应用路径,无法正常切页。
|
|
306
|
+
|
|
307
|
+
- 生成代码通过 `window.__OPENYIDA_UTILS__.router` 数据桥跳转,完整地址明确使用 `router.push(href, params, false, true)`:第三参控制新标签,第四参控制 URL 模式。
|
|
308
|
+
- 数据桥已有兼容修复:仅在第四参 `isUrl` 未传或为 `undefined` 时,自动识别 `/APP_...`、HTTP(S) 和协议相对地址,并补为 `true`;路径中的 query/hash 保持原样。
|
|
309
|
+
- 显式传入 `isUrl=false` 时保持调用方选择,不会自动纠正。因此不要对完整地址写 `router.push(href, params, false, false)`,也不要绕过数据桥直接调用底层平台工具。
|
|
310
|
+
- 仅传页面 ID 时仍可用 `router.push('FORM-xxx', params, false)`;不要把页面 ID 与完整 URL 混用。
|
|
311
|
+
- 验收:普通点击保持当前标签,最终 URL 仅含一层应用路径,目标页面、选中态和业务参数正确。新代码显式传 URL 模式,自动识别只作兼容兜底。
|
|
260
312
|
|
|
261
313
|
## 主题 token
|
|
262
314
|
|
|
@@ -265,8 +317,6 @@ hash 的 `view` 保存任务入口 key,刷新及前进后退恢复选中内容
|
|
|
265
317
|
| 导航表面与标题 | `--pod-shell-theme-bg-color`、`--pod-nav-logo-text` |
|
|
266
318
|
| 普通 / 悬停 / 选中 / 禁用文字 | `--pod-nav-item-text-*` |
|
|
267
319
|
| 悬停 / 选中背景 | `--pod-nav-menu-bg-hover-color`、`--pod-nav-menu-bg-selected-color` |
|
|
268
|
-
| 普通 / 悬停 / 选中边框 | `--pod-nav-menu-item-border`、`--pod-nav-menu-item-hover-border`、`--pod-nav-menu-item-selected-border`,填写完整边框值,各状态保持相同线宽 |
|
|
269
|
-
| 菜单选中标记 | `--pod-nav-menu-item-selected-shadow`;`none` 关闭,其他值使用完整 `box-shadow`,可表达左、右或底部内阴影 |
|
|
270
320
|
| 分隔线、选中指示、焦点 | `--pod-nav-sub-divider-color`、`--pod-nav-tab-line-selected-color` |
|
|
271
321
|
| 菜单高度、圆角、文字、间距 | `--pod-nav-menu-*`、`--pod-nav-top-tab-*` |
|
|
272
322
|
| 悬浮阴影 | `--pod-nav-popup-shadow` |
|
|
@@ -274,18 +324,25 @@ hash 的 `view` 保存任务入口 key,刷新及前进后退恢复选中内容
|
|
|
274
324
|
| 自定义页整页画布 | `--pod-page-bg-color`(与原生页面统一)、`--pod-nav-page-padding` |
|
|
275
325
|
| 业务卡片 | `--pod-card-bg-color`、`--pod-card-border` |
|
|
276
326
|
|
|
277
|
-
`canvas-nav-side/top/mixed/dock` 共用上述菜单圆角、三种边框和选中阴影。已有自绘导航重新导出对应片段、合入页面源码并发布后生效;`canvas-nav-tabs` 继续使用页内标签样式。
|
|
278
|
-
|
|
279
|
-
侧栏和 Dock 菜单项使用 `--pod-nav-menu-item-height` 与 `--pod-nav-menu-item-padding`;顶部菜单和混合导航的顶部分组使用 `--pod-nav-top-tab-height`、`--pod-nav-top-tab-item-padding` 与 `--pod-nav-top-tab-item-max-width`。侧栏、顶部和混合导航的菜单间距读取 `--pod-nav-menu-gap`;Dock 使用 `--pod-nav-slide-collapsed-menu-gap`。侧栏外部留白读取 `--pod-nav-slide-aside-padding`,混合导航侧栏读取 `--pod-nav-l-aside-padding`。顶部横向滚动区预留半个菜单间距供阴影展示;外阴影较大时增加间距,并检查长名称截断、折叠态和窄屏菜单。案例取值见 [导航形状与密度](../../yida-design/references/application-theme-consistency.md#导航形状与密度的案例经验)。
|
|
280
|
-
|
|
281
327
|
主题由 `yida-design` 在应用级生成和配置;导航组件消费已有变量,必要的默认值放在 `var(...)` 回退中。颜色修改在主题文件完成,固定的布局结构留在组件中。导航深浅由导航主题决定,业务内容明暗由页面主题决定,分别验证。
|
|
282
328
|
|
|
283
329
|
## 验证
|
|
284
330
|
|
|
285
|
-
|
|
331
|
+
- [ ] 点击每个应用内菜单后,自定义导航仍存在且可操作;选中项与主内容一致,并能通过导航返回工作台。
|
|
332
|
+
- [ ] 原生提交/管理入口只切主内容 iframe;页面内新增/详情仍走标准抽屉,无双导航、递归 iframe 和双滚动条。
|
|
333
|
+
- [ ] 深链刷新及前进后退恢复相应任务;嵌入失败也不丢导航。
|
|
334
|
+
|
|
335
|
+
- 用权限不同的账号检查平台与自定义导航的可见入口,覆盖隐藏分组、空结果、请求失败及指向不可见入口的 hash。
|
|
336
|
+
- 菜单选中项与当前业务视图一致;点击、深链、刷新和浏览器前进后退由页面现有路由正确处理。
|
|
337
|
+
- 浅色及深色导航下,文字、背景、选中态、禁用态、焦点与分隔线可辨认。
|
|
338
|
+
- 窄屏菜单可展开或滚动,悬浮导航按所在位置留出内容空间;需要覆盖式菜单时接入抽屉。
|
|
339
|
+
- 自定义侧栏已验证折叠、展开后恢复宽度、拖拽上下限及内容区联动;这些功能不能因手写外观而省略。
|
|
340
|
+
- 页面只保留一个应用导航组件,按 `design.md` 或用户参考检查悬浮位置、容器比例、留白和选中态;编译通过不等于视觉验收通过。
|
|
341
|
+
- Canvas 宿主与自定义页根节点顶部对齐,浮导上边距留在根节点内(根节点使用 flow-root 或 flex/grid);隐藏应用导航时透明画布透出 Shell,原生页面仍保留独立底色,不出现顶部异色条。
|
|
342
|
+
- 本地编译通过后按发布技能更新目标页面;缺少运行态视觉检查时明确记录未验收,不得仅凭用了示例报告视觉完成。
|
|
286
343
|
|
|
287
344
|
## 可选代码参考
|
|
288
345
|
|
|
289
|
-
|
|
346
|
+
需要具体交互实现时,可用 `openyida sample openyida-page-template canvas-nav-side --output .cache/samples/canvas-nav.jsx` 查看侧栏折叠、调宽逻辑;其他现有示例 `canvas-nav-top`、`canvas-nav-mixed`、`canvas-nav-dock`、`canvas-nav-tabs` 同样按需参考。它们保留供兼容和查阅,不是导航设计流程,也不是默认交付 UI。
|
|
290
347
|
|
|
291
|
-
CodeCanvas
|
|
348
|
+
只提取需要的逻辑;CodeCanvas 使用单文件源码,合并片段时处理 import 和同名函数。菜单数据片段可独立复用,导航外观仍按上面的选型和业务设计实现。
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yida-page-config
|
|
3
|
-
description:
|
|
3
|
+
description: 配置已有页面的公开访问和组织内分享。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 页面访问配置
|
|
@@ -9,7 +9,7 @@ description: 为已有页面设置公开访问、组织内分享,或隐藏该
|
|
|
9
9
|
|
|
10
10
|
用户要求查询或修改已有普通 OpenYida 页面的公开短链 `/o/`、组织内分享短链 `/s/`,或明确要求隐藏页面级导航时使用本技能。
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
目标页面必须有可证明的 appType 和 formUuid。资源所有权不明、状态 stale、存在冲突或需要 reconciliation 时保持零写入;按标题或 URL 猜测页面身份不构成证明。
|
|
13
13
|
|
|
14
14
|
## 能力边界
|
|
15
15
|
|
|
@@ -20,15 +20,6 @@ description: 为已有页面设置公开访问、组织内分享,或隐藏该
|
|
|
20
20
|
|
|
21
21
|
页面使用哪类数据、是否允许公开、openAuth 对当前页面和组织开放哪些资格,必须来自平台能力、用户确认或实际查询证据。本技能不根据页面类型或数据源猜测资格。
|
|
22
22
|
|
|
23
|
-
## 匿名(免登)提交前置条件
|
|
24
|
-
|
|
25
|
-
当用户要求"自定义页面在公开访问下提交数据到表单"或"走免登提交接口"时,作为前置门禁:
|
|
26
|
-
|
|
27
|
-
1. **显示页和目标表单都需要 `isOpen`**:分别运行 `openyida get-page-config <appType> <显示页formUuid>` 和 `openyida get-page-config <appType> <目标formUuid>`,两者都返回 `isOpen === 'y'` 才承诺匿名提交。缺任一时先启用公开访问或改回登录态方案。
|
|
28
|
-
2. **目标表单权限需包含 `FREE_LOGIN`**:运行 `openyida get-permission <appType> <目标formUuid>`,DEFAULT 权限组的 `dataPermit.rule` 须包含 `{"type":"FREE_LOGIN","value":"y"}`。缺少时按 `yida-form-permission` 锁定 DEFAULT 组 `packageUuid`,在完整现有 `dataPermit` 中只补该规则并保留其他规则,禁止用固定模板覆盖现网权限。
|
|
29
|
-
3. 页面运行时分流是**匿名态**决定的,不是"表单公开"决定的:具体分流写法和 `RECEIPT_SAVE_FORM_DATA` 网关契约见 [`yida-canvas-custom-page/references/data-bridge-guide.md`](../yida-canvas-custom-page/references/data-bridge-guide.md) 的"公开访问(匿名态)提交"章节。
|
|
30
|
-
4. 匿名提交的能力边界(不能发起流程、唯一性校验不生效、成员/部门/关联字段不支持、提交人恒为匿名、附件默认不跨组织)由平台限制决定;需要这些能力时改用登录态页面 + 关闭公开访问。
|
|
31
|
-
|
|
32
23
|
## 铁律
|
|
33
24
|
|
|
34
25
|
1. **目标必须可证明**:appType 和 formUuid 从创建/查询命令或当前项目 config.json 获取;证据冲突时停止。
|
|
@@ -81,9 +72,9 @@ openyida save-share-config <appType> <formUuid> <url> <isOpen> [openAuth]
|
|
|
81
72
|
openyida update-form-config <appType> <formUuid> false "<页面标题>"
|
|
82
73
|
```
|
|
83
74
|
|
|
84
|
-
这条命令只设置页面级 `isRenderNav=false
|
|
75
|
+
这条命令只设置页面级 `isRenderNav=false`。自定义页要自绘应用侧边或顶部导航时,先使用 `openyida update-app <appType> --hide-app-nav` 隐藏应用导航;两者不是同一配置。
|
|
85
76
|
|
|
86
|
-
完整应用的独立入口必须在写入后再执行 `openyida get-form-config <appType> <formUuid> --json`。只有回读确认 `
|
|
77
|
+
完整应用的独立入口必须在写入后再执行 `openyida get-form-config <appType> <formUuid> --json`。只有回读确认 `isRenderNav=false` 后,才输出不带查询参数的 `/custom/{formUuid}`;失败时保留 `/workbench`,不把 URL 参数当作持久配置成功证据。
|
|
87
78
|
|
|
88
79
|
创建 dashboard 页面时,只有用户明确要求隐藏页面导航才使用:
|
|
89
80
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yida-prd
|
|
3
|
-
description:
|
|
3
|
+
description: 基于整理好的需求事实规划业务,生成 prd/<项目名>/prd.md,负责业务、资源、页面、顺序和验收规则。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# yida-prd
|
|
@@ -11,7 +11,7 @@ description: 基于整理好的需求事实编写或修改业务 PRD,负责业
|
|
|
11
11
|
|
|
12
12
|
读取 `.cache/openyida/<项目名>/requirement-brief.json`。发现影响规划的需求缺口时,将具体问题交回 `yida-requirement-analysis`,由 `yida-app` 组织澄清。
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
开始规划前确认 brief 的 `navigation.type/source/reason` 已明确;导航仍未决时交回需求分析与应用编排处理。Plan 将该类型写入 `execution.appConfig.navigationType`,Fast 在 PRD 应用配置中记录同一选择与依据。
|
|
15
15
|
|
|
16
16
|
基于输入事实,按 [页面与导航规划](workflow/step-2-information-architecture.md) 形成业务资源蓝图,再按当前模式交付:
|
|
17
17
|
|
|
@@ -20,17 +20,15 @@ description: 基于整理好的需求事实编写或修改业务 PRD,负责业
|
|
|
20
20
|
| Fast | 与 `yida-design` 并行,按 [11 章 PRD 契约](workflow/output-prd.md) 写入完整 `prd.md` |
|
|
21
21
|
| Plan | 按 [计划业务规划](workflow/plan-business.md) 补齐 `build-plan.json` 的 `overview`、`dataModels`、`businessFlows`、`pages` 和业务 `execution`,交给 `yida-app` 调用 CLI 派生同一契约的 PRD |
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Plan 的业务调整通过字段级 patch 更新源事实,再由编排重新物化和确认。
|
|
24
24
|
|
|
25
25
|
## 业务要求
|
|
26
26
|
|
|
27
27
|
- PRD 的业务说明和验收标准遵循 [用户可见表达契约](../yida-design/references/ask-human-interaction-contract.md),用功能和使用效果描述方案;接口参数及配置键值写入 Agent 实施交接。Plan 的摘要、规则和验收文案会直接展示在 HTML 中,填写时使用同一业务表达。
|
|
28
|
-
- 消费 brief 的 `userTasks` 和 `entryRecommendation`,将已选业务任务映射到页面、流程和访问路径;双入口不等于两个应用,不新增未选后台,业务管理入口不使用开发后台 `/admin` 代替。Plan 在现有页面/流程/执行字段表达这些要求,不新增未支持的 facts 字段。
|
|
29
28
|
- 规划目标、角色、对象、字段语义、流程、资源、页面任务、数据来源和验收标准;写清资源创建、页面实现交付和导航三种顺序。
|
|
30
29
|
- 用户存在 `explicitScope` 时,以该范围规划页面、表单、流程、报表和本轮交付。
|
|
31
30
|
- 真实 `appType`、`formUuid`、`fieldId`、`processCode` 以资源证据为准;实现阶段产生的 ID 写入 `.cache/<项目名>-schema.json`。
|
|
32
31
|
- 每个 display 页面提供 `pageSpecHandoff`,包含场景、区块、数据来源、主操作,以及指向对应 `design.md` 的 `designFile` / `designRefs`。视觉细则由 `yida-design` 维护。
|
|
33
|
-
- 导航结构、菜单顺序和默认入口由业务任务确定;导航外观与应用框架、表单、记录详情和自定义页面交给 `yida-design` 统一设计。PRD 保留整体风格摘要与设计引用,完整 token 和消费规则只在 `design.md` 维护。
|
|
34
32
|
|
|
35
33
|
## 按需参考
|
|
36
34
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# 应用结构字段
|
|
2
2
|
|
|
3
|
-
用于单个页面需要感知完整应用时,承接 `yida-prd`
|
|
3
|
+
用于单个页面需要感知完整应用时,承接 `yida-prd` 的产品输出。
|
|
4
4
|
|
|
5
5
|
## 必填字段
|
|
6
6
|
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
## 使用规则
|
|
18
18
|
|
|
19
19
|
- 页面 PRD 章节只引用与当前页有关的应用结构信息,不展开整个应用 PRD。
|
|
20
|
-
-
|
|
20
|
+
- 多页面应用的首页不一定是工作台:外部传播可用 landing,管理决策可用 dashboard,投屏可用 screen。
|
|
21
21
|
|
|
22
22
|
导航字段按下表写,不能混用:
|
|
23
23
|
|
|
@@ -39,12 +39,12 @@
|
|
|
39
39
|
{
|
|
40
40
|
"pages": [
|
|
41
41
|
{
|
|
42
|
-
"name": "
|
|
42
|
+
"name": "经营工作台",
|
|
43
43
|
"resourceType": "display-page",
|
|
44
44
|
"scene": "workbench",
|
|
45
45
|
"entryMode": "platform-shell",
|
|
46
46
|
"isMain": true,
|
|
47
|
-
"purpose": "
|
|
47
|
+
"purpose": "应用第一入口、今日概览、快捷入口"
|
|
48
48
|
}
|
|
49
49
|
],
|
|
50
50
|
"forms": [
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
# 导航模式
|
|
2
2
|
|
|
3
|
-
沿用 PRD 的入口和导航方案,字段范围见 [应用结构字段](blueprint.md)。本节细化菜单与跳转方式。
|
|
4
|
-
|
|
5
3
|
## 快速判断
|
|
6
4
|
|
|
7
5
|
| 需求 | 使用模式 | 要不要隐藏应用导航 | 备注 |
|
|
8
6
|
| --- | --- | --- | --- |
|
|
9
|
-
| 独立访客端自定义菜单+管理端平台导航 | 两个访问态入口 | 不隐藏 | 仅前台页面设置 isRenderNav=false,详见 [访问态入口契约](../../../yida-app/references/entry-navigation.md) |
|
|
10
7
|
| 常规业务系统、多页面后台 | 平台导航 | 不隐藏 | 用 `yida-nav-group` 管导航分组和顺序 |
|
|
11
|
-
|
|
|
8
|
+
| 自定义页自绘应用级顶部/侧边/导航壳 | 页面内导航壳 | 隐藏 | 设置 `hideAppNav='y'`,再用 `yida-nav-shell` |
|
|
12
9
|
| 页面内 tab、分段、局部切换 | 混合导航 | 不隐藏 | 这是当前页面内部结构 |
|
|
13
10
|
| 页面全屏、无导航、`isRenderNav=false` | 页面级隐藏 | 不一定 | 不等同于隐藏应用导航 |
|
|
14
11
|
|
|
@@ -18,7 +15,7 @@
|
|
|
18
15
|
|
|
19
16
|
规则:
|
|
20
17
|
|
|
21
|
-
-
|
|
18
|
+
- 门面页靠前,配置/录入类页面靠后。
|
|
22
19
|
- 同一角色的高频页面放同组。
|
|
23
20
|
- 同应用内页面优先在平台应用导航内切换;不要把一组同应用页面复制成自定义页里的快捷入口卡。
|
|
24
21
|
- 看板、工作台、列表、详情不要无序混排。
|
|
@@ -31,7 +28,7 @@
|
|
|
31
28
|
|
|
32
29
|
- 默认不要在自定义页里自建同级导航。
|
|
33
30
|
- 只有明确要顶部导航、侧边导航、导航壳、自绘应用级导航或隐藏应用导航时才使用。
|
|
34
|
-
-
|
|
31
|
+
- 自绘应用级导航前必须开启 `hideAppNav`;不要用 `isRenderNav=false` 表达应用导航隐藏。
|
|
35
32
|
- 顶部导航适合官网/门户;侧边导航适合复杂后台;浮动胶囊适合沉浸展示。
|
|
36
33
|
- 页面内导航只负责当前沉浸体验,不替代平台真实导航管理。
|
|
37
34
|
|
|
@@ -6,14 +6,12 @@
|
|
|
6
6
|
|
|
7
7
|
```markdown
|
|
8
8
|
- 角色:经销商
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
- 需要页面:
|
|
9
|
+
- 第一入口:经销商数据看板
|
|
10
|
+
- 高频任务:查看 GMV / 补货风险 / 活动转化 / 巡店建议
|
|
11
|
+
- 需要页面:dashboard + list + detail
|
|
12
12
|
- 不需要页面:内部配置表单直接暴露在首屏
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
只有角色确实需要经营分析时,另规划分析页;默认入口按 [首页按任务选择](../../../yida-requirement-analysis/references/experience-groups.md#首页按任务选择) 确定。
|
|
16
|
-
|
|
17
15
|
## 页面映射
|
|
18
16
|
|
|
19
17
|
| 角色需求 | 页面类型 |
|
|
@@ -28,8 +28,6 @@
|
|
|
28
28
|
- 视觉风格在 `prd.md` 中只写用户可理解摘要,并引用已同步生成的 `design.md` 作为完整设计契约来源。
|
|
29
29
|
- `prd.md` 顶部记录 `buildPlanRevision`,必须等于 `build-plan.json.meta.revision`;用户确认后作为后续开发的产品执行基线。
|
|
30
30
|
|
|
31
|
-
以下章节描述最终产物需要展示的内容。模型在紧凑输入中维护业务事实和项目差异;对象、流程、页面摘要与标准交接由 CLI 派生。
|
|
32
|
-
|
|
33
31
|
## 1. 需求总览
|
|
34
32
|
|
|
35
33
|
目标:概述基于共享需求事实形成的业务方案。
|
|
@@ -148,8 +146,6 @@
|
|
|
148
146
|
|
|
149
147
|
页面详情要让用户能想象最终页面能做什么、内容如何组织以及全局视觉主题如何在该页面落地,不要只写“展示数据、快捷操作”这类泛化描述。内容默认要求丰富但与任务相关;丰富度按任务覆盖衡量,不按区块数量衡量。
|
|
150
148
|
|
|
151
|
-
紧凑输入中,按优先顺序填写 `blocks: [{name,purpose}]`,CLI 派生默认内容优先级与内容层次。独立的信息层次设计继续填写对应字段;首屏结构、关键交互和权限保留业务差异。
|
|
152
|
-
|
|
153
149
|
字段归属:
|
|
154
150
|
|
|
155
151
|
- 页面定位、核心用户、核心任务、内容优先级、功能区块、首屏结构、标志性交互、内容丰富度、页面模式、信息密度和权限属于 `pages.customPageDetails[]`。
|