1、新增 “业务预览-数据保存”功能逻辑

2、修改保存数据解析sql的bug
This commit is contained in:
2019-06-13 17:45:17 +08:00
parent 60566a69c9
commit d40676f724
5 changed files with 54 additions and 28 deletions

View File

@@ -105,8 +105,12 @@ const meta = {
} }
}, },
del({name, id}) { dataDel({name, id}) {
return red.postX('/data/del', {name, data: JSON.stringify({id})}) return red.postX('/data/del', {name, data: JSON.stringify({id})})
},
dataSave({name, data}) {
return red.postX('/data/save', {name, data: JSON.stringify(data)})
} }
} }

View File

@@ -76,7 +76,7 @@
<tr> <tr>
<!-- 'sort':field.order>0 --> <!-- 'sort':field.order>0 -->
<th v-for="field in cfg.shows" <th v-for="field in cfg.shows"
v-if="field.fmt != 'HIDDEN'" v-if="field.inType != 'HIDDEN'"
v-text="field.label || getFieldLabel(field.col)" v-text="field.label || getFieldLabel(field.col)"
:class="{'sort':1, 'sort-up':field.col==order.col && order.desc==1, 'sort-down':field.col==order.col && order.desc!=1}" :class="{'sort':1, 'sort-up':field.col==order.col && order.desc==1, 'sort-down':field.col==order.col && order.desc!=1}"
@click="sortEvent(field.col)"></th> @click="sortEvent(field.col)"></th>
@@ -89,7 +89,7 @@
<td v-for="field in cfg.shows" v-title="dealFieldFmt(row, field.col)" v-text="dealFieldFmt(row, field.col)"></td> <td v-for="field in cfg.shows" v-title="dealFieldFmt(row, field.col)" v-text="dealFieldFmt(row, field.col)"></td>
--> -->
<td v-for="field in cfg.shows" <td v-for="field in cfg.shows"
v-if="field.fmt != 'HIDDEN'" v-if="field.inType != 'HIDDEN'"
v-title="dealFieldFmt(row, field)" v-title="dealFieldFmt(row, field)"
v-html="dealFieldFmt(row, field)"></td> v-html="dealFieldFmt(row, field)"></td>
<td> <td>
@@ -184,15 +184,15 @@
<div class="modal-body" style="padding-right: 50px"> <div class="modal-body" style="padding-right: 50px">
<form class="form-horizontal"> <form class="form-horizontal">
<div class="col-sm-6" v-for="item in cfg.edits"> <div class="col-sm-6" v-for="item in cfg.edits">
<div class="form-group"> <div v-show="item.inType != 'HIDDEN'" class="form-group">
<label class="col-sm-5" v-text="item.label"></label> <label class="col-sm-5" v-text="item.label"></label>
<div class="col-sm-7"> <div class="col-sm-7">
<input v-if="item.inType == 'INPUT' || item.inType == '' || !item.inType" v-model="detailData[item.col]" class="form-control" :placeholder="`请输入 ${item.label}`"> <input v-if="!item.inType || item.inType == 'INPUT' || item.inType == '' || !item.inType" v-model="detailData[item.col]" class="form-control" :placeholder="`请输入 ${item.label}`">
<input v-if="item.inType == 'INPUT_DT'" v-model="detailData[item.col]" class="form-control" :placeholder="`请输入 ${item.label}`"> <input v-if="item.inType == 'INPUT_DT'" v-model="detailData[item.col]" class="form-control" :placeholder="`请输入 ${item.label}`">
<select v-if="item.inType == 'SELECT_EXT'" v-model="detailData[item.col]" class="form-control"> <select v-if="item.inType == 'DICT'" v-model="detailData[item.col]" class="form-control">
<option value="选项一">选项一</option> <option value="1">选项一</option>
<option value="选项二">选项二</option> <option value="2">选项二</option>
<option value="山东省">山东省</option> <option value="3">山东省</option>
<!-- <!--
<option v-for="x in inTypes" :value="x">{{x}}</option> <option v-for="x in inTypes" :value="x">{{x}}</option>
--> -->
@@ -206,7 +206,7 @@
<div class="clearfix"></div> <div class="clearfix"></div>
<div class="modal-footer"> <div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">取消</button> <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
<button @click="" type="button" class="btn btn-primary">确定</button> <button @click="save()" type="button" class="btn btn-primary">确定</button>
</div> </div>
</div> </div>
</div> </div>
@@ -229,7 +229,7 @@
return {1:"男",2:"女"}[v] || "未知性别" return {1:"男",2:"女"}[v] || "未知性别"
} }
let {getServiceList, getCfg, getDataList, exportData, del} = meta let {getServiceList, getCfg, getDataList, exportData, dataDel, dataSave} = meta
let {showOk} = red let {showOk} = red
var vm = new Vue({ var vm = new Vue({
el:".data-list", el:".data-list",
@@ -320,7 +320,12 @@
else { else {
v = bean[colFmt["col"]] v = bean[colFmt["col"]]
} }
return v + " -> "+colFmt.inType
if (colFmt.inType && colFmt.inType != "INPUT") {
v += " -> "+colFmt.inType
}
return v
/*if (colFmt["fmt"]) { /*if (colFmt["fmt"]) {
let fmt = colFmt["fmt"] let fmt = colFmt["fmt"]
@@ -454,7 +459,23 @@
let name = this.service let name = this.service
let pk = this.detailData[this.cfg.pk] let pk = this.detailData[this.cfg.pk]
del({name, id: pk}).then(res => showOk) dataDel({name, id: pk}).then(res => showOk())
},
save() {
// 表单保存
let row = this.detailData
let edits = this.cfg.edits
let name = this.service
let data = {}
for (let i in edits) {
data[edits[i].col] = row[edits[i].col]
}
dataSave({name, data}).then(res => {
showOk()
$('#edit').modal('hide')
})
}, },
showInfo() { showInfo() {
$('#f-info').modal({moveable: true}) $('#f-info').modal({moveable: true})

View File

@@ -1,5 +1,6 @@
package net.tccn.dbq.jdbc.api; package net.tccn.dbq.jdbc.api;
import net.tccn.base.CfgException;
import net.tccn.base.Kv; import net.tccn.base.Kv;
import java.sql.*; import java.sql.*;
@@ -154,8 +155,7 @@ public class DbSourceMysql implements DbSource {
ps.execute(); ps.execute();
//ps.executeUpdate(); //ps.executeUpdate();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); throw new CfgException("SQL 执行失败:", sql);
} finally { } finally {
release(connection); release(connection);
} }

View File

@@ -176,6 +176,8 @@ public class ParseMysql implements Parser {
String alias = mainTable.getAlias(); String alias = mainTable.getAlias();
String[] pks = mainTable.pk(); String[] pks = mainTable.pk();
// 异常 sql update `user2` set `aa.name`='null',`aa.deptId`='null',`aa.id`='null' where `id` = '1';
// 取出有效的数据key // 取出有效的数据key
List<String> keys = data.keySet() List<String> keys = data.keySet()
.stream() .stream()
@@ -197,8 +199,8 @@ public class ParseMysql implements Parser {
StringBuffer vs = new StringBuffer();// `v1`,`v2`,`v3`, ... StringBuffer vs = new StringBuffer();// `v1`,`v2`,`v3`, ...
for (String k : keys) { for (String k : keys) {
ks.append(String.format("`%s`,", k)); ks.append(String.format("`%s`,", k.substring(k.indexOf(".") + 1)));
vs.append(String.format("'%s',", data.get(alias + "." + k))); vs.append(String.format("'%s',", data.get(k)));
} }
if (ks.length() > 0) { if (ks.length() > 0) {
ks.deleteCharAt(ks.length() - 1); ks.deleteCharAt(ks.length() - 1);
@@ -214,7 +216,7 @@ public class ParseMysql implements Parser {
String pk = pks[0]; String pk = pks[0];
for (String k : keys) { for (String k : keys) {
kvs.append(String.format("`%s`='%s',", k, data.get(alias + "." + k))); kvs.append(String.format("`%s`='%s',", k.substring(k.indexOf(".") + 1), data.get(k)));
} }
if (kvs.length() > 0) { if (kvs.length() > 0) {

View File

@@ -1,9 +1,6 @@
package net.tccn.service; package net.tccn.service;
import net.tccn.base.JBean; import net.tccn.base.*;
import net.tccn.base.Kv;
import net.tccn.base.MetaKit;
import net.tccn.base.PageBean;
import net.tccn.dbq.DbExecutors; import net.tccn.dbq.DbExecutors;
import net.tccn.dbq.fbean.FBean; import net.tccn.dbq.fbean.FBean;
import org.redkale.net.http.HttpScope; import org.redkale.net.http.HttpScope;
@@ -43,13 +40,15 @@ public class DataService extends BaseService {
} }
@RestMapping(name = "save", comment = "数据保存") @RestMapping(name = "save", comment = "数据保存")
public JBean save(String name, Map data, @RestParam(name = "platToken") String token) { public JBean save(String name, Map<String, String> data, @RestParam(name = "platToken") String token) {
//MetaTable metaTable = MetaKit.getMetaTable(ks, token); JBean jBean = new JBean();
try {
DbExecutors.save(name, data, token);
} catch (Exception e) {
throw new CfgException("保存数据失败");
}
//String sql = metaTable.buildSaveSql(data); return jBean;
return null;
} }
@Comment("数据导出excel") @Comment("数据导出excel")