项目:问卷调查—人事管理系统

  • 项目功能框架:
  • 项目前后台功能展示:
  • 项目整体框架:
  • 配置、用户、部门、问卷主要代码部分:
    • pom.xml:
    • db.properties:
    • mybatis-config.xml:
    • spring-mvc.xml:
    • spring-mybatis.xml:
    • User :
    • Dept:
    • Questionnaire :
    • CommonResult:
    • UserMapper:
    • DeptMapper :
    • QuestionnaireMapper :
    • UserMapper.xml:
    • DeptMapper.xml:
    • QuestionnaireMapper.xml:
    • IUserService :
    • IDeptService :
    • IQuestionnaireService :
    • UserServiceImpl :
    • DeptServiceImpl :
    • UserController :
    • DeptController :
    • QuestionnaireController :
    • ForwardController:
    • QuestionnaireServiceImpl :
    • user.jsp:
    • dept.jsp:
    • questionnaire_manage.jsp:
    • web.xml :

项目功能框架:

项目前后台功能展示:











项目整体框架:

配置、用户、部门、问卷主要代码部分:

pom.xml:

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>questionnaire</artifactId><version>1.0-SNAPSHOT</version><packaging>war</packaging><name>questionnaire Maven Webapp</name><!-- FIXME change it to the project's website --><url>http://www.example.com</url><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><servlet.version>4.0.1</servlet.version><jsp.version>2.2</jsp.version><jstl.version>1.2</jstl.version><spring.version>5.3.14</spring.version><commons-dbcp.version>1.4</commons-dbcp.version><mybatis.version>3.4.6</mybatis.version><mybatis-spring.version>1.3.3</mybatis-spring.version><mysql-connector-java.version>8.0.11</mysql-connector-java.version><fastjson.version>1.2.78</fastjson.version></properties><dependencies><!--  添加javaEE支持  --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${servlet.version}</version><!--  provided只在编译时支持,发布时不拷贝文件  --><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>${jsp.version}</version><!--  provided只在编译时支持,发布时不拷贝文件  --><scope>provided</scope></dependency><dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>${jstl.version}</version></dependency><!-- 引入spring基础模块 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!--dbcp连接池  --><dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>${commons-dbcp.version}</version></dependency><!--mybatis--><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>${mybatis.version}</version></dependency><!--  mybatis spring整合  --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>${mybatis-spring.version}</version></dependency><!-- mybatis插件PageHelper --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper</artifactId><version>5.1.0</version></dependency><!--通用mapper插件--><dependency><groupId>com.github.abel533</groupId><artifactId>mapper</artifactId><version>3.0.1</version></dependency><!--  mysql驱动类  --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>${mysql-connector-java.version}</version></dependency><!-- fastjson处理json数据 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><!-- lombok 简化实体内容 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.24</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.11.2</version></dependency><dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.5.6</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version></dependency><dependency><groupId>com.github.xuwei-k</groupId><artifactId>html2image</artifactId><version>0.1.0</version></dependency></dependencies>
</project>

db.properties:

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/proj_hr?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8&allowPublicKeyRetrieval=true
jdbc.username=root
jdbc.password=123456

mybatis-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><settings><!-- 配置日志工具 --><setting name="logImpl" value="STDOUT_LOGGING"/><!--配置将下划线字段转为小驼峰--><setting name="mapUnderscoreToCamelCase" value="true"/></settings><plugins><plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin><plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor"><!--主键自增回写方法,默认值MYSQL --><property name="IDENTITY" value="MYSQL" /><!--通用Mapper默认接口 --><property name="mappers" value="com.github.abel533.mapper.Mapper" /></plugin></plugins></configuration>

spring-mvc.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!--扫描包--><context:component-scan base-package="com.que.controller"/><!--开启注解驱动--><mvc:annotation-driven><!--配置时间转换器,将后台传到前台的日期数据格式化--><mvc:message-converters><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"><property name="objectMapper"><bean class="com.fasterxml.jackson.databind.ObjectMapper"><property name="dateFormat"><bean class="java.text.SimpleDateFormat"><constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss"/></bean></property></bean></property></bean></mvc:message-converters></mvc:annotation-driven><!--视图解析器--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/page/"/><property name="suffix" value=".jsp"/></bean><mvc:interceptors><mvc:interceptor><mvc:mapping path="/**"/><mvc:exclude-mapping path="/"/><mvc:exclude-mapping path="/index.jsp"/><mvc:exclude-mapping path="/toLogin"/><mvc:exclude-mapping path="/user/loginSelect"/><mvc:exclude-mapping path="/tester/toLogin"/><mvc:exclude-mapping path="/tester/login"/><mvc:exclude-mapping path="/tester/index"/><mvc:exclude-mapping path="/tester/result"/><mvc:exclude-mapping path="/tester/analyse"/><mvc:exclude-mapping path="/tester/mailSend"/><mvc:exclude-mapping path="/tester/insertResult"/><mvc:exclude-mapping path="/question/query"/><mvc:exclude-mapping path="/assets/**"/><bean class="com.que.interceptor.LoginCheckInterceptor"/></mvc:interceptor></mvc:interceptors><!--防止静态资源被拦截--><mvc:default-servlet-handler/>
</beans>

spring-mybatis.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!--扫包--><context:component-scan base-package="com.que.service"/><!--配置数据库连接--><context:property-placeholder location="classpath:db.properties"/><!--配置数据库连接池--><bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean><!--配置MySQL的SQLsession对象--><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--配置数据源--><property name="dataSource" ref="ds"/><!--配置类型别名--><property name="typeAliasesPackage" value="com.que.entity"/><!--配置mybatis主配置文件的路径,其内可以定义特定的配置--><property name="configLocation" value="classpath:mybatis-config.xml"/><!--配置mapper文件路径--><property name="mapperLocations" value="classpath:mapper/*.xml"/></bean><!--配置mapper接口--><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.que.mapper"/><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/></bean>
</beans>

User :

package com.que.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;/**@Auther jjk*@Date 2022/8/29**@Description 用户表*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "tbl_user")
public class User {@Id@GeneratedValue(generator = "JDBC",strategy = GenerationType.IDENTITY)private Integer userId;private Integer deptId;private String loginName;private String userName;private String email;private String phonenumber;private String sex;private String avatar;private String password;private String salt;private String status;private String flag;private String createBy;private Date createTime;private String updateBy;private Date updateTime;private String remark;
}

Dept:

package com.que.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;/**@Auther jjk*@Date 2022/8/29**@Description 部门表*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "tbl_dept")
public class Dept {@Idprivate Integer deptId;private String deptName;private Integer orderNum;private String status;private String delFlag;private String createBy;private Date createTime;private String updateBy;private Date updateTime;
}

Questionnaire :

package com.que.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;/*** @Author sml* @Data 2022/8/29 11:54*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "tbl_questionnaire")
public class Questionnaire {@Id@GeneratedValue(generator = "JDBC",strategy = GenerationType.IDENTITY)private Integer id;private String title;private String anonymous;private String enabled;private String deleteFlag;private String createBy;private Date createTime;private String updateBy;private Date updateTime;
}

CommonResult:

package com.que.entity;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;/**@Auther jjk*@Date 2022/8/29**@Description*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult {//编码:0成功,1失败private Integer code;//提示消息private String msg;//记录数private Integer count;//记录数据private Object data;//返回查询结果的成功信息:public static CommonResult success(Integer count, Object data){return new CommonResult(0,"success",count,data);}//返回增删改的成功信息public static CommonResult success(){return new CommonResult(0,"success",null,null);}//返回失败信息public static CommonResult fail(){return new CommonResult(1,"fail",null,null);}}

UserMapper:

package com.que.mapper;import com.github.abel533.mapper.Mapper;
import com.github.pagehelper.PageInfo;
import com.que.entity.User;
import com.que.entity.UserRole;
import org.apache.ibatis.annotations.Param;import java.util.List;
import java.util.Map;public interface UserMapper extends Mapper<User> {//查询(条件)List<Map> listAll(@Param("userName") String userName,@Param("phonenumber")  String phonenumber); //注意:这里返回键值对列表,不适用一对一/多关联查询//登录查询User loginSelect(@Param("loginName") String loginName,@Param("password") String password);//修改密码(用户)int updatePassword();//插入(用户角色表)int insertRole(UserRole userRole);//修改(用户角色表)int updateRole(UserRole userRole);//删除(用户角色表)int deleteRole(Integer userId);//根据用户Id查询身份List selectCheckbox(Integer userId);//查用户名User selectLoginName(String loginName);//根据用户名查找用户数据User selectUserData(Integer userId);
}

DeptMapper :

package com.que.mapper;import com.github.abel533.mapper.Mapper;
import com.que.entity.Dept;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface DeptMapper extends Mapper<Dept> {List<Dept> deptListAll();//条件查询List<Dept> deptListAll1(@Param("deptName") String deptName,@Param("creatBy") String creatBy,@Param("updateBy") String updateBy);}

QuestionnaireMapper :

package com.que.mapper;import com.que.entity.Questionnaire;
import com.github.abel533.mapper.Mapper;
import com.que.entity.QuestionnaireResult;
import org.apache.ibatis.annotations.Param;import java.util.List;
import java.util.Map;/**@Auther jjk*@Date 2022/9/2**@Description*/
public interface QuestionnaireMapper extends Mapper<Questionnaire> {List<Map> query(@Param("questionTitle")String questionTitle, @Param("createBy")String createBy);List<Map> getById(Integer id);int save(QuestionnaireResult q);int update(@Param("id")Integer id,@Param("enabled")String checked);
}

UserMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.que.mapper.UserMapper"><!--用户和部门关联查询--> <!--定义键值对--><select id="listAll" resultType="map"> <!--返回一个user对象(如果在user属性中定义的有dept对象,则用一对一)-->selectu.user_id,u.login_name,u.user_name,u.email,u.phonenumber,u.sex,u.avatar,u.password,u.status,u.create_by,u.create_time,u.update_by,u.update_time,u.remark,d.dept_id,d.dept_namefrom tbl_user ujoin tbl_dept don u.dept_id=d.dept_id<where><if test="userName!=null and userName!='' ">and user_name like concat('%',#{userName},'%')</if><if test="phonenumber!=null and phonenumber!='' ">and phonenumber like concat('%',#{phonenumber},'%')</if>and u.flag = 0</where></select><!--插入(角色角色表)--><insert id="insertRole" >insert into tbl_user_role(user_id,role_id)values(#{userId},#{roleId})</insert><!--删除(角色角色表)--><delete id="deleteRole">delete from tbl_user_rolewhere user_id=#{userId}</delete><!--登陆查询--><select id="loginSelect" resultType="com.que.entity.User">select * from tbl_userwhere login_name=#{loginName} and password=#{password}</select><!--    //根据用户Id查询身份--><select id="selectCheckbox" resultType="int">select role_id from tbl_user_rolewhere user_id=#{userId}</select><!--    //查用户名--><select id="selectLoginName" resultType="user">select * from tbl_userwhere login_name=#{loginName}</select><select id="selectUserData" resultType="user">select * from tbl_user where user_id=#{userId}</select></mapper>

DeptMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.que.mapper.DeptMapper"><!--用户和部门关联查询--> <!--定义键值对--><select id="deptListAll" resultType="map"> <!--返回一个user对象(如果在user属性中定义的有dept对象,则用一对一)-->select * from tbl_dept</select><select id="deptListAll1" resultType="dept">select * from tbl_dept<where><if test="deptName!=null and deptName!='' ">and dept_name like concat('%',#{deptName},'%')</if><if test="creatBy!=null and creatBy!='' ">and create_by like concat('%',#{creatBy},'%')</if><if test="updateBy!=null and updateBy!='' ">and update_by like concat('%',#{updateBy},'%')</if></where></select></mapper>

QuestionnaireMapper.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.que.mapper.QuestionnaireMapper"><insert id="save" parameterType="com.que.entity.QuestionnaireResult">insert into tbl_questionnaire_result(id,user_id,details_id,answer)value(default,#{userId},#{detailsId},#{answer})</insert><update id="update">update tbl_questionnaire setenabled = #{enabled}where id = #{id}</update><select id="query" resultType="map">select qn.*,count(qd.id) detailsCount,x.userCountfrom tbl_questionnaire qnleft join  tbl_questionnaire_details qdon qn.id=qd.questionnaire_idjoin(SELECT qn.id,count(qu.id) userCountFROM tbl_questionnaire qnLEFT JOIN tbl_questionnaire_user quon qu.questionnaire_id = qn.idGROUP BY qn.id) xon qn.id=x.id<where><if test="questionTitle != null and questionTitle != ''">and qn.title like concat('%',#{questionTitle},'%')</if><if test="createBy != null and createBy != ''">and qn.create_by like concat('%',#{createBy},'%')</if>and qn.delete_flag = 0</where>group by qn.id</select><select id="getById" resultType="Map">select id,titlefrom tbl_questionnairewhere id = #{id} and delete_flag = 0</select></mapper>

IUserService :

