Vue.js+SpringBoot开发快递管理系统

news2025/2/26 20:03:39

在这里插入图片描述

目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、研究内容
    • 2.1 数据中心模块
    • 2.2 快递类型模块
    • 2.3 快递区域模块
    • 2.4 快递货架模块
    • 2.5 快递档案模块
  • 三、界面展示
    • 3.1 登录注册
    • 3.2 快递类型
    • 3.3 快递区域
    • 3.4 快递货架
    • 3.5 快递档案
    • 3.6 系统基础模块
  • 四、免责说明


一、摘要

1.1 项目介绍

快递管理系统包含的快递区域模块、快递货架模块、快递类型模块和快递档案模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,快递管理系统基于角色的访问控制,给快递管理员和快递工作人员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

  • 前端:Vue 2.7.10

  • 后端:Spring Boot 3.1.10

  • 数据库:MySQL 8.0.31

1.2 项目录屏


二、研究内容

本课题的目的就是旨在开发一个为高校师生提供快递支持的快递管理系统

快递管理系统主要采用了JAVA编程语言,采用了Vue的开发技术,使用MYSQL数据库来支撑系统的数据流动。

本文将最终完成快递管理系统设计与实现,并通过完备的功能测试和性能测试来验证该系统的质量。系统需要支持以下功能。

  • 快递包装类型管理,实现增加、删除、修改、条件查询、导入快递包装类型。
  • 快递管理,实现增加、删除、修改、条件查询、导入快递,支持上传快递图片。
  • 快递区域管理,如大型快递包装、小型快递包装等,实现增加、删除、修改、条件查询快递区域。
  • 快递货架管理,实现增加、删除、修改、条件查询快递货架。
  • 用户档案管理,实现对终端用户数据的维护。
  • 角色管理,采用基于角色的访问控制,对于快递管理员、仓管员、顾客分配不同的菜单权限。

拟解决的主要问题如下:

  1. 如何实现快递区域和快递的档案管理、快递回收记录存档;
  2. 系统如何应对用户的高并发访问,如何确保快递管理系统的安全性。

快递管理系统的功能性需求主要包含数据中心模块、快递包装类型模块、快递区域模块、快递货架模块、快递档案模块这五大模块,系统是基于浏览器运行的web管理后端,其中各个模块详细说明如下。

2.1 数据中心模块

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

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

组织架构,指的是运营公司的组织架构,该模块适用于管理这些组织架构的部门层级和员工的部门归属情况。

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

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

公用云盘管理模块,用于统一化维护快递管理系统中的图片,如快递单照片、快递区域照片等等。

2.2 快递类型模块

不同的快递有不同的快递类型,可以分为大快递、小快递、易碎快递、加急件快递等等,不同类型的快递有着不同的运输方式,所以需要建立快递类型模块,对快递类型数据进行维护。其中字段包括类型名称、状态、排序值、备注、创建人、创建时间、更新人、更新时间等,快递管理员可以新增、删除、修改、条件查询快递类型,用户查询管理员发布的快递类型。

2.3 快递区域模块

一定规模的快递公司,会有多个快递区域,每个仓库存放着不同区域的快递,比如A区域存放省内的快递,B区域存放省外的快递,所以需要建立快递区域模块,对快递的区域数据进行管理,快递区域信息包括区域名称、状态、排序值、备注、创建人、创建时间、更新人、更新时间等,快递管理员可以新增、删除、修改、条件查询快递区域,用户可以查询管理员发布的快递区域数据。

2.4 快递货架模块

快递货架模块是对快递的存放货架数据进行管理。快递货架的字段包括货架名称、所属区域、货架状态、备注、创建人、创建时间、更新人、更新时间等,快递管理员可以新增、删除、修改、条件查询快递货架,用户可以查询管理员发布的快递货架数据。

2.5 快递档案模块

快递是快递包装服务系统的核心业务,所以需要建立快递档案模块,快递的字段包括快递类型、所属货架、收件人、收件电话、收件地址、发件人、发件电话、发件地址,快递管理员可以新增、删除、修改、条件查询快递,用户可以查询管理员发布的快递数据,也可以新增快递数据。

在这里插入图片描述

三、界面展示

3.1 登录注册

在这里插入图片描述

