支持查询条件自定义名称

This commit is contained in:
2019-04-24 14:14:39 +08:00
parent 211e59ea3b
commit 0527faf25e
7 changed files with 104 additions and 75 deletions

View File

@@ -62,6 +62,10 @@ const meta = {
shows = red.replace$(shows);
return red.postX('/meta/showsort', {name, shows: JSON.stringify(shows)})
},
filterSave({name, filters}) {
filters = red.replace$(filters);
return red.postX('/meta/filter_update', {name, filters: JSON.stringify(filters)})
},
// Meta-Table
itemSort({alias, items}) {

View File

@@ -90,7 +90,7 @@
</div>
<!-- 实体字段信息 -->
<div class="col-md-5" style="padding-left: 0px;">
<div class="col-md-4" style="padding-left: 0px;">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 字段信息</div>
<table class="table table-bordered">
<tr>
@@ -98,8 +98,8 @@
<th v-show="status==1"></th>
<th>字段名</th>
<th>中文名</th>
<th>数据类型</th>
<!--<th>输入类型</th>
<!--<th>数据类型</th>
<th>输入类型</th>
<th>附加属性</th>
<th>备注</th>-->
</tr>
@@ -111,15 +111,15 @@
<td v-text="item.name" style="background-color: rgb(235, 235, 228);"></td>
<td v-text="item.label"></td>
<td v-text="item.type"></td>
<!--<td v-text="item.inType"></td>
<!--<td v-text="item.type"></td>
<td v-text="item.inType"></td>
<td v-text="item.inExt"></td>
<td v-text="item.remark"></td>-->
</tr>
</table>
</div>
<div class="col-md-5" style="padding-left: 0px;padding-right: 0px;">
<div class="col-md-6" style="padding-left: 0px;padding-right: 0px;">
<!-- shows -->
<div id="show" v-show="status==5">
<div style="padding-left: 10px;background-color: #ccc;width: 100%"> 列表配置</div>
@@ -138,7 +138,7 @@
<input name="label" :value="item.label" type="hidden">
</td>
<td v-text="item.col" style="background-color: rgb(235, 235, 228);"></td>
<td ><input v-model="item.label" class="form-control" style="width: 100px;padding: 0px"></td>
<td style="padding: 1px;"><input v-model="item.label" class="form-control" style="width: 130px;padding: 0px"></td>
</tr>
</table>
</div>
@@ -208,20 +208,20 @@
<th>支持查询类型</th>
</tr>
</thead>
<tr v-for="(item, index) in filterArr">
<tr v-for="item in serviceInfo.filters">
<td class="icon icon-move">
<input name="name" :value="item" type="hidden">
<input type="hidden" name="item" :value="JSON.stringify(item)">
</td>
<td v-text="item" style="background-color: rgb(235, 235, 228);"></td>
<td v-text="">{{getFieldLabel(item)}}</td>
<td>
<td v-text="item.name" style="background-color: rgb(235, 235, 228);"></td>
<td style="padding: 1px;"><input v-model="item.label" class="form-control" style="width: 130px;padding: 0px"></td>
<td style="padding: 1px;">
<label>
<input type="checkbox" v-model="filterMap[item].checked" value="1"> 展示
<input type="checkbox" v-model="item.checked" value="1"> 展示
</label>
</td>
<td>
<td style="padding: 1px;">
<label class="checkbox-inline" v-for="c in filterCate">
<input type="checkbox" v-model="filterMap[item].filterType" :value="c"> {{c}}
<input type="checkbox" v-model="item.filterType" :value="c"> {{c}}
</label>
</td>
</tr>
@@ -274,7 +274,7 @@
</row>
<script>
let { getServiceInfo, getServiceDetail, getServiceList, tableLinkList, serviceSave, showSave } = meta;
let { getServiceInfo, getServiceDetail, getServiceList, tableLinkList, serviceSave, showSave, filterSave } = meta;
let { showOk } = red
var vm = new Vue({
@@ -294,7 +294,7 @@
shows: [],
exports: [],
imports: [],
filters: [{name:"", filterType:[""]}]
filters: [{name: '', label: '', filterType: ['']}]
},
serviceDetail: {tables: {a:{items:[]}}},
@@ -316,8 +316,10 @@
services: [],//业务列表
service: "", //页面选择的业务类型
table: "",//表别名
//filter
filterArr:[],
filterMap:{},
//filterMap:{},
createRow: {},
tables: [],
@@ -339,19 +341,17 @@
this.loadDetail(v);
},
serviceInfo: function(v) {
let arr = [];
let map = {};
v["filters"].forEach(function (f) {
arr.push(f["name"]);
map[f["name"]] = f;
//filters
let filterArr = [];
v['filters'].forEach(function (f) {
filterArr.push(f["name"]);
});
this.filterMap = map;
this.filterArr = arr;
this.filterArr = filterArr;
//shows
let showFields = []
for (let i in v.shows) {
showFields.push(v.shows[i]['col'])
for (let i in v['shows']) {
showFields.push(v['shows'][i]['col'])
}
this.showFields = showFields
},
@@ -366,23 +366,47 @@
sheet: function (v) {
this.table = v;
},
filterArr: function (v) {
let map = {};
for(j in v) {
let k = v[j];
map[k] = this.filterMap[k];
if (!map[k]) {
for (i in vm.serviceInfo.filters) {
if (vm.serviceInfo.filters[i]["name"] == k) {
map[k] = vm.serviceInfo.filters[i];
filterArr: function (v) { // 添加或删除选项触发
let filters = this.serviceInfo.filters
//添加新增的
a:for (let i in v) {
b:for (let j in filters) {
if (v[i] == filters[j]['name']) {
if (!filters[j]['label']) {
filters[j]['label'] = this.getFieldLabel(v[i])
}
continue a
}
}
if (!map[k]) {
map[k] = {name: k, filterType:["EQUAL"], checked: false};//构造filter 对象
let label = this.getFieldLabel(v[i])
filters.push({name: v[i], label, filterType:["EQUAL"], checked: false})//构造filter 对象
}
// 去除删除的
let _filters = []
a:for(let i in filters) {
b:for (let j in v) {
if (filters[i]['name'] == v[j]) {
_filters.push(filters[i])
continue a;
}
}
}
this.filterMap = map;
this.serviceInfo.filters = _filters
/*for(j in v) {
let k = v[j];
for (i in vm.serviceInfo.filters) {
if (vm.serviceInfo.filters[i]["name"] == k) {
map[k] = vm.serviceInfo.filters[i];
}
}
if (!map[k]) { //新增
let label = this.getFieldLabel(k)
map[k] = {name: k, label, filterType:["EQUAL"], checked: false};//构造filter 对象
}
}*/
//this.filterMap = map;
//vm.serviceInfo.filters = map;
},
showFields(v) {
let shows = this.serviceInfo.shows
@@ -448,6 +472,15 @@
return '';
},
setMove: function () {
$(`#filter>table>tbody,
#show>table>tbody,
#show>table>tbody`).sortable({
selector: 'tr',
trigger: '.icon',
finish: function (e) {}
});
if (this.status == 1) {
$('#sortableList,table>tbody').sortable({
selector: '.list-group-item, tr',
@@ -463,11 +496,11 @@
});
}
else if (this.status == 5) {
$('#show>table>tbody').sortable({
/*$('#show>table>tbody').sortable({
selector: 'tr',
trigger: '.icon',
finish: function (e) {}
});
});*/
} else if (this.status == 4) {
$('#import>table>tbody').sortable({
selector: 'tr',
@@ -485,10 +518,10 @@
$('#export>table>tbody').sortable({
selector: 'tr',
finish: function (e) {
var rows = e.list;
var shows = [];
for (var i = 0; i < rows.length; i++) {
var item = $(rows[i]).find("input[name='name']").val();
let rows = e.list;
let shows = [];
for (let i = 0; i < rows.length; i++) {
let item = $(rows[i]).find("input[name='name']").val();
shows.push(item);
}
vm.serviceInfo.exports = shows;
@@ -496,18 +529,11 @@
});
}
else if (this.status == 6) {
$('#filter>table>tbody').sortable({
/*$('#filter>table>tbody').sortable({
selector: 'tr',
finish: function (e) {
var rows = e.list;
var filterArr = [];
for (var i = 0; i < rows.length; i++) {
var item = $(rows[i]).find("input[name='name']").val();
filterArr.push(item);
}
vm.filterArr = filterArr;
}
});
trigger: '.icon',
finish: function (e) {}
});*/
}
else {
@@ -573,7 +599,14 @@
}
else if (vm.status == 6) {
let filterData = [];
let doms = $("#filter>table>tbody>tr")
let filters = []
for (let i = 0; i < doms.length; i++) {
let item = $(doms[i]).find("input[name='item']").val();
filters.push(JSON.parse(item))
}
filterSave({name: this.service, filters}).then(res => red.showOk())
/*let filterData = [];
for (i in this.filterArr) {
filterData.push(this.filterMap[this.filterArr[i]]);
@@ -582,7 +615,7 @@
red.postX("/meta/filter_update", {
serviceKey: vm.service,
filters: JSON.stringify(red.replace$(filterData))
}).then(() => showOk());
}).then(() => showOk());*/
}

View File

@@ -94,9 +94,6 @@
},
},
mounted: function () {
red.dbPlats(function (json) {
vm.dbPlats = json;
});
this.tableList();
}

View File

@@ -139,6 +139,7 @@
<script>
let {getTableList, tableInfo, itemSort, itemUpdate} = meta;
let {showOk} = red
let {dbList} = plat
var vm = new Vue({
el: ".meta-list",
@@ -422,10 +423,9 @@
},
mounted: function (){
//dbPlats 列表初始化
red.dbPlats(function (json) {
vm.dbPlats = json;
});
dbList().then(res => {
this.dbPlats = res.rows;
})
this.tableList();

View File

@@ -147,11 +147,6 @@ var red = {
callback(json);
});
},
dbPlats: function(callBack) {
red.getJSON("/meta/db_plat_list", {}, function (json) {
callBack(json);
});
},
putAll: function(t, s) {
t = t || {};
@@ -191,8 +186,8 @@ var red = {
}
},
replaceAll: function (d, s, t) {
var reg=new RegExp(s,"g"); //创建正则RegExp对象
var str = JSON.stringify(d);
let reg=new RegExp(s,"g"); //创建正则RegExp对象
let str = JSON.stringify(d);
str = str.replace(reg, t)
return JSON.parse(str);
},

View File

@@ -302,7 +302,7 @@ public class MetaKit {
.findFirst()
.ifPresent(y -> {
filter.set("name", x.get("name"));
filter.set("label", y.getLabel());
filter.set("label", x.get("label") != null ? x.get("label") : y.getLabel());
List<Kv> types = new ArrayList<>();
List<String> list = (List) x.get("filterType");
list.forEach(t -> {

View File

@@ -196,11 +196,11 @@ public class MetadataService extends BaseService { //arango
}
@RestMapping(name = "filter_update", comment = "查询配置修改")
public JBean filterUpdate(@RestParam(name = "serviceKey") String serviceKey,
public JBean filterUpdate(@RestParam(name = "name") String name,
@RestParam(name = "filters") String filters,
@RestParam(name = "platToken") String token) {
List _filters = gson.fromJson(filters, List.class);
MetaService metaService = MetaKit.getMetaService(serviceKey, token);
MetaService metaService = MetaKit.getMetaService(name, token);
metaService.setFilters(_filters);
metaService.update();