基于javaweb的SSM小程序美甲店铺座位预约系统(java+ssm+nodejs+vue+javascript+mysql)

运行环境

Java≥8、MySQL≥5.7、Tomcat≥8、Node.js≥14

开发工具

后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可

❗没学过node.js的不要搞前后端分离项目

适用

课程设计,大作业,毕业设计,项目练习,学习演示等

功能说明

031524382608

041524382608

051524382608

061524382608

071524382608

081524382608

091524382608

101524382608

111524382608

121524382608

141524382608

151524382608

基于javaweb的SSM小程序美甲店铺座位预约系统(java+ssm+nodejs+vue+javascript+mysql)

项目介绍

基于NodeJS的美甲店铺座位预约小程序系统

本系统分为前后台,包含管理员、用户两个角色。

用户角色:登录、注册、首页、项目套餐、店铺座位预约、店铺文章、交流论坛、个人中心等。

管理员角色:个人中心、用户管理、店铺介绍管理、项目套餐管理、款式管理、店铺文章管理、文章类型管理、预约信息管理、交流论坛、系统管理等。

环境需要

1.Node版本:12.11.1

2.npm版本:6.14.5

技术栈

后端:NodeJS+vue

前端:WXML(类似于HTML)、WXSS(类似于CSS)和JavaScript

使用说明

后端运行:

  1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;

  2. 修改config.json中数据库用户名、密码等相关配置;

  3. 打开命令行工具cmd,cd到 nodejsv1g4r 目录下

  4. 执行命令 npm run dev,运行成功后再运行前端;

前端运行:

  1. 使用微信开发者工具导入mp-weixin

  2. 运行小程序项目; 

后台登录页面

http://localhost:8080/nodejsv1g4r/admin/dist/index.html#/login

管理员 abo 密码 abo

注意项目文件路径中不能含有中文、空格、特殊字符等,否则图片会上传不成功。

首页展示:

我的管理展示:

登录页面展示:

项目列表展示:

注册页面展示:

项目详情介绍:

项目内容展示:

评论详情展示:

审核页面展示:

个人中心页面展示:

款式页面展示:

后台项目列表展示:

 用户管理控制层:

@Controller

