【开源】基于Vue和SpringBoot的网上药店系统

news2025/1/20 16:35:04

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


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 数据中心模块
    • 2.2 药品类型模块
    • 2.3 药品档案模块
    • 2.4 药品订单模块
    • 2.5 药品收藏模块
    • 2.6 药品资讯模块
  • 三、系统设计
    • 3.1 用例设计
    • 3.2 数据库设计
      • 3.2.1 角色表
      • 3.2.2 药品表
      • 3.2.3 药品订单表
      • 3.2.4 药品收藏表
      • 3.2.5 药品留言表
  • 四、系统展示
  • 五、核心代码
    • 5.1 查询药品
    • 5.2 查询药品类型
    • 5.3 药品收藏
    • 5.4 药品加购
    • 5.5 新增药品留言
  • 六、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的网上药店系统,包含了药品类型模块、药品档案模块、药品收藏模块、药品订单模块、药品资讯模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,网上药店系统基于角色的访问控制,给药店管理员、消费者使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏

源码下载


二、功能模块

网上药店系统的功能性需求主要包含数据中心模块、药品类型模块、药品档案模块、药品订单模块、药品收藏模块和药品资讯模块这六大模块,系统是基于浏览器运行的web管理后端。

在这里插入图片描述

2.1 数据中心模块

数据中心模块包含了网上药店系统的系统基础配置,如登录用户的管理、运营公司组织架构的管理、用户菜单权限的管理、系统日志的管理、公用文件云盘的管理。

其中登录用户管理模块,由管理员负责运维工作,管理员可以对登录用户进行增加、删除、修改、查询操作。

组织架构,指的是高校的组织架构,该模块适用于管理这些组织架构的部门层级和教师的部门归属情况。

用户菜单权限管理模块,用于管理不同权限的用户,拥有哪些具体的菜单权限。

系统日志的管理,用于维护用户登入系统的记录,方便定位追踪用户的操作情况。

公用云盘管理模块,用于统一化维护网上药店系统中的图片,如合同签订文件、合同照片等等。

2.2 药品类型模块

不同的药品有着不同的类型,适合不同的患者使用,所以需要建立药品类型模块,药品类型的数据包括类型名称、类型状态、排序值、备注、创建人、创建时间、更新人、更新时间,管理员可以新增、删除、编辑和条件查询药品类型数据,用户可以查询管理员发布的药品类型数据。

2.3 药品档案模块

药品是网上药店系统的核心实体,需要建立药品档案模块对管理员发布的药品数据进行管理,药品的字段包括药品名称、药品类型、药品介绍、药品图片、创建人、创建时间、更新人、更新时间,管理员可以新增、删除、编辑和条件查询药品数据,用户可以查询管理员发布的药品数据。

2.4 药品订单模块

有了药品的数据之后,用户就可以对齐进行购买下单操作,药品订单的数据包括药品、下单状态、下单数量、付款状态、创建人、创建时间、更新人、更新时间,用户可以对药品进行加购、下单和付款操作,管理员可以对用户发起的药品订单进行条件查询。

2.5 药品收藏模块

为了更好的满足用户的个性化需求,网上药店系统支持用户对药品进行收藏,以便于快速的选择药品,药品收藏字段包括药品ID、药品名称、药品介绍、药品图片、收藏人、收藏时间、更新人、更新时间,用户可以对药品进行收藏、取消收藏操作,管理员可以查询用户的药品收藏数据。

2.6 药品资讯模块

为了更好的和用户去做交互,网上药店系统支持留言功能,留言的字段包括留言内容、留言人、留言时间、状态、备注、回复内容、回复时间、回复人,用户可以对药品发起留言,管理员可以对其进行回复,或进行删除留言操作。


三、系统设计

3.1 用例设计

在这里插入图片描述

3.2 数据库设计

3.2.1 角色表

在这里插入图片描述

3.2.2 药品表

在这里插入图片描述

3.2.3 药品订单表

在这里插入图片描述

3.2.4 药品收藏表

在这里插入图片描述

3.2.5 药品留言表

在这里插入图片描述


四、系统展示

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


五、核心代码

5.1 查询药品

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询药品")
public Result<IPage<DishVariety>> getByPage(@ModelAttribute DishVariety dishVariety ,@ModelAttribute PageVo page){
    QueryWrapper<DishVariety> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(dishVariety.getTitle())) {
        qw.like("title",dishVariety.getTitle());
    }
    if(!ZwzNullUtils.isNull(dishVariety.getType())) {
        qw.eq("type",dishVariety.getType());
    }
    if(!ZwzNullUtils.isNull(dishVariety.getContent())) {
        qw.like("content",dishVariety.getContent());
    }
    IPage<DishVariety> data = iDishVarietyService.page(PageUtil.initMpPage(page),qw);
    User currUser = securityUtil.getCurrUser();
    for (DishVariety vo : data.getRecords()) {
        QueryWrapper<DishCollect> collQw = new QueryWrapper<>();
        collQw.eq("collect_id",currUser.getId());
        collQw.eq("dish_id",vo.getId());
        vo.setCollectFlag(iDishCollectService.count(collQw));
        QueryWrapper<DishOrder> orderQw = new QueryWrapper<>();
        orderQw.eq("dish_id",vo.getId());
        orderQw.eq("status","已加购");
        orderQw.last("limit 1");
        DishOrder order = iDishOrderService.getOne(orderQw);
        vo.setBuyNumber(order == null ? BigDecimal.ZERO : order.getNumber());
    }
    return new ResultUtil<IPage<DishVariety>>().setData(data);
}

5.2 查询药品类型

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询药品类型")
public Result<IPage<DishType>> getByPage(@ModelAttribute DishType dishType ,@ModelAttribute PageVo page){
    QueryWrapper<DishType> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(dishType.getTitle())) {
        qw.like("title",dishType.getTitle());
    }
    if(!ZwzNullUtils.isNull(dishType.getStatus())) {
        qw.eq("status",dishType.getStatus());
    }
    IPage<DishType> data = iDishTypeService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<DishType>>().setData(data);
}

5.3 药品收藏

@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "新增收藏")
public Result<DishCollect> addOne(@RequestParam String id){
    DishVariety dish = iDishVarietyService.getById(id);
    if(dish == null) {
        return ResultUtil.error("药品不存在");
    }
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<DishCollect> qw = new QueryWrapper<>();
    qw.eq("dish_id",id);
    qw.eq("collect_id",currUser.getId());
    if(iDishCollectService.count(qw) > 0L) {
        return ResultUtil.success();
    }
    DishCollect dishCollect = new DishCollect();
    dishCollect.setDishId(dish.getId());
    dishCollect.setTitle(dish.getTitle());
    dishCollect.setType(dish.getType());
    dishCollect.setContent(dish.getContent());
    dishCollect.setImage(dish.getImage());
    dishCollect.setPrice(dish.getPrice());
    dishCollect.setCollectId(currUser.getId());
    dishCollect.setCollectName(currUser.getNickname());
    dishCollect.setCollectTime(DateUtil.now());
    iDishCollectService.saveOrUpdate(dishCollect);
    return ResultUtil.success();
}

5.4 药品加购

@RequestMapping(value = "/addOne", method = RequestMethod.GET)
@ApiOperation(value = "加购")
public Result<DishOrder> addOne(@RequestParam String id, @RequestParam BigDecimal number){
    DishVariety dish = iDishVarietyService.getById(id);
    if(dish == null) {
        return ResultUtil.error("药品不存在");
    }
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<DishOrder> qw = new QueryWrapper<>();
    qw.eq("dish_id",dish.getId());
    qw.eq("status","已加购");
    qw.eq("order_id",currUser.getId());
    qw.last("limit 1");
    DishOrder order = iDishOrderService.getOne(qw);
    if(order != null) {
        order.setNumber(order.getNumber().add(number));
        iDishOrderService.saveOrUpdate(order);
        return ResultUtil.success();
    }
    DishOrder o = new DishOrder();
    o.setDishId(dish.getId());
    o.setTitle(dish.getTitle());
    o.setType(dish.getType());
    o.setContent(dish.getContent());
    o.setImage(dish.getImage());
    o.setPrice(dish.getPrice());
    o.setStatus("已加购");
    o.setNumber(number);
    o.setOrderId(currUser.getId());
    o.setOrderName(currUser.getNickname());
    o.setOrderTime(DateUtil.now());
    iDishOrderService.saveOrUpdate(o);
    return ResultUtil.success();
}

