学生微信小程序端的主要功能有:
采用B/S模式架构系统,开发简单,只需要连接网络即可登录本系统,不需要安装任何客户端。开发工具采用VSCode,前端采用Vue+ElementUI,后端采用Node.js,数据库采用MySQL。
涉及的技术栈
1) 前台页面:
页面结构布局采用Vue框架,可能会使用到第三方组件库Element-ui或View Design组件库、axios发送请求、html和less语法。
2) 后台服务器:
服务器搭建采用基于node的Express框架快速搭建服务器,需要引入mysql模块进行对数据库的操作
3) 数据库:
mysql数据库,Navicat可视化工具辅助操作数据库
该系统将采用B/S结构模式,开发软件有很多种可以用,本次开发用到的软件是vscode,用到的数据库是MySQL,为了更加便捷地使用数据库,用到了MySQL的可视化工具SQLyog/Navicat。
使用Vue和ElementUI框架搭建前端页面,后端使用Nodejs来搭建服务器,并使用MySQL,通过axios完成前后端的交互
开发语言 node.js
前端:vue.js+ElementUi
数据库:mysql
数据库工具:Navicat/SQLyog都可以
开发运行软件:VScode/webstorm/hbuiderx均可
框架:Express
1.学生注册和登陆系统
2.新生查看报道指南
3.新生查看交通指导
4.新生查看宿舍信息
5.新生查看报到接站信息
6.新生查看军训服装信息
7.新生查看志愿者信息,对志愿者在线咨询
8.可以在线修改个人信息
9.在线申请宿舍
10.新生在线办理一卡通
11.查看缴费信息,在线缴费
志愿者的主要功能有:
1.志愿者登陆系统
2.个人中心:志愿者修改密码和个人信息
3.在线咨询管理:查看新生的咨询信息,对咨询进行回复
4.咨询回复管理:查看对新生的咨询回复
5.退出登陆
管理员的主要功能有:
1.管理员输入账户登陆后台
2.个人中心:管理员修改密码和账户信息
3.志愿者管理:对志愿者信息进行添加,删除,修改,查询
4.学生管理:对注册的学生信息进行添加,修改,删除,查询
5.交通指导管理:对交通指导进行添加,修改,删除,查询
6.宿舍信息管理:对宿舍信息进行添加,修改,删除,查询
7.宿舍申请管理:对学生的宿舍申请信息进行审核
8.在线咨询管理:对学生在线咨询信息进行修改,删除,查询
9.咨询回复管理:对志愿者回复学生的咨询信息进行查看,删除,修改
10.报到接站管理:管理员对报到接站信息进行添加,删除,修改,查询
11.军训服装管理:对军训服装信息进行添加,修改,删除,查询
12.选购服装管理:对新生选购的服装信息进行查看,修改,删除
13.一卡通办理管理:对新生办理的一开通进行审核,删除,修改,查询
14.缴费信息管理:对新生的缴费信息进行查询,修改,删除
15.报到指南管理:对新生报到指南信息进行添加,修改,删除,查询
16.轮播图管理:对系统的轮播图进行添加,修改,删除,查询新生报到系统,
import { version } from '../../package.json'
import { Router } from 'express'
import { Op } from 'sequelize'
import toRes from '../lib/toRes'
import UsersModel from '../models/UsersModel'
import jwt from 'jsonwebtoken'
export default ({ config, db }) => {
let api = Router()
// 用户登录接口
api.post('/login', async (req, res) => {
try {
let userinfo = await UsersModel.findOne({ where: { username: req.query.username, password: req.query.password } })
if (userinfo === null) {
toRes.session(res, -1, '用户名或密码错误!')
return;
}
const token = jwt.sign(
{
id: userinfo.dataValues.id,
username: userinfo.dataValues.username,
role: userinfo.dataValues.role
},
config.jwtSecret,
{
expiresIn: 60 * 60 * 24 * 1
}
)
userinfo.dataValues.token = token
delete userinfo.dataValues.password
req.session.userinfo = userinfo
toRes.session(res, 0, '登录成功!', token)
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 用户退出接口
api.all('/logout', (req, res) => {
if (!toRes.auth(req, res, '管理员')) return
req.session.destroy(err => {
toRes.session(res, 0, '退出成功!')
})
})
// 注册接口
api.post('/register', async (req, res) => {
try {
const userinfo = await UsersModel.create(req.body)
if (userinfo === null) {
toRes.session(res, -1, '注册失败!')
} else {
toRes.session(res, 0, '注册成功!')
}
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 获取session的接口
api.all('/session', async (req, res) => {
try {
if (!toRes.auth(req, res, '管理员')) return
toRes.record(res, 0, await UsersModel.findOne({ where: { id: req.session.userinfo.id } }))
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})
// 分页接口(后端)
api.get('/page', async (req, res) => {
try {
if (!toRes.auth(req, res, '管理员')) return
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 result = await UsersModel.findAndCountAll({
order: [[sort, order]],
offset: (page - 1) * limit,
limit
})
result.currPage = page
result.pageSize = limit
toRes.page(res, 0, result)
} catch(err) {
toRes.session(res, 500, '服务器错误!', '', 500)
}
})