恢复点(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>
19 KiB
OFBiz Element Plus 前端重构 Memory
更新时间:2026-06-10
🚫 硬规范:项目里绝不允许任何 emoji
任何 .vue/.ts/.css 不得出现 emoji(含 📎👤📅🅣✅⚙️ 及 ▽◉☑▤▦↑↓ 这类几何符号当图标)。需要图标一律用 Element Plus 官方图标库 @element-plus/icons-vue(已全局注册;:icon 用法需 import)。所有 build 子代理 prompt 必须带这条。生成后用 emoji 范围正则扫 src/ 确认零 emoji。详见 ~/.claude/projects/-Users-qiu-Desktop-ERP/memory/no-emoji-rule.md。
⚠️ 重大转向(2026-06-10 晚):ERP → 致远风格 OA 复刻
用户放弃 ERP 方向,要求把 modern-ui/app 原地改造成致远 A6-V5 协同 OA 的复刻(用我们自己的 Vue3 + Element Plus,不抄其后端)。已完成的状态:
- 参照系:致远测试站
http://222.240.1.170:99/seeyon/main.do,账号cs/密码kd123456(通过 Claude in Chrome 扩展浏览器探索;致远"办理详情页"是重 iframe,扩展会卡,深页探索靠 OA 通用范式)。 - OFBiz 账号:37 个 UserLogin 密码全部改为
ADMIN({SHA}<hex>格式,已 enabled、清锁定)。admin/ADMIN 可真登录(仅 ERP 时代用;OA 现已无登录门禁)。 - 备份:ERP 旧版前端在
/Users/qiu/Desktop/ERP/backups/erp-modern-ui-*.tar.gz(含 modern-ui+modern-api 源码,可恢复)。 - 契约文件:
plugins/modern-ui/OA-SPEC.md(功能/页面/布局规格)、app/src/data/oaModules.ts(9 模块+子页+空间+快捷的权威目录)。 - 新架构:
src/oa/OaAppShell.vue(OA 形态外壳:顶部模块导航+hover 下拉+空间切换+工具栏+快捷条,固定布局只内容滚动)、src/oa/portal/OaPortalPage.vue(个人空间门户)、src/oa/OaGenericPage.vue(9 种页面原型 fallback 渲染器)、src/oa/OaContactsPage.vue(通讯录)。路由src/router/index.ts用import.meta.glob('../oa/pages/**/*.vue')自动挑选src/oa/pages/<模块>/<key>.vue,缺失则回退 OaGenericPage —— 加页面只需放文件,无需改路由。App.vue直接挂 OaAppShell(无 OFBiz 会话门禁)。 - 已建模块(47 个页面文件,子代理并发):collab/meeting/goal/knowledge/doccollab/culture/hr/report/appdev 全部子页 + 各自本地 mock 数据(无后端,占位数据)。
- 已删:全部 ERP
*AdminView.vue、Erp*Workspace.vue、ErpDomainAdminView/ErpPageRenderer/ErpAdapterBlock/ErpCommerceSurface、ErpAppShell.vue、moduleCatalog.ts。保留:ErpDataTable/ErpSearchForm/ErpTabbedDataPanel/ErpStatusTag/ErpDrawer/ErpPageHeader/ErpActionBar/ErpLookup/fieldOptions、styles、services、types、appContext、LoginView/LoginRedirectView/NotFoundView。 - 验证:
npm run build绿;headless 启动自检 19/19 路由干净渲染(无 console 错误)。用户不要截图验证,自己看后台。 - 下一步可做:逐页对照致远细化字段/交互、补 OA 后端(之前 BACKEND.md 分析过 OFBiz 的 WorkEffort/Content/Party/Communication 可覆盖部分 OA)、深页(办理详情流程轨迹等)精修。
二次深扒 + 引擎复刻(2026-06-10 更晚)
深扒确认:致远 OA 本质 = 表单引擎 + 流程引擎 + 低代码设计器(详见 OA-SPEC.md 第 5 节)。待办/已办只是"表单实例在审批流流转"的结果。已复刻:
src/oa/engine/:types.ts(FormSchema 字段+网格行+明细子表 / FlowSchema 节点+审批/知会/协同+并行 parallels / FormTemplate)、OaFormRenderer.vue(致远式表格网格表单,13 种字段+人员/部门选择+附件+明细子表加行;readonly=预览)、OaFlowDiagram.vue(横向节点流程图+并行框+缩放)、OaProcessSpecModal.vue("流程说明书"弹窗,表单/流程/流程使用说明书三页签)、OaCreateItemDialog.vue(新建事项模板选择器:分类树+模板卡 预览/使用)、store.ts(前端 mock 提交store)、templates/(10 张样板:保函付款申请单【精确复刻表单+11节点含并行流程】/费用报销/请假/用印/通用/供应商准入/出差/采购合同会签/付款/加班)。src/oa/designer/:OaFormDesigner.vue(三栏低代码表单设计器:字段面板+表格网格画布+属性面板)、OaFlowDesigner.vue(流程设计器:加节点/选类型/连线/并行)。挂在应用定制平台/应用管理中心(appdev/appmgr)。pages/appdev/workbench.vue=CAP 落地页(banner+环图统计 表单总数248 等+三入口)。pages/collab/create.vue=新建事项发起器。- 验证:
npm run build绿;headless 自检 19/19 + 引擎实拍(表单预览=表格网格+子表、说明书、表单设计器)确认忠实复刻。仍 mock 数据、无后端(用户要求)。 - 截图存
verification/oa-shots/(eng-*.png 为引擎实拍)。脚本:scripts/oa-bootcheck.mjs(启动自检)、oa-shots.mjs/oa-engine-shots.mjs(截图)。 - 看:
#/oa/collab/create(新建事项)、#/oa/appdev/workbench(CAP)、#/oa/appdev/appmgr(设计器)。
(以下为 ERP 时代的历史记录,已备份,保留供参考)
用户的核心要求
用户要把 Apache OFBiz 的原有 Web 前端整体重构为 Vue 3 + TypeScript + Element Plus 的现代 ERP 管理后台。
明确要求:
- 前端需要重构完,不能只是组件展示、预览页、套壳页面。
- 旧的 OFBiz FreeMarker / Widget 风格 UI 不作为最终 UI。
- 后端业务逻辑、权限、事务、service、entity 语义先不推翻,前端通过新 API / 元数据适配层接入。
- 功能必须全部具备,最终要达到可验收状态。
- 不需要兼容旧浏览器。
- 浏览器调用不需要再次请求权限,应该直接使用浏览器验证。
- 任务不要无限跑太久,但必须朝 100% 可验收推进。
- 可以使用最多 6 个子代理并发拆任务,模型配置按工作区约定使用 GPT-5.5 / x-high / fast 等能力。
- 误注入的 PCB 相关提示词需要忽略,不属于当前任务。
既定产品路线
目标架构:
- 新增或继续使用
plugins/modern-ui作为生产级现代前端。 - 使用 Vue 3、TypeScript、Vite、Element Plus。
- 新前端入口为
/modern/app/。 - 旧 GET / HEAD HTML 页面入口最终导向现代 SPA。
- POST、API、下载、静态资源、登录、登出等非页面请求不得被错误拦截。
- 保留旧 OFBiz controller / widget / form / menu / screen XML 作为迁移元数据来源,直到新 UI 彻底具备业务等价能力。
设计系统方向:
- Element Plus 是基础组件库。
- 必须有 OFBiz ERP 专用的视觉系统,而不是直接使用 Element Plus 默认样式。
- 需要沉淀颜色、字号、间距、表格密度、状态色、按钮层级、导航规则、卡片规则、表单规则。
- UI 风格应该安静、耐用、专用,适合后台 ERP 长时间使用。
- 页面应该是业务工作台,而不是组件库展示站。
已经完成的主要工作
当前本地仓库:
- 工作区:
/Users/qiu/Desktop/ERP - OFBiz 仓库:
/Users/qiu/Desktop/ERP/ofbiz-framework - 现代前端:
/Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/app - 前端构建产物:
/Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/webapp/modern/app - 本地预览地址:
http://127.0.0.1:8080/modern/app/
已经完成:
- 建立了生产方向的
plugins/modern-ui前端应用。 - 将产品文案从“预览 / 组件展示 / lab / gallery”方向改为正式 ERP 管理后台语言。
- 新前端 shell 已使用正式产品语义,例如:
OFBiz ERP统一运营管理平台
- 已经形成 Element Plus ERP wrapper 层和业务页面渲染结构。
- 已经存在或推进过的核心 UI 结构包括:
ErpAppShellErpPageHeaderErpPageRendererErpAdapterBlock- 业务工作台页面
- 菜单 / 导航 / 页面区 / 动作区
- 表单、表格、状态、业务块等封装
- 已经处理过部分动态文案泄漏问题:
- 新增共享显示文本清洗工具:
plugins/modern-ui/app/src/utils/display.ts businessCapabilityText(values, fallback)用于把动态 capability 转为产品可读文案。- Finance / Order / HumanRes 等 workspace 中直接暴露
block.source/block.capabilities的风险已经被处理过一轮。
- 新增共享显示文本清洗工具:
- 已经修正过截图验证中 portal create 页面误判的问题。
路由和覆盖情况
已有覆盖验证结果显示:
legacyViewRoutes: 1772uniquePageDefinitions: 1767renderedPages: 1767missingRoutes: 0missingActions: 0frontendRewriteCoverageGate: passed
含义:
- 现代前端的结构性路由覆盖已经做到很大规模。
- 旧页面到新页面定义的映射检查没有缺失路由。
- action 映射检查没有缺失。
但需要特别注意:
- 这不等于完整业务深度等价已经完成。
- 当前仍有大量页面只是生成式 / 元数据式覆盖,还没有逐页完成深度业务验收。
已跑过的验证
在 /Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/app 下已经跑通过:
npm run buildnpm run verify:admin-sitenpm run verify:admin-productnpm run verify:erp-renderer-copynpm run verify:browser-runtime-policynpm run verify:coveragenpm run verify:business-e2e:batchnpm run verify:browser-runtime- 部分截图验收,例如:
MODERN_UI_SCREENSHOT_IDS=business-page-portal-create npm run verify:screenshots
浏览器验证证据:
- 曾真实打开
http://127.0.0.1:8080/modern/app/#/ - 浏览器 runtime 验证无 console error
- 截图产物:
/Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/verification/browser-runtime-admin.png
verify:business-e2e:batch 的重要结果:
missingRoutes: 0missingActions: 0frontendReadyPages: 1767runtimeSmokePassed: 22runtimeSmokePassedWithLegacyUnavailable: 2runtimeSmokeFailed: 0fullBusinessParityVerified: false
当前没有完成的部分
必须诚实记录:
- OFBiz 前端尚未达到“全部功能 100% 业务等价重构完成”。
- 当前报告中仍有:
pendingBusinessParityPages: 1721businessDepthParityGate: pendingmustNotClaim100PercentBusinessParity: true
- 所以不能对用户说“整个 OFBiz 前端已经完全重构完并 100% 业务验收通过”。
当前准确表述应该是:
- 结构性前端重构覆盖已大幅完成。
/modern/app/现代 ERP 管理后台入口已经可运行。- 路由 / action 覆盖检查为 0 missing。
- 核心构建、产品化文案、浏览器 runtime、部分截图和批量结构 e2e 已通过。
- 深度业务等价验收仍未完成,仍需继续推进。
2026-06-10 重大进展:后端测绘 + 专业级外壳重构(已完成并验证)
用户在本次会话明确两项决策:
- 旧前端:立即物理删除旧 OFBiz UI(已知代价:冻结 1721 页、之后无法再生成 inventory)。
- 重构:外壳 + 逐域深度精修一起做(最彻底)。
已完成(task 1 + task 2):
-
后端全面测绘 →
/Users/qiu/Desktop/ERP/ofbiz-framework/BACKEND.md(690 行,19 个组件,已对真实仓库校验:1772 viewRoute / 7935 action / 3848 service / 1208 entity)。这是前端编码所对契约 + 删除边界的权威文档,删除/逐域工作前先读它。 -
专业级外壳与导航重构(替换"挤在一页、左侧纯文本链接堆叠、手写 hash 路由"):
- 引入 vue-router 4(hash history),路由集中在
src/router/index.ts,与既有#/...链接完全兼容。 src/App.vue改为薄壳:登录门禁 +provide共享态(src/appContext.ts的 SessionKey/NavigationKey/InventoryKey)+<ErpAppShell><RouterView/></ErpAppShell>。ErpAppShell.vue重建为专业级左侧 el-menu 折叠分组树:核心业务 / 渠道与扩展(由 moduleCatalog 驱动,模块=el-sub-menu,子项=landing+quickPages)+ 运营工作台 + 系统治理;顶栏=折叠开关+面包屑+搜索+新建+待办+账号;支持折叠。- 选中态用线性 left-bar(透明底,无圆角胶囊),符合用户审美与设计门禁。
- 类名
.modern-*→.erp-*;登录品牌文案统一为OFBiz ERP / 统一运营管理平台。 - 适配 3 个取数视图:DashboardView/BusinessPageView 改 inject,ModuleWorkspaceView 用路由 props。
- 引入 vue-router 4(hash history),路由集中在
-
验证套件已与新架构对齐(原套件深度耦合旧 shell;用一个工作流 + 自己手改完成):
- 已重写
verify-admin-runtime-policy.mjs(运行时 DOM 策略:新.erp-*选择器 + 侧边栏 active 断言)。 verify-admin-site.mjs/verify-admin-product.mjs经工作流重表达(路由断言改查router/index.ts+ 新增assertRouteMapsToView,意图未弱化)。verify-erp-visual-policy.mjs(线性导航 + 折叠 + 排除 display.ts 清洗器)、verify-admin-shell.mjs(新品牌文案)、capture/admin-runtime/preview(.modern-shell__main→.erp-shell__main等选择器)均已修。
- 已重写
验证结果(全绿):npm run build;7 个源码门禁全 PASS(admin-shell/admin-site/admin-product/modern-navigation/erp-visual-policy/browser-runtime-policy/erp-renderer-copy);截图运行时策略 41 个场景全过(19 业务域 admin + 全部 workspace + security/system-operations/extension + 7 个业务页 + portal-create)。
复跑命令(服务器未起时,用静态预览 + mock 兜底):
cd /Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/app
npm run build
nohup npx vite preview --port 4178 --host 127.0.0.1 >/tmp/erp-preview.log 2>&1 &
export CHROME_BIN="/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
export MODERN_UI_BASE_URL="http://127.0.0.1:4178/modern/app/" MODERN_UI_SCREENSHOT_ALLOW_MOCK_FALLBACK=1
npm run verify:screenshots # 不带 IDS=全部;login-door 在 mock 下不可用(需真实 OFBiz)
已知遗留(非外壳回归,留待后续)
- 截图场景
business-page-portal-pages(#/pages/myportal__FindPortalPage)内容文案未达断言(期望门户页面查询且不含插件应用)。属 myportal 域 内容/adapter 选择问题,渲染器/页面定义我未改动、portal-create 正常、其余 41 场景全过——是 Phase 2 逐域内容项,不是 shell 回归。 login-door截图场景在 mock 兜底下不可用(mock 强制 authenticated),需真实 OFBiz 验证。
仪表盘瘦身(已完成)
DashboardView 已从"卡片墙"重写为安静工作台:经营数据 KPI 条(克制数字、无大数字 hero、无填充)+ 两列聚焦布局(待办队列/最近记录 | 系统健康与权限/快速检索),删除了与侧边栏重复的"ERP 模块目录"大网格、彩色竖线行、大数字卡片。新增 scoped 类 erp-kpi/erp-row/erp-quick。保留全部必需 section 锚点,仅删 处理路径/当班入口/核心模块入口(已同步更新 verify-admin-runtime / capture / verify-preview / admin-site / admin-product 的对应断言)。源码 7 门禁 + admin-workbench 运行时策略全过。
重要环境注意
- 本项目在
~/Desktop下,受 macOS TCC 保护。若工具突然全部报Operation not permitted(连之前能读的文件也读不了),是 Claude 桌面版(/Applications/Claude.app,bundle com.anthropic.claudefordesktop)丢了"桌面文件夹/完全磁盘访问"权限,需在系统设置→隐私与安全性里重新授予并重启 App。tccutil reset在工具内无权限、改不了。
下一步(待办)
- Phase 2:基于 BACKEND.md 逐域深度精修 19 个业务域(字段/查询/按钮/提交/导出/上传/lookup/状态流转/权限),把 pendingBusinessParityPages 朝 0 推进。
- Phase 3:物理删除旧 OFBiz UI 表现层(先冻结 inventory 快照、严格保留 entity/service/Java/data 运行期后端、删后验证 OFBiz 启动 + modern-api 可达 + 前端 build)。
如继续推进后端 cutover 验证,可跑:
cd /Users/qiu/Desktop/ERP/ofbiz-framework
JAVA_HOME=/Users/qiu/Desktop/ERP/.jdks/jdk-17.0.19+10/Contents/Home ./gradlew --no-daemon test --rerun-tasks \
--tests org.apache.ofbiz.webapp.control.ControlFilterTests \
--tests org.apache.ofbiz.webapp.control.RequestHandlerTests \
--tests org.apache.ofbiz.modernapi.core.ModernApiAuthFilterTests
关于“删除旧前端”的当前判断
用户要求“把原来的前端全部删除”。
当前没有物理删除旧 OFBiz Widget / FreeMarker / controller XML,原因:
- 这些旧文件仍作为自动迁移清单、页面定义、菜单、表单、动作、service 映射的元数据来源。
- 直接删除会破坏当前迁移器和等价映射的来源。
当前更安全的技术路线:
- 旧 UI 不作为最终用户入口。
- 旧文件暂时保留为迁移元数据。
- 新前端功能等价验收全部通过后,再进入物理删除或只读归档阶段。
UI 方向沉淀
用户对 UI 的明确偏好:
- 不喜欢“待处理订单”那种左侧一条彩色竖线、中间大数字的卡片。
- 更喜欢安静底色、细边框、1px 分隔、颜色克制的后台 UI。
- 可以有大卡片 / 中卡片 / 小卡片三种尺寸,但风格应统一。
- 顶部菜单选中态不要圆角胶囊,底部 1px 线即可。
- 菜单组件、左侧菜单、顶部菜单、面包屑、表格、表单、弹窗、上传、状态、分页等都需要完整覆盖。
- 不要把所有组件塞在一页;应该拆成多页或业务路由。
- 每个组件 / pattern 应有展示示例和对应代码,最好像 tab 一样切换“示例 / 代码”。
需要继续推进的工作
建议下一步按优先级执行:
- 修复
verify:admin-runtime中旧文案断言。 - 重跑
npm run verify:admin-runtime。 - 重跑核心截图验收,例如
core-admin。 - 用浏览器直接打开
/modern/app/做当前 UI 视觉验收。 - 对高频核心业务域继续做深度业务等价:
- Order
- Product
- Accounting
- Party
- HumanRes
- Content
- Manufacturing
- WorkEffort
- WebTools
- Ecommerce
- WebPOS
- 把
pendingBusinessParityPages从 1721 持续降到 0。 - 每个业务页面验收字段、查询、按钮、提交、导出、上传、lookup、状态流转、权限。
- 最终才可以声明 100% 可验收。
给后续代理的注意事项
- 不要重复从零开始。
- 不要把 PCB 当成有效需求。
- 不要声称 100% 业务等价完成,除非新的验证报告明确显示 pending 为 0 且核心 e2e / 截图 / 浏览器验收通过。
- 不要为了满足“删除旧前端”而直接删掉 OFBiz 旧 XML / Widget / FreeMarker 元数据源。
- 继续工作时先看:
/Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/app/Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/app/scripts/Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/verification/Users/qiu/Desktop/ERP/DESIGN.md/Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/app/UI.md
- 完成任何声明前必须重新跑对应验证命令。