4.6 KiB
Frontend Detail Media Layout Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Implement the frontend page designer's image-and-text detail layout so it is editable, saved, normalized, and generated into Qing Vue pages.
Architecture: Add a detail layout region for frontend-detail-media-v1 with titleField, imageField, summaryField, and ordered fields. The Vue designer renders a dedicated media-detail canvas, the Java page-design service preserves and validates those fields, and Velocity exposes detail-media context to the Qing template.
Tech Stack: Vue 3, Element Plus, Node node:test, Java JUnit, Apache Velocity templates.
Task 1: Designer Media Detail Canvas
Files:
-
Modify:
easycode-web/src/components/FrontendPageDesigner.vue -
Test:
easycode-web/src/components/frontendPageDesigner.test.mjs -
Step 1: Write the failing test
Add a source-level test that expects isDetailMediaLayout, detailMediaRegion, media-specific field setters, and detail-media-preview markup.
- Step 2: Run the frontend designer test
Run: node --test easycode-web/src/components/frontendPageDesigner.test.mjs
Expected: FAIL because the media-detail canvas helpers and markup do not exist yet.
- Step 3: Implement the minimal designer code
Add computed helpers for media detail, a dedicated canvas branch, default region initialization, drag/drop single-field binding for titleField, imageField, and summaryField, plus right-panel field selectors.
- Step 4: Run the frontend designer test
Run: node --test easycode-web/src/components/frontendPageDesigner.test.mjs
Expected: PASS.
Task 2: Backend Layout Normalization
Files:
-
Modify:
ruoyi-generator/src/main/java/com/ruoyi/generator/service/front/FrontendPageDesignService.java -
Test:
ruoyi-generator/src/test/java/com/ruoyi/generator/service/front/FrontendPageDesignServiceTest.java -
Step 1: Write the failing test
Add a service test that updates a detail page with frontend-detail-media-v1 and a detail region using database column names. It should assert the persisted JSON contains normalized Java field names for titleField, imageField, summaryField, and fields.
- Step 2: Run the service test
Run: mvn -q -pl ruoyi-generator -Dtest=FrontendPageDesignServiceTest test
Expected: FAIL because summaryField is not normalized and default detail layout is not media-aware.
- Step 3: Implement the minimal service code
Normalize summaryField, add detail-region defaults for detail page layouts, and ensure frontend-detail-media-v1 keeps a detail region shape.
- Step 4: Run the service test
Run: mvn -q -pl ruoyi-generator -Dtest=FrontendPageDesignServiceTest test
Expected: PASS.
Task 3: Qing Template Rendering
Files:
-
Modify:
ruoyi-generator/src/main/java/com/ruoyi/generator/util/VelocityUtils.java -
Modify:
ruoyi-generator/src/main/resources/qing/index.vue.vm -
Test:
ruoyi-generator/src/test/java/com/ruoyi/generator/util/QingTemplateSupportTest.java -
Step 1: Write the failing test
Add a template test that provides frontend-detail-media-v1 with title, image, summary, and detail fields. It should assert the Velocity context has media-detail flags and the rendered Vue contains media-detail classes and resource image binding.
- Step 2: Run the template test
Run: mvn -q -pl ruoyi-generator -Dtest=QingTemplateSupportTest test
Expected: FAIL because the context and template do not expose media-detail rendering.
- Step 3: Implement the minimal context and template code
Expose pageDesignIsMediaDetail, pageDesignDetailColumns, pageDesignDetailTitleColumn, pageDesignDetailImageColumn, and pageDesignDetailSummaryColumn, then branch the detail template to render a media hero before the detail grid.
- Step 4: Run the template test
Run: mvn -q -pl ruoyi-generator -Dtest=QingTemplateSupportTest test
Expected: PASS.
Task 4: Final Verification
Files:
-
Verify changed frontend and generator paths.
-
Step 1: Run focused frontend test
Run: node --test easycode-web/src/components/frontendPageDesigner.test.mjs
Expected: PASS.
- Step 2: Run focused Java tests
Run: mvn -q -pl ruoyi-generator -Dtest=FrontendPageDesignServiceTest,QingTemplateSupportTest test
Expected: PASS.
- Step 3: Run build if focused tests pass
Run: npm run build from easycode-web
Expected: PASS.