【开源】基于Vue.js的实验室耗材管理系统

news2025/5/18 18:15:04

在这里插入图片描述
文末获取源码,项目编号: S 081 。 \color{red}{文末获取源码,项目编号:S081。} 文末获取源码,项目编号:S081


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 耗材档案模块
    • 2.2 耗材入库模块
    • 2.3 耗材出库模块
    • 2.4 耗材申请模块
    • 2.5 耗材审核模块
  • 三、系统展示
  • 四、核心代码
    • 4.1 查询耗材品类
    • 4.2 查询资产出库清单
    • 4.3 资产出库
    • 4.4 查询入库单
    • 4.5 资产入库
  • 五、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的实验室耗材管理系统,包含了耗材档案模块、耗材入库模块、耗材出库模块、耗材申请模块、耗材审核模块和耗材图表模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,实验室耗材管理系统基于角色的访问控制,给管理员和耗材管理专员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏

源码下载


二、功能模块

2.1 耗材档案模块

实验室耗材管理系统的耗材档案模块是用来管理和维护实验室中所有耗材的信息的模块。它可以帮助实验室管理人员有效地记录和跟踪实验室中的耗材信息,包括耗材的名称、规格、型号、供应商、采购日期、有效期、存放位置等。

实验室管理人员可以通过耗材档案模块将新购买的耗材信息录入系统中,包括耗材的基本信息和相关属性。实验室管理人员可以根据耗材的各种属性进行查询,快速定位和查找需要的耗材信息。耗材档案模块可以记录耗材的采购日期、供应商信息以及入库数量等,帮助管理人员对耗材进行合理的入库管理。当实验室需要使用某种耗材时,管理人员可以通过耗材档案模块进行出库操作,记录出库数量和使用目的等信息。

耗材档案模块可以实时统计和更新实验室中各种耗材的库存情况,提醒管理人员及时进行补充采购。当某种耗材过期或损坏无法使用时,可以通过耗材档案模块进行报废管理,记录报废原因和处理方式等信息。通过耗材档案模块,实验室管理人员可以更加方便地管理和控制实验室中的耗材,提高耗材的利用率和管理效率。

2.2 耗材入库模块

实验室耗材管理系统的耗材入库模块是用来记录和管理实验室中新购买的耗材入库信息的模块。实验室管理人员可以通过耗材入库模块将新购买的耗材信息录入系统中。包括耗材的名称、规格、型号、供应商、采购日期、有效期等基本信息。录入耗材信息时,还可以添加附加属性,如物料编号、批次号、条形码等。在录入耗材信息的同时,管理人员需要填写入库数量。系统会自动计算并更新库存数量,方便管理人员实时掌握实验室中各种耗材的库存情况。

耗材入库模块通常也包含供应商管理功能,可以记录供应商的联系信息、合作情况和评价等。在入库时,管理人员可以选择已经建立的供应商,并关联相应的耗材采购信息。耗材入库模块一般会生成入库单,用于记录每次耗材入库的详细信息,包括入库日期、供应商、采购单号、入库人等。管理人员可以根据入库单进行查询和统计,方便日后追溯和审核。有些实验室可能需要对入库的耗材进行质检。耗材入库模块可以提供相应的功能,管理人员可以记录质检结果、质检人员和质检日期等信息,确保入库的耗材符合实验室的质量要求。通过耗材入库模块,实验室管理人员可以方便地记录和管理实验室中新购买的耗材信息,及时更新库存数量,提高耗材管理的效率和准确性。

2.3 耗材出库模块

实验室耗材管理系统的耗材出库模块是用来记录和管理实验室中耗材的出库信息的模块。实验室管理人员可以通过耗材出库模块根据耗材的名称、规格、型号等信息进行查询,快速定位需要出库的耗材。管理人员可以通过耗材出库模块进行耗材的出库操作。在出库时,需要填写出库数量以及使用目的等相关信息。同时,系统会自动更新库存数量,确保库存信息的准确性。耗材出库模块一般会生成出库单,记录每次耗材出库的详细信息,包括出库日期、出库人、领用单位等。这些信息可以用于后续的追溯和审核。

