news 2026/9/25 3:18:57

IDURAR ERP CRM 功能全景:基于 MERN 技术栈的开源进销存与客户关系管理实践指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
IDURAR ERP CRM 功能全景:基于 MERN 技术栈的开源进销存与客户关系管理实践指南
  • 后端
  • 前端
  • 企业应用
  • CRM

【免费下载链接】idurar-erp-crm

Free Open Source ERP CRM Software Accounting Invoicing | Node.Js React

项目地址:https://gitcode.com/gh_mirrors/id/idurar-erp-crm
点击查看免费下载

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 提供了完整流程,与本文所述模块直接相关,简述如下:

  1. 克隆仓库并在backend目录配置.env,将DATABASE替换为真实 MongoDB URI;
  2. 进入backend执行npm install,随后运行npm run setup执行初始化(写入 setupConfig.json 中的默认配置键);
  3. 运行npm run dev启动后端(默认监听 Express 服务);
  4. 另开终端进入frontend,npm install后npm run dev启动前端,浏览器访问localhost:3000;
  5. 若前端启动遇到 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

项目地址:https://gitcode.com/gh_mirrors/id/idurar-erp-crm
点击查看免费下载
上一篇:告别仓库混乱:Ungit忽略规则让文件管理效率提升80%
下一篇:CANN/driver获取AI CPU信息API

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/25 3:15:26

基于Web的网上汽车租赁系统毕设全解析:从需求到部署全程

说实话,每年毕业季看到最多的选题就是“XX管理系统”,但“基于web的网上汽车租赁系统”这个题目在同类毕设里算是非常典型、也非常能体现完整度的方向。它不只是一个简单的增删改查网站,里面涉及的角色权限、订单流转、计费规则、车辆状态管理…

作者头像 李华
网站建设 2026/9/25 3:14:45

C++新手学习网站推荐:cppreference、learncpp、菜鸟教程与w3school对比

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华