作者简介:Java、前端、Pythone开发多年,做过高程,项目经理,架构师
主要内容:Java项目开发、毕业设计开发、面试技术整理、最新技术分享
项目编号:BS-QD-KS-002
本项目使用纯前端技术开发实现一个酒店管理系统,前端采用VUE开发实现,后台通过NODEJS作为服务器开发实现,主要实现了酒店管理系统中的:房型管理、房间管理、顾客管理、订单管理等,用户可以注册并登陆后进行相应的管理操作。主要说明
语言环境:nodejs
数据库: mysql5.7
应用服务器:nodejs
开发工具:IDEA或vscode
开发技术:nodejs+vue+elementUI
用户注册

用户登陆

房间管理


房型管理


订单管理


订单管理


const { Op } = require('sequelize')//nodejs的sequelize模块
const express = require('express')//express框架
const admin = require('../crud/table/admin.js')//引入管理员信息表
const token = require('../comment/token.js')//引入token模块
const adminRouter = express.Router()//express路由adminRouter.post('/register',(req,res) =>{//管理员注册const { adminId, adminName, adminPassword } = req.body;admin.findOne({where:{adminId:adminId}}).then(data =>{if(data){res.status(200).json({msg:'该用户已经注册',success:false})return new Promise(() =>{})}else{return admin.create({adminId, adminName, adminPassword})}}).then(data =>{res.status(200).json({success:true,msg:'管理员注册成功!',admin:data.get()})}).catch(err =>{res.status(200).json({success:false,msg:'内部服务器错误!'})})})adminRouter.get('/login',(req,res) =>{//登录const { adminId, adminPassword } = req.query;let adminInfo;admin.findOne({where:{adminId}}).then(data =>{if(data){if(data.get().adminPassword==adminPassword){adminInfo = data.get();return token.setToken(data.get())}else{res.status(200).json({success:false,msg:'用户密码错误!'}); return new Promise(() =>{})}}else{res.status(200).json({success:false,msg:'该用户还未注册!'})return new Promise(() =>{})}}).then(data =>{res.status(200).json({success:true,admin:adminInfo,token:data,msg:'登录成功!'})}).catch(err =>{res.status(200).json({success:false,msg:'内部服务器出错!'})})
})adminRouter.put('/update',(req,res) =>{//修改管理员信息const { adminId, adminName, adminPassword, adminSex, adminAge } = req.body;admin.findOne({where:{adminId,adminPassword}}).then(data =>{if(data){return admin.update({adminName,adminSex,adminAge},{where:{adminId,adminPassword}})}else{res.status(200).json({success:false,msg:'管理员账号或者密码错误!'})return new Promise(() =>{})}}).then(data =>{return admin.findOne({where:{adminId,adminPassword}})}).then(data =>{res.status(200).json({success:true,msg:'管理员信息修改成功!',admin:data.get()})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})adminRouter.delete('/del',(req,res) =>{const { adminId } = req.body || req.query;admin.destroy({where:{adminId}}).then(data =>{res.status(200).json({success:true,msg:'删除成功!'})}).catch(err =>{res.status(200).json({success:false,msg:'删除失败!'})})
})module.exports = adminRouter;
const { Op } = require('sequelize')//nodejs的sequelize模块
const express = require('express')//express框架
const customer = require('../crud/table/customer.js')//引入用户表const customerRouter = express.Router()//express路由customerRouter.post('/add',(req,res) =>{//用户注册const { customerIdCard, customerName, customerSex, customerPhoneNumber } = req.body;customer.findOne({where:{customerIdCard}}).then(data =>{if(data){res.status(200).json({success:false,msg:'该用户已经注册!'})return new Promise(() =>{})}else{return customer.create({customerIdCard, customerName, customerSex, customerPhoneNumber})}}).then(data =>{res.status(200).json({success:true,msg:'用户信息录入成功!',customer:data.get()})}).catch(err =>{res.status(200).json({success:false,msg:'内部服务器错误!'})})
})// customerRouter.get('/login',(req,res) =>{//用户登录
// const { customerIdCard, cust}
// })customerRouter.put('/update',(req,res) =>{//用户基本信息修改const { customerIdCard, customerName, customerSex, customerPhoneNumber } = req.body;customer.findOne({where:{customerIdCard:{[Op.eq]:customerIdCard}}}).then(data =>{if(data){return customer.update({customerName, customerSex, customerPhoneNumber},{where:{customerIdCard:{[Op.eq]:customerIdCard}}})}else{res.status(200).json({success:false,msg:'该用户还未注册!'})return new Promise(() =>{})}}).then(data =>{res.status(200).json({success:true,msg:'用户信息修改成功!',customer:data.get()})}).catch(err =>{res.status(200).json({success:false,msg:'服务器出错!'})})
}) customerRouter.delete('/del',(req,res) =>{//删除用户const { customerIdCard } = req.body;customer.destroy({where:{customerIdCard}}).then(data =>{res.status(200).json({success:true,msg:'用户删除成功!'})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})customerRouter.put('/updatevip',(req,res) =>{//购买会员const { customerIdCard, level } = req.body;customer.findOne({where:{customerIdCard}}).then(data =>{if(data){return customer.update({level},{where:{customerIdCard}})}else{res.status(200).json({success:false,msg:'该用户未注册!'})return new Promise(() =>{})}}).then(data =>{return customer.findOne({where:{customerIdCard}})}).then(data =>{res.status(200).json({success:true,msg:'vip更改成功!',customer:data.get()})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})})customerRouter.put('/updatemoney',(req,res) =>{//修改用户总消费金额const { customerIdCard, money} = req.body;customer.findOne({where:{customerIdCard}}).then(data =>{if(data){let oldMoney = data.get().totalAmount;let newMoney = oldMoney + money;return customer.update({totalAmount: newMoney},{where:{customerIdCard}})}else{res.status(200).json({success:false,msg:'该用户为注册!'})}}).then(data =>{return customer.findOne({where:{customerIdCard}})}).then(data =>{res.status(200).json({success:true,msg:'用户消费金额修改成功!'})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})})customerRouter.get('/getAllCustomer',(req,res) =>{//查询所有顾客customer.findAndCountAll().then(data =>{res.status(200).json({success:true,msg:'顾客信息查询成功!',customerList:data.rows.map(item =>{return item.get()}),count:data.count})}).catch(err =>{res.status(200).json({success:false,msg:'服务器出错!'})})
})customerRouter.get('/queryCustomer',(req,res) =>{//模糊查询顾客信息const { queryName } = req.query;customer.findAndCountAll({where:{customerName:{[Op.like]:'%'+queryName+'%'}}}).then(data =>{res.status(200).json({success:true,msg:'顾客信息查询成功!',customerList:data.rows.map(item =>{return item.get()}),count:data.count})}).then(err =>{res.status(200).json({success:false,msg:'服务器出错!'})})
})module.exports = customerRouter;
const express = require('express')//express框架
const { Op } = require('sequelize')//nodejs的sequelize模块
const order = require('../crud/table/myorder.js')//引入订单信息表
const customer = require('../crud/table/customer.js')//引入顾客信息表
const room = require('../crud/table/room.js')//引入房间信息表order.hasOne(customer,{ sourceKey:'customerIdCard', foreignKey:'customerIdCard' })
order.hasOne(room,{ sourceKey:'roomNumber', foreignKey:'roomNumber' })const orderRouter = express.Router()orderRouter.post('/add',(req,res) =>{//创建订单console.log(req.body)const { orderNumber, orderStatus,customerIdCard,roomNumber,checkInTime,checkOutTime,totalMoney,remarks} = req.body;order.findOne({where:{orderNumber}}).then(data =>{if(data){res.status(200).json({success:false,msg:'该订单已经存在!'})return new Promise(() =>{})}else{return customer.findOne({where:{customerIdCard}})}}).then(data =>{if(data){return room.update({roomStatus:'已入住'},{where:{roomNumber}})}else{res.status(200).json({success:false,msg:'该用户还未注册!'});return new Promise(() =>{});}}).then(data =>{return order.create({orderNumber, orderStatus,customerIdCard,roomNumber,checkInTime,checkOutTime,totalMoney,remarks})}).then(data =>{res.status(200).json({success:'true',msg:'订单创建成功!'})}).catch(err =>{res.status(200).json({success:false,msg:'内部服务器出错!'})})
})orderRouter.delete('/del',(req,res) =>{//删除订单const { orderNumber } = req.body;order.findOne({where:{orderNumber}}).then(data =>{if(data){return order.destroy({where:{orderNumber}})}else{res.status(200).json({success:false,msg:'该订单不存在!'})return new Promise(() =>{})}}).then(data =>{res.status(200).json({success:true,msg:'删除成功!'})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})orderRouter.put('/update',(req,res) =>{//修改订单状态const { orderStatus, orderNumber,totalMoney,roomNumber } = req.body;order.findOne({where:{orderNumber}}).then(data =>{if(data){return room.update({roomStatus:'未入住'},{where:{roomNumber}})}else{res.status(200).json({success:false,msg:'该订单不存在!' })return new Promise(() =>{})}}).then(data =>{return order.update({orderStatus,totalMoney},{where:{orderNumber}})}).then(data =>{return order.findOne({where:{orderNumber}})}).then(data =>{res.status(200).json({success:true,msg:'订单修改成功!',order:data.get()})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})})orderRouter.get('/getAllOrder',(req,res) =>{//查询所有订单const { pageSize, offset } = req.query;order.findAndCountAll({limit:pageSize,offset:offset,include:[{model:customer,foreignKey:'customerIdCard',attributes:['customerName','customerSex','customerVipLevel','customerPhoneNumber','totalAmount']},{model:room,foreignKey:'roomNumber',attributes:['type','remarks']}]}).then(data =>{res.status(200).json({success:true,msg:'所有订单查询成功!',orderList:data.rows.map(item =>{return item.get()}),count:data.count})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})orderRouter.get('/getAllNotPayOrder',(req,res) =>{//查询所有未支付的订单const { pageSize, offset } = req.query;order.findAndCountAll({limit:pageSize,offset:offset,where:{orderStatus:{[Op.eq]:'未支付'}},include:[{model:customer,foreignKey:'customerIdCard',attributes:['customerName','customerSex','customerVipLevel','customerPhoneNumber','totalAmount']},{model:room,foreignKey:'roomNumber',attributes:['type']}]}).then(data =>{res.status(200).json({success:true,msg:'未支付订单查询成功!',orderList:data.rows.map(item =>{return item.get()}),count:data.count,pageSize:pageSize,offset:offset})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})orderRouter.get('/getAllPayOrder',(req,res) =>{//查询所有已支付的订单const { pageSize, offset } = req.query;order.findAndCountAll({limit:pageSize,offset:offset,where:{orderStatus:{[Op.eq]:'已支付'}},include:[{model:customer,foreignKey:'customerIdCard',attributes:['customerName','customerSex','customerVipLevel','customerPhoneNumber','totalAmount']},{model:room,foreignKey:'roomNumber',attributes:['type']}]}).then(data =>{res.status(200).json({success:true,msg:'未支付订单查询成功!',orderList:data.rows.map(item =>{return item.get()}),count:data.count,pageSize:pageSize,offset:offset})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})orderRouter.get('/getStatusOrder',(req,res) =>{//查询所有该状态的订单const { pageSize, offset, orderStatus } = req.query;order.findAndCountAll({limit:pageSize,offset:offset,where:{orderStatus:{[Op.eq]:orderStatus}},include:[{model:customer,foreignKey:'customerIdCard',attributes:['customerName','customerSex','customerVipLevel','customerPhoneNumber','totalAmount']},{model:room,foreignKey:'roomNumber',attributes:['type']}]}).then(data =>{res.status(200).json({success:true,msg:'状态订单查询成功!',orderList:data.rows.map(item =>{return item.get()}),count:data.count,pageSize:pageSize,offset:offset})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})
module.exports = orderRouter;
const express = require('express')//express框架
const { Op } = require('sequelize')//nodejs的sequelize模块
const room = require('../crud/table/room.js')//引入放假信息表
const roomType = require('../crud/table/roomType.js')//引入所有房间类型表room.hasOne(roomType,{ sourceKey:'type',foreignKey:'type'})//每个房间都有一个房间类型const roomRouter = express.Router()roomRouter.post('/add',(req,res) =>{//添加房间const { roomNumber, type, roomStatus, remarks } = req.body;room.findOne({where:{roomNumber}}).then(data =>{if(data){res.status(200).json({success:false,msg:'该房间已经存在!'})return new Promise(() =>{})}else{return room.create({roomNumber, type, roomStatus, remarks})}}).then(data =>{return room.findOne({where:{roomNumber},include:[{model:roomType,foreignKey:'type',attributes:['price','url']}]})}).then(data =>{res.status(200).json({success:true,msg:'房间添加成功!',room:data.get()})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})roomRouter.delete('/del',(req,res) =>{const { roomNumber } = req.body;room.findOne({where:{roomNumber}}).then(data =>{if(data){return room.destroy({where:{roomNumber}})}else{res.status(200).json({success:false,msg:'房间删除失败!'})return new Promise(() =>{})}}).then(data =>{res.status(200).json({success:true,msg:'该房间删除成功!'})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})roomRouter.put('/update',(req,res) =>{//修改房间信息const { roomNumber, type, roomStatus,remarks } = req.body;room.findOne({where:{roomNumber}}).then(data =>{if(data){return room.update({type, roomStatus,remarks},{where:{roomNumber}})}else{res.status(200).json({success:false,msg:'该房间不存在!'})return new Promise(() =>{})}}).then(data =>{return room.findOne({where:{roomNumber}})}).then(data =>{res.status(200).json({success:true,msg:'房间信息修改成功!',room:data.get()})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误'})})
})roomRouter.get('/getAllRoom',(req,res) =>{//获取所有房间信息const { pageSize, offset } = req.query;room.findAndCountAll({limit:pageSize,offset:offset}).then(data =>{let roomList = data.rows.map(item =>{return item.get()})res.status(200).json({success:true,msg:'房间信息查询成功!',roomList:roomList,count:data.count})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})roomRouter.get('/getOneRoom',(req,res) =>{//获取某个房间号的房间信息const { roomNumber } = req.query;room.findOne({where:{roomNumber}}).then(data =>{if(data){res.status(200).json({success:true,msg:'房间查询成功!',room:data.get()})}else{res.status(200).json({success:false,msg:'未查询到该房间信息'})}}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})roomRouter.get('/getNotInRoom',(req,res) =>{//获取未入住房间信息const { pageSize, offset } = req.query;room.findAndCountAll({limit:pageSize,offset:offset,where:{roomStatus:{[Op.eq]:'未入住'}}}).then(data =>{res.status(200).json({success:true,msg:'未入住房间查询成功!',roomList:data.rows.map(item =>{return item.get()}),count:data.count})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})roomRouter.get('/getInRoom',(req,res) =>{//查询已入住房间信息const { pageSize, offset } = req.query;room.findAndCountAll({limit:pageSize,offset:offset,where:{roomStatus:{[Op.eq]:'已入住'}}}).then(data =>{res.status(200).json({success:true,msg:'已入住房间查询成功!',roomList:data.rows.map(item =>{return item.get()}),count:data.count})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})roomRouter.get('/getAllRoomPrice',(req,res) =>{//查询所有的房间以及价格const { pageSize, offset } = req.query;room.findAndCountAll({limit:pageSize,offset:offset,include:[{model:roomType,foreignKey:'type',attributes:['price','url']}]}).then(data =>{res.status(200).json({success:true,msg:'房间信息查询成功!',roomList:data.rows.map(item =>{return item.get()}),count:data.count})}).catch(err =>{res.status(200).json({success:false,msg:'服务器内部错误!'})})
})roomRouter.get('/getAllNotINRoomPrice',(req,res) =>{//获取所有未入住的房间信息const { pageSize, offset } = req.query;room.findAndCountAll({limit:pageSize,offset:offset,where:{roomStatus:{[Op.eq]:'未入住'}},include:[{model:roomType,foreignKey:'type',attributes:['price','url']}]}).then(data =>{res.status(200).json({success:true,msg:'房间信息查询成功!',roomList:data.rows.map(item =>{return item.get()}),count:data.count})})
})roomRouter.get('/getAllINRoomPrice',(req,res) =>{//获取所有已入住的房间信息const { pageSize, offset } = req.query;room.findAndCountAll({limit:pageSize,offset:offset,where:{roomStatus:{[Op.eq]:'已入住'}},include:[{model:roomType,foreignKey:'type',attributes:['price','url']}]}).then(data =>{res.status(200).json({success:true,msg:'房间信息查询成功!',roomList:data.rows.map(item =>{return item.get()}),count:data.count})})
})roomRouter.get('/getAllRoomTypePrice',(req,res) =>{const { pageSize, offset, type } = req.query;room.findAndCountAll({where:{type:{[Op.eq]:type}},include:[{model:roomType,foreignKey:'type',attributes:['price','url']}]}).then(data =>{res.status(200).json({success:true,msg:'房型查询成功!',roomList:data.rows.map(item =>{return item.get()}),count:data.count})}).catch(err =>{res.status(200).json({success:false,msg:'服务器出错!'})})
})roomRouter.get('/getAllStatusRoom',(req,res) =>{//获取所有该状态的房间信息const { pageSize, offset, roomStatus } = req.query;room.findAndCountAll({limit:pageSize,offset:offset,where:{roomStatus:{[Op.eq]:roomStatus}},include:[{model:roomType,foreignKey:'type',attributes:['price','url']}]}).then(data =>{res.status(200).json({success:true,msg:'房间信息查询成功!',roomList:data.rows.map(item =>{return item.get()}),count:data.count})})
})module.exports = roomRouter