feature:代码生成器可拖拽行,修复pgsql从库创建代码的bug,增加默认值属性。

This commit is contained in:
pixelmaxQM
2024-04-22 22:04:29 +08:00
parent 56f4d223ab
commit 3b33fe83e6
7 changed files with 293 additions and 271 deletions

View File

@@ -306,185 +306,197 @@
@click="editAndAddField()"
>新增字段</el-button>
</div>
<el-table :data="form.fields">
<el-table-column
align="left"
type="index"
label="序列"
width="60"
/>
<div class="draggable">
<el-table
:data="form.fields"
row-key="fieldName"
>
<el-table-column
align="left"
type="index"
width="60"
>
<template #default>
<el-icon class="cursor-grab drag-column">
<MoreFilled />
</el-icon>
</template>
</el-table-column>
<el-table-column
align="left"
type="index"
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"
label="字段名称"
width="160"
>
<template #default="{row}">
<el-input v-model="row.fieldName" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="fieldDesc"
label="中文名"
width="160"
>
<template #default="{row}">
<el-input v-model="row.fieldDesc" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="require"
label="必填"
>
<template #default="{row}"> <el-checkbox v-model="row.require" /></template>
</el-table-column>
<el-table-column
align="left"
prop="sort"
label="排序"
>
<template #default="{row}"> <el-checkbox v-model="row.sort" /> </template>
</el-table-column>
<el-table-column
align="left"
prop="fieldJson"
width="160px"
label="字段Json"
>
<template #default="{row}">
<el-input v-model="row.fieldJson" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="fieldType"
label="字段类型"
width="160"
>
<template #default="{row}">
<el-select
v-model="row.fieldType"
style="width:100%"
placeholder="请选择字段类型"
clearable
>
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
</el-table-column>
<el-table-column
align="left"
prop="dataTypeLong"
label="数据库字段长度"
width="160"
>
<template #default="{row}">
<el-input v-model="row.dataTypeLong" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="columnName"
label="数据库字段"
width="160"
>
<template #default="{row}">
<el-input v-model="row.columnName" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="comment"
label="数据库字段描述"
width="160"
>
<template #default="{row}">
<el-input v-model="row.comment" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="fieldSearchType"
label="搜索条件"
width="130"
>
<template #default="{row}">
<el-select
v-model="row.fieldSearchType"
style="width:100%"
placeholder="请选择字段查询条件"
clearable
:disabled="row.fieldType!=='json'"
>
<el-option
v-for="item in typeSearchOptions"
:key="item.value"
:label="item.label"
:value="item.value"
:disabled="
(row.fieldType!=='string'&&item.value==='LIKE')||
((row.fieldType!=='int'&&row.fieldType!=='time.Time'&&row.fieldType!=='float64')&&(item.value==='BETWEEN' || item.value==='NOT BETWEEN'))
"
/>
</el-select>
</template>
<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"
label="字段名称"
width="160"
>
<template #default="{row}">
<el-input v-model="row.fieldName" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="fieldDesc"
label="中文名"
width="160"
>
<template #default="{row}">
<el-input v-model="row.fieldDesc" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="defaultValue"
label="默认值"
width="160"
>
<template #default="{row}">
<el-input v-model="row.defaultValue" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="require"
label="必填"
>
<template #default="{row}"> <el-checkbox v-model="row.require" /></template>
</el-table-column>
<el-table-column
align="left"
prop="sort"
label="排序"
>
<template #default="{row}"> <el-checkbox v-model="row.sort" /> </template>
</el-table-column>
<el-table-column
align="left"
prop="fieldJson"
width="160px"
label="字段Json"
>
<template #default="{row}">
<el-input v-model="row.fieldJson" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="fieldType"
label="字段类型"
width="160"
>
<template #default="{row}">
<el-select
v-model="row.fieldType"
style="width:100%"
placeholder="请选择字段类型"
clearable
>
<el-option
v-for="item in typeOptions"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</template>
</el-table-column>
<el-table-column
align="left"
prop="dataTypeLong"
label="数据库字段长度"
width="160"
>
<template #default="{row}">
<el-input v-model="row.dataTypeLong" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="columnName"
label="数据库字段"
width="160"
>
<template #default="{row}">
<el-input v-model="row.columnName" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="comment"
label="数据库字段描述"
width="160"
>
<template #default="{row}">
<el-input v-model="row.comment" />
</template>
</el-table-column>
<el-table-column
align="left"
prop="fieldSearchType"
label="搜索条件"
width="130"
>
<template #default="{row}">
<el-select
v-model="row.fieldSearchType"
style="width:100%"
placeholder="请选择字段查询条件"
clearable
:disabled="row.fieldType!=='json'"
>
<el-option
v-for="item in typeSearchOptions"
:key="item.value"
:label="item.label"
:value="item.value"
:disabled="
(row.fieldType!=='string'&&item.value==='LIKE')||
((row.fieldType!=='int'&&row.fieldType!=='time.Time'&&row.fieldType!=='float64')&&(item.value==='BETWEEN' || item.value==='NOT BETWEEN'))
"
/>
</el-select>
</template>
</el-table-column>
<el-table-column
align="left"
label="操作"
width="300"
fixed="right"
>
<template #default="scope">
<el-button
</el-table-column>
<el-table-column
align="left"
label="操作"
width="300"
fixed="right"
>
<template #default="scope">
<el-button
type="primary"
link
icon="edit"
@click="editAndAddField(scope.row)"
>高级编辑</el-button>
<el-button
type="primary"
link
:disabled="scope.$index === 0"
@click="moveUpField(scope.$index)"
>上移</el-button>
<el-button
type="primary"
link
:disabled="(scope.$index + 1) === form.fields.length"
@click="moveDownField(scope.$index)"
>下移</el-button>
<el-button
type="primary"
link
icon="delete"
@click="deleteField(scope.$index)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
type="primary"
link
icon="edit"
@click="editAndAddField(scope.row)"
>高级编辑</el-button>
<el-button
type="primary"
link
icon="delete"
@click="deleteField(scope.$index)"
>删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<!-- 组件列表 -->
<div class="gva-btn-list justify-end mt-4">
<el-button
@@ -503,7 +515,7 @@
size="70%"
:show-close="false"
>
<template #title>
<template #header>
<div class="flex justify-between items-center">
<span class="text-lg">组件内容</span>
<div>
@@ -532,7 +544,7 @@
:show-close="false"
>
<template #title>
<template #header>
<div class="flex justify-between items-center">
<span class="text-lg">操作栏</span>
<div>
@@ -563,10 +575,31 @@ import PreviewCodeDialog from '@/view/systemTools/autoCode/component/previewCode
import { toUpperCase, toHump, toSQLLine, toLowerCase } from '@/utils/stringFun'
import { createTemp, getDB, getTable, getColumn, preview, getMeta, getPackageApi } from '@/api/autoCode'
import { getDict } from '@/utils/dictionary'
import { ref, reactive, watch, toRaw } from 'vue'
import { ref, reactive, watch, toRaw, onMounted, nextTick } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage, ElMessageBox } from 'element-plus'
import WarningBar from '@/components/warningBar/warningBar.vue'
import Sortable from 'sortablejs'
// 行拖拽
const rowDrop = () => {
// 要拖拽元素的父容器
const tbody = document.querySelector('.draggable .el-table__body-wrapper tbody')
Sortable.create(tbody, {
// 可被拖拽的子元素
draggable: '.draggable .el-table__row',
handle: '.drag-column',
onEnd: async({ newIndex, oldIndex }) => {
await nextTick()
const currRow = form.value.fields.splice(oldIndex, 1)[0]
form.value.fields.splice(newIndex, 0, currRow)
}
})
}
onMounted(() => {
rowDrop()
})
defineOptions({
name: 'AutoCode'
@@ -666,6 +699,7 @@ const fieldTemplate = {
columnName: '',
dataTypeLong: '',
comment: '',
defaultValue: '',
require: false,
sort: false,
errorText: '',
@@ -768,23 +802,6 @@ const editAndAddField = (item) => {
dialogMiddle.value = JSON.parse(JSON.stringify(fieldTemplate))
}
}
const moveUpField = (index) => {
if (index === 0) {
return
}
const oldUpField = form.value.fields[index - 1]
form.value.fields.splice(index - 1, 1)
form.value.fields.splice(index, 0, oldUpField)
}
const moveDownField = (index) => {
const fCount = form.value.fields.length
if (index === fCount - 1) {
return
}
const oldDownField = form.value.fields[index + 1]
form.value.fields.splice(index + 1, 1)
form.value.fields.splice(index, 0, oldDownField)
}
const fieldDialogNode = ref(null)
const enterDialog = () => {