From f371c83579a77eb0f9dd2ed566ff578d16245c15 Mon Sep 17 00:00:00 2001 From: zhujj Date: Tue, 8 Jan 2019 17:17:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../web/controller/tool/AliyunOSSRest.java | 2 +- .../web/controller/tool/TestController.java | 57 +-- .../ruoyi/web/core/config/SwaggerConfig.java | 2 +- .../ajax/libs/layui/extend/steps/steps.css | 4 +- .../src/main/resources/static/ruoyi/login.js | 3 +- .../com/ruoyi/common/base/AjaxResult.java | 4 +- .../com/ruoyi/common/constant/Constants.java | 4 +- ruoyi-framework/pom.xml | 6 + .../ruoyi/framework/config/CorsConfig.java | 31 ++ .../ruoyi/framework/config/ShiroConfig.java | 1 + .../com/ruoyi/framework/jwt/JwtFilter.java | 72 ++++ .../com/ruoyi/framework/jwt/JwtToken.java | 27 ++ .../java/com/ruoyi/framework/jwt/JwtUtil.java | 75 ++++ .../framework/shiro/realm/UserRealm.java | 2 + .../resources/mapper/system/SysUserMapper.xml | 3 + .../agile/controller/GenTableController.java | 10 +- .../templates/agile/genTable/add.html | 347 ++++++++++-------- .../templates/agile/genTable/genTable.html | 5 +- ruoyi-vip/pom.xml | 5 + .../vip/controller/ApiVipUserController.java | 178 +++++++++ .../java/com/ruoyi/vip/domain/VipUser.java | 2 +- .../UsernamePasswordByUserTypeToken.java | 32 ++ .../ruoyi/vip/framework/VipLoginService.java | 134 +++++++ .../vip/framework/VipPasswordService.java | 87 +++++ .../com/ruoyi/vip/framework/VipUserRealm.java | 112 ++++++ .../com/ruoyi/vip/utils/VipUserUtils.java | 96 +++++ 26 files changed, 1090 insertions(+), 211 deletions(-) create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/config/CorsConfig.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtFilter.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtToken.java create mode 100644 ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtUtil.java create mode 100644 ruoyi-vip/src/main/java/com/ruoyi/vip/controller/ApiVipUserController.java create mode 100644 ruoyi-vip/src/main/java/com/ruoyi/vip/framework/UsernamePasswordByUserTypeToken.java create mode 100644 ruoyi-vip/src/main/java/com/ruoyi/vip/framework/VipLoginService.java create mode 100644 ruoyi-vip/src/main/java/com/ruoyi/vip/framework/VipPasswordService.java create mode 100644 ruoyi-vip/src/main/java/com/ruoyi/vip/framework/VipUserRealm.java create mode 100644 ruoyi-vip/src/main/java/com/ruoyi/vip/utils/VipUserUtils.java diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/AliyunOSSRest.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/AliyunOSSRest.java index 6123c8ad0..5b07cd6aa 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/AliyunOSSRest.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/AliyunOSSRest.java @@ -12,7 +12,7 @@ public class AliyunOSSRest { // @Autowired // private AliyunOSSClient aliyunOSSClient ; @GetMapping("policy.json") - public JSONObject getPolicy() { + public JSONObject getPolicy(String id) { String dir = String.valueOf(System.currentTimeMillis()); // return aliyunOSSClient .getPostObjectPolicy(dir); return null; diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java index f3b3c5ef9..c6e8039ab 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java @@ -19,15 +19,15 @@ import io.swagger.annotations.ApiOperation; /** * swagger 测试方法 - * + * * @author ruoyi */ @Api("用户信息管理") @RestController @RequestMapping("/test/*") -public class TestController extends BaseController -{ +public class TestController extends BaseController { private final static List testList = new ArrayList<>(); + { testList.add(new Test("1", "admin", "admin123")); testList.add(new Test("2", "ry", "admin123")); @@ -35,62 +35,52 @@ public class TestController extends BaseController @ApiOperation("获取列表") @GetMapping("list") - public List testList() - { + public List testList() { return testList; } @ApiOperation("新增用户") @PostMapping("save") - public AjaxResult save(Test test) - { + public AjaxResult save(Test test) { return testList.add(test) ? success() : error(); } @ApiOperation("更新用户") @ApiImplicitParam(name = "Test", value = "单个用户信息", dataType = "Test") @PutMapping("update") - public AjaxResult update(Test test) - { + public AjaxResult update(Test test) { return testList.remove(test) && testList.add(test) ? success() : error(); } @ApiOperation("删除用户") @ApiImplicitParam(name = "Tests", value = "单个用户信息", dataType = "Test") @DeleteMapping("delete") - public AjaxResult delete(Test test) - { + public AjaxResult delete(Test test) { return testList.remove(test) ? success() : error(); } } -class Test -{ +class Test { private String userId; private String username; private String password; - public Test() - { + public Test() { } - public Test(String userId, String username, String password) - { + public Test(String userId, String username, String password) { this.userId = userId; this.username = username; this.password = password; } @Override - public boolean equals(Object o) - { - if (this == o) - { + public boolean equals(Object o) { + if (this == o) { return true; } - if (o == null || getClass() != o.getClass()) - { + if (o == null || getClass() != o.getClass()) { return false; } @@ -100,41 +90,34 @@ class Test } @Override - public int hashCode() - { + public int hashCode() { int result = userId != null ? userId.hashCode() : 0; result = 31 * result + (username != null ? username.hashCode() : 0); result = 31 * result + (password != null ? password.hashCode() : 0); return result; } - public String getUserId() - { + public String getUserId() { return userId; } - public void setUserId(String userId) - { + public void setUserId(String userId) { this.userId = userId; } - public String getUsername() - { + public String getUsername() { return username; } - public void setUsername(String username) - { + public void setUsername(String username) { this.username = username; } - public String getPassword() - { + public String getPassword() { return password; } - public void setPassword(String password) - { + public void setPassword(String password) { this.password = password; } } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java index 6495d9bda..84e046cbb 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java @@ -32,7 +32,7 @@ public class SwaggerConfig .apiInfo(apiInfo()) .select() // 指定当前包路径 - .apis(RequestHandlerSelectors.basePackage("com.ruoyi.web.controller.tool")) + .apis(RequestHandlerSelectors.basePackage("com.ruoyi")) // 扫描所有 .apis(RequestHandlerSelectors.any()) .paths(PathSelectors.any()) .build(); diff --git a/ruoyi-admin/src/main/resources/static/ajax/libs/layui/extend/steps/steps.css b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/extend/steps/steps.css index 536879513..e9493cde5 100644 --- a/ruoyi-admin/src/main/resources/static/ajax/libs/layui/extend/steps/steps.css +++ b/ruoyi-admin/src/main/resources/static/ajax/libs/layui/extend/steps/steps.css @@ -75,8 +75,10 @@ height: 1px; } +.step-content{ + margin-top: 20px; +} .step-list{ display: none; clear: both; - margin-bottom: 30px; } \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/static/ruoyi/login.js b/ruoyi-admin/src/main/resources/static/ruoyi/login.js index 195367b20..8999e311f 100644 --- a/ruoyi-admin/src/main/resources/static/ruoyi/login.js +++ b/ruoyi-admin/src/main/resources/static/ruoyi/login.js @@ -30,7 +30,8 @@ function login() { "rememberMe": rememberMe }, success: function(r) { - if (r.code == 0) { + debugger + if (r.code == 200) { location.href = ctx + 'index'; } else { $.modal.closeLoading(); diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/base/AjaxResult.java b/ruoyi-common/src/main/java/com/ruoyi/common/base/AjaxResult.java index 208df9975..34061fa7f 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/base/AjaxResult.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/base/AjaxResult.java @@ -1,5 +1,7 @@ package com.ruoyi.common.base; +import com.ruoyi.common.constant.Constants; + import java.util.HashMap; /** @@ -64,7 +66,7 @@ public class AjaxResult extends HashMap { AjaxResult json = new AjaxResult(); json.put("msg", msg); - json.put("code", 0); + json.put("code", Constants.SUCCESS); return json; } diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java index 9dd843c36..caca93cfb 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/Constants.java @@ -15,12 +15,12 @@ public class Constants /** * 通用成功标识 */ - public static final String SUCCESS = "0"; + public static final String SUCCESS = "200"; /** * 通用失败标识 */ - public static final String FAIL = "1"; + public static final String FAIL = "500"; /** * 登录成功 diff --git a/ruoyi-framework/pom.xml b/ruoyi-framework/pom.xml index 5e6d81ca1..755eb30b6 100644 --- a/ruoyi-framework/pom.xml +++ b/ruoyi-framework/pom.xml @@ -139,6 +139,12 @@ 3.3.0 pom + + + com.auth0 + java-jwt + 3.5.0 + \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CorsConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CorsConfig.java new file mode 100644 index 000000000..7e88b2e4d --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/CorsConfig.java @@ -0,0 +1,31 @@ +package com.ruoyi.framework.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.cors.CorsConfiguration; +import org.springframework.web.cors.UrlBasedCorsConfigurationSource; +import org.springframework.web.filter.CorsFilter; + +/** + * 跨域设置 + */ +@Configuration +public class CorsConfig { + private CorsConfiguration buildConfig() { + CorsConfiguration corsConfiguration = new CorsConfiguration(); + // 1允许任何域名使用 + corsConfiguration.addAllowedOrigin("*"); + // 2允许任何头 + corsConfiguration.addAllowedHeader("*"); + // 3允许任何方法(post、get等) + corsConfiguration.addAllowedMethod("*"); + return corsConfiguration; + } + + @Bean + public CorsFilter corsFilter() { + UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); + source.registerCorsConfiguration("/**", buildConfig()); + return new CorsFilter(source); + } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java index 33228e431..384817406 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/ShiroConfig.java @@ -246,6 +246,7 @@ public class ShiroConfig filterChainDefinitionMap.put("/js/**", "anon"); filterChainDefinitionMap.put("/ruoyi/**", "anon"); filterChainDefinitionMap.put("/druid/**", "anon"); + filterChainDefinitionMap.put("/api/**", "anon"); filterChainDefinitionMap.put("/captcha/captchaImage**", "anon"); // 退出 logout地址,shiro去清除session filterChainDefinitionMap.put("/logout", "logout"); diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtFilter.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtFilter.java new file mode 100644 index 000000000..0db22128a --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtFilter.java @@ -0,0 +1,72 @@ +package com.ruoyi.framework.jwt; + +import org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter; +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.RequestMethod; + +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author Mr.Li + * @create 2018-07-12 15:56 + * @desc + **/ +public class JwtFilter extends BasicHttpAuthenticationFilter { + + + /** + * 执行登录认证 + * + * @param request + * @param response + * @param mappedValue + * @return + */ + @Override + protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { + try { + executeLogin(request, response); + return true; + } catch (Exception e) { + return false; + } + } + + /** + * + */ + @Override + protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + String token = httpServletRequest.getHeader("Authorization"); + + JwtToken jwtToken = new JwtToken(token); + // 提交给realm进行登入,如果错误他会抛出异常并被捕获 + getSubject(request, response).login(jwtToken); + // 如果没有抛出异常则代表登入成功,返回true + return true; + } + + + + /** + * 对跨域提供支持 + */ + @Override + protected boolean preHandle(ServletRequest request, ServletResponse response) throws Exception { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + HttpServletResponse httpServletResponse = (HttpServletResponse) response; + httpServletResponse.setHeader("Access-control-Allow-Origin", httpServletRequest.getHeader("Origin")); + httpServletResponse.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE"); + httpServletResponse.setHeader("Access-Control-Allow-Headers", httpServletRequest.getHeader("Access-Control-Request-Headers")); + // 跨域时会首先发送一个option请求,这里我们给option请求直接返回正常状态 + if (httpServletRequest.getMethod().equals(RequestMethod.OPTIONS.name())) { + httpServletResponse.setStatus(HttpStatus.OK.value()); + return false; + } + return super.preHandle(request, response); + } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtToken.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtToken.java new file mode 100644 index 000000000..c3a71738c --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtToken.java @@ -0,0 +1,27 @@ +package com.ruoyi.framework.jwt; + +import org.apache.shiro.authc.AuthenticationToken; + +/** + * @author Mr.Li + * @create 2018-07-12 15:19 + * @desc + **/ +public class JwtToken implements AuthenticationToken { + + private String token; + + public JwtToken(String token) { + this.token = token; + } + + @Override + public Object getPrincipal() { + return token; + } + + @Override + public Object getCredentials() { + return token; + } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtUtil.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtUtil.java new file mode 100644 index 000000000..ba01b07cd --- /dev/null +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/jwt/JwtUtil.java @@ -0,0 +1,75 @@ +package com.ruoyi.framework.jwt; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.ruoyi.framework.web.util.ServletUtils; + +import java.util.Date; + +/** + * @author Mr.Li + * @create 2018-07-12 14:23 + * @desc JWT工具类 + **/ +public class JwtUtil { + + private static final long EXPIRE_TIME = 5 * 60 * 1000; + + /** + * 校验token是否正确 + * + * @param token 密钥 + * @param secret 用户的密码 + * @return 是否正确 + */ + public static boolean verify(String token, String username, String secret) { + try { + //根据密码生成JWT效验器 + Algorithm algorithm = Algorithm.HMAC256(secret); + JWTVerifier verifier = JWT.require(algorithm) + .withClaim("username", username) + .build(); + //效验TOKEN + DecodedJWT jwt = verifier.verify(token); + return true; + } catch (Exception exception) { + return false; + } + } + + /** + * 获得token中的信息无需secret解密也能获得 + * + * @return token中包含的用户名 + */ + public static String getLoginName() { + try { + String token = ServletUtils.getRequest().getHeader("token"); + DecodedJWT jwt = JWT.decode(token); + return jwt.getClaim("loginName").asString(); + } catch (JWTDecodeException e) { + return null; + } + } + + /** + * 生成签名,5min后过期 + * + * @param loginName 用户名 + * @param secret 用户的密码 + * @return 加密的token + */ + public static String sign(String loginName, String secret) { + Date date = new Date(System.currentTimeMillis() + EXPIRE_TIME); + Algorithm algorithm = Algorithm.HMAC256(secret); + // 附带username信息 + return JWT.create() + .withClaim("loginName", loginName) + .withExpiresAt(date) + .sign(algorithm); + + } +} \ No newline at end of file diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java index 248d00353..8df5bf28e 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/shiro/realm/UserRealm.java @@ -2,6 +2,8 @@ package com.ruoyi.framework.shiro.realm; import java.util.HashSet; import java.util.Set; + +import com.ruoyi.framework.jwt.JwtToken; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; diff --git a/ruoyi-framework/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-framework/src/main/resources/mapper/system/SysUserMapper.xml index 5e2d9bdb2..d1d9f528c 100644 --- a/ruoyi-framework/src/main/resources/mapper/system/SysUserMapper.xml +++ b/ruoyi-framework/src/main/resources/mapper/system/SysUserMapper.xml @@ -65,6 +65,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" AND u.status = #{status} + + AND u.user_type = #{userType} + AND u.phonenumber like concat('%', #{phonenumber}, '%') diff --git a/ruoyi-generator/src/main/java/com/ruoyi/agile/controller/GenTableController.java b/ruoyi-generator/src/main/java/com/ruoyi/agile/controller/GenTableController.java index 0e062f722..ae486db3d 100644 --- a/ruoyi-generator/src/main/java/com/ruoyi/agile/controller/GenTableController.java +++ b/ruoyi-generator/src/main/java/com/ruoyi/agile/controller/GenTableController.java @@ -22,15 +22,14 @@ import com.ruoyi.common.utils.ExcelUtil; * @author zhujj * @date 2018-11-29 */ -@Controller -@RequestMapping("/agile/genTable") +@RestController +@RequestMapping("/genTable") public class GenTableController extends BaseController { private String prefix = "agile/genTable"; @Autowired private IGenTableService genTableService; - @RequiresPermissions("agile:genTable:view") @GetMapping() public String genTable() { return prefix + "/genTable"; @@ -39,7 +38,6 @@ public class GenTableController extends BaseController { /** * 查询代码生成列表 */ - @RequiresPermissions("agile:genTable:list") @PostMapping("/list") @ResponseBody public TableDataInfo list(GenTable genTable) { @@ -51,7 +49,6 @@ public class GenTableController extends BaseController { /** * 导出代码生成列表 */ - @RequiresPermissions("agile:genTable:export") @PostMapping("/export") @ResponseBody public AjaxResult export(GenTable genTable) { @@ -71,7 +68,6 @@ public class GenTableController extends BaseController { /** * 新增保存代码生成 */ - @RequiresPermissions("agile:genTable:add") @Log(title = "代码生成", businessType = BusinessType.INSERT) @PostMapping("/add") @ResponseBody @@ -93,7 +89,6 @@ public class GenTableController extends BaseController { /** * 修改保存代码生成 */ - @RequiresPermissions("agile:genTable:edit") @Log(title = "代码生成", businessType = BusinessType.UPDATE) @PostMapping("/edit") @ResponseBody @@ -104,7 +99,6 @@ public class GenTableController extends BaseController { /** * 删除代码生成 */ - @RequiresPermissions("agile:genTable:remove") @Log(title = "代码生成", businessType = BusinessType.DELETE) @PostMapping("/remove") @ResponseBody diff --git a/ruoyi-generator/src/main/resources/templates/agile/genTable/add.html b/ruoyi-generator/src/main/resources/templates/agile/genTable/add.html index 21039cff4..1709340ae 100644 --- a/ruoyi-generator/src/main/resources/templates/agile/genTable/add.html +++ b/ruoyi-generator/src/main/resources/templates/agile/genTable/add.html @@ -2,142 +2,162 @@ - +
-
-
-
-
    -
  • - 选择表 -
  • -
  • - 基本信息 -
  • -
  • - 字段信息 -
  • -
  • - 生成信息 -
  • -
  • - 完成 -
  • -
-
-
-
-
- -
- -
-
-
- -
- -
-
-
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
-
待确认
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
-
-
-
- - +
+ 基本信息 +
+
+
+ +
+ +
+
+
+
+
+ +
+
    +
  • 基本信息
  • +
  • 字段信息
  • +
  • 生成信息
  • +
+
+
+
+
+ 基本信息 +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+ 字段信息 +
+
+
+
+ 生成信息 +
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+ diff --git a/ruoyi-generator/src/main/resources/templates/agile/genTable/genTable.html b/ruoyi-generator/src/main/resources/templates/agile/genTable/genTable.html index 2715e201b..245ee293c 100644 --- a/ruoyi-generator/src/main/resources/templates/agile/genTable/genTable.html +++ b/ruoyi-generator/src/main/resources/templates/agile/genTable/genTable.html @@ -4,7 +4,8 @@
-
+ +
@@ -26,7 +27,7 @@