379 lines
13 KiB
Vue
379 lines
13 KiB
Vue
<template>
|
||
<el-form ref="genInfoForm" :model="info" :rules="rules" label-width="150px">
|
||
<el-row>
|
||
<el-col :lg="12">
|
||
<el-form-item prop="tplCategory">
|
||
<span slot="label">生成模板</span>
|
||
<el-select v-model="info.tplCategory" @change="tplSelectChange">
|
||
<el-option label="单表(增删改查)" value="crud" />
|
||
<el-option label="单表查询" value="select" />
|
||
<el-option label="树表(增删改查)" value="tree" />
|
||
<el-option label="导航查询(1对1)" value="subNav"></el-option>
|
||
<el-option label="导航查询(1对多)" value="subNavMore"></el-option>
|
||
<!-- <el-option label="主子表(增删改查)" value="sub" /> -->
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :lg="12">
|
||
<el-form-item prop="baseNameSpace">
|
||
<span slot="label">
|
||
生成命名空间前缀
|
||
<el-tooltip content="比如 ZR." placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-input v-model="info.baseNameSpace" />
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :lg="12">
|
||
<el-form-item prop="moduleName">
|
||
<span slot="label">
|
||
生成模块名
|
||
<el-tooltip content="可理解为子系统名,例如 system、user、tool(一般文件夹归类)" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-input v-model="info.moduleName" auto-complete="" />
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :lg="12">
|
||
<el-form-item prop="businessName">
|
||
<span slot="label">
|
||
生成业务名
|
||
<el-tooltip content="可理解为功能英文名,例如 user" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-input v-model="info.businessName" />
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :lg="12">
|
||
<el-form-item prop="functionName">
|
||
<span slot="label">
|
||
生成功能名
|
||
<el-tooltip content="用作类描述,例如 用户,代码生成,文章系统" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-input v-model="info.functionName" />
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :lg="12">
|
||
<el-form-item>
|
||
<span slot="label">
|
||
上级菜单
|
||
<el-tooltip content="分配到指定菜单下,例如 系统管理" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-cascader
|
||
class="w100"
|
||
:options="menuOptions"
|
||
:props="{ checkStrictly: true, value: 'menuId', label: 'menuName', emitPath: false }"
|
||
placeholder="请选择上级菜单"
|
||
clearable
|
||
v-model="info.parentMenuId"
|
||
>
|
||
<template #default="{ node, data }">
|
||
<span>{{ data.menuName }}</span>
|
||
<span v-if="!node.isLeaf"> ({{ data.children.length }}) </span>
|
||
</template>
|
||
</el-cascader>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :lg="12">
|
||
<el-form-item label="查询排序字段">
|
||
<el-select v-model="info.sortField" placeholder="请选择字段" class="mr10" clearable="">
|
||
<el-option v-for="item in columns" :key="item.columnId" :label="item.csharpField" :value="item.csharpField"> </el-option>
|
||
</el-select>
|
||
|
||
<el-radio v-model="info.sortType" label="asc">正序</el-radio>
|
||
<el-radio v-model="info.sortType" label="desc">倒序</el-radio>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :lg="12">
|
||
<el-form-item prop="permissionPrefix">
|
||
<span slot="label">
|
||
权限前缀
|
||
<el-tooltip content="eg:system:user:add中的'system:user'" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-input v-model="info.permissionPrefix" placeholder="请输入权限前缀"></el-input>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :lg="12">
|
||
<el-form-item prop="genType">
|
||
<span slot="label">
|
||
生成代码方式
|
||
<el-tooltip content="默认为zip压缩包下载" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-radio v-model="info.genType" label="0">zip压缩包</el-radio>
|
||
<el-radio v-model="info.genType" label="1">自定义路径</el-radio>
|
||
</el-form-item>
|
||
</el-col>
|
||
|
||
<el-col :lg="24" v-if="info.genType == '1'">
|
||
<el-form-item prop="genPath">
|
||
<span slot="label">
|
||
自定义路径
|
||
<el-tooltip content="填写磁盘绝对路径,若不填写,则生成到当前Web项目下" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-input v-model="info.genPath">
|
||
<el-dropdown slot="append">
|
||
<el-button type="primary">
|
||
最近路径快速选择
|
||
<i class="el-icon-arrow-down el-icon--right"></i>
|
||
</el-button>
|
||
<el-dropdown-menu slot="dropdown">
|
||
<el-dropdown-item @click.native="info.genPath = '/'">恢复默认的生成基础路径</el-dropdown-item>
|
||
<el-dropdown-item @click.native="info.genPath = ''">本项目</el-dropdown-item>
|
||
</el-dropdown-menu>
|
||
</el-dropdown>
|
||
</el-input>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :lg="24" v-show="info.tplCategory != 'select'">
|
||
<el-form-item label="显示按钮">
|
||
<el-checkbox-group v-model="checkedBtn" @change="checkedBtnSelect">
|
||
<el-checkbox :label="1">
|
||
<el-tag type="primary">添加</el-tag>
|
||
</el-checkbox>
|
||
<el-checkbox :label="2">
|
||
<el-tag type="success">修改</el-tag>
|
||
</el-checkbox>
|
||
<el-checkbox :label="3">
|
||
<el-tag type="danger">删除</el-tag>
|
||
</el-checkbox>
|
||
<el-checkbox :label="4">
|
||
<el-tag type="warning">导出</el-tag>
|
||
</el-checkbox>
|
||
</el-checkbox-group>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
|
||
<el-row v-show="info.tplCategory == 'tree'">
|
||
<h4 class="form-header">其他信息</h4>
|
||
<el-col :lg="12">
|
||
<el-form-item>
|
||
<span slot="label">
|
||
树编码字段
|
||
<el-tooltip content="树显示的编码字段名, 如:dept_id" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-select v-model="info.treeCode" placeholder="请选择">
|
||
<el-option
|
||
v-for="(column, index) in columns"
|
||
:key="index"
|
||
:label="column.csharpField + ':' + column.columnComment"
|
||
:value="column.csharpField"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :lg="12">
|
||
<el-form-item>
|
||
<span slot="label">
|
||
树父编码字段
|
||
<el-tooltip content="树显示的父编码字段名, 如:parent_Id" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-select v-model="info.treeParentCode" placeholder="请选择">
|
||
<el-option
|
||
v-for="(column, index) in columns"
|
||
:key="index"
|
||
:label="column.csharpField + ':' + column.columnComment"
|
||
:value="column.csharpField"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :lg="12">
|
||
<el-form-item>
|
||
<span slot="label">
|
||
树名称字段
|
||
<el-tooltip content="树节点的显示名称字段名, 如:dept_name" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-select v-model="info.treeName" placeholder="请选择">
|
||
<el-option
|
||
v-for="(column, index) in columns"
|
||
:key="index"
|
||
:label="column.csharpField + ':' + column.columnComment"
|
||
:value="column.csharpField"
|
||
></el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
<el-row v-show="info.tplCategory == 'sub' || info.tplCategory == 'subNav' || info.tplCategory == 'subNavMore'">
|
||
<h4 class="form-header">关联信息</h4>
|
||
<el-col :lg="12">
|
||
<el-form-item>
|
||
<span slot="label">
|
||
关联子表的表名
|
||
<el-tooltip content="关联子表的表名, 如:sys_user" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-select v-model="info.subTableName" placeholder="请选择" @change="subSelectChange(this)">
|
||
<el-option v-for="(table, index) in tables" :key="index" :label="table.tableName + ':' + table.tableComment" :value="table.tableName">
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
<el-col :lg="12">
|
||
<el-form-item>
|
||
<span slot="label">
|
||
子表关联的外键名
|
||
<el-tooltip content="子表关联的外键名, 如:user_id" placement="top">
|
||
<i class="el-icon-question"></i>
|
||
</el-tooltip>
|
||
</span>
|
||
<el-select v-model="info.subTableFkName" placeholder="请选择">
|
||
<el-option v-for="(column, index) in subColumns" :key="index" :label="column.csharpField" :value="column.csharpField">
|
||
<span style="float: left">{{ column.csharpField }}</span>
|
||
<span style="float: right">{{ column.columnComment }}</span>
|
||
</el-option>
|
||
</el-select>
|
||
</el-form-item>
|
||
</el-col>
|
||
</el-row>
|
||
</el-form>
|
||
</template>
|
||
<script>
|
||
import { queryColumnInfo } from '@/api/tool/gen'
|
||
import { listMenu } from '@/api/system/menu'
|
||
|
||
export default {
|
||
name: 'BasicInfoForm',
|
||
props: {
|
||
info: {
|
||
type: Object,
|
||
default: null,
|
||
},
|
||
// 子表
|
||
tables: {
|
||
type: Array,
|
||
default: null,
|
||
},
|
||
menus: {
|
||
type: Array,
|
||
default: [],
|
||
},
|
||
// 列
|
||
columns: {
|
||
type: Array,
|
||
default: [],
|
||
},
|
||
},
|
||
data() {
|
||
return {
|
||
menuOptions: [],
|
||
checkedBtn: [],
|
||
subColumns: [],
|
||
rules: {
|
||
tplCategory: [{ required: true, message: '请选择生成模板', trigger: 'blur' }],
|
||
moduleName: [
|
||
{
|
||
required: true,
|
||
message: '请输入生成模块名',
|
||
trigger: 'blur',
|
||
pattern: /^[A-Za-z]+$/,
|
||
},
|
||
],
|
||
businessName: [
|
||
{
|
||
required: true,
|
||
message: '请输入生成业务名',
|
||
trigger: 'blur',
|
||
pattern: /^[A-Za-z]+$/,
|
||
},
|
||
],
|
||
functionName: [{ required: true, message: '请输入生成功能名', trigger: 'blur' }],
|
||
permissionPrefix: {
|
||
required: true,
|
||
message: '请输入权限前缀',
|
||
trigger: 'blur',
|
||
},
|
||
},
|
||
}
|
||
},
|
||
watch: {
|
||
'info.subTableName': function (val) {
|
||
this.setSubTableColumns(val)
|
||
},
|
||
'info.checkedBtn': function (val) {
|
||
this.checkedBtn = val
|
||
},
|
||
},
|
||
methods: {
|
||
/** 转换菜单数据结构 */
|
||
normalizer(node) {
|
||
if (node.children && !node.children.length) {
|
||
delete node.children
|
||
}
|
||
return {
|
||
id: node.menuId,
|
||
label: node.menuName,
|
||
children: node.children,
|
||
}
|
||
},
|
||
/** 选择子表名触发 */
|
||
subSelectChange(value) {
|
||
this.info.subTableFkName = ''
|
||
},
|
||
checkedBtnSelect(value) {
|
||
this.info.checkedBtn = value
|
||
},
|
||
/** 选择生成模板触发 */
|
||
tplSelectChange(value) {
|
||
if (value !== 'sub') {
|
||
this.info.subTableName = ''
|
||
this.info.subTableFkName = ''
|
||
}
|
||
},
|
||
/** 设置关联外键 */
|
||
setSubTableColumns(value) {
|
||
if (value == null || value == undefined || value == '') {
|
||
return
|
||
}
|
||
for (var item in this.tables) {
|
||
const obj = this.tables[item]
|
||
if (value === obj.tableName) {
|
||
queryColumnInfo(obj.tableId).then((res) => {
|
||
if (res.code == 200) {
|
||
this.subColumns = res.data.columns
|
||
}
|
||
})
|
||
break
|
||
}
|
||
}
|
||
},
|
||
/** 查询菜单下拉树结构 */
|
||
getMenuTreeselect() {
|
||
/** 查询菜单下拉列表 */
|
||
listMenu({ menuTypeIds: 'M,C' }).then((response) => {
|
||
this.menuOptions = response.data
|
||
})
|
||
},
|
||
},
|
||
mounted() {
|
||
this.getMenuTreeselect()
|
||
},
|
||
}
|
||
</script>
|