andyliu пре 2 година
родитељ
комит
22e0a23b16
100 измењених фајлова са 3353 додато и 133 уклоњено
  1. 17 1
      ruoyi-admin/pom.xml
  2. 34 2
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
  3. 11 0
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DanganController.java
  4. 9 3
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ForgetPasswordController.java
  5. 170 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java
  6. 23 1
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  7. 45 0
      ruoyi-admin/src/main/java/com/ruoyi/web/util/ImageCheck.java
  8. 3 0
      ruoyi-admin/src/main/resources/META-INF/MANIFEST.MF
  9. 20 7
      ruoyi-admin/src/main/resources/application-dev.yml
  10. 108 0
      ruoyi-admin/src/main/resources/application-test.yml
  11. 13 2
      ruoyi-admin/src/main/resources/application.yml
  12. 1 1
      ruoyi-admin/src/main/resources/logback.xml
  13. 390 0
      ruoyi-admin/src/main/resources/static/css/backgroundLayer.css
  14. 55 0
      ruoyi-admin/src/main/resources/static/css/earth.css
  15. 678 0
      ruoyi-admin/src/main/resources/static/css/iconFamily.css
  16. 120 0
      ruoyi-admin/src/main/resources/static/css/index.css
  17. 572 0
      ruoyi-admin/src/main/resources/static/css/navLinkContent.css
  18. 220 0
      ruoyi-admin/src/main/resources/static/css/weatherTime.css
  19. BIN
      ruoyi-admin/src/main/resources/static/default/favicon.ico
  20. BIN
      ruoyi-admin/src/main/resources/static/fonts/Digital-7Mono.TTF
  21. BIN
      ruoyi-admin/src/main/resources/static/fonts/PangMenZhengDao.ttf
  22. BIN
      ruoyi-admin/src/main/resources/static/fonts/YouSheBiaoTiHei-2.ttf
  23. BIN
      ruoyi-admin/src/main/resources/static/images/background.png
  24. BIN
      ruoyi-admin/src/main/resources/static/images/earth.png
  25. BIN
      ruoyi-admin/src/main/resources/static/images/earthOneCircle.png
  26. BIN
      ruoyi-admin/src/main/resources/static/images/earthTwoCircle.png
  27. BIN
      ruoyi-admin/src/main/resources/static/images/favicon.ico
  28. BIN
      ruoyi-admin/src/main/resources/static/images/icon-map.png
  29. BIN
      ruoyi-admin/src/main/resources/static/images/icon-users.png
  30. BIN
      ruoyi-admin/src/main/resources/static/images/navEight.png
  31. BIN
      ruoyi-admin/src/main/resources/static/images/navEightHover.png
  32. BIN
      ruoyi-admin/src/main/resources/static/images/navEightIcon.png
  33. BIN
      ruoyi-admin/src/main/resources/static/images/navEightIconHover.png
  34. BIN
      ruoyi-admin/src/main/resources/static/images/navFive.png
  35. BIN
      ruoyi-admin/src/main/resources/static/images/navFiveHover.png
  36. BIN
      ruoyi-admin/src/main/resources/static/images/navFiveIcon.png
  37. BIN
      ruoyi-admin/src/main/resources/static/images/navFiveIconHover.png
  38. BIN
      ruoyi-admin/src/main/resources/static/images/navFour.png
  39. BIN
      ruoyi-admin/src/main/resources/static/images/navFourHover.png
  40. BIN
      ruoyi-admin/src/main/resources/static/images/navFourIcon.png
  41. BIN
      ruoyi-admin/src/main/resources/static/images/navFourIconHover.png
  42. BIN
      ruoyi-admin/src/main/resources/static/images/navOne.png
  43. BIN
      ruoyi-admin/src/main/resources/static/images/navOneHover.png
  44. BIN
      ruoyi-admin/src/main/resources/static/images/navOneIcon.png
  45. BIN
      ruoyi-admin/src/main/resources/static/images/navOneIconHover.png
  46. BIN
      ruoyi-admin/src/main/resources/static/images/navSeven.png
  47. BIN
      ruoyi-admin/src/main/resources/static/images/navSevenHover.png
  48. BIN
      ruoyi-admin/src/main/resources/static/images/navSevenIcon.png
  49. BIN
      ruoyi-admin/src/main/resources/static/images/navSevenIconHover.png
  50. BIN
      ruoyi-admin/src/main/resources/static/images/navSix.png
  51. BIN
      ruoyi-admin/src/main/resources/static/images/navSixHover.png
  52. BIN
      ruoyi-admin/src/main/resources/static/images/navSixIcon.png
  53. BIN
      ruoyi-admin/src/main/resources/static/images/navSixIconHover.png
  54. BIN
      ruoyi-admin/src/main/resources/static/images/navThree.png
  55. BIN
      ruoyi-admin/src/main/resources/static/images/navThreeHover.png
  56. BIN
      ruoyi-admin/src/main/resources/static/images/navThreeIcon.png
  57. BIN
      ruoyi-admin/src/main/resources/static/images/navThreeIconHover.png
  58. BIN
      ruoyi-admin/src/main/resources/static/images/navTwo.png
  59. BIN
      ruoyi-admin/src/main/resources/static/images/navTwoHover.png
  60. BIN
      ruoyi-admin/src/main/resources/static/images/navTwoIcon.png
  61. BIN
      ruoyi-admin/src/main/resources/static/images/navTwoIconHover.png
  62. BIN
      ruoyi-admin/src/main/resources/static/images/topTitle.png
  63. 81 0
      ruoyi-admin/src/main/resources/static/ruoyi/index.js
  64. 42 9
      ruoyi-admin/src/main/resources/templates/index.html
  65. 17 2
      ruoyi-admin/src/main/resources/templates/login.html
  66. 40 2
      ruoyi-admin/src/main/resources/templates/main.html
  67. 76 0
      ruoyi-admin/src/main/resources/templates/mainLhk.html
  68. 3 0
      ruoyi-admin/src/main/resources/templates/system/apply/add.html
  69. 77 8
      ruoyi-admin/src/main/resources/templates/system/dangan/add.html
  70. 88 10
      ruoyi-admin/src/main/resources/templates/system/dangan/edit.html
  71. 2 2
      ruoyi-admin/src/main/resources/templates/system/dept/add.html
  72. 1 1
      ruoyi-admin/src/main/resources/templates/system/dept/dept.html
  73. 23 20
      ruoyi-admin/src/main/resources/templates/system/feedback/add.html
  74. 1 1
      ruoyi-admin/src/main/resources/templates/system/user/add.html
  75. 1 1
      ruoyi-admin/src/main/resources/templates/system/user/edit.html
  76. 218 0
      ruoyi-admin/src/main/resources/templates/view.html
  77. 3 0
      ruoyi-common/src/main/java/com/ruoyi/common/config/ServerConfig.java
  78. 4 4
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java
  79. 4 4
      ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java
  80. 2 2
      ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java
  81. 1 0
      ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java
  82. 8 3
      ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysPasswordService.java
  83. 5 5
      ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml
  84. 4 4
      ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml
  85. 4 4
      ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml
  86. 3 3
      ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml
  87. 52 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/Dangan.java
  88. 4 4
      ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java
  89. 11 0
      ruoyi-system/src/main/java/com/ruoyi/system/domain/UserRelate.java
  90. 2 1
      ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserOnlineMapper.java
  91. 27 0
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DanganServiceImpl.java
  92. 25 4
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
  93. 10 7
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
  94. 2 1
      ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java
  95. 2 2
      ruoyi-system/src/main/resources/mapper/system/ApplyChildMapper.xml
  96. 4 4
      ruoyi-system/src/main/resources/mapper/system/ApplyMapper.xml
  97. 2 2
      ruoyi-system/src/main/resources/mapper/system/DanganFileMapper.xml
  98. 13 3
      ruoyi-system/src/main/resources/mapper/system/DanganMapper.xml
  99. 2 2
      ruoyi-system/src/main/resources/mapper/system/FeedbackFileMapper.xml
  100. 0 0
      ruoyi-system/src/main/resources/mapper/system/FeedbackMapper.xml

+ 17 - 1
ruoyi-admin/pom.xml

@@ -67,6 +67,22 @@
             <artifactId>ruoyi-generator</artifactId>
         </dependency>
 
+        <!--判断文件是否为图片-->
+        <dependency>
+            <groupId>es.gob.afirma.lib</groupId>
+            <artifactId>afirma-lib-jmimemagic</artifactId>
+            <version>0.0.6</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.zaxxer</groupId>
+            <artifactId>HikariCP</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.postgresql</groupId>
+            <artifactId>postgresql</artifactId>
+            <version>42.2.18</version>
+        </dependency>
     </dependencies>
 
     <build>
@@ -94,7 +110,7 @@
                     <failOnMissingWebXml>false</failOnMissingWebXml>
                     <warName>${project.artifactId}</warName>
                 </configuration>   
-            </plugin>   
+            </plugin>
             <!-- YUI Compressor (CSS/JS压缩) 
             <plugin>
                 <groupId>net.alchim31.maven</groupId>

+ 34 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@@ -4,9 +4,12 @@ import java.util.ArrayList;
 import java.util.List;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import com.ruoyi.web.util.ImageCheck;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.MediaType;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -36,8 +39,17 @@ public class CommonController
     @Autowired
     private ServerConfig serverConfig;
 
+    @Autowired
+    private ImageCheck imageCheck;
+
     private static final String FILE_DELIMETER = ",";
 
+    @Value("${imgPath}")
+    private String imgPath;
+
+    @Value("${filePath}")
+    private String filePath;
+
     /**
      * 通用下载请求
      * 
@@ -75,19 +87,30 @@ public class CommonController
      */
     @PostMapping("/upload")
     @ResponseBody
