Commit 98c5b476 by yuwei

项目初始化

parent 1225032f
......@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
......@@ -37,4 +38,9 @@ public class MetadataChangeRecordDto implements Serializable {
private String fieldOldValue;
@ApiModelProperty(value = "该字段最新的值")
private String fieldNewValue;
@ApiModelProperty(value = "状态")
@NotNull(message = "状态不能为空", groups = {ValidationGroups.Insert.class, ValidationGroups.Update.class})
private String status;
@ApiModelProperty(value = "备注")
private String remark;
}
......@@ -18,5 +18,6 @@ public class MetadataChangeRecordQuery extends BaseQueryParams {
private static final long serialVersionUID=1L;
private String objectId;
private String fieldName;
}
......@@ -20,7 +20,7 @@ public class MetadataChangeRecordVo implements Serializable {
private static final long serialVersionUID=1L;
private String id;
private Integer status;
private String status;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private LocalDateTime createTime;
private Integer version;
......
......@@ -72,6 +72,7 @@ public class MetadataChangeRecordController extends BaseController {
@GetMapping("/page")
public R getMetadataChangeRecordPage(MetadataChangeRecordQuery metadataChangeRecordQuery) {
QueryWrapper<MetadataChangeRecordEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(StrUtil.isNotBlank(metadataChangeRecordQuery.getObjectId()), "object_id", metadataChangeRecordQuery.getObjectId());
queryWrapper.like(StrUtil.isNotBlank(metadataChangeRecordQuery.getFieldName()), "field_name", metadataChangeRecordQuery.getFieldName());
IPage<MetadataChangeRecordEntity> page = metadataChangeRecordService.page(new Page<>(metadataChangeRecordQuery.getPageNum(), metadataChangeRecordQuery.getPageSize()), queryWrapper);
List<MetadataChangeRecordVo> collect = page.getRecords().stream().map(metadataChangeRecordMapper::toVO).collect(Collectors.toList());
......
......@@ -9,21 +9,18 @@
</div>
<div :style="classCardbody">
<el-form ref="form" :model="form" label-width="80px" disabled>
<el-form-item label="源数据表主键" prop="objectId">
<el-input v-model="form.objectId" />
</el-form-item>
<el-form-item label="源数据表的字段名" prop="fieldName">
<el-input v-model="form.fieldName" />
</el-form-item>
<el-form-item label="版本号" prop="version">
<el-input v-model="form.version" />
</el-form-item>
<el-form-item label="原来的值" prop="fieldOldValue">
<el-input v-model="form.fieldOldValue" />
</el-form-item>
<el-form-item label="最新的值" prop="fieldNewValue">
<el-input v-model="form.fieldNewValue" />
</el-form-item>
<el-form-item label="版本号" prop="version">
<el-input v-model="form.version" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
......
......@@ -10,21 +10,18 @@
</div>
<div :style="classCardbody">
<el-form ref="form" :model="form" :rules="rules" label-width="80px">
<el-form-item label="源数据表主键" prop="objectId">
<el-input v-model="form.objectId" placeholder="请输入源数据表主键" />
</el-form-item>
<el-form-item label="源数据表的字段名" prop="fieldName">
<el-input v-model="form.fieldName" placeholder="请输入源数据表的字段名" />
<el-input v-model="form.fieldName" placeholder="请输入源数据表的字段名" disabled />
</el-form-item>
<el-form-item label="版本号" prop="version">
<el-input v-model="form.version" placeholder="请输入版本号" />
</el-form-item>
<el-form-item label="原来的值" prop="fieldOldValue">
<el-input v-model="form.fieldOldValue" placeholder="请输入原来的值" />
<el-input v-model="form.fieldOldValue" placeholder="请输入原来的值" disabled />
</el-form-item>
<el-form-item label="最新的值" prop="fieldNewValue">
<el-input v-model="form.fieldNewValue" placeholder="请输入最新的值" />
</el-form-item>
<el-form-item label="版本号" prop="version">
<el-input v-model="form.version" placeholder="请输入版本号" />
</el-form-item>
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio
......
......@@ -21,12 +21,6 @@
<el-col :span="12">
<el-button-group>
<el-button
type="primary"
icon="el-icon-plus"
size="mini"
@click="handleAdd"
>新增</el-button>
<el-button
type="success"
icon="el-icon-edit-outline"
size="mini"
......@@ -184,7 +178,7 @@ export default {
// 表格头
tableColumns: [
{ prop: 'objectId', label: '源数据表主键', show: true },
{ prop: 'fieldName', label: '源数据表的字段名', show: true },
{ prop: 'fieldName', label: '源数据表的字段名', show: true, formatter: this.fieldNameFormatter },
{ prop: 'fieldOldValue', label: '原来的值', show: true },
{ prop: 'fieldNewValue', label: '最新的值', show: true },
{ prop: 'version', label: '版本号', show: true },
......@@ -210,7 +204,18 @@ export default {
pageNum: 1,
pageSize: 20,
fieldName: ''
}
},
dicts: new Map([
['columnName', '字段名称'],
['columnComment', '字段注释'],
['dataDefault', '数据默认值'],
['columnKey', '是否主键'],
['columnNullable', '是否允许为空'],
['dataType', '数据类型'],
['dataLength', '数据长度'],
['dataPrecision', '数据精度'],
['dataScale', '数据小数位']
])
}
},
created () {
......@@ -272,15 +277,6 @@ export default {
this.single = selection.length !== 1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd () {
this.showOptions.data = {}
this.showOptions.showList = false
this.showOptions.showAdd = true
this.showOptions.showEdit = false
this.showOptions.showDetail = false
this.$emit('showCard', this.showOptions)
},
/** 修改按钮操作 */
handleEdit (row) {
this.showOptions.data.id = row.id || this.ids[0]
......@@ -341,6 +337,9 @@ export default {
} else {
return <el-tag type="warning">{dictLabel}</el-tag>
}
},
fieldNameFormatter (row, column, cellValue, index) {
return this.dicts.get(cellValue)
}
}
}
......
......@@ -8,42 +8,138 @@
</el-button-group>
</div>
<div :style="classCardbody">
<el-form ref="form" :model="form" label-width="80px" disabled>
<el-form-item label="字段名称" prop="columnName">
<el-input v-model="form.columnName" />
</el-form-item>
<el-form-item label="字段注释" prop="columnComment">
<el-input v-model="form.columnComment" />
</el-form-item>
<el-form-item label="是否主键" prop="columnKey">
<el-input v-model="form.columnKey" />
</el-form-item>
<el-form-item label="是否允许为空" prop="columnNullable">
<el-input v-model="form.columnNullable" />
<el-form ref="form" :model="form" label-width="100px" size="mini">
<el-row>
<el-col :span="8">
<el-form-item label="字段名称" prop="columnName">
<el-input v-model="form.columnName" disabled>
<el-button slot="append" icon="el-icon-edit-outline" @click="changeRecord('columnName')"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="字段注释" prop="columnComment">
<el-input v-model="form.columnComment" disabled>
<el-button slot="append" icon="el-icon-edit-outline" @click="changeRecord('columnComment')"></el-button>
</el-input>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="数据默认值" prop="dataDefault">
<el-input v-model="form.dataDefault" disabled>
<el-button slot="append" icon="el-icon-edit-outline" @click="changeRecord('dataDefault')"></el-button>
</el-input>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="是否主键" prop="columnKey">
<el-input v-model="form.columnKey === '1' ? 'Y' : 'N'" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="是否允许为空" prop="columnNullable">
<el-input v-model="form.columnNullable === '1' ? 'Y' : 'N'" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="数据类型" prop="dataType">
<el-input v-model="form.dataType" disabled />
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="8">
<el-form-item label="数据长度" prop="dataLength">
<el-input v-model="form.dataLength" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="数据精度" prop="dataPrecision">
<el-input v-model="form.dataPrecision" disabled />
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label="数据小数位" prop="dataScale">
<el-input v-model="form.dataScale" disabled />
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-divider content-position="center">变更记录</el-divider>
<el-row>
<el-col :span="24">
<el-table :data="changeData.dataList" stripe border
:max-height="200"
style="width: 100%; margin: 15px 0;">
<el-table-column label="序号" align="center">
<template slot-scope="scope">
<span>{{ scope.$index + 1 }}</span>
</template>
</el-table-column>
<el-table-column prop="fieldName" label="变更字段" align="center" show-overflow-tooltip :formatter="fieldNameFormatter">
</el-table-column>
<el-table-column prop="version" label="版本号" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="fieldOldValue" label="原来的值" align="center" show-overflow-tooltip >
</el-table-column>
<el-table-column prop="fieldNewValue" label="最新的值" align="center" show-overflow-tooltip >
</el-table-column>
</el-table>
<el-pagination
:page-sizes="[10, 20, 50, 100]"
layout="total, sizes, prev, pager, next, jumper"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page.sync="changeData.pageNum"
:page-size.sync="changeData.pageSize"
:total="changeData.dataTotal"
></el-pagination>
</el-col>
</el-row>
</div>
<!-- 变更弹框 -->
<el-dialog :title="record.title" :visible.sync="record.open" min-width="600px" append-to-body>
<el-form ref="form2" :model="form2" :rules="rules2" label-width="80px">
<el-form-item label="变更字段" prop="fieldName">
<el-input v-model="form2.fieldName" placeholder="请输入变更字段" :disabled="true"/>
</el-form-item>
<el-form-item label="数据类型" prop="dataType">
<el-input v-model="form.dataType" />
<el-form-item label="版本号" prop="version">
<el-input v-model="form2.version" placeholder="请输入版本号"/>
</el-form-item>
<el-form-item label="数据长度" prop="dataLength">
<el-input v-model="form.dataLength" />
<el-form-item label="原来的值" prop="fieldOldValue">
<el-input v-model="form2.fieldOldValue" placeholder="请输入原来的值" :disabled="true"/>
</el-form-item>
<el-form-item label="数据精度" prop="dataPrecision">
<el-input v-model="form.dataPrecision" />
<el-form-item label="最新的值" prop="fieldNewValue">
<el-input v-model="form2.fieldNewValue" placeholder="请输入最新的值"/>
</el-form-item>
<el-form-item label="数据小数位" prop="dataScale">
<el-input v-model="form.dataScale" />
<el-form-item label="状态" prop="status">
<el-radio-group v-model="form2.status">
<el-radio
v-for="dict in statusOptions"
:key="dict.id"
:label="dict.itemText"
>{{dict.itemValue}}</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="数据默认值" prop="dataDefault">
<el-input v-model="form.dataDefault" />
<el-form-item label="备注" prop="remark">
<el-input v-model="form2.remark" type="textarea" placeholder="请输入内容" />
</el-form-item>
</el-form>
</div>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitRecordForm">确 定</el-button>
<el-button @click="record.open = false">取 消</el-button>
</div>
</el-dialog>
</el-card>
</div>
</template>
<script>
import { getDataColumn } from '@/api/metadata/datacolumn'
import { pageChangeRecord, addChangeRecord } from '@/api/metadata/changerecord'
export default {
name: 'DataColumnDetail',
......@@ -69,11 +165,58 @@ export default {
showDetail: false
},
// 表单参数
form: {}
form: {},
changeData: {
dataList: [],
pageNum: 1,
pageSize: 20,
dataTotal: 0
},
dicts: new Map([
['columnName', '字段名称'],
['columnComment', '字段注释'],
['dataDefault', '数据默认值'],
['columnKey', '是否主键'],
['columnNullable', '是否允许为空'],
['dataType', '数据类型'],
['dataLength', '数据长度'],
['dataPrecision', '数据精度'],
['dataScale', '数据小数位']
]),
record: {
// 是否显示弹出层
open: false,
// 弹出层标题
title: '元数据变更'
},
form2: {
status: '1'
},
rules2: {
fieldName: [
{ required: true, message: '数据表的字段名不能为空', trigger: 'blur' }
],
fieldOldValue: [
{ required: true, message: '原来的值不能为空', trigger: 'blur' }
],
fieldNewValue: [
{ required: true, message: '最新的值不能为空', trigger: 'blur' }
],
version: [
{ required: true, message: '版本号不能为空', trigger: 'blur' }
]
},
// 状态数据字典
statusOptions: []
}
},
created () {
console.log('id:' + this.data.id)
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
},
mounted () {
this.getDataColumn(this.data.id)
......@@ -89,6 +232,53 @@ export default {
this.form = response.data
}
})
},
handleSizeChange (val) {
this.changeData.pageNum = 1
this.changeData.pageSize = val
this.getChangeRecordList()
},
handleCurrentChange (val) {
this.changeData.pageNum = val
this.getChangeRecordList()
},
getChangeRecordList () {
let data = {}
data.objectId = this.data.id
data.pageNum = this.changeData.pageNum
data.pageSize = this.changeData.pageSize
pageChangeRecord(data).then(response => {
if (response.success) {
const { data } = response
this.changeData.dataList = data.data
this.changeData.dataTotal = data.total
}
})
},
fieldNameFormatter (row, column, cellValue, index) {
return this.dicts.get(cellValue)
},
changeRecord (field) {
this.record.open = true
this.form2.objectId = this.data.id
this.form2.fieldName = field
this.form2.fieldOldValue = this.form[field]
this.form2.version = 1
},
submitRecordForm () {
this.$refs['form2'].validate(valid => {
if (valid) {
addChangeRecord(this.form2).then(response => {
if (response.success) {
this.$message.success('保存成功')
this.getChangeRecordList()
} else {
this.$message.error('保存失败')
}
this.record.open = false
})
}
})
}
}
}
......
......@@ -5,12 +5,14 @@
<el-col :span="4">
<el-tree
:data="treeOptions"
default-expand-all
ref="tree"
node-key="id"
empty-text="加载中,请稍后"
:props="defaultProps"
default-expand-all
:expand-on-click-node="false"
@node-click="handleNodeClick"
:render-content="renderContent"
></el-tree>
</el-col>
<el-col :span="20" style="border-left: 2px solid #aaa;">
......@@ -284,12 +286,24 @@ export default {
this.queryParams.pageNum = val
this.getList()
},
renderContent (h, { node, data, store }) {
if (node.level === 1) {
data.icon = 'icon iconfont icon-weidu'
} else {
data.icon = 'icon iconfont icon-zhibiao'
}
return (
<span class="custom-tree-node">
<i class={data.icon}></i>
<span>{node.label}</span>
</span>)
},
/** 节点单击事件 */
handleNodeClick (data) {
if ('database' === data.type) {
if (data.type === 'database') {
this.queryParams.sourceId = data.id
this.queryParams.tableId = ''
} else if ('table' === data.type) {
} else if (data.type === 'table') {
this.queryParams.tableId = data.id
this.queryParams.sourceId = ''
}
......@@ -317,4 +331,13 @@ export default {
.right-toolbar {
float: right;
}
::v-deep .custom-tree-node {
flex: 1;
display: flex;
font-size: 14px;
.icon {
margin-right: 5px;
}
}
</style>
<template>
<div class="app-container">
<el-card class="box-card" shadow="always">
<div slot="header" class="clearfix">
<span>{{ title }}</span>
</div>
<div :style="classCardbody">
<el-row>
<el-col :span="24">
......@@ -86,9 +83,8 @@ export default {
return {
classCardbody: {
overflow: 'auto',
height: document.body.offsetHeight - 240 + 'px'
height: document.body.offsetHeight - 170 + 'px'
},
title: 'SQL工作台',
// 数据源数据字典
sourceOptions: [],
sqlDataSource: undefined,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment