diff --git a/data-room-ui/packages/BasicComponents/ChartTab/index.vue b/data-room-ui/packages/BasicComponents/ChartTab/index.vue index 1ba8bb8a..18b2fd28 100644 --- a/data-room-ui/packages/BasicComponents/ChartTab/index.vue +++ b/data-room-ui/packages/BasicComponents/ChartTab/index.vue @@ -40,6 +40,7 @@
plot.name === config.name)?.option?.data || config?.option?.data } + config = this.seriesStyle(config) return config }, - getxDataAndYData (xField, yField, data, hasSeries) { + getxDataAndYData (xField, yField, data) { let list = [] let xData = [] let yData = [] @@ -280,7 +267,6 @@ export default { // 使用城市名称作为键,覆盖旧数据,始终保留最后一条数据 uniqueData[item[xField]] = item }) - // 将唯一数据对象的值(即去重后的数据)转换回数组 list = Object.values(uniqueData) xData = list.map(item => item[xField]) @@ -293,8 +279,9 @@ export default { // 分组字段 const xField = config.setting.find(item => item.optionField === 'xField')?.value const yField = config.setting.find(item => item.optionField === 'yField')?.value + // 判断是否存在分组 const hasSeries = config.setting.find(item => item.optionField === 'seriesField' && item.value !== '') - const { xData, yData } = this.getxDataAndYData(xField, yField, data, hasSeries) + const { xData, yData } = this.getxDataAndYData(xField, yField, data) const maxY = Math.max(...yData) + Math.max(...yData) * 0.2 // 生成阴影柱子的值 const shadowData = Array.from({ length: xData.length }, () => maxY) @@ -304,14 +291,15 @@ export default { data: xData } }) - // 判断是否存在分组字段 + // 存在分组字段 if (hasSeries) { const seriesField = config.setting.find(item => item.optionField === 'seriesField')?.value const seriesFieldList = [...new Set(data.map(item => item[seriesField]))] option.series = [] + const barWidth = option.seriesCustom.barWidth + // 偏移量数组 const offsetArr = [] let index = 0 - let barWidth = 10 if (seriesFieldList.length % 2 === 0) { const length = seriesFieldList.length / 2 for (let i = 0; i < length; i++) { @@ -335,7 +323,7 @@ export default { const seriesData = (data.filter(item => item[seriesField] === seriesFieldItem))?.map(item => item[yField]) const seriesItem = [ { - name: seriesFieldItem + '柱子顶部', + id: 'barTopColor' + seriesFieldItem, type: 'pictorialBar', tooltip: { show: false }, symbol: 'diamond', @@ -348,27 +336,28 @@ export default { data: seriesData }, { - name: seriesFieldItem, + id: 'barColor' + seriesFieldItem, type: 'bar', barGap: '20%', barWidth: barWidth, - itemStyle: { - normal: { - color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - { - offset: 0, - color: '#115ba6' - }, - { - offset: 1, - color: '#1db0dd' - } - ]), - opacity: 0.8, - shadowColor: 'rgba(0, 0, 0, 0.5)', // 阴影颜色 - shadowBlur: 0 // 阴影模糊值 - } - }, + color: '#115ba6', + // itemStyle: { + // normal: { + // color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [ + // { + // offset: 0, + // color: '#115ba6' + // }, + // { + // offset: 1, + // color: '#1db0dd' + // } + // ]), + // opacity: 0.8, + // shadowColor: 'rgba(0, 0, 0, 0.5)', // 阴影颜色 + // shadowBlur: 0 // 阴影模糊值 + // } + // }, label: { show: false @@ -378,7 +367,7 @@ export default { data: seriesData }, { - name: seriesFieldItem + '柱子底部', + id: 'barBottomColor' + seriesFieldItem, type: 'pictorialBar', tooltip: { show: false }, symbol: 'diamond', @@ -390,7 +379,7 @@ export default { data: seriesData }, { - name: seriesFieldItem + '背景柱子', + id: 'shadowColor' + seriesFieldItem, type: 'bar', tooltip: { show: false }, xAxisIndex: 1, @@ -405,7 +394,7 @@ export default { } }, { - name: seriesFieldItem + '背景柱子顶部', + id: 'shadowTopColor' + seriesFieldItem, type: 'pictorialBar', tooltip: { show: false }, symbol: 'diamond', @@ -437,40 +426,51 @@ export default { seriesStyle (config) { const _config = CloneDeep(config) const seriesCustom = _config.option.seriesCustom + // const ids = ['barTopColor', 'barColor', 'barBottomColor', 'shadowColor', 'shadowTopColor'] const ids = Object.keys(config.option.seriesCustom) - // const ids = ['barTopColor', 'barBottomColor', 'shadowColor', 'shadowTopColor'] - const hasSeries = _config.setting.find(item => item.optionField === 'seriesField' && item.value !== '') + const isGroup = _config.option.series.length !== 5 + // 宽度配置 + _config.option.series.forEach(item => { + if (item.type === 'pictorialBar') { + item.symbolSize = [seriesCustom.barWidth, seriesCustom.barWidth / 2] + } else if (item.type === 'bar') { + item.barWidth = seriesCustom.barWidth + } + }) + // 颜色配置 + // ids.forEach(id => { + // if (id !== 'barWidth') { + // let index = 0 + // _config.option.series.forEach(item => { + // if (item.id.includes(id)) { + // item.color = _config.option.seriesCustom[id][index] + // index++ + // } + // }) + // } + // }) // 如果是基础柱状图 - if (!hasSeries) { + if (!isGroup) { _config.option.series.forEach(item => { // 配置颜色 if (ids.includes(item.id)) { item.color = seriesCustom[item.id] } - // 配置宽度 - if (item.type === 'pictorialBar') { - item.symbolSize = [seriesCustom.barWidth, seriesCustom.barWidth / 2] - } else if (item.type === 'bar') { - item.barWidth = seriesCustom.barWidth + }) + } else { + // 如果是分组柱状图 + ids.forEach(id => { + if (id !== 'barWidth') { + let index = 0 + _config.option.series.forEach(item => { + if (item.id.includes(id)) { + item.color = _config.option.seriesCustom[id][index] + index++ + } + }) } }) } - _config.option.series.forEach((item) => { - if (ids.includes(item.id)) { - item.color = _config.option.seriesCustom[item.id] - } else { - // item.itemStyle.normal.color = new echarts.graphic.LinearGradient(0, 0, 0, 1, [ - // { - // offset: 0, - // color: _config.option.seriesCustom.barColor1 - // }, - // { - // offset: 1, - // color: _config.option.seriesCustom.barColor2 - // } - // ]) - } - }) return _config }, // 组件的样式改变,返回改变后的config diff --git a/data-room-ui/packages/Render/index.vue b/data-room-ui/packages/Render/index.vue index be3fcdfb..7e10d0ae 100644 --- a/data-room-ui/packages/Render/index.vue +++ b/data-room-ui/packages/Render/index.vue @@ -177,7 +177,9 @@ export default { const elementToHighlights = [] // 获取需要高亮的元素的引用 for (const code of this.activeCodes) { - elementToHighlights.push(this.$refs['RenderCard' + code][0]) + if (this.$refs['RenderCard' + code] &&this.$refs['RenderCard' + code].length && this.$refs['RenderCard' + code][0]){ + elementToHighlights.push(this.$refs['RenderCard' + code][0]) + } } const isElementInHighlights = elementToHighlights.some((elementToHighlight) => {