index.js 3.51 KB
import Code from './code'
import Confirm from './confirm'
import Detail from './detail'
import Editor from './editor'
import FileUpload from './file-upload'
import Form from './form'
import ImageUpload from './Image-upload'
import ImageUploadMultiple from './Image-upload/multiple'
import ImageView from './image-view'
import KeywordInput from './keyword-input'
import RadioGroup from './radio-group'
import Scheme from './scheme'
import Search from './search'
import Select from './select'
import StatusIndicator from './status-indicator'
import SwitchButton from './switch-button'
import Table from './table'
import TreeSelect from './tree-select'

const components = {
  Code,
  Confirm,
  Detail,
  Editor,
  FileUpload,
  Form,
  ImageUpload,
  ImageUploadMultiple,
  ImageView,
  KeywordInput,
  RadioGroup,
  Scheme,
  Search,
  Select,
  StatusIndicator,
  SwitchButton,
  Table,
  TreeSelect
}

// 给组件库配置install方法
const install = function (Vue, opts = {}) {
  Object.values(components).forEach(component => {
    // 组件前缀
    const prefix = opts.name || 'eagle';
    // 配置组件名称
    const name = prefix + component.name
    component.name = name
    const emptyMethod = () => undefined;
    if (component.computed) {
      component.computed.prefix = () => { return prefix };
    } else {
      component.computed = { prefix: () => { return prefix } }
    }
    if (component.methods) {
      component.methods.i18n = opts.i18n || emptyMethod;
      if (component.name.indexOf('Scheme') > -1) {
        if (opts.currPageAlias) {
          component.computed.currPageAlias = () => opts.currPageAlias;
        }
        if (opts.pageSizeAlias) {
          component.computed.pageSizeAlias = () => opts.pageSizeAlias;
        }
        if (opts.totalCountAlias) {
          component.computed.totalCountAlias = () => opts.totalCountAlias;
        }
        if (opts.searchMethod) {
          component.computed.searchMethod = () => opts.searchMethod;
        }
        if (opts.getMethod) {
          component.computed.getMethod = () => opts.getMethod;
        }
        if (opts.newMethod) {
          component.computed.newMethod = () => opts.newMethod;
        }
        if (opts.editMethod) {
          component.computed.editMethod = () => opts.editMethod;
        }
        if (opts.deleteMethod) {
          component.computed.deleteMethod = () => opts.deleteMethod;
        }
        if (opts.searchFilter) {
          component.methods.searchFilter = opts.searchFilter;
        }
        if (opts.resultFilter) {
          component.methods.resultFilter = opts.resultFilter;
        }
        if (opts.detailFilter) {
          component.methods.detailFilter = opts.detailFilter;
        }
        if (opts.getFilter) {
          component.methods.getFilter = opts.getFilter;
        }
        if (opts.deleteFilter) {
          component.methods.deleteFilter = opts.deleteFilter;
        }
        if (opts.newFilter) {
          component.methods.newFilter = opts.newFilter;
        }
        if (opts.editFilter) {
          component.methods.editFilter = opts.editFilter;
        }
        if (opts.successFilter) {
          component.methods.successFilter = opts.successFilter;
        }
      }
    } else {
      component.methods = { i18n: opts.i18n || emptyMethod }
    }
    // 给每个子组件配置install方法
    component.install = function (Vue) {
      Vue.component(name, component)
    }
    // 将每个子组件注册为全局组件
    Vue.component(name, component)
  })
}

export default {
  install,
  ...components
}