耗材出库模块可以记录每次耗材的使用记录,包括使用人、使用日期、使用目的等。这样可以方便实验室管理人员对耗材的使用情况进行统计和分析。在耗材出库模块中,可以设置库存预警功能。当某种耗材的库存数量低于预设阈值时,系统会自动生成提醒通知,以便管理人员及时进行补充采购。通过耗材出库模块,实验室管理人员可以方便地记录和管理实验室中耗材的出库信息,及时更新库存数量,提高耗材管理的效率和准确性。

2.4 耗材申请模块

实验室耗材管理系统的耗材申请模块是用来方便实验室人员提交耗材申请并进行审批流程的模块。实验室内的人员可以通过耗材申请模块提交耗材的申请。在申请时,需要填写所需耗材的名称、数量、用途等相关信息。耗材申请模块一般会设计审批流程,包括申请人、审批人、审批顺序等。申请人提交耗材申请后,相应的审批人会收到通知,进行审批操作。系统会记录每个审批环节的处理情况,以便后续查询和追溯。耗材申请模块会根据用户的权限设置不同的审批权限。只有具有相应权限的人员才能进行审批操作,确保审批过程的安全性和准确性。

耗材申请模块会记录每次耗材申请的详细信息,包括申请日期、申请人、审批状态等。管理人员可以通过查询功能查看和统计申请记录,方便管理和掌握实验室内的耗材使用情况。耗材申请模块会通过系统消息或邮件等方式通知相关人员的申请状态和审批结果,提高沟通效率和及时性。通过耗材申请模块,实验室内的人员可以方便地提交耗材申请并进行审批流程,提高申请的准确性和效率。同时,管理人员可以更好地掌握和管理实验室的耗材使用情况。

2.5 耗材审核模块

实验室耗材管理系统的耗材审核模块是该系统中的一个重要部分,用于对实验室耗材的采购申请进行审核和管理。实验室成员可以通过系统向耗材审核模块提交耗材采购申请,包括所需耗材的名称、规格、数量、用途等信息。申请提交后,会自动生成一个申请单。申请单会经过一定的审核流程,根据实验室的设定,可以包括多级审核。审核人员可以对申请单进行审核、审批以及驳回操作。审核人员可以查看申请单的详细信息,包括耗材的具体需求和用途。

系统会记录每一次审核的结果和审核人的意见,以便后续查询和审计。审核记录可在系统中进行查看和导出,方便实验室管理人员进行数据分析和监控。系统可以通过邮件、短信等方式向相关人员发送审核结果的通知,提醒实验室成员耗材采购申请的进展情况。审核通过的耗材采购申请可以自动更新实验室的耗材库存信息,方便实验室管理人员进行库存管理和统计。

通过耗材审核模块,实验室可以实现对耗材采购申请的规范化、集中化管理,提高审核效率,减少人工操作和错误,确保实验室耗材的合理使用和供应链管理的准确性。


三、系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、核心代码

4.1 查询耗材品类

@ApiOperation(value = "查询耗材品类")
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
public Result<IPage<AssetsType>> getByPage(@ModelAttribute AssetsType assetsType, @ModelAttribute PageVo page, @RequestParam(required = false) String natureType) {
    QueryWrapper<AssetsType> qw = new QueryWrapper<AssetsType>();
    if(StrUtil.isNotBlank(natureType)) {
        if(natureType.equals("1")){
            qw.eq("nature", "固定资产");
        }else{
            qw.eq("nature", "耗材");
        }
    }
    if(!ZwzNullUtils.isNull(assetsType.getNature())) {
        qw.eq("nature", assetsType.getNature());
    }
    if(!ZwzNullUtils.isNull(assetsType.getAssetName())) {
        qw.like("asset_name", assetsType.getAssetName());
    }
    return new ResultUtil<IPage<AssetsType>>().setData(iAssetsTypeService.page(PageUtil.initMpPage(page),qw));
}

4.2 查询资产出库清单

