You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

501 lines
16 KiB

<template>
<div class="table">
<h2 class="title">数据库表配置</h2>
<TableFromHeader @changeColData="changeColData" @changeTableName="changeTableName"></TableFromHeader>
<el-button type="text" @click="add()"></el-button>
<el-table
:data="tableData.tableColEntityList"
style="width: 100%;max-height: 600px;overflow: auto">
<el-table-column align="center"
prop="colName"
label="列名称"
width="150">
</el-table-column>
<el-table-column align="center"
prop="chinaName"
label="展示中文名"
width="150">
<template slot-scope="scope">
<el-input v-model="scope.row.chinaName" placeholder="请输入内容"></el-input>
</template>
</el-table-column>
<el-table-column
align="center"
prop="date"
label="属性类型"
width="150">
<template slot-scope="scope">
<el-select v-model="scope.row.paramType" placeholder="请选择">
<el-option
v-for="item in paramType"
:key="item.value"
:label="item.value"
:value="item.value">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column
align="center"
prop="name"
label="查询配置"
width="120">
<template slot-scope="scope">
<el-select v-model="scope.row.compareType" placeholder="请选择">
<el-option
v-for="item in compareType"
:key="item.value"
:label="item.value"
:value="item.value">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="搜索" width="80" align="center">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.searchShow"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="表格展示" width="80" align="center">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.tableShow"></el-checkbox>
</template>
</el-table-column>
<el-table-column
align="center"
prop="name"
label="显示类型"
width="120">
<template slot-scope="scope">
<el-select v-model="scope.row.showType" @change="tableTypeChange(scope.row)" placeholder="请选择">
<el-option
v-for="item in showType"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="编辑展示" width="80" align="center">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.updateShow"></el-checkbox>
</template>
</el-table-column>
<el-table-column
align="center"
prop="name"
label="编辑类型"
width="120">
<template slot-scope="scope">
<el-select v-model="scope.row.updateType" @change="updateTypeChange(scope.row)" placeholder="请选择">
<el-option
v-for="item in updateType"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</template>
</el-table-column>
<el-table-column label="图片上传" width="80" align="center">
<template slot-scope="scope">
<el-checkbox v-model="scope.row.uploadImg"></el-checkbox>
</template>
</el-table-column>
</el-table>
<div class="my-button">
<el-button @click="goHome">上一步</el-button>
<el-button @click="submitMainFrom">确认</el-button>
</div>
<div>
<el-select v-model="type" @change="updateModuleType" placeholder="请选择">
<el-option
v-for="item in updateModuleTypeArr"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</div>
<div class="my-button">
<el-button @click="generateCode" type="success">生成代码</el-button>
</div>
<AddSonTable :dialogVisible=addSonTableDialog @dismissDialog="close" :col-data="currentColData"
:table-name="tableData.tableName" @addSonTableList="addSonTableList"></AddSonTable>
<el-dialog
title="数据来源"
:visible.sync="dialogVisible"
width="50%"
>
<TableFromHeader :showName="false" @changeColData="selectColName"></TableFromHeader>
<el-form>
<el-form-item label="字段">
<el-select v-model="dataSource.tableFiled" @change="updateFileChange" placeholder="请选择">
<el-option
v-for="item in colName"
:key="item.colName"
:label="item.colName"
:value="item.colName">
</el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogVisible = false">取 消</el-button>
<el-button type="primary" @click="dialogVisible = false">确 定</el-button>
</span>
</el-dialog>
<el-dialog
title="下拉选择配置"
:close-on-click-modal="false"
:close-on-press-escape="false"
:visible.sync="selectDialogVisible"
width="50%">
<el-form :model="selectDataParam" label-width="100px" inline>
<TableFromHeader @changeColData="changeSwitchTableName" lable="数据来源表" :showName="false"></TableFromHeader>
<el-form-item label="name列">
<el-select v-model="selectDataParam.nameCol" @change="updateFileChange" placeholder="请选择">
<el-option
v-for="item in selectDataFromTableCol"
:key="item.colName"
:label="item.chinaName"
:value="item.colName">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="value列">
<el-select v-model="selectDataParam.valueCol" @change="updateFileChange" placeholder="请选择">
<el-option
v-for="item in selectDataFromTableCol"
:key="item.colName"
:label="item.chinaName"
:value="item.colName">
</el-option>
</el-select>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="selectDialogVisible = false">取 消</el-button>
<el-button type="primary" @click="submitSelectForm">确 定</el-button>
</span>
</el-dialog>
<el-dialog
:close-on-click-modal="false"
:close-on-press-escape="false"
title="枚举来源"
:visible.sync="dialogEnumVisible" width="50%">
<el-form :model="addEnumForm" ref="addEnumForm" label-width="100px" inline>
<div v-for="(domain, index) in addEnumForm.enums">
<el-form-item
:label="'枚举值-' + index"
:key="domain.key"
:prop="'enums.' + index + '.name'"
:rules="{
required: true, message: '枚举key不能为空', trigger: 'blur'}">
<el-input v-model="domain.name"></el-input>
</el-form-item>
<el-form-item
:label="'中文解释-' + index"
:key="domain.key1"
:prop="'enums.' + index + '.value'"
:rules="{required: true, message: '枚举value不能为空', trigger: 'blur'}">
<el-input v-model="domain.value"></el-input>
</el-form-item>
<el-button @click.prevent="removeDomain(domain)">删除</el-button>
</div>
<el-form-item>
<el-button @click="addDomain">新增枚举</el-button>
<el-button @click="resetForm('addEnumForm')">重置</el-button>
</el-form-item>
</el-form>
<span slot="footer" class="dialog-footer">
<el-button @click="dialogEnumVisible = false">取 消</el-button>
<el-button type="primary" @click="submitForm('addEnumForm')"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
import {message} from "../util/notice";
import {get, post} from "../util/http";
import AddSonTable from "../components/AddSonTable";
import TableFromHeader from "../components/TableFromHeader";
export default {
components: {AddSonTable, TableFromHeader},
data() {
return {
random: '',
paramType: [
{value: "String"},
{value: "Boolean"},
{value: "Long"},
{value: "Integer"}
],
compareType: [
{value: "="},
{value: "like"},
{value: "eq"},
{value: "nt"}
],
showType: [
{label: "文本", value: 'text'},
{label: "枚举", value: 'enum'},
{label: "图片", value: 'image'}
],
updateModuleTypeArr: [
{label: "vue-element-admin", value: '1'},
{label: "vue", value: '2'},
{label: "layui+html", value: '3'}
],
type: 1,
updateType: [
{label: "文本", value: 'text'},
{label: "开关", value: 'switch'},
{label: "枚举", value: 'enum'},// 作为单选框组
{label: "下拉选择", value: 'select'},
{label: "数字", value: 'number'},
{label: "日期选择", value: 'date'},
{label: "文本域", value: 'textArea'},
],
tableData: {
tableComment: "",
tableName: '',
tableColEntityList: [],
sonTableEntities: [],
enumsEntities: [],
selectEntities: [],
tableEnumsEntities: []
},
correlationList: [],
sonTableEntities: [],
addSonTableDialog: false,
// 当前列数据
currentColData: {},
dialogVisible: false,
dialogEnumVisible: false,
selectDialogVisible: false,
colName: [],
// 下拉框数据来源对象
dataSource: {
tableName: '',
tableFiled: ''
},
addEnumForm: {
enums: [{
name: '',
value: ''
}]
},
currentCol: '',// 当前列
// 开关相关
addSwitchForm: {},
// 下拉选择相关
selectDataFromTableCol: [],
selectDataParam: {
fromTableName: '',
nameCol: '',
valueCol: ''
}
}
},
mounted() {
let random = localStorage.getItem("random");
if (!random) {
message("数据库连接信息有误,请重新配置", "error");
this.goHome();
return;
}
this.random = random;
},
methods: {
goHome() {
this.$router.push("/");
},
close(obj) {
this.addSonTableDialog = false;
},
add() {
if (this.tableData.tableColEntityList.length <= 0) {
message("请先选择主表!", "error")
return
}
this.addSonTableDialog = true
},
changeColData(obj) {
this.tableData = []
this.tableData = obj.res;
this.tableData.tableName = obj.name;
},
changeTableName(obj) {
this.tableData.tableComment = obj.name;
},
changeSwitchTableName(obj) {
this.selectDataParam.fromTableName = obj.name
this.selectDataFromTableCol = obj.res.tableColEntityList
},
updateTypeChange(obj) {
localStorage.setItem("type", 1)
this.currentCol = obj.colName
if (obj.updateType == "select") {
this.selectDialogVisible = true
}
if (obj.updateType == 'enum') {
this.dialogEnumVisible = true;
}
},
tableTypeChange(obj) {
localStorage.setItem("type", 2)
this.currentCol = obj.colName
if (obj.showType == 'enum') {
this.dialogEnumVisible = true;
}
},
selectColName(obj) {
if (this.tableData.tableName == obj.name) {
this.colName = [];
message("数据表来源不能是当前表!", "error")
return;
}
this.dataSource.tableName = obj.name;
this.colName = obj.res.tableColEntityList;
},
updateFileChange(obj) {
// console.log(this.dataSource)
},
submitSelectForm() {
if (this.selectDataParam.fromTableName && this.selectDataParam.nameCol && this.selectDataParam.valueCol) {
this.selectDataParam.colName = this.currentCol
if (this.tableData.selectEntities && this.tableData.selectEntities.length > 0) {
this.tableData.selectEntities.push(this.selectDataParam)
} else {
let arr = []
arr.push(this.selectDataParam)
this.tableData.selectEntities = arr
}
}
this.selectDataParam = {}
this.selectDialogVisible = false
},
submitForm(formName) {
let type = localStorage.getItem("type")
let that = this
this.$refs[formName].validate((valid) => {
if (valid) {
let param = {};
param.colName = that.currentCol
param.enumsDTOS = that.addEnumForm.enums
if (type == 1) {
if (that.tableData.enumsEntities && that.tableData.enumsEntities.length > 0) {
that.tableData.enumsEntities.push(param)
} else {
let arr = []
arr.push(param)
that.tableData.enumsEntities = arr
}
} else {
if (that.tableData.tableEnumsEntities && that.tableData.tableEnumsEntities.length > 0) {
that.tableData.tableEnumsEntities.push(param)
} else {
let arr = []
arr.push(param)
that.tableData.tableEnumsEntities = arr
}
}
message("枚举添加成功!", "success")
that.dialogEnumVisible = false;
that.addEnumForm.enums = []
localStorage.removeItem("type")
} else {
console.log('error submit!!');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
},
removeDomain(item) {
var index = this.addEnumForm.enums.indexOf(item)
if (index !== -1) {
this.addEnumForm.enums.splice(index, 1)
}
},
addDomain() {
this.addEnumForm.enums.push({
value: '',
name: "",
key: Date.now(),
key1: Date.now() + 1
});
},
submitMainFrom() {
this.tableData.correlationList = this.correlationList
this.tableData.sonTableEntities = this.sonTableEntities
let random = localStorage.getItem("random")
var that = this;
post("/table/" + random, this.tableData).then(res => {
that.correlationList = []
message("配置成功!", "success");
})
},
addSonTableList(param) {
let obj = param.tableData
this.addSonTableDialog = false
if (obj && obj.tableName) {
message("子表添加成功!")
if (this.sonTableEntities.length > 0) {
this.checkObjExist(obj);
}
if (this.correlationList.length > 0) {
this.checkCorrelationExist(param.correlation);
}
this.correlationList.push(param.correlation)
this.sonTableEntities.push(obj)
}
},
// 校验数据在数据中是否存在
checkObjExist(obj) {
for (let i in this.sonTableEntities) {
let item = this.sonTableEntities[i]
if (item.tableName == obj.tableName) {
this.sonTableEntities.splice(i, 1)
}
}
},
checkCorrelationExist(obj) {
for (let i in this.correlationList) {
let item = this.correlationList[i]
if (item == obj) {
this.correlationList.splice(i, 1)
}
}
},
updateModuleType(e) {
this.type = e
},
generateCode() {
let random = localStorage.getItem("random")
let url = "/generator/" + random + "/" + this.type
get(url).then(res => {
console.log(res)
})
}
}
}
</script>
<style scoped>
.title {
height: 50px;
line-height: 50px;
}
.my-button {
margin-top: 20px;
}
</style>