【开源】基于Vue+SpringBoot的免税店商城管理系统

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


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、系统设计
    • 2.1 功能模块设计
    • 2.2 研究方法
  • 三、系统展示
  • 四、核心代码
    • 4.1 查询免税种类
    • 4.2 查询物品档案
    • 4.3 新增顾客
    • 4.4 新增消费记录
    • 4.5 审核免税
  • 五、免责说明


一、摘要

1.1 项目介绍

基于JAVA+Vue+SpringBoot+MySQL的免税店商城管理系统,包含了顾客模块、免税物品模块、免税费率模块、购买登记模块和免税审核模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,免税店商城管理系统基于角色的访问控制,给免税管理员、免税工作人员使用,可将权限精确到按钮级别,您可以自定义角色并分配权限,系统适合设计精确的权限约束需求。

1.2 项目录屏

源码下载


二、系统设计

本项目是基于Vue和SpringBoot的免税店商城管理系统,是一个前后端分离的项目,是当下软件开发主流模式。

2.1 功能模块设计

在这里插入图片描述

该项目中包括三个角色,分别是免税店管理员、审核员、系统管理员。对于免税店管理员而言,免税店管理员主要负责对顾客信息和购买物品进行登记并上传到系统,以便审核员审核顾客信息。对于审核员而言,审核员负责发布免税最新比例在系统中,设置各类商品的免税比例,方便物品税率改变后物品价值计算,以及免税物品发货审核,经过审核之后的商品才会发货。对于系统管理员而言,系统管理员负责在审核员审核顾客不满足购买免税店商品条件之后的会员卡退费,以及对会员和审核员的登陆账号、角色、权限进行配置,还有维护数据库稳定。

登录方面,系统前端将账号、密码、验证码转化为 JSON 格式,使用 ajax 请求后端 API 接口,后端接口完成业务逻辑判断,再将登陆结果返回给前端,前端将根据返回结果判断接下来的页面跳转。登陆页面包含账号密码和手机号码两个选择来进行登录。输入账号、密码和验证码后点击登陆,即可登陆系统,此处账号密码不能为空,如果密码输入错误,系统将进行密码错误提示,不能登陆系统,如果验证码过期,则需要重新获取验证。登陆鉴权功能由后端完成。 此系统用于三类人群进行登陆、使用,分别是免税店管理员、系统管理员、审核员。界面方面块使用了 View UI 的 Table 组件,和 Form 组件作为搜索栏。添加弹窗使用了 View UI 的 Drawer 抽屉组件。确认弹窗使用了 View UI 的 Modal 组件。

2.2 研究方法

采用的研究方法主要是文献研究法、功能分析法、描述研究法。首先文献研究法是根据所研究的目的或课题,通过调查文献获取资料,从而全面地、正确地了解掌握免税店商城管理方面的相关知识。然后用描述研究法对于相关的技术进行进一步了解,最后通过功能分析法对要完成的设计进行功能模块具体分析,从而实现整个系统。

首先是进行文献分析。大量收集有关免税店商城管理系统的文献,进行研究。为后续的系统分析建立基础。

第二是系统分析。学习有关SpringBoot、Vue、MySQL等技术以及免税店商城管理系统相关的技术。然后对系统进行可行性和需求分析,包括对该系统操作、技术和管理员等方面的分析论证,以及对系统的登录、审核管理、顾客信息登记功能进行需求分析论证。

第三是系统设计。先对设计思想、目标和系统结构进行简单概述。然后对各角色的实现要求进行分析,最后根据以上功能涉及的数据库结构设计进行详细描述,展示该系统的全部功能。

最后是系统开发。对以上的分析进行逐步开发设计,搭建后台,实现框架后填充各个功能,并且不断完善不足之处。


三、系统展示

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


四、核心代码

4.1 查询免税种类

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询免税种类")
public Result<IPage<Insurance>> getByPage(@ModelAttribute Insurance insurance ,@ModelAttribute PageVo page){
    QueryWrapper<Insurance> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(insurance.getTitle())) {
        qw.like("title",insurance.getTitle());
    }
    if(!ZwzNullUtils.isNull(insurance.getContent())) {
        qw.like("content",insurance.getContent());
    }
    IPage<Insurance> data = iInsuranceService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<Insurance>>().setData(data);
}

4.2 查询物品档案

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询物品档案")
public Result<IPage<Operation>> getByPage(@ModelAttribute Operation operation ,@ModelAttribute PageVo page){
    QueryWrapper<Operation> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(operation.getTitle())) {
        qw.like("title",operation.getTitle());
    }
    if(!ZwzNullUtils.isNull(operation.getType())) {
        qw.like("type",operation.getType());
    }
    if(!ZwzNullUtils.isNull(operation.getDescribed())) {
        qw.like("described",operation.getDescribed());
    }
    IPage<Operation> data = iOperationService.page(PageUtil.initMpPage(page),qw);
    return new ResultUtil<IPage<Operation>>().setData(data);
}

4.3 新增顾客

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增顾客")
public Result<Roster> insert(Roster roster){
    Insurance insurance = iInsuranceService.getById(roster.getInsuranceId());
    if(insurance != null) {
        roster.setInsuranceName(insurance.getTitle());
    }
    iRosterService.saveOrUpdate(roster);
    return new ResultUtil<Roster>().setData(roster);
}

4.4 新增消费记录

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增消费记录")
public Result<SeeDoctor> insert(SeeDoctor seeDoctor){
    Roster roster = iRosterService.getById(seeDoctor.getUserId());
    if(roster == null) {
        return ResultUtil.error("顾客不存在");
    }
    seeDoctor.setUserName(roster.getName());
    seeDoctor.setDate(DateUtil.today());
    iSeeDoctorService.saveOrUpdate(seeDoctor);
    roster.setMoney(seeDoctor.getBalanceNew());
    iRosterService.saveOrUpdate(roster);
    // 生成审核单
    Examine examine = new Examine();
    examine.setUserId(roster.getId());
    examine.setUserName(roster.getName());
    examine.setExemptionId(roster.getInsuranceId());
    examine.setExemptionName(roster.getInsuranceName());
    examine.setMoney(seeDoctor.getPriceYou());
    examine.setStatus(0);
    examine.setMessage("");
    examine.setRemark("");
    iExamineService.saveOrUpdate(examine);
    return new ResultUtil<SeeDoctor>().setData(seeDoctor);
}

4.5 审核免税

@RequestMapping(value = "/audit", method = RequestMethod.POST)
@ApiOperation(value = "审核免税")
public Result<Object> audit(@RequestParam String id,@RequestParam String msg){
    Examine examine = iExamineService.getById(id);
    if(examine == null) {
        return ResultUtil.error("审核单不存在");
    }
    examine.setStatus(1);
    examine.setMessage(msg);
    iExamineService.saveOrUpdate(examine);
    return ResultUtil.success();
}

五、免责说明

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

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

UE4/UE5 修改/还原场景所有Actor的材质

使用蓝图方法&#xff1a; 1.修改场景所有Actor 材质&#xff1a; Wirframe&#xff1a;一个材质类 MatList&#xff1a;获取到的所有模型的全部材质 的列表 TempAllClass&#xff1a;场景中所有获取的 Actor 的列表 功能方法如下&#xff1a; 蓝图代码可复制在&#xff1a…

基于SpringBoot+Vue会员制医疗预约服务管理信息系统(Java毕业设计)

点击咨询源码 大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的…

TensorBoard使用和问题解决

一、什么是TensorBoard? TensorBoard 是一组用于数据可视化的工具&#xff0c;它包含在流行的开源机器学习库 Tensorflow 中。TensorBoard 的主要功能包括&#xff1a; 可视化模型的网络架构跟踪模型指标&#xff0c;如损失和准确性等检查机器学习工作流程中权重、偏差和其他…

ABAP - Function ALV 02 简单开发一个Function ALV

了解Function ALV&#xff1a; https://blog.csdn.net/HeathlX/article/details/134879766?spm1001.2014.3001.5501程序开发步骤&#xff1a;① TCODE:SE38创建程序 ② 编写程序 DATA gt_spfli TYPE TABLE OF spfli.** Layout 变量定义 (固定使用 直接粘贴复制即可) DATA gs…

我的acer电脑U盘装系统前BIOS设置及装系统过程中的操作

1、开机长按F2进入BIOS设置 2、使能F12 3、调整boot顺序&#xff0c;使USB启动的优先级最高 4、按F10保存退出 5、插入U盘开机&#xff0c;boot选择界面无需操作&#xff0c;等待几秒&#xff0c;默认进入U盘系统 由于既使能了F12&#xff0c;又将U盘的优先级进调整到了最高&…

springboot集成knife4j详细教程

使用原生的swagger作为接口文档&#xff0c;功能不够强大&#xff0c;并且默认的ui比较简陋&#xff0c;不符合大众审美。所以实际开发中推荐使用knife4j对swagger进行增强。knife4j的地址&#xff1a;https://gitee.com/xiaoym/knife4j 基本使用 想要使用knife4j非常简单&…

Android获取Wifi网关

公司有这样一个应用场景&#xff1a;有一台球机设备&#xff0c;是Android系统的&#xff0c;它不像手机&#xff0c;它没有触摸屏幕&#xff0c;所以我们对球机的操作很不方便&#xff0c;于是我们搞这样一个设置&#xff1a;点击球机电源键5次分享出一个热点&#xff0c;然后…

UnoCSS 原子化开发初体验

