Browse Source

Merge remote-tracking branch 'origin/dev' into dev

Aron 6 years ago
parent
commit
736a856280
25 changed files with 1027 additions and 1050 deletions
  1. 1 1
      src/main/java/com/ifast/api/controller/AppUserController.java
  2. 50 63
      src/main/java/com/ifast/common/aspect/LogAspect.java
  3. 9 1
      src/main/java/com/ifast/common/base/AdminBaseController.java
  4. 0 5
      src/main/java/com/ifast/common/controller/ConfigController.java
  5. 0 7
      src/main/java/com/ifast/common/controller/DictController.java
  6. 60 59
      src/main/java/com/ifast/common/controller/LogController.java
  7. 31 32
      src/main/java/com/ifast/common/utils/ShiroUtils.java
  8. 5 0
      src/main/java/com/ifast/demo/controller/DemoController.java
  9. 0 3
      src/main/java/com/ifast/generator/controller/GeneratorController.java
  10. 1 16
      src/main/java/com/ifast/job/controller/JobController.java
  11. 0 8
      src/main/java/com/ifast/oss/controller/FileController.java
  12. 2 7
      src/main/java/com/ifast/sys/controller/DeptController.java
  13. 0 12
      src/main/java/com/ifast/sys/controller/LoginController.java
  14. 114 119
      src/main/java/com/ifast/sys/controller/MenuController.java
  15. 93 97
      src/main/java/com/ifast/sys/controller/RoleController.java
  16. 1 4
      src/main/java/com/ifast/sys/controller/SessionController.java
  17. 199 209
      src/main/java/com/ifast/sys/controller/UserController.java
  18. 53 53
      src/main/java/com/ifast/sys/service/UserService.java
  19. 1 1
      src/main/java/com/ifast/sys/service/impl/UserServiceImpl.java
  20. 181 170
      src/main/resources/static/js/appjs/common/log/log.js
  21. 25 20
      src/main/resources/static/js/appjs/demo/demoBase/demoBase.js
  22. 121 121
      src/main/resources/static/js/appjs/sys/user/add.js
  23. 32 0
      src/main/resources/static/js/content.js
  24. 43 39
      src/main/resources/templates/common/log/log.html
  25. 5 3
      src/main/resources/templates/demo/demoBase/demoBase.html

+ 1 - 1
src/main/java/com/ifast/api/controller/AppUserController.java

@@ -45,7 +45,7 @@ public class AppUserController {
     }
     
     @PostMapping("logout")
