角色:超级管理员,系统管理员,支教学校,志愿者
前端:(bootstrap实现)
1、实现支教学校和志愿者的注册模块
1.1 实现支教学校的注册,不能重复注册,一所学校只能注册一次,学校责任人姓名,学校责任人手机号码作为唯一验证,校名,密码,地区(详细地址),学校简介(非必填),上传学校图片作为头像
1.2 实现志愿者的注册,以身份证号和手机号作为唯一性验证,身份证号或者手机号都要检验,上传志愿者图片作为头像
1.3 密码不能为空
2.登录模块
2.1实现支教学校和志愿者登录成功后进入各自的界面,如支教学校管理界面以及志愿者管理界面(两个登录界面入口,一个为支教学校,一个为志愿者,验证码登录)
2、实现支教学校登录后的个人管理界面的功能
支教学校管理界面的功能清单,比如修改资料,发布职位,已发布职位,联系管理员
1.修改资料模块,实现支教学校修改学校资料功能,比如(校名,密码 (原密码,新密码,确认密码),详细地址,学校责任人和学校责任人号码不能修改,需要联系管理员进行修改,学校头像,学校简介等)
2.发布职位模块,实现支教学校发布支教职位的功能,比如支教学校想要什么类型的老师,要多少人,什么时间到学校进行支教,设置多少服务时长,支教学校联系人以及联系方式,以及备注(提供住宿之类的),发布该职位的时间,然后在发布到首页上让志愿者进行报名,
3. 已发布职位模块,可以修改以及取消已发布的职位信息,显示报名该职位的志愿者,实现支教学校对于志愿者评价的功能(在已发布的列表中,加一个按钮,查看报名信息,会出现一组报名列表。并且在发布的职位列表中,再加一个 结束招聘的 按钮,当结束招聘时,可以给参加招聘的老师,进行评价,在老师的个人中心 我的评价中,直接显示列表,不用做查询。
同时,点击 结束招聘时,要将该职位的 服务时长 ,都加入给报名的老师,服务时长字段中。)
4. 联系管理员模块,联系后台的管理员,类似于留言功能
(留言就是两个输入框,一个是留言主题,一个是留言内容,支教学校不需要看到自己的留言,只要管理员看到就可以。)
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 的志愿者和 支教信息管理里面,加两个导出按钮,分别导出,志愿者和 支教信息管理的数据。
前端截图:
后台截图:
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.sys.lawyer.base.BaseController;
import com.sys.lawyer.po.Apply;
import com.sys.lawyer.po.Releases;
import com.sys.lawyer.po.Users;
import com.sys.lawyer.service.ApplyService;
import com.sys.lawyer.service.ReleasesService;
import com.sys.lawyer.service.TypeService;
import com.sys.lawyer.service.UsersService;
import com.sys.lawyer.utils.Pager;
import com.sys.lawyer.vo.ApplyVo;
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.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("apply")
public class ApplyController extends BaseController {
/**
* 依赖注入 start dao/service/===
*/
@Autowired
private UsersService usersService;
@Autowired
private ReleasesService releasesService;
@Autowired
private ApplyService applyService;
@Autowired
private TypeService typeService;
@RequestMapping(value = "ybmlist.json")
@ResponseBody
public String ybmlist(Apply apply, Integer pageIndex, Integer pageSize) {
JSONObject jsonObject = new JSONObject();
Users users = usersService.getUser();
if (empty(users)) {
jsonObject.put("flag", false);
jsonObject.put("message", "请登录");
} else {
PageHelper.startPage(notEmpty(pageIndex) ? pageIndex : 0, 15);
Pager<Apply> pagers = applyService.findByEntity(apply);
List<Apply> list = pagers.getDatas();
List<Releases> releases1 = releasesService.listAll();
List<Apply> list2 = new ArrayList<>();
for (Apply app : list) {
for (Releases releases2 : releases1) {
if (releases2.getId() == app.getReleaseId()) {
String name = typeService.getById(releases2.getTypeId()).getName();
app.setTypeName(name);
app.setSbrName(usersService.getById(app.getSqr()).getRealName());
app.setReleases(releases2);
list2.add(app);
}
}
}
jsonObject.put("list", list2);
jsonObject.put("page", pagers);
}
return JSON.toJSONStringWithDateFormat(jsonObject, "yyyy-MM-dd HH:mm:ss", SerializerFeature.DisableCircularReferenceDetect);
}
@RequestMapping(value = "list.do")
public String list() {
return "apply/list";
}
@RequestMapping(value = "isSh.json")
@ResponseBody
public String isSh(Integer id) {
Apply apply = applyService.getById(id);
Releases releases = releasesService.getById(apply.getReleaseId());
apply.setIsDelete(1);
applyService.updateById(apply);
releases.setSyrs(releases.getSyrs() - 1);
releasesService.updateById(releases);
JSONObject jsonObject = new JSONObject();
jsonObject.put("flag", true);
jsonObject.put("message", "审核成功");
return jsonObject.toJSONString();
}
@RequestMapping(value = "isDsj.json")
@ResponseBody
public String isDsj(Integer usersId) {
Apply apply = new Apply();
apply.setSqr(usersId);
apply.setIsDelete(1);
List<Apply> list = applyService.listAllByEntity(apply);
List<ApplyVo> applyVos = new ArrayList<>();
for (Apply apply1 : list){
ApplyVo applyVo = new ApplyVo();
applyVo.setApply(apply1);
applyVo.setUsers(usersService.getById(apply1.getSqr()));
Releases releases = releasesService.getById(apply1.getReleaseId());
applyVo.setReleases(releases);
applyVo.setZjr(usersService.getById(releases.getUsersId()));
applyVo.setType(typeService.getById(releases.getTypeId()));
applyVos.add(applyVo);
}
JSONObject jsonObject = new JSONObject();
jsonObject.put("flag", true);
jsonObject.put("message", "审核成功");
jsonObject.put("list", applyVos);
return JSON.toJSONStringWithDateFormat(jsonObject, "yyyy-MM-dd HH:mm:ss", SerializerFeature.DisableCircularReferenceDetect);
}
@RequestMapping(value = "isDsjlist.do")
public String isDsjlist() {
return "apply/sjlist";
}
}
package com.sys.lawyer.controller;
import com.alibaba.fastjson.JSONObject;
import com.sys.lawyer.base.BaseController;
import com.sys.lawyer.po.Releases;
import com.sys.lawyer.po.Users;
import com.sys.lawyer.service.ReleasesService;
import com.sys.lawyer.service.UsersService;
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.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/")
public class LoginController extends BaseController {
/**
* 依赖注入 start dao/service/===
*/
@Autowired
private UsersService usersService;
@Autowired
private ReleasesService releasesService;
/**
* 【不分页=》查询列表=>有条件】
* @Title: listByEntity
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param @return 设定文件
* @author
* @return String 返回类型
* @throws
*/private static Map<String, String> map = new HashMap<>();
@RequestMapping(value = "/login.json", method = RequestMethod.POST)
@ResponseBody
public String login(Users users, String captcha, HttpServletRequest request) {
JSONObject jsonObject = new JSONObject();
String code = (String) request.getSession().getAttribute("randomString");
if (empty(captcha) || !code.toLowerCase().equals(captcha.toLowerCase())) {
jsonObject.put("message", "验证码错误");
jsonObject.put("flag", false);
return jsonObject.toJSONString();
}if (notEmpty(users)) {
users.setPhone(null);
Users users1 = usersService.getByEntity(users);
if (notEmpty(users1)) {
if (users1.getRole() > 1){
jsonObject.put("message", "权限不足不能登录后台管理");
jsonObject.put("flag", false);
return jsonObject.toJSONString();
}
jsonObject.put("flag", true);
jsonObject.put("message", "登录成功");
request.getSession().setAttribute("user", users1);
} else {
jsonObject.put("message", "用户信息错误");
}
}
return jsonObject.toJSONString();
}@RequestMapping(value = "indexs.do")
public String indexs(){
Users users = usersService.getUser();
if (empty(users)){
return "login";
}
return "indexs";
}@RequestMapping(value = "/")
public String toLogin(){
Users users = usersService.getUser();
if (empty(users)){
return "login";
}
return "indexs";
}@RequestMapping(value = "open.do")
public String open(Model model){
Users users = usersService.getUser();
if (empty(users)){
return "login";
}
Users users1 = new Users();
users1.setIsDelete(0);
List<Users> usersList = usersService.listAllByEntity(users1);
List<Releases> releasesList = releasesService.listAll();
Integer xx = 0;
Integer ls = 0;
Integer gly = 0;
for (Users u : usersList){
if (u.getRole() == 0 || u.getRole() == 1){
gly += 1;
} else if (u.getRole() == 3){
ls += 1;
} else if (u.getRole() == 2){
xx += 1;
}
}
model.addAttribute("gly", gly);
model.addAttribute("xx", xx);
model.addAttribute("ls", ls);
model.addAttribute("zw", releasesList.size());
return "open";
}@RequestMapping(value = "/login.do")
public String login(){
Users users = usersService.getUser();
if (empty(users)){
return "login";
}
return "indexs";
}@RequestMapping(value = "loginOut")
public String loginOut(HttpServletRequest request){
request.getSession().removeAttribute("user");
return "login";
}
}
获取完整源码:
大家点赞、收藏、关注、评论啦 、查看 👇🏻 👇🏻 👇🏻微信公众号获取联系 👇🏻 👇🏻 👇🏻
免费领取下载链接-公众号输入口令:045