封装动态过滤器

118 阅读1分钟

在封装的过滤器文件里(src/filter/index.js):

//动态树过滤器
export function dynamicTreeText(value, options) {
  if (!value) return ''

  function transfer(data) {
    let textList = []

    function loop(data, id) {
      for (let i = 0; i < data.length; i++) {
        if (data[i].id === id) {
          textList.push(data[i].fullName)
          break
        }
        if (data[i].children) loop(data[i].children, id)
      }
    }
    for (let i = 0; i < data.length; i++) {
      loop(options, data[i])
    }
    return textList.join()
  }

  if (!options || !Array.isArray(options)) {
    return value.join()
  }
  if (Array.isArray(value)) {
    let text = transfer(value)
    return text
  } else {
    if (!options || !Array.isArray(options)) return value
    let list = value.split()
    let text = transfer(list)
    return text
  }
}

//数组过滤
export function dynamicText(value, options) {
  if (!value) return ''
  if (Array.isArray(value)) {
    if (!options || !Array.isArray(options)) return value.join()
    let textList = []
    for (let i = 0; i < value.length; i++) {
      let item = options.filter((o) => o.id == value[i])[0]
      if (!item || !item.fullName) {
        textList.push(value[i])
      } else {
        textList.push(item.fullName)
      }
    }
    return textList.join()
  }
  let myvalue = JSON.parse(value)
  if (Array.isArray(myvalue)) {
    if (!options || !Array.isArray(options)) return myvalue.join()
    let textList = []
    for (let i = 0; i < myvalue.length; i++) {
      let item = options.filter((o) => o.id == myvalue[i])[0]
      if (!item || !item.fullName) {
        textList.push(myvalue[i])
      } else {
        textList.push(item.fullName)
      }
    }
    return textList.join()
  }
  if (!options || !Array.isArray(options)) return value
  let item = options.filter((o) => o.id == value)[0]
  if (!item || !item.fullName) return value
  return item.fullName
}

在文件js部分用需要引用(import { dynamicTreeText } from "@/filters";) 在模板部分引用则不需引用,直接可写