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 @@ + + + + + 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 @@ - - + +
-
+