Explorar o código

伊宁项目更改相关 统一app增加登录接口 增加阿里icon库

1037015548@qq.com hai 1 ano
pai
achega
fa9838108b

+ 157 - 2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -2,14 +2,26 @@ package com.ruoyi.web.controller.system;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import com.alibaba.fastjson.JSONObject;
+import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.common.exception.user.*;
+import com.ruoyi.common.json.JSON;
+import com.ruoyi.framework.shiro.service.SysLoginService;
+import com.ruoyi.system.domain.Dangan;
+import com.ruoyi.system.domain.UserRelate;
+import com.ruoyi.system.service.IDanganService;
+import com.ruoyi.system.service.ISysUserService;
+import com.ruoyi.system.service.IUserRelateService;
 import org.apache.shiro.SecurityUtils;
-import org.apache.shiro.authc.AuthenticationException;
-import org.apache.shiro.authc.UsernamePasswordToken;
+import org.apache.shiro.authc.*;
 import org.apache.shiro.subject.Subject;
 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.PostMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
@@ -20,6 +32,15 @@ import com.ruoyi.common.utils.ServletUtils;
 import com.ruoyi.common.utils.StringUtils;
 import com.ruoyi.framework.web.service.ConfigService;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * 登录验证
  * 
@@ -79,6 +100,140 @@ public class SysLoginController extends BaseController
         }
     }
 
