恢复点(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>
188 lines
7.3 KiB
Markdown
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
|
|
```
|