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",