index.js 1.97 KB
// import Vue from 'vue'
let resultComps = []
const requireComponent = require.context(
  './', // 在当前目录下查找
  true, // 遍历子文件夹
  /\.vue$/ // 正则匹配 以 .vue结尾的文件
)
resultComps = handleData(requireComponent.keys())
function findKey(data) {
  const allkey = []
  const finalData = []
  const obj = {}
  data.forEach(el => {
    const comp = requireComponent(el)
    const item = comp.default
    if (!(item.modelRelationObjs.length === 0 || (item.modelRelationObjs.length === 1 && item.modelRelationObjs[0] === ''))) {
      item.modelRelationObjs.forEach(key => {
        if (allkey.indexOf(key) <= -1) {
          allkey.push(key)
          finalData.push({
            [key]: []
          })
          obj[key] = []
        }
      })
    }
  })
  return { finalData, allkey, obj }
}
function handleData(data) {
  if (!data) return
  const { finalData, obj } = findKey(data)
  data.forEach(el => {
    const comp = requireComponent(el)
    const item = comp.default
    const mfileName = el.split('/')[el.split('/').length - 1]
    // Vue.component(mfileName.slice(0, -4), comp.default)
    if (item.modelRelationObjs.length === 0 || (item.modelRelationObjs.length === 1 && item.modelRelationObjs[0] === '')) {
      if (!obj['commonComponent']) {
        obj['commonComponent'] = []
      }
      obj['commonComponent'].push({
        name: mfileName.slice(0, -4),
        displayName: item.displayName,
        modelRelationObjs: item.modelRelationObjs,
        codePath: el.slice(1)
      })
    } else {
      item.modelRelationObjs.forEach(key => {
        const index = finalData.findIndex(y => y[key])
        if (index > -1) {
          finalData[index][key].push({
            name: mfileName.slice(0, -4),
            displayName: item.displayName,
            modelRelationObjs: item.modelRelationObjs,
            codePath: el.slice(1)
          })
          obj[key] = finalData[index][key]
        }
      })
    }
  })
  return obj
}
export default resultComps