diff --git a/core/core-frontend/src/custom-component/v-query/Component.vue b/core/core-frontend/src/custom-component/v-query/Component.vue index 01a38c2a03..b0a68dde94 100644 --- a/core/core-frontend/src/custom-component/v-query/Component.vue +++ b/core/core-frontend/src/custom-component/v-query/Component.vue @@ -300,11 +300,17 @@ watch( } ) const list = ref([]) - +let oldList = [] +let isResetData = false watch( () => props.element.propValue, () => { list.value = [...props.element.propValue] + if (isResetData) { + isResetData = false + return + } + oldList = cloneDeep(props.element.propValue) }, { immediate: true @@ -670,43 +676,50 @@ const delQueryConfig = index => { } const resetData = () => { - ;(list.value || []).reduce((pre, next) => { - next.conditionValueF = next.defaultConditionValueF - next.conditionValueOperatorF = next.defaultConditionValueOperatorF - next.conditionValueS = next.defaultConditionValueS - next.conditionValueOperatorS = next.defaultConditionValueOperatorS + isResetData = true + element.value.propValue = [] + nextTick(() => { + element.value.propValue = cloneDeep(oldList) + ;(element.value.propValue || []).reduce((pre, next) => { + next.conditionValueF = next.defaultConditionValueF + next.conditionValueOperatorF = next.defaultConditionValueOperatorF + next.conditionValueS = next.defaultConditionValueS + next.conditionValueOperatorS = next.defaultConditionValueOperatorS - if (next.displayType === '22') { - next.numValueEnd = next.defaultNumValueEnd - next.numValueStart = next.defaultNumValueStart - } + if (next.displayType === '22') { + next.numValueEnd = next.defaultNumValueEnd + next.numValueStart = next.defaultNumValueStart + } - if (!next.defaultValueCheck) { - next.defaultValue = next.multiple || +next.displayType === 7 ? [] : undefined - } - next.selectValue = Array.isArray(next.defaultValue) ? [...next.defaultValue] : next.defaultValue - if (next.optionValueSource === 1 && next.defaultMapValue?.length) { - next.mapValue = Array.isArray(next.defaultMapValue) - ? [...next.defaultMapValue] - : next.defaultMapValue - } + if (!next.defaultValueCheck) { + next.defaultValue = next.multiple || +next.displayType === 7 ? [] : undefined + } + next.selectValue = Array.isArray(next.defaultValue) + ? [...next.defaultValue] + : next.defaultValue + if (next.optionValueSource === 1 && next.defaultMapValue?.length) { + next.mapValue = Array.isArray(next.defaultMapValue) + ? [...next.defaultMapValue] + : next.defaultMapValue + } - ;(props.element.cascade || []).forEach(ele => { - ele.forEach(item => { - const comId = item.datasetId.split('--')[1] - if (next.id === comId) { - item.currentSelectValue = Array.isArray(next.selectValue) - ? next.selectValue - : [next.selectValue].filter(itx => ![null, undefined].includes(itx)) - useEmitt().emitter.emit(`${item.datasetId.split('--')[1]}-select`) - } + ;(props.element.cascade || []).forEach(ele => { + ele.forEach(item => { + const comId = item.datasetId.split('--')[1] + if (next.id === comId) { + item.currentSelectValue = Array.isArray(next.selectValue) + ? next.selectValue + : [next.selectValue].filter(itx => ![null, undefined].includes(itx)) + useEmitt().emitter.emit(`${item.datasetId.split('--')[1]}-select`) + } + }) }) - }) - const keyList = getKeyList(next) - pre = [...new Set([...keyList, ...pre])] - return pre - }, []) - !componentWithSure.value && queryData() + const keyList = getKeyList(next) + pre = [...new Set([...keyList, ...pre])] + return pre + }, []) + !componentWithSure.value && queryData() + }) } const clearData = () => { diff --git a/core/core-frontend/src/custom-component/v-query/Select.vue b/core/core-frontend/src/custom-component/v-query/Select.vue index 8dcafe0f15..47f7b94816 100644 --- a/core/core-frontend/src/custom-component/v-query/Select.vue +++ b/core/core-frontend/src/custom-component/v-query/Select.vue @@ -344,6 +344,8 @@ const handleFieldIdChange = (val: EnumValue) => { const valArr = options.value.map(ele => ele.value) + let change = false + if ( config.value.multiple && Array.isArray(selectValue.value) && @@ -354,12 +356,24 @@ const handleFieldIdChange = (val: EnumValue) => { selectValue.value = selectValue.value.filter(ele => valArr.includes(ele)) options.value = options.value.filter(ele => !delArr.includes(ele.value)) config.value.defaultValue = selectValue.value + change = true } if (!config.value.multiple && selectValue.value && !valArr.includes(selectValue.value)) { options.value = options.value.filter(ele => selectValue.value !== ele.value) selectValue.value = undefined config.value.defaultValue = selectValue.value + change = true + } + + if (change) { + config.value.mapValue = setDefaultMapValue( + Array.isArray(selectValue.value) ? [...selectValue.value] : [selectValue.value] + ) + config.value.defaultMapValue = setDefaultMapValue( + Array.isArray(selectValue.value) ? [...selectValue.value] : [selectValue.value] + ) + setCascadeValueBack(config.value.mapValue) } }) .finally(() => { @@ -675,8 +689,6 @@ const single = ref() const getOptionFromCascade = () => { if (config.value.optionValueSource !== 1 || ![0, 2, 5].includes(+config.value.displayType)) return - config.value.selectValue = config.value.multiple ? [] : undefined - selectValue.value = config.value.multiple ? [] : undefined isFromRemote.value = true debounceOptions(1) } diff --git a/core/core-frontend/src/views/chart/components/js/panel/common/common_table.ts b/core/core-frontend/src/views/chart/components/js/panel/common/common_table.ts index 522c28254d..ac47a1ebd6 100644 --- a/core/core-frontend/src/views/chart/components/js/panel/common/common_table.ts +++ b/core/core-frontend/src/views/chart/components/js/panel/common/common_table.ts @@ -6,8 +6,8 @@ import { isTransparent, parseJson, resetRgbOpacity, - safeDecimalMean, - safeDecimalSum + safeDecimalSum, + safeDecimalMean } from '../..//util' import { DEFAULT_BASIC_STYLE, @@ -50,13 +50,17 @@ import { filter, find, intersection, - isNumber, keys, map, maxBy, + meanBy, merge, minBy, - repeat + repeat, + sumBy, + size, + sum, + isNumber } from 'lodash-es' import { createVNode, render } from 'vue' import TableTooltip from '@/views/chart/components/editor/common/TableTooltip.vue' @@ -2194,7 +2198,7 @@ export class CustomDataCell extends TableDataCell { * @protected */ protected drawTextShape() { - if (this.meta.isMergedCell) { + if(this.meta.isMergedCell) { return } if (this.meta.autoWrap) { @@ -2238,8 +2242,7 @@ const drawTextShape = (cell, isHeader) => { // 单元格文本 const { formattedValue } = cell.getFormattedFieldValue() // 获取文本样式 - const textStyle = cloneDeep(cell.getTextStyle()) - textStyle.textAlign = undefined + const textStyle = cell.getTextStyle() // 宽度能放几个字符,就放几个,放不下就换行 let wrapText = getWrapText( formattedValue ? formattedValue?.toString() : emptyPlaceholder, @@ -2295,8 +2298,7 @@ const drawTextShape = (cell, isHeader) => { cell.actualTextWidth = cell.spreadsheet.measureTextWidth(wrapText, textStyle) // 获取文本位置并渲染文本 - const { y } = cell.getTextAndIconPosition()?.text || cell.getTextPosition() - const x = getTextStartX(cell, textStyle) + const { x, y } = cell.getTextAndIconPosition()?.text || cell.getTextPosition() // 绘制文本 cell.textShape = renderText(cell, [cell.textShape], x, y, wrapText, textStyle, { fontSize: extraStyleFontSize @@ -2306,33 +2308,6 @@ const drawTextShape = (cell, isHeader) => { cell.textShapes.push(cell.textShape) } -/** - * 计算文本起始X位置 - * @param cell - * @param textStyle - */ -function getTextStartX(cell, textStyle) { - // 获取单元格区域 - const area = cell.getCellArea() - // 计算文本宽度,只计算第一行宽度 - const textWidth = cell.spreadsheet.measureTextWidthRoughly( - cell.actualText.split('\n')[0], - textStyle - ) - const padding = cell.theme.colCell?.cell?.padding ?? { left: 0, right: 0 } - const align = cell.getTextStyle()?.textAlign ?? 'left' - switch (align) { - case 'left': - return area.x + (padding.left || 0) - case 'center': - return area.x + (area.width - textWidth) / 2 - case 'right': - return area.x + area.width - textWidth - (padding.right || 0) - default: - return area.x + (padding.left || 0) - } -} - /** * 计算表头高度 * @param info 单元格信息