-    @Log("api测试-刷新token")
+    @Log("api测试-注销token")
     @ApiOperation("api测试-注销token")
     public Result<?> logout(@RequestBody UserLogoutDTO dto) {
     	userService.logoutToken(dto.getToken(), dto.getRefreshToken());

+ 50 - 63
src/main/java/com/ifast/common/aspect/LogAspect.java

@@ -1,14 +1,12 @@
 package com.ifast.common.aspect;
 
-import com.ifast.api.util.JWTUtil;
-import com.ifast.common.annotation.Log;
-import com.ifast.common.base.BaseDO;
-import com.ifast.common.dao.LogDao;
-import com.ifast.common.domain.LogDO;
-import com.ifast.common.utils.*;
-import com.ifast.sys.domain.UserDO;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.subject.Subject;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.annotation.Around;
 import org.aspectj.lang.annotation.Aspect;
@@ -21,11 +19,15 @@ import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
-import javax.servlet.http.HttpServletRequest;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.Map;
+import com.ifast.common.annotation.Log;
+import com.ifast.common.base.BaseDO;
+import com.ifast.common.dao.LogDao;
+import com.ifast.common.domain.LogDO;
+import com.ifast.common.utils.HttpContextUtils;
+import com.ifast.common.utils.IPUtils;
+import com.ifast.common.utils.JSONUtils;
+import com.ifast.common.utils.ShiroUtils;
+import com.ifast.sys.domain.UserDO;
 
 /**
  * <pre>
@@ -112,29 +114,19 @@ public class LogAspect {
     	if(insertBy || updateBy) {
     		Object arg0 = point.getArgs()[0];
     		if(arg0 instanceof BaseDO) {
-    			try {
-    				Subject subject = SecurityUtils.getSubject();
-    				if(subject.isAuthenticated()) {
-    					Object principal = subject.getPrincipal();
-    					Long userId = null;
-    					if(principal instanceof String) {
-    						userId = Long.valueOf(JWTUtil.getUserId((String)principal));
-    					}else if(principal instanceof UserDO) {
-    						userId = ((UserDO)principal).getId();
-    					}
-    					BaseDO baseDO = (BaseDO)arg0;
-    					if(insertBy) {
-    						baseDO.setCreateBy(userId);
-    					}
-    					else if(updateBy) {
-    						baseDO.setUpdateBy(userId);
-    					}
+    			Long userId = ShiroUtils.getUserId();
+    			if(userId != null) {
+    				BaseDO baseDO = (BaseDO)arg0;
+    				if(insertBy) {
+    					baseDO.setCreateBy(userId);
+    				}else {
+    					baseDO.setUpdateBy(userId);
     				}
-    			}catch(Exception ignore) {}
-    			log.info("call {}.{}{}", point.getTarget().getClass().getSimpleName(), methodName, Arrays.toString(point.getArgs()));
+    			}
     		}
     	}
     	
+    	log.info("call {}.{}{}", point.getTarget().getClass().getSimpleName(), methodName, Arrays.toString(point.getArgs()));
     	long beginTime = System.currentTimeMillis();
     	Object result = point.proceed();
     	long time = System.currentTimeMillis() - beginTime;
@@ -163,38 +155,33 @@ public class LogAspect {
         // 请求的方法名
         String className = joinPoint.getTarget().getClass().getName();
         String methodName = signature.getName();
-        sysLog.setMethod(className + "." + methodName + "()");
-        // 请求的参数
-        // Object[] args = joinPoint.getArgs();
-        Map<String, String[]> parameterMap = HttpContextUtils.getHttpServletRequest().getParameterMap();
-        try {
-            String params = JSONUtils.beanToJson(parameterMap);
-            int maxLength = 4999;
-            if(params.length() > maxLength){
-                params = params.substring(0, maxLength);
-            }
-            sysLog.setParams(params);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        // 获取request
+        String params = null;
         HttpServletRequest request = HttpContextUtils.getHttpServletRequest();
-        // 设置IP地址
-        sysLog.setIp(IPUtils.getIpAddr(request));
-        // 用户名
-        UserDO currUser = ShiroUtils.getSysUser();
-        if (null == currUser) {
-            if (null != sysLog.getParams()) {
-                sysLog.setUserId(-1L);
-                sysLog.setUsername(sysLog.getParams());
-            } else {
-                sysLog.setUserId(-1L);
-                sysLog.setUsername("获取用户信息为空");
-            }
-        } else {
-            sysLog.setUserId(ShiroUtils.getUserId());
-            sysLog.setUsername(ShiroUtils.getSysUser().getUsername());
+        if(request != null) {
+        	sysLog.setMethod(request.getMethod()+" "+request.getRequestURI());
+        	Map<String, String[]> parameterMap = request.getParameterMap();
+        	params = JSONUtils.beanToJson(parameterMap);
+        	// 设置IP地址
+        	sysLog.setIp(IPUtils.getIpAddr(request));
+        }else {
+        	sysLog.setMethod(className + "." + methodName + "()");
+        	Object[] args = joinPoint.getArgs();
+        	params = JSONUtils.beanToJson(args);
         }
+        int maxLength = 4999;
+        if(params.length() > maxLength){
+        	params = params.substring(0, maxLength);
+        }
+        sysLog.setParams(params);
+        // 用户名
+    	UserDO currUser = ShiroUtils.getSysUser();
+    	if (null == currUser) {
+    		sysLog.setUserId(-1L);
+    		sysLog.setUsername("");
+    	} else {
+    		sysLog.setUserId(currUser.getId());
+    		sysLog.setUsername(currUser.getUsername());
+    	}
         sysLog.setTime((int) time);
         // 系统当前时间
         Date date = new Date();

+ 9 - 1
src/main/java/com/ifast/common/base/AdminBaseController.java

@@ -51,7 +51,15 @@ public abstract class AdminBaseController {
     public <E> Page<E> getPage(Class<E> e) {
         int pageNumber = getParaToInt("pageNumber", 1);
         int pageSize = getParaToInt("pageSize", 10);
-        return new Page<>(pageNumber, pageSize);
+        Page<E> page = new Page<>(pageNumber, pageSize);
+        //支持sort、order参数
+        String sort = HttpContextUtils.getHttpServletRequest().getParameter("sort");
+        if(StringUtils.isNotBlank(sort)) {
+        	page.setOrderByField(sort);
+        	String order = HttpContextUtils.getHttpServletRequest().getParameter("order");
+        	if(StringUtils.isNotBlank(order)) page.setAsc("asc".equalsIgnoreCase(order));
+        }
+        return page;
     }
 
     private int getParaToInt(String key, int defalut) {

+ 0 - 5
src/main/java/com/ifast/common/controller/ConfigController.java

@@ -28,31 +28,26 @@ public class ConfigController extends AdminBaseController {
     @Autowired
     private ConfigService configService;
     
-    @Log("进入系统配置页面")
     @GetMapping()
     @RequiresPermissions("common:config:config")
     String Config() {
         return "common/config/config";
     }
     
-    @Log("查询系统配置列表")
     @ResponseBody
     @GetMapping("/list")
     @RequiresPermissions("common:config:config")
     public Result<Page<ConfigDO>> list(ConfigDO configDTO) {
-        // 查询列表数据
         Page<ConfigDO> page = configService.selectPage(getPage(ConfigDO.class), configService.convertToEntityWrapper("k", configDTO.getK()));
         return Result.ok(page);
     }
     
-    @Log("进入系统配置添加页面")
     @GetMapping("/add")
     @RequiresPermissions("common:config:add")
     String add() {
         return "common/config/add";
     }
     
-    @Log("进入配置编辑页面")
     @GetMapping("/edit/{id}")
     @RequiresPermissions("common:config:edit")
     String edit(@PathVariable("id") Long id, Model model) {

+ 0 - 7
src/main/java/com/ifast/common/controller/DictController.java

@@ -30,24 +30,20 @@ public class DictController extends AdminBaseController {
     @Autowired
     private DictService sysDictService;
     
-    @Log("进入数据字典列表页面")
     @GetMapping()
     @RequiresPermissions("common:sysDict:sysDict")
     String sysDict() {
         return "common/sysDict/sysDict";
     }
     
-    @Log("查询数据字典列表")
     @ResponseBody
     @GetMapping("/list")
     @RequiresPermissions("common:sysDict:sysDict")
     public Result<Page<DictDO>> list(DictDO dictDTO) {
-        // 查询列表数据
         Page<DictDO> page = sysDictService.selectPage(getPage(DictDO.class), sysDictService.convertToEntityWrapper("name", dictDTO.getName(), "type", dictDTO.getType()));
         return Result.ok(page);
     }
     
-    @Log("进入数据字典添加页面")
     @GetMapping("/add")
     @RequiresPermissions("common:sysDict:add")
     String add() {
@@ -110,7 +106,6 @@ public class DictController extends AdminBaseController {
         return Result.ok();
     }
     
-    @Log("查询数据字典key列表")
     @GetMapping("/type")
     @ResponseBody
     public List<DictDO> listType() {
@@ -118,7 +113,6 @@ public class DictController extends AdminBaseController {
     };
 
     // 类别已经指定增加
-    @Log("进入数据字典添加页面")
     @GetMapping("/add/{type}/{description}")
     @RequiresPermissions("common:sysDict:add")
     String addD(Model model, @PathVariable("type") String type, @PathVariable("description") String description) {
@@ -127,7 +121,6 @@ public class DictController extends AdminBaseController {
         return "common/sysDict/add";
     }
     
-    @Log("根据key查询数据字典信息")
     @ResponseBody
     @GetMapping("/list/{type}")
     public List<DictDO> listByType(@PathVariable("type") String type) {

+ 60 - 59
src/main/java/com/ifast/common/controller/LogController.java

@@ -1,59 +1,60 @@
-package com.ifast.common.controller;
-
-import com.baomidou.mybatisplus.plugins.Page;
-import com.ifast.common.annotation.Log;
-import com.ifast.common.base.AdminBaseController;
-import com.ifast.common.domain.LogDO;
-import com.ifast.common.service.LogService;
-import com.ifast.common.utils.Result;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Arrays;
-
-/**
- * <pre>
- * 日志
- * </pre>
- * 
- * <small> 2018年3月23日 | Aron</small>
- */
-@RequestMapping("/common/log")
-@Controller
-public class LogController extends AdminBaseController {
-    @Autowired
-    LogService logService;
-    String prefix = "common/log";
-    
-    @Log("进入系统日志列表页面")
-    @GetMapping()
-    String log() {
-        return prefix + "/log";
-    }
-    
-    @Log("查询系统日志列表")
-    @ResponseBody
-    @GetMapping("/list")
-    public Result<Page<LogDO>> list(LogDO logDTO) {
-        // 查询列表数据
-        Page<LogDO> page = logService.selectPage(getPage(LogDO.class), logService.convertToEntityWrapper("username", logDTO.getUsername(), "operation", logDTO.getOperation()));
-        return Result.ok(page);
-    }
-    
-    @Log("删除系统日志")
-    @ResponseBody
-    @PostMapping("/remove")
-    Result<String> remove(Long id) {
-        logService.deleteById(id);
-        return Result.ok();
-    }
-    
-    @Log("批量删除系统日志")
-    @ResponseBody
-    @PostMapping("/batchRemove")
-    Result<String> batchRemove(@RequestParam("ids[]") Long[] ids) {
-        logService.deleteBatchIds(Arrays.asList(ids));
-        return Result.fail();
-    }
-}
+package com.ifast.common.controller;
+
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
+import com.baomidou.mybatisplus.plugins.Page;
+import com.ifast.common.annotation.Log;
+import com.ifast.common.base.AdminBaseController;
+import com.ifast.common.domain.LogDO;
+import com.ifast.common.service.LogService;
+import com.ifast.common.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+
+/**
+ * <pre>
+ * 日志
+ * </pre>
+ * 
+ * <small> 2018年3月23日 | Aron</small>
+ */
+@RequestMapping("/common/log")
+@Controller
+public class LogController extends AdminBaseController {
+    @Autowired
+    LogService logService;
+    String prefix = "common/log";
+    
+    @GetMapping()
+    String log() {
+        return prefix + "/log";
+    }
+    
+    @ResponseBody
+    @GetMapping("/list")
+    public Result<Page<LogDO>> list(LogDO logDTO) {
+    	EntityWrapper<LogDO> wrapper = logService.convertToEntityWrapper("username", logDTO.getUsername());
+    	wrapper.eq(logDTO.getUserId()!=null, "userId", logDTO.getUserId());
+    	wrapper.like("operation", logDTO.getOperation());
+        Page<LogDO> page = logService.selectPage(getPage(LogDO.class), wrapper);
+        return Result.ok(page);
+    }
+    
+    @Log("删除系统日志")
+    @ResponseBody
+    @PostMapping("/remove")
+    Result<String> remove(Long id) {
+        logService.deleteById(id);
+        return Result.ok();
+    }
+    
+    @Log("批量删除系统日志")
+    @ResponseBody
+    @PostMapping("/batchRemove")
+    Result<String> batchRemove(@RequestParam("ids[]") Long[] ids) {
+        logService.deleteBatchIds(Arrays.asList(ids));
+        return Result.fail();
+    }
+}

+ 31 - 32
src/main/java/com/ifast/common/utils/ShiroUtils.java

@@ -1,32 +1,31 @@
-package com.ifast.common.utils;
-
-import com.ifast.api.service.AppUserService;
-import com.ifast.api.util.JWTUtil;
-import com.ifast.sys.domain.UserDO;
-import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.subject.Subject;
-
-public class ShiroUtils {
-
-	public static Subject getSubjct() {
-		return SecurityUtils.getSubject();
-	}
-
-	public static UserDO getSysUser() {
-        Object principal = getSubjct().getPrincipal();
-        if(principal instanceof String){
-            String token = (String)principal;
-            String userId = JWTUtil.getUserId(token);
-            UserDO userDO = SpringContextHolder.getBean(AppUserService.class).selectById(userId);
-            return userDO;
-        }
-        return (UserDO)getSubjct().getPrincipal();
-	}
-	public static Long getUserId() {
-		return getSysUser().getId();
-	}
-	
-	public static void logout() {
-		getSubjct().logout();
-	}
-}
+package com.ifast.common.utils;
+
+import com.ifast.api.service.AppUserService;
+import com.ifast.api.util.JWTUtil;
+import com.ifast.sys.domain.UserDO;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+
+public class ShiroUtils {
+
+	public static UserDO getSysUser() {
+		try {
+			Subject subject = SecurityUtils.getSubject();
+			Object principal = subject.getPrincipal();
+			if(principal instanceof String){
+				String token = (String)principal;
+				String userId = JWTUtil.getUserId(token);
+				UserDO userDO = SpringContextHolder.getBean(AppUserService.class).selectById(userId);
+				return userDO;
+			}else if(principal instanceof UserDO) {
+				return (UserDO)principal;
+			}
+		}catch (Exception ignore) { }
+		return null;
+	}
+	
+	public static Long getUserId() {
+		UserDO sysUser = getSysUser();
+		return sysUser == null ? null : sysUser.getId();
+	}
+}

+ 5 - 0
src/main/java/com/ifast/demo/controller/DemoController.java

@@ -4,6 +4,7 @@ package com.ifast.demo.controller;
 import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.plugins.Page;
+import com.ifast.common.annotation.Log;
 import com.ifast.common.base.AdminBaseController;
 import com.ifast.common.utils.Result;
 import com.ifast.demo.domain.DemoDO;
@@ -63,6 +64,7 @@ public class DemoController extends AdminBaseController {
 	/**
 	 * 保存
 	 */
+	@Log("添加基础表数据")
 	@ResponseBody
 	@PostMapping("/save")
 	@RequiresPermissions("demo:demoBase:add")
@@ -73,6 +75,7 @@ public class DemoController extends AdminBaseController {
 	/**
 	 * 修改
 	 */
+	@Log("更新基础表数据")
 	@ResponseBody
 	@RequestMapping("/update")
 	@RequiresPermissions("demo:demoBase:edit")
@@ -84,6 +87,7 @@ public class DemoController extends AdminBaseController {
 	/**
 	 * 删除
 	 */
+	@Log("删除基础表数据")
 	@PostMapping( "/remove")
 	@ResponseBody
 	@RequiresPermissions("demo:demoBase:remove")
@@ -95,6 +99,7 @@ public class DemoController extends AdminBaseController {
 	/**
 	 * 删除
 	 */
+	@Log("批量删除基础表数据")
 	@PostMapping( "/batchRemove")
 	@ResponseBody
 	@RequiresPermissions("demo:demoBase:batchRemove")

+ 0 - 3
src/main/java/com/ifast/generator/controller/GeneratorController.java

@@ -35,13 +35,11 @@ public class GeneratorController {
     ConfigService configService;
     
     
-    @Log("进入代码生成页面")
     @GetMapping()
     String generator() {
         return prefix + "/list";
     }
     
-    @Log("查询数据表列表")
     @ResponseBody
     @GetMapping("/list")
     List<Map<String, Object>> list() {
@@ -76,7 +74,6 @@ public class GeneratorController {
         IOUtils.closeQuietly(response.getOutputStream());
     }
     
-    @Log("进入代码生成配置编辑页面")
     @GetMapping("/edit")
     public String edit(Model model) {
         List<ConfigDO> list = configService.findListByKvType(EnumGen.KvType.mapping.getValue());

+ 1 - 16
src/main/java/com/ifast/job/controller/JobController.java

@@ -28,29 +28,24 @@ public class JobController extends AdminBaseController {
     @Autowired
     private JobService taskScheduleJobService;
 
-    @Log("进入定时任务管理页面")
     @GetMapping()
     String taskScheduleJob() {
         return "common/job/job";
     }
 
-    @Log("查询定时任务列表")
     @ResponseBody
     @GetMapping("/list")
     public Result<Page<TaskDO>> list(TaskDO taskDTO) {
-        // 查询列表数据
         Wrapper<TaskDO> wrapper = new EntityWrapper<TaskDO>(taskDTO);
         Page<TaskDO> page = taskScheduleJobService.selectPage(getPage(TaskDO.class), wrapper);
         return Result.ok(page);
     }
 
-    @Log("进入定时任务添加页面")
     @GetMapping("/add")
     String add() {
         return "common/job/add";
     }
 
-    @Log("进入定时任务编辑页面")
     @GetMapping("/edit/{id}")
     String edit(@PathVariable("id") Long id, Model model) {
         TaskDO job = taskScheduleJobService.selectById(id);
@@ -59,16 +54,6 @@ public class JobController extends AdminBaseController {
     }
 
     /**
-     * 信息
-     */
-    @Log("根据id查询定时任务信息")
-    @RequestMapping("/info/{id}")
-    public Result<TaskDO> info(@PathVariable("id") Long id) {
-        TaskDO taskScheduleJob = taskScheduleJobService.selectById(id);
-        return Result.ok(taskScheduleJob);
-    }
-
-    /**
      * 保存
      */
     @Log("添加定时任务")
@@ -113,7 +98,7 @@ public class JobController extends AdminBaseController {
         return Result.ok();
     }
 
-    @Log("根据id和cmd执行/停止定时任务")
+    @Log("启停定时任务")
     @PostMapping(value = "/changeJobStatus")
     @ResponseBody
     public Result<String> changeJobStatus(Long id, String cmd) {

+ 0 - 8
src/main/java/com/ifast/oss/controller/FileController.java

@@ -33,34 +33,28 @@ public class FileController extends AdminBaseController {
     @Autowired
     private FileService sysFileService;
     
-    @Log("进入文件管理页面")
     @GetMapping()
     @RequiresPermissions("oss:file:file")
     String sysFile(Model model) {
         return "common/file/file";
     }
     
-    @Log("查询文件列表")
     @ResponseBody
     @GetMapping("/list")
     @RequiresPermissions("oss:file:list")
     public Result<Page<FileDO>> list(Integer pageNumber, Integer pageSize, FileDO fileDTO) {
-        // 查询列表数据
         Page<FileDO> page = new Page<>(pageNumber, pageSize);
-        
         Wrapper<FileDO> wrapper = new EntityWrapper<FileDO>(fileDTO);
         page = sysFileService.selectPage(page, wrapper);
         return Result.ok(page);
     }
     
-    @Log("进入添加文件页面")
     @GetMapping("/add")
     @RequiresPermissions("oss:file:add")
     String add() {
         return "common/sysFile/add";
     }
     
-    @Log("进入更新文件页面")
     @GetMapping("/edit")
     @RequiresPermissions("oss:file:update")
     String edit(Long id, Model model) {
@@ -72,7 +66,6 @@ public class FileController extends AdminBaseController {
     /**
      * 信息
      */
-    @Log("根据id查询文件信息")
     @RequestMapping("/info/{id}")
     @RequiresPermissions("oss:file:info")
     public Result<FileDO> info(@PathVariable("id") Long id) {
@@ -100,7 +93,6 @@ public class FileController extends AdminBaseController {
     @RequiresPermissions("oss:file:update")
     public Result<String> update(@RequestBody FileDO sysFile) {
         sysFileService.updateById(sysFile);
-        
         return Result.ok();
     }
     

+ 2 - 7
src/main/java/com/ifast/sys/controller/DeptController.java

@@ -35,7 +35,6 @@ public class DeptController extends AdminBaseController {
     private DeptService sysDeptService;
 
     @GetMapping()
-    @Log("进入部分页面")
     @RequiresPermissions("system:sysDept:sysDept")
     String dept() {
         return prefix + "/dept";
@@ -44,14 +43,12 @@ public class DeptController extends AdminBaseController {
     @ApiOperation(value = "获取部门列表", notes = "")
     @ResponseBody
     @GetMapping("/list")
-    @Log("获取部门列表")
     @RequiresPermissions("system:sysDept:sysDept")
     public List<DeptDO> list(DeptDO deptDTO) {
         return sysDeptService.findByKv("name", deptDTO.getName());
     }
 
     @GetMapping("/add/{pId}")
-    @Log("进入添加部门页面")
     @RequiresPermissions("system:sysDept:add")
     String add(@PathVariable("pId") Long pId, Model model) {
         model.addAttribute("pId", pId);
@@ -65,7 +62,6 @@ public class DeptController extends AdminBaseController {
 
     @GetMapping("/edit/{deptId}")
     @RequiresPermissions("system:sysDept:edit")
-    @Log("编辑部门")
     String edit(@PathVariable("deptId") Long deptId, Model model) {
         DeptDO sysDept = sysDeptService.selectById(deptId);
         model.addAttribute("sysDept", sysDept);
@@ -84,7 +80,7 @@ public class DeptController extends AdminBaseController {
     @ResponseBody
     @PostMapping("/save")
     @RequiresPermissions("system:sysDept:add")
-    @Log("保存部门")
+    @Log("添加部门")
     public Result<String> save(DeptDO sysDept) {
         sysDeptService.insert(sysDept);
         return Result.ok();
@@ -93,6 +89,7 @@ public class DeptController extends AdminBaseController {
     /**
      * 修改
      */
+    @Log("更新部门")
     @ResponseBody
     @RequestMapping("/update")
     @RequiresPermissions("system:sysDept:edit")
@@ -139,7 +136,6 @@ public class DeptController extends AdminBaseController {
 
     @GetMapping("/tree")
     @ResponseBody
-    @Log("查询部门树形数据")
     public Tree<DeptDO> tree() {
         Tree<DeptDO> tree = new Tree<DeptDO>();
         tree = sysDeptService.getTree();
@@ -147,7 +143,6 @@ public class DeptController extends AdminBaseController {
     }
 
     @GetMapping("/treeView")
-    @Log("进入部门树形显示页面")
     String treeView() {
         return prefix + "/deptTree";
     }

+ 0 - 12
src/main/java/com/ifast/sys/controller/LoginController.java

@@ -6,7 +6,6 @@ import com.ifast.common.domain.Tree;
 import com.ifast.common.type.EnumErrorCode;
 import com.ifast.common.utils.MD5Utils;
 import com.ifast.common.utils.Result;
-import com.ifast.common.utils.ShiroUtils;
 import com.ifast.oss.domain.FileDO;
 import com.ifast.oss.service.FileService;
 import com.ifast.sys.domain.MenuDO;
@@ -38,12 +37,10 @@ public class LoginController extends AdminBaseController {
     FileService fileService;
 
     @GetMapping({ "/", "" })
-    @Log("重定向到登录")
     String welcome(Model model) {
         return "redirect:/login";
     }
 
-    @Log("请求访问主页")
     @GetMapping({ "/index" })
     String index(Model model) {
         List<Tree<MenuDO>> menus = menuService.listMenuTree(getUserId());
@@ -75,21 +72,12 @@ public class LoginController extends AdminBaseController {
             return Result.build(EnumErrorCode.userLoginFail.getCode(), EnumErrorCode.userLoginFail.getMsg());
         }
     }
-
-    @GetMapping("/logout")
-    @Log("退出")
-    String logout() {
-        ShiroUtils.logout();
-        return "redirect:/login";
-    }
     
-    @Log("主页")
     @GetMapping("/main")
     String main() {
         return "main";
     }
 
-    @Log("错误403")
     @GetMapping("/403")
     String error403() {
         return "403";

+ 114 - 119
src/main/java/com/ifast/sys/controller/MenuController.java

@@ -1,119 +1,114 @@
-package com.ifast.sys.controller;
-
-import com.ifast.common.annotation.Log;
-import com.ifast.common.base.AdminBaseController;
-import com.ifast.common.domain.Tree;
-import com.ifast.common.utils.Result;
-import com.ifast.sys.domain.MenuDO;
-import com.ifast.sys.service.MenuService;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.List;
-
-/**
- * <pre>
- * </pre>
- * 
- * <small> 2018年3月23日 | Aron</small>
- */
-@RequestMapping("/sys/menu")
-@Controller
-public class MenuController extends AdminBaseController {
-    String prefix = "sys/menu";
-    @Autowired
-    MenuService menuService;
-    
-    @Log("进入系统菜单页面")
-    @RequiresPermissions("sys:menu:menu")
-    @GetMapping()
-    String menu(Model model) {
-        return prefix + "/menu";
-    }
-    
-    @Log("查询菜单列表")
-    @RequiresPermissions("sys:menu:menu")
-    @RequestMapping("/list")
-    @ResponseBody
-    List<MenuDO> list() {
-        List<MenuDO> menus = menuService.selectList(null);
-        return menus;
-    }
-
-    @Log("添加菜单")
-    @RequiresPermissions("sys:menu:add")
-    @GetMapping("/add/{pId}")
-    String add(Model model, @PathVariable("pId") Long pId) {
-        model.addAttribute("pId", pId);
-        if (pId == 0) {
-            model.addAttribute("pName", "根目录");
-        } else {
-            model.addAttribute("pName", menuService.selectById(pId).getName());
-        }
-        return prefix + "/add";
-    }
-
-    @Log("编辑菜单")
-    @RequiresPermissions("sys:menu:edit")
-    @GetMapping("/edit/{id}")
-    String edit(Model model, @PathVariable("id") Long id) {
-        MenuDO mdo = menuService.selectById(id);
-        Long pId = mdo.getParentId();
-        model.addAttribute("pId", pId);
-        if (pId == 0) {
-            model.addAttribute("pName", "根目录");
-        } else {
-            model.addAttribute("pName", menuService.selectById(pId).getName());
-        }
-        model.addAttribute("menu", mdo);
-        return prefix + "/edit";
-    }
-
-    @Log("保存菜单")
-    @RequiresPermissions("sys:menu:add")
-    @PostMapping("/save")
-    @ResponseBody
-    Result<String> save(MenuDO menu) {
-        menuService.insert(menu);
-        return Result.ok();
-    }
-
-    @Log("更新菜单")
-    @RequiresPermissions("sys:menu:edit")
-    @PostMapping("/update")
-    @ResponseBody
-    Result<String> update(MenuDO menu) {
-        menuService.updateById(menu);
-        return Result.ok();
-    }
-
-    @Log("删除菜单")
-    @RequiresPermissions("sys:menu:remove")
-    @PostMapping("/remove")
-    @ResponseBody
-    Result<String> remove(Long id) {
-        menuService.deleteById(id);
-        return Result.ok();
-    }
-    
-    @Log("查询菜单树形数据")
-    @GetMapping("/tree")
-    @ResponseBody
-    Tree<MenuDO> tree() {
-        Tree<MenuDO> tree = new Tree<MenuDO>();
-        tree = menuService.getTree();
-        return tree;
-    }
-    
-    @Log("根据角色ID查询菜单树形数据")
-    @GetMapping("/tree/{roleId}")
-    @ResponseBody
-    Tree<MenuDO> tree(@PathVariable("roleId") Long roleId) {
-        Tree<MenuDO> tree = new Tree<MenuDO>();
-        tree = menuService.getTree(roleId);
-        return tree;
-    }
-}
+package com.ifast.sys.controller;
+
+import com.ifast.common.annotation.Log;
+import com.ifast.common.base.AdminBaseController;
+import com.ifast.common.domain.Tree;
+import com.ifast.common.utils.Result;
+import com.ifast.sys.domain.MenuDO;
+import com.ifast.sys.service.MenuService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <pre>
+ * </pre>
+ * 
+ * <small> 2018年3月23日 | Aron</small>
+ */
+@RequestMapping("/sys/menu")
+@Controller
+public class MenuController extends AdminBaseController {
+    String prefix = "sys/menu";
+    @Autowired
+    MenuService menuService;
+    
+    @RequiresPermissions("sys:menu:menu")
+    @GetMapping()
+    String menu(Model model) {
+        return prefix + "/menu";
+    }
+    
+    @RequiresPermissions("sys:menu:menu")
+    @RequestMapping("/list")
+    @ResponseBody
+    List<MenuDO> list() {
+        List<MenuDO> menus = menuService.selectList(null);
+        return menus;
+    }
+
+    @RequiresPermissions("sys:menu:add")
+    @GetMapping("/add/{pId}")
+    String add(Model model, @PathVariable("pId") Long pId) {
+        model.addAttribute("pId", pId);
+        if (pId == 0) {
+            model.addAttribute("pName", "根目录");
+        } else {
+            model.addAttribute("pName", menuService.selectById(pId).getName());
+        }
+        return prefix + "/add";
+    }
+
+    @RequiresPermissions("sys:menu:edit")
+    @GetMapping("/edit/{id}")
+    String edit(Model model, @PathVariable("id") Long id) {
+        MenuDO mdo = menuService.selectById(id);
+        Long pId = mdo.getParentId();
+        model.addAttribute("pId", pId);
+        if (pId == 0) {
+            model.addAttribute("pName", "根目录");
+        } else {
+            model.addAttribute("pName", menuService.selectById(pId).getName());
+        }
+        model.addAttribute("menu", mdo);
+        return prefix + "/edit";
+    }
+
+    @Log("保存菜单")
+    @RequiresPermissions("sys:menu:add")
+    @PostMapping("/save")
+    @ResponseBody
+    Result<String> save(MenuDO menu) {
+        menuService.insert(menu);
+        return Result.ok();
+    }
+
+    @Log("更新菜单")
+    @RequiresPermissions("sys:menu:edit")
+    @PostMapping("/update")
+    @ResponseBody
+    Result<String> update(MenuDO menu) {
+        menuService.updateById(menu);
+        return Result.ok();
+    }
+
+    @Log("删除菜单")
+    @RequiresPermissions("sys:menu:remove")
+    @PostMapping("/remove")
+    @ResponseBody
+    Result<String> remove(Long id) {
+        menuService.deleteById(id);
+        return Result.ok();
+    }
+    
+    @Log("查询菜单树形数据")
+    @GetMapping("/tree")
+    @ResponseBody
+    Tree<MenuDO> tree() {
+        Tree<MenuDO> tree = new Tree<MenuDO>();
+        tree = menuService.getTree();
+        return tree;
+    }
+    
+    @GetMapping("/tree/{roleId}")
+    @ResponseBody
+    Tree<MenuDO> tree(@PathVariable("roleId") Long roleId) {
+        Tree<MenuDO> tree = new Tree<MenuDO>();
+        tree = menuService.getTree(roleId);
+        return tree;
+    }
+}

+ 93 - 97
src/main/java/com/ifast/sys/controller/RoleController.java

@@ -1,97 +1,93 @@
-package com.ifast.sys.controller;
-
-import com.ifast.common.annotation.Log;
-import com.ifast.common.base.AdminBaseController;
-import com.ifast.common.utils.Result;
-import com.ifast.sys.domain.RoleDO;
-import com.ifast.sys.service.RoleService;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.*;
-
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * <pre>
- * </pre>
- * 
- * <small> 2018年3月23日 | Aron</small>
- */
-@RequestMapping("/sys/role")
-@Controller
-public class RoleController extends AdminBaseController {
-    String prefix = "sys/role";
-    @Autowired
-    RoleService roleService;
-    
-    @Log("进入系统角色页面")
-    @RequiresPermissions("sys:role:role")
-    @GetMapping()
-    String role() {
-        return prefix + "/role";
-    }
-    
-    @Log("查询系统角色菜单")
-    @RequiresPermissions("sys:role:role")
-    @GetMapping("/list")
-    @ResponseBody()
-    List<RoleDO> list() {
-        List<RoleDO> roles = roleService.findAll();
-        return roles;
-    }
-
-    @Log("添加角色")
-    @RequiresPermissions("sys:role:add")
-    @GetMapping("/add")
-    String add() {
-        return prefix + "/add";
-    }
-
-    @Log("编辑角色")
-    @RequiresPermissions("sys:role:edit")
-    @GetMapping("/edit/{id}")
-    String edit(@PathVariable("id") Long id, Model model) {
-        RoleDO roleDO = roleService.selectById(id);
-        model.addAttribute("role", roleDO);
-        return prefix + "/edit";
-    }
-
-    @Log("保存角色")
-    @RequiresPermissions("sys:role:add")
-    @PostMapping("/save")
-    @ResponseBody()
-    Result<String> save(RoleDO role) {
-        roleService.insert(role);
-        return Result.ok();
-    }
-
-    @Log("更新角色")
-    @RequiresPermissions("sys:role:edit")
-    @PostMapping("/update")
-    @ResponseBody()
-    Result<String> update(RoleDO role) {
-        roleService.updateById(role);
-        return Result.ok();
-    }
-    
-    @Log("删除角色")
-    @RequiresPermissions("sys:role:remove")
-    @PostMapping("/remove")
-    @ResponseBody()
-    Result<String> save(Long id) {
-        roleService.deleteById(id);
-        return Result.ok();
-    }
-    
-    @RequiresPermissions("sys:role:batchRemove")
-    @Log("批量删除角色")
-    @PostMapping("/batchRemove")
-    @ResponseBody
-    Result<String> batchRemove(@RequestParam("ids[]") Long[] ids) {
-        roleService.deleteBatchIds(Arrays.asList(ids));
-        return Result.ok();
-    }
-}
+package com.ifast.sys.controller;
+
+import com.ifast.common.annotation.Log;
+import com.ifast.common.base.AdminBaseController;
+import com.ifast.common.utils.Result;
+import com.ifast.sys.domain.RoleDO;
+import com.ifast.sys.service.RoleService;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * <pre>
+ * </pre>
+ * 
+ * <small> 2018年3月23日 | Aron</small>
+ */
+@RequestMapping("/sys/role")
+@Controller
+public class RoleController extends AdminBaseController {
+    String prefix = "sys/role";
+    @Autowired
+    RoleService roleService;
+    
+    @RequiresPermissions("sys:role:role")
+    @GetMapping()
+    String role() {
+        return prefix + "/role";
+    }
+    
+    @RequiresPermissions("sys:role:role")
+    @GetMapping("/list")
+    @ResponseBody()
+    List<RoleDO> list() {
+        List<RoleDO> roles = roleService.findAll();
+        return roles;
+    }
+
+    @RequiresPermissions("sys:role:add")
+    @GetMapping("/add")
+    String add() {
+        return prefix + "/add";
+    }
+
+    @RequiresPermissions("sys:role:edit")
+    @GetMapping("/edit/{id}")
+    String edit(@PathVariable("id") Long id, Model model) {
+        RoleDO roleDO = roleService.selectById(id);
+        model.addAttribute("role", roleDO);
+        return prefix + "/edit";
+    }
+
+    @Log("保存角色")
+    @RequiresPermissions("sys:role:add")
+    @PostMapping("/save")
+    @ResponseBody()
+    Result<String> save(RoleDO role) {
+        roleService.insert(role);
+        return Result.ok();
+    }
+
+    @Log("更新角色")
+    @RequiresPermissions("sys:role:edit")
+    @PostMapping("/update")
+    @ResponseBody()
+    Result<String> update(RoleDO role) {
+        roleService.updateById(role);
+        return Result.ok();
+    }
+    
+    @Log("删除角色")
+    @RequiresPermissions("sys:role:remove")
+    @PostMapping("/remove")
+    @ResponseBody()
+    Result<String> save(Long id) {
+        roleService.deleteById(id);
+        return Result.ok();
+    }
+    
+    @RequiresPermissions("sys:role:batchRemove")
+    @Log("批量删除角色")
+    @PostMapping("/batchRemove")
+    @ResponseBody
+    Result<String> batchRemove(@RequestParam("ids[]") Long[] ids) {
+        roleService.deleteBatchIds(Arrays.asList(ids));
+        return Result.ok();
+    }
+}

+ 1 - 4
src/main/java/com/ifast/sys/controller/SessionController.java

@@ -28,20 +28,18 @@ public class SessionController {
 	@Autowired
 	SessionService sessionService;
 	
-	@Log("进入在线用户列表页面")
 	@GetMapping()
 	public String online() {
 		return "sys/online/online";
 	}
 	
-	@Log("查询在线用户列表数据")
 	@ResponseBody
 	@RequestMapping("/list")
 	public List<UserOnline> list(@RequestParam(required=false) String name) {
 		return sessionService.list(name);
 	}
 	
-	@Log("根据sessionId强踢用户下线")
+	@Log("强踢用户下线")
 	@ResponseBody
 	@RequestMapping("/forceLogout/{sessionId}")
 	public Result<String> forceLogout(@PathVariable("sessionId") String sessionId, RedirectAttributes redirectAttributes) {
@@ -54,7 +52,6 @@ public class SessionController {
 		}
 	}
 	
-	@Log("查询在线用户数据列表")
 	@ResponseBody
 	@RequestMapping("/sessionList")
 	public Collection<Session> sessionList() {

+ 199 - 209
src/main/java/com/ifast/sys/controller/UserController.java

@@ -1,209 +1,199 @@
-package com.ifast.sys.controller;
-
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import org.apache.catalina.servlet4preview.http.HttpServletRequest;
-import org.apache.shiro.authz.annotation.RequiresPermissions;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PathVariable;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.multipart.MultipartFile;
-
-import com.baomidou.mybatisplus.plugins.Page;
-import com.ifast.common.annotation.Log;
-import com.ifast.common.base.AdminBaseController;
-import com.ifast.common.domain.DictDO;
-import com.ifast.common.domain.Tree;
-import com.ifast.common.service.DictService;
-import com.ifast.common.utils.MD5Utils;
-import com.ifast.common.utils.Result;
-import com.ifast.sys.domain.DeptDO;
-import com.ifast.sys.domain.RoleDO;
-import com.ifast.sys.domain.UserDO;
-import com.ifast.sys.service.RoleService;
-import com.ifast.sys.service.UserService;
-import com.ifast.sys.vo.UserVO;
-
-/**
- * <pre>
- * </pre>
- * 
- * <small> 2018年3月23日 | Aron</small>
- */
-@RequestMapping("/sys/user")
-@Controller
-public class UserController extends AdminBaseController {
-    private String prefix = "sys/user";
-    @Autowired
-    UserService userService;
-    @Autowired
-    RoleService roleService;
-    @Autowired
-    DictService dictService;
-    
-    @Log("进入系统用户列表页面")
-    @RequiresPermissions("sys:user:user")
-    @GetMapping("")
-    String user(Model model) {
-        return prefix + "/user";
-    }
-    
-    @Log("查询系统用户列表")
-    @GetMapping("/list")
-    @ResponseBody
-    public Result<Page<UserDO>> list(UserDO userDTO) {
-        // 查询列表数据
-        Page<UserDO> page = userService.selectPage(getPage(UserDO.class), userService.convertToEntityWrapper("name", userDTO.getName(), "deptId", userDTO.getDeptId()));
-        return Result.ok(page);
-    }
-
-    
-    @RequiresPermissions("sys:user:add")
-    @Log("添加用户")
-    @GetMapping("/add")
-    String add(Model model) {
-        List<RoleDO> roles = roleService.selectList(null);
-        model.addAttribute("roles", roles);
-        return prefix + "/add";
-    }
-
-    @RequiresPermissions("sys:user:edit")
-    @Log("编辑用户")
-    @GetMapping("/edit/{id}")
-    String edit(Model model, @PathVariable("id") Long id) {
-        UserDO userDO = userService.selectById(id);
-        model.addAttribute("user", userDO);
-        List<RoleDO> roles = roleService.findListStatusByUserId(id);
-        model.addAttribute("roles", roles);
-        return prefix + "/edit";
-    }
-
-    @RequiresPermissions("sys:user:add")
-    @Log("保存用户")
-    @PostMapping("/save")
-    @ResponseBody
-    Result<String> save(UserDO user) {
-        user.setPassword(MD5Utils.encrypt(user.getUsername(), user.getPassword()));
-        userService.insert(user);
-        return Result.ok();
-    }
-
-    @RequiresPermissions("sys:user:edit")
-    @Log("更新用户")
-    @PostMapping("/update")
-    @ResponseBody
-    Result<String> update(UserDO user) {
-        userService.updateById(user);
-        return Result.ok();
-    }
-
-    @RequiresPermissions("sys:user:edit")
-    @Log("更新用户")
-    @PostMapping("/updatePeronal")
-    @ResponseBody
-    Result<String> updatePeronal(UserDO user) {
-        userService.updatePersonal(user);
-        return Result.ok();
-    }
-
-    @RequiresPermissions("sys:user:remove")
-    @Log("删除用户")
-    @PostMapping("/remove")
-    @ResponseBody
-    Result<String> remove(Long id) {
-        userService.deleteById(id);
-        return Result.ok();
-    }
-
-    @RequiresPermissions("sys:user:batchRemove")
-    @Log("批量删除用户")
-    @PostMapping("/batchRemove")
-    @ResponseBody
-    Result<String> batchRemove(@RequestParam("ids[]") Long[] userIds) {
-        userService.deleteBatchIds(Arrays.asList(userIds));
-        return Result.ok();
-    }
-    
-    @Log("退出")
-    @PostMapping("/exit")
-    @ResponseBody
-    boolean exit(@RequestParam Map<String, Object> params) {
-        // 存在,不通过,false
-        return !userService.exit(params);
-    }
-
-    @RequiresPermissions("sys:user:resetPwd")
-    @Log("请求更改用户密码")
-    @GetMapping("/resetPwd/{id}")
-    String resetPwd(@PathVariable("id") Long userId, Model model) {
-
-        UserDO userDO = new UserDO();
-        userDO.setId(userId);
-        model.addAttribute("user", userDO);
-        return prefix + "/reset_pwd";
-    }
-
-    @Log("提交更改用户密码")
-    @PostMapping("/resetPwd")
-    @ResponseBody
-    Result<String> resetPwd(UserVO userVO) {
-        userService.resetPwd(userVO, getUser());
-        return Result.ok();
-    }
-
-    @RequiresPermissions("sys:user:resetPwd")
-    @Log("admin提交更改用户密码")
-    @PostMapping("/adminResetPwd")
-    @ResponseBody
-    Result<String> adminResetPwd(UserVO userVO) {
-        userService.adminResetPwd(userVO);
-        return Result.ok();
-
-    }
-    
-    @Log("查询系统用户属性树形数据")
-    @GetMapping("/tree")
-    @ResponseBody
-    public Tree<DeptDO> tree() {
-        Tree<DeptDO> tree = new Tree<DeptDO>();
-        tree = userService.getTree();
-        return tree;
-    }
-    
-    @Log("进入系统用户树形显示页面")
-    @GetMapping("/treeView")
-    String treeView() {
-        return prefix + "/userTree";
-    }
-    
-    @Log("进入个人中心")
-    @GetMapping("/personal")
-    String personal(Model model) {
-        UserDO userDO = userService.selectById(getUserId());
-        model.addAttribute("user", userDO);
-        List<DictDO> hobbyList = dictService.getHobbyList(userDO);
-        model.addAttribute("hobbyList", hobbyList);
-        List<DictDO> sexList = dictService.getSexList();
-        model.addAttribute("sexList", sexList);
-        return prefix + "/personal";
-    }
-    
-    @Log("上传头像")
-    @ResponseBody
-    @PostMapping("/uploadImg")
-    Result<?> uploadImg(@RequestParam("avatar_file") MultipartFile file, String avatar_data, HttpServletRequest request)
-            throws Exception {
-        Map<String, Object> result = new HashMap<>();
-        result = userService.updatePersonalImg(file, avatar_data, getUserId());
-        return Result.ok(result);
-    }
-}
+package com.ifast.sys.controller;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.catalina.servlet4preview.http.HttpServletRequest;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.multipart.MultipartFile;
+
+import com.baomidou.mybatisplus.plugins.Page;
+import com.ifast.common.annotation.Log;
+import com.ifast.common.base.AdminBaseController;
+import com.ifast.common.domain.DictDO;
+import com.ifast.common.domain.Tree;
+import com.ifast.common.service.DictService;
+import com.ifast.common.utils.MD5Utils;
+import com.ifast.common.utils.Result;
+import com.ifast.sys.domain.DeptDO;
+import com.ifast.sys.domain.RoleDO;
+import com.ifast.sys.domain.UserDO;
+import com.ifast.sys.service.RoleService;
+import com.ifast.sys.service.UserService;
+import com.ifast.sys.vo.UserVO;
+
+/**
+ * <pre>
+ * </pre>
+ * 
+ * <small> 2018年3月23日 | Aron</small>
+ */
+@RequestMapping("/sys/user")
+@Controller
+public class UserController extends AdminBaseController {
+    private String prefix = "sys/user";
+    @Autowired
+    UserService userService;
+    @Autowired
+    RoleService roleService;
+    @Autowired
+    DictService dictService;
+    
+    @RequiresPermissions("sys:user:user")
+    @GetMapping("")
+    String user(Model model) {
+        return prefix + "/user";
+    }
+    
+    @GetMapping("/list")
+    @ResponseBody
+    public Result<Page<UserDO>> list(UserDO userDTO) {
+        // 查询列表数据
+        Page<UserDO> page = userService.selectPage(getPage(UserDO.class), userService.convertToEntityWrapper("name", userDTO.getName(), "deptId", userDTO.getDeptId()));
+        return Result.ok(page);
+    }
+
+    
+    @RequiresPermissions("sys:user:add")
+    @GetMapping("/add")
+    String add(Model model) {
+        List<RoleDO> roles = roleService.selectList(null);
+        model.addAttribute("roles", roles);
+        return prefix + "/add";
+    }
+
+    @RequiresPermissions("sys:user:edit")
+    @GetMapping("/edit/{id}")
+    String edit(Model model, @PathVariable("id") Long id) {
+        UserDO userDO = userService.selectById(id);
+        model.addAttribute("user", userDO);
+        List<RoleDO> roles = roleService.findListStatusByUserId(id);
+        model.addAttribute("roles", roles);
+        return prefix + "/edit";
+    }
+
+    @RequiresPermissions("sys:user:add")
+    @Log("保存用户")
+    @PostMapping("/save")
+    @ResponseBody
+    Result<String> save(UserDO user) {
+        user.setPassword(MD5Utils.encrypt(user.getUsername(), user.getPassword()));
+        userService.insert(user);
+        return Result.ok();
+    }
+
+    @RequiresPermissions("sys:user:edit")
+    @Log("更新用户")
+    @PostMapping("/update")
+    @ResponseBody
+    Result<String> update(UserDO user) {
+        userService.updateById(user);
+        return Result.ok();
+    }
+
+    @RequiresPermissions("sys:user:edit")
+    @Log("更新用户")
+    @PostMapping("/updatePeronal")
+    @ResponseBody
+    Result<String> updatePeronal(UserDO user) {
+        userService.updatePersonal(user);
+        return Result.ok();
+    }
+
+    @RequiresPermissions("sys:user:remove")
+    @Log("删除用户")
+    @PostMapping("/remove")
+    @ResponseBody
+    Result<String> remove(Long id) {
+        userService.deleteById(id);
+        return Result.ok();
+    }
+
+    @RequiresPermissions("sys:user:batchRemove")
+    @Log("批量删除用户")
+    @PostMapping("/batchRemove")
+    @ResponseBody
+    Result<String> batchRemove(@RequestParam("ids[]") Long[] userIds) {
+        userService.deleteBatchIds(Arrays.asList(userIds));
+        return Result.ok();
+    }
+    
+    @PostMapping("/exist")
+    @ResponseBody
+    boolean exist(@RequestParam Map<String, Object> params) {
+        // 存在,不通过,false
+        return !userService.exist(params);
+    }
+
+    @RequiresPermissions("sys:user:resetPwd")
+    @GetMapping("/resetPwd/{id}")
+    String resetPwd(@PathVariable("id") Long userId, Model model) {
+        UserDO userDO = new UserDO();
+        userDO.setId(userId);
+        model.addAttribute("user", userDO);
+        return prefix + "/reset_pwd";
+    }
+
+    @Log("提交更改用户密码")
+    @PostMapping("/resetPwd")
+    @ResponseBody
+    Result<String> resetPwd(UserVO userVO) {
+        userService.resetPwd(userVO, getUser());
+        return Result.ok();
+    }
+
+    @RequiresPermissions("sys:user:resetPwd")
+    @Log("admin提交更改用户密码")
+    @PostMapping("/adminResetPwd")
+    @ResponseBody
+    Result<String> adminResetPwd(UserVO userVO) {
+        userService.adminResetPwd(userVO);
+        return Result.ok();
+
+    }
+    
+    @GetMapping("/tree")
+    @ResponseBody
+    public Tree<DeptDO> tree() {
+        Tree<DeptDO> tree = new Tree<DeptDO>();
+        tree = userService.getTree();
+        return tree;
+    }
+    
+    @GetMapping("/treeView")
+    String treeView() {
+        return prefix + "/userTree";
+    }
+    
+    @GetMapping("/personal")
+    String personal(Model model) {
+        UserDO userDO = userService.selectById(getUserId());
+        model.addAttribute("user", userDO);
+        List<DictDO> hobbyList = dictService.getHobbyList(userDO);
+        model.addAttribute("hobbyList", hobbyList);
+        List<DictDO> sexList = dictService.getSexList();
+        model.addAttribute("sexList", sexList);
+        return prefix + "/personal";
+    }
+    
+    @Log("上传头像")
+    @ResponseBody
+    @PostMapping("/uploadImg")
+    Result<?> uploadImg(@RequestParam("avatar_file") MultipartFile file, String avatar_data, HttpServletRequest request)
+            throws Exception {
+        Map<String, Object> result = new HashMap<>();
+        result = userService.updatePersonalImg(file, avatar_data, getUserId());
+        return Result.ok(result);
+    }
+}

+ 53 - 53
src/main/java/com/ifast/sys/service/UserService.java

@@ -1,53 +1,53 @@
-package com.ifast.sys.service;
-
-import com.ifast.common.base.CoreService;
-import com.ifast.common.domain.Tree;
-import com.ifast.sys.domain.DeptDO;
-import com.ifast.sys.domain.UserDO;
-import com.ifast.sys.vo.UserVO;
-import org.springframework.stereotype.Service;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.util.Map;
-import java.util.Set;
-
-/**
- * <pre>
- * </pre>
- * 
- * <small> 2018年3月23日 | Aron</small>
- */
-@Service
-public interface UserService extends CoreService<UserDO> {
-
-    boolean exit(Map<String, Object> params);
-
-    Set<String> listRoles(Long userId);
-
-    int resetPwd(UserVO userVO, UserDO userDO);
-
-    int adminResetPwd(UserVO userVO);
-
-    Tree<DeptDO> getTree();
-
-    /**
-     * 更新个人信息
-     * 
-     * @param userDO
-     * @return
-     */
-    int updatePersonal(UserDO userDO);
-
-    /**
-     * 更新个人图片
-     * 
-     * @param file
-     *            图片
-     * @param avatar_data
-     *            裁剪信息
-     * @param userId
-     *            用户ID
-     * @throws Exception
-     */
-    Map<String, Object> updatePersonalImg(MultipartFile file, String avatar_data, Long userId) throws Exception;
-}
+package com.ifast.sys.service;
+
+import com.ifast.common.base.CoreService;
+import com.ifast.common.domain.Tree;
+import com.ifast.sys.domain.DeptDO;
+import com.ifast.sys.domain.UserDO;
+import com.ifast.sys.vo.UserVO;
+import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * <pre>
+ * </pre>
+ * 
+ * <small> 2018年3月23日 | Aron</small>
+ */
+@Service
+public interface UserService extends CoreService<UserDO> {
+
+    boolean exist(Map<String, Object> params);
+
+    Set<String> listRoles(Long userId);
+
+    int resetPwd(UserVO userVO, UserDO userDO);
+
+    int adminResetPwd(UserVO userVO);
+
+    Tree<DeptDO> getTree();
+
+    /**
+     * 更新个人信息
+     * 
+     * @param userDO
+     * @return
+     */
+    int updatePersonal(UserDO userDO);
+
+    /**
+     * 更新个人图片
+     * 
+     * @param file
+     *            图片
+     * @param avatar_data
+     *            裁剪信息
+     * @param userId
+     *            用户ID
+     * @throws Exception
+     */
+    Map<String, Object> updatePersonalImg(MultipartFile file, String avatar_data, Long userId) throws Exception;
+}

+ 1 - 1
src/main/java/com/ifast/sys/service/impl/UserServiceImpl.java

@@ -110,7 +110,7 @@ public class UserServiceImpl extends CoreServiceImpl<UserDao, UserDO> implements
     }
 
     @Override
-    public boolean exit(Map<String, Object> params) {
+    public boolean exist(Map<String, Object> params) {
         return retBool(baseMapper.selectByMap(params).size());
     }
 

+ 181 - 170
src/main/resources/static/js/appjs/common/log/log.js

@@ -1,171 +1,182 @@
-var prefix = "/common/log"
-$(function() {
-	load();
-
-});
-
-function load() {
-	$('#exampleTable')
-			.bootstrapTable(
-					{
-						method : 'get', // 服务器数据的请求方式 get or post
-						url : prefix + "/list", // 服务器数据的加载地址
-						// showRefresh : true,
-						// showToggle : true,
-						// showColumns : true,
-						iconSize : 'outline',
-						toolbar : '#exampleToolbar',
-						striped : true, // 设置为true会有隔行变色效果
-						dataType : "json", // 服务器返回的数据类型
-						pagination : true, // 设置为true会在底部显示分页条
-						singleSelect : false, // 设置为true将禁止多选
-						// contentType : "application/x-www-form-urlencoded",
-						// //发送到服务器的数据编码类型
-						pageSize : 10, // 如果设置了分页,每页数据条数
-						pageNumber : 1, // 如果设置了分布,首页页码
-						// search : true, // 是否显示搜索框
-						// showColumns : true, // 是否显示内容下拉框(选择显示的列)
-						sidePagination : "server", // 设置在哪里进行分页,可选值为"client" 或者
-						// "server"
-						queryParamsType : "",
-						// //设置为limit则会发送符合RESTFull格式的参数
-						queryParams : function(params) {
-							return {
-								pageNumber : params.pageNumber,
-								pageSize : params.pageSize,
-								name : $('#searchName').val(),
-								sort : 'gmtCreate',
-								order : 'desc',
-								operation : $("#searchOperation").val(),
-								username : $("#searchUsername").val()
-							};
-						},
-						// //请求服务器数据时,你可以通过重写参数的方式添加一些额外的参数,例如 toolbar 中的参数 如果
-						// queryParamsType = 'limit' ,返回参数必须包含
-						// limit, offset, search, sort, order 否则, 需要包含:
-						// pageSize, pageNumber, searchText, sortName,
-						// sortOrder.
-						// 返回false将会终止请求
-						responseHandler : function(res){
-							console.log(res);
-							return {
-				                "total": res.data.total,//总数
-				                "rows": res.data.records   //数据
-				             };
-						},
-						columns : [
-								{
-									checkbox : true
-								},
-								{
-									field : 'id', // 列字段名
-									title : '序号' // 列标题
-								},
-								{
-									field : 'userId',
-									title : '员工Id'
-								},
-								{
-									field : 'username',
-									title : '用户名'
-								},
-								{
-									field : 'operation',
-									title : '操作'
-								},
-								{
-									field : 'time',
-									title : '用时'
-								},
-								{
-									field : 'method',
-									title : '方法'
-								},
-								{
-									field : 'ip',
-									title : 'IP地址'
-								},
-								{
-									field : 'gmtCreate',
-									title : '创建时间'
-								},
-								{
-									title : '操作',
-									field : 'id',
-									align : 'center',
-									formatter : function(value, row, index) {
-										var e = '<a class="btn btn-primary btn-sm" href="#" mce_href="#" title="编辑" onclick="edit(\''
-												+ row.userId
-												+ '\')"><i class="fa fa-edit"></i></a> ';
-										var d = '<a class="btn btn-warning btn-sm" href="#" title="删除"  mce_href="#" onclick="remove(\''
-												+ row.id
-												+ '\')"><i class="fa fa-remove"></i></a> ';
-										var f = '<a class="btn btn-success btn-sm" href="#" title="重置密码"  mce_href="#" onclick="resetPwd(\''
-												+ row.userId
-												+ '\')"><i class="fa fa-key"></i></a> ';
-										return d;
-									}
-								} ]
-					});
-}
-function reLoad() {
-	$('#exampleTable').bootstrapTable('refresh');
-}
-function remove(id) {
-	layer.confirm('确定要删除选中的记录?', {
-		btn : [ '确定', '取消' ]
-	}, function() {
-		$.ajax({
-			url : prefix + "/remove",
-			type : "post",
-			data : {
-				'id' : id
-			},
-			beforeSend : function(request) {
-				index = layer.load();
-			},
-			success : function(r) {
-				if (r.code == 0) {
-					layer.close(index);
-					layer.msg(r.msg);
-					reLoad();
-				} else {
-					layer.msg(r.msg);
-				}
-			}
-		});
-	})
-}
-function batchRemove() {
-	var rows = $('#exampleTable').bootstrapTable('getSelections'); // 返回所有选择的行,当没有选择的记录时,返回一个空数组
-	if (rows.length == 0) {
-		layer.msg("请选择要删除的数据");
-		return;
-	}
-	layer.confirm("确认要删除选中的'" + rows.length + "'条数据吗?", {
-		btn : [ '确定', '取消' ]
-	// 按钮
-	}, function() {
-		var ids = new Array();
-		// 遍历所有选择的行数据,取每条数据对应的ID
-		$.each(rows, function(i, row) {
-			ids[i] = row['id'];
-		});
-		$.ajax({
-			type : 'POST',
-			data : {
-				"ids" : ids
-			},
-			url : prefix + '/batchRemove',
-			success : function(r) {
-				if (r.code == 0) {
-					layer.msg(r.msg);
-					reLoad();
-				} else {
-					layer.msg(r.msg);
-				}
-			}
-		});
-	}, function() {
-	});
+var prefix = "/common/log"
+$(function() {
+	load();
+
+});
+
+function load() {
+	$('#exampleTable')
+			.bootstrapTable(
+					{
+						method : 'get', // 服务器数据的请求方式 get or post
+						url : prefix + "/list", // 服务器数据的加载地址
+						showRefresh : true,
+						// showToggle : true,
+						// showColumns : true,
+						iconSize : 'outline',
+						toolbar : '#exampleToolbar',
+						striped : true, // 设置为true会有隔行变色效果
+						dataType : "json", // 服务器返回的数据类型
+						pagination : true, // 设置为true会在底部显示分页条
+						singleSelect : false, // 设置为true将禁止多选
+						// contentType : "application/x-www-form-urlencoded",
+						// //发送到服务器的数据编码类型
+						pageSize : 10, // 如果设置了分页,每页数据条数
+						pageNumber : 1, // 如果设置了分布,首页页码
+						// search : true, // 是否显示搜索框
+						// showColumns : true, // 是否显示内容下拉框(选择显示的列)
+						sidePagination : "server", // 设置在哪里进行分页,可选值为"client" 或者
+						// "server"
+						queryParamsType : "",
+						// //设置为limit则会发送符合RESTFull格式的参数
+						queryParams : function(params) {
+							return {
+								pageNumber : params.pageNumber,
+								pageSize : params.pageSize,
+								sort : 'id',
+								order : 'desc',
+								operation : $("#searchOperation").val(),
+								username : $("#searchUsername").val(),
+								userId : $("#searchUserId").val()
+							};
+						},
+						// //请求服务器数据时,你可以通过重写参数的方式添加一些额外的参数,例如 toolbar 中的参数 如果
+						// queryParamsType = 'limit' ,返回参数必须包含
+						// limit, offset, search, sort, order 否则, 需要包含:
+						// pageSize, pageNumber, searchText, sortName,
+						// sortOrder.
+						// 返回false将会终止请求
+						responseHandler : function(res){
+							console.log(res);
+							return {
+				                "total": res.data.total,//总数
+				                "rows": res.data.records   //数据
+				             };
+						},
+						columns : [
+								{
+									checkbox : true
+								},
+								{
+									field : 'id', // 列字段名
+									title : '序号' // 列标题
+								},
+								{
+									field : 'userId',
+									title : '员工Id'
+								},
+								{
+									field : 'username',
+									title : '用户名'
+								},
+								{
+									field : 'operation',
+									title : '操作',
+									formatter : function(value, row, index) {
+										return '<span title="'+row.method+'">'+value+'</span>';
+									}
+								},
+								{
+									field : 'time',
+									title : '用时'
+								},
+								{
+									field : 'params',
+									title : '参数',
+									formatter : function(value, row, index){
+										var txt = !value ? "" : value, size = 100;
+										if(txt.length<=size){
+											return txt;
+										}else{
+											return "<textarea rows=\""+Math.min(5,Math.ceil(lengthCN(txt)/size))+"\" cols=\""+size+"\" style=\"width:100%;background:transparent;border-style:none;resize:none\" readonly>"+txt+"</textarea>";
+										}
+									}
+								},
+								{
+									field : 'ip',
+									title : 'IP地址'
+								},
+								{
+									field : 'gmtCreate',
+									title : '创建时间'
+								},
+								{
+									title : '操作',
+									field : 'id',
+									align : 'center',
+									formatter : function(value, row, index) {
+										var e = '<a class="btn btn-primary btn-sm" href="#" mce_href="#" title="编辑" onclick="edit(\''
+												+ row.userId
+												+ '\')"><i class="fa fa-edit"></i></a> ';
+										var d = '<a class="btn btn-warning btn-sm" href="#" title="删除"  mce_href="#" onclick="remove(\''
+												+ row.id
+												+ '\')"><i class="fa fa-remove"></i></a> ';
+										var f = '<a class="btn btn-success btn-sm" href="#" title="重置密码"  mce_href="#" onclick="resetPwd(\''
+												+ row.userId
+												+ '\')"><i class="fa fa-key"></i></a> ';
+										return d;
+									}
+								} ]
+					});
+}
+function reLoad() {
+	$('#exampleTable').bootstrapTable('refresh');
+}
+function remove(id) {
+	layer.confirm('确定要删除选中的记录?', {
+		btn : [ '确定', '取消' ]
+	}, function() {
+		$.ajax({
+			url : prefix + "/remove",
+			type : "post",
+			data : {
+				'id' : id
+			},
+			beforeSend : function(request) {
+				index = layer.load();
+			},
+			success : function(r) {
+				if (r.code == 0) {
+					layer.close(index);
+					layer.msg(r.msg);
+					reLoad();
+				} else {
+					layer.msg(r.msg);
+				}
+			}
+		});
+	})
+}
+function batchRemove() {
+	var rows = $('#exampleTable').bootstrapTable('getSelections'); // 返回所有选择的行,当没有选择的记录时,返回一个空数组
+	if (rows.length == 0) {
+		layer.msg("请选择要删除的数据");
+		return;
+	}
+	layer.confirm("确认要删除选中的'" + rows.length + "'条数据吗?", {
+		btn : [ '确定', '取消' ]
+	// 按钮
+	}, function() {
+		var ids = new Array();
+		// 遍历所有选择的行数据,取每条数据对应的ID
+		$.each(rows, function(i, row) {
+			ids[i] = row['id'];
+		});
+		$.ajax({
+			type : 'POST',
+			data : {
+				"ids" : ids
+			},
+			url : prefix + '/batchRemove',
+			success : function(r) {
+				if (r.code == 0) {
+					layer.msg(r.msg);
+					reLoad();
+				} else {
+					layer.msg(r.msg);
+				}
+			}
+		});
+	}, function() {
+	});
 }

+ 25 - 20
src/main/resources/static/js/appjs/demo/demoBase/demoBase.js

@@ -10,7 +10,7 @@ function load() {
 					{
 						method : 'get', // 服务器数据的请求方式 get or post
 						url : prefix + "/list", // 服务器数据的加载地址
-					//	showRefresh : true,
+						showRefresh : true,
 					//	showToggle : true,
 					//	showColumns : true,
 						iconSize : 'outline',
@@ -32,9 +32,9 @@ function load() {
 							return {
 								//说明:传入后台的参数包括offset开始索引,limit步长,sort排序列,order:desc或者,以及所有列的键值对
 							     pageNumber : params.pageNumber,
-                                  pageSize : params.pageSize  
-					           // name:$('#searchName').val(),
-					           // username:$('#searchName').val()
+                                  pageSize : params.pageSize,
+					            title:$('#title').val(),
+					            content:$('#content').val()
 							};
 						},
 						// //请求服务器数据时,你可以通过重写参数的方式添加一些额外的参数,例如 toolbar 中的参数 如果
@@ -64,31 +64,36 @@ function load() {
 								},
 																{
 									field : 'content', 
-									title : '正文' 
+									title : '正文',
+									formatter : function(value, row, index){
+										var txt = !value ? "" : value, size = 100;
+										if(txt.length<=size){
+											return txt;
+										}else{
+											return "<textarea rows=\""+Math.ceil(lengthCN(txt)/size)+"\" cols=\""+size+"\" style=\"width:100%;background:transparent;border-style:none;resize:none\" readonly>"+txt+"</textarea>";
+										}
+									}									
 								},
 																{
 									field : 'publish', 
-									title : '发布时间' 
-								},
-																{
-									field : 'version', 
-									title : '版本' 
-								},
-																{
-									field : 'createAt', 
-									title : '创建时间' 
+									title : '发布时间',
+									formatter : function(value, row, index) {
+										return '<span title="版本:'+row.version+'">'+value+'</span>';
+									}
 								},
 																{
 									field : 'createBy', 
-									title : '创建者' 
+									title : '创建者',
+									formatter : function(value, row, index) {
+										return '<span title="创建时间:'+row.createAt+'">'+value+'</span>';
+									}									
 								},
 																{
 									field : 'updateAt', 
-									title : '更新时间' 
-								},
-																{
-									field : 'updateBy', 
-									title : '更新者' 
+									title : '更新时间',
+									formatter : function(value, row, index) {
+										return '<span title="更新者:'+row.updateBy+'">'+value+'</span>';
+									}									
 								},
 																{
 									title : '操作',

+ 121 - 121
src/main/resources/static/js/appjs/sys/user/add.js

@@ -1,122 +1,122 @@
-$().ready(function() {
-	validateRule();
-});
-
-$.validator.setDefaults({
-	submitHandler : function() {
-		save();
-	}
-});
-function getCheckedRoles() {
-	var adIds = "";
-	$("input:checkbox[name=role]:checked").each(function(i) {
-		if (0 == i) {
-			adIds = $(this).val();
-		} else {
-			adIds += ("," + $(this).val());
-		}
-	});
-	return adIds;
-}
-function save() {
-	$("#roleIds").val(getCheckedRoles());
-	$.ajax({
-		cache : true,
-		type : "POST",
-		url : "/sys/user/save",
-		data : $('#signupForm').serialize(),// 你的formid
-		async : false,
-		error : function(request) {
-			parent.layer.alert("Connection error");
-		},
-		success : function(data) {
-			if (data.code == 0) {
-				parent.layer.msg("操作成功");
-				parent.reLoad();
-				var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
-				parent.layer.close(index);
-
-			} else {
-				parent.layer.alert(data.msg)
-			}
-
-		}
-	});
-
-}
-function validateRule() {
-	var icon = "<i class='fa fa-times-circle'></i> ";
-	$("#signupForm").validate({
-		rules : {
-			name : {
-				required : true
-			},
-			username : {
-				required : true,
-				minlength : 2,
-				remote : {
-					url : "/sys/user/exit", // 后台处理程序
-					type : "post", // 数据发送方式
-					dataType : "json", // 接受数据格式
-					data : { // 要传递的数据
-						username : function() {
-							return $("#username").val();
-						}
-					}
-				}
-			},
-			password : {
-				required : true,
-				minlength : 6
-			},
-			confirm_password : {
-				required : true,
-				minlength : 6,
-				equalTo : "#password"
-			},
-			email : {
-				required : true,
-				email : true
-			},
-			topic : {
-				required : "#newsletter:checked",
-				minlength : 2
-			},
-			agree : "required"
-		},
-		messages : {
-
-			name : {
-				required : icon + "请输入姓名"
-			},
-			username : {
-				required : icon + "请输入您的用户名",
-				minlength : icon + "用户名必须两个字符以上",
-				remote : icon + "用户名已经存在"
-			},
-			password : {
-				required : icon + "请输入您的密码",
-				minlength : icon + "密码必须6个字符以上"
-			},
-			confirm_password : {
-				required : icon + "请再次输入密码",
-				minlength : icon + "密码必须6个字符以上",
-				equalTo : icon + "两次输入的密码不一致"
-			},
-			email : icon + "请输入您的E-mail",
-		}
-	})
-}
-
-var openDept = function(){
-	layer.open({
-		type:2,
-		title:"选择部门",
-		area : [ '300px', '450px' ],
-		content:"/sys/dept/treeView"
-	})
-}
-function loadDept( deptId,deptName){
-	$("#deptId").val(deptId);
-	$("#deptName").val(deptName);
+$().ready(function() {
+	validateRule();
+});
+
+$.validator.setDefaults({
+	submitHandler : function() {
+		save();
+	}
+});
+function getCheckedRoles() {
+	var adIds = "";
+	$("input:checkbox[name=role]:checked").each(function(i) {
+		if (0 == i) {
+			adIds = $(this).val();
+		} else {
+			adIds += ("," + $(this).val());
+		}
+	});
+	return adIds;
+}
+function save() {
+	$("#roleIds").val(getCheckedRoles());
+	$.ajax({
+		cache : true,
+		type : "POST",
+		url : "/sys/user/save",
+		data : $('#signupForm').serialize(),// 你的formid
+		async : false,
+		error : function(request) {
+			parent.layer.alert("Connection error");
+		},
+		success : function(data) {
+			if (data.code == 0) {
+				parent.layer.msg("操作成功");
+				parent.reLoad();
+				var index = parent.layer.getFrameIndex(window.name); // 获取窗口索引
+				parent.layer.close(index);
+
+			} else {
+				parent.layer.alert(data.msg)
+			}
+
+		}
+	});
+
+}
+function validateRule() {
+	var icon = "<i class='fa fa-times-circle'></i> ";
+	$("#signupForm").validate({
+		rules : {
+			name : {
+				required : true
+			},
+			username : {
+				required : true,
+				minlength : 2,
+				remote : {
+					url : "/sys/user/exist", // 后台处理程序
+					type : "post", // 数据发送方式
+					dataType : "json", // 接受数据格式
+					data : { // 要传递的数据
+						username : function() {
+							return $("#username").val();
+						}
+					}
+				}
+			},
+			password : {
+				required : true,
+				minlength : 6
+			},
+			confirm_password : {
+				required : true,
+				minlength : 6,
+				equalTo : "#password"
+			},
+			email : {
+				required : true,
+				email : true
+			},
+			topic : {
+				required : "#newsletter:checked",
+				minlength : 2
+			},
+			agree : "required"
+		},
+		messages : {
+
+			name : {
+				required : icon + "请输入姓名"
+			},
+			username : {
+				required : icon + "请输入您的用户名",
+				minlength : icon + "用户名必须两个字符以上",
+				remote : icon + "用户名已经存在"
+			},
+			password : {
+				required : icon + "请输入您的密码",
+				minlength : icon + "密码必须6个字符以上"
+			},
+			confirm_password : {
+				required : icon + "请再次输入密码",
+				minlength : icon + "密码必须6个字符以上",
+				equalTo : icon + "两次输入的密码不一致"
+			},
+			email : icon + "请输入您的E-mail",
+		}
+	})
+}
+
+var openDept = function(){
+	layer.open({
+		type:2,
+		title:"选择部门",
+		area : [ '300px', '450px' ],
+		content:"/sys/dept/treeView"
+	})
+}
+function loadDept( deptId,deptName){
+	$("#deptId").val(deptId);
+	$("#deptName").val(deptName);
 }

+ 32 - 0
src/main/resources/static/js/content.js

@@ -98,3 +98,35 @@ function sendFile(files, editor, $editable) {
         }
     });
 }
+
+//计算带中文的字符串显示宽度
+function lengthCN(message) {
+    var strlenght = 0;
+    var txtval = $.trim(message);
+    for (var i = 0; i < txtval.length; i++) {
+        if (isCN(txtval.charAt(i)) == true) {
+            strlenght = strlenght + 1.8;
+        } else {
+            strlenght = strlenght + 1;
+        }
+    }
+    return strlenght;
+}
+function isCN(str) {
+	var regexCh = /[u00-uff]/;
+	return !regexCh .test(str);
+}
+
+//预览图片
+function preview(url) {
+    layer.open({
+        type: 1,
+        title: '预览',
+        closeBtn: 1,
+        area: [ '800px', '800px' ],
+        skin: 'layui-layer-nobg', //没有背景色
+        shadeClose: true,
+        offset: 't',
+        content: '<img width="90%" src="'+url+'"/>'
+    });
+}

+ 43 - 39
src/main/resources/templates/common/log/log.html

@@ -1,40 +1,44 @@
-<!DOCTYPE html>
-<html>
-<meta charset="utf-8">
-<head th:include="include :: header"></head>
-<body class="gray-bg">
-	<div class="wrapper wrapper-content animated fadeInRight">
-		<div class="col-sm-12">
-			<div class="ibox">
-				<div class="ibox-body">
-					<div class="fixed-table-toolbar">
-						<div class="columns pull-left">
-							<button type="button" class="btn  btn-danger"
-								onclick="batchRemove()">
-								<i class="fa fa-trash" aria-hidden="true"></i>删除
-							</button>
-						</div>
-						<div class="columns pull-right" role="group">
-							<button class="btn btn-success" onclick="reLoad()">
-								<i class="fa fa-search" aria-hidden="true"></i>查询
-							</button>
-						</div>
-						<div class="pull-right search col-md-2">
-							<input id="searchOperation" type="text" class="form-control"
-								placeholder="操作">
-						</div>
-						<div class="pull-right search col-md-2 nopadding">
-							<input id="searchUsername" type="text" class="form-control"
-								placeholder="用户">
-						</div>
-					</div>
-					<table id="exampleTable" data-mobile-responsive="true">
-					</table>
-				</div>
-			</div>
-		</div>
-	</div>
-	<div th:include="include :: footer"></div>
-	<script type="text/javascript" src="/js/appjs/common/log/log.js"></script>
-</body>
+<!DOCTYPE html>
+<html>
+<meta charset="utf-8">
+<head th:include="include :: header"></head>
+<body class="gray-bg">
+	<div class="wrapper wrapper-content animated fadeInRight">
+		<div class="col-sm-12">
+			<div class="ibox">
+				<div class="ibox-body">
+					<div class="fixed-table-toolbar">
+						<div class="columns pull-left">
+							<button type="button" class="btn  btn-danger"
+								onclick="batchRemove()">
+								<i class="fa fa-trash" aria-hidden="true"></i>删除
+							</button>
+						</div>
+						<div class="columns pull-right" role="group">
+							<button class="btn btn-success" onclick="reLoad()">
+								<i class="fa fa-search" aria-hidden="true"></i>查询
+							</button>
+						</div>
+						<div class="pull-right search col-md-1">
+							<input id="searchOperation" type="text" class="form-control"
+								placeholder="操作">
+						</div>
+						<div class="pull-right search col-md-1 nopadding">
+							<input id="searchUsername" type="text" class="form-control"
+								placeholder="用户名">
+						</div>
+						<div class="pull-right search col-md-1 nopadding">
+							<input id="searchUserId" type="text" class="form-control"
+								placeholder="用户ID">
+						</div>
+					</div>
+					<table id="exampleTable" data-mobile-responsive="true">
+					</table>
+				</div>
+			</div>
+		</div>
+	</div>
+	<div th:include="include :: footer"></div>
+	<script type="text/javascript" src="/js/appjs/common/log/log.js"></script>
+</body>
 </html>

+ 5 - 3
src/main/resources/templates/demo/demoBase/demoBase.html

@@ -22,9 +22,11 @@
 						<div class="columns pull-right">
 							<button class="btn btn-success" onclick="reLoad()">查询</button>
 						</div>
-						<div class="columns pull-right col-md-2 nopadding">
-							<input id="searchName" type="text" class="form-control"
-								placeholder="">
+						<div class="columns pull-right col-md-1 nopadding">
+							<input id="content" type="text" class="form-control" placeholder="正文">
+						</div>
+						<div class="columns pull-right col-md-1 nopadding">
+							<input id="title" type="text" class="form-control" placeholder="标题">
 						</div>
 					</div>
 					<table id="exampleTable" data-mobile-responsive="true">