diff --git a/root/index.html b/root/index.html index a3e9f60..e21f948 100644 --- a/root/index.html +++ b/root/index.html @@ -160,7 +160,7 @@ {url:"/content/create.html", name:"内容管理", icon:"icon-edit-sign"}, {url:"/plat/dev.html", name:"dev", icon:"icon-beaker"}, ] - }, + },*/ {name: "Zhub", url: "/zhub", nodes: [ {url:"/zhub/monitor.html", name:"Monitor", icon:"icon-server"}, {url:"/zhub/topic.html", name:"Topics", icon:"icon-server"}, @@ -168,7 +168,7 @@ {url:"/zhub/timer.html", name:"Timer", icon:"icon-server"}, ] }, - {name: "微信公众号", url: "/weixin", nodes: [ + /*{name: "微信公众号", url: "/weixin", nodes: [ {url:"/weixin/wxapp.html", name:"公众号管理", icon:"icon-server"}, {url:"/weixin/user.html", name:"用户管理", icon:"icon-server"}, {url:"/weixin/templateMessage.html", name:"模板消息", icon:"icon-server"}, @@ -217,6 +217,9 @@ loadMain(item) { this.menus = item.nodes || [item]; this.pageId = item.name; + + // 加载新模块下的第一个 + this.loadPage(this.menus[0]); }, refresh() { refresh().then(res => { diff --git a/root/metadata/dataList.html b/root/metadata/dataList.html index 86021cc..30d79a0 100644 --- a/root/metadata/dataList.html +++ b/root/metadata/dataList.html @@ -3,12 +3,25 @@

业务预览

- + +
+ + @@ -46,32 +59,46 @@
业务列表(Meta-Service)
-
- +
-
-
- {{filter.label}} - - - +
@@ -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 @@
业务列表
- +
- + @@ -227,7 +226,7 @@ - + +
业务KEY 业务名称 操作
- {{item.name}} {{item.comment}}
+
@@ -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() {