<Form ref="usernameLoginForm" :model="form" :rules="usernameLoginFormRules" class="form">
    <FormItem prop="username" class="loginInput">
        <Row>
            <Input v-model="form.username" size="large" clearable placeholder="登录账号" autocomplete="off">
            <Icon class="iconfont icon-yonghu" slot="prefix" style="line-height:50px" />
            </Input>
        </Row>
    </FormItem>
    <FormItem prop="password">
        <Input style="height:50px;line-height:50px" type="password" v-model="form.password" size="large" placeholder="请输入登录密码" password autocomplete="off">
        <Icon class="iconfont icon-mima1" slot="prefix" style="line-height:50px" />
        </Input>
    </FormItem>
    <FormItem prop="imgCode">
        <Row type="flex" justify="space-between" style="align-items: center;overflow: hidden;">
            <Input v-model="form.imgCode" size="large" clearable placeholder="请输入验证码" :maxlength="10" class="input-verify" />
            <div class="code-image" style="position:relative;font-size:12px;">
                <Spin v-if="loadingCaptcha" fix></Spin>
                <img :src="captchaImg" @click="getCaptchaImg" alt="验证码加载失败" style="width:110px;cursor:pointer;display:block" />
            </div>
        </Row>
    </FormItem>
</Form>

在这里插入图片描述

在这里插入图片描述

3.2 快递类型

在这里插入图片描述

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

在这里插入图片描述

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增快递包装类型")
public Result<PackageType> insert(PackageType packageType){
    if(Objects.equals(0,packageType.getSortOrder().compareTo(BigDecimal.ZERO))) {
        packageType.setSortOrder(BigDecimal.valueOf(iPackageTypeService.count() + 1L));
    }
    iPackageTypeService.saveOrUpdate(packageType);
    return new ResultUtil<PackageType>().setData(packageType);
}

3.3 快递区域

在这里插入图片描述

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询快递区域")
public Result<IPage<ExpressArea>> getByPage(@ModelAttribute ExpressArea expressArea ,@ModelAttribute PageVo page){
    QueryWrapper<ExpressArea> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(expressArea.getTitle())) {
        qw.like("title",expressArea.getTitle());
    }
    if(!ZwzNullUtils.isNull(expressArea.getStatus())) {
        qw.like("status",expressArea.getStatus());
    }
    IPage<ExpressArea> data = iExpressAreaService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<ExpressArea>>().setData(data);
}

在这里插入图片描述

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增快递区域")
public Result<ExpressArea> insert(ExpressArea expressArea){
    if(Objects.equals(0,expressArea.getSortOrder().compareTo(BigDecimal.ZERO))) {
        expressArea.setSortOrder(BigDecimal.valueOf(iExpressAreaService.count() + 1L));
    }
    iExpressAreaService.saveOrUpdate(expressArea);
    return new ResultUtil<ExpressArea>().setData(expressArea);
}

3.4 快递货架

在这里插入图片描述

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询快递货架")
public Result<IPage<ExpressShelf>> getByPage(@ModelAttribute ExpressShelf expressShelf ,@ModelAttribute PageVo page){
    QueryWrapper<ExpressShelf> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(expressShelf.getAreaId())) {
        qw.eq("area_id",expressShelf.getAreaId());
    }
    if(!ZwzNullUtils.isNull(expressShelf.getTitle())) {
        qw.like("title",expressShelf.getTitle());
    }
    if(!ZwzNullUtils.isNull(expressShelf.getStatus())) {
        qw.eq("status",expressShelf.getStatus());
    }
    IPage<ExpressShelf> data = iExpressShelfService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<ExpressShelf>>().setData(data);
}

在这里插入图片描述

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增快递货架")
public Result<ExpressShelf> insert(ExpressShelf expressShelf){
    if(Objects.equals(0,expressShelf.getSortOrder().compareTo(BigDecimal.ZERO))) {
        expressShelf.setSortOrder(BigDecimal.valueOf(iExpressAreaService.count() + 1L));
    }
    ExpressArea area = iExpressAreaService.getById(expressShelf.getAreaId());
    if(area == null) {
        return ResultUtil.error("区域不存在");
    }
    expressShelf.setAreaName(area.getTitle());
    iExpressShelfService.saveOrUpdate(expressShelf);
    return new ResultUtil<ExpressShelf>().setData(expressShelf);
}

3.5 快递档案

在这里插入图片描述

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询快递")
public Result<IPage<Express>> getByPage(@ModelAttribute Express express ,@ModelAttribute PageVo page){
    QueryWrapper<Express> qw = new QueryWrapper<>();
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<User> userQw = new QueryWrapper<>();
    userQw.eq("id",currUser.getId());
    userQw.inSql("id","SELECT user_id FROM a_user_role WHERE del_flag = 0 AND (role_id = '496138616573952' OR role_id = '1635124217320181760')");
    if(iUserService.count(userQw) < 1L) {
        userQw.and(wrapper -> wrapper.eq("send_mobile", currUser.getMobile()).or().eq("receiving_mobile",currUser.getMobile()));
    }
    if(!ZwzNullUtils.isNull(express.getShelfId())) {
        qw.eq("shelf_id",express.getShelfId());
    }
    if(!ZwzNullUtils.isNull(express.getAreaId())) {
        qw.eq("area_id",express.getAreaId());
    }
    if(!ZwzNullUtils.isNull(express.getReceivingUser())) {
        qw.like("receiving_user",express.getReceivingUser());
    }
    if(!ZwzNullUtils.isNull(express.getSendUser())) {
        qw.like("send_user",express.getSendUser());
    }
    IPage<Express> data = iExpressService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<Express>>().setData(data);
}

