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>
This commit is contained in:
@@ -0,0 +1,187 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user