(N-128)基于springboot,vue酒店管理系统

开发工具:IDEA

服务器:Tomcat9.0, jdk1.8

项目构建:maven

数据库:mysql5.7

系统分前后台,项目采用前后端分离

前端技术:vue+elementUI

服务端技术:springboot+mybatis

本系统功能包括: 

一、前台功能: 

1、用户注册模块:用户可以输入用户名、密码、昵称、姓名、手机来 进行注册。

2、用户登录模块:用户可以根据用户名、密码进行登录。

3、前台首页模块:包括广告、房间信息、酒店新闻。

4、酒店新闻模块:展示酒店标题,创建时间,详情。

5、酒店预订模块:展示了客房的详情以及评价,用户输入入住日期以及入住天数进行预订。

6、用户信息模块:展示了用户的头像、昵称、姓名、手机号码、性别并可进行修改。

7、个人订单模块:展示了全部订单、待付款订单、待入住、已入住,已退房的客房信息。

二、后台功能: 

1、管理员登录模块:管理员可以根据用户名、密码进行登录。

2、统计分析模块:管理员可以直观的查看近一周的客房数量、订单数量、用户数量。

3、会员管理模块:管理员可以查看用户的基本信息。

4、广告管理模块:管理员可以对酒店广告进行新增修改删除。

5、分类管理模块:管理员可以对客房的分类进行新增修改删除。

6、客房管理模块: 管理员可以对客房信息行增删改查。

7、房间管理模块:管理员可以查看目前所有房间的状态并对其进行增删改查。

8、订单管理模块:管理员可以找到用户提交的预订信息并进行开房和退房、查看的操作。

9、评价管理模块:管理员可以对用户的评价进行查询删除。

10、新闻管理模块:管理员可以对用户端新闻进行增删改查。

11、管理员管理模块:管理员可以对管理员的账号行增删改查。

文档截图: 

前台截图: 

后台截图:

