| import { exportDefault, titleCase } from '@/utils/index' | 
| import { trigger } from './config' | 
|   | 
| const units = { | 
|   KB: '1024', | 
|   MB: '1024 / 1024', | 
|   GB: '1024 / 1024 / 1024' | 
| } | 
| let confGlobal | 
| const inheritAttrs = { | 
|   file: '', | 
|   dialog: 'inheritAttrs: false,' | 
| } | 
|   | 
|   | 
| export function makeUpJs(conf, type) { | 
|   confGlobal = conf = JSON.parse(JSON.stringify(conf)) | 
|   const dataList = [] | 
|   const ruleList = [] | 
|   const optionsList = [] | 
|   const propsList = [] | 
|   const methodList = mixinMethod(type) | 
|   const uploadVarList = [] | 
|   | 
|   conf.fields.forEach(el => { | 
|     buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) | 
|   }) | 
|   | 
|   const script = buildexport( | 
|     conf, | 
|     type, | 
|     dataList.join('\n'), | 
|     ruleList.join('\n'), | 
|     optionsList.join('\n'), | 
|     uploadVarList.join('\n'), | 
|     propsList.join('\n'), | 
|     methodList.join('\n') | 
|   ) | 
|   confGlobal = null | 
|   return script | 
| } | 
|   | 
| function buildAttributes(el, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) { | 
|   buildData(el, dataList) | 
|   buildRules(el, ruleList) | 
|   | 
|   if (el.options && el.options.length) { | 
|     buildOptions(el, optionsList) | 
|     if (el.dataType === 'dynamic') { | 
|       const model = `${el.vModel}Options` | 
|       const options = titleCase(model) | 
|       buildOptionMethod(`get${options}`, model, methodList) | 
|     } | 
|   } | 
|   | 
|   if (el.props && el.props.props) { | 
|     buildProps(el, propsList) | 
|   } | 
|   | 
|   if (el.action && el.tag === 'el-upload') { | 
|     uploadVarList.push( | 
|       `${el.vModel}Action: '${el.action}', | 
|       ${el.vModel}fileList: [],` | 
|     ) | 
|     methodList.push(buildBeforeUpload(el)) | 
|     if (!el['auto-upload']) { | 
|       methodList.push(buildSubmitUpload(el)) | 
|     } | 
|   } | 
|   | 
|   if (el.children) { | 
|     el.children.forEach(el2 => { | 
|       buildAttributes(el2, dataList, ruleList, optionsList, methodList, propsList, uploadVarList) | 
|     }) | 
|   } | 
| } | 
|   | 
| function mixinMethod(type) { | 
|   const list = []; const | 
|     minxins = { | 
|       file: confGlobal.formBtns ? { | 
|         submitForm: `submitForm() { | 
|         this.$refs['${confGlobal.formRef}'].validate(valid => { | 
|           if(!valid) return | 
|           // TODO 提交表单 | 
|         }) | 
|       },`, | 
|         resetForm: `resetForm() { | 
|         this.$refs['${confGlobal.formRef}'].resetFields() | 
|       },` | 
|       } : null, | 
|       dialog: { | 
|         onOpen: 'onOpen() {},', | 
|         onClose: `onClose() { | 
|         this.$refs['${confGlobal.formRef}'].resetFields() | 
|       },`, | 
|         close: `close() { | 
|         this.$emit('update:visible', false) | 
|       },`, | 
|         handleConfirm: `handleConfirm() { | 
|         this.$refs['${confGlobal.formRef}'].validate(valid => { | 
|           if(!valid) return | 
|           this.close() | 
|         }) | 
|       },` | 
|       } | 
|     } | 
|   | 
|   const methods = minxins[type] | 
|   if (methods) { | 
|     Object.keys(methods).forEach(key => { | 
|       list.push(methods[key]) | 
|     }) | 
|   } | 
|   | 
|   return list | 
| } | 
|   | 
| function buildData(conf, dataList) { | 
|   if (conf.vModel === undefined) return | 
|   let defaultValue | 
|   if (typeof (conf.defaultValue) === 'string' && !conf.multiple) { | 
|     defaultValue = `'${conf.defaultValue}'` | 
|   } else { | 
|     defaultValue = `${JSON.stringify(conf.defaultValue)}` | 
|   } | 
|   dataList.push(`${conf.vModel}: ${defaultValue},`) | 
| } | 
|   | 
| function buildRules(conf, ruleList) { | 
|   if (conf.vModel === undefined) return | 
|   const rules = [] | 
|   if (trigger[conf.tag]) { | 
|     if (conf.required) { | 
|       const type = Array.isArray(conf.defaultValue) ? 'type: \'array\',' : '' | 
|       let message = Array.isArray(conf.defaultValue) ? `请至少选择一个${conf.vModel}` : conf.placeholder | 
|       if (message === undefined) message = `${conf.label}不能为空` | 
|       rules.push(`{ required: true, ${type} message: '${message}', trigger: '${trigger[conf.tag]}' }`) | 
|     } | 
|     if (conf.regList && Array.isArray(conf.regList)) { | 
|       conf.regList.forEach(item => { | 
|         if (item.pattern) { | 
|           rules.push(`{ pattern: ${eval(item.pattern)}, message: '${item.message}', trigger: '${trigger[conf.tag]}' }`) | 
|         } | 
|       }) | 
|     } | 
|     ruleList.push(`${conf.vModel}: [${rules.join(',')}],`) | 
|   } | 
| } | 
|   | 
| function buildOptions(conf, optionsList) { | 
|   if (conf.vModel === undefined) return | 
|   if (conf.dataType === 'dynamic') { conf.options = [] } | 
|   const str = `${conf.vModel}Options: ${JSON.stringify(conf.options)},` | 
|   optionsList.push(str) | 
| } | 
|   | 
| function buildProps(conf, propsList) { | 
|   if (conf.dataType === 'dynamic') { | 
|     conf.valueKey !== 'value' && (conf.props.props.value = conf.valueKey) | 
|     conf.labelKey !== 'label' && (conf.props.props.label = conf.labelKey) | 
|     conf.childrenKey !== 'children' && (conf.props.props.children = conf.childrenKey) | 
|   } | 
|   const str = `${conf.vModel}Props: ${JSON.stringify(conf.props.props)},` | 
|   propsList.push(str) | 
| } | 
|   | 
| function buildBeforeUpload(conf) { | 
|   const unitNum = units[conf.sizeUnit]; let rightSizeCode = ''; let acceptCode = ''; const | 
|     returnList = [] | 
|   if (conf.fileSize) { | 
|     rightSizeCode = `let isRightSize = file.size / ${unitNum} < ${conf.fileSize} | 
|     if(!isRightSize){ | 
|       this.$message.error('文件大小超过 ${conf.fileSize}${conf.sizeUnit}') | 
|     }` | 
|     returnList.push('isRightSize') | 
|   } | 
|   if (conf.accept) { | 
|     acceptCode = `let isAccept = new RegExp('${conf.accept}').test(file.type) | 
|     if(!isAccept){ | 
|       this.$message.error('应该选择${conf.accept}类型的文件') | 
|     }` | 
|     returnList.push('isAccept') | 
|   } | 
|   const str = `${conf.vModel}BeforeUpload(file) { | 
|     ${rightSizeCode} | 
|     ${acceptCode} | 
|     return ${returnList.join('&&')} | 
|   },` | 
|   return returnList.length ? str : '' | 
| } | 
|   | 
| function buildSubmitUpload(conf) { | 
|   const str = `submitUpload() { | 
|     this.$refs['${conf.vModel}'].submit() | 
|   },` | 
|   return str | 
| } | 
|   | 
| function buildOptionMethod(methodName, model, methodList) { | 
|   const str = `${methodName}() { | 
|     // TODO 发起请求获取数据 | 
|     this.${model} | 
|   },` | 
|   methodList.push(str) | 
| } | 
|   | 
| function buildexport(conf, type, data, rules, selectOptions, uploadVar, props, methods) { | 
|   const str = `${exportDefault}{ | 
|   ${inheritAttrs[type]} | 
|   components: {}, | 
|   props: [], | 
|   data () { | 
|     return { | 
|       ${conf.formModel}: { | 
|         ${data} | 
|       }, | 
|       ${conf.formRules}: { | 
|         ${rules} | 
|       }, | 
|       ${uploadVar} | 
|       ${selectOptions} | 
|       ${props} | 
|     } | 
|   }, | 
|   computed: {}, | 
|   watch: {}, | 
|   created () {}, | 
|   mounted () {}, | 
|   methods: { | 
|     ${methods} | 
|   } | 
| }` | 
|   return str | 
| } |