小程序进销存管理系统多用户多仓库,uniapp源码可生成H5页面和APP,前后端全开源 功能 1、支持采购单录入、审核、入库、退货等采购过程中的记录追踪 2、支持销售、出库、销售审核、出库审核、退货等跟踪 3、支持产品出库、入库的数据导出 4、支持用户、仓库等管理

最近在折腾uniapp开发的小程序进销存系统,发现这玩意儿真是中小企业的福音。前后端全开源还能打包H5和APP,多用户多仓库的设计特别适合连锁店场景。今天带大家扒一扒核心功能的实现,顺手拆解几个关键代码段。

采购流程的状态管理挺有意思,看看这个采购单状态枚举:

// 采购单状态配置
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"
></uni-file-picker>

// 处理时间戳转换
function formatDate(timestamp) {
  return new Date(timestamp).toISOString().split('T')[0];
}

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

小程序进销存管理系统多用户多仓库,uniapp源码可生成H5页面和APP,前后端全开源 功能 1、支持采购单录入、审核、入库、退货等采购过程中的记录追踪 2、支持销售、出库、销售审核、出库审核、退货等跟踪 3、支持产品出库、入库的数据导出 4、支持用户、仓库等管理

用户体系用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' });
    }
  }
});

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

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