Merge branch 'flipped-aurora:main' into main
This commit is contained in:
@@ -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,6 @@
|
||||
<el-select
|
||||
v-model="dbform.businessDB"
|
||||
clearable
|
||||
style="width:194px"
|
||||
placeholder="选择业务库"
|
||||
@change="getDbFunc"
|
||||
>
|
||||
@@ -186,7 +185,6 @@
|
||||
>
|
||||
<el-select
|
||||
v-model="form.package"
|
||||
style="width:194px"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in pkgs"
|
||||
@@ -219,7 +217,6 @@
|
||||
</template>
|
||||
<el-select
|
||||
v-model="form.businessDB"
|
||||
style="width:194px"
|
||||
placeholder="选择业务库"
|
||||
>
|
||||
<el-option
|
||||
@@ -236,6 +233,22 @@
|
||||
</el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<div>
|
||||
<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
|
||||
@@ -255,11 +268,23 @@
|
||||
placement="bottom"
|
||||
effect="light"
|
||||
>
|
||||
<div> 自动创建API </div>
|
||||
<div> 自动创建API <el-icon><QuestionFilled /></el-icon> </div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-checkbox v-model="form.autoCreateApiToSql" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<template #label>
|
||||
<el-tooltip
|
||||
content="注:把自动生成的菜单注册进数据库"
|
||||
placement="bottom"
|
||||
effect="light"
|
||||
>
|
||||
<div> 自动创建菜单 <el-icon><QuestionFilled /></el-icon></div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-checkbox v-model="form.autoCreateMenuToSql" />
|
||||
</el-form-item>
|
||||
<el-form-item>
|
||||
<template #label>
|
||||
<el-tooltip
|
||||
@@ -267,11 +292,12 @@
|
||||
placement="bottom"
|
||||
effect="light"
|
||||
>
|
||||
<div> 自动移动文件 </div>
|
||||
<div> 自动移动文件 <el-icon><QuestionFilled /></el-icon></div>
|
||||
</el-tooltip>
|
||||
</template>
|
||||
<el-checkbox v-model="form.autoMoveFile" />
|
||||
</el-form-item>
|
||||
</div>
|
||||
</el-form>
|
||||
</div>
|
||||
<!-- 组件列表 -->
|
||||
@@ -289,6 +315,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"
|
||||
@@ -397,6 +434,7 @@
|
||||
style="width:100%"
|
||||
placeholder="请选择字段查询条件"
|
||||
clearable
|
||||
:disabled="row.fieldType!=='json'"
|
||||
>
|
||||
<el-option
|
||||
v-for="item in typeSearchOptions"
|
||||
@@ -440,31 +478,12 @@
|
||||
:disabled="(scope.$index + 1) === form.fields.length"
|
||||
@click="moveDownField(scope.$index)"
|
||||
>下移</el-button>
|
||||
<el-popover
|
||||
v-model="scope.row.visible"
|
||||
placement="top"
|
||||
>
|
||||
<p>确定删除吗?</p>
|
||||
<div style="text-align: right; margin-top: 8px;">
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
@click="scope.row.visible = false"
|
||||
>取消</el-button>
|
||||
<el-button
|
||||
type="primary"
|
||||
@click="deleteField(scope.$index)"
|
||||
>确定</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="delete"
|
||||
@click="scope.row.visible = true"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-popover>
|
||||
<el-button
|
||||
type="primary"
|
||||
link
|
||||
icon="delete"
|
||||
@click="deleteField(scope.$index)"
|
||||
>删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
@@ -547,12 +566,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([
|
||||
{
|
||||
@@ -598,6 +618,10 @@ const typeOptions = ref([
|
||||
{
|
||||
label: '文件(json字符串)',
|
||||
value: 'file',
|
||||
},
|
||||
{
|
||||
label: 'JSON',
|
||||
value: 'json',
|
||||
}
|
||||
])
|
||||
|
||||
@@ -644,6 +668,7 @@ const fieldTemplate = {
|
||||
require: false,
|
||||
sort: false,
|
||||
errorText: '',
|
||||
primaryKey: false,
|
||||
clearable: true,
|
||||
fieldSearchType: '',
|
||||
dictType: ''
|
||||
@@ -669,7 +694,9 @@ const form = ref({
|
||||
description: '',
|
||||
businessDB: '',
|
||||
autoCreateApiToSql: true,
|
||||
autoCreateMenuToSql: true,
|
||||
autoMoveFile: true,
|
||||
gvaModel: true,
|
||||
autoCreateResource: false,
|
||||
fields: []
|
||||
})
|
||||
@@ -699,6 +726,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])
|
||||
}
|
||||
@@ -738,9 +785,9 @@ const moveDownField = (index) => {
|
||||
form.value.fields.splice(index, 0, oldDownField)
|
||||
}
|
||||
|
||||
const currentInstance = getCurrentInstance()
|
||||
const fieldDialogNode = ref(null)
|
||||
const enterDialog = () => {
|
||||
currentInstance.refs.fieldDialogNode.fieldDialogFrom.validate(valid => {
|
||||
fieldDialogNode.value.fieldDialogFrom.validate(valid => {
|
||||
if (valid) {
|
||||
dialogMiddle.value.fieldName = toUpperCase(
|
||||
dialogMiddle.value.fieldName
|
||||
@@ -761,7 +808,13 @@ const closeDialog = () => {
|
||||
dialogFlag.value = false
|
||||
}
|
||||
const deleteField = (index) => {
|
||||
form.value.fields.splice(index, 1)
|
||||
ElMessageBox.confirm('确定要删除吗?', '提示', {
|
||||
confirmButtonText: '确定',
|
||||
cancelButtonText: '取消',
|
||||
type: 'warning'
|
||||
}).then(async() => {
|
||||
form.value.fields.splice(index, 1)
|
||||
})
|
||||
}
|
||||
const autoCodeForm = ref(null)
|
||||
const enterForm = async(isPreview) => {
|
||||
@@ -772,6 +825,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 +937,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 +956,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 +964,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,
|
||||
|
Reference in New Issue
Block a user