Files
ERP/ofbiz-framework/plugins/modern-ui/MIGRATION_STATUS.md
T
QiufengandClaude Opus 4.8 5e51dc3f56 SNAPSHOT W7 已部署稳定态 — 凯迪ERP+OA一体化平台 (MET 73.3%)
恢复点(restore point)。别人改崩后可 git reset --hard 回到此提交。

== 此快照内容 ==
- 后端 oa-backend: 734 控制器 / 711 实体 (Spring Boot 3.2.5 + SQLite, 端口8091)
- 前端 modern-ui/app: Vue3+Vite, 约700页 (构建产物已在 oa-backend/src/main/resources/static)
- 数据库 oa-backend/data/oa.db: 含全部演示数据 (强制入库, 6.6MB)
- 交接文档 go.md + go-code-reference/endpoints/entities/database.md
- 多代理建设脚本 .claude/wf-*.js

== 状态 ==
- 对 凯迪科技ERP_20260507.xlsx 合规 MET ~73.3% (PARTIAL 75: 34可建+6种子/bug+35外部硬天花板)
- 安全: 5轮红队+5轮复检, default-deny分级鉴权, 连续零可利用
- W3~W7 累计补完436缺口; W8末轮(40缺口)为半成品(源码树可编译但未集成)
- 运行: cd oa-backend; java -jar build/libs/oa-backend-0.1.0.jar --server.port=8091; admin/123456

== 排除(gitignore, 可再生) ==
node_modules / oa-backend/build / .jdks / *.log / Backup-ERP-* / 弃用的OFBiz核心(只保留modern-ui)
完整文件夹备份见同目录 Backup-ERP-20260615-191517/ (含上述全部, 仅缺 node_modules)

时间戳: 20260615-191517

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 19:19:15 +08:00

188 lines
7.3 KiB
Markdown

