1、新增 “业务预览-数据保存”功能逻辑
2、修改保存数据解析sql的bug
This commit is contained in:
@@ -105,8 +105,12 @@ const meta = {
|
||||
}
|
||||
},
|
||||
|
||||
del({name, id}) {
|
||||
dataDel({name, id}) {
|
||||
return red.postX('/data/del', {name, data: JSON.stringify({id})})
|
||||
},
|
||||
|
||||
dataSave({name, data}) {
|
||||
return red.postX('/data/save', {name, data: JSON.stringify(data)})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
<tr>
|
||||
<!-- 'sort':field.order>0 -->
|
||||
<th v-for="field in cfg.shows"
|
||||
v-if="field.fmt != 'HIDDEN'"
|
||||
v-if="field.inType != 'HIDDEN'"
|
||||
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}"
|
||||
@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-if="field.fmt != 'HIDDEN'"
|
||||
v-if="field.inType != 'HIDDEN'"
|
||||
v-title="dealFieldFmt(row, field)"
|
||||
v-html="dealFieldFmt(row, field)"></td>
|
||||
<td>
|
||||
@@ -184,15 +184,15 @@
|
||||
<div class="modal-body" style="padding-right: 50px">
|
||||
<form class="form-horizontal">
|
||||
<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>
|
||||
<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}`">
|
||||
<select v-if="item.inType == 'SELECT_EXT'" v-model="detailData[item.col]" class="form-control">
|
||||
<option value="选项一">选项一</option>
|
||||
<option value="选项二">选项二</option>
|
||||
<option value="山东省">山东省</option>
|
||||
<select v-if="item.inType == 'DICT'" v-model="detailData[item.col]" class="form-control">
|
||||
<option value="1">选项一</option>
|
||||
<option value="2">选项二</option>
|
||||
<option value="3">山东省</option>
|
||||
<!--
|
||||
<option v-for="x in inTypes" :value="x">{{x}}</option>
|
||||
-->
|
||||
@@ -206,7 +206,7 @@
|
||||
<div class="clearfix"></div>
|
||||
<div class="modal-footer">
|
||||
<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>
|
||||
@@ -229,7 +229,7 @@
|
||||
return {1:"男",2:"女"}[v] || "未知性别"
|
||||
}
|
||||
|
||||
let {getServiceList, getCfg, getDataList, exportData, del} = meta
|
||||
let {getServiceList, getCfg, getDataList, exportData, dataDel, dataSave} = meta
|
||||
let {showOk} = red
|
||||
var vm = new Vue({
|
||||
el:".data-list",
|
||||
@@ -320,7 +320,12 @@
|
||||
else {
|
||||
v = bean[colFmt["col"]]
|
||||
}
|
||||
return v + " -> "+colFmt.inType
|
||||
|
||||
if (colFmt.inType && colFmt.inType != "INPUT") {
|
||||
v += " -> "+colFmt.inType
|
||||
}
|
||||
|
||||
return v
|
||||
|
||||
/*if (colFmt["fmt"]) {
|
||||
let fmt = colFmt["fmt"]
|
||||
@@ -454,7 +459,23 @@
|
||||
let name = this.service
|
||||
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() {
|
||||
$('#f-info').modal({moveable: true})
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package net.tccn.dbq.jdbc.api;
|
||||
|
||||
import net.tccn.base.CfgException;
|
||||
import net.tccn.base.Kv;
|
||||
|
||||
import java.sql.*;
|
||||
@@ -154,8 +155,7 @@ public class DbSourceMysql implements DbSource {
|
||||
ps.execute();
|
||||
//ps.executeUpdate();
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
throw new CfgException("SQL 执行失败:", sql);
|
||||
} finally {
|
||||
release(connection);
|
||||
}
|
||||
|
||||
@@ -176,6 +176,8 @@ public class ParseMysql implements Parser {
|
||||
String alias = mainTable.getAlias();
|
||||
String[] pks = mainTable.pk();
|
||||
|
||||
// 异常 sql: update `user2` set `aa.name`='null',`aa.deptId`='null',`aa.id`='null' where `id` = '1';
|
||||
|
||||
// 取出有效的数据key
|
||||
List<String> keys = data.keySet()
|
||||
.stream()
|
||||
@@ -197,8 +199,8 @@ public class ParseMysql implements Parser {
|
||||
StringBuffer vs = new StringBuffer();// `v1`,`v2`,`v3`, ...
|
||||
|
||||
for (String k : keys) {
|
||||
ks.append(String.format("`%s`,", k));
|
||||
vs.append(String.format("'%s',", data.get(alias + "." + k)));
|
||||
ks.append(String.format("`%s`,", k.substring(k.indexOf(".") + 1)));
|
||||
vs.append(String.format("'%s',", data.get(k)));
|
||||
}
|
||||
if (ks.length() > 0) {
|
||||
ks.deleteCharAt(ks.length() - 1);
|
||||
@@ -214,7 +216,7 @@ public class ParseMysql implements Parser {
|
||||
String pk = pks[0];
|
||||
|
||||
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) {
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package net.tccn.service;
|
||||
|
||||
import net.tccn.base.JBean;
|
||||
import net.tccn.base.Kv;
|
||||
import net.tccn.base.MetaKit;
|
||||
import net.tccn.base.PageBean;
|
||||
import net.tccn.base.*;
|
||||
import net.tccn.dbq.DbExecutors;
|
||||
import net.tccn.dbq.fbean.FBean;
|
||||
import org.redkale.net.http.HttpScope;
|
||||
@@ -43,13 +40,15 @@ public class DataService extends BaseService {
|
||||
}
|
||||
|
||||
@RestMapping(name = "save", comment = "数据保存")
|
||||
public JBean save(String name, Map data, @RestParam(name = "platToken") String token) {
|
||||
//MetaTable metaTable = MetaKit.getMetaTable(ks, token);
|
||||
public JBean save(String name, Map<String, String> data, @RestParam(name = "platToken") String token) {
|
||||
JBean jBean = new JBean();
|
||||
try {
|
||||
DbExecutors.save(name, data, token);
|
||||
} catch (Exception e) {
|
||||
throw new CfgException("保存数据失败");
|
||||
}
|
||||
|
||||
//String sql = metaTable.buildSaveSql(data);
|
||||
|
||||
|
||||
return null;
|
||||
return jBean;
|
||||
}
|
||||
|
||||
@Comment("数据导出excel")
|
||||
|
||||
Reference in New Issue
Block a user