package com.que.service;import com.github.pagehelper.PageInfo;
import com.que.entity.User;
import com.que.entity.UserRole;
import org.apache.ibatis.annotations.Param;import java.util.List;
import java.util.Map;public interface IUserService {//按照条件分页查询用户列表PageInfo<Map> listAll(Integer page, Integer limit,String userName,String phonenumber); //动态sql//登录查询User loginSelect(String loginName, String password);//添加(用户表)int insertSelective(User user);//添加(用户角色表)int insertRole(UserRole userRole);//修改int update(User user);//删除(用户表)int delete(Integer userId);//删除(用户角色表)int deleteRole(Integer userId);//根据用户Id查询身份List selectCheckbox(Integer userId);//查用户名User selectLoginName(String loginName);//根据用户名查找用户数据User selectUserData(Integer userId);}

IDeptService :

package com.que.service;import com.github.pagehelper.PageInfo;
import com.que.entity.Dept;
import org.apache.ibatis.annotations.Param;import java.util.List;public interface IDeptService {//查询(自定义实现)List<Dept> deptListAll();//按照条件分页查询部门列表(自定义实现)PageInfo<Dept> deptListAll1(Integer page, Integer limit, String deptName, String creatBy, String updateBy);//添加(mapper接口实现)int deptInsert(Dept dept);//修改(mapper接口实现)int deptUpdate(Dept dept);//删除(mapper接口实现)int deptDelete(Integer deptId);
}

IQuestionnaireService :

package com.que.service;import com.que.entity.Questionnaire;
import com.que.entity.QuestionnaireResult;
import com.que.entity.QuestionnaireUser;
import com.que.entity.Tester;import java.util.List;
import java.util.Map;/**@Auther jjk*@Date 2022/9/2**@Description*/
public interface IQuestionnaireService {List<Map> findAll(String questionTitle,String createBy);//插入int questionnaireInsert(Questionnaire questionnaire);//修改int questionnaireUpdate(Questionnaire questionnaire);//根据问卷id查询问卷Questionnaire findById(Integer id);int save(QuestionnaireResult q);//删除int questionnaireDelete(Integer id);List<Map> getById(Integer id);int updateEnabled(Integer id,String checked);
}

UserServiceImpl :

package com.que.service.impl;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.que.entity.User;
import com.que.entity.UserRole;
import com.que.mapper.UserMapper;
import com.que.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Map;@Service
public class UserServiceImpl implements IUserService {@Autowiredprivate UserMapper userMapper;@Overridepublic PageInfo<Map> listAll(Integer page, Integer limit, String userName, String phonenumber) {System.out.println(page);System.out.println(limit);//使用分页插件,完成带条件的分页查询PageHelper.startPage(page,limit);//查询数据List<Map> userList= userMapper.listAll(userName,phonenumber);System.out.println(userList);//构建分页数据PageInfo<Map> pi=new PageInfo<>(userList);return pi;}@Overridepublic User loginSelect(String loginName, String password) {return userMapper.loginSelect(loginName, password);}//插入(用户表)@Overridepublic int insertSelective(User user) {return userMapper.insertSelective(user); //选择性插入//return userMapper.insert(user); //全部插入}//插入(用户角色表)@Overridepublic int insertRole(UserRole userRole) {return userMapper.insertRole(userRole);}//修改@Overridepublic int update(User user) {
//        return userMapper.updateByPrimaryKey(user);return userMapper.updateByPrimaryKeySelective(user);}//删除(用户表)@Overridepublic int delete(Integer userId) {return userMapper.deleteByPrimaryKey(userId);}@Overridepublic int deleteRole(Integer userId) {return userMapper.deleteRole(userId);}@Overridepublic List selectCheckbox(Integer userId) {return userMapper.selectCheckbox(userId);}@Overridepublic User selectLoginName(String loginName) {return userMapper.selectLoginName(loginName);}@Overridepublic User selectUserData(Integer userId) {return userMapper.selectUserData(userId);}
}

DeptServiceImpl :

package com.que.service.impl;import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.que.entity.Dept;
import com.que.mapper.DeptMapper;
import com.que.service.IDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;@Service
public class DeptServiceImpl implements IDeptService {@Autowiredprivate DeptMapper deptMapper;@Overridepublic List<Dept> deptListAll() {return deptMapper.deptListAll();}@Overridepublic PageInfo<Dept> deptListAll1(Integer page, Integer limit,String deptName, String creatBy, String updateBy) {System.out.println("page:"+page);System.out.println("limit:"+limit);//使用分页插件,完成带条件的分页查询PageHelper.startPage(page,limit);//查询数据List<Dept> deptList=deptMapper.deptListAll1(deptName,creatBy,updateBy);System.out.println("deptList1:"+deptList);//构建分页数据PageInfo<Dept> pageInfo=new PageInfo<>(deptList);return pageInfo;}@Overridepublic int deptInsert(Dept dept) {return deptMapper.insertSelective(dept);}@Overridepublic int deptUpdate(Dept dept) {return deptMapper.updateByPrimaryKeySelective(dept);}@Overridepublic int deptDelete(Integer deptId) {return deptMapper.deleteByPrimaryKey(deptId);}}

UserController :

package com.que.controller;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.que.entity.CommonResult;
import com.que.entity.User;
import com.que.entity.UserRole;
import com.que.service.IUserService;
import com.que.utils.Md5;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate IUserService iUserService; //接口//查询1@RequestMapping("/listAll1")public CommonResult listAll1(Integer page, Integer limit, String userName, String phonenumber){System.out.println("======listAll1========");PageInfo pageInfo=iUserService.listAll(page,limit,userName,phonenumber);return CommonResult.success((int)pageInfo.getTotal(),pageInfo.getList());//这里的日期格式定义为全局  在spring-mvc.xml中<!-- 配置时间转换器 -->}//插入@RequestMapping("/insert")public int insert(@RequestParam("user") String jsonStr,HttpSession session){System.out.println(jsonStr);JSONObject jsonObject = JSONObject.parseObject(jsonStr);//System.out.println((String) jsonObject.get("login_name"));//创建用户对象User user=new User();//这里不需要set id,插入用户表之后,通过自增主键直接user.get id即可//登录时间 未setuser.setLoginName((String) jsonObject.get("login_name"));user.setUserName((String) jsonObject.get("user_name"));user.setEmail((String) jsonObject.get("email"));user.setPhonenumber((String) jsonObject.get("phonenumber"));user.setSex((String) jsonObject.get("sex"));//头像 未setuser.setPassword(Md5.encode((String) jsonObject.get("password")));user.setStatus((String) jsonObject.get("status"));//System.out.println(jsonObject.get("deptId"));user.setDeptId(Integer.valueOf((String) jsonObject.get("dept_id")));user.setCreateBy(((User)session.getAttribute("user")).getLoginName());user.setUpdateBy(((User)session.getAttribute("user")).getLoginName());user.setCreateTime(new Date()); //创建时间user.setUpdateTime(new Date()); //修改时间//修改人 修改时间 未set 修改时再setuser.setRemark((String) jsonObject.get("remark"));//插入(用户表)int iUS=iUserService.insertSelective(user);int iRS=0;int a=0;for (int i = 0; i < 3; i++) {if(jsonObject.get("roles"+i)==null){a++;continue;}Integer role = Integer.valueOf((String) jsonObject.get("roles"+i));UserRole userRole=new UserRole(user.getUserId(),role);//插入(用户角色表)int count=iUserService.insertRole(userRole);iRS=count+iRS;}//判断两次插入的次数if(iUS==1 && iRS==3-a){return 0;}else {return 1;}}//修改@RequestMapping("/update")public int update(@RequestParam("user") String jsonStr,HttpSession session){System.out.println("======update========");System.out.println(jsonStr);JSONObject jsonObject=JSONObject.parseObject(jsonStr);User user=new User();user.setUserId(Integer.valueOf((String) jsonObject.get("user_id")));user.setLoginName((String) jsonObject.get("login_name"));user.setUserName((String) jsonObject.get("user_name"));user.setEmail((String) jsonObject.get("email"));user.setPhonenumber((String) jsonObject.get("phonenumber"));user.setSex((String) jsonObject.get("sex"));//头像 未set//user.setPassword(Md5.encode((String) jsonObject.get("password")));user.setStatus((String) jsonObject.get("status"));user.setDeptId(Integer.valueOf((String) jsonObject.get("dept_id")));//创建人 未setuser.setUpdateTime(new Date());user.setUpdateBy(((User)session.getAttribute("user")).getLoginName());user.setRemark((String) jsonObject.get("remark"));//修改(用户表)int iUS= iUserService.update(user);//删除(用户角色表)int Del=iUserService.deleteRole(user.getUserId());//插入(用户角色表)int iRS=0;int a=0;for (int i = 0; i < 3; i++) {if(jsonObject.get("roles"+i)==null){a++;continue;}Integer role = Integer.valueOf((String) jsonObject.get("roles"+i));UserRole userRole=new UserRole(user.getUserId(),role);//插入(用户角色表)int count=iUserService.insertRole(userRole);iRS=count+iRS;}//判断修改、插入、删除的次数if(iUS==1 && Del==1 && iRS==3-a){return 0;}else {return 1;}}//修改@RequestMapping("/passwordUpdate")public int passwordUpdate(@RequestParam("userPw") String jsonStr){System.out.println("======passwordUpdate========");System.out.println("jsonStr:"+jsonStr);JSONObject jsonObject=JSONObject.parseObject(jsonStr);User user=new User();user.setUserId(Integer.valueOf((String) jsonObject.get("user_id")));user.setPassword((String) jsonObject.get("password"));//修改(用户表)int iUS= iUserService.update(user);//判断修改的次数if(iUS==1){return 0;}else {return 1;}}//删除@RequestMapping("/delete")public CommonResult delete(@RequestParam("idList")String idList){System.out.println("======delete========");//System.out.println(idList);int count =0;//int count1=0;JSONArray jsonArray = JSONArray.parseArray(idList);System.out.println(jsonArray);for(int i=0;i<jsonArray.size();i++){JSONObject jsonObject = jsonArray.getJSONObject(i);Integer userId = (Integer)jsonObject.get("userId");//count = iUserService.delete(userId);User user=new User();user.setUserId(userId);user.setFlag("2");count=iUserService.update(user);//count1=iUserService.deleteRole(userId);  //保留数据,不做删除}//return count==1&&count1==1?CommonResult.success():CommonResult.fail();return count==1?CommonResult.success():CommonResult.fail();}//登陆查询@RequestMapping("/loginSelect")public CommonResult loginSelect(String username,String password,HttpSession session){System.out.println(username+" ======================= "+password);User user1 = iUserService.selectLoginName(username);if(user1!=null){User user2 = iUserService.loginSelect(username,Md5.encode(password));if(user2!=null){session.setAttribute("user",user2);return new CommonResult(0,"success",null,user2);}else {return new CommonResult(1,"fail",null,null);}}return new CommonResult(2,"fail",null,null);}//根据用户Id查询身份权限@RequestMapping("/selectCheckbox")public List selectCheckbox(Integer userId){List selectCheckbox = iUserService.selectCheckbox(userId);return selectCheckbox;}@RequestMapping("/selectUserData")public User selectUserData(Integer userId){User user = iUserService.selectUserData(userId);return user;}}

DeptController :

package com.que.controller;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.que.entity.CommonResult;
import com.que.entity.Dept;
import com.que.entity.User;
import com.que.entity.UserRole;
import com.que.service.IDeptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;@RestController
@RequestMapping("/dept")
public class DeptController {@Autowiredprivate IDeptService iDeptService;@RequestMapping("/deptListAll")public List<Dept> deptListAll(){return iDeptService.deptListAll();}@RequestMapping("/deptListAll1")public CommonResult deptListAll1(Integer page,Integer limit,String deptName, String creatBy, String updateBy){System.out.println("=====deptListAll1========");System.out.println("page:"+page);System.out.println("limit:"+limit);PageInfo pageInfo=iDeptService.deptListAll1(page,limit,deptName,creatBy,updateBy);System.out.println("pageInfo:"+pageInfo);return CommonResult.success((int) pageInfo.getTotal(),pageInfo.getList());}@RequestMapping("/deptInsert")public int insert(@RequestParam("dept") String jsonStr, HttpSession session){System.out.println("=====deptInsert========");System.out.println(jsonStr);JSONObject jsonObject = JSONObject.parseObject(jsonStr);//System.out.println((String) jsonObject.get("loginName"));//创建用户对象Dept dept=new Dept();dept.setDeptName((String) jsonObject.get("deptName"));dept.setCreateBy(((User)session.getAttribute("user")).getLoginName());dept.setUpdateBy(((User)session.getAttribute("user")).getLoginName());dept.setOrderNum(Integer.valueOf((String) jsonObject.get("orderNum")));dept.setStatus((String) jsonObject.get("status"));//dept.setCreateBy((String) jsonObject.get("createBy"));dept.setCreateTime(new Date()); //创建时间dept.setUpdateTime(new Date()); //修改时间 修改时UpdateTime还会再次更新System.out.println(dept);//插入(用户表)int iDS=iDeptService.deptInsert(dept);if(iDS==1){return 0;}else {return 1;}}//修改@RequestMapping("/deptUpdate")public int update(@RequestParam("dept") String jsonStr,HttpSession session){System.out.println("======update========");System.out.println("jsonStr"+jsonStr);JSONObject jsonObject=JSONObject.parseObject(jsonStr);Dept dept=new Dept();dept.setDeptId(Integer.valueOf((String) jsonObject.get("deptId")));dept.setDeptName((String) jsonObject.get("deptName"));dept.setUpdateBy(((User)session.getAttribute("user")).getLoginName());dept.setOrderNum(Integer.valueOf((String) jsonObject.get("orderNum")));dept.setStatus((String) jsonObject.get("status"));//dept.setCreateBy((String) jsonObject.get("create_by"));dept.setUpdateTime(new Date()); //修改时间 修改时UpdateTime还会再次更新//修改(用户表)int iDS= iDeptService.deptUpdate(dept);//判断if(iDS==1){return 0;}else {return 1;}}//删除@RequestMapping("/deptDelete")public CommonResult delete(@RequestParam("idList")String idList){System.out.println("======deptDelete========");System.out.println("idList:::::"+idList);int count =0;JSONArray jsonArray = JSONArray.parseArray(idList);for(int i=0;i<jsonArray.size();i++){JSONObject jsonObject = jsonArray.getJSONObject(i);Integer deptId = (Integer)jsonObject.get("deptId");Dept dept=new Dept();dept.setDeptId(deptId);dept.setDelFlag("2");//count = iUserService.delete(userId);//count=iDeptService.deptDelete(deptId);count=iDeptService.deptUpdate(dept);}return count==1?CommonResult.success():CommonResult.fail();}}

QuestionnaireController :

package com.que.controller;import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.que.entity.*;
import com.que.service.IQuestionnaireDetailsService;
import com.que.service.IQuestionnaireService;
import com.que.service.IQuestionnaireUserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;
import java.util.Map;/**@Auther jjk*@Date 2022/9/2**@Description*/
@Controller
@RequestMapping("/questionnaire")
public class QuestionnaireController {@Resourceprivate IQuestionnaireService questionnaireService;@Resourceprivate IQuestionnaireDetailsService questionnaireDetailsService;@Resourceprivate IQuestionnaireUserService questionnaireUserService;//查询@ResponseBody@RequestMapping("/query")public CommonResult query(Integer page,Integer limit,String questionTitle,String createBy){PageHelper.startPage(page,limit);List<Map> all = questionnaireService.findAll(questionTitle,createBy);PageInfo pageInfo = new PageInfo(all);System.out.println(pageInfo.getList());return CommonResult.success((int) pageInfo.getTotal(),pageInfo.getList());}//插入@ResponseBody@RequestMapping("/questionnaireInsert")public CommonResult questionnaireInsert(@RequestParam("questionnaire") String jsonStr, HttpSession session){System.out.println("=====questionnaireInsert========");System.out.println("jsonStr:"+jsonStr);JSONObject jsonObject = JSONObject.parseObject(jsonStr);//创建用户对象User user = (User) session.getAttribute("user");Questionnaire questionnaire=new Questionnaire();questionnaire.setTitle((String) jsonObject.get("title"));questionnaire.setAnonymous((String) jsonObject.get("anonymous"));questionnaire.setCreateBy(user.getLoginName());questionnaire.setCreateTime(new Date());questionnaire.setUpdateBy(user.getLoginName());questionnaire.setUpdateTime(new Date());questionnaire.setEnabled("1");questionnaire.setDeleteFlag("0");System.out.println(questionnaire);//插入int qNS= questionnaireService.questionnaireInsert(questionnaire);System.out.println(qNS);return qNS==1?CommonResult.success():CommonResult.fail();}//修改@ResponseBody@RequestMapping("/questionnaireUpdate")public CommonResult questionnaireUpdate(@RequestParam("questionnaire") String jsonStr,HttpSession session){System.out.println("======questionnaireUpdate========");//System.out.println(jsonStr);JSONObject jsonObject=JSONObject.parseObject(jsonStr);Questionnaire questionnaire=new Questionnaire();questionnaire.setId(Integer.valueOf((String)jsonObject.get("id")));questionnaire.setTitle((String) jsonObject.get("title"));questionnaire.setAnonymous((String) jsonObject.get("anonymous"));questionnaire.setUpdateBy(((User)session.getAttribute("user")).getLoginName());questionnaire.setUpdateTime(new Date());//修改int qNS=questionnaireService.questionnaireUpdate(questionnaire);//判断修改、插入、删除的次数return qNS==1?CommonResult.success():CommonResult.fail();}//删除@ResponseBody@RequestMapping("/questionnaireDelete")public CommonResult questionnaireDelete(@RequestParam("idList") String idList){System.out.println("======questionnaireDelete========");//System.out.println(idList);int count =0;JSONArray jsonArray = JSONArray.parseArray(idList);for(int i=0;i<jsonArray.size();i++){JSONObject jsonObject = jsonArray.getJSONObject(i);Integer questionnaireId = (Integer)jsonObject.get("id");Questionnaire questionnaire=new Questionnaire();questionnaire.setId(questionnaireId);questionnaire.setDeleteFlag("1");//count = iUserService.delete(userId);//这里是修改delete_flag的值 0存在 1删除count=questionnaireService.questionnaireUpdate(questionnaire);}return count==1?CommonResult.success():CommonResult.fail();}@ResponseBody@RequestMapping("/login")public CommonResult login(QuestionnaireUser questionnaireUser){System.out.println(questionnaireUser);//判断是否做过问卷QuestionnaireUser register = questionnaireUserService.findByPhone(questionnaireUser.getPhone(), questionnaireUser.getQuestionnaireId());//没做过if(register==null){questionnaireUser.setCreateTime(new Date());int count = questionnaireUserService.save(questionnaireUser);QuestionnaireUser q = questionnaireUserService.findByPhone(questionnaireUser.getPhone(), questionnaireUser.getQuestionnaireId());return count==1?CommonResult.success(count,q):CommonResult.fail();}else {int flag = questionnaireUserService.count(register.getId());return flag==0?CommonResult.success(1,register):CommonResult.success(0,register);}}@ResponseBody@RequestMapping("/insert")public CommonResult insertResult(@RequestParam("list") String jsonStr){JSONArray jsonArray = JSONArray.parseArray(jsonStr);int count = 0;for(int i=0;i<jsonArray.size();i++){JSONObject jsonObject = jsonArray.getJSONObject(i);Integer userId = jsonObject.getInteger("userId");Integer detailsId = jsonObject.getInteger("detailsId");String answer = jsonObject.getString("answer");QuestionnaireResult qr = new QuestionnaireResult();qr.setUserId(userId);qr.setAnswer(answer);qr.setDetailsId(detailsId);count += questionnaireService.save(qr);}return count==jsonArray.size()?CommonResult.success():CommonResult.fail();}@ResponseBody@RequestMapping("/copyQuestionnaire")public CommonResult copyQuestionnaire(@RequestParam("questionnaire")String jsonStr){JSONObject jsonObject = JSONObject.parseObject(jsonStr);Integer id = jsonObject.getInteger("id");String anonymous = jsonObject.getString("anonymous");String title = jsonObject.getString("title");Questionnaire q = questionnaireService.findById(id);q.setId(null);q.setTitle(title);q.setAnonymous(anonymous);int count = questionnaireService.questionnaireInsert(q);Integer qId = q.getId();List<QuestionnaireDetails> list = questionnaireDetailsService.getById(id);int num = 0;for(QuestionnaireDetails qd : list){qd.setId(null);qd.setQuestionnaireId(qId);num += questionnaireDetailsService.insert(qd);}return count==1&&num==list.size()?CommonResult.success():CommonResult.fail();}@ResponseBody@RequestMapping("/updataEnabled")public CommonResult updateEnabled(String id,String checked){Integer uid = Integer.valueOf(id);if("false".equals(checked)){checked = "0";}else {checked = "1";}System.out.println(uid+" "+checked);int count = questionnaireService.updateEnabled(uid,checked);return count==1?CommonResult.success():CommonResult.fail();}
}

ForwardController:

package com.que.controller;import com.que.entity.*;
import com.que.service.*;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.que.service.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.ui.Model;import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.*;@Controller
public class ForwardController {@Resourceprivate IRoleService roleService;@Resourceprivate IMenuCollectionService menuCollectionService;@Resourceprivate IQuestionnaireService questionnaireService;@Autowiredprivate IQuestionnaireDetailsService service;//用户管理页面@Autowiredprivate IQuestionService questionService;@Autowiredprivate IQuestionnaireDetailsService detailsService;@Autowiredprivate IQuestionnaireUserService questionnaireUserService;@RequestMapping("/user/toUser")public String user(){return "/admin/user";}//跳转到问题管理页面//题目管理@RequestMapping("/question/toShowQuestion")public String question(){return "/admin/question";}//@RequestMapping("/tester/toLogin")public String toLogin(){return "/tester/login";}//@RequestMapping("/tester/index")public String index(Integer testerId, Model model){model.addAttribute("testerId",testerId);return "/tester/test";}//测试管理//跳转到测试管理页面@RequestMapping("/tester/toShowTester")public String testerManage(){return "/admin/testerManage";}//跳转到报表统计页面//报表统计@RequestMapping("/test/toMyBigShow")public String dailyTestNumber(){return "/admin/charts";}//跳转到结果页@RequestMapping("/tester/result")public String testResult(Integer testerId,Model model){System.out.println(testerId);model.addAttribute("testerId",testerId);return "/tester/result";}//日志管理页面@RequestMapping("/log/toShowLog")public String toLog(){return "/admin/log";}//部门管理页面@RequestMapping("/dept/toDept")public String dept(){return "/admin/dept";}//问卷管理@RequestMapping("/questionnaire/toQuestionnaire")public String questionnaire(){return "/admin/questionnaire_manage";}@RequestMapping("/toLogin")public String login(){return "/admin/login";}@RequestMapping("/toHome")public String home(Integer userId,Model model){model.addAttribute("userId",userId);UserRole byUserId = roleService.findByUserId(userId);List<MenuTree> treeList = menuCollectionService.findById(byUserId.getRoleId());model.addAttribute("treeList",treeList);return "/admin/menu";}/*** 问卷管理-添加题目* @param id* @param model* @return*/@RequestMapping("/toQuestionnaireDetails/{id}")public String toQuestionnaireDetails(@PathVariable("id") Integer id,Model model){model.addAttribute("id",id);return "/admin/questionnaireDetails";}//问卷预览页面@RequestMapping("/toQuestionnairePreview/{id}")public String toQuestionnairePreview(@PathVariable("id") Integer id, Model model){List<QuestionnaireDetails> tqd = detailsService.getById(id);List<Map> tq = questionnaireService.getById(id);model.addAttribute("tqd",tqd);model.addAttribute("tq",tq);return "/admin/questionnairePreview";}//问卷结果页面@RequestMapping("/toQuestionnaireResult/{id}")public String toQuestionnaireResult(@PathVariable("id") Integer id, Model model){List<QuestionnaireDetails> tqd = detailsService.getById(id);List<Map> tq = questionnaireService.getById(id);List<Map> tqu = questionnaireUserService.getByQid(id);model.addAttribute("tqd",tqd);model.addAttribute("tq",tq);model.addAttribute("tqu",tqu);return "/admin/questionnaireResult";}//用户管理页面@RequestMapping("/menu/toMenu")public String menu(){return "/admin/menu_manager";}//角色管理页面@RequestMapping("/role/toRole")public String role(){return "/admin/role";}//退出登录@RequestMapping("/user/logOut")public String logOut(HttpSession session){session.invalidate();return "/admin/login";}@RequestMapping("/questionnaire/login/{id}")public String toLogin(@PathVariable("id")Integer id,Model model){System.out.println(id);Questionnaire que = questionnaireService.findById(id);model.addAttribute("questionnaire",que);return "/tester/questionnaire_login";}@RequestMapping("/questionnaire/index")public String toIndex(Integer userId,Integer questionnaireId,Model model){System.out.println(userId+" "+questionnaireId);Questionnaire questionnaire = questionnaireService.findById(questionnaireId);PageHelper.startPage(1,20);List<QuestionnaireDetails> list = service.getById(questionnaireId);PageInfo pi = new PageInfo(list);model.addAttribute("userId",userId);model.addAttribute("questionnaire",questionnaire);model.addAttribute("questionList",pi);System.out.println(pi.getList());return "/tester/questionnaire_test";}}

QuestionnaireServiceImpl :

package com.que.service.impl;import com.que.entity.Questionnaire;
import com.que.entity.QuestionnaireResult;
import com.que.entity.QuestionnaireUser;
import com.que.mapper.QuestionnaireMapper;
import com.que.service.IQuestionnaireService;
import org.springframework.stereotype.Service;import javax.annotation.Resource;
import java.util.List;
import java.util.Map;/**@Auther jjk*@Date 2022/9/2**@Description*/
@Service
public class QuestionnaireServiceImpl implements IQuestionnaireService {@Resourceprivate QuestionnaireMapper questionnaireMapper;@Overridepublic List<Map> findAll(String questionTitle,String createBy) {return questionnaireMapper.query(questionTitle,createBy);}@Overridepublic int questionnaireInsert(Questionnaire questionnaire) {return questionnaireMapper.insert(questionnaire);}@Overridepublic int questionnaireUpdate(Questionnaire questionnaire) {return questionnaireMapper.updateByPrimaryKeySelective(questionnaire);}@Overridepublic Questionnaire findById(Integer id) {return questionnaireMapper.selectByPrimaryKey(id);}@Overridepublic int save(QuestionnaireResult q) {return questionnaireMapper.save(q);}@Overridepublic int questionnaireDelete(Integer id) {return questionnaireMapper.deleteByPrimaryKey(id);}@Overridepublic List<Map> getById(Integer id) {return questionnaireMapper.getById(id);}@Overridepublic int updateEnabled(Integer id, String checked) {return questionnaireMapper.update(id,checked);}
}

user.jsp:

<%--Created by IntelliJ IDEA.User: 33154Date: 2022/8/29Time: 15:29To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>用户管理</title><!-- 引入 layui.css --><%--    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/assets/plugins/layui-v2.6.8/layui/css/layui.css?t=<%=Math.random()%>"/>--%><!-- 引入 layui.css --><link rel="stylesheet" href="//unpkg.com/layui@2.6.8/dist/css/layui.css">
</head>
<body><form class="layui-form" action="" style="margin-top: 20px"><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label">真实姓名:</label><div class="layui-input-inline"><input type="text" name="userName" placeholder="请输入姓名" autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">手机号:</label><div class="layui-input-inline"><input type="text" name="phonenumber" placeholder="请输入手机号" autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><div class="layui-input-block"><button type="button" class="layui-btn" lay-submit lay-filter="formDemo">查询</button><button type="reset" class="layui-btn layui-btn-primary">重置</button></div></div></div>
</form><!--要渲染的数据表格-->
<table id="user" lay-filter="user"></table><!--弹出表单-->
<form class="layui-form" action="" style="display: none;margin:10px" id="userFrm" lay-filter="userFrm"><!--用户编号,修改的时候,需要传这个值--><input type="hidden" id="user_id" name="user_id"/><input type="hidden" id="creat_by" name="creat_by"/><input type="hidden" id="update_by" name="update_by"/><!--设置提交的地址--><input type="hidden" id="action" name="action"><div class="layui-form-item"><label class="layui-form-label">登录名</label><div class="layui-input-block"><input type="text" name="login_name"  lay-verify="required|login_name" placeholder="请输入登录名" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">密码</label><div class="layui-input-block"><input type="text" name="password"  lay-verify="required|number" placeholder="请输入密码" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">真实姓名</label><div class="layui-input-block"><input type="text" name="user_name"  lay-verify="required" placeholder="请输入真实姓名" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">邮箱</label><div class="layui-input-block"><input type="text" name="email"  lay-verify="required|email" placeholder="请输入邮箱" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">电话</label><div class="layui-input-block"><input type="text" name="phonenumber"  lay-verify="required|phone" placeholder="请输入电话" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">部门</label><div class="layui-input-block"><select name="dept_id" id="dept_id" lay-verify="required"><option value=""></option></select></div></div><div class="layui-form-item"><label class="layui-form-label">性别</label><div class="layui-input-block"><input type="radio" name="sex" value="男" title="男"><input type="radio" name="sex" value="女" title="女" checked></div></div><div class="layui-form-item"><label class="layui-form-label">状态</label><div class="layui-input-block"><input type="checkbox" checked="" name="status" value="1"  lay-skin="switch" lay-filter="switchTest" lay-text="启用|禁用"></div></div><div class="layui-form-item"><label class="layui-form-label">备注</label><div class="layui-input-block"><input type="text" name="remark"  lay-verify="required" placeholder="请输入备注" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item" pane=""><label class="layui-form-label">原始复选框</label><div class="layui-input-block"><input type="checkbox" name="roles1" value="1" lay-skin="primary" title="管理员" ><input type="checkbox" name="roles2" value="2" lay-skin="primary" title="普通角色" ><input type="checkbox" name="roles3" value="3" lay-skin="primary" title="测试人员" ></div></div><div class="layui-form-item"><div class="layui-input-block"><button type="button" class="layui-btn" lay-submit lay-filter="userBtnSubmit">立即提交</button></div></div>
</form><%--弹出密码表单--%>
<form class="layui-form" action="" style="display: none;margin:10px" id="userPwFrm" lay-filter="userPwFrm"><!--用户编号,修改的时候,需要传这个值--><input type="hidden"  name="user_id"/><!--设置提交的地址--><input type="hidden" id="actionPw" name="actionPw"><div class="layui-form-item"><label class="layui-form-label">密码</label><div class="layui-input-block"><input type="text" name="password"  lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><div class="layui-input-block"><button type="button" class="layui-btn" lay-submit lay-filter="userPwBtnSubmit">提交</button></div></div>
</form><!--定义表格工具条-->
<script type="text/html" id="userBar"><div class="layui-btn-container"><!--lay-event:用于设置一个按钮的特定事件,事件名字自己定义--><button type="button" class="layui-btn" lay-event="userAdd">添加</button><button type="button" class="layui-btn layui-btn-danger" lay-event="userBatchDel">批量删除</button></div>
</script>
<script type="text/html" id="userRowBar"><div  class="layui-btn-container"><!--lay-event:用于设置一个按钮的特定事件,事件名字自己定义--><button type="button" class="layui-btn layui-btn-primary" lay-event="userReset">重置密码</button><button type="button" class="layui-btn layui-btn-sm" lay-event="userEdit">编辑</button><button type="button" class="layui-btn layui-btn-sm layui-btn-danger" lay-event="userDel">删除</button></div>
</script><%--<script type="text/javascript" src="${pageContext.request.contextPath}/assets/plugins/layui-v2.6.8/layui/layui.js?t=<%=Math.random()%>"></script>--%>
<!-- 引入 layui.js -->
<script src="//unpkg.com/layui@2.6.8/dist/layui.js"></script>
<script>layui.use(['table','layer','laydate','form'], function(){var table = layui.table //表格组件,layer=layui.layer  //弹出层,laydate=layui.laydate //日期,form=layui.form //表单,$ = layui.$; //jq//加载部门下拉框loadDeptInfo();form.on('submit(formDemo)',function (data) {console.log(data);//对表格进行重载table.reload('user', {where: { //设定异步数据接口的额外参数,任意设userName: data.field.userName,phonenumber: data.field.phonenumber},page: {curr: 1 //重新从第 1 页开始}})})form.verify({login_name : function(value, item){ //value:表单的值、item:表单的DOM对象if(!new RegExp("^[a-zA-Z0-9_\u4e00-\u9fa5\\s·]+$").test(value)){return '用户名不能有特殊字符';}if(/(^\_)|(\__)|(\_+$)/.test(value)){return '用户名首尾不能出现下划线\'_\'';}if(/^\d+\d+\d$/.test(value)){return '用户名不能全为数字';}//如果不想自动弹出默认提示框,可以直接返回 true,这时你可以通过其他任意方式提示(v2.5.7 新增)if(value === 'xxx'){alert('用户名不能为敏感词');return true;}}//我们既支持上述函数式的方式,也支持下述数组的形式//数组的两个值分别代表:[正则匹配、匹配不符时的提示文字],pass: [/^[\S]{6,12}$/,'密码必须6到12位,且不能出现空格']});//渲染表格数据table.render({elem: '#user' //渲染的目标元素,url: '${pageContext.request.contextPath}/user/listAll1' //发送请求获取数据//,cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增,toolbar:"#userBar" //设置表格工具条//,defaultToolbar: ['filter'],page:true //启用分页,limit:20 //每页条数,limits:[5,10,20,30] //可选条数,cols: [[  //表格列的定义{title:"全选",type:"checkbox"},{field:'user_id',  title: 'ID', sort: true},{field:'login_name' ,width:100 , title: '登录名'},{field:'user_name',width:100, title: '真实姓名'},{field:'email' ,width:100, title: '邮箱'},{field:'password',width:100, title: '密码',hide:true},{field:'phonenumber',width:100,title: '电话'},{field:'sex', title: '性别', sort: true,templet:function (d){//console.log(d);if(d.sex==0)return "<font color='blue'>男</font>";elsereturn "<font color='red'>女</font>";}},{field:'avatar',width:100, title: '头像'},{field:'status',  title: '状态', sort: true,templet:function (d){//console.log(d);if(d.status==0)return "<font color='blue'>在线</font>";elsereturn "<font color='red'>离线</font>";}},{field:'dept_name',width:100,  title: '部门'},{field:'dept_id',  title: '部门编号'},{field:'create_time',width:180 , title: '创建时间'},{field:'create_by',width:100,  title: '创建人'},{field:'update_by',width:100,  title: '修改人'},{field:'update_time', width:180, title: '修改时间'},{field:'remark', title: '备注'},{title:"操作",width:250,fixed:"right",toolbar:"#userRowBar"}]]});//通过table组件监听表格头部工具条触发的事件table.on("toolbar(user)",function (obj){console.log(obj);//根据触发的事件做特定处理switch (obj.event){case "userAdd"://表单重置clearFrm();//弹出表单$("#action").val("${pageContext.request.contextPath}/user/insert");showUserFrm();break;case "userBatchDel"://点击批量删除,获取当前选中行的信息var checkStatus = table.checkStatus('user'); //idTest 即为基础参数 id 对应的值//判断当前是否有选中行if(checkStatus.data.length==0){layer.msg("请先选中一行");return;}var ids = [];for(var i=0;i<checkStatus.data.length;i++){ids.push({userId: checkStatus.data[i].user_id});}//拼接数组中的id: 3,4,5,6delUser(ids);break;}})//通过table组件,监听行工具条事件table.on("tool(user)",function (obj){console.log(obj);//判断点击按钮的事件switch (obj.event){case "userEdit":clearFrm();//弹出表单$("#action").val("${pageContext.request.contextPath}/user/update");showUserFrm();//为表单设值console.log(obj.data);form.val("userFrm",obj.data);selectCheckbox(obj.data.user_id);break;case "userReset":clearPwFrm();$("#actionPw").val("${pageContext.request.contextPath}/user/passwordUpdate");showUserPwFrm();form.val("userPwFrm",obj.data);break;case "userDel":layer.confirm("确定要删除么?",function (index){console.log(obj)var ids = [] ;ids.push({userId:obj.data.user_id});delUser(ids);//关闭确认框layer.close(index);})break;}})//获取复选框数据function selectCheckbox(userId) {$.ajax({url:"${pageContext.request.contextPath}/user/selectCheckbox",type:"get",data:{userId},dataType:"json",success:function (res) {// $("#userFrm input[type='checkbox'][name='"+res+"']").val(true);// form.val("userFrm",{"roles[1]": true});$('#userFrm input[type="checkbox"][name="roles'+res+'"]').prop('checked', true);}})}//绑定表单中,提交按钮的提交事件form.on("submit(userBtnSubmit)",function (obj){console.log(obj);$.ajax({url:$("#action").val(),type:"post",data:{"user":JSON.stringify(obj.field)}, //表单数据dataType:"json",success:function (res){console.log("从contorller返回的int:"+res);if(res==0){layer.msg("操作成功",{icon:6});//关闭表单layer.close(userFrmIndex);//表单重置//$("#userFrm")[0].reset();clearFrm();//刷新表格table.reload('user', {page: {curr: 1 //重新从第 1 页开始}});}else{layer.msg("添加失败",{icon:5});}}})})//绑定密码表单中,提交按钮的提交事件form.on("submit(userPwBtnSubmit)",function (obj){console.log(obj);$.ajax({url:$("#actionPw").val(),type:"post",data:{"userPw":JSON.stringify(obj.field)}, //表单数据dataType:"json",success:function (res){console.log("从contorller返回的int:"+res);if(res==0){layer.msg("修改成功",{icon:6});//关闭表单layer.close(userPwFrmIndex);//表单重置clearPwFrm();//刷新表格table.reload('user', {page: {curr: 1 //重新从第 1 页开始}});}else{layer.msg("添加失败",{icon:5});}}})})//删除用户function delUser(ids){console.log(ids)$.ajax({url:"${pageContext.request.contextPath}/user/delete",data:{"idList":JSON.stringify(ids)},type:"post",dataType:"json",success:function (res){console.log(res);if(res.code==0){layer.msg("删除成功!",{icon:6});//重新加载表格//刷新表格table.reload('user', {page: {curr: 1 //重新从第 1 页开始}});}else{layer.msg("删除失败!",{icon:5})}}})}//加载部门数据function loadDeptInfo(){$.ajax({url:"${pageContext.request.contextPath}/dept/deptListAll",// data: {"page":1,"limit":20},type: "get",// dataType:"json",success:function (res){console.log(res);//循环数据,将班级添加到下拉框中for(var i=0;i<res.length;i++){var user = res[i];$("#dept_id").append("<option value='"+user.dept_id+"'>"+user.dept_name+"</option>")}//重新渲染下拉框form.render('select')}})}//表单重置function clearFrm(){$("#userFrm")[0].reset();}//密码表单重置function clearPwFrm(){$("#userPwFrm")[0].reset();}var userFrmIndex;//定义函数弹出学生表单function  showUserFrm(){//页面层userFrmIndex=layer.open({type: 1,area: ['600px',"400px"],title:"用户信息",content: $('#userFrm')   //弹出页面元素});}var userPwFrmIndex;//定义函数弹出学生密码空表单function showUserPwFrm(){//页面层userPwFrmIndex=layer.open({type: 1,area: ['600px',"400px"],title:"重置密码",content: $('#userPwFrm')   //弹出页面元素});}});
</script>
</body>
</html>

dept.jsp:

<%--Created by IntelliJ IDEA.User: 33154Date: 2022/9/2Time: 9:04To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>部门管理</title><!-- 引入 layui.css --><%--    <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/assets/plugins/layui-v2.6.8/layui/css/layui.css?t=<%=Math.random()%>"/>--%><!-- 引入 layui.css --><link rel="stylesheet" href="//unpkg.com/layui@2.6.8/dist/css/layui.css">
</head>
<body><form class="layui-form" action="" style="margin-top: 20px"><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label">部门名称:</label><div class="layui-input-inline"><input type="text" name="deptName" placeholder="部门名称" autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">创建人:</label><div class="layui-input-inline"><input type="text" name="creatBy" placeholder="创建人" autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><label class="layui-form-label">修改人:</label><div class="layui-input-inline"><input type="text" name="updateBy" placeholder="修改人" autocomplete="off" class="layui-input"></div></div><div class="layui-inline"><div class="layui-input-block"><button type="button" class="layui-btn" lay-submit lay-filter="formDemo">查询</button><button type="reset" class="layui-btn layui-btn-primary">重置</button></div></div></div></form><!--要渲染的数据表格-->
<table id="dept" lay-filter="dept"></table><!--弹出表单-->
<form class="layui-form" action="" style="display: none;margin:10px" id="deptFrm" lay-filter="deptFrm"><!--学生编号,修改的时候,需要传这个值--><%--    <input type="hidden" id="studentId" name="studentId"/>--%><input type="hidden" id="deptId" name="deptId"/><input type="hidden" id="createBy" name="createBy" value="wwb" />  <!--默认为我自己,后期进行修改--><input type="hidden" id="updateBy" name="updateBy" value="wwb"/> <!--默认为我自己,后期进行修改--><!--设置提交的地址--><input type="hidden" id="action" name="action"><div class="layui-form-item"><label class="layui-form-label">部门名称</label><div class="layui-input-block"><input type="text" name="deptName"  lay-verify="required" placeholder="请输入部门名称" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">排序</label><div class="layui-input-block"><input type="text" name="orderNum"  lay-verify="required" placeholder="请输入排序" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">状态</label><div class="layui-input-block"><input type="checkbox" checked="" name="status" value="0"  lay-skin="switch" lay-filter="switchTest" lay-text="可用|不可用"></div></div><div class="layui-form-item"><div class="layui-input-block"><button type="button" class="layui-btn" lay-submit lay-filter="deptBtnSubmit">立即提交</button><button type="reset" class="layui-btn" lay-filter="deptBtnReset">重置</button></div></div>
</form><!--定义表格工具条-->
<script type="text/html" id="deptBar"><div class="layui-btn-container"><!--lay-event:用于设置一个按钮的特定事件,事件名字自己定义--><button type="button" class="layui-btn" lay-event="deptAdd">添加</button><button type="button" class="layui-btn layui-btn-danger" lay-event="deptBatchDel">批量删除</button></div>
</script><script type="text/html" id="deptRowBar"><div  class="layui-btn-container"><!--lay-event:用于设置一个按钮的特定事件,事件名字自己定义--><button type="button" class="layui-btn layui-btn-sm" lay-event="deptEdit">编辑</button><button type="button" class="layui-btn layui-btn-sm layui-btn-danger" lay-event="deptDel">删除</button></div>
</script><!-- 引入 layui.js -->
<script src="//unpkg.com/layui@2.6.8/dist/layui.js"></script><script>layui.use(['table','layer','laydate','form'], function(){var table = layui.table //表格组件,layer=layui.layer  //弹出层,laydate=layui.laydate //日期,form=layui.form //表单,$ = layui.$; //jqform.on('submit(formDemo)',function (data) {console.log(data);table.reload('dept', {where: { //设定异步数据接口的额外参数,任意设deptName: data.field.deptName,creatBy: data.field.creatBy,updateBy:data.field.updateBy},page: {curr: 1 //重新从第 1 页开始}})})//渲染表格数据table.render({elem: '#dept' //渲染的目标元素,url: '${pageContext.request.contextPath}/dept/deptListAll1' //发送请求获取数据,cellMinWidth: 80 //全局定义常规单元格的最小宽度,layui 2.2.1 新增,toolbar:"#deptBar" //设置表格工具条,defaultToolbar: ['filter']//,width:1000  //生成的表格,显示的宽度将被固定为1000,page:true //启用分页,limit:20 //每页条数,limits:[5,10,20,30] //可选条数,cols: [[  //表格列的定义{title:"全选",type:"checkbox"}//传进来的数据是dept对象,field用实体类中的属性(小驼峰),{field:'deptId', title: '编号', sort: true},{field:'deptName', width:100, title: '部门名称'},{field:'orderNum',  title: '排序',sort:true},{field:'status', width:100, title: '状态',templet:function (d){//console.log(d);if(d.status==0)return '<button type="button" class="layui-btn layui-btn-sm">正常</button>';elsereturn '<button type="button" class="layui-btn layui-btn-sm">异常</button>';}},{field:'createBy', width:80, title: '创建人',sort: true},{field:'createTime', width:180, title: '创建时间',sort: true},{field:'updateBy', width:80, title: '修改人'},{field:'updateTime', width:180, title: '修改时间',sort: true},{title:"操作",width:150,fixed:"right",toolbar:"#deptRowBar"}]]});//通过table组件监听表格头部工具条触发的事件table.on("toolbar(dept)",function (obj){console.log(obj);//根据触发的事件做特定处理switch (obj.event){case "deptAdd"://弹出表单$("#action").val("${pageContext.request.contextPath}/dept/deptInsert");showDeptFrm();break;case "deptBatchDel"://点击批量删除,获取当前选中行的信息var checkStatus = table.checkStatus('dept'); //idTest 即为基础参数 id 对应的值//判断当前是否有选中行if(checkStatus.data.length==0){layer.msg("请先选中一行");return;}var ids = [];for(var i=0;i<checkStatus.data.length;i++){ids.push({deptId: checkStatus.data[i].deptId});}//拼接数组中的id: 3,4,5,6delDept(ids);break;}})//通过table组件,监听行工具条事件table.on("tool(dept)",function (obj){console.log(obj);//判断点击按钮的事件switch (obj.event){case "deptEdit"://弹出表单$("#action").val("${pageContext.request.contextPath}/dept/deptUpdate");showDeptFrm();//为表单设值console.log(obj);form.val("deptFrm",obj.data);break;case "deptDel":layer.confirm("确定要删除么?",function (index){var ids = [] ;ids.push({deptId:obj.data.deptId});delDept(ids);//关闭确认框layer.close(index);})break;}})//绑定表单中,提交按钮的提交事件form.on("submit(deptBtnSubmit)",function (obj){console.log(obj);if(obj.field.status==null){obj.field.status='1';}$.ajax({url:$("#action").val(),type:"post",data:{"dept":JSON.stringify(obj.field)}, //表单数据dataType:"json",success:function (res){console.log("从contorller返回的int:"+res);if(res==0){layer.msg("添加成功",{icon:6});//关闭表单layer.close(deptFrmIndex);//表单重置$("#deptFrm")[0].reset();//刷新表格table.reload('dept', {page: {curr: 1 //重新从第 1 页开始}});}else{layer.msg("添加失败",{icon:5});}}})})//删除用户function delDept(ids){console.log(ids)$.ajax({url:"${pageContext.request.contextPath}/dept/deptDelete",data:{"idList":JSON.stringify(ids)},type:"post",dataType:"json",success:function (res){console.log(res);if(res.code==0){layer.msg("删除成功!",{icon:6});//重新加载表格//刷新表格table.reload('dept', {page: {curr: 1 //重新从第 1 页开始}});}else{layer.msg("删除失败!",{icon:5})}}})}var deptFrmIndex;//定义函数弹出学生表单function  showDeptFrm(){//页面层deptFrmIndex=layer.open({type: 1,area: ['600px',"400px"],title:"添加部门",content: $('#deptFrm')   //弹出页面元素});}});</script>
</body>
</html>

questionnaire_manage.jsp:

<%--Created by IntelliJ IDEA.User: jjkDate: 2022/9/2Time: 9:01
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>question</title><link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/assets/layui/css/layui.css"/><script rel="script" type="text/javascript" src="${pageContext.request.contextPath}/assets/layui/layui.js"></script><script rel="script" type="text/javascript" src="${pageContext.request.contextPath}/assets/jq/jquery-1.12.4.min.js"></script><script rel="script" type="text/javascript" src="${pageContext.request.contextPath}/assets/jq/jquery.qrcode.min.js"></script>
</head>
<body><form class="layui-form" action="" id="addQuestionsFrm" lay-filter="addQuestionsFrm" style="display: none"><input type="hidden" id="id" name="id"/><input type="hidden" id="enabled" name="enabled"/><input type="hidden" id="action" name="action"/><div class="layui-form-item"><label class="layui-form-label">问卷标题</label><div class="layui-input-inline"><input type="text" name="title" lay-verify="title" placeholder="请输入问卷标题" autocomplete="off" class="layui-input"></div></div><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label">记名/匿名</label><div class="layui-input-inline"><input type="checkbox" name="anonymous" id="anonymous" lay-skin="switch" lay-text="记名|匿名" checked></div></div></div><div class="layui-form-item"><div class="layui-input-block"><button type="button" class="layui-btn" lay-submit lay-filter="questionBtnSubmit">立即提交</button><button type="reset" class="layui-btn layui-btn-primary" lay-filter="deptBtnReset">重置</button></div></div>
</form>
<form class="layui-form" action="" id="selFrm" lay-event="selFrm" style="margin-top: 20px"><div class="layui-form-item"><label class="layui-form-label">问卷标题:</label><div class="layui-input-inline"><input type="text" name="questionTitle" id="questionTitle" placeholder="请输入问卷标题" autocomplete="off" class="layui-input"></div><label class="layui-form-label">创建人:</label><div class="layui-input-inline"><input type="text" name="createBy" id="createBy" placeholder="请输入创建者" autocomplete="off" class="layui-input"></div><div class="layui-input-inline"><button type="button" class="layui-btn" lay-submit lay-filter="selFrm" id="search">搜索</button><button type="reset" class="layui-btn layui-btn-primary">重置</button></div></div>
</form><%--表格--%>
<table id="questionnaires" lay-filter="questionnaires"></table><%--二维码--%><div id="div1" lay-filter="div1" style="display:none"><input cols="20" rows="10" id="url"  value="" style="margin-left: 33px" /><input id="copyBtn" type="button" class="layui-btn layui-btn-xs" value="复制链接" /><div id="div2" lay-event="div2" style="padding-left: 50px;margin-top: 10px"></div>
</div><script type="text/html" id="questionsBar" lay-filter="questionsBar"><div><button type="button" class="layui-btn" id="btnAdd" lay-event="questionsAdd"><i class="layui-icon layui-icon-add-1"></i>添加问卷</button><button type="button" class="layui-btn layui-btn-primary" id="questionCopy" lay-event="questionCopy"><i class="layui-icon layui-icon-add-1"></i>复制问卷</button><button type="button" class="layui-btn layui-btn-warm" id="questionPreview" lay-event="questionPreview"><i class="layui-icon layui-icon-layer"></i>预览问卷</button><button type="button" class="layui-btn layui-btn-normal" id="checkResult" lay-event="checkResult"><i class="layui-icon layui-icon-layer"></i>查看结果</button><button type="button" class="layui-btn layui-btn-danger" id="testDelSel" lay-event="questionsDelSel"><i class="layui-icon layui-icon-delete"></i>批量删除</button></div>
</script>
<script type="text/html" id="questionsTool" lay-filter="questionsTool"><button type="button" class="layui-btn layui-btn-xs" lay-event="questionsUpd">修改</button><button type="button" class="layui-btn layui-btn-normal layui-btn-xs" lay-event="addQuestions">添加题目</button><button type="button" class="layui-btn layui-btn-warm layui-btn-xs" lay-event="relQuestion">发布问卷</button><button type="button" class="layui-btn layui-btn-danger layui-btn-xs" lay-event="questionsDel">删除</button>
</script>
<script rel="script" type="text/javascript">layui.use(['table','layer','laydate','form'],function (){var table = layui.table,$ = layui.jquery,layer = layui.layer,form = layui.form;form.on('submit(selFrm)',function (data) {console.log(data);table.reload('questionnaires', {where: { //设定异步数据接口的额外参数,任意设questionTitle: data.field.questionTitle,createBy: data.field.createBy},page: {curr: 1 //重新从第 1 页开始}})})//渲染表格table.render({elem:'#questionnaires',height:500,url:'${pageContext.request.contextPath}/questionnaire/query',page:true,limit:10,limits:[5,10,20,50,100],even: true,toolbar:"#questionsBar",cols:[[{title: "全选",type:"checkbox" , fixed: 'left'}, {field: 'id', title: '编号', sort: true, align: 'center', width: 80 , fixed: 'left'}, {field: 'title', title: '问卷标题', width: 120}//, {field: 'anonymous', title: '记名/匿名', width: 120},{field:'anonymous',  title: '记名/匿名', sort: true,templet:function (d){//console.log(d);if(d.anonymous==0)return '匿名';elsereturn '记名';}},{field:'enabled',  title: '启用|禁用',width: 120, sort: true,templet:function (d){//console.log(d);if(d.enabled==0)return ' <input type="checkbox" name="close" lay-filter="switchTest" lay-skin="switch" lay-text="ON|OFF">';elsereturn '<input type="checkbox" checked name="open" lay-skin="switch" lay-filter="switchTest" lay-text="ON|OFF">';}}//, {field: 'enabled', title: '启用|禁用', width: 120}, {field: 'detailsCount', title: '题目数', width: 120,sort: true}//题目数, {field: 'userCount', title: '人数', width: 120,sort: true}//用户数, {field: 'create_by', title: '创建人', width: 120}, {field: 'create_time', title: '创建时间', width: 160,sort: true}, {field: 'update_by', title: '修改人', width: 120}, {field: 'update_time', title: '修改时间', width: 120,sort: true}, {title: '操作', width: 360, toolbar: '#questionsTool', fixed: 'right'}]],initSort: {field: 'id'//排序字段,对应 cols 设定的各字段名, type: 'asc' //排序方式  asc: 升序、desc: 降序、null: 默认排序}})form.on('switch(switchTest)',function (data) {//console.log();var id = data.elem.parentElement.parentElement.parentElement.children[1].children[0].innerText;var checked = data.elem.checked;console.log(id+" "+checked);$.ajax({url:"${pageContext.request.contextPath}/questionnaire/updataEnabled",method:'post',data:{"id":id,"checked":checked},dataType:'json',success:function (res) {console.log(res.code);table.reload('questionnaires', {page: {curr: 1 //重新从第 1 页开始}});}})})//通过table组件监听表格头部工具条触发的事件table.on('toolbar(questionnaires)',function (obj) {console.log(obj);var e = obj.event;switch (e) {case "questionsAdd":clearFrm();$("#action").val("${pageContext.request.contextPath}/questionnaire/questionnaireInsert");showFrm();break;case "questionCopy":var checkStatus = table.checkStatus('questionnaires'); //idTest 即为基础参数 id 对应的值//判断当前是否有选中行if(checkStatus.data.length!=1){layer.msg("需要选中一行");return;}clearFrm();$("#action").val("${pageContext.request.contextPath}/questionnaire/copyQuestionnaire");console.log(checkStatus.data);form.val("addQuestionsFrm",checkStatus.data[0]);showFrm();break;case "questionPreview":var checkStatus = table.checkStatus('questionnaires'); //idTest 即为基础参数 id 对应的值//判断当前是否有选中行if(checkStatus.data.length!=1){layer.msg("需要选中一行");return;}var id = checkStatus.data[0].id;window.location.href="${pageContext.request.contextPath}/toQuestionnairePreview/"+id;break;case "checkResult":var checkStatus = table.checkStatus('questionnaires'); //idTest 即为基础参数 id 对应的值//判断当前是否有选中行if(checkStatus.data.length!=1){layer.msg("需要选中一行");return;}var id = checkStatus.data[0].id;window.location.href="${pageContext.request.contextPath}/toQuestionnaireResult/"+id;break;case "questionsDelSel"://点击批量删除,获取当前选中行的信息var checkStatus = table.checkStatus('questionnaires'); //idTest 即为基础参数 id 对应的值//判断当前是否有选中行if(checkStatus.data.length==0){layer.msg("请先选中一行");return;}layer.confirm("确定删除吗?", function () {var ids = [];for(var i=0;i<checkStatus.data.length;i++){ids.push({id: checkStatus.data[i].id});}//拼接数组中的id: 3,4,5,6delUser(ids);})break;}})var id;//通过table组件监听表格右侧工具条触发的事件table.on('tool(questionnaires)',function (obj){// console.log(obj);var e = obj.event;switch(e){case "questionsUpd":clearFrm();//弹出表单$("#action").val("${pageContext.request.contextPath}/questionnaire/questionnaireUpdate");showFrm();//为表单设值console.log(obj.data);form.val("addQuestionsFrm",obj.data);break;case "questionsDel":layer.confirm("确定要删除么?",function (index){var ids = [] ;ids.push({id:obj.data.id});delUser(ids);//关闭确认框layer.close(index);})break;case "addQuestions":id = obj.data.id;window.location.href = "${pageContext.request.contextPath}/toQuestionnaireDetails/"+id;break;case "relQuestion":var enabled = obj.data.enabled;console.log(obj.data);console.log(obj);if(enabled==0){layer.msg('该问卷已被禁用',{icon:5});return;}id=obj.data.id;showDivFrm();break;}})//绑定表单中,提交按钮的提交事件form.on("submit(questionBtnSubmit)",function (obj){if($('#anonymous').is(":checked")){obj.field.anonymous='1';}else {obj.field.anonymous='0';}console.log(obj);$.ajax({url:$("#action").val(),type:"post",data:{"questionnaire":JSON.stringify(obj.field)}, //表单数据dataType:"json",success:function (res){console.log("从contorller返回的int:"+res);if(res.code==0){layer.msg("操作成功",{icon:6});//关闭表单layer.close(indexFrm);//表单重置//$("#deptFrm")[0].reset();clearFrm();//刷新表格table.reload('questionnaires', {page: {curr: 1 //重新从第 1 页开始}});}else{layer.msg("操作失败",{icon:5});}}})})//删除用户function delUser(ids){console.log(ids)$.ajax({url:"${pageContext.request.contextPath}/questionnaire/questionnaireDelete",data:{"idList":JSON.stringify(ids)},type:"post",dataType:"json",success:function (res){console.log(res);if(res.code==0){layer.msg("删除成功!",{icon:6});//重新加载表格//刷新表格table.reload('questionnaires', {page: {curr: 1 //重新从第 1 页开始}});}else{layer.msg("删除失败!",{icon:5})}}})}//表单重置function clearFrm(){$("#addQuestionsFrm")[0].reset();}//复制粘贴函数$("#copyBtn").on('click',function (obj){console.log(obj);var Url=document.getElementById("url");Url.select(); // 选择对象document.execCommand("Copy"); // 执行浏览器复制命令alert("已复制好,可贴粘。");})//显示表单var indexFrm;function showFrm(){// $('#addQuestionsFrm').show();indexFrm = layer.open({type: 1,title: '添加问卷',// offset:['50px','200px'],// offset: 't',area: ['400px','300px'],content: $("#addQuestionsFrm"),// content: $("#questionsDiv"),})}//显示发布问卷表单function showDivFrm(){$('#url').val("http://localhost:8080${pageContext.request.contextPath}/questionnaire/login/"+id);//准备二维码的规格对象(JSON)var config  = {width:200,//值是number类型, 表示的单位是px  必须传递height:200,//值是number类型, 表示的单位是px  必须传递text:$("#url").val(),//text就表示二维码中存储的数据  必须传递correctLevel:0,//取值为0|1|2|3 表示二维码的纠错级别0:L/1:M/2:Q/3:H ,默认0  可选参数// background:"#rrggbb",//默认白色, 表示二维码的后景颜色 可选参数// foreground:"#rrggbb",//默认黑色, 表示二维码的前景颜色 可选参数render:"table"//取值:table/canvas , 默认table 可选参数};// 通过选择器, 查找到上述的div ,得到Jquery对象, 通过jquery对象的qrcode函数生成二维码$("#div2").qrcode(config);indexFrm = layer.open({type: 1,title: '添加问卷',// offset:['50px','200px'],// offset: 't',area: ['300px','300px'],content: $("#div1"),// content: $("#questionsDiv"),})}function valFrm(data){form.val('addQuestionsFrm',data);form.val('addQuestionsFrm', {"status":data.status==0?true:false,});}})
</script>
</body>
</html>

web.xml :

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><!--监听项目启动加载mybatis容器--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mybatis.xml</param-value></context-param><!--字符过滤器--><filter><filter-name>charactorEncoding</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class></filter><filter-mapping><filter-name>charactorEncoding</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
// A code block
var foo = 'bar';
// A code block
var foo = 'bar';
// A code block
var foo = 'bar';
// A code block
var foo = 'bar';
// A code block
var foo = 'bar';

一期项目实战:问卷调查—人事管理系统相关推荐

  1. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

    0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之 ...

  2. Java十一期项目实战,璞玉成器

    Java十一期项目实战,璞玉成器 为了让学生所学不局限于理论,提升学员项目实战经验,检验几个月来的学习成果,1月24日下午,上海传智播客java11期班在203教室举办了项目实战答辩活动. Java视 ...

  3. 【JavaWeb】JavaWeb项目实战——品牌后台管理系统

    JavaWeb项目实战--品牌后台管理系统 项目概述 功能介绍 成果展示 项目实现 使用Maven构建项目 Maven介绍 具体操作 使用Mybatis封装对数据库的操作 在Mysql中建表,并添加数 ...

  4. 全栈开发实战|​人事管理系统的设计与实现(Spring Boot + Vue 3 + MyBatis)

    01.系统设计 系统总体目标是构建某单位的人事信息管理平台,不仅满足目前的业务需要,还要满足公司未来的发展,而且具备良好的可扩展性,形成公司未来人力资源管理信息化平台. 1●系统功能需求 人力资源部门 ...

  5. SpringBoot项目实战:员工管理系统

    员工管理系统 该项目实现了以下功能,对应的源码与数据库文件在资源中可下载 项目部分展示 1. 数据库设计 创建数据库 employee,创建两个表 employee(员工表)和depart(部门表) ...

  6. Java SpringMVC毕业项目实战-学生信息管理系统

    目录 摘要设计: 系统功能概述: B站视频演示:java毕业设计-SSM学生信息管理系统.mp4 主要功能截图: 主要数据库设计: 论文结构目录设计 : 获取完整源码: 摘要设计:文末获取源码联系 本 ...

  7. java图书馆管理项目_java项目实战之图书馆管理系统(带源码和解析)

    开发背景 图书馆是吉林省一家私营的中型图书馆企业.图书馆本着以读者为上帝为读者节省每一分钱的服务宗旨,企业利润逐年提高,规模不断壮大,经营图书品种.数量也逐渐增多.在企业不断发展的同时,企业传统的人工 ...

  8. 〖Python 数据库开发实战 - Python与MySQL交互篇⑪〗- 项目实战- 完善新闻管理系统中轮询的交互判断

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

  9. 〖Python 数据库开发实战 - Python与MySQL交互篇⑧〗- 项目实战 - 开发新闻管理系统(项目展示)

    订阅 Python全栈白宝书-零基础入门篇 可报销!白嫖入口-请点击我.推荐他人订阅,可获取扣除平台费用后的35%收益,文末名片加V! 说明:该文属于 Python全栈白宝书专栏,免费阶段订阅数量43 ...

最新文章

  1. Android Studio之gradle的配置与介绍
  2. javascript学习(三) 内置对象
  3. VisualStudioCode插件下载
  4. 鸿蒙荣耀x10max,荣耀X10 Max有秘密武器:5G大屏手机能比4G还省电
  5. python小课文件_[Python]小甲鱼Python视频第028课(文件:因为懂你,所以永恒)课后题及参考解8...
  6. input按钮中的onclick事件
  7. Python学习之变量、对象和引用
  8. [数据结构与算法] 单链表的简单demo
  9. 眼图观测实验报告_眼图观察测量实验
  10. CSS3---新增内容
  11. pytorch从ubuntu16.04到win7的迁移(解决)
  12. WSO2 Api Manager 集成 Analytics
  13. 圆台下料展开计算方法_冲压件展开计算方法(二),转发给每一位冲压人
  14. Remoting技术
  15. xcode 打包ipa
  16. 如何拯救k8s镜像分发的阿喀琉斯之踵
  17. 计算机内部进水会不会燃烧,发动机进水后内部变化惊人!“内脏”爆裂而亡
  18. Unity实现推箱子
  19. 计算机考试word文档怎么画坐标,使用WORD画坐标系的方法
  20. type转HDMI2.0方案|typec转HDMI 4K60Hz电路|CS5265 typec单转优势方案

热门文章

  1. 5G时代的物联网:福器还是凶器
  2. 傻瓜式搭建 hyperledger/cello
  3. Tushare使用分享(二)
  4. 火遍日本 IT 界的「鱼书」终出续作,原来进阶深度学习竟然那么简单
  5. 智慧校园-实验室预约介绍
  6. 计算机视觉中的多视图几何 --3D射影几何中的面与直线
  7. 多智能体强化学习(MARL)训练环境总结
  8. 小米商城抢购脚本_小米10系列MiCare保障服务上线:免费2次换屏 549元起
  9. MySQL 5.7中sync_binlog参数和半同步中after_commit和after_sync的区别
  10. sketch首款主题管理插件-主题大师