【開源】基于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. 必須了解使用本軟件的風險,博主不承諾提供一對一的技術支持、使用擔保,也不承擔任何因本軟件而產生的難以預料的問題的相關責任。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213855.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213855.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213855.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是圖片懶加載(image lazy loading)?它的作用是什么?

聚沙成塔每天進步一點點 ? 專欄簡介 前端入門之旅&#xff1a;探索Web開發的奇妙世界 歡迎來到前端入門之旅&#xff01;感興趣的可以訂閱本專欄哦&#xff01;這個專欄是為那些對Web開發感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發…

如何使用vue開發vscode插件

以下是一個簡單的示例&#xff0c;演示如何使用Vue和VSCode的Webview API來開發一個簡單的VSCode插件&#xff1a; 創建一個VSCode插件項目 首先&#xff0c;你需要創建一個VSCode插件項目。你可以使用VSCode的插件生成器來快速創建一個基本的項目結構。從VSCode的命令面板中運…

【Flutter】graphic圖表實現tooltip一段時間后自動隱藏

概述 graphic圖表中提供了自定義tooltip的事件&#xff0c;可通過selections中on和clear配置手勢選項和可識別設備&#xff0c;默認情況下tooltip需要雙擊隱藏&#xff0c;但這并不符合我們的需求。通過調研發現&#xff0c;若想實現tooltip隔幾秒后隱藏&#xff0c;可通過Str…

3DMax物理畫筆物體填充放置繪制畫筆插件安裝使用方法

3DMax物理畫筆物體填充放置繪制畫筆插件&#xff0c;允許您使用筆刷以非常自然的方式用物品快速填充場景&#xff0c;并使用剛體模擬自動放置它們。 無論你是從事建筑、游戲電影還是商業。。。等等&#xff0c;你經常需要用一些物品為你的場景添加細節。手工放置它們是乏味的&…

Threejs發光閃爍提示特效

一、導語 發光閃爍特效應該在我們的項目中是經常需要去封裝的一個特效吧&#xff0c;一般用于點擊選擇&#xff0c;選中物體&#xff0c;或者一些特效加持于中心物體&#xff0c;物體碰撞檢測后的發光特效等等 二、分析 我們可以合理的使用后處理特效&#xff0c;上步驟&am…

hive查看數據庫出現org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

FAILED: HiveException java,lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient 在啟動hive后&#xff0c;使用show databses查看數據庫時發現&#xff0c;出現了這個錯誤 情況一&#xff1a; 根據搜索查找以及…

Docker一 | Docker的基本使用

目錄 Docker的基本使用 常用命令 啟動Docker 查看Docker的運行狀態 重啟Docker 停止Docker服務 查看命令相關信息 鏡像命令 列出本地主機上的鏡像 搜索某個鏡像的名稱 拉取指定的鏡像到本地 查看鏡像/容器/數據卷所占的空間 刪除某個鏡像 容器命令 啟動容器 列出…

數字電路基礎知識系列(六)之LC濾波器的基礎知識

LC濾波器&#xff0c;是指將電感(L)與電容器 ©進行組合設計構成的濾波電路&#xff0c;可去除或通過特定頻率的無源器件。電容器具有隔直流通交流&#xff0c;且交流頻率越高越容易通過的特性。而電感則具有隔交流通直流&#xff0c;且交流頻率越高越不易通過的特性。因此…

linux如何使用Xshell遠程連接

簡介&#xff1a;本文的一切條件基于redhat的linux操作系統。 目錄 1、創建虛擬機&#xff1a; 2、使用命令查看網段信息 拓展1&#xff1a;&#xff08;若網卡上沒有網段信息&#xff0c;可以使用任意兩種方法&#xff09;&#xff1a; 準備工作&#xff1a; 1、點擊左…

git入門教程+常用命令

Git入門教程 本文章主要參照視頻教程&#xff1a;https://www.bilibili.com/video/BV1FE411P7B3/?spm_id_from333.337.search-card.all.click&vd_source06caf161b187fb3f4c039bc15e238fea 為什么要使用GIT 版本控制是項目、文檔迭代的必然要求&#xff0c;所以需要使用…

