UNPKG

kdesign-ui

Version:

kd is from company of klx, it provide quickly genarator company inner business front structure

136 lines (132 loc) 3.21 kB
import { GenerateStyle, GenerateTpl, GenerateJs } from './index' const babel = require('../babel') class GenerateComTpl extends GenerateTpl { CODE: string = `` COMPOSE: Record< string | number | symbol, any > = {} TPL: string = ` <Modal ref="Modal" v-model="value" :title="title" :size="size"> <Layout> <FormLayout> <Form> <Row> <Col :md="8" :sm="8" :lg="8" :key="$index" v-for="(item, $index) in formConfig"> <FormItem :label="item.label" :prop="item.key"> <Input v-if="item.type === 'Input'" v-model="item[item.key]" /> <DatePicker v-else-if="item.type === 'DatePicker'" v-model="item[item.key]"></DatePicker> <Select v-else-if="item.type === 'Select'" v-model="item[item.key]"> <Option :key="idx" v-for="(opt, idx) in item.optionList" :value="opt.value">{{opt.label}}</Option> </Select> </FormItem> </Col> </Row> </Form> </FormLayout> </Layout> </Modal> ` constructor(name: string, props: any) { super() //生成组件 this.CODE = this.composeCode(this.generate(name, props)) } generate(name: string, props: any) { return this.TPL } generateModal () { } generateLayout () { } generateForm () { } } class GenerateComJs extends GenerateJs { CODE: string = '' TPL: string = ` /* eslint-disable */ import Modal from '@/components/modal' import FormLayout from '@/components/layout/form-layout/form-layout' import Layout from '@/components/modal/layout' export default { data () { return {} }, components: { Modal, Layout, FormLayout }, methods: { open (type, title) { this.value = true this.title = title this.$methods('Modal', 'open') }, close () { this.$methods('Modal', 'close') } } }` constructor(options: VueConfig) { super() this.CODE = this.composeCode(this.generate(options)) } generate(options: VueConfig) { return babel(this.TPL, { visitor(t: any, babylon: any) { return { ReturnStatement(path: any) { if (path.node.leadingComments) return const newBlockStatement = t.returnStatement( babylon.parseExpression(JSON.stringify(options.data)) ) path.replaceWith(newBlockStatement) } } }, lintCode(code: string) { return code.replace(/data\(\) \{/, 'data () {').replace(/\"/g, '\'') } }) } } class GenerateComStyle extends GenerateStyle { constructor(name: string) { super() } } module.exports = (props: any = {}) => { const name = 'modal' const tpl = new GenerateComTpl(name, props) const js = new GenerateComJs({ data: props }) const style = new GenerateComStyle(name) return tpl.CODE + js.CODE + style.CODE }