新闻详情

新闻详情

首页 / 资讯中心 / 详情

IDURAR ERP CRM 项目实战指南:基于 MERN 栈与 Ant Design 的开源 ERP/CRM 系统部署与架构解析

发布时间:2026/9/25 5:56:36来源:尧图网络
IDURAR ERP CRM 项目实战指南:基于 MERN 栈与 Ant Design 的开源 ERP/CRM 系统部署与架构解析
后端前端企业应用CRM【免费下载链接】idurar-erp-crmFree Open Source ERP CRM Software Accounting Invoicing | Node.Js React项目地址https://gitcode.com/gh_mirrors/id/idurar-erp-crm点击查看免费下载IDURAR 是一款免费开源Fair-Code的 ERP / CRM 系统覆盖发票Invoice、报价Quote、付款Payment、客户Customer管理与基础会计能力基于 Advanced MERN 技术栈Node.js / Express.js / MongoDB / React.js构建前端采用 Ant DesignAntD与 Redux 生态。本篇指南以项目官方 README 为骨架结合 安装说明 与仓库源码系统讲解其技术架构、核心业务模块、从零到一的完整部署流程以及源码级的关键实现原理帮助你快速在本机跑通系统并理解其设计脉络。项目概览一个什么样的 ERP / CRMIDURAR 定位为Simple To Use简单易用的开源 ERP / CRM 软件官方将其描述为Open Source ERP / CRMInvoice / Quote / AccountingBased on Advanced Mern Stack (Node.js / Express.js / MongoDb / React.js) with Ant Design (AntD) and Redux。它并非传统意义上重的 ERP而是聚焦中小团队最常打交道的业务闭环Invoice Management—— 发票管理Payment Management—— 付款 / 收款管理Quote Management—— 报价单管理Customer Management—— 客户CRM 联系人管理Ant Design Framework (AntD)—— 基于蚂蚁设计体系的前端 UIMern StackNode.js / Express.js / MongoDb / React.js—— 前后端统一的 JavaScript 技术栈README 同时强调这是一个Fair-Code公平代码项目IDURAR is Open Fair-Code Source ERP / CRM (Invoice / Inventory / Accounting / HR)即在开放源码的同时保留商业化的合理边界。项目遵循 GNU Affero General Public License v3.0AGPL-3.0发布并明确说明允许免费用于个人或商业用途Yes You can use IDURAR for free for personal or Commercial use。仓库中的实体证据从仓库源码结构看后端业务模型与 README 描述的能力一一对应。业务实体appModels目录 backend/src/models/appModels 下包含三个核心模型Client.js—— 客户模型name、phone、country、address、email、assigned 等字段Invoice.js—— 发票模型编号、年份、明细 items、税率、金额、付款状态、recurring 周期、converted 来源等字段Payment.js—— 付款模型值得注意的一个设计后端路由并非手工逐个注册而是通过 backend/src/models/utils/index.js 用glob动态扫描appModels目录下所有模型文件自动生成routesList实体名 控制器名再在 appApi.js 中统一注册 RESTful 路由。这意味着新增一个业务模块只需新增模型文件并放置对应控制器路由会自动生成这是该项目约定优于配置思想的典型体现。技术架构前后端分离的 MERN 全栈后端Express Mongoose后端位于 backend 目录核心入口在 backend/src/server.js。从源码可见以下关键事实使用dotenv加载.env与.env.local两个环境文件require(dotenv).config({ path: .env })与.env.local通过mongoose.connect(process.env.DATABASE)连接 MongoDB启动时通过globSync(./src/models/**/*.js)自动加载所有 Mongoose 模型监听端口默认8888app.set(port, process.env.PORT || 8888)强制要求 Node.js 版本 ≥ 20源码中有一段版本检查逻辑低于 20 会直接process.exit()并提示Please upgrade your node.js version at least 20 or greater。在 backend/src/app.js 中可以看到后端中间件与路由的组织方式全局中间件cors允许跨域并携带凭证、cookieParser、express.json、express.urlencoded、compressiongzip 压缩路由挂载点/api认证路由 coreAuthRouter、/api需经过adminAuth.isValidAuthToken校验的核心 API 与 ERP 业务 API、/downloadPDF 下载、/public公共资源404 兜底与生产环境错误处理集中在 backend/src/handlers/errorHandlers.js。认证相关路由在 backend/src/routes/coreRoutes/coreAuth.js提供/login、/forgetpassword、/resetpassword、/logout四个接口登录后的业务 API 统一由adminAuth.isValidAuthToken中间件保护实现见 backend/src/controllers/coreControllers/adminAuth。前端React 18 AntD 5 Redux前端位于 frontend 目录。从 frontend/package.json 可见其依赖react^18.3.1、antd^5.14.1、reduxjs/toolkit^2.2.1、react-redux^9.1.0、react-router-dom^6.22.0、vite^5.4.8并声明type: moduleESM。注意虽然 README 声称基于 CRA 脚手架但当前仓库前端已迁移至Vite构建见 frontend/vite.config.js这一点以仓库实际内容为准。前端 API 地址配置集中在 frontend/src/config/serverApiConfig.js开发模式下默认请求http://localhost:8888/api/后端 8888 端口生产模式或VITE_DEV_REMOTEremote时请求import.meta.env.VITE_BACKEND_SERVER api/登录令牌存储名为x-auth-token。Vite 开发服务器端口 3000将/api前缀请求代理到后端默认http://localhost:8888/代理目标可通过环境变量VITE_BACKEND_SERVER覆盖实现前端连远程后端的远程开发模式对应npm run dev:remote脚本。前端环境模板见 frontend/temp.env。前端路由表在 frontend/src/router/routes.jsx 中定义业务页面包括/invoice含/invoice/create、/invoice/read/:id、/invoice/update/:id、/invoice/pay/:id、/quote、/payment、/customer、/settings、/profile等与 README 声明的四大管理模块一一对应。后端依赖速览backend/package.json从 backend/package.json 可以还原后端技术选型依赖版本用途express^4.18.2Web 框架mongoose^8.1.1MongoDB ODMjsonwebtoken^9.0.2JWT 认证bcryptjs^2.4.3密码哈希joi^17.11.0参数校验见 invoiceController/schemaValidate.jsexpress-rate-limit^7.1.5接口限流html-pdf / pug^3.0.1 / ^3.0.2发票/报价/付款 PDF 生成模板位于 backend/src/pdfmulter^1.4.4文件上传openai^4.27.0OpenAI 集成可选resend^2.0.0邮件发送node-cache^5.1.2缓存currency.js2.0.4金额计算见 backend/src/settings/useMoney.js其中 PDF 渲染采用Pug 模板引擎模板文件Invoice.pug、Quote.pug、Offer.pug、Payment.pug位于 backend/src/pdf下载路由见 backend/src/routes/coreRoutes/coreDownloadRouter.js下载处理器在 backend/src/handlers/downloadHandler/downloadPdf.js。从零部署9 步本地跑通 IDURARREADME 的 Getting started 章节给出了完整的 9 步安装流程详见 INSTALLATION-INSTRUCTIONS.md本节将每一步展开并结合仓库源码补充说明。Step 1克隆仓库git clone https://github.com/idurar/idurar-erp-crm.git cd idurar-erp-crmStep 2创建 MongoDB 账号与数据库集群前往 MongoDB 官网注册账号创建一个新的数据库 / Cluster并记录下Connect to your application URI连接字符串将连接串中的password替换为你自己的数据库密码将当前 IP 加入 MongoDB 的 IP 白名单IP 变更时需要重新添加。Step 3编辑环境变量文件在 backend 目录下有一个.env文件用于存放项目运行所需的环境变量。仓库中的 backend/.env 模板如下#DATABASE mongodb://localhost:27017 #RESEND_API your resend_api #OPENAI_API_KEY your open_ai api key JWT_SECRET your_private_jwt_secret_key NODE_ENV production OPENSSL_CONF/dev/null PUBLIC_SERVER_FILEhttp://localhost:8888/各变量的作用结合 backend/src/server.js 与 backend/src/setup/setupConfig.json 推断变量说明DATABASEMongoDB 连接 URI被mongoose.connect(process.env.DATABASE)使用必填JWT_SECRETJWT 签名密钥生产环境务必更换为强随机值NODE_ENV运行环境development / productionRESEND_APIResend 邮件服务的 API Key用于发送发票/报价邮件OPENAI_API_KEYOpenAI API Key可选功能PUBLIC_SERVER_FILE静态文件服务的公开地址前缀OPENSSL_CONF置为/dev/null规避部分 Node 版本 OpenSSL 兼容问题注server.js同时加载.env与.env.local后者可用于覆盖本地专属配置且不提交到版本库。Step 4更新 MongoDB URI在.env中找到以下行DATABASEyour-mongodb-uri将your-mongodb-uri替换为第 2 步中获得的真实连接字符串。若只是本地 MongoDB可参考模板使用mongodb://localhost:27017若需指定库名可追加数据库名例如mongodb://localhost:27017/idurar。Step 5安装后端依赖cd backend npm installnpm install会按照 backend/package.json 安装全部依赖。注意该文件engines字段声明了node: 20.9.0、npm: 10.2.4且server.js在启动时会检查 Node 主版本号低于 20 会直接退出请先确认环境版本。Step 6运行 Setup 脚本初始化npm run setup该命令对应node src/setup/setup.js是数据库初始化的关键步骤。阅读 backend/src/setup/setup.js 源码它实际完成四件事创建初始管理员账号生成默认管理员adminadmin.com用户名 IDURAR / 密码admin123通过newAdminPassword.generateHash(salt, admin123)进行加盐哈希写入Admin与AdminPassword两个集合写入默认设置通过globSync(./src/setup/defaultSettings/**/*.json)扫描 backend/src/setup/defaultSettings 下所有 JSON 设置文件含appSettings.json、companySettings.json、clientSettings.json、financeSettings.json、invoiceSettings.json、moneyFormatSettings.json、quoteSettings.json批量写入Setting集合创建默认税率插入Tax 0%taxValue: 0作为默认税种创建默认付款方式插入Default Payment描述为Default Payment Mode (Cash, Wire Transfer)。 Admin created : Done! Settings created : Done! Taxes created : Done! PaymentMode created : Done! Setup completed :Success!初始化完成后请牢记默认管理员账号密码adminadmin.com/admin123并建议登录后立即在个人设置中修改。Step 7启动后端服务器npm run dev该命令对应nodemon src/server.js --ignore public/热重载开发模式。启动成功后控制台会输出Express running → On PORT : 8888。如果想以常规方式运行无热重载可改用npm startnode src/server.js。生产部署则使用NODE_ENVproduction启动。Step 8安装前端依赖另开一个终端窗口cd frontend npm installStep 9启动前端服务器npm run dev对应vite命令。启动后浏览器访问http://localhost:3000即可看到登录页面使用第 6 步生成的管理员账号登录。常见问题OpenSSL 兼容错误安装说明特别强调若前端启动时遇到 OpenSSL 错误error:0308010C:digital envelope routines::unsupported原因是 Node.js 17 与部分 Webpack/OpenSSL 版本的兼容问题对应 Node.js 与 Webpack 的公开 issue。可尝试以下任一方案升级到 Node.js v20推荐本项目engines也要求 Node 20启用 legacy OpenSSL provider# Unix-likeLinux / macOS / Git bash export NODE_OPTIONS--openssl-legacy-provider # Windows CMD set NODE_OPTIONS--openssl-legacy-provider # Windows PowerShell $env:NODE_OPTIONS --openssl-legacy-provider设置后重新执行npm run dev。若仍有问题可参考 StackOverflow 上关于ERR_OSSL_EVP_UNSUPPORTED的社区讨论安装说明末尾给出了相关线索。此外仓库的 backend/.env 中也提供了OPENSSL_CONF/dev/null这一缓解手段。核心业务模块与数据模型发票Invoice模块从 backend/src/models/appModels/Invoice.js 可见发票模型的完整字段设计这是理解整个业务的核心编号体系numberyear双字段required: true配合 backend/src/middlewares/inventory/generateUniqueNumber.js 生成唯一编号体现按年度编号的会计惯例金额体系items明细数组itemName / description / quantity / price / totaltaxRate、subTotal、taxTotal、total、discount、credit金额计算工具见 backend/src/settings/useMoney.js基于 currency.js 保证精度状态机paymentStatus枚举unpaid / paid / partially未付/已付/部分付款status枚举draft / pending / sent / refunded / cancelled / on hold另有isOverdue是否逾期、approved是否审批布尔标志关联关系client客户autopopulate: true自动填充、payment付款记录数组、converted记录从 Quote/Offer 转换而来周期发票recurring枚举daily / weekly / monthly / annually / quarter附件files数组与pdf字段PDF 文件路径。发票的前端模块frontend/src/modules/InvoiceModule包含创建、表格、读取、更新、记录付款五个子模块后端对应控制器在 backend/src/controllers/appControllers/invoiceController含 create / read / update / remove / sendMail / summary / paginatedList / schemaValidate 等其中sendMail.js负责通过邮件把发票发送给客户。报价Quote模块报价单与发票共享几乎相同的业务骨架前端模块位于 frontend/src/modules/QuoteModule。特别之处在于业务路由 appApi.js 中为quote额外注册了/quote/convert/:id接口对应控制器中的convert方法用于将报价单一键转换为发票发票模型的converted字段正是为记录这一转换来源而设计enum: [quote, offer]。付款Payment模块付款模块用于记录发票的实际收款情况前端位于 frontend/src/modules/PaymentModule。发票模型中的payment数组与paymentStatusunpaid / paid / partially字段即由该模块联动更新形成发票 → 收款 → 状态的闭环。客户Customer模块客户模型 backend/src/models/appModels/Client.js 字段简洁name必填、phone、country、address、email以及createdBy/assigned关联 Admin用于记录创建人与归属销售。前端页面位于 frontend/src/pages/Customer配置见 frontend/src/pages/Customer/config.js。动态路由机制新模块如何自动挂载前文提到业务路由是自动生成的这里展开其机制backend/src/models/utils/index.js 扫描appModels目录为每个模型生成{ entity, modelName, controllerName }三元组appApi.js 据此为每个实体统一注册 9 个 RESTful 接口POST /api/{entity}/create GET /api/{entity}/read/:id PATCH /api/{entity}/update/:id DELETE /api/{entity}/delete/:id GET /api/{entity}/search GET /api/{entity}/list GET /api/{entity}/listAll GET /api/{entity}/filter GET /api/{entity}/summary POST /api/{entity}/mail invoice / quote / payment 额外 GET /api/{entity}/convert/:id quote 额外统一路由的实现依赖 backend/src/controllers/middlewaresControllers/createCRUDController 提供的通用 CRUD 控制器create / read / update / remove / listAll / paginatedList / search / filter / summary这也是 IDURAR 保持代码简洁的关键架构设计。配置体系默认设置与设置 APIIDURAR 将系统配置以键值对形式持久化在 MongoDB 的Setting集合中由 backend/src/models/coreModels/Setting.js 建模。默认设置来自 backend/src/setup/defaultSettings 目录下的 7 个 JSON 文件按setupCategory分组appSettings.json—— 应用级设置日期格式默认DD/MM/YYYY、语言默认en_us、国家、时区、公司邮箱、行业等companySettings.json—— 公司信息用于发票/报价抬头clientSettings.json—— 客户模块默认项financeSettings.json—— 财务/会计相关设置invoiceSettings.json—— 发票默认编号规则等moneyFormatSettings.json—— 货币与金额显示格式quoteSettings.json—— 报价单默认项。后端设置 API 定义在 backend/src/routes/coreRoutes/coreApi.js 中除标准 CRUD 外还提供了按设置键操作的接口GET /api/setting/readBySettingKey/:settingKey—— 按键读取单个设置GET /api/setting/listBySettingKey—— 按键批量查询PATCH /api/setting/updateBySettingKey/:settingKey?—— 按键更新PATCH /api/setting/updateManySetting—— 批量更新PATCH /api/setting/upload/:settingKey?—— 上传设置如公司 Logo经singleStorageUpload中间件处理图片。对应控制器在 backend/src/controllers/coreControllers/settingController中间件实现加载、按键读写等在 backend/src/middlewares/settings。前端设置页面位于 frontend/src/pages/Settings涵盖 General / Company / Finance / Money Format / Company Logo 等子页面。认证与安全机制认证流程集中在 backend/src/controllers/coreControllers/adminAuth登录/api/login校验邮箱密码签发 JWT鉴权isValidAuthToken中间件保护所有业务 APIapp.js 中app.use(/api, adminAuth.isValidAuthToken, coreApiRouter)与erpApiRouter前端将令牌存储于x-auth-token见 frontend/src/config/serverApiConfig.js密码管理/api/forgetpassword忘记密码、/api/resetpassword重置密码、/api/logout登出密码存储通过 backend/src/models/coreModels/AdminPassword.js 使用 bcryptjs 加盐哈希setup 脚本中generateHash(salt, admin123)即其示例限流防护依赖express-rate-limit且密码哈希使用 bcryptjs 本身自带计算成本可抵御暴力破解错误兜底统一的 404 与生产错误处理在 backend/src/handlers/errorHandlers.js。二次开发与扩展方向基于仓库结构可以梳理出几条典型的扩展路径新增业务实体在backend/src/models/appModels/新增 Mongoose 模型文件 → 在backend/src/controllers/appControllers/新增对应控制器 → 路由由routesList自动生成前端再补充页面路由参考 frontend/src/router/routes.jsx即可定制发票/报价 PDF修改 backend/src/pdf 下的 Pug 模板Invoice.pug、Quote.pug、Offer.pug、Payment.pug接入邮件通知配置RESEND_API后使用sendMail控制器发送发票/报价/付款邮件远程开发设置VITE_DEV_REMOTEremote与VITE_BACKEND_SERVER指向远程后端实现前端直连远端 API对应npm run dev:remote脚本。结语IDURAR 以发票-报价-付款-客户为核心业务闭环用 MERN 全栈 Ant Design Redux 构建了一个结构清晰、易于扩展的开源 ERP / CRM 系统后端通过模型扫描自动生成 RESTful 路由前端按模块组织页面与状态管理设置体系全部数据库化并内置 PDF 生成、邮件发送、JWT 认证等企业级能力。按本文 9 步流程完成部署后你即可用adminadmin.com/admin123登录系统体验从创建客户、开报价、转发票到记录收款的完整业务链路并在此基础上按需二次开发。如果你希望了解更详细的贡献规范、维护者信息或面向 AI Agent 的结构化项目画像可分别查阅 CONTRIBUTING.md、MAINTAINERS.md 与 llms.txt。赞分享后端前端企业应用CRM【免费下载链接】idurar-erp-crmFree Open Source ERP CRM Software Accounting Invoicing | Node.Js React项目地址https://gitcode.com/gh_mirrors/id/idurar-erp-crm点击查看免费下载相关推荐Orca systemd 服务配置完整指南4步让 Orca 服务器开机自启与崩溃自动重启Orca systemd 服务配置完整指南4步让 Orca 服务器开机自启与崩溃自动重启 Orca 是一款并行 AI 编程 Agent 编排平台ADE将后端前端企业应用CRMMagentic轻松集成大型语言模型到Python代码中Magentic轻松集成大型语言模型到Python代码中 项目介绍 Magentic 是一个强大的 Python 库旨在简化将大型语言模型LLM集成到后端前端企业应用CRM围棋AI分析神器LizzieYzy从新手到高手的完整使用指南围棋AI分析神器LizzieYzy从新手到高手的完整使用指南 LizzieYzy是一款功能强大的围棋AI分析工具专为围棋爱好者提供专业级的棋局分析和学习支持后端前端企业应用CRM上一篇终极指南如何用FL Chart实现动态数据更新的实时监控系统下一篇4步掌握洛雪音乐音源从零到精通的全网音乐聚合解决方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

