自动化代码可选不使用官方global.Model结构 (#1637)

* 自动化代码可自行选择默认结构

* 调整自动化模板

* 增加自动化模板中对timer的处理
This commit is contained in:
奇淼(piexlmax
2024-01-22 17:37:03 +08:00
committed by GitHub
parent 07cde689b1
commit 379b63275a
15 changed files with 311 additions and 125 deletions

View File

@@ -128,6 +128,9 @@
/>
</el-select>
</el-form-item>
<el-form-item label="主键">
<el-checkbox v-model="middleDate.primaryKey" />
</el-form-item>
<el-form-item label="是否排序">
<el-switch v-model="middleDate.sort" />
</el-form-item>

View File

@@ -8,13 +8,13 @@
<div class="gva-search-box">
<el-collapse
v-model="activeNames"
style="margin-bottom:12px"
class="mb-3"
>
<el-collapse-item name="1">
<template #title>
<div :style="{fontSize:'16px',paddingLeft:'20px'}">
<div class="text-xl pl-4 flex items-center">
点这里从现有数据库创建代码
<el-icon class="header-icon ">
<el-icon>
<pointer />
</el-icon>
</div>
@@ -42,7 +42,7 @@
<el-select
v-model="dbform.businessDB"
clearable
style="width:194px"
class="w-56"
placeholder="选择业务库"
@change="getDbFunc"
>
@@ -67,7 +67,7 @@
<el-select
v-model="dbform.dbName"
clearable
style="width:194px"
class="w-56"
filterable
placeholder="请选择数据库"
@change="getTableFunc"
@@ -87,7 +87,7 @@
<el-select
v-model="dbform.tableName"
:disabled="!dbform.dbName"
style="width:194px"
class="w-56"
filterable
placeholder="请选择表"
>
@@ -186,7 +186,7 @@
>
<el-select
v-model="form.package"
style="width:194px"
class="w-56"
>
<el-option
v-for="item in pkgs"
@@ -219,7 +219,7 @@
</template>
<el-select
v-model="form.businessDB"
style="width:194px"
class="w-56"
placeholder="选择业务库"
>
<el-option
@@ -236,6 +236,21 @@
</el-option>
</el-select>
</el-form-item>
<el-form-item>
<template #label>
<el-tooltip
content="注会自动在结构体global.Model其中包含主键和软删除相关操作配置"
placement="bottom"
effect="light"
>
<div> 使用GVA结构 <el-icon><QuestionFilled /></el-icon> </div>
</el-tooltip>
</template>
<el-checkbox
v-model="form.gvaModel"
@change="useGva"
/>
</el-form-item>
<el-form-item>
<template #label>
<el-tooltip
@@ -289,6 +304,17 @@
label="序列"
width="60"
/>
<el-table-column
align="left"
type="index"
label="主键"
width="60"
>
<template #default="{row}">
<el-checkbox v-model="row.primaryKey" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="fieldName"
@@ -547,12 +573,13 @@ import { createTemp, getDB, getTable, getColumn, preview, getMeta, getPackageApi
import { getDict } from '@/utils/dictionary'
import { ref, getCurrentInstance, reactive, watch, toRaw } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage } from 'element-plus'
import { ElMessage, ElMessageBox } from 'element-plus'
import WarningBar from '@/components/warningBar/warningBar.vue'
defineOptions({
name: 'AutoCode'
})
const gormModelList = ['id', 'created_at', 'updated_at', 'deleted_at']
const typeOptions = ref([
{
@@ -644,6 +671,7 @@ const fieldTemplate = {
require: false,
sort: false,
errorText: '',
primaryKey: false,
clearable: true,
fieldSearchType: '',
dictType: ''
@@ -670,6 +698,7 @@ const form = ref({
businessDB: '',
autoCreateApiToSql: true,
autoMoveFile: true,
gvaModel: true,
autoCreateResource: false,
fields: []
})
@@ -699,6 +728,26 @@ const bk = ref({})
const dialogFlag = ref(false)
const previewFlag = ref(false)
const useGva = (e) => {
if (e && form.value.fields.length) {
ElMessageBox.confirm(
'如果您开启GVA默认结构会自动添加ID,CreatedAt,UpdatedAt,DeletedAt字段此行为将自动清除您目前在下方创建的重名字段是否继续',
'注意',
{
confirmButtonText: '继续',
cancelButtonText: '取消',
type: 'warning',
}
)
.then(() => {
form.value.fields = form.value.fields.filter(item => !gormModelList.some(gormfd => gormfd === item.columnName))
})
.catch(() => {
form.value.gvaModel = false
})
}
}
const toLowerCaseFunc = (form, key) => {
form[key] = toLowerCase(form[key])
}
@@ -772,6 +821,15 @@ const enterForm = async(isPreview) => {
})
return false
}
if (!form.value.gvaModel && form.value.fields.every(item => !item.primaryKey)) {
ElMessage({
type: 'error',
message: '您至少需要创建一个主键才能保证自动化代码的可行性'
})
return false
}
if (
form.value.fields.some(item => item.fieldName === form.value.structName)
) {
@@ -875,7 +933,6 @@ const getTableFunc = async() => {
}
const getColumnFunc = async() => {
const gormModelList = ['id', 'created_at', 'updated_at', 'deleted_at']
const res = await getColumn(dbform.value)
if (res.code === 0) {
let dbtype = ''
@@ -895,7 +952,7 @@ const getColumnFunc = async() => {
form.value.fields = []
res.data.columns &&
res.data.columns.forEach(item => {
if (!gormModelList.some(gormfd => gormfd === item.columnName)) {
if (!form.value.gvaModel || (!gormModelList.some(gormfd => gormfd === item.columnName))) {
const fbHump = toHump(item.columnName)
form.value.fields.push({
fieldName: toUpperCase(fbHump),
@@ -903,6 +960,7 @@ const getColumnFunc = async() => {
fieldType: fdMap.value[item.dataType],
dataType: item.dataType,
fieldJson: fbHump,
primaryKey: item.primaryKey,
dataTypeLong: item.dataTypeLong && item.dataTypeLong.split(',')[0],
columnName: dbtype === 'oracle' ? item.columnName.toUpperCase() : item.columnName,
comment: item.columnComment,