在这里插入图片描述

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增快递")
public Result<Express> insert(Express express){
    ExpressShelf shelf = iExpressShelfService.getById(express.getShelfId());
    if(shelf == null) {
        return ResultUtil.error("货架不存在");
    }
    express.setShelfName(shelf.getTitle());
    express.setAreaId(shelf.getAreaId());
    express.setAreaName(shelf.getAreaName());
    iExpressService.saveOrUpdate(express);
    return new ResultUtil<Express>().setData(express);
}

3.6 系统基础模块

用户管理模块如下图所示。

在这里插入图片描述
文件管理模块如下图所示。

在这里插入图片描述
日志管理模块如下图所示。

在这里插入图片描述
个人中心模块如下图所示。

在这里插入图片描述


四、免责说明

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

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

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

在这里插入图片描述

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

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

相关文章

windows 连接 Ubuntu 失败 -- samba服务

1. windows10连接ubuntu的时候&#xff0c;提示不允许一个用户使用一个以上用户名与服务器或共享资源的多重连接&#xff0c;中断与此服务器或共享资源的所有连接&#xff0c;然后再试一次 2. 换一台同事的电脑却又可以连上&#xff0c;我之前一直能用的&#xff0c;隔一段时间…

【 C++ 】bitset位图的模拟实现

位图概念 曾经有这样一个面试题&#xff0c;如果给你40亿个不重复的无符号整数&#xff0c;没排过序。给一个无符号整数&#xff0c;如何快速判断一个数是否在这40亿个数中。【腾讯】方法如下&#xff1a; 遍历&#xff0c;时间复杂度O(N)。排序(O(NlogN))&#xff0c;利用二…

文献速递:深度学习--深度学习方法用于帕金森病的脑电图诊断

文献速递&#xff1a;深度学习–深度学习方法用于帕金森病的脑电图诊断 01 文献速递介绍 人类大脑在出生时含有最多的神经细胞&#xff0c;也称为神经元。这些神经细胞无法像我们身体的其他细胞那样自我修复。随着年龄的增长&#xff0c;神经元逐渐死亡&#xff0c;因此变得…

袁庭新ES系列12节 | Elasticsearch高级查询操作

前言 上篇文章讲了关于Elasticsearch的基本查询操作。接下来袁老师为大家带来Elasticsearch高级查询部分相关的内容。Elasticsearch是基于JSON提供完整的查询DSL&#xff08;Domain Specific Language&#xff1a;领域特定语言&#xff09;来定义查询。因此&#xff0c;我们有…

Python实现自动检测设备连通性并发送告警到企业微信

背景&#xff1a;门禁机器使用的WiFi连接&#xff0c;因为某些原因会不定期自动断开连接&#xff0c;需要人工及时干预&#xff0c;以免影响门禁数据同步&#xff0c;故写此脚本&#xff0c;定时检测门禁网络联通性。 #首次使用要安装tcping模块 pip install tcpingfrom tcpin…

幻兽帕鲁服务器哪家便宜?阿里云腾讯云京东云华为云对比

幻兽帕鲁服务器哪家便宜&#xff1f;阿里云腾讯云京东云华为云对比&#xff0c;阿里云更便宜&#xff0c;26元1个月。游戏服务器租用多少钱一年&#xff1f;1个月游戏服务器费用多少&#xff1f;阿里云游戏服务器26元1个月、腾讯云游戏服务器32元&#xff0c;华为云26元&#x…

Android WebView访问网页+自动播放视频+自动全屏+切换横屏

一、引言 近期&#xff0c;我发现电视家、火星直播等在线看电视直播的软件都已倒闭&#xff0c;而我奶奶也再无法通过这些平台看电视了。她已六十多岁&#xff0c;快七十岁啦。这些平台的倒下对我来说其实没有多大的影响&#xff0c;但是对于文化不多的她而言&#xff0c;生活中…

常见需求:CSS 实现弧形卡片的 3 种方式

公众号&#xff1a;程序员白特&#xff0c;欢迎一起交流学习~ 原文作者&#xff1a;前端侦探 在平时开发中&#xff0c;有时候会碰到下面这种“弧形”样式&#xff0c;主要分为“内凹”和“外凸”两种类型&#xff0c;如下 该如何实现呢&#xff1f;或者想一下&#xff0c;有哪…

用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细,万字详述)

