恢复点(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>
7.3 KiB
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.
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:
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:
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 isplugins/modern-ui/verification/browser-runtime-report.jsonand screenshot path isplugins/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 retryingiab.
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:
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:
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:
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:
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