diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableFieldsService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableFieldsService.java index 919deddbb5..fe31ef30c1 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableFieldsService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableFieldsService.java @@ -34,7 +34,7 @@ public class DataSetTableFieldsService { datasetTableField.setId(UUID.randomUUID().toString()); // 若dataeasename为空,则用MD5(id)作为dataeasename if (StringUtils.isEmpty(datasetTableField.getDataeaseName())) { - datasetTableField.setDataeaseName(DorisTableUtils.dorisFieldName(datasetTableField.getId())); + datasetTableField.setDataeaseName(DorisTableUtils.columnName(datasetTableField.getId())); } if (ObjectUtils.isEmpty(datasetTableField.getLastSyncTime())) { datasetTableField.setLastSyncTime(System.currentTimeMillis()); diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index e6b944db19..ddc40c7ead 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -1183,7 +1183,7 @@ public class DataSetTableService { if (StringUtils.isNotEmpty(tableId) && editType == 1 ) { List datasetTableFields = dataSetTableFieldsService.getFieldsByTableId(tableId); - datasetTableFields.stream().filter(datasetTableField -> datasetTableField.getName().startsWith("C_")).collect(Collectors.toList()); + datasetTableFields.stream().filter(datasetTableField -> datasetTableField.getExtField() == 0).collect(Collectors.toList()); datasetTableFields.sort((o1, o2) -> { if (o1.getColumnIndex() == null) { return -1; diff --git a/backend/src/main/java/io/dataease/service/dataset/DatasetFunctionService.java b/backend/src/main/java/io/dataease/service/dataset/DatasetFunctionService.java index 0ce78d354e..ff6337037f 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DatasetFunctionService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DatasetFunctionService.java @@ -33,6 +33,7 @@ public class DatasetFunctionService { if (StringUtils.isNotEmpty(datasetTableFunction.getDbType())) { criteria.andDbTypeEqualTo(datasetTableFunction.getDbType()); } + datasetTableFunctionExample.setOrderByClause("name asc"); return datasetTableFunctionMapper.selectByExampleWithBLOBs(datasetTableFunctionExample); } diff --git a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java index 09c5226a65..e3113c3001 100644 --- a/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java +++ b/backend/src/main/java/io/dataease/service/dataset/ExtractDataService.java @@ -164,7 +164,7 @@ public class ExtractDataService { if(datasetTableFields == null){ datasetTableFields = dataSetTableFieldsService.list(DatasetTableField.builder().tableId(datasetTable.getId()).build()); } - datasetTableFields = datasetTableFields.stream().filter(datasetTableField -> datasetTableField.getName().startsWith("C_")).collect(Collectors.toList()); + datasetTableFields = datasetTableFields.stream().filter(datasetTableField -> datasetTableField.getExtField() == 0).collect(Collectors.toList()); datasetTableFields.sort((o1, o2) -> { if (o1.getColumnIndex() == null) { return -1; @@ -274,7 +274,7 @@ public class ExtractDataService { datasource.setType(datasetTable.getType()); } List datasetTableFields = dataSetTableFieldsService.list(DatasetTableField.builder().tableId(datasetTable.getId()).build()); - datasetTableFields = datasetTableFields.stream().filter(datasetTableField -> datasetTableField.getName().startsWith("C_")).collect(Collectors.toList()); + datasetTableFields = datasetTableFields.stream().filter(datasetTableField -> datasetTableField.getExtField() == 0).collect(Collectors.toList()); datasetTableFields.sort((o1, o2) -> { if (o1.getColumnIndex() == null) { return -1; diff --git a/frontend/src/components/business/condition-table/DeComplexOperator.vue b/frontend/src/components/business/condition-table/DeComplexOperator.vue index e0b57b5f22..4f995080b4 100644 --- a/frontend/src/components/business/condition-table/DeComplexOperator.vue +++ b/frontend/src/components/business/condition-table/DeComplexOperator.vue @@ -6,6 +6,7 @@
+ + + + + + + + diff --git a/frontend/src/components/canvas/components/Editor/EditBar.vue b/frontend/src/components/canvas/components/Editor/EditBar.vue index 155a1dd7f4..f0803a8123 100644 --- a/frontend/src/components/canvas/components/Editor/EditBar.vue +++ b/frontend/src/components/canvas/components/Editor/EditBar.vue @@ -7,11 +7,19 @@
- + + + - - - + + + + + + + + +
diff --git a/frontend/src/components/canvas/components/Editor/LinkageField.vue b/frontend/src/components/canvas/components/Editor/LinkageField.vue index d4f50e9421..94c7783bef 100644 --- a/frontend/src/components/canvas/components/Editor/LinkageField.vue +++ b/frontend/src/components/canvas/components/Editor/LinkageField.vue @@ -3,6 +3,7 @@ @@ -13,52 +14,55 @@ - - -
- - - - - - - - - {{ item.name }} - - -
-
- -
- - - - - - - - - {{ item.name }} - - -
-
- -
- -
-
+ + + + +
+ + + + + + + + + {{ item.name }} + + +
+
+ +
+ + + + + + + + + {{ item.name }} + + +
+
+ +
+ +
+
+
@@ -67,7 +71,6 @@ -
@@ -183,5 +186,9 @@ export default { height: 35px; border-radius: 3px; } + >>>.el-popover{ + height: 200px; + overflow: auto; + } diff --git a/frontend/src/components/canvas/components/Toolbar.vue b/frontend/src/components/canvas/components/Toolbar.vue index 53b2e6bc5a..10cea07695 100644 --- a/frontend/src/components/canvas/components/Toolbar.vue +++ b/frontend/src/components/canvas/components/Toolbar.vue @@ -320,6 +320,38 @@ export default { this.close() }, saveLinkage() { + // 字段检查 + // let checkCount = 0 + for (const key in this.targetLinkageInfo) { + let subCheckCount = 0 + const linkageInfo = this.targetLinkageInfo[key] + const linkageFields = linkageInfo['linkageFields'] + if (linkageFields) { + linkageFields.forEach(function(linkage) { + if (!(linkage.sourceField && linkage.targetField)) { + subCheckCount++ + } + }) + } + + if (subCheckCount > 0) { + this.$message({ + message: this.$t('chart.datalist') + '【' + linkageInfo.targetViewName + '】' + this.$t('panel.exit_un_march_linkage_field'), + type: 'error', + showClose: true + }) + return + } + } + // if (checkCount > 0) { + // this.$message({ + // message: this.$t('panel.exit_un_march_linkage_field'), + // type: 'error', + // showClose: true + // }) + // return + // } + const request = { panelId: this.$store.state.panel.panelInfo.id, sourceViewId: this.curLinkageView.propValue.viewId, diff --git a/frontend/src/components/canvas/custom-component/UserView.vue b/frontend/src/components/canvas/custom-component/UserView.vue index 5c6210b454..c31f829010 100644 --- a/frontend/src/components/canvas/custom-component/UserView.vue +++ b/frontend/src/components/canvas/custom-component/UserView.vue @@ -113,7 +113,7 @@ export default { linkageFilters() { // 必要 勿删勿该 watch数组,哪怕发生变化 oldValue等于newValue ,深拷贝解决 if (!this.element.linkageFilters) return [] - console.log('linkageFilters:' + JSON.stringify(this.element.linkageFilters)) + // console.log('linkageFilters:' + JSON.stringify(this.element.linkageFilters)) return JSON.parse(JSON.stringify(this.element.linkageFilters)) }, trackMenu() { @@ -127,7 +127,7 @@ export default { }) linkageCount && trackMenuInfo.push('linkage') this.drillFields.length && trackMenuInfo.push('drill') - console.log('trackMenuInfo' + JSON.stringify(trackMenuInfo)) + // console.log('trackMenuInfo' + JSON.stringify(trackMenuInfo)) return trackMenuInfo }, chartType() { diff --git a/frontend/src/components/dataease/DeOutWidget.vue b/frontend/src/components/dataease/DeOutWidget.vue index 7ce1807214..47316d13da 100644 --- a/frontend/src/components/dataease/DeOutWidget.vue +++ b/frontend/src/components/dataease/DeOutWidget.vue @@ -77,7 +77,11 @@ export default { const titleWidth = this.$refs.deTitle.offsetWidth const deContentContainer = this.$refs.deContentContainer this.$nextTick(() => { - if (height < 75) { + let min = 75 + if (this.element.component === 'de-number-range') { + min = 105 + } + if (height < min) { // console.log(titleWidth) this.mainClass = 'condition-main-line' deContentContainer && (deContentContainer.style.inset = '0 0 0 ' + (titleWidth + 15) + 'px') @@ -121,6 +125,8 @@ export default { .condition-title-absolute { inset: 0px 0px; position: absolute; + top: 15px; + left: 4px; } .span-container { diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index a675e04981..9e060d75be 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1212,7 +1212,10 @@ export default { drill: 'drill', linkage: 'linkage', cancel_linkage: 'Cancel Linkage', - remove_all_linkage: 'Remove All Linkage' + remove_all_linkage: 'Remove All Linkage', + exit_un_march_linkage_field: 'Exit Un March Linkage Field', + details: 'Details', + setting: 'Setting' }, plugin: { local_install: 'Local installation', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 7acc6d82fe..540539c9b6 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1211,7 +1211,10 @@ export default { drill: '下钻', linkage: '联动', cancel_linkage: '取消联动', - remove_all_linkage: '清除所有联动' + remove_all_linkage: '清除所有联动', + exit_un_march_linkage_field: '存在未匹配联动关系的字段', + details: '详情', + setting: '设置' }, plugin: { local_install: '本地安裝', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 9f129a8aa8..881f1ef0e5 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1213,7 +1213,10 @@ export default { drill: '下钻', linkage: '联动', cancel_linkage: '取消联动', - remove_all_linkage: '清除所有联动' + remove_all_linkage: '清除所有联动', + exit_un_march_linkage_field: '存在未匹配联动关系的字段', + details: '详情', + setting: '设置' }, plugin: { local_install: '本地安装', diff --git a/frontend/src/main.js b/frontend/src/main.js index 81003687bd..81b11d9db2 100644 --- a/frontend/src/main.js +++ b/frontend/src/main.js @@ -21,7 +21,7 @@ import Treeselect from '@riophae/vue-treeselect' import '@riophae/vue-treeselect/dist/vue-treeselect.css' import './utils/dialog' import DeComplexInput from '@/components/business/condition-table/DeComplexInput' - +import DeComplexSelect from '@/components/business/condition-table/DeComplexSelect' import '@/components/canvas/custom-component' // 注册自定义组件 Vue.config.productionTip = false Vue.use(VueClipboard) @@ -74,6 +74,7 @@ Vue.use(directives) Vue.use(message) Vue.component('Treeselect', Treeselect) Vue.component('DeComplexInput', DeComplexInput) +Vue.component('DeComplexSelect', DeComplexSelect) Vue.config.productionTip = false Vue.prototype.hasDataPermission = function(pTarget, pSource) { diff --git a/frontend/src/views/chart/chart/chart.js b/frontend/src/views/chart/chart/chart.js index 77687da0ef..df765c00f0 100644 --- a/frontend/src/views/chart/chart/chart.js +++ b/frontend/src/views/chart/chart/chart.js @@ -656,7 +656,8 @@ export const BASE_SCATTER = { data: [] }, xAxis: { - data: [] + data: [], + boundaryGap: false }, yAxis: { type: 'value' @@ -715,6 +716,12 @@ export const BASE_TREEMAP = { { // name: '', type: 'treemap', + itemStyle: { + gapWidth: 2 + }, + breadcrumb: { + show: false + }, // radius: ['0%', '60%'], // avoidLabelOverlap: false, // emphasis: { diff --git a/frontend/src/views/chart/chart/common/common.js b/frontend/src/views/chart/chart/common/common.js index 3235e7a429..e1e496e758 100644 --- a/frontend/src/views/chart/chart/common/common.js +++ b/frontend/src/views/chart/chart/common/common.js @@ -58,6 +58,9 @@ export function componentStyle(chart_option, chart) { chart_option.xAxis.axisLabel = customStyle.xAxis.axisLabel chart_option.xAxis.splitLine = customStyle.xAxis.splitLine chart_option.xAxis.nameTextStyle = customStyle.xAxis.nameTextStyle + + chart_option.xAxis.axisLabel.showMaxLabel = true + chart_option.xAxis.axisLabel.showMinLabel = true } if (customStyle.yAxis && (chart.type.includes('bar') || chart.type.includes('line') || chart.type.includes('scatter'))) { chart_option.yAxis.show = customStyle.yAxis.show @@ -66,6 +69,9 @@ export function componentStyle(chart_option, chart) { chart_option.yAxis.axisLabel = customStyle.yAxis.axisLabel chart_option.yAxis.splitLine = customStyle.yAxis.splitLine chart_option.yAxis.nameTextStyle = customStyle.yAxis.nameTextStyle + + chart_option.xAxis.axisLabel.showMaxLabel = true + chart_option.xAxis.axisLabel.showMinLabel = true } if (customStyle.split && chart.type.includes('radar')) { chart_option.radar.name = customStyle.split.name diff --git a/frontend/src/views/chart/chart/scatter/scatter.js b/frontend/src/views/chart/chart/scatter/scatter.js index 0ed0b07ad0..c90278c189 100644 --- a/frontend/src/views/chart/chart/scatter/scatter.js +++ b/frontend/src/views/chart/chart/scatter/scatter.js @@ -1,6 +1,8 @@ import { hexColorToRGBA } from '@/views/chart/chart/util' import { componentStyle } from '../common/common' +let bubbleArray = [] + export function baseScatterOption(chart_option, chart) { // 处理shape attr let customAttr = {} @@ -21,6 +23,7 @@ export function baseScatterOption(chart_option, chart) { if (chart.data) { chart_option.title.text = chart.title chart_option.xAxis.data = chart.data.x + bubbleArray = [] for (let i = 0; i < chart.data.series.length; i++) { const y = chart.data.series[i] // color @@ -33,6 +36,9 @@ export function baseScatterOption(chart_option, chart) { const extBubble = JSON.parse(chart.extBubble) if (extBubble && extBubble.length > 0) { + y.data.forEach(ele => { + bubbleArray.push(ele.value[2]) + }) y.symbolSize = funcSize } else { y.symbolSize = customAttr.size.scatterSymbolSize ? customAttr.size.scatterSymbolSize : 20 @@ -53,5 +59,7 @@ export function baseScatterOption(chart_option, chart) { } const funcSize = function(data) { - return data[2] + const k = 80 + const max = Math.max(...bubbleArray) + return (data[2] / max) * k } diff --git a/frontend/src/views/chart/chart/treemap/treemap.js b/frontend/src/views/chart/chart/treemap/treemap.js index de7c07eb49..c4b7dc719f 100644 --- a/frontend/src/views/chart/chart/treemap/treemap.js +++ b/frontend/src/views/chart/chart/treemap/treemap.js @@ -28,9 +28,17 @@ export function baseTreemapOption(chart_option, chart) { chart_option.series[0].height = (customAttr.size.treemapHeight ? customAttr.size.treemapHeight : 80) + '%' } // label - // if (customAttr.label) { - // chart_option.series[0].label = customAttr.label - // } + if (customAttr.label) { + // chart_option.series[0].label = customAttr.label + const l = { + show: true, + position: customAttr.label.position, + color: customAttr.label.color, + fontSize: customAttr.label.fontSize, + formatter: customAttr.label.show ? customAttr.label.formatter : '' + } + chart_option.series[0].label = l + } const valueArr = chart.data.series[0].data for (let i = 0; i < valueArr.length; i++) { // const y = { diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue index d6192b8414..fd511aecd1 100644 --- a/frontend/src/views/chart/view/ChartEdit.vue +++ b/frontend/src/views/chart/view/ChartEdit.vue @@ -338,6 +338,12 @@ {{ $t('chart.bubble_size') }} / {{ $t('chart.quota') }} + +
+ 该指标生效时,样式大小中的气泡大小属性将失效 +
+ +
- + diff --git a/frontend/src/views/dataset/data/CalcFieldEdit.vue b/frontend/src/views/dataset/data/CalcFieldEdit.vue index 74d833eb76..99b2eb0427 100644 --- a/frontend/src/views/dataset/data/CalcFieldEdit.vue +++ b/frontend/src/views/dataset/data/CalcFieldEdit.vue @@ -56,7 +56,19 @@ - {{ $t('dataset.click_ref_field') }} + + {{ $t('dataset.click_ref_field') }} + +
+ 引用字段以 "[" 开始, "]" 结束 +
+ 请勿修改引用内容,否则将引用失败 +
+ 若输入与引用字段相同格式的内容,将被当作引用字段处理 +
+ +
+
- {{ $t('dataset.click_ref_function') }} + + {{ $t('dataset.click_ref_function') }} + +
+ 使用数据集对应数据库类型所支持的函数,语法同对应数据库 +
+ 如日期格式化:MySQL使用DATE_FORMAT(date,format);Oracle使用TO_DATE(X,[,fmt]) +
+ 非直连模式数据集,使用Doris数据库函数,可参考Doris官网 http://doris.apache.org/master/zh-CN/ +
+ +
+
{{ item.name }}

{{ item.func }}

{{ item.desc }}

- {{ item.func }} + {{ item.func }}
@@ -444,9 +468,13 @@ export default { padding: 2px 4px; cursor: pointer; margin: 4px 0; - overflow-x: hidden; - white-space: nowrap; - text-overflow: ellipsis; + word-break: break-word; + border: solid 1px #eee; + } + .function-style:hover { + background: #e8f4ff; + border-color: #a3d3ff; + cursor: pointer; } .function-height{ height: calc(100% - 50px); diff --git a/frontend/src/views/system/user/index.vue b/frontend/src/views/system/user/index.vue index 2e29261c52..3754776dd0 100644 --- a/frontend/src/views/system/user/index.vue +++ b/frontend/src/views/system/user/index.vue @@ -191,10 +191,11 @@ export default { }, { label: this.$t('member.edit_password'), icon: 'el-icon-s-tools', type: 'success', click: this.editPassword, show: this.checkPermission(['user:editPwd']) - }, { - label: '权限查看', icon: 'el-icon-lock', type: 'warning', click: this.showAuth, - show: this.checkPermission(['user:editPwd']) } + // , { + // label: '权限查看', icon: 'el-icon-lock', type: 'warning', click: this.showAuth, + // show: this.checkPermission(['user:editPwd']) + // } ], searchConfig: { useQuickSearch: true, @@ -205,7 +206,7 @@ export default { { field: 'u.enabled', label: this.$t('commons.status'), - component: 'FuComplexSelect', + component: 'DeComplexSelect', options: [ { label: this.$t('commons.enable'), value: '1' }, { label: this.$t('commons.disable'), value: '0' }