Commit 6e782b7d by 刘泽志

字段元

parent fd326b87
import request from "@/utils/request"; import request from '@/utils/request'
const prefix = '/data/field' const prefix = '/data/field'
...@@ -67,3 +67,68 @@ export function resetField(excelId){ ...@@ -67,3 +67,68 @@ export function resetField(excelId){
params:{excelId} params:{excelId}
}) })
} }
/**
* 元字段查询
* @param params
* @returns {*}
*/
export function queryMetaField(params) {
return request({
url: `${prefix}/meta`,
method: 'get',
params
})
}
/**
* 新增字段
* @param data
* @returns {*}
*/
export function addMetaField(data) {
return request({
url: `${prefix}/meta`,
method: 'post',
data
})
}
/**
* 修改字段
* @param data
* @returns {*}
*/
export function updateMetaField(data) {
return request({
url: `${prefix}/meta/update`,
method: 'post',
data
})
}
/**
* 删除字段
* @param fieldId
* @returns {*}
*/
export function deleteMetaField(fieldId) {
return request({
url: `${prefix}/meta/delete`,
method: 'get',
params:{fieldId}
})
}
/**
* 查询元字段字典
* @returns {*}
*/
export function getMetaFieldDict() {
return request({
url: `${prefix}/meta/dict`,
method: 'get',
})
}
...@@ -211,12 +211,12 @@ ...@@ -211,12 +211,12 @@
<el-input-number v-model="fieldDialog.data.sort" :min="0" :precision="0"/> <el-input-number v-model="fieldDialog.data.sort" :min="0" :precision="0"/>
</el-form-item> </el-form-item>
<el-form-item label="数据库字段" prop="field"> <el-form-item label="数据库字段" prop="field">
<el-select v-if="false" v-model="fieldDialog.data.field" :popper-append-to-body="false"> <el-select v-model="fieldDialog.data.field" :popper-append-to-body="false" filterable>
<el-option v-for="item in fieldDict" :key="item.id" :label="item.label" :value="item.value" <el-option v-for="item in metaFieldDict" :key="item.value" :label="item.label" :value="item.value"
></el-option> ></el-option>
</el-select> </el-select>
<el-autocomplete v-model="fieldDialog.data.field" :fetch-suggestions="fetchSuggestions"> <!-- <el-autocomplete v-model="fieldDialog.data.field" :fetch-suggestions="fetchSuggestions">
</el-autocomplete> </el-autocomplete>-->
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
...@@ -261,10 +261,11 @@ ...@@ -261,10 +261,11 @@
<el-table v-loading="fieldDrawer.queryFieldLoading" :data="fieldDrawer.fieldList" <el-table v-loading="fieldDrawer.queryFieldLoading" :data="fieldDrawer.fieldList"
border stripe style="margin-left:6px;" border stripe style="margin-left:6px;"
> >
<el-table-column align="center" label="代码" prop="code" show-overflow-tooltip/> <el-table-column align="center" label="代码" prop="code" show-overflow-tooltip width="120"/>
<el-table-column align="center" label="指标名称" prop="title" show-overflow-tooltip/> <el-table-column align="center" label="指标名称" min-width="200" prop="title" show-overflow-tooltip/>
<el-table-column align="center" label="数据坐标" prop="coordinate" show-overflow-tooltip/> <el-table-column align="center" label="数据坐标" prop="coordinate" show-overflow-tooltip width="100"/>
<el-table-column align="center" label="数据库字段名" prop="field" show-overflow-tooltip/> <el-table-column align="center" label="数据库字段名" min-width="150" prop="fieldName" show-overflow-tooltip/>
<el-table-column align="center" label="计量单位" prop="unit" show-overflow-tooltip width="90"/>
<el-table-column align="center" label="操作" width="150"> <el-table-column align="center" label="操作" width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button plain size="small" @click.stop="openRuleBindDialog(scope.row)">规则</el-button> <el-button plain size="small" @click.stop="openRuleBindDialog(scope.row)">规则</el-button>
...@@ -497,6 +498,7 @@ export default { ...@@ -497,6 +498,7 @@ export default {
dataSourceList: [], // 数据源列表 dataSourceList: [], // 数据源列表
tableList: [], // 表列表 tableList: [], // 表列表
fieldDict: [], // 字段字典 fieldDict: [], // 字段字典
metaFieldDict:[], // 元字段字典
yearDialog: { // 年份dialog yearDialog: { // 年份dialog
title: '', title: '',
show: false, show: false,
...@@ -600,6 +602,7 @@ export default { ...@@ -600,6 +602,7 @@ export default {
}) })
this.initDataSource() this.initDataSource()
this.initRuleDict() this.initRuleDict()
this.initMetaFieldDict()
}, },
methods: { methods: {
// 初始化年份字典 // 初始化年份字典
...@@ -645,6 +648,17 @@ export default { ...@@ -645,6 +648,17 @@ export default {
}) })
}) })
}, },
// 初始化元字段字典
initMetaFieldDict(){
DataField.getMetaFieldDict().then(res=>{
this.metaFieldDict = res.data.map(item=>{
return {
value: item.id,
label: StringUtil.mergeStr(item.fieldName,item.fieldComment)
}
})
})
},
// 初始化数据表列表 // 初始化数据表列表
initTable(datasourceId, callback) { initTable(datasourceId, callback) {
this.queryTableLoading = true this.queryTableLoading = true
...@@ -967,7 +981,13 @@ export default { ...@@ -967,7 +981,13 @@ export default {
this.fieldDrawer.fieldList = [] this.fieldDrawer.fieldList = []
this.fieldDrawer.show = true this.fieldDrawer.show = true
this.queryFieldList() this.queryFieldList()
this.initFieldDict() //this.initFieldDict()
},
// 重置分页再查询字段列表
clearPageToSearch() {
this.fieldDrawer.queryForm.total = 0
this.fieldDrawer.queryForm.pageNum = 1
this.queryFieldList()
}, },
// 查询字段列表 // 查询字段列表
queryFieldList() { queryFieldList() {
......
<template> <template>
<div class="app-container"> <div class="container">
<div class="header-operator"> <el-form inline label-width="80px">
<el-form label-width="80px" inline>
<el-form-item label="字段名"> <el-form-item label="字段名">
<el-input v-model="queryParam.fieldName" class="mr input" clearable placeholder="输入名称搜索" <el-input v-model="queryParam.fieldName" class="mr input" clearable placeholder="输入名称搜索"
size="small" size="small"
...@@ -9,94 +8,165 @@ ...@@ -9,94 +8,165 @@
</el-form-item> </el-form-item>
<el-form-item label="字段类型"> <el-form-item label="字段类型">
<el-input v-model="queryParam.fieldType" class="mr input" clearable placeholder="输入名称搜索" <el-input v-model="queryParam.fieldType" class="mr input" clearable placeholder="输入名称搜索"
size="small"/> size="small"
/>
</el-form-item> </el-form-item>
<el-form-item label="指标名称"> <el-form-item label="指标名称">
<el-input v-model="queryParam.fieldComment" class="mr input" clearable placeholder="输入名称搜索" <el-input v-model="queryParam.fieldComment" class="mr input" clearable placeholder="输入名称搜索"
size="small"/> size="small"
/>
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button type="primary" class="mr" icon="el-icon-search" size="mini" :loading="queryLoading" <el-button :loading="queryLoading" class="mr" icon="el-icon-search" size="mini" type="primary"
@click="queryRuleList" @click="clearPageToSearch"
> >
查询 查询
</el-button> </el-button>
<el-button type="success" class="mr" size="mini" @click="openAddruleDialog"> <el-button class="mr" size="mini" type="success" @click="addMetaFieldDialog">
新增 新增
</el-button> </el-button>
</el-form-item> </el-form-item>
</el-form> </el-form>
<el-table v-loading="queryLoading" :data="fieldList" stripe border> <el-table v-loading="queryLoading" :data="metaFieldList" border max-height="500" stripe>
<el-table-column :show-overflow-tooltip="true" align="center" label="字段名" prop="fieldName"/> <el-table-column :show-overflow-tooltip="true" align="center" label="字段名" prop="fieldName"/>
<el-table-column :show-overflow-tooltip="true" align="center" label="字段类型" prop="fieldType"/> <el-table-column :show-overflow-tooltip="true" align="center" label="字段类型" prop="fieldType"/>
<el-table-column :show-overflow-tooltip="true" align="center" label="指标名称" prop="fieldComment"/> <el-table-column :show-overflow-tooltip="true" align="center" label="指标名称" prop="fieldComment"/>
<el-table-column :show-overflow-tooltip="true" align="center" label="备注" prop="remarks"/> <el-table-column :show-overflow-tooltip="true" align="center" label="备注" prop="remarks"/>
<el-table-column label="操作" align="center" width="150" show-overflow-tooltip> <el-table-column align="center" label="操作" show-overflow-tooltip width="150">
<template slot-scope="scope"> <template slot-scope="scope">
<el-button circle icon="el-icon-edit" plain size="small" type="primary" <el-button circle icon="el-icon-edit" plain size="small" type="primary"
@click.stop="editRuleDialog(scope.row)" @click.stop="editMetaFieldDialog(scope.row)"
></el-button> ></el-button>
<el-button circle icon="el-icon-delete" plain size="small" type="danger" <el-button circle icon="el-icon-delete" plain size="small" type="danger"
@click.stop="deleteRule(scope.row)" @click.stop="deleteMetaRule(scope.row)"
></el-button> ></el-button>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<pagination v-show="queryParam.total > 0" :total="queryParam.total" :page.sync="queryParam.pageNum" <pagination v-show="queryParam.total > 0" :limit.sync="queryParam.pageSize" :page.sync="queryParam.pageNum"
:limit.sync="queryParam.pageSize" @pagination="queryRuleList" :total="queryParam.total" @pagination="queryMetaFieldList"
/> />
<!--字段增改--> <!--字段增改-->
<el-dialog :title="dialogData.title" @open="openDialog" :visible.sync="dialogData.show" width="400px" <el-dialog :close-on-click-modal="false" :title="metaFieldDialog.title" :visible.sync="metaFieldDialog.show"
:close-on-click-modal="false" append-to-body append-to-body width="400px"
> >
<el-form ref="fieldForm" :model="dialogData.data" label-width="80px"> <el-form ref="metaFieldForm" :model="metaFieldDialog.data" label-width="80px">
<el-form-item required prop="name" label="字段名"> <el-form-item label="字段名" prop="fieldName" required>
<el-input v-model="dialogData.data.name" size="small"/> <el-input v-model="metaFieldDialog.data.fieldName" size="small"/>
</el-form-item> </el-form-item>
<el-form-item required label="字段类型" prop="type"> <el-form-item label="字段类型" prop="fieldType" required>
<el-select @change="typeChange" size="small" v-model="dialogData.data.type" style="width: 160px"> <el-select v-model="metaFieldDialog.data.fieldType" size="small" style="width: 160px">
<el-option v-for="item in typeDict" :key="item" :label="item" :value="item"/>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item required label="指标名称" prop="mode"> <el-form-item label="指标名称" prop="fieldComment" required>
<el-select @change="modeChange" size="small" v-model="dialogData.data.mode" style="width: 160px"> <el-input v-model="metaFieldDialog.data.fieldComment" size="small"/>
<el-option v-for="item in modeDict" :key="item" :label="item" :value="item"/>
</el-select>
</el-form-item> </el-form-item>
<el-form-item prop="remarks" label="备注"> <el-form-item label="备注" prop="remarks">
<el-input v-model="dialogData.data.remarks" placeholder="备注" type="textarea"/> <el-input v-model="metaFieldDialog.data.remarks" placeholder="备注" type="textarea"/>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div slot="footer" class="dialog-footer"> <div slot="footer" class="dialog-footer">
<el-button type="primary" @click="testRule(dialogData.data)">规则测试</el-button> <el-button type="primary" @click="submitMetaField">确 定</el-button>
<el-button type="primary" @click="submitRule">确 定</el-button> <el-button @click="metaFieldDialog.show = false">取 消</el-button>
<el-button @click="dialogData.show = false">取 消</el-button>
</div> </div>
</el-dialog> </el-dialog>
</div> </div>
</div>
</template> </template>
<script> <script>
import * as DataField from '@/api/emport/DataField' import * as DataField from '@/api/emport/DataField'
import * as DataImport from '@/api/emport/DataImport'
import * as DataRule from '@/api/emport/DataRule' import * as DataRule from '@/api/emport/DataRule'
import * as DataTemplate from '@/api/emport/DataTemplate'
import * as DictData from '@/api/emport/DictData'
import * as ExcelData from '@/api/emport/ExcelData'
export default { export default {
name: "Field", name: 'Field',
data(){ data() {
return{ return {
queryParam:{ queryParam: {
pageNum: 1, pageNum: 1,
pageSize: 20, pageSize: 20,
total: 0,
fieldName: '', fieldName: '',
fieldType: '', fieldType: '',
fieldComment: '' fieldComment: ''
}, },
queryLoading: false, queryLoading: false,
fieldList:[], metaFieldList: [],
metaFieldDialog: {
title: '',
show: false,
data: {}
}
}
},
created() {
this.queryMetaFieldList()
},
methods: {
// 查询元字段信息
queryMetaFieldList() {
this.queryLoading = true
DataField.queryMetaField({ ...this.queryParam }).then(res => {
if (res.code === 200) {
this.metaFieldList = res.rows
this.queryParam.total = res.total
}
}).finally(_ => this.queryLoading = false)
},
// 清除分页再查询
clearPageToSearch() {
this.queryParam.total = 0
this.queryParam.pageNum = 1
this.queryMetaFieldList()
},
// 打开添加弹框
addMetaFieldDialog() {
this.metaFieldDialog.title = '新增字段'
this.metaFieldDialog.data = {}
this.metaFieldDialog.show = true
},
// 打开编辑弹框
editMetaFieldDialog(data) {
this.metaFieldDialog.title = '编辑字段'
this.metaFieldDialog.data = { ...data }
this.metaFieldDialog.show = true
},
// 删除字段
deleteMetaRule(data) {
this.$confirm(`是否删除字段 ${data.fieldName} ?`, '删除',
{
type: 'warning',
confirmButtonText: '确定',
cancelButtonText: '取消',
beforeClose: (action, instance, done) => {
if (action === 'confirm') {
DataField.deleteMetaField(data.id).then(res => {
done()
this.queryMetaFieldList()
})
} else {
done()
}
}
}
)
},
// 提交字段信息
submitMetaField() {
this.$refs.metaFieldForm.validate(validate => {
if (validate) {
if (this.metaFieldDialog.title === '新增字段') {
DataField.addMetaField(this.metaFieldDialog.data).then(res => {
this.metaFieldDialog.show = false
this.queryMetaFieldList()
})
} else {
DataRule.updateRule(this.metaFieldDialog.data).then(res => {
this.metaFieldDialog.show = false
this.queryMetaFieldList()
})
}
}
})
} }
} }
} }
...@@ -112,14 +182,14 @@ export default { ...@@ -112,14 +182,14 @@ export default {
flex-wrap: wrap; flex-wrap: wrap;
align-items: center; align-items: center;
.mr { .mr {
margin-right: 8px; margin-right: 8px;
margin-left: 0; margin-left: 0;
margin-bottom: 8px; margin-bottom: 8px;
} }
.input { .input {
width: 250px; width: 250px;
} }
} }
</style> </style>
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