- 后端
- 前端
- 企业应用
- CRM
【免费下载链接】idurar-erp-crm
Free Open Source ERP CRM Software Accounting Invoicing | Node.Js React
IDURAR 是一款免费开源的 ERP(企业资源计划)与 CRM(客户关系管理)软件,定位涵盖会计记账、发票开具、报价管理与客户管理,其官方功能说明文档(features/hr_hr_besplatni_otvoreni_izvor_erp_crm_softver.md)从技术选型、用户管理、CRM、销售、采购、库存、财务、项目、报表与集成等多个维度描述了系统能力。本文以该功能文档为骨架,结合当前仓库的后端模型、认证中间件、路由与前端页面实现,逐项剖析每个功能模块在源码中的落地方式,帮助读者在部署前建立对系统能力边界与实现原理的完整认知。
技术栈与整体架构
功能文档明确指出,IDURAR 是基于 "MERN Stack" 构建的免费开源 ERP & CRM 应用:Node.js + React.js + Redux + Express.js + MongoDB + AntDesign (AntD)。这一声明与仓库实际内容完全吻合:
- 后端(backend/package.json)以 Express
^4.18.2提供 HTTP 服务,Mongoose^8.1.1作为 MongoDB ODM,同时引入jsonwebtoken(JWT 鉴权)、bcryptjs(密码哈希)、joi(请求参数校验)、multer(文件上传)、pug与html-pdf(模板渲染与 PDF 生成)、express-rate-limit(接口限流)等依赖; - 前端(frontend/package.json)采用 React
^18.3.1、Redux Toolkit^2.2.1、Ant Design^5.14.1(含@ant-design/pro-layout专业布局组件)、Vite^5.4.8构建,路由由react-router-dom管理; - 仓库根目录 README.md 进一步将其概括为 "基于高级 MERN 栈(Node.js / Express.js / MongoDb / React.js)+ Ant Design (AntD) + Redux",并明确了核心业务域:发票管理(Invoice)、付款管理(Payment)、报价管理(Quote)与客户管理(Customer)。
在部署层面,后端入口为src/server.js,启动与维护脚本定义在 backend/package.json 的scripts字段中,包括start(生产启动)、dev(nodemon 热重载)、setup(初始化设置)、reset(重置数据)等命令,具体安装步骤可参照 INSTALLATION-INSTRUCTIONS.md。
用户管理:认证、授权与账号生命周期
功能文档描述了用户管理模块的三项核心能力:管理员创建/编辑/删除用户账号、基于角色的权限访问控制、以及保障安全访问的认证与授权机制。仓库中的实现证据分布在认证中间件与核心模型中:
- 用户模型 Admin.js 定义了
email(小写、必填)、name、surname、photo、role(枚举目前为owner)等字段,并带enabled与removed软删除/启停标记,enabled默认false,即账号创建后需显式启用方可登录; - 密码独立存放于
AdminPassword模型(AdminPassword.js),与Admin用户信息分离,配合bcryptjs做哈希存储,降低密码泄露风险; - 认证能力统一由工厂函数
createAuthMiddleware产出(createAuthMiddleware/index.js),对外暴露五个方法:isValidAuthToken(令牌校验)、login(登录)、forgetPassword(忘记密码)、resetPassword(重置密码)、logout(登出); - 以登录流程为例(login.js):先经
joi校验邮箱格式与密码非空,再按邮箱查询用户、校验enabled状态,最后比对密码哈希完成认证,未启用账号会被明确拒绝并提示联系管理员。
从源码结构看,该模块以"用户 + 密码 + 会话令牌"的三层结构实现文档所述的认证与授权闭环,前端对应的登录、注册、重置密码表单位于 frontend/src/forms(如LoginForm.jsx、ForgetPasswordForm.jsx、ResetPasswordForm.jsx)。
CRM 客户关系管理:客户档案与联系管理
功能文档中 CRM 模块的目标包括:创建和管理潜在客户/现有客户联系人、跟踪销售机会、管理客户沟通历史、安排会议并发送提醒。当前仓库的落地核心是Client 客户模型:
- Client.js 定义字段
name(必填)、phone、country、address、email,并通过createdBy、assigned两个 ObjectId 引用关联到Admin用户,分别记录"创建人"与"归属/负责人",这为销售机会的认领与分配提供了数据基础; - 模型启用了
mongoose-autopopulate插件,查询客户时自动填充关联的管理员信息,减少业务代码中的手动populate调用; - 前端客户页面位于 frontend/src/pages/Customer(含 config.js 与 index.jsx),路由注册在 frontend/src/router/routes.jsx 的
/customer路径下,提供列表、新建、详情与编辑等 CRUD 交互。
销售管理:订单、发票、付款与收款跟踪
销售管理是文档中篇幅较重的模块:创建并管理销售订单并关联客户、跟踪库存可用性、生成发票并集成支付服务、提供监控与报表。仓库中以"发票(Invoice)— 付款(Payment)— 报价(Quote)"三驾马车实现销售闭环:
- 发票模型 Invoice.js 是销售数据的核心载体:必填字段包括
number(发票编号)、year、date、expiredDate、client(关联客户,autopopulate 自动填充)、currency;金额体系由subTotal(小计)、taxRate(税率)、taxTotal(税额)、total(总计)、discount(折扣)与credit(信用额度)构成;items子文档数组按itemName、description、quantity、price、total记录每行商品; - 付款状态由
paymentStatus枚举(unpaid/paid/partially)与isOverdue布尔标志刻画,payment数组通过 ObjectId 关联具体付款记录,status枚举(draft/pending/sent/refunded/cancelled/on hold)描述发票流转阶段; - 付款模型 Payment.js 记录
client、invoice、date、amount、currency、ref与description,每笔付款同时引用客户与发票,构成"发票应收 → 付款核销"的可追踪链路; - 后端路由 appApi.js 为每个业务实体(含 invoice、payment、quote、client)统一生成
create、read/:id、update/:id、delete/:id、search、list、listAll、filter、summary等 RESTful 端点,并针对invoice、quote、payment额外挂载mail(邮件发送)端点——这正是文档所述"生成发票"与业务通知能力的接口层体现; - 前端销售相关页面集中在 frontend/src/pages/Invoice(创建、读取、记录收款、更新)与 frontend/src/pages/Payment,表单实现位于 frontend/src/modules/InvoiceModule 与 frontend/src/modules/PaymentModule。
需要说明的是,文档中提到的"与第三方支付服务集成"在当前仓库中未发现对应的支付网关 SDK 实现,属于功能文档描绘的能力愿景,读者应以仓库实际提供的发票—付款核销能力为准。
采购管理:采购订单、供应商与入库
文档描述的采购模块包括:创建采购订单并指定数量与商品、维护供应商信息与关系、收货后更新库存、管理采购发票与供应商付款。需要指出的是,当前仓库的核心业务模型集中在客户、发票、报价与付款(见 README.md 的 Features 清单),并未包含独立的采购订单(Purchase Order)与供应商(Supplier)模型文件。
从源码结构可以推断,该模块在当前版本中属于文档定义的能力框架,尚未以独立模型落地。若需在现有架构上扩展采购能力,可参照appApi.js的统一路由模式与createCRUDController(createCRUDController)的通用 CRUD 工厂,新增PurchaseOrder、Supplier等模型后即可快速获得成套的增删改查与分页接口。
库存管理:库存追踪、低库存预警与条码
文档中的库存管理能力包括:库存水平跟踪与调整、低库存自动通知与补货采购单生成、条码扫描支持、商品分类/属性/定价管理。与采购模块类似,当前仓库并未提供独立的 Product/Inventory 模型,库存相关能力尚未以独立业务模块出现。
不过仓库中存在可供扩展的基础设施:backend/src/middlewares/inventory/generateUniqueNumber.js(generateUniqueNumber.js)提供了编号生成中间件,可用于发票号、订单号等业务编号的自动递增;设置系统(settings)支持以settingKey为中心的键值配置读写,可承载"低库存阈值"等业务参数的配置化。文档中的库存功能应视为规划中的能力域,实际使用请以仓库当前发布模块为准。
财务管理:总账、应收应付与财务报表
文档要求财务模块具备总账记录、应收/应付管理(含发票开具与付款跟踪)、财务报表(资产负债表、损益表)生成,以及会计软件集成。仓库中的落地证据集中在应收(Accounts Receivable)一侧:
- 发票模型(Invoice.js)的
paymentStatus、credit、discount、isOverdue字段,配合付款模型(Payment.js)的amount、invoice关联,共同支撑"开票 → 部分收款 → 结清/逾期"的应收跟踪; - 摘要统计能力由控制器提供:
invoiceController/summary.js与paymentController/summary.js(见 backend/src/controllers/appControllers)对外暴露summary接口,前端对应 frontend/src/modules/DashboardModule 的SummaryCard.jsx与RecentTable,构成文档所述"监控与报表"的基础形态; - 金额与日期处理统一收敛在后端 settings/useMoney.js 与 settings/useDate.js、前端 frontend/src/settings/useMoney.jsx 与 useDate.jsx,货币格式与日期格式由
MoneyFormatSettings、FinanceSettings等设置模块驱动(前端页面见 frontend/src/pages/Settings/FinanceSettings.jsx)。
总账(General Ledger)、应付(AP)与完整财务报表(资产负债表、损益表)在当前仓库中没有对应模型或接口文件,属于功能文档定义的能力范围;真实可用的财务能力以发票—付款的应收闭环与设置化金额格式为主。
项目管理:任务、进度与协作
文档中项目管理模块的能力包括项目创建与跟踪、任务分配与截止日期、资源分配与成本跟踪、文档共享与实时沟通等协作功能。当前仓库并未包含 Project/Task 模型或对应页面,该模块属于文档定义而未落地实现的能力域。
从工程角度看,若要在本仓库扩展项目管理,可复用 createCRUDController 工厂与 appApi.js 的统一路由注册机制——新增实体仅需在routesList中登记entity与controllerName,即可自动获得全套 CRUD 端点;前端侧 CrudModule 提供了基于配置的通用业务模块骨架。
报表与分析:摘要统计、看板与数据可视化
报表与分析模块在文档中强调:多维度业务报表、可定制 KPI 看板、自定义报表与数据可视化。仓库中该能力的实现集中在摘要(Summary)与看板(Dashboard)两层:
- 后端为每个业务实体自动注册
/${entity}/summary路由(appApi.js),控制器分别实现发票摘要(invoiceController/summary.js)、付款摘要(paymentController/summary.js)与客户摘要(clientController/summary.js),返回聚合统计结果; - 前端看板由 DashboardModule 组装:
SummaryCard.jsx渲染指标卡片、PreviewCard.jsx与CustomerPreviewCard.jsx展示汇总预览、RecentTable呈现最近业务记录,路由注册于/与/dashboard; - 设置模块(SettingModule)以
GeneralSettings、CompanySettings、FinanceSettings、MoneyFormatSettings等分组管理业务参数,设置后端读写由 settingController 提供listAll、listBySettingKey、readBySettingKey、updateBySettingKey、updateManySetting等接口,构成文档所述"定制化看板/报表"的配置基础。
集成与定制:设置系统、API 与邮件
文档要求支持第三方应用/API 集成、功能与外观定制、以及对外提供 API 或 Webhook 进行数据交换。仓库中的实现证据包括:
- 设置系统:
Setting模型(Setting.js)采用settingCategory + settingKey + settingValue + valueType + isPrivate + isCoreSetting的键值结构,settingValue为 Mixed 类型可存任意 JSON;初始化数据由 backend/src/setup/defaultSettings 目录下的 JSON 文件提供(如appSettings.json、companySettings.json、invoiceSettings.json、financeSettings.json等);安装期配置键定义于 setupConfig.json,包含DATABASE、JWT_SECRET、idurar_app_version、idurar_load_demo_data、idurar_maintenance_mode等初始化项——这对应文档"根据特定业务需求定制功能与外观"的基础设施; - 邮件能力:发票、付款、报价实体均注册
/${entity}/mail路由(appApi.js),后端邮件发送控制器位于 invoiceController/sendMail.js、paymentController/sendMail.js,邮件模板渲染在 backend/src/emailTemplate 与 backend/src/pdf(Pug 模板,含Invoice.pug、Quote.pug、Offer.pug、Payment.pug),PDF 下载由 downloadPdf.js 处理; - API 边界:公开路由、认证路由与下载路由分别定义于 backend/src/routes/coreRoutes(
coreApi.js、coreAuth.js、coreDownloadRouter.js、corePublicRouter.js),体现"内部 API / 公开 API"的层次划分,为后续第三方集成预留了清晰的接口边界。
易用界面:Ant Design 与响应式布局
文档要求基于 React.js 与 Ant Design 构建直观、响应式、用户友好的界面,并提供简洁导航、搜索与筛选功能,且在不同设备与屏幕尺寸下保持一致体验。仓库中的对应实现包括:
- 前端使用 Ant Design
^5.14.1与@ant-design/pro-layout(frontend/package.json),布局体系位于 frontend/src/layout(AuthLayout、CrudLayout、DashboardLayout、DefaultLayout、ErpLayout、ProfileLayout、SettingsLayout); - 导航容器 NavigationContainer.jsx 与页头 HeaderContainer.jsx 提供菜单与页头框架;
- 搜索与筛选能力由通用组件承载:
SearchItem、SelectAsync、AutoCompleteAsync、MultiStepSelectAsync、DataTable、Tag等组件位于 frontend/src/components,其中 DataTable.jsx 提供表格分页与筛选,TabsContent支持多标签页信息组织; - 响应式适配由 useResponsive.jsx 钩子驱动,样式体系(
auth.css、erp.css、layout.css、navigation.css、customAntd.css等)集中在 frontend/src/style/partials。
本地部署与初始化流程
功能文档虽未展开安装步骤,但仓库 INSTALLATION-INSTRUCTIONS.md 提供了完整流程,与本文所述模块直接相关,简述如下:
- 克隆仓库并在
backend目录配置.env,将DATABASE替换为真实 MongoDB URI; - 进入
backend执行npm install,随后运行npm run setup执行初始化(写入 setupConfig.json 中的默认配置键); - 运行
npm run dev启动后端(默认监听 Express 服务); - 另开终端进入
frontend,npm install后npm run dev启动前端,浏览器访问localhost:3000; - 若前端启动遇到 OpenSSL 报错(Node.js 17 兼容问题),可升级至 Node.js v20 或设置
NODE_OPTIONS=--openssl-legacy-provider后重试。
仓库后端版本声明于 backend/package.json(版本号 4.1.0,要求 Node20.9.0、npm10.2.4),前端版本同步为 4.1.0,部署时建议对齐上述运行时版本。
能力边界小结
综合功能文档与仓库源码,可将 IDURAR 当前实现能力归纳如下:
| 功能域(文档定义) | 仓库落地情况 | 关键证据 |
|---|---|---|
| 技术栈 | 完整落地 | MERN + AntD + Redux,见 backend/package.json、frontend/package.json |
| 用户管理 | 完整落地 | Admin/AdminPassword 模型 + 认证中间件(createAuthMiddleware) |
| CRM 客户管理 | 完整落地 | Client.js + Customer 页面 |
| 销售管理 | 完整落地 | Invoice/Payment/Quote 模型与 CRUD 路由(appApi.js) |
| 财务管理 | 部分落地(应收闭环) | Invoice 的paymentStatus/credit+ Payment 模型 |
| 报表分析 | 基础落地 | summary路由 + DashboardModule |
| 集成定制 | 基础设施就绪 | Setting 模型、设置控制器、邮件与 PDF 通道 |
| 采购 / 库存 / 项目管理 | 文档定义,仓库未见独立模型 | 可参照 CRUD 工厂扩展 |
对于文档中定义但尚未以独立模型落地的能力域(采购、库存、项目、总账与应付),读者应将其理解为系统的能力规划框架,并基于仓库提供的统一路由、通用 CRUD 控制器与设置系统按需扩展,避免产生"当前版本已内置完整采购/项目模块"的误判。
- 后端
- 前端
- 企业应用
- CRM
【免费下载链接】idurar-erp-crm
Free Open Source ERP CRM Software Accounting Invoicing | Node.Js React
相关推荐
RadonDB云原生MySQL数据库:从零开始构建无限扩展的分布式系统
RadonDB云原生MySQL数据库:从零开始构建无限扩展的分布式系统 RadonDB是一款开源的云原生MySQL数据库,专为构建全球化、可扩展的云服务而设计。
后端前端企业应用CRM深入解析Idurar开源ERP/CRM系统:基于MERN技术栈的企业管理解决方案
深入解析Idurar开源ERP/CRM系统:基于MERN技术栈的企业管理解决方案 项目概述 Idurar是一款基于"公平代码" Fair Code 原则的开源E
后端前端企业应用CRM如何在5分钟内开始使用BERT uncased L-12 H-256 A-4模型进行文本预测
如何在5分钟内开始使用BERT uncased L 12 H 256 A 4模型进行文本预测 BERT uncased L 12 H 256 A 4是一款轻量级
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考