+    @Autowired
+    private ISysUserService userService;
+
+    @Autowired
+    private IUserRelateService userRelateService;
+
+    @Autowired
+    private IDanganService danganService;
+
+    @Autowired
+    private SysLoginService loginService;
+
+    /**
+     * 获取request中的body流数据
+     * 注意:request中的流数据只能读取一次,读取之后request中的流数据将为空
+     * @param request
+     * @return
+     */
+    public static String getJsonBodyStr(HttpServletRequest request){
+        BufferedReader reader = null;
+        InputStream inputStream = null;
+        StringBuilder sb = new StringBuilder();
+        try {
+            inputStream = request.getInputStream();
+            reader = new BufferedReader(new InputStreamReader(inputStream, Charset.forName("UTF-8")));
+            String line = "";
+            while ((line = reader.readLine()) != null) {
+                sb.append(line);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            if (inputStream != null) {
+                try {
+                    inputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+            if (reader != null) {
+                try {
+                    reader.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+        return sb.toString();
+    }
+
+    @PostMapping("/loginApp")
+    @ResponseBody
+    public AjaxResult loginApp(HttpServletRequest request)
+    {
+        final String strJsonBody = getJsonBodyStr(request);
+        JSONObject jo = JSONObject.parseObject(strJsonBody);
+        String username = jo.getString("username");
+        String password = jo.getString("password");
+        UsernamePasswordToken token = new UsernamePasswordToken(username, password, rememberMe);
+        Subject subject = SecurityUtils.getSubject();
+        try
+        {
+            SysUser user;
+            try
+            {
+                user = loginService.loginApp(username, password);
+            }
+            catch (CaptchaException e)
+            {
+                throw new AuthenticationException(e.getMessage(), e);
+            }
+            catch (UserNotExistsException e)
+            {
+                throw new UnknownAccountException(e.getMessage(), e);
+            }
+            catch (UserPasswordNotMatchException e)
+            {
+                throw new IncorrectCredentialsException(e.getMessage(), e);
+            }
+            catch (UserPasswordRetryLimitExceedException e)
+            {
+                throw new ExcessiveAttemptsException(e.getMessage(), e);
+            }
+            catch (UserBlockedException e)
+            {
+                throw new LockedAccountException(e.getMessage(), e);
+            }
+            catch (RoleBlockedException e)
+            {
+                throw new LockedAccountException(e.getMessage(), e);
+            }
+            catch (Exception e)
+            {
+                logger.info("APP对用户[" + username + "]进行登录验证..验证未通过{}", e.getMessage());
+                throw new AuthenticationException(e.getMessage(), e);
+            }
+            //TODO 查询当前登录用户所有的档案信息
+            if(user!=null) {
+                UserRelate userRelate = new UserRelate();
+                userRelate.setUserId(user.getUserId());
+                List<UserRelate> userRelates = userRelateService.selectUserRelateList(userRelate);
+                List<Dangan> danganList = new ArrayList<>();
+                if(!CollectionUtils.isEmpty(userRelates)) {
+                    for (UserRelate relate : userRelates) {
+                        Dangan dangan = danganService.selectDanganById(relate.getDanganId());
+                        if (!ObjectUtils.isEmpty(dangan)) {
+                            dangan.setDanganLoginName(relate.getDanganLoginName());
+                            danganList.add(dangan);
+                        }
+                    }
+                }
+                List<Dangan> danganListApp = danganList.stream().filter(r -> r.getApplyType()!=-1).collect(Collectors.toList());
+                JSONObject jsonObject = new JSONObject();
+                jsonObject.put("userInfo",user);
+                jsonObject.put("danganList",danganListApp);
+                return success(jsonObject.toJSONString());
+            }
+            return success();
+        }catch (AuthenticationException e)
+        {
+            String msg = "用户或密码错误";
+            if (StringUtils.isNotEmpty(e.getMessage()))
+            {
+                msg = e.getMessage();
+            }
+            return error(msg);
+        }
+        catch (Exception e)
+        {
+            return error(e.getMessage());
+        }
+
+    }
+
     @GetMapping("/unauth")
     public String unauth()
     {

+ 76 - 0
ruoyi-admin/src/main/java/com/ruoyi/web/util/ParseMD5.java

@@ -0,0 +1,76 @@
+package com.ruoyi.web.util;
+
+/**
+ * @ClassName ParseMD5
+ * @Description: TODO
+ * @Author LX
+ * @Date 2023/6/27
+ * @Version V1.0
+ **/
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * 将字符串转换为MD5
+ */
+public class ParseMD5 {
+
+    private final static String mStrClassName = "ParseMD5";
+    private final static String EMPTY_NULL = "NULL";
+
+    private static final Logger sys_error_logger = LoggerFactory.getLogger("sys-error");
+
+    public static String parseStrToMd5L32(String str) {
+        // 将字符串转换为32位小写MD5
+        String reStr = null;
+        try {
+            MessageDigest md5 = MessageDigest.getInstance("MD5");
+            byte[] bytes = md5.digest(str.getBytes());
+            StringBuffer stringBuffer = new StringBuffer();
+            for (byte b : bytes) {
+                int bt = b&0xff;
+                if (bt < 16) {
+                    stringBuffer.append(0);
+                }
+                stringBuffer.append(Integer.toHexString(bt));
+            }
+            reStr = stringBuffer.toString();
+        } catch (NoSuchAlgorithmException e) {
+            sys_error_logger.error(String.format(mStrClassName+" errorMsg: %s====>"
+                    ,e.getLocalizedMessage()));
+        }
+        return reStr;
+    }
+
+    // 将字符串转换为32位大写的MD5
+    public static String parseStrToMd5U32(String str) {
+        String reStr = parseStrToMd5L32(str);
+        if (reStr != null) {
+            reStr = reStr.toUpperCase();
+        }
+        return reStr;
+    }
+
+    // 将字符串转换为16位小写的MD5
+    public static String parseStrToMd5L16(String str) {
+        String reStr = parseStrToMd5L32(str);
+        if (reStr != null) {
+            reStr = reStr.substring(8, 24);
+        }
+        return reStr;
+    }
+
+    // 将字符串转换为16位大写的MD5
+    public static String parseStrToMd5U16(String str) {
+        String reStr = parseStrToMd5L32(str);
+        if (reStr != null) {
+            reStr = reStr.toUpperCase().substring(8, 24);
+        }
+        return reStr;
+    }
+}
+

+ 539 - 0
ruoyi-admin/src/main/resources/static/aliicon/demo.css

@@ -0,0 +1,539 @@
+/* Logo 字体 */
+@font-face {
+  font-family: "iconfont logo";
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834');
+  src: url('https://at.alicdn.com/t/font_985780_km7mi63cihi.eot?t=1545807318834#iefix') format('embedded-opentype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.woff?t=1545807318834') format('woff'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.ttf?t=1545807318834') format('truetype'),
+    url('https://at.alicdn.com/t/font_985780_km7mi63cihi.svg?t=1545807318834#iconfont') format('svg');
+}
+
+.logo {
+  font-family: "iconfont logo";
+  font-size: 160px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+/* tabs */
+.nav-tabs {
+  position: relative;
+}
+
+.nav-tabs .nav-more {
+  position: absolute;
+  right: 0;
+  bottom: 0;
+  height: 42px;
+  line-height: 42px;
+  color: #666;
+}
+
+#tabs {
+  border-bottom: 1px solid #eee;
+}
+
+#tabs li {
+  cursor: pointer;
+  width: 100px;
+  height: 40px;
+  line-height: 40px;
+  text-align: center;
+  font-size: 16px;
+  border-bottom: 2px solid transparent;
+  position: relative;
+  z-index: 1;
+  margin-bottom: -1px;
+  color: #666;
+}
+
+
+#tabs .active {
+  border-bottom-color: #f00;
+  color: #222;
+}
+
+.tab-container .content {
+  display: none;
+}
+
+/* 页面布局 */
+.main {
+  padding: 30px 100px;
+  width: 960px;
+  margin: 0 auto;
+}
+
+.main .logo {
+  color: #333;
+  text-align: left;
+  margin-bottom: 30px;
+  line-height: 1;
+  height: 110px;
+  margin-top: -50px;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.main .logo a {
+  font-size: 160px;
+  color: #333;
+}
+
+.helps {
+  margin-top: 40px;
+}
+
+.helps pre {
+  padding: 20px;
+  margin: 10px 0;
+  border: solid 1px #e7e1cd;
+  background-color: #fffdef;
+  overflow: auto;
+}
+
+.icon_lists {
+  width: 100% !important;
+  overflow: hidden;
+  *zoom: 1;
+}
+
+.icon_lists li {
+  width: 100px;
+  margin-bottom: 10px;
+  margin-right: 20px;
+  text-align: center;
+  list-style: none !important;
+  cursor: default;
+}
+
+.icon_lists li .code-name {
+  line-height: 1.2;
+}
+
+.icon_lists .icon {
+  display: block;
+  height: 100px;
+  line-height: 100px;
+  font-size: 42px;
+  margin: 10px auto;
+  color: #333;
+  -webkit-transition: font-size 0.25s linear, width 0.25s linear;
+  -moz-transition: font-size 0.25s linear, width 0.25s linear;
+  transition: font-size 0.25s linear, width 0.25s linear;
+}
+
+.icon_lists .icon:hover {
+  font-size: 100px;
+}
+
+.icon_lists .svg-icon {
+  /* 通过设置 font-size 来改变图标大小 */
+  width: 1em;
+  /* 图标和文字相邻时,垂直对齐 */
+  vertical-align: -0.15em;
+  /* 通过设置 color 来改变 SVG 的颜色/fill */
+  fill: currentColor;
+  /* path 和 stroke 溢出 viewBox 部分在 IE 下会显示
+      normalize.css 中也包含这行 */
+  overflow: hidden;
+}
+
+.icon_lists li .name,
+.icon_lists li .code-name {
+  color: #666;
+}
+
+/* markdown 样式 */
+.markdown {
+  color: #666;
+  font-size: 14px;
+  line-height: 1.8;
+}
+
+.highlight {
+  line-height: 1.5;
+}
+
+.markdown img {
+  vertical-align: middle;
+  max-width: 100%;
+}
+
+.markdown h1 {
+  color: #404040;
+  font-weight: 500;
+  line-height: 40px;
+  margin-bottom: 24px;
+}
+
+.markdown h2,
+.markdown h3,
+.markdown h4,
+.markdown h5,
+.markdown h6 {
+  color: #404040;
+  margin: 1.6em 0 0.6em 0;
+  font-weight: 500;
+  clear: both;
+}
+
+.markdown h1 {
+  font-size: 28px;
+}
+
+.markdown h2 {
+  font-size: 22px;
+}
+
+.markdown h3 {
+  font-size: 16px;
+}
+
+.markdown h4 {
+  font-size: 14px;
+}
+
+.markdown h5 {
+  font-size: 12px;
+}
+
+.markdown h6 {
+  font-size: 12px;
+}
+
+.markdown hr {
+  height: 1px;
+  border: 0;
+  background: #e9e9e9;
+  margin: 16px 0;
+  clear: both;
+}
+
+.markdown p {
+  margin: 1em 0;
+}
+
+.markdown>p,
+.markdown>blockquote,
+.markdown>.highlight,
+.markdown>ol,
+.markdown>ul {
+  width: 80%;
+}
+
+.markdown ul>li {
+  list-style: circle;
+}
+
+.markdown>ul li,
+.markdown blockquote ul>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown>ul li p,
+.markdown>ol li p {
+  margin: 0.6em 0;
+}
+
+.markdown ol>li {
+  list-style: decimal;
+}
+
+.markdown>ol li,
+.markdown blockquote ol>li {
+  margin-left: 20px;
+  padding-left: 4px;
+}
+
+.markdown code {
+  margin: 0 3px;
+  padding: 0 5px;
+  background: #eee;
+  border-radius: 3px;
+}
+
+.markdown strong,
+.markdown b {
+  font-weight: 600;
+}
+
+.markdown>table {
+  border-collapse: collapse;
+  border-spacing: 0px;
+  empty-cells: show;
+  border: 1px solid #e9e9e9;
+  width: 95%;
+  margin-bottom: 24px;
+}
+
+.markdown>table th {
+  white-space: nowrap;
+  color: #333;
+  font-weight: 600;
+}
+
+.markdown>table th,
+.markdown>table td {
+  border: 1px solid #e9e9e9;
+  padding: 8px 16px;
+  text-align: left;
+}
+
+.markdown>table th {
+  background: #F7F7F7;
+}
+
+.markdown blockquote {
+  font-size: 90%;
+  color: #999;
+  border-left: 4px solid #e9e9e9;
+  padding-left: 0.8em;
+  margin: 1em 0;
+}
+
+.markdown blockquote p {
+  margin: 0;
+}
+
+.markdown .anchor {
+  opacity: 0;
+  transition: opacity 0.3s ease;
+  margin-left: 8px;
+}
+
+.markdown .waiting {
+  color: #ccc;
+}
+
+.markdown h1:hover .anchor,
+.markdown h2:hover .anchor,
+.markdown h3:hover .anchor,
+.markdown h4:hover .anchor,
+.markdown h5:hover .anchor,
+.markdown h6:hover .anchor {
+  opacity: 1;
+  display: inline-block;
+}
+
+.markdown>br,
+.markdown>p>br {
+  clear: both;
+}
+
+
+.hljs {
+  display: block;
+  background: white;
+  padding: 0.5em;
+  color: #333333;
+  overflow-x: auto;
+}
+
+.hljs-comment,
+.hljs-meta {
+  color: #969896;
+}
+
+.hljs-string,
+.hljs-variable,
+.hljs-template-variable,
+.hljs-strong,
+.hljs-emphasis,
+.hljs-quote {
+  color: #df5000;
+}
+
+.hljs-keyword,
+.hljs-selector-tag,
+.hljs-type {
+  color: #a71d5d;
+}
+
+.hljs-literal,
+.hljs-symbol,
+.hljs-bullet,
+.hljs-attribute {
+  color: #0086b3;
+}
+
+.hljs-section,
+.hljs-name {
+  color: #63a35c;
+}
+
+.hljs-tag {
+  color: #333333;
+}
+
+.hljs-title,
+.hljs-attr,
+.hljs-selector-id,
+.hljs-selector-class,
+.hljs-selector-attr,
+.hljs-selector-pseudo {
+  color: #795da3;
+}
+
+.hljs-addition {
+  color: #55a532;
+  background-color: #eaffea;
+}
+
+.hljs-deletion {
+  color: #bd2c00;
+  background-color: #ffecec;
+}
+
+.hljs-link {
+  text-decoration: underline;
+}
+
+/* 代码高亮 */
+/* PrismJS 1.15.0
+https://prismjs.com/download.html#themes=prism&languages=markup+css+clike+javascript */
+/**
+ * prism.js default theme for JavaScript, CSS and HTML
+ * Based on dabblet (http://dabblet.com)
+ * @author Lea Verou
+ */
+code[class*="language-"],
+pre[class*="language-"] {
+  color: black;
+  background: none;
+  text-shadow: 0 1px white;
+  font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace;
+  text-align: left;
+  white-space: pre;
+  word-spacing: normal;
+  word-break: normal;
+  word-wrap: normal;
+  line-height: 1.5;
+
+  -moz-tab-size: 4;
+  -o-tab-size: 4;
+  tab-size: 4;
+
+  -webkit-hyphens: none;
+  -moz-hyphens: none;
+  -ms-hyphens: none;
+  hyphens: none;
+}
+
+pre[class*="language-"]::-moz-selection,
+pre[class*="language-"] ::-moz-selection,
+code[class*="language-"]::-moz-selection,
+code[class*="language-"] ::-moz-selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+pre[class*="language-"]::selection,
+pre[class*="language-"] ::selection,
+code[class*="language-"]::selection,
+code[class*="language-"] ::selection {
+  text-shadow: none;
+  background: #b3d4fc;
+}
+
+@media print {
+
+  code[class*="language-"],
+  pre[class*="language-"] {
+    text-shadow: none;
+  }
+}
+
+/* Code blocks */
+pre[class*="language-"] {
+  padding: 1em;
+  margin: .5em 0;
+  overflow: auto;
+}
+
+:not(pre)>code[class*="language-"],
+pre[class*="language-"] {
+  background: #f5f2f0;
+}
+
+/* Inline code */
+:not(pre)>code[class*="language-"] {
+  padding: .1em;
+  border-radius: .3em;
+  white-space: normal;
+}
+
+.token.comment,
+.token.prolog,
+.token.doctype,
+.token.cdata {
+  color: slategray;
+}
+
+.token.punctuation {
+  color: #999;
+}
+
+.namespace {
+  opacity: .7;
+}
+
+.token.property,
+.token.tag,
+.token.boolean,
+.token.number,
+.token.constant,
+.token.symbol,
+.token.deleted {
+  color: #905;
+}
+
+.token.selector,
+.token.attr-name,
+.token.string,
+.token.char,
+.token.builtin,
+.token.inserted {
+  color: #690;
+}
+
+.token.operator,
+.token.entity,
+.token.url,
+.language-css .token.string,
+.style .token.string {
+  color: #9a6e3a;
+  background: hsla(0, 0%, 100%, .5);
+}
+
+.token.atrule,
+.token.attr-value,
+.token.keyword {
+  color: #07a;
+}
+
+.token.function,
+.token.class-name {
+  color: #DD4A68;
+}
+
+.token.regex,
+.token.important,
+.token.variable {
+  color: #e90;
+}
+
+.token.important,
+.token.bold {
+  font-weight: bold;
+}
+
+.token.italic {
+  font-style: italic;
+}
+
+.token.entity {
+  cursor: help;
+}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 3017 - 0
ruoyi-admin/src/main/resources/static/aliicon/demo_index.html


+ 507 - 0
ruoyi-admin/src/main/resources/static/aliicon/iconfont.css

@@ -0,0 +1,507 @@
+@font-face {
+  font-family: "iconfont"; /* Project id 3257556 */
+  src: url('iconfont.woff2?t=1699500449017') format('woff2'),
+       url('iconfont.woff?t=1699500449017') format('woff'),
+       url('iconfont.ttf?t=1699500449017') format('truetype');
+}
+
+.iconfont {
+  font-family: "iconfont" !important;
+  font-size: 16px;
+  font-style: normal;
+  -webkit-font-smoothing: antialiased;
+  -moz-osx-font-smoothing: grayscale;
+}
+
+.icona-icon_qa:before {
+  content: "\e670";
+}
+
+.iconicon_picture:before {
+  content: "\e671";
+}
+
+.iconicon_mapmark:before {
+  content: "\e672";
+}
+
+.iconicon_closeup:before {
+  content: "\e673";
+}
+
+.iconicon_location:before {
+  content: "\e674";
+}
+
+.iconicon_done:before {
+  content: "\e675";
+}
+
+.iconicon_wrapper:before {
+  content: "\e677";
+}
+
+.iconicon_pulldown1:before {
+  content: "\e678";
+}
+
+.iconicon_warning:before {
+  content: "\e679";
+}
+
+.iconicon_close:before {
+  content: "\e67a";
+}
+
+.iconicon_air:before {
+  content: "\e66c";
+}
+
+.iconicon_search:before {
+  content: "\e66d";
+}
+
+.iconicon_calendar:before {
+  content: "\e66e";
+}
+
+.iconicon_water:before {
+  content: "\e66f";
+}
+
+.iconicon_sort:before {
+  content: "\e620";
+}
+
+.iconicon_exhaust_valve:before {
+  content: "\e66a";
+}
+
+.iconicon_manhole:before {
+  content: "\e66b";
+}
+
+.iconicon_reducer:before {
+  content: "\e659";
+}
+
+.iconicon_backflow_preventer:before {
+  content: "\e65c";
+}
+
+.iconicon_press_relief_valve:before {
+  content: "\e65d";
+}
+
+.iconicon_fire_hydrant:before {
+  content: "\e65e";
+}
+
+.iconicon_press_adjust_valve:before {
+  content: "\e65f";
+}
+
+.iconicon_valve:before {
+  content: "\e661";
+}
+
+.iconicon_meter:before {
+  content: "\e662";
+}
+
+.iconicon_contro_lvalve:before {
+  content: "\e663";
+}
+
+.iconicon_drain_valve:before {
+  content: "\e664";
+}
+
+.iconicon_supply_pump:before {
+  content: "\e666";
+}
+
+.iconicon_pipe:before {
+  content: "\e667";
+}
+
+.iconicon_material:before {
+  content: "\e668";
+}
+
+.iconicon_booster_pump:before {
+  content: "\e669";
+}
+
+.iconicon_next:before {
+  content: "\e654";
+}
+
+.iconicon_pulldown:before {
+  content: "\e655";
+}
+
+.iconicon_minus:before {
+  content: "\e660";
+}
+
+.iconerweima:before {
+  content: "\e61e";
+}
+
+.iconbimgis_shuxing:before {
+  content: "\e6f4";
+}
+
+.icondili:before {
+  content: "\e65b";
+}
+
+.iconcolum-height:before {
+  content: "\eafe";
+}
+
+.iconyali:before {
+  content: "\ea2d";
+}
+
+.iconyinhuan:before {
+  content: "\e61b";
+}
+
+.icona-ziyuan545:before {
+  content: "\e78d";
+}
+
+.icona-ziyuan546:before {
+  content: "\e78e";
+}
+
+.iconjiekouguanli:before {
+  content: "\e61a";
+}
+
+.iconweixiu:before {
+  content: "\e636";
+}
+
+.iconkoujing:before {
+  content: "\e619";
+}
+
+.icongis_shendujiancetoushi:before {
+  content: "\e70f";
+}
+
+.icongis-jd-jiedian:before {
+  content: "\e629";
+}
+
+.iconname:before {
+  content: "\e6b4";
+}
+
+.iconmaidian:before {
+  content: "\e7be";
+}
+
+.iconmeasure:before {
+  content: "\e60d";
+}
+
+.icondaolu:before {
+  content: "\e796";
+}
+
+.iconcaizhi:before {
+  content: "\e647";
+}
+
+.iconguanxianchangdu:before {
+  content: "\e6cc";
+}
+
+.iconunlocked:before {
+  content: "\eb7a";
+}
+
+.iconlocked:before {
+  content: "\eb7b";
+}
+
+.icontongji:before {
+  content: "\e609";
+}
+
+.iconclosecha:before {
+  content: "\e618";
+}
+
+.iconzhuanzhang:before {
+  content: "\e63a";
+}
+
+.iconhuizhiguiji:before {
+  content: "\e606";
+}
+
+.iconyuanxingweixuanzhong:before {
+  content: "\e72f";
+}
+
+.iconyuanxingxuanzhong:before {
+  content: "\e731";
+}
+
+.icondizhi1:before {
+  content: "\e614";
+}
+
+.icona-pingjiashoucang:before {
+  content: "\e6ae";
+}
+
+.iconzhengpinbaozhangduigou:before {
+  content: "\e628";
+}
+
+.icongantanhao-xianxingyuankuang:before {
+  content: "\e8ec";
+}
+
+.iconshouqi:before {
+  content: "\e786";
+}
+
+.iconshanchu:before {
+  content: "\e60f";
+}
+
+.iconsaoma:before {
+  content: "\e615";
+}
+
+.iconshouqi1-copy:before {
+  content: "\e937";
+}
+
+.iconxiangji:before {
+  content: "\e61d";
+}
+
+.icon31dingwei:before {
+  content: "\e602";
+}
+
+.iconluyin:before {
+  content: "\e603";
+}
+
+.iconshanchuguanbicha:before {
+  content: "\e809";
+}
+
+.iconfanhui:before {
+  content: "\e607";
+}
+
+.icontuihui:before {
+  content: "\e723";
+}
+
+.iconwenti:before {
+  content: "\e645";
+}
+
+.iconcangpeitubiao_querenrukuquerenchukuquerenpandianjieguo:before {
+  content: "\e616";
+}
+
+.iconjiahao:before {
+  content: "\e626";
+}
+
+.iconjianhao:before {
+  content: "\e608";
+}
+
+.iconjiaqileixing:before {
+  content: "\e627";
+}
+
+.iconcebanjing:before {
+  content: "\e634";
+}
+
+.iconshujufanwei:before {
+  content: "\e676";
+}
+
+.iconbianji:before {
+  content: "\e617";
+}
+
+.iconjianshao:before {
+  content: "\e8b1";
+}
+
+.iconchangshangguanli:before {
+  content: "\e621";
+}
+
+.iconnfc:before {
+  content: "\e707";
+}
+
+.icontablerefresh:before {
+  content: "\e61c";
+}
+
+.iconshebei:before {
+  content: "\e600";
+}
+
+.iconzuoce-gongdian:before {
+  content: "\e6ef";
+}
+
+.iconrili:before {
+  content: "\e72a";
+}
+
+.iconlixian:before {
+  content: "\e68c";
+}
+
+.iconzaixian:before {
+  content: "\e68d";
+}
+
+.iconxuanzhong:before {
+  content: "\e64d";
+}
+
+.iconweixuanzhong:before {
+  content: "\e610";
+}
+
+.iconshebeijiankong:before {
+  content: "\e936";
+}
+
+.iconsearch:before {
+  content: "\e854";
+}
+
+.iconsearch1:before {
+  content: "\e632";
+}
+
+.iconsearch2:before {
+  content: "\e61f";
+}
+
+.iconsearch3:before {
+  content: "\e60e";
+}
+
+.icondianliu:before {
+  content: "\e665";
+}
+
+.iconxiangyou:before {
+  content: "\e65a";
+}
+
+.iconicon_wendu_dingkong-01:before {
+  content: "\e604";
+}
+
+.iconbanben:before {
+  content: "\e60a";
+}
+
+.iconzhongzhimima:before {
+  content: "\e60b";
+}
+
+.iconmyeditor:before {
+  content: "\e62b";
+}
+
+.icon17:before {
+  content: "\e639";
+}
+
+.icondizhi:before {
+  content: "\e769";
+}
+
+.iconxiangshangbeifen:before {
+  content: "\e611";
+}
+
+.iconxiangxiabeifen:before {
+  content: "\e612";
+}
+
+.iconid:before {
+  content: "\e67b";
+}
+
+.icon80:before {
+  content: "\e682";
+}
+
+.iconbiaoqian:before {
+  content: "\e63d";
+}
+
+.iconshijian-xianxing:before {
+  content: "\e8c4";
+}
+
+.iconfuwuleixing:before {
+  content: "\e648";
+}
+
+.iconbianhao:before {
+  content: "\e635";
+}
+
+.iconvip:before {
+  content: "\e613";
+}
+
+.iconrenwu-ren:before {
+  content: "\e749";
+}
+
+.iconshengchangzhouqi:before {
+  content: "\e60c";
+}
+
+.iconzhuangtai:before {
+  content: "\e653";
+}
+
+.iconxunhuanjiagongcishu:before {
+  content: "\e601";
+}
+
+.iconhuankuanqixianbiangeng:before {
+  content: "\e605";
+}
+
+.iconquyu:before {
+  content: "\e631";
+}
+
+.iconlayers:before {
+  content: "\e62c";
+}
+
+.iconaim:before {
+  content: "\ec32";
+}
+

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 1 - 0
ruoyi-admin/src/main/resources/static/aliicon/iconfont.js


+ 870 - 0
ruoyi-admin/src/main/resources/static/aliicon/iconfont.json

@@ -0,0 +1,870 @@
+{
+  "id": "3257556",
+  "name": "水务通APP",
+  "font_family": "iconfont",
+  "css_prefix_text": "icon",
+  "description": "",
+  "glyphs": [
+    {
+      "icon_id": "37861243",
+      "name": "icon_q&a",
+      "font_class": "a-icon_qa",
+      "unicode": "e670",
+      "unicode_decimal": 58992
+    },
+    {
+      "icon_id": "37861242",
+      "name": "icon_picture",
+      "font_class": "icon_picture",
+      "unicode": "e671",
+      "unicode_decimal": 58993
+    },
+    {
+      "icon_id": "37861241",
+      "name": "icon_mapmark",
+      "font_class": "icon_mapmark",
+      "unicode": "e672",
+      "unicode_decimal": 58994
+    },
+    {
+      "icon_id": "37861235",
+      "name": "icon_closeup",
+      "font_class": "icon_closeup",
+      "unicode": "e673",
+      "unicode_decimal": 58995
+    },
+    {
+      "icon_id": "37861240",
+      "name": "icon_location",
+      "font_class": "icon_location",
+      "unicode": "e674",
+      "unicode_decimal": 58996
+    },
+    {
+      "icon_id": "37861236",
+      "name": "icon_done",
+      "font_class": "icon_done",
+      "unicode": "e675",
+      "unicode_decimal": 58997
+    },
+    {
+      "icon_id": "37861238",
+      "name": "icon_wrapper",
+      "font_class": "icon_wrapper",
+      "unicode": "e677",
+      "unicode_decimal": 58999
+    },
+    {
+      "icon_id": "37861239",
+      "name": "icon_pulldown",
+      "font_class": "icon_pulldown1",
+      "unicode": "e678",
+      "unicode_decimal": 59000
+    },
+    {
+      "icon_id": "37861237",
+      "name": "icon_warning",
+      "font_class": "icon_warning",
+      "unicode": "e679",
+      "unicode_decimal": 59001
+    },
+    {
+      "icon_id": "37861234",
+      "name": "icon_close",
+      "font_class": "icon_close",
+      "unicode": "e67a",
+      "unicode_decimal": 59002
+    },
+    {
+      "icon_id": "37861268",
+      "name": "icon_air",
+      "font_class": "icon_air",
+      "unicode": "e66c",
+      "unicode_decimal": 58988
+    },
+    {
+      "icon_id": "37861267",
+      "name": "icon_search",
+      "font_class": "icon_search",
+      "unicode": "e66d",
+      "unicode_decimal": 58989
+    },
+    {
+      "icon_id": "37861265",
+      "name": "icon_calendar",
+      "font_class": "icon_calendar",
+      "unicode": "e66e",
+      "unicode_decimal": 58990
+    },
+    {
+      "icon_id": "37861264",
+      "name": "icon_water",
+      "font_class": "icon_water",
+      "unicode": "e66f",
+      "unicode_decimal": 58991
+    },
+    {
+      "icon_id": "37831340",
+      "name": "icon_filter",
+      "font_class": "icon_sort",
+      "unicode": "e620",
+      "unicode_decimal": 58912
+    },
+    {
+      "icon_id": "36605229",
+      "name": "icon_exhaust_valve",
+      "font_class": "icon_exhaust_valve",
+      "unicode": "e66a",
+      "unicode_decimal": 58986
+    },
+    {
+      "icon_id": "36605228",
+      "name": "icon_manhole",
+      "font_class": "icon_manhole",
+      "unicode": "e66b",
+      "unicode_decimal": 58987
+    },
+    {
+      "icon_id": "36605242",
+      "name": "icon_reducer",
+      "font_class": "icon_reducer",
+      "unicode": "e659",
+      "unicode_decimal": 58969
+    },
+    {
+      "icon_id": "36605239",
+      "name": "icon_backflow_preventer",
+      "font_class": "icon_backflow_preventer",
+      "unicode": "e65c",
+      "unicode_decimal": 58972
+    },
+    {
+      "icon_id": "36605243",
+      "name": "icon_press_relief_valve",
+      "font_class": "icon_press_relief_valve",
+      "unicode": "e65d",
+      "unicode_decimal": 58973
+    },
+    {
+      "icon_id": "36605233",
+      "name": "icon_fire_hydrant",
+      "font_class": "icon_fire_hydrant",
+      "unicode": "e65e",
+      "unicode_decimal": 58974
+    },
+    {
+      "icon_id": "36605240",
+      "name": "icon_press_adjust_valve",
+      "font_class": "icon_press_adjust_valve",
+      "unicode": "e65f",
+      "unicode_decimal": 58975
+    },
+    {
+      "icon_id": "36605241",
+      "name": "icon_valve",
+      "font_class": "icon_valve",
+      "unicode": "e661",
+      "unicode_decimal": 58977
+    },
+    {
+      "icon_id": "36605238",
+      "name": "icon_meter",
+      "font_class": "icon_meter",
+      "unicode": "e662",
+      "unicode_decimal": 58978
+    },
+    {
+      "icon_id": "36605236",
+      "name": "icon_contro_lvalve",
+      "font_class": "icon_contro_lvalve",
+      "unicode": "e663",
+      "unicode_decimal": 58979
+    },
+    {
+      "icon_id": "36605232",
+      "name": "icon_drain_valve",
+      "font_class": "icon_drain_valve",
+      "unicode": "e664",
+      "unicode_decimal": 58980
+    },
+    {
+      "icon_id": "36605231",
+      "name": "icon_supply_pump",
+      "font_class": "icon_supply_pump",
+      "unicode": "e666",
+      "unicode_decimal": 58982
+    },
+    {
+      "icon_id": "36605235",
+      "name": "icon_pipe",
+      "font_class": "icon_pipe",
+      "unicode": "e667",
+      "unicode_decimal": 58983
+    },
+    {
+      "icon_id": "36605234",
+      "name": "icon_material",
+      "font_class": "icon_material",
+      "unicode": "e668",
+      "unicode_decimal": 58984
+    },
+    {
+      "icon_id": "36605230",
+      "name": "icon_booster_pump",
+      "font_class": "icon_booster_pump",
+      "unicode": "e669",
+      "unicode_decimal": 58985
+    },
+    {
+      "icon_id": "36573539",
+      "name": "icon_next",
+      "font_class": "icon_next",
+      "unicode": "e654",
+      "unicode_decimal": 58964
+    },
+    {
+      "icon_id": "36573552",
+      "name": "icon_pulldown",
+      "font_class": "icon_pulldown",
+      "unicode": "e655",
+      "unicode_decimal": 58965
+    },
+    {
+      "icon_id": "36573550",
+      "name": "icon_minus",
+      "font_class": "icon_minus",
+      "unicode": "e660",
+      "unicode_decimal": 58976
+    },
+    {
+      "icon_id": "1376043",
+      "name": "二维码",
+      "font_class": "erweima",
+      "unicode": "e61e",
+      "unicode_decimal": 58910
+    },
+    {
+      "icon_id": "19288316",
+      "name": "bimgis_属性",
+      "font_class": "bimgis_shuxing",
+      "unicode": "e6f4",
+      "unicode_decimal": 59124
+    },
+    {
+      "icon_id": "1985082",
+      "name": "地理",
+      "font_class": "dili",
+      "unicode": "e65b",
+      "unicode_decimal": 58971
+    },
+    {
+      "icon_id": "19668957",
+      "name": "高度",
+      "font_class": "colum-height",
+      "unicode": "eafe",
+      "unicode_decimal": 60158
+    },
+    {
+      "icon_id": "25716464",
+      "name": "压力",
+      "font_class": "yali",
+      "unicode": "ea2d",
+      "unicode_decimal": 59949
+    },
+    {
+      "icon_id": "8084583",
+      "name": "隐患/隐患池",
+      "font_class": "yinhuan",
+      "unicode": "e61b",
+      "unicode_decimal": 58907
+    },
+    {
+      "icon_id": "27285325",
+      "name": "工艺品质",
+      "font_class": "a-ziyuan545",
+      "unicode": "e78d",
+      "unicode_decimal": 59277
+    },
+    {
+      "icon_id": "27285341",
+      "name": "工艺品质",
+      "font_class": "a-ziyuan546",
+      "unicode": "e78e",
+      "unicode_decimal": 59278
+    },
+    {
+      "icon_id": "521026",
+      "name": "接口管理",
+      "font_class": "jiekouguanli",
+      "unicode": "e61a",
+      "unicode_decimal": 58906
+    },
+    {
+      "icon_id": "5140599",
+      "name": "维修",
+      "font_class": "weixiu",
+      "unicode": "e636",
+      "unicode_decimal": 58934
+    },
+    {
+      "icon_id": "30162990",
+      "name": "koujing",
+      "font_class": "koujing",
+      "unicode": "e619",
+      "unicode_decimal": 58905
+    },
+    {
+      "icon_id": "19467627",
+      "name": "gis_深度检测(透视)",
+      "font_class": "gis_shendujiancetoushi",
+      "unicode": "e70f",
+      "unicode_decimal": 59151
+    },
+    {
+      "icon_id": "14683255",
+      "name": "gis-jd-节点",
+      "font_class": "gis-jd-jiedian",
+      "unicode": "e629",
+      "unicode_decimal": 58921
+    },
+    {
+      "icon_id": "975376",
+      "name": "名称",
+      "font_class": "name",
+      "unicode": "e6b4",
+      "unicode_decimal": 59060
+    },
+    {
+      "icon_id": "1128803",
+      "name": "埋点",
+      "font_class": "maidian",
+      "unicode": "e7be",
+      "unicode_decimal": 59326
+    },
+    {
+      "icon_id": "10894864",
+      "name": "测量",
+      "font_class": "measure",
+      "unicode": "e60d",
+      "unicode_decimal": 58893
+    },
+    {
+      "icon_id": "15196771",
+      "name": "道路",
+      "font_class": "daolu",
+      "unicode": "e796",
+      "unicode_decimal": 59286
+    },
+    {
+      "icon_id": "15739173",
+      "name": "材质",
+      "font_class": "caizhi",
+      "unicode": "e647",
+      "unicode_decimal": 58951
+    },
+    {
+      "icon_id": "24888090",
+      "name": "管线长度",
+      "font_class": "guanxianchangdu",
+      "unicode": "e6cc",
+      "unicode_decimal": 59084
+    },
+    {
+      "icon_id": "19690283",
+      "name": "解锁",
+      "font_class": "unlocked",
+      "unicode": "eb7a",
+      "unicode_decimal": 60282
+    },
+    {
+      "icon_id": "19690286",
+      "name": "锁",
+      "font_class": "locked",
+      "unicode": "eb7b",
+      "unicode_decimal": 60283
+    },
+    {
+      "icon_id": "28616755",
+      "name": "tongji",
+      "font_class": "tongji",
+      "unicode": "e609",
+      "unicode_decimal": 58889
+    },
+    {
+      "icon_id": "1287721",
+      "name": "叉叉",
+      "font_class": "closecha",
+      "unicode": "e618",
+      "unicode_decimal": 58904
+    },
+    {
+      "icon_id": "16383607",
+      "name": "转帐",
+      "font_class": "zhuanzhang",
+      "unicode": "e63a",
+      "unicode_decimal": 58938
+    },
+    {
+      "icon_id": "23376799",
+      "name": "绘制轨迹",
+      "font_class": "huizhiguiji",
+      "unicode": "e606",
+      "unicode_decimal": 58886
+    },
+    {
+      "icon_id": "577322",
+      "name": "圆形未选中",
+      "font_class": "yuanxingweixuanzhong",
+      "unicode": "e72f",
+      "unicode_decimal": 59183
+    },
+    {
+      "icon_id": "577324",
+      "name": "圆形选中",
+      "font_class": "yuanxingxuanzhong",
+      "unicode": "e731",
+      "unicode_decimal": 59185
+    },
+    {
+      "icon_id": "1288647",
+      "name": "地址",
+      "font_class": "dizhi1",
+      "unicode": "e614",
+      "unicode_decimal": 58900
+    },
+    {
+      "icon_id": "24590488",
+      "name": "评价、收藏 ",
+      "font_class": "a-pingjiashoucang",
+      "unicode": "e6ae",
+      "unicode_decimal": 59054
+    },
+    {
+      "icon_id": "633029",
+      "name": "正品保障-对勾",
+      "font_class": "zhengpinbaozhangduigou",
+      "unicode": "e628",
+      "unicode_decimal": 58920
+    },
+    {
+      "icon_id": "1727533",
+      "name": "307感叹号-线性圆框",
+      "font_class": "gantanhao-xianxingyuankuang",
+      "unicode": "e8ec",
+      "unicode_decimal": 59628
+    },
+    {
+      "icon_id": "1273593",
+      "name": "向上收起",
+      "font_class": "shouqi",
+      "unicode": "e786",
+      "unicode_decimal": 59270
+    },
+    {
+      "icon_id": "1638201",
+      "name": "删除",
+      "font_class": "shanchu",
+      "unicode": "e60f",
+      "unicode_decimal": 58895
+    },
+    {
+      "icon_id": "5485645",
+      "name": "扫码",
+      "font_class": "saoma",
+      "unicode": "e615",
+      "unicode_decimal": 58901
+    },
+    {
+      "icon_id": "27728264",
+      "name": "向上收起",
+      "font_class": "shouqi1-copy",
+      "unicode": "e937",
+      "unicode_decimal": 59703
+    },
+    {
+      "icon_id": "21167494",
+      "name": "相机",
+      "font_class": "xiangji",
+      "unicode": "e61d",
+      "unicode_decimal": 58909
+    },
+    {
+      "icon_id": "201579",
+      "name": "3.1定位",
+      "font_class": "31dingwei",
+      "unicode": "e602",
+      "unicode_decimal": 58882
+    },
+    {
+      "icon_id": "1327",
+      "name": "录音",
+      "font_class": "luyin",
+      "unicode": "e603",
+      "unicode_decimal": 58883
+    },
+    {
+      "icon_id": "689279",
+      "name": "删除 关闭 叉",
+      "font_class": "shanchuguanbicha",
+      "unicode": "e809",
+      "unicode_decimal": 59401
+    },
+    {
+      "icon_id": "1718321",
+      "name": "返回",
+      "font_class": "fanhui",
+      "unicode": "e607",
+      "unicode_decimal": 58887
+    },
+    {
+      "icon_id": "1514152",
+      "name": "退回",
+      "font_class": "tuihui",
+      "unicode": "e723",
+      "unicode_decimal": 59171
+    },
+    {
+      "icon_id": "9564451",
+      "name": "HTSCIT_问题",
+      "font_class": "wenti",
+      "unicode": "e645",
+      "unicode_decimal": 58949
+    },
+    {
+      "icon_id": "16563751",
+      "name": "确认入库、确认出库、确认盘点结果",
+      "font_class": "cangpeitubiao_querenrukuquerenchukuquerenpandianjieguo",
+      "unicode": "e616",
+      "unicode_decimal": 58902
+    },
+    {
+      "icon_id": "5203258",
+      "name": "加号",
+      "font_class": "jiahao",
+      "unicode": "e626",
+      "unicode_decimal": 58918
+    },
+    {
+      "icon_id": "7556166",
+      "name": "减号",
+      "font_class": "jianhao",
+      "unicode": "e608",
+      "unicode_decimal": 58888
+    },
+    {
+      "icon_id": "1969478",
+      "name": "假期类型",
+      "font_class": "jiaqileixing",
+      "unicode": "e627",
+      "unicode_decimal": 58919
+    },
+    {
+      "icon_id": "4888574",
+      "name": "icon-design-36",
+      "font_class": "cebanjing",
+      "unicode": "e634",
+      "unicode_decimal": 58932
+    },
+    {
+      "icon_id": "6798096",
+      "name": "数据范围",
+      "font_class": "shujufanwei",
+      "unicode": "e676",
+      "unicode_decimal": 58998
+    },
+    {
+      "icon_id": "10199171",
+      "name": "编辑",
+      "font_class": "bianji",
+      "unicode": "e617",
+      "unicode_decimal": 58903
+    },
+    {
+      "icon_id": "11372671",
+      "name": "减少",
+      "font_class": "jianshao",
+      "unicode": "e8b1",
+      "unicode_decimal": 59569
+    },
+    {
+      "icon_id": "18683506",
+      "name": "厂商管理",
+      "font_class": "changshangguanli",
+      "unicode": "e621",
+      "unicode_decimal": 58913
+    },
+    {
+      "icon_id": "736870",
+      "name": "nfc",
+      "font_class": "nfc",
+      "unicode": "e707",
+      "unicode_decimal": 59143
+    },
+    {
+      "icon_id": "1631393",
+      "name": "刷新",
+      "font_class": "tablerefresh",
+      "unicode": "e61c",
+      "unicode_decimal": 58908
+    },
+    {
+      "icon_id": "2815720",
+      "name": "设备",
+      "font_class": "shebei",
+      "unicode": "e600",
+      "unicode_decimal": 58880
+    },
+    {
+      "icon_id": "4942981",
+      "name": "供电",
+      "font_class": "zuoce-gongdian",
+      "unicode": "e6ef",
+      "unicode_decimal": 59119
+    },
+    {
+      "icon_id": "7055635",
+      "name": "日历",
+      "font_class": "rili",
+      "unicode": "e72a",
+      "unicode_decimal": 59178
+    },
+    {
+      "icon_id": "11810509",
+      "name": "离线",
+      "font_class": "lixian",
+      "unicode": "e68c",
+      "unicode_decimal": 59020
+    },
+    {
+      "icon_id": "11810510",
+      "name": "在线",
+      "font_class": "zaixian",
+      "unicode": "e68d",
+      "unicode_decimal": 59021
+    },
+    {
+      "icon_id": "1517010",
+      "name": "选中",
+      "font_class": "xuanzhong",
+      "unicode": "e64d",
+      "unicode_decimal": 58957
+    },
+    {
+      "icon_id": "5801018",
+      "name": "未选中",
+      "font_class": "weixuanzhong",
+      "unicode": "e610",
+      "unicode_decimal": 58896
+    },
+    {
+      "icon_id": "8240776",
+      "name": "设备监控",
+      "font_class": "shebeijiankong",
+      "unicode": "e936",
+      "unicode_decimal": 59702
+    },
+    {
+      "icon_id": "129158",
+      "name": "search",
+      "font_class": "search",
+      "unicode": "e854",
+      "unicode_decimal": 59476
+    },
+    {
+      "icon_id": "278298",
+      "name": "search",
+      "font_class": "search1",
+      "unicode": "e632",
+      "unicode_decimal": 58930
+    },
+    {
+      "icon_id": "1191867",
+      "name": "search",
+      "font_class": "search2",
+      "unicode": "e61f",
+      "unicode_decimal": 58911
+    },
+    {
+      "icon_id": "1347316",
+      "name": "search",
+      "font_class": "search3",
+      "unicode": "e60e",
+      "unicode_decimal": 58894
+    },
+    {
+      "icon_id": "12331651",
+      "name": "电流",
+      "font_class": "dianliu",
+      "unicode": "e665",
+      "unicode_decimal": 58981
+    },
+    {
+      "icon_id": "13604675",
+      "name": "向右",
+      "font_class": "xiangyou",
+      "unicode": "e65a",
+      "unicode_decimal": 58970
+    },
+    {
+      "icon_id": "16141221",
+      "name": "鼎控_温度",
+      "font_class": "icon_wendu_dingkong-01",
+      "unicode": "e604",
+      "unicode_decimal": 58884
+    },
+    {
+      "icon_id": "9041965",
+      "name": "版本",
+      "font_class": "banben",
+      "unicode": "e60a",
+      "unicode_decimal": 58890
+    },
+    {
+      "icon_id": "524416",
+      "name": "重置密码",
+      "font_class": "zhongzhimima",
+      "unicode": "e60b",
+      "unicode_decimal": 58891
+    },
+    {
+      "icon_id": "816203",
+      "name": "我的-资料编辑",
+      "font_class": "myeditor",
+      "unicode": "e62b",
+      "unicode_decimal": 58923
+    },
+    {
+      "icon_id": "667206",
+      "name": "类型",
+      "font_class": "17",
+      "unicode": "e639",
+      "unicode_decimal": 58937
+    },
+    {
+      "icon_id": "14445891",
+      "name": "地址",
+      "font_class": "dizhi",
+      "unicode": "e769",
+      "unicode_decimal": 59241
+    },
+    {
+      "icon_id": "11556681",
+      "name": "向上备份",
+      "font_class": "xiangshangbeifen",
+      "unicode": "e611",
+      "unicode_decimal": 58897
+    },
+    {
+      "icon_id": "11556684",
+      "name": "向下备份",
+      "font_class": "xiangxiabeifen",
+      "unicode": "e612",
+      "unicode_decimal": 58898
+    },
+    {
+      "icon_id": "246084",
+      "name": "id",
+      "font_class": "id",
+      "unicode": "e67b",
+      "unicode_decimal": 59003
+    },
+    {
+      "icon_id": "392121",
+      "name": "百分比",
+      "font_class": "80",
+      "unicode": "e682",
+      "unicode_decimal": 59010
+    },
+    {
+      "icon_id": "1305451",
+      "name": "标签",
+      "font_class": "biaoqian",
+      "unicode": "e63d",
+      "unicode_decimal": 58941
+    },
+    {
+      "icon_id": "1727448",
+      "name": "217时间-线性",
+      "font_class": "shijian-xianxing",
+      "unicode": "e8c4",
+      "unicode_decimal": 59588
+    },
+    {
+      "icon_id": "10506202",
+      "name": "服务类型",
+      "font_class": "fuwuleixing",
+      "unicode": "e648",
+      "unicode_decimal": 58952
+    },
+    {
+      "icon_id": "11121435",
+      "name": "编号",
+      "font_class": "bianhao",
+      "unicode": "e635",
+      "unicode_decimal": 58933
+    },
+    {
+      "icon_id": "844114",
+      "name": "wan_vip",
+      "font_class": "vip",
+      "unicode": "e613",
+      "unicode_decimal": 58899
+    },
+    {
+      "icon_id": "4933375",
+      "name": "人物-人",
+      "font_class": "renwu-ren",
+      "unicode": "e749",
+      "unicode_decimal": 59209
+    },
+    {
+      "icon_id": "6677871",
+      "name": "生长周期",
+      "font_class": "shengchangzhouqi",
+      "unicode": "e60c",
+      "unicode_decimal": 58892
+    },
+    {
+      "icon_id": "7015519",
+      "name": "状态",
+      "font_class": "zhuangtai",
+      "unicode": "e653",
+      "unicode_decimal": 58963
+    },
+    {
+      "icon_id": "7164673",
+      "name": "循环加工次数",
+      "font_class": "xunhuanjiagongcishu",
+      "unicode": "e601",
+      "unicode_decimal": 58881
+    },
+    {
+      "icon_id": "10119988",
+      "name": "还款期限变更",
+      "font_class": "huankuanqixianbiangeng",
+      "unicode": "e605",
+      "unicode_decimal": 58885
+    },
+    {
+      "icon_id": "21516812",
+      "name": "区域",
+      "font_class": "quyu",
+      "unicode": "e631",
+      "unicode_decimal": 58929
+    },
+    {
+      "icon_id": "1813700",
+      "name": "layers-层次",
+      "font_class": "layers",
+      "unicode": "e62c",
+      "unicode_decimal": 58924
+    },
+    {
+      "icon_id": "5732759",
+      "name": "定位",
+      "font_class": "aim",
+      "unicode": "ec32",
+      "unicode_decimal": 60466
+    }
+  ]
+}

BIN=BIN
ruoyi-admin/src/main/resources/static/aliicon/iconfont.ttf


BIN=BIN
ruoyi-admin/src/main/resources/static/aliicon/iconfont.woff


BIN=BIN
ruoyi-admin/src/main/resources/static/aliicon/iconfont.woff2


+ 116 - 0
ruoyi-admin/src/main/resources/templates/system/dangan/add.html

@@ -319,6 +319,73 @@
                 </div>
             </div>
             <div class="row">
+                  <span style="padding-left: 30%!important;">
+                      ------------------------------------------------apply模块--------------------------------------------------
+                  </span>
+            </div>
+            <div class="row">
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">apply图标:</label>
+                        <div class="col-sm-8">
+                            <input id="iconApp" name="iconApp" class="form-control" type="text" placeholder="选择图标">
+                            <div class="ms-parent" style="width: 100%;">
+                                <div class="icon-drop animated flipInX" style="display: none;max-height:200px;overflow-y:auto">
+                                    <div data-th-include="system/dangan/icon"></div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row">
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">apply类型:</label>
+                        <div class="col-sm-8">
+                            <select name="applyType" id="applyType" class="form-control m-b">
+                                <option value="-1" selected="selected">请选择</option>
+                                <option value="0">APP</option>
+                                <option value="1">H5</option>
+                            </select>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row" id="appDiv" style="display: none">
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">包名:</label>
+                        <div class="col-sm-8">
+                            <input name="packName" class="form-control">
+                        </div>
+                    </div>
+                </div>
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">模块名:</label>
+                        <div class="col-sm-8">
+                            <input name="modelName" class="form-control">
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row" id="h5Div" style="display: none">
+                <div class="col-sm-6">
+                    <div class="form-group">
+                        <label class="col-sm-3 control-label">H5_URL地址:</label>
+                        <div class="col-sm-8">
+                            <input name="hUrl" class="form-control">
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="row">
+                  <span style="padding-left: 30%!important;">
+                      ------------------------------------------------APP模块--------------------------------------------------
+                  </span>
+            </div>
+            <div class="row">
                 <div class="col-sm-6">
                     <div class="form-group">
                         <label class="col-sm-3 control-label">排序:</label>
@@ -377,6 +444,55 @@
     <th:block th:include="include :: footer" />
     <th:block th:include="include :: datetimepicker-js" />
     <script th:inline="javascript">
+        $(function() {
+            $("input[name='iconApp']").focus(function() {
+                $(".icon-drop").show();
+            });
+            $("#form-dangan-add").click(function(event) {
+                var obj = event.srcElement || event.target;
+                if (!$(obj).is("input[name='iconApp']")) {
+                    $(".icon-drop").hide();
+                }
+            });
+            $(".icon-drop").find(".ico-list i").on("click", function() {
+                let className = $(this).attr('class');
+                $('#iconApp').val((className+"").replace("icon iconfont ",""));
+            });
+            $('input').on('ifChecked', function(event){
+                var menuType = $(event.target).val();
+                if (menuType == "M") {
+                    $("#iconApp").parents(".form-group").show();
+                    $("#target").parents(".form-group").hide();
+                    $("input[name='visible']").parents(".form-group").show();
+                    $(".is-refresh").hide();
+                } else if (menuType == "C") {
+                    $("#iconApp").parents(".form-group").show();
+                    $("#target").parents(".form-group").show();
+                    $("input[name='visible']").parents(".form-group").show();
+                    $(".is-refresh").show();
+                } else if (menuType == "F") {
+                    $("#iconApp").parents(".form-group").hide();
+                    $("#target").parents(".form-group").hide();
+                    $("input[name='visible']").parents(".form-group").hide();
+                    $(".is-refresh").hide();
+                }
+            });
+        });
+
+        $("#applyType").change(function () {
+            let applyTypeValue = $(this).val();
+            if(applyTypeValue===0||applyTypeValue==="0"){
+                $("#appDiv").show();
+                $("#h5Div").hide();
+            }else if(applyTypeValue===1||applyTypeValue==="1"){
+                $("#appDiv").hide();
+                $("#h5Div").show();
+            }else{
+                $("#appDiv").hide();
+                $("#h5Div").hide();
+            }
+        });
+
         var prefix = ctx + "system/dangan"
         $("#form-dangan-add").validate({
             onkeyup: false,

+ 37 - 0
ruoyi-admin/src/main/resources/templates/system/dangan/icon.html

@@ -0,0 +1,37 @@
+<!DOCTYPE html>
+<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
+<head>
+    <meta charset="UTF-8">
+    <title>Font Awesome Ico list</title>
+    <link href="/css/font-awesome.min.css" th:href="@{/css/font-awesome.min.css}" rel="stylesheet"/>
+     <link rel="stylesheet" href="/aliicon/iconfont.css" th:href="@{/aliicon/iconfont.css}">
+    <script src="/js/jquery.min.js"></script>
+    <style type="text/css">
+        .ico-list .fa{
+            margin: 5px;
+            padding: 5px;
+            cursor:pointer;
+            font-size: 18px;
+            width: 28px;
+            border-radius: 3px;
+        }
+        .ico-list .fa:hover {
+            background-color: #1d9d74;
+            color: #ffffff;}
+    </style>
+</head>
+<body>
+<div class="ico-list">
+     <i class="icon iconfont icona-icon_qa"></i>
+
+     <i class="icon iconfont iconicon_picture"></i>
+
+     <i class="icon iconfont iconicon_mapmark"></i>
+
+     <i class="icon iconfont iconicon_closeup"></i>
+
+     <i class="icon iconfont iconicon_location"></i>
+
+</div>
+</body>
+</html>

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

@@ -297,6 +297,7 @@ public class ShiroConfig
         filterChainDefinitionMap.put("/logout", "logout");
         // 不需要拦截的访问
         filterChainDefinitionMap.put("/login", "anon,captchaValidate");
+        filterChainDefinitionMap.put("/loginApp", "anon,captchaValidate");
         // 注册相关
         filterChainDefinitionMap.put("/register", "anon,captchaValidate");
         // 系统权限列表

+ 68 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/service/SysLoginService.java

@@ -117,6 +117,74 @@ public class SysLoginService
     }
 
     /**
+     * 登录
+     */
+    public SysUser loginApp(String username, String password)
+    {
+        // 用户名或密码为空 错误
+        if (StringUtils.isEmpty(username) || StringUtils.isEmpty(password))
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("not.null")));
+            throw new UserNotExistsException();
+        }
+        // 密码如果不在指定范围内 错误
+        if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
+                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+            throw new UserPasswordNotMatchException();
+        }
+
+        // 用户名不在指定范围内 错误
+        if (username.length() < UserConstants.USERNAME_MIN_LENGTH
+                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+            throw new UserPasswordNotMatchException();
+        }
+
+        // 查询用户信息
+        SysUser user = userService.selectUserByLoginName(username);
+
+        /**
+         if (user == null && maybeMobilePhoneNumber(username))
+         {
+         user = userService.selectUserByPhoneNumber(username);
+         }
+
+         if (user == null && maybeEmail(username))
+         {
+         user = userService.selectUserByEmail(username);
+         }
+         */
+
+        if (user == null)
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.not.exists")));
+            throw new UserNotExistsException();
+        }
+
+        if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.delete")));
+            throw new UserDeleteException();
+        }
+
+        if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
+        {
+            AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.blocked", user.getRemark())));
+            throw new UserBlockedException();
+        }
+
+        passwordService.validate(user, password);
+
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        setRolePermission(user);
+        recordLoginInfo(user.getUserId());
+        return user;
+    }
+
+    /**
     private boolean maybeEmail(String username)
     {
         if (!username.matches(UserConstants.EMAIL_PATTERN))

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

@@ -164,6 +164,71 @@ public class Dangan extends BaseEntity
     //TODO 伊宁专用字段
     private String menuName;//菜单名
 
+    //TODO apply 相关字段
+    private Integer applyType;//应用类型 -1 无 0 app 1 h5
+
+    private String iconApp;//icon Class名(阿里库)
+
+    private String packName;//包名 applyType为0时有效
+    private String modelName;//模块名 applyType为1时有效
+
+    private String hUrl;//h5路径 applyType为1时有效
+
+    //TODO 查询用组装字段, 数据库结构无关
+    private String danganLoginName;
+
+    public String getDanganLoginName() {
+        return danganLoginName;
+    }
+
+    public void setDanganLoginName(String danganLoginName) {
+        this.danganLoginName = danganLoginName;
+    }
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Integer getApplyType() {
+        return applyType;
+    }
+
+    public void setApplyType(Integer applyType) {
+        this.applyType = applyType;
+    }
+
+    public String getIconApp() {
+        return iconApp;
+    }
+
+    public void setIconApp(String iconApp) {
+        this.iconApp = iconApp;
+    }
+
+    public String getPackName() {
+        return packName;
+    }
+
+    public void setPackName(String packName) {
+        this.packName = packName;
+    }
+
+    public String getModelName() {
+        return modelName;
+    }
+
+    public void setModelName(String modelName) {
+        this.modelName = modelName;
+    }
+
+    public String gethUrl() {
+        return hUrl;
+    }
+
+    public void sethUrl(String hUrl) {
+        this.hUrl = hUrl;
+    }
+
     public String getMenuName() {
         return menuName;
     }

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 34 - 4
ruoyi-system/src/main/resources/mapper/system/DanganMapper.xml