mirror of
https://github.com/dqjdda/Aurora.git
synced 2018-11-06 05:33:29 +00:00
新增QQ交流群:891137268,新增用户个人中心,安全中心,更新SQL文件
This commit is contained in:
@@ -8,11 +8,11 @@ Aurora是一个简单高效的后台管理系统。项目基础框架采用全
|
||||
|
||||
### Aurora1.2 版本更新计划
|
||||
|
||||
- 用户个人中心、安全中心
|
||||
- <del>部门管理、组织机构展示</del>
|
||||
- 短信模块、生日自动通知
|
||||
- 站内信模块、消息通知
|
||||
- 请假管理、Activiti工作流
|
||||
- del>用户个人中心</del>
|
||||
- <del>部门管理,组织结构</del>
|
||||
- 短信模块
|
||||
- 站内信模块
|
||||
- 工作流
|
||||
|
||||
### 预览地址,临时域名
|
||||
[http://xiswl.xyz](http://xiswl.xyz)
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@@ -139,7 +138,7 @@ public class DepartmentController {
|
||||
* @return
|
||||
*/
|
||||
@Log("删除部门")
|
||||
@RequiresPermissions (value={"admin", "menu:all","menu:delete"}, logical= Logical.OR)
|
||||
@RequiresPermissions (value={"admin", "department:all","department:delete"}, logical= Logical.OR)
|
||||
@DeleteMapping(value = "/delete")
|
||||
public ResponseEntity delete(@RequestParam Long id){
|
||||
log.warn("REST request to delete Department : {}" +id);
|
||||
|
||||
@@ -24,10 +24,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* @author 郑杰
|
||||
@@ -72,6 +69,25 @@ public class MenuController {
|
||||
return menuVoList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 构建上级类目树形菜单
|
||||
*/
|
||||
@GetMapping(value = "/buildMenu")
|
||||
public Object buildMenu(){
|
||||
|
||||
List<Menu> list = new ArrayList<>();
|
||||
|
||||
Menu menu = new Menu();
|
||||
menu.setId(0L);
|
||||
menu.setName("顶级类目");
|
||||
menu.setPid(null);
|
||||
|
||||
list.add(menu);
|
||||
|
||||
List<Map<String, Object>> mapList = menuService.buildMenu(list);
|
||||
return mapList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 跳转到列表页面
|
||||
* @return
|
||||
@@ -109,10 +125,6 @@ public class MenuController {
|
||||
@RequiresPermissions (value={"admin", "menu:all","menu:add"}, logical= Logical.OR)
|
||||
@GetMapping(value = "/toAddPage")
|
||||
public ModelAndView toAddPage(){
|
||||
List<Menu> menus = menuService.findAllMenus();
|
||||
// 获取request
|
||||
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
|
||||
request.setAttribute("topMenus",menus);
|
||||
return new ModelAndView("/system/menu/add");
|
||||
}
|
||||
|
||||
@@ -142,11 +154,9 @@ public class MenuController {
|
||||
@GetMapping(value = "/toUpdatePage")
|
||||
public ModelAndView toUpdatePage(@RequestParam Long id){
|
||||
Menu menu = menuService.findById(id);
|
||||
List<Menu> menus = menuService.findAllMenus();
|
||||
// 获取request
|
||||
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
|
||||
String rolesSelect = roleService.getRoles(menu.getRoles());
|
||||
request.setAttribute("topMenus",menus);
|
||||
request.setAttribute("menu",menuMapper.toDto(menu,rolesSelect));
|
||||
return new ModelAndView("/system/menu/update");
|
||||
}
|
||||
|
||||
@@ -38,7 +38,17 @@ public class PermissionController {
|
||||
|
||||
@GetMapping(value = "/getAllPermissions")
|
||||
public Object getAllRole(){
|
||||
List<Map<String, Object>> permissionList = permissionService.buildPermissionTree(permissionService.findByPid(0));
|
||||
List<Map<String, Object>> permissionList = permissionService.buildPermissionTree(permissionService.findByPid(0,false));
|
||||
return permissionList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于上级权限
|
||||
* @return
|
||||
*/
|
||||
@GetMapping(value = "/getTopPermissions")
|
||||
public Object getTopPermissions(){
|
||||
List<Map<String, Object>> permissionList = permissionService.buildTopPermissionTree(permissionService.findByPid(0,true));
|
||||
return permissionList;
|
||||
}
|
||||
|
||||
@@ -80,10 +90,6 @@ public class PermissionController {
|
||||
@RequiresPermissions (value={"admin", "permission:all","permission:add"}, logical= Logical.OR)
|
||||
@GetMapping(value = "/toAddPage")
|
||||
public ModelAndView toAddPage(){
|
||||
List<Permission> permissionList = permissionService.findByPid(0);
|
||||
// 获取request
|
||||
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
|
||||
request.setAttribute("topPermissions",permissionList);
|
||||
return new ModelAndView("/system/permission/add");
|
||||
}
|
||||
|
||||
@@ -111,8 +117,6 @@ public class PermissionController {
|
||||
Permission permission = permissionService.findById(id);
|
||||
// 获取request
|
||||
HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
|
||||
List<Permission> permissionList = permissionService.findByPid(0);
|
||||
request.setAttribute("topPermissions",permissionList);
|
||||
request.setAttribute("permission",perMissionMapper.toDto(permission));
|
||||
return new ModelAndView("/system/permission/update");
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -211,4 +212,79 @@ public class UserController {
|
||||
userService.delete(userService.findById(id));
|
||||
return ResponseEntity.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 去个人中心
|
||||
* @param model
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/info")
|
||||
public ModelAndView info(Model model) {
|
||||
User user = (User) SecurityUtils.getSubject().getPrincipal();
|
||||
user = userService.findById(user.getId());
|
||||
model.addAttribute("userInfo",userMapper.toDto(user));
|
||||
return new ModelAndView("/user/info");
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改资料
|
||||
* @param result
|
||||
* @return
|
||||
*/
|
||||
@PutMapping(value = "/updateInfo")
|
||||
public ResponseEntity updateInfo(@Validated(User.UpdateInfo.class) @RequestBody User result) {
|
||||
|
||||
User user = userService.findById(result.getId());
|
||||
|
||||
user = userService.findById(user.getId());
|
||||
user.setAvatar(result.getAvatar());
|
||||
user.setEmail(result.getEmail());
|
||||
|
||||
userService.save(user);
|
||||
|
||||
return ResponseEntity.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查密码
|
||||
* @param id
|
||||
* @param password
|
||||
* @return
|
||||
*/
|
||||
@GetMapping(value = "/checkPass")
|
||||
public ResponseEntity checkPass(@RequestParam Long id,@RequestParam String password) {
|
||||
|
||||
User user = userService.findById(id);
|
||||
password = EncryptHelper.encrypt(password);
|
||||
if(user.getPassword().equals(password)){
|
||||
return ResponseEntity.ok();
|
||||
} else {
|
||||
return ResponseEntity.error();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
* @param id
|
||||
* @param password
|
||||
* @param oldPwd
|
||||
* @return
|
||||
*/
|
||||
@GetMapping(value = "/resetPwd")
|
||||
public ResponseEntity resetPwd(@RequestParam Long id,@RequestParam String password,@RequestParam String oldPwd) {
|
||||
|
||||
User user = userService.findById(id);
|
||||
password = EncryptHelper.encrypt(password);
|
||||
oldPwd = EncryptHelper.encrypt(oldPwd);
|
||||
|
||||
if(! user.getPassword().equals(oldPwd)){
|
||||
return ResponseEntity.error("原始密码错误");
|
||||
} else {
|
||||
user.setPassword(password);
|
||||
}
|
||||
userService.save(user);
|
||||
return ResponseEntity.ok();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -93,7 +93,6 @@ public class ShiroRealm extends AuthorizingRealm {
|
||||
if (enabled.equals(user.getEnabled())) {
|
||||
throw new LockedAccountException("账号已被锁定,请联系管理员!");
|
||||
}
|
||||
userService.checkLastLoginTime(user);
|
||||
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user, password, getName());
|
||||
return info;
|
||||
}
|
||||
|
||||
@@ -25,10 +25,10 @@ public class Department implements Serializable {
|
||||
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@NotNull(groups = {Department.Update.class})
|
||||
@NotNull(groups = {Update.class})
|
||||
private Long id;
|
||||
|
||||
@NotBlank(groups = {Department.New.class, Department.Update.class})
|
||||
@NotBlank(groups = {New.class, Update.class})
|
||||
@Column(name = "name",nullable = false)
|
||||
private String name;
|
||||
|
||||
@@ -39,7 +39,7 @@ public class Department implements Serializable {
|
||||
* 上级部门ID
|
||||
*/
|
||||
@Column(name = "pid",nullable = false)
|
||||
@NotNull(groups = {Department.New.class, Department.Update.class})
|
||||
@NotNull(groups = {New.class, Update.class})
|
||||
private Integer pid;
|
||||
|
||||
@ManyToMany
|
||||
|
||||
@@ -12,6 +12,7 @@ import javax.persistence.*;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
@@ -28,33 +29,36 @@ public class User implements Serializable {
|
||||
@Id
|
||||
@Column(unique = true)
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@NotNull(groups = {Update.class})
|
||||
@NotNull(groups = {Update.class,UpdateInfo.class})
|
||||
private Long id;
|
||||
|
||||
@Column(unique = true,nullable = false)
|
||||
@NotBlank(groups = {New.class,Update.class})
|
||||
private String username;
|
||||
|
||||
@NotBlank(groups = {New.class,Update.class})
|
||||
@NotNull(groups = {New.class,Update.class})
|
||||
private String sex;
|
||||
|
||||
@NotNull(groups = {New.class,Update.class})
|
||||
private LocalDate birthday;
|
||||
|
||||
@Column(nullable = false)
|
||||
private String password;
|
||||
|
||||
@NotBlank(groups = {New.class,Update.class})
|
||||
@NotBlank(groups = {New.class,Update.class,UpdateInfo.class})
|
||||
@Column(unique = true,nullable = false)
|
||||
private String email;
|
||||
|
||||
private Integer enabled=1;
|
||||
|
||||
@Column(nullable = false)
|
||||
@NotBlank(groups = {UpdateInfo.class})
|
||||
private String avatar;
|
||||
|
||||
@Column
|
||||
@CreationTimestamp
|
||||
private Timestamp createDateTime;
|
||||
|
||||
@Column
|
||||
private Timestamp lastLoginTime;
|
||||
|
||||
@ManyToMany
|
||||
@JoinTable(name = "zj_users_roles", joinColumns = {@JoinColumn(name = "user_id",referencedColumnName = "id")}, inverseJoinColumns = {@JoinColumn(name = "role_id",referencedColumnName = "id")})
|
||||
private Set<Role> roles;
|
||||
@@ -71,6 +75,7 @@ public class User implements Serializable {
|
||||
|
||||
public interface New{};
|
||||
public interface Update{};
|
||||
public interface UpdateInfo{};
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
@@ -82,7 +87,6 @@ public class User implements Serializable {
|
||||
", enabled=" + enabled +
|
||||
", avatar='" + avatar + '\'' +
|
||||
", createDateTime=" + createDateTime +
|
||||
", lastLoginTime=" + lastLoginTime +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
||||
@@ -90,4 +90,11 @@ public interface MenuService {
|
||||
*/
|
||||
@CacheEvict(allEntries = true)
|
||||
void update(Menu menu, Menu oldMenu, String roles);
|
||||
|
||||
/**
|
||||
* 构建树形菜单
|
||||
* @param list
|
||||
* @return
|
||||
*/
|
||||
List<Map<String, Object>> buildMenu(List<Menu> list);
|
||||
}
|
||||
|
||||
@@ -79,10 +79,10 @@ public interface PermissionService {
|
||||
/**
|
||||
* 根据上级类目ID查询权限
|
||||
* @param pid
|
||||
* @param isTop
|
||||
* @return
|
||||
*/
|
||||
@Cacheable(key = "'pid:'+#p0")
|
||||
List<Permission> findByPid(int pid);
|
||||
List<Permission> findByPid(int pid,Boolean isTop);
|
||||
|
||||
/**
|
||||
* 根据角色获取所有权限
|
||||
@@ -90,4 +90,11 @@ public interface PermissionService {
|
||||
* @return
|
||||
*/
|
||||
List<Permission> findByRoles(Set<Role> roles);
|
||||
|
||||
/**
|
||||
* 构建顶级权限树
|
||||
* @param byPid
|
||||
* @return
|
||||
*/
|
||||
List<Map<String, Object>> buildTopPermissionTree(List<Permission> byPid);
|
||||
}
|
||||
|
||||
@@ -66,13 +66,6 @@ public interface UserService {
|
||||
@CacheEvict(allEntries = true)
|
||||
void update(User user, String roles);
|
||||
|
||||
/**
|
||||
* 更新最近登录时间
|
||||
* @param user
|
||||
*/
|
||||
@CacheEvict(allEntries = true)
|
||||
void checkLastLoginTime(User user);
|
||||
|
||||
/**
|
||||
* 删除用户
|
||||
* @param id
|
||||
@@ -88,4 +81,11 @@ public interface UserService {
|
||||
*/
|
||||
@CacheEvict(allEntries = true)
|
||||
void updateEnabled(User user);
|
||||
|
||||
/**
|
||||
* 保存
|
||||
* @param user
|
||||
*/
|
||||
@CacheEvict(allEntries = true)
|
||||
void save(User user);
|
||||
}
|
||||
|
||||
@@ -4,6 +4,7 @@ import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
@@ -28,7 +29,9 @@ public class UserDTO implements Serializable {
|
||||
|
||||
private String departmentName;
|
||||
|
||||
private Timestamp createDateTime;
|
||||
private String sex;
|
||||
|
||||
private Timestamp lastLoginTime;
|
||||
private LocalDate birthday;
|
||||
|
||||
private Timestamp createDateTime;
|
||||
}
|
||||
|
||||
@@ -225,4 +225,35 @@ public class MenuServiceImpl implements MenuService {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> buildMenu(List<Menu> list) {
|
||||
|
||||
List<Map<String,Object>> maps = new LinkedList<>();
|
||||
list.forEach(menu -> {
|
||||
if (menu!=null){
|
||||
List<Menu> menus = new ArrayList<>();
|
||||
Map<String,Object> map = new HashMap<>(16);
|
||||
map.put("id",menu.getId());
|
||||
map.put("name",menu.getName());
|
||||
|
||||
if(menu.getId().equals(0L)){
|
||||
menus = menuRepo.findByPid(0);
|
||||
}
|
||||
|
||||
if(menus!=null && menus.size()!=0){
|
||||
|
||||
/**
|
||||
* 只遍历一级类目
|
||||
*/
|
||||
if(menu.getId().equals(0L)){
|
||||
map.put("children",buildMenu(menus));
|
||||
}
|
||||
}
|
||||
maps.add(map);
|
||||
}
|
||||
}
|
||||
);
|
||||
return maps;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -86,6 +86,37 @@ public class PermissionServiceImpl implements PermissionService {
|
||||
return permissionRepo.findAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> buildTopPermissionTree(List<Permission> permissions) {
|
||||
List<Map<String,Object>> maps = new LinkedList<>();
|
||||
permissions.forEach(permission -> {
|
||||
if (permission!=null){
|
||||
List<Permission> permissionList = new ArrayList<>();
|
||||
Map<String,Object> map = new HashMap<>(16);
|
||||
map.put("id",permission.getId());
|
||||
String name = !StrUtil.isEmpty(permission.getRemark())?permission.getRemark():permission.getPerms();
|
||||
map.put("name",name);
|
||||
|
||||
if(permission.getId().equals(0L)){
|
||||
permissionList = permissionRepo.findByPid(0);
|
||||
}
|
||||
|
||||
if(permissionList!=null && permissionList.size()!=0){
|
||||
|
||||
/**
|
||||
* 只遍历一级类目
|
||||
*/
|
||||
if(permission.getId().equals(0L)){
|
||||
map.put("children",buildTopPermissionTree(permissionList));
|
||||
}
|
||||
}
|
||||
maps.add(map);
|
||||
}
|
||||
}
|
||||
);
|
||||
return maps;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Map<String, Object>> buildPermissionTree(List<Permission> permissions) {
|
||||
List<Map<String,Object>> maps = new LinkedList<>();
|
||||
@@ -109,8 +140,19 @@ public class PermissionServiceImpl implements PermissionService {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Permission> findByPid(int pid) {
|
||||
return permissionRepo.findByPid(pid);
|
||||
public List<Permission> findByPid(int pid,Boolean isTop) {
|
||||
|
||||
List<Permission> list = new ArrayList<>();
|
||||
if(isTop){
|
||||
Permission permission = new Permission();
|
||||
permission.setId(0L);
|
||||
permission.setPerms("顶级类目");
|
||||
permission.setPid(null);
|
||||
list.add(permission);
|
||||
} else {
|
||||
list.addAll(permissionRepo.findByPid(pid));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,6 +10,7 @@ import me.aurora.service.RoleService;
|
||||
import me.aurora.service.UserService;
|
||||
import me.aurora.service.dto.UserDTO;
|
||||
import me.aurora.service.mapper.UserMapper;
|
||||
import me.aurora.util.AuroraConstant;
|
||||
import me.aurora.util.EncryptHelper;
|
||||
import me.aurora.util.PageUtil;
|
||||
import me.aurora.config.exception.AuroraException;
|
||||
@@ -84,7 +85,7 @@ public class UserServiceImpl implements UserService {
|
||||
if(userRepo.findByEmail(user.getEmail())!=null){
|
||||
throw new AuroraException(HttpStatus.HTTP_BAD_REQUEST,"用户邮箱已存在");
|
||||
}
|
||||
user.setPassword(EncryptHelper.encrypt(user.getPassword()));
|
||||
user.setPassword(AuroraConstant.PWD);
|
||||
Set<Role> roleSet = new HashSet<>();
|
||||
for(String roleId:roles.split(",")){
|
||||
Role role = new Role();
|
||||
@@ -108,7 +109,6 @@ public class UserServiceImpl implements UserService {
|
||||
throw new AuroraException(HttpStatus.HTTP_BAD_REQUEST,"用户邮箱已存在");
|
||||
}
|
||||
old = userRepo.findById(user.getId()).get();
|
||||
old.setPassword(EncryptHelper.encrypt(user.getPassword()));
|
||||
old.setUsername(user.getUsername());
|
||||
old.setEmail(user.getEmail());
|
||||
old.setDepartment(user.getDepartment());
|
||||
@@ -123,14 +123,6 @@ public class UserServiceImpl implements UserService {
|
||||
userRepo.save(old);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void checkLastLoginTime(User user) {
|
||||
user.setLastLoginTime(new Timestamp(System.currentTimeMillis()));
|
||||
userRepo.save(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public void delete(User user) {
|
||||
@@ -157,4 +149,9 @@ public class UserServiceImpl implements UserService {
|
||||
user.setEnabled(user.getEnabled()==1?0:1);
|
||||
userRepo.save(user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(User user) {
|
||||
userRepo.save(user);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,5 +21,18 @@ public interface UserMapper extends EntityMapper<UserDTO, User>{
|
||||
*/
|
||||
@Mapping(source = "rolesSelect",target = "rolesSelect")
|
||||
@Mapping(source = "user.department.name",target = "departmentName")
|
||||
@Mapping(source = "user.sex",target = "sex")
|
||||
@Mapping(source = "user.birthday",target = "birthday")
|
||||
UserDTO toDto(User user,String rolesSelect);
|
||||
|
||||
/**
|
||||
* 自定义转换
|
||||
* @param user
|
||||
* @return
|
||||
*/
|
||||
@Mapping(source = "user.department.name",target = "departmentName")
|
||||
@Override
|
||||
UserDTO toDto(User user);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -7,6 +7,11 @@ package me.aurora.util;
|
||||
*/
|
||||
public class AuroraConstant {
|
||||
|
||||
/**
|
||||
* 在添加时,如需手动添加密码,请使用js的MD5进行加密,参考登录页面,后台再次进行加密,保存到数据库,默认密码:123456
|
||||
*/
|
||||
public static final String PWD = "36318d4cc46eb68050b8b81ebc620f05";
|
||||
|
||||
public static final String SUCCESS = "success";
|
||||
|
||||
/**
|
||||
|
||||
@@ -134,4 +134,4 @@ aurora:
|
||||
unauthorizedUrl: /exception/403
|
||||
# 是否开启 AOP 日志,默认开启
|
||||
openAopLog: true
|
||||
userAvatar: https://i.loli.net/2018/08/16/5b75166b3157a.jpg
|
||||
userAvatar: https://i.loli.net/2018/10/27/5bd4223fa208a.jpg
|
||||
@@ -11,7 +11,7 @@
|
||||
Target Server Version : 50559
|
||||
File Encoding : 65001
|
||||
|
||||
Date: 27/10/2018 13:41:56
|
||||
Date: 27/10/2018 18:34:02
|
||||
*/
|
||||
|
||||
SET NAMES utf8mb4;
|
||||
@@ -165,24 +165,6 @@ CREATE TABLE `zj_job` (
|
||||
INSERT INTO `zj_job` VALUES (1, 'myTaskTest', '0/5 * * * * ?', 'test', '测试', '带参数测试', '1', '2018-10-25 20:15:57');
|
||||
INSERT INTO `zj_job` VALUES (2, 'myTaskTest', '0/6 * * * * ?', 'test1', '', '不带参数测试', '1', '2018-10-15 16:16:44');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for zj_job_log
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `zj_job_log`;
|
||||
CREATE TABLE `zj_job_log` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`baen_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`cron_expression` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`error_msg` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`job_id` bigint(20) NULL DEFAULT NULL,
|
||||
`method_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`params` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`status` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`times` bigint(20) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for zj_menu
|
||||
-- ----------------------------
|
||||
@@ -202,7 +184,7 @@ CREATE TABLE `zj_menu` (
|
||||
`sys` bit(1) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `UK_cbhg0bi3f1emxkhqqtvca9btx`(`soft`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 35 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 36 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of zj_menu
|
||||
@@ -296,7 +278,7 @@ CREATE TABLE `zj_permission` (
|
||||
`pid` int(11) NOT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `UK_djtxn2vldlgrkfk21d155b48i`(`perms`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 45 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 51 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of zj_permission
|
||||
@@ -341,6 +323,11 @@ INSERT INTO `zj_permission` VALUES (40, 'job:add', '新增任务', '2018-10-06 1
|
||||
INSERT INTO `zj_permission` VALUES (41, 'job:status', '任务状态修改', '2018-10-06 12:29:45', '2018-10-06 12:29:45', 37);
|
||||
INSERT INTO `zj_permission` VALUES (42, 'job:update', '更新任务', '2018-10-06 12:30:00', '2018-10-06 12:30:00', 37);
|
||||
INSERT INTO `zj_permission` VALUES (43, 'job:delete', '删除任务', '2018-10-06 12:30:16', '2018-10-06 12:30:16', 37);
|
||||
INSERT INTO `zj_permission` VALUES (45, 'department:all', '部门管理', '2018-10-27 17:26:29', '2018-10-27 18:12:14', 0);
|
||||
INSERT INTO `zj_permission` VALUES (46, 'department:add', '新增部门', '2018-10-27 17:27:02', '2018-10-27 17:27:02', 45);
|
||||
INSERT INTO `zj_permission` VALUES (47, 'department:update', '修改部门', '2018-10-27 17:27:48', '2018-10-27 17:27:48', 45);
|
||||
INSERT INTO `zj_permission` VALUES (48, 'department:delete', '删除部门', '2018-10-27 17:28:13', '2018-10-27 17:28:13', 45);
|
||||
INSERT INTO `zj_permission` VALUES (49, 'department:select', '部门查询', '2018-10-27 17:28:29', '2018-10-27 17:28:29', 45);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for zj_permissions_roles
|
||||
@@ -458,21 +445,22 @@ CREATE TABLE `zj_user` (
|
||||
`createDateTime` datetime NULL DEFAULT NULL,
|
||||
`email` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`enabled` bigint(20) NULL DEFAULT NULL,
|
||||
`lastLoginTime` datetime NULL DEFAULT NULL,
|
||||
`password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`username` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`department_id` bigint(20) NULL DEFAULT NULL,
|
||||
`sex` varchar(11) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
`birthday` date NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `UK_kpubos9gc2cvtkb0thktkbkes`(`email`) USING BTREE,
|
||||
INDEX `FKqfitoyy9x1gctukdi020j4224`(`department_id`) USING BTREE,
|
||||
CONSTRAINT `FKqfitoyy9x1gctukdi020j4224` FOREIGN KEY (`department_id`) REFERENCES `zj_department` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 9 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of zj_user
|
||||
-- ----------------------------
|
||||
INSERT INTO `zj_user` VALUES (1, 'https://www.zhengjie.me/images/avatar.jpg', '2018-08-23 09:11:56', 'zhengjie@tom.com', 1, '2018-10-27 13:38:59', '36318d4cc46eb68050b8b81ebc620f05', 'aurora', 6);
|
||||
INSERT INTO `zj_user` VALUES (2, 'https://i.loli.net/2018/08/16/5b75166b3157a.jpg', '2018-10-03 09:16:20', 'everyone@aurora.xyz', 1, '2018-10-05 11:29:44', '36318d4cc46eb68050b8b81ebc620f05', 'everyone', 15);
|
||||
INSERT INTO `zj_user` VALUES (1, 'https://i.loli.net/2018/10/27/5bd4223fa208a.jpg', '2018-08-23 09:11:56', 'zhengjie@tom.com', 1, '36318d4cc46eb68050b8b81ebc620f05', 'aurora', 6, '男', '1996-09-30');
|
||||
INSERT INTO `zj_user` VALUES (2, 'https://i.loli.net/2018/10/27/5bd4223fa208a.jpg', '2018-10-03 09:16:20', 'everyone@aurora.xyz', 1, '36318d4cc46eb68050b8b81ebc620f05', 'everyone', 15, '女', '2018-10-27');
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for zj_user_pictures
|
||||
@@ -506,21 +494,4 @@ CREATE TABLE `zj_users_roles` (
|
||||
INSERT INTO `zj_users_roles` VALUES (1, 1);
|
||||
INSERT INTO `zj_users_roles` VALUES (2, 3);
|
||||
|
||||
-- ----------------------------
|
||||
-- Table structure for zj_web_count
|
||||
-- ----------------------------
|
||||
DROP TABLE IF EXISTS `zj_web_count`;
|
||||
CREATE TABLE `zj_web_count` (
|
||||
`id` bigint(20) NOT NULL AUTO_INCREMENT,
|
||||
`web_counts` bigint(20) NULL DEFAULT NULL,
|
||||
`createTime` datetime NULL DEFAULT NULL,
|
||||
`date` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`) USING BTREE
|
||||
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
|
||||
|
||||
-- ----------------------------
|
||||
-- Records of zj_web_count
|
||||
-- ----------------------------
|
||||
INSERT INTO `zj_web_count` VALUES (3, 1, '2018-10-27 13:41:26', '2018-10-27');
|
||||
|
||||
SET FOREIGN_KEY_CHECKS = 1;
|
||||
|
||||
@@ -150,6 +150,7 @@ layui.define(mods, function(exports) {
|
||||
});
|
||||
//主页
|
||||
routes.push({path: "/", component: "/common/app", name: "主页"})
|
||||
routes.push({path: "/user/info", component: "/user/info", name: "个人中心"})
|
||||
var _private = {
|
||||
routeInit: function(config) {
|
||||
var that = this;
|
||||
|
||||
@@ -109,11 +109,11 @@
|
||||
<div class="layui-card-header">Aurora1.2 版本更新计划</div>
|
||||
<div class="layui-text" style="padding-left: 20px;">
|
||||
<ul>
|
||||
<li>用户个人中心、安全中心</li>
|
||||
<li>部门管理、组织机构展示</li>
|
||||
<li>短信模块、生日自动通知</li>
|
||||
<li>站内信模块、消息通知</li>
|
||||
<li>请假管理、Activiti工作流</li>
|
||||
<li><del>用户个人中心</del></li>
|
||||
<li><del>部门管理,组织结构</del></li>
|
||||
<li>短信模块</li>
|
||||
<li>站内信模块</li>
|
||||
<li>工作流</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -70,7 +70,7 @@
|
||||
</a>
|
||||
<ul class="kit-nav-child kit-nav-right">
|
||||
<li class="kit-item">
|
||||
<a href="#/user/my">
|
||||
<a href="#/user/info">
|
||||
<i class="layui-icon"></i>
|
||||
<span>个人中心</span>
|
||||
</a>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Aurora- 新增菜单</title>
|
||||
<!-- build:css -->
|
||||
<link rel="stylesheet" th:href="@{'/plugins/css/treeselect.css'}">
|
||||
<link rel="stylesheet" th:href="@{'/plugins/css/layui.css'}">
|
||||
<link rel="stylesheet" th:href="@{'/plugins/lay/layui-treeselect/src/css/ztree/metro/ztree.css'}" media="all"/>
|
||||
<link rel="stylesheet" th:href="@{'/plugins/lay/layui-treeselect/src/css/treeselect.css'}" media="all"/>
|
||||
@@ -28,10 +29,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">上级类目</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="pid" lay-filter="top" lay-verify="" lay-search>
|
||||
<option value="0">无</option>
|
||||
<option th:each="m:${topMenus}" th:value="${m.id}">[[${m.name}]]</option>
|
||||
</select>
|
||||
<input type="text" name="pid" id="tree" placeholder="选择上级类目" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div id="action" class="layui-form-item" style="display: none">
|
||||
@@ -67,11 +65,24 @@
|
||||
<script th:src="@{'/plugins/layui.js'}"></script>
|
||||
<!-- build:use -->
|
||||
<script>
|
||||
|
||||
layui.config({
|
||||
base: '../plugins/lay/modules/'
|
||||
}).use(['treeSelect'], function () {
|
||||
|
||||
var treeSelect = layui.treeSelect;
|
||||
treeSelect.render(
|
||||
{
|
||||
elem: "#tree",
|
||||
data: '/menu/buildMenu',
|
||||
method: "GET"
|
||||
});
|
||||
});
|
||||
|
||||
layui.config({
|
||||
base: '../plugins/lay/modules/'
|
||||
}).extend({
|
||||
iconPicker:'iconPicker'
|
||||
}).use(['iconPicker'], function () {
|
||||
|
||||
var iconPicker = layui.iconPicker;
|
||||
iconPicker.render({
|
||||
// 选择器,推荐使用input
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
var roles = body.contents().find("input[name=\"role\"]").val();
|
||||
var ico = body.contents().find("input[name=\"ico\"]").val();
|
||||
var name = body.contents().find("input[name=\"name\"]").val();
|
||||
var pid = body.contents().find("select[name=\"pid\"]").val();
|
||||
var pid = body.contents().find("input[name=\"pid\"]").val();
|
||||
var url = body.contents().find("input[name=\"url\"]").val();
|
||||
var iframe = body.contents().find("input[name=\"iframe\"]:checked").val()
|
||||
if(pid == 0){
|
||||
@@ -266,7 +266,7 @@
|
||||
var roles = body.contents().find("input[name=\"role\"]").val();
|
||||
var ico = body.contents().find("input[name=\"ico\"]").val();
|
||||
var name = body.contents().find("input[name=\"name\"]").val();
|
||||
var pid = body.contents().find("select[name=\"pid\"]").val();
|
||||
var pid = body.contents().find("input[name=\"pid\"]").val();
|
||||
var url = body.contents().find("input[name=\"url\"]").val();
|
||||
var iframe = body.contents().find("input[name=\"iframe\"]:checked").val()
|
||||
if(pid == 0){
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Aurora- 更新菜单</title>
|
||||
<!-- build:css -->
|
||||
<link rel="stylesheet" th:href="@{'/plugins/css/treeselect.css'}">
|
||||
<link rel="stylesheet" th:href="@{'/plugins/css/layui.css'}">
|
||||
<link rel="stylesheet" th:href="@{'/plugins/lay/layui-treeselect/src/css/ztree/metro/ztree.css'}" media="all"/>
|
||||
<link rel="stylesheet" th:href="@{'/plugins/lay/layui-treeselect/src/css/treeselect.css'}" media="all"/>
|
||||
@@ -29,10 +30,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">上级类目</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="pid" lay-filter="top" lay-verify="" lay-search>
|
||||
<option value="0">无</option>
|
||||
<option th:selected="${menu.pid == m.id}" th:each="m:${topMenus}" th:value="${m.id}">[[${m.name}]]</option>
|
||||
</select>
|
||||
<input type="text" name="pid" th:value="${menu.pid}" id="tree" placeholder="选择上级类目" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div id="action" class="layui-form-item" style="display: none">
|
||||
@@ -68,10 +66,22 @@
|
||||
<script th:src="@{'/plugins/layui.js'}"></script>
|
||||
<!-- build:use -->
|
||||
<script>
|
||||
|
||||
layui.config({
|
||||
base: '../plugins/lay/modules/'
|
||||
}).use(['treeSelect'], function () {
|
||||
|
||||
var treeSelect = layui.treeSelect;
|
||||
treeSelect.render(
|
||||
{
|
||||
elem: "#tree",
|
||||
data: '/menu/buildMenu',
|
||||
method: "GET"
|
||||
});
|
||||
});
|
||||
|
||||
layui.config({
|
||||
base: '../plugins/lay/modules/'
|
||||
}).extend({
|
||||
iconPicker:'iconPicker'
|
||||
}).use(['iconPicker'], function () {
|
||||
var iconPicker = layui.iconPicker;
|
||||
iconPicker.render({
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Aurora- 新增权限</title>
|
||||
<!-- build:css -->
|
||||
<link rel="stylesheet" th:href="@{'/plugins/css/treeselect.css'}">
|
||||
<link rel="stylesheet" th:href="@{'/plugins/css/layui.css'}">
|
||||
<!-- endbuild -->
|
||||
</head>
|
||||
@@ -20,10 +21,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">上级类目</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="pid" lay-verify="" lay-search>
|
||||
<option value="0">无</option>
|
||||
<option th:each="p:${topPermissions}" th:value="${p.id}">[[${p.remark}]]</option>
|
||||
</select>
|
||||
<input type="text" name="pid" id="tree" placeholder="选择上级权限" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
@@ -39,6 +37,20 @@
|
||||
<script th:src="@{'/plugins/layui.js'}"></script>
|
||||
<!-- build:use -->
|
||||
<script>
|
||||
|
||||
layui.config({
|
||||
base: '../plugins/lay/modules/'
|
||||
}).use(['treeSelect'], function () {
|
||||
|
||||
var treeSelect = layui.treeSelect;
|
||||
treeSelect.render(
|
||||
{
|
||||
elem: "#tree",
|
||||
data: '/permission/getTopPermissions',
|
||||
method: "GET"
|
||||
});
|
||||
});
|
||||
|
||||
layui.use('form', function(){
|
||||
var form = layui.form;
|
||||
form.render();
|
||||
|
||||
@@ -211,7 +211,7 @@
|
||||
*/
|
||||
function add(layer,body) {
|
||||
var perms = body.contents().find("input[name=\"perms\"]").val()
|
||||
var pid = body.contents().find("select[name=\"pid\"]").val();
|
||||
var pid = body.contents().find("input[name=\"pid\"]").val();
|
||||
var remark = body.contents().find("textarea[name=\"remark\"]").val()
|
||||
if(perms == ''||null == perms){
|
||||
layui.layer.msg("权限名称不能为空",{icon: 5});
|
||||
@@ -262,7 +262,7 @@
|
||||
function update(layer,body) {
|
||||
var id = body.contents().find("input[name=\"id\"]").val()
|
||||
var perms = body.contents().find("input[name=\"perms\"]").val()
|
||||
var pid = body.contents().find("select[name=\"pid\"]").val();
|
||||
var pid = body.contents().find("input[name=\"pid\"]").val();
|
||||
var remark = body.contents().find("textarea[name=\"remark\"]").val()
|
||||
if(perms == ''||null == perms){
|
||||
layui.layer.msg("权限名称不能为空",{icon: 5});
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
|
||||
<title>Aurora- 更新权限</title>
|
||||
<!-- build:css -->
|
||||
<link rel="stylesheet" th:href="@{'/plugins/css/treeselect.css'}">
|
||||
<link rel="stylesheet" th:href="@{'/plugins/css/layui.css'}">
|
||||
<!-- endbuild -->
|
||||
</head>
|
||||
@@ -21,10 +22,7 @@
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">上级类目</label>
|
||||
<div class="layui-input-block">
|
||||
<select name="pid" lay-verify="" lay-search>
|
||||
<option value="0">无</option>
|
||||
<option th:selected="${permission.pid == p.id}" th:each="p:${topPermissions}" th:value="${p.id}" value="1">[[${p.remark}]]</option>
|
||||
</select>
|
||||
<input type="text" name="pid" th:value="${permission.pid}" id="tree" placeholder="选择上级权限" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item layui-form-text">
|
||||
@@ -40,6 +38,20 @@
|
||||
<script th:src="@{'/plugins/layui.js'}"></script>
|
||||
<!-- build:use -->
|
||||
<script>
|
||||
|
||||
layui.config({
|
||||
base: '../plugins/lay/modules/'
|
||||
}).use(['treeSelect'], function () {
|
||||
|
||||
var treeSelect = layui.treeSelect;
|
||||
treeSelect.render(
|
||||
{
|
||||
elem: "#tree",
|
||||
data: '/permission/getTopPermissions',
|
||||
method: "GET"
|
||||
});
|
||||
});
|
||||
|
||||
layui.use('form', function(){
|
||||
var form = layui.form;
|
||||
form.render();
|
||||
|
||||
@@ -27,15 +27,16 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">用户密码</label>
|
||||
<label class="layui-form-label">性别</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="password" lay-verify="required" placeholder="请输入密码" autocomplete="off" class="layui-input" type="password">
|
||||
<input type="radio" name="sex" value="男" title="男" checked="">
|
||||
<input type="radio" name="sex" value="女" title="女">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">确认密码</label>
|
||||
<label class="layui-form-label">生日</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="rPassword" lay-verify="required" placeholder="再次输入密码" autocomplete="off" class="layui-input" type="password">
|
||||
<input type="text" name="birthday" id="birthday" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@@ -71,8 +72,8 @@
|
||||
});
|
||||
layui.config({
|
||||
base: '/plugins/lay/layui-treeselect/src/js/' //自定义组件的目录--相对路径
|
||||
}).use(['form', 'treeselect'], function () {
|
||||
var form = layui.form, treeselect = layui.treeselect;
|
||||
}).use(['form', 'treeselect','laydate'], function () {
|
||||
var form = layui.form, treeselect = layui.treeselect,laydate = layui.laydate;
|
||||
var data = [];
|
||||
$.ajax({
|
||||
async:false,
|
||||
@@ -83,6 +84,12 @@
|
||||
data = resule;
|
||||
}
|
||||
});
|
||||
|
||||
//日期
|
||||
laydate.render({
|
||||
elem: '#birthday'
|
||||
});
|
||||
|
||||
//通过调用render方法进行渲染 [render支持链式调用]
|
||||
treeselect.render({ //渲染第一个
|
||||
elem: '#treeselect1', //这个设置必要为id属性且必须加上#号
|
||||
|
||||
@@ -109,12 +109,13 @@
|
||||
,cols: [
|
||||
[
|
||||
{field:'id',align:'center', width:70, title: '编号'}
|
||||
,{field:'username', title: '用户昵称'}
|
||||
,{field:'username', title: '用户名',width:105}
|
||||
,{field:'departmentName', title: '所属部门'}
|
||||
,{field:'email', title: '邮箱'}
|
||||
,{field:'createDateTime', title: '创建时间',width: 172}
|
||||
,{field:'lastLoginTime', title: '最近登录',width: 172}
|
||||
,{field:'lock', align: 'center', width: 120, toolbar: '#checkLock', title: '是否允许登录'}
|
||||
,{field:'sex', title: '性别',width:81}
|
||||
,{field:'birthday', title: '出生年月',width:105}
|
||||
,{field:'createDateTime', title: '创建时间',width: 170}
|
||||
,{field:'lock', align: 'center', width: 120, toolbar: '#checkLock', title: '允许登录'}
|
||||
,{field:'operation',align:'center', width:150, toolbar: '#operation', title: '操作',fixed: 'right'}
|
||||
]
|
||||
]
|
||||
@@ -250,14 +251,10 @@
|
||||
function add(layer,body) {
|
||||
var roles = body.contents().find("input[name=\"role\"]").val();
|
||||
var departmentId = body.contents().find("#tree").val();
|
||||
var pwd = MD5(body.contents().find("input[name=\"password\"]").val())
|
||||
var rpwd = MD5(body.contents().find("input[name=\"rPassword\"]").val())
|
||||
var sex = body.contents().find("input[name=\"sex\"]").val();
|
||||
var birthday = body.contents().find("input[name=\"birthday\"]").val();
|
||||
var username = body.contents().find("input[name=\"username\"]").val()
|
||||
var email = body.contents().find("input[name=\"email\"]").val()
|
||||
if(pwd != rpwd){
|
||||
layui.layer.msg("密码不一致",{icon: 5});
|
||||
return
|
||||
}
|
||||
if(departmentId == null || departmentId == ""){
|
||||
layui.layer.msg("请选择部门",{icon: 5});
|
||||
return
|
||||
@@ -268,7 +265,8 @@
|
||||
type: "POST",
|
||||
data:JSON.stringify({
|
||||
username:username,
|
||||
password:pwd,
|
||||
sex:sex,
|
||||
birthday:birthday,
|
||||
email:email,
|
||||
department:{
|
||||
id:departmentId
|
||||
@@ -285,7 +283,7 @@
|
||||
type: "default",
|
||||
autoClose: true,
|
||||
icon:"layui-icon-face-smile",
|
||||
title: "添加成功"
|
||||
title: "新增成功,默认密码:123456"
|
||||
});
|
||||
// layui.layer.msg("添加成功", {icon: 6});
|
||||
setTimeout(function () {
|
||||
@@ -311,14 +309,12 @@
|
||||
*/
|
||||
function update(layer,body) {
|
||||
var roles = body.contents().find("input[name=\"role\"]").val();
|
||||
var pwd = body.contents().find("input[name=\"password\"]").val()
|
||||
var id = body.contents().find("input[name=\"id\"]").val()
|
||||
var id = body.contents().find("input[name=\"id\"]").val();
|
||||
var sex = body.contents().find("input[name=\"sex\"]").val();
|
||||
var birthday = body.contents().find("input[name=\"birthday\"]").val();
|
||||
var departmentId = body.contents().find("#tree").val();
|
||||
var username = body.contents().find("input[name=\"username\"]").val()
|
||||
var email = body.contents().find("input[name=\"email\"]").val()
|
||||
if(!(pwd == ''||pwd == null)){
|
||||
pwd = MD5(pwd)
|
||||
}
|
||||
if(departmentId == null || departmentId == ""){
|
||||
layui.layer.msg("请选择部门",{icon: 5});
|
||||
return
|
||||
@@ -330,7 +326,8 @@
|
||||
data:JSON.stringify({
|
||||
id:id,
|
||||
username:username,
|
||||
password:pwd,
|
||||
sex:sex,
|
||||
birthday:birthday,
|
||||
email:email,
|
||||
department:{
|
||||
id:departmentId
|
||||
|
||||
@@ -0,0 +1,258 @@
|
||||
<div class="layui-tab layui-tab-brief">
|
||||
<ul class="layui-tab-title">
|
||||
<li class="layui-this">基本信息</li>
|
||||
<li>安全中心</li>
|
||||
</ul>
|
||||
<div class="layui-tab-content" style="height: 100px;">
|
||||
<div class="layui-tab-item layui-show" style="padding: 10px">
|
||||
<form class="layui-form" method="post">
|
||||
<input name="avatar" type="text" th:value="${userInfo.avatar}" hidden="hidden" id="portrait">
|
||||
<input name="id" type="text" th:value="${userInfo.id}" hidden="hidden">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">我的头像</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="file" style="display:none" allowexts="gif,jpeg,jpg,png"
|
||||
accept="image/*" id="upLoadFile" onchange="PreviewImage()">
|
||||
<img id="preview" style="border-radius: 50%;width: 60px;height: 58px;cursor: pointer;" th:src="@{${userInfo.avatar}}"
|
||||
title="点击修改头像" alt="点击修改头像" onclick="uploadImg()"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">用户名</label>
|
||||
<div class="layui-input-inline" style="width: 40%">
|
||||
<input name="username" disabled th:value="${userInfo.username}" lay-verify="required" autocomplete="off" class="layui-input" type="text">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">用户名不支持修改</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">电子邮箱</label>
|
||||
<div class="layui-input-inline" style="width: 40%">
|
||||
<input name="email" th:value="${userInfo.email}" lay-verify="required" autocomplete="off" class="layui-input" type="text">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">性别</label>
|
||||
<div class="layui-input-inline" style="width: 40%">
|
||||
<input type="radio" disabled th:checked="${userInfo.sex == '男'}" name="sex" value="男" title="男">
|
||||
<input type="radio" disabled th:checked="${userInfo.sex == '女'}" name="sex" value="女" title="女">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">生日</label>
|
||||
<div class="layui-input-inline" style="width: 40%">
|
||||
<input type="text" disabled th:value="${userInfo.birthday}" name="birthday" id="birthday" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">生日不支持修改</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">我的部门</label>
|
||||
<div class="layui-input-inline" style="width: 40%">
|
||||
<input type="text" disabled th:value="${userInfo.departmentName}" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
<div class="layui-form-mid layui-word-aux">部门不支持修改</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="setmyinfo">确认修改</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重新填写</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="layui-tab-item" style="padding: 10px;">
|
||||
<form class="layui-form" method="post">
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">原始密码</label>
|
||||
<div class="layui-input-inline" style="width: 40%">
|
||||
<input name="oldPwd" lay-verify="required" autocomplete="off" class="layui-input" type="password">
|
||||
</div>
|
||||
<div class="layui-form-mid" id="prompt" style="color: #f47f7f;display: none">原始密码错误,请重试</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">新密码</label>
|
||||
<div class="layui-input-inline" style="width: 40%">
|
||||
<input name="pwd" lay-verify="required" autocomplete="off" class="layui-input" type="password">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">确认密码</label>
|
||||
<div class="layui-input-inline" style="width: 40%">
|
||||
<input name="rPwd" lay-verify="required" autocomplete="off" class="layui-input" type="password">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<div class="layui-input-block">
|
||||
<button class="layui-btn" lay-submit lay-filter="modify">确认修改</button>
|
||||
<button type="reset" class="layui-btn layui-btn-primary">重新填写</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script th:src="@{'/js/MD5.js'}"></script>
|
||||
<script>
|
||||
|
||||
layui.use(['jquery', 'form' ,'notice'], function () {
|
||||
var form = layui.form,notice = layui.notice;
|
||||
form.render();
|
||||
|
||||
form.on('submit(setmyinfo)', function(){
|
||||
$.ajax({
|
||||
url:"/user/updateInfo",
|
||||
contentType: "application/json",
|
||||
type: "PUT",
|
||||
data:JSON.stringify({
|
||||
avatar:$("input[name='avatar']").val(),
|
||||
id:$("input[name='id']").val(),
|
||||
email:$("input[name='email']").val()
|
||||
}),
|
||||
success:function(result){
|
||||
if (result.code == 200) {
|
||||
notice.init({
|
||||
type: "default",
|
||||
autoClose: true,
|
||||
icon:"layui-icon-face-smile",
|
||||
title: "更新成功"
|
||||
});
|
||||
} else {
|
||||
notice.init({
|
||||
type: "danger",
|
||||
autoClose: true,
|
||||
icon:"layui-icon-face-cry",
|
||||
title: result.msg
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
form.on('submit(modify)', function(){
|
||||
|
||||
var oldPwd = MD5($("input[name='oldPwd']").val());
|
||||
var password = MD5($("input[name='pwd']").val());
|
||||
var rPassword = MD5($("input[name='rPwd']").val());
|
||||
|
||||
if(password != rPassword){
|
||||
notice.init({
|
||||
type: "danger",
|
||||
autoClose: true,
|
||||
icon:"layui-icon-face-cry",
|
||||
title: "两次密码不一致"
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url:"/user/resetPwd",
|
||||
contentType: "application/json",
|
||||
type: "GET",
|
||||
data:{
|
||||
oldPwd:oldPwd,
|
||||
password:password,
|
||||
id:$("input[name='id']").val()
|
||||
},
|
||||
success:function(result){
|
||||
if (result.code == 200) {
|
||||
notice.init({
|
||||
type: "default",
|
||||
autoClose: true,
|
||||
icon:"layui-icon-face-smile",
|
||||
time:2000,
|
||||
title: "修改成功,请重新登录"
|
||||
});
|
||||
setTimeout(function () {
|
||||
window.location="/logout";
|
||||
},2100)
|
||||
} else {
|
||||
notice.init({
|
||||
type: "danger",
|
||||
autoClose: true,
|
||||
icon:"layui-icon-face-cry",
|
||||
title: result.msg
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
return false;
|
||||
});
|
||||
})
|
||||
|
||||
$("input[name='oldPwd']").blur(function () {
|
||||
var password = MD5($("input[name='oldPwd']").val());
|
||||
$.ajax({
|
||||
url:'/user/checkPass',
|
||||
type:"GET",
|
||||
data:{
|
||||
password:password,
|
||||
id:$("input[name='id']").val()
|
||||
},
|
||||
success:function(reslut){
|
||||
if(reslut.code!=200){
|
||||
$("#prompt").show();
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
$("input[name='oldPwd']").focus(function () {
|
||||
$("#prompt").hide();
|
||||
})
|
||||
|
||||
function PreviewImage() {
|
||||
var pic = document.getElementById("preview");
|
||||
var file = document.getElementById("upLoadFile");
|
||||
var avatar = document.getElementById("portrait");
|
||||
var ext = file.value.substring(file.value.lastIndexOf(".") + 1).toLowerCase();
|
||||
var isIE = navigator.userAgent.match(/MSIE/) != null,
|
||||
isIE6 = navigator.userAgent.match(/MSIE 6.0/) != null;
|
||||
if (isIE) {
|
||||
file.select();
|
||||
var reallocalpath = file.value;
|
||||
// IE6浏览器设置img的src为本地路径可以直接显示图片
|
||||
if (isIE6) {
|
||||
pic.src = reallocalpath;
|
||||
} else {
|
||||
// 非IE6版本的IE由于安全问题直接设置img的src无法显示本地图片,但是可以通过滤镜来实现
|
||||
pic.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled='true',sizingMethod='scale',src=\"" + reallocalpath + "\")";
|
||||
// 设置img的src为base64编码的透明图片 取消显示浏览器默认图片
|
||||
pic.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==';
|
||||
//alert(pic.offsetHeight);
|
||||
pic.style.width = "130px";
|
||||
pic.height = "156px";
|
||||
}
|
||||
} else {
|
||||
|
||||
var file = file.files[0];
|
||||
var formData=new FormData();
|
||||
formData.append('smfile',file);
|
||||
$.ajax({
|
||||
url:'https://sm.ms/api/upload',
|
||||
type : 'POST',
|
||||
processData : false,
|
||||
contentType : false,
|
||||
data:formData,
|
||||
success:function(data){
|
||||
avatar.value = data.data.url;
|
||||
}
|
||||
})
|
||||
|
||||
var reader = new FileReader();
|
||||
|
||||
reader.readAsDataURL(file);
|
||||
|
||||
reader.onload = function (e) {
|
||||
|
||||
var pic = document.getElementById("preview");
|
||||
pic.src = this.result;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
function uploadImg()
|
||||
{
|
||||
document.getElementById("upLoadFile").click();
|
||||
}
|
||||
</script>
|
||||
@@ -73,6 +73,13 @@
|
||||
return false;
|
||||
});
|
||||
});
|
||||
|
||||
//防止页面后退
|
||||
history.pushState(null, null, document.URL);
|
||||
window.addEventListener('popstate', function () {
|
||||
history.pushState(null, null, document.URL);
|
||||
});
|
||||
|
||||
function login() {
|
||||
var username = $("#username").val();
|
||||
var password = MD5($("#password").val());
|
||||
|
||||
@@ -29,9 +29,16 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">用户密码</label>
|
||||
<label class="layui-form-label">性别</label>
|
||||
<div class="layui-input-block">
|
||||
<input name="password" lay-verify="required" placeholder="请输入密码,为空则不修改" autocomplete="off" class="layui-input" type="password">
|
||||
<input type="radio" th:checked="${editUser.sex == '男'}" name="sex" value="男" title="男">
|
||||
<input type="radio" th:checked="${editUser.sex == '女'}" name="sex" value="女" title="女">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
<label class="layui-form-label">生日</label>
|
||||
<div class="layui-input-block">
|
||||
<input type="text" th:value="${editUser.birthday}" name="birthday" id="birthday" placeholder="yyyy-MM-dd" autocomplete="off" class="layui-input">
|
||||
</div>
|
||||
</div>
|
||||
<div class="layui-form-item">
|
||||
@@ -67,8 +74,8 @@
|
||||
});
|
||||
layui.config({
|
||||
base: '/plugins/lay/layui-treeselect/src/js/' //自定义组件的目录--相对路径
|
||||
}).use(['form', 'treeselect'], function () {
|
||||
var form = layui.form, treeselect = layui.treeselect;
|
||||
}).use(['form', 'treeselect','laydate'], function () {
|
||||
var form = layui.form, treeselect = layui.treeselect,laydate = layui.laydate;
|
||||
var data = [];
|
||||
$.ajax({
|
||||
async:false,
|
||||
@@ -79,6 +86,12 @@
|
||||
data = resule;
|
||||
}
|
||||
});
|
||||
|
||||
//日期
|
||||
laydate.render({
|
||||
elem: '#birthday'
|
||||
});
|
||||
|
||||
//通过调用render方法进行渲染 [render支持链式调用]
|
||||
treeselect.render({ //渲染第一个
|
||||
elem: '#treeselect1', //这个设置必要为id属性且必须加上#号
|
||||
|
||||
Reference in New Issue
Block a user