ENGINEERING · 架构复盘

我们怎么开发一套 ERP:
一套框架,200+ 行业复用

从单文件玻璃拟态前端,到 Node 原生后端 + SQLite 落盘,再到 4K 截图与 AI 语音解说——本文拆开 Y2Ksoft 开发 ERP 系统的完整框架与逻辑,并以「美容美发(丽人美发沙龙)」为例,看一套真实系统是怎么从这副骨架里长出来的。

Y2Ksoft 工程团队 · 2026-07 · 阅读约 12 分钟 · 适合:想自研行业系统的开发者 / 想理解我们交付物的客户

一、设计哲学:先把"能跑、能交付"钉死

我们做行业系统,第一条铁律是 零安装、零运维、开箱即用。中小客户没有 IT 团队,一套需要装数据库、配环境、起服务的系统在他们手里就是灾难。所以框架从第一天就围绕三件事设计:

01

单文件优先

前端能单 HTML 文件就单文件,双击即开,不依赖任何 CDN(图表全自绘)。

02

私有化部署

数据留在客户本地/自有服务器,不上大厂云。安全合规是甜蜜区,不是卖点。

03

生成即零 bug

同一套已验证骨架换配置,不每套重写;质量稳、速度快、可批量交付。

一句话:框架的目标不是"最优雅",而是"最稳、最快、每个行业都能直接交付"。精致化(行业算法、真实流程、联机后端)是叠加层,不是地基。

二、前端框架:玻璃拟态 + 通用 CRUD 引擎

所有单文件系统共享同一套前端骨架。它不依赖任何框架,纯原生 JS,核心是一组配置驱动的渲染逻辑。

2.1 视觉系统:Glassmorphism

统一深蓝/科技底 + 玻璃卡片 + 渐变光晕背景,全部用 CSS 变量管理主题色,换一套行业只需要改 :root 里的几个变量:

/* 主题变量——换行业只动这里 */
:root{
  --bg:#070b18; --p:#3a8bff; --v:#8b5cf6;
  --t:#19e3b1; --glass:rgba(255,255,255,.06);
  --line:rgba(255,255,255,.12);
}

2.2 单页结构(无路由库)

多个业务页用一组 .page 区块承载,JS 切换显隐,原生实现 SPA,不引任何路由库:

// 导航切换:点哪个模块,显示哪个 .page
function show(id){
  document.querySelectorAll('.page').forEach(p=>p.style.display='none');
  document.getElementById(id).style.display='block';
}

2.3 通用 CRUD 引擎:MODULES 配置驱动

这是框架的心脏。每个业务模块不是单独写页面,而是一段配置——字段、列、表单、校验都声明在 MODULES 里,一套渲染函数把它们变成表格、表单、增删改查:

const MODULES = {
  member: {
    title: '会员管理',
    fields: ['name','phone','level','balance'],
    columns: ['姓名','手机','等级','余额'],
    seed: [ {name:'李娜',phone:'138****',level:'金卡',balance:1200} ]
  },
  // 预约 / 收银 / 库存 / 营销 … 都是同样结构的配置
};
// 一套 renderTable(module) 即可渲染任意模块,新增模块 = 加一段配置
为什么关键:一套系统 8 个业务模块,前端代码几乎不重复。新增一个行业 = 复制骨架 + 改 MODULES + 改真实种子数据。这就是"流水线"能铺 200+ 行业的根本原因。

2.4 数据层:三种形态按需切换

形态 A

localStorage

纯前端单文件。数据存浏览器,零后端,适合演示/轻量。

形态 B

Node + JSON 文件

后端把数据落盘为 JSON 文件,重启不丢,部署最简单。

形态 C

SQLite(sql.js)

内存库 + 定时落盘,支持复杂联表查询,联机版首选。

2.5 图表:零 CDN 依赖的自绘 SVG/Canvas

驾驶舱里的折线、柱状、环形图全部用原生 createElementNS 手绘 SVG,不引 echarts。好处是单文件离线也能渲染,且体积小、零外部依赖风险。

2.6 组件库

KPI 卡片、玻璃数据表、状态徽章、模态框、Toast 提示、抽屉——一套封装好的组件,所有系统复用,保证视觉与交互一致。

三、后端框架(联机版):Node 原生 + SQLite 落盘

当客户需要多端联机、多人同时用,框架切换到后端形态。我们坚持零框架:用 Node 原生 http / Express 极薄封装,把复杂度压在业务里而不是依赖里。

3.1 路由按资源拆分 + 统一鉴权

// server.js 启动顺序固定:
loadDatabase()  // 读 .db 或建空库
seed()         // 幂等造数
app.use('/api/member', authMiddleware, memberRoutes)  // 整组加鉴权
app.use('/api/auth', authRoutes)                    // 登录组不加
listen(PORT)

3.2 数据库封装(最核心)

把 sql.js 底层 prepare/step/free 包成 .all()/.get()/.run(),并吞异常返回空,避免单条 SQL 报错拖垮整个请求。提供三个导出:

3.3 种子数据:幂等 + 真实台账

seed 用 CREATE TABLE IF NOT EXISTS + "有数据就 return" 的幂等开关,造的是贴近真实的业务台账(不是随机垃圾),让演示即刻可信。

3.4 实时:WebSocket 推送

需要实时看板(如传感器、排队叫号)时,Socket.IO 与 http 同端口,路由里用 req.app.get('io').emit(...) 推数据,前端订阅即更新。

3.5 安全与部署