-    public AjaxResult uploadFile(MultipartFile file) throws Exception
+    public AjaxResult uploadFile(MultipartFile file, HttpServletRequest request) throws Exception
     {
         try
         {
             // 上传文件路径
             String filePath = RuoYiConfig.getUploadPath();
+            //判断是否为图片, 根据情况处丽fileName 相对路径
+            if(imageCheck.isImage(file)){
+                filePath = filePath.replace("/upload",imgPath);
+            }else{
+                filePath = filePath.replace("/upload",this.filePath);
+            }
             // 上传并返回新文件名称
             String fileName = FileUploadUtils.upload(filePath, file);
+            if(fileName.contains("/profile")){
+                fileName = fileName.replace("/profile","");
+            }
+            log.debug("当前IP:"+request.getRequestURL());
             String url = serverConfig.getUrl() + fileName;
             AjaxResult ajax = AjaxResult.success();
             ajax.put("url", url);
             ajax.put("fileName", fileName);
-            ajax.put("newFileName", FileUtils.getName(fileName));
+            String newFileName = FileUtils.getName(fileName);
+            ajax.put("newFileName", newFileName);
             ajax.put("originalFilename", file.getOriginalFilename());
             return ajax;
         }
@@ -114,8 +137,17 @@ public class CommonController
             List<String> originalFilenames = new ArrayList<String>();
             for (MultipartFile file : files)
             {
+                //判断是否为图片, 根据情况处丽fileName 相对路径
+                if(imageCheck.isImage(file)){
+                    filePath = filePath.replace("/upload",imgPath);
+                }else{
+                    filePath = filePath.replace("/upload",this.filePath);
+                }
                 // 上传并返回新文件名称
                 String fileName = FileUploadUtils.upload(filePath, file);
+                if(fileName.contains("/profile")){
+                    fileName = fileName.replace("/profile","");
+                }
                 String url = serverConfig.getUrl() + fileName;
                 urls.add(url);
                 fileNames.add(fileName);

+ 11 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/DanganController.java

@@ -105,6 +105,17 @@ public class DanganController extends BaseController
         List<DanganFile> files = danganFileService.selectDanganFileList(danganFile);
         mmap.put("fileList", files);
 
+        //查询icon
+        for (DanganFile danganFile2:files) {
+            if(danganFile2.getFilePath().equals(dangan.getIconInfo())) {
+                mmap.put("icon", danganFile2);
+                //此时删除原fileList集合中的icon数据, 单独领出来,然后break 不会引发集合循环报错
+                files.remove(danganFile2);
+                mmap.put("fileList", files);
+                break;
+            }
+        }
+
         return prefix + "/edit";
     }
 

+ 9 - 3
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/ForgetPasswordController.java

@@ -6,12 +6,14 @@ import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.core.page.TableDataInfo;
 import com.ruoyi.common.enums.BusinessType;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.ShiroUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.shiro.service.SysPasswordService;
 import com.ruoyi.system.domain.ForgetPassword;
 import com.ruoyi.system.service.IForgetPasswordService;
 import com.ruoyi.system.service.ISysUserService;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
@@ -152,11 +154,15 @@ public class ForgetPasswordController extends BaseController
     {
        int result=forgetPasswordService.updateForgetPassword(forgetPassword);
        if(result>0){
-           //修改用户表密码
+           ForgetPassword trueFP = forgetPasswordService.selectForgetPasswordById(forgetPassword.getpId());
+           if(ObjectUtils.isEmpty(trueFP)){
+                return error("该用户忘记密码操作信息不存在,请重试");
+           }
+           //修改用户表密码,再不修改密码的前提下重新加密存入,新的md5串, 已修改bug LX 2月21
            //通过登录名获取用户
-          SysUser user = userService.selectUserByLoginName(forgetPassword.getLoginName());
+          SysUser user = userService.selectUserByLoginName(trueFP.getLoginName());
            user.setSalt(ShiroUtils.randomSalt());
-           user.setPassword(passwordService.encryptPassword(user.getLoginName(), user.getPassword(), user.getSalt()));
+           user.setPassword(passwordService.encryptPassword(user.getLoginName(), trueFP.getConfirmPassword(), user.getSalt()));
            if (userService.resetUserPwd(user) > 0)
            {
                if (ShiroUtils.getUserId().longValue() == user.getUserId().longValue())

+ 170 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java

@@ -1,19 +1,26 @@
 package com.ruoyi.web.controller.system;
 
+import java.util.Comparator;
 import java.util.Date;
 import java.util.List;
+import java.util.stream.Collectors;
 import javax.servlet.ServletRequest;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletResponse;
 
 import com.ruoyi.common.utils.*;
 import com.ruoyi.system.domain.Dangan;
+import com.ruoyi.system.domain.SysConfig;
 import com.ruoyi.system.domain.UserRelate;
+import com.ruoyi.system.mapper.SysConfigMapper;
 import com.ruoyi.system.service.IDanganService;
 import com.ruoyi.system.service.IUserRelateService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -52,6 +59,11 @@ public class SysIndexController extends BaseController
     @Autowired
     private IUserRelateService userRelateService;
 
+    @Autowired
+    private SysConfigMapper configMapper;
+
+    @Value("${ip}")
+    private String ipPort;
 
     // 系统首页
     @GetMapping("/index")
@@ -152,12 +164,169 @@ public class SysIndexController extends BaseController
 //        List<Dangan>  danganList = danganService.selectDanganList(new Dangan());
 
         mmap.put("sessionId",sessionId);
+
+        //23年2月14日新增,加入档案信息
+        if(!CollectionUtils.isEmpty(userRelates)) {
+            for (UserRelate relate : userRelates) {
+                Dangan dangan = danganService.selectDanganById(relate.getDanganId());
+                if(!ObjectUtils.isEmpty(dangan)){
+                    if(!StringUtils.isEmpty(dangan.getIconInfo())){
+                        if(dangan.getIconInfo().contains("/upload")){
+                            //期望给用户展示用的可直接访问的URL
+                            String newStr = dangan.getIconInfo();
+                            String[] ipPorts = ipPort.split(",");
+                            //分ip+端口号 和 域名情况
+                            if(ipPorts.length>=2){
+                                //说明是由ip,端口组成的参数
+                                newStr = "http://"+ipPorts[0]+":"+ipPorts[1]+"/iconShow"+newStr;
+                            }else if(ipPorts.length==1){
+                                //说明ip配置的是域名
+                                newStr = "http://"+ipPorts[0]+"/iconShow"+newStr;
+                            }
+                            dangan.setIconInfo(newStr);
+                        }
+                    }else{
+                        //说明档案图标未上传,那么使用默认图标
+                        SysConfig configQuery = new SysConfig();
+                        configQuery.setConfigKey("sys.main.defaultIcon");
+                        SysConfig configEntity = configMapper.selectConfig(configQuery);
+                        if(!ObjectUtils.isEmpty(configEntity)) {
+                            String config = configEntity.getConfigValue();
+                            if (!StringUtils.isEmpty(config)) {
+                                //说明全局config表中已配置
+                                //期望给用户展示用的可直接访问的URL
+                                String newStr = config;
+//                                String[] ipPorts = ipPort.split(",");
+//                                //分ip+端口号 和 域名情况
+//                                if (ipPorts.length >= 2) {
+//                                    //说明是由ip,端口组成的参数
+//                                    newStr = "http://" + ipPorts[0] + ":" + ipPorts[1] + "/iconShow" + newStr;
+//                                } else if (ipPorts.length == 1) {
+//                                    //说明ip配置的是域名
+//                                    newStr = "http://" + ipPorts[0] + "/iconShow" + newStr;
+//                                }
+                                dangan.setIconInfo(newStr);
+                            }
+                        }
+                    }
+                    relate.setDangan(dangan);
+                }
+            }
+        }
         mmap.put("danganList",userRelates);
+        return "mainLhk";
+    }
 
+    @GetMapping("/system/view")
+    public String view(ModelMap mmap){
+        String sessionId = ShiroUtils.getSessionId();
+        mmap.put("sessionId",sessionId);
 
+        UserRelate userRelate = new UserRelate();
+        userRelate.setUserId(getUserId());
+        List<UserRelate> userRelates = userRelateService.selectUserRelateList(userRelate);
+        //获取档案列表
+//        List<Dangan>  danganList = danganService.selectDanganList(new Dangan());
 
+        //23年2月14日新增,加入档案信息
+        if(!CollectionUtils.isEmpty(userRelates)) {
+            int index = 0;
+            for (UserRelate relate : userRelates) {
+                Dangan dangan = danganService.selectDanganById(relate.getDanganId());
+                if(!ObjectUtils.isEmpty(dangan)){
+                    if(!StringUtils.isEmpty(dangan.getIconInfo())){
+                        if(dangan.getIconInfo().contains("/upload")){
+                            //期望给用户展示用的可直接访问的URL
+                            String newStr = dangan.getIconInfo();
+                            String[] ipPorts = ipPort.split(",");
+                            //分ip+端口号 和 域名情况
+                            if(ipPorts.length>=2){
+                                //说明是由ip,端口组成的参数
+                                newStr = "http://"+ipPorts[0]+":"+ipPorts[1]+"/iconShow"+newStr;
+                            }else if(ipPorts.length==1){
+                                //说明ip配置的是域名
+                                newStr = "http://"+ipPorts[0]+"/iconShow"+newStr;
+                            }
+                            dangan.setIconInfo(newStr);
+                        }
+                    }else{
+                        //说明档案图标未上传,那么使用默认图标
+                        SysConfig configQuery = new SysConfig();
+                        configQuery.setConfigKey("sys.main.defaultIcon");
+                        SysConfig configEntity = configMapper.selectConfig(configQuery);
+                        if(!ObjectUtils.isEmpty(configEntity)) {
+                            String config = configEntity.getConfigValue();
+                            if (!StringUtils.isEmpty(config)) {
+                                //说明全局config表中已配置
+                                //期望给用户展示用的可直接访问的URL
+                                String newStr = config;
+//                                String[] ipPorts = ipPort.split(",");
+//                                //分ip+端口号 和 域名情况
+//                                if (ipPorts.length >= 2) {
+//                                    //说明是由ip,端口组成的参数
+//                                    newStr = "http://" + ipPorts[0] + ":" + ipPorts[1] + "/iconShow" + newStr;
+//                                } else if (ipPorts.length == 1) {
+//                                    //说明ip配置的是域名
+//                                    newStr = "http://" + ipPorts[0] + "/iconShow" + newStr;
+//                                }
+                                dangan.setIconInfo(newStr);
+                            }
+                        }
+                    }
+                    relate.setDangan(dangan);
+                    //假如className,为配合前端渲染使用,暂时定死只有八个后期在改
+                    String className = "";
+                    if(index<8){
+                        int newIndex = index+1;
+                        className =  className(newIndex);
+                    }
+                    relate.setClassName(className);
+                }
+                index++;
+            }
+        }
+        //TODO 补齐虚拟数据,进行界面渲染
+        if(userRelates!=null&&userRelates.size()<8){
+            int size = userRelates.size();//另记录查询出来的长度
+            for (int i = 1; i <= (8-size); i++) {
+                UserRelate entity = new UserRelate();
+                entity.setClassName(className(i+size));
+                userRelates.add(entity);
+            }
+        }
+        mmap.put("danganList",userRelates);
+        return "view";
+    }
 
-        return "main";
+    private String className(int newIndex){
+        String className = "";
+        switch (newIndex){
+            case 1:
+                className = "nav-one-wrap";
+                break;
+            case 2:
+                className = "nav-two-wrap";
+                break;
+            case 3:
+                className = "nav-three-wrap";
+                break;
+            case 4:
+                className = "nav-four-wrap";
+                break;
+            case 5:
+                className = "nav-five-wrap";
+                break;
+            case 6:
+                className = "nav-six-wrap";
+                break;
+            case 7:
+                className = "nav-seven-wrap";
+                break;
+            case 8:
+                className = "nav-eight-wrap";
+                break;
+        }
+        return className;
     }
 
     // content-main class

+ 23 - 1
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@@ -3,10 +3,12 @@ package com.ruoyi.web.controller.system;
 import java.util.List;
 import java.util.stream.Collectors;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PathVariable;
@@ -334,11 +336,31 @@ public class SysUserController extends BaseController
      * 
      * @param deptId 部门ID
      */
+
+    /**
+     * @Author Lx
+     * @Description //TODO 选择部门树 (已修改部分逻辑)
+     * @Date 17:54 2023/2/20
+     * @Param
+     * @return
+     **/
     @RequiresPermissions("system:user:list")
     @GetMapping("/selectDeptTree/{deptId}")
     public String selectDeptTree(@PathVariable("deptId") Long deptId, ModelMap mmap)
     {
-        mmap.put("dept", deptService.selectDeptById(deptId));
+        SysDept deptParent = deptService.selectDeptById(deptId);//节点信息
+        //如果节点信息不存在, 那么就默认查parentid=0的唯一根节点, 避免报错
+        if(ObjectUtils.isEmpty(deptParent)){
+            //此查询条件查询出来的数据只会有一条
+            SysDept deptQuery = new SysDept();
+            deptQuery.setParentId(0L);
+            deptQuery.setDelFlag("0");
+            List<SysDept> depts = deptService.selectDeptList(deptQuery);
+            if(!CollectionUtils.isEmpty(depts)){
+                deptParent = depts.get(0);
+            }
+        }
+        mmap.put("dept", deptParent);
         return prefix + "/deptTree";
     }
 

+ 45 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/util/ImageCheck.java

@@ -0,0 +1,45 @@
+package com.ruoyi.web.util;
+
+import net.sf.jmimemagic.Magic;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.activation.MimetypesFileTypeMap;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @ClassName ImageCheck
+ * @Description: TODO
+ * @Author LX
+ * @Date 2023/2/16
+ * @Version V1.0
+ **/
+@Component
+public class ImageCheck {
+    private MimetypesFileTypeMap mtftp;
+
+    public ImageCheck(){
+        mtftp = new MimetypesFileTypeMap();
+        /* 不添加下面的类型会造成误判 详见:http://stackoverflow.com/questions/4855627/java-mimetypesfiletypemap-always-returning-application-octet-stream-on-android-e*/
+        mtftp.addMimeTypes("image png tif jpg jpeg bmp");
+    }
+    public  boolean isImage(File file){
+        String mimetype= mtftp.getContentType(file);
+        String type = mimetype.split("/")[0];
+        return type.equals("image");
+    }
+
+    public boolean isImage(MultipartFile mf) {
+            try {
+                String mimeType = Magic.getMagicMatch(mf.getBytes(), false).getMimeType();
+                if (mimeType.startsWith("image/")) {
+                    return true;
+                } else {
+                    return false;
+                }
+            } catch(Exception e) {
+                throw new RuntimeException("图片处理异常");
+            }
+    }
+}

+ 3 - 0
ruoyi-admin/src/main/resources/META-INF/MANIFEST.MF

@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Main-Class: com.ruoyi.RuoYiApplication
+

+ 20 - 7
ruoyi-admin/src/main/resources/application-dev.yml

@@ -10,7 +10,9 @@ ruoyi:
     demoEnabled: false
     # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
 #    profile: D:/ruoyi/uploadPath
-    profile: D:/工作文档/武汉三环科普睿科/Project/JavaProject\RuoYi
+#    profile: /home/ruoyi/uploadPath
+#    profile: D:/工作文档/武汉三环科普睿科/Project/JavaProject\RuoYi
+    profile: ./
 
 
     # 获取ip地址开关
@@ -19,7 +21,8 @@ ruoyi:
 # 开发环境配置
 server:
     # 服务器的HTTP端口,默认为80
-    port: 8082
+#    port: 8082
+    port: 8301
 
     servlet:
         # 应用的访问路径
@@ -36,6 +39,12 @@ server:
             min-spare: 100
 # 数据源配置
 spring:
+    # 模板引擎
+    thymeleaf:
+        mode: HTML
+        encoding: utf-8
+        # 禁用缓存
+        cache: false
     datasource:
         type: com.alibaba.druid.pool.DruidDataSource
         driverClassName: com.mysql.cj.jdbc.Driver
@@ -52,9 +61,9 @@ spring:
             slave:
                 # 从数据源开关/默认关闭
                 enabled: false
-                url: 
-                username: 
-                password: 
+                url:
+                username:
+                password:
             # 初始连接数
             initialSize: 5
             # 最小连接池数量
@@ -74,7 +83,7 @@ spring:
             testWhileIdle: true
             testOnBorrow: false
             testOnReturn: false
-            webStatFilter: 
+            webStatFilter:
                 enabled: true
             statViewServlet:
                 enabled: true
@@ -93,4 +102,8 @@ spring:
                     merge-sql: true
                 wall:
                     config:
-                        multi-statement-allow: true
+                        multi-statement-allow: true
+    devtools:
+        restart:
+          # 热部署开关
+          enabled: true

+ 108 - 0
ruoyi-admin/src/main/resources/application-test.yml

@@ -0,0 +1,108 @@
+# 项目相关配置
+ruoyi:
+    # 名称
+    name: 统一认证平台
+    # 版本
+    version: 4.7.5
+    # 版权年份
+    copyrightYear: 2022
+    # 实例演示开关
+    demoEnabled: false
+    # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
+#    profile: D:/ruoyi/uploadPath
+#    profile: /home/ruoyi/uploadPath
+#    profile: D:/工作文档/武汉三环科普睿科/Project/JavaProject\RuoYi
+    profile: ./
+
+
+    # 获取ip地址开关
+    addressEnabled: false
+
+# 开发环境配置
+server:
+    # 服务器的HTTP端口,默认为80
+#    port: 8082
+    port: 8301
+
+    servlet:
+        # 应用的访问路径
+        context-path: /
+    tomcat:
+        # tomcat的URI编码
+        uri-encoding: UTF-8
+        # 连接数满后的排队数,默认为100
+        accept-count: 1000
+        threads:
+            # tomcat最大线程数,默认为200
+            max: 800
+            # Tomcat启动初始化的线程数,默认值10
+            min-spare: 100
+# 数据源配置
+spring:
+    # 模板引擎
+    thymeleaf:
+        mode: HTML
+        encoding: utf-8
+        # 禁用缓存
+        cache: false
+    #数据库配置
+    datasource:
+            type: com.zaxxer.hikari.HikariDataSource
+            driverClassName: org.postgresql.Driver
+            druid:
+                # 主库数据源 stringtype=unspecified 如果stringtype设置为 unspecified,参数将作为非类型值发送到服务器,并且服务器将尝试推断适当的类型。
+                master:
+#                     url: jdbc:postgresql://119.96.165.176:5432/test_lixing?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
+                     url: jdbc:postgresql://119.96.165.176:5432/lhk_union_mgr_new?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&characterSetResults=utf8&useSSL=false&allowMultiQueries=true&zeroDateTimeBehavior=convertToNull
+                     username: postgres
+                     password: kpr.23417.postgres
+                # 从库数据源
+                slave:
+                    # 从数据源开关/默认关闭
+                    enabled: false
+                    url:
+                    username:
+                    password:
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 20
+                # 配置获取连接等待超时的时间
+                maxWait: 60000
+                # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+                timeBetweenEvictionRunsMillis: 60000
+                # 配置一个连接在池中最小生存的时间,单位是毫秒
+                minEvictableIdleTimeMillis: 300000
+                # 配置一个连接在池中最大生存的时间,单位是毫秒
+                maxEvictableIdleTimeMillis: 900000
+                # 配置检测连接是否有效
+                validationQuery: SELECT 1
+                testWhileIdle: true
+                testOnBorrow: false
+                testOnReturn: false
+                webStatFilter:
+                    enabled: true
+                statViewServlet:
+                    enabled: true
+                    # 设置白名单,不填则允许所有访问
+                    allow:
+                    url-pattern: /druid/*
+                    # 控制台管理用户名和密码
+                    login-username: ruoyi
+                    login-password: 123456
+                filter:
+                    stat:
+                        enabled: true
+                        # 慢SQL记录
+                        log-slow-sql: true
+                        slow-sql-millis: 1000
+                        merge-sql: true
+                    wall:
+                        config:
+                            multi-statement-allow: true
+    devtools:
+        restart:
+          # 热部署开关
+          enabled: true

+ 13 - 2
ruoyi-admin/src/main/resources/application.yml

@@ -28,8 +28,9 @@ spring:
     time-zone: GMT+8
     date-format: yyyy-MM-dd HH:mm:ss
   profiles: 
-    active: druid
+#    active: druid
 #    active: dev
+    active: test
 
   # 文件上传
   servlet:
@@ -52,10 +53,13 @@ mybatis:
     mapperLocations: classpath*:mapper/**/*Mapper.xml
     # 加载全局的配置文件
     configLocation: classpath:mybatis/mybatis-config.xml
+    #下划线转驼峰
+    map-underscore-to-camel-case: true
 
 # PageHelper分页插件
 pagehelper: 
-  helperDialect: mysql
+#  helperDialect: mysql
+  helperDialect: postgresql
   supportMethodsArguments: true
   params: count=countSql 
 
@@ -111,3 +115,10 @@ xss:
 swagger:
   # 是否开启swagger
   enabled: true
+# 测试服务器IP地址端口 或 域名
+ip: 119.96.165.176,8300
+# 图片上传保存路径
+imgPath: /upload/images
+filePath: /upload/words
+
+

+ 1 - 1
ruoyi-admin/src/main/resources/logback.xml

@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
     <!-- 日志存放路径 -->
-	<property name="log.path" value="/home/ruoyi/logs" />
+	<property name="log.path" value="./logs" />
     <!-- 日志输出格式 -->
 	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
 

+ 390 - 0
ruoyi-admin/src/main/resources/static/css/backgroundLayer.css

@@ -0,0 +1,390 @@
+.assembly-html-body {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    overflow: auto
+}
+
+.assembly-html-body {
+    display: block;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    width: 100%;
+    height: 100%
+}
+
+.center-assembly {
+    overflow: hidden;
+    display: flex;
+    align-items: center;
+}
+
+.assembly-page {
+    display: block;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    overflow: hidden;
+    position: relative;
+    background-repeat: no-repeat;
+    height: 1080px;
+    width: 1920px;
+}
+
+.assembly-page>.assembly-page-background,
+.assembly-page>.assembly-page-backweb {
+    position: absolute;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    top: 0;
+    left: 0;
+    bottom: 0;
+    right: 0
+}
+
+.assembly-page-background {
+    background: url("../images/background.png");
+}
+
+.assembly-page>.assembly-page-backweb {
+    width: 100%;
+    height: 100%;
+    z-index: 1
+}
+
+.assembly-page>.assembly-grid-item {
+    top: 0px;
+    left: 0px;
+    width: 1920px;
+    height: 1080px;
+    position: absolute;
+    z-index: 10;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    overflow: visible;
+    background-repeat: no-repeat
+}
+
+.assembly-page>.assembly-grid-item>.assembly-grid-item-border {
+    z-index: 1999;
+    width: 100%;
+    height: 100%;
+    top: 0;
+    left: 0
+}
+
+.assembly-page>.assembly-grid-item>.assembly-grid-item-angle,
+.assembly-page>.assembly-grid-item>.assembly-grid-item-border {
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    pointer-events: none;
+    position: absolute;
+    border: 0 solid transparent;
+    display: block
+}
+
+.assembly-page>.assembly-grid-item>.assembly-grid-item-angle {
+    z-index: 2000;
+    width: 0;
+    height: 0
+}
+
+.assembly-page>.assembly-grid-item .assembly-grid-item-title {
+    position: absolute;
+    padding-left: 0;
+    display: inline-block;
+    height: 0;
+    line-height: 0;
+    overflow: hidden;
+    white-space: nowrap;
+    width: 100%;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box
+}
+
+.assembly-page>.assembly-grid-item .assembly-grid-item-content {
+    border-top: 0 solid transparent;
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: relative;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    overflow: visible;
+    padding: 0px;
+}
+
+.assembly-page .assembly-wrap {
+    display: block;
+    position: relative;
+    width: 0;
+    height: 0;
+    overflow: hidden;
+    background-size: contain;
+    background-repeat: no-repeat
+}
+
+.assembly-page .assembly-wrap,
+.component-element {
+    border: 0;
+    padding: 0;
+    margin: 0;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box
+}
+
+.assembly-page .assembly-wrap.top-wrap {
+    padding: 0px;
+    width: 1920px;
+    height: 133px;
+    overflow: hidden;
+    position: absolute;
+    top: -58px;
+    background-repeat: no-repeat;
+    background-size: cover;
+}
+
+.assembly-page .assembly-wrap.top-background {
+    background-image: url(../images/topTitle.png);
+    padding: 0px;
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    position: absolute;
+}
+
+.assembly-page .assembly-wrap.time-wrap {
+    padding: 0px;
+    width: 25%;
+    height: 40px;
+    overflow: hidden;
+    position: absolute;
+    left: 37px;
+    top: 8px;
+    font-weight: 600;
+    display: flex;
+    flex-flow: row;
+    align-items: center;
+}
+
+.assembly-page .assembly-wrap.right-wrap {
+    padding: 0px;
+    width: 25%;
+    height: 40px;
+    overflow: hidden;
+    position: absolute;
+    right: -300px;
+    top: 8px;
+    font-weight: 600;
+    display: flex;
+    flex-flow: row;
+    align-items: center;
+    font-size: 20px;
+    color: #FFFFFF!important;
+}
+
+.assembly-page .assembly-wrap.weather-wrap {
+    padding: 0px;
+
+    height: 40px;
+    overflow: hidden;
+    position: absolute;
+    top: 8px;
+
+    /* width: 23%;
+    right: 10px; */
+
+    width: auto;
+    right: -30px;
+}
+
+.assembly-page .assembly-wrap.earth-wrap {
+    padding: 55px;
+    width: 838px;
+    height: 838px;
+    overflow: hidden;
+    position: absolute;
+    left: 552px;
+    top: 166px;
+}
+
+.assembly-page .assembly-wrap.earth-text-wrap {
+    padding: 0px;
+    height: 140px;
+    overflow: hidden;
+    position: absolute;
+    top: 498px;
+    font-family: youshe-font;
+
+    /* left: 744px;
+    width: 432px; */
+
+    width: 100%;
+    text-align: center;
+}
+
+.assembly-page .assembly-wrap.top-title-wrap {
+    padding: 0px;
+    height: 4%;
+    overflow: hidden;
+    position: absolute;
+    top: 6px;
+    font-family: youshe-font;
+
+    /* width: 25%;
+    left: 748px; */
+
+    width: 100%;
+    left: 8px;
+    text-align: center;
+}
+
+.assembly-page .assembly-wrap.nav-one-wrap {
+    padding: 0px;
+    width: 780px;
+    height: 185px;
+    overflow: hidden;
+    position: absolute;
+    left: 64px;
+    top: 205px;
+    z-index: 3;
+    cursor: pointer;
+}
+
+.assembly-page .assembly-wrap.nav-two-wrap {
+    padding: 0px;
+    width: 780px;
+    height: 185px;
+    overflow: hidden;
+    position: absolute;
+    left: 62px;
+    top: 390px;
+}
+
+.assembly-page .assembly-wrap.nav-three-wrap {
+    padding: 0px;
+    width: 780px;
+    height: 185px;
+    overflow: hidden;
+    position: absolute;
+    bottom: 321px;
+    left: 62px;
+}
+
+.assembly-page .assembly-wrap.nav-four-wrap {
+    padding: 0px;
+    width: 780px;
+    height: 185px;
+    overflow: hidden;
+    position: absolute;
+    bottom: 136px;
+    left: 62px;
+}
+
+.assembly-page .assembly-wrap.nav-five-wrap {
+    padding: 0px;
+    width: 780px;
+    height: 185px;
+    overflow: hidden;
+    position: absolute;
+    right: 58px;
+    top: 206px;
+}
+
+.assembly-page .assembly-wrap.nav-six-wrap {
+    padding: 0px;
+    width: 780px;
+    height: 185px;
+    overflow: hidden;
+    position: absolute;
+    right: 58px;
+    top: 390px;
+}
+
+.assembly-page .assembly-wrap.nav-seven-wrap {
+    padding: 0px;
+    width: 780px;
+    height: 185px;
+    overflow: hidden;
+    position: absolute;
+    bottom: 319px;
+    right: 59px;
+}
+
+.assembly-page .assembly-wrap.nav-eight-wrap {
+    padding: 0px;
+    width: 780px;
+    height: 185px;
+    overflow: hidden;
+    position: absolute;
+    bottom: 135px;
+    right: 58px;
+}
+
+.component-element {
+    height: 100%;
+    width: 100%
+}
+
+.component-element>.scale-box {
+    width: 100%;
+    height: 100%;
+    float: left;
+    -webkit-transform-origin: 0 0;
+    transform-origin: 0 0;
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-box-align: start;
+    -ms-flex-align: start;
+    align-items: flex-start
+}
+
+.component-element>.scale-box .search-btn {
+    margin-left: 10px
+}
+
+.component-element>.scale-box .label {
+    line-height: 28px;
+    padding-right: 10px;
+    text-align: right;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    -ms-flex-negative: 0;
+    flex-shrink: 0
+}
+
+.component-element.data-view-echarts {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -ms-flex-direction: row;
+    flex-direction: row;
+    -ms-flex-wrap: wrap;
+    flex-wrap: wrap;
+    -webkit-box-pack: center;
+    -ms-flex-pack: center;
+    justify-content: center;
+    -webkit-box-align: center;
+    -ms-flex-align: center;
+    align-items: center
+}
+
+.component-element.data-view-echarts>.hd-chart-box {
+    width: 100%;
+    height: 100%
+}
+
+.component-element.data-view-echarts>.hd-chart-box>div.hd-chart {
+    background: transparent
+}
+
+.earth-text-basic {
+    text-align: center;
+}
+
+.earth-text-style {
+    font-size: 48px;
+    color: #ffffff;
+}

+ 55 - 0
ruoyi-admin/src/main/resources/static/css/earth.css

@@ -0,0 +1,55 @@
+/* 中心的地球和旁边的线圈 */
+.MydhDivOutbox {
+    position: relative;
+}
+
+.MydhDivOutbox #images {
+    -webkit-animation: spin 15s linear infinite;
+    animation: spin 15s linear infinite;
+    position: absolute;
+}
+
+@keyframes spin {
+    from {
+        transform: rotate(0deg);
+    }
+
+    to {
+        transform: rotate(360deg);
+        transition: all 5s;
+    }
+}
+
+.MydhDivOutbox #images2 {
+    -webkit-animation: spin2 10s linear infinite;
+    animation: spin2 10s linear infinite;
+    position: absolute;
+}
+
+@keyframes spin2 {
+    from {
+        transform: rotate(0deg);
+    }
+
+    to {
+        transform: rotate(-360deg);
+        transition: all 3s;
+    }
+}
+
+.MydhDivOutbox #images3 {
+    -webkit-animation: spin3 10s linear infinite;
+    animation: spin3 10s linear infinite;
+    position: absolute;
+}
+
+@keyframes spin3 {
+    from {
+        transform: rotate(0deg);
+    }
+
+    to {
+        transform: rotate(360deg);
+        transition: all 3s;
+    }
+}

