!69 同步dev分支
Merge pull request !69 from 疯狂的狮子Li/dev
已修改30个文件
已重命名1个文件
已删除1个文件
| | |
| | | [](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus/blob/master/LICENSE) |
| | | [](https://www.jetbrains.com/?from=RuoYi-Vue-Plus) |
| | | <br> |
| | | [](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus) |
| | | [](https://gitee.com/JavaLionLi/RuoYi-Vue-Plus) |
| | | []() |
| | | []() |
| | | []() |
| | |
| | | ipv4_address: 172.30.0.48 |
| | | |
| | | ruoyi-server1: |
| | | image: "ruoyi/ruoyi-server:2.5.0" |
| | | image: "ruoyi/ruoyi-server:2.5.1" |
| | | environment: |
| | | - TZ=Asia/Shanghai |
| | | volumes: |
| | | # é
ç½®æä»¶ |
| | | - /docker/server1/logs/:/ruoyi/server/logs/ |
| | | - /docker/ruoyi/uploadPath/:/ruoyi/server/ruoyi/uploadPath/ |
| | | privileged: true |
| | | restart: always |
| | | networks: |
| | |
| | | ipv4_address: 172.30.0.60 |
| | | |
| | | ruoyi-server2: |
| | | image: "ruoyi/ruoyi-server:2.5.0" |
| | | image: "ruoyi/ruoyi-server:2.5.1" |
| | | environment: |
| | | - TZ=Asia/Shanghai |
| | | volumes: |
| | | # é
ç½®æä»¶ |
| | | - /docker/server2/logs/:/ruoyi/server/logs/ |
| | | - /docker/ruoyi/uploadPath/:/ruoyi/server/ruoyi/uploadPath/ |
| | | privileged: true |
| | | restart: always |
| | | networks: |
| | |
| | | ipv4_address: 172.30.0.61 |
| | | |
| | | ruoyi-monitor-admin: |
| | | image: "ruoyi/ruoyi-monitor-admin:2.5.0" |
| | | image: "ruoyi/ruoyi-monitor-admin:2.5.1" |
| | | environment: |
| | | - TZ=Asia/Shanghai |
| | | privileged: true |
| | |
| | | |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-vue-plus</artifactId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | |
| | | <name>RuoYi-Vue-Plus</name> |
| | | <url>https://gitee.com/JavaLionLi/RuoYi-Vue-Plus</url> |
| | | <description>RuoYi-Vue-Plusåå°ç®¡çç³»ç»</description> |
| | | |
| | | <properties> |
| | | <ruoyi-vue-plus.version>2.5.0</ruoyi-vue-plus.version> |
| | | <ruoyi-vue-plus.version>2.5.1</ruoyi-vue-plus.version> |
| | | <spring-boot.version>2.4.8</spring-boot.version> |
| | | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| | | <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> |
| | |
| | | |
| | | RUN mkdir -p /ruoyi/server |
| | | RUN mkdir -p /ruoyi/server/logs |
| | | RUN mkdir -p /ruoyi/server/ruoyi/uploadPath |
| | | |
| | | WORKDIR /ruoyi/server |
| | | |
| | |
| | | <parent> |
| | | <artifactId>ruoyi-vue-plus</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <packaging>jar</packaging> |
| | |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.framework.captcha.UnsignedMathGenerator; |
| | | import com.ruoyi.framework.config.properties.CaptchaProperties; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | |
| | | /** |
| | | * éªè¯ç æä½å¤ç |
| | | * |
| | | * @author Lion Li |
| | | * @author ruoyi |
| | | */ |
| | | @RestController |
| | | public class CaptchaController { |
| | |
| | | @Autowired |
| | | private CaptchaProperties captchaProperties; |
| | | |
| | | @Autowired |
| | | private ISysConfigService configService; |
| | | |
| | | /** |
| | | * çæéªè¯ç |
| | | */ |
| | | @GetMapping("/captchaImage") |
| | | public AjaxResult getCode() { |
| | | Map<String, Object> ajax = new HashMap<>(); |
| | | Boolean enabled = captchaProperties.getEnabled(); |
| | | ajax.put("enabled", enabled); |
| | | if (!enabled) { |
| | | boolean captchaOnOff = configService.selectCaptchaOnOff(); |
| | | ajax.put("captchaOnOff", captchaOnOff); |
| | | if (!captchaOnOff) { |
| | | return AjaxResult.success(ajax); |
| | | } |
| | | // ä¿åéªè¯ç ä¿¡æ¯ |
| | |
| | | package com.ruoyi.web.controller.system; |
| | | |
| | | import cn.hutool.core.lang.Validator; |
| | | import com.ruoyi.common.annotation.Log; |
| | | import com.ruoyi.common.constant.UserConstants; |
| | | import com.ruoyi.common.core.controller.BaseController; |
| | |
| | | import com.ruoyi.common.enums.BusinessType; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.ServletUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.framework.web.service.TokenService; |
| | | import com.ruoyi.system.service.ISysMenuService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | { |
| | | return AjaxResult.error("æ°å¢èå'" + menu.getMenuName() + "'失败ï¼èååç§°å·²åå¨"); |
| | | } |
| | | else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) |
| | | else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !Validator.isUrl(menu.getPath())) |
| | | { |
| | | return AjaxResult.error("æ°å¢èå'" + menu.getMenuName() + "'失败ï¼å°åå¿
须以http(s)://å¼å¤´"); |
| | | } |
| | |
| | | { |
| | | return AjaxResult.error("ä¿®æ¹èå'" + menu.getMenuName() + "'失败ï¼èååç§°å·²åå¨"); |
| | | } |
| | | else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) |
| | | else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !Validator.isUrl(menu.getPath())) |
| | | { |
| | | return AjaxResult.error("ä¿®æ¹èå'" + menu.getMenuName() + "'失败ï¼å°åå¿
须以http(s)://å¼å¤´"); |
| | | } |
| | |
| | | addressEnabled: true |
| | | |
| | | captcha: |
| | | # éªè¯ç å¼å
³ |
| | | enabled: true |
| | | # éªè¯ç ç±»å math æ°ç»è®¡ç® char å符éªè¯ |
| | | type: math |
| | | # line çº¿æ®µå¹²æ° circle ååå¹²æ° shear ææ²å¹²æ° |
| | |
| | | <parent> |
| | | <artifactId>ruoyi-vue-plus</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | |
| | | <parent> |
| | | <artifactId>ruoyi-vue-plus</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | |
| | | <parent> |
| | | <artifactId>ruoyi-vue-plus</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <artifactId>ruoyi-extend</artifactId> |
| | |
| | | <parent> |
| | | <artifactId>ruoyi-extend</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | <packaging>jar</packaging> |
| | |
| | | <parent> |
| | | <artifactId>ruoyi-vue-plus</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | |
| | | public class CaptchaProperties { |
| | | |
| | | /** |
| | | * éªè¯ç å¼å
³ |
| | | */ |
| | | private Boolean enabled; |
| | | |
| | | /** |
| | | * éªè¯ç ç±»å |
| | | */ |
| | | private String type; |
| | |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.MessageUtils; |
| | | import com.ruoyi.common.utils.ServletUtils; |
| | | import com.ruoyi.framework.config.properties.CaptchaProperties; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.ruoyi.system.service.ISysUserService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.security.authentication.AuthenticationManager; |
| | |
| | | private RedisCache redisCache; |
| | | |
| | | @Autowired |
| | | private CaptchaProperties captchaProperties; |
| | | private ISysUserService userService; |
| | | |
| | | @Autowired |
| | | private ISysUserService userService; |
| | | private ISysConfigService configService; |
| | | |
| | | @Autowired |
| | | private AsyncService asyncService; |
| | |
| | | public String login(String username, String password, String code, String uuid) |
| | | { |
| | | HttpServletRequest request = ServletUtils.getRequest(); |
| | | if(captchaProperties.getEnabled()) { |
| | | String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; |
| | | String captcha = redisCache.getCacheObject(verifyKey); |
| | | redisCache.deleteObject(verifyKey); |
| | | if (captcha == null) { |
| | | asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"), request); |
| | | throw new CaptchaExpireException(); |
| | | } |
| | | if (!code.equalsIgnoreCase(captcha)) { |
| | | asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"), request); |
| | | throw new CaptchaException(); |
| | | } |
| | | } |
| | | boolean captchaOnOff = configService.selectCaptchaOnOff(); |
| | | // éªè¯ç å¼å
³ |
| | | if (captchaOnOff) |
| | | { |
| | | validateCapcha(username, code, uuid, request); |
| | | } |
| | | // ç¨æ·éªè¯ |
| | | Authentication authentication = null; |
| | | try |
| | |
| | | } |
| | | |
| | | /** |
| | | * æ ¡éªéªè¯ç |
| | | * |
| | | * @param username ç¨æ·å |
| | | * @param code éªè¯ç |
| | | * @param uuid å¯ä¸æ è¯ |
| | | * @return ç»æ |
| | | */ |
| | | public void validateCapcha(String username, String code, String uuid, HttpServletRequest request) { |
| | | String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; |
| | | String captcha = redisCache.getCacheObject(verifyKey); |
| | | redisCache.deleteObject(verifyKey); |
| | | if (captcha == null) { |
| | | asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"), request); |
| | | throw new CaptchaExpireException(); |
| | | } |
| | | if (!code.equalsIgnoreCase(captcha)) { |
| | | asyncService.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"), request); |
| | | throw new CaptchaException(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * è®°å½ç»å½ä¿¡æ¯ |
| | | */ |
| | | public void recordLoginInfo(SysUser user) |
| | |
| | | <parent> |
| | | <artifactId>ruoyi-vue-plus</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.io.StringWriter; |
| | | import java.util.Arrays; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | import java.util.zip.ZipEntry; |
| | | import java.util.zip.ZipOutputStream; |
| | |
| | | for (GenTableColumn cenTableColumn : genTable.getColumns()) { |
| | | genTableColumnMapper.update(cenTableColumn, |
| | | new LambdaUpdateWrapper<GenTableColumn>() |
| | | .set(cenTableColumn.getIsPk() == null, GenTableColumn::getIsPk, null) |
| | | .set(cenTableColumn.getIsIncrement() == null, GenTableColumn::getIsIncrement, null) |
| | | .set(cenTableColumn.getIsInsert() == null, GenTableColumn::getIsInsert, null) |
| | | .set(cenTableColumn.getIsEdit() == null, GenTableColumn::getIsEdit, null) |
| | | .set(cenTableColumn.getIsList() == null, GenTableColumn::getIsList, null) |
| | | .set(cenTableColumn.getIsQuery() == null, GenTableColumn::getIsQuery, null) |
| | | .set(cenTableColumn.getIsRequired() == null, GenTableColumn::getIsRequired, null) |
| | | .eq(GenTableColumn::getColumnId,cenTableColumn.getColumnId())); |
| | | .set(StrUtil.isBlank(cenTableColumn.getColumnComment()), GenTableColumn::getColumnComment, null) |
| | | .set(StrUtil.isBlank(cenTableColumn.getIsPk()), GenTableColumn::getIsPk, null) |
| | | .set(StrUtil.isBlank(cenTableColumn.getIsIncrement()), GenTableColumn::getIsIncrement, null) |
| | | .set(StrUtil.isBlank(cenTableColumn.getIsInsert()), GenTableColumn::getIsInsert, null) |
| | | .set(StrUtil.isBlank(cenTableColumn.getIsEdit()), GenTableColumn::getIsEdit, null) |
| | | .set(StrUtil.isBlank(cenTableColumn.getIsList()), GenTableColumn::getIsList, null) |
| | | .set(StrUtil.isBlank(cenTableColumn.getIsQuery()), GenTableColumn::getIsQuery, null) |
| | | .set(StrUtil.isBlank(cenTableColumn.getIsRequired()), GenTableColumn::getIsRequired, null) |
| | | .set(StrUtil.isBlank(cenTableColumn.getQueryType()), GenTableColumn::getQueryType, null) |
| | | .set(StrUtil.isBlank(cenTableColumn.getDictType()), GenTableColumn::getDictType, null) |
| | | .eq(GenTableColumn::getColumnId,cenTableColumn.getColumnId())); |
| | | } |
| | | } |
| | | } |
| | |
| | | if (row > 0) { |
| | | // ä¿ååä¿¡æ¯ |
| | | List<GenTableColumn> genTableColumns = genTableColumnMapper.selectDbTableColumnsByName(tableName); |
| | | List<GenTableColumn> saveColumns = new ArrayList<>(); |
| | | for (GenTableColumn column : genTableColumns) { |
| | | GenUtils.initColumnField(column, table); |
| | | saveColumns.add(column); |
| | | } |
| | | genTableColumnMapper.insertAll(genTableColumns); |
| | | if (CollUtil.isNotEmpty(saveColumns)) { |
| | | genTableColumnMapper.insertAll(saveColumns); |
| | | } |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | |
| | | } |
| | | List<String> dbTableColumnNames = dbTableColumns.stream().map(GenTableColumn::getColumnName).collect(Collectors.toList()); |
| | | |
| | | List<GenTableColumn> saveColumns = new ArrayList<>(); |
| | | dbTableColumns.forEach(column -> { |
| | | if (!tableColumnNames.contains(column.getColumnName())) { |
| | | GenUtils.initColumnField(column, table); |
| | | saveColumns.add(column); |
| | | } |
| | | }); |
| | | genTableColumnMapper.insertAll(tableColumns); |
| | | if (CollUtil.isNotEmpty(saveColumns)) { |
| | | genTableColumnMapper.insertAll(saveColumns); |
| | | } |
| | | |
| | | List<GenTableColumn> delColumns = tableColumns.stream().filter(column -> !dbTableColumnNames.contains(column.getColumnName())).collect(Collectors.toList()); |
| | | if (CollUtil.isNotEmpty(delColumns)) { |
| | |
| | | #else |
| | | #set($comment=$column.columnComment) |
| | | #end |
| | | #if(${column.dictType} != '') |
| | | #if(${column.dictType} && ${column.dictType} != '') |
| | | // $commentåå
¸ |
| | | ${column.javaField}Options: [], |
| | | #elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN") |
| | |
| | | created() { |
| | | this.getList(); |
| | | #foreach ($column in $columns) |
| | | #if(${column.dictType} != '') |
| | | #if(${column.dictType} && ${column.dictType} != '') |
| | | this.getDicts("${column.dictType}").then(response => { |
| | | this.${column.javaField}Options = response.data; |
| | | }); |
| | |
| | | }); |
| | | }, |
| | | #foreach ($column in $columns) |
| | | #if(${column.dictType} != '') |
| | | #if(${column.dictType} && ${column.dictType} != '') |
| | | #set($parentheseIndex=$column.columnComment.indexOf("ï¼")) |
| | | #if($parentheseIndex != -1) |
| | | #set($comment=$column.columnComment.substring(0, $parentheseIndex)) |
| | |
| | | #else |
| | | #set($comment=$column.columnComment) |
| | | #end |
| | | #if(${column.dictType} != '') |
| | | #if(${column.dictType} && ${column.dictType} != '') |
| | | // $commentåå
¸ |
| | | ${column.javaField}Options: [], |
| | | #elseif($column.htmlType == "datetime" && $column.queryType == "BETWEEN") |
| | |
| | | created() { |
| | | this.getList(); |
| | | #foreach ($column in $columns) |
| | | #if(${column.dictType} != '') |
| | | #if(${column.dictType} && ${column.dictType} != '') |
| | | this.getDicts("${column.dictType}").then(response => { |
| | | this.${column.javaField}Options = response.data; |
| | | }); |
| | |
| | | }); |
| | | }, |
| | | #foreach ($column in $columns) |
| | | #if(${column.dictType} != '') |
| | | #if(${column.dictType} && ${column.dictType} != '') |
| | | #set($parentheseIndex=$column.columnComment.indexOf("ï¼")) |
| | | #if($parentheseIndex != -1) |
| | | #set($comment=$column.columnComment.substring(0, $parentheseIndex)) |
| | |
| | | <parent> |
| | | <artifactId>ruoyi-vue-plus</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | |
| | | <parent> |
| | | <artifactId>ruoyi-vue-plus</artifactId> |
| | | <groupId>com.ruoyi</groupId> |
| | | <version>2.5.0</version> |
| | | <version>2.5.1</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | |
| | | package com.ruoyi.system.domain.vo; |
| | | |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import cn.hutool.core.lang.Validator; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | import lombok.experimental.Accessors; |
| | |
| | | this.title = title; |
| | | this.icon = icon; |
| | | this.noCache = noCache; |
| | | if (StringUtils.ishttp(link)) { |
| | | if (Validator.isUrl(link)) { |
| | | this.link = link; |
| | | } |
| | | } |
| | |
| | | public String selectConfigByKey(String configKey); |
| | | |
| | | /** |
| | | * è·åéªè¯ç å¼å
³ |
| | | * |
| | | * @return trueå¼å¯ï¼falseå
³é |
| | | */ |
| | | public boolean selectCaptchaOnOff(); |
| | | |
| | | /** |
| | | * æ¥è¯¢åæ°é
ç½®å表 |
| | | * |
| | | * @param config åæ°é
ç½®ä¿¡æ¯ |
| | |
| | | } |
| | | |
| | | /** |
| | | * è·åéªè¯ç å¼å
³ |
| | | * |
| | | * @return trueå¼å¯ï¼falseå
³é |
| | | */ |
| | | public boolean selectCaptchaOnOff() { |
| | | String captchaOnOff = selectConfigByKey("sys.account.captchaOnOff"); |
| | | if (StrUtil.isEmpty(captchaOnOff)) { |
| | | return true; |
| | | } |
| | | return Convert.toBool(captchaOnOff); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢åæ°é
ç½®å表 |
| | | * |
| | | * @param config åæ°é
ç½®ä¿¡æ¯ |
| | |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.mybatisplus.core.ServicePlusImpl; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.system.domain.SysRoleMenu; |
| | | import com.ruoyi.system.domain.vo.MetaVo; |
| | | import com.ruoyi.system.domain.vo.RouterVo; |
| | |
| | | import com.ruoyi.system.mapper.SysRoleMapper; |
| | | import com.ruoyi.system.mapper.SysRoleMenuMapper; |
| | | import com.ruoyi.system.service.ISysMenuService; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | |
| | | * @return ç»æ |
| | | */ |
| | | public boolean isInnerLink(SysMenu menu) { |
| | | return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); |
| | | return menu.getIsFrame().equals(UserConstants.NO_FRAME) && Validator.isUrl(menu.getPath()); |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | "name": "ruoyi-vue-plus", |
| | | "version": "2.5.0", |
| | | "version": "2.5.1", |
| | | "description": "RuoYi-Vue-Plusåå°ç®¡çç³»ç»", |
| | | "author": "LionLi", |
| | | "license": "MIT", |
| | |
| | | this.quill.format("image", false); |
| | | } |
| | | }); |
| | | toolbar.addHandler("video", (value) => { |
| | | this.uploadType = "video"; |
| | | if (value) { |
| | | this.$refs.upload.$children[0].$refs.input.click(); |
| | | } else { |
| | | this.quill.format("video", false); |
| | | } |
| | | }); |
| | | // toolbar.addHandler("video", (value) => { |
| | | // this.uploadType = "video"; |
| | | // if (value) { |
| | | // this.$refs.upload.$children[0].$refs.input.click(); |
| | | // } else { |
| | | // this.quill.format("video", false); |
| | | // } |
| | | // }); |
| | | } |
| | | this.Quill.pasteHTML(this.currentValue); |
| | | this.Quill.on("text-change", (delta, oldDelta, source) => { |
| | |
| | | methods: { |
| | | // å é¤å¾ç |
| | | handleRemove(file, fileList) { |
| | | const findex = this.fileList.indexOf(file.name); |
| | | const findex = this.fileList.map(f => f.name).indexOf(file.name); |
| | | this.fileList.splice(findex, 1); |
| | | this.$emit("input", this.listToString(this.fileList)); |
| | | }, |
| | |
| | | <span>æ´æ°æ¥å¿</span> |
| | | </div> |
| | | <el-collapse accordion> |
| | | <el-collapse-item title="v2.5.1 - 2021-7-13"> |
| | | <ol> |
| | | <li>update éªè¯ç å¼å
³ 转移å°è¡¨ åæ°ç®¡ç å
</li> |
| | | <li>update 使ç¨hutooléæ å¤ææ¯å¦url</li> |
| | | <li>fix ä¿®å¤ dockerä¸å¡é群é¨ç½²ä¸æä»¶ä¸ä¼ çé®é¢</li> |
| | | <li>fix ä¿®å¤ä»£ç çæåæ¥è¡¨ç»æidå²çªé®é¢</li> |
| | | <li>fix ä¿®å¤ä»£ç çæéæ©åå
¸ æ æ³åæ¶é®é¢</li> |
| | | <li>fix ä¿®å¤ä»£ç çæåå
¸ä¸ºnullé®é¢</li> |
| | | <li>fix å¾çä¸ä¼ å¤å¾æ¶æ æ³å é¤ç¸åºå¾çä¿®å¤</li> |
| | | <li>remove å é¤å¯ææ¬videoäºä»¶</li> |
| | | </ol> |
| | | </el-collapse-item> |
| | | <el-collapse-item title="v2.5.0 - 2021-7-12"> |
| | | <ol> |
| | | <li>update springboot 2.4.7 => 2.4.8</li> |
| | |
| | | <svg-icon slot="prefix" icon-class="password" class="el-input__icon input-icon" /> |
| | | </el-input> |
| | | </el-form-item> |
| | | <el-form-item prop="code" v-if="captchaEnabled"> |
| | | <el-form-item prop="code" v-if="captchaOnOff"> |
| | | <el-input |
| | | v-model="loginForm.code" |
| | | auto-complete="off" |
| | |
| | | code: [{ required: true, trigger: "change", message: "éªè¯ç ä¸è½ä¸ºç©º" }] |
| | | }, |
| | | loading: false, |
| | | redirect: undefined, |
| | | captchaEnabled:false |
| | | captchaOnOff: true, |
| | | redirect: undefined |
| | | }; |
| | | }, |
| | | watch: { |
| | |
| | | methods: { |
| | | getCode() { |
| | | getCodeImg().then(res => { |
| | | this.captchaEnabled = res.data.enabled; |
| | | if(res.data.enabled){ |
| | | this.captchaOnOff = res.data.captchaOnOff === undefined ? true : res.data.captchaOnOff; |
| | | if (this.captchaOnOff) { |
| | | this.codeUrl = "data:image/gif;base64," + res.data.img; |
| | | this.loginForm.uuid = res.data.uuid; |
| | | } |
| | |
| | | this.$router.push({ path: this.redirect || "/" }).catch(()=>{}); |
| | | }).catch(() => { |
| | | this.loading = false; |
| | | this.getCode(); |
| | | if (this.captchaOnOff) { |
| | | this.getCode(); |
| | | } |
| | | }); |
| | | } |
| | | }); |
ÎļþÃû´Ó sql/ry_20210210.sql ÐÞ¸Ä |
| | |
| | | primary key (config_id) |
| | | ) engine=innodb auto_increment=100 comment = 'åæ°é
置表'; |
| | | |
| | | insert into sys_config values(1, 'ä¸»æ¡æ¶é¡µ-é»è®¤ç®è¤æ ·å¼åç§°', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', sysdate(), '', null, 'èè² skin-blueãç»¿è² skin-greenãç´«è² skin-purpleãçº¢è² skin-redãé»è² skin-yellow' ); |
| | | insert into sys_config values(2, 'ç¨æ·ç®¡ç-è´¦å·åå§å¯ç ', 'sys.user.initPassword', '123456', 'Y', 'admin', sysdate(), '', null, 'åå§åå¯ç 123456' ); |
| | | insert into sys_config values(3, 'ä¸»æ¡æ¶é¡µ-ä¾§è¾¹æ 主é¢', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', sysdate(), '', null, 'æ·±è²ä¸»é¢theme-darkï¼æµ
è²ä¸»é¢theme-light' ); |
| | | insert into sys_config values(1, 'ä¸»æ¡æ¶é¡µ-é»è®¤ç®è¤æ ·å¼åç§°', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', sysdate(), '', null, 'èè² skin-blueãç»¿è² skin-greenãç´«è² skin-purpleãçº¢è² skin-redãé»è² skin-yellow' ); |
| | | insert into sys_config values(2, 'ç¨æ·ç®¡ç-è´¦å·åå§å¯ç ', 'sys.user.initPassword', '123456', 'Y', 'admin', sysdate(), '', null, 'åå§åå¯ç 123456' ); |
| | | insert into sys_config values(3, 'ä¸»æ¡æ¶é¡µ-ä¾§è¾¹æ 主é¢', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', sysdate(), '', null, 'æ·±è²ä¸»é¢theme-darkï¼æµ
è²ä¸»é¢theme-light' ); |
| | | insert into sys_config values(4, 'è´¦å·èªå©-éªè¯ç å¼å
³', 'sys.account.captchaOnOff', 'true', 'Y', 'admin', sysdate(), '', null, 'æ¯å¦å¼å¯ç»å½éªè¯ç åè½ï¼trueå¼å¯ï¼falseå
³éï¼'); |
| | | |
| | | |
| | | -- ---------------------------- |