package com.wfuhui.modules.order.controller;import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import com.wfuhui.common.utils.DateUtils;
import com.wfuhui.common.utils.Query;
import com.wfuhui.common.utils.R;
import com.wfuhui.modules.room.service.HouseService;
import com.wfuhui.modules.member.service.MemberService;
import com.wfuhui.modules.order.entity.OrderEntity;
import com.wfuhui.modules.order.service.OrderService;/*** 订单* */
@RestController
@RequestMapping("/order")
public class OrderController {@Autowiredprivate OrderService orderService;@Autowiredprivate HouseService roomService;@Autowiredprivate MemberService memberService;/*** 列表*/@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params){//查询列表数据Query query = new Query(params);List<OrderEntity> orderList = orderService.queryList(query);int total = orderService.queryTotal(query);return R.ok().put("rows", orderList).put("total", total);}/*** 信息*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") Integer id){OrderEntity order = orderService.queryObject(id);return R.ok().put("order", order);}/*** 保存*/@RequestMapping("/save")public R save(@RequestBody OrderEntity order){orderService.save(order);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody OrderEntity order){orderService.update(order);return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids){orderService.deleteBatch(ids);return R.ok();}/*** 预订房间* @param orderId* @param roomNumber* @return*/@RequestMapping("/orderRoom/{id}")public R orderRoom(@PathVariable("id")Integer id, String roomNumber) {OrderEntity order = new OrderEntity();order.setId(id);order.setOrderStatus(3);order.setRoomNumber(roomNumber);orderService.orderRoom(order);return R.ok();}/*** 退房* @param orderId* @param roomNumber* @return*/@RequestMapping("/returnRoom/{id}")public R returnRoom(@PathVariable("id")Integer id) {OrderEntity order = new OrderEntity();order.setId(id);order.setOrderStatus(4);orderService.returnRoom(order);//减少已售orderService.delHouseVolume(order.getId());return R.ok();}}
<template><div><el-container><el-header><mainHeader></mainHeader></el-header><el-container><mainSidebar :active="active"></mainSidebar><el-main><div v-if="showList"><el-form :inline="true" :model="q" class="demo-form-inline"><el-form-item label="客房名称"><el-input v-model="q.houseName" placeholder="客房名称"></el-input></el-form-item><el-form-item><el-button type="primary" @click="query">查询</el-button><el-button type="success" @click="add">新增</el-button><el-button type="warning" @click="update">修改</el-button><el-button type="danger" @click="del">删除</el-button></el-form-item></el-form><el-table:data="houseList"style="width: 100%"@selection-change="handleSelectionChange"><el-table-columntype="selection"width="55"></el-table-column><el-table-columnprop="picUrl"label="图片"><template slot-scope="scope"><el-imagestyle="width: 100px; height: 80px":src="scope.row.picUrl"></el-image></template></el-table-column><el-table-columnprop="houseName"label="客房名称"></el-table-column><el-table-columnprop="category.categoryName"label="分类"></el-table-column><el-table-columnprop="price"label="价格"></el-table-column><el-table-columnprop="stock"label="房间数量"></el-table-column><el-table-columnprop="createTime"label="创建时间"></el-table-column></el-table><el-pagination@size-change="handleSizeChange"@current-change="handleCurrentChange":current-page="q.page":page-sizes="[10, 50, 100]":page-size="q.limit"layout="total, sizes, prev, pager, next, jumper":total="total"></el-pagination></div><div v-if="!showList"><el-form :model="house" label-width="120px"><el-form-item label="图片"><el-uploadclass="avatar-uploader"action="http://127.0.0.1:10001/api/fileupload/upload"list-type="picture-card"multiple:file-list="fileList":on-success="handleAvatarSuccess":on-remove="imgRemove":before-upload="beforeAvatarUpload"><i class="el-icon-plus avatar-uploader-icon"></i></el-upload></el-form-item><el-form-item label="客房名称"><el-input v-model="house.houseName"></el-input></el-form-item><el-form-item label="分类"><el-select v-model="house.categoryId" placeholder="请选择"><el-optionv-for="item in categoryList":key="item.id":label="item.categoryName":value="item.id"></el-option></el-select></el-form-item><el-form-item label="价格"><el-input v-model="house.price"></el-input></el-form-item><el-form-item label="房间数量"><el-input v-model="house.stock"></el-input></el-form-item><el-form-item label="详情"><quill-editor ref="text" v-model="house.describe" :options="editorOption" style="height: 300px; margin-bottom: 50px;" /></el-form-item><el-form-item><el-button type="primary" @click="onSubmit">保存</el-button><el-button @click="cancel">取消</el-button></el-form-item></el-form></div></el-main></el-container></el-container></div>
</template>
<script>
import { quillEditor } from 'vue-quill-editor'
import {quillRedefine} from 'vue-quill-editor-upload'
import 'quill/dist/quill.core.css'
import 'quill/dist/quill.bubble.css'
import 'quill/dist/quill.snow.css'
import mainHeader from '../../../components/admin-main-header'
import mainSidebar from '../../../components/admin-main-sidebar'
export default {name: "House",data() {return {total: 0,houseList: [],categoryList: [],q: {houseName: '',page: this.currentPage,limit: this.pageSize},asideStyle: {height: '500px'},house: {picUrl: ''},active: '5',showList: true,editorOption: {},fileList: [],ids: []};},components: {quillEditor,quillRedefine,mainHeader,mainSidebar},methods:{handleSizeChange(e){//console.log(e)this.q.limit = e;this.query();},handleCurrentChange(e){//console.log(e)this.q.page = e;this.query();},query(){var that = this;this.$axios.get(this.domain + '/house/list',{ headers:{ token: localStorage.getItem("atoken") },params: that.q}).then(function(res){if(res.data.code == 0){//成功that.houseList = res.data.rowsthat.total = res.data.total}else{}})},queryCategory(){var that = this;this.$axios.get(this.domain + '/category/listAll',{headers:{ token: localStorage.getItem("atoken") }}).then(function(res){if(res.data.code == 0){//成功that.categoryList = res.data.categoryList}else{}})},queryHouse(id){var that = this;this.$axios.get(this.domain + '/house/info/'+id,{headers:{ token: localStorage.getItem("atoken") }}).then(function(res){if(res.data.code == 0){//成功that.house = res.data.housethat.initImage(res.data.house.picUrls)}else{}})},initImage(picUrls){this.fileList=[];let urlList = picUrls.map(function(item, index){return {url: picUrls[index]}});for (let url in urlList){this.fileList.push(urlList[url]);}},onSubmit(e){var that = this;var data = this.house;data.picUrls = this.fileList.map(function(item, index){return item.url})data.picUrl = data.picUrls[0]var action = data.id == null ? "save" : "update";this.$axios.post(this.domain + '/house/'+action,data,{headers: {'token': localStorage.getItem("atoken")}}).then(function(res){//console.log(res)if(res.data.code == 0){//成功that.showList = true;that.query();}else{that.errorMsg = res.data.msg;that.$message.error(res.data.msg);}})},add(){this.showList = falsethis.fileList = []this.house = {picUrls: []}},cancel(){this.showList = true},update(){if(this.ids.length != 1){this.$message.info("请选择一条数据");return;}this.showList = false;this.queryHouse(this.ids[0]);},del(){if(this.ids.length == 0){this.$message.info("请选择数据");return;}var that = this;this.$axios.post(this.domain + '/house/delete',that.ids, {headers: {'token': localStorage.getItem("atoken")}}).then(function(res){//console.log(res)if(res.data.code == 0){//成功that.query();}else{that.errorMsg = res.data.msg;that.$message.error(res.data.msg);}})},handleAvatarSuccess(e){this.fileList.push({url: e.url});},imgRemove(file, fileList){this.fileList = fileList;},beforeAvatarUpload(e){},handleSelectionChange(e){var ids = [];for(var i = 0; i < e.length; i++){ids.push(e[i].id)}this.ids = ids;}},created(){var docHeight = document.documentElement.clientHeight;this.asideStyle.height = docHeight - 76 + "px";var user = localStorage.getItem("auser");if(user){this.user = JSON.parse(user);}else{this.$router.push("admin_login");}this.query();this.queryCategory();this.editorOption = quillRedefine({// 图片上传的设置uploadConfig: {action: this.domain + '/api/fileupload/upload',  // 必填参数 图片上传地址size: 500,  // 可选参数   图片限制大小,单位为Kb, 1M = 1024Kbaccept: 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon',  // 可选参数 可上传的图片格式// 必选参数  res是一个函数,函数接收的response为上传成功时服务器返回的数据// 你必须把返回的数据中所包含的图片地址 return 回去res: (respnse) => {return respnse.url},name: 'file'  // 图片上传参数名}})//console.log(this.editorOption)}
};
</script><style scoped></style>

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

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

相关文章

C语言柔性数组

大家好&#xff0c;我们今天来补充一个知识&#xff0c;就是柔性数组。 柔性数组概念&#xff1a; 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。 C99 中&#xff0c;结构中的最后一个元素允许是未知大小的数…

【C++】:类和对象(中)之类的默认成员函数——构造函数and析构函数

1.类的6个默认成员函数 如果一个类中什么成员都没有&#xff0c;简称为空类 空类中真的什么都没有吗&#xff1f;并不是&#xff0c;任何类在什么都不写时&#xff0c;编译器会自动生成以下6个默认成员函数 默认成员函数&#xff1a;用户没有显式实现&#xff0c;编译器会生成…

斯坦福JSKarel编程机器人使用介绍

斯坦福JSKarel编程机器人使用介绍 为了避免被编程语言固有的复杂性所困扰&#xff0c;有一个被称为卡雷尔&#xff08;Karel&#xff09;机器人的微型世界&#xff08;microworld&#xff09;的简化环境&#xff0c;可以让编程初学者从中学习理解编程的基本概念&#xff0c;而…

unity(WebGL) 截图拼接并保存本地,下载PDF

截图参考&#xff1a;Unity3D 局部截图、全屏截图、带UI截图三种方法_unity 截图_野区捕龙为宠的博客-CSDN博客 文档下载&#xff1a; Unity WebGL 生成doc保存到本地电脑_unity webgl 保存文件_野区捕龙为宠的博客-CSDN博客 中文输入&#xff1a;Unity WebGL中文输入 支持输…

Peter算法小课堂—正整数拆分

大家可能会想&#xff1a;正整数拆分谁不会啊&#xff0c;2年级就会了&#xff0c;为啥要学啊 例题 正整数拆分有好几种&#xff0c;这里我们列举两种讲。 关系 我们看着第一幅图&#xff0c;头向左转90&#xff0c;记住你看到的图&#xff0c;再来看第二幅图&#xff0c;你…

KubeSphere安装mysql8

需要持久化储存数据的,建立有状态服务。 无状态服务是不会持久化的,重启就归零 KubeSphere 创建自建应用后,创建有状态服务,但是自己应用的有状态服务不能外放端口,需要在服务哪里删除pod,在创建负载指定相关的有状态服务,就可以外放端口了 安装mysql8 添加初始化密码参…

Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务

Nmap端口服务 之 CentOS7 关于启动Apache(httpd)服务、telnet服务、smtp服务、ftp服务、sftp服务 一. CentOS7 安装配置SFTP服务器详解一、SFTP简介二、关闭防火墙三、安装SSH服务在CentOS7中,sftp只是ssh的一部分,所以采用yum来安装ssh服务即可1. 查看是否已经安装了ssh2.…

狄克斯特拉(Dijkstra) 算法 php实现

《算法图解》中提到的狄克斯特拉算法&#xff0c;用php实现。 一 原理及解释 根据示例图求出起点到终点的最小耗费路径。 因为涉及每条路径的权重&#xff0c;所以这种算法仅适合有向路径。 所谓有向路径&#xff0c;指仅从起点指向终点的路径。 相对的无向路径&#xff0…

【面试题笔记】C++继承和多态常见高频经典面试题

1.继承相关习题 1.1 什么是菱形继承&#xff1f;菱形继承的问题是什么&#xff1f; 菱形继承&#xff1a;菱形继承是多继承的一种特殊情况。两个中间类继承父类&#xff0c;而派生类继承了两个中间类&#xff0c;从而在继承关系上呈现出一种菱形。如下图所示&#xff1a; **…

ZKP3.2 Programming ZKPs (Arkworks Zokrates)

ZKP学习笔记 ZK-Learning MOOC课程笔记 Lecture 3: Programming ZKPs (Guest Lecturers: Pratyush Mishra and Alex Ozdemir) 3.3 Using a library ( tutorial) R1CS Libraries A library in a host language (Eg: Rust, OCaml, C, Go, …)Key type: constraint system Mai…

光伏三相并网逆变器的控制策略与性能分析(Simulink仿真实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

24、Flink 的table api与sql之Catalogs(java api操作分区与函数、表)-4

Flink 系列文章 1、Flink 部署、概念介绍、source、transformation、sink使用示例、四大基石介绍和示例等系列综合文章链接 13、Flink 的table api与sql的基本概念、通用api介绍及入门示例 14、Flink 的table api与sql之数据类型: 内置数据类型以及它们的属性 15、Flink 的ta…

基于Java的师生交流答疑管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

攻防世界web篇-Training-WWW-Robots

直接点击给出的地址&#xff0c;然后会转到另一个网页界面&#xff0c;在这个界面&#xff0c;已经给出了提示&#xff0c;robots.txt 在浏览器中&#xff0c;直接在地址的后面加上robots.txt&#xff0c;会进到下面这个界面 因为对php语言一窍不通&#xff0c;所以这里纯粹就…

【数据结构】队列(C语言实现)

&#x1f4d9; 作者简介 &#xff1a;RO-BERRY &#x1f4d7; 学习方向&#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向&#xff0c;欢迎各位关注&#xff0c;谢谢各位的支持 队列 1. 队列的概念及结构…

搜维尔科技:Varjo-探讨汽车工业使用虚拟现实/XR的可能性

新的 奇亚EV9 被定位为起亚有史以来最豪华的车型。在一次活动中,起亚通过向芬兰媒体、利益相关者和经销商网络推出新的汽车车型(起亚EV9&#xff0c;EV9是一款高度超过5米的全电动车,拥有100千瓦的电池、快速充电能力、2500公斤的拖曳能力和7公斤的座位--这在市场上是一个独特的…

常见问题-找不到vcruntime140.dll无法继续执行代码解决方案

本文将介绍五种不同的解决方案&#xff0c;帮助大家解决这个问题。 首先&#xff0c;我们需要了解为什么会出现找不到vcruntime140.dll的情况。这种情况通常是由于以下几个原因导致的&#xff1a; 1. 系统环境变量设置不正确&#xff1a;系统环境变量中可能没有包含vcruntime…

jvm的jshell,学生的工具

jshell 在我眼里&#xff0c;只能作为学校教学的一个玩具&#xff0c;事实上官方也做了解释&#xff0c;以下是官方的解释&#xff1a; 在学习编程语言时&#xff0c;即时反馈很重要&#xff0c;并且 它的 API。学校引用远离Java的首要原因 教学语言是其他语言有一个“REPL”…

轻量级导出 Excel 标准格式

一般业务系统中都有导出到 Excel 功能&#xff0c;其实质就是把数据库里面一条条记录转换到 Excel 文件上。Java 常用的第三方类库有 Apache POI 和阿里巴巴开源的 EasyExcel 等。另外也有通过 Web 模板技术渲染 Excel 文件导出&#xff0c;这实质是 MVC 模式的延伸&#xff0c…

nfs+rpcbind实现服务器之间的文件共享

NFS简介 NFS服务及Network File System&#xff0c;用于在网络上共享存储&#xff0c;分为2,3,4三个版本&#xff0c;最新为4.1版本。NFS基于RPC协议&#xff0c;RPC为Remote Procedure Call的简写。 应用场景&#xff1a;用于A,B,C三台机器上需要保证被访问到的文件是一样…