# OFBiz Modern UI Migration Status
Last refreshed: 2026-06-09
## Current Gate
The modern frontend has structural route/page/action/form/table coverage for the scanned legacy OFBiz view surface. The business parity gate is still pending. Do not claim full parity.
```text
coverageStatus=structural-passed-business-incomplete
frontendRewriteGate=passed
businessParityGate=pending
missingRoutes=0
missingActions=0
missingPageDefinitions=0
legacyViewRoutes=1772
routeManifest=1772
uniquePageDefinitions=1767
splitPageDefinitionFiles=1767
duplicateLegacyRouteAliases=5
requestActions=4099
actionDefinitions=7934
serviceDefinitions=3848
renderablePages=1767
structuredPages=1250
adapterCoveredPages=465
customParityPages=465
customVuePages=0
verifiedBusinessParityPages=46
pendingBusinessE2ePages=1721
highRiskPendingPages=876
runtimeSmokePagesInCurrentParityArtifact=4
runtimeSmokePassed=4
runtimeSmokeDomains=1
runtimeSmokeFlows=1
verificationScreenshotsPresent=112
unsupportedBlockTypeCount=0
browserRuntimeFallback=Chrome/CDP
browserRuntimeStatus=passed
browserRuntimeScreenshot=plugins/modern-ui/verification/browser-runtime-admin.png
browserPluginIabStatus=unavailable
```
## What Is Implemented
Every generated page can enter this structural path:
```text
legacy controller/widget/template metadata
-> PageDefinition JSON
-> /api/v1/pages/:pageId
-> BusinessPageView
-> ErpPageRenderer / ErpAdapterBlock
-> Element Plus ERP wrappers/adapters
```
Implemented evidence from the current artifacts:
- 1772 legacy view routes map to 1767 unique PageDefinitions.
- 1767 split PageDefinition JSON files exist under `webapp/modern/app/generated/pages`.
- The lightweight inventory index exposes counts, coverage, parity manifest, route manifest, and `pageDefinitionUrl`; full page payloads are fetched per page.
- 7934 action definitions exist for 4099 scanned legacy request actions.
- 1409 form blocks have explicit contracts.
- 553 table blocks have data-source contracts: 505 entity-backed and 48 derived/report/history.
- 1870 select/radio/drop-down fields have option contracts.
- The renderer has no unsupported block type in the current parity artifact.
## What Is Structurally Covered By Metadata Renderer
The generated renderer covers these block families by metadata and wrappers/adapters:
```text
section: 2630
legacy-screen: 1767
actions: 1704
form: 1409
client-behavior: 1034
commerce-surface: 749
table: 553
permission: 234
links: 218
catalog-workspace: 191
finance-workspace: 173
menu: 163
communication-workspace: 115
report: 107
marketing-workspace: 84
manufacturing-workspace: 66
pos-workspace: 53
route-workspace: 51
search-workspace: 49
order-workspace: 34
profile-workspace: 32
entity-editor: 26
shipment-workspace: 26
tree-workspace: 25
order-entry-workspace: 20
entity-admin-workspace: 19
inventory-workspace: 18
cart-workspace: 17
calendar: 15
media-workspace: 14
lookup-workspace: 13
product-workspace: 10
chart-workspace: 9
survey-workspace: 8
quote-workspace: 8
request-workspace: 7
```
This is structural coverage. It means pages can be represented and rendered with a modern UI contract. It does not prove that every legacy side effect, report output, permission branch, or JavaScript behavior is business-equivalent.
## What Is Custom Rebuilt
The production SPA includes custom Vue admin/workspace surfaces for the main administrator experience and high-use domains, including dashboard, login, module workspaces, domain admin pages, order, party, product/catalog, accounting, inventory/facility, manufacturing, human resources, sales, procurement, scrum, operations, content, marketing, commerce, POS, marketplace, analytics, system security/operations, and extensions.
These custom surfaces are developer-maintained Vue components under `plugins/modern-ui/app/src/views` and `plugins/modern-ui/app/src/components/erp`. They complement the generated PageDefinition renderer. The generated inventory still reports `customVuePages=0` because generated PageDefinitions themselves do not point at per-page custom Vue components; `adapterCoveredPages/customParityPages=465` marks generated pages whose old template/workspace behavior needs parity attention.
## Current Runtime And Screenshot Evidence
Current visible evidence in this repo:
- `coverage-verification.json`: generated 2026-06-09T06:25:25.455Z.
- `parity-verification.json`: generated 2026-06-08T01:55:10.521Z.
- Runtime smoke in the current parity artifact covers 4 Accounting pages and passes all 4.
- Screenshot directory currently contains 112 PNG files. This is useful visual evidence, but not all 1767 generated pages.
- Browser runtime verification currently passes through local Google Chrome + CDP against `http://127.0.0.1:8080/modern/app/`; report path is `plugins/modern-ui/verification/browser-runtime-report.json` and screenshot path is `plugins/modern-ui/verification/browser-runtime-admin.png`.
- The Codex in-app browser path is currently unavailable: `agent.browsers.get('iab') -> Browser is not available: iab`. Treat that as a tooling limitation, not as evidence that Modern UI failed. Use Chrome/CDP and fail fast on concrete Chrome/base URL errors instead of retrying `iab`.
The earlier claim of a 64-page runtime smoke sample is not supported by the current `parity-verification.json` artifact in this checkout. Treat the 4-page smoke numbers above as the current reproducible artifact state until `npm run verify:parity` is rerun and the JSON is updated.
## Remaining Work Before Functional Equivalence
`pendingBusinessE2ePages=1721` is the completion blocker. The remaining pages need old-vs-new business E2E, especially the `876` high-risk pages involving payment, POS/cart, upload/import/export/PDF/print, finance state, shipment, return, report output, permission/session handling, or legacy JavaScript behavior.
Largest pending domains by page count:
```text
Product / Catalog: 346
Accounting: 257
Order: 197
Party: 145
Content: 137
Ecommerce: 96
Human Resources: 87
WebTools: 79
Marketing: 74
Work Effort: 68
Scrum: 56
Project: 38
```
## Verification Source Of Truth
Use these files for current claims:
```text
plugins/modern-ui/verification/coverage-verification.json
plugins/modern-ui/verification/coverage-verification.md
plugins/modern-ui/verification/parity-verification.json
plugins/modern-ui/verification/parity-verification.md
plugins/modern-ui/webapp/modern/app/generated/ui-inventory.json
plugins/modern-ui/webapp/modern/app/generated/pages/*.json
```
Useful commands from `plugins/modern-ui/app` when code or generated assets change:
```bash
npm run build
npm run verify:coverage
npm run verify:preview
npm run verify:parity
npm run verify:browser-runtime
```
Do not rewrite these commands' meaning in delivery notes: coverage proves structural coverage, preview/browser checks prove representative runtime health, and parity remains pending until page-level business E2E is complete.
Acceptance gate to move `businessParityGate` from pending to passed:
```text
pendingBusinessE2ePages=0
highRiskPendingPages=0
verifiedBusinessParityPages=1767
runtime smoke expanded beyond the current 4 Accounting pages across domains and scenario flows
old-vs-new authenticated E2E covers mutation, report/export/PDF/print, upload/import, POS/cart/payment, permission/session, validation, and state-transition behavior
Chrome/CDP browser-runtime report passes with screenshot evidence
```