Springboot自定義start首發預告

Springboot自定義start首發預告 基于Springboot的自定義start , 減少項目建設重復工作, 如 依賴 , 出入參包裝 , 日志打印 , mybatis基本配置等等等. 優點 模塊化 可插拔 易于維護和升級 定制化 社區支持(后期支持) 發布時間 預告: 2023-12-10 預計發布: 2024-1-1 , 元旦首…

Android 設置音量默認值

在車機 Audio 開發中&#xff0c;有很多場景需要設置音量的最大值和最小值問題&#xff0c;例如通話模式通常是禁止靜音的&#xff0c;耳機模式調整到較大音量時開機后會恢復一個最大默認值等問題。而且通常情況下不通車型的默認值可能會不同&#xff0c;這篇文章就來看一下如何…

Java多線程是什么?

Java多線程是什么&#xff1f; Java多線程是指在程序中同時運行多個線程&#xff0c;每個線程都是獨立運行的&#xff0c;即有自己的執行路徑、棧、寄存器等資源&#xff0c;并且可以同步地訪問共享數據。 Java多線程的主要優勢在于能夠充分利用多核處理器&#xff0c;同時提…

移動端原生實現列表列固定橫向滾動功能

功能介紹&#xff1a; 在移動端開發中&#xff0c;會用到列表作為信息展示方式&#xff0c;一般希望上下滾動時&#xff0c;可以固定表頭&#xff0c;左右滾動時&#xff0c;可以固定最左列。 需求&#xff1a; 1、列表可以使用數組循環遍歷&#xff1b; 2、上下滾動時&…

離線環境下使用百度地圖(vue版)(展示自己的地圖瓦片)3.0版本api

1.下載自己想要的地圖網片 (1)瓦片圖下載 提取百度網盤中文件&#xff0c;然后運行exe文件&#xff0c;選擇要下載的層級及地區即可 百度網盤鏈接&#xff1a;https://pan.baidu.com/s/16sOJ9ws7HCgNH3EMf7Ejyg?pwd0q0e 提取碼&#xff1a;0q0e (2)將瓦片圖映射到網上 推薦使…

CSS中常用的10個文本樣式屬性

一個頁面中&#xff0c;文本樣式&#xff0c;是必不可少的&#xff0c;當然css也給我們準備了很多很多很多的文本樣式&#xff0c;以下列舉了10個常用的文本樣式屬性及常用的屬性值&#xff0c;掌握了&#xff0c;也基本滿足使用了 1: text-transform 可以用來設置文本的大小寫…

Python-docx 深入word源碼 自定義字符間距

代碼和實現效果 from docx import Document from docx.oxml import OxmlElement from docx.oxml.ns import qn from docx.shared import Pt# 調整pt設置字間距 def SetParagraphCharSpaceByPt(run, pt1):通過修改word源碼方式, 添加w:spacing標簽直接通過調整pt來設置字符間距…

Blender學習--制作帶骨骼動畫的機器人

1. 首先創建一個機器人模型 時間關系&#xff0c;這部分步驟有時間補充 2. 然后為機器人創建一副骨架 時間關系&#xff0c;這部分步驟有時間補充 3.骨骼綁定 切換到物體模式&#xff0c;選中機器人頭部&#xff0c;Shift選中骨骼&#xff0c;切換到姿態模式&#xff0c;&am…

SpringBoot集成系列--xxlJob

文章目錄 一、搭建調度中心xxl-job-admin1、下載項目2、調整項目參數3、執行初始化數據庫SQL4、啟動項目5、訪問 二、集成步驟1、添加xxl-job的依賴2、添加xxl-job的依賴3、配置執行器4、創建執行器5、開發任務1&#xff09;方式1&#xff1a;BEAN模式&#xff08;方法形式&…

RocketMQ源碼

RocketMQ的核心三流程 啟動流程 RocketMQ服務端由兩部分組成NameServer和Broker&#xff0c;NameServer是服務的注冊中心&#xff0c;Broker會把自己的地址注冊到NameServer&#xff0c;生產者和消費者啟動的時候會先從NameServer獲取Broker的地址&#xff0c;再去從Broker發…