feature:代码生成器可拖拽行,修复pgsql从库创建代码的bug,增加默认值属性。
This commit is contained in:
@@ -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 = () => {
|
||||
|
Reference in New Issue
Block a user