@@ -238,7 +265,7 @@
return {1:"男",2:"女"}[v] || "未知性别"
}
- let {getServiceList, getCfg, getDataList, exportData, dataDel, dataSave} = meta
+ let {getServiceList, getDataList, exportData, dataDel, dataSave} = meta
let {showOk} = red
let vm = new Vue({
el:".data-list",
@@ -259,12 +286,13 @@
limit: {pn: 1, ps: 20, total: 0},
order: {col: "", desc: 1},
pk: "",
- detailData: {}
+ detailData: {},
+ dictData: {}, // 存放字典数据
},
watch: {
addFilter(v) {
this.cfg.filters.forEach(function (f) {
- if (f.name == v) {
+ if (f.name === v) {
f["checked"] = true;
vm.addFilter = "";
}
@@ -272,8 +300,7 @@
},
service() {
this.loadCfg(function () {
- this.limit = {pn: 1, ps: 20, total: 0};
- this.order = {col:"", desc:1};
+ vm.limit = {pn: 1, ps: 20, total: 0};
vm.findList();
});
},
@@ -305,7 +332,7 @@
});
},
loadCfg(back) {
- getCfg({name: this.service}).then(res => {
+ meta.getCfg({name: this.service}).then(res => {
// res['type'] = res.filters[0]['name']
for (i in res["filters"]) {
@@ -328,6 +355,11 @@
})
}
}
+ if (fbean['orders'] && fbean['orders'].length > 0) {
+ this.order = fbean['orders'][0]
+ } else {
+ this.order = {col: "", desc: 0};
+ }
if (back) {
back();
@@ -337,8 +369,25 @@
dealFieldFmt(bean, colFmt) { //处理字典数据 及 自定义函数处理数据
let v = bean[colFmt["col"]]
- if (colFmt.inType == "DICT") {
+ if (colFmt.inType === "DICT") {
// 取字典值返回
+ let dicttype = colFmt['inExt']
+ let dictArr = this.dictData[dicttype]
+ if (!dictArr) {
+ /*dict.list({type: dicttype}).then(res => {
+ dictArr = res
+ this.dictData[dicttype] = res
+ console.log(res)
+ })*/
+ return v
+ }
+
+ for (let i in dictArr) {
+ if (dictArr[i].value + "" === v + "") {
+ return dictArr[i].label
+ }
+ }
+ return v
} else if (colFmt.inType == "INPUT_DAY") {
return red.timeFmt(new Date(v), 'yyyy-MM-dd')
} else if (colFmt.inType == "INPUT_TIME") {
@@ -395,8 +444,12 @@
return str;
},
sortEvent(col) {
- if (vm.order.col == col) {
+ if (vm.order.col === col) {
vm.order.desc = -vm.order.desc
+ // 第一次 1、第二次 -1、第三次点击的时候回到1(这个时候取消排序)
+ if (vm.order.desc === 1) {
+ vm.order.col = ''
+ }
} else {
vm.order.col = col;
vm.order.desc = 1;
@@ -487,6 +540,9 @@
},
mounted() {
this.serviceList();
+ dict.list({}).then(res => {
+ this.dictData = res
+ })
}
});
diff --git a/root/metadata/metaService.html b/root/metadata/metaService.html
index 6f9d525..ab9d485 100644
--- a/root/metadata/metaService.html
+++ b/root/metadata/metaService.html
@@ -10,10 +10,10 @@
.dropdown-menu-table .table td {
padding: 0;
}
- .dropdown-menu-table .table a {
+ /*.dropdown-menu-table .table a {
padding: 8px;
display: block;
- }
+ }*/
/*.dropdown-menu-table .table a:hover,
.dropdown-menu-table .table a:active,
.dropdown-menu-table .table a:focus {
@@ -160,15 +160,14 @@
业务列表
-
@@ -272,7 +307,7 @@
let {dbList} = plat
function beforeDrag(treeId, treeNodes) {
- for (var i=0,l=treeNodes.length; itextarea").attr("rows", this.countLines(row.content))
$(".tpl-remark>textarea").attr("rows", this.countLines(row.remark, 2, 5))
}
@@ -420,9 +458,9 @@
},
debug: function () {
qtask.qtaskDebug({task: this.row}).then(res => {
- this.debugRet = "";
this.debugRet = res;
red.showOk("查询成功")
+ this.parseDebugRet(res)
})
},
countLines: function (text='', min=3, max=15) {
@@ -452,6 +490,51 @@
}
this.row.para = JSON.stringify(_para)
+ },
+ parseDebugRet(_res) {
+ let res = red.deepClone(_res)
+ if (res.list && res.list.length > 0) {
+ let header = []
+ for (let key in res.list[0]) {
+ header.push(key)
+ }
+ res['header'] = header
+
+ this.debugData = res
+ return
+ }
+
+ if (!res.total && res instanceof Object) {
+ let header = []
+ let _res = {}
+ for (let key in res) {
+ header.push(key)
+ }
+ // _res = {header: header, total: 1, list: [res]}
+ res['header'] = header
+ res['list'] = [res]
+ this.debugData = res
+ return
+ }
+ this.debugData = res
+ },
+ copyToClipboard(text) {
+ if (!navigator.clipboard) {
+ console.error("Clipboard API not supported.");
+ return;
+ }
+ let _text = text
+ if (typeof text !== 'string') {
+ _text = JSON.stringify(text)
+ }
+
+ navigator.clipboard.writeText(_text)
+ .then(() => {
+ red.showOk("调试结果已拷贝到剪贴板")
+ })
+ .catch(error => {
+ console.error("Failed to copy text:", error);
+ });
}
},
mounted: function () {
diff --git a/root/res/css/red-kit.css b/root/res/css/red-kit.css
index 9d80f6f..5fe8183 100644
--- a/root/res/css/red-kit.css
+++ b/root/res/css/red-kit.css
@@ -268,7 +268,7 @@ ul.pager {
}
-body,table,th,td,.table-bordered,textarea,.form-control,button,pre,hr,.panel,input,checkbox,
+body,table,tr,/*th,td,*/.table-bordered,textarea,.form-control,button,pre,hr,.panel,input,checkbox,
.btn-default,.input-group-btn,.input-group,
/*.nav-tabs>li.active>a,.nav-tabs>li:focus,*/
.previous>a,.next>a,
@@ -276,8 +276,9 @@ body,table,th,td,.table-bordered,textarea,.form-control,button,pre,hr,.panel,inp
.input-group-addon,
.modal-content,.modal-header,.modal-body,.modal-footer,
.base-info,.plat-switch,
-.tlist>li.active>a,.tlist>li>a,
-.alert-info {
+/*.tlist>li.active>a,*/
+.tlist>li>a,
+.alert-info{
background-color: #22272e !important;
color: #c3c5c7 !important;
border-color: #9e9e9e50!important;
@@ -330,6 +331,51 @@ body,table,th,td,.table-bordered,textarea,.form-control,button,pre,hr,.panel,inp
table {
width: 100%;
}
+ td,th {
+ border-color: #9e9e9e50!important;
+ }
+ tr.active {
+ background-color: #4c5960 !important;
+ }
+
+ .dropdown-menu {
+ background-color: #404a53;
+ }
+
+ .table tr > td.active,
+ .table tr > th.active,
+ .table tr.active > td,
+ .table tr.active > th {
+ background-color: var(--override-bg-color);
+ }
+ .table-striped>tbody>tr:nth-child(odd)>td,.table-striped>tbody>tr:nth-child(odd)>th {
+ background-color: var(--override-bg-color);
+ }
+
+ .table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th {
+ background-color: var(--override-bg-color);
+ }
+ .nav-tabs>li>a:hover,
+ .nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover {
+ color: grey;
+ cursor: default;
+ background-color: var(--override-bg-color);
+ border: 1px solid #4c5960;
+ border-bottom-color: transparent
+ }
+ .nav-tabs {
+ border-bottom: 1px solid #4c5960;
+ }
+ /*tr:hover {
+ background-color: #4c5960 !important;
+ }*/
+
+ .dlist li.active a, .tlist li.active a, .tlist tr.active
+ /*,.dlist li a:hover, .tlist li a:hover, .tlist tr:hover*/{
+ border-left: 5px solid #a5cff8!important;
+ background-color: #4c5960;
+ }
+
}
.plat-switch {
diff --git a/src/main/java/dev/zhub/mk/qtask/QTask.java b/src/main/java/dev/zhub/mk/qtask/QTask.java
index 8311145..33df093 100644
--- a/src/main/java/dev/zhub/mk/qtask/QTask.java
+++ b/src/main/java/dev/zhub/mk/qtask/QTask.java
@@ -37,7 +37,7 @@ public class QTask extends BaseEntity {
private String name = "";
@Comment("[所属平台ID]")
- @Column(updatable = false)
+ @Column(updatable = false, comment = "")
private Integer platid;
@Comment("[业务名称]")
diff --git a/src/main/java/net/tccn/base/MetaKit.java b/src/main/java/net/tccn/base/MetaKit.java
index a3c6a95..74e90d9 100644
--- a/src/main/java/net/tccn/base/MetaKit.java
+++ b/src/main/java/net/tccn/base/MetaKit.java
@@ -5,7 +5,8 @@ import lombok.Getter;
import net.tccn.base.dbq.jdbc.api.DbAccount;
import net.tccn.base.dbq.jdbc.api.DbKit;
import net.tccn.base.dbq.table.Field;
-import net.tccn.dict.Dict;
+import net.tccn.dict.DictKit;
+import net.tccn.dict.MDict;
import net.tccn.meta.*;
import net.tccn.plat.MPlat;
import net.tccn.qtask.TaskKit;
@@ -47,7 +48,7 @@ public class MetaKit extends AbstractService {
@Getter
private static List qTasks;
@Getter
- private static List dicts;
+ private static List dicts;
@Resource(name = "property.dataCate")
protected String dcate = "db";
@@ -68,7 +69,10 @@ public class MetaKit extends AbstractService {
else if (clazz == MTable.class) mTables = metaSource.queryList(MTable.class);
else if (clazz == MService.class) metaServices = metaSource.queryList(MService.class);
else if (clazz == MLink.class) metaLinks = metaSource.queryList(MLink.class);
- else if (clazz == Dict.class) dicts = metaSource.queryList(Dict.class);
+ else if (clazz == MDict.class) {
+ dicts = metaSource.queryList(MDict.class);
+ DictKit.cleanCache();
+ }
/*if (clazz == MUser.class) {
users = metaSource.queryList(MUser.class);
}*/
@@ -83,7 +87,7 @@ public class MetaKit extends AbstractService {
reloadxAsync(MService.class);
reloadxAsync(MTable.class);
reloadxAsync(MLink.class);
- // reloadxAsync(Dict.class);
+ reloadxAsync(MDict.class);
/*metaTables.forEach(x -> {
@@ -278,11 +282,11 @@ public class MetaKit extends AbstractService {
*
* @param plattoken
*/
- public static Map> getDictData(String plattoken) {
- /*Integer platId = MetaKit.getPlatId(plattoken);
- Map> dicts = MetaKit.dicts.stream().filter(x -> x.getPlatid() == (int) platId).collect(Collectors.groupingBy(Dict::getType));
- return dicts;*/
- return new HashMap<>();
+ public static Map> getDictData(String plattoken) {
+ int platid = MetaKit.getPlatId(plattoken);
+ Map> dicts = MetaKit.dicts.stream().filter(x -> x.getPlatid() == platid).collect(Collectors.groupingBy(MDict::getType));
+ return dicts;
+ // return new HashMap<>();
}
// -----------------------------------
diff --git a/src/main/java/net/tccn/dict/Dict.java b/src/main/java/net/tccn/dict/Dict.java
deleted file mode 100644
index c89c4a5..0000000
--- a/src/main/java/net/tccn/dict/Dict.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package net.tccn.dict;
-
-import lombok.Getter;
-import lombok.Setter;
-import net.tccn.base.BaseEntity;
-
-import javax.persistence.Table;
-
-/**
- * @author: liangxianyou
- */
-@Getter
-@Setter
-@Table(name = "Dict")
-public class Dict extends BaseEntity {
-
- private int dictid;
-
- private String type; // 字典类型
- private String value; // 字典值
- private String label; // 中文名
- private String pValue; // 父级字典值
- private String code; //
- private Integer platid; // 系统平台id
-}
diff --git a/src/main/java/net/tccn/dict/DictKit.java b/src/main/java/net/tccn/dict/DictKit.java
index e4b87a3..a29f3fe 100644
--- a/src/main/java/net/tccn/dict/DictKit.java
+++ b/src/main/java/net/tccn/dict/DictKit.java
@@ -13,7 +13,7 @@ import java.util.*;
public final class DictKit {
private static Map kits = new HashMap<>();
private String plattoken;
- private Map> dicts;
+ private Map> dicts;
private DictKit() {
}
@@ -29,8 +29,8 @@ public final class DictKit {
return dictKit;
}
- public synchronized void reload() {
- this.dicts = MetaKit.getDictData(plattoken);
+ public static synchronized void cleanCache() {
+ kits.clear();
}
// 初始化字典,不同模式下,数据来源不同
@@ -123,20 +123,20 @@ public final class DictKit {
* @param code
* @return
*/
- public List getDicts(String code) {
+ public List getDicts(String code) {
Objects.requireNonNull(code, "code 不能为空");
return dicts.getOrDefault(code, new ArrayList<>());
}
- public Map> getDicts() {
+ public Map> getDicts() {
return dicts;
}
public String getDictLabel(String code, String value) {
Objects.requireNonNull(code, "code 不能为空");
Objects.requireNonNull(value, "value 不能为空");
- List dicts = getDicts(code);
- Optional any = dicts.stream().filter(x -> value.equals(x.getValue())).findAny();
+ List dicts = getDicts(code);
+ Optional any = dicts.stream().filter(x -> value.equals(x.getValue())).findAny();
return any.isPresent() ? any.get().getLabel() : "";
}
@@ -144,8 +144,8 @@ public final class DictKit {
Objects.requireNonNull(code, "code 不能为空");
Objects.requireNonNull(label, "label 不能为空");
- List dicts = getDicts(code);
- Optional any = dicts.stream().filter(x -> label.equals(x.getLabel())).findAny();
+ List dicts = getDicts(code);
+ Optional any = dicts.stream().filter(x -> label.equals(x.getLabel())).findAny();
return any.isPresent() ? any.get().getValue() : "";
}
diff --git a/src/main/java/net/tccn/dict/DictService.java b/src/main/java/net/tccn/dict/DictService.java
index 84b77e0..a70c5b8 100644
--- a/src/main/java/net/tccn/dict/DictService.java
+++ b/src/main/java/net/tccn/dict/DictService.java
@@ -23,7 +23,7 @@ public class DictService extends BaseService {
DictKit dictKit = DictKit.use(token);
if (!isEmpty(type)) {
- List dicts = dictKit.getDicts(type);
+ List dicts = dictKit.getDicts(type);
jBean.setBody(dicts);
} else {
Map dicts = dictKit.getDicts();
diff --git a/src/main/java/net/tccn/dict/MDict.java b/src/main/java/net/tccn/dict/MDict.java
new file mode 100644
index 0000000..efbfee5
--- /dev/null
+++ b/src/main/java/net/tccn/dict/MDict.java
@@ -0,0 +1,37 @@
+package net.tccn.dict;
+
+import lombok.Getter;
+import lombok.Setter;
+import net.tccn.base.BaseEntity;
+import org.redkale.convert.ConvertColumn;
+import org.redkale.persistence.Column;
+import org.redkale.persistence.Entity;
+import org.redkale.persistence.Id;
+import org.redkale.persistence.Table;
+
+/**
+ * @author: liangxianyou
+ */
+@Getter
+@Setter
+@Entity
+@Table(comment = "字典表")
+public class MDict extends BaseEntity {
+
+ @Id
+ @Column(comment = "[主键 ID]自增")
+ private int dictid;
+
+ @Column(comment = "[字典类型]")
+ private String type = "";
+
+ @Column(comment = "[字典值]")
+ private String value = "";
+
+ @Column(comment = "[中文名]")
+ private String label = "";
+
+ @ConvertColumn(ignore = true)
+ @Column(comment = "[系统平台 ID]")
+ private int platid;
+}
diff --git a/src/main/java/net/tccn/plat/MPlat.java b/src/main/java/net/tccn/plat/MPlat.java
index 6b37491..356bcfa 100644
--- a/src/main/java/net/tccn/plat/MPlat.java
+++ b/src/main/java/net/tccn/plat/MPlat.java
@@ -4,7 +4,6 @@ import lombok.Getter;
import lombok.Setter;
import net.tccn.base.BaseEntity;
import org.redkale.annotation.Comment;
-import org.redkale.persistence.Column;
import org.redkale.persistence.Entity;
import org.redkale.persistence.Id;
@@ -25,7 +24,7 @@ public class MPlat extends BaseEntity {
@Comment("[备注信息]")
private String remark;
- @Comment("[创建时间]")
+ /*@Comment("[创建时间]")
@Column(updatable = false)
- private Long createtime;
+ private Long createtime;*/
}
diff --git a/src/test/java/RunTest.java b/src/test/java/RunTest.java
index 3ae8ac6..76fe516 100644
--- a/src/test/java/RunTest.java
+++ b/src/test/java/RunTest.java
@@ -1,7 +1,7 @@
import net.tccn.base.*;
import net.tccn.base.dbq.fbean.FBean;
import net.tccn.base.dbq.parser.ParseMysql;
-import net.tccn.dict.Dict;
+import net.tccn.dict.MDict;
import net.tccn.dict.DictKit;
import org.junit.Test;
import org.redkale.convert.json.JsonConvert;
@@ -579,9 +579,9 @@ public class RunTest {
System.out.println(ipv4Count("0.0.0.2", "0.0.0.0"));
}
- Predicate isProvice = (s) -> String.valueOf(s.getValue()).trim().endsWith("0000");
- Predicate isCity = (s) -> !isProvice.test(s) && String.valueOf(s.getValue()).trim().endsWith("00");
- BiPredicate belongProvice = (p, x) -> String.valueOf(x.getValue()).trim().startsWith(String.valueOf(p.getValue()).trim().substring(0, 2));
+ Predicate isProvice = (s) -> String.valueOf(s.getValue()).trim().endsWith("0000");
+ Predicate isCity = (s) -> !isProvice.test(s) && String.valueOf(s.getValue()).trim().endsWith("00");
+ BiPredicate belongProvice = (p, x) -> String.valueOf(x.getValue()).trim().startsWith(String.valueOf(p.getValue()).trim().substring(0, 2));
//@Test
public void dictTest() {