public class UserController {

@Autowired

UserServiceImpl userService;

/*

  • queryUserlike 通过用户姓名进行模糊查询

  • */

@GetMapping(“/queryUserlike/{username}”)

@ResponseBody

public Msg queryUserlikeId(@RequestParam(value = “pn”,defaultValue = “1”) Integer pn,

@PathVariable(“username”) String username){

PageHelper.startPage(pn,20);

List users = userService.queryByUserName(username);

PageInfo page=new PageInfo(users,5);

return Msg.success().add(“pageInfo”,page);

/*

  • 前端发送请求后端分页数据,

  • */

@GetMapping(“/userTables”)

@ResponseBody

public Msg userTables(@RequestParam(value = “pn”,defaultValue = “1”) Integer pn){

PageHelper.startPage(pn,7);

List users = userService.getAll();

PageInfo page=new PageInfo(users,5);

return Msg.success().add(“pageInfo”,page);

//到tables页面

@RequestMapping(“/usertables”)

public String toUserTables(Map<String,Object> map){

List users = userService.getAll();

map.put(“users”,users);

return “Tables”;

//点击编辑按键传入userid查询用户,返回用户信息

@GetMapping(“/queryUserByID/{userid}”)

@ResponseBody

public Msg queryUserID(@PathVariable(“userid”) Integer userid,Map<String,Object> map){

User users = userService.getUserByID(userid);

return Msg.success().add(“users”,users);

/*

  • 查询全部用户

*/

/*@GetMapping(“/user22”)

public String getAllUser(Map<String,Object> map){

List users = userService.getAll();

map.put(“users”,users);

return “Dashboard”;

}*/

/*

  • 用户删除请求

*/

@DeleteMapping(value = “/user/{ids}”)

@ResponseBody

public Msg delEmp(@PathVariable(“ids”) String ids) {

if(ids.contains(“-“)) {

List delids = new ArrayList();

String[] split = ids.split(“-“);

for (String string : split) {

delids.add(Integer.parseInt(string));

userService.batchUser(delids);

}else {

int id = Integer.parseInt(ids);

userService.deleteUser(id);

return Msg.success();

/*

  • 用户更新

*/

@PutMapping(value = “/user/{userID}”)

@ResponseBody

public Msg saveEmp(User user) {

System.out.println(user);

userService.updateUser(user);

return Msg.success();

/*

  • 根据用户ID查询结果

*/

@GetMapping(value = “user/{id}”)

@ResponseBody

public Msg getEmp(@PathVariable(value = “id”)Integer userID) {

User user = userService.getUserByID(userID);

return Msg.success().add(“user”, user);

/*

  • 检查用户名是否可用

*/

@RequestMapping(value = “/checkAddUser”)

@ResponseBody

public Msg checkAddUser(@RequestParam(“username”)String userName) {

//先判断用户名是否合法的表达式

String regex = “(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]+$)”;

boolean c = userName.matches(regex);

if(!c) {

return Msg.fail().add(“va_msg”, “用户名可以是2-5位中文,或者6-16位英文和数字的组合”);

//数据库用户名重复校验

boolean b = userService.checkUserName(userName);

if(b) {

return Msg.success().add(“va_msg”, “用户名可用”);

}else {

return Msg.fail().add(“va_msg”, “用户名已存在”);

/校验手机号码格式/

@RequestMapping(“/checkAddTel”)

@ResponseBody

public Msg checkAddTel(@RequestParam(value = “usertel”)String userTel1) {

String userTel = userTel1.trim();

String regex = “(^1\d{10}$)”;

boolean matches = userTel.matches(regex);

if(matches == true){

return Msg.success().add(“va_msg”,””);

}else{

return Msg.fail().add(“va_msg”,”手机号必须以1开头,11位的数字!”);

/校验年龄码格式/

@RequestMapping(“/checkAddAge”)

@ResponseBody

public Msg checkAddAge(@RequestParam(value = “userage”)Integer userAge1) {

String s = userAge1.toString();

String userTel = s.trim();

String regex = “(^\d{1,3}$)”;

boolean matches = userTel.matches(regex);

if(matches == true){

return Msg.success().add(“va_msg”,””);

}else{

return Msg.fail().add(“va_msg”,”请输入数字”);

/校验密码格式/

@RequestMapping(“/checkAddPwd”)

@ResponseBody

public Msg checkAddPwd(@RequestParam(value = “userpwd”)String userPwd1) {

String userPwd = userPwd1.trim();

String regex = “(^[a-zA-Z0-9_-]{6,16}$)”;

boolean matches = userPwd.matches(regex);

if(matches == true){

return Msg.success().add(“va_msg”,””);

}else{

return Msg.fail().add(“va_msg”,”密码格式不正确:必须超过6位,小于16位的英文和数字!”);

/****插入*****

  • 点击保存按钮,新增用户

  • */

@PostMapping(“/insertUser”)

@ResponseBody

public Msg insertUser(User user){

user.setUserid(null);

userService.insertUser(user);

return Msg.success().add(“va_msg”,”插入成功!”);

//点击更新按钮,更新修改的数据

@PutMapping(“/updateUser”)

@ResponseBody

public Msg updateUser(User user){

userService.updateUser(user);

return Msg.success().add(“va_msg”,”插入成功!”);

//用户删除

@DeleteMapping(“/deleteUser/{userid}”)

@ResponseBody

public Msg deleteEmployee(@PathVariable(“userid”) Integer userid){

boolean b = userService.deleteUser(userid);

if (b){

return Msg.success().add(“va_msg”,”用户删除成功!”);

}else {

return Msg.fail().add(“va_msg”,”用户删除失败!”);

/*

  • 前端ajax请求,查询userid是否在表中存在

  • */

@GetMapping(“/checkUserID”)

@ResponseBody

public Msg checkUserID(@RequestParam(“userid”) Integer userid){

boolean b = userService.checkUserID(userid);

if(b){

return Msg.success().add(“va_msg”,”用户名存在!”);

}else {

return Msg.fail().add(“va_msg”,”用户名不存在,重新输入!”);

座位信息详情控制层: 

@Controller

public class SeatController {

@Autowired

SeatServiceImpl seatService;

/*

  • 获取数据库座位信息,返回map中

  • */

@GetMapping(“/seat”)

public String seat(Map<String,Object> map){

List seats = seatService.getAll();

map.put(“seats”,seats);

return “SeatResver”;

//前端发起请求来修改座位状态,置为0

@PutMapping(“/updateSeatState/{seatid}”)

@ResponseBody

public Msg updateState(@PathVariable(“seatid”) Integer seatid){

boolean b = seatService.updateSeatState(seatid);

if (b){

return Msg.success().add(“va_msg”,”状态位置0成功!”);

}else {

return Msg.fail().add(“va_msg”,”状态位置0失败!”);

//前端发起请求来修改座位状态,置为1

@PutMapping(“/updateSeatStateYY”)

@ResponseBody

public Msg updateState1(@RequestParam(“seatid”) Integer seatid,

@RequestParam(“status”) String status){

boolean b = seatService.updateSeatState1(seatid,status);

if (b){

return Msg.success().add(“va_msg”,”预约成功!”);

}else {

return Msg.fail().add(“va_msg”,”预约失败!”);

预约信息详情:

@Controller

public class SeatResverController {

@Autowired

SeatResverServiceImpl seatResverService;

/*

  • 点击预约信息的提交按钮,保存该预约信息

  • */

@PostMapping(“/insertSeatResver”)

@ResponseBody

public Msg insertSeatResver(SeatResver seatResver,@RequestParam(“status”) String status){

seatResver.setResverid(null);

seatResverService.insertSeatResver(seatResver,status);

return Msg.success().add(“va_msg”,”预约座位信息插入成功!”);

/*

  • 点击预约信息的提交按钮,校验该用户是否已经预约

  • */

@GetMapping(“/checkSeatResverUserID/{userid}”)

@ResponseBody

public Msg checkSeatResverUserID(@PathVariable(“userid”) Integer userid){

boolean b = seatResverService.checkUserID(userid);

if (b){

return Msg.fail().add(“va_msg”,”该用户已预约或已上座,请重新输入!”);

}else {

return Msg.success().add(“va_msg”,””);

/*

  • 点击取消按钮,删除预约信息(根据座位号)

  • */

@DeleteMapping(“/deleteSeatResver/{seatid}”)

@ResponseBody

public Msg deleteSeatResver(@PathVariable(“seatid”) Integer seatid){

boolean b = seatResverService.deleteSeatResver(seatid);

if (b){

return Msg.success().add(“va_msg”,”删除预约信息成功!”);

}else {

return Msg.fail().add(“va_msg”,”删除预约信息失败!”);

/*

  • 获取全部预约信息,返回到前端展示再页面中

  • */

@GetMapping(“/getSeatResverInfo”)

@ResponseBody

public Msg getSeatResverInfo(@RequestParam(value = “pn”,defaultValue = “1”)Integer pn){

PageHelper.startPage(pn,6);

List all = seatResverService.getAll();

PageInfo page=new PageInfo(all,5);

return Msg.success().add(“pageInfo”,page);

/*

  • 模糊查询,seatid

  • */

@GetMapping(“/querySeatlike/{seatid}”)

@ResponseBody

public Msg getSeatResver(@PathVariable(“seatid”) Integer seatid

,@RequestParam(value = “pn”,defaultValue = “1”)Integer pn){

PageHelper.startPage(pn,20);

List all = seatResverService.getSeatAll(seatid);

PageInfo page=new PageInfo(all,5);

return Msg.success().add(“pageInfo”,page);

用户信息管理控制层:

@Controller

public class ManagerController {

@Autowired

ManagerServiceImpl managerService;

//进入忘记密码页面

@RequestMapping(“/forgotPwd”)

public String toForgotPage(){

return “ForgotPassword”;

@RequestMapping(“/forgotPwd2”)

public String toForgotPage2(){

return “ForgotPassword2”;

@RequestMapping(“/logout”)

public String toLoginPage(HttpSession session){

Enumeration attributeNames = session.getAttributeNames();

while (attributeNames.hasMoreElements()) {

session.removeAttribute(attributeNames.nextElement());

return “Login”;

//进入重置密码页面

@RequestMapping(“/register”)

public String toRegisterPage(){

return “Register”;

//登陆和忘记密码==》检查用户名是否存在

@GetMapping(“/checkLoginManagerName”)

@ResponseBody

public Msg checkLoginManagerName(@RequestParam(“managername”) String managername1){

String managername = managername1.trim();

String regex = “(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]+$)”;

boolean c = managername.matches(regex);

if(!c) {

return Msg.fail().add(“va_msg”, “用户名是2-5位中文,或者6-16位英文和数字的组合”);

boolean b = managerService.checkManagerName(managername);

if (b==true){

return Msg.fail().add(“va_msg”,”用户名不存在!”);

}else {

return Msg.success().add(“va_msg”,””);

//注册检查用户名是否存在

@GetMapping(“/checkManagerName”)

@ResponseBody

public Msg checkManagerName(@RequestParam(“managername”) String managername1){

String managername = managername1.trim();

String regex = “(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]+$)”;

boolean c = managername.matches(regex);

if(!c) {

return Msg.fail().add(“va_msg”, “用户名可以是2-5位中文,或者6-16位英文和数字的组合”);

boolean b = managerService.checkManagerName(managername);

if (b==true){

return Msg.success().add(“va_msg”,”用户名可用!”);

}else {

return Msg.fail().add(“va_msg”,”用户名已存在!”);

//检查手机号是否是十一位

@GetMapping(“/checkManagerTel”)

@ResponseBody

public Msg checkManagerTel(@RequestParam(“managertel”) String managertel1){

String managertel = managertel1.trim();

String regex = “(^1\d{10}$)”;

boolean matches = managertel.matches(regex);

if(matches == true){

return Msg.success().add(“va_msg”,” “);

}else{

return Msg.fail().add(“va_msg”,”手机号必须以1开头,11位的数字!”);

//登陆检查密码

@GetMapping(“/checkLoginManagerPwd”)

@ResponseBody

public Msg checkLoginManagerPwd(@RequestParam(“managerpwd”) String managerpwd1){

String managerpwd = managerpwd1.trim();

String regex = “(^[a-zA-Z0-9_-]{6,16}$)”;

boolean matches = managerpwd.matches(regex);

if(matches == true){

return Msg.success().add(“va_msg”,” “);

}else{

return Msg.fail().add(“va_msg”,”密码格式不正确:必须超过6位,小于16位!”);

//注册检查密码

@GetMapping(“/checkManagerPwd”)

@ResponseBody

public Msg checkManagerPwd(@RequestParam(“managerpwd”) String managerpwd1){

String managerpwd = managerpwd1.trim();

String regex = “(^[a-zA-Z0-9_-]{6,16}$)”;

boolean matches = managerpwd.matches(regex);

if(matches == true){

return Msg.success().add(“va_msg”,” “);

}else{

return Msg.fail().add(“va_msg”,”密码格式不正确:必须超过6位,小于16位!”);

/*新增管理员

**/

@PostMapping(“/registerManager”)

public String registerManger(Manager manager,Map<String,Object> map){

manager.setManagerid(null);

boolean flag = managerService.createManager(manager);

if(flag == true){

map.put(“msg”,”插入成功!”);

return “redirect:share.html”;

}else{

map.put(“msg”,”插入失败!”);

return “Register”;

//点击进入按钮校验用户名和密码是否正确

@PostMapping(“/loginD”)

public String loginDashboard(@RequestParam(“managername”) String managername1,

@RequestParam(“managerpwd”) String managerpwd1,

Map<String,Object> map, HttpSession session){

/*

  • ==true没有该用户

  • ==false 用户存在

  • */

String managername = managername1.trim();

String managerpwd = managerpwd1.trim();

if(managername != “” && managerpwd!=””){

boolean name = managerService.checkManagerName(managername);

boolean pwd = managerService.checkManagerPwd(managerpwd);

if(name == false && pwd ==false ){

// System.out.println(“用户名或密码正确!”);

session.setAttribute(“username”,managername);

return “redirect:/user22”;

}else{

// System.out.println(“密码错误!”);

map.put(“msg”,”账号密码错误,请重新输入账号和密码!”);

return “Login”;

}else {

map.put(“msg”,”请输入账号or密码!”);

return “Login”;

/*resetpwd

  • 点击确认修改密码并且返回登陆页面*/

@PutMapping(“/resetpwd”)

public String backLogin(@RequestParam(“managername”) String managername1,

@RequestParam(“managerpwd”) String managerpwd1,

Map<String,Object> map){

String managername = managername1.trim();

String managerpwd = managerpwd1.trim();

if (managername != “” && managerpwd != “”){

boolean tel = managerService.checkManagerName(managername);

if(tel == true){

map.put(“msg”,”账号不存在,请重新输入!”);

return “ForgotPassword”;

}else {

int i = managerService.updateUserPwd(managername,managerpwd);

map.put(“msg”,”reset success!”);

if(i>0){

return “redirect:/share.html”;

}else {

return “ForgotPassword”;

}else {

map.put(“msg”,”账号或新密码为空,请输入!”);

return “ForgotPassword”;

@PutMapping(“/resetpwd2”)

public String backLogin2(@RequestParam(“managername”) String managername1,

@RequestParam(“managerpwd”) String managerpwd1,

Map<String,Object> map){

String managername = managername1.trim();

String managerpwd = managerpwd1.trim();

if (managername != “” && managerpwd != “”){

boolean tel = managerService.checkManagerName(managername);

if(tel == true){

map.put(“msg”,”账号不存在,请重新输入!”);

return “ForgotPassword2”;

}else {

int i = managerService.updateUserPwd(managername,managerpwd);

map.put(“msg”,”reset success!”);

if(i>0){

return “redirect:/forgotPwd2”;

}else {

return “ForgotPassword2”;

}else {

map.put(“msg”,”账号或新密码为空,请输入!”);

return “ForgotPassword2”;


项目链接:
https://javayms.github.io?id=541524512608201nx
https://javayms.pages.dev?id=541524512608201nx