diff --git a/backend/pom.xml b/backend/pom.xml index 6ec77230fd..8f5b619355 100644 --- a/backend/pom.xml +++ b/backend/pom.xml @@ -284,6 +284,7 @@ static/**/*.woff static/**/*.woff2 static/**/*.ttf + static/**/*.ico @@ -294,6 +295,7 @@ static/**/*.woff static/**/*.woff2 static/**/*.ttf + static/**/*.ico @@ -416,13 +418,13 @@ - + - + diff --git a/backend/src/main/java/io/dataease/plugins/server/ThemeServer.java b/backend/src/main/java/io/dataease/plugins/server/ThemeServer.java index 99dc4c5fec..5e1ee1769d 100644 --- a/backend/src/main/java/io/dataease/plugins/server/ThemeServer.java +++ b/backend/src/main/java/io/dataease/plugins/server/ThemeServer.java @@ -2,6 +2,7 @@ package io.dataease.plugins.server; import java.util.List; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -11,6 +12,7 @@ import org.springframework.web.multipart.MultipartFile; import io.dataease.commons.exception.DEException; import io.dataease.commons.utils.LogUtil; +import io.dataease.i18n.Translator; import io.dataease.plugins.config.SpringContextUtil; import io.dataease.plugins.xpack.theme.dto.ThemeDto; import io.dataease.plugins.xpack.theme.dto.ThemeItem; @@ -42,7 +44,13 @@ public class ThemeServer { themeXpackService.save(request, bodyFile); } catch (Exception e) { LogUtil.error(e.getMessage(), e); - DEException.throwException(e); + if (ObjectUtils.isNotEmpty(e.getMessage()) && e.getMessage().indexOf("theme_name_repeat") != -1) { + DEException.throwException(Translator.get("theme_name_repeat")); + } else if (ObjectUtils.isNotEmpty(e.getMessage()) && e.getMessage().indexOf("theme_name_empty") != -1) { + DEException.throwException(Translator.get("theme_name_empty")); + } else { + DEException.throwException(e); + } } } diff --git a/backend/src/main/resources/i18n/messages_en_US.properties b/backend/src/main/resources/i18n/messages_en_US.properties index a4d73c1fec..8b8f3705cf 100644 --- a/backend/src/main/resources/i18n/messages_en_US.properties +++ b/backend/src/main/resources/i18n/messages_en_US.properties @@ -116,4 +116,6 @@ i18n_rp_exist=Row permission of the same type already exists i18n_field_name_repeat=Field name can't repeat i18n_calc_field_error=Field expression error i18n_cp_exist=Column permission of the same type already exists -connection_failed=Connection Failed \ No newline at end of file +connection_failed=Connection Failed +theme_name_repeat=name of theme has been existed +theme_name_empty=name can not be empty \ No newline at end of file diff --git a/backend/src/main/resources/i18n/messages_zh_CN.properties b/backend/src/main/resources/i18n/messages_zh_CN.properties index 2179e63f7b..e52791f02a 100644 --- a/backend/src/main/resources/i18n/messages_zh_CN.properties +++ b/backend/src/main/resources/i18n/messages_zh_CN.properties @@ -116,3 +116,5 @@ i18n_field_name_repeat=字段名不能重复 i18n_calc_field_error=字段表达式语法错误 i18n_cp_exist=已有同类型的列权限存在 connection_failed=连接失败 +theme_name_repeat=名称已存在 +theme_name_empty=名称不能为空 diff --git a/backend/src/main/resources/i18n/messages_zh_TW.properties b/backend/src/main/resources/i18n/messages_zh_TW.properties index 49b17f5dde..c3f6464aaa 100644 --- a/backend/src/main/resources/i18n/messages_zh_TW.properties +++ b/backend/src/main/resources/i18n/messages_zh_TW.properties @@ -117,3 +117,5 @@ i18n_field_name_repeat=字段名不能重復 i18n_calc_field_error=字段表達式語法錯誤 i18n_cp_exist=已有同類型的列權限存在 connection_failed=連接失敗 +theme_name_repeat=名稱已存在 +theme_name_empty=名稱不能為空 diff --git a/frontend/src/components/canvas/components/Editor/PreviewEject.vue b/frontend/src/components/canvas/components/Editor/PreviewEject.vue index c742272618..12113d1d49 100644 --- a/frontend/src/components/canvas/components/Editor/PreviewEject.vue +++ b/frontend/src/components/canvas/components/Editor/PreviewEject.vue @@ -29,6 +29,11 @@ export default { } } }, + watch: { + '$route.params.reportId': function() { + this.restore() + } + }, mounted() { this.restore() }, diff --git a/frontend/src/components/canvas/components/Editor/index.vue b/frontend/src/components/canvas/components/Editor/index.vue index c84b50d0b1..d87568af00 100644 --- a/frontend/src/components/canvas/components/Editor/index.vue +++ b/frontend/src/components/canvas/components/Editor/index.vue @@ -101,7 +101,7 @@ :id="'component' + item.id" ref="wrapperChild" class="component" - :filters="filterMap[item.propValue.viewId]" + :filters="filterMap[item.propValue && item.propValue.viewId]" :style="getComponentStyleDefault(item.style)" :prop-value="item.propValue" :element="item" diff --git a/frontend/src/components/widget/DeWidget/DeInputSearch.vue b/frontend/src/components/widget/DeWidget/DeInputSearch.vue index ec0e54a320..f38ddef05c 100644 --- a/frontend/src/components/widget/DeWidget/DeInputSearch.vue +++ b/frontend/src/components/widget/DeWidget/DeInputSearch.vue @@ -64,7 +64,7 @@ export default { }, created() { if (this.element.options.value) { - this.value = this.element.options.value + this.value = this.fillValueDerfault() this.search() } }, diff --git a/frontend/src/components/widget/serviceImpl/NumberRangeServiceImpl.js b/frontend/src/components/widget/serviceImpl/NumberRangeServiceImpl.js index ab190766eb..65ba1b1354 100644 --- a/frontend/src/components/widget/serviceImpl/NumberRangeServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/NumberRangeServiceImpl.js @@ -99,6 +99,11 @@ class NumberRangeServiceImpl extends WidgetService { return param } } + return { + component: element, + value: [], + operator: 'eq' + } } } const numberRangeServiceImpl = new NumberRangeServiceImpl() diff --git a/frontend/src/components/widget/serviceImpl/TextInputServiceImpl.js b/frontend/src/components/widget/serviceImpl/TextInputServiceImpl.js index 764c354bae..6d5ab5116d 100644 --- a/frontend/src/components/widget/serviceImpl/TextInputServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/TextInputServiceImpl.js @@ -68,7 +68,7 @@ class TextInputServiceImpl extends WidgetService { }) } getParam(element) { - const value = element.options.value + const value = this.fillValueDerfault(element) const param = { component: element, value: !value ? [] : Array.isArray(value) ? value : [value], @@ -76,6 +76,11 @@ class TextInputServiceImpl extends WidgetService { } return param } + fillValueDerfault(element) { + const defaultV = element.options.value === null ? '' : element.options.value.toString() + if (defaultV === null || typeof defaultV === 'undefined' || defaultV === '' || defaultV === '[object Object]') return null + return defaultV.split(',')[0] + } } const textInputServiceImpl = new TextInputServiceImpl() export default textInputServiceImpl diff --git a/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js b/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js index f69e9d36db..c078919a9e 100644 --- a/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js +++ b/frontend/src/components/widget/serviceImpl/TimeDateRangeServiceImpl.js @@ -125,7 +125,8 @@ class TimeDateRangeServiceImpl extends WidgetService { getEndQuarter() { var now = new Date() var nowMonth = now.getMonth() - const endMonth = Math.floor((nowMonth / 3)) * 3 + (nowMonth % 3) + const quar = Math.floor(nowMonth / 3) + const endMonth = quar * 3 + 2 const days = (endMonth === 5 || endMonth === 8) ? 30 : 31 return new Date(now.getFullYear(), endMonth, days) } diff --git a/frontend/src/views/chart/components/shape-attr/LabelSelector.vue b/frontend/src/views/chart/components/shape-attr/LabelSelector.vue index 3a5acfe09f..54258414cf 100644 --- a/frontend/src/views/chart/components/shape-attr/LabelSelector.vue +++ b/frontend/src/views/chart/components/shape-attr/LabelSelector.vue @@ -17,7 +17,7 @@ - + diff --git a/frontend/src/views/chart/group/Group.vue b/frontend/src/views/chart/group/Group.vue index 8699cabcf3..59eb5bec06 100644 --- a/frontend/src/views/chart/group/Group.vue +++ b/frontend/src/views/chart/group/Group.vue @@ -550,6 +550,7 @@ export default { this.$refs['tableForm'].validate((valid) => { if (valid) { view.title = view.name + view.sceneId = view.pid post('/chart/view/save', view).then(response => { this.closeTable() this.$message({ diff --git a/frontend/src/views/dataset/group/Group.vue b/frontend/src/views/dataset/group/Group.vue index 58064ec647..456f8a01fd 100644 --- a/frontend/src/views/dataset/group/Group.vue +++ b/frontend/src/views/dataset/group/Group.vue @@ -426,6 +426,7 @@ export default { this.$refs['tableForm'].validate((valid) => { if (valid) { table.isRename = true + table.sceneId = table.pid alter(table).then(response => { this.closeTable() this.$message({ diff --git a/frontend/src/views/panel/edit/index.vue b/frontend/src/views/panel/edit/index.vue index 0dd9838701..905aee548b 100644 --- a/frontend/src/views/panel/edit/index.vue +++ b/frontend/src/views/panel/edit/index.vue @@ -368,7 +368,7 @@ export default { } if (this.canvasStyleData.openCommonStyle) { - if (this.canvasStyleData.panel.backgroundType === 'image' && this.canvasStyleData.panel.imageUrl) { + if (this.canvasStyleData.panel.backgroundType === 'image' && typeof (this.canvasStyleData.panel.imageUrl) === 'string') { style = { background: `url(${this.canvasStyleData.panel.imageUrl}) no-repeat`, ...style diff --git a/frontend/src/views/wizard/index.vue b/frontend/src/views/wizard/index.vue index 8c8641ccc3..2700013857 100644 --- a/frontend/src/views/wizard/index.vue +++ b/frontend/src/views/wizard/index.vue @@ -54,9 +54,9 @@ export default { }, { head: this.$t('wizard.teaching_video'), - content: '40分钟带你玩转 DataEase
用DataEase开源工具可视化 ClickHouse数据', + content: '【DataEase教学视频】视图钻取
【DataEase教学视频】移动端布局设置', bottom: '', - href: 'https://e.vhall.com/v3/user/home/45637107', + href: 'https://space.bilibili.com/510493147/channel/collectiondetail?sid=150431', component: 'CardDetail' }, { diff --git a/mobile/.gitignore b/mobile/.gitignore index 208913e4ed..f5439a7519 100644 --- a/mobile/.gitignore +++ b/mobile/.gitignore @@ -6,7 +6,7 @@ yarn-debug.log* yarn-error.log* package-lock.json tests/**/coverage/ - +.automator/ # Editor directories and files .hbuilderx .idea diff --git a/mobile/package.json b/mobile/package.json index 87114f95ee..73618117cb 100644 --- a/mobile/package.json +++ b/mobile/package.json @@ -7,7 +7,7 @@ "build": "npm run build:h5", "build:app-plus": "cross-env NODE_ENV=production UNI_PLATFORM=app-plus vue-cli-service uni-build", "build:custom": "cross-env NODE_ENV=production uniapp-cli custom", - "build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 vue-cli-service uni-build", + "build:h5": "cross-env NODE_ENV=production UNI_PLATFORM=h5 UNI_OUTPUT_DIR=dist vue-cli-service uni-build", "build:mp-360": "cross-env NODE_ENV=production UNI_PLATFORM=mp-360 vue-cli-service uni-build", "build:mp-alipay": "cross-env NODE_ENV=production UNI_PLATFORM=mp-alipay vue-cli-service uni-build", "build:mp-baidu": "cross-env NODE_ENV=production UNI_PLATFORM=mp-baidu vue-cli-service uni-build",