This commit is contained in:
2019-04-08 10:11:47 +08:00
parent b67e616340
commit abc220eb35
10 changed files with 93 additions and 49 deletions

View File

@@ -95,13 +95,14 @@
<!--<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>--> <!--<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>-->
<script type="module"> <script type="module">
import { logout } from './api/user.js' import { logout } from './api/user.js'
let { platList } = plat
/*import meta from './api/meta.js'*/ /*import meta from './api/meta.js'*/
//import { getServiceInfo, getServiceDetail, getServiceList } from './api/meta.js' //import { getServiceInfo, getServiceDetail, getServiceList } from './api/meta.js'
var vm = new Vue({ var vm = new Vue({
el: ".container-fluid", el: ".container-fluid",
data: { data: {
sysPlat: red.getData("sysPlat"), sysPlat: red.getData('sysPlat'),
sysPlats: red.getData("sysPlats"), sysPlats: red.getData('sysPlats'),
pages: [ pages: [
/*{name: "DDL", url: "/qtask/ddl.html"},*/ /*{name: "DDL", url: "/qtask/ddl.html"},*/
{name: "MetaData", url: "/meta", nodes: [ {name: "MetaData", url: "/meta", nodes: [
@@ -132,16 +133,9 @@
{name: "关于", url: "/single/about.html"} {name: "关于", url: "/single/about.html"}
], ],
menus: red.getData("menus", {name: "MetaData", url: "/meta", nodes: [ menus: {},
/*{url:"/metadata/metatable/list.html", name:"TableList"},*/ page: {},
{url:"/metadata/metatable/metaTable.html", name:"MetaTable"}, pageId: ''
/*{url:"/metadata/metaLink.html", name:"MetaLink"},*/
{url:"/metadata/metaService.html", name:"MetaService"},
{url:"/metadata/dataList.html", name:"数据查询"},
]
}),
page: red.getData("page", {url:"/qtask/list.html", name:"QTask"}),
pageId: red.getData("pageId", "QTask")
}, },
watch: { watch: {
page: function () { page: function () {
@@ -174,6 +168,9 @@
} }
}, },
mounted: function () { mounted: function () {
this.menus = red.getData('menus', this.pages[0]['nodes'])
this.page = red.getData('page', this.menus[0])
this.pageId = red.getData("pageId", this.page['mame'])
//绑定事件 //绑定事件
$('.menu .nav').on('click', 'li:not(.nav-parent) > a', function() { $('.menu .nav').on('click', 'li:not(.nav-parent) > a', function() {
var $this = $(this); var $this = $(this);

View File

@@ -52,8 +52,8 @@
<table class="table table-bordered table-hover" style="width: 100%"> <table class="table table-bordered table-hover" style="width: 100%">
<thead> <thead>
<tr> <tr>
<th v-for="field in cfg.cols" <th v-for="field in cfg.shows"
v-text="field.label" v-text="getFieldLabel(field.col)"
:class="{'sort':field.order>0, 'sort-up':field.col==order.col && order.desc==1, 'sort-down':field.col==order.col && order.desc!=1}" :class="{'sort':field.order>0, 'sort-up':field.col==order.col && order.desc==1, 'sort-down':field.col==order.col && order.desc!=1}"
@click="sortEvent(field.col)" @click="sortEvent(field.col)"
> >
@@ -63,13 +63,10 @@
</thead> </thead>
<tbody> <tbody>
<tr v-for="row in list.rows"> <tr v-for="row in list.rows">
<td v-for="field in cfg.cols" v-title="dealField(row, field.col)" v-text="dealField(row, field.col)"></td> <td v-for="field in cfg.shows" v-title="dealField(row, field.col)" v-text="dealField(row, field.col)"></td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<div>
<p v-text="list['rows'][0]"></p>
</div>
</div> </div>
<div> <div>
<ul class="pager pull-right" style="margin: 5px 10px"> <ul class="pager pull-right" style="margin: 5px 10px">
@@ -100,7 +97,8 @@
el:".data-list", el:".data-list",
data: { data: {
cfg:{ cfg:{
cols: [], items:[],
shows: [],
filters: [] filters: []
}, },
services:[], services:[],
@@ -175,6 +173,7 @@
}; };
getDataList(fbean, json => { getDataList(fbean, json => {
console.log(json)
vm.list = json; vm.list = json;
}); });
}, },
@@ -244,7 +243,7 @@
} else if (bean[field] == "unknown") { //特殊值处理 } else if (bean[field] == "unknown") { //特殊值处理
str = ""; str = "";
} else { } else {
str = bean[field] || ""; str = bean[field.replace('$', '.')] || "";
} }
return str; return str;
@@ -257,7 +256,24 @@
vm.order.desc = 1; vm.order.desc = 1;
} }
vm.findList(); vm.findList();
} },
getFieldLabel: function (col) {
if (!col) {
return "";
}
var items = this.cfg.items[col.split("$")[0]];
if (items) {
return items[col.split("$")[1]]['label']
/*for (var i = 0; i < items.items.length; i++) {
if (tableInfo.items[i].name == col.split("$")[1]) {
return tableInfo.items[i].label;
}
}*/
}
return '';
},
}, },
mounted() { mounted() {
this.serviceList(); this.serviceList();

View File

@@ -37,9 +37,9 @@
<span class="input-group-btn" style="padding-left: 20px"> <span class="input-group-btn" style="padding-left: 20px">
<button @click="status=3" :class="['btn',{'btn-primary':status==3}]" type="button"> 导出配置</button> <button @click="status=3" :class="['btn',{'btn-primary':status==3}]" type="button"> 导出配置</button>
</span> </span>
<span class="input-group-btn"> <!--<span class="input-group-btn">
<button @click="status=4" :class="['btn',{'btn-primary':status==4}]" type="button"> 导入配置</button> <button @click="status=4" :class="['btn',{'btn-primary':status==4}]" type="button"> 导入配置</button>
</span> </span>-->
<span class="input-group-btn" style="padding-left: 30px"> <span class="input-group-btn" style="padding-left: 30px">
<button @click="save()" :class="['btn',{'btn-primary':status!=0},{'disabled':status==0}]" type="button"> 保存</button> <button @click="save()" :class="['btn',{'btn-primary':status!=0},{'disabled':status==0}]" type="button"> 保存</button>
@@ -450,14 +450,14 @@
*/ */
save: function () { save: function () {
if (vm.status == 1 && vm.itemSort.length > 0) { if (vm.status == 1 && vm.itemSort.length > 0) {
red.post("/meta/itemsort", { red.postX("/meta/itemsort", {
serviceKey: vm.table, serviceKey: vm.table,
items: JSON.stringify(vm.itemSort) items: JSON.stringify(vm.itemSort)
}); });
} }
else if (vm.status == 2 && vm.itemEdit.length > 0) { else if (vm.status == 2 && vm.itemEdit.length > 0) {
red.post("/meta/itemupdate", { red.postX("/meta/itemupdate", {
serviceKey: vm.table, serviceKey: vm.table,
items: JSON.stringify(vm.itemEdit) items: JSON.stringify(vm.itemEdit)
}); });
@@ -468,16 +468,16 @@
var dataStr = JSON.stringify(red.replace$(items[vm.status])); var dataStr = JSON.stringify(red.replace$(items[vm.status]));
red.post(urls[vm.status], { red.postX(urls[vm.status], {
serviceKey: this.service, serviceKey: this.service,
items: dataStr items: dataStr
}); });
} }
else if (vm.status == 5) { else if (vm.status == 5) {
var dataStr = JSON.stringify(red.replace$(vm.serviceInfo.shows)); let dataStr = JSON.stringify(red.replace$(vm.serviceInfo.shows));
console.log("dataStr", dataStr); console.log("dataStr", dataStr);
red.post("/meta/showsort", { red.postX("/meta/showsort", {
serviceKey: vm.service, serviceKey: vm.service,
items: dataStr items: dataStr
}); });
@@ -490,7 +490,7 @@
filterData.push(this.filterMap[this.filterArr[i]]); filterData.push(this.filterMap[this.filterArr[i]]);
} }
red.post("/meta/filter_update", { red.postX("/meta/filter_update", {
serviceKey: vm.service, serviceKey: vm.service,
filters: JSON.stringify(red.replace$(filterData)) filters: JSON.stringify(red.replace$(filterData))
}); });
@@ -499,7 +499,7 @@
else if (vm.status == 7) { else if (vm.status == 7) {
console.log(vm.row); console.log(vm.row);
red.post("/meta/dbplatupdate", vm.row) red.postX("/meta/dbplatupdate", vm.row)
} }
else { else {

View File

@@ -56,7 +56,7 @@
<th>附加属性</th> <th>附加属性</th>
<th>备注</th> <th>备注</th>
</tr> </tr>
<tr v-for="(item, index) in meta.items"> <tr v-for="(item, index) in meta.items" class="item">
<td v-show="status==3"><input type="checkbox" v-model="meta.exports" :value="item.name" class="form-control"></td> <td v-show="status==3"><input type="checkbox" v-model="meta.exports" :value="item.name" class="form-control"></td>
<td v-show="status==4"><input type="checkbox" v-model="meta.imports" :value="item.name" class="form-control"></td> <td v-show="status==4"><input type="checkbox" v-model="meta.imports" :value="item.name" class="form-control"></td>
<td v-show="status==5"><input type="checkbox" v-model="meta.shows" :value="item.name" class="form-control"></td> <td v-show="status==5"><input type="checkbox" v-model="meta.shows" :value="item.name" class="form-control"></td>
@@ -395,7 +395,7 @@
setMove: function () { setMove: function () {
if (this.status == 1) { if (this.status == 1) {
$('#sortableList,table>tbody').sortable({ $('#sortableList,table>tbody').sortable({
selector: '.list-group-item, tr', selector: '.item', // '.list-group-item, tr',
finish: function (e) { finish: function (e) {
var rows = e.list; var rows = e.list;
vm.itemSort = []; vm.itemSort = [];
@@ -487,15 +487,17 @@
* *
*/ */
save: function () { save: function () {
console.log(this.itemSort)
if (vm.status == 1 && vm.itemSort.length > 0) { if (vm.status == 1 && vm.itemSort.length > 0) {
red.post("/meta/itemsort", { console.log(this.itemSort)
red.postX("/meta/itemsort", {
serviceKey: vm.table, serviceKey: vm.table,
items: JSON.stringify(vm.itemSort) items: JSON.stringify(vm.itemSort)
}); });
} }
else if (vm.status == 2 && vm.itemEdit.length > 0) { else if (vm.status == 2 && vm.itemEdit.length > 0) {
red.post("/meta/itemupdate", { red.postX("/meta/itemupdate", {
serviceKey: vm.table, serviceKey: vm.table,
items: JSON.stringify(vm.itemEdit) items: JSON.stringify(vm.itemEdit)
}); });
@@ -528,7 +530,7 @@
else if (vm.status == 7) { else if (vm.status == 7) {
console.log(vm.row); console.log(vm.row);
red.post("/meta/dbplatupdate", {metaTable: JSON.stringify(vm.row)}) red.postX("/meta/dbplatupdate", {metaTable: JSON.stringify(vm.row)})
} }
else { else {

View File

@@ -33,7 +33,13 @@ var red = {
return plat["_key"]; return plat["_key"];
}, },
getPlatToken: function() { getPlatToken: function() {
var plat = red.getData("sysPlat") || {}; let plat = red.getData("sysPlat");
if (!plat) {
red.showMsg({type:'error', placement: 'center', msg: '登陆过期,请前往登陆'});
setTimeout(function () {
location.href = "/user/login.html";
}, 2000);
}
return plat["token"]; return plat["token"];
}, },
getJSON: function (url, params, callback) { getJSON: function (url, params, callback) {
@@ -69,12 +75,12 @@ var red = {
}) })
}, },
postX(url, params) { postX(url, params) {
params["platToken"] = red.getPlatToken()
return new Promise(resolve => { return new Promise(resolve => {
axios({ axios({
url, url,
method: 'post', method: 'post',
params, params,
}).then(res => { }).then(res => {
let data = res.data || {} let data = res.data || {}
red.loginCheck(data) red.loginCheck(data)
@@ -82,9 +88,10 @@ var red = {
red.showMsg({type:"error", msg: data.message}) red.showMsg({type:"error", msg: data.message})
return; return;
} }
if (data.code == 0) { else if (data.code == 0) {
data = data.body data = data.body
} }
red.showMsg()
resolve(data) resolve(data)
}); });
}) })
@@ -165,8 +172,8 @@ var red = {
return fmt; return fmt;
}, },
loginCheck: function (json) { loginCheck: function (json) {
if (json && json["code"] == -2) { if (json && (json['code'] == -2 || json['referid'])) {
red.showMsg({type:"error", placement: "center", msg: "登陆过期,请前往登陆"}); red.showMsg({type:'error', placement: 'center', msg: '登陆过期,请前往登陆'});
setTimeout(function () { setTimeout(function () {
location.href = "/user/login.html"; location.href = "/user/login.html";
}, 2000); }, 2000);

View File

@@ -1,12 +1,17 @@
package net.tccn.dbq; package net.tccn.dbq;
import net.tccn.base.Kv;
import net.tccn.base.PageBean; import net.tccn.base.PageBean;
import net.tccn.dbq.fbean.FBean; import net.tccn.dbq.fbean.FBean;
import net.tccn.dbq.jdbc.api.DbAccount;
import net.tccn.dbq.jdbc.api.DbKit;
import net.tccn.dbq.parser.ParseMysql; import net.tccn.dbq.parser.ParseMysql;
import net.tccn.dbq.parser.Parser; import net.tccn.dbq.parser.Parser;
import net.tccn.meta.MetaKit;
import net.tccn.meta.MetaService;
import net.tccn.meta.MetaTable;
import java.util.Arrays; import java.util.List;
import java.util.Map;
public class DbExecutors { public class DbExecutors {
private final static Parser PARSER = new ParseMysql(); private final static Parser PARSER = new ParseMysql();
@@ -15,8 +20,20 @@ public class DbExecutors {
String[] sqls = PARSER.parse(fBean); String[] sqls = PARSER.parse(fBean);
//当前的业务 => 获取主表 信息 => 数据源信息 => 数据源对象 => 创建数据工具对象 => 查询数据
MetaService metaService = MetaKit.getMetaService(fBean.getName());
MetaTable mainTable = MetaKit.getMetaTableByAlias(metaService.getTable());
return PageBean.by(Arrays.asList(Kv.of("findSql:", sqls[0]).set("countSql", sqls[1]) ), 0); DbAccount dbAccount = DbAccount.dao.findByKey(mainTable.getDbPlatId());
DbKit dbKit = new DbKit(dbAccount);
System.out.println("countSql: " + sqls[0]);
System.out.println("findSql: " + sqls[1]);
Integer count = dbKit.queryColumn(sqls[0], int.class);
List<Map> list = dbKit.findList(sqls[1], Map.class);
return PageBean.by(list, count);
} }
} }

View File

@@ -42,17 +42,18 @@ public class DbSourceMysql implements DbSource {
Map row = new HashMap(); Map row = new HashMap();
for (int i = 1; i <= count; i++) { for (int i = 1; i <= count; i++) {
String columnTypeName = metaData.getColumnTypeName(i); String columnTypeName = metaData.getColumnTypeName(i);
String columnName = metaData.getColumnName(i); //String columnName = metaData.getColumnName(i);
row.put(columnName, null); String columnLabel = metaData.getColumnLabel(i);
row.put(columnLabel, null);
if (rs.getObject(i) != null) { if (rs.getObject(i) != null) {
switch (columnTypeName) { switch (columnTypeName) {
case "DATETIME": case "DATETIME":
case "TIMESTAMP": case "TIMESTAMP":
case "DATE": case "DATE":
row.put(columnName, rs.getTimestamp(i).getTime()); break; row.put(columnLabel, rs.getTimestamp(i).getTime()); break;
default: default:
row.put(columnName, rs.getObject(i)); row.put(columnLabel, rs.getObject(i));
} }
} }
} }

View File

@@ -134,7 +134,7 @@ public class ParseMysql implements Parser {
if (!isEmpty.test(shows)) { if (!isEmpty.test(shows)) {
shows.forEach(x -> { shows.forEach(x -> {
//buf.append("`").append("x").append("`").append(","); //buf.append("`").append("x").append("`").append(",");
bufSelect.append(x).append(","); bufSelect.append(x).append(" as ").append("'").append(x.replace(".", "\\.")).append("',");
}); });
bufSelect.deleteCharAt(bufSelect.length() - 1); bufSelect.deleteCharAt(bufSelect.length() - 1);
} else { } else {

View File

@@ -157,8 +157,10 @@ public class MetadataService extends BaseService { //arango
public List<String> showSort(String serviceKey , List<String> items, @RestParam(name = "platToken") String token) { public List<String> showSort(String serviceKey , List<String> items, @RestParam(name = "platToken") String token) {
if (items == null || items.size() == 0) return null; if (items == null || items.size() == 0) return null;
MetaKit.showUpdate.apply(serviceKey, items); MetaService metaService = MetaKit.getMetaService(serviceKey);
metaService.setShows(items);
metaService.update();
return items; return items;
} }

View File

@@ -122,6 +122,8 @@ public class RunTest<T> {
//System.out.println("a$id".split("[$]")[0]); //System.out.println("a$id".split("[$]")[0]);
System.out.println("x.abx".replace(".", "\\."));
} }
@Test @Test