Newer
Older
KaiFengPC / src / views / preassess / evaluation / mixins / index.js
@zhangdeliang zhangdeliang on 23 May 2 KB 初始化项目
import { ref, computed } from 'vue'
export default function useTable(proxy, opts, fields) {
  const treeData = ref([])
  const loading = ref(false)
  const tableData = computed(() => {
    const list = getFlatData(JSON.parse(JSON.stringify(treeData.value)))
    return list.filter(item => item[fields])
  })

  const getFlatData = (data) => {
    let list = []
    for (const item of data) {
      const children = item.children
      delete item.children
      list.push(item)
      if(children){
        list = list.concat(getFlatData(children))
      }
    }
    return list
  }

  const getTreeDataCurRow = (data, row, treeDataCurRow) => {
    if(!row?.nodeCode || row.nodeCode === '0') {
      treeDataCurRow.value = { children: data }
      return
    }
    for (const item of data) {
      if(row.nodeCode === item.nodeCode){
        treeDataCurRow.value = item
        break
      }
      if(item.children){
        getTreeDataCurRow(item.children, row, treeDataCurRow)
      }
    }
  }

  const getTreeCurRow = (data, row) => {
    let treeDataCurRow = { value: {} }
    getTreeDataCurRow(data, row, treeDataCurRow)
    return treeDataCurRow.value
  }

  const setMergeData = (data) => {
    let length1 = 0
    let length2 = 0
    for (const item1 of data) {
      const children1 = item1.children || []
      const sum = getSum(children1)
      length1 += sum
      for (const item2 of children1) {
        const children2 = item2.children || []
        length2 += children2.length
        for (const item3 of children2) {
          item3.length1 = length1
          item3.sum1 = sum
          item3.length2 = length2
          item3.sum2 = children2.length
        }
      }
    }
  }

  const getSum = (data) => {
    let sum = 0
    for (const item of data) {
      const children = item.children || []
      for (const it of children) {
        sum++
        if(it.children) {
          getSum(it.children)
        }
      }
    }
    return sum
  }

  const handlePreview = (file) => {
    if(opts.type === 'view') return
    // window.open(file.url, '_blank')
    proxy.$modal
    .confirm(`下载此文件: ${file.name}?`)
    .then(() => {
      window.open(file.url)
    })
  }

  const uploadSuccess = (file, row) => {
    const treeDataCurRow = getTreeCurRow(treeData.value, row)
    treeDataCurRow.fileSaveRequestList.push(file)
  }

  const removeFile = (file, row) => {
    proxy.$modal
    .confirm("是否确认删除?")
    .then(() => {
      const treeDataCurRow = getTreeCurRow(treeData.value, row)
      const index = treeDataCurRow.fileSaveRequestList.findIndex(it => it.url === file.url)
      treeDataCurRow.fileSaveRequestList.splice(index, 1)
    })
  }

  return {
    treeData,
    loading,
    tableData,
    getTreeCurRow,
    setMergeData,
    getSum,
    handlePreview,
    uploadSuccess,
    removeFile
  }
}