status: propose created: 2026-05-15 拆分顺序:数据模型 → 协议工具 → Store 编排 → 编辑器入口 → 预览运行时 → 事件与参数 → 验证
/chart/home/:id 实际位于 forge-report-ui 子应用。ai_report_project.component_data 为 longtext,可先承载多页面 JSON。| Task | 名称 | 状态 | 优先级 |
|---|---|---|---|
| Task 1 | 多页面协议与兼容工具 | completed | P0 |
| Task 2 | chartEditStore 多页面状态 | completed | P0 |
| Task 3 | 编辑器页面管理面板 | completed | P0 |
| Task 4 | 保存、自动保存、预览、发布改造 | completed | P0 |
| Task 5 | 预览页多页面运行时 | completed | P0 |
| Task 6 | 组件页面跳转动作配置 | completed | P0 |
| Task 7 | 下钻上下文与动态参数接入 | completed | P0 |
| Task 8 | JSON 导入导出和代码编辑兼容 | completed | P1 |
| Task 9 | 构建验证与手动回归 | pending | P0 |
| Task 10 | 项目内弹窗页面 | completed | P0 |
目标: 建立多页面 JSON 类型和协议转换工具,保证旧单画布项目可无感加载。
状态: completed
涉及文件:
forge-report-ui/src/store/modules/chartEditStore/chartEditStore.d.ts — 新增 ReportCanvasPage、ReportMultiPageStorage、ReportPageTransition、ComponentAction、DrillParamBinding 类型。forge-report-ui/src/utils/reportPages.ts — 新增多页面协议工具。forge-report-ui/src/packages/public/publicConfig.ts — 为组件事件补充默认 actions: []。forge-report-ui/src/views/chart/hooks/useSync.hook.ts — 加载旧组件时补齐 events.actions 默认值。关键签名:
export function normalizeProjectStorage(storage: unknown, fallbackName?: string): ReportMultiPageStorage
export function createDefaultPage(name?: string): ReportCanvasPage
export function extractPageStorage(project: ReportMultiPageStorage, pageId?: string): ChartEditStorage
export function updatePageStorage(project: ReportMultiPageStorage, pageId: string, storage: ChartEditStorage): ReportMultiPageStorage
export function clonePageWithNewIds(page: ReportCanvasPage, name?: string): ReportCanvasPage
验收标准:
{ editCanvasConfig, requestGlobalConfig, componentList } 可转换为 version=2 的单页面项目。pageId 提取单页画布数据。验证:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm exec eslint src/store/modules/chartEditStore/chartEditStore.d.ts src/packages/index.d.ts src/packages/public/publicConfig.ts src/views/chart/hooks/useSync.hook.ts src/utils/reportPages.ts
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
结果:
publicConfig.ts 被项目 ignore 规则跳过。pnpm build 通过;输出的 lottie eval、Rollup 循环 chunk、CSS :deep()、chunk size 均为既有警告。目标: Store 支持项目页面列表、当前页面、首页、页面切换和项目级保存快照。
状态: completed
涉及文件:
forge-report-ui/src/store/modules/chartEditStore/chartEditStore.ts — 增加多页面 state/getters/actions。forge-report-ui/src/store/modules/chartEditStore/chartEditStore.d.ts — 增加 store 类型定义。forge-report-ui/src/views/chart/ContentEdit/hooks/useLayout.hook.ts — 使用 loadProjectStorage() 代替直接 updateComponent()。forge-report-ui/src/views/preview/utils/storage.ts — 复用 store 的多页面加载能力。关键签名:
loadProjectStorage(storage: unknown, initialPageId?: string): Promise<void>
getProjectStorageInfo(): ReportMultiPageStorage
flushCurrentPage(): void
switchPage(pageId: string): Promise<void>
createPage(name?: string): Promise<string>
duplicatePage(pageId: string): Promise<string>
deletePage(pageId: string): Promise<void>
renamePage(pageId: string, name: string): void
setHomePage(pageId: string): void
验收标准:
验证:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm exec eslint src/store/modules/chartEditStore/chartEditStore.ts src/store/modules/chartEditStore/chartEditStore.d.ts src/views/chart/ContentEdit/hooks/useLayout.hook.ts src/views/preview/utils/storage.ts src/utils/reportPages.ts
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
结果:
pnpm build 通过;输出的 lottie eval、Rollup 循环 chunk、CSS :deep()、chunk size 均为既有警告。目标: 在 /chart/home/:id 工作空间内提供多画布页面管理入口。
状态: completed
涉及文件:
forge-report-ui/src/views/chart/ContentPages/index.vue — 新增页面管理面板。forge-report-ui/src/views/chart/ContentPages/components/PageListItem.vue — 页面项组件。forge-report-ui/src/views/chart/index.vue — 挂载页面面板。forge-report-ui/src/views/chart/ContentConfigurations/index.vue 或布局相关文件 — 调整编辑区布局,避免遮挡画布。forge-report-ui/src/store/modules/chartHistoryStore/chartHistoryStore.ts — 页面切换时清理或隔离历史栈。关键交互:
验收标准:
验证:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm exec eslint src/views/chart/ContentPages/index.vue src/views/chart/ContentPages/components/PageListItem.vue src/views/chart/index.vue src/store/modules/chartEditStore/chartEditStore.ts
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
结果:
pnpm build 通过;输出的 lottie eval、Rollup 循环 chunk、CSS :deep()、chunk size 均为既有警告。目标: 所有项目保存链路写入多页面完整 JSON,而不是仅保存当前页面。
状态: completed
涉及文件:
forge-report-ui/src/api/project/index.ts — buildProjectPayload() 支持 ReportMultiPageStorage。forge-report-ui/src/views/chart/hooks/useAutoSave.hook.ts — 保存前 flushCurrentPage(),使用 getProjectStorageInfo()。forge-report-ui/src/views/chart/ContentHeader/headerRightBtn/index.vue — 预览、发布、保存校验使用多页面完整数据。forge-report-ui/src/utils/reportPages.ts — 新增默认多页面项目创建工具。forge-report-ui/src/views/project/components/ProjectCreateModal/index.vue — 新建项目默认写入多页面协议。forge-report-ui/src/views/project/layout/components/ProjectLayoutCreate/components/CreateModal/index.vue — 新建项目默认写入多页面协议。关键签名:
export const buildProjectPayload = (
rawId: string | string[] | number,
storageInfo: ChartEditStorage | ReportMultiPageStorage,
indexImg?: string
) => Partial<ForgeProject>
验收标准:
componentData 与前端预期一致。version=2 多页面协议。验证:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm exec eslint src/utils/reportPages.ts src/api/project/index.ts src/views/chart/hooks/useAutoSave.hook.ts src/views/chart/ContentHeader/headerRightBtn/index.vue src/views/project/components/ProjectCreateModal/index.vue src/views/project/layout/components/ProjectLayoutCreate/components/CreateModal/index.vue
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
结果:
pnpm build 通过;输出的 lottie eval、Rollup 循环 chunk、CSS :deep()、chunk size 均为既有警告。目标: 预览页支持项目内页面切换、query 指定页面和页面过渡动画。
状态: completed
涉及文件:
forge-report-ui/src/views/preview/suspenseIndex.vue — 根据当前页面渲染画布,增加 transition 包裹。forge-report-ui/src/views/preview/utils/storage.ts — 支持 ?pageId= 和 homePageId。forge-report-ui/src/views/preview/components/PreviewRenderList/index.vue — 页面切换时重新初始化数据池。forge-report-ui/src/views/preview/hooks/useStore.hook.ts — 多页面运行时 store 同步。forge-report-ui/src/hooks/useChartDataPondFetch.hook.ts — 清理旧页面数据池 watcher 和轮询。forge-report-ui/src/utils/reportPages.ts — 增加预览初始页面解析工具。关键签名:
switchPreviewPage(pageId: string, context?: Record<string, any>, transition?: ReportPageTransition): Promise<void>
resolveInitialPreviewPage(project: ReportMultiPageStorage, queryPageId?: string): string
验收标准:
/chart/preview/:id 默认打开首页。/chart/preview/:id?pageId=xxx 打开指定页面。pageId 自动回退首页。验证:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm exec eslint src/utils/reportPages.ts src/views/preview/utils/storage.ts src/views/preview/suspenseIndex.vue src/hooks/useChartDataPondFetch.hook.ts
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
结果:
pnpm build 通过;输出的 lottie eval、Rollup 循环 chunk、CSS :deep()、chunk size 均为既有警告。目标: 在组件事件配置中新增结构化「页面跳转」动作,不要求用户写 JS。
状态: completed
涉及文件:
forge-report-ui/src/enums/eventEnum.ts — 新增 action 类型枚举。forge-report-ui/src/views/chart/ContentConfigurations/components/ChartEvent/index.vue — 挂载动作配置入口。forge-report-ui/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventPageAction/index.vue — 新增页面跳转动作配置组件。forge-report-ui/src/hooks/useLifeHandler.hook.ts — 运行时合并结构化动作与原基础事件。forge-report-ui/src/store/modules/chartEditStore/chartEditStore.ts — 增加运行时页面转场覆盖值。forge-report-ui/src/store/modules/chartEditStore/chartEditStore.d.ts — 增加运行时页面转场类型。forge-report-ui/src/views/preview/suspenseIndex.vue — 支持动作级临时转场优先级。forge-report-ui/src/views/preview/utils/storage.ts — 切页时写入运行时转场。关键签名:
export enum ComponentActionType {
GO_PAGE = 'goPage'
}
export function useComponentActions(chartConfig: CreateComponentType | CreateComponentGroupType): Record<string, Function>
验收标准:
验证:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm exec eslint src/enums/eventEnum.ts src/hooks/useLifeHandler.hook.ts src/store/modules/chartEditStore/chartEditStore.ts src/store/modules/chartEditStore/chartEditStore.d.ts src/views/preview/utils/storage.ts src/views/preview/suspenseIndex.vue src/views/chart/ContentConfigurations/components/ChartEvent/index.vue src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventPageAction/index.vue
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
结果:
pnpm build 通过;输出的 lottie eval、Rollup 循环 chunk、CSS :deep()、chunk size 均为既有警告。目标: 页面跳转可携带下钻参数,目标页面的数据请求可通过动态参数读取。
状态: completed
涉及文件:
forge-report-ui/src/store/modules/chartEditStore/chartEditStore.ts — 新增 runtimePageContext 管理。forge-report-ui/src/store/modules/chartEditStore/chartEditStore.d.ts — 动态参数来源增加 pageContext。forge-report-ui/src/utils/reportDrill.ts — 新增下钻参数解析工具。forge-report-ui/src/utils/requestDynamicParams.ts — 增加页面上下文取值来源。forge-report-ui/src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventPageAction/index.vue — 增加参数绑定 UI。forge-report-ui/src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestTargetConfig/index.vue — 动态参数来源增加「页面上下文」。关键签名:
export function resolveDrillParams(
bindings: DrillParamBinding[],
eventPayload: any,
pageContext: Record<string, any>
): Record<string, any>
验收标准:
regionCode 后,详情页请求参数可读取 pageContext.regionCode。验证:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm exec eslint src/utils/reportDrill.ts src/utils/requestDynamicParams.ts src/hooks/useLifeHandler.hook.ts src/store/modules/chartEditStore/chartEditStore.ts src/store/modules/chartEditStore/chartEditStore.d.ts src/views/chart/ContentConfigurations/components/ChartEvent/components/ChartEventPageAction/index.vue src/views/chart/ContentConfigurations/components/ChartData/components/ChartDataRequest/components/RequestTargetConfig/index.vue
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm build
结果:
pnpm build 通过;输出的 lottie eval、Rollup 循环 chunk、CSS :deep()、chunk size 均为既有警告。目标: 保证 JSON 编辑、导入、导出对新旧协议都可用。
状态: completed
涉及文件:
forge-report-ui/src/views/edit/index.vue — JSON 编辑页支持多页面协议。forge-report-ui/src/views/chart/ContentEdit/components/EditTools/index.vue — 导入/导出使用完整项目协议。forge-report-ui/src/views/chart/ContentEdit/components/EditTools/utils/index.ts — 导出 JSON 包含 pages。forge-report-ui/src/views/chart/ContentEdit/components/EditTools/hooks/useFile.hooks.ts — 导入时 normalize。forge-report-ui/src/views/chart/ContentEdit/components/EditTools/hooks/useSyncUpdate.hook.ts — 同步到预览时使用项目级 storage。验收标准:
验证:
cd forge-report-ui && pnpm exec eslint src/views/chart/ContentEdit/components/EditTools/index.vue src/views/chart/ContentEdit/components/EditTools/hooks/useFile.hooks.ts src/views/chart/ContentEdit/components/EditTools/hooks/useSyncUpdate.hook.ts src/views/chart/ContentEdit/components/EditTools/utils/index.ts src/views/edit/index.vue
结果:
目标: 完成构建和关键路径验证。
涉及文件:
code-copilot/changes/report-multi-page-canvas/spec.md — 更新执行日志。code-copilot/changes/report-multi-page-canvas/tasks.md — 更新任务状态。code-copilot/changes/report-multi-page-canvas/test-report.md — 记录验证结果。验证命令:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && cd forge-report-ui && pnpm build
手动回归清单:
?pageId= 打开指定页。验收标准:
pnpm build 通过。目标: 支持在大屏预览中点击组件打开项目内弹窗页面,弹窗内容仍由大屏编辑器页面配置。
状态: completed
涉及文件:
forge-report-ui/src/store/modules/chartEditStore/chartEditStore.d.ts — 新增 pageType=modal、弹窗配置、运行时弹窗栈类型。forge-report-ui/src/store/modules/chartEditStore/chartEditStore.ts — 新增弹窗页创建、打开、关闭运行时动作。forge-report-ui/src/utils/reportPages.ts — 多页面协议兼容 pageType 和 modalConfig。forge-report-ui/src/enums/eventEnum.ts、forge-report-ui/src/hooks/useLifeHandler.hook.ts — 新增 openModal、closeModal 结构化动作。forge-report-ui/src/views/preview/suspenseIndex.vue、PreviewRenderList、PreviewRenderGroup、useComInstall.hook.ts — 预览页叠加渲染弹窗页面并注册弹窗组件。forge-report-ui/src/views/chart/ContentPages/*、CanvasPage/index.vue、ChartEventPageAction/index.vue — 新增弹窗页入口、弹窗外壳配置和事件配置。验收标准:
验证:
cd forge-report-ui && pnpm build
结果:
pnpm build 通过;输出的 lottie eval、Rollup 循环 chunk、CSS :deep()、chunk size 均为既有警告。