UNPKG

sard-uniapp

Version:

sard-uniapp 是一套基于 Uniapp + Vue3 框架开发的兼容多端的 UI 组件库

57 lines (56 loc) 2 kB
import { isNullish } from '../../utils'; export const defaultCascaderProps = { options: () => [], }; export const defaultFieldKeys = { label: 'label', value: 'value', disabled: 'disabled', children: 'children', isLeaf: 'isLeaf', }; export function getSelectedOptionsByValue(options, value, fieldKeys, multiple) { // 多选 if (multiple) { if (Array.isArray(value)) { return value .map((item) => getSelectedOptionsByValue(options, item, fieldKeys)) .filter((item) => Array.isArray(item) ? item.length !== 0 : !isNullish(item)); } } // 单选 else { // 全路径 if (Array.isArray(value)) { const selectedOptions = []; let list = options; for (const item of value) { const option = list.find((option) => option[fieldKeys.value] === item); if (!option) break; selectedOptions.push(option); list = option[fieldKeys.children]; if (!Array.isArray(list)) break; } return selectedOptions; } // 最后一级 else { for (const option of options) { // 优先在子结点中查找,找到后再向上回溯路径 // 这样可以处理存在重复值场景时候更偏向于更深层次的选项 if (Array.isArray(option[fieldKeys.children])) { const selectedOptions = getSelectedOptionsByValue(option[fieldKeys.children], value, fieldKeys, multiple); if (selectedOptions) { return [option, ...selectedOptions]; } } if (option[fieldKeys.value] === value) { return [option]; } } } } } export const cascaderOptionsContextSymbol = Symbol('cascader-options');