Разлика између датотеке није приказан због своје велике величине
+ 678 - 0
ruoyi-admin/src/main/resources/static/css/iconFamily.css


+ 120 - 0
ruoyi-admin/src/main/resources/static/css/index.css

@@ -0,0 +1,120 @@
+::-webkit-scrollbar {
+    width: 8px;
+    height: 8px;
+    background-color: #f5f7fa;
+}
+
+::-webkit-scrollbar-corner {
+    background-color: #f5f7fa;
+}
+
+::-webkit-scrollbar-thumb {
+    border-radius: 10px;
+    background-color: #cfcfcf;
+}
+
+::-webkit-scrollbar-track {
+    -webkit-box-shadow: inset 0 0 3px rgba(0, 0, 0, .2);
+    background-color: #f5f7fa;
+}
+
+html,
+body,
+#app {
+    height: 100%;
+    width: 100%;
+}
+
+html {
+    overflow: hidden;
+}
+
+body {
+    margin: 0;
+    font: 12px/1.5 Microsoft YaHei, Arial, Hiragino Sans GB, PingFang SC, Helvetica, Verdana, "\5FAE\8F6F\96C5\9ED1", sans-serif
+}
+
+#app {
+    background: transparent;
+}
+
+a,
+blockquote,
+body,
+button,
+dd,
+dl,
+dt,
+fieldset,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+hr,
+input,
+lengend,
+li,
+ol,
+p,
+pre,
+table,
+td,
+textarea,
+th,
+tr,
+ul {
+    margin: 0;
+    padding: 0;
+    border: 0;
+    outline: 0;
+    outline: none
+}
+
+a {
+    text-decoration: none
+}
+
+a:hover {
+    text-decoration: none
+}
+
+h1 {
+    font-size: 18px
+}
+
+h2 {
+    font-size: 16px
+}
+
+h3 {
+    font-size: 14px
+}
+
+h4,
+h5,
+h6 {
+    font-size: 100%
+}
+
+li,
+ol,
+ul {
+    list-style: none
+}
+
+img {
+    border: none
+}
+
+button,
+input,
+select,
+textarea {
+    font-size: 100%
+}
+
+:focus {
+    outline: none
+}

+ 572 - 0
ruoyi-admin/src/main/resources/static/css/navLinkContent.css

