import { PluginObject } from 'vue' export interface IOptions { sources: { [key: string]: any } } export const defaultOptions: IOptions = { sources: {}, } // export function parse1 (v: any, str: string, def?: any): any { // const { sources } = defaultOptions // const [ sKey, iKey, dKey ] = str.split('.') // const result = sources[sKey]?.find(source => source[iKey] === v) // return dKey && result ? result[dKey] ?? def : result ?? def // } export function parse (source: (string | any[]), labelKey?: string, valueKey?: string): any { const { sources } = defaultOptions if (typeof source === 'string') { source = sources[source] } if (!labelKey) return source return (source as []).reduce((r, item) => { const k = item[labelKey] as string r[k] = valueKey ? item[valueKey] : item return r }, {}) } const Parse: PluginObject = { install (Vue, options) { this.setDefaultOptions(options) Vue.prototype.$parse = parse }, // 设置默认配置 setDefaultOptions (options?: IOptions) { Object.assign(defaultOptions, options) }, } export default Parse