5.5 新增药品留言

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增药品留言")
public Result<Message> insert(Message message){
    User currUser = securityUtil.getCurrUser();
    message.setUserId(currUser.getId());
    message.setUserName(currUser.getNickname());
    message.setUserTime(DateUtil.now());
    message.setReplyContent("");
    message.setReplyName("");
    message.setReplyTime("");
    message.setReplyId("");
    iMessageService.saveOrUpdate(message);
    return new ResultUtil<Message>().setData(message);
}

六、免责说明

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

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

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

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

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

相关文章

[C++]:8.C++ STL引入+string(介绍)

C STL引入string(介绍&#xff09; 一.STL引入&#xff1a;1.什么是STL2.什么是STL的版本&#xff1a;2-1&#xff1a;原始版本&#xff1a;2-2&#xff1a;P. J 版本&#xff1a;2-3&#xff1a;RW 版本&#xff1a;2-4&#xff1a;SGL版本&#xff1a; 3.STL 的六大组件&…

JS-项目实战-删除库存记录

1、fruit.js function $(name) {if (name) {//假设name是 #fruit_tblif (name.startsWith("#")) {name name.substring(1); //fruit_tblreturn document.getElementById(name);}} }//当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取…

YOLOv8-Seg改进: 捕捉空间上的局部关系和全局关系的CoordAttention注意力 | 分割注意力系列篇

🚀🚀🚀本文改进:CoordAttention注意力,引入到YOLOv8-seg,CoordAttention在计算注意力时,不仅会考虑输入的特征信息,还会考虑每个像素点的位置信息,从而更好地捕捉空间上的局部关系和全局关系。 🚀🚀🚀Context Aggregation小目标分割&复杂场景首选,实现…

Python winreg将cmd/PowerShell(管理员)添加到右键菜单

效果 1. 脚本 用管理员权限运行&#xff0c;重复执行会起到覆盖效果&#xff08;根据sub_key&#xff09;。 icon自己设置。text可以自定义。sub_key可以改但不推荐&#xff08;避免改成和系统已有项冲突的&#xff09;。command不要改。 from winreg import *registry r&q…

前端转行可以做什么

前端开发者通常拥有很好的技术背景和解决问题的能力&#xff0c;所以有很多可能的职业选择。以下是一些可能的选择&#xff1a; 全栈开发&#xff1a;这是一个非常热门的职位&#xff0c;需要能够处理前端和后端工作。使用多种编程语言和技术来构建从数据库到用户界面的整个应…

ps5计时计费软件安装教程,佳易王电玩店计时收费系统

ps5计时计费软件安装教程&#xff0c;佳易王电玩店计时收费系统 一、佳易王电玩PS5游戏厅计时计费软件部分功能简介&#xff1a; 1、计时计费功能 &#xff1a;开台时间和所用的时长直观显示&#xff0c;每3秒即可刷新一次时间。 2、销售商品功能 &#xff1a;商品可以绑定桌…

【深度学习实验】网络优化与正则化(五):数据预处理详解——标准化、归一化、白化、去除异常值、处理缺失值

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、优化算法0. 导入必要的库1. 随机梯度下降SGD算法a. PyTorch中的SGD优化器b. 使用SGD优化器的前馈神经网络 2.随机梯度下降的改进方法a. 学习率调整b. 梯度估计修正 3. 梯度估计修正&#xff1a;动量法Momen…

ubuntu云服务器配置SFTP服务

目录 一、安装并运行SSH服务 1&#xff0c;安装ssh服务 2&#xff0c;运行ssh 3&#xff0c;查看ssh运行状态 二、创建SFTP用户并进行用户相关的配置 1&#xff0c;创建SFTP用户 2&#xff0c;限制用户只能使用 SFTP&#xff0c;并禁止 SSH 登录。打开/ect/ssh/sshd_conf…

一文看懂Spark中Cache和CheckPoint的区别

目录 循循渐进理解使用Cache或者PersistCheckPoint缓存和CheckPoint的区别 循循渐进理解 wc.txt数据 hello java spark hadoop flume kafka hbase kafka flume hadoop看下面代码会打印多少条-------------------------(RDD2) import org.apache.spark.rdd.RDD import org.ap…

这就是思维导图!全面分析思维导图的实际用途

思维导图是一种以图形方式呈现的思维工具&#xff0c;它以中心主题为核心&#xff0c;通过分支展开相关的子主题和想法。它可以帮助我们更好地组织和理解信息&#xff0c;提高学习、工作和生活的效率。 在信息爆炸的时代&#xff0c;有效地管理和利用大量的信息成为一个亟待解决…

Linux - Namespace

一、namespace 是什么&#xff1f; Linux namespaces 是对全局系统资源的一种封装隔离&#xff0c;使得处于不同 namespace 的进程拥有独立的全局系统资源&#xff0c;改变一个 namespace 中的系统资源只会影响当前 namespace 里的进程&#xff0c;对其他 namespace 中的进程没…

12-2- DCGAN -简单网络-卷积网络

功能 随机噪声→生成器→MINIST图像。 训练方法 1 判别器的训练,首先固定生成器参数不变,其次判别器应当将真实图像判别为1,生成图像判别为0 loss=loss(real_out, 1)+loss(fake_out, 0) 2 生成器的训练,首先固定判别器参数不变,其次判别器应当将生成图像判别为1 loss =…

如何避免在Flask中使用Response对象

在Flask框架中&#xff0c;Response对象的__bool__和__nonzero__方法被重载&#xff0c;以便返回一个表示HTTP响应状态是否为’OK’的布尔值。然而&#xff0c;这可能会导致一些预期之外的行为。 解决方案 对于上述问题&#xff0c;可以通过直接检查Response对象的ok属性来避…

在哪里可以制作一本精美的翻页产品册呢?

你是否曾经为了一张可滑动的画册而翻看了整个产品册&#xff1f;翻页产品册是一种数字化的画册形式&#xff0c;它可以在电脑、手机、平板等设备上进行浏览和阅读。相比传统的纸质画册&#xff0c;翻页产品册有着更多的优势和用途。那么&#xff0c;在哪里可以制作一本这种精美…

解决requests库中session.verify参数失效的问题

在使用requests库进行HTTP请求时&#xff0c;如果在环境变量中设置了’REQUESTS_CA_BUNDLE’&#xff0c;并且在session对象中设置了verify参数为False&#xff0c;那么API请求会使用环境变量中的值而不是session对象中的值。这是因为在requests库中&#xff0c;当session对象中…

(十一)Flask模板引擎jinja2

模板引擎Jinja2 一、简介及基本使用&#xff1a; Flask使用Jinja2作为默认的模板引擎。Jinja2是一个功能强大且易于使用的模板引擎&#xff0c;它允许我们在HTML中嵌入Python代码&#xff0c;并通过将模板和数据进行渲染来生成动态内容。 实战之在Flask中使用Jinja2模板引擎…

GDS 命令的使用 srvctl service TAF application continuity

文档中prim and stdy在同一台机器上&#xff0c;不同机器需要添加address list TAF ENABLED GLOBAL SERVICE in GDS ENVIRONMNET 12C. (Doc ID 2283193.1)​编辑To Bottom In this Document Goal Solution APPLIES TO: Oracle Database - Enterprise Edition - Version 12.1.…

操作系统(五)文件系统和I/O系统

文章目录 前言文件系统文件系统和文件文件描述符目录、文件别名和文件系统分层文件系统目录实现文件别名名字解析&#xff08;路径遍历&#xff09;文件系统挂载文件系统种类 虚拟文件系统文件缓存和打开文件打开文件 文件分配空闲空间管理和冗余磁盘阵列RAID空闲空间管理冗余磁…

小程序游戏、App游戏与H5游戏:三种不同的游戏开发与体验方式

在当今数字化的时代&#xff0c;游戏开发者面临着多种选择&#xff0c;以满足不同用户群体的需求。小程序游戏、App游戏和H5游戏是三种流行的游戏开发和发布方式&#xff0c;它们各自具有独特的特点和适用场景。 小程序游戏&#xff1a;轻巧便捷的社交体验 小程序游戏是近年来…

为什么都说学医的转行网络安全行业更容易些?

网络系统坏了&#xff0c;被入侵破坏了&#xff0c;找安全工程师防护修补。如果没有修好&#xff0c;我可以不给钱&#xff0c;再找一家能修好的。但是看病就不一样了&#xff0c;就算医生没有给我治好病&#xff0c;也照样要收医疗费。 这样的类比乍一听上去好像挺有道理&…