function vModel(self, dataObject, defaultValue) {
|
dataObject.props.value = defaultValue
|
|
dataObject.on.input = val => {
|
self.$emit('input', val)
|
}
|
}
|
|
const componentChild = {}
|
/**
|
* 将./slots中的文件挂载到对象componentChild上
|
* 文件名为key,对应JSON配置中的__config__.tag
|
* 文件内容为value,解析JSON配置中的__slot__
|
*/
|
const slotsFiles = require.context('./slots', true, /\.js$/)
|
const keys = slotsFiles.keys() || []
|
keys.forEach(key => {
|
const tag = key.replace(/^\.\/(.*)\.\w+$/, '$1')
|
const value = slotsFiles(key).default
|
componentChild[tag] = value
|
})
|
|
export default {
|
render(h) {
|
const dataObject = {
|
attrs: {},
|
props: {},
|
on: {},
|
style: {}
|
}
|
const confClone = JSON.parse(JSON.stringify(this.conf))
|
const children = []
|
|
const childObjs = componentChild[confClone.__config__.tag]
|
if (childObjs) {
|
Object.keys(childObjs).forEach(key => {
|
const childFunc = childObjs[key]
|
if (confClone.__slot__ && confClone.__slot__[key]) {
|
children.push(childFunc(h, confClone, key))
|
}
|
})
|
}
|
|
Object.keys(confClone).forEach(key => {
|
const val = confClone[key]
|
if (key === '__vModel__') {
|
vModel(this, dataObject, confClone.__config__.defaultValue)
|
} else if (dataObject[key]) {
|
dataObject[key] = { ...dataObject[key], ...val }
|
} else {
|
dataObject.attrs[key] = val
|
}
|
})
|
delete dataObject.attrs.__config__
|
delete dataObject.attrs.__slot__
|
return h(this.conf.__config__.tag, dataObject, children)
|
},
|
props: ['conf']
|
}
|