|
|
<template> <div class="app-container"> <el-row :gutter="15"> <el-col style="margin-bottom: 10px"> <el-card class="box-card" shadow="never"> <div slot="header" class="clearfix"> <span class="role-span">字段配置:{{ tableName }}</span> <el-button :loading="genLoading" icon="el-icon-s-promotion" size="mini" style="float: right; padding: 6px 9px;" type="success" @click="toGen" >保存&生成</el-button> <el-button :loading="columnLoading" icon="el-icon-check" size="mini" style="float: right; padding: 6px 9px;margin-right: 9px" type="primary" @click="saveColumnConfig" >保存</el-button> <el-tooltip class="item" effect="dark" content="数据库中表字段变动时使用该功能" placement="top-start"> <el-button :loading="syncLoading" icon="el-icon-refresh" size="mini" style="float: right; padding: 6px 9px;" type="info" @click="sync" >同步</el-button> </el-tooltip> </div> <el-form size="small" label-width="90px"> <el-table v-loading="loading" :data="data" :max-height="tableHeight" size="small" style="width: 100%;margin-bottom: 15px"> <el-table-column prop="columnName" label="字段名称" /> <el-table-column prop="columnType" label="字段类型" /> <el-table-column prop="remark" label="字段描述"> <template slot-scope="scope"> <el-input v-model="data[scope.$index].remark" size="mini" class="edit-input" /> </template> </el-table-column> <el-table-column align="center" label="必填" width="70px"> <template slot-scope="scope"> <el-checkbox v-model="data[scope.$index].notNull" /> </template> </el-table-column> <el-table-column align="center" label="列表" width="70px"> <template slot-scope="scope"> <el-checkbox v-model="data[scope.$index].listShow" /> </template> </el-table-column> <el-table-column align="center" label="表单" width="70px"> <template slot-scope="scope"> <el-checkbox v-model="data[scope.$index].formShow" /> </template> </el-table-column> <el-table-column label="表单类型"> <template slot-scope="scope"> <el-select v-model="data[scope.$index].formType" filterable class="edit-input" clearable size="mini" placeholder="请选择"> <el-option label="文本框" value="Input" /> <el-option label="文本域" value="Textarea" /> <el-option label="单选框" value="Radio" /> <el-option label="下拉框" value="Select" /> <el-option label="日期框" value="Date" /> </el-select> </template> </el-table-column> <el-table-column label="查询方式"> <template slot-scope="scope"> <el-select v-model="data[scope.$index].queryType" filterable class="edit-input" clearable size="mini" placeholder="请选择"> <el-option label="=" value="=" /> <el-option label="!=" value="!=" /> <el-option label=">=" value=">=" /> <el-option label="<=" value="<=" /> <el-option label="Like" value="Like" /> <el-option label="NotNull" value="NotNull" /> <el-option label="BetWeen" value="BetWeen" /> </el-select> </template> </el-table-column> <el-table-column label="日期注解"> <template slot-scope="scope"> <el-select v-model="data[scope.$index].dateAnnotation" filterable class="edit-input" clearable size="mini" placeholder="请选择"> <el-option label="自动创建时间" value="CreationTimestamp" /> <el-option label="自动更新时间" value="UpdateTimestamp" /> </el-select> </template> </el-table-column> <el-table-column label="关联字典"> <template slot-scope="scope"> <el-select v-model="data[scope.$index].dictName" filterable class="edit-input" clearable size="mini" placeholder="请选择"> <el-option v-for="item in dicts" :key="item.id" :label="item.remark === '' ? item.name : item.remark" :value="item.name" /> </el-select> </template> </el-table-column> </el-table> </el-form> </el-card> </el-col> <el-col> <el-card class="box-card" shadow="never"> <div slot="header" class="clearfix"> <span class="role-span">生成配置</span> <el-button :loading="configLoading" icon="el-icon-check" size="mini" style="float: right; padding: 6px 9px" type="primary" @click="doSubmit" >保存</el-button> </div> <el-form ref="form" :model="form" :rules="rules" size="small" label-width="78px"> <el-form-item label="作者名称" prop="author"> <el-input v-model="form.author" style="width: 40%" /> <span style="color: #C0C0C0;margin-left: 10px;">类上面的作者名称</span> </el-form-item> <el-form-item label="模块名称" prop="moduleName"> <el-input v-model="form.moduleName" style="width: 40%" /> <span style="color: #C0C0C0;margin-left: 10px;">模块的名称,请选择项目中已存在的模块</span> </el-form-item> <el-form-item label="至于包下" prop="pack"> <el-input v-model="form.pack" style="width: 40%" /> <span style="color: #C0C0C0;margin-left: 10px;">项目包的名称,生成的代码放到哪个包里面</span> </el-form-item> <el-form-item label="接口名称" prop="apiAlias"> <el-input v-model="form.apiAlias" style="width: 40%" /> <span style="color: #C0C0C0;margin-left: 10px;">接口的名称,用于控制器与接口文档中</span> </el-form-item> <el-form-item label="前端路径" prop="path"> <el-input v-model="form.path" style="width: 40%" /> <span style="color: #C0C0C0;margin-left: 10px;">输入views文件夹下的目录,不存在即创建</span> </el-form-item> <!-- <el-form-item label="接口目录">--> <!-- <el-input v-model="form.apiPath" style="width: 40%" />--> <!-- <span style="color: #C0C0C0;margin-left: 10px;">Api存放路径[src/api],为空则自动生成路径</span>--> <!-- </el-form-item>--> <el-form-item label="去表前缀" prop="prefix"> <el-input v-model="form.prefix" placeholder="默认不去除表前缀" style="width: 40%" /> <span style="color: #C0C0C0;margin-left: 10px;">默认不去除表前缀,可自定义</span> </el-form-item> <el-form-item label="是否覆盖" prop="cover"> <el-radio-group v-model="form.cover" size="mini" style="width: 40%"> <el-radio-button label="true">是</el-radio-button> <el-radio-button label="false">否</el-radio-button> </el-radio-group> <span style="color: #C0C0C0;margin-left: 10px;">谨防误操作,请慎重选择</span> </el-form-item> </el-form> </el-card> </el-col> </el-row> </div> </template>
<script> import crud from '@/mixins/crud' import { update, get } from '@/api/generator/genConfig' import { save, sync, generator } from '@/api/generator/generator' import { getDicts } from '@/api/archivesConfig/dict' export default { name: 'GeneratorConfig', components: {}, mixins: [crud], data() { return { activeName: 'first', tableName: '', tableHeight: 550, columnLoading: false, configLoading: false, dicts: [], syncLoading: false, genLoading: false, form: { id: null, tableName: '', author: '', pack: '', path: '', moduleName: '', cover: 'false', apiPath: '', prefix: '', apiAlias: null }, rules: { author: [ { required: true, message: '作者不能为空', trigger: 'blur' } ], pack: [ { required: true, message: '包路径不能为空', trigger: 'blur' } ], moduleName: [ { required: true, message: '包路径不能为空', trigger: 'blur' } ], path: [ { required: true, message: '前端路径不能为空', trigger: 'blur' } ], apiAlias: [ { required: true, message: '接口名称不能为空', trigger: 'blur' } ], cover: [ { required: true, message: '不能为空', trigger: 'blur' } ] } } }, created() { this.tableHeight = document.documentElement.clientHeight - 385 this.tableName = this.$route.params.tableName this.$nextTick(() => { this.init() get(this.tableName).then(data => { this.form = data this.form.cover = this.form.cover.toString() }) getDicts().then(data => { this.dicts = data }) }) }, methods: { beforeInit() { this.url = 'api/generator/columns' const tableName = this.tableName this.params = { tableName } return true }, saveColumnConfig() { this.columnLoading = true save(this.data).then(res => { this.notify('保存成功', 'success') this.columnLoading = false }).catch(err => { this.columnLoading = false console.log(err.response.data.message) }) }, doSubmit() { this.$refs['form'].validate((valid) => { if (valid) { this.configLoading = true update(this.form).then(res => { this.notify('保存成功', 'success') this.form = res this.form.cover = this.form.cover.toString() this.configLoading = false }).catch(err => { this.configLoading = false console.log(err.response.data.message) }) } }) }, sync() { this.syncLoading = true sync([this.tableName]).then(() => { this.init() this.notify('同步成功', 'success') this.syncLoading = false }).then(() => { this.syncLoading = false }) }, toGen() { this.genLoading = true save(this.data).then(res => { this.notify('保存成功', 'success') // 生成代码
generator(this.tableName, 0).then(data => { this.genLoading = false this.notify('生成成功', 'success') }).catch(err => { this.genLoading = false console.log(err.response.data.message) }) }).catch(err => { this.genLoading = false console.log(err.response.data.message) }) } } } </script>
<style rel="stylesheet/scss" lang="scss"> .edit-input { .el-input__inner { border: 1px solid #e5e6e7; } } </style>
<style scoped> ::v-deep .input-with-select .el-input-group__prepend { background-color: #fff; } </style>
|