diff --git a/src/main/java/ink/wgink/gateway/dao/route/IRouteDao.java b/src/main/java/ink/wgink/gateway/dao/route/IRouteDao.java index a875dd4..cb65106 100644 --- a/src/main/java/ink/wgink/gateway/dao/route/IRouteDao.java +++ b/src/main/java/ink/wgink/gateway/dao/route/IRouteDao.java @@ -1,6 +1,7 @@ package ink.wgink.gateway.dao.route; import ink.wgink.gateway.pojo.route.Route; +import org.springframework.core.annotation.Order; import org.springframework.data.mongodb.repository.Query; import org.springframework.data.mongodb.repository.ReactiveMongoRepository; import org.springframework.stereotype.Repository; @@ -17,7 +18,7 @@ import reactor.core.publisher.Mono; * @Version: 1.0 */ @Repository -public interface IRouteDao extends ReactiveMongoRepository { +public interface IRouteDao extends ReactiveMongoRepository { String COLLECTION_NAME = "sys_route"; diff --git a/src/main/java/ink/wgink/gateway/handler/route/RouteHandler.java b/src/main/java/ink/wgink/gateway/handler/route/RouteHandler.java index ddddbde..a95fb42 100644 --- a/src/main/java/ink/wgink/gateway/handler/route/RouteHandler.java +++ b/src/main/java/ink/wgink/gateway/handler/route/RouteHandler.java @@ -2,13 +2,18 @@ package ink.wgink.gateway.handler.route; import ink.wgink.gateway.dao.route.IRouteDao; import ink.wgink.gateway.handler.BaseHandler; +import ink.wgink.gateway.pojo.result.SuccessResult; import ink.wgink.gateway.pojo.route.Route; +import org.springframework.core.annotation.Order; import org.springframework.data.domain.Example; import org.springframework.data.domain.ExampleMatcher; +import org.springframework.data.domain.Page; import org.springframework.http.MediaType; import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; import org.springframework.web.reactive.function.server.ServerRequest; import org.springframework.web.reactive.function.server.ServerResponse; +import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import java.util.Arrays; @@ -25,7 +30,8 @@ import java.util.Optional; * @Date: 2021/4/19 21:40 * @Version: 1.0 **/ -@Component +@Service +@Order public class RouteHandler extends BaseHandler { private IRouteDao routeDao; @@ -45,7 +51,7 @@ public class RouteHandler extends BaseHandler { return routeMono.flatMap(route -> { setSave(route); return routeDao.save(route); - }).then(ServerResponse.ok().build()); + }).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(Flux.just(new SuccessResult()), SuccessResult.class)); } /** @@ -59,7 +65,9 @@ public class RouteHandler extends BaseHandler { List idList = Arrays.asList(ids.split(",")); return routeDao.findAllById(idList).flatMap( route -> routeDao.delete(route) - ).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).build()); + ).then(ServerResponse.ok().headers(httpHeaders -> { + httpHeaders.setContentType(MediaType.APPLICATION_JSON_UTF8); + }).body(Mono.just(new SuccessResult()), SuccessResult.class)); } /** @@ -73,13 +81,13 @@ public class RouteHandler extends BaseHandler { Mono routeMono = serverRequest.bodyToMono(Route.class); return routeDao.findById(id).flatMap( route -> routeMono.flatMap(r -> { - route.setSystem(r.getSystem()); + route.setTitle(r.getTitle()); route.setSummary(r.getSummary()); route.setPath(r.getPath()); route.setUri(r.getUri()); setUpdate(route); return routeDao.save(route); - }).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).build()) + }).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(Flux.just(new SuccessResult()), SuccessResult.class)) ).switchIfEmpty(ServerResponse.notFound().build()); } @@ -95,11 +103,11 @@ public class RouteHandler extends BaseHandler { Route route = new Route(); Example example = Example.of(route); if (keywords.isPresent()) { - route.setSystem(keywords.get()); + route.setTitle(keywords.get()); route.setSummary(keywords.get()); ExampleMatcher exampleMatcher = ExampleMatcher.matchingAny() - .withMatcher("system", ExampleMatcher.GenericPropertyMatcher::contains) + .withMatcher("title", ExampleMatcher.GenericPropertyMatcher::contains) .withMatcher("summary", ExampleMatcher.GenericPropertyMatcher::contains) .withIgnoreCase("id"); example = Example.of(route, exampleMatcher); diff --git a/src/main/java/ink/wgink/gateway/pojo/result/SuccessResult.java b/src/main/java/ink/wgink/gateway/pojo/result/SuccessResult.java index 80b4de8..886d693 100644 --- a/src/main/java/ink/wgink/gateway/pojo/result/SuccessResult.java +++ b/src/main/java/ink/wgink/gateway/pojo/result/SuccessResult.java @@ -1,5 +1,9 @@ package ink.wgink.gateway.pojo.result; +import lombok.Data; +import lombok.ToString; +import org.springframework.data.mongodb.core.mapping.Document; + import java.io.Serializable; /** @@ -9,14 +13,9 @@ import java.io.Serializable; * @Date: 2019/3/2 11:52 PM * @Version: 1.0 **/ -public class SuccessResult implements Serializable { +@Data +@ToString +@Document +public class SuccessResult { - private static final long serialVersionUID = 2794583329290530150L; - - @Override - public String toString() { - final StringBuilder sb = new StringBuilder("{"); - sb.append('}'); - return sb.toString(); - } } diff --git a/src/main/java/ink/wgink/gateway/pojo/route/Route.java b/src/main/java/ink/wgink/gateway/pojo/route/Route.java index 81340a1..cf5fdaf 100644 --- a/src/main/java/ink/wgink/gateway/pojo/route/Route.java +++ b/src/main/java/ink/wgink/gateway/pojo/route/Route.java @@ -24,7 +24,7 @@ import java.io.Serializable; public class Route extends BasePOJO implements Serializable { private static final long serialVersionUID = -4892456861969101733L; - private String system; + private String title; private String summary; private String path; private String uri; diff --git a/src/main/resources/static/wg/assets/layui-v2.6.4/layui/modules/restajax.js b/src/main/resources/static/wg/assets/layui-v2.6.4/layui/modules/restajax.js index 416635a..ea73a3e 100644 --- a/src/main/resources/static/wg/assets/layui-v2.6.4/layui/modules/restajax.js +++ b/src/main/resources/static/wg/assets/layui-v2.6.4/layui/modules/restajax.js @@ -110,12 +110,16 @@ layui.define(function(exports) { headers: headers, data: ajaxData, success: function (data, status, XMLHttpRequest) { + console.log('success') + console.log(XMLHttpRequest) var responseCode = XMLHttpRequest.status; successCallback(responseCode, data, args); }, error: function (XMLHttpRequest) { + console.log('error') + console.log(XMLHttpRequest) var responseCode = XMLHttpRequest.status; - var responseData = JSON.parse(XMLHttpRequest.responseText); + var responseData = JSON.parse(XMLHttpRequest.responseText ? XMLHttpRequest.responseText: "{}"); if (errorCallback != undefined && errorCallback != null && typeof(errorCallback) == 'function') { errorCallback(responseCode, responseData); } diff --git a/src/main/resources/static/wg/route/index.html b/src/main/resources/static/wg/route/index.html index 02fbce3..3ff3907 100644 --- a/src/main/resources/static/wg/route/index.html +++ b/src/main/resources/static/wg/route/index.html @@ -4,6 +4,9 @@ 网关管理 + + + diff --git a/src/main/resources/static/wg/route/route/list.html b/src/main/resources/static/wg/route/route/list.html index 67576b7..eaef095 100644 --- a/src/main/resources/static/wg/route/route/list.html +++ b/src/main/resources/static/wg/route/route/list.html @@ -3,6 +3,9 @@ + + + @@ -12,13 +15,7 @@
-
- -
-
- -
- @@ -53,18 +50,21 @@ var dataArray = []; var dataTable = null; - function initTable() { + function initTable(currentPage) { top.restAjax.get(top.restAjax.path(tableUrl, []), { keywords: $('#keywords').val(), - startTime: $('#startTime').val(), - endTime: $('#endTime').val() }, null, function(code, data) { dataArray = []; for(var i = 0, item; item = data[i++];) { dataArray.push(item); } if(dataTable) { - table.reload('dataTable', {data: dataArray}); + table.reload('dataTable', { + data: dataArray, + page: { + curr: currentPage ? currentPage : dataTable.config.page.curr + } + }); return; } dataTable = table.render({ @@ -78,7 +78,43 @@ cols: [[ {type: 'checkbox', fixed: 'left'}, {field: 'rowNum', width: 80, title: '序号', fixed: 'left', align: 'center', templet: '{{d.LAY_INDEX}}'}, - {field: 'system', width: 200, title: '系统名称', align: 'center', sort: true, + {field: 'title', width: 200, title: '名称', align: 'center', sort: true, + templet: function (row) { + var rowData = row[this.field]; + if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field: 'summary', width: 200, title: '描述', align: 'center', sort: true, + templet: function (row) { + var rowData = row[this.field]; + if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field: 'path', width: 200, title: '转发地址', align: 'center', sort: true, + templet: function (row) { + var rowData = row[this.field]; + if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field: 'uri', width: 200, title: '目标服务地址', align: 'center', sort: true, + templet: function (row) { + var rowData = row[this.field]; + if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') { + return '-'; + } + return rowData; + } + }, + {field: 'gmtCreate', width: 180, title: '添加时间', align: 'center', sort: true, templet: function (row) { var rowData = row[this.field]; if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') { @@ -91,26 +127,11 @@ data: dataArray, page: true }); - - console.log(table); }, function(code, data) { top.dialog.msg(data.msg); }) } - // 初始化日期 - function initDate() { - // 日期选择 - laydate.render({ - elem: '#startTime', - format: 'yyyy-MM-dd' - }); - laydate.render({ - elem: '#endTime', - format: 'yyyy-MM-dd' - }); - } - initDate(); initTable(); // 事件 - 页面变化 $win.on('resize', function() { @@ -121,7 +142,84 @@ }); // 事件 - 搜索 $(document).on('click', '#search', function() { - initTable(); + initTable(1); + }); + + // 删除 + function removeData(ids) { + top.dialog.msg(top.dataMessage.delete, { + time: 0, + btn: [top.dataMessage.button.yes, top.dataMessage.button.no], + shade: 0.3, + yes: function (index) { + top.dialog.close(index); + var layIndex; + top.restAjax.delete(top.restAjax.path('api/route/delete/{ids}', [ids]), {}, null, function (code, data) { + top.dialog.msg(top.dataMessage.deleteSuccess, {time: 1000}); + initTable(); + }, function (code, data) { + top.dialog.msg(data.msg); + }, function () { + layIndex = top.dialog.msg(top.dataMessage.deleting, {icon: 16, time: 0, shade: 0.3}); + }, function () { + top.dialog.close(layIndex); + }); + } + }); + } + // 事件 - 增删改 + table.on('toolbar(dataTable)', function(obj) { + var layEvent = obj.event; + var checkStatus = table.checkStatus('dataTable'); + var checkDatas = checkStatus.data; + if(layEvent === 'saveEvent') { + layer.open({ + type: 2, + title: false, + closeBtn: 0, + area: ['100%', '100%'], + shadeClose: true, + anim: 2, + content: top.restAjax.path('route/route/save.html', []), + end: function() { + initTable(); + } + }); + } else if(layEvent === 'updateEvent') { + if(checkDatas.length === 0) { + top.dialog.msg(top.dataMessage.table.selectEdit); + } else if(checkDatas.length > 1) { + top.dialog.msg(top.dataMessage.table.selectOneEdit); + } else { + layer.open({ + type: 2, + title: false, + closeBtn: 0, + area: ['100%', '100%'], + shadeClose: true, + anim: 2, + content: top.restAjax.path('route/route/update.html?uuid={uuid}', [checkDatas[0].uuid]), + end: function() { + initTable(); + } + }); + } + } else if(layEvent === 'removeEvent') { + if(checkDatas.length === 0) { + top.dialog.msg(top.dataMessage.table.selectDelete); + } else { + var ids = ''; + for(var i = 0, item; item = checkDatas[i++];) { + if(i > 1) { + ids += ','; + } + ids += item['uuid']; + } + removeData(ids); + } + } else if(layEvent === 'levelUpEvent') { + parent.layer.close(parent.layer.getFrameIndex(window.name)); + } }); }); diff --git a/src/main/resources/static/wg/route/route/save.html b/src/main/resources/static/wg/route/route/save.html new file mode 100644 index 0000000..b7e6863 --- /dev/null +++ b/src/main/resources/static/wg/route/route/save.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+ + + + \ No newline at end of file diff --git a/src/main/resources/static/wg/route/route/update.html b/src/main/resources/static/wg/route/route/update.html new file mode 100644 index 0000000..312deb0 --- /dev/null +++ b/src/main/resources/static/wg/route/route/update.html @@ -0,0 +1,130 @@ + + + + + + + + + + + + +
+
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+
+
+
+ + + + \ No newline at end of file