diff --git a/packages/ui-vue/components/combo-tree/src/composition/use-data-source.ts b/packages/ui-vue/components/combo-tree/src/composition/use-data-source.ts index 4627f49d5012bf81c8f637a91ee1be72b2495d68..86d3e54390af48f5ee30a8ffe2860fbcf7e44246 100644 --- a/packages/ui-vue/components/combo-tree/src/composition/use-data-source.ts +++ b/packages/ui-vue/components/combo-tree/src/composition/use-data-source.ts @@ -20,18 +20,26 @@ export function useDataSource(props: ComboTreeProps): UseDataSource { } function getItemsByValue(value: string): Option[] { - const valueArray = String(value).split(props.separator).map<[string, boolean]>((valueText: string) => { - return [valueText, true]; + const valueArray: [string, number][] = String(value).split(props.separator).map((valueText: string, index: number) => { + return [valueText, index]; }); - const valueMap = new Map(valueArray); + const valueMap = new Map(valueArray); + const items = []; flatTreeNodes(dataSource.value, items); - return items.filter((item: Option) => { - if (item.data) { - return valueMap.has(String(item.data[props.valueField])); - } - return valueMap.has(String(item[props.valueField])); + + // 先过滤出匹配的项 + const matchedItems = items.filter((item: Option) => { + const itemValue = item.data ? String(item.data[props.valueField]) : String(item[props.valueField]); + return valueMap.has(itemValue); }).map((item: Option) => item.data ? item.data : item); + + // 按照 value 中的顺序排序 + return matchedItems.sort((a, b) => { + const aIndex = valueMap.get(String(a[props.valueField])) || 0; + const bIndex = valueMap.get(String(b[props.valueField])) || 0; + return aIndex - bIndex; + }); } function updateDisplayTextByValue(value: string) {