@@ -0,0 +1,572 @@
+:root {
+    --one-icon-image: url("../images/navTwoIcon.png");
+    --one-hover-icon-image: url("../images/navTwoIconHover.png");
+
+    --two-icon-image: url("../images/navSevenIcon.png");
+    --two-hover-icon-image: url("../images/navSevenIconHover.png");
+
+    --three-icon-image: url("../images/navSevenIcon.png");
+    --three-hover-icon-image: url("../images/navSevenIconHover.png");
+
+    --four-icon-image: url("../images/navThreeIcon.png");
+    --four-hover-icon-image: url("../images/navThreeIconHover.png");
+
+    --five-icon-image: url("../images/navOneIcon.png");
+    --five-hover-icon-image: url("../images/navOneIconHover.png");
+
+    --six-icon-image: url("../images/navFourIcon.png");
+    --six-hover-icon-image: url("../images/navFourIconHover.png");
+
+    --seven-icon-image: url("../images/navSixIcon.png");
+    --seven-hover-icon-image: url("../images/navSixIconHover.png");
+
+    --eight-icon-image: url("../images/navFiveIcon.png");
+    --eight-hover-icon-image: url("../images/navFiveIconHover.png");
+}
+
+
+
+/* 左边第一个 */
+.NavLinkContent1 {
+    width: 780px;
+    height: 185px;
+    background-image: url("../images/navOne.png");
+    background-repeat: no-repeat;
+    background-size: contain;
+    cursor: pointer;
+    position: relative;
+}
+
+.NavLinkContent1:hover {
+    background-image: url("../images/navOneHover.png");
+}
+
+.NavLinkContent1:hover .ShowContent .LeftPart {
+    background-image: var(--one-hover-icon-image);
+}
+
+.NavLinkContent1:hover .ShowContent .RightPart .RightPart_TopPart {
+    color: #ffa622;
+}
+
+.NavLinkContent1 .ShowContent {
+    display: flex;
+    flex-flow: row nowrap;
+    align-items: center;
+    height: 185px;
+    position: absolute;
+    left: 250px;
+}
+
+/* .NavLinkContent1 .ShowContent.custom-content {
+    left: 180px;
+} */
+
+.NavLinkContent1 .ShowContent .LeftPart {
+    width: 88px;
+    height: 88px;
+    background-image: var(--one-icon-image);
+    background-repeat: no-repeat;
+    background-size: contain;
+    margin-right: 28px;
+}
+
+.NavLinkContent1 .ShowContent .LeftPart.custom-img {
+    /* width: 100px;
+    height: 100px; */
+    /* margin-bottom: 6px; */
+}
+
+.NavLinkContent1 .ShowContent .RightPart .RightPart_TopPart {
+    width: 230px;
+    height: 36px;
+    font-size: 36px;
+    /* font-family: PangMenZhengDao-3, PangMenZhengDao;
+    font-weight: normal; */
+    color: #ffffff;
+    line-height: 41px;
+    margin-bottom: 16px;
+    text-align: start;
+}
+
+.NavLinkContent1 .ShowContent .RightPart .RightPart_BottomPart {
+    width: 214px;
+    height: 34px;
+    font-size: 12px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #ff9c27;
+    line-height: 17px;
+    text-align: start;
+}
+
+
+/* 左边第二个 */
+.NavLinkContent2 {
+    width: 780px;
+    height: 185px;
+    background-image: url("../images/navTwo.png");
+    background-repeat: no-repeat;
+    background-size: contain;
+    cursor: pointer;
+    position: relative;
+}
+
+.NavLinkContent2:hover {
+    background-image: url("../images/navTwoHover.png");
+}
+
+.NavLinkContent2:hover .ShowContent .LeftPart {
+    background-image: var(--two-hover-icon-image);
+}
+
+.NavLinkContent2:hover .ShowContent .RightPart .RightPart_TopPart {
+    color: #ffa622;
+}
+
+.NavLinkContent2 .ShowContent {
+    display: flex;
+    flex-flow: row nowrap;
+    align-items: center;
+    height: 185px;
+    position: absolute;
+    left: 166px;
+}
+
+.NavLinkContent2 .ShowContent .LeftPart {
+    width: 88px;
+    height: 88px;
+    background-image: var(--two-icon-image);
+    background-repeat: no-repeat;
+    background-size: contain;
+    margin-right: 28px;
+}
+
+.NavLinkContent2 .ShowContent .RightPart .RightPart_TopPart {
+    width: 230px;
+    height: 36px;
+    font-size: 36px;
+    /* font-family: PangMenZhengDao-3, PangMenZhengDao;
+    font-weight: normal; */
+    color: #ffffff;
+    line-height: 41px;
+    margin-bottom: 16px;
+    text-align: start;
+}
+
+.NavLinkContent2 .ShowContent .RightPart .RightPart_BottomPart {
+    width: 214px;
+    height: 34px;
+    font-size: 12px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #ff9c27;
+    line-height: 17px;
+    text-align: start;
+}
+
+/* 左边第三个 */
+.NavLinkContent3 {
+    width: 780px;
+    height: 185px;
+    background-image: url("../images/navThree.png");
+    background-repeat: no-repeat;
+    background-size: contain;
+    cursor: pointer;
+    position: relative;
+}
+
+.NavLinkContent3:hover {
+    background-image: url("../images/navThreeHover.png");
+}
+
+.NavLinkContent3:hover .ShowContent .LeftPart {
+    background-image: var(--three-hover-icon-image);
+}
+
+.NavLinkContent3:hover .ShowContent .RightPart .RightPart_TopPart {
+    color: #ffa622;
+}
+
+.NavLinkContent3 .ShowContent {
+    display: flex;
+    flex-flow: row nowrap;
+    align-items: center;
+    height: 185px;
+    position: absolute;
+    left: 166px;
+}
+
+.NavLinkContent3 .ShowContent .LeftPart {
+    width: 88px;
+    height: 88px;
+    background-image: var(--three-icon-image);
+    background-repeat: no-repeat;
+    background-size: contain;
+    margin-right: 28px;
+}
+
+.NavLinkContent3 .ShowContent .RightPart .RightPart_TopPart {
+    width: 230px;
+    height: 36px;
+    font-size: 36px;
+    /* font-family: PangMenZhengDao-3, PangMenZhengDao;
+    font-weight: normal; */
+    color: #ffffff;
+    line-height: 41px;
+    margin-bottom: 16px;
+    text-align: start;
+}
+
+.NavLinkContent3 .ShowContent .RightPart .RightPart_BottomPart {
+    width: 214px;
+    height: 34px;
+    font-size: 12px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #FF9C27;
+    line-height: 17px;
+    text-align: start;
+}
+
+/* 左边第四个 */
+.NavLinkContent4 {
+    width: 780px;
+    height: 185px;
+    background-image: url("../images/navFour.png");
+    background-repeat: no-repeat;
+    background-size: contain;
+    cursor: pointer;
+    position: relative;
+}
+
+.NavLinkContent4:hover {
+    background-image: url("../images/navFourHover.png");
+}
+
+.NavLinkContent4:hover .ShowContent .LeftPart {
+    background-image: var(--four-hover-icon-image);
+}
+
+.NavLinkContent4:hover .ShowContent .RightPart .RightPart_TopPart {
+    color: #ffa622;
+}
+
+.NavLinkContent4:hover .ShowContent .RightPart .RightPart_BottomPart {
+    color: #ffa622;
+}
+
+.NavLinkContent4 .ShowContent {
+    display: flex;
+    flex-flow: row nowrap;
+    align-items: center;
+    height: 185px;
+    position: absolute;
+    left: 250px;
+}
+
+.NavLinkContent4 .ShowContent .LeftPart {
+    width: 88px;
+    height: 88px;
+    background-image: var(--four-icon-image);
+    background-repeat: no-repeat;
+    background-size: contain;
+    margin-right: 28px;
+}
+
+.NavLinkContent4 .ShowContent .RightPart .RightPart_TopPart {
+    width: 230px;
+    height: 36px;
+    font-size: 36px;
+    /* font-family: PangMenZhengDao-3, PangMenZhengDao;
+    font-weight: normal; */
+    color: #ffffff;
+    line-height: 41px;
+    margin-bottom: 16px;
+    text-align: start;
+}
+
+.NavLinkContent4 .ShowContent .RightPart .RightPart_BottomPart {
+    width: 214px;
+    height: 34px;
+    font-size: 12px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #FF9C27;
+    line-height: 17px;
+    text-align: start;
+}
+
+/* 右边第一个 */
+.NavLinkContent5 {
+    width: 780px;
+    height: 185px;
+    background-image: url("../images/navFive.png");
+    background-repeat: no-repeat;
+    background-size: contain;
+    cursor: pointer;
+    position: relative;
+}
+
+.NavLinkContent5:hover {
+    background-image: url("../images/navFiveHover.png");
+}
+
+.NavLinkContent5:hover .ShowContent .LeftPart {
+    background-image: var(--five-hover-icon-image);
+}
+
+.NavLinkContent5:hover .ShowContent .RightPart .RightPart_TopPart {
+    color: #ffa622;
+}
+
+.NavLinkContent5 .ShowContent {
+    display: flex;
+    flex-flow: row nowrap;
+    align-items: center;
+    height: 185px;
+    position: absolute;
+    left: 196px;
+}
+
+.NavLinkContent5 .ShowContent.custom-content {
+    /* left: 300px; */
+}
+
+.NavLinkContent5 .ShowContent .LeftPart {
+    width: 88px;
+    height: 88px;
+    background-image: var(--five-icon-image);
+    background-repeat: no-repeat;
+    background-size: contain;
+    margin-right: 28px;
+}
+
+.NavLinkContent5 .ShowContent .LeftPart.custom-img {
+    /* width: 100px;
+    height: 100px; */
+}
+
+.NavLinkContent5 .ShowContent .RightPart .RightPart_TopPart {
+    width: 330px;
+    height: 36px;
+    font-size: 36px;
+    /* font-family: PangMenZhengDao-3, PangMenZhengDao;
+    font-weight: normal; */
+    color: #ffffff;
+    line-height: 41px;
+    margin-bottom: 16px;
+    text-align: start;
+}
+
+.NavLinkContent5 .ShowContent .RightPart .RightPart_BottomPart {
+    width: 214px;
+    height: 34px;
+    font-size: 12px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #ff9c27;
+    line-height: 17px;
+    text-align: start;
+}
+
+/* 右边第二个 */
+.NavLinkContent6 {
+    width: 780px;
+    height: 185px;
+    background-image: url("../images/navSix.png");
+    background-repeat: no-repeat;
+    background-size: contain;
+    cursor: pointer;
+    position: relative;
+}
+
+.NavLinkContent6:hover {
+    background-image: url("../images/navSixHover.png");
+}
+
+.NavLinkContent6:hover .ShowContent .LeftPart {
+    background-image: var(--six-hover-icon-image);
+}
+
+.NavLinkContent6:hover .ShowContent .RightPart .RightPart_TopPart {
+    color: #ffa622;
+}
+
+.NavLinkContent6:hover .ShowContent .RightPart .RightPart_BottomPart {
+    color: #ffa622;
+}
+
+.NavLinkContent6 .ShowContent {
+    display: flex;
+    flex-flow: row nowrap;
+    align-items: center;
+    height: 185px;
+    position: absolute;
+    left: 286px;
+}
+
+.NavLinkContent6 .ShowContent .LeftPart {
+    width: 88px;
+    height: 88px;
+    background-image: var(--six-icon-image);
+    background-repeat: no-repeat;
+    background-size: contain;
+    margin-right: 28px;
+}
+
+.NavLinkContent6 .ShowContent .RightPart .RightPart_TopPart {
+    width: 230px;
+    height: 36px;
+    font-size: 36px;
+    /* font-family: PangMenZhengDao-3, PangMenZhengDao;
+    font-weight: normal; */
+    color: #ffffff;
+    line-height: 41px;
+    margin-bottom: 16px;
+    text-align: start;
+}
+
+.NavLinkContent6 .ShowContent .RightPart .RightPart_BottomPart {
+    width: 214px;
+    height: 34px;
+    font-size: 12px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #ff9c27;
+    line-height: 17px;
+    text-align: start;
+}
+
+/* 右边第三个 */
+.NavLinkContent7 {
+    width: 780px;
+    height: 185px;
+    background-image: url("../images/navSeven.png");
+    background-repeat: no-repeat;
+    background-size: contain;
+    cursor: pointer;
+    position: relative;
+}
+
+.NavLinkContent7:hover {
+    background-image: url("../images/navSevenHover.png");
+}
+
+.NavLinkContent7:hover .ShowContent .LeftPart {
+    background-image: var(--seven-hover-icon-image);
+}
+
+.NavLinkContent7:hover .ShowContent .RightPart .RightPart_TopPart {
+    color: #ffa622;
+}
+
+.NavLinkContent7 .ShowContent {
+    display: flex;
+    flex-flow: row nowrap;
+    align-items: center;
+    height: 185px;
+    position: absolute;
+    left: 286px;
+}
+
+.NavLinkContent7 .ShowContent .LeftPart {
+    width: 88px;
+    height: 88px;
+    background-image: var(--seven-icon-image);
+    background-repeat: no-repeat;
+    background-size: contain;
+    margin-right: 28px;
+}
+
+.NavLinkContent7 .ShowContent .RightPart .RightPart_TopPart {
+    width: 230px;
+    height: 36px;
+    font-size: 36px;
+    /* font-family: PangMenZhengDao-3, PangMenZhengDao;
+    font-weight: normal; */
+    color: #ffffff;
+    line-height: 41px;
+    margin-bottom: 16px;
+    text-align: start;
+}
+
+.NavLinkContent7 .ShowContent .RightPart .RightPart_BottomPart {
+    width: 214px;
+    height: 34px;
+    font-size: 12px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #ff9c27;
+    line-height: 17px;
+    text-align: start;
+}
+
+/* 右边第四个 */
+.NavLinkContent8 {
+    width: 780px;
+    height: 185px;
+    background-image: url("../images/navEight.png");
+    background-repeat: no-repeat;
+    background-size: contain;
+    cursor: pointer;
+    position: relative;
+}
+
+.NavLinkContent8:hover {
+    background-image: url("../images/navEightHover.png");
+}
+
+.NavLinkContent8:hover .ShowContent .LeftPart {
+    background-image: var(--eight-hover-icon-image);
+}
+
+.NavLinkContent8:hover .ShowContent .RightPart .RightPart_TopPart {
+    color: #ffa622;
+}
+
+.NavLinkContent8 .ShowContent {
+    display: flex;
+    flex-flow: row nowrap;
+    align-items: center;
+    height: 185px;
+    position: absolute;
+    left: 196px;
+}
+
+.NavLinkContent8 .ShowContent .LeftPart {
+    width: 88px;
+    height: 88px;
+    background-image: var(--eight-icon-image);
+    background-repeat: no-repeat;
+    background-size: contain;
+    margin-right: 28px;
+}
+
+.NavLinkContent8 .ShowContent .RightPart .RightPart_TopPart {
+    width: 290px;
+    height: 36px;
+    font-size: 36px;
+    /* font-family: PangMenZhengDao-3, PangMenZhengDao;
+    font-weight: normal; */
+    color: #ffffff;
+    line-height: 41px;
+    margin-bottom: 16px;
+    text-align: start;
+}
+
+.NavLinkContent8 .ShowContent .RightPart .RightPart_BottomPart {
+    width: 214px;
+    height: 34px;
+    font-size: 12px;
+    font-family: PingFangSC-Regular, PingFang SC;
+    font-weight: 400;
+    color: #ff9c27;
+    line-height: 17px;
+    text-align: start;
+}
+
+.RightPart_TopPart {
+    /* font-family: PangMenZhengDao-3, PangMenZhengDao; */
+    font-weight: bold;
+}

+ 220 - 0
ruoyi-admin/src/main/resources/static/css/weatherTime.css

@@ -0,0 +1,220 @@
+.component-element.screen-time {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -ms-flex-direction: row;
+    flex-direction: row;
+    -ms-flex-wrap: nowrap;
+    flex-wrap: nowrap;
+    -ms-flex-pack: start;
+    -ms-flex-align: center;
+    overflow: visible
+}
+
+.component-element.screen-time,
+.component-element.screen-time>div {
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -webkit-box-pack: start;
+    justify-content: flex-start;
+    -webkit-box-align: center;
+    align-items: center
+}
+
+.component-element.screen-time>div {
+    -ms-flex-preferred-size: auto;
+    flex-basis: auto;
+    -webkit-box-flex: 0;
+    -ms-flex-positive: 0;
+    flex-grow: 0;
+    -ms-flex-negative: 0;
+    flex-shrink: 0;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+    display: -webkit-inline-box;
+    display: -ms-inline-flexbox;
+    display: inline-flex;
+    -ms-flex-direction: row;
+    flex-direction: row;
+    -ms-flex-wrap: nowrap;
+    flex-wrap: nowrap;
+    -ms-flex-pack: start;
+    -ms-flex-align: center
+}
+
+.component-element.screen-time.default {
+    font-size: 30px;
+    color: #fff
+}
+
+.component-element.screen-time.default>.digital-time {
+    font-family: digital-font;
+    border-radius: 8px;
+    text-align: center;
+    font-size: 46px;
+    color: #0ba7ff;
+    letter-spacing: 8px;
+    padding: 0 10px
+}
+
+.component-element.screen-time.default>.digital-time.time-show {
+    color: rgb(255, 255, 255);
+    font-size: 28px;
+    transform: scale(1);
+    margin-top: 0px;
+}
+
+.component-element.screen-time.default>.digital-date>span {
+    margin-top: 4px
+}
+
+.component-element.screen-time.default>.digital-date,
+.component-element.screen-time.default>.digital-week {
+    font-size: 32px;
+    margin-left: 30px;
+    overflow: hidden
+}
+
+.component-element.screen-time.default>.digital-date.date-show {
+    transform: scale(1);
+    margin-top: 0px;
+    margin-left: 20px;
+}
+
+.component-element.screen-time.default>.digital-date>:not(:first-child),
+.component-element.screen-time.default>.digital-week>:not(:first-child) {
+    margin-left: 4px
+}
+
+.component-element.screen-time.default>.digital-date>b,
+.component-element.screen-time.default>.digital-week>b {
+    letter-spacing: 4px;
+    font-weight: 400;
+    font-size: 26px
+}
+
+.component-element.screen-time.default>.digital-date>span,
+.component-element.screen-time.default>.digital-week>span {
+    letter-spacing: 6px;
+    font-family: digital-font;
+    color: #0ba7ff
+}
+
+.component-element.screen-time.default>.digital-date>span.date-basic,
+.component-element.screen-time.default>.digital-date>b.date-basic {
+    color: rgb(255, 255, 255);
+    font-size: 14px;
+    line-height: 14px;
+
+}
+
+.component-element.screen-weather {
+    display: -webkit-box;
+    display: -ms-flexbox;
+    display: flex;
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -ms-flex-direction: row;
+    flex-direction: row;
+    -ms-flex-wrap: nowrap;
+    flex-wrap: nowrap;
+    -webkit-box-pack: start;
+    -ms-flex-pack: start;
+    justify-content: flex-start;
+    -webkit-box-align: center;
+    -ms-flex-align: center;
+    align-items: center;
+    overflow: visible
+}
+
+.component-element.screen-weather>* {
+    margin: 0 10px;
+    -ms-flex-preferred-size: auto;
+    flex-basis: auto;
+    -webkit-box-flex: 0;
+    -ms-flex-positive: 0;
+    flex-grow: 0;
+    -ms-flex-negative: 0;
+    flex-shrink: 0;
+    -webkit-box-sizing: border-box;
+    box-sizing: border-box
+}
+
+.component-element.screen-weather.default>.weather-item {
+    height: 70px;
+    overflow: hidden;
+    display: -webkit-inline-box;
+    display: -ms-inline-flexbox;
+    display: inline-flex;
+    -ms-flex-wrap: nowrap;
+    flex-wrap: nowrap;
+    -webkit-box-orient: horizontal;
+    -webkit-box-direction: normal;
+    -ms-flex-direction: row;
+    flex-direction: row;
+    -webkit-box-pack: start;
+    -ms-flex-pack: start;
+    justify-content: flex-start;
+    -webkit-box-align: center;
+    -ms-flex-align: center;
+    align-items: center
+}
+
+.component-element.screen-weather.default>.weather-item.weather-scale54 {
+    transform: scale(0.54);
+}
+
+.component-element.screen-weather.default>.weather-item.weather-margin-left-54 {
+    margin-left: -54px;
+}
+
+.component-element.screen-weather.default>.weather-item>.weather-icon {
+    display: block;
+    float: left;
+    width: 66px;
+    height: 66px;
+    line-height: 66px;
+    text-align: center;
+    font-size: 60px;
+    color: #0ba7ff;
+    -webkit-box-flex: 0;
+    -ms-flex-positive: 0;
+    flex-grow: 0;
+    -ms-flex-negative: 0;
+    flex-shrink: 0;
+    -ms-flex-preferred-size: 66px;
+    flex-basis: 66px
+}
+
+
+.component-element.screen-weather.default>.weather-item>.weather-icon.weather-icon-style {
+    color: rgb(255, 255, 255);
+}
+
+.component-element.screen-weather.default>.weather-item>.weather-text {
+    display: block;
+    float: left;
+    height: 60px;
+    font-size: 18px;
+    color: #fff;
+    margin-left: 8px;
+    -webkit-box-flex: 0;
+    -ms-flex-positive: 0;
+    flex-grow: 0;
+    -ms-flex-negative: 0;
+    flex-shrink: 0;
+    -ms-flex-preferred-size: auto;
+    flex-basis: auto
+}
+
+.component-element.screen-weather.default>.weather-item>.weather-text.weather-text-style {
+    color: rgb(255, 255, 255);
+}
+
+.component-element.screen-weather.default>.weather-item>.weather-text>p {
+    overflow: hidden
+}
+
+.component-element.screen-weather.default>.weather-item>.weather-text>p>span:first-child {
+    margin-right: 20px
+}

BIN
ruoyi-admin/src/main/resources/static/default/favicon.ico


BIN
ruoyi-admin/src/main/resources/static/fonts/Digital-7Mono.TTF


BIN
ruoyi-admin/src/main/resources/static/fonts/PangMenZhengDao.ttf


BIN
ruoyi-admin/src/main/resources/static/fonts/YouSheBiaoTiHei-2.ttf


BIN
ruoyi-admin/src/main/resources/static/images/background.png


BIN
ruoyi-admin/src/main/resources/static/images/earth.png


BIN
ruoyi-admin/src/main/resources/static/images/earthOneCircle.png


BIN
ruoyi-admin/src/main/resources/static/images/earthTwoCircle.png


BIN
ruoyi-admin/src/main/resources/static/images/favicon.ico


BIN
ruoyi-admin/src/main/resources/static/images/icon-map.png


BIN
ruoyi-admin/src/main/resources/static/images/icon-users.png


BIN
ruoyi-admin/src/main/resources/static/images/navEight.png


BIN
ruoyi-admin/src/main/resources/static/images/navEightHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navEightIcon.png


BIN
ruoyi-admin/src/main/resources/static/images/navEightIconHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navFive.png