🔐
JWT 鉴权登录发 token,受保护路由校验
🛡️
输入校验防 XSS / 注入,前端转义
☁️
腾讯云 Lighthousenginx 反代,单文件零安装
🔄
常驻/自启systemd 或 nohup 保活

四、框架的两档用法:铺量 vs 天花板

同一副骨架,用出两个层级:

流水线铺量(毛坯换皮)

骨架 + 换主题色 + 改 MODULES 配置,架构/背景/行业深度从简。适合快速覆盖大量行业、验证需求。

对标天花板(精化)

补齐架构分层 + 真实地方/行业背景叙事 + 深度业务逻辑 + 打磨 UI。天花板标杆是「沫阳乡村一体化系统」(38 子系统)。

经验:批量铺量时代已结束。新系统或升级,必须达"中坚以上/对标沫阳"水准,而非流水线换皮。

五、交付不止代码:把系统变成"能卖的成品"

框架最后一步是资产化——用 Playwright 出 4K 横屏/竖屏截图、录屏 + AI 语音解说,把粗糙能力包装成可展示、可上云的成品。这也是我们区别于"只会写代码的人"的地方。


六、实例拆解:美容美发(丽人美发沙龙)怎么搭

下面用「丽人美发沙龙管理系统」演示上面整套框架如何落地一套真实系统。它覆盖了沙龙从获客到经营的全链路。

6.1 业务域与痛点

美发沙龙真实痛点:会员耗卡靠本子记、技师排班冲突、提成算不清、库存(耗材/商品)混乱、老板看不到经营数据。系统要一口气兜住这八件事:

会员管理预约排期收银开单 POS 员工/技师服务项目库存进销存 营销活动数据驾驶舱

6.2 数据模型:12 张核心表

用框架的 MODULES 思路,先把业务抽象成实体。美容美发系统约 12 张主表:

实体关键字段说明
会员 member姓名/手机/等级/余额/积分储值、耗卡、复购的核心
员工 staff姓名/角色(技师·前台)/提成比排班与提成核算对象
服务项 service名称/价格/时长/耗卡数开单与耗卡依据
商品 product名称/进价/售价/库存零售与进销存
预约 appointment会员/技师/时间/状态排期与到店入口
订单 order会员/金额/类型(服务·商品)收银主表
订单明细 order_item服务/商品/数量/单价开单明细
耗卡记录 redeem会员/服务/次数疗程耗卡核销
库存 stock商品/数量/预警线耗材与商品库存
采购 purchase商品/数量/单价/供应商入库来源
营销活动 campaign类型/优惠/周期引流与复购
门店 store名称/连锁关系多店经营根

6.3 核心逻辑:自动联动链

美容美发系统值钱的地方,不是"能录数据",而是一笔业务触发一串自动联动。框架把这串逻辑写成状态机:

1
预约 会员选技师+时间 → 排班占用,冲突自动预警
2
到店开单 选服务/商品 → 生成 order + order_item
3
耗卡核销 疗程单自动扣减 redeem 次数,余额为 0 提醒续卡
4
库存扣减 商品/耗材出库 → stock 低于预警线标红
5
技师提成 按 staff.提成比 自动核算,月底一键导出
6
会员积分 消费累计积分→等级/权益变化→营销可触达
7
财务对账 订单/耗卡/提成汇聚驾驶舱,老板一眼看清
这就是"流程资产":写代码的抄不走"耗卡怎么核销""提成怎么算""排班冲突怎么判"。这些真实业务规则,才是行业 AI 时代最稀缺的燃料。

6.4 关键算法(框架里的"行业深度")

ALGO

排班冲突检测

同一技师时间区间重叠即标红,避免双预约。

ALGO

技师提成自动核算

服务单×提成比例 + 商品单×比例,月底聚合。

ALGO

疗程耗卡自动核销

按次扣减,余额预警触发续卡提醒。

ALGO

会员等级与积分

消费累计→等级权益→营销分层触达。

ALGO

库存预警

低于安全线标红,联动采购建议。

ALGO

经营驾驶舱

营收/客单/耗卡率/复购率聚合可视化。

6.5 前端 8 大模块(MODULES 直接撑起)

这 8 个页面,正是 2.3 节那套通用 CRUD 引擎 + 各自 MODULES 配置渲染出来的:运营驾驶舱、会员管理、预约排期、收银开单、员工技师、服务项目、库存进销存、营销与数据。驾驶舱含近 7 日趋势(折线)/ 业务分布(柱)/ 结构(环)三图,全部自绘 SVG。

6.6 技术栈与交付

8业务模块
12核心数据表
0外部依赖
1文件双击即开

七、结语:框架是底盘,流程资产是护城河

回头看——我们开发 ERP 的"框架"本身并不神秘:单文件前端 + 通用 CRUD 引擎 + Node/SQLite 后端 + 资产化交付。真正稀缺的是框架之上、每个行业里那些真实的业务规则与联动逻辑。美容美发只是 200+ 行业里的一个切片;同样的骨架,换一套 MODULES 配置和真实台账,就能长出短剧分账、中医馆连锁、低空巡检、农产品溯源……

当"写代码"被 AI 快速商品化,懂业务才是壁垒。框架让我们把 200+ 行业的流程资产,沉淀成可复用的燃料——这,才是 Y2Ksoft 真正的护城河。

想把你行业的流程,变成一套能跑的系统?

告诉我们你的业务痛点,我们用同一套框架,给你定制一套开箱即用的行业 ERP。

预约一次业务诊断 →