开发优化代码生成功能

This commit is contained in:
izory
2021-09-17 18:19:53 +08:00
parent 48acf4b9f7
commit 30e1098a45
17 changed files with 1222 additions and 146 deletions

View File

@@ -30,7 +30,7 @@ export function codeGetDBList() {
/**
* 获取数据库表
*/
export function codeGetTableList(data) {
export function listDbTable(data) {
return request({
url: 'tool/gen/getTableList',
method: 'get',
@@ -53,14 +53,32 @@ export async function codeGenerator(data) {
* @param {*} data
* @returns
*/
export function queryColumnInfo(data) {
export function queryColumnInfo(tableId) {
return request({
url: 'tool/gen/getColumnInfo',
url: 'tool/gen/Column/' + tableId,
method: 'GET',
params: data,
})
}
// 查询表详细信息
export function getGenTable(params) {
return request({
url: 'tool/gen/getGenTable',
method: 'get',
params: params
})
}
// 导入表
export function importTable(data) {
return request({
url: '/tool/gen/importTable',
method: 'post',
params: data
})
}
// /**
// *
// * 数据库解密

View File

@@ -0,0 +1,225 @@
<template>
<el-card>
<el-tabs v-model="activeName">
<el-tab-pane label="基本信息" name="basic">
<basic-info-form ref="basicInfo" :info="info" />
</el-tab-pane>
<el-tab-pane label="字段信息" name="cloum">
<el-table ref="dragTable" :data="cloumns" row-key="columnId" :max-height="tableHeight">
<el-table-column label="序号" type="index" min-width="5%" class-name="allowDrag" />
<el-table-column label="字段列名" prop="columnName" min-width="10%" :show-overflow-tooltip="true" />
<el-table-column label="字段描述" min-width="10%">
<template slot-scope="scope">
<el-input v-model="scope.row.columnComment"></el-input>
</template>
</el-table-column>
<el-table-column label="物理类型" prop="columnType" min-width="10%" :show-overflow-tooltip="true" />
<el-table-column label="C#类型" min-width="11%">
<template slot-scope="scope">
<el-select v-model="scope.row.csharpType">
<el-option label="long" value="long" />
<el-option label="int" value="int" />
<el-option label="string" value="string" />
<el-option label="double" value="double" />
<el-option label="decimal" value="decimal" />
<el-option label="dateTime" value="DateTime" />
</el-select>
</template>
</el-table-column>
<el-table-column label="C#属性" min-width="10%">
<template slot-scope="scope">
<el-input v-model="scope.row.csharpField"></el-input>
</template>
</el-table-column>
<el-table-column label="插入" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" v-model="scope.row.isInsert"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="编辑" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" v-model="scope.row.isEdit"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="列表" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" v-model="scope.row.isList"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="查询" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" v-model="scope.row.isQuery"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="查询方式" min-width="10%">
<template slot-scope="scope">
<el-select v-model="scope.row.queryType">
<el-option label="=" value="EQ" />
<el-option label="!=" value="NE" />
<el-option label=">" value="GT" />
<el-option label=">=" value="GTE" />
<el-option label="<" value="LT" />
<el-option label="<=" value="LTE" />
<el-option label="LIKE" value="LIKE" />
<el-option label="BETWEEN" value="BETWEEN" />
</el-select>
</template>
</el-table-column>
<el-table-column label="必填" min-width="5%">
<template slot-scope="scope">
<el-checkbox true-label="1" v-model="scope.row.isRequired"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="显示类型" min-width="12%">
<template slot-scope="scope">
<el-select v-model="scope.row.htmlType">
<el-option label="文本框" value="input" />
<el-option label="文本域" value="textarea" />
<el-option label="下拉框" value="select" />
<el-option label="单选框" value="radio" />
<el-option label="复选框" value="checkbox" />
<el-option label="日期控件" value="datetime" />
<el-option label="图片上传" value="imageUpload" />
<el-option label="文件上传" value="fileUpload" />
<el-option label="富文本控件" value="editor" />
</el-select>
</template>
</el-table-column>
<el-table-column label="字典类型" min-width="12%">
<template slot-scope="scope">
<el-select v-model="scope.row.dictType" clearable filterable placeholder="请选择">
<el-option v-for="dict in dictOptions" :key="dict.dictType" :label="dict.dictName" :value="dict.dictType">
<span style="float: left">{{ dict.dictName }}</span>
<span style="float: right; color: #8492a6; font-size: 13px">{{ dict.dictType }}</span>
</el-option>
</el-select>
</template>
</el-table-column>
</el-table>
</el-tab-pane>
<el-tab-pane label="生成信息" name="genInfo">
<gen-info-form ref="genInfo" :info="info" :tables="tables" :menus="menus" />
</el-tab-pane>
</el-tabs>
<el-form label-width="100px">
<el-form-item style="text-align: center;margin-left:-100px;margin-top:10px;">
<el-button type="primary" @click="submitForm()">提交</el-button>
<el-button type="success" @click="handleQuery()">刷新</el-button>
<el-button @click="close()">返回</el-button>
</el-form-item>
</el-form>
</el-card>
</template>
<script>
import { updateGenTable, queryColumnInfo } from "@/api/tool/gen";
import { listType } from "@/api/system/dict/type";
import { listMenu as getMenuTreeselect } from "@/api/system/menu";
import basicInfoForm from "./basicInfoForm";
import genInfoForm from "./genInfoForm";
import Sortable from "sortablejs";
export default {
name: "GenEdit",
components: {
basicInfoForm,
genInfoForm,
},
data() {
return {
// 选中选项卡的 name
activeName: "cloum",
// 表格的高度
tableHeight: document.documentElement.scrollHeight - 245 + "px",
// 表信息
tables: [],
// 表列信息
cloumns: [],
// 字典信息
dictOptions: [],
// 菜单信息
menus: [],
// 表详细信息
info: {},
};
},
created() {
this.handleQuery();
},
methods: {
handleQuery() {
const tableId = this.$route.query && this.$route.query.tableId;
if (tableId) {
// 获取表详细信息
queryColumnInfo(tableId).then((res) => {
this.cloumns = res.data.result;
this.info = res.data.info;
this.tables = res.data.tables;
});
/** 查询字典下拉列表 */
listType().then((response) => {
this.dictOptions = response.data.result;
});
/** 查询菜单下拉列表 */
// getMenuTreeselect().then((response) => {
// this.menus = this.handleTree(response.data, "menuId");
// });
}
},
/** 提交按钮 */
submitForm() {
const basicForm = this.$refs.basicInfo.$refs.basicInfoForm;
const genForm = this.$refs.genInfo.$refs.genInfoForm;
Promise.all([basicForm, genForm].map(this.getFormPromise)).then((res) => {
const validateResult = res.every((item) => !!item);
if (validateResult) {
const genTable = Object.assign({}, basicForm.model, genForm.model);
genTable.columns = this.cloumns;
genTable.params = {
treeCode: genTable.treeCode,
treeName: genTable.treeName,
treeParentCode: genTable.treeParentCode,
parentMenuId: genTable.parentMenuId,
};
updateGenTable(genTable).then((res) => {
this.msgSuccess(res.msg);
if (res.code === 200) {
this.close();
}
});
} else {
this.msgError("表单校验未通过,请重新检查提交内容");
}
});
},
getFormPromise(form) {
return new Promise((resolve) => {
form.validate((res) => {
resolve(res);
});
});
},
/** 关闭按钮 */
close() {
this.$store.dispatch("tagsView/delView", this.$route);
this.$router.push({ path: "/tool/gen", query: { t: Date.now() } });
},
},
mounted() {
const el = this.$refs.dragTable.$el.querySelectorAll(
".el-table__body-wrapper > table > tbody"
)[0];
const sortable = Sortable.create(el, {
handle: ".allowDrag",
onEnd: (evt) => {
const targetRow = this.cloumns.splice(evt.oldIndex, 1)[0];
this.cloumns.splice(evt.newIndex, 0, targetRow);
for (let index in this.cloumns) {
this.cloumns[index].sort = parseInt(index) + 1;
}
},
});
},
};
</script>

View File

@@ -0,0 +1,300 @@
<template>
<el-form ref="genInfoForm" :model="info" :rules="rules" label-width="150px">
<el-row>
<el-col :span="12">
<el-form-item prop="tplCategory">
<span slot="label">生成模板</span>
<el-select v-model="info.tplCategory" @change="tplSelectChange">
<el-option label="单表(增删改查)" value="crud" />
<el-option label="树表(增删改查)" value="tree" />
<el-option label="主子表(增删改查)" value="sub" />
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="packageName">
<span slot="label">
生成包路径
<el-tooltip content="生成在哪个java包下例如 com.ruoyi.system" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-input v-model="info.packageName" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="moduleName">
<span slot="label">
生成模块名
<el-tooltip content="可理解为子系统名,例如 system" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-input v-model="info.moduleName" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="businessName">
<span slot="label">
生成业务名
<el-tooltip content="可理解为功能英文名,例如 user" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-input v-model="info.businessName" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="functionName">
<span slot="label">
生成功能名
<el-tooltip content="用作类描述,例如 用户" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-input v-model="info.functionName" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<span slot="label">
上级菜单
<el-tooltip content="分配到指定菜单下,例如 系统管理" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<treeselect
:append-to-body="true"
v-model="info.parentMenuId"
:options="menus"
:normalizer="normalizer"
:show-count="true"
placeholder="请选择系统菜单"
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item prop="genType">
<span slot="label">
生成代码方式
<el-tooltip content="默认为zip压缩包下载也可以自定义生成路径" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-radio v-model="info.genType" label="0">zip压缩包</el-radio>
<el-radio v-model="info.genType" label="1">自定义路径</el-radio>
</el-form-item>
</el-col>
<el-col :span="24" v-if="info.genType == '1'">
<el-form-item prop="genPath">
<span slot="label">
自定义路径
<el-tooltip content="填写磁盘绝对路径若不填写则生成到当前Web项目下" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-input v-model="info.genPath">
<el-dropdown slot="append">
<el-button type="primary">
最近路径快速选择
<i class="el-icon-arrow-down el-icon--right"></i>
</el-button>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="info.genPath = '/'">恢复默认的生成基础路径</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row v-show="info.tplCategory == 'tree'">
<h4 class="form-header">其他信息</h4>
<el-col :span="12">
<el-form-item>
<span slot="label">
树编码字段
<el-tooltip content="树显示的编码字段名, 如dept_id" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.treeCode" placeholder="请选择">
<el-option
v-for="(column, index) in info.columns"
:key="index"
:label="column.columnName + '' + column.columnComment"
:value="column.columnName"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<span slot="label">
树父编码字段
<el-tooltip content="树显示的父编码字段名, 如parent_Id" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.treeParentCode" placeholder="请选择">
<el-option
v-for="(column, index) in info.columns"
:key="index"
:label="column.columnName + '' + column.columnComment"
:value="column.columnName"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<span slot="label">
树名称字段
<el-tooltip content="树节点的显示名称字段名, 如dept_name" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.treeName" placeholder="请选择">
<el-option
v-for="(column, index) in info.columns"
:key="index"
:label="column.columnName + '' + column.columnComment"
:value="column.columnName"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row v-show="info.tplCategory == 'sub'">
<h4 class="form-header">关联信息</h4>
<el-col :span="12">
<el-form-item>
<span slot="label">
关联子表的表名
<el-tooltip content="关联子表的表名, 如sys_user" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.subTableName" placeholder="请选择" @change="subSelectChange">
<el-option
v-for="(table, index) in tables"
:key="index"
:label="table.tableName + '' + table.tableComment"
:value="table.tableName"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item>
<span slot="label">
子表关联的外键名
<el-tooltip content="子表关联的外键名, 如user_id" placement="top">
<i class="el-icon-question"></i>
</el-tooltip>
</span>
<el-select v-model="info.subTableFkName" placeholder="请选择">
<el-option
v-for="(column, index) in subColumns"
:key="index"
:label="column.columnName + '' + column.columnComment"
:value="column.columnName"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
</el-form>
</template>
<script>
import Treeselect from "@riophae/vue-treeselect";
import "@riophae/vue-treeselect/dist/vue-treeselect.css";
export default {
name: "BasicInfoForm",
components: { Treeselect },
props: {
info: {
type: Object,
default: null
},
tables: {
type: Array,
default: null
},
menus: {
type: Array,
default: []
},
},
data() {
return {
subColumns: [],
rules: {
tplCategory: [
{ required: true, message: "请选择生成模板", trigger: "blur" }
],
packageName: [
{ required: true, message: "请输入生成包路径", trigger: "blur" }
],
moduleName: [
{ required: true, message: "请输入生成模块名", trigger: "blur" }
],
businessName: [
{ required: true, message: "请输入生成业务名", trigger: "blur" }
],
functionName: [
{ required: true, message: "请输入生成功能名", trigger: "blur" }
],
}
};
},
created() {},
watch: {
'info.subTableName': function(val) {
this.setSubTableColumns(val);
}
},
methods: {
/** 转换菜单数据结构 */
normalizer(node) {
if (node.children && !node.children.length) {
delete node.children;
}
return {
id: node.menuId,
label: node.menuName,
children: node.children
};
},
/** 选择子表名触发 */
subSelectChange(value) {
this.info.subTableFkName = '';
},
/** 选择生成模板触发 */
tplSelectChange(value) {
if(value !== 'sub') {
this.info.subTableName = '';
this.info.subTableFkName = '';
}
},
/** 设置关联外键 */
setSubTableColumns(value) {
for (var item in this.tables) {
const name = this.tables[item].tableName;
if (value === name) {
this.subColumns = this.tables[item].columns;
break;
}
}
}
}
};
</script>

View File

@@ -0,0 +1,132 @@
<template>
<!-- 导入表 -->
<el-dialog title="导入表" :visible.sync="visible" width="900px" top="5vh" append-to-body>
<el-form ref="queryParams" :inline="true" :rules="rules" :model="queryParams" size="small">
<el-form-item label="数据库" prop="dbName">
<el-select v-model="queryParams.dbName" clearable placeholder="请选择" @change="handleShowTable">
<el-option v-for="item in dbList" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="表名">
<el-input v-model="queryParams.tableName" clearable placeholder="输入要查询的表名" />
</el-form-item>
<!-- <el-form-item label="去掉表名前缀:">
<el-tooltip class="item" effect="dark" content="表名直接变为类名,去掉表名前缀。" placement="bottom">
<el-input v-model="codeform.replaceTableNameStr" clearable width="300" placeholder="例如sys_" />
</el-tooltip>
</el-form-item> -->
<el-form-item>
<el-button type="primary" @click="handleQuery()">查询</el-button>
<!-- <el-button type="default" icon="el-icon-refresh" size="small" @click="loadTableData()">刷新</el-button> -->
</el-form-item>
</el-form>
<el-row>
<el-table ref="table" @row-click="clickRow" :data="dbTableList" highlight-current-row height="300px" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55"></el-table-column>
<el-table-column prop="name" label="表名" sortable="custom" width="380" />
<el-table-column prop="description" label="表描述" />
</el-table>
<pagination background :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" layout="total, sizes, prev, pager, next, jumper" :total="total" @pagination="getList" />
</el-row>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleImportTable"> </el-button>
<el-button @click="visible = false"> </el-button>
</div>
</el-dialog>
</template>
<script>
import { listDbTable, importTable, codeGetDBList } from "@/api/tool/gen";
export default {
data() {
return {
// 遮罩层
visible: false,
// 选中数组值
tables: [],
// 总条数
total: 0,
// 表数据
dbTableList: [],
// 数据库数据
dbList: [],
// 查询参数
queryParams: {
dbName: "",
pageNum: 1,
pageSize: 10,
tableName: undefined,
},
rules: {
dbName: [
{ required: true, message: "请选择数据库名称", trigger: "blur" },
],
// replaceTableNameStr: [
// { min: 0, max: 50, message: "长度小于50个字符", trigger: "blur" },
// ],
},
};
},
methods: {
// 显示弹框
show() {
this.getList();
this.visible = true;
},
clickRow(row) {
this.$refs.table.toggleRowSelection(row);
},
// 多选框选中数据
handleSelectionChange(selection) {
this.tables = selection.map((item) => item.name);
},
// 查询表数据
getList() {
codeGetDBList().then((res) => {
const { dbList, defaultDb } = res.data;
// this.queryParams.dbName =
// this.queryParams.dbName !== "" ? defaultDb : "";
this.dbList = dbList;
});
if (this.queryParams.dbName !== "") {
listDbTable(this.queryParams).then((res) => {
this.dbTableList = res.data.result;
this.total = res.data.totalNum;
// this.tableloading = false;
});
}
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
handleShowTable() {
// console.log(json)
this.handleQuery();
},
/** 导入按钮操作 */
handleImportTable() {
console.log(JSON.stringify(this.tables));
importTable({
tables: this.tables.join(","),
dbName: this.queryParams.dbName,
}).then((res) => {
this.msgSuccess(res.msg);
if (res.code === 200) {
this.visible = false;
this.$emit("ok");
}
});
},
},
};
</script>

View File

@@ -1,23 +1,23 @@
<template>
<div class="app-container">
<el-form ref="codeform" :inline="true" :rules="rules" :model="codeform" size="small">
<el-form-item label="数据库" prop="dbName">
<el-select v-model="codeform.dbName" clearable placeholder="请选择" @change="handleShowTable">
<el-form ref="codeform" :inline="true" :rules="rules" :model="queryParams" size="small">
<!-- <el-form-item label="数据库" prop="dbName">
<el-select v-model="queryParams.dbName" clearable placeholder="请选择" @change="handleShowTable">
<el-option v-for="item in selectedDataBase" :key="item" :label="item" :value="item" />
</el-select>
</el-form-item>
</el-form-item> -->
<el-form-item label="表名">
<el-input v-model="codeform.tableName" clearable placeholder="输入要查询的表名" />
<el-input v-model="queryParams.tableName" clearable placeholder="输入要查询的表名" />
</el-form-item>
<!-- <el-form-item label="项目命名空间:" prop="baseSpace">
<el-tooltip class="item" effect="dark" content="系统会根据项目命名空间自动生成IService、Service、Models等子命名空间" placement="bottom">
<el-input v-model="codeform.baseSpace" clearable placeholder="如Zr" />
<el-input v-model="queryParams.baseSpace" clearable placeholder="如Zr" />
</el-tooltip>
</el-form-item> -->
<el-form-item label="去掉表名前缀:">
<el-tooltip class="item" effect="dark" content="表名直接变为类名,去掉表名前缀。" placement="bottom">
<el-input v-model="codeform.replaceTableNameStr" clearable width="300" placeholder="例如sys_" />
<el-input v-model="queryParams.replaceTableNameStr" clearable width="300" placeholder="例如sys_" />
</el-tooltip>
</el-form-item>
<el-form-item>
@@ -26,17 +26,38 @@
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb10">
<el-col :span="1.5">
<el-button type="info" plain icon="el-icon-upload" size="mini" @click="openImportTable" v-hasPermi="['tool:gen:import']">导入</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" plain icon="el-icon-delete" size="mini" v-hasPermi="['tool:gen:delete']">删除</el-button>
</el-col>
</el-row>
<el-table ref="gridtable" v-loading="tableloading" :data="tableData" border stripe highlight-current-row height="500px" style="width: 100%;">
<el-table-column prop="name" label="表名" sortable="custom" width="380" />
<el-table-column prop="description" label="表描述" />
<el-table-column label="操作" align="center" width="200">
<el-table-column type="selection" align="center" width="55"></el-table-column>
<el-table-column label="序号" type="index" width="50" align="center">
<template slot-scope="scope">
<span>{{(queryParams.pageNum - 1) * queryParams.pageSize + scope.$index + 1}}</span>
</template>
</el-table-column>
<el-table-column prop="tableName" label="表名" sortable="custom" width="380" />
<el-table-column prop="tableComment" label="表描述" />
<el-table-column prop="className" label="实体" />
<el-table-column prop="createTime" label="创建时间" />
<el-table-column prop="updateTime" label="更新时间" />
<el-table-column label="操作" align="center" width="240">
<template slot-scope="scope">
<el-button type="text" icon="el-icon-view" @click="handlePreview()">预览</el-button>
<el-button type="text" icon="el-icon-edit" @click="handleEditTable(scope.row)">编辑</el-button>
<el-button type="text" icon="el-icon-download" @click="handleShowDialog(scope.row)" v-hasPermi="['tool:gen:code']">生成代码</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination background :current-page="pagination.pageNum" :page-sizes="[5,10,20,50,100, 200, 300, 400]" :page-size="pagination.pagesize" layout="total, sizes, prev, pager, next, jumper" :total="pagination.pageTotal" @size-change="handleSizeChange" @current-change="handleCurrentChange" />
<pagination :page.sync="queryParams.pageNum" :limit.sync="queryParams.pageSize" :total="total" @pagination="handleSearch" />
<import-table ref="import" @ok="handleSearch" />
<el-dialog :visible.sync="showGenerate" title="代码生成" width="800px">
<el-form ref="codeGenerateForm" label-width="140px">
@@ -55,38 +76,7 @@
<el-radio v-model="coverd" :label="true"></el-radio>
<el-radio v-model="coverd" :label="false"></el-radio>
</el-form-item>
<!-- <el-form-item label="生成查询的列">
<el-table :data="columnData" height="300px">
<el-table-column type="selection" width="60" />
<el-table-column label="字段列名" prop="dbColumnName" />
<el-table-column label="字段描述" prop="columnDescription">
<template slot-scope="scope">
<el-input v-model="scope.row.columnDescription" />
</template>
</el-table-column>
<el-table-column label="表数据类型" prop="dataType" />
<el-table-column label="C#类型">
<template slot-scope="scope">
<el-select v-model="scope.row.dataType">
<el-option value="int">int</el-option>
<el-option value="bigint">bigint</el-option>
<el-option value="varchar">varchar</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="显示类型">
<el-select v-model="selectType">
<el-option value="input">文本框</el-option>
<el-option value="textArea">文本域</el-option>
<el-option value="select">下拉框</el-option>
<el-option value="radio">单选框</el-option>
<el-option value="datetime">日期控件</el-option>
<el-option value="upload">图片上传</el-option>
<el-option value="fileUpload">文件上传</el-option>
</el-select>
</el-table-column>
</el-table>
</el-form-item> -->
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="handleGenerate"> </el-button>
@@ -97,21 +87,18 @@
</template>
<script>
import {
// createGetDBConn,
codeGetDBList,
codeGetTableList,
codeGenerator,
queryColumnInfo,
} from "@/api/tool/gen";
// import { downloadFile } from "@/utils/index";
import { codeGenerator, getGenTable } from "@/api/tool/gen";
import importTable from "./importTable";
import { Loading } from "element-ui";
export default {
name: "CodeGenerator",
components: { importTable },
data() {
return {
codeform: {
queryParams: {
pageNum: 1,
pageSize: 20,
dbName: "",
tableName: "",
baseSpace: "",
@@ -127,18 +114,16 @@ export default {
{ min: 0, max: 50, message: "长度小于50个字符", trigger: "blur" },
],
},
// 表数据
tableData: [],
// 是否显示加载
tableloading: false,
pagination: {
pageNum: 1,
pagesize: 20,
pageTotal: 0,
},
total: 0,
// 选中行的表
currentSelected: {},
selectedDataBase: [],
// 列信息
columnData: [],
// columnData: [],
// 选中的列
checkedQueryColumn: [],
//是否覆盖原先代码
@@ -146,54 +131,27 @@ export default {
};
},
created() {
this.pagination.pageNum = 1;
this.loadData();
this.loadTableData();
this.handleSearch();
},
methods: {
loadData() {
codeGetDBList().then((res) => {
const { dbList, defaultDb } = res.data;
this.codeform.dbName = defaultDb;
this.selectedDataBase = dbList;
});
},
/**
* 加载页面table数据
*/
loadTableData() {
if (this.codeform.dbName !== "") {
this.tableloading = true;
var seachdata = {
pageNum: this.pagination.pageNum,
PageSize: this.pagination.pagesize,
tableName: this.codeform.tableName,
dbName: this.codeform.dbName,
};
codeGetTableList(seachdata).then((res) => {
this.tableData = res.data.result;
this.pagination.pageTotal = res.data.totalNum;
this.tableloading = false;
});
}
},
/**
* 点击查询
*/
handleSearch() {
this.$refs["codeform"].validate((valid) => {
if (valid) {
this.tableloading = true;
this.pagination.pageNum = 1;
this.loadTableData();
} else {
return false;
}
this.tableloading = true;
getGenTable(this.queryParams).then((res) => {
this.tableData = res.data.result;
this.total = res.data.totalCount;
this.tableloading = false;
});
},
handleShowTable() {
this.pagination.pageNum = 1;
this.loadTableData();
/**
* 编辑表格
*/
handleEditTable(row) {
console.log(row);
this.$router.push("/tool/editTable?tableId=" + row.tableId);
},
handlePreview() {
this.msgError("敬请期待");
@@ -202,15 +160,6 @@ export default {
this.showGenerate = true;
this.currentSelected = row;
queryColumnInfo({
dbName: this.codeform.dbName,
tableName: row.name,
}).then((res) => {
if (res.code === 200) {
const columnData = res.data;
this.columnData = columnData;
}
});
},
/**
* 点击生成服务端代码
@@ -267,22 +216,26 @@ export default {
/**
* 选择每页显示数量
*/
handleSizeChange(val) {
this.pagination.pagesize = val;
this.pagination.pageNum = 1;
this.loadTableData();
},
// handleSizeChange(val) {
// this.pagination.pagesize = val;
// this.pagination.pageNum = 1;
// this.loadTableData();
// },
/**
* 选择当页面
*/
handleCurrentChange(val) {
this.pagination.pageNum = val;
this.loadTableData();
},
// handleCurrentChange(val) {
// this.pagination.pageNum = val;
// this.loadTableData();
// },
cancel() {
this.showGenerate = false;
this.currentSelected = {};
},
// 导入代码生成
openImportTable() {
this.$refs.import.show();
},
},
};
</script>