UnoCSS 是一个即时的原子化 CSS 引擎&#xff0c;旨在灵活和可扩展。核心是不拘一格的&#xff0c;所有的 CSS 工具类都是通过预设提供的。再也不用为了取一个 classname 类名而烦恼了。 一、UnoCSS 特点 完全可定制&#xff1a;无核心工具&#xff0c;所有功能都通过预设提供…

【Fastadmin】根据Fieldlist键值组件做一个等级配置的完整示例

目录 1.效果展示&#xff1a; ​编辑 2.建表&#xff1a; 3.html页面 4.controller控制器 5.js 6.model 1.效果展示&#xff1a; 2.建表&#xff1a; 表名&#xff1a;fa_xxfb_config /*Navicat Premium Data TransferSource Server : rootSource Server Type …

WPS Office JS宏实现批量处理Word中的标题和正文的样式

该篇讲解下word文档中的标题和正文批量修改样式&#xff0c;如下图&#xff1a; 前面一篇已讲解了WPS Office宏编辑器操作方法&#xff0c;这里不细讲了&#xff0c;如有不清楚可以查看该篇&#xff1a;https://blog.csdn.net/jiciqiang/article/details/134653657?spm1001.20…

制作蓝牙小车(一)

制作控制蓝牙小车app 想制作一个蓝牙小车&#xff0c;通过手机app程序操控小车运行&#xff0c;制作分2个部分&#xff08;app制作&#xff0c;蓝牙小车硬件以及程序制作&#xff09;&#xff0c;先完成第一个部分app制作&#xff0c;本次app是通过androidstudio软件来制作安卓…

私域爆款案例拆解-元气森林

一、背景调研 二、引流策略 三、私域运营策略

第十一章 React 封装自定义组件

一、专栏介绍 &#x1f30d;&#x1f30d; 欢迎加入本专栏&#xff01;本专栏将引领您快速上手React&#xff0c;让我们一起放弃放弃的念头&#xff0c;开始学习之旅吧&#xff01;我们将从搭建React项目开始&#xff0c;逐步深入讲解最核心的hooks&#xff0c;以及React路由、…

客户案例:EDLP在央国企邮件数据合规中的价值与优势

客户背景 某机械制造企业&#xff0c;作为动力设备领域的领军企业&#xff0c;专门从事动力设备的研发、制造与销售。凭借丰富的经验与卓越的技术实力&#xff0c;该企业致力于深度研究动力设备的核心技术&#xff0c;为客户提供高效且可靠的解决方案。 客户需求 作为企业健康…

4 向微服务架构转变

文章目录 小型单体系统为什么选择小型单体系统微服务与生俱来的问题小型单体系统适用于小团队拥抱重构 规划未来拆分的小型单体应用程序新需求和游戏化用户故事游戏化&#xff1a;积分、徽章和排行榜 转向微服务独立的工作流程水平可伸缩性细粒度的非功能需求其他优势劣势 架构…

【带头学C++】----- 九、类和对象 ---- 9.10 C++设计模式之单例模式设计

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️麻烦您点个关注&#xff0c;不迷路❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️ 目 录 9.10 C设计模式之单例模式设计 举例说明&#xff1a; 9.10 C设计模式之单例模式设计 看过我之前的文章的&#xff0c;简单讲解过C/Q…

微信小程序---页面导航

1.声明式导航 &#xff08;1&#xff09;跳转到tabBar &#xff08;2&#xff09;跳转到非tabBar 注意&#xff0c;这个open-type"navigate"可以省略 &#xff08;3&#xff09;后退式导航 注意&#xff0c;如果只是后退到上一个页面&#xff0c;可以省略delta属性…

C++指针常量与常量指针

指针常量 const int * ptr new int(10); // 1&#xff09;常量指针 指针指向一个常量即指向的值不可改变 指针常量是指这个指针是一个常量&#xff0c;即指针的指向(地址)不可改变&#xff0c;但是地址对应的值是可以改变的。 常量指针 int * const ptr2 new int(20); // …

遥感图像之多模态检索AMFMN(支持关键词、句子对图像的检索)论文阅读、环境搭建、模型测试、模型训练

一、论文阅读 1、摘要背景 遥感跨模态文本图像检索以其灵活的输入和高效的查询等优点受到了广泛的关注。然而&#xff0c;传统的方法忽略了遥感图像多尺度和目标冗余的特点&#xff0c;导致检索精度下降。为了解决遥感多模态检索任务中的多尺度稀缺性和目标冗余问题&#xff…

机器学习硬件十年:性能变迁与趋势

本文分析了机器学习硬件性能的最新趋势&#xff0c;重点关注不同GPU和加速器的计算性能、内存、互连带宽、性价比和能效等指标。这篇分析旨在提供关于ML硬件能力及其瓶颈的全面视图。本文作者来自调研机构Epoch&#xff0c;致力于研究AI发展轨迹与治理的关键问题和趋势。 &…