diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js
index 2f9c20c4b8..c3237fea00 100644
--- a/frontend/src/lang/en.js
+++ b/frontend/src/lang/en.js
@@ -1113,7 +1113,13 @@ export default {
chart_field_edit: 'Chart Field Manage',
copy_field: 'Copy Field',
calc_field: 'Calculate Field',
- form_type: 'From Type'
+ form_type: 'From Type',
+ scroll_cfg: 'Scroll Config',
+ scroll: 'Scroll',
+ open: 'Open',
+ row: 'Row',
+ interval: 'Interval',
+ max_more_than_mix: 'Max must more than Min'
},
dataset: {
select_year: 'Select Year',
diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js
index cfd6e89237..9de27d4a30 100644
--- a/frontend/src/lang/tw.js
+++ b/frontend/src/lang/tw.js
@@ -1113,7 +1113,13 @@ export default {
chart_field_edit: '視圖字段管理',
copy_field: '復製字段',
calc_field: '計算字段',
- form_type: '類別'
+ form_type: '類別',
+ scroll_cfg: '滾動設置',
+ scroll: '滾動',
+ open: '開啟',
+ row: '行數',
+ interval: '間隔',
+ max_more_than_mix: '最大值必須大於最小值'
},
dataset: {
select_year: '選擇年',
diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js
index bee25d32d7..2869b4bf3b 100644
--- a/frontend/src/lang/zh.js
+++ b/frontend/src/lang/zh.js
@@ -1115,7 +1115,13 @@ export default {
chart_field_edit: '视图字段管理',
copy_field: '复制字段',
calc_field: '计算字段',
- form_type: '类别'
+ form_type: '类别',
+ scroll_cfg: '滚动设置',
+ scroll: '滚动',
+ open: '开启',
+ row: '行数',
+ interval: '间隔',
+ max_more_than_mix: '最大值必须大于最小值'
},
dataset: {
select_year: '选择年',
diff --git a/frontend/src/views/chart/chart/chart.js b/frontend/src/views/chart/chart/chart.js
index 468434eaae..a731c2b239 100644
--- a/frontend/src/views/chart/chart/chart.js
+++ b/frontend/src/views/chart/chart/chart.js
@@ -339,6 +339,11 @@ export const DEFAULT_THRESHOLD = {
gaugeThreshold: '',
labelThreshold: []
}
+export const DEFAULT_SCROLL = {
+ open: false,
+ row: 1,
+ interval: 2000
+}
// chart config
export const BASE_BAR = {
title: {
diff --git a/frontend/src/views/chart/components/ChartComponentS2.vue b/frontend/src/views/chart/components/ChartComponentS2.vue
index 9ca6507cd9..ed34393e31 100644
--- a/frontend/src/views/chart/components/ChartComponentS2.vue
+++ b/frontend/src/views/chart/components/ChartComponentS2.vue
@@ -100,7 +100,9 @@ export default {
show: 0
},
tableData: [],
- showPage: false
+ showPage: false,
+ scrollTimer: null,
+ scrollTop: 0
}
},
@@ -133,6 +135,9 @@ export default {
mounted() {
this.preDraw()
},
+ beforeDestroy() {
+ clearInterval(this.scrollTimer)
+ },
methods: {
initData() {
let datas = []
@@ -208,6 +213,7 @@ export default {
if (this.myChart && this.antVRenderStatus) {
this.myChart.render()
+ this.initScroll()
}
this.setBackGroundBorder()
},
@@ -371,6 +377,34 @@ export default {
pageSize: 20,
show: 0
}
+ },
+
+ initScroll() {
+ clearInterval(this.scrollTimer)
+ // 首先回到最顶部,然后计算行高*行数作为top,最后判断:如果top<数据量*行高,继续滚动,否则回到顶部
+ const customAttr = JSON.parse(this.chart.customAttr)
+ const senior = JSON.parse(this.chart.senior)
+
+ this.scrollTop = 0
+ this.myChart.store.set('scrollY', this.scrollTop)
+ this.myChart.render()
+
+ if (senior.scrollCfg.open && (this.chart.type === 'table-normal' || (this.chart.type === 'table-info' && !this.showPage))) {
+ const rowHeight = customAttr.size.tableItemHeight
+ const headerHeight = customAttr.size.tableTitleHeight
+
+ this.scrollTimer = setInterval(() => {
+ const top = rowHeight * senior.scrollCfg.row
+ const dom = document.getElementById(this.chartId)
+ if ((dom.offsetHeight - headerHeight + this.scrollTop) < rowHeight * this.chart.data.tableRow.length) {
+ this.scrollTop += top
+ } else {
+ this.scrollTop = 0
+ }
+ this.myChart.store.set('scrollY', this.scrollTop)
+ this.myChart.render()
+ }, senior.scrollCfg.interval)
+ }
}
}
}
diff --git a/frontend/src/views/chart/components/senior/ScrollCfg.vue b/frontend/src/views/chart/components/senior/ScrollCfg.vue
new file mode 100644
index 0000000000..ed657474c0
--- /dev/null
+++ b/frontend/src/views/chart/components/senior/ScrollCfg.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+ {{ $t('chart.open') }}
+
+
+ 明细表仅在分页模式为"下拉"时生效。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/frontend/src/views/chart/components/table/TableNormal.vue b/frontend/src/views/chart/components/table/TableNormal.vue
index 3c62a46032..730c5e9f8b 100644
--- a/frontend/src/views/chart/components/table/TableNormal.vue
+++ b/frontend/src/views/chart/components/table/TableNormal.vue
@@ -119,7 +119,9 @@ export default {
show: 0
},
showPage: false,
- columnWidth: DEFAULT_SIZE.tableColumnWidth
+ columnWidth: DEFAULT_SIZE.tableColumnWidth,
+ scrollTimer: null,
+ scrollTop: 0
}
},
computed: {
@@ -143,6 +145,9 @@ export default {
this.chartResize()
})
},
+ beforeDestroy() {
+ clearInterval(this.scrollTimer)
+ },
methods: {
init() {
this.resetHeight()
@@ -224,6 +229,10 @@ export default {
} else {
this.height = 'auto'
}
+
+ this.$nextTick(() => {
+ this.initScroll()
+ })
}
})
},
@@ -355,6 +364,42 @@ export default {
pageSize: 20,
show: 0
}
+ },
+
+ initScroll() {
+ clearInterval(this.scrollTimer)
+ // 首先回到最顶部,然后计算行高*行数作为top,最后判断:如果top<数据量*行高,继续滚动,否则回到顶部
+ const customAttr = JSON.parse(this.chart.customAttr)
+ const senior = JSON.parse(this.chart.senior)
+
+ const scrollContainer = document.getElementsByClassName(this.chart.id)[0].getElementsByClassName('elx-table--body-wrapper')[0]
+
+ this.scrollTop = 0
+ setTimeout(() => {
+ scrollContainer.scrollTo({
+ top: this.scrollTop,
+ behavior: this.scrollTop === 0 ? 'instant' : 'smooth'
+ })
+ }, 0)
+
+ if (senior.scrollCfg.open && (this.chart.type === 'table-normal' || (this.chart.type === 'table-info' && !this.showPage))) {
+ let rowHeight = customAttr.size.tableItemHeight
+ if (rowHeight < 36) {
+ rowHeight = 36
+ }
+ this.scrollTimer = setInterval(() => {
+ const top = rowHeight * senior.scrollCfg.row
+ if (scrollContainer.clientHeight + scrollContainer.scrollTop < scrollContainer.scrollHeight) {
+ this.scrollTop += top
+ } else {
+ this.scrollTop = 0
+ }
+ scrollContainer.scrollTo({
+ top: this.scrollTop,
+ behavior: this.scrollTop === 0 ? 'instant' : 'smooth'
+ })
+ }, senior.scrollCfg.interval)
+ }
}
}
}
diff --git a/frontend/src/views/chart/view/ChartEdit.vue b/frontend/src/views/chart/view/ChartEdit.vue
index 36f45f706b..f4107f066d 100644
--- a/frontend/src/views/chart/view/ChartEdit.vue
+++ b/frontend/src/views/chart/view/ChartEdit.vue
@@ -32,8 +32,8 @@
-