外观
d:/VOL源码 是 VOL Pro (vol.pro) 3.5.8 商业低代码/快速开发框架的完整源码(前端 web.vite,后端 api_sqlsugar,SQL 脚本 sqlserver/),自带的 ERP / MES / AI / dbtest 模块是框架官方示例(src/router/viewGird.js 末尾注释明确写着"Demo、MES、ERP 开头的都是示例菜单,可以任意删除"),不是甲方真实业务。默认数据库 SQL Server(appsettings.json 的 Connection.DBType=MsSql,连接串指向 101.132.125.215 的 vol_pro_main / vol_pro_service / vol_pro_test 三库)。
Why: 用户在这个框架上做二次开发。误把示例模块当成真实业务、或把自动生成的文件当成可随意手写的文件,是这块源码最容易踩的两个坑。
How to apply:
- 不要手写自动生成区:前端业务扩展写在
src/extension/**/*.jsx(由views/**/*.vue顶部import extend from "@/extension/..."引入),后端业务扩展写在Services/**/Partial/与Controllers/**/Partial/。生成器重新生成时只覆盖骨架,不动这两处。 - 路由是手写静态的:
src/router/viewGird.js(约 150 条),没有addRoute动态注册;左侧菜单由后端/api/getTreeMenu下发,靠path与前端路由匹配。 - 状态管理用 Vuex 4(
src/store/index.js),pinia 虽在依赖里但未启用。 - 跨域不走 vite 代理(
vite.config.ts里 proxy 全注释),靠后端 CORS;接口地址写死在src/api/http.js:开发http://localhost:9100/,生产https://proapi.volcore.xyz/;前端 dev 端口 9000。 - 审批按钮只看菜单权限,与 AuditStatus 列无关:工具栏「审核/反审」按钮来自
api/buttons.js静态模板 +base.getButtons权限过滤(store.permission里该菜单的 permission 数组含Audit/AntiAudit)。admin(Role_Id=1) 是 SuperAdmin,权限 =Sys_Menu.Auth全集;普通角色 = 角色在Sys_RoleAuth勾选的UserAuthArr(菜单 Auth 只是"可勾选项")。AuditStatus列影响的是审核弹窗/流程列(initAuditColumn),不是按钮。 - extension jsx 里改不了页面配置(会白屏):ViewGrid 的 setup 只 return
...props.extend.methods、detailMethods、dataConfig等,没有暴露editFormOptions/columns/editFormFields/searchFormOptions—— jsx 里this.editFormOptions是 undefined,onInit一动就 TypeError,onBeforeMount中断,initViewColumns/initDicKeys全不执行 → 整页空白。运行时改字段/列的正确姿势是在页面 vue 文件(views/**/**.vue,手写区)里用reactive(viewOptions())解构出的引用就地改(如 ERP_PurchaseIn.vue 的adjustMainOptions)。proxy 上只有detailOptions(来自 dataConfig)可用。 - 同名钩子的执行顺序(ViewGrid.vue onBeforeMount):
jsx.onInit → vue.onInit(props) → 框架初始化(initViewColumns/initBoxHeightWidth/initDicKeys) → jsx.onInited → vue.onInited;事件钩子(addBefore/updateBefore/modelOpenAfter)都是 proxy(jsx)先、props(vue)后。删主表字段必须晚于 vue.onInit 里对该字段的getFormOption访问,否则 undefined 赋值同样炸。 - 可直接用
Invoke-Sqlcmd改远程库(sqlcmd 也可用),连接串在appsettings.json;DDL 改动要同步追加存档到sqlserver/erp_slice_01_ddl.sql。 - 直接改库刷新不了后端菜单/权限缓存:
Sys_MenuService用进程内 static_menus+CacheContext版本号(key=inernalMenu,UseRedis=false 纯内存)。只有走菜单管理界面「保存」(Save会刷新版本号并清_menus)或重启后端才失效。改Sys_Menu.Auth后必须做其中之一,重新登录没用(登录只换 token,getTreeMenu 仍吐缓存)。 - 改动前先确认目标是框架内核(
VolPro.Core)还是业务模块(VolPro.ERP/Mes/AI/DbTest)——内核改动影响面远大于业务模块。