目录
一、项目介绍
技术路线
开发语言:Java、小程序
前端技术:JavaScript、VUE.js(2.X)、css3
后端框架:ssm
JDK版本:JDK1.8
服务器:tomcat9
数据库:mysql 5.7
数据库工具:Navicat11
开发软件:eclipse/myeclipse/idea
浏览器:谷歌浏览器
小程序运行软件:微信开发者
下面是资料信息截图:
二、文档介绍
主要功能:
用户:
(1)登录与注册:用户在使用时可以进行登录,若没有账号,则必须先注册账号,用户将自己的个人信息添加到数据库后才能及进行登录操作。
(2)查看商家:用户登陆后,可在前台查看商家详细信息。
(3)查看并修改个人信息:用户登录便捷网住宿预约系统后,不仅可以在前端的个人中心页面查看用户上传到数据库的详细情况,还可以通过系统后端个人信息页面来查看自己的上传的详细内容,但是对个人详细情况的更正只能在后端才能进行。
(4)查看订单:用户需要先在前端页面选择房间并提交预定请求,然后通过后台管理进入后端页面,最后通过房间预订界面查看自己的订单详情,包括预定编号、用户姓名、用户手机号和房间价格及商家地址等信息。
商家功能模块设计
>
(1)登录与注册:商家在使用便捷网住宿预约系统时,必须先注册账号,将自己的详细信息添加到后台的数据库,注册完成后才能实现登录功能。
(2)管理房间信息:商家登录便捷网住宿预约系统后,可在进入到后端页面,通过房间信息管理页面进行对房间信息增删改查的操作。
(3)查看并修改个人信息:商家登录便捷网住宿预约系统后,会直接进入到后端管理页面,商家可以在后端通过个人信息页面查看自己的个人信息,也可以在该页面对错误信息进行手动修改,在修改后上传数据库并进行保存。
(4)查看订单:商家可以在后端页面,通过订单管理页面查看订单详情,包括订单编号、房间名称和用户名称等信息。
(5)查看并发表评论:商家可在房间信息页面查看用户的评论,也可以通过后端在房间信息页面查看,并在该页面回复用户的评论,以实现用户与商家的互动。
管理员功能模块设计
(1)登录:管理员只能登录,不能注册,以保证系统的安全性。
(2)管理商家信息:管理员在登陆便捷网住宿预约系统后,可以在后台页面,通过商家管理页面,查看所有在该系统注册过的商家的详细情况,并在该页面实现对需要更正的商家信息的进行更正,对违反规则的商家进行注销惩罚。
(3)管理用户信息:管理员在登陆便捷网住宿预约系统后,会直接进入后台管理页面,通过用户管理页面,管理员可以查看所有在该系统注册过的用户的详细情况,并对需要更正的用户信息进行更改,确保数据库信息与用户本人信息一致。管理员也可以对违规用户进行注销惩罚处理。
(4)管理评论:管理员可以通过房间详情页面,查看用户对房间有关入住体验的感受,和对商家进一步改善房间设施的建议。管理员也可以对其他方面有意义的提问进行回答,并清除违规的评论。
(5)管理订单:管理员在登陆便捷网住宿预约系统后,可以在后台通过房间预订页面,查看所有订单的详细信息。管理员也可以在该页面实现对无效的或老旧的订单的清除处理。
三、部分代码
<template>
<div>
<el-form
class="detail-form-content"
ref="ruleForm"
:model="ruleForm"
label-width="80px"
>
<el-row>
<el-col :span="12">
<el-form-item v-if="flag=='huiyuan'" label="会员账号" prop="huiyuanzhanghao">
<el-input v-model="ruleForm.huiyuanzhanghao" readonly placeholder="会员账号" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="flag=='huiyuan'" label="会员姓名" prop="huiyuanxingming">
<el-input v-model="ruleForm.huiyuanxingming" placeholder="会员姓名" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="flag=='huiyuan'" label="身份证" prop="shenfenzheng">
<el-input v-model="ruleForm.shenfenzheng" placeholder="身份证" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="flag=='huiyuan'" label="性别" prop="xingbie">
<el-select v-model="ruleForm.xingbie" placeholder="请选择性别">
<el-option
v-for="(item,index) in huiyuanxingbieOptions"
v-bind:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item v-if="flag=='huiyuan'" label="头像" prop="touxiang">
<file-upload
tip="点击上传头像"
action="file/upload"
:limit="3"
:multiple="true"
:fileUrls="ruleForm.touxiang?ruleForm.touxiang:''"
@change="huiyuantouxiangUploadChange"
></file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="flag=='huiyuan'" label="手机" prop="shouji">
<el-input v-model="ruleForm.shouji" placeholder="手机" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="flag=='yuangong'" label="工号" prop="gonghao">
<el-input v-model="ruleForm.gonghao" readonly placeholder="工号" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="flag=='yuangong'" label="员工姓名" prop="yuangongxingming">
<el-input v-model="ruleForm.yuangongxingming" placeholder="员工姓名" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="flag=='yuangong'" label="性别" prop="xingbie">
<el-select v-model="ruleForm.xingbie" placeholder="请选择性别">
<el-option
v-for="(item,index) in yuangongxingbieOptions"
v-bind:key="index"
:label="item"
:value="item">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item v-if="flag=='yuangong'" label="头像" prop="touxiang">
<file-upload
tip="点击上传头像"
action="file/upload"
:limit="3"
:multiple="true"
:fileUrls="ruleForm.touxiang?ruleForm.touxiang:''"
@change="yuangongtouxiangUploadChange"
></file-upload>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="flag=='yuangong'" label="手机" prop="shouji">
<el-input v-model="ruleForm.shouji" placeholder="手机" clearable></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item v-if="flag=='yuangong'" label="邮箱" prop="youxiang">
<el-input v-model="ruleForm.youxiang" placeholder="邮箱" clearable></el-input>
</el-form-item>
</el-col>
<el-form-item v-if="flag=='users'" label="用户名" prop="username">
<el-input v-model="ruleForm.username"
placeholder="用户名"></el-input>
</el-form-item>
<el-col :span="24">
<el-form-item>
<el-button type="primary" @click="onUpdateHandler">修 改</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</template>
<script>
// 数字,邮件,手机,url,身份证校验
import { isNumber,isIntNumer,isEmail,isMobile,isPhone,isURL,checkIdCard } from "@/utils/validate";
export default {
data() {
return {
ruleForm: {},
flag: '',
usersFlag: false,
huiyuanxingbieOptions: [],
yuangongxingbieOptions: [],
};
},
mounted() {
var table = this.$storage.get("sessionTable");
this.flag = table;
this.$http({
url: `${this.$storage.get("sessionTable")}/session`,
method: "get"
}).then(({ data }) => {
if (data && data.code === 0) {
this.ruleForm = data.data;
} else {
this.$message.error(data.msg);
}
});
this.huiyuanxingbieOptions = "男,女".split(',')
this.yuangongxingbieOptions = "男,女".split(',')
},
methods: {
huiyuantouxiangUploadChange(fileUrls) {
this.ruleForm.touxiang = fileUrls;
},
yuangongtouxiangUploadChange(fileUrls) {
this.ruleForm.touxiang = fileUrls;
},
onUpdateHandler() {
if((!this.ruleForm.huiyuanzhanghao)&& 'huiyuan'==this.flag){
this.$message.error('会员账号不能为空');
return
}
if((!this.ruleForm.mima)&& 'huiyuan'==this.flag){
this.$message.error('密码不能为空');
return
}
if( 'huiyuan' ==this.flag && this.ruleForm.shenfenzheng&&(!checkIdCard(this.ruleForm.shenfenzheng))){
this.$message.error(`身份证应输入身份证格式`);
return
}
if( 'huiyuan' ==this.flag && this.ruleForm.shouji&&(!isMobile(this.ruleForm.shouji))){
this.$message.error(`手机应输入手机格式`);
return
}
if((!this.ruleForm.gonghao)&& 'yuangong'==this.flag){
this.$message.error('工号不能为空');
return
}
if((!this.ruleForm.mima)&& 'yuangong'==this.flag){
this.$message.error('密码不能为空');
return
}
if((!this.ruleForm.yuangongxingming)&& 'yuangong'==this.flag){
this.$message.error('员工姓名不能为空');
return
}
if( 'yuangong' ==this.flag && this.ruleForm.shouji&&(!isMobile(this.ruleForm.shouji))){
this.$message.error(`手机应输入手机格式`);
return
}
if( 'yuangong' ==this.flag && this.ruleForm.youxiang&&(!isEmail(this.ruleForm.youxiang))){
this.$message.error(`邮箱应输入邮箱格式`);
return
}
if('users'==this.flag && this.ruleForm.username.trim().length<1) {
this.$message.error(`用户名不能为空`);
return
}
this.$http({
url: `${this.$storage.get("sessionTable")}/update`,
method: "post",
data: this.ruleForm
}).then(({ data }) => {
if (data && data.code === 0) {
this.$message({
message: "修改信息成功",
type: "success",
duration: 1500,
onClose: () => {
}
});
} else {
this.$message.error(data.msg);
}
});
}
}
};
</script>
<style lang="scss" scoped>
</style>