新增了请求头、参数和响应头参数的控制过滤器
This commit is contained in:
parent
27c60b05fc
commit
151d621d04
3
pom.xml
3
pom.xml
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>2.4.2</version>
|
<version>2.5.0</version>
|
||||||
<relativePath/> <!-- lookup parent from repository -->
|
<relativePath/> <!-- lookup parent from repository -->
|
||||||
</parent>
|
</parent>
|
||||||
<groupId>ink.wgink</groupId>
|
<groupId>ink.wgink</groupId>
|
||||||
@ -30,6 +30,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.cloud</groupId>
|
<groupId>org.springframework.cloud</groupId>
|
||||||
<artifactId>spring-cloud-starter-gateway</artifactId>
|
<artifactId>spring-cloud-starter-gateway</artifactId>
|
||||||
|
<version>3.0.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
@ -1,17 +1,25 @@
|
|||||||
package ink.wgink.gateway.component;
|
package ink.wgink.gateway.component;
|
||||||
|
|
||||||
import ink.wgink.gateway.consts.ISystemConst;
|
|
||||||
import ink.wgink.gateway.dao.route.IRouteDao;
|
import ink.wgink.gateway.dao.route.IRouteDao;
|
||||||
|
import ink.wgink.gateway.dao.route.request.IRequestHeaderDao;
|
||||||
|
import ink.wgink.gateway.dao.route.request.IRequestParameterDao;
|
||||||
|
import ink.wgink.gateway.dao.route.request.IResponseHeaderDao;
|
||||||
|
import ink.wgink.gateway.enums.FilterRequestResponseTypeEnum;
|
||||||
import ink.wgink.gateway.filter.local.CommonFiltersDefinition;
|
import ink.wgink.gateway.filter.local.CommonFiltersDefinition;
|
||||||
import ink.wgink.gateway.pojo.route.Route;
|
import ink.wgink.gateway.pojo.route.Route;
|
||||||
|
import ink.wgink.gateway.pojo.route.request.RequestHeader;
|
||||||
|
import ink.wgink.gateway.pojo.route.request.RequestParameter;
|
||||||
|
import ink.wgink.gateway.pojo.route.request.ResponseHeader;
|
||||||
import ink.wgink.gateway.util.UUIDUtil;
|
import ink.wgink.gateway.util.UUIDUtil;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
||||||
import org.springframework.cloud.gateway.filter.factory.*;
|
|
||||||
import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
|
import org.springframework.cloud.gateway.handler.predicate.PredicateDefinition;
|
||||||
import org.springframework.cloud.gateway.handler.predicate.RoutePredicateFactory;
|
import org.springframework.cloud.gateway.handler.predicate.RoutePredicateFactory;
|
||||||
import org.springframework.cloud.gateway.route.RouteDefinition;
|
import org.springframework.cloud.gateway.route.RouteDefinition;
|
||||||
import org.springframework.cloud.gateway.route.RouteDefinitionRepository;
|
import org.springframework.cloud.gateway.route.RouteDefinitionRepository;
|
||||||
|
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||||
|
import org.springframework.data.mongodb.core.query.Criteria;
|
||||||
|
import org.springframework.data.mongodb.core.query.Query;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.web.util.UriComponentsBuilder;
|
import org.springframework.web.util.UriComponentsBuilder;
|
||||||
import reactor.core.publisher.Flux;
|
import reactor.core.publisher.Flux;
|
||||||
@ -35,10 +43,12 @@ import java.util.Map;
|
|||||||
@Component
|
@Component
|
||||||
public class MongoRouteDefinitionRepository implements RouteDefinitionRepository {
|
public class MongoRouteDefinitionRepository implements RouteDefinitionRepository {
|
||||||
|
|
||||||
public IRouteDao routeDao;
|
private IRouteDao routeDao;
|
||||||
|
private MongoTemplate mongoTemplate;
|
||||||
|
|
||||||
public MongoRouteDefinitionRepository(IRouteDao routeDao) {
|
public MongoRouteDefinitionRepository(IRouteDao routeDao, MongoTemplate mongoTemplate) {
|
||||||
this.routeDao = routeDao;
|
this.routeDao = routeDao;
|
||||||
|
this.mongoTemplate = mongoTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -107,7 +117,77 @@ public class MongoRouteDefinitionRepository implements RouteDefinitionRepository
|
|||||||
if (!StringUtils.isBlank(route.getSetPath())) {
|
if (!StringUtils.isBlank(route.getSetPath())) {
|
||||||
filterDefinitions.add(commonFiltersDefinition.setPath(route));
|
filterDefinitions.add(commonFiltersDefinition.setPath(route));
|
||||||
}
|
}
|
||||||
|
requestHeaderFilter(filterDefinitions, commonFiltersDefinition, route);
|
||||||
|
requestParameterFilter(filterDefinitions, commonFiltersDefinition, route);
|
||||||
|
responseHeaderFilter(filterDefinitions, commonFiltersDefinition, route);
|
||||||
return filterDefinitions;
|
return filterDefinitions;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求头过滤器
|
||||||
|
*
|
||||||
|
* @param filterDefinitions
|
||||||
|
* @param commonFiltersDefinition
|
||||||
|
*/
|
||||||
|
private void requestHeaderFilter(List<FilterDefinition> filterDefinitions, CommonFiltersDefinition commonFiltersDefinition, Route route) {
|
||||||
|
// 添加请求头参数过滤器
|
||||||
|
List<RequestHeader> addRequestHeaderList = mongoTemplate.find(new Query().addCriteria(Criteria.where("routeId").is(route.getUuid()).and("type").is(FilterRequestResponseTypeEnum.ADD.getValue())), RequestHeader.class, IRequestHeaderDao.COLLECTION_NAME);
|
||||||
|
if (!addRequestHeaderList.isEmpty()) {
|
||||||
|
filterDefinitions.add(commonFiltersDefinition.addRequestHeader(addRequestHeaderList));
|
||||||
|
}
|
||||||
|
// 设置请求头参数过滤器
|
||||||
|
List<RequestHeader> setRequestHeaderList = mongoTemplate.find(new Query().addCriteria(Criteria.where("routeId").is(route.getUuid()).and("type").is(FilterRequestResponseTypeEnum.SET.getValue())), RequestHeader.class, IRequestHeaderDao.COLLECTION_NAME);
|
||||||
|
if (!setRequestHeaderList.isEmpty()) {
|
||||||
|
filterDefinitions.add(commonFiltersDefinition.setRequestHeader(setRequestHeaderList));
|
||||||
|
}
|
||||||
|
// 删除请求头参数过滤器
|
||||||
|
List<RequestHeader> removeRequestHeaderList = mongoTemplate.find(new Query().addCriteria(Criteria.where("routeId").is(route.getUuid()).and("type").is(FilterRequestResponseTypeEnum.REMOVE.getValue())), RequestHeader.class, IRequestHeaderDao.COLLECTION_NAME);
|
||||||
|
if (!removeRequestHeaderList.isEmpty()) {
|
||||||
|
filterDefinitions.add(commonFiltersDefinition.removeRequestHeader(removeRequestHeaderList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求参数过滤器
|
||||||
|
*
|
||||||
|
* @param filterDefinitions
|
||||||
|
* @param commonFiltersDefinition
|
||||||
|
*/
|
||||||
|
private void requestParameterFilter(List<FilterDefinition> filterDefinitions, CommonFiltersDefinition commonFiltersDefinition, Route route) {
|
||||||
|
// 添加请求参数过滤器
|
||||||
|
List<RequestParameter> addRequestParameterList = mongoTemplate.find(new Query().addCriteria(Criteria.where("routeId").is(route.getUuid()).and("type").is(FilterRequestResponseTypeEnum.ADD.getValue())), RequestParameter.class, IRequestParameterDao.COLLECTION_NAME);
|
||||||
|
if (!addRequestParameterList.isEmpty()) {
|
||||||
|
filterDefinitions.add(commonFiltersDefinition.addRequestParameter(addRequestParameterList));
|
||||||
|
}
|
||||||
|
// 删除请求参数过滤器
|
||||||
|
List<RequestParameter> removeRequestParameterList = mongoTemplate.find(new Query().addCriteria(Criteria.where("routeId").is(route.getUuid()).and("type").is(FilterRequestResponseTypeEnum.REMOVE.getValue())), RequestParameter.class, IRequestParameterDao.COLLECTION_NAME);
|
||||||
|
if (!addRequestParameterList.isEmpty()) {
|
||||||
|
filterDefinitions.add(commonFiltersDefinition.removeRequestParameter(removeRequestParameterList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应头过滤器
|
||||||
|
*
|
||||||
|
* @param filterDefinitions
|
||||||
|
* @param commonFiltersDefinition
|
||||||
|
*/
|
||||||
|
private void responseHeaderFilter(List<FilterDefinition> filterDefinitions, CommonFiltersDefinition commonFiltersDefinition, Route route) {
|
||||||
|
// 添加请求头参数过滤器
|
||||||
|
List<ResponseHeader> addResponseHeaderList = mongoTemplate.find(new Query().addCriteria(Criteria.where("routeId").is(route.getUuid()).and("type").is(FilterRequestResponseTypeEnum.ADD.getValue())), ResponseHeader.class, IResponseHeaderDao.COLLECTION_NAME);
|
||||||
|
if (!addResponseHeaderList.isEmpty()) {
|
||||||
|
filterDefinitions.add(commonFiltersDefinition.addResponseHeader(addResponseHeaderList));
|
||||||
|
}
|
||||||
|
// 设置请求头参数过滤器
|
||||||
|
List<ResponseHeader> setResponseHeaderList = mongoTemplate.find(new Query().addCriteria(Criteria.where("routeId").is(route.getUuid()).and("type").is(FilterRequestResponseTypeEnum.SET.getValue())), ResponseHeader.class, IResponseHeaderDao.COLLECTION_NAME);
|
||||||
|
if (!setResponseHeaderList.isEmpty()) {
|
||||||
|
filterDefinitions.add(commonFiltersDefinition.setResponseHeader(setResponseHeaderList));
|
||||||
|
}
|
||||||
|
// 删除请求头参数过滤器
|
||||||
|
List<ResponseHeader> removeResponseHeaderList = mongoTemplate.find(new Query().addCriteria(Criteria.where("routeId").is(route.getUuid()).and("type").is(FilterRequestResponseTypeEnum.REMOVE.getValue())), ResponseHeader.class, IResponseHeaderDao.COLLECTION_NAME);
|
||||||
|
if (!removeResponseHeaderList.isEmpty()) {
|
||||||
|
filterDefinitions.add(commonFiltersDefinition.removeResponseHeader(removeResponseHeaderList));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,6 @@ import org.springframework.stereotype.Repository;
|
|||||||
@Repository
|
@Repository
|
||||||
public interface IRequestHeaderDao extends ReactiveMongoRepository<RequestHeader, String> {
|
public interface IRequestHeaderDao extends ReactiveMongoRepository<RequestHeader, String> {
|
||||||
|
|
||||||
String COLLECTION_NAME = "sys_request_header";
|
String COLLECTION_NAME = "route_request_header";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package ink.wgink.gateway.dao.route.request;
|
package ink.wgink.gateway.dao.route.request;
|
||||||
|
|
||||||
import ink.wgink.gateway.pojo.route.request.RequestHeader;
|
|
||||||
import ink.wgink.gateway.pojo.route.request.RequestParameter;
|
import ink.wgink.gateway.pojo.route.request.RequestParameter;
|
||||||
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
|
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
@ -18,6 +17,6 @@ import org.springframework.stereotype.Repository;
|
|||||||
@Repository
|
@Repository
|
||||||
public interface IRequestParameterDao extends ReactiveMongoRepository<RequestParameter, String> {
|
public interface IRequestParameterDao extends ReactiveMongoRepository<RequestParameter, String> {
|
||||||
|
|
||||||
String COLLECTION_NAME = "sys_request_parameter";
|
String COLLECTION_NAME = "route_request_parameter";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,22 @@
|
|||||||
|
package ink.wgink.gateway.dao.route.request;
|
||||||
|
|
||||||
|
import ink.wgink.gateway.pojo.route.request.ResponseHeader;
|
||||||
|
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
|
||||||
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When you feel like quitting. Think about why you started
|
||||||
|
* 当你想要放弃的时候,想想当初你为何开始
|
||||||
|
*
|
||||||
|
* @ClassName: IResponseHeaderDao
|
||||||
|
* @Description: 响应头
|
||||||
|
* @Author: WangGeng
|
||||||
|
* @Date: 2021/5/29 22:21
|
||||||
|
* @Version: 1.0
|
||||||
|
**/
|
||||||
|
@Repository
|
||||||
|
public interface IResponseHeaderDao extends ReactiveMongoRepository<ResponseHeader, String> {
|
||||||
|
|
||||||
|
String COLLECTION_NAME = "route_response_header";
|
||||||
|
|
||||||
|
}
|
@ -10,14 +10,15 @@ package ink.wgink.gateway.enums;
|
|||||||
* @Date: 2021/5/30 16:54
|
* @Date: 2021/5/30 16:54
|
||||||
* @Version: 1.0
|
* @Version: 1.0
|
||||||
**/
|
**/
|
||||||
public enum FilterRequestTypeEnum {
|
public enum FilterRequestResponseTypeEnum {
|
||||||
ADD("add", "添加"),
|
ADD("add", "添加"),
|
||||||
SET("set", "设置");
|
SET("set", "设置(替换)"),
|
||||||
|
REMOVE("remove", "移除");
|
||||||
|
|
||||||
private String value;
|
private String value;
|
||||||
private String summary;
|
private String summary;
|
||||||
|
|
||||||
FilterRequestTypeEnum(String value, String summary) {
|
FilterRequestResponseTypeEnum(String value, String summary) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
this.summary = summary;
|
this.summary = summary;
|
||||||
}
|
}
|
@ -4,6 +4,7 @@ import ink.wgink.gateway.consts.ISystemConst;
|
|||||||
import ink.wgink.gateway.pojo.route.Route;
|
import ink.wgink.gateway.pojo.route.Route;
|
||||||
import ink.wgink.gateway.pojo.route.request.RequestHeader;
|
import ink.wgink.gateway.pojo.route.request.RequestHeader;
|
||||||
import ink.wgink.gateway.pojo.route.request.RequestParameter;
|
import ink.wgink.gateway.pojo.route.request.RequestParameter;
|
||||||
|
import ink.wgink.gateway.pojo.route.request.ResponseHeader;
|
||||||
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
import org.springframework.cloud.gateway.filter.FilterDefinition;
|
||||||
import org.springframework.cloud.gateway.filter.factory.RewriteLocationResponseHeaderGatewayFilterFactory;
|
import org.springframework.cloud.gateway.filter.factory.RewriteLocationResponseHeaderGatewayFilterFactory;
|
||||||
import org.springframework.cloud.gateway.filter.factory.RewritePathGatewayFilterFactory;
|
import org.springframework.cloud.gateway.filter.factory.RewritePathGatewayFilterFactory;
|
||||||
@ -28,7 +29,6 @@ public class CommonFiltersDefinition {
|
|||||||
/**
|
/**
|
||||||
* 请求头参数过滤器
|
* 请求头参数过滤器
|
||||||
*
|
*
|
||||||
* @param route
|
|
||||||
* @param requestHeaders
|
* @param requestHeaders
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@ -44,6 +44,41 @@ public class CommonFiltersDefinition {
|
|||||||
return addRequestHeader;
|
return addRequestHeader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求头参数过滤器
|
||||||
|
*
|
||||||
|
* @param requestHeaders
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FilterDefinition setRequestHeader(List<RequestHeader> requestHeaders) {
|
||||||
|
FilterDefinition setRequestHeader = new FilterDefinition();
|
||||||
|
Map<String, String> setRequestHeaderMap = new HashMap<>(requestHeaders.size() * 2);
|
||||||
|
for (RequestHeader requestHeader : requestHeaders) {
|
||||||
|
setRequestHeaderMap.put("name", requestHeader.getName());
|
||||||
|
setRequestHeaderMap.put("value", requestHeader.getValue());
|
||||||
|
}
|
||||||
|
setRequestHeader.setArgs(setRequestHeaderMap);
|
||||||
|
setRequestHeader.setName("SetRequestHeader");
|
||||||
|
return setRequestHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求头参数过滤器
|
||||||
|
*
|
||||||
|
* @param requestHeaders
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FilterDefinition removeRequestHeader(List<RequestHeader> requestHeaders) {
|
||||||
|
FilterDefinition removeRequestHeader = new FilterDefinition();
|
||||||
|
Map<String, String> removeRequestHeaderMap = new HashMap<>(requestHeaders.size() * 2);
|
||||||
|
for (RequestHeader requestHeader : requestHeaders) {
|
||||||
|
removeRequestHeaderMap.put("name", requestHeader.getName());
|
||||||
|
}
|
||||||
|
removeRequestHeader.setArgs(removeRequestHeaderMap);
|
||||||
|
removeRequestHeader.setName("RemoveRequestHeader");
|
||||||
|
return removeRequestHeader;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求参数过滤器
|
* 请求参数过滤器
|
||||||
*
|
*
|
||||||
@ -62,6 +97,76 @@ public class CommonFiltersDefinition {
|
|||||||
return addRequestParameter;
|
return addRequestParameter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 请求参数过滤器
|
||||||
|
*
|
||||||
|
* @param requestParameters
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FilterDefinition removeRequestParameter(List<RequestParameter> requestParameters) {
|
||||||
|
FilterDefinition removeRequestParameter = new FilterDefinition();
|
||||||
|
Map<String, String> removeRequestParameterMap = new HashMap<>(requestParameters.size() * 2);
|
||||||
|
for (RequestParameter requestParameter : requestParameters) {
|
||||||
|
removeRequestParameterMap.put("name", requestParameter.getName());
|
||||||
|
}
|
||||||
|
removeRequestParameter.setArgs(removeRequestParameterMap);
|
||||||
|
removeRequestParameter.setName("RemoveRequestParameter");
|
||||||
|
return removeRequestParameter;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应头参数过滤器
|
||||||
|
*
|
||||||
|
* @param responseHeaders
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FilterDefinition addResponseHeader(List<ResponseHeader> responseHeaders) {
|
||||||
|
FilterDefinition addResponseHeader = new FilterDefinition();
|
||||||
|
Map<String, String> addResponseHeaderMap = new HashMap<>(responseHeaders.size() * 2);
|
||||||
|
for (ResponseHeader responseHeader : responseHeaders) {
|
||||||
|
addResponseHeaderMap.put("name", responseHeader.getName());
|
||||||
|
addResponseHeaderMap.put("value", responseHeader.getValue());
|
||||||
|
}
|
||||||
|
addResponseHeader.setArgs(addResponseHeaderMap);
|
||||||
|
addResponseHeader.setName("AddResponseHeader");
|
||||||
|
return addResponseHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应头参数过滤器
|
||||||
|
*
|
||||||
|
* @param responseHeaders
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FilterDefinition setResponseHeader(List<ResponseHeader> responseHeaders) {
|
||||||
|
FilterDefinition setResponseHeader = new FilterDefinition();
|
||||||
|
Map<String, String> setResponseHeaderMap = new HashMap<>(responseHeaders.size() * 2);
|
||||||
|
for (ResponseHeader responseHeader : responseHeaders) {
|
||||||
|
setResponseHeaderMap.put("name", responseHeader.getName());
|
||||||
|
setResponseHeaderMap.put("value", responseHeader.getValue());
|
||||||
|
}
|
||||||
|
setResponseHeader.setArgs(setResponseHeaderMap);
|
||||||
|
setResponseHeader.setName("SetResponseHeader");
|
||||||
|
return setResponseHeader;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 响应头参数过滤器
|
||||||
|
*
|
||||||
|
* @param responseHeaders
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public FilterDefinition removeResponseHeader(List<ResponseHeader> responseHeaders) {
|
||||||
|
FilterDefinition removeResponseHeader = new FilterDefinition();
|
||||||
|
Map<String, String> removeResponseHeaderMap = new HashMap<>(responseHeaders.size() * 2);
|
||||||
|
for (ResponseHeader responseHeader : responseHeaders) {
|
||||||
|
removeResponseHeaderMap.put("name", responseHeader.getName());
|
||||||
|
}
|
||||||
|
removeResponseHeader.setArgs(removeResponseHeaderMap);
|
||||||
|
removeResponseHeader.setName("RemoveResponseHeader");
|
||||||
|
return removeResponseHeader;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 重写过滤器,将路径中的gw删除,暂时无用
|
* 重写过滤器,将路径中的gw删除,暂时无用
|
||||||
*
|
*
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package ink.wgink.gateway.handler.route.request;
|
package ink.wgink.gateway.handler.route.request;
|
||||||
|
|
||||||
import ink.wgink.gateway.dao.route.request.IRequestHeaderDao;
|
import ink.wgink.gateway.dao.route.request.IRequestHeaderDao;
|
||||||
|
import ink.wgink.gateway.enums.FilterRequestResponseTypeEnum;
|
||||||
|
import ink.wgink.gateway.exception.ParamsException;
|
||||||
import ink.wgink.gateway.exception.SearchException;
|
import ink.wgink.gateway.exception.SearchException;
|
||||||
import ink.wgink.gateway.handler.BaseHandler;
|
import ink.wgink.gateway.handler.BaseHandler;
|
||||||
import ink.wgink.gateway.pojo.result.SuccessResult;
|
import ink.wgink.gateway.pojo.result.SuccessResult;
|
||||||
import ink.wgink.gateway.pojo.route.request.RequestHeader;
|
import ink.wgink.gateway.pojo.route.request.RequestHeader;
|
||||||
import ink.wgink.gateway.pojo.route.request.RequestParameter;
|
|
||||||
import ink.wgink.gateway.pojo.routetype.RouteType;
|
|
||||||
import ink.wgink.gateway.util.RequestFieldCheckUtil;
|
import ink.wgink.gateway.util.RequestFieldCheckUtil;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.data.domain.Example;
|
import org.springframework.data.domain.Example;
|
||||||
@ -45,14 +45,17 @@ public class RequestHeaderHandler extends BaseHandler {
|
|||||||
Mono<RequestHeader> requestHeaderMono = serverRequest.bodyToMono(RequestHeader.class);
|
Mono<RequestHeader> requestHeaderMono = serverRequest.bodyToMono(RequestHeader.class);
|
||||||
return requestHeaderMono.flatMap(requestHeader -> {
|
return requestHeaderMono.flatMap(requestHeader -> {
|
||||||
RequestFieldCheckUtil.check(requestHeader);
|
RequestFieldCheckUtil.check(requestHeader);
|
||||||
|
if (!StringUtils.equals(FilterRequestResponseTypeEnum.REMOVE.getValue(), requestHeader.getType()) && StringUtils.isBlank(requestHeader.getValue())) {
|
||||||
|
return Mono.error(new ParamsException("值不能为空"));
|
||||||
|
}
|
||||||
setSave(requestHeader);
|
setSave(requestHeader);
|
||||||
|
|
||||||
RouteType routeTypeExample = new RouteType();
|
RequestHeader requestHeaderExample = new RequestHeader();
|
||||||
routeTypeExample.setTitle(requestHeader.getName().trim());
|
requestHeaderExample.setName(requestHeader.getName().trim());
|
||||||
ExampleMatcher exampleMatcher = ExampleMatcher.matching().withMatcher("name", ExampleMatcher.GenericPropertyMatcher::exact).withIgnoreCase("id");
|
ExampleMatcher exampleMatcher = ExampleMatcher.matching().withMatcher("name", ExampleMatcher.GenericPropertyMatcher::exact).withIgnoreCase("id");
|
||||||
Example example = Example.of(routeTypeExample, exampleMatcher);
|
Example example = Example.of(requestHeaderExample, exampleMatcher);
|
||||||
return requestHeaderDao.findOne(example).flatMap(
|
return requestHeaderDao.findOne(example).flatMap(
|
||||||
r -> Mono.error(new SearchException("Header已经存在"))
|
r -> Mono.error(new SearchException("参数已经存在"))
|
||||||
).switchIfEmpty(requestHeaderDao.save(requestHeader));
|
).switchIfEmpty(requestHeaderDao.save(requestHeader));
|
||||||
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Flux.just(new SuccessResult()), SuccessResult.class));
|
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Flux.just(new SuccessResult()), SuccessResult.class));
|
||||||
}
|
}
|
||||||
@ -63,67 +66,26 @@ public class RequestHeaderHandler extends BaseHandler {
|
|||||||
return requestHeaderDao.findAllById(idList).flatMap(requestHeader -> requestHeaderDao.delete(requestHeader)).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Mono.just(new SuccessResult()), SuccessResult.class));
|
return requestHeaderDao.findAllById(idList).flatMap(requestHeader -> requestHeaderDao.delete(requestHeader)).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Mono.just(new SuccessResult()), SuccessResult.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mono<ServerResponse> update(ServerRequest serverRequest) {
|
|
||||||
String id = serverRequest.pathVariable("id");
|
|
||||||
Mono<RequestHeader> requestHeaderMono = serverRequest.bodyToMono(RequestHeader.class);
|
|
||||||
|
|
||||||
// 查询ID是否存在
|
|
||||||
return requestHeaderDao.findById(id).flatMap(requestHeader -> {
|
|
||||||
setUpdate(requestHeader);
|
|
||||||
return requestHeaderMono.flatMap(rh -> {
|
|
||||||
RequestFieldCheckUtil.check(rh);
|
|
||||||
requestHeader.setRouteId(rh.getRouteId());
|
|
||||||
requestHeader.setType(rh.getType());
|
|
||||||
requestHeader.setName(rh.getName());
|
|
||||||
requestHeader.setValue(rh.getValue());
|
|
||||||
|
|
||||||
RequestHeader requestHeaderExample = new RequestHeader();
|
|
||||||
requestHeaderExample.setRouteId(rh.getRouteId());
|
|
||||||
requestHeaderExample.setName(rh.getName());
|
|
||||||
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
|
|
||||||
.withMatcher("routeId", ExampleMatcher.GenericPropertyMatcher::exact)
|
|
||||||
.withMatcher("name", ExampleMatcher.GenericPropertyMatcher::exact)
|
|
||||||
.withIgnoreCase("id");
|
|
||||||
Example example = Example.of(requestHeaderExample, exampleMatcher);
|
|
||||||
// 查询Name是否存在
|
|
||||||
return requestHeaderDao.findOne(example).flatMap(erh -> {
|
|
||||||
RequestHeader existRouteHeader = (RequestHeader) erh;
|
|
||||||
// 如果已经存在
|
|
||||||
if (!StringUtils.equals(existRouteHeader.getUuid(), id)) {
|
|
||||||
return Mono.error(new SearchException("参数已经存在"));
|
|
||||||
}
|
|
||||||
return requestHeaderDao.save(requestHeader);
|
|
||||||
}).switchIfEmpty(requestHeaderDao.save(requestHeader));
|
|
||||||
});
|
|
||||||
}).switchIfEmpty(ServerResponse.notFound().build()).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Mono.just(new SuccessResult()), SuccessResult.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
public Mono<ServerResponse> list(ServerRequest serverRequest) {
|
public Mono<ServerResponse> list(ServerRequest serverRequest) {
|
||||||
String routeId = serverRequest.pathVariable("routeId");
|
String routeId = serverRequest.pathVariable("routeId");
|
||||||
Optional<String> keywords = serverRequest.queryParam("keywords");
|
Optional<String> keywords = serverRequest.queryParam("keywords");
|
||||||
Optional<String> type = serverRequest.queryParam("type");
|
Optional<String> type = serverRequest.queryParam("type");
|
||||||
|
|
||||||
RequestParameter requestParameter = new RequestParameter();
|
RequestHeader requestHeaderExample = new RequestHeader();
|
||||||
requestParameter.setRouteId(routeId);
|
requestHeaderExample.setRouteId(routeId);
|
||||||
|
|
||||||
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
|
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
|
||||||
.withMatcher("routeId", ExampleMatcher.GenericPropertyMatcher::exact)
|
.withMatcher("routeId", ExampleMatcher.GenericPropertyMatcher::exact)
|
||||||
.withIgnoreCase("id");
|
.withIgnoreCase("id");
|
||||||
if (keywords.isPresent() || type.isPresent()) {
|
if (keywords.isPresent()) {
|
||||||
String keywordTrim = keywords.get().trim();
|
requestHeaderExample.setName(keywords.get().trim());
|
||||||
String typeTrim = type.get().trim();
|
exampleMatcher.withMatcher("name", ExampleMatcher.GenericPropertyMatcher::contains);
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(keywordTrim)) {
|
|
||||||
requestParameter.setName(keywordTrim);
|
|
||||||
exampleMatcher.withMatcher("name", ExampleMatcher.GenericPropertyMatcher::contains);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(typeTrim)) {
|
|
||||||
requestParameter.setType(typeTrim);
|
|
||||||
exampleMatcher.withMatcher("type", ExampleMatcher.GenericPropertyMatcher::exact);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Example example = Example.of(requestParameter, exampleMatcher);
|
if (type.isPresent()) {
|
||||||
|
requestHeaderExample.setType(type.get().trim());
|
||||||
|
exampleMatcher.withMatcher("type", ExampleMatcher.GenericPropertyMatcher::exact);
|
||||||
|
}
|
||||||
|
Example example = Example.of(requestHeaderExample, exampleMatcher);
|
||||||
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(requestHeaderDao.findAll(example), RequestHeader.class);
|
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(requestHeaderDao.findAll(example), RequestHeader.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package ink.wgink.gateway.handler.route.request;
|
package ink.wgink.gateway.handler.route.request;
|
||||||
|
|
||||||
import ink.wgink.gateway.dao.route.request.IRequestParameterDao;
|
import ink.wgink.gateway.dao.route.request.IRequestParameterDao;
|
||||||
|
import ink.wgink.gateway.enums.FilterRequestResponseTypeEnum;
|
||||||
|
import ink.wgink.gateway.exception.ParamsException;
|
||||||
import ink.wgink.gateway.exception.SearchException;
|
import ink.wgink.gateway.exception.SearchException;
|
||||||
import ink.wgink.gateway.handler.BaseHandler;
|
import ink.wgink.gateway.handler.BaseHandler;
|
||||||
import ink.wgink.gateway.pojo.result.SuccessResult;
|
import ink.wgink.gateway.pojo.result.SuccessResult;
|
||||||
import ink.wgink.gateway.pojo.route.request.RequestHeader;
|
|
||||||
import ink.wgink.gateway.pojo.route.request.RequestParameter;
|
import ink.wgink.gateway.pojo.route.request.RequestParameter;
|
||||||
import ink.wgink.gateway.pojo.routetype.RouteType;
|
|
||||||
import ink.wgink.gateway.util.RequestFieldCheckUtil;
|
import ink.wgink.gateway.util.RequestFieldCheckUtil;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.data.domain.Example;
|
import org.springframework.data.domain.Example;
|
||||||
@ -45,14 +45,17 @@ public class RequestParameterHandler extends BaseHandler {
|
|||||||
Mono<RequestParameter> requestParameterMono = serverRequest.bodyToMono(RequestParameter.class);
|
Mono<RequestParameter> requestParameterMono = serverRequest.bodyToMono(RequestParameter.class);
|
||||||
return requestParameterMono.flatMap(requestParameter -> {
|
return requestParameterMono.flatMap(requestParameter -> {
|
||||||
RequestFieldCheckUtil.check(requestParameter);
|
RequestFieldCheckUtil.check(requestParameter);
|
||||||
|
if (!StringUtils.equals(FilterRequestResponseTypeEnum.REMOVE.getValue(), requestParameter.getType()) && StringUtils.isBlank(requestParameter.getValue())) {
|
||||||
|
return Mono.error(new ParamsException("值不能为空"));
|
||||||
|
}
|
||||||
setSave(requestParameter);
|
setSave(requestParameter);
|
||||||
|
|
||||||
RouteType routeTypeExample = new RouteType();
|
RequestParameter requestParameterExample = new RequestParameter();
|
||||||
routeTypeExample.setTitle(requestParameter.getName().trim());
|
requestParameterExample.setName(requestParameter.getName().trim());
|
||||||
ExampleMatcher exampleMatcher = ExampleMatcher.matching().withMatcher("name", ExampleMatcher.GenericPropertyMatcher::exact).withIgnoreCase("id");
|
ExampleMatcher exampleMatcher = ExampleMatcher.matching().withMatcher("name", ExampleMatcher.GenericPropertyMatcher::exact).withIgnoreCase("id");
|
||||||
Example example = Example.of(routeTypeExample, exampleMatcher);
|
Example example = Example.of(requestParameterExample, exampleMatcher);
|
||||||
return requestParameterDao.findOne(example).flatMap(
|
return requestParameterDao.findOne(example).flatMap(
|
||||||
r -> Mono.error(new SearchException("Parameter已经存在"))
|
r -> Mono.error(new SearchException("参数已经存在"))
|
||||||
).switchIfEmpty(requestParameterDao.save(requestParameter));
|
).switchIfEmpty(requestParameterDao.save(requestParameter));
|
||||||
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Flux.just(new SuccessResult()), SuccessResult.class));
|
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Flux.just(new SuccessResult()), SuccessResult.class));
|
||||||
}
|
}
|
||||||
@ -63,66 +66,25 @@ public class RequestParameterHandler extends BaseHandler {
|
|||||||
return requestParameterDao.findAllById(idList).flatMap(requestParameter -> requestParameterDao.delete(requestParameter)).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Mono.just(new SuccessResult()), SuccessResult.class));
|
return requestParameterDao.findAllById(idList).flatMap(requestParameter -> requestParameterDao.delete(requestParameter)).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Mono.just(new SuccessResult()), SuccessResult.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Mono<ServerResponse> update(ServerRequest serverRequest) {
|
|
||||||
String id = serverRequest.pathVariable("id");
|
|
||||||
Mono<RequestParameter> requestParameterMono = serverRequest.bodyToMono(RequestParameter.class);
|
|
||||||
|
|
||||||
// 查询ID是否存在
|
|
||||||
return requestParameterDao.findById(id).flatMap(requestParameter -> {
|
|
||||||
setUpdate(requestParameter);
|
|
||||||
return requestParameterMono.flatMap(rp -> {
|
|
||||||
RequestFieldCheckUtil.check(rp);
|
|
||||||
requestParameter.setRouteId(rp.getRouteId());
|
|
||||||
requestParameter.setType(rp.getType());
|
|
||||||
requestParameter.setName(rp.getName());
|
|
||||||
requestParameter.setValue(rp.getValue());
|
|
||||||
|
|
||||||
RequestHeader requestHeaderExample = new RequestHeader();
|
|
||||||
requestHeaderExample.setRouteId(rp.getRouteId());
|
|
||||||
requestHeaderExample.setName(rp.getName());
|
|
||||||
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
|
|
||||||
.withMatcher("routeId", ExampleMatcher.GenericPropertyMatcher::exact)
|
|
||||||
.withMatcher("name", ExampleMatcher.GenericPropertyMatcher::exact)
|
|
||||||
.withIgnoreCase("id");
|
|
||||||
Example example = Example.of(requestHeaderExample, exampleMatcher);
|
|
||||||
// 查询Name是否存在
|
|
||||||
return requestParameterDao.findOne(example).flatMap(erp -> {
|
|
||||||
RequestParameter existRouteParameter = (RequestParameter) erp;
|
|
||||||
// 如果已经存在
|
|
||||||
if (!StringUtils.equals(existRouteParameter.getUuid(), id)) {
|
|
||||||
return Mono.error(new SearchException("参数已经存在"));
|
|
||||||
}
|
|
||||||
return requestParameterDao.save(requestParameter);
|
|
||||||
}).switchIfEmpty(requestParameterDao.save(requestParameter));
|
|
||||||
});
|
|
||||||
}).switchIfEmpty(ServerResponse.notFound().build()).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Mono.just(new SuccessResult()), SuccessResult.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
public Mono<ServerResponse> list(ServerRequest serverRequest) {
|
public Mono<ServerResponse> list(ServerRequest serverRequest) {
|
||||||
String routeId = serverRequest.pathVariable("routeId");
|
String routeId = serverRequest.pathVariable("routeId");
|
||||||
Optional<String> keywords = serverRequest.queryParam("keywords");
|
Optional<String> keywords = serverRequest.queryParam("keywords");
|
||||||
Optional<String> type = serverRequest.queryParam("type");
|
Optional<String> type = serverRequest.queryParam("type");
|
||||||
|
|
||||||
RequestParameter requestParameter = new RequestParameter();
|
RequestParameter requestParameterExample = new RequestParameter();
|
||||||
requestParameter.setRouteId(routeId);
|
requestParameterExample.setRouteId(routeId);
|
||||||
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
|
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
|
||||||
.withMatcher("routeId", ExampleMatcher.GenericPropertyMatcher::exact)
|
.withMatcher("routeId", ExampleMatcher.GenericPropertyMatcher::exact)
|
||||||
.withIgnoreCase("id");
|
.withIgnoreCase("id");
|
||||||
if (keywords.isPresent() || type.isPresent()) {
|
if (keywords.isPresent()) {
|
||||||
String keywordTrim = keywords.get().trim();
|
requestParameterExample.setName(keywords.get().trim());
|
||||||
String typeTrim = type.get().trim();
|
exampleMatcher.withMatcher("name", ExampleMatcher.GenericPropertyMatcher::contains);
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(keywordTrim)) {
|
|
||||||
requestParameter.setName(keywordTrim);
|
|
||||||
exampleMatcher.withMatcher("name", ExampleMatcher.GenericPropertyMatcher::contains);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(typeTrim)) {
|
|
||||||
requestParameter.setType(typeTrim);
|
|
||||||
exampleMatcher.withMatcher("type", ExampleMatcher.GenericPropertyMatcher::exact);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Example example = Example.of(requestParameter, exampleMatcher);
|
if (type.isPresent()) {
|
||||||
|
requestParameterExample.setType(type.get().trim());
|
||||||
|
exampleMatcher.withMatcher("type", ExampleMatcher.GenericPropertyMatcher::exact);
|
||||||
|
}
|
||||||
|
Example example = Example.of(requestParameterExample, exampleMatcher);
|
||||||
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(requestParameterDao.findAll(example), RequestParameter.class);
|
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(requestParameterDao.findAll(example), RequestParameter.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,99 @@
|
|||||||
|
package ink.wgink.gateway.handler.route.request;
|
||||||
|
|
||||||
|
import ink.wgink.gateway.dao.route.request.IResponseHeaderDao;
|
||||||
|
import ink.wgink.gateway.enums.FilterRequestResponseTypeEnum;
|
||||||
|
import ink.wgink.gateway.exception.ParamsException;
|
||||||
|
import ink.wgink.gateway.exception.SearchException;
|
||||||
|
import ink.wgink.gateway.handler.BaseHandler;
|
||||||
|
import ink.wgink.gateway.pojo.result.SuccessResult;
|
||||||
|
import ink.wgink.gateway.pojo.route.request.ResponseHeader;
|
||||||
|
import ink.wgink.gateway.util.RequestFieldCheckUtil;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
import org.springframework.data.domain.Example;
|
||||||
|
import org.springframework.data.domain.ExampleMatcher;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
|
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;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When you feel like quitting. Think about why you started
|
||||||
|
* 当你想要放弃的时候,想想当初你为何开始
|
||||||
|
*
|
||||||
|
* @ClassName: ResponseHeaderHandler
|
||||||
|
* @Description: 响应头处理
|
||||||
|
* @Author: WangGeng
|
||||||
|
* @Date: 2021/5/30 17:00
|
||||||
|
* @Version: 1.0
|
||||||
|
**/
|
||||||
|
@Service
|
||||||
|
public class ResponseHeaderHandler extends BaseHandler {
|
||||||
|
|
||||||
|
private IResponseHeaderDao responseHeaderDao;
|
||||||
|
|
||||||
|
public ResponseHeaderHandler(IResponseHeaderDao responseHeaderDao) {
|
||||||
|
this.responseHeaderDao = responseHeaderDao;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mono<ServerResponse> save(ServerRequest serverRequest) {
|
||||||
|
Mono<ResponseHeader> requestHeaderMono = serverRequest.bodyToMono(ResponseHeader.class);
|
||||||
|
return requestHeaderMono.flatMap(responseHeader -> {
|
||||||
|
RequestFieldCheckUtil.check(responseHeader);
|
||||||
|
if (!StringUtils.equals(FilterRequestResponseTypeEnum.REMOVE.getValue(), responseHeader.getType()) && StringUtils.isBlank(responseHeader.getValue())) {
|
||||||
|
return Mono.error(new ParamsException("值不能为空"));
|
||||||
|
}
|
||||||
|
setSave(responseHeader);
|
||||||
|
|
||||||
|
ResponseHeader responseHeaderExample = new ResponseHeader();
|
||||||
|
responseHeaderExample.setName(responseHeader.getName().trim());
|
||||||
|
ExampleMatcher exampleMatcher = ExampleMatcher.matching().withMatcher("name", ExampleMatcher.GenericPropertyMatcher::exact).withIgnoreCase("id");
|
||||||
|
Example example = Example.of(responseHeaderExample, exampleMatcher);
|
||||||
|
return responseHeaderDao.findOne(example).flatMap(
|
||||||
|
r -> Mono.error(new SearchException("参数已经存在"))
|
||||||
|
).switchIfEmpty(responseHeaderDao.save(responseHeader));
|
||||||
|
}).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Flux.just(new SuccessResult()), SuccessResult.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mono<ServerResponse> delete(ServerRequest serverRequest) {
|
||||||
|
String ids = serverRequest.pathVariable("ids");
|
||||||
|
List<String> idList = Arrays.asList(ids.split(","));
|
||||||
|
return responseHeaderDao.findAllById(idList).flatMap(requestHeader -> responseHeaderDao.delete(requestHeader)).then(ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(Mono.just(new SuccessResult()), SuccessResult.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mono<ServerResponse> list(ServerRequest serverRequest) {
|
||||||
|
String routeId = serverRequest.pathVariable("routeId");
|
||||||
|
Optional<String> keywords = serverRequest.queryParam("keywords");
|
||||||
|
Optional<String> type = serverRequest.queryParam("type");
|
||||||
|
|
||||||
|
ResponseHeader responseHeaderExample = new ResponseHeader();
|
||||||
|
responseHeaderExample.setRouteId(routeId);
|
||||||
|
|
||||||
|
ExampleMatcher exampleMatcher = ExampleMatcher.matching()
|
||||||
|
.withMatcher("routeId", ExampleMatcher.GenericPropertyMatcher::exact)
|
||||||
|
.withIgnoreCase("id");
|
||||||
|
if (keywords.isPresent()) {
|
||||||
|
responseHeaderExample.setName(keywords.get().trim());
|
||||||
|
exampleMatcher.withMatcher("name", ExampleMatcher.GenericPropertyMatcher::contains);
|
||||||
|
}
|
||||||
|
if (type.isPresent()) {
|
||||||
|
responseHeaderExample.setType(type.get().trim());
|
||||||
|
exampleMatcher.withMatcher("type", ExampleMatcher.GenericPropertyMatcher::exact);
|
||||||
|
}
|
||||||
|
Example example = Example.of(responseHeaderExample, exampleMatcher);
|
||||||
|
return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON_UTF8).body(responseHeaderDao.findAll(example), ResponseHeader.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Mono<ServerResponse> get(ServerRequest serverRequest) {
|
||||||
|
String id = serverRequest.pathVariable("id");
|
||||||
|
return responseHeaderDao.findById(id).flatMap(
|
||||||
|
requestHeader -> ServerResponse.ok().body(Mono.just(requestHeader), ResponseHeader.class)
|
||||||
|
).switchIfEmpty(ServerResponse.notFound().build());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
package ink.wgink.gateway.pojo.route.request;
|
package ink.wgink.gateway.pojo.route.request;
|
||||||
|
|
||||||
import ink.wgink.gateway.annoation.CheckEmptyAnnotation;
|
import ink.wgink.gateway.annoation.CheckEmptyAnnotation;
|
||||||
import ink.wgink.gateway.annoation.CheckNumberAnnotation;
|
|
||||||
import ink.wgink.gateway.dao.route.request.IRequestHeaderDao;
|
import ink.wgink.gateway.dao.route.request.IRequestHeaderDao;
|
||||||
import ink.wgink.gateway.pojo.BasePOJO;
|
import ink.wgink.gateway.pojo.BasePOJO;
|
||||||
import org.springframework.data.mongodb.core.mapping.Document;
|
import org.springframework.data.mongodb.core.mapping.Document;
|
||||||
@ -21,11 +20,10 @@ public class RequestHeader extends BasePOJO {
|
|||||||
|
|
||||||
@CheckEmptyAnnotation(name = "路由ID")
|
@CheckEmptyAnnotation(name = "路由ID")
|
||||||
private String routeId;
|
private String routeId;
|
||||||
@CheckNumberAnnotation(name = "类型")
|
@CheckEmptyAnnotation(name = "类型")
|
||||||
private String type;
|
private String type;
|
||||||
@CheckEmptyAnnotation(name = "名称")
|
@CheckEmptyAnnotation(name = "名称")
|
||||||
private String name;
|
private String name;
|
||||||
@CheckEmptyAnnotation(name = "值")
|
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
public String getRouteId() {
|
public String getRouteId() {
|
||||||
|
@ -24,7 +24,6 @@ public class RequestParameter extends BasePOJO {
|
|||||||
private String type;
|
private String type;
|
||||||
@CheckEmptyAnnotation(name = "名称")
|
@CheckEmptyAnnotation(name = "名称")
|
||||||
private String name;
|
private String name;
|
||||||
@CheckEmptyAnnotation(name = "值")
|
|
||||||
private String value;
|
private String value;
|
||||||
|
|
||||||
public String getRouteId() {
|
public String getRouteId() {
|
||||||
|
@ -0,0 +1,60 @@
|
|||||||
|
package ink.wgink.gateway.pojo.route.request;
|
||||||
|
|
||||||
|
import ink.wgink.gateway.annoation.CheckEmptyAnnotation;
|
||||||
|
import ink.wgink.gateway.dao.route.request.IResponseHeaderDao;
|
||||||
|
import ink.wgink.gateway.pojo.BasePOJO;
|
||||||
|
import org.springframework.data.mongodb.core.mapping.Document;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When you feel like quitting. Think about why you started
|
||||||
|
* 当你想要放弃的时候,想想当初你为何开始
|
||||||
|
*
|
||||||
|
* @ClassName: ResponseHeader
|
||||||
|
* @Description: 响应头
|
||||||
|
* @Author: WangGeng
|
||||||
|
* @Date: 2021/5/29 22:20
|
||||||
|
* @Version: 1.0
|
||||||
|
**/
|
||||||
|
@Document(collection = IResponseHeaderDao.COLLECTION_NAME)
|
||||||
|
public class ResponseHeader extends BasePOJO {
|
||||||
|
|
||||||
|
@CheckEmptyAnnotation(name = "路由ID")
|
||||||
|
private String routeId;
|
||||||
|
@CheckEmptyAnnotation(name = "类型")
|
||||||
|
private String type;
|
||||||
|
@CheckEmptyAnnotation(name = "名称")
|
||||||
|
private String name;
|
||||||
|
private String value;
|
||||||
|
|
||||||
|
public String getRouteId() {
|
||||||
|
return routeId == null ? "" : routeId.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRouteId(String routeId) {
|
||||||
|
this.routeId = routeId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name == null ? "" : name.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getType() {
|
||||||
|
return type == null ? "" : type.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setType(String type) {
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getValue() {
|
||||||
|
return value == null ? "" : value.trim();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValue(String value) {
|
||||||
|
this.value = value;
|
||||||
|
}
|
||||||
|
}
|
@ -25,12 +25,11 @@ public class RequestHeaderRouter extends BaseRouter {
|
|||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public RouterFunction<ServerResponse> requestHeaderFunction(RequestHeaderHandler requestHeaderHandler) {
|
public RouterFunction<ServerResponse> requestHeaderFunction(RequestHeaderHandler requestHeaderHandler) {
|
||||||
return RouterFunctions.nest(RequestPredicates.path(ISystemConst.ADMIN_ROUTER_PREFIX + "/api/request-header"),
|
return RouterFunctions.nest(RequestPredicates.path(ISystemConst.ADMIN_ROUTER_PREFIX + "/api/route/request-header"),
|
||||||
RouterFunctions
|
RouterFunctions
|
||||||
.route(RequestPredicates.POST("/save"), requestHeaderHandler::save)
|
.route(RequestPredicates.POST("/save"), requestHeaderHandler::save)
|
||||||
.andRoute(RequestPredicates.DELETE("/delete/{ids}"), requestHeaderHandler::delete)
|
.andRoute(RequestPredicates.DELETE("/delete/{ids}"), requestHeaderHandler::delete)
|
||||||
.andRoute(RequestPredicates.PUT("/update/{id}"), requestHeaderHandler::update)
|
.andRoute(RequestPredicates.GET("list/{routeId}"), requestHeaderHandler::list)
|
||||||
.andRoute(RequestPredicates.GET("list"), requestHeaderHandler::list)
|
|
||||||
.andRoute(RequestPredicates.GET("/get/{id}"), requestHeaderHandler::get)
|
.andRoute(RequestPredicates.GET("/get/{id}"), requestHeaderHandler::get)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -25,13 +25,12 @@ public class RequestParameterRouter extends BaseRouter {
|
|||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public RouterFunction<ServerResponse> requestParameterFunction(RequestParameterHandler requestParameterHandler) {
|
public RouterFunction<ServerResponse> requestParameterFunction(RequestParameterHandler requestParameterHandler) {
|
||||||
return RouterFunctions.nest(RequestPredicates.path(ISystemConst.ADMIN_ROUTER_PREFIX + "/api/request-parameter"),
|
return RouterFunctions.nest(RequestPredicates.path(ISystemConst.ADMIN_ROUTER_PREFIX + "/api/route/request-parameter"),
|
||||||
RouterFunctions
|
RouterFunctions
|
||||||
.route(RequestPredicates.POST("/save"), requestParameterHandler::save)
|
.route(RequestPredicates.POST("/save"), requestParameterHandler::save)
|
||||||
.andRoute(RequestPredicates.DELETE("/delete/{ids}"), requestParameterHandler::delete)
|
.andRoute(RequestPredicates.DELETE("/delete/{ids}"), requestParameterHandler::delete)
|
||||||
.andRoute(RequestPredicates.PUT("/update/{id}"), requestParameterHandler::update)
|
.andRoute(RequestPredicates.GET("list/{routeId}"), requestParameterHandler::list)
|
||||||
.andRoute(RequestPredicates.GET("list"), requestParameterHandler::list)
|
.andRoute(RequestPredicates.GET("/get/{id}"), requestParameterHandler::get)
|
||||||
.andRoute(RequestPredicates.GET("/get{id}"), requestParameterHandler::get)
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
package ink.wgink.gateway.router.route.request;
|
||||||
|
|
||||||
|
import ink.wgink.gateway.consts.ISystemConst;
|
||||||
|
import ink.wgink.gateway.handler.route.request.ResponseHeaderHandler;
|
||||||
|
import ink.wgink.gateway.router.BaseRouter;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
import org.springframework.web.reactive.function.server.RequestPredicates;
|
||||||
|
import org.springframework.web.reactive.function.server.RouterFunction;
|
||||||
|
import org.springframework.web.reactive.function.server.RouterFunctions;
|
||||||
|
import org.springframework.web.reactive.function.server.ServerResponse;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When you feel like quitting. Think about why you started
|
||||||
|
* 当你想要放弃的时候,想想当初你为何开始
|
||||||
|
*
|
||||||
|
* @ClassName: ResponseHeaderRouter
|
||||||
|
* @Description: 响应头路由
|
||||||
|
* @Author: WangGeng
|
||||||
|
* @Date: 2021/5/30 17:07
|
||||||
|
* @Version: 1.0
|
||||||
|
**/
|
||||||
|
@Component
|
||||||
|
public class ResponseHeaderRouter extends BaseRouter {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public RouterFunction<ServerResponse> responseHeaderFunction(ResponseHeaderHandler responseHeaderHandler) {
|
||||||
|
return RouterFunctions.nest(RequestPredicates.path(ISystemConst.ADMIN_ROUTER_PREFIX + "/api/route/response-header"),
|
||||||
|
RouterFunctions
|
||||||
|
.route(RequestPredicates.POST("/save"), responseHeaderHandler::save)
|
||||||
|
.andRoute(RequestPredicates.DELETE("/delete/{ids}"), responseHeaderHandler::delete)
|
||||||
|
.andRoute(RequestPredicates.GET("list/{routeId}"), responseHeaderHandler::list)
|
||||||
|
.andRoute(RequestPredicates.GET("/get/{id}"), responseHeaderHandler::get)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -14,5 +14,5 @@ spring:
|
|||||||
|
|
||||||
logging:
|
logging:
|
||||||
level:
|
level:
|
||||||
org.springframework: error
|
org.springframework: debug
|
||||||
ink.wgink: debug
|
ink.wgink: debug
|
@ -114,7 +114,6 @@ layui.define(function(exports) {
|
|||||||
successCallback(responseCode, data, args);
|
successCallback(responseCode, data, args);
|
||||||
},
|
},
|
||||||
error: function (XMLHttpRequest) {
|
error: function (XMLHttpRequest) {
|
||||||
console.log(XMLHttpRequest)
|
|
||||||
var responseCode = XMLHttpRequest.status;
|
var responseCode = XMLHttpRequest.status;
|
||||||
var responseData = JSON.parse(XMLHttpRequest.responseText ? XMLHttpRequest.responseText: "{}");
|
var responseData = JSON.parse(XMLHttpRequest.responseText ? XMLHttpRequest.responseText: "{}");
|
||||||
if (errorCallback != undefined && errorCallback != null && typeof(errorCallback) == 'function') {
|
if (errorCallback != undefined && errorCallback != null && typeof(errorCallback) == 'function') {
|
||||||
|
@ -111,12 +111,8 @@
|
|||||||
'routeCount': function(value, old) {
|
'routeCount': function(value, old) {
|
||||||
$('#routeCount').animateNumbers(value);
|
$('#routeCount').animateNumbers(value);
|
||||||
},
|
},
|
||||||
'lastRequestLogArray': function(value, old) {
|
'lastRequestLogArray': function(value, old) {},
|
||||||
|
'lastRequestLogLineChat': function() {}
|
||||||
},
|
|
||||||
'lastRequestLogLineChat': function() {
|
|
||||||
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
sseCountHome: function() {
|
sseCountHome: function() {
|
||||||
@ -138,8 +134,6 @@
|
|||||||
source.addEventListener('error', function(e) {
|
source.addEventListener('error', function(e) {
|
||||||
if (e.readyState == EventSource.CLOSED) {
|
if (e.readyState == EventSource.CLOSED) {
|
||||||
console.log("连接关闭");
|
console.log("连接关闭");
|
||||||
} else {
|
|
||||||
console.log(e);
|
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
},
|
},
|
||||||
@ -221,8 +215,6 @@
|
|||||||
source.addEventListener('error', function(e) {
|
source.addEventListener('error', function(e) {
|
||||||
if (e.readyState == EventSource.CLOSED) {
|
if (e.readyState == EventSource.CLOSED) {
|
||||||
console.log("连接关闭");
|
console.log("连接关闭");
|
||||||
} else {
|
|
||||||
console.log(e);
|
|
||||||
}
|
}
|
||||||
}, false);
|
}, false);
|
||||||
},
|
},
|
||||||
|
@ -174,7 +174,16 @@
|
|||||||
}
|
}
|
||||||
return rowData;
|
return rowData;
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
{field: 'headersParams', width: 188, title: '参数设置', align: 'center', fixed: 'right',
|
||||||
|
templet: function (row) {
|
||||||
|
return '<div class="layui-btn-group">' +
|
||||||
|
'<button type="button" class="layui-btn layui-btn-xs layui-btn-normal" lay-event="requestHeaderEvent">请求头</button>' +
|
||||||
|
'<button type="button" class="layui-btn layui-btn-xs" lay-event="paramsEvent">请求参数</button>' +
|
||||||
|
'<button type="button" class="layui-btn layui-btn-xs layui-btn-warm" lay-event="responseHeaderEvent">响应头</button>' +
|
||||||
|
'</div>';
|
||||||
|
}
|
||||||
|
},
|
||||||
]],
|
]],
|
||||||
data: tableData.dataArray,
|
data: tableData.dataArray,
|
||||||
page: true,
|
page: true,
|
||||||
@ -299,6 +308,36 @@
|
|||||||
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
table.on('tool(dataTable)', function(obj) {
|
||||||
|
var layEvent = obj.event;
|
||||||
|
var data = obj.data;
|
||||||
|
if(layEvent === 'requestHeaderEvent') {
|
||||||
|
top.dialog.open({
|
||||||
|
url: top.restAjax.path('route/route/request-header/list.html?routeId={uuid}', [data.uuid]),
|
||||||
|
title: '请求头参数设置',
|
||||||
|
width: '750px',
|
||||||
|
height: '400px',
|
||||||
|
onClose: function() {}
|
||||||
|
});
|
||||||
|
} else if(layEvent === 'responseHeaderEvent') {
|
||||||
|
top.dialog.open({
|
||||||
|
url: top.restAjax.path('route/route/response-header/list.html?routeId={uuid}', [data.uuid]),
|
||||||
|
title: '响应头参数设置',
|
||||||
|
width: '750px',
|
||||||
|
height: '400px',
|
||||||
|
onClose: function() {}
|
||||||
|
});
|
||||||
|
} else if(layEvent === 'paramsEvent') {
|
||||||
|
top.dialog.open({
|
||||||
|
url: top.restAjax.path('route/route/request-parameter/list.html?routeId={uuid}', [data.uuid]),
|
||||||
|
title: '请求参数设置',
|
||||||
|
width: '750px',
|
||||||
|
height: '400px',
|
||||||
|
onClose: function() {}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
@ -0,0 +1,231 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<base href="/wg/">
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||||
|
<link rel="stylesheet" href="assets/font/font-awesome/css/font-awesome.min.css">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/layui.css">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/admin.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="layui-anim layui-anim-fadein list-page-container">
|
||||||
|
<div class="test-table-reload-btn">
|
||||||
|
<div class="layui-inline layui-form search-item search-item-width-100">
|
||||||
|
<select id="type" name="type" >
|
||||||
|
<option value=""></option>
|
||||||
|
<option value="add">添加</option>
|
||||||
|
<option value="set">替换</option>
|
||||||
|
<option value="remove">移除</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="layui-btn-group">
|
||||||
|
<button type="button" id="search" class="layui-btn layui-btn-sm">
|
||||||
|
<i class="fa fa-lg fa-search"></i> 搜索
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
|
||||||
|
<!-- 表头按钮组 -->
|
||||||
|
<script type="text/html" id="headerToolBar">
|
||||||
|
<div class="layui-btn-group">
|
||||||
|
<button type="button" class="layui-btn layui-btn-sm" lay-event="saveEvent">
|
||||||
|
<i class="fa fa-lg fa-plus"></i> 新增
|
||||||
|
</button>
|
||||||
|
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm"
|
||||||
|
lay-event="removeEvent">
|
||||||
|
<i class="fa fa-lg fa-trash"></i> 删除
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<script src="assets/layui/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
layui.config({
|
||||||
|
base: 'assets/layui/modules/'
|
||||||
|
}).extend({}).use(['layer', 'table'], function () {
|
||||||
|
var $ = layui.$;
|
||||||
|
var $win = $(window);
|
||||||
|
var layer = layui.layer;
|
||||||
|
var table = layui.table;
|
||||||
|
var laydate = layui.laydate;
|
||||||
|
var routeId = top.restAjax.params(window.location.href).routeId;
|
||||||
|
var resizeTimeout = null;
|
||||||
|
var tableData = {
|
||||||
|
tableUrl: 'api/route/request-header/list/{routeId}',
|
||||||
|
dataArray: [],
|
||||||
|
currentPage: null
|
||||||
|
}
|
||||||
|
|
||||||
|
function reloadTable(currentPage) {
|
||||||
|
table.reload('dataTable', {
|
||||||
|
data: tableData.dataArray,
|
||||||
|
page: {
|
||||||
|
curr: currentPage ? currentPage : tableData.currentPage
|
||||||
|
},
|
||||||
|
height: $win.height() - 72,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function initTable() {
|
||||||
|
var params = {};
|
||||||
|
if($('#type').val()) {
|
||||||
|
params.type = $('#type').val();
|
||||||
|
}
|
||||||
|
top.restAjax.get(top.restAjax.path(tableData.tableUrl, [routeId]), params, null, function(code, data) {
|
||||||
|
tableData.dataArray = [];
|
||||||
|
for(var i = 0, item; item = data[i++];) {
|
||||||
|
tableData.dataArray.push(item);
|
||||||
|
}
|
||||||
|
if(tableData.currentPage) {
|
||||||
|
reloadTable();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
table.render({
|
||||||
|
elem: '#dataTable',
|
||||||
|
id: 'dataTable',
|
||||||
|
width: '100%',
|
||||||
|
height: $win.height() - 72,
|
||||||
|
limit: 20,
|
||||||
|
limits: [20, 40, 60, 80, 100, 200],
|
||||||
|
toolbar: '#headerToolBar',
|
||||||
|
defaultToolbar: [],
|
||||||
|
cols: [[
|
||||||
|
{type: 'checkbox', fixed: 'left'},
|
||||||
|
{field: 'rowNum', width: 80, title: '序号', fixed: 'left', align: 'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
|
||||||
|
{field: 'name', width: 160, title: '名称', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return rowData;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{field: 'value', width: 160, title: '值', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return rowData;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{field: 'type', width: 80, title: '类型', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
if (rowData === 'add') {
|
||||||
|
return '<span class="layui-badge layui-bg-blue">添加</span>';
|
||||||
|
}
|
||||||
|
if(rowData === 'set') {
|
||||||
|
return '<span class="layui-badge layui-bg-cyan">替换</span>';
|
||||||
|
}
|
||||||
|
if(rowData === 'remove') {
|
||||||
|
return '<span class="layui-badge layui-bg-red">移除</span>';
|
||||||
|
}
|
||||||
|
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 == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return rowData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]],
|
||||||
|
data: tableData.dataArray,
|
||||||
|
page: true,
|
||||||
|
done: function(res, curr, count) {
|
||||||
|
tableData.currentPage = curr;
|
||||||
|
if (curr > 1 && res.data.length === 0) {
|
||||||
|
tableData.currentPage = curr - 1;
|
||||||
|
reloadTable(tableData.currentPage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(code, data) {
|
||||||
|
top.dialog.msg(data.msg);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
initTable();
|
||||||
|
// 事件 - 页面变化
|
||||||
|
$win.on('resize', function() {
|
||||||
|
clearTimeout(resizeTimeout);
|
||||||
|
resizeTimeout = setTimeout(function() {
|
||||||
|
initTable();
|
||||||
|
}, 500);
|
||||||
|
});
|
||||||
|
// 事件 - 搜索
|
||||||
|
$(document).on('click', '#search', function() {
|
||||||
|
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/request-header/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/request-header/save.html?routeId={routeId}', [routeId]),
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,114 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<base href="/wg/">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/layui.css">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/admin.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="layui-anim layui-anim-fadein info-page-container">
|
||||||
|
<div class="layui-card">
|
||||||
|
<div class="layui-card-header">
|
||||||
|
<span class="layui-breadcrumb" lay-filter="breadcrumb" style="visibility: visible;">
|
||||||
|
<a class="close" href="javascript:void(0);">上级列表</a><span lay-separator="">/</span>
|
||||||
|
<a href="javascript:void(0);"><cite>新增内容</cite></a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="layui-card-body" style="padding: 15px;">
|
||||||
|
<form class="layui-form layui-form-pane" lay-filter="dataForm">
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">名称 *</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="name" class="layui-input" lay-verify="required" placeholder="请输入名称,请求头中的键值对的键名,不能有空格">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item" pane>
|
||||||
|
<label class="layui-form-label">类型 *</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="radio" name="type" value="add" title="添加" checked>
|
||||||
|
<input type="radio" name="type" value="set" title="替换">
|
||||||
|
<input type="radio" name="type" value="remove" title="移除">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">值</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="value" class="layui-input" placeholder="请输入值,请求头中的键值对的值,当类型为移除时,可以为空">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item layui-layout-admin">
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<div class="footer-button-box layui-btn-group">
|
||||||
|
<button type="button" class="layui-btn" lay-submit lay-filter="submitForm">提交新增</button>
|
||||||
|
<button type="button" class="layui-btn layui-btn-primary close">返回上级</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="assets/layui/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
layui.config({
|
||||||
|
base: 'assets/layui/modules/'
|
||||||
|
}).extend({}).use(['form', 'laydate', 'laytpl', 'regex'], function(){
|
||||||
|
var $ = layui.$;
|
||||||
|
var form = layui.form;
|
||||||
|
var layer = layui.layer;
|
||||||
|
var regex = layui.regex;
|
||||||
|
var params = top.restAjax.params(window.location.href);
|
||||||
|
var routeId = params.routeId;
|
||||||
|
var uuid = params.uuid;
|
||||||
|
|
||||||
|
function closeBox() {
|
||||||
|
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化内容
|
||||||
|
function initData() {
|
||||||
|
}
|
||||||
|
initData();
|
||||||
|
|
||||||
|
// 提交表单
|
||||||
|
form.on('submit(submitForm)', function(formData) {
|
||||||
|
top.dialog.confirm(top.dataMessage.commit, function(index) {
|
||||||
|
top.dialog.close(index);
|
||||||
|
var loadLayerIndex;
|
||||||
|
formData.field.routeId = routeId;
|
||||||
|
top.restAjax.post(top.restAjax.path('api/route/request-header/save', []), formData.field, null, function(code, data) {
|
||||||
|
var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, {
|
||||||
|
time: 0,
|
||||||
|
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
|
||||||
|
shade: 0.3,
|
||||||
|
yes: function(index) {
|
||||||
|
top.dialog.close(index);
|
||||||
|
window.location.reload();
|
||||||
|
},
|
||||||
|
btn2: function() {
|
||||||
|
closeBox();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(code, data) {
|
||||||
|
top.dialog.msg(data.msg);
|
||||||
|
}, function() {
|
||||||
|
loadLayerIndex = top.dialog.msg(top.dataMessage.committing, {icon: 16, time: 0, shade: 0.3});
|
||||||
|
}, function() {
|
||||||
|
top.dialog.close(loadLayerIndex);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.close').on('click', function() {
|
||||||
|
closeBox();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,227 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<base href="/wg/">
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||||
|
<link rel="stylesheet" href="assets/font/font-awesome/css/font-awesome.min.css">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/layui.css">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/admin.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="layui-anim layui-anim-fadein list-page-container">
|
||||||
|
<div class="test-table-reload-btn">
|
||||||
|
<div class="layui-inline layui-form search-item search-item-width-100">
|
||||||
|
<select id="type" name="type" >
|
||||||
|
<option value=""></option>
|
||||||
|
<option value="add">添加</option>
|
||||||
|
<option value="remove">移除</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="layui-btn-group">
|
||||||
|
<button type="button" id="search" class="layui-btn layui-btn-sm">
|
||||||
|
<i class="fa fa-lg fa-search"></i> 搜索
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
|
||||||
|
<!-- 表头按钮组 -->
|
||||||
|
<script type="text/html" id="headerToolBar">
|
||||||
|
<div class="layui-btn-group">
|
||||||
|
<button type="button" class="layui-btn layui-btn-sm" lay-event="saveEvent">
|
||||||
|
<i class="fa fa-lg fa-plus"></i> 新增
|
||||||
|
</button>
|
||||||
|
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm"
|
||||||
|
lay-event="removeEvent">
|
||||||
|
<i class="fa fa-lg fa-trash"></i> 删除
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<script src="assets/layui/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
layui.config({
|
||||||
|
base: 'assets/layui/modules/'
|
||||||
|
}).extend({}).use(['layer', 'table'], function () {
|
||||||
|
var $ = layui.$;
|
||||||
|
var $win = $(window);
|
||||||
|
var layer = layui.layer;
|
||||||
|
var table = layui.table;
|
||||||
|
var laydate = layui.laydate;
|
||||||
|
var routeId = top.restAjax.params(window.location.href).routeId;
|
||||||
|
var resizeTimeout = null;
|
||||||
|
var tableData = {
|
||||||
|
tableUrl: 'api/route/request-parameter/list/{routeId}',
|
||||||
|
dataArray: [],
|
||||||
|
currentPage: null
|
||||||
|
}
|
||||||
|
|
||||||
|
function reloadTable(currentPage) {
|
||||||
|
table.reload('dataTable', {
|
||||||
|
data: tableData.dataArray,
|
||||||
|
page: {
|
||||||
|
curr: currentPage ? currentPage : tableData.currentPage
|
||||||
|
},
|
||||||
|
height: $win.height() - 72,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function initTable() {
|
||||||
|
var params = {};
|
||||||
|
if($('#type').val()) {
|
||||||
|
params.type = $('#type').val();
|
||||||
|
}
|
||||||
|
top.restAjax.get(top.restAjax.path(tableData.tableUrl, [routeId]), params, null, function(code, data) {
|
||||||
|
tableData.dataArray = [];
|
||||||
|
for(var i = 0, item; item = data[i++];) {
|
||||||
|
tableData.dataArray.push(item);
|
||||||
|
}
|
||||||
|
if(tableData.currentPage) {
|
||||||
|
reloadTable();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
table.render({
|
||||||
|
elem: '#dataTable',
|
||||||
|
id: 'dataTable',
|
||||||
|
width: '100%',
|
||||||
|
height: $win.height() - 72,
|
||||||
|
limit: 20,
|
||||||
|
limits: [20, 40, 60, 80, 100, 200],
|
||||||
|
toolbar: '#headerToolBar',
|
||||||
|
defaultToolbar: [],
|
||||||
|
cols: [[
|
||||||
|
{type: 'checkbox', fixed: 'left'},
|
||||||
|
{field: 'rowNum', width: 80, title: '序号', fixed: 'left', align: 'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
|
||||||
|
{field: 'name', width: 160, title: '名称', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return rowData;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{field: 'value', width: 160, title: '值', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return rowData;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{field: 'type', width: 80, title: '类型', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
if (rowData === 'add') {
|
||||||
|
return '<span class="layui-badge layui-bg-blue">添加</span>';
|
||||||
|
}
|
||||||
|
if(rowData === 'remove') {
|
||||||
|
return '<span class="layui-badge layui-bg-red">移除</span>';
|
||||||
|
}
|
||||||
|
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 == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return rowData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]],
|
||||||
|
data: tableData.dataArray,
|
||||||
|
page: true,
|
||||||
|
done: function(res, curr, count) {
|
||||||
|
tableData.currentPage = curr;
|
||||||
|
if (curr > 1 && res.data.length === 0) {
|
||||||
|
tableData.currentPage = curr - 1;
|
||||||
|
reloadTable(tableData.currentPage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(code, data) {
|
||||||
|
top.dialog.msg(data.msg);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
initTable();
|
||||||
|
// 事件 - 页面变化
|
||||||
|
$win.on('resize', function() {
|
||||||
|
clearTimeout(resizeTimeout);
|
||||||
|
resizeTimeout = setTimeout(function() {
|
||||||
|
initTable();
|
||||||
|
}, 500);
|
||||||
|
});
|
||||||
|
// 事件 - 搜索
|
||||||
|
$(document).on('click', '#search', function() {
|
||||||
|
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/request-parameter/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/request-parameter/save.html?routeId={routeId}', [routeId]),
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,112 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<base href="/wg/">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/layui.css">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/admin.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="layui-anim layui-anim-fadein info-page-container">
|
||||||
|
<div class="layui-card">
|
||||||
|
<div class="layui-card-header">
|
||||||
|
<span class="layui-breadcrumb" lay-filter="breadcrumb" style="visibility: visible;">
|
||||||
|
<a class="close" href="javascript:void(0);">上级列表</a><span lay-separator="">/</span>
|
||||||
|
<a href="javascript:void(0);"><cite>新增内容</cite></a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="layui-card-body" style="padding: 15px;">
|
||||||
|
<form class="layui-form layui-form-pane" lay-filter="dataForm">
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">名称 *</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="name" class="layui-input" lay-verify="required" placeholder="请输入名称,请求参数的键值对的值,不能有空格">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item" pane>
|
||||||
|
<label class="layui-form-label">类型 *</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="radio" name="type" value="add" title="添加" checked>
|
||||||
|
<input type="radio" name="type" value="remove" title="移除">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">值</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="value" class="layui-input" placeholder="请输入值,请求参数的键值对的值,当类型为移除时,可以为空">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item layui-layout-admin">
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<div class="footer-button-box layui-btn-group">
|
||||||
|
<button type="button" class="layui-btn" lay-submit lay-filter="submitForm">提交新增</button>
|
||||||
|
<button type="button" class="layui-btn layui-btn-primary close">返回上级</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="assets/layui/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
layui.config({
|
||||||
|
base: 'assets/layui/modules/'
|
||||||
|
}).extend({}).use(['form', 'laydate', 'laytpl', 'regex'], function(){
|
||||||
|
var $ = layui.$;
|
||||||
|
var form = layui.form;
|
||||||
|
var layer = layui.layer;
|
||||||
|
var regex = layui.regex;
|
||||||
|
var params = top.restAjax.params(window.location.href);
|
||||||
|
var routeId = params.routeId;
|
||||||
|
var uuid = params.uuid;
|
||||||
|
|
||||||
|
function closeBox() {
|
||||||
|
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化内容
|
||||||
|
function initData() {
|
||||||
|
}
|
||||||
|
initData();
|
||||||
|
|
||||||
|
// 提交表单
|
||||||
|
form.on('submit(submitForm)', function(formData) {
|
||||||
|
top.dialog.confirm(top.dataMessage.commit, function(index) {
|
||||||
|
top.dialog.close(index);
|
||||||
|
var loadLayerIndex;
|
||||||
|
formData.field.routeId = routeId;
|
||||||
|
top.restAjax.post(top.restAjax.path('api/route/request-parameter/save', []), formData.field, null, function(code, data) {
|
||||||
|
var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, {
|
||||||
|
time: 0,
|
||||||
|
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
|
||||||
|
shade: 0.3,
|
||||||
|
yes: function(index) {
|
||||||
|
top.dialog.close(index);
|
||||||
|
window.location.reload();
|
||||||
|
},
|
||||||
|
btn2: function() {
|
||||||
|
closeBox();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(code, data) {
|
||||||
|
top.dialog.msg(data.msg);
|
||||||
|
}, function() {
|
||||||
|
loadLayerIndex = top.dialog.msg(top.dataMessage.committing, {icon: 16, time: 0, shade: 0.3});
|
||||||
|
}, function() {
|
||||||
|
top.dialog.close(loadLayerIndex);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.close').on('click', function() {
|
||||||
|
closeBox();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,231 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<base href="/wg/">
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||||
|
<link rel="stylesheet" href="assets/font/font-awesome/css/font-awesome.min.css">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/layui.css">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/admin.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="layui-anim layui-anim-fadein list-page-container">
|
||||||
|
<div class="test-table-reload-btn">
|
||||||
|
<div class="layui-inline layui-form search-item search-item-width-100">
|
||||||
|
<select id="type" name="type" >
|
||||||
|
<option value=""></option>
|
||||||
|
<option value="add">添加</option>
|
||||||
|
<option value="set">替换</option>
|
||||||
|
<option value="remove">移除</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
<div class="layui-btn-group">
|
||||||
|
<button type="button" id="search" class="layui-btn layui-btn-sm">
|
||||||
|
<i class="fa fa-lg fa-search"></i> 搜索
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<table class="layui-hide" id="dataTable" lay-filter="dataTable"></table>
|
||||||
|
<!-- 表头按钮组 -->
|
||||||
|
<script type="text/html" id="headerToolBar">
|
||||||
|
<div class="layui-btn-group">
|
||||||
|
<button type="button" class="layui-btn layui-btn-sm" lay-event="saveEvent">
|
||||||
|
<i class="fa fa-lg fa-plus"></i> 新增
|
||||||
|
</button>
|
||||||
|
<button type="button" class="layui-btn layui-btn-danger layui-btn-sm"
|
||||||
|
lay-event="removeEvent">
|
||||||
|
<i class="fa fa-lg fa-trash"></i> 删除
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</script>
|
||||||
|
</div>
|
||||||
|
<script src="assets/layui/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
layui.config({
|
||||||
|
base: 'assets/layui/modules/'
|
||||||
|
}).extend({}).use(['layer', 'table'], function () {
|
||||||
|
var $ = layui.$;
|
||||||
|
var $win = $(window);
|
||||||
|
var layer = layui.layer;
|
||||||
|
var table = layui.table;
|
||||||
|
var laydate = layui.laydate;
|
||||||
|
var routeId = top.restAjax.params(window.location.href).routeId;
|
||||||
|
var resizeTimeout = null;
|
||||||
|
var tableData = {
|
||||||
|
tableUrl: 'api/route/response-header/list/{routeId}',
|
||||||
|
dataArray: [],
|
||||||
|
currentPage: null
|
||||||
|
}
|
||||||
|
|
||||||
|
function reloadTable(currentPage) {
|
||||||
|
table.reload('dataTable', {
|
||||||
|
data: tableData.dataArray,
|
||||||
|
page: {
|
||||||
|
curr: currentPage ? currentPage : tableData.currentPage
|
||||||
|
},
|
||||||
|
height: $win.height() - 72,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
function initTable() {
|
||||||
|
var params = {};
|
||||||
|
if($('#type').val()) {
|
||||||
|
params.type = $('#type').val();
|
||||||
|
}
|
||||||
|
top.restAjax.get(top.restAjax.path(tableData.tableUrl, [routeId]), params, null, function(code, data) {
|
||||||
|
tableData.dataArray = [];
|
||||||
|
for(var i = 0, item; item = data[i++];) {
|
||||||
|
tableData.dataArray.push(item);
|
||||||
|
}
|
||||||
|
if(tableData.currentPage) {
|
||||||
|
reloadTable();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
table.render({
|
||||||
|
elem: '#dataTable',
|
||||||
|
id: 'dataTable',
|
||||||
|
width: '100%',
|
||||||
|
height: $win.height() - 72,
|
||||||
|
limit: 20,
|
||||||
|
limits: [20, 40, 60, 80, 100, 200],
|
||||||
|
toolbar: '#headerToolBar',
|
||||||
|
defaultToolbar: [],
|
||||||
|
cols: [[
|
||||||
|
{type: 'checkbox', fixed: 'left'},
|
||||||
|
{field: 'rowNum', width: 80, title: '序号', fixed: 'left', align: 'center', templet: '<span>{{d.LAY_INDEX}}</span>'},
|
||||||
|
{field: 'name', width: 160, title: '名称', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return rowData;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{field: 'value', width: 160, title: '值', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return rowData;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{field: 'type', width: 80, title: '类型', align: 'center', sort: true,
|
||||||
|
templet: function (row) {
|
||||||
|
var rowData = row[this.field];
|
||||||
|
if (typeof (rowData) === 'undefined' || rowData == null || rowData == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
if (rowData === 'add') {
|
||||||
|
return '<span class="layui-badge layui-bg-blue">添加</span>';
|
||||||
|
}
|
||||||
|
if(rowData === 'set') {
|
||||||
|
return '<span class="layui-badge layui-bg-cyan">设置</span>';
|
||||||
|
}
|
||||||
|
if(rowData === 'remove') {
|
||||||
|
return '<span class="layui-badge layui-bg-red">移除</span>';
|
||||||
|
}
|
||||||
|
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 == '') {
|
||||||
|
return '-';
|
||||||
|
}
|
||||||
|
return rowData;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]],
|
||||||
|
data: tableData.dataArray,
|
||||||
|
page: true,
|
||||||
|
done: function(res, curr, count) {
|
||||||
|
tableData.currentPage = curr;
|
||||||
|
if (curr > 1 && res.data.length === 0) {
|
||||||
|
tableData.currentPage = curr - 1;
|
||||||
|
reloadTable(tableData.currentPage);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(code, data) {
|
||||||
|
top.dialog.msg(data.msg);
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
initTable();
|
||||||
|
// 事件 - 页面变化
|
||||||
|
$win.on('resize', function() {
|
||||||
|
clearTimeout(resizeTimeout);
|
||||||
|
resizeTimeout = setTimeout(function() {
|
||||||
|
initTable();
|
||||||
|
}, 500);
|
||||||
|
});
|
||||||
|
// 事件 - 搜索
|
||||||
|
$(document).on('click', '#search', function() {
|
||||||
|
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/response-header/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/response-header/save.html?routeId={routeId}', [routeId]),
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,113 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<base href="/wg/">
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="renderer" content="webkit">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/layui.css">
|
||||||
|
<link rel="stylesheet" href="assets/layui/css/admin.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="layui-anim layui-anim-fadein info-page-container">
|
||||||
|
<div class="layui-card">
|
||||||
|
<div class="layui-card-header">
|
||||||
|
<span class="layui-breadcrumb" lay-filter="breadcrumb" style="visibility: visible;">
|
||||||
|
<a class="close" href="javascript:void(0);">上级列表</a><span lay-separator="">/</span>
|
||||||
|
<a href="javascript:void(0);"><cite>新增内容</cite></a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="layui-card-body" style="padding: 15px;">
|
||||||
|
<form class="layui-form layui-form-pane" lay-filter="dataForm">
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">名称 *</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="name" class="layui-input" lay-verify="required" placeholder="请输入名称,响应头中的键值对的键名,不能有空格">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item" pane>
|
||||||
|
<label class="layui-form-label">类型 *</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="radio" name="type" value="add" title="添加" checked>
|
||||||
|
<input type="radio" name="type" value="set" title="替换">
|
||||||
|
<input type="radio" name="type" value="remove" title="移除">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item">
|
||||||
|
<label class="layui-form-label">值</label>
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<input type="text" name="value" class="layui-input" placeholder="请输入值,响应头中的键值对的值,当类型为移除时,可以为空">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="layui-form-item layui-layout-admin">
|
||||||
|
<div class="layui-input-block">
|
||||||
|
<div class="footer-button-box layui-btn-group">
|
||||||
|
<button type="button" class="layui-btn" lay-submit lay-filter="submitForm">提交新增</button>
|
||||||
|
<button type="button" class="layui-btn layui-btn-primary close">返回上级</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="assets/layui/layui.js"></script>
|
||||||
|
<script>
|
||||||
|
layui.config({
|
||||||
|
base: 'assets/layui/modules/'
|
||||||
|
}).extend({}).use(['form', 'laydate', 'laytpl', 'regex'], function(){
|
||||||
|
var $ = layui.$;
|
||||||
|
var form = layui.form;
|
||||||
|
var layer = layui.layer;
|
||||||
|
var regex = layui.regex;
|
||||||
|
var params = top.restAjax.params(window.location.href);
|
||||||
|
var routeId = params.routeId;
|
||||||
|
var uuid = params.uuid;
|
||||||
|
|
||||||
|
function closeBox() {
|
||||||
|
parent.layer.close(parent.layer.getFrameIndex(window.name));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 初始化内容
|
||||||
|
function initData() {
|
||||||
|
}
|
||||||
|
initData();
|
||||||
|
|
||||||
|
// 提交表单
|
||||||
|
form.on('submit(submitForm)', function(formData) {
|
||||||
|
top.dialog.confirm(top.dataMessage.commit, function(index) {
|
||||||
|
top.dialog.close(index);
|
||||||
|
var loadLayerIndex;
|
||||||
|
formData.field.routeId = routeId;
|
||||||
|
top.restAjax.post(top.restAjax.path('api/route/response-header/save', []), formData.field, null, function(code, data) {
|
||||||
|
var layerIndex = top.dialog.msg(top.dataMessage.commitSuccess, {
|
||||||
|
time: 0,
|
||||||
|
btn: [top.dataMessage.button.yes, top.dataMessage.button.no],
|
||||||
|
shade: 0.3,
|
||||||
|
yes: function(index) {
|
||||||
|
top.dialog.close(index);
|
||||||
|
window.location.reload();
|
||||||
|
},
|
||||||
|
btn2: function() {
|
||||||
|
closeBox();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, function(code, data) {
|
||||||
|
top.dialog.msg(data.msg);
|
||||||
|
}, function() {
|
||||||
|
loadLayerIndex = top.dialog.msg(top.dataMessage.committing, {icon: 16, time: 0, shade: 0.3});
|
||||||
|
}, function() {
|
||||||
|
top.dialog.close(loadLayerIndex);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
|
$('.close').on('click', function() {
|
||||||
|
closeBox();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
Loading…
Reference in New Issue
Block a user