mirror of
https://gitee.com/likeadmin/likeadmin_java.git
synced 2026-05-09 00:39:36 +08:00
新版底层提交
This commit is contained in:
361
admin/src/views/dev_tools/code/edit.vue
Normal file
361
admin/src/views/dev_tools/code/edit.vue
Normal file
@@ -0,0 +1,361 @@
|
||||
<template>
|
||||
<div class="code-edit">
|
||||
<el-card class="!border-none" shadow="never">
|
||||
<el-page-header content="编辑数据表" @back="$router.back()" />
|
||||
</el-card>
|
||||
<el-card class="mt-4 !border-none" shadow="never">
|
||||
<el-form
|
||||
ref="formRef"
|
||||
class="ls-form"
|
||||
:model="formData"
|
||||
label-width="100px"
|
||||
:rules="rules"
|
||||
>
|
||||
<el-tabs v-model="activeName">
|
||||
<el-tab-pane label="基础信息" name="base">
|
||||
<el-form-item label="表名称" prop="tableName">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.base.tableName"
|
||||
placeholder="请输入表名称"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="表描述" prop="tableComment">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.base.tableComment"
|
||||
placeholder="请输入表描述"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="实体类名称" prop="entityName">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.base.entityName"
|
||||
placeholder="请输入实体类名称"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
|
||||
<el-form-item label="作者">
|
||||
<div class="w-80">
|
||||
<el-input v-model="formData.base.authorName" />
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="备注">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.base.remarks"
|
||||
class="el-input"
|
||||
type="textarea"
|
||||
:rows="4"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="字段管理" name="column">
|
||||
<el-table :data="formData.column">
|
||||
<el-table-column label="字段列名" prop="columnName" />
|
||||
<el-table-column label="字段描述" prop="columnComment" min-width="120">
|
||||
<template v-slot="{ row }">
|
||||
<el-input v-model="row.columnComment"></el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="物理类型" prop="columnType" min-width="100" />
|
||||
<el-table-column label="Java类型" min-width="100">
|
||||
<template v-slot="{ row }">
|
||||
<el-select v-model="row.javaType">
|
||||
<el-option label="Long" value="Long" />
|
||||
<el-option label="String" value="String" />
|
||||
<el-option label="Integer" value="Integer" />
|
||||
<el-option label="Double" value="Double" />
|
||||
<el-option label="BigDecimal" value="BigDecimal" />
|
||||
<el-option label="Date" value="Date" />
|
||||
<el-option label="Boolean" value="Boolean" />
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="Java属性" min-width="100">
|
||||
<template v-slot="{ row }">
|
||||
<el-input v-model="row.javaField" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="必填" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.isRequired"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
></el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="插入" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.isInsert"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
></el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="编辑" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.isEdit"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
></el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="列表" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.isList"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
></el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="查询" width="80">
|
||||
<template v-slot="{ row }">
|
||||
<el-checkbox
|
||||
v-model="row.isQuery"
|
||||
:true-label="1"
|
||||
:false-label="0"
|
||||
></el-checkbox>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="查询方式">
|
||||
<template v-slot="{ row }">
|
||||
<el-select v-model="row.queryType">
|
||||
<el-option label="=" value="EQ" />
|
||||
<el-option label="!=" value="NE" />
|
||||
<el-option label=">" value="GT" />
|
||||
<el-option label=">=" value="GTE" />
|
||||
<el-option label="<" value="LT" />
|
||||
<el-option label="<=" value="LTE" />
|
||||
<el-option label="LIKE" value="LIKE" />
|
||||
<el-option label="BETWEEN" value="BETWEEN" />
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="显示类型" min-width="120">
|
||||
<template v-slot="{ row }">
|
||||
<el-select v-model="row.htmlType">
|
||||
<el-option label="文本框" value="input" />
|
||||
<el-option label="文本域" value="textarea" />
|
||||
<el-option label="下拉框" value="select" />
|
||||
<el-option label="单选框" value="radio" />
|
||||
<el-option label="复选框" value="checkbox" />
|
||||
<el-option label="日期控件" value="datetime" />
|
||||
<el-option label="图片选择控件" value="imageUpload" />
|
||||
<el-option label="富文本控件" value="editor" />
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="字典类型" min-width="120">
|
||||
<template v-slot="{ row }">
|
||||
<el-select
|
||||
v-model="row.dictType"
|
||||
clearable
|
||||
:disabled="
|
||||
!(
|
||||
row.htmlType == 'select' ||
|
||||
row.htmlType == 'radio' ||
|
||||
row.htmlType == 'checkbox'
|
||||
)
|
||||
"
|
||||
placeholder="字典类型"
|
||||
>
|
||||
<el-option
|
||||
v-for="(item, index) in optionsData.dictType"
|
||||
:key="index"
|
||||
:label="item.dictName"
|
||||
:value="item.dictType"
|
||||
:disabled="!item.dictStatus"
|
||||
/>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="生成配置" name="config">
|
||||
<el-form-item label="模板类型" prop="template_type">
|
||||
<el-radio-group v-model="formData.gen.genTpl">
|
||||
<el-radio :label="GenTpl.CURD">单表(增删改查)</el-radio>
|
||||
<el-radio :label="GenTpl.TREE">树表(增删改查)</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="生成方式" prop="generate_type">
|
||||
<el-radio-group v-model="formData.gen.genType">
|
||||
<el-radio :label="GenType.ZIP">压缩包下载</el-radio>
|
||||
<el-radio :label="GenType.CUSTOM_PATH">自定义路径</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
<el-form-item label="模块名" prop="moduleName">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.gen.moduleName"
|
||||
placeholder="请输入模块名"
|
||||
/>
|
||||
<div class="form-tips">生成文件所在模块名</div>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item label="功能名称" prop="functionName">
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.gen.functionName"
|
||||
placeholder="请输入功能名称"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<el-form-item
|
||||
v-if="formData.gen.genType == GenType.CUSTOM_PATH"
|
||||
label="自定义路径"
|
||||
prop="treePrimary"
|
||||
>
|
||||
<div class="w-80">
|
||||
<el-input
|
||||
v-model="formData.gen.genPath"
|
||||
placeholder="请输入自定义路径"
|
||||
/>
|
||||
</div>
|
||||
</el-form-item>
|
||||
<template v-if="formData.gen.genTpl == GenTpl.TREE">
|
||||
<el-form-item label="树主键字段" prop="treePrimary">
|
||||
<el-select
|
||||
class="w-80"
|
||||
v-model="formData.gen.treePrimary"
|
||||
clearable
|
||||
>
|
||||
<el-option
|
||||
v-for="item in formData.column"
|
||||
:key="item.id"
|
||||
:value="item.columnName"
|
||||
:label="`${item.columnName}:${item.columnComment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="树父级字段" prop="treeParent">
|
||||
<el-select class="w-80" v-model="formData.gen.treeParent" clearable>
|
||||
<el-option
|
||||
v-for="item in formData.column"
|
||||
:key="item.id"
|
||||
:value="item.columnName"
|
||||
:label="`${item.columnName}:${item.columnComment}`"
|
||||
/>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</template>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-form>
|
||||
</el-card>
|
||||
<footer-btns>
|
||||
<el-button type="primary" @click="handleSave">保存</el-button>
|
||||
</footer-btns>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { generateEdit, tableDetail } from '@/api/tools/code'
|
||||
import { dictTypeAll } from '@/api/setting/dict'
|
||||
import type { FormInstance } from 'element-plus'
|
||||
import feedback from '@/utils/feedback'
|
||||
import { menuLists } from '@/api/perms/menu'
|
||||
import { useDictOptions } from '@/hooks/useDictOptions'
|
||||
|
||||
enum GenTpl {
|
||||
CURD = 'curd',
|
||||
TREE = 'tree'
|
||||
}
|
||||
|
||||
enum GenType {
|
||||
ZIP,
|
||||
CUSTOM_PATH
|
||||
}
|
||||
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
const activeName = ref('column')
|
||||
const formData = reactive({
|
||||
base: {
|
||||
id: '',
|
||||
tableName: '',
|
||||
tableComment: '',
|
||||
entityName: '',
|
||||
authorName: '',
|
||||
remarks: ''
|
||||
},
|
||||
column: [] as any[],
|
||||
gen: {
|
||||
functionName: '',
|
||||
genPath: '',
|
||||
genTpl: '',
|
||||
genType: 0,
|
||||
moduleName: '',
|
||||
subTableFk: '',
|
||||
subTableName: '',
|
||||
treeParent: '',
|
||||
treePrimary: ''
|
||||
}
|
||||
})
|
||||
|
||||
const formRef = shallowRef<FormInstance>()
|
||||
const rules = reactive({
|
||||
table_name: [{ required: true, message: '请输入表名称', trigger: 'blur' }],
|
||||
table_comment: [{ required: true, message: '请输入表描述', trigger: 'blur' }],
|
||||
module_name: [{ required: true, message: '请输入模块名', trigger: 'blur' }]
|
||||
})
|
||||
|
||||
const getDetails = async () => {
|
||||
const data = await tableDetail({
|
||||
id: route.query.id
|
||||
})
|
||||
Object.keys(formData).forEach((key) => {
|
||||
//@ts-ignore
|
||||
formData[key] = data[key]
|
||||
})
|
||||
|
||||
// watch(
|
||||
// () => formData.genType,
|
||||
// (value) => {
|
||||
// if (value == 1) {
|
||||
// feedback
|
||||
// .confirm('生成到模块方式如遇同名文件会覆盖旧文件,确定要选择此方式吗?')
|
||||
// .catch(() => {
|
||||
// formData.genType = 0
|
||||
// })
|
||||
// }
|
||||
// }
|
||||
// )
|
||||
}
|
||||
|
||||
const { optionsData } = useDictOptions<{
|
||||
dictType: any[]
|
||||
menu: any[]
|
||||
}>({
|
||||
dictType: {
|
||||
api: dictTypeAll
|
||||
},
|
||||
menu: {
|
||||
api: menuLists,
|
||||
transformData(data: any) {
|
||||
const menu = { id: 0, name: '顶级', children: [] }
|
||||
menu.children = data
|
||||
return menu
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
const handleSave = async () => {
|
||||
await formRef.value?.validate()
|
||||
const { base, column, gen } = formData
|
||||
await generateEdit({ ...base, ...gen, column })
|
||||
feedback.msgSuccess('操作成功')
|
||||
router.back()
|
||||
}
|
||||
|
||||
getDetails()
|
||||
</script>
|
||||
Reference in New Issue
Block a user