diff --git a/frontend/src/lang/en.js b/frontend/src/lang/en.js index 8be484db7e..68c9336d48 100644 --- a/frontend/src/lang/en.js +++ b/frontend/src/lang/en.js @@ -1338,6 +1338,7 @@ export default { table_align_left: 'Left', table_align_center: 'Center', table_align_right: 'Right', + table_scroll_bar_color: 'Scroll Bar Color', draw_back: 'Draw Back', senior: 'Senior', senior_cfg: 'Senior Config', diff --git a/frontend/src/lang/tw.js b/frontend/src/lang/tw.js index 36d4a2d7b9..bb327cf02d 100644 --- a/frontend/src/lang/tw.js +++ b/frontend/src/lang/tw.js @@ -1338,6 +1338,7 @@ export default { table_align_left: '左對齊', table_align_center: '居中', table_align_right: '右對齊', + table_scroll_bar_color: '滾動條顏色', draw_back: '收回', senior: '高級', senior_cfg: '高級設置', diff --git a/frontend/src/lang/zh.js b/frontend/src/lang/zh.js index 61be12d916..c408133eff 100644 --- a/frontend/src/lang/zh.js +++ b/frontend/src/lang/zh.js @@ -1337,6 +1337,7 @@ export default { table_align_left: '左对齐', table_align_center: '居中', table_align_right: '右对齐', + table_scroll_bar_color: '滚动条颜色', draw_back: '收回', senior: '高级', senior_cfg: '高级设置', diff --git a/frontend/src/views/chart/chart/chart.js b/frontend/src/views/chart/chart/chart.js index 25e805936d..1ec2129aa4 100644 --- a/frontend/src/views/chart/chart/chart.js +++ b/frontend/src/views/chart/chart/chart.js @@ -29,7 +29,9 @@ export const DEFAULT_COLOR_CASE = { seriesColors: [], // 格式:{"name":"s1","color":"","isCustom":false} areaBorderColor: '#303133', gradient: false, - areaBaseColor: '#FFFFFF' + areaBaseColor: '#FFFFFF', + tableScrollBarColor: 'rgba(0, 0, 0, 0.15)', + tableScrollBarHoverColor: 'rgba(0, 0, 0, 0.4)' } export const DEFAULT_COLOR_CASE_DARK = { @@ -45,7 +47,9 @@ export const DEFAULT_COLOR_CASE_DARK = { tableBorderColor: '#CCCCCC', seriesColors: [], // 格式:{"name":"s1","color":"","isCustom":false} areaBorderColor: '#EBEEF5', - areaBaseColor: '5470C6' + areaBaseColor: '5470C6', + tableScrollBarColor: 'rgba(255, 255, 255, 0.5)', + tableScrollBarHoverColor: 'rgba(255, 255, 255, 0.8)' } export const DEFAULT_SIZE = { barDefault: true, diff --git a/frontend/src/views/chart/chart/common/common_table.js b/frontend/src/views/chart/chart/common/common_table.js index 0a318f5e08..154b383410 100644 --- a/frontend/src/views/chart/chart/common/common_table.js +++ b/frontend/src/views/chart/chart/common/common_table.js @@ -1,4 +1,4 @@ -import { hexColorToRGBA } from '@/views/chart/chart/util' +import { hexColorToRGBA, resetRgbOpacity } from '@/views/chart/chart/util' import { DEFAULT_COLOR_CASE, DEFAULT_SIZE } from '@/views/chart/chart/chart' export function getCustomTheme(chart) { @@ -7,6 +7,8 @@ export function getCustomTheme(chart) { const borderColor = hexColorToRGBA(DEFAULT_COLOR_CASE.tableBorderColor, DEFAULT_COLOR_CASE.alpha) const headerAlign = DEFAULT_SIZE.tableHeaderAlign const itemAlign = DEFAULT_SIZE.tableItemAlign + const scrollBarColor = DEFAULT_COLOR_CASE.tableScrollBarColor + const scrollBarHoverColor = DEFAULT_COLOR_CASE.tableScrollBarHoverColor const theme = { background: { @@ -105,6 +107,10 @@ export function getCustomTheme(chart) { fontSize: DEFAULT_SIZE.tableItemFontSize, textAlign: headerAlign } + }, + scrollBar: { + thumbColor: scrollBarColor, + thumbHoverColor: scrollBarHoverColor } } @@ -156,6 +162,9 @@ export function getCustomTheme(chart) { theme.dataCell.bolderText.fill = c.tableFontColor theme.dataCell.text.fill = c.tableFontColor theme.dataCell.measureText.fill = c.tableFontColor + + theme.scrollBar.thumbColor = c.tableScrollBarColor + theme.scrollBar.thumbHoverColor = resetRgbOpacity(c.tableScrollBarColor, 1.5) } // size if (customAttr.size) { diff --git a/frontend/src/views/chart/chart/util.js b/frontend/src/views/chart/chart/util.js index 00084eace9..5e04f41dc9 100644 --- a/frontend/src/views/chart/chart/util.js +++ b/frontend/src/views/chart/chart/util.js @@ -1,5 +1,6 @@ import { DEFAULT_TITLE_STYLE } from '@/views/chart/chart/chart' import { equalsAny, includesAny } from '@/utils/StringUtils' +import _ from 'lodash' export function hexColorToRGBA(hex, alpha) { const rgb = [] // 定义rgb数组 @@ -49,6 +50,7 @@ export const TYPE_CONFIGS = [ 'tableHeaderFontColor', 'tableFontColor', 'tableBorderColor', + 'tableScrollBarColor', 'alpha' ], 'size-selector-ant-v': [ @@ -95,6 +97,7 @@ export const TYPE_CONFIGS = [ 'tableHeaderFontColor', 'tableFontColor', 'tableBorderColor', + 'tableScrollBarColor', 'alpha' ], 'size-selector-ant-v': [ @@ -144,6 +147,7 @@ export const TYPE_CONFIGS = [ 'tableHeaderFontColor', 'tableFontColor', 'tableBorderColor', + 'tableScrollBarColor', 'alpha' ], 'size-selector-ant-v': [ @@ -1769,6 +1773,7 @@ export const TYPE_CONFIGS = [ 'tableItemBgColor', 'tableHeaderFontColor', 'tableFontColor', + 'tableScrollBarColor', 'alpha' ], 'size-selector': [ @@ -1808,6 +1813,7 @@ export const TYPE_CONFIGS = [ 'tableItemBgColor', 'tableHeaderFontColor', 'tableFontColor', + 'tableScrollBarColor', 'alpha' ], 'size-selector': [ @@ -3411,15 +3417,18 @@ function handleSetZeroMultiDimension(chart, data) { let insertCount = 0 dimensionInfoMap.forEach((dimensionInfo, field) => { if (dimensionInfo.set.size < subDimensionSet.size) { - const toBeFillDimension = [...subDimensionSet].filter(item => !dimensionInfo.set.has(item)) - toBeFillDimension.forEach(dimension => { - data.splice(dimensionInfo.index + insertCount, 0, { - field, - value: 0, - category: dimension - }) + let subInsertIndex = 0 + subDimensionSet.forEach(dimension => { + if (!dimensionInfo.set.has(dimension)) { + data.splice(dimensionInfo.index + insertCount + subInsertIndex, 0, { + field, + value: 0, + category: dimension + }) + } + subInsertIndex++ }) - insertCount += toBeFillDimension.size + insertCount += subDimensionSet.size - dimensionInfo.set.size } }) } @@ -3440,3 +3449,21 @@ function handleIgnoreData(chart, data) { } } } + +export function resetRgbOpacity(sourceColor, times) { + if (sourceColor?.startsWith('rgb')) { + const numbers = sourceColor.match(/(\d(\.\d+)?)+/g) + if (numbers?.length === 4) { + const opacity = parseFloat(numbers[3]) + if (_.isNumber(opacity)) { + let resultOpacity = (opacity * times).toFixed(2) + if (resultOpacity > 1) { + resultOpacity = 1 + } + const colorArr = numbers.slice(0, 3).concat(resultOpacity) + return `rgba(${colorArr.join(',')})` + } + } + } + return sourceColor +} diff --git a/frontend/src/views/chart/components/shapeAttr/ColorSelector.vue b/frontend/src/views/chart/components/shapeAttr/ColorSelector.vue index e4972fc2d0..3390f8b5ef 100644 --- a/frontend/src/views/chart/components/shapeAttr/ColorSelector.vue +++ b/frontend/src/views/chart/components/shapeAttr/ColorSelector.vue @@ -248,6 +248,20 @@ @change="changeColorCase('tableBorderColor')" /> + + + import { hexColorToRGBA } from '../../chart/util' import eventBus from '@/components/canvas/utils/eventBus' -import { DEFAULT_SIZE } from '@/views/chart/chart/chart' +import { DEFAULT_COLOR_CASE, DEFAULT_SIZE } from '@/views/chart/chart/chart' import { mapState } from 'vuex' export default { @@ -154,7 +154,9 @@ export default { scrollTimer: null, scrollTop: 0, showIndex: false, - indexLabel: '序号' + indexLabel: '序号', + scrollBarColor: DEFAULT_COLOR_CASE.tableScrollBarColor, + scrollBarHoverColor: DEFAULT_COLOR_CASE.tableScrollBarHoverColor } }, computed: { @@ -176,6 +178,12 @@ export default { borderRadius: this.borderRadius } }, + tableStyle() { + return { + width: '100%', + '--scroll-bar-color': this.scrollBarColor + } + }, ...mapState([ 'previewCanvasScale' ]) @@ -309,6 +317,7 @@ export default { this.table_header_class.background = hexColorToRGBA(customAttr.color.tableHeaderBgColor, customAttr.color.alpha) this.table_item_class.color = customAttr.color.tableFontColor this.table_item_class.background = hexColorToRGBA(customAttr.color.tableItemBgColor, customAttr.color.alpha) + this.scrollBarColor = customAttr.color.tableScrollBarColor ? customAttr.color.tableScrollBarColor : DEFAULT_COLOR_CASE.tableScrollBarColor } if (customAttr.size) { this.table_header_class.fontSize = customAttr.size.tableTitleFontSize + 'px' @@ -498,7 +507,7 @@ export default { } - diff --git a/frontend/src/views/panel/subjectSetting/panelStyle/PanelColorSelector.vue b/frontend/src/views/panel/subjectSetting/panelStyle/PanelColorSelector.vue index 421557c96c..7960725df9 100644 --- a/frontend/src/views/panel/subjectSetting/panelStyle/PanelColorSelector.vue +++ b/frontend/src/views/panel/subjectSetting/panelStyle/PanelColorSelector.vue @@ -190,6 +190,19 @@ @change="changeColorCase('tableBorderColor')" /> + + +