跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
TypeScriptNode.jsSaaSWeChat大前端

uniapp 多用户多仓库进销存管理系统设计与实现

介绍基于 uni-app 开发的进销存管理系统,涵盖采购与销售流程的状态管理、多仓库权限控制及库存原子操作。系统采用 Vuex 全局状态管理,结合 MongoDB 原子更新防止超卖,并利用 Redis 缓存加速鉴权。后端涉及 Node.js 中间件与 Java 事务注解,前端使用 uni-file-picker 导出数据。整体架构支持 H5 与 APP 打包,适合连锁场景二次开发。

禅心发布于 2026/3/29更新于 2026/6/447 浏览
uniapp 多用户多仓库进销存管理系统设计与实现

小程序进销存管理系统技术实现

系统支持采购单录入、审核、入库、退货等采购过程记录追踪,以及销售、出库、审核、退货等跟踪。支持产品出入库数据导出,并具备用户与仓库管理能力。

文章配图

采购流程状态管理

采购单状态配置如下:

// 采购单状态配置
const PURCHASE_STATUS = {
  DRAFT: {code: 0, name: '草稿'},
  AUDIT: {code: 1, name: '待审核'},
  STOCK_IN: {code: 2, name: '已入库'},
  RETURNED: {code: 3, name: '已退货'}
};

状态流转使用 Vuex 做全局管理,审核动作触发时会校验仓库权限。不同仓库管理员只能操作自己管辖的仓库,权限验证中间件逻辑如下:

// 仓库操作权限校验
export const warehouseAuth = (warehouseId) => {
  return async (ctx, next) => {
    const userWarehouses = ctx.state.user.warehouses;
    if (!userWarehouses.includes(warehouseId)) {
      throw new Error('无该仓库操作权限');
    }
    await next();
  };
};

销售模块库存扣减

销售模块最实用的是出库防呆设计。生成出库单时会实时校验库存,用 MongoDB 的原子操作避免超卖:

// 库存扣减原子操作
ProductSchema.methods.deductStock = function(num) {
  return this.updateOne({
    $inc: { stock: -num },
    $set: { updateTime: Date.now() }
  });
};

数据导出与多仓库设计

数据导出功能使用了 uni-file-picker 组件,导出 Excel 时注意处理时间格式:

<uni-file-picker limitType="[.xlsx]" @select="handleExport" />
// 处理时间戳转换
function formatDate(timestamp) {
  return new Date(timestamp).toISOString().split('T')[0];
}

多仓库实现的关键在数据库设计,每个库存记录都带 warehouseId 字段。调拨操作其实可以看作出库加入库的组合事务,记得加@Transactional 注解防止数据不一致。

文章配图

用户权限体系

用户体系用 RBAC 模型,权限树存在 Redis 里加速鉴权。创建用户时自动生成仓库白名单,这个关联关系在用户 - 仓库中间表里维护。

文章配图

状态机与性能优化

状态机设计较为复杂,特别是退货流程要和采购销售状态联动。后来用策略模式封装不同状态的操作,代码清爽不少。比如退货处理器基类:

abstract class ReturnHandler {
  abstract validate(order: Order): boolean;
  abstract execute(order: Order): Promise<void>;
}

性能优化上有个方案——给高频接口加了 redis 缓存,但库存相关的一律不走缓存。用装饰器实现还挺方便:

@Cacheable({ ttl: 60 })
async getProductList() {
  // 查询逻辑
}

项目架构中值得借鉴的是错误处理机制,用 uni-app 的全局拦截器统一处理:

// 请求拦截
uni.addInterceptor('request', {
  fail: (err) => {
    if (err.statusCode === 403) {
      uni.showToast({ title: '权限不足', icon: 'none' });
    }
  }
});

该系统业务流程闭环完整。二次开发时建议先理清状态流转图,改起来才不容易出错。仓库模块的树形结构可以套用现成组件,但注意深度别超过三级,手机端展示会变形。

文章配图

目录

  1. 小程序进销存管理系统技术实现
  2. 采购流程状态管理
  3. 销售模块库存扣减
  4. 数据导出与多仓库设计
  5. 用户权限体系
  6. 状态机与性能优化
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • OpenClaw 结合飞书 Agent 构建 AI 自主模拟炒股系统
  • Qwen3-VL WebUI 本地部署与核心功能实战指南
  • RocketMQ Java 生态消息中间件架构与实战
  • AI 产品经理转型需知的 9 个核心问题
  • 无人机智能 AI 巡检平台:全域感知、航线规划与三维建模
  • ToDesk、顺网云、青椒云云电脑 AIGC 性能实测与对比
  • Elasticsearch + Kibana 实战:安装部署与 C++ 客户端封装
  • 长亭 Xray Web 漏洞扫描器使用指南
  • 基于 MCP Server - Figma AI Bridge 实现 Figma 设计稿前端代码自动化
  • Ubuntu 24.04 下使用 Docker Compose 本地部署 Whisper 语音识别服务
  • C++ 实现 2026 新年烟花特效程序
  • MCP Java SDK 指南:构建 AI 驱动的企业级应用
  • llamafile 部署与使用指南
  • 程序员寻找国外远程工作的途径与准备指南
  • SRC 漏洞挖掘实战经验与技巧总结
  • ASP.NET 4.7 微服务化实践:Windows Docker 环境搭建
  • 美妆企业自建专属大模型:开源模型与训练方法汇总
  • Music Tag Web 基于 Docker 的部署与管理指南
  • 人工智能 AI 产品经理与传统产品经理的差异分析
  • openTCS WEB 接口实战:从基础调用到自定义指令开发

相关免费在线工具

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

  • JSON 压缩

    通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

  • JSON美化和格式化

    将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online