BIN
ruoyi-admin/src/main/resources/static/images/navFiveHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navFiveIcon.png


BIN
ruoyi-admin/src/main/resources/static/images/navFiveIconHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navFour.png


BIN
ruoyi-admin/src/main/resources/static/images/navFourHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navFourIcon.png


BIN
ruoyi-admin/src/main/resources/static/images/navFourIconHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navOne.png


BIN
ruoyi-admin/src/main/resources/static/images/navOneHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navOneIcon.png


BIN
ruoyi-admin/src/main/resources/static/images/navOneIconHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navSeven.png


BIN
ruoyi-admin/src/main/resources/static/images/navSevenHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navSevenIcon.png


BIN
ruoyi-admin/src/main/resources/static/images/navSevenIconHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navSix.png


BIN
ruoyi-admin/src/main/resources/static/images/navSixHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navSixIcon.png


BIN
ruoyi-admin/src/main/resources/static/images/navSixIconHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navThree.png


BIN
ruoyi-admin/src/main/resources/static/images/navThreeHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navThreeIcon.png


BIN
ruoyi-admin/src/main/resources/static/images/navThreeIconHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navTwo.png


BIN
ruoyi-admin/src/main/resources/static/images/navTwoHover.png


BIN
ruoyi-admin/src/main/resources/static/images/navTwoIcon.png


BIN
ruoyi-admin/src/main/resources/static/images/navTwoIconHover.png


BIN
ruoyi-admin/src/main/resources/static/images/topTitle.png


+ 81 - 0
ruoyi-admin/src/main/resources/static/ruoyi/index.js

