diff --git a/common/changes/@visactor/vchart/fix-data-zoom-of-lock-number-domain_2025-05-22-08-47.json b/common/changes/@visactor/vchart/fix-data-zoom-of-lock-number-domain_2025-05-22-08-47.json new file mode 100644 index 0000000000..a20b64b7ee --- /dev/null +++ b/common/changes/@visactor/vchart/fix-data-zoom-of-lock-number-domain_2025-05-22-08-47.json @@ -0,0 +1,11 @@ +{ + "changes": [ + { + "comment": "fix: fix data-zoom domain when the label of band size is number-like string, fix #3982\n\n", + "type": "none", + "packageName": "@visactor/vchart" + } + ], + "packageName": "@visactor/vchart", + "email": "dingling112@gmail.com" +} \ No newline at end of file diff --git a/packages/vchart/src/component/data-zoom/data-filter-base-component.ts b/packages/vchart/src/component/data-zoom/data-filter-base-component.ts index 50b375835e..5dcdd47abe 100644 --- a/packages/vchart/src/component/data-zoom/data-filter-base-component.ts +++ b/packages/vchart/src/component/data-zoom/data-filter-base-component.ts @@ -436,6 +436,7 @@ export abstract class DataFilterBaseComponent, op: IDataFilterComputeDomainOption) => { - const { stateFields, valueFields, dataCollection } = op.input; + const { stateFields, valueFields, dataCollection, isCategoryState } = op.input; const { stateField, valueField } = op.output; - const resultObj = {}; + const resultObj: any = {}; const resultData: any[] = []; + const stateValues: any[] = []; + let hasLockDomain = false; dataCollection.forEach((dv: DataView, i) => { if (isNil(stateFields[i])) { @@ -114,8 +117,12 @@ export const dataFilterComputeDomain = (data: Array, op: IDataFilterCompute // 按照用户指定的domain进行排序(这里不通过getRawDataStatistics来取是因为时机不对,此时getRawDataStatistics还没有正确结果) const stateFieldInfo = dv.getFields()?.[stateFields[i]]; if (stateFieldInfo && stateFieldInfo.lockStatisticsByDomain) { + hasLockDomain = true; stateFieldInfo.domain.forEach((d: any) => { - resultObj[d] = 0; + if (isNil(resultObj[d])) { + stateValues.push(d); + resultObj[d] = 0; + } }); } dv.latestData.forEach((d: any) => { @@ -123,6 +130,7 @@ export const dataFilterComputeDomain = (data: Array, op: IDataFilterCompute array(stateFields[i]).forEach(state => { if (!isNil(d[state])) { if (isNil(resultObj[d[state]])) { + stateValues.push(d[state]); resultObj[d[state]] = 0; } if (!isNil(valueFields[i])) { @@ -134,11 +142,18 @@ export const dataFilterComputeDomain = (data: Array, op: IDataFilterCompute }); }); }); - Object.keys(resultObj).forEach((d, i) => { - const res = { [stateField]: d }; + + const sortedStateValues = hasLockDomain + ? stateValues + : isCategoryState === false + ? stateValues.sort((a, b) => a - b) + : Object.keys(resultObj); + + sortedStateValues.forEach(state => { + const res = { [stateField]: state }; if (valueField) { - res[valueField] = resultObj[d]; + res[valueField] = resultObj[state]; } resultData.push(res);