Commit 020535ab3aa95063f1446a4a1422145bc0c09d30
Committed by
Gitee
Merge branch 'master' of gitee.com:zhijiantianya/ruoyi-vue-pro into master
Signed-off-by: xingyu <xingyu4j@vip.qq.com>
Showing
10 changed files
with
62 additions
and
13 deletions
sql/optional/mall/mall.sql
| ... | ... | @@ -253,7 +253,7 @@ create table product_sku |
| 253 | 253 | collate utf8mb4_general_ci; |
| 254 | 254 | |
| 255 | 255 | |
| 256 | ----Market-Banner管理SQL | |
| 256 | +-- Market-Banner管理SQL | |
| 257 | 257 | drop table if exists market_banner; |
| 258 | 258 | CREATE TABLE `market_banner` ( |
| 259 | 259 | `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'Banner编号', |
| ... | ... | @@ -273,7 +273,7 @@ CREATE TABLE `market_banner` ( |
| 273 | 273 | ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COMMENT='Banner管理'; |
| 274 | 274 | -- 菜单 SQL |
| 275 | 275 | INSERT INTO `system_menu`(`id`,`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `status`) |
| 276 | -VALUES (2002, 'Banner管理', '', 2, 1, 2000, 'brand', '', 'mall/market/banner/index', 0); | |
| 276 | +VALUES (2026, 'Banner管理', '', 2, 1, 2000, 'brand', '', 'mall/market/banner/index', 0); | |
| 277 | 277 | -- 按钮父菜单ID |
| 278 | 278 | SELECT @parentId := LAST_INSERT_ID(); |
| 279 | 279 | -- 按钮 SQL | ... | ... |
yudao-dependencies/pom.xml
| ... | ... | @@ -66,6 +66,7 @@ |
| 66 | 66 | <yunpian-java-sdk.version>1.2.7</yunpian-java-sdk.version> |
| 67 | 67 | <justauth.version>1.4.0</justauth.version> |
| 68 | 68 | <jimureport.version>1.5.2</jimureport.version> |
| 69 | + <xercesImpl.version>2.12.0</xercesImpl.version> | |
| 69 | 70 | </properties> |
| 70 | 71 | |
| 71 | 72 | <dependencyManagement> |
| ... | ... | @@ -577,6 +578,11 @@ |
| 577 | 578 | <artifactId>jimureport-spring-boot-starter</artifactId> |
| 578 | 579 | <version>${jimureport.version}</version> |
| 579 | 580 | </dependency> |
| 581 | + <dependency> | |
| 582 | + <groupId>xerces</groupId> | |
| 583 | + <artifactId>xercesImpl</artifactId> | |
| 584 | + <version>${xercesImpl.version}</version> | |
| 585 | + </dependency> | |
| 580 | 586 | </dependencies> |
| 581 | 587 | </dependencyManagement> |
| 582 | 588 | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/service/codegen/CodegenServiceImpl.java
| ... | ... | @@ -154,12 +154,12 @@ public class CodegenServiceImpl implements CodegenService { |
| 154 | 154 | // 构建 CodegenColumnDO 数组,只同步新增的字段 |
| 155 | 155 | List<CodegenColumnDO> codegenColumns = codegenColumnMapper.selectListByTableId(tableId); |
| 156 | 156 | Set<String> codegenColumnNames = CollectionUtils.convertSet(codegenColumns, CodegenColumnDO::getColumnName); |
| 157 | - // 移除已经存在的字段 | |
| 158 | - tableFields.removeIf(column -> codegenColumnNames.contains(column.getColumnName())); | |
| 159 | 157 | // 计算需要删除的字段 |
| 160 | 158 | Set<String> tableFieldNames = CollectionUtils.convertSet(tableFields, TableField::getName); |
| 161 | 159 | Set<Long> deleteColumnIds = codegenColumns.stream().filter(column -> !tableFieldNames.contains(column.getColumnName())) |
| 162 | 160 | .map(CodegenColumnDO::getId).collect(Collectors.toSet()); |
| 161 | + // 移除已经存在的字段 | |
| 162 | + tableFields.removeIf(column -> codegenColumnNames.contains(column.getColumnName())); | |
| 163 | 163 | if (CollUtil.isEmpty(tableFields) && CollUtil.isEmpty(deleteColumnIds)) { |
| 164 | 164 | throw exception(CODEGEN_SYNC_NONE_CHANGE); |
| 165 | 165 | } | ... | ... |
yudao-module-infra/yudao-module-infra-biz/src/main/resources/codegen/vue/views/index.vue.vm
| ... | ... | @@ -96,7 +96,7 @@ |
| 96 | 96 | @pagination="getList"/> |
| 97 | 97 | |
| 98 | 98 | <!-- 对话框(添加 / 修改) --> |
| 99 | - <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body> | |
| 99 | + <el-dialog :title="title" :visible.sync="open" width="500px" v-dialogDrag append-to-body> | |
| 100 | 100 | <el-form ref="form" :model="form" :rules="rules" label-width="80px"> |
| 101 | 101 | #foreach($column in $columns) |
| 102 | 102 | #if ($column.createOperation || $column.updateOperation) | ... | ... |
yudao-module-visualization/yudao-module-visualization-biz/pom.xml
| ... | ... | @@ -68,6 +68,11 @@ |
| 68 | 68 | <groupId>org.jeecgframework.jimureport</groupId> |
| 69 | 69 | <artifactId>jimureport-spring-boot-starter</artifactId> |
| 70 | 70 | </dependency> |
| 71 | + <!-- 单独依赖升级版本,解决低版本validator失败问题 --> | |
| 72 | + <dependency> | |
| 73 | + <groupId>xerces</groupId> | |
| 74 | + <artifactId>xercesImpl</artifactId> | |
| 75 | + </dependency> | |
| 71 | 76 | |
| 72 | 77 | </dependencies> |
| 73 | 78 | </project> | ... | ... |
yudao-server/src/test/java/cn/iocoder/yudao/ProjectReactor.java
| ... | ... | @@ -50,7 +50,12 @@ public class ProjectReactor { |
| 50 | 50 | String projectBaseDirNew = projectBaseDir + "-new"; // 一键改名后,“新”项目所在的目录 |
| 51 | 51 | log.info("[main][检测新项目目录 ({})是否存在]", projectBaseDirNew); |
| 52 | 52 | if (FileUtil.exist(projectBaseDirNew)) { |
| 53 | - log.info("[main][新项目目录检测 ({})已存在,请更改新的目录,程序退出]", projectBaseDirNew); | |
| 53 | + log.error("[main][新项目目录检测 ({})已存在,请更改新的目录!程序退出]", projectBaseDirNew); | |
| 54 | + return; | |
| 55 | + } | |
| 56 | + // 如果新目录中存在 PACKAGE_NAME,ARTIFACT_ID 等关键字,路径会被替换,导致生成的文件不在预期目录 | |
| 57 | + if (StrUtil.containsAny(projectBaseDirNew, PACKAGE_NAME, ARTIFACT_ID, StrUtil.upperFirst(ARTIFACT_ID))) { | |
| 58 | + log.error("[main][新项目目录检测 ({}) 存在冲突名称「{}」或者「{}」,请更改新的目录!程序退出]", projectBaseDirNew, PACKAGE_NAME, ARTIFACT_ID); | |
| 54 | 59 | return; |
| 55 | 60 | } |
| 56 | 61 | log.info("[main][完成新项目目录检测,新项目路径地址 ({})]", projectBaseDirNew); | ... | ... |
yudao-ui-admin/src/assets/styles/ruoyi.scss
| ... | ... | @@ -71,6 +71,16 @@ |
| 71 | 71 | padding: 10px 20px 0; |
| 72 | 72 | } |
| 73 | 73 | |
| 74 | +.el-dialog{ | |
| 75 | + display: flex; | |
| 76 | + flex-direction: column; | |
| 77 | + max-width: calc(100% - 30px); | |
| 78 | + max-height: calc(100% - 70px); | |
| 79 | + .el-dialog__body { | |
| 80 | + overflow: auto; | |
| 81 | + } | |
| 82 | +} | |
| 83 | + | |
| 74 | 84 | .el-table { |
| 75 | 85 | .el-table__header-wrapper, .el-table__fixed-header-wrapper { |
| 76 | 86 | th { | ... | ... |
yudao-ui-admin/src/main.js
| ... | ... | @@ -70,6 +70,10 @@ console.log(request) |
| 70 | 70 | Vue.prototype.$axios = request |
| 71 | 71 | import '@/styles/index.scss' |
| 72 | 72 | |
| 73 | +// 默认点击背景不关闭弹窗 | |
| 74 | +import ElementUI from 'element-ui' | |
| 75 | +ElementUI.Dialog.props.closeOnClickModal.default = false | |
| 76 | + | |
| 73 | 77 | /** |
| 74 | 78 | * If you don't want to use mock-server |
| 75 | 79 | * you want to use MockJs for mock api | ... | ... |
yudao-ui-admin/src/utils/formGenerator.js
| 1 | 1 | /** |
| 2 | 2 | * 将服务端返回的 fields 字符串数组,解析成 JSON 数组 |
| 3 | + * 如果指定了 variables 参数可对表单进行初始化 | |
| 3 | 4 | * |
| 4 | 5 | * @param fields JSON 字符串数组 |
| 6 | + * @param variables Object 表单初始值 | |
| 5 | 7 | * @returns {*[]} JSON 数组 |
| 6 | 8 | */ |
| 7 | -export function decodeFields(fields) { | |
| 8 | - const drawingList = [] | |
| 9 | - fields.forEach(item => { | |
| 10 | - drawingList.push(JSON.parse(item)) | |
| 9 | +export function decodeFields(fields, variables) { | |
| 10 | + const drawingList = (fields || []).map(json => { | |
| 11 | + const item = JSON.parse(json) | |
| 12 | + | |
| 13 | + if (typeof variables === 'undefined' ) return item | |
| 14 | + | |
| 15 | + const setDefault = (item, variables) => { | |
| 16 | + if (typeof variables[item.__vModel__] !== 'undefined') { | |
| 17 | + item.__config__.defaultValue = variables[item.__vModel__] | |
| 18 | + } | |
| 19 | + if (item.__config__.children && item.__config__.children.length) { | |
| 20 | + item.__config__.children.forEach(child => { | |
| 21 | + setDefault(child, variables) | |
| 22 | + }) | |
| 23 | + } | |
| 24 | + } | |
| 25 | + | |
| 26 | + setDefault(item, variables) | |
| 27 | + | |
| 28 | + return item | |
| 11 | 29 | }) |
| 30 | + | |
| 12 | 31 | return drawingList |
| 13 | 32 | } | ... | ... |
yudao-ui-admin/src/views/infra/build/index.vue
| ... | ... | @@ -133,7 +133,7 @@ import { |
| 133 | 133 | inputComponents, selectComponents, layoutComponents, formConf |
| 134 | 134 | } from '@/components/generator/config' |
| 135 | 135 | import { |
| 136 | - exportDefault, beautifierConf, isNumberStr, titleCase, deepClone, isObjectObject | |
| 136 | + exportDefault, beautifierConf, isNumberStr, titleCase, deepClone | |
| 137 | 137 | } from '@/utils/index' |
| 138 | 138 | import { |
| 139 | 139 | makeUpHtml, vueTemplate, vueScript, cssStyle |
| ... | ... | @@ -272,7 +272,7 @@ export default { |
| 272 | 272 | arr.reduce((pre, item, i) => { |
| 273 | 273 | if (arr.length === i + 1) { |
| 274 | 274 | pre[item] = data |
| 275 | - } else if (!isObjectObject(pre[item])) { | |
| 275 | + } else if (pre[item]===undefined) { | |
| 276 | 276 | pre[item] = {} |
| 277 | 277 | } |
| 278 | 278 | return pre[item] |
| ... | ... | @@ -300,7 +300,7 @@ export default { |
| 300 | 300 | url |
| 301 | 301 | }).then(resp => { |
| 302 | 302 | this.setLoading(component, false) |
| 303 | - this.setRespData(component, resp.data) | |
| 303 | + this.setRespData(component, resp) | |
| 304 | 304 | }) |
| 305 | 305 | } |
| 306 | 306 | }, | ... | ... |