diff --git a/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java b/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java index c3a2451e..4222135f 100644 --- a/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java +++ b/src/main/java/com/ruoyi/common/exception/user/UserPasswordRetryLimitCountException.java @@ -9,8 +9,8 @@ public class UserPasswordRetryLimitCountException extends UserException { private static final long serialVersionUID = 1L; - public UserPasswordRetryLimitCountException(int retryLimitCount, String password) + public UserPasswordRetryLimitCountException(int retryLimitCount) { - super("user.password.retry.limit.count", new Object[] { retryLimitCount, password }); + super("user.password.retry.limit.count", new Object[] { retryLimitCount }); } } diff --git a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java b/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java index 6c4e5082..32e27c13 100644 --- a/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java +++ b/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java @@ -1,6 +1,6 @@ package com.ruoyi.common.utils.poi; -import java.io.FileNotFoundException; +import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -34,9 +34,9 @@ import org.apache.poi.ss.usermodel.WorkbookFactory; import org.apache.poi.ss.util.CellRangeAddressList; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.util.ResourceUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.framework.aspectj.lang.annotation.Excel; +import com.ruoyi.framework.config.RuoYiConfig; import com.ruoyi.framework.shiro.web.session.OnlineWebSessionManager; import com.ruoyi.framework.web.domain.AjaxResult; @@ -211,13 +211,14 @@ public class ExcelUtil /** * 对list数据源将其里面的数据导入到excel表单 * + * @param list 导出数据集合 * @param sheetName 工作表的名称 + * @return 结果 */ public AjaxResult exportExcel(List list, String sheetName) { OutputStream out = null; HSSFWorkbook workbook = null; - try { // 得到所有定义字段 @@ -370,7 +371,7 @@ public class ExcelUtil } } String filename = encodingFilename(sheetName); - out = new FileOutputStream(getfile() + filename); + out = new FileOutputStream(getAbsoluteFile(filename)); workbook.write(out); return AjaxResult.success(filename); } @@ -465,9 +466,20 @@ public class ExcelUtil return filename; } - public String getfile() throws FileNotFoundException + /** + * 获取下载路径 + * + * @param filename 文件名称 + */ + public String getAbsoluteFile(String filename) { - return ResourceUtils.getURL("classpath:").getPath() + "static/file/"; + String downloadPath = RuoYiConfig.getDownloadPath() + filename; + File desc = new File(downloadPath); + if (!desc.getParentFile().exists()) + { + desc.getParentFile().mkdirs(); + } + return downloadPath; } } \ No newline at end of file diff --git a/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java b/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java index 9ad35eb3..ecade3a3 100644 --- a/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java +++ b/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java @@ -33,7 +33,7 @@ public class ResourcesConfig implements WebMvcConfigurer public void addResourceHandlers(ResourceHandlerRegistry registry) { /** 头像上传路径 */ - registry.addResourceHandler("/profile/**").addResourceLocations("file:" + RuoYiConfig.getProfile()); + registry.addResourceHandler("/profile/**").addResourceLocations("file:" + RuoYiConfig.getProfile() + "/"); /** swagger配置 */ registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/"); diff --git a/src/main/java/com/ruoyi/framework/config/RuoYiConfig.java b/src/main/java/com/ruoyi/framework/config/RuoYiConfig.java index 8d265428..0f8ee477 100644 --- a/src/main/java/com/ruoyi/framework/config/RuoYiConfig.java +++ b/src/main/java/com/ruoyi/framework/config/RuoYiConfig.java @@ -73,4 +73,14 @@ public class RuoYiConfig RuoYiConfig.addressEnabled = addressEnabled; } + public static String getAvatarPath() + { + return profile + "/avatar/"; + } + + public static String getDownloadPath() + { + return profile + "/download/"; + } + } diff --git a/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java b/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java index 8e8bfa77..4035decc 100644 --- a/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java +++ b/src/main/java/com/ruoyi/framework/shiro/service/PasswordService.java @@ -58,7 +58,7 @@ public class PasswordService if (!matches(user, password)) { - AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.count", retryCount, password))); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(loginName, Constants.LOGIN_FAIL, MessageUtils.message("user.password.retry.limit.count", retryCount))); loginRecordCache.put(loginName, retryCount); throw new UserPasswordNotMatchException(); } diff --git a/src/main/java/com/ruoyi/project/common/CommonController.java b/src/main/java/com/ruoyi/project/common/CommonController.java index 932c27ce..1a271a69 100644 --- a/src/main/java/com/ruoyi/project/common/CommonController.java +++ b/src/main/java/com/ruoyi/project/common/CommonController.java @@ -7,9 +7,9 @@ import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; -import org.springframework.util.ResourceUtils; import org.springframework.web.bind.annotation.RequestMapping; import com.ruoyi.common.utils.file.FileUtils; +import com.ruoyi.framework.config.RuoYiConfig; /** * 通用请求处理 @@ -27,7 +27,7 @@ public class CommonController String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1); try { - String filePath = ResourceUtils.getURL("classpath:").getPath() + "static/file/" + fileName; + String filePath = RuoYiConfig.getDownloadPath() + fileName; response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); diff --git a/src/main/java/com/ruoyi/project/monitor/job/controller/JobController.java b/src/main/java/com/ruoyi/project/monitor/job/controller/JobController.java index c75e78b0..c166916b 100644 --- a/src/main/java/com/ruoyi/project/monitor/job/controller/JobController.java +++ b/src/main/java/com/ruoyi/project/monitor/job/controller/JobController.java @@ -54,18 +54,11 @@ public class JobController extends BaseController @RequiresPermissions("monitor:job:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(Job job) throws Exception + public AjaxResult export(Job job) { - try - { - List list = jobService.selectJobList(job); - ExcelUtil util = new ExcelUtil(Job.class); - return util.exportExcel(list, "job"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + List list = jobService.selectJobList(job); + ExcelUtil util = new ExcelUtil(Job.class); + return util.exportExcel(list, "job"); } @Log(title = "定时任务", businessType = BusinessType.DELETE) diff --git a/src/main/java/com/ruoyi/project/monitor/job/controller/JobLogController.java b/src/main/java/com/ruoyi/project/monitor/job/controller/JobLogController.java index 60c72462..aed1402b 100644 --- a/src/main/java/com/ruoyi/project/monitor/job/controller/JobLogController.java +++ b/src/main/java/com/ruoyi/project/monitor/job/controller/JobLogController.java @@ -52,18 +52,11 @@ public class JobLogController extends BaseController @RequiresPermissions("monitor:job:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(JobLog jobLog) throws Exception + public AjaxResult export(JobLog jobLog) { - try - { - List list = jobLogService.selectJobLogList(jobLog); - ExcelUtil util = new ExcelUtil(JobLog.class); - return util.exportExcel(list, "jobLog"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + List list = jobLogService.selectJobLogList(jobLog); + ExcelUtil util = new ExcelUtil(JobLog.class); + return util.exportExcel(list, "jobLog"); } @Log(title = "调度日志", businessType = BusinessType.DELETE) diff --git a/src/main/java/com/ruoyi/project/monitor/logininfor/controller/LogininforController.java b/src/main/java/com/ruoyi/project/monitor/logininfor/controller/LogininforController.java index d3debdc4..27a3e410 100644 --- a/src/main/java/com/ruoyi/project/monitor/logininfor/controller/LogininforController.java +++ b/src/main/java/com/ruoyi/project/monitor/logininfor/controller/LogininforController.java @@ -52,18 +52,11 @@ public class LogininforController extends BaseController @RequiresPermissions("monitor:logininfor:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(Logininfor logininfor) throws Exception + public AjaxResult export(Logininfor logininfor) { - try - { - List list = logininforService.selectLogininforList(logininfor); - ExcelUtil util = new ExcelUtil(Logininfor.class); - return util.exportExcel(list, "logininfor"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + List list = logininforService.selectLogininforList(logininfor); + ExcelUtil util = new ExcelUtil(Logininfor.class); + return util.exportExcel(list, "logininfor"); } @RequiresPermissions("monitor:logininfor:remove") diff --git a/src/main/java/com/ruoyi/project/monitor/operlog/controller/OperlogController.java b/src/main/java/com/ruoyi/project/monitor/operlog/controller/OperlogController.java index 62bc47ab..773022e0 100644 --- a/src/main/java/com/ruoyi/project/monitor/operlog/controller/OperlogController.java +++ b/src/main/java/com/ruoyi/project/monitor/operlog/controller/OperlogController.java @@ -54,18 +54,11 @@ public class OperlogController extends BaseController @RequiresPermissions("monitor:operlog:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(OperLog operLog) throws Exception + public AjaxResult export(OperLog operLog) { - try - { - List list = operLogService.selectOperLogList(operLog); - ExcelUtil util = new ExcelUtil(OperLog.class); - return util.exportExcel(list, "operLog"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + List list = operLogService.selectOperLogList(operLog); + ExcelUtil util = new ExcelUtil(OperLog.class); + return util.exportExcel(list, "operLog"); } @RequiresPermissions("monitor:operlog:remove") diff --git a/src/main/java/com/ruoyi/project/system/config/controller/ConfigController.java b/src/main/java/com/ruoyi/project/system/config/controller/ConfigController.java index da22fe26..a9846079 100644 --- a/src/main/java/com/ruoyi/project/system/config/controller/ConfigController.java +++ b/src/main/java/com/ruoyi/project/system/config/controller/ConfigController.java @@ -57,18 +57,11 @@ public class ConfigController extends BaseController @RequiresPermissions("system:config:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(Config config) throws Exception + public AjaxResult export(Config config) { - try - { - List list = configService.selectConfigList(config); - ExcelUtil util = new ExcelUtil(Config.class); - return util.exportExcel(list, "config"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + List list = configService.selectConfigList(config); + ExcelUtil util = new ExcelUtil(Config.class); + return util.exportExcel(list, "config"); } /** diff --git a/src/main/java/com/ruoyi/project/system/dict/controller/DictDataController.java b/src/main/java/com/ruoyi/project/system/dict/controller/DictDataController.java index 5d0c3747..03ba1de6 100644 --- a/src/main/java/com/ruoyi/project/system/dict/controller/DictDataController.java +++ b/src/main/java/com/ruoyi/project/system/dict/controller/DictDataController.java @@ -54,18 +54,11 @@ public class DictDataController extends BaseController @RequiresPermissions("system:dict:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(DictData dictData) throws Exception + public AjaxResult export(DictData dictData) { - try - { - List list = dictDataService.selectDictDataList(dictData); - ExcelUtil util = new ExcelUtil(DictData.class); - return util.exportExcel(list, "dictData"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + List list = dictDataService.selectDictDataList(dictData); + ExcelUtil util = new ExcelUtil(DictData.class); + return util.exportExcel(list, "dictData"); } /** diff --git a/src/main/java/com/ruoyi/project/system/dict/controller/DictTypeController.java b/src/main/java/com/ruoyi/project/system/dict/controller/DictTypeController.java index 5fd2ef57..0abceee9 100644 --- a/src/main/java/com/ruoyi/project/system/dict/controller/DictTypeController.java +++ b/src/main/java/com/ruoyi/project/system/dict/controller/DictTypeController.java @@ -54,18 +54,12 @@ public class DictTypeController extends BaseController @RequiresPermissions("system:dict:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(DictType dictType) throws Exception + public AjaxResult export(DictType dictType) { - try - { - List list = dictTypeService.selectDictTypeList(dictType); - ExcelUtil util = new ExcelUtil(DictType.class); - return util.exportExcel(list, "dictType"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + + List list = dictTypeService.selectDictTypeList(dictType); + ExcelUtil util = new ExcelUtil(DictType.class); + return util.exportExcel(list, "dictType"); } /** diff --git a/src/main/java/com/ruoyi/project/system/post/controller/PostController.java b/src/main/java/com/ruoyi/project/system/post/controller/PostController.java index bef02036..02db5e15 100644 --- a/src/main/java/com/ruoyi/project/system/post/controller/PostController.java +++ b/src/main/java/com/ruoyi/project/system/post/controller/PostController.java @@ -54,18 +54,11 @@ public class PostController extends BaseController @RequiresPermissions("system:post:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(Post post) throws Exception + public AjaxResult export(Post post) { - try - { - List list = postService.selectPostList(post); - ExcelUtil util = new ExcelUtil(Post.class); - return util.exportExcel(list, "post"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + List list = postService.selectPostList(post); + ExcelUtil util = new ExcelUtil(Post.class); + return util.exportExcel(list, "post"); } @RequiresPermissions("system:post:remove") diff --git a/src/main/java/com/ruoyi/project/system/role/controller/RoleController.java b/src/main/java/com/ruoyi/project/system/role/controller/RoleController.java index 3cdc0655..53211b81 100644 --- a/src/main/java/com/ruoyi/project/system/role/controller/RoleController.java +++ b/src/main/java/com/ruoyi/project/system/role/controller/RoleController.java @@ -56,18 +56,11 @@ public class RoleController extends BaseController @RequiresPermissions("system:role:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(Role role) throws Exception + public AjaxResult export(Role role) { - try - { - List list = roleService.selectRoleList(role); - ExcelUtil util = new ExcelUtil(Role.class); - return util.exportExcel(list, "role"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + List list = roleService.selectRoleList(role); + ExcelUtil util = new ExcelUtil(Role.class); + return util.exportExcel(list, "role"); } /** diff --git a/src/main/java/com/ruoyi/project/system/user/controller/ProfileController.java b/src/main/java/com/ruoyi/project/system/user/controller/ProfileController.java index 47746014..7a3778c3 100644 --- a/src/main/java/com/ruoyi/project/system/user/controller/ProfileController.java +++ b/src/main/java/com/ruoyi/project/system/user/controller/ProfileController.java @@ -16,6 +16,7 @@ import org.springframework.web.multipart.MultipartFile; import com.ruoyi.common.utils.file.FileUploadUtils; import com.ruoyi.framework.aspectj.lang.annotation.Log; import com.ruoyi.framework.aspectj.lang.enums.BusinessType; +import com.ruoyi.framework.config.RuoYiConfig; import com.ruoyi.framework.web.controller.BaseController; import com.ruoyi.framework.web.domain.AjaxResult; import com.ruoyi.framework.web.service.DictService; @@ -137,7 +138,7 @@ public class ProfileController extends BaseController { if (!file.isEmpty()) { - String avatar = FileUploadUtils.upload(file); + String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file); user.setAvatar(avatar); if (userService.updateUserInfo(user) > 0) { diff --git a/src/main/java/com/ruoyi/project/system/user/controller/UserController.java b/src/main/java/com/ruoyi/project/system/user/controller/UserController.java index d8363405..a5fc6ea4 100644 --- a/src/main/java/com/ruoyi/project/system/user/controller/UserController.java +++ b/src/main/java/com/ruoyi/project/system/user/controller/UserController.java @@ -64,18 +64,11 @@ public class UserController extends BaseController @RequiresPermissions("system:user:export") @PostMapping("/export") @ResponseBody - public AjaxResult export(User user) throws Exception + public AjaxResult export(User user) { - try - { - List list = userService.selectUserList(user); - ExcelUtil util = new ExcelUtil(User.class); - return util.exportExcel(list, "user"); - } - catch (Exception e) - { - return error("导出Excel失败,请联系网站管理员!"); - } + List list = userService.selectUserList(user); + ExcelUtil util = new ExcelUtil(User.class); + return util.exportExcel(list, "user"); } /** diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 1c8fa4a0..cdaf7ecc 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,18 +1,19 @@ # 项目相关配置 ruoyi: - #名称 + # 名称 name: RuoYi - #版本 + # 版本 version: 2.4.0 - #版权年份 + # 版权年份 copyrightYear: 2018 - #头像上传路径 - profile: D:/profile/ + # 文件上传路径 + profile: D:/profile # 获取ip地址开关 addressEnabled: false -#开发环境配置 + +# 开发环境配置 server: - #服务端口 + # 服务端口 port: 80 servlet: # 项目contextPath @@ -24,41 +25,48 @@ server: max-threads: 800 # Tomcat启动初始化的线程数,默认值25 min-spare-threads: 30 -#日志配置 + +# 日志配置 logging: level: com.ruoyi: debug org.springframework: WARN org.spring.springboot.dao: debug -#用户配置 + +# 用户配置 user: password: - #密码错误{maxRetryCount}次锁定10分钟 + # 密码错误{maxRetryCount}次锁定10分钟 maxRetryCount: 5 -#Spring配置 + +# Spring配置 spring: + # 模板引擎 thymeleaf: mode: HTML encoding: utf-8 # 禁用缓存 cache: false + # 资源信息 messages: - #国际化资源文件路径 + # 国际化资源文件路径 basename: i18n/messages jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss profiles: active: druid - #文件上传 + # 文件上传 servlet: multipart: max-file-size: 30MB max-request-size: 30MB + # 服务模块 devtools: restart: - #热部署开关 + # 热部署开关 enabled: true + # MyBatis mybatis: # 搜索指定包别名 @@ -67,12 +75,14 @@ mybatis: mapperLocations: classpath:mybatis/**/*Mapper.xml # 加载全局的配置文件 configLocation: classpath:mybatis/mybatis-config.xml -# PageHelper + +# PageHelper分页插件 pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql + # Shiro shiro: user: @@ -102,6 +112,7 @@ shiro: dbSyncPeriod: 1 # 相隔多久检查一次session的有效性,默认就是10分钟 validationInterval: 10 + # 防止XSS攻击 xss: # 过滤开关 @@ -110,6 +121,7 @@ xss: excludes: /system/notice/* # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* + # 代码生成 gen: # 作者 diff --git a/src/main/resources/i18n/messages.properties b/src/main/resources/i18n/messages.properties index 4f5d77f5..56a74fba 100644 --- a/src/main/resources/i18n/messages.properties +++ b/src/main/resources/i18n/messages.properties @@ -3,7 +3,7 @@ not.null=* 必须填写 user.jcaptcha.error=验证码错误 user.not.exists=用户不存在/密码错误 user.password.not.match=用户不存在/密码错误 -user.password.retry.limit.count=密码输入错误{0}次,{1} +user.password.retry.limit.count=密码输入错误{0}次 user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定10分钟 user.password.delete=对不起,您的账号已被删除 user.blocked=用户已封禁,原因:{0} diff --git a/src/main/resources/static/ruoyi/css/ry-ui.min.css b/src/main/resources/static/ruoyi/css/ry-ui.min.css deleted file mode 100644 index a31e7c0f..00000000 --- a/src/main/resources/static/ruoyi/css/ry-ui.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/** - * 通用css样式布局处理 - * Copyright (c) 2018 ruoyi - */ - .box{position:relative;border-radius:3px;background:#fff;border-top:3px solid #d2d6de;margin-bottom:20px;width:100%;box-shadow:0 1px 1px rgba(0,0,0,0.1)}.box-header:before,.box-body:before,.box-footer:before,.box-header:after,.box-body:after,.box-footer:after{content:" ";display:table}.box-header:after,.box-body:after,.box-footer:after{clear:both}.btn-box-tool{padding:5px;font-size:12px;background:transparent;color:#97a0b3}.open .btn-box-tool,.btn-box-tool:hover{color:#606c84}.box-main{margin:0;border:0;padding-top:2px;border-radius:0;box-shadow:none}.box-main>.box-header{border-bottom:1px solid #eee;padding:12px 10px 2px 15px}.box-header .box-title{display:inline-block;font-size:18px;margin:0;line-height:1}.box-main>.box-header .box-title{font-size:16px;margin-bottom:13px;float:left}.box-main>.box-header .box-title .fa{font-size:14px;padding-right:3px;margin-top:-2px}.box-main>.box-header .box-tools{position:relative;top:-5px;right:0}.box-main>.box-header .box-tools .btn{padding:3px 10px 5px 10px;font-size:14px;margin-bottom:2px}.box-main>.box-header .box-tools .btn-box-tool{padding:4px 2px}.box-main form>.box-footer,.nav-main form>.box-footer{background:#fafafa}.box-main form>.box-footer .row,.nav-main form>.box-footer .row{margin:5px 0 5px -25px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#1ab394;border-color:#1ab394;padding:1px 10px;color:#fff}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{margin-right:5px;color:rgba(255,255,255,0.7)}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#fff}.select2-container .select2-selection--single .select2-selection__rendered{padding-right:10px}label.error{position:absolute;right:18px;top:7px;color:#ef392b;font-size:12px}.Validform_error,input.error,select.error{background-color:#fbe2e2;border-color:#c66161;color:#c00}.Validform_wrong,.Validform_right,.Validform_warning{display:inline-block;height:20px;font-size:12px;vertical-align:middle;padding-left:25px}.i-checks label.error,.check-box label.error,.radio-box label.error{right:auto;width:150px;left:210px;top:1px;max-width:none}.check-box,.radio-box{display:inline-block;box-sizing:border-box;cursor:pointer;position:relative;padding-left:25px;padding-right:15px;padding-top:8px}.icheckbox,.icheckbox-blue,.iradio,.iradio-blue,.iradio-purple{position:absolute;top:8px;left:0}.icheckbox-blue,.iradio-blue{display:block;margin:0;padding:0;width:18px;height:18px;background:url(/img/blue.png) no-repeat;border:0;cursor:pointer}.icheckbox-blue,.icheckbox-blue.static:hover{background-position:0 0}.icheckbox-blue.hover,.icheckbox-blue:hover{background-position:-20px 0}.icheckbox-blue.checked{background-position:-40px 0}.icheckbox-blue.disabled{background-position:-60px 0;cursor:default}.icheckbox-blue.checked.disabled{background-position:-80px 0}.iradio-blue,.iradio-blue.static:hover{background-position:-100px 0}.iradio-blue.hover,.iradio-blue:hover{background-position:-120px 0}.iradio-blue.checked{background-position:-140px 0}.iradio-blue.disabled{background-position:-160px 0;cursor:default}.iradio-blue.checked.disabled{background-position:-180px 0}.loaderbox{display:inline-block;min-width:125px;padding:10px;margin:0 auto;color:#000!important;font-size:13px;font-weight:400;text-align:center;vertical-align:middle;border:1px solid #ddd;background-color:#eee;-webkit-border-radius:2px;-moz-border-radius:2px;-ms-border-radius:2px;-o-border-radius:2px;border-radius:2px;-webkit-box-shadow:0 1px 8px rgba(0,0,0,0.1);-moz-box-shadow:0 1px 8px rgba(0,0,0,0.1);box-shadow:0 1px 8px rgba(0,0,0,0.1)}.loaderbox .loading-activity{float:left;width:18px;height:18px;border:solid 2px transparent;border-top-color:#000;border-left-color:#000;border-radius:10px;-webkit-animation:pace-spinner 400ms linear infinite;-moz-animation:pace-spinner 400ms linear infinite;-ms-animation:pace-spinner 400ms linear infinite;-o-animation:pace-spinner 400ms linear infinite;animation:pace-spinner 400ms linear infinite}@media(max-width:767px){.loading-activity{width:18px;height:18px}}@-ms-keyframes pace-spinner{0%{-ms-transform:rotate(0deg);transform:rotate(0deg)}100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes pace-spinner{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}ul{margin:0;padding:0;-webkit-tap-highlight-color:rgba(0,0,0,0)}li{list-style:none}.time-input{display:block;width:100%;padding-left:10px}label{font-weight:normal}.container-div{padding:10px 35px;height:100%}.container-div .row{height:100%}.select-info,.select-table{width:100%;background:#fff;border-radius:6px;margin-top:10px;padding-top:5px;padding-bottom:13px;box-shadow:1px 1px 3px rgba(0,0,0,.2)}.select-info{position:relative}.select-info .col-sm-6 .control-label{color:#333}@media(max-width :768px){.select-info{display:none}}.select-list li{float:left;color:#333;margin:5px 15px 5px 0}.select-list li input{border:1px solid #ddd;border-radius:4px;background:transparent;outline:0;height:30px;width:280px;padding-left:5px}.select-list li .submit-btn{border:0;border-radius:4px;background:transparent;outline:0;width:40px;height:23px}.select-list li select{border:1px solid #ddd;border-radius:4px;background:transparent;outline:0;height:30px;width:280px}.select-list .select-time input{width:133px}.select-time label,.select-time span,.select-time input{float:left}.select-time label{margin-top:5px}.select-time span{display:block;margin:5px 5px}.search-btn{background-color:#1ab394;border-color:#1ab394;color:#FFF;margin-bottom:5px;display:inline-block;padding:6px 12px;margin-bottom:0;font-size:14px;font-weight:400;line-height:1.42857143;text-align:center;white-space:nowrap;border-radius:3px;vertical-align:middle;cursor:pointer}.table-striped{min-height:75%}.table-striped .bootstrap-table{border:0!important}.table-striped .table,.fixed-table-container,table,.table-striped .table,.table>thead>tr>th,.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>td,.table>tbody>tr>td,.table>tfoot>tr>td{border-bottom:1px solid #e7eaec!important;background-color:transparent!important;border:0}.table-striped .table>thead>tr>th,.table-striped .table>tbody>tr>th{border-bottom:1px solid #ccc!important;border-top:0!important}.table-striped .table>thead:first-child>tr:first-child>th{color:#333}.table-bordered td,.table-bordered th{border:1px solid #ddd!important} \ No newline at end of file diff --git a/src/main/resources/static/ruoyi/js/ry-ui.js b/src/main/resources/static/ruoyi/js/ry-ui.js index faa96d4f..acc08e98 100644 --- a/src/main/resources/static/ruoyi/js/ry-ui.js +++ b/src/main/resources/static/ruoyi/js/ry-ui.js @@ -398,6 +398,11 @@ post: function(url, data) { $.operate.submit(url, "post", "json", data); }, + // 详细信息 + detail: function(id) { + var url = $.common.isEmpty(id) ? $.table._option.detailUrl : $.table._option.detailUrl.replace("{id}", id); + $.modal.open($.table._option.modalName + "详细", url); + }, // 删除信息 remove: function(id) { $.modal.confirm("确定删除该条" + $.table._option.modalName + "信息吗?", function() { diff --git a/src/main/resources/static/ruoyi/js/ry-ui.min.js b/src/main/resources/static/ruoyi/js/ry-ui.min.js deleted file mode 100644 index 7dde973a..00000000 --- a/src/main/resources/static/ruoyi/js/ry-ui.min.js +++ /dev/null @@ -1,5 +0,0 @@ -/** - * 通用js方法封装处理 - * Copyright (c) 2018 ruoyi - */ -(function($){$.extend({_treeTable:{},_tree:{},table:{_option:{},_params:{},init:function(options){$.table._option=options;$.table._params=$.common.isEmpty(options.queryParams)?$.table.queryParams:options.queryParams;_sortOrder=$.common.isEmpty(options.sortOrder)?"asc":options.sortOrder;_sortName=$.common.isEmpty(options.sortName)?"":options.sortName;$("#bootstrap-table").bootstrapTable({url:options.url,contentType:"application/x-www-form-urlencoded",method:"post",cache:false,sortable:true,sortStable:true,sortName:_sortName,sortOrder:_sortOrder,pagination:$.common.visible(options.pagination),pageNumber:1,pageSize:10,pageList:[10,25,50],iconSize:"outline",toolbar:"#toolbar",sidePagination:"server",search:$.common.visible(options.search),showRefresh:$.common.visible(options.showRefresh),showColumns:$.common.visible(options.showColumns),showToggle:$.common.visible(options.showToggle),showExport:$.common.visible(options.showExport),queryParams:$.table._params,columns:options.columns,responseHandler:$.table.responseHandler})},queryParams:function(params){return{pageSize:params.limit,pageNum:params.offset/params.limit+1,searchValue:params.search,orderByColumn:params.sort,isAsc:params.order}},responseHandler:function(res){if(res.code==0){return{rows:res.rows,total:res.total}}else{$.modal.alertWarning(res.msg);return{rows:[],total:0}}},search:function(formId){var currentId=$.common.isEmpty(formId)?$("form").attr("id"):formId;var params=$("#bootstrap-table").bootstrapTable("getOptions");params.queryParams=function(params){var search={};$.each($("#"+currentId).serializeArray(),function(i,field){search[field.name]=field.value});search.pageSize=params.limit;search.pageNum=params.offset/params.limit+1;search.searchValue=params.search;search.orderByColumn=params.sort;search.isAsc=params.order;return search};$("#bootstrap-table").bootstrapTable("refresh",params)},exportExcel:function(formId){var currentId=$.common.isEmpty(formId)?$("form").attr("id"):formId;$.modal.loading("正在导出数据,请稍后...");$.post($.table._option.exportUrl,$("#"+currentId).serializeArray(),function(result){if(result.code==web_status.SUCCESS){window.location.href=ctx+"common/download?fileName="+result.msg+"&delete="+true}else{$.modal.alertError(result.msg)}$.modal.closeLoading()})},refresh:function(){$("#bootstrap-table").bootstrapTable("refresh",{url:$.table._option.url,silent:true})},selectColumns:function(column){return $.map($("#bootstrap-table").bootstrapTable("getSelections"),function(row){return row[column]})},selectFirstColumns:function(){return $.map($("#bootstrap-table").bootstrapTable("getSelections"),function(row){return row[$.table._option.columns[1].field]})},selectDictLabel:function(datas,value){var actions=[];$.each(datas,function(index,dict){if(dict.dictValue==value){actions.push(""+dict.dictLabel+"");return false}});return actions.join("")}},treeTable:{_option:{},init:function(options){$.table._option=options;var treeTable=$("#bootstrap-table").bootstrapTreeTable({code:options.id,parentCode:options.parentId,type:"get",url:options.url,ajaxParams:{},expandColumn:"0",striped:false,bordered:true,expandAll:$.common.visible(options.expandAll),columns:options.columns});$._treeTable=treeTable},search:function(formId){var currentId=$.common.isEmpty(formId)?$("form").attr("id"):formId;var params={};$.each($("#"+currentId).serializeArray(),function(i,field){params[field.name]=field.value});$._treeTable.bootstrapTreeTable("refresh",params)},refresh:function(){$._treeTable.bootstrapTreeTable("refresh")},},form:{reset:function(formId){var currentId=$.common.isEmpty(formId)?$("form").attr("id"):formId;$("#"+currentId)[0].reset()},selectCheckeds:function(name){var checkeds="";$('input:checkbox[name="'+name+'"]:checked').each(function(i){if(0==i){checkeds=$(this).val()}else{checkeds+=(","+$(this).val())}});return checkeds},selectSelects:function(name){var selects="";$("#"+name+" option:selected").each(function(i){if(0==i){selects=$(this).val()}else{selects+=(","+$(this).val())}});return selects}},modal:{icon:function(type){var icon="";if(type==modal_status.WARNING){icon=0}else{if(type==modal_status.SUCCESS){icon=1}else{if(type==modal_status.FAIL){icon=2}else{icon=3}}}return icon},msg:function(content,type){if(type!=undefined){layer.msg(content,{icon:$.modal.icon(type),time:1000,shift:5})}else{layer.msg(content)}},msgError:function(content){$.modal.msg(content,modal_status.FAIL)},msgSuccess:function(content){$.modal.msg(content,modal_status.SUCCESS)},msgWarning:function(content){$.modal.msg(content,modal_status.WARNING)},alert:function(content,type){layer.alert(content,{icon:$.modal.icon(type),title:"系统提示",btn:["确认"],btnclass:["btn btn-primary"],})},msgReload:function(msg,type){layer.msg(msg,{icon:$.modal.icon(type),time:500,shade:[0.1,"#8F8F8F"]},function(){$.modal.reload()})},alertError:function(content){$.modal.alert(content,modal_status.FAIL)},alertSuccess:function(content){$.modal.alert(content,modal_status.SUCCESS)},alertWarning:function(content){$.modal.alert(content,modal_status.WARNING)},close:function(){var index=parent.layer.getFrameIndex(window.name);parent.layer.close(index)},confirm:function(content,callBack){layer.confirm(content,{icon:3,title:"系统提示",btn:["确认","取消"],btnclass:["btn btn-primary","btn btn-danger"],},function(index){layer.close(index);callBack(true)})},open:function(title,url,width,height){if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){width="auto";height="auto"}if($.common.isEmpty(title)){title=false}if($.common.isEmpty(url)){url="/404.html"}if($.common.isEmpty(width)){width=800}if($.common.isEmpty(height)){height=($(window).height()-50)}layer.open({type:2,area:[width+"px",height+"px"],fix:false,maxmin:true,shade:0.3,title:title,content:url,shadeClose:true})},openOptions:function(options){var _url=$.common.isEmpty(options.url)?"/404.html":options.url;var _title=$.common.isEmpty(options.title)?"系统窗口":options.title;var _width=$.common.isEmpty(options.width)?"800":options.width;var _height=$.common.isEmpty(options.height)?($(window).height()-50):options.height;layer.open({type:2,maxmin:true,shade:0.3,title:_title,fix:false,area:[_width+"px",_height+"px"],content:_url,shadeClose:true,btn:[' 确认',' 关闭'],yes:function(index,layero){options.callBack(index,layero)},cancel:function(){return true}})},openFull:function(title,url,width,height){if(navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i)){width="auto";height="auto"}if($.common.isEmpty(title)){title=false}if($.common.isEmpty(url)){url="/404.html"}if($.common.isEmpty(width)){width=800}if($.common.isEmpty(height)){height=($(window).height()-50)}var index=layer.open({type:2,area:[width+"px",height+"px"],fix:false,maxmin:true,shade:0.3,title:title,content:url,shadeClose:true});layer.full(index)},loading:function(message){$.blockUI({message:'
'+message+"
"})},closeLoading:function(){setTimeout(function(){$.unblockUI()},50)},reload:function(){parent.location.reload()}},operate:{submit:function(url,type,dataType,data){$.modal.loading("正在处理中,请稍后...");var config={url:url,type:type,dataType:dataType,data:data,success:function(result){$.operate.ajaxSuccess(result)}};$.ajax(config)},post:function(url,data){$.operate.submit(url,"post","json",data)},remove:function(id){$.modal.confirm("确定删除该条"+$.table._option.modalName+"信息吗?",function(){var url=$.common.isEmpty(id)?$.table._option.removeUrl:$.table._option.removeUrl.replace("{id}",id);var data={"ids":id};$.operate.submit(url,"post","json",data)})},removeAll:function(){var rows=$.common.isEmpty($.table._option.id)?$.table.selectFirstColumns():$.table.selectColumns($.table._option.id);if(rows.length==0){$.modal.alertWarning("请至少选择一条记录");return}$.modal.confirm("确认要删除选中的"+rows.length+"条数据吗?",function(){var url=$.table._option.removeUrl;var data={"ids":rows.join()};$.operate.submit(url,"post","json",data)})},add:function(id){var url=$.common.isEmpty(id)?$.table._option.createUrl:$.table._option.createUrl.replace("{id}",id);$.modal.open("添加"+$.table._option.modalName,url)},edit:function(id){var url=$.table._option.updateUrl.replace("{id}",id);$.modal.open("修改"+$.table._option.modalName,url)},addFull:function(id){var url=$.common.isEmpty(id)?$.table._option.createUrl:$.table._option.createUrl.replace("{id}",id);$.modal.openFull("添加"+$.table._option.modalName,url)},editFull:function(id){var url=$.table._option.updateUrl.replace("{id}",id);$.modal.openFull("修改"+$.table._option.modalName,url)},save:function(url,data){$.modal.loading("正在处理中,请稍后...");var config={url:url,type:"post",dataType:"json",data:data,success:function(result){$.operate.saveSuccess(result)}};$.ajax(config)},ajaxSuccess:function(result){if(result.code==web_status.SUCCESS){$.modal.msgSuccess(result.msg);$.table.refresh()}else{$.modal.alertError(result.msg)}$.modal.closeLoading()},saveSuccess:function(result){if(result.code==web_status.SUCCESS){$.modal.msgReload("保存成功,正在刷新数据请稍后……",modal_status.SUCCESS)}else{$.modal.alertError(result.msg)}$.modal.closeLoading()}},validate:{unique:function(value){if(value=="0"){return true}return false}},tree:{_option:{},_lastValue:{},init:function(options){$.tree._option=options;var _id=$.common.isEmpty(options.id)?"tree":options.id;var _expandLevel=$.common.isEmpty(options.expandLevel)?0:options.expandLevel;var setting={check:options.check,view:{selectedMulti:false,nameIsHTML:true},data:{key:{title:"title"},simpleData:{enable:true}},callback:{onClick:options.onClick}};$.get(options.url,function(data){var treeName=$("#treeName").val();var treeId=$("#treeId").val();tree=$.fn.zTree.init($("#"+_id),setting,data);$._tree=tree;var nodes=tree.getNodesByParam("level",0);for(var i=0;i0){tree.expandNode(nodes[i],true,false,false)}$.tree.selectByIdName(treeId,treeName,nodes[i])}nodes=tree.getNodesByParam("level",1);for(var i=0;i1){tree.expandNode(nodes[i],true,false,false)}$.tree.selectByIdName(treeId,treeName,nodes[i])}nodes=tree.getNodesByParam("level",2);for(var i=0;i2){tree.expandNode(nodes[i],true,false,false)}$.tree.selectByIdName(treeId,treeName,nodes[i])}},null,null,"正在加载,请稍后...")},searchNode:function(){var value=$.common.trim($("#keyword").val());if($.tree._lastValue===value){return}$.tree._lastValue=value;var nodes=$._tree.getNodes();if(value==""){$.tree.showAllNode(nodes);return}$.tree.hideAllNode(nodes);$.tree.updateNodes($._tree.getNodesByParamFuzzy("name",value))},selectByIdName:function(treeId,treeName,node){if($.common.isNotEmpty(treeName)&&$.common.isNotEmpty(treeId)){if(treeId==node.id&&treeName==node.name){$._tree.selectNode(node,true)}}},showAllNode:function(nodes){nodes=$._tree.transformToArray(nodes);for(var i=nodes.length-1;i>=0;i--){if(nodes[i].getParentNode()!=null){$._tree.expandNode(nodes[i],true,false,false,false)}else{$._tree.expandNode(nodes[i],true,true,false,false)}$._tree.showNode(nodes[i]);$.tree.showAllNode(nodes[i].children)}},hideAllNode:function(nodes){var tree=$.fn.zTree.getZTreeObj("tree");var nodes=$._tree.transformToArray(nodes);for(var i=nodes.length-1;i>=0;i--){$._tree.hideNode(nodes[i])}},showParent:function(treeNode){var parentNode;while((parentNode=treeNode.getParentNode())!=null){$._tree.showNode(parentNode);$._tree.expandNode(parentNode,true,false,false);treeNode=parentNode}},showChildren:function(treeNode){if(treeNode.isParent){for(var idx in treeNode.children){var node=treeNode.children[idx];$._tree.showNode(node);$.tree.showChildren(node)}}},updateNodes:function(nodeList){$._tree.showNodes(nodeList);for(var i=0,l=nodeList.length;i - +
@@ -39,7 +39,7 @@ - +
diff --git a/src/main/resources/templates/index.html b/src/main/resources/templates/index.html index 86689c18..dfbb53c0 100644 --- a/src/main/resources/templates/index.html +++ b/src/main/resources/templates/index.html @@ -15,7 +15,7 @@ - + @@ -32,10 +32,10 @@