目录 一、打包前置知识 1.1 什么是 exe 可执行文件&#xff1f; 1.2 为什么要将 Python 程序打包为 exe 可执行文件&#xff1f; 1.3 为什么 Python 程序不能直接运行呢&#xff1f; 1.4 我们用什么来打包 Python 文件呢&#xff1f; 1.5 打包有哪几种分类呢&#xff1f…

Spring-Cloud-Gateway集成Sentinel限流

1&#xff09;gateway添加sentinel相关依赖 <spring-cloud.version>2021.0.1</spring-cloud.version> <spring-cloud-alibaba.version>2021.0.1.0</spring-cloud-alibaba.version><dependencies><!--gateway--><dependency><gro…

多模态表征—CLIP及中文版Chinese-CLIP:理论讲解、代码微调与论文阅读

我之前一直在使用CLIP/Chinese-CLIP&#xff0c;但并未进行过系统的疏导。这次正好可以详细解释一下。相比于CLIP模型&#xff0c;Chinese-CLIP更适合我们的应用和微调&#xff0c;因为原始的CLIP模型只支持英文&#xff0c;对于我们的中文应用来说不够友好。Chinese-CLIP很好地…

为什么要智慧公厕?智慧公厕是做什么的

在现代城市信息化建设进程中&#xff0c;公共卫生设施的建设与管理一直备受关注。而随着科技的迅速发展&#xff0c;智慧公厕作为一种新型的信息化公共设施&#xff0c;正逐渐走进人们的视野。本文以智慧智慧源头厂家广州中期科技有限公司&#xff0c;大量精品案例现场实景&…

【重要公告】BSV区块链协会宣布将启动多项动态安全增强措施

​​发表时间&#xff1a;2024年2月16日 2024年2月16日&#xff0c;瑞士楚格 - BSV区块链协议的管理机构BSV区块链协会&#xff08;以下简称“BSV协会”&#xff09;宣布对其运营模式实施全新的安全架构&#xff0c;其中包括引入网络访问规则和数字资产找回协议&#xff0c;以及…

【非递归版】归并排序算法(2)

目录 MergeSortNonR归并排序 非递归&归并排序VS快速排序 整体思想 图解分析​ 代码实现 时间复杂度 归并排序在硬盘上的应用&#xff08;外排序&#xff09; MergeSortNonR归并排序 前面的快速排序的非递归实现&#xff0c;我们借助栈实现。这里我们能否也借助栈去…

浅谈Unity内存管理

浅谈Unity内存管理 前言 很早之前记录的Unity内存相关的知识点&#xff0c;在此补充到博客上来。有什么不对的地方欢迎指正探讨。 内存概念 虚拟内存&#xff08;Virtual Memory&#xff09; 众所周知&#xff0c;物理内存就是插在计算机主板内存槽上的实际物理内存。 虚拟…

SAP中分包后续调整应用实例二(调减)

之前己写过一篇介绍过分包后续调整功能MB04的基本应用。当时的场景是某个原材料由于各方面原因&#xff08;比如没有维护到BOM中&#xff09;&#xff0c;在委外加工模式成品收货后&#xff0c;并没有消耗或少消耗&#xff0c;这时可以用该事务功能来补充消耗。在生产报工中的M…

redis八股

文章目录 数据类型字符串实现使用场景 List 列表实现使用场景 Hash 哈希实现使用场景 Set 集合实现使用场景 ZSet 有序集合实现使用场景 BitMap实现使用场景 Stream使用场景pubsub为什么不能作为消息队列 数据结构机制SDS 简单动态字符串压缩列表哈希表整数集合跳表quicklistli…

CleanMyMac2024永久免费mac电脑版本安装包下载

CleanMyMac 4 for Mac&#xff1a;细致入微的功能介绍&#xff0c;CleanMyMac 4 for Mac作为一款系统清理和优化工具&#xff0c;提供了丰富而细致的功能&#xff0c;旨在满足Mac用户在不同场景下的清理和优化需求。以下是对CleanMyMac 4功能的更加细化介绍&#xff1a; CleanM…

苍穹外卖 -- day10- Spring Task- 订单状态定时处理- WebSocket- 来单提醒- 客户催单

苍穹外卖-day10 功能实现&#xff1a;订单状态定时处理、来单提醒和客户催单 订单状态定时处理&#xff1a; 来单提醒&#xff1a; 客户催单&#xff1a; 1. Spring Task 1.1 介绍 Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代…

CVE-2021–27065漏洞分析及复现

接着昨天的说 CVE-2021–27065 CVE-2021–27065是⼀个任意⽂件写⼊漏洞&#xff0c;它需要登陆的管理员账号权限才能触发。而CVE-2021–26855正好可以为我们提供了管理员账号权限。 登录管理员账号后,进入:服务器——>虚拟目录——>OAB 编辑OAB配置,在外部链接中写⼊s…