Files
ERP/memory.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

19 KiB
Raw Permalink Blame History

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.vue9 种页面原型 fallback 渲染器)、src/oa/OaContactsPage.vue(通讯录)。路由 src/router/index.tsimport.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.vueErp*Workspace.vueErpDomainAdminView/ErpPageRenderer/ErpAdapterBlock/ErpCommerceSurfaceErpAppShell.vuemoduleCatalog.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.tsFormSchema 字段+网格行+明细子表 / 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/workbenchCAP)、#/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 结构包括:
    • ErpAppShell
    • ErpPageHeader
    • ErpPageRenderer
    • ErpAdapterBlock
    • 业务工作台页面
    • 菜单 / 导航 / 页面区 / 动作区
    • 表单、表格、状态、业务块等封装
  • 已经处理过部分动态文案泄漏问题:
    • 新增共享显示文本清洗工具:plugins/modern-ui/app/src/utils/display.ts
    • businessCapabilityText(values, fallback) 用于把动态 capability 转为产品可读文案。
    • Finance / Order / HumanRes 等 workspace 中直接暴露 block.source / block.capabilities 的风险已经被处理过一轮。
  • 已经修正过截图验证中 portal create 页面误判的问题。

路由和覆盖情况

已有覆盖验证结果显示:

  • legacyViewRoutes: 1772
  • uniquePageDefinitions: 1767
  • renderedPages: 1767
  • missingRoutes: 0
  • missingActions: 0
  • frontendRewriteCoverageGate: passed

含义:

  • 现代前端的结构性路由覆盖已经做到很大规模。
  • 旧页面到新页面定义的映射检查没有缺失路由。
  • action 映射检查没有缺失。

但需要特别注意:

  • 这不等于完整业务深度等价已经完成。
  • 当前仍有大量页面只是生成式 / 元数据式覆盖,还没有逐页完成深度业务验收。

已跑过的验证

/Users/qiu/Desktop/ERP/ofbiz-framework/plugins/modern-ui/app 下已经跑通过:

  • npm run build
  • npm run verify:admin-site
  • npm run verify:admin-product
  • npm run verify:erp-renderer-copy
  • npm run verify:browser-runtime-policy
  • npm run verify:coverage
  • npm run verify:business-e2e:batch
  • npm 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: 0
  • missingActions: 0
  • frontendReadyPages: 1767
  • runtimeSmokePassed: 22
  • runtimeSmokePassedWithLegacyUnavailable: 2
  • runtimeSmokeFailed: 0
  • fullBusinessParityVerified: false

当前没有完成的部分

必须诚实记录:

  • OFBiz 前端尚未达到“全部功能 100% 业务等价重构完成”。
  • 当前报告中仍有:
    • pendingBusinessParityPages: 1721
    • businessDepthParityGate: pending
    • mustNotClaim100PercentBusinessParity: true
  • 所以不能对用户说“整个 OFBiz 前端已经完全重构完并 100% 业务验收通过”。

当前准确表述应该是:

  • 结构性前端重构覆盖已大幅完成。
  • /modern/app/ 现代 ERP 管理后台入口已经可运行。
  • 路由 / action 覆盖检查为 0 missing。
  • 核心构建、产品化文案、浏览器 runtime、部分截图和批量结构 e2e 已通过。
  • 深度业务等价验收仍未完成,仍需继续推进。

2026-06-10 重大进展:后端测绘 + 专业级外壳重构(已完成并验证)

用户在本次会话明确两项决策:

  • 旧前端:立即物理删除旧 OFBiz UI(已知代价:冻结 1721 页、之后无法再生成 inventory)。
  • 重构:外壳 + 逐域深度精修一起做(最彻底)。

已完成(task 1 + task 2):

  1. 后端全面测绘/Users/qiu/Desktop/ERP/ofbiz-framework/BACKEND.md(690 行,19 个组件,已对真实仓库校验:1772 viewRoute / 7935 action / 3848 service / 1208 entity)。这是前端编码所对契约 + 删除边界的权威文档,删除/逐域工作前先读它。

  2. 专业级外壳与导航重构(替换"挤在一页、左侧纯文本链接堆叠、手写 hash 路由"):

    • 引入 vue-router 4hash 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 改 injectModuleWorkspaceView 用路由 props。
  3. 验证套件已与新架构对齐(原套件深度耦合旧 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 build7 个源码门禁全 PASSadmin-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.appbundle 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 一样切换“示例 / 代码”。

需要继续推进的工作

建议下一步按优先级执行:

  1. 修复 verify:admin-runtime 中旧文案断言。
  2. 重跑 npm run verify:admin-runtime
  3. 重跑核心截图验收,例如 core-admin
  4. 用浏览器直接打开 /modern/app/ 做当前 UI 视觉验收。
  5. 对高频核心业务域继续做深度业务等价:
    • Order
    • Product
    • Accounting
    • Party
    • HumanRes
    • Content
    • Manufacturing
    • WorkEffort
    • WebTools
    • Ecommerce
    • WebPOS
  6. pendingBusinessParityPages 从 1721 持续降到 0。
  7. 每个业务页面验收字段、查询、按钮、提交、导出、上传、lookup、状态流转、权限。
  8. 最终才可以声明 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
  • 完成任何声明前必须重新跑对应验证命令。