@@ -503,12 +503,93 @@ $(function() {
     $('#fullScreen').on('click', function () {
     	$(document).toggleFullScreen();
     });
+
+    $(document).toggleFullScreen();
     
     // 锁定屏幕
     $('#lockScreen').on('click', function () {
     	storage.set('lockPath', $('.page-tabs-content').find('.active').attr('data-id'));
     	location.href  = ctx + "lockscreen";
     });
+    var menuFlag = false;//是否隐藏
+    // 极简模式切换
+    $('#hideMenu').on('click', function () {
+        hideModel();
+    });
+
+    $('#showMenu').on('click', function () {
+        hideModel();
+    });
+
+    //TODO 子窗口调用
+    top.window.tagObj = hideModel;
+    top.window.tagMenu = menuFlag;
+
+    function viewClassAD() {
+        if(menuFlag){
+            $("#content-main").addClass("viewHeight");
+        }else{
+            $("#content-main").removeClass("viewHeight");
+        }
+    }
+
+    //极简模式切换
+    function hideModel() {
+        //找到菜单栏元素以及右侧部分
+        let $menu = $("#navMenuIndex");
+        let $right = $("#page-wrapper");//此上两元素是控制菜单栏的
+
+        let $comDiv = $("#comDiv");//精细div
+        let $simpleDiv = $("#simpleDiv");//极简div
+
+        let $headMenuDiv = $("#headMenuDiv");
+        if(!menuFlag){
+            menuFlag = true;
+            // $menu.addClass("menuClass");
+            $right.addClass("rightClass");
+
+            $menu.hide();
+            $comDiv.hide();
+            $headMenuDiv.hide();
+            $simpleDiv.show();
+            tabCloseAll();//关闭所有页
+            // activeOneTab();//点击首页然后显示首页
+            $('#content-main').toggleClass('max');
+        }else{
+            menuFlag = false;
+            $right.removeClass("rightClass");
+
+            $menu.show();
+            $comDiv.show();
+            $headMenuDiv.show();
+            $simpleDiv.hide();
+            $('#content-main').toggleClass('max');
+        }
+        viewClassAD();
+    }
+
+    function activeOneTab() {
+        if (!$(this).hasClass('active')) {
+            var currentId = "/system/main";
+            var isRefresh = false;
+            syncMenuTab(currentId);
+            // 显示tab对应的内容区
+            $('.mainContent .RuoYi_iframe').each(function() {
+                if ($(this).data('id') == currentId) {
+                    $(this).show().siblings('.RuoYi_iframe').hide();
+                    isRefresh = $(this).data('refresh');
+                    return false;
+                }
+            });
+            $(this).addClass('active').siblings('.menuTab').removeClass('active');
+            if (isRefresh) {
+                refreshTab();
+            }
+            scrollToTab(this);
+        }
+    }
+
+    hideModel();//默认隐藏
 
     // 页签刷新按钮
     $('.tabReload').on('click', refreshTab);

+ 42 - 9
ruoyi-admin/src/main/resources/templates/index.html

@@ -15,12 +15,28 @@
     <link th:href="@{/css/style.min.css}" rel="stylesheet"/>
     <link th:href="@{/css/skins.css}" rel="stylesheet"/>
     <link th:href="@{/ruoyi/css/ry-ui.css?v=4.7.5}" rel="stylesheet"/>
+	<style type="text/css">
+        /*菜单样式*/
+		.menuClass{
+			width: 0px!important;
+		}
+
+        /*右边体样式*/
+		.rightClass{
+			width: 100%px!important;
+			margin: 0px!important;
+		}
+
+		.viewHeight{
+			height: 100%!important;
+		}
+	</style>
 </head>
 <body class="fixed-sidebar full-height-layout gray-bg" th:classappend="${isMobile} ? 'canvas-menu'" style="overflow: hidden">
 <div id="wrapper">
 
     <!--左侧导航开始-->
-    <nav class="navbar-default navbar-static-side" role="navigation">
+    <nav id="navMenuIndex" class="navbar-default navbar-static-side" role="navigation">
         <div class="nav-close">
             <i class="fa fa-times-circle"></i>
         </div>
@@ -185,7 +201,8 @@
 
     <!--右侧部分开始-->
     <div id="page-wrapper" class="gray-bg dashbard-1">
-        <div class="row border-bottom">
+        <!--精细模式-->
+        <div class="row border-bottom" id="comDiv" style="display: none">
             <nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">
                 <div class="navbar-header">
                     <a class="navbar-minimalize minimalize-styl-2" style="color:#FFF;" href="#" title="收起菜单">
@@ -194,8 +211,9 @@
                 </div>
                 <ul class="nav navbar-top-links navbar-right welcome-message">
 <!--                    <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="开发文档" href="http://doc.ruoyi.vip/ruoyi" target="_blank"><i class="fa fa-question-circle"></i> 文档</a></li>-->
+					<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="极简模式" href="#" id="hideMenu"><i class="fa fa-arrows-alt"></i></a></li>
                     <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="锁定屏幕" href="#" id="lockScreen"><i class="fa fa-lock"></i> 锁屏</a></li>
-	                <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="全屏显示" href="#" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏</a></li>
+	                <!--<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="全屏显示" href="#" id="fullScreen"><i class="fa fa-arrows-alt"></i> 全屏</a></li>-->
                     <li class="dropdown user-menu">
 						<a href="javascript:void(0)" class="dropdown-toggle" data-hover="dropdown">
 							<img th:src="(${#strings.isEmpty(user.avatar)}) ? @{/img/profile.jpg} : @{${user.avatar}}" th:onerror="this.src='img/profile.jpg'" class="user-image">
@@ -228,7 +246,22 @@
                 </ul>
             </nav>
         </div>
-        <div class="row content-tabs" th:classappend="${#bools.isFalse(tagsView)} ? |hide|">
+
+        <!--极简模式-->
+        <div class="row border-bottom" id="simpleDiv">
+            <!--<nav class="navbar navbar-static-top" role="navigation" style="margin-bottom: 0">-->
+                <!--<ul class="nav navbar-top-links navbar-right welcome-message">-->
+                    <!--&lt;!&ndash;                    <li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="开发文档" href="http://doc.ruoyi.vip/ruoyi" target="_blank"><i class="fa fa-question-circle"></i> 文档</a></li>&ndash;&gt;-->
+                    <!--<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="精细模式" href="#" id="showMenu"><i class="fa fa-folder-open" style="color:red!important;"></i> 精细模式</a></li>-->
+					<!--<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="全屏显示" href="#" id="fullScreenTwo"><i class="fa fa-arrows-alt"></i> 全屏</a></li>-->
+					<!--<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="" href="#"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></li>-->
+                    <!--<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="" href="#"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></li>-->
+                    <!--<li><a data-toggle="tooltip" data-trigger="hover" data-placement="bottom" title="" href="#"> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a></li>-->
+                <!--</ul>-->
+            <!--</nav>-->
+        </div>
+
+        <div id="headMenuDiv" style="display: none" class="row content-tabs" th:classappend="${#bools.isFalse(tagsView)} ? |hide|">
             <button class="roll-nav roll-left tabLeft">
                 <i class="fa fa-backward"></i>
             </button>
@@ -245,14 +278,14 @@
 
         <a id="ax_close_max" class="ax_close_max" href="#" title="关闭全屏"> <i class="fa fa-times-circle-o"></i> </a>
 
-        <div class="row mainContent" id="content-main" th:classappend="${mainClass}">
+        <div class="row mainContent viewHeight" id="content-main" th:classappend="${mainClass}">
             <iframe class="RuoYi_iframe" name="iframe0" width="100%" height="100%" th:data-id="@{/system/main}"
                 th:src="@{/system/main}" frameborder="0" seamless></iframe>
         </div>
 
-        <div th:if="${footer}" class="footer">
-            <div class="pull-right">© [[${copyrightYear}]] 统一认证平台 Copyright </div>
-        </div>
+        <!--<div th:if="${footer}" class="footer">-->
+            <!--<div class="pull-right">© [[${copyrightYear}]] 统一认证平台 Copyright </div>-->
+        <!--</div>-->
     </div>
     <!--右侧部分结束-->
 </div>
@@ -266,7 +299,7 @@
 <script th:src="@{/ajax/libs/layer/layer.min.js}"></script>
 <script th:src="@{/ruoyi/js/ry-ui.js?v=4.7.5}"></script>
 <script th:src="@{/ruoyi/js/common.js?v=4.7.5}"></script>
-<script th:src="@{/ruoyi/index.js?v=20201208}"></script>
+<script th:src="@{/ruoyi/index.js?v=20201208}" defer="defer"></script>
 <script th:src="@{/ajax/libs/fullscreen/jquery.fullscreen.js}"></script>
 <script th:inline="javascript">
 window.history.forward(1);

+ 17 - 2
ruoyi-admin/src/main/resources/templates/login.html

@@ -19,9 +19,25 @@
     <script>
         if(window.top!==window.self){alert('未登录或登录超时。请重新登录');window.top.location=window.location};
     </script>
+    <style type="text/css">
+        .hClass{
+            position:absolute;
+            left:10%;
+            top:6%;
+            font-size: 25px;
+        }
+        .divFoot{
+            position: absolute!important;
+            bottom: 6%!important;
+            margin: auto 0!important;
+            width: 50%!important;
+            font-size: 10px!important;
+        }
+    </style>
 </head>
 <body class="signin">
     <div class="signinpanel">
+        <h4 class="hClass">欢迎使用 <strong>智慧水务系统-认证</strong></h4>
         <div class="row">
             <div class="col-sm-7">
                 <div class="signin-info">
@@ -29,7 +45,6 @@
                         <h1><img alt="[ 水务系统 ]" src="../static/img/logo.png" th:src="@{/img/logo.png}"></h1>
                     </div>
                     <div class="m-b"></div>
-                    <h4>欢迎使用 <strong>智慧水务系统-认证系统</strong></h4>
 
                     <strong th:if="${isAllowRegister}">还没有账号? <a th:href="@{/register}">立即注册&raquo;</a></strong>
                 </div>
@@ -62,7 +77,7 @@
                 </form>
             </div>
         </div>
-        <div class="signup-footer">
+        <div class="signup-footer divFoot">
             <div class="pull-left">
                 CopyRight ©2021-2030 重庆远通科技有限公司 版权所有<br>
             </div>

+ 40 - 2
ruoyi-admin/src/main/resources/templates/main.html

@@ -11,6 +11,43 @@
 	<link href="../static/css/animate.min.css" th:href="@{/css/animate.min.css}" rel="stylesheet"/>
 	<link href="../static/css/style.min862f.css" th:href="@{/css/style.min862f.css}" rel="stylesheet"/>
 	<th:block th:include="include :: header('首页')" />
+	<style type="text/css">
+		.aInput {
+			position: relative;
+			color: rgba(255,255,255,1);
+			text-decoration: none;
+			background-color: rgba(60,141,188,1);
+			font-family: 'Yanone Kaffeesatz';
+			/*font-weight: 700;*/
+			/*font-size: 2em;*/
+			display: block;
+			padding: 4px;
+			-webkit-border-radius: 20px;
+			-moz-border-radius: 20px;
+			border-radius: 20px;
+			-webkit-box-shadow: 0px 9px 0px rgba(60,141,188,1), 0px 9px 25px rgba(60,64,81,.7);
+			-moz-box-shadow: 0px 9px 0px rgba(60,141,188,1), 0px 9px 25px rgba(60,64,81,.7);
+			box-shadow: 0px 9px 0px rgba(60,141,188,1), 0px 9px 25px rgba(60,64,81,.7);
+			margin: 20px auto;
+			width: 60px;
+			height: 60px;
+			text-align: center;
+
+			-webkit-transition: all .1s ease;
+			-moz-transition: all .1s ease;
+			-ms-transition: all .1s ease;
+			-o-transition: all .1s ease;
+			transition: all .1s ease;
+		}
+
+		.aInput:active {
+			-webkit-box-shadow: 0px 3px 0px rgba(60,141,188,1), 0px 3px 6px rgba(60,64,81,.9);
+			-moz-box-shadow: 0px 3px 0px rgba(60,141,188,1), 0px 3px 6px rgba(60,64,81,.9);
+			box-shadow: 0px 3px 0px rgba(60,141,188,1), 0px 3px 6px rgba(60,64,81,.9);
+			position: relative;
+			top: 6px;
+		}
+	</style>
 </head>
 
 
@@ -27,8 +64,9 @@
 					<div class="col-sm-3" th:each="dangan:${danganList}">
 						<div class="float-e-margins" style="text-align: center;border: none">
 							<div     >
-								<button class="btn btn-primary dim" type="button"   th:onclick="opennewpage([[${dangan.danganUrl}]] ,[[${dangan.danganNums} ]]);"   ><i class="fa fa-money"></i>
-								</button>
+								<!--<input type="text" th:value="${#httpServletRequest.getScheme() + '://' + #httpServletRequest.getServerName() + ':' + #request.getServerPort()}">-->
+								<!--<button class="btn btn-primary dim" type="button" th:style="'background:url(' +${dangan.dangan==null?'':dangan.dangan.iconInfo}+') no-repeat center center;width:50px;height:50px;background-size:100% 100%'" th:onclick="opennewpage([[${dangan.danganUrl}]] ,[[${dangan.danganNums} ]]);">-->
+								<a class="aInput" th:style="'background:url(' +${dangan.dangan==null?'':dangan.dangan.iconInfo}+') no-repeat center center;background-size:100% 100%'" th:onclick="opennewpage([[${dangan.danganUrl}]] ,[[${dangan.danganNums} ]]);"></a>
 								<h3 class="no-margins" style="color:#1e9fff" th:text="${dangan.danganName}"></h3>
 								<h4 th:text="${@dict.getLabel('sys_dangan_status', dangan.danganStatus)}" ></h4><br>
 							</div>

+ 76 - 0
ruoyi-admin/src/main/resources/templates/mainLhk.html

@@ -0,0 +1,76 @@
+<!DOCTYPE html>
+<html  lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+<head>
+	<meta charset="utf-8">
+	<link rel="shortcut icon" href="../static/images/favicon.ico" type="image/icon">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0">
+	<!--360浏览器优先以webkit内核解析-->
+	<title></title>
+	<link rel="shortcut icon" href="favicon.ico">
+	<link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
+	<link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
+	<link href="../static/css/animate.min.css" th:href="@{/css/animate.min.css}" rel="stylesheet"/>
+	<link href="../static/css/style.min862f.css" th:href="@{/css/style.min862f.css}" rel="stylesheet"/>
+	<script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
+	<th:block th:include="include :: header('首页')" />
+	<style type="text/css">
+		/* html,
+        html body {
+            height: 100%;
+            width: 100%;
+        } */
+		body {
+			margin: 0;
+			overflow: hidden;
+		}
+
+		.test1 {
+			width: 100%;
+			height: 100%;
+			position: absolute;
+			left: 0;
+			top: 0;
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			overflow: hidden;
+			background: radial-gradient(#055fd1, #04345c, #001f34);
+		}
+
+		.ifreamClass {
+			flex:0 0 1920px!important;
+			height: 1080px!important;
+		}
+	</style>
+</head>
+
+
+
+<body>
+	<div id="app" class="assembly-html-body">
+		<div class="test1">
+			<iframe id="iframeView" th:src="@{/system/view}" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
+		</div>
+	</div>
+	<script type="text/javascript">
+        function initScale() {
+            let clientWidth = document.body.clientWidth;
+            let num = clientWidth / 1920;
+
+            let  clientHeight = document.body.clientHeight;
+            let numHeight = clientHeight/1080;
+
+
+
+            let scaleNum = Math.min(num,numHeight).toFixed(2);
+
+            console.log(scaleNum);
+            $("#iframeView").addClass("ifreamClass");
+            $("#iframeView").css("transform","scale("+scaleNum+")");
+        }
+
+        initScale();
+	</script>
+</body>
+</html>

+ 3 - 0
ruoyi-admin/src/main/resources/templates/system/apply/add.html

@@ -80,6 +80,9 @@
 
         var bool = false;
         function loadEditTable(){
+            $.modal.alertWarning("此功能暂未开放");
+            $.modal.close();//关闭当前窗口
+            return;
             $('#table1').bootstrapTable('destroy');
             $('#table1').bootstrapTable({
                 method: 'post',

+ 77 - 8
ruoyi-admin/src/main/resources/templates/system/dangan/add.html

@@ -321,6 +321,18 @@
             <div class="row">
                 <div class="col-sm-6">
                     <div class="form-group">
+                        <label class="col-sm-3 control-label">排序:</label>
+                        <div class="col-sm-8">
+                            <input class="form-control" type="number" name="ord" required>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-sm-6">
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-sm-6">
+                    <div class="form-group">
                         <input type="hidden" id="fileName" name="fileName">
                         <input type="hidden" id="filePath" name="filePath">
                         <label class="col-sm-3 control-label ">文档信息:</label>
@@ -331,6 +343,18 @@
                         </div>
                     </div>
                 </div>
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        <input type="hidden" id="iconName" name="iconName">
+                        <input type="hidden" id="iconPath" name="iconPath">
+                        <label class="col-sm-3 control-label ">档案图标信息:</label>
+                        <div class="col-sm-8">
+                            <input id="icon" name="icon" class="form-control" type="file"  onchange="uploadIcon();" multiple >
+                            <div id="iconinfo">
+                            </div>
+                        </div>
+                    </div>
+                </div>
             </div>
             <div class="row">
                 <div class="col-sm-12">
@@ -386,18 +410,20 @@
 
         function uploadFile(){
             var formData = new FormData();
-            if ($('#file')[0].files[0] == null) {
+            if ($('#file')[0].files[0] == null || $('#file')[0].files[0]==undefined) {
                 $.modal.alertWarning("请先选择文件路径");
                 return false;
             }
-            var this_1=  document.getElementById('file');
-            var files = this_1.files;
-
-            for (var i = 0, len = files.length; i < len; i++) {
-                formData.append('files', files[i]);
-            }
+            // var this_1=  document.getElementById('file');
+            // var files = this_1.files;
+            //
+            // for (var i = 0, len = files.length; i < len; i++) {
+            //     formData.append('files', files[i]);
+            // }
+            // 将文件装入FormData对象
+            formData.append("file",$('#file')[0].files[0]);
             $.ajax({
-                url: ctx + "common/uploadMultipart",
+                url: ctx + "common/upload",
                 type: 'post',
                 cache: false,
                 data: formData,
@@ -426,6 +452,49 @@
             });
         }
 
+        function uploadIcon(){
+            var formData = new FormData();
+            if ($('#icon')[0].files[0] == null || $('#icon')[0].files[0]==undefined) {
+                $.modal.alertWarning("请先选择文件路径");
+                return false;
+            }
+            // var this_1=  document.getElementById('file');
+            // var files = this_1.files;
+            //
+            // for (var i = 0, len = files.length; i < len; i++) {
+            //     formData.append('files', files[i]);
+            // }
+            // 将文件装入FormData对象
+            formData.append("file",$('#icon')[0].files[0]);
+            $.ajax({
+                url: ctx + "common/upload",
+                type: 'post',
+                cache: false,
+                data: formData,
+                processData: false,
+                contentType: false,
+                dataType: "json",
+                success: function(result) {
+                    console.log(result);
+                    if(result.code == '0'){
+                        $("#iconName").val(result.fileName);
+                        $("#iconPath").val(result.url);
+                        var fileArr = new Array();
+                        var fileNames =result.fileName;
+                        if(null!=fileNames && fileNames.length>0){
+                            $("#iconinfo").empty();
+                            fileArr = fileNames.split(",");
+                            for(var i=0;i<fileArr.length;i++){
+                                var html = "";
+                                html = "<input type='text' value='"+fileArr[i]+"' class='form-control' style='border: none;' readonly>";
+                                $("#iconinfo").append(html);
+                            }
+                        }
+
+                    }
+                }
+            });
+        }
 
         function submitHandler() {
             if ($.validate.form()) {

+ 88 - 10
ruoyi-admin/src/main/resources/templates/system/dangan/edit.html

@@ -317,6 +317,18 @@
             <div class="row">
                 <div class="col-sm-6">
                     <div class="form-group">
+                        <label class="col-sm-3 control-label">排序:</label>
+                        <div class="col-sm-8">
+                            <input class="form-control" type="number" name="ord" th:field="*{ord}" required>
+                        </div>
+                    </div>
+                </div>
+                <div class="col-sm-6">
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-sm-6">
+                    <div class="form-group">
                         <input type="hidden" id="fileName" name="fileName">
                         <input type="hidden" id="filePath" name="filePath">
                         <label  class="col-sm-3 control-label "  >文档信息:</label>
@@ -332,6 +344,23 @@
                             </div>
                         </div>
                     </div>
+                    <div class="form-group">
+                        <input type="hidden" id="iconName" name="iconName">
+                        <input type="hidden" id="iconPath" name="iconPath">
+                        <label  class="col-sm-3 control-label "  >档案图标信息:</label>
+                        <div class="col-sm-8">
+                            <input id="icon" class="form-control" type="file" onchange="uploadIcon();" multiple>
+                            <div id="iconinfo"></div>
+                            <br>
+                            <div class="input-group m-b" th:if="${icon!=null}" >
+                                <input type="hidden" name="iconId" th:value="@{${icon.fileId}}">
+                                <input type="hidden" th:id="${fileList.size()>0?(fileList.size()+1):0}" th:value="@{${icon.filePath}}">
+                                <span class="input-group-addon" th:onclick="preview([[@{${icon.filePath}}]])"><i class="fa fa-file"></i></span>
+                                <span class="input-group-addon" th:onclick="removeIcon([[${fileList.size()>0?(fileList.size()+1):0}]])"><i class="fa fa-remove"></i></span>
+                                <input type="text" class="form-control" th:value="${icon.fileName}" disabled="disabled">
+                            </div>
+                        </div>
+                    </div>
                 </div>
             </div>
             <div class="row">
@@ -369,6 +398,10 @@
             $("#" + id).remove();
             this.danganFileList.splice(id, 1);
         }
+        function removeIcon(id) {
+            $("#" + id).parent().remove();
+            this.danganFileList.splice(id, 1);
+        }
 
         function preview(pdfPath){
             console.log("pdfPath="+pdfPath);
@@ -381,14 +414,16 @@
                 $.modal.alertWarning("请先选择文件路径");
                 return false;
             }
-            var this_1 = document.getElementById('file');
-            var files = this_1.files;
-
-            for (var i = 0, len = files.length; i < len; i++) {
-                formData.append('files', files[i]);
-            }
+            // var this_1=  document.getElementById('file');
+            // var files = this_1.files;
+            //
+            // for (var i = 0, len = files.length; i < len; i++) {
+            //     formData.append('files', files[i]);
+            // }
+            // 将文件装入FormData对象
+            formData.append("file",$('#file')[0].files[0]);
             $.ajax({
-                url: ctx + "common/uploadMultipart",
+                url: ctx + "common/upload",
                 type: 'post',
                 cache: false,
                 data: formData,
@@ -397,10 +432,10 @@
                 dataType: "json",
                 success: function (result) {
                     if (result.code == '0') {
-                        $("#fileName").val(result.fileName);
-                        $("#filePath").val(result.url);
+                        $("#fileName").val(result.newFileName);
+                        $("#filePath").val(result.fileName);
                         var fileArr = new Array();
-                        var fileNames =result.fileName;
+                        var fileNames =result.newFileName;
                         if(null!=fileNames && fileNames.length>0){
                             $("#fileinfo").empty();
                             fileArr = fileNames.split(",");
@@ -415,6 +450,49 @@
             });
         }
 
+        function uploadIcon(){
+            var formData = new FormData();
+            if ($('#icon')[0].files[0] == null || $('#icon')[0].files[0]==undefined) {
+                $.modal.alertWarning("请先选择文件路径");
+                return false;
+            }
+            // var this_1=  document.getElementById('file');
+            // var files = this_1.files;
+            //
+            // for (var i = 0, len = files.length; i < len; i++) {
+            //     formData.append('files', files[i]);
+            // }
+            // 将文件装入FormData对象
+            formData.append("file",$('#icon')[0].files[0]);
+            $.ajax({
+                url: ctx + "common/upload",
+                type: 'post',
+                cache: false,
+                data: formData,
+                processData: false,
+                contentType: false,
+                dataType: "json",
+                success: function(result) {
+                    console.log(result);
+                    if(result.code == '0'){
+                        $("#iconName").val(result.newFileName);
+                        $("#iconPath").val(result.fileName);
+                        var fileArr = new Array();
+                        var fileNames =result.newFileName;
+                        if(null!=fileNames && fileNames.length>0){
+                            $("#iconinfo").empty();
+                            fileArr = fileNames.split(",");
+                            for(var i=0;i<fileArr.length;i++){
+                                var html = "";
+                                html = "<input type='text' value='"+fileArr[i]+"' class='form-control' style='border: none;' readonly>";
+                                $("#iconinfo").append(html);
+                            }
+                        }
+
+                    }
+                }
+            });
+        }
 
         function submitHandler() {
             if ($.validate.form()) {

+ 2 - 2
ruoyi-admin/src/main/resources/templates/system/dept/add.html

@@ -9,12 +9,12 @@
 <body class="white-bg">
 <div class="wrapper wrapper-content animated fadeInRight ibox-content">
 	<form class="form-horizontal m" id="form-dept-add">
-		<input id="treeId" name="parentId" type="hidden" th:value="${dept.deptId}"   />
+		<input id="treeId" name="parentId" type="hidden" th:value="${dept!=null?dept.deptId:''}"   />
 		<div class="form-group">
 			<label class="col-sm-2 control-label">上级机构:</label>
 			<div class="col-sm-8">
 				<div class="input-group">
-					<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept.deptName}">
+					<input class="form-control" type="text" onclick="selectDeptTree()" id="treeName" readonly="true" th:value="${dept!=null?dept.deptName:''}">
 					<span class="input-group-addon"><i class="fa fa-search"></i></span>
 				</div>
 			</div>

+ 1 - 1
ruoyi-admin/src/main/resources/templates/system/dept/dept.html

@@ -117,7 +117,7 @@
 		            title: '操作',
 		            align: 'left',
 		            formatter: function(value, row, index) {
-		                if (row.parentId != 0) {
+		                if (row.parentId != null) {
 		                    var actions = [];
 		                    actions.push('<a class="btn btn-success btn-xs ' + editFlag + '" href="javascript:void(0)" onclick="$.operate.edit(\'' + row.deptId + '\')"><i class="fa fa-edit"></i>编辑</a> ');
 							actions.push('<a class="btn btn-info  btn-xs ' + addFlag + '" href="javascript:void(0)" onclick="$.operate.add(\'' + row.deptId + '\')"><i class="fa fa-plus"></i>新增</a> ');

+ 23 - 20
ruoyi-admin/src/main/resources/templates/system/feedback/add.html

@@ -50,40 +50,43 @@
             focusCleanup: true
         });
 
-        function uploadFile(){
+        function uploadFile() {
             var formData = new FormData();
             if ($('#file')[0].files[0] == null) {
                 $.modal.alertWarning("请先选择文件路径");
                 return false;
             }
-            var this_1=  document.getElementById('file');
-            var files = this_1.files;
-
-            for (var i = 0, len = files.length; i < len; i++) {
-                formData.append('files', files[i]);
-            }
+            // var this_1=  document.getElementById('file');
+            // var files = this_1.files;
+            //
+            // for (var i = 0, len = files.length; i < len; i++) {
+            //     formData.append('files', files[i]);
+            // }
+            // 将文件装入FormData对象
+            formData.append("file",$('#file')[0].files[0]);
             $.ajax({
-                url: ctx + "common/uploadMultipart",
+                url: ctx + "common/upload",
                 type: 'post',
                 cache: false,
                 data: formData,
                 processData: false,
                 contentType: false,
                 dataType: "json",
-                success: function(result) {
-                    console.log(result);
-                    if(result.code == '0'){
-                        $("#fileName").val(result.fileName);
-                        $("#filePath").val(result.url);
-                        if(result.fileName != null ){
-                            let names = result.fileName.split(",");
-                            let html='';
-                            for(let i = 0 ;i<names.length;i++) {
-                                html+= "<div>"+names[i]+"</div>";
+                success: function (result) {
+                    if (result.code == '0') {
+                        $("#fileName").val(result.newFileName);
+                        $("#filePath").val(result.fileName);
+                        var fileArr = new Array();
+                        var fileNames =result.newFileName;
+                        if(null!=fileNames && fileNames.length>0){
+                            $("#fileinfo").empty();
+                            fileArr = fileNames.split(",");
+                            for(var i=0;i<fileArr.length;i++){
+                                var html = "";
+                                html = "<input type='text' value='"+fileArr[i]+"' class='form-control' style='border: none;' readonly>";
+                                $("#fileinfo").append(html);
                             }
-                            $("#fileinfo").html(html);
                         }
-
                     }
                 }
             });

+ 1 - 1
ruoyi-admin/src/main/resources/templates/system/user/add.html

@@ -223,7 +223,7 @@
     /* 用户管理-新增-选择机构树 */
     function selectDeptTree() {
         var treeId = $("#treeId").val();
-        var deptId = $.common.isEmpty(treeId) ? "100" : $("#treeId").val();
+        var deptId = $.common.isEmpty(treeId) ? "1" : $("#treeId").val();
         var url = ctx + "system/user/selectDeptTree/" + deptId;
         var options = {
             title: '选择机构',

+ 1 - 1
ruoyi-admin/src/main/resources/templates/system/user/edit.html

@@ -180,7 +180,7 @@
     /* 用户管理-新增-选择机构树 */
     function selectDeptTree() {
         var treeId = $("#treeId").val();
-        var deptId = $.common.isEmpty(treeId) ? "100" : $("#treeId").val();
+        var deptId = $.common.isEmpty(treeId) ? "1" : $("#treeId").val();
         var url = ctx + "system/user/selectDeptTree/" + deptId;
         var options = {
             title: '选择机构',

+ 218 - 0
ruoyi-admin/src/main/resources/templates/view.html

@@ -0,0 +1,218 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
+
+<head>
+    <meta charset="utf-8">
+    <link rel="shortcut icon" href="./static/images/favicon.ico" type="image/icon">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no">
+    <link rel="icon" href="./static/favicon.ico">
+    <title>老河口清源供水有限公司</title>
+
+    <link rel="shortcut icon" href="favicon.ico">
+    <link href="../static/css/bootstrap.min.css" th:href="@{/css/bootstrap.min.css}" rel="stylesheet"/>
+    <link href="../static/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
+    <link href="../static/css/animate.min.css" th:href="@{/css/animate.min.css}" rel="stylesheet"/>
+    <link href="../static/css/style.min862f.css" th:href="@{/css/style.min862f.css}" rel="stylesheet"/>
+
+    <link href="../css/index.css" rel="stylesheet">
+
+    <link href="../css/earth.css" rel="stylesheet">
+
+    <link href="../css/navLinkContent.css" rel="stylesheet">
+
+    <link href="../css/backgroundLayer.css" rel="stylesheet">
+
+    <link href="../css/iconFamily.css" rel="stylesheet">
+
+    <link href="../css/weatherTime.css" rel="stylesheet">
+
+    <script src="https://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
+</head>
+
+<body>
+    <noscript>
+        <strong>
+            We're sorry but webapp doesn't work properly without JavaScript enabled. Please enable it to
+            continue.
+        </strong>
+    </noscript>
+    <div id="app" class="assembly-html-body">
+        <div class="assembly-page">
+            <div class="assembly-page-background">
+            </div>
+            <div class="assembly-grid-item">
+                <div class="assembly-grid-item-content">
+                    <div class="assembly-wrap top-wrap">
+                        <div class="assembly-wrap top-background">
+                        </div>
+                    </div>
+                    <div class="assembly-wrap time-wrap">
+                        <div class="component-element screen-time default component-element">
+                            <div id="timeDiv" class="digital-time time-show">
+                                <!--{{time}}-->
+                            </div>
+                            <div class="digital-date date-show">
+                                <span id="yearSpan" class="date-basic">
+                                    <!--{{ dateObj.year || "&#45;&#45;" }}-->
+                                </span>
+                                <b class="date-basic">
+                                    年
+                                </b>
+                                <span id="monthSpan" class="date-basic">
+                                    <!--{{ dateObj.month || "&#45;&#45;" }}-->
+                                </span>
+                                <b class="date-basic">
+                                    月
+                                </b>
+                                <span id="daySpan" class="date-basic">
+                                    <!--{{ dateObj.day || "&#45;&#45;" }}-->
+                                </span>
+                                <b class="date-basic">
+                                    日
+                                </b>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="assembly-wrap right-wrap">
+                        <div onclick="showMenu()">
+                            <a title="设置" th:id="showMenuA" style="color: #FFFFFF!important;" href="#" id="showMenu">
+                            <i class="fa fa-cog" style="color:#FFFFFF!important;font-size: 30px!important;"></i>
+                            </a>
+                        </div>
+                    </div>
+                    <!-- <div class="assembly-wrap weather-wrap">
+                        <div class="component-element screen-weather default component-element">
+                            <div class="weather-item weather-scale54">
+                                <i class="weather-icon icon-duoyun weather-icon-style"></i>
+                                <div class="weather-text weather-text-style">
+                                    <p>(3月28日)</p>
+                                    <p><span>多云</span><span>10~23℃</span></p>
+                                </div>
+                            </div>
+                            <div class="weather-item weather-scale54 weather-margin-left-54">
+                                <i class="weather-icon icon-duoyun weather-icon-style"></i>
+                                <div class="weather-text weather-text-style">
+                                    <p>(3月29日)</p>
+                                    <p><span>多云</span><span>8~23℃</span></p>
+                                </div>
+                            </div>
+                            <div class="weather-item weather-scale54 weather-margin-left-54">
+                                <i class="weather-icon icon-qing weather-icon-style"></i>
+                                <div class="weather-text weather-text-style">
+                                    <p>(3月30日)</p>
+                                    <p><span>晴</span><span>9~21℃</span></p>
+                                </div>
+                            </div>
+                        </div>
+                    </div> -->
+                    <!--<div class="assembly-wrap top-title-wrap">-->
+                        <!--<span class="component-element">-->
+                            <!--<p><span style="font-size: 32px; color: #ffffff;">&lt;!&ndash;{{companyName}}{{sysName}}&ndash;&gt;</span></p>-->
+                        <!--</span>-->
+                    <!--</div>-->
+                    <div class="assembly-wrap earth-wrap">
+                        <div class="component-element component-custom" style="position: relative;">
+                            <div class="MydhDivOutbox">
+                                <img alt="logo" src="../images/earth.png" id="images">
+                                <img alt="logo" src="../images/earthOneCircle.png" id="images2">
+                                <img alt="logo" src="../images/earthTwoCircle.png" id="images3">
+                            </div>
+                        </div>
+                    </div>
+                    <div class="assembly-wrap earth-text-wrap">
+                        <span class="component-element">
+                            <p class="earth-text-basic">
+                                <span class="earth-text-style"><!--{{companyName}}-->老河口清源供水</span>
+                            </p>
+                            <p class="earth-text-basic">
+                                <span class="earth-text-style"><!--{{sysName}}-->信息管理平台</span>
+                            </p>
+                        </span>
+                    </div>
+
+
+                    <div th:each="dangan:${danganList}" th:class="assembly-wrap+' '+${dangan.className}">
+                        <div class="component-element component-custom" style="position: relative;" >
+                            <div th:if="${dangan!=null}" th:class = "NavLinkContent+${danganStat.count}" th:onclick="opennewpage([[${dangan.danganUrl}]] ,[[${dangan.danganNums} ]]);">
+                            <!--<div class = "'NavLinkConte1nt'">-->
+                                <div class="ShowContent custom-content">
+                                    <div class="LeftPart custom-img"></div><!--暂时不用-->
+                                    <div class="RightPart">
+                                        <div class="RightPart_TopPart" th:text="${dangan.danganName}"><!--{{dangan.danganName}}--></div>
+                                        <div class="RightPart_BottomPart" th:if="${@dict.getLabel('sys_dangan_status', dangan.danganStatus)!=null&&@dict.getLabel('sys_dangan_status', dangan.danganStatus)!=''}" th:text="${@dict.getLabel('sys_dangan_status', dangan.danganStatus)}">
+                                            <!--{{item.introName}}-->
+                                        </div>
+                                    </div>
+                                </div>
+                            </divth>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+
+    </div>
+</body>
+<script type="text/javascript" th:inline="javascript">
+    function initDate() {
+        let date = new Date();
+        let year = date.getFullYear();
+        let month = date.getMonth() + 1;
+        let day = date.getDate();
+        $("#yearSpan").html(year);
+        $("#monthSpan").html(month);
+        $("#daySpan").html(day);
+    }
+    
+    function initTimer() {
+        setInterval(function () {
+            let date = new Date();
+            $("#timeDiv").html(date.toLocaleTimeString());
+        },1000);
+    }
+
+    initDate();
+    initTimer();
+
+    var sessionId = [[${sessionId}]];
+    function opennewpage(url,danganLoginName) {
+
+
+        // window.location.href=url;
+        url = url+"?"+"reqid="+sessionId;
+        console.log(url)
+
+        window.open(url)
+        // console.log(danganLoginName)
+        //
+        // console.log(sessionId)
+
+
+
+    }
+
+    var menuFlag = top.window.tagMenu;
+    function showMenu() {
+        //传入window顶级节点
+        top.window.tagObj();
+        if(!menuFlag){
+            $("#showMenuA").hide();
+        }else{
+            $("#showMenuA").show();
+        }
+    };
+
+    //TODO 监听父级窗口menuFlag变量
+    setInterval(function () {
+        isMenuFlag();
+    },1000);
+    function isMenuFlag() {
+        if(menuFlag){
+            $("#showMenuA").hide();
+        }else{
+            $("#showMenuA").show();
+        }
+    }
+</script>
+</html>

+ 3 - 0
ruoyi-common/src/main/java/com/ruoyi/common/config/ServerConfig.java

@@ -1,6 +1,9 @@
 package com.ruoyi.common.config;
 
 import javax.servlet.http.HttpServletRequest;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
 import com.ruoyi.common.utils.ServletUtils;
 

+ 4 - 4
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysMenu.java

@@ -29,7 +29,7 @@ public class SysMenu extends BaseEntity
     private Long parentId;
 
     /** 显示顺序 */
-    private String orderNum;
+    private Integer orderNum;
 
     /** 菜单URL */
     private String url;
@@ -97,13 +97,13 @@ public class SysMenu extends BaseEntity
         this.parentId = parentId;
     }
 
-    @NotBlank(message = "显示顺序不能为空")
-    public String getOrderNum()
+//    @NotBlank(message = "显示顺序不能为空")
+    public Integer getOrderNum()
     {
         return orderNum;
     }
 
-    public void setOrderNum(String orderNum)
+    public void setOrderNum(Integer orderNum)
     {
         this.orderNum = orderNum;
     }

+ 4 - 4
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysRole.java

@@ -31,7 +31,7 @@ public class SysRole extends BaseEntity
 
     /** 角色排序 */
     @Excel(name = "角色排序", cellType = ColumnType.NUMERIC)
-    private String roleSort;
+    private Integer roleSort;
 
     /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */
     @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限")
@@ -120,13 +120,13 @@ public class SysRole extends BaseEntity
         this.roleKey = roleKey;
     }
 
-    @NotBlank(message = "显示顺序不能为空")
-    public String getRoleSort()
+//    @NotBlank(message = "显示顺序不能为空")
+    public Integer getRoleSort()
     {
         return roleSort;
     }
 
-    public void setRoleSort(String roleSort)
+    public void setRoleSort(Integer roleSort)
     {
         this.roleSort = roleSort;
     }

+ 2 - 2
ruoyi-framework/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java

@@ -120,8 +120,8 @@ public class DataScopeAspect
             }
             else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
             {
-                sqlString.append(StringUtils.format(
-                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
+                  sqlString.append(StringUtils.format(
+                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or {}::VARCHAR = ANY (string_to_array(ancestors, ','))",
                         deptAlias, user.getDeptId(), user.getDeptId()));
             }
             else if (DATA_SCOPE_SELF.equals(dataScope))

+ 1 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java

@@ -284,6 +284,7 @@ public class ShiroConfig
         filterChainDefinitionMap.put("/docs/**", "anon");
         filterChainDefinitionMap.put("/fonts/**", "anon");
         filterChainDefinitionMap.put("/img/**", "anon");
+        filterChainDefinitionMap.put("/images/**", "anon");
         filterChainDefinitionMap.put("/system/forgetPassword/**", "anon");
 
         filterChainDefinitionMap.put("/api/advalidateciphertext/**", "anon");

+ 8 - 3
ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysPasswordService.java

@@ -2,6 +2,8 @@ package com.ruoyi.framework.shiro.service;
 
 import java.util.concurrent.atomic.AtomicInteger;
 import javax.annotation.PostConstruct;
+
+import com.ruoyi.common.utils.ShiroUtils;
 import org.apache.shiro.cache.Cache;
 import org.apache.shiro.cache.CacheManager;
 import org.apache.shiro.crypto.hash.Md5Hash;
@@ -85,9 +87,12 @@ public class SysPasswordService
 
 
     public static void main(String[] args) {
-
-        String s = new Md5Hash("bbccji11a4013f-ef35-4523-9da8-6ca2b963bb03").toHex();
-        System.out.println(s);
+        SysPasswordService passwordService  = new SysPasswordService();
+        String salt = ShiroUtils.randomSalt();
+        System.out.println(salt);
+        String md5Str = passwordService.encryptPassword("testUser2", "Lx990324", "c11950");
+        System.out.println(md5Str);
+        System.out.println("e6fad733dd5713d98b5a5719bfe61c2d".equals(md5Str));
 
     }
 

+ 5 - 5
ruoyi-generator/src/main/resources/mapper/generator/GenTableColumnMapper.xml

@@ -45,7 +45,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		order by ordinal_position
 	</select>
     
-    <insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId">
+    <insert id="insertGenTableColumn" parameterType="GenTableColumn" useGeneratedKeys="true" keyProperty="columnId" keyColumn="column_id">
         insert into gen_table_column (
 			<if test="tableId != null and tableId != ''">table_id,</if>
 			<if test="columnName != null and columnName != ''">column_name,</if>
@@ -85,7 +85,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="dictType != null and dictType != ''">#{dictType},</if>
 			<if test="sort != null">#{sort},</if>
 			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			sysdate()
+            LOCALTIMESTAMP(0)
          )
     </insert>
 	 
@@ -105,20 +105,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             dict_type = #{dictType},
             sort = #{sort},
             update_by = #{updateBy},
-            update_time = sysdate()
+            update_time = LOCALTIMESTAMP(0)
         </set>
         where column_id = #{columnId}
     </update>
 
     <delete id="deleteGenTableColumnByIds" parameterType="Long">
-        delete from gen_table_column where table_id in 
+        delete from gen_table_column where table_id in
         <foreach collection="array" item="tableId" open="(" separator="," close=")">
             #{tableId}
         </foreach>
     </delete>
 
     <delete id="deleteGenTableColumns">
-        delete from gen_table_column where column_id in 
+        delete from gen_table_column where column_id in
         <foreach collection="list" item="item" open="(" separator="," close=")">
             #{item.columnId}
         </foreach>

+ 4 - 4
ruoyi-generator/src/main/resources/mapper/generator/GenTableMapper.xml

@@ -122,7 +122,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		order by c.sort
 	</select>
 	
-	<insert id="insertGenTable" parameterType="GenTable" useGeneratedKeys="true" keyProperty="tableId">
+	<insert id="insertGenTable" parameterType="GenTable" useGeneratedKeys="true" keyProperty="tableId" keyColumn="table_id">
         insert into gen_table (
 			<if test="tableName != null">table_name,</if>
 			<if test="tableComment != null and tableComment != ''">table_comment,</if>
@@ -152,7 +152,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="genPath != null and genPath != ''">#{genPath},</if>
 			<if test="remark != null and remark != ''">#{remark},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
-			sysdate()
+			LOCALTIMESTAMP(0)
          )
     </insert>
 
@@ -179,13 +179,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="options != null and options != ''">options = #{options},</if>
             <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
             <if test="remark != null">remark = #{remark},</if>
-            update_time = sysdate()
+            update_time = LOCALTIMESTAMP(0)
         </set>
         where table_id = #{tableId}
     </update>
     
     <delete id="deleteGenTableByIds" parameterType="Long">
-        delete from gen_table where table_id in 
+        delete from gen_table where table_id in
         <foreach collection="array" item="tableId" open="(" separator="," close=")">
             #{tableId}
         </foreach>

+ 4 - 4
ruoyi-quartz/src/main/resources/mapper/quartz/SysJobLogMapper.xml

@@ -36,10 +36,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 				AND invoke_target like concat('%', #{invokeTarget}, '%')
 			</if>
 			<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-				and date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+				and to_date(create_time,'YY-MM-DD') &gt;= to_date(#{params.beginTime},'YY-MM-DD')
 			</if>
 			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-				and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+				and to_date(create_time,'YY-MM-DD') &lt;= to_date(#{params.endTime},'YY-MM-DD')
 			</if>
 		</where>
 	</select>
@@ -58,7 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  	</delete>
  	
  	<delete id="deleteJobLogByIds" parameterType="String">
- 		delete from sys_job_log where job_log_id in
+ 		delete from sys_job_log where job_log_id::VARCHAR in
  		<foreach collection="array" item="jobLogId" open="(" separator="," close=")">
  			#{jobLogId}
         </foreach> 
@@ -86,7 +86,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="jobMessage != null and jobMessage != ''">#{jobMessage},</if>
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="exceptionInfo != null and exceptionInfo != ''">#{exceptionInfo},</if>
- 			sysdate()
+			LOCALTIMESTAMP(0)
  		)
 	</insert>
 

+ 3 - 3
ruoyi-quartz/src/main/resources/mapper/quartz/SysJobMapper.xml

@@ -75,12 +75,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status !=null">status = #{status},</if>
  			<if test="remark != null and remark != ''">remark = #{remark},</if>
  			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
- 			update_time = sysdate()
+ 			update_time = LOCALTIMESTAMP(0)
  		</set>
  		where job_id = #{jobId}
 	</update>
  	
- 	<insert id="insertJob" parameterType="SysJob" useGeneratedKeys="true" keyProperty="jobId">
+ 	<insert id="insertJob" parameterType="SysJob" useGeneratedKeys="true" keyProperty="jobId" keyColumn="job_id">
  		insert into sys_job(
  			<if test="jobId != null and jobId != 0">job_id,</if>
  			<if test="jobName != null and jobName != ''">job_name,</if>
@@ -104,7 +104,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
- 			sysdate()
+			LOCALTIMESTAMP(0)
  		)
 	</insert>
 

+ 52 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/Dangan.java

@@ -149,6 +149,57 @@ public class Dangan extends BaseEntity
 
     private String filePath;
 
+    @Excel(name = "图标信息")
+    private String iconInfo;
+
+    private Integer ord;
+
+    //图标id
+    private Long iconId;
+
+    private String iconName;
+
+    private String iconPath;
+
+    public Integer getOrd() {
+        return ord;
+    }
+
+    public void setOrd(Integer ord) {
+        this.ord = ord;
+    }
+
+    public Long getIconId() {
+        return iconId;
+    }
+
+    public void setIconId(Long iconId) {
+        this.iconId = iconId;
+    }
+
+    public String getIconName() {
+        return iconName;
+    }
+
+    public void setIconName(String iconName) {
+        this.iconName = iconName;
+    }
+
+    public String getIconPath() {
+        return iconPath;
+    }
+
+    public void setIconPath(String iconPath) {
+        this.iconPath = iconPath;
+    }
+
+    public String getIconInfo() {
+        return iconInfo;
+    }
+
+    public void setIconInfo(String iconInfo) {
+        this.iconInfo = iconInfo;
+    }
 
     public String getDanganNo() {
         return danganNo;
@@ -494,6 +545,7 @@ public class Dangan extends BaseEntity
             .append("chargeUnit", getChargeUnit())
             .append("mode", getMode())
             .append("fileInfo", getFileInfo())
+            .append("iconInfo", getFileInfo())
             .append("createBy", getCreateBy())
             .append("createTime", getCreateTime())
             .append("updateBy", getUpdateBy())

+ 4 - 4
ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java

@@ -30,7 +30,7 @@ public class SysPost extends BaseEntity
 
     /** 岗位排序 */
     @Excel(name = "岗位排序", cellType = ColumnType.NUMERIC)
-    private String postSort;
+    private Integer postSort;
 
     /** 状态(0正常 1停用) */
     @Excel(name = "状态", readConverterExp = "0=正常,1=停用")
@@ -73,13 +73,13 @@ public class SysPost extends BaseEntity
         this.postName = postName;
     }
 
-    @NotBlank(message = "显示顺序不能为空")
-    public String getPostSort()
+//    @NotBlank(message = "显示顺序不能为空")
+    public Integer getPostSort()
     {
         return postSort;
     }
 
-    public void setPostSort(String postSort)
+    public void setPostSort(Integer postSort)
     {
         this.postSort = postSort;
     }

+ 11 - 0
ruoyi-system/src/main/java/com/ruoyi/system/domain/UserRelate.java

@@ -74,6 +74,17 @@ public class UserRelate extends BaseEntity
     private Dangan dangan;
 
 
+    //TODO mainLhk.html 前端渲染用字段
+    private String className;
+
+    public String getClassName() {
+        return className;
+    }
+
+    public void setClassName(String className) {
+        this.className = className;
+    }
+
     public Dangan getDangan() {
         return dangan;
     }

+ 2 - 1
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserOnlineMapper.java

@@ -1,5 +1,6 @@
 package com.ruoyi.system.mapper;
 
+import java.sql.Timestamp;
 import java.util.List;
 import com.ruoyi.system.domain.SysUserOnline;
 
@@ -48,5 +49,5 @@ public interface SysUserOnlineMapper
      * @param lastAccessTime 过期时间
      * @return 会话集合
      */
-    public List<SysUserOnline> selectOnlineByExpired(String lastAccessTime);
+    public List<SysUserOnline> selectOnlineByExpired(Timestamp lastAccessTime);
 }

+ 27 - 0
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/DanganServiceImpl.java

@@ -90,6 +90,11 @@ public class DanganServiceImpl implements IDanganService
             danganFileMapper.deleteFileByDanganId(dangan.getDanganId());
             saveFileInfo(dangan);
         }
+        if(StringUtils.isNotEmpty(dangan.getIconName()) && StringUtils.isNotEmpty(dangan.getIconPath())){
+            //删除以前的附件
+            danganFileMapper.deleteFileByDanganId(dangan.getIconId());
+            saveIconInfo(dangan);
+        }
         return danganMapper.updateDangan(dangan);
     }
 
@@ -142,6 +147,28 @@ public class DanganServiceImpl implements IDanganService
             }
         }
     }
+    //往附件表中添加icon
+    public void saveIconInfo(Dangan dangan){
+        if(StringUtils.isNotEmpty(dangan.getIconName()) && StringUtils.isNotEmpty(dangan.getIconPath())){
+            String[] fileNames = dangan.getIconName().split(",");
+            String[] filePaths = dangan.getIconPath().split(",");
+            if(fileNames.length == filePaths.length){
+                List<DanganFile> fileInfoList = new ArrayList<DanganFile>();
+                for(int i = 0; i < fileNames.length; i++){
+                    DanganFile fileInfo = new DanganFile();
+                    fileInfo.setFileName(fileNames[i]);
+                    fileInfo.setFilePath(filePaths[i]);
+                    fileInfo.setDanganId(dangan.getDanganId());
+                    fileInfoList.add(fileInfo);
+                }
+                if(fileInfoList.size() > 0){
+                    danganFileMapper.batchFileInfo(fileInfoList);
+                }
+            }
+            //修改iconInfo
+            dangan.setIconInfo(dangan.getIconPath());
+        }
+    }
 
     /**
      * 校验名称是否唯一

+ 25 - 4
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java

@@ -3,6 +3,7 @@ package com.ruoyi.system.service.impl;
 import java.util.ArrayList;
 import java.util.List;
 import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.ObjectUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -19,6 +20,7 @@ import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.common.utils.spring.SpringUtils;
 import com.ruoyi.system.mapper.SysDeptMapper;
 import com.ruoyi.system.service.ISysDeptService;
+import org.springframework.util.CollectionUtils;
 
 /**
  * 部门管理 服务实现
@@ -191,15 +193,34 @@ public class SysDeptServiceImpl implements ISysDeptService
      * @return 结果
      */
     @Override
+    @Transactional
     public int insertDept(SysDept dept)
     {
         SysDept info = deptMapper.selectDeptById(dept.getParentId());
         // 如果父节点不为"正常"状态,则不允许新增子节点
-        if (!UserConstants.DEPT_NORMAL.equals(info.getStatus()))
-        {
-            throw new ServiceException("部门停用,不允许新增");
+        if(!ObjectUtils.isEmpty(info)) {
+            if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) {
+                throw new ServiceException("部门停用,不允许新增");
+            }
+        }else{
+            if(ObjectUtils.isEmpty(dept.getParentId())&&ObjectUtils.isEmpty(info)){
+                //说明无选择上级组织的部门
+                dept.setParentId(0L);
+                SysDept infoTip = new SysDept();
+                infoTip.setParentId(0L);
+                infoTip.setDelFlag("0");
+                List<SysDept> infoQuery = deptMapper.selectDeptList(infoTip);
+                if(!CollectionUtils.isEmpty(infoQuery)){
+                    throw new ServiceException("请选择上级机构再新增");
+                }
+            }
+        }
+        if(ObjectUtils.isEmpty(info)){
+            dept.setAncestors("0");
+        }else {
+            dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
         }
-        dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
+//        throw new ServiceException("测试");
         return deptMapper.insertDept(dept);
     }
 

+ 10 - 7
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java

@@ -20,6 +20,7 @@ import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.system.mapper.SysMenuMapper;
 import com.ruoyi.system.mapper.SysRoleMenuMapper;
 import com.ruoyi.system.service.ISysMenuService;
+import org.springframework.util.ObjectUtils;
 
 /**
  * 菜单 业务层处理
@@ -353,10 +354,11 @@ public class SysMenuServiceImpl implements ISysMenuService
         {
             SysMenu t = (SysMenu) iterator.next();
             // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
-            if (t.getParentId() == parentId)
-            {
-                recursionFn(list, t);
-                returnList.add(t);
+            if(!ObjectUtils.isEmpty(t.getParentId())) {
+                if (t.getParentId() == parentId) {
+                    recursionFn(list, t);
+                    returnList.add(t);
+                }
             }
         }
         return returnList;
@@ -392,9 +394,10 @@ public class SysMenuServiceImpl implements ISysMenuService
         while (it.hasNext())
         {
             SysMenu n = (SysMenu) it.next();
-            if (n.getParentId().longValue() == t.getMenuId().longValue())
-            {
-                tlist.add(n);
+            if(!ObjectUtils.isEmpty(n.getParentId())&&!ObjectUtils.isEmpty(t.getMenuId())) {
+                if (n.getParentId().longValue() == t.getMenuId().longValue()) {
+                    tlist.add(n);
+                }
             }
         }
         return tlist;

+ 2 - 1
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ruoyi.system.service.impl;
 
 import java.io.Serializable;
+import java.sql.Timestamp;
 import java.util.Date;
 import java.util.Deque;
 import java.util.List;
@@ -136,6 +137,6 @@ public class SysUserOnlineServiceImpl implements ISysUserOnlineService
     public List<SysUserOnline> selectOnlineByExpired(Date expiredDate)
     {
         String lastAccessTime = DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, expiredDate);
-        return userOnlineDao.selectOnlineByExpired(lastAccessTime);
+        return userOnlineDao.selectOnlineByExpired(Timestamp.valueOf(lastAccessTime));
     }
 }

+ 2 - 2
ruoyi-system/src/main/resources/mapper/system/ApplyChildMapper.xml

@@ -35,7 +35,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where ac.child_id = #{childId}
     </select>
         
-    <insert id="insertApplyChild" parameterType="ApplyChild" useGeneratedKeys="true" keyProperty="childId">
+    <insert id="insertApplyChild" parameterType="ApplyChild" useGeneratedKeys="true" keyProperty="childId" keyColumn="child_id">
         insert into sys_apply_child
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="applyId != null">apply_id,</if>
@@ -70,7 +70,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteApplyChildByIds" parameterType="String">
-        delete from sys_apply_child where child_id in 
+        delete from sys_apply_child where child_id::VARCHAR in
         <foreach item="childId" collection="array" open="(" separator="," close=")">
             #{childId}
         </foreach>

+ 4 - 4
ruoyi-system/src/main/resources/mapper/system/ApplyMapper.xml

@@ -38,10 +38,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="dealStatus != null  and dealStatus != ''"> and a.deal_status = #{dealStatus}</if>
             <if test="status != null  and status != ''"> and a.status = #{status}</if>
             <if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
-                AND date_format(a.apply_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+                AND to_date(a.apply_time,'YY-MM-DD') &gt;= to_date(#{params.beginTime},'YY-MM-DD')
             </if>
             <if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
-                AND date_format(a.apply_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+                AND to_date(a.apply_time,'YY-MM-DD') &lt;= to_date(#{params.endTime},'YY-MM-DD')
             </if>
         </where>
     </select>
@@ -51,7 +51,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where a.apply_id = #{applyId}
     </select>
         
-    <insert id="insertApply" parameterType="Apply" useGeneratedKeys="true" keyProperty="applyId">
+    <insert id="insertApply" parameterType="Apply" useGeneratedKeys="true" keyProperty="applyId" keyColumn="apply_id">
         insert into sys_apply
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="userId != null">user_id,</if>
@@ -101,7 +101,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteApplyByIds" parameterType="String">
-        delete from sys_apply where apply_id in 
+        delete from sys_apply where apply_id::VARCHAR in
         <foreach item="applyId" collection="array" open="(" separator="," close=")">
             #{applyId}
         </foreach>

+ 2 - 2
ruoyi-system/src/main/resources/mapper/system/DanganFileMapper.xml

@@ -29,7 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where file_id = #{fileId}
     </select>
         
-    <insert id="insertDanganFile" parameterType="DanganFile" useGeneratedKeys="true" keyProperty="fileId">
+    <insert id="insertDanganFile" parameterType="DanganFile" useGeneratedKeys="true" keyProperty="fileId" keyColumn="file_id">
         insert into sys_dangan_file
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="fileName != null">file_name,</if>
@@ -63,7 +63,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
 
     <delete id="deleteDanganFileByIds" parameterType="String">
-        delete from sys_dangan_file where file_id in 
+        delete from sys_dangan_file where file_id::VARCHAR in
         <foreach item="fileId" collection="array" open="(" separator="," close=")">
             #{fileId}
         </foreach>

+ 13 - 3
ruoyi-system/src/main/resources/mapper/system/DanganMapper.xml

@@ -39,18 +39,20 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="chargeUnit"    column="charge_unit"    />
         <result property="mode"    column="mode"    />
         <result property="fileInfo"    column="file_info"    />
+        <result property="iconInfo"    column="icon_info"    />
         <result property="createBy"    column="create_by"    />
         <result property="createTime"    column="create_time"    />
         <result property="updateBy"    column="update_by"    />
         <result property="updateTime"    column="update_time"    />
         <result property="remark"    column="remark"    />
+        <result property="ord"    column="ord"    />
     </resultMap>
 
     <sql id="selectDanganVo">
         select dangan_id,
         key_id,
         dangan_no,dangan_name, status,
-         sys_person, file_type, model, project_id, brand, run_device_id, relate_device_id, maintain_item_id, factory_time, project_time, use_unit, medium, maintain_time, page_address, test_address, build_factory, build_factory_time, factory_person, factory_person_phone, language, server_ip, server_location, server_info, server_based_yes_no, ops_person, charge_unit, mode, file_info, create_by, create_time, update_by, update_time, remark from sys_dangan
+         sys_person, file_type, model, project_id, brand, run_device_id, relate_device_id, maintain_item_id, factory_time, project_time, use_unit, medium, maintain_time, page_address, test_address, build_factory, build_factory_time, factory_person, factory_person_phone, language, server_ip, server_location, server_info, server_based_yes_no, ops_person, charge_unit, mode, file_info,icon_info, create_by, create_time, update_by, update_time, remark,ord from sys_dangan
     </sql>
 
     <select id="selectDanganList" parameterType="Dangan" resultMap="DanganResult">
@@ -89,6 +91,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="chargeUnit != null  and chargeUnit != ''"> and charge_unit = #{chargeUnit}</if>
             <if test="mode != null  and mode != ''"> and mode = #{mode}</if>
             <if test="fileInfo != null  and fileInfo != ''"> and file_info = #{fileInfo}</if>
+            <if test="iconInfo != null  and iconInfo != ''"> and icon_info = #{iconInfo}</if>
+            <if test="ord != null  and ord != ''"> and ord = #{ord}</if>
         </where>
     </select>
     
@@ -97,7 +101,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where dangan_id = #{danganId}
     </select>
         
-    <insert id="insertDangan" parameterType="Dangan" useGeneratedKeys="true" keyProperty="danganId">
+    <insert id="insertDangan" parameterType="Dangan" useGeneratedKeys="true" keyProperty="danganId" keyColumn="dangan_id">
         insert into sys_dangan
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="danganName != null">dangan_name,</if>
@@ -133,11 +137,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="chargeUnit != null">charge_unit,</if>
             <if test="mode != null">mode,</if>
             <if test="fileInfo != null">file_info,</if>
+            <if test="iconInfo != null">icon_info,</if>
             <if test="createBy != null">create_by,</if>
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
             <if test="remark != null">remark,</if>
+            <if test="ord != null">ord,</if>
          </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="danganName != null">#{danganName},</if>
@@ -173,11 +179,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="chargeUnit != null">#{chargeUnit},</if>
             <if test="mode != null">#{mode},</if>
             <if test="fileInfo != null">#{fileInfo},</if>
+            <if test="iconInfo != null">#{iconInfo},</if>
             <if test="createBy != null">#{createBy},</if>
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
             <if test="remark != null">#{remark},</if>
+            <if test="ord != null">#{ord},</if>
          </trim>
     </insert>
 
@@ -217,11 +225,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="chargeUnit != null">charge_unit = #{chargeUnit},</if>
             <if test="mode != null">mode = #{mode},</if>
             <if test="fileInfo != null">file_info = #{fileInfo},</if>
+            <if test="iconInfo != null">icon_info = #{iconInfo},</if>
             <if test="createBy != null">create_by = #{createBy},</if>
             <if test="createTime != null">create_time = #{createTime},</if>
             <if test="updateBy != null">update_by = #{updateBy},</if>
             <if test="updateTime != null">update_time = #{updateTime},</if>
             <if test="remark != null">remark = #{remark},</if>
+            <if test="ord != null">ord = #{ord},</if>
         </trim>
         where dangan_id = #{danganId}
     </update>
@@ -231,7 +241,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteDanganByIds" parameterType="String">
-        delete from sys_dangan where dangan_id in
+        delete from sys_dangan where dangan_id::VARCHAR in
         <foreach item="danganId" collection="array" open="(" separator="," close=")">
             #{danganId}
         </foreach>

+ 2 - 2
ruoyi-system/src/main/resources/mapper/system/FeedbackFileMapper.xml

@@ -29,7 +29,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         where file_id = #{fileId}
     </select>
         
-    <insert id="insertFeedbackFile" parameterType="FeedbackFile" useGeneratedKeys="true" keyProperty="fileId">
+    <insert id="insertFeedbackFile" parameterType="FeedbackFile" useGeneratedKeys="true" keyProperty="fileId" keyColumn="file_id">
         insert into sys_feedback_file
         <trim prefix="(" suffix=")" suffixOverrides=",">
             <if test="fileName != null">file_name,</if>
@@ -58,7 +58,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </delete>
 
     <delete id="deleteFeedbackFileByIds" parameterType="String">
-        delete from sys_feedback_file where file_id in 
+        delete from sys_feedback_file where file_id::VARCHAR in
         <foreach item="fileId" collection="array" open="(" separator="," close=")">
             #{fileId}
         </foreach>

+ 0 - 0
ruoyi-system/src/main/resources/mapper/system/FeedbackMapper.xml


Неке датотеке нису приказане због велике количине промена