@ApiOperation(value = "查询资产出库清单")
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
public Result<IPage<WarehouseOut>> getByPage(@ModelAttribute WarehouseOut warehouseOut, @ModelAttribute PageVo page){
    QueryWrapper<WarehouseOut> qw = new QueryWrapper<WarehouseOut>();
    if(!ZwzNullUtils.isNull(warehouseOut.getNature())) {
        qw.eq("nature", warehouseOut.getNature());
    }
    if(!ZwzNullUtils.isNull(warehouseOut.getAssetName())) {
        qw.like("asset_name", warehouseOut.getAssetName());
    }
    if(!ZwzNullUtils.isNull(warehouseOut.getRecipients())) {
        qw.like("recipients", warehouseOut.getRecipients());
    }
    IPage<WarehouseOut> data = iWarehouseOutService.page(PageUtil.initMpPage(page),qw);
    for (WarehouseOut wh : data.getRecords()) {
        AssetsType assetsType = iAssetsTypeService.getById(wh.getAssetId());
        double existnumber = Double.parseDouble(assetsType.getExistingNumber()) + Double.parseDouble(wh.getNumber());
        wh.setExistNumber("" + existnumber);
    }
    return new ResultUtil<IPage<WarehouseOut>>().setData(data);
}

4.3 资产出库

@ApiOperation(value = "资产出库")
@RequestMapping(value = "/insertOrUpdate", method = RequestMethod.POST)
public Result<WarehouseOut> saveOrUpdate(WarehouseOut warehouseOut){
    WarehouseOut oldWarehouseOut = iWarehouseOutService.getById(warehouseOut.getId());
    double oldNumber = 0.0;
    if(oldWarehouseOut != null){
        oldNumber = Double.parseDouble(oldWarehouseOut.getNumber());
    }
    // outNumber 要出库的数量
    double outNumber = Double.parseDouble(warehouseOut.getNumber());
    AssetsType oldAssetsType = iAssetsTypeService.getById(warehouseOut.getAssetId());
    if(oldAssetsType != null){
        // newNumber 出库后还有的数量 = 仓库原本还有的数量 - 出库单的出库数量 + 原有出库单的出库数量
        Double newNumber = Double.parseDouble(oldAssetsType.getExistingNumber()) - outNumber + oldNumber;
        if(newNumber >= 0){
            oldAssetsType.setExistingNumber(newNumber + "");
            iAssetsTypeService.saveOrUpdate(oldAssetsType);
        }else{
            return ResultUtil.error("手慢啦!库存不足!");
        }
    }
    if(ZwzNullUtils.isNull(warehouseOut.getId())) {
        warehouseOut.setAuditStatus(0);
        warehouseOut.setAuditTime("");
    }
    if(iWarehouseOutService.saveOrUpdate(warehouseOut)){
        return new ResultUtil<WarehouseOut>().setData(warehouseOut);
    }
    return ResultUtil.error();
}

4.4 查询入库单

@ApiOperation(value = "查询资产入库清单")
@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
public Result<IPage<Warehousing>> getByPage(@ModelAttribute Warehousing warehousing, @ModelAttribute PageVo page){
    QueryWrapper<Warehousing> qw = new QueryWrapper<Warehousing>();
    if(!ZwzNullUtils.isNull(warehousing.getNature())) {
        qw.eq("nature", warehousing.getNature());
    }
    if(!ZwzNullUtils.isNull(warehousing.getAssetName())) {
        qw.like("asset_name", warehousing.getAssetName());
    }
    if(!ZwzNullUtils.isNull(warehousing.getInvoice())) {
        qw.like("invoice", warehousing.getInvoice());
    }
    return new ResultUtil<IPage<Warehousing>>().setData(iWarehousingService.page(PageUtil.initMpPage(page),qw));
}

4.5 资产入库

@ApiOperation(value = "资产入库")
@RequestMapping(value = "/insertOrUpdate", method = RequestMethod.POST)
public Result<Warehousing> insertOrUpdate(Warehousing warehousing){
    Warehousing oldWarehousing = iWarehousingService.getById(warehousing.getId());
    double oldNumber = 0.0;
    if(oldWarehousing != null){
        oldNumber = oldWarehousing.getNumber() == null ? 0.0 : Double.parseDouble(oldWarehousing.getNumber());
    }
    // 入库,更新库存
    AssetsType assetsType = iAssetsTypeServicel.getById(warehousing.getAssetId());
    if(assetsType != null){
        // number = 现在仓库总数量 + 该入库单现增加数量 - 该入库单原有增加数量
        double number = Double.parseDouble(assetsType.getNumber()) + Double.parseDouble(warehousing.getNumber()) - oldNumber;
        assetsType.setNumber(number + "");
        assetsType.setTotalPrice((Double.parseDouble(assetsType.getUnitPrice()) * number) + "");
        // existNumber = 现在仓库存在数量 + 该入库单现增加数量 - 该入库单原有增加数量
        double existNumber = Double.parseDouble(assetsType.getExistingNumber()) + Double.parseDouble(warehousing.getNumber()) - oldNumber;
        if(existNumber < 0)  {
            return ResultUtil.error("入库数量大于已出库数量!");
        }
        assetsType.setExistingNumber(existNumber + "");
        iAssetsTypeServicel.saveOrUpdate(assetsType);
    }
    if(iWarehousingService.saveOrUpdate(warehousing)){
        return new ResultUtil<Warehousing>().setData(warehousing);
    }
    return ResultUtil.error();
}

