700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 前端项目:基于Nodejs+vue开发实现酒店管理系统

前端项目:基于Nodejs+vue开发实现酒店管理系统

时间:2019-03-17 10:06:01

相关推荐

前端项目:基于Nodejs+vue开发实现酒店管理系统

作者主页:编程指南针

作者简介:Java领域优质创作者、CSDN博客专家 、掘金特邀作者、多年架构师设计经验、腾讯课堂常驻讲师

主要内容:Java项目、毕业设计、简历模板、学习资料、面试题库、技术互助

文末获取源码

项目编号:BS-QD-KS-002

一,项目简介

本项目使用纯前端技术开发实现一个酒店管理系统,前端采用VUE开发实现,后台通过NODEJS作为服务器开发实现,主要实现了酒店管理系统中的:房型管理、房间管理、顾客管理、订单管理等,用户可以注册并登陆后进行相应的管理操作。主要说明

前后端分离技术前端使用vuejs,ElementUI,axios前后端通信,图标使用了ElementUI自带的图标还有font-awesome.css的图标库, 阿里的iconfont图标库也不错,这里没用。后端使用了nodejs,nodejs采用了Express框架,orm采用的是Sequelize操作数据库(效率极高),restful风格的Api, 跨域是由后端解决的,采用的是nodejs的cors模块(比较方便)。数据库采用了mysql5.2(建议大家换成最新的mysql版本)使用jsonwebtoken验证用户调用api的权限,增加接口的安全性,防止恶意攻击接口,串改数据。主要界面里面的图片主要使用的是网上的图片,免费而且美观。

二,环境介绍

语言环境: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

五,项目总结

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。