Merge branch 'flipped-aurora:main' into main

This commit is contained in:
薛定饿了不养喵
2024-03-28 01:59:21 +08:00
committed by GitHub
96 changed files with 1809 additions and 1339 deletions

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,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,