五、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1287717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

shiny的图片如何插入,为什么会裂开?

因为你没有把资源放在内部&#xff1a; Shiny学习(二) ||构建用户界面 - 简书d 当然也有例外比如&#xff1a; shiny-如何在 Shinydashboard R 中 dashboard 标题的中心显示图像&#xff1f; - 糯米PHP

羊大师提问鲜羊奶冷冻还好喝吗?

羊大师提问鲜羊奶冷冻还好喝吗&#xff1f; 在当今追求健康、养生的时代背景下&#xff0c;各种新奇的饮食趋势层出不穷。鲜羊奶冷冻成为了备受追捧的美食新潮流。不仅具备饮食的功能&#xff0c;更是一种享受。本文小编羊大师将从鲜羊奶冷冻的制作工艺、营养价值和市场前景等…

Doris 集成 ElasticSearch

Doris-On-ES将Doris的分布式查询规划能力和ES(Elasticsearch)的全文检索能力相结合,提供更完善的OLAP分析场景解决方案: (1)ES中的多index分布式Join查询 (2)Doris和ES中的表联合查询,更复杂的全文检索过滤 1 原理 (1)创建ES外表后,FE会请求建表指定的主机,获取所有…

Apache Doris 在某工商信息商业查询平台的湖仓一体建设实践

本文导读&#xff1a; 信息服务行业可以提供多样化、便捷、高效、安全的信息化服务&#xff0c;为个人及商业决策提供了重要支撑与参考。本文以某工商信息商业查询平台为例&#xff0c;介绍其从传统 Lambda 架构到基于 Doris Multi-Catalog 的湖仓一体架构演进历程。同时通过一…

打CTF比赛/HVV挖洞需要了解哪些知识?

参加CTF&#xff08;Capture The Flag&#xff09;比赛或参与漏洞赏金猎人&#xff08;HVV, HackerOne Vulnerability Hunter&#xff09;活动需要以下关键知识&#xff1a; 1. 网络和系统安全&#xff1a; 理解TCP/IP、DNS、HTTP等网络协议。 掌握操作系统安全&#x…

网上售房管理系统

摘 要 网上售房管理系统,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的库。而对于后者则要求应用程序功能完备,易使用等特点。 从而完成完善全面的房屋买卖管理功能&#xff0c;使网上售房管…

关于先更新再缓存这种缓存方案设计的思考

这两天正在做公司缓存方面的设计&#xff0c;然后就把自己的思考过程整理一下。 网上对于这块的内容讲解也非常的多&#xff0c;有些说的也都非常的在理&#xff0c;关于缓存一致性的方案也就那么几种&#xff0c;如&#xff1a;先更新、再删&#xff0c;先删、在更新&#xff…

Linux中的网络配置

本章主要介绍网络配置的方法 网络基础知识查看网络信息图形化界面修改通过配置文件修改 1.1 网络基础知识 一台主机需要配置必要的网络信息&#xff0c;才可以连接到互联网。需要的配置网络信息包括IP、 子网掩码、网关和 DNS 1.1.1 IP地址 在计算机中对IP的标记使用的是3…

JRT导出协议实现

之前实现了JRT的打印客户端实现&#xff0c;这次实现JRT的导出Excel的客户端实现&#xff0c;这样这套框架就成为完全体了。还是一样的设计&#xff0c;不面向具体业务编程&#xff0c;我喜欢面向协议编程&#xff0c;导出一样定义了一套协议。 协议约定&#xff1a; 然后就是…

openEuler操作系统安装

所需要的软件镜像 https://repo.openeuler.org/openEuler-20.03-LTS/ISO/x86_64/ 选择openEuler-20.03-LTS-everything-x86_64-dvd.iso 版本的最完整 如果硬盘空间小可选择openEuler-20.03-LTS-x86_64-dvd.iso 安装步骤 1 选择第一个 install openEuler 20.03-LTS 2 选择语…

