feat 还原代码生成器的UI 和接口格式
This commit is contained in:
parent
74a57c9543
commit
f0451376f9
|
|
@ -2,50 +2,74 @@ import request from '@/utils/request'
|
|||
|
||||
// 代码生成已选数据表列表接口
|
||||
export function generateTable(params: any) {
|
||||
return request.get({ url: '/tools.generator/generateTable', params })
|
||||
return request.get({ url: '/gen/list', params })
|
||||
}
|
||||
|
||||
// 数据表列表接口
|
||||
export function dataTable(params: any) {
|
||||
return request.get({ url: '/tools.generator/dataTable', params })
|
||||
return request.get({ url: '/gen/db', params })
|
||||
}
|
||||
|
||||
// 数据表所有列表接口
|
||||
export function dataTableAll() {
|
||||
return request.get({ url: '/gen/dbAll' })
|
||||
}
|
||||
|
||||
//表名查字段
|
||||
export function dataTableToColumn(params: any) {
|
||||
return request.get({ url: '/gen/dbColumn', params })
|
||||
}
|
||||
//选择要生成代码的数据表
|
||||
export function selectTable(params: any) {
|
||||
return request.post({ url: '/tools.generator/selectTable', params })
|
||||
return request.post(
|
||||
{ url: '/gen/importTable', params },
|
||||
{
|
||||
isParamsToData: false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
// 已选择的数据表详情
|
||||
export function tableDetail(params: any) {
|
||||
return request.get({ url: '/tools.generator/detail', params })
|
||||
return request.get({ url: '/gen/detail', params })
|
||||
}
|
||||
|
||||
//同步字段
|
||||
export function syncColumn(params: any) {
|
||||
return request.post({ url: '/tools.generator/syncColumn', params })
|
||||
return request.post(
|
||||
{ url: '/gen/syncTable', params },
|
||||
{
|
||||
isParamsToData: false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
//删除已选择的数据表
|
||||
export function generateDelete(params: any) {
|
||||
return request.post({ url: '/tools.generator/delete', params })
|
||||
return request.post({ url: '/gen/delTable', params })
|
||||
}
|
||||
|
||||
//编辑已选表字段
|
||||
export function generateEdit(params: any) {
|
||||
return request.post({ url: '/tools.generator/edit', params })
|
||||
return request.post({ url: '/gen/editTable', params })
|
||||
}
|
||||
|
||||
//预览代码
|
||||
export function generatePreview(params: any) {
|
||||
return request.post({ url: '/tools.generator/preview', params })
|
||||
return request.get({ url: '/gen/previewCode', params })
|
||||
}
|
||||
|
||||
//生成代码
|
||||
export function generateCode(params: any) {
|
||||
return request.post({ url: '/tools.generator/generate', params })
|
||||
return request.get({ url: '/gen/genCode', params })
|
||||
}
|
||||
|
||||
//获取模型
|
||||
export function getModels() {
|
||||
return request.get({ url: '/tools.generator/getModels' })
|
||||
//下载代码
|
||||
export function downloadCode(params: any) {
|
||||
return request.get(
|
||||
{ responseType: 'blob', url: '/gen/downloadCode', params },
|
||||
{
|
||||
isTransformResponse: false
|
||||
}
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
/**
|
||||
* @description
|
||||
* @param file
|
||||
*/
|
||||
export function streamFileDownload(file: any, fileName = '文件名称.zip') {
|
||||
const blob = new Blob([file], { type: 'application/octet-stream;charset=UTF-8' })
|
||||
const url = window.URL.createObjectURL(blob)
|
||||
const link = document.createElement('a')
|
||||
link.style.display = 'none'
|
||||
link.href = url
|
||||
link.setAttribute('download', fileName)
|
||||
document.body.appendChild(link)
|
||||
link.click()
|
||||
document.body.removeChild(link) // 下载完成移除元素
|
||||
window.URL.revokeObjectURL(url)
|
||||
}
|
||||
|
|
@ -8,38 +8,52 @@
|
|||
ref="formRef"
|
||||
class="ls-form"
|
||||
:model="formData"
|
||||
label-width="100px"
|
||||
label-width="130px"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="base">
|
||||
<el-form-item label="表名称" prop="table_name">
|
||||
<el-form-item label="表名称" prop="base.tableName">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.table_name"
|
||||
v-model="formData.base.tableName"
|
||||
placeholder="请输入表名称"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="表描述" prop="table_comment">
|
||||
<el-form-item label="表描述" prop="base.tableComment">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.table_comment"
|
||||
v-model="formData.base.tableComment"
|
||||
placeholder="请输入表描述"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="作者">
|
||||
<el-form-item label="实体类名称" prop="base.entityName">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.author" clearable />
|
||||
<el-input
|
||||
v-model="formData.base.entityName"
|
||||
placeholder="请输入实体类名称"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="作者" prop="base.authorName">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.base.authorName"
|
||||
placeholder="请输入作者"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.remark"
|
||||
v-model="formData.base.remarks"
|
||||
class="w-full"
|
||||
type="textarea"
|
||||
:autosize="{ minRows: 4, maxRows: 4 }"
|
||||
|
|
@ -51,18 +65,36 @@
|
|||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="字段管理" name="column">
|
||||
<el-table :data="formData.table_column">
|
||||
<el-table-column label="字段列名" prop="column_name" />
|
||||
<el-table-column label="字段描述" prop="column_comment" min-width="120">
|
||||
<el-table :data="formData.column">
|
||||
<el-table-column label="字段列名" prop="columnName" />
|
||||
<el-table-column label="字段描述" prop="columnComment" min-width="120">
|
||||
<template v-slot="{ row }">
|
||||
<el-input v-model="row.column_comment" clearable />
|
||||
<el-input v-model="row.columnComment"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物理类型" prop="columnType" min-width="100" />
|
||||
<el-table-column label="Java类型" min-width="100">
|
||||
<template v-slot="{ row }">
|
||||
<el-select v-model="row.javaType">
|
||||
<el-option label="Long" value="Long" />
|
||||
<el-option label="String" value="String" />
|
||||
<el-option label="Integer" value="Integer" />
|
||||
<el-option label="Double" value="Double" />
|
||||
<el-option label="BigDecimal" value="BigDecimal" />
|
||||
<el-option label="Date" value="Date" />
|
||||
<el-option label="Boolean" value="Boolean" />
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Java属性" min-width="100">
|
||||
<template v-slot="{ row }">
|
||||
<el-input v-model="row.javaField" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物理类型" prop="column_type" />
|
||||
<el-table-column label="必填" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.is_required"
|
||||
v-model="row.isRequired"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
/>
|
||||
|
|
@ -71,7 +103,7 @@
|
|||
<el-table-column label="插入" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.is_insert"
|
||||
v-model="row.isInsert"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
/>
|
||||
|
|
@ -80,7 +112,7 @@
|
|||
<el-table-column label="编辑" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.is_update"
|
||||
v-model="row.isEdit"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
/>
|
||||
|
|
@ -89,7 +121,7 @@
|
|||
<el-table-column label="列表" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.is_lists"
|
||||
v-model="row.isList"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
/>
|
||||
|
|
@ -98,7 +130,7 @@
|
|||
<el-table-column label="查询" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.is_query"
|
||||
v-model="row.isQuery"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
/>
|
||||
|
|
@ -106,28 +138,29 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="查询方式">
|
||||
<template v-slot="{ row }">
|
||||
<el-select v-model="row.query_type">
|
||||
<el-option label="=" value="=" />
|
||||
<el-option label="!=" value="!=" />
|
||||
<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="BETWEEN" value="between" />
|
||||
<el-select v-model="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="120">
|
||||
<template v-slot="{ row }">
|
||||
<el-select v-model="row.view_type">
|
||||
<el-select v-model="row.htmlType">
|
||||
<el-option label="文本框" value="input" />
|
||||
<el-option label="数字框" value="number" />
|
||||
<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="imageSelect" />
|
||||
<el-option label="图片选择控件" value="imageUpload" />
|
||||
<el-option label="富文本控件" value="editor" />
|
||||
</el-select>
|
||||
</template>
|
||||
|
|
@ -135,23 +168,23 @@
|
|||
<el-table-column label="字典类型" min-width="120">
|
||||
<template v-slot="{ row }">
|
||||
<el-select
|
||||
v-model="row.dict_type"
|
||||
v-model="row.dictType"
|
||||
clearable
|
||||
:disabled="
|
||||
!(
|
||||
row.view_type == 'select' ||
|
||||
row.view_type == 'radio' ||
|
||||
row.view_type == 'checkbox'
|
||||
row.htmlType == 'select' ||
|
||||
row.htmlType == 'radio' ||
|
||||
row.htmlType == 'checkbox'
|
||||
)
|
||||
"
|
||||
placeholder="字典类型"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in optionsData.dict_type"
|
||||
v-for="(item, index) in optionsData.dictType"
|
||||
:key="index"
|
||||
:label="item.name"
|
||||
:value="item.type"
|
||||
:disabled="!item.status"
|
||||
:label="item.dictName"
|
||||
:value="item.dictType"
|
||||
:disabled="!item.dictStatus"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
|
|
@ -159,365 +192,293 @@
|
|||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="生成配置" name="config">
|
||||
<el-form-item label="模板类型" prop="template_type">
|
||||
<el-radio-group v-model="formData.template_type">
|
||||
<el-radio :label="0">单表(curd)</el-radio>
|
||||
<el-radio :label="1">树表(curd)</el-radio>
|
||||
<el-form-item label="模板类型" prop="gen.genTpl" required>
|
||||
<el-radio-group v-model="formData.gen.genTpl">
|
||||
<el-radio :label="GenTpl.CRUD">单表(增删改查)</el-radio>
|
||||
<el-radio :label="GenTpl.TREE">树表(增删改查)</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="删除类型" prop="delete.type">
|
||||
<el-radio-group v-model="formData.delete.type">
|
||||
<el-radio :label="0">物理删除</el-radio>
|
||||
<el-radio :label="1">软删除</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
label="删除字段"
|
||||
prop="delete.name"
|
||||
v-if="formData.delete.type == 1"
|
||||
>
|
||||
<el-select class="w-80" v-model="formData.delete.name" clearable>
|
||||
<el-option
|
||||
v-for="item in formData.table_column"
|
||||
:key="item.id"
|
||||
:value="item.column_name"
|
||||
:label="`${item.column_name}:${item.column_comment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<template v-if="formData.template_type == 1">
|
||||
<el-form-item label="树表ID" prop="treePrimary">
|
||||
<div>
|
||||
<el-select
|
||||
class="w-80"
|
||||
v-model="formData.tree.tree_id"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in formData.table_column"
|
||||
:key="item.id"
|
||||
:value="item.column_name"
|
||||
:label="`${item.column_name}:${item.column_comment}`"
|
||||
/>
|
||||
</el-select>
|
||||
<div class="form-tips">指定树表的主要ID,一般为主键</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="树表父ID" prop="treeParent">
|
||||
<div>
|
||||
<el-select
|
||||
class="w-80"
|
||||
v-model="formData.tree.tree_pid"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in formData.table_column"
|
||||
:key="item.id"
|
||||
:value="item.column_name"
|
||||
:label="`${item.column_name}:${item.column_comment}`"
|
||||
/>
|
||||
</el-select>
|
||||
<div class="form-tips">指定树表的父ID,比如:parent_id</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="树名称" prop="treeName">
|
||||
<el-select class="w-80" v-model="formData.tree.tree_name" clearable>
|
||||
<el-option
|
||||
v-for="item in formData.table_column"
|
||||
:key="item.id"
|
||||
:value="item.column_name"
|
||||
:label="`${item.column_name}:${item.column_comment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
<el-form-item label="类描述">
|
||||
<div class="w-80">
|
||||
<div>
|
||||
<el-input
|
||||
v-model="formData.class_comment"
|
||||
placeholder="请输入文件描述"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
<div class="form-tips">
|
||||
<div>
|
||||
例:填写test,生成文件描述为test控制器(test逻辑/test模型)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="生成方式" prop="generate_type">
|
||||
<el-radio-group v-model="formData.generate_type">
|
||||
<el-radio :label="0">压缩包下载</el-radio>
|
||||
<el-radio :label="1">生成到模块</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="模块名" prop="module_name">
|
||||
<el-form-item label="模块名" prop="gen.moduleName">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.module_name"
|
||||
v-model="formData.gen.moduleName"
|
||||
placeholder="请输入模块名"
|
||||
clearable
|
||||
/>
|
||||
<div class="form-tips">生成文件所在模块</div>
|
||||
<div class="form-tips">生成文件所在模块名</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="类目录">
|
||||
<el-form-item label="功能名称" prop="gen.functionName">
|
||||
<div class="w-80">
|
||||
<div>
|
||||
<el-input
|
||||
v-model="formData.class_dir"
|
||||
placeholder="请输入文件所在目录"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
<el-input
|
||||
v-model="formData.gen.functionName"
|
||||
placeholder="请输入功能名称"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="生成方式" prop="gen.genType">
|
||||
<div>
|
||||
<el-radio-group v-model="formData.gen.genType">
|
||||
<el-radio :label="GenType.ZIP">压缩包下载</el-radio>
|
||||
<el-radio :label="GenType.CUSTOM_PATH">自定义路径</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">压縮包下载方式暂不支持自动构建菜单权限</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单构建" prop="gen.menuStatus" required>
|
||||
<div>
|
||||
<el-radio-group v-model="formData.gen.menuStatus">
|
||||
<el-radio :label="1">自动构建</el-radio>
|
||||
<el-radio :label="0">手动添加</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">
|
||||
<div>
|
||||
例:填写test,则在app/模块名/controller/test下生成控制器
|
||||
</div>
|
||||
自动构建:自动执行生成菜单sql。 手动添加:自行添加菜单
|
||||
</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="父级菜单" prop="menu.pid">
|
||||
<el-form-item label="父级菜单" prop="gen.menuPid">
|
||||
<el-tree-select
|
||||
class="w-80"
|
||||
v-model="formData.menu.pid"
|
||||
v-model="formData.gen.menuPid"
|
||||
:data="optionsData.menu"
|
||||
clearable
|
||||
node-key="id"
|
||||
:props="{
|
||||
label: 'name'
|
||||
label: 'menuName'
|
||||
}"
|
||||
default-expand-all
|
||||
placeholder="请选择父级菜单"
|
||||
check-strictly
|
||||
/>
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单名称" prop="menu.name">
|
||||
<el-form-item label="菜单名称" prop="gen.menuName">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.menu.name"
|
||||
v-model="formData.gen.menuName"
|
||||
placeholder="请输入菜单名称"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="菜单构建" prop="menu.type" required>
|
||||
<div>
|
||||
<el-radio-group v-model="formData.menu.type">
|
||||
<el-radio :label="1">自动构建</el-radio>
|
||||
<el-radio :label="0">手动添加</el-radio>
|
||||
</el-radio-group>
|
||||
<div class="form-tips">
|
||||
自动构建:自动执行生成菜单sql。手动添加:自行添加菜单。
|
||||
</div>
|
||||
|
||||
<el-form-item
|
||||
v-if="formData.gen.genType == GenType.CUSTOM_PATH"
|
||||
label="自定义路径"
|
||||
prop="gen.genPath"
|
||||
>
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.gen.genPath"
|
||||
placeholder="请输入自定义路径"
|
||||
clearable
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<template v-if="formData.gen.genTpl == GenTpl.TREE">
|
||||
<el-form-item label="树主键字段" prop="gen.treePrimary">
|
||||
<el-select
|
||||
class="w-80"
|
||||
v-model="formData.gen.treePrimary"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in formData.column"
|
||||
:key="item.id"
|
||||
:value="item.columnName"
|
||||
:label="`${item.columnName}:${item.columnComment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="树父级字段" prop="gen.treeParent">
|
||||
<el-select class="w-80" v-model="formData.gen.treeParent" clearable>
|
||||
<el-option
|
||||
v-for="item in formData.column"
|
||||
:key="item.id"
|
||||
:value="item.columnName"
|
||||
:label="`${item.columnName}:${item.columnComment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="树名称字段" prop="gen.treeName">
|
||||
<el-select class="w-80" v-model="formData.gen.treeName" clearable>
|
||||
<el-option
|
||||
v-for="item in formData.column"
|
||||
:key="item.id"
|
||||
:value="item.columnName"
|
||||
:label="`${item.columnName}:${item.columnComment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="关联配置" name="relations">
|
||||
<el-button type="primary" @click="showEditPopup('add')">
|
||||
<template #icon>
|
||||
<icon name="el-icon-Plus" />
|
||||
</template>
|
||||
新增关联
|
||||
</el-button>
|
||||
<div class="mt-4">
|
||||
<el-table :data="formData.relations" size="mini">
|
||||
<el-table-column prop="type" label="关联类型">
|
||||
<template #default="{ row }">
|
||||
<dict-value :value="row.type" :options="relationTypes" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="name" label="关联名称" />
|
||||
<el-table-column prop="model" label="关联模型" />
|
||||
<el-table-column prop="local_key" label="关联键">
|
||||
<template #default="{ row }">
|
||||
<dict-value
|
||||
:value="row.local_key"
|
||||
:options="formData.table_column"
|
||||
:config="{
|
||||
label: 'column_comment',
|
||||
value: 'column_name'
|
||||
}"
|
||||
/>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column prop="foreign_key" label="外键" />
|
||||
<el-table-column label="操作">
|
||||
<template #default="{ row, $index }">
|
||||
<el-button
|
||||
link
|
||||
type="primary"
|
||||
@click="showEditPopup('edit', row, $index)"
|
||||
>
|
||||
编辑
|
||||
</el-button>
|
||||
<el-button link type="danger" @click="handelDelete($index)">
|
||||
删除
|
||||
</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
<relations-add
|
||||
:column="formData.table_column"
|
||||
:types="relationTypes"
|
||||
v-if="showEdit"
|
||||
ref="editRef"
|
||||
@add="handleAdd"
|
||||
@edit="handleEdit"
|
||||
@close="showEdit = false"
|
||||
/>
|
||||
</div>
|
||||
<el-tab-pane label="关联配置" name="relation">
|
||||
<el-form-item label="关联子表的表名" prop="gen.subTableName">
|
||||
<el-select
|
||||
class="w-80"
|
||||
v-model="formData.gen.subTableName"
|
||||
clearable
|
||||
@change="handleTableChange"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in optionsData.dataTable"
|
||||
:key="item.tableName"
|
||||
:value="item.tableName"
|
||||
:label="`${item.tableName}:${item.tableComment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="子表关联的外键名 " prop="gen.subTableFk">
|
||||
<el-select
|
||||
class="w-80"
|
||||
v-model="formData.gen.subTableFk"
|
||||
clearable
|
||||
:loading="columnLoading"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in tableColumn"
|
||||
:key="item.id"
|
||||
:value="item.columnName"
|
||||
:label="`${item.columnName}:${item.columnComment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="关联表主键 " prop="gen.subTableFr">
|
||||
<el-select class="w-80" v-model="formData.gen.subTableFr" clearable>
|
||||
<el-option
|
||||
v-for="item in formData.column"
|
||||
:key="item.id"
|
||||
:value="item.columnName"
|
||||
:label="`${item.columnName}:${item.columnComment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<footer-btns>
|
||||
<el-button type="primary" @click="onSubmit">保存</el-button>
|
||||
<el-button type="primary" @click="handleSave">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup name="tableEdit">
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import { cloneDeep } from 'lodash'
|
||||
|
||||
import { menuAll } from '@/api/perms/menu'
|
||||
import { dataTableAll, generateEdit, tableDetail, dataTableToColumn } from '@/api/tools/code'
|
||||
import { dictTypeAll } from '@/api/setting/dict'
|
||||
import { generateEdit, tableDetail } from '@/api/tools/code'
|
||||
import { useDictOptions } from '@/hooks/useDictOptions'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import feedback from '@/utils/feedback'
|
||||
import { menuLists } from '@/api/perms/menu'
|
||||
import { useDictOptions } from '@/hooks/useDictOptions'
|
||||
import useMultipleTabs from '@/hooks/useMultipleTabs'
|
||||
enum GenTpl {
|
||||
CRUD = 'crud',
|
||||
TREE = 'tree'
|
||||
}
|
||||
|
||||
import RelationsAdd from '../components/relations-add.vue'
|
||||
enum GenType {
|
||||
ZIP,
|
||||
CUSTOM_PATH
|
||||
}
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const { removeTab } = useMultipleTabs()
|
||||
const activeName = ref('column')
|
||||
const showEdit = ref(false)
|
||||
const relationTypes = [
|
||||
{
|
||||
name: '一对一',
|
||||
value: 'has_one'
|
||||
},
|
||||
{
|
||||
name: '一对多',
|
||||
value: 'has_many'
|
||||
}
|
||||
]
|
||||
const formData = reactive({
|
||||
id: '',
|
||||
table_name: '',
|
||||
table_comment: '',
|
||||
author: '',
|
||||
remark: '',
|
||||
template_type: 0,
|
||||
generate_type: 0,
|
||||
module_name: '',
|
||||
class_dir: '',
|
||||
class_comment: '',
|
||||
table_column: [] as any[],
|
||||
menu: {
|
||||
pid: 0,
|
||||
name: '',
|
||||
type: 0
|
||||
base: {
|
||||
id: '',
|
||||
tableName: '',
|
||||
tableComment: '',
|
||||
entityName: '',
|
||||
authorName: '',
|
||||
remarks: ''
|
||||
},
|
||||
tree: {
|
||||
tree_id: 0,
|
||||
tree_pid: 0,
|
||||
tree_name: 0
|
||||
},
|
||||
delete: {
|
||||
name: '',
|
||||
type: 0
|
||||
},
|
||||
relations: [] as any[]
|
||||
})
|
||||
let editIndex = 0
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const editRef = shallowRef<InstanceType<typeof RelationsAdd>>()
|
||||
const rules = reactive({
|
||||
table_name: [{ required: true, message: '请输入表名称' }],
|
||||
table_comment: [{ required: true, message: '请输入表描述' }],
|
||||
module_name: [{ required: true, message: '请输入模块名' }],
|
||||
generate_type: [{ required: true, trigger: 'change' }],
|
||||
template_type: [{ required: true, trigger: 'change' }],
|
||||
['menu.pid']: [{ required: true, message: '请选择父级菜单' }],
|
||||
['menu.name']: [{ required: true, message: '请输入菜单名称' }],
|
||||
['delete.type']: [{ required: true, trigger: 'change' }],
|
||||
['delete.name']: [{ required: true, message: '请选择删除字段' }]
|
||||
})
|
||||
|
||||
const showEditPopup = async (type: string, data?: any, index?: number) => {
|
||||
showEdit.value = true
|
||||
await nextTick()
|
||||
if (data && index !== undefined) {
|
||||
editRef.value?.setFormData(data)
|
||||
editIndex = index
|
||||
column: [] as any[],
|
||||
gen: {
|
||||
functionName: '',
|
||||
genPath: '',
|
||||
genTpl: '',
|
||||
genType: 0,
|
||||
moduleName: '',
|
||||
subTableFk: '',
|
||||
subTableName: '',
|
||||
subTableFr: '',
|
||||
treeParent: '',
|
||||
treePrimary: '',
|
||||
treeName: '',
|
||||
menuName: '',
|
||||
menuStatus: 0,
|
||||
menuPid: 0
|
||||
}
|
||||
editRef.value?.open(type)
|
||||
}
|
||||
})
|
||||
|
||||
const handleAdd = (data: any) => {
|
||||
const newData = cloneDeep(toRaw(data))
|
||||
formData.relations.push(newData)
|
||||
}
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const rules = reactive({
|
||||
['base.tableName']: [{ required: true, message: '请输入表名称', trigger: 'blur' }],
|
||||
['base.tableComment']: [{ required: true, message: '请输入表描述', trigger: 'blur' }],
|
||||
['base.entityName']: [{ required: true, message: '请输入实体类名称', trigger: 'blur' }],
|
||||
['base.authorName']: [{ required: true, message: '请输入作者', trigger: 'blur' }],
|
||||
['gen.moduleName']: [{ required: true, message: '请输入模块名', trigger: 'blur' }],
|
||||
['gen.functionName']: [{ required: true, message: '请输入功能名称', trigger: 'blur' }],
|
||||
['gen.treePrimary']: [{ required: true, message: '请选择树主键字段', trigger: 'blur' }],
|
||||
['gen.treeParent']: [{ required: true, message: '请选择树父级字段', trigger: 'blur' }],
|
||||
['gen.treeName']: [{ required: true, message: '请选择树名称字段', trigger: 'blur' }]
|
||||
})
|
||||
|
||||
const handleEdit = async (data: any) => {
|
||||
const newData = cloneDeep(toRaw(data))
|
||||
console.log(editIndex)
|
||||
formData.relations.splice(editIndex, 1, newData)
|
||||
}
|
||||
|
||||
const handelDelete = (index: number) => {
|
||||
formData.relations.splice(index, 1)
|
||||
}
|
||||
const getDetails = async () => {
|
||||
const data = await tableDetail({
|
||||
id: route.query.id
|
||||
})
|
||||
|
||||
Object.keys(formData).forEach((key) => {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
})
|
||||
|
||||
watch(
|
||||
() => formData.generate_type,
|
||||
(value) => {
|
||||
if (value == 1) {
|
||||
feedback
|
||||
.confirm('生成到模块方式如遇同名文件会覆盖旧文件,确定要选择此方式吗?')
|
||||
.catch(() => {
|
||||
formData.generate_type = 0
|
||||
})
|
||||
}
|
||||
}
|
||||
)
|
||||
getTableColumn()
|
||||
}
|
||||
|
||||
const { optionsData } = useDictOptions<{
|
||||
dict_type: any[]
|
||||
dictType: any[]
|
||||
menu: any[]
|
||||
dataTable: any[]
|
||||
}>({
|
||||
dict_type: {
|
||||
dictType: {
|
||||
api: dictTypeAll
|
||||
},
|
||||
menu: {
|
||||
api: menuAll,
|
||||
transformData(data) {
|
||||
const menu = { id: 0, name: '顶级', children: [] }
|
||||
api: menuLists,
|
||||
transformData(data: any) {
|
||||
const menu = { id: 0, menuName: '顶级', children: [] }
|
||||
menu.children = data
|
||||
return [menu]
|
||||
}
|
||||
},
|
||||
dataTable: {
|
||||
api: dataTableAll
|
||||
}
|
||||
})
|
||||
|
||||
const onSubmit = async () => {
|
||||
const columnLoading = ref(false)
|
||||
const tableColumn = ref<any[]>([])
|
||||
const getTableColumn = async () => {
|
||||
columnLoading.value = true
|
||||
const res = await dataTableToColumn({ tableName: formData.gen.subTableName })
|
||||
columnLoading.value = false
|
||||
tableColumn.value = res
|
||||
}
|
||||
|
||||
const handleTableChange = () => {
|
||||
formData.gen.subTableFk = ''
|
||||
getTableColumn()
|
||||
}
|
||||
const handleSave = async () => {
|
||||
try {
|
||||
await formRef.value?.validate()
|
||||
await generateEdit(formData)
|
||||
const { base, column, gen } = formData
|
||||
await generateEdit({ ...base, ...gen, column })
|
||||
feedback.msgSuccess('操作成功')
|
||||
removeTab()
|
||||
router.back()
|
||||
} catch (error: any) {
|
||||
for (const err in error) {
|
||||
|
|
|
|||
|
|
@ -5,7 +5,7 @@
|
|||
<el-form-item label="表名称">
|
||||
<el-input
|
||||
class="w-[280px]"
|
||||
v-model="formData.table_name"
|
||||
v-model="formData.tableName"
|
||||
clearable
|
||||
@keyup.enter="resetPage"
|
||||
/>
|
||||
|
|
@ -13,7 +13,7 @@
|
|||
<el-form-item label="表描述">
|
||||
<el-input
|
||||
class="w-[280px]"
|
||||
v-model="formData.table_comment"
|
||||
v-model="formData.tableComment"
|
||||
clearable
|
||||
@keyup.enter="resetPage"
|
||||
/>
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
<el-card class="!border-none mt-4" shadow="never" v-loading="pager.loading">
|
||||
<div class="flex">
|
||||
<data-table
|
||||
v-perms="['tools.generator/selectTable']"
|
||||
v-perms="['gen:importTable']"
|
||||
class="inline-block mr-[10px]"
|
||||
@success="getLists"
|
||||
>
|
||||
|
|
@ -39,9 +39,9 @@
|
|||
</el-button>
|
||||
</data-table>
|
||||
<el-button
|
||||
v-perms="['tools.generator/delete']"
|
||||
v-perms="['gen:delTable']"
|
||||
:disabled="!selectData.length"
|
||||
@click="handleDelete(selectData)"
|
||||
@click="handleDelete()"
|
||||
type="danger"
|
||||
>
|
||||
<template #icon>
|
||||
|
|
@ -50,7 +50,7 @@
|
|||
删除
|
||||
</el-button>
|
||||
<el-button
|
||||
v-perms="['tools.generator/generate']"
|
||||
v-perms="['gen:genCode', 'gen:downloadCode']"
|
||||
:disabled="!selectData.length"
|
||||
@click="handleGenerate(selectData)"
|
||||
>
|
||||
|
|
@ -64,15 +64,15 @@
|
|||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="表名称" prop="table_name" min-width="180" />
|
||||
<el-table-column label="表描述" prop="table_comment" min-width="180" />
|
||||
<el-table-column label="创建时间" prop="create_time" min-width="180" />
|
||||
<el-table-column label="更新时间" prop="update_time" min-width="180" />
|
||||
<el-table-column label="表名称" prop="tableName" min-width="180" />
|
||||
<el-table-column label="表描述" prop="tableComment" min-width="180" />
|
||||
<el-table-column label="创建时间" prop="createTime" min-width="180" />
|
||||
<el-table-column label="更新时间" prop="updateTime" min-width="180" />
|
||||
<el-table-column label="操作" width="160" fixed="right">
|
||||
<template #default="{ row }">
|
||||
<div class="flex items-center">
|
||||
<el-button
|
||||
v-perms="['tools.generator/preview']"
|
||||
v-perms="['gen:previewCode']"
|
||||
type="primary"
|
||||
link
|
||||
@click="handlePreview(row.id)"
|
||||
|
|
@ -80,9 +80,8 @@
|
|||
预览
|
||||
</el-button>
|
||||
|
||||
<el-button type="primary" link>
|
||||
<el-button type="primary" link v-perms="['tools.generator/edit']">
|
||||
<router-link
|
||||
v-perms="['tools.generator/edit']"
|
||||
:to="{
|
||||
path: getRoutePath('tools.generator/edit'),
|
||||
query: {
|
||||
|
|
@ -97,9 +96,10 @@
|
|||
class="ml-2"
|
||||
@command="handleCommand($event, row)"
|
||||
v-perms="[
|
||||
'tools.generator/generate',
|
||||
'tools.generator/syncColumn',
|
||||
'tools.generator/delete'
|
||||
'gen:genCode',
|
||||
'gen:downloadCode',
|
||||
'gen:syncTable',
|
||||
'gen:delTable'
|
||||
]"
|
||||
>
|
||||
<el-button type="primary" link>
|
||||
|
|
@ -109,21 +109,21 @@
|
|||
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<div v-perms="['tools.generator/generate']">
|
||||
<div v-perms="['gen:genCode', 'gen:downloadCode']">
|
||||
<el-dropdown-item command="generate">
|
||||
<el-button type="primary" link>
|
||||
生成代码
|
||||
</el-button>
|
||||
</el-dropdown-item>
|
||||
</div>
|
||||
<div v-perms="['tools.generator/syncColumn']">
|
||||
<div v-perms="['gen:syncTable']">
|
||||
<el-dropdown-item command="sync">
|
||||
<el-button type="primary" link>
|
||||
同步
|
||||
</el-button>
|
||||
</el-dropdown-item>
|
||||
</div>
|
||||
<div v-perms="['tools.generator/delete']">
|
||||
<div v-perms="['gen:delTable']">
|
||||
<el-dropdown-item command="delete">
|
||||
<el-button type="danger" link> 删除 </el-button>
|
||||
</el-dropdown-item>
|
||||
|
|
@ -150,29 +150,29 @@
|
|||
|
||||
<script lang="ts" setup name="codeGenerate">
|
||||
import {
|
||||
generateCode,
|
||||
generateTable,
|
||||
syncColumn,
|
||||
generateDelete,
|
||||
generatePreview,
|
||||
generateTable,
|
||||
syncColumn
|
||||
generateCode,
|
||||
downloadCode
|
||||
} from '@/api/tools/code'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { getRoutePath } from '@/router'
|
||||
import { isProdMode } from '@/utils/env'
|
||||
import feedback from '@/utils/feedback'
|
||||
|
||||
import CodePreview from '../components/code-preview.vue'
|
||||
import DataTable from '../components/data-table.vue'
|
||||
import CodePreview from '../components/code-preview.vue'
|
||||
import feedback from '@/utils/feedback'
|
||||
import { streamFileDownload } from '@/utils/file'
|
||||
import { getRoutePath } from '@/router'
|
||||
|
||||
const formData = reactive({
|
||||
table_name: '',
|
||||
table_comment: ''
|
||||
tableName: '',
|
||||
tableComment: ''
|
||||
})
|
||||
|
||||
const previewState = reactive({
|
||||
show: false,
|
||||
loading: false,
|
||||
code: []
|
||||
code: {}
|
||||
})
|
||||
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
|
|
@ -182,17 +182,20 @@ const { pager, getLists, resetParams, resetPage } = usePaging({
|
|||
|
||||
const selectData = ref<any[]>([])
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ id }) => id)
|
||||
selectData.value = val
|
||||
}
|
||||
|
||||
const handleSync = async (id: number) => {
|
||||
await feedback.confirm('确定要同步表结构?')
|
||||
await syncColumn({ id })
|
||||
feedback.msgSuccess('操作成功')
|
||||
}
|
||||
|
||||
const handleDelete = async (id: number | any[]) => {
|
||||
const handleDelete = async (ids?: number[]) => {
|
||||
if (!ids) ids = selectData.value.map(({ id }) => id)
|
||||
await feedback.confirm('确定要删除?')
|
||||
await generateDelete({ id })
|
||||
await generateDelete({ ids })
|
||||
feedback.msgSuccess('删除成功')
|
||||
getLists()
|
||||
}
|
||||
|
||||
|
|
@ -202,32 +205,42 @@ const handlePreview = async (id: number) => {
|
|||
previewState.show = true
|
||||
}
|
||||
|
||||
const hasGenerateTypeInModule = (data: any[]) => {
|
||||
return data.some((item) => item.generate_type == 1)
|
||||
const handleGenerate = async (selectData: any[]) => {
|
||||
const downloadTables = getTables(selectData, 0)
|
||||
const genTables = getTables(selectData, 1)
|
||||
if (downloadTables) {
|
||||
const file = await downloadCode({ tables: downloadTables })
|
||||
streamFileDownload(file, 'likeadmin-curd.zip')
|
||||
}
|
||||
if (genTables) {
|
||||
await generateCode({ tables: genTables })
|
||||
feedback.msgSuccess('生成成功')
|
||||
}
|
||||
}
|
||||
|
||||
const handleGenerate = async (selectData: any[]) => {
|
||||
if (isProdMode() && hasGenerateTypeInModule(selectData)) {
|
||||
return feedback.msgError('生成方式为生成到模块,请在前端开发模式下使用,详细参考文档')
|
||||
}
|
||||
const data: any = await generateCode({ id: selectData })
|
||||
if (data.file) {
|
||||
window.open(data.file, '_blank')
|
||||
}
|
||||
const getTables = (selectData: any[], type: 0 | 1) => {
|
||||
return selectData
|
||||
.filter(({ genType }) => genType == type)
|
||||
.map(({ tableName }) => tableName)
|
||||
.join()
|
||||
}
|
||||
|
||||
const handleCommand = (command: any, row: any) => {
|
||||
switch (command) {
|
||||
case 'generate':
|
||||
handleGenerate([row.id])
|
||||
handleGenerate([row])
|
||||
break
|
||||
case 'sync':
|
||||
handleSync(row.id)
|
||||
break
|
||||
case 'delete':
|
||||
handleDelete(row.id)
|
||||
handleDelete([row.id])
|
||||
}
|
||||
}
|
||||
|
||||
onActivated(() => {
|
||||
getLists()
|
||||
})
|
||||
|
||||
getLists()
|
||||
</script>
|
||||
|
|
|
|||
|
|
@ -3,17 +3,17 @@
|
|||
<el-dialog v-model="show" width="900px" title="代码预览">
|
||||
<el-tabs v-model="activeTab">
|
||||
<el-tab-pane
|
||||
v-for="(item, index) in code"
|
||||
:label="item.name"
|
||||
v-for="(item, key, index) in code"
|
||||
:label="key"
|
||||
:name="`index${index}`"
|
||||
:key="index"
|
||||
:key="key"
|
||||
>
|
||||
<div class="flex" style="height: 50vh">
|
||||
<el-scrollbar class="flex-1">
|
||||
<highlightjs autodetect :code="item.content" />
|
||||
<highlightjs autodetect :code="item" />
|
||||
</el-scrollbar>
|
||||
<div>
|
||||
<el-button @click="handleCopy(item.content)" type="primary" link>
|
||||
<el-button @click="handleCopy(item)" type="primary" link>
|
||||
<template #icon>
|
||||
<icon name="el-icon-CopyDocument" />
|
||||
</template>
|
||||
|
|
@ -28,13 +28,12 @@
|
|||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import useClipboard from 'vue-clipboard3'
|
||||
|
||||
import feedback from '@/utils/feedback'
|
||||
import useClipboard from 'vue-clipboard3'
|
||||
|
||||
const props = defineProps<{
|
||||
modelValue: boolean
|
||||
code: any[]
|
||||
code: Record<string, string>
|
||||
}>()
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
<el-form-item label="表名称">
|
||||
<el-input
|
||||
class="w-[280px]"
|
||||
v-model="formData.name"
|
||||
v-model="formData.tableName"
|
||||
clearable
|
||||
@keyup.enter="resetPage"
|
||||
/>
|
||||
|
|
@ -23,7 +23,7 @@
|
|||
<el-form-item label="表描述">
|
||||
<el-input
|
||||
class="w-[280px]"
|
||||
v-model="formData.comment"
|
||||
v-model="formData.tableComment"
|
||||
clearable
|
||||
@keyup.enter="resetPage"
|
||||
/>
|
||||
|
|
@ -41,9 +41,9 @@
|
|||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" />
|
||||
<el-table-column label="表名称" prop="name" min-width="150" />
|
||||
<el-table-column label="表描述" prop="comment" min-width="160" />
|
||||
<el-table-column label="创建时间" prop="create_time" min-width="180" />
|
||||
<el-table-column label="表名称" prop="tableName" min-width="150" />
|
||||
<el-table-column label="表描述" prop="tableComment" min-width="160" />
|
||||
<el-table-column label="创建时间" prop="createTime" min-width="180" />
|
||||
</el-table>
|
||||
</div>
|
||||
<div class="flex justify-end mt-4">
|
||||
|
|
@ -54,10 +54,10 @@
|
|||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { dataTable, selectTable } from '@/api/tools/code'
|
||||
import Pagination from '@/components/pagination/index.vue'
|
||||
import Popup from '@/components/popup/index.vue'
|
||||
import Pagination from '@/components/pagination/index.vue'
|
||||
import { usePaging } from '@/hooks/usePaging'
|
||||
import { dataTable, selectTable } from '@/api/tools/code'
|
||||
import feedback from '@/utils/feedback'
|
||||
|
||||
const emit = defineEmits<{
|
||||
|
|
@ -67,8 +67,8 @@ const emit = defineEmits<{
|
|||
const popupRef = shallowRef<InstanceType<typeof Popup>>()
|
||||
|
||||
const formData = reactive({
|
||||
name: '', // 表名称
|
||||
comment: '' // 表描述
|
||||
tableName: '', // 表名称
|
||||
tableComment: '' // 表描述
|
||||
})
|
||||
|
||||
const { pager, getLists, resetParams, resetPage } = usePaging({
|
||||
|
|
@ -80,17 +80,15 @@ const { pager, getLists, resetParams, resetPage } = usePaging({
|
|||
const selectData = ref<any[]>([])
|
||||
|
||||
const handleSelectionChange = (val: any[]) => {
|
||||
selectData.value = val.map(({ name, comment }) => ({
|
||||
name,
|
||||
comment
|
||||
}))
|
||||
selectData.value = val.map(({ tableName }) => tableName)
|
||||
}
|
||||
|
||||
const handleConfirm = async () => {
|
||||
if (!selectData.value.length) return feedback.msgError('请选择数据表')
|
||||
await selectTable({
|
||||
table: selectData.value
|
||||
tables: selectData.value.join()
|
||||
})
|
||||
feedback.msgSuccess('导入成功')
|
||||
popupRef.value?.close()
|
||||
emit('success')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/gen")
|
||||
@RequestMapping("/adminapi/gen")
|
||||
public class GenController {
|
||||
|
||||
@Resource
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.mdd.generator.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
|
@ -9,8 +10,11 @@ public class DbColumnVo implements Serializable {
|
|||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@JsonProperty("columnName")
|
||||
private String columnName; // 字段名称
|
||||
@JsonProperty("columnComment")
|
||||
private String columnComment; // 字段描述
|
||||
@JsonProperty("columnType")
|
||||
private String columnType; // 字段类型
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.mdd.generator.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
|
@ -12,10 +13,15 @@ public class DbTableVo implements Serializable {
|
|||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@JsonProperty("tableName")
|
||||
private String tableName; // 表的名称
|
||||
@JsonProperty("tableComment")
|
||||
private String tableComment; // 表的描述
|
||||
@JsonProperty("authorName")
|
||||
private String authorName; // 作者名称
|
||||
@JsonProperty("createTime")
|
||||
private String createTime; // 创建时间
|
||||
@JsonProperty("updateTime")
|
||||
private String updateTime; // 更新时间
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.mdd.generator.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
|
@ -13,21 +14,37 @@ public class GenColumnVo implements Serializable {
|
|||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Integer id; // 字段主键
|
||||
@JsonProperty("columnName")
|
||||
private String columnName; // 字段名称
|
||||
@JsonProperty("columnComment")
|
||||
private String columnComment; // 字段描述
|
||||
@JsonProperty("columnLength")
|
||||
private Integer columnLength; // 字段长度
|
||||
@JsonProperty("columnType")
|
||||
private String columnType; // 字段类型
|
||||
@JsonProperty("javaType")
|
||||
private String javaType; // JAVA类型
|
||||
@JsonProperty("javaField")
|
||||
private String javaField; // JAVA字段
|
||||
@JsonProperty("isRequired")
|
||||
private Integer isRequired; // 是否必填
|
||||
@JsonProperty("isInsert")
|
||||
private Integer isInsert; // 是否插入字段
|
||||
@JsonProperty("isEdit")
|
||||
private Integer isEdit; // 是否编辑字段
|
||||
@JsonProperty("isList")
|
||||
private Integer isList; // 是否列表字段
|
||||
@JsonProperty("isQuery")
|
||||
private Integer isQuery; // 是否查询字段
|
||||
@JsonProperty("queryType")
|
||||
private String queryType; // 查询方式: [等于、不等于、大于、小于、范围]
|
||||
@JsonProperty("htmlType")
|
||||
private String htmlType; // 显示类型: [文本框、文本域、下拉框、复选框、单选框、日期控件]
|
||||
@JsonProperty("dictType")
|
||||
private String dictType; // 字典类型
|
||||
@JsonProperty("createTime")
|
||||
private String createTime; // 创建时间
|
||||
@JsonProperty("updateTime")
|
||||
private String updateTime; // 更新时间
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.mdd.generator.vo;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
|
@ -13,10 +14,15 @@ public class GenTableVo implements Serializable {
|
|||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private Integer id; // 生成主键
|
||||
@JsonProperty("genType")
|
||||
private Integer genType; // 生成类型: [0=zip压缩包, 1=自定义路径]
|
||||
@JsonProperty("tableName")
|
||||
private String tableName; // 表的名称
|
||||
@JsonProperty("tableComment")
|
||||
private String tableComment; // 表的描述
|
||||
@JsonProperty("createTime")
|
||||
private String createTime; // 创建时间
|
||||
@JsonProperty("updateTime")
|
||||
private String updateTime; // 删除时间
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -725,9 +725,7 @@ INSERT INTO `la_system_menu` (`id`, `pid`, `type`, `name`, `icon`, `sort`, `perm
|
|||
(173, 175, 'C', '系统风格', 'el-icon-Brush', 80, '', 'style', 'decoration/style/style', '', '', 0, 1, 0, 1681635044, 1710929278),
|
||||
(174, 96, 'C', '素材中心', 'local-icon-shangchuanzhaopian', 0, 'file/listCate', 'material', 'material/index', '', '', 0, 1, 0, 1710734367, 1710734392),
|
||||
(175, 96, 'M', '移动端', '', 100, '', 'mobile', '', '', '', 0, 1, 0, 1710901543, 1710929294),
|
||||
(176, 96, 'M', 'PC端', '', 90, '', 'pc', '', '', '', 0, 1, 0, 1710901592, 1710929299),
|
||||
(177, 29, 'C', '站点统计', '', 0, 'setting.web.web_setting/getSiteStatistics', 'statistics', 'setting/website/statistics', '', '', 0, 1, 0, 1726841481, 1726843434),
|
||||
(178, 177, 'A', '保存', '', 0, 'setting.web.web_setting/saveSiteStatistics', '', '', '', '', 1, 1, 0, 1726841507, 1726841507);
|
||||
(176, 96, 'M', 'PC端', '', 90, '', 'pc', '', '', '', 0, 1, 0, 1710901592, 1710929299);
|
||||
|
||||
DROP TABLE IF EXISTS `la_system_role`;
|
||||
CREATE TABLE `la_system_role` (
|
||||
|
|
|
|||
Loading…
Reference in New Issue