角色:超级管理员,系统管理员,支教学校,志愿者
前端:(bootstrap实现)
1、实现支教学校和志愿者的注册模块
1.1 实现支教学校的注册,不能重复注册,一所学校只能注册一次,学校责任人姓名,学校责任人手机号码作为唯一验证,校名,密码,地区(详细地址),学校简介(非必填),上传学校图片作为头像
1.2 实现志愿者的注册,以身份证号和手机号作为唯一性验证,身份证号或者手机号都要检验,上传志愿者图片作为头像
1.3 密码不能为空
2.登录模块
2.1实现支教学校和志愿者登录成功后进入各自的界面,如支教学校管理界面以及志愿者管理界面(两个登录界面入口,一个为支教学校,一个为志愿者,验证码登录)
2、实现支教学校登录后的个人管理界面的功能
支教学校管理界面的功能清单,比如修改资料,发布职位,已发布职位,联系管理员
1.修改资料模块,实现支教学校修改学校资料功能,比如(校名,密码 (原密码,新密码,确认密码),详细地址,学校责任人和学校责任人号码不能修改,需要联系管理员进行修改,学校头像,学校简介等)
2.发布职位模块,实现支教学校发布支教职位的功能,比如支教学校想要什么类型的老师,要多少人,什么时间到学校进行支教,设置多少服务时长,支教学校联系人以及联系方式,以及备注(提供住宿之类的),发布该职位的时间,然后在发布到首页上让志愿者进行报名,
- 已发布职位模块,可以修改以及取消已发布的职位信息,显示报名该职位的志愿者,实现支教学校对于志愿者评价的功能(在已发布的列表中,加一个按钮,查看报名信息,会出现一组报名列表。并且在发布的职位列表中,再加一个 结束招聘的 按钮,当结束招聘时,可以给参加招聘的老师,进行评价,在老师的个人中心 我的评价中,直接显示列表,不用做查询。
同时,点击 结束招聘时,要将该职位的 服务时长 ,都加入给报名的老师,服务时长字段中。)
-
联系管理员模块,联系后台的管理员,类似于留言功能
(留言就是两个输入框,一个是留言主题,一个是留言内容,支教学校不需要看到自己的留言,只要管理员看到就可以。)
3、实现志愿者登录后的个人空间管理功能
个人空间管理界面的功能清单,比如修改资料,参与职位,我的评价,我的支教服务时长
1.修改资料模块,实现志愿者修改个人资料功能,比如(姓名,密码 (原密码,新密码,确认密码),个人号码,身份证号,个人头像,个人简介等)
2.参与职位模块,可以进行模糊查询,比如根据学校名称查询,可以显示志愿者参与的支教活动的详细信息,(已经报名参加的)
3我的评价模块(列表展示 支教学校对自己的评价。)
4 我的支教服务时长,显示该志愿者总的支教服务时长
4、实现前端首页的内容展示(未登录以游客身份浏览首页,首页以同类的志愿者网站作为参考即可,访问限制。不能通过修改url直接访问到登录后的管理界面,)
4.1 实现志愿者和支教学校注册登录的入口
4.2 首页轮播图,由后台系统进行更换(图片、链接、简介。点击图片跳转到链接。)
4.3 首页有按最新发布时间的职位信息
4.4 实现志愿者报名支教学校的界面,显示支教学校的基本信息以及该职位的详细信息,未登录用户点击报名提示未登录,不能报名,跳转至登录页面,若登录,参与人数未满,则提示报名成功,否则提示参与人数已满(需要提示志愿者报名成功后,无法取消比如报名后无法取消哦,这样的话)
4.5 实现志愿者搜索职位的功能,根据支教学校,发布职位来查询
4.9首页展示志愿者总服务时长排名,比如前五名服务时长最多的志愿者
(点击某一用户,实现志愿者的基本信息界面,比如志愿者头像,个人简介,以及参与过的支教活动,以及学校对志愿者的评价,总服务时长等,可以给其他志愿者查看
)
后台:
5、后台管理员的注册登录模块
5.1 实现管理员的注册
(包括:用户名、密码、身份、姓名、手机号,手机号为唯一验证;数据库已存在的用户名不可用:点击注册按钮时提示用户名已存在;,如果输入已注册的用户名则会在用户输入框后提示用户名已存在,请输入其他用户名;,填写符合要求则提示注册成功并且自动跳转到后台管理首页)
5.2 实现已有管理员用户的账号密码登录
(登录错误提示相应信息:如账号不存在或密码错误,登录成功则进入后台管理界面并有相应的登录用户信息显示:如下图)
5.4实现未登录用户的访问限制
(未登录用户无法通过直接修改URL地址访问后台管理界面)
5.5实现已登录管理员用户的注销功能(即退出,点击注销按钮,注销已登录用户,提示用户已注销,并自动跳转到后台登录页面)
5.6实现管理员用户的权限分配(权限分配只能由超级管理员进行操作)
(登录角色有两个:超级管理员和系统管理员,在管理员账号管理方面只由超级管理员进行添加,无法通过注册的系统管理员进行管理员身份获取)
5.7实现管理员个人信息与密码的修改功能(管理员账号(即用户名)信息无法修改,类似下图
6、实现后台数据管理模块
6.1管理员用户管理模块{增(通过注册的管理员是系统管理员权限,无法进行添加、删除超级管理员等操作)删改}
6.2角色管理模块(只能由超级管理员进行权限分配操作,类似下图)
6.3志愿者信息管理模块(与前端志愿者个人空间管理相关联的表)
志愿者信息管理(修改,删除,根据名称查询,)
6.4支教学校信息管理(与前端支教学校个人管理相关联的表)
支教学校信息管理 (删除,修改,根据名称查询)
7、实现数据库统计查询模块功能
在后台首页 显示:注册学校数量,注册老师数量,注册管理员数量。职位发布数量。
8.职位管理(对职位增删该查,支教管理员发布职位的时候,下拉框选择)
9、实现后台数据表的导入导出功能模块
实现管理员的导入,导入不做校验,在6.3 和6.4 的志愿者和 支教信息管理里面,加两个导出按钮,分别导出,志愿者和 支教信息管理的数据。
![在这里插入图片描述](https://img-blog.csdnimg.cn/d3fcd2a78dc34825a8050ff358150e23.png#pic_center)
package com.sys.lawyer.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.sys.lawyer.base.BaseController;
import com.sys.lawyer.po.Evaluate;
import com.sys.lawyer.po.Message;
import com.sys.lawyer.po.Releases;
import com.sys.lawyer.po.Users;
import com.sys.lawyer.service.*;
import com.sys.lawyer.utils.Pager;
import com.sys.lawyer.vo.EvaluateVo;
import jdk.nashorn.internal.ir.IfNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("/message")
public class MessageController extends BaseController {
/**
* 依赖注入 start dao/service/===
*/
@Autowired
private UsersService usersService;
@Autowired
private EvaluateService evaluateService;
@Autowired
private MessageService messageService;
@RequestMapping(value = "listAll.json")
@ResponseBody
public String listAll(Integer userId, Integer pageIndex, Integer pageSize) {
Message message = new Message();
message.setUserId(userId);
// Pager<Message> pagers = messageService.findByEntity(message);
PageHelper.startPage(notEmpty(pageIndex) ? pageIndex : 0, 15);
PageInfo<Message> page = new PageInfo<>(messageService.listAllByEntity(message));
for (Message m : page.getList()){
m.setUsers(usersService.getById(m.getUserId()));
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("page", page);
return jsonObject.toJSONString();
}
@RequestMapping(value = "userlist.json")
@ResponseBody
public String userlist(Users users) {
users.setIsDelete(0);
List<Users> list = usersService.listAllByEntity(users);
JSONObject jsonObject = new JSONObject();
jsonObject.put("list", list);
return jsonObject.toJSONString();
}
@RequestMapping(value = "list.do")
public String list(Model model) {
return "message/list";
}
@RequestMapping(value = "delete.json")
@ResponseBody
public String delete(Integer id) {
Users users = usersService.getUser();
JSONObject jsonObject = new JSONObject();
if (users.getRole() == 0 || users.getRole() == 1){
messageService.deleteById(id);
jsonObject.put("flag", true);
jsonObject.put("message", "删除成功");
} else {
jsonObject.put("flag", false);
jsonObject.put("message", "本账号无权限删除操作");
}
return jsonObject.toJSONString();
}
}
package com.sys.lawyer.controller;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.sys.lawyer.base.BaseController;
import com.sys.lawyer.po.Releases;
import com.sys.lawyer.po.Users;
import com.sys.lawyer.service.UsersService;
import com.sys.lawyer.utils.Base64Img;
import com.sys.lawyer.utils.Pager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.util.List;
@Controller
@RequestMapping(“/users”)
public class UsersController extends BaseController {
/**
* 依赖注入 start dao/service/===
*/
@Autowired
private UsersService usersService;
/**
* 【不分页 => 查询列表 => 无条件】
* @Title: listAll
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @return 设定文件
* @author
* @return String 返回类型
* @throws
*/
@RequestMapping(value = "/listAll.json")
@ResponseBody
public String listAll(Users users, Integer pageIndex){
PageHelper.startPage(notEmpty(pageIndex) ? pageIndex : 0, 15);
Pager<Users> pagers = usersService.findByEntity(users);
JSONObject jsonObject = new JSONObject();
jsonObject.put("page", pagers);
return jsonObject.toJSONString();
}
@RequestMapping(value = "getUser.json")
@ResponseBody
public String getUser(){
JSONObject jsonObject = new JSONObject();
if (notEmpty(usersService.getUser())){
jsonObject.put("user", false);
} else {
jsonObject.put("user", false);
}
return jsonObject.toJSONString();
}
@RequestMapping(value = "list.do")
public String list(Integer role, Model model){
model.addAttribute("role", role);
model.addAttribute("user", new JSONObject().toJSONString(usersService.getUser()));
return "users/list";
}
/**
* 【不分页=》查询列表=>有条件】
* @Title: listByEntity
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @return 设定文件
* @author
* @return String 返回类型
* @throws
*/
@RequestMapping(value = "/listByEntity")
public String listByEntity(Users users, Model model, HttpServletRequest request, HttpServletResponse response){
List<Users> listAll = usersService.listAllByEntity(users);
model.addAttribute("list", listAll);
return "users/list";
}
@RequestMapping(value = "edit.do")
@ResponseBody
public String edit(Users users){
Users users1 = usersService.getByEntity(users);
JSONObject jsonObject = new JSONObject();
jsonObject.put("bean", users1);
return jsonObject.toJSONString();
}
@RequestMapping(value = "grxx.do")
@ResponseBody
public String grxx(){
Users users1 = usersService.getUser();
JSONObject jsonObject = new JSONObject();
jsonObject.put("bean", users1);
return jsonObject.toJSONString();
}
/**
* 分页查询 返回list对象(通过对象)
*
* @return
*/
@RequestMapping(value = "/findByObj")
public String findByObj(Users users, Model model) {
//分页查询
Pager<Users> pagers = usersService.findByEntity(users);
model.addAttribute("pagers", pagers);
//存储查询条件
model.addAttribute("bean", users);
return "users/list";
}
/**
* 跳至添加页面
* @return
*/
@RequestMapping(value = "/add")
public String add() {
return "users/addexcl";
}
@RequestMapping(value = "/zc")
public String zc() {
return "users/add";
}
@RequestMapping(value = "importExcl.do")
public String importExcl() {
return "users/addexcl";
}
@RequestMapping(value = "/importsave.json")
@ResponseBody
public String importsave(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request) {
JSONObject jsonObject = new JSONObject();
boolean flag = false;
if (notEmpty(file)){
flag = usersService.importsave(file);
}
jsonObject.put("message", flag ? "提交成功" : "登录名重复或其他数据异常");
jsonObject.put("flag", flag);
return jsonObject.toJSONString();
}
@RequestMapping(value = "/reportExcl.do")
public void reportExcl(Users users, HttpServletResponse response) {
usersService.reportExcl(users, response);
}
/**
* 添加执行
* @return
*/
@RequestMapping(value = "/exAdd")
public String exAdd(Users users, @RequestParam(value = "file", required = false) MultipartFile file, String openid) throws IOException {
if (file.getSize() > 0){
String str = Base64Img.getImgStr(file.getInputStream());
String type = file.getContentType();
users.setPhoto("data:" + type + ";base64," + str);
}
usersService.insert(users);
return "redirect:/users/findByObj";
}
@RequestMapping(value = "/update.json")
@ResponseBody
public String update(Users users, @RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request) {
JSONObject jsonObject = new JSONObject();
Users user = usersService.getUser();
Users users1 = usersService.getById(user.getId());
if (user.getRole() == 1 || user.getRole() == 0){
if (notEmpty(users)){
if (notEmpty(users.getId())){
if (notEmpty(file)){
users.setPhoto("/resource/upload/" + saveFile(file, request));
}
users.setIsDelete(0);
usersService.updateById(users);
if (user.getId() == users.getId()){
request.getSession().setAttribute("user", usersService.getById(users.getId()));
}
}
jsonObject.put("message", "提交成功");
jsonObject.put("flag", true);
}
} else if ((user.getRole() > 1) || (notEmpty(users1) && user.getRole() == 1 && users1.getRole() == 0)){
jsonObject.put("message", "权限不足");
jsonObject.put("flag", false);
}
return jsonObject.toJSONString();
}
@RequestMapping(value = "/updateGrxx.json")
@ResponseBody
public String updateGrxx(Users users, @RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request) {
JSONObject jsonObject = new JSONObject();
if (notEmpty(users)){
if (notEmpty(users.getId())){
if (notEmpty(file)){
users.setPhoto("/resource/upload/" + saveFile(file, request));
}
users.setIsDelete(0);
usersService.updateById(users);
request.getSession().setAttribute("user", usersService.getById(users.getId()));
}
jsonObject.put("message", "修改成功");
jsonObject.put("flag", true);
}
return jsonObject.toJSONString();
}
@RequestMapping(value = "/save.json")
@ResponseBody
public String save(Users users, @RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request) {
JSONObject jsonObject = new JSONObject();
Users user = usersService.getUser();
Users users1 = new Users();
if (user.getRole() == 1 || user.getRole() == 0){
if (notEmpty(users)){
users1.setName(users.getName());
users1 = usersService.getByEntity(users1);
if (notEmpty(users1)){
jsonObject.put("message", "登录名重复");
jsonObject.put("flag", false);
} else {
users.setPhoto("/resource/upload/" + saveFile(file, request));
users.setIsDelete(0);
if (notEmpty(users.getId())){
usersService.update(users);
} else {
usersService.insert(users);
}
// request.getSession().setAttribute(“user”, users);
jsonObject.put(“message”, “提交成功”);
jsonObject.put(“flag”, true);
}
}
} else {
jsonObject.put(“message”, “权限不足”);
jsonObject.put(“flag”, false);
}
return jsonObject.toJSONString();
}
/**
* 删除通过主键
* @return
*/
@RequestMapping(value = "delete.json")
@ResponseBody
public String delete(Integer id) {
Users users = usersService.getUser();
Users users2 = usersService.getById(id);
JSONObject jsonObject = new JSONObject();
if (users.getRole() == 0 || users.getRole() == 1){
if (users.getId() == id){
jsonObject.put("flag", false);
jsonObject.put("message", "不能删除自己");
} else if (users.getRole() ==1 && users2.getRole() == 0){
jsonObject.put("flag", false);
jsonObject.put("message", "不能删除超级管理员");
} else {
usersService.deleteById(id);
jsonObject.put("flag", true);
jsonObject.put("message", "删除成功");
}
} else {
jsonObject.put("flag", false);
jsonObject.put("message", "本账号无权限删除用户");
}
return jsonObject.toJSONString();
}
@RequestMapping(value = "sh.json")
@ResponseBody
public String sh(Integer id) {
JSONObject jsonObject = new JSONObject();
Users users = usersService.getById(id);
users.setIsSh(1);
usersService.updateById(users);
jsonObject.put("flag", true);
jsonObject.put("message", "审核成功");
return jsonObject.toJSONString();
}
/**
* 【不分页 => 查询列表 => 无条件】
* @Title: listAll
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @return 设定文件
* @author
* @return String 返回类型
* @throws
*/
@RequestMapping(value = "/listAllJson", method = RequestMethod.POST)
@ResponseBody
public String listAllJson(Users users, HttpServletRequest request, HttpServletResponse response){
List<Users> listAll = usersService.listAll();
JSONObject jsonObject = new JSONObject();
jsonObject.put("list", listAll);
jsonObject.put("obj", users);
return jsonObject.toString();
}
/**
* ajax 添加
* @param
* @return
*/
@RequestMapping(value = "/exAddJson", method = RequestMethod.POST)
@ResponseBody
public String exAddJson(Users users, HttpServletRequest request, HttpServletResponse response) {
usersService.insert(users);
JSONObject jsonObject = new JSONObject();
jsonObject.put("message", "添加成功");
return jsonObject.toString();
}
/**
* ajax 修改
* @param
* @return
*/
@RequestMapping(value = "/exUpdate.json", method = RequestMethod.POST)
@ResponseBody
public String exUpdateJson(Users users, Model model, HttpServletRequest request, HttpServletResponse response) {
//1.通过实体类修改,可以多传修改条件
usersService.update(users);
//2.通过主键id修改
//usersService.updateById(users);
JSONObject jsonObject = new JSONObject();
jsonObject.put("message", "修改成功");
return jsonObject.toString();
}
@RequestMapping(value = "loginOut.do")
public String loginOut(HttpServletRequest request){
request.getSession().removeAttribute("user");
return "redirect:/web/index.do";
}
public String saveFile(@RequestParam(value = "file", required = false) MultipartFile files, HttpServletRequest request) {
String filePath = "";
String fileNmae = "";
if (notEmpty(files)) {
int pre = (int) System.currentTimeMillis();
try {
filePath = request.getRealPath("/resource/upload/");
File f = new File(filePath);
if (!f.exists()) {
f.mkdirs();
}
fileNmae = pre + files.getOriginalFilename().replaceAll(" ", "").replace("(", "").replace(")", "");
File file = new File(filePath + fileNmae);
if (!file.exists()) {
file.createNewFile();
}
files.transferTo(file);
} catch (Exception e) {
e.printStackTrace();
System.out.println("上传出错");
}
}
return fileNmae;
}
}
获取完整源码:
大家点赞、收藏、关注、评论啦 、查看 👇🏻 👇🏻 👇🏻微信公众号获取联系 👇🏻 👇🏻 👇🏻
免费领取下载链接-公众号输入口令:045