鸿蒙Harmony开发初探

一、背景 9月25日华为秋季全场景新品发布会&#xff0c;余承东宣布鸿蒙HarmonyOS NEXT蓄势待发&#xff0c;不再支持安卓应用。网易有道、同程旅行、美团、国航、阿里等公司先后宣布启动鸿蒙原生应用开发工作。 二、鸿蒙Next介绍 HarmonyOS是一款面向万物互联&#xff0c;全…

mysql原理--InnoDB记录结构

1.InnoDB行格式 我们平时是以记录为单位来向表中插入数据的&#xff0c;这些记录在磁盘上的存放方式也被称为 行格式 或者 记录格式 。 设计 InnoDB 存储引擎的大叔们到现在为止设计了4种不同类型的 行格式 &#xff0c;分别是 Compact 、 Redundant 、Dynamic 和 Compressed 行…

罗技鼠标使用接收器和电脑重新配对

罗技鼠标使用接收器和电脑重新配对 文章目录 罗技鼠标使用接收器和电脑重新配对1\. 前言2\. 安装软件3\. 进行配对3.1. 取消之前的配对3.2. 重新配对3.3 配对完成 4\. 报错4.1. 重新配对时显示配对未成功 1. 前言 罗技的鼠标出厂的时候&#xff0c;默认的是将通道一设置为接收…

『亚马逊云科技产品测评』活动征文|基于亚马逊EC2云服务器部署Gogs服务

授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 亚马逊EC2云服务器&#xff08;Elastic Compute Cloud&#xff09;是亚马…

Redis穿透以及解决方法

Redis穿透是指当一个请求在缓存中和数据库都找不到对应的数据时&#xff0c;导致每次请求都要查询数据库&#xff0c;从而产生了大量的无效数据库查询&#xff0c;大量无效的数据库查询会导致数据库负载增加&#xff0c;降低数据库的性能和响应能力甚至宕机的风险。 这种情况通…

nodejs+vue+微信小程序+python+PHP天天网站书城管理系统的设计与实现-计算机毕业设计推荐

本项目主要分为前台模块与后台模块2个部分&#xff0c;详细描述如下&#xff1a;   &#xff08;1&#xff09;前台模块 首页: 首页可以起到导航的作用&#xff0c;用户想要了解网站 &#xff0c;网站首页为用户可以深入了解网站提供了一个平台&#xff0c;它就向一个“导游”…

【模型可解释性系列一】树模型-拿到特征重要度-打印关键因素

接下来一段时间内&#xff0c;会主要介绍下模型可解释性方向的一些常用方法。 模型可解释性&#xff1a;主要用来解释为什么这个样本的特征是这样的时候&#xff0c;模型结果是那样。面向老板汇报工作(尤其是不懂算法的老板)和业务方。 常用的树模型 xgboost、lightgbm这两个…

京东数据分析:2023年10月京东打印机行业品牌销售排行榜

鲸参谋监测的京东平台10月份打印机市场销售数据已出炉&#xff01; 10月份&#xff0c;打印机市场整体销售下滑。鲸参谋数据显示&#xff0c;今年10月份&#xff0c;京东平台打印机的销量将近60万&#xff0c;环比降低约2%&#xff0c;同比降低约5%&#xff1b;销售额为4.4亿&a…

Install4J安装界面中如何使用脚本找到依赖程序XShell的安装位置

前言 写了一个工具, 使用Install4j打包, 但因为需要用到XShell, 所以希望在安装界面能够提前让用户配置好XShell的安装位置, 所以对Install4j的安装界面需要自定义, 后期在程序中直接过去安装位置就可以正常使用. 调研 和git-bash不一样, 安装版的XShell没有在注册表里存储安…

通过keepalived+nginx实现 k8s apiserver节点高可用

一、环境准备 K8s 主机配置&#xff1a; 配置&#xff1a; 4Gib 内存/4vCPU/60G 硬盘 网络&#xff1a;机器相互可以通信 k8s 实验环境网络规划&#xff1a; podSubnet&#xff08;pod 网段&#xff09; 10.244.0.0/16 serviceSubnet&#xff08;service 网段&#xff09;: 1…