传统机器学习恶意网站检测实战:特征工程与模型训练全解析 2026/9/25 6:27:15

传统机器学习恶意网站检测实战:特征工程与模型训练全解析

简介:基于传统机器学习的恶意网站检测算法源码与项目说明,专门面向计算机、人工智能、大数据等相关专业正在做课程设计、期末大作业或毕业设计的学生。项目代码经过严格调试,下载解压后即可运行,适合具备一定Python与机器学习基础…

阅读更多 →
基于STM32的实验室消防预警系统:多传感器采集与联动控制 2026/9/25 6:27:15

基于STM32的实验室消防预警系统:多传感器采集与联动控制

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

阅读更多 →
华南X99主板错误码67本质:PCIe链路协商失败解析 2026/9/25 6:27:09

华南X99主板错误码67本质:PCIe链路协商失败解析

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

阅读更多 →
Windows免安装记事本:绕过AppContainer实现UTF-8中文稳定编辑 2026/9/25 6:27:09

Windows免安装记事本:绕过AppContainer实现UTF-8中文稳定编辑

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

阅读更多 →
香橙派5 Plus/Max Ubuntu 24.04中文环境配置与GPIO驱动LED实战 2026/9/25 6:27:03

香橙派5 Plus/Max Ubuntu 24.04中文环境配置与GPIO驱动LED实战

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

阅读更多 →
C语言经典100题刷题指南:从基础语法到综合项目实践 2026/9/25 6:27:03

C语言经典100题刷题指南:从基础语法到综合项目实践

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