博主主页:猫头鹰源码
博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万+、专注Java技术领域和毕业设计项目实战
主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询
文末联系获取
项目介绍:
本系统适合选题:婚纱、摄影、婚纱摄影、node、vue等。系统采用node+vue整合开发,功能齐全,界面美观。
部分功能:
1.用户管理模块
用户注册与登录:提供用户注册新账号和登录现有账号的功能。
个人资料管理:允许用户编辑和更新他们的个人资料,包括姓名、联系 信息、头像、介绍等。
2.摄影师管理模块
摄影师列表: 展示所有注册的摄影师,包括头像、姓名、作品等。
摄影师个人资料:允许摄影师创建和编辑自己的个人资料。
订单管理与统计:管理员可以查看和管理所有订单,生成报表和统计数据。
3.摄影服务浏览与搜索
摄影作品展示:展示摄影师的作品集,包括照片和描述,以供用户浏览和选择。
搜索与筛选功能:允许用户根据不同标准(例如,价格范围、拍摄风格、摄影师名字等)搜索和筛选摄影师。
价格与服务详情:提供详细的价格信息和服务描述,帮助用户了解摄影师提供的具体服务。
4.预约与下单模块
预约摄影服务:允许用户选择摄影师并选择服务日期、时间等,然后创建预约请求。
下单与支付处理:用户能够确认预约并支付摄影服务费用,通常支持多种支付方式。
加购物车:允许用户将预约的物品加入购物车。
5.评价与反馈模块
用户对摄影师的评价:用户可以给摄影师提供评价和反馈,帮助其他用户做出决策。
评价统计与可视化:平台可以展示摄影师的平均评分和用户评价的可视化统计数据。
6.消息模块
用户间消息通信:用户和用户之间的消息通信功能,以便互相分享评价和经验。
用户与商家消息通信:用户和摄影师之间的消息通信功能,以便进一步协商和沟通。
通过以上工作,本毕业设计旨在研究并实现一款基于Vue.js和Node.js的婚纱摄影服务平台,解决现有市场上的问题,并为用户提供便捷的摄影服务。项目的工作量包括市场研究、系统设计、前后端开发、测试和用户反馈等多个方面,以确保平台的稳定性和用户满意度。
系统包含技术:
后端:nodejs
前端:vue
开发工具:webstorm/vscode
数据库:mysql 5.7
文档:
部分截图说明:
部分代码:
// 分页接口(后端)
api.get('/page', async (req, res) => {
try {
let page = parseInt(req.query.page) || 1
let limit = parseInt(req.query.limit) || 10
let sort = req.query.sort || 'id'
let order = req.query.order || 'asc'
let where = {}
let refid = req.query.refid
if (refid) {
if (refid.indexOf('%') != -1) {
where.refid = {
[Op.like]: refid
}
} else {
where.refid = {
[Op.eq]: refid
}
}
}
let userid = req.query.userid
if (userid) {
if (userid.indexOf('%') != -1) {
where.userid = {
[Op.like]: userid
}
} else {
where.userid = {
[Op.eq]: userid
}
}
}
let avatarurl = req.query.avatarurl
if (avatarurl) {
if (avatarurl.indexOf('%') != -1) {
where.avatarurl = {
[Op.like]: avatarurl
}
} else {
where.avatarurl = {
[Op.eq]: avatarurl
}
}
}
let nickname = req.query.nickname
if (nickname) {
if (nickname.indexOf('%') != -1) {
where.nickname = {
[Op.like]: nickname
}
} else {
where.nickname = {
[Op.eq]: nickname
}
}
}
let content = req.query.content
if (content) {
if (content.indexOf('%') != -1) {
where.content = {
[Op.like]: content
}
} else {
where.content = {
[Op.eq]: content
}
}
}
let reply = req.query.reply
if (reply) {
if (reply.indexOf('%') != -1) {
where.reply = {
[Op.like]: reply
}
} else {
where.reply = {
[Op.eq]: reply
}
}
}
if (jwt.decode(req.headers.token).role != '管理员' && DiscusssheyingzuopinModel.rawAttributes.hasOwnProperty('userid')) {
where.userid = {
[Op.eq]: req.session.userinfo === undefined ? jwt.decode(req.headers.token).id : req.session.userinfo.id
}
}
let result = await DiscusssheyingzuopinModel.findAndCountAll({
order: [[sort, order]],
where,
offset: (page - 1) * limit,
limit
})
result.currPage = page
result.pageSize = limit
toRes.page(res, 0, result)
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 分页接口(前端)
api.get('/list', async (req, res) => {
try {
let page = parseInt(req.query.page) || 1
let limit = parseInt(req.query.limit) || 10
let sort = req.query.sort || 'id'
let order = req.query.order || 'asc'
let where = {}
let refid = req.query.refid
if (refid) {
where.refid = {
[Op.eq]: refid
}
}
let nickname = req.query.nickname
if (nickname) {
if (nickname.indexOf('%') != -1) {
where.nickname = {
[Op.like]: nickname
}
} else {
where.nickname = {
[Op.eq]: nickname
}
}
}
let content = req.query.content
if (content) {
if (content.indexOf('%') != -1) {
where.content = {
[Op.like]: content
}
} else {
where.content = {
[Op.eq]: content
}
}
}
let result = await DiscusssheyingzuopinModel.findAndCountAll({
order: [[sort, order]],
where,
offset: (page - 1) * limit,
limit
})
result.currPage = page
result.pageSize = limit
toRes.page(res, 0, result)
} catch(err) {
toRes.session(res, 401, err.message, '', 200)
}
})
// 保存接口(后端)
api.post('/save', async (req, res) => {
try {
Object.keys(req.body).forEach(item=>{
if(req.body[item] == '') delete req.body[item]
})
if (!req.body.userid) {
req.body.userid = req.session.userinfo === undefined ? jwt.decode(req.headers.token).id : req.session.userinfo.id
}
const userinfo = await DiscusssheyingzuopinModel.create(req.body)
if (userinfo === null) {
toRes.session(res, -1, '添加失败!')
} else {
toRes.session(res, 0, '添加成功!')
}
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 保存接口(前端)
api.post('/add', async (req, res) => {
try {
Object.keys(req.body).forEach(item=>{
if(req.body[item] == '') delete req.body[item]
})
if (jwt.decode(req.headers.token) == null) {
toRes.session(res, 401, '请登录后再操作', '', 401)
}
req.body.userid = req.session.userinfo === undefined ? jwt.decode(req.headers.token).id : req.session.userinfo.id
const userinfo = await DiscusssheyingzuopinModel.create(req.body)
if (userinfo === null) {
toRes.session(res, -1, '添加失败!')
} else {
toRes.session(res, 0, '添加成功!')
}
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
以上就是部分功能展示,从整体上来看,本系统功能是十分完整的,界面设计简洁大方,交互友好,数据库设计也很合理,规模适中,代码工整,清晰,适合学习使用。
好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,下期见~