Commit d564a649 by inrgihc

接入sentinel的流量控制

parent a90ceb6f
......@@ -20,6 +20,9 @@
- 支持生成在线接口文档功能
> 基于swagger-ui提供生成在线接口文档功能。
- 支持接口的流量控制功能
> 执行器基于sentinel支持接口的流量控制功能。
### 2、支持的数据库
- 甲骨文的Oracle
......
......@@ -31,7 +31,7 @@ cd $PROJECT_ROOT_DIR && sh docker-maven-clean.sh && cd -
# login and push docker image
docker login -u inrgihc
docker push inrgihc/sqlrest-manager:${SQLREST_VERSION}
docker push inrgihc/sqlrest-executor:${SQLREST_VERSION}
docker push inrgihc/sqlrest-gateway:${SQLREST_VERSION}
docker push registry.cn-hangzhou.aliyuncs.com/inrgihc/sqlrest-manager:${SQLREST_VERSION}
docker push registry.cn-hangzhou.aliyuncs.com/inrgihc/sqlrest-executor:${SQLREST_VERSION}
docker push registry.cn-hangzhou.aliyuncs.com/inrgihc/sqlrest-gateway:${SQLREST_VERSION}
......@@ -19,7 +19,7 @@ services:
start_period: 30s
manager:
container_name: sqlrest_manager
image: inrgihc/sqlrest-manager:1.0.0
image: registry.cn-hangzhou.aliyuncs.com/inrgihc/sqlrest-manager:1.0.0
network_mode: host
environment:
MYSQLDB_HOST: localhost
......@@ -40,7 +40,7 @@ services:
condition: service_healthy
executor:
container_name: sqlrest_executor
image: inrgihc/sqlrest-executor:1.0.0
image: registry.cn-hangzhou.aliyuncs.com/inrgihc/sqlrest-executor:1.0.0
network_mode: host
environment:
MYSQLDB_HOST: localhost
......@@ -61,7 +61,7 @@ services:
condition: service_healthy
gateway:
container_name: sqlrest_gateway
image: inrgihc/sqlrest-gateway:1.0.0
image: registry.cn-hangzhou.aliyuncs.com/inrgihc/sqlrest-gateway:1.0.0
network_mode: host
environment:
MYSQLDB_HOST: localhost
......
FROM openjdk:8-jre-alpine
FROM registry.cn-hangzhou.aliyuncs.com/inrgihc/openjdk:8-jre-alpine
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
......@@ -11,7 +11,7 @@ USER root
WORKDIR /sqlrest-release
RUN chmod u+x /sqlrest-release/bin/startup.sh
RUN chmod u+x /sqlrest-release/bin/sqlrestctl.sh
CMD ["/sqlrest-release/bin/startup.sh","executor"]
CMD ["/sqlrest-release/bin/sqlrestctl.sh","executor"]
FROM openjdk:8-jre-alpine
FROM registry.cn-hangzhou.aliyuncs.com/inrgihc/openjdk:8-jre-alpine
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
......@@ -11,7 +11,7 @@ USER root
WORKDIR /sqlrest-release
RUN chmod u+x /sqlrest-release/bin/startup.sh
RUN chmod u+x /sqlrest-release/bin/sqlrestctl.sh
CMD ["/sqlrest-release/bin/startup.sh","gateway"]
CMD ["/sqlrest-release/bin/sqlrestctl.sh","gateway"]
FROM openjdk:8-jre-alpine
FROM registry.cn-hangzhou.aliyuncs.com/inrgihc/openjdk:8-jre-alpine
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
......@@ -11,7 +11,7 @@ USER root
WORKDIR /sqlrest-release
RUN chmod u+x /sqlrest-release/bin/startup.sh
RUN chmod u+x /sqlrest-release/bin/sqlrestctl.sh
CMD ["/sqlrest-release/bin/startup.sh","manager"]
CMD ["/sqlrest-release/bin/sqlrestctl.sh","manager"]
......@@ -5,5 +5,5 @@ docker run -it --rm \
-v ~/.m2:/opt/maven/localRepository \
-v "$PWD":/usr/src/mymaven \
-w /usr/src/mymaven \
inrgihc/maven-aliyun:3.6.3-jdk-8 mvn clean package
registry.cn-hangzhou.aliyuncs.com/inrgihc/maven-aliyun:3.6.3-jdk-8 mvn clean package
......@@ -5,5 +5,5 @@ docker run -it --rm \
-v ~/.m2:/opt/maven/localRepository \
-v "$PWD":/usr/src/mymaven \
-w /usr/src/mymaven \
inrgihc/maven-aliyun:3.6.3-jdk-8 mvn clean
registry.cn-hangzhou.aliyuncs.com/inrgihc/maven-aliyun:3.6.3-jdk-8 mvn clean
......@@ -52,7 +52,13 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2023.0.1.0</version>
</dependency>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-all</artifactId>
......
......@@ -15,4 +15,10 @@ public abstract class Constants {
public static final String CACHE_KEY_TOKEN_CLIENT = "token_client";
public static final Long CLIENT_TOKEN_DURATION_SECONDS = 7200L;
public static final int SC_TOO_MANY_REQUESTS = 429;
public static final String getResourceName(String method, String path) {
return String.format("/%s/%s[%s]", Constants.API_PATH_PREFIX, path, method);
}
}
package com.gitee.sqlrest.common.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
......@@ -9,9 +11,15 @@ import lombok.NoArgsConstructor;
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("按照日期的统计")
public class DateCount {
@ApiModelProperty("日期")
private String ofDate;
@ApiModelProperty("总数")
private Long total;
@ApiModelProperty("成功数")
private Long success;
}
......@@ -23,6 +23,8 @@ public enum ResponseErrorCode {
ERROR_ACCESS_FORBIDDEN(403, "access forbidden"),
ERROR_TOKEN_EXPIRED(401, "token is expired"),
ERROR_PATH_NOT_EXISTS(404, "path not exists"),
ERROR_TOO_MANY_REQUESTS(429, "too many requests"),
;
private int code;
......
package com.gitee.sqlrest.core.dto;
import com.baomidou.mybatisplus.annotation.TableField;
import com.gitee.sqlrest.common.dto.ItemParam;
import com.gitee.sqlrest.common.enums.ExecuteEngineEnum;
import com.gitee.sqlrest.persistence.entity.ApiContextEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
......@@ -34,4 +34,13 @@ public class ApiAssignmentDetailResponse extends ApiAssignmentBaseResponse {
@ApiModelProperty("SQL列表")
private List<ApiContextEntity> sqlList;
@ApiModelProperty("是否开启流量控制")
private Boolean flowStatus;
@ApiModelProperty("阈值类型")
private Integer flowGrade;
@TableField("阈值大小")
private Integer flowCount;
}
......@@ -52,4 +52,13 @@ public class ApiAssignmentSaveRequest {
@ApiModelProperty("接口入参")
private List<ItemParam> params;
@ApiModelProperty("是否开启流量控制")
private Boolean flowStatus;
@ApiModelProperty("阈值类型")
private Integer flowGrade;
@ApiModelProperty("单机阈值")
private Integer flowCount;
}
package com.gitee.sqlrest.core.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.sql.Timestamp;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
@ApiModel("流控规则详情")
public class FlowRuleDetailResponse {
@ApiModelProperty("ID编号")
private Long id;
@ApiModelProperty("标题")
private String name;
@ApiModelProperty("阈值类型")
private Integer flowGrade;
@ApiModelProperty("单机阈值")
private Integer flowCount;
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Timestamp createTime;
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Timestamp updateTime;
}
package com.gitee.sqlrest.core.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
@ApiModel("流控规则详情")
public class FlowRuleSaveRequest {
@ApiModelProperty("ID编号")
private Long id;
@ApiModelProperty("标题")
private String name;
@ApiModelProperty("阈值类型")
private Integer flowGrade;
@ApiModelProperty("单机阈值")
private Integer flowCount;
}
......@@ -9,9 +9,9 @@ import lombok.NoArgsConstructor;
@Data
@Builder
@ApiModel("列信息")
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("列信息")
public class MetadataColumnResponse {
@ApiModelProperty("列名")
......
package com.gitee.sqlrest.core.dto;
import io.swagger.annotations.ApiModel;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
......@@ -13,6 +14,7 @@ import java.util.TreeSet;
/**
* Swagger接口信息
*/
@ApiModel("Swagger的数据接口")
public class SwaggerEntity {
private String swagger = "2.0";
......
......@@ -35,6 +35,8 @@ public class AuthenticationFilter implements Filter {
@Resource
private ApiAssignmentDao apiAssignmentDao;
@Resource
private FlowControlManger flowControlManger;
@Resource
private ClientTokenService clientTokenService;
@Resource
private AccessRecordMapper accessRecordMapper;
......@@ -62,6 +64,18 @@ public class AuthenticationFilter implements Filter {
return;
}
if (apiConfigEntity.getFlowStatus()) {
String resourceName = Constants.getResourceName(method.name(), path);
if (flowControlManger.checkFlowControl(resourceName, response)) {
doAuthenticationFilter(chain, request, response, apiConfigEntity);
}
} else {
doAuthenticationFilter(chain, request, response, apiConfigEntity);
}
}
private void doAuthenticationFilter(FilterChain chain, HttpServletRequest request, HttpServletResponse response,
ApiAssignmentEntity apiConfigEntity) throws IOException {
AccessRecordEntity accessRecordEntity = AccessRecordEntity.builder()
.path(request.getRequestURI())
.status(HttpStatus.OK.value())
......@@ -71,6 +85,9 @@ public class AuthenticationFilter implements Filter {
.apiId(apiConfigEntity.getId())
.build();
String path = apiConfigEntity.getPath();
HttpMethodEnum method = apiConfigEntity.getMethod();
try {
if (!apiConfigEntity.getOpen()) {
String tokenStr = TokenUtils.getRequestToken(request);
......
package com.gitee.sqlrest.core.filter;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
public interface FlowControlManger {
boolean checkFlowControl(String resourceName, HttpServletResponse response) throws IOException;
}
......@@ -103,9 +103,9 @@ public class ApiAssignmentService {
public List<SqlParamParseResponse> parseSqlParams(String text) {
Configuration cfg = new Configuration();
SqlTemplate template = cfg.getTemplate(text);
List<SqlParamParseResponse> responses = new ArrayList<>();
template.getParameterNames().forEach((k, v) -> responses.add(new SqlParamParseResponse(k, v)));
return responses;
return template.getParameterNames().entrySet().stream()
.map(e -> new SqlParamParseResponse(e.getKey(), e.getValue()))
.collect(Collectors.toList());
}
public Object debugExecute(ApiDebugExecuteRequest request) {
......@@ -178,6 +178,9 @@ public class ApiAssignmentService {
assignmentEntity.setEngine(request.getEngine());
assignmentEntity.setStatus(false);
assignmentEntity.setContextList(contextList);
assignmentEntity.setFlowStatus(Optional.ofNullable(request.getFlowStatus()).orElse(false));
assignmentEntity.setFlowGrade(request.getFlowGrade());
assignmentEntity.setFlowCount(request.getFlowCount());
apiAssignmentDao.insert(assignmentEntity);
return assignmentEntity.getId();
......@@ -215,6 +218,9 @@ public class ApiAssignmentService {
assignmentEntity.setStatus(false);
assignmentEntity.setEngine(request.getEngine());
assignmentEntity.setContextList(contextList);
assignmentEntity.setFlowStatus(Optional.ofNullable(request.getFlowStatus()).orElse(false));
assignmentEntity.setFlowGrade(request.getFlowGrade());
assignmentEntity.setFlowCount(request.getFlowCount());
apiAssignmentDao.update(assignmentEntity);
}
......
......@@ -9,11 +9,29 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>sqlrest-dist</artifactId>
<properties>
<maven.deploy.skip>true</maven.deploy.skip>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<executions>
......
......@@ -13,7 +13,7 @@ GATEWAY_PORT=8091
# mysql的host地址
MYSQLDB_HOST=127.0.0.1
MYSQLDB_HOST=192.168.31.57
# mysql的端口号
MYSQLDB_PORT=3306
......
......@@ -33,6 +33,11 @@
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
......@@ -11,8 +11,10 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
@Slf4j
@EnableScheduling
@Configuration
public class ExecutorServletConfig {
......@@ -32,7 +34,7 @@ public class ExecutorServletConfig {
registrationBean.setFilter(authenticationFilter);
registrationBean.addUrlPatterns(URL_PATH_PATTERN);
registrationBean.setOrder(2);
log.info("Register authFilter for {} UrlPatterns, and order is {}", URL_PATH_PATTERN);
log.info("Register authFilter for {} UrlPatterns, and order is {}", URL_PATH_PATTERN, 2);
return registrationBean;
}
......
package com.gitee.sqlrest.executor.flowcontrol;
import cn.hutool.json.JSONUtil;
import com.alibaba.csp.sentinel.Entry;
import com.alibaba.csp.sentinel.EntryType;
import com.alibaba.csp.sentinel.SphU;
import com.alibaba.csp.sentinel.slots.block.BlockException;
import com.alibaba.csp.sentinel.slots.block.RuleConstant;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import com.gitee.sqlrest.common.consts.Constants;
import com.gitee.sqlrest.common.dto.ResultEntity;
import com.gitee.sqlrest.common.enums.HttpMethodEnum;
import com.gitee.sqlrest.common.exception.ResponseErrorCode;
import com.gitee.sqlrest.core.filter.FlowControlManger;
import com.gitee.sqlrest.persistence.dao.ApiAssignmentDao;
import com.gitee.sqlrest.persistence.entity.ApiAssignmentEntity;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Slf4j
@Component
public class SentinelFlowControlManager implements FlowControlManger {
@Resource
private ApiAssignmentDao apiAssignmentDao;
/*每分钟执行一次*/
@EventListener(ApplicationReadyEvent.class)
@Scheduled(cron = "${cron.flow.expression:0 0/1 * * * ?}")
public void loadFlowRules() {
try {
doLoadFlowRules();
log.info("Success load flow rules");
} catch (Exception e) {
log.error("load flow rules failed:{}", e.getMessage(), e);
}
}
private void doLoadFlowRules() {
List<FlowRule> rules = new ArrayList<>();
for (ApiAssignmentEntity assignmentEntity : apiAssignmentDao.listFlowControlAll()) {
if (assignmentEntity.getFlowCount() <= 0) {
continue;
}
HttpMethodEnum method = assignmentEntity.getMethod();
String path = assignmentEntity.getPath();
String resourceName = Constants.getResourceName(method.name(), path);
FlowRule rule = new FlowRule(resourceName);
if (RuleConstant.FLOW_GRADE_THREAD == assignmentEntity.getFlowGrade()) {
rule.setGrade(RuleConstant.FLOW_GRADE_THREAD);
} else {
rule.setGrade(RuleConstant.FLOW_GRADE_QPS);
}
rule.setCount(assignmentEntity.getFlowCount());
rule.setId(assignmentEntity.getId());
rules.add(rule);
}
FlowRuleManager.loadRules(rules);
}
@Override
public boolean checkFlowControl(String resourceName, HttpServletResponse response) throws IOException {
Entry entry = null;
try {
entry = SphU.entry(resourceName, 0, EntryType.IN);
return true;
} catch (BlockException be) {
this.handleBlockException(resourceName, response);
return false;
} finally {
if (entry != null) {
entry.exit(1);
}
}
}
public void handleBlockException(String resourceName, HttpServletResponse response)
throws IOException {
response.setStatus(Constants.SC_TOO_MANY_REQUESTS);
ResultEntity result = ResultEntity.failed(ResponseErrorCode.ERROR_TOO_MANY_REQUESTS, resourceName);
response.getWriter().append(JSONUtil.toJsonStr(result));
}
}
......@@ -15,29 +15,34 @@ public class HttpApiServlet extends HttpServlet {
public HttpApiServlet(ApiServletService apiServletService) {
this.apiServletService = apiServletService;
}
private void doHandle(HttpMethodEnum method, HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
apiServletService.process(method, request, response);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
apiServletService.process(HttpMethodEnum.GET, req, resp);
doHandle(HttpMethodEnum.GET, req, resp);
}
@Override
protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
apiServletService.process(HttpMethodEnum.HEAD, req, resp);
doHandle(HttpMethodEnum.HEAD, req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
apiServletService.process(HttpMethodEnum.POST, req, resp);
doHandle(HttpMethodEnum.POST, req, resp);
}
@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
apiServletService.process(HttpMethodEnum.PUT, req, resp);
doHandle(HttpMethodEnum.PUT, req, resp);
}
@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
apiServletService.process(HttpMethodEnum.DELETE, req, resp);
doHandle(HttpMethodEnum.DELETE, req, resp);
}
}
......@@ -36,6 +36,10 @@
<p>
基于swagger-ui提供生成在线接口文档功能。
</p>
<li>支持接口的流量控制功能</li>
<p>
执行器基于sentinel支持接口的流量控制功能。
</p>
</ul>
</div>
</el-card>
......
......@@ -67,7 +67,8 @@
prop="name">
<el-input v-model="createParam.name"
auto-complete="off"
style="width:75%"></el-input>
style="width:75%"
:disabled=isOnlyShowDetail></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
......@@ -78,7 +79,8 @@
<el-select placeholder="请选择数据源"
style="width:60%"
v-model="createParam.dataSourceId"
@change="loadTreeData">
@change="loadTreeData"
:disabled=isOnlyShowDetail>
<el-option v-for="(item,index) in connectionList"
:key="index"
:label="`[${item.id}]${item.name}`"
......@@ -95,7 +97,8 @@
:required=true
prop="group">
<el-select v-model="createParam.group"
placeholder="请选择">
placeholder="请选择"
:disabled=isOnlyShowDetail>
<el-option v-for="(item,index) in groupList"
:key="index"
:label="`[${item.id}]${item.name}`"
......@@ -110,7 +113,7 @@
:required=true
prop="method">
<el-select v-model="createParam.method"
:disabled="$route.query.id>0">
:disabled=isOnlyShowDetail>
<el-option label="GET"
value="GET"></el-option>
<el-option label="PUT"
......@@ -131,7 +134,7 @@
:required=true
prop="path">
<el-input v-model="createParam.path"
:disabled="$route.query.id>0">
:disabled=isOnlyShowDetail>
<template slot="prepend">{{gatewayApiPrefix}}</template>
</el-input>
</el-form-item>
......@@ -143,7 +146,8 @@
style="width:80%"
prop="module">
<el-select v-model="createParam.module"
placeholder="请选择">
placeholder="请选择"
:disabled=isOnlyShowDetail>
<el-option v-for="(item,index) in moduleList"
:key="index"
:label="`[${item.id}]${item.name}`"
......@@ -173,7 +177,7 @@
:required=true
prop="contentType">
<el-select v-model="createParam.contentType"
:disabled="$route.query.id>0">
:disabled=isOnlyShowDetail>
<el-option v-for="(item,index) in contentTypes"
:key="index"
:label="item"
......@@ -257,13 +261,15 @@
min-width="25%">
<template slot-scope="scope">
<el-input v-model="scope.row.name"
type="string"> </el-input>
type="string"
:disabled=isOnlyShowDetail> </el-input>
</template>
</el-table-column>
<el-table-column label="参数类型"
min-width="25%">
<template slot-scope="scope">
<el-select v-model="scope.row.type">
<el-select v-model="scope.row.type"
:disabled=isOnlyShowDetail>
<el-option label='整型'
value='LONG'></el-option>
<el-option label='浮点型'
......@@ -280,7 +286,8 @@
<el-table-column label="为数组"
min-width="25%">
<template slot-scope="scope">
<el-select v-model="scope.row.isArray">
<el-select v-model="scope.row.isArray"
:disabled=isOnlyShowDetail>
<el-option label='是'
:value=true></el-option>
<el-option label='否'
......@@ -291,7 +298,8 @@
<el-table-column label="必填"
min-width="25%">
<template slot-scope="scope">
<el-select v-model="scope.row.required">
<el-select v-model="scope.row.required"
:disabled=isOnlyShowDetail>
<el-option label='是'
:value=true></el-option>
<el-option label='否'
......@@ -303,14 +311,16 @@
min-width="25%">
<template slot-scope="scope">
<el-input v-model="scope.row.defaultValue"
type="string"></el-input>
type="string"
:disabled=isOnlyShowDetail></el-input>
</template>
</el-table-column>
<el-table-column label="描述"
min-width="25%">
<template slot-scope="scope">
<el-input v-model="scope.row.remark"
type="string"></el-input>
type="string"
:disabled=isOnlyShowDetail></el-input>
</template>
</el-table-column>
<el-table-column label="操作"
......@@ -339,6 +349,41 @@
</el-col>
</el-row>
</el-tab-pane>
<el-tab-pane label="流量控制"
name="flowControl">
<el-row>
<el-col :span="24">
<el-form-item label="是否开启">
<el-switch v-model="createParam.flowStatus"
active-color="#13ce66"
:active-value="true"
:inactive-value="false"
active-text="开启"
inactive-text="关闭"
:disabled=isOnlyShowDetail>
</el-switch>
</el-form-item>
<div v-show="createParam.flowStatus">
<el-form-item label="阈值类型">
<el-radio-group size="small"
v-model="createParam.flowGrade"
:disabled=isOnlyShowDetail
border>
<el-radio :label="1">QPS</el-radio>
<el-radio :label="0">并发线程数</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item label="单机阈值">
<el-input-number v-model="createParam.flowCount"
size="small"
:step="1"
:disabled=isOnlyShowDetail
step-strictly></el-input-number>
</el-form-item>
</div>
</el-col>
</el-row>
</el-tab-pane>
</el-tabs>
</el-form>
</div>
......@@ -515,6 +560,9 @@ export default {
sqls: [],
script: '',
open: false,
flowStatus: false,
flowGrade: 1,
flowCount: 5
},
showDebugDrawer: false,
gatewayApiPrefix: 'http://127.0.0.1:8081/api/',
......@@ -622,6 +670,9 @@ export default {
engine: detail.engine,
sqls: [],
script: "",
flowStatus: detail.flowStatus,
flowGrade: detail.flowGrade,
flowCount: detail.flowCount
}
this.inputParams = []
if (detail.params) {
......@@ -1061,6 +1112,9 @@ export default {
contentType: this.createParam.contentType,
path: this.createParam.path,
open: this.createParam.open,
flowStatus: this.createParam.flowStatus,
flowGrade: this.createParam.flowGrade,
flowCount: this.createParam.flowCount,
engine: this.createParam.engine,
contextList: sqls,
params: this.inputParams
......@@ -1096,6 +1150,9 @@ export default {
contentType: this.createParam.contentType,
path: this.createParam.path,
open: this.createParam.open,
flowStatus: this.createParam.flowStatus,
flowGrade: this.createParam.flowGrade,
flowCount: this.createParam.flowCount,
engine: this.createParam.engine,
contextList: sqls,
params: this.inputParams
......
......@@ -52,7 +52,7 @@ CREATE TABLE `SQLREST_API_ASSIGNMENT`
(
`id` bigint(20) unsigned not null auto_increment comment '主键',
`group_id` bigint(20) unsigned not null comment '分组ID',
`module_id` bigint(20) unsigned not null comment '模块ID',
`module_id` bigint(20) unsigned not null comment '模块ID',
`datasource_id` bigint(20) unsigned not null comment '数据源ID',
`name` varchar(255) not null default '' comment '接口名称',
`description` varchar(1024) default null comment '接口描述',
......@@ -62,6 +62,9 @@ CREATE TABLE `SQLREST_API_ASSIGNMENT`
`status` tinyint(1) not null default 0 comment '是否发布',
`open` tinyint(1) not null default 0 comment '是否公开',
`engine` varchar(16) not null default 'SQL' comment '执行引擎',
`flow_status` tinyint(1) not null default 0 comment '是否开启流量控制',
`flow_grade` bigint(20) unsigned default null comment '流控类型',
`flow_count` bigint(20) unsigned default null comment '流控阈值',
`content_type` varchar(50) not null default '' comment 'ContentType',
`create_time` timestamp not null default current_timestamp comment '创建时间',
`update_time` timestamp not null default current_timestamp on update current_timestamp comment '修改时间',
......
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>SQLREST工具</title><link href=/static/css/app.d22aaa58e5186516a00d39ee7f45a39c.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.070750a1b98317df6608.js></script><script type=text/javascript src=/static/js/vendor.b8089f9fd73f8896df25.js></script><script type=text/javascript src=/static/js/app.907b2e3813e3bdcda00d.js></script></body></html>
\ No newline at end of file
<!DOCTYPE html><html><head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><title>SQLREST工具</title><link href=/static/css/app.ca40fc8269b428e8762bbd3028de33d9.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.e707a97f388d19a32b5e.js></script><script type=text/javascript src=/static/js/vendor.b8089f9fd73f8896df25.js></script><script type=text/javascript src=/static/js/app.907b2e3813e3bdcda00d.js></script></body></html>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
{"version":3,"sources":["webpack:///src/components/asideBar/asideBarItem.vue","webpack:///./src/components/asideBar/asideBarItem.vue?5e90","webpack:///./src/components/asideBar/asideBarItem.vue","webpack:///src/components/asideBar/asideBar.vue","webpack:///./src/components/asideBar/asideBar.vue?3399","webpack:///./src/components/asideBar/asideBar.vue","webpack:///./src/components/breadcrumb/index.vue?cf18","webpack:///./src/components/breadcrumb/index.vue","webpack:///src/components/userDropdown/index.vue","webpack:///./src/components/userDropdown/index.vue?1aef","webpack:///./src/components/userDropdown/index.vue","webpack:///./src/views/viewer.vue?508d","webpack:///./src/views/viewer.vue","webpack:///src/views/layout.vue","webpack:///src/components/breadcrumb/index.vue","webpack:///src/views/viewer.vue","webpack:///./src/views/layout.vue?0d9b","webpack:///./src/views/layout.vue","webpack:///./src/assets/logo.png","webpack:///src/views/aboutme/readme.vue","webpack:///./src/views/aboutme/readme.vue?a369","webpack:///./src/views/aboutme/readme.vue","webpack:///./src/assets/user.jpg"],"names":["asideBarItem","name","props","router","type","Object","components","data","computed","watch","methods","hasChildrenAndShow","hidden","hasOwnProperty","saveActivePath","path","this","$emit","created","mounted","asideBar_asideBarItem","render","_vm","_h","$createElement","_c","_self","staticClass","attrs","index","slot","class","icon","_v","_s","_l","child","childKey","key","on","click","$event","staticRenderFns","asideBar","__webpack_require__","normalizeComponent","ssrContext","collapsed","initActivePath","routers","$router","options","routes","children","showBarItem","handleOpen","keyPath","handleClose","updateCollapse","collapse","setActivePath","window","sessionStorage","setItem","getActivePath","getItem","asideBar_asideBar","span","unique-opened","background-color","text-color","active-text-color","default-active","open","close","_e","components_breadcrumb","separator-class","item","redirect","levelList","length","to","userDropdown","username","nickname","hadleLogout","clear","$http","method","url","push","destroyed","components_userDropdown","src","alt","solt","divided","views_viewer","layout","asideBar_normalizeComponent","breadcrumb","breadcrumb_normalizeComponent","getBreadcrumb","$route","matched","filter","userDropdown_normalizeComponent","viewMain","viewer_normalizeComponent","title","isCollapse","handleToggleCollapse","status","$refs","views_layout","width","ref","layout_Component","layout_normalizeComponent","__webpack_exports__","module","exports","p","readme","activeName","handleClick","tab","event","aboutme_readme","tab-click","model","value","callback","$$v","expression","label","href","Component"],"mappings":"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","file":"static/js/1.0dd0668e608dd0f54f6e.js","sourcesContent":["<template>\r\n <div class=\"asideBarItem-container\">\r\n <!-- 如果hasOwnProperty监测有children 就循环递归展示-->\r\n <el-submenu :index=\"router.path\" v-if=\"hasChildrenAndShow(router)\">\r\n <template slot=\"title\">\r\n <i :class=\"router.icon\"></i>\r\n <span slot=\"title\">{{router.name}}</span>\r\n </template>\r\n <!--递归子孙导航-->\r\n <asideBarItem v-for=\"(child, childKey) in router.children\" :key=\"child.path\" :router=\"child\"></asideBarItem>\r\n </el-submenu>\r\n <!-- 如果没有 就展示一级导航 -->\r\n <el-menu-item v-else :key=\"router.path\" :index=\"router.path\" @click=\"saveActivePath(router.path)\">\r\n <i :class=\"router.icon\"></i>\r\n <span>{{router.name}}</span>\r\n </el-menu-item>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n//hasOwnProperty可以用来检测一个对象是否含有特定的自身属性\r\nexport default {\r\n name: \"asideBarItem\",\r\n props: {\r\n router: {\r\n type: Object\r\n },\r\n },\r\n components: {},\r\n data() {\r\n return {\r\n };\r\n },\r\n computed: {\r\n // router () {\r\n // return this.$router.options.routes\r\n // }\r\n },\r\n watch: {},\r\n methods: {\r\n hasChildrenAndShow(router){\r\n if(router.hidden){\r\n return false\r\n }\r\n\r\n return router.hasOwnProperty('children');\r\n },\r\n saveActivePath(path) {\r\n //alert(path);\r\n this.$emit('setActivePath',path);\r\n },\r\n },\r\n created() {\r\n },\r\n mounted() {}\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.el-menu-item.is-active {\r\n background-color: #1890ff !important;\r\n}\r\n\r\n/*隐藏文字*/\r\n.el-menu--collapse .asideBarItem-container span{\r\n display: none;\r\n}\r\n/*隐藏 > */\r\n.el-menu--collapse .asideBarItem-container .el-submenu__title .el-submenu__icon-arrow{\r\n display: none;\r\n}\r\n\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/asideBar/asideBarItem.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"asideBarItem-container\"},[(_vm.hasChildrenAndShow(_vm.router))?_c('el-submenu',{attrs:{\"index\":_vm.router.path}},[_c('template',{slot:\"title\"},[_c('i',{class:_vm.router.icon}),_vm._v(\" \"),_c('span',{attrs:{\"slot\":\"title\"},slot:\"title\"},[_vm._v(_vm._s(_vm.router.name))])]),_vm._v(\" \"),_vm._l((_vm.router.children),function(child,childKey){return _c('asideBarItem',{key:child.path,attrs:{\"router\":child}})})],2):_c('el-menu-item',{key:_vm.router.path,attrs:{\"index\":_vm.router.path},on:{\"click\":function($event){return _vm.saveActivePath(_vm.router.path)}}},[_c('i',{class:_vm.router.icon}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.router.name))])])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-645f620a\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/asideBar/asideBarItem.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-645f620a\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./asideBarItem.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./asideBarItem.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./asideBarItem.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-645f620a\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./asideBarItem.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-645f620a\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/asideBar/asideBarItem.vue\n// module id = null\n// module chunks = ","<template>\r\n <div class=\"aside-container\">\r\n <el-row class=\"tac\">\r\n <el-col :span=\"24\">\r\n <!-- 整体左侧导航 -->\r\n <el-menu\r\n :router=\"true\"\r\n unique-opened\r\n @open=\"handleOpen\"\r\n @close=\"handleClose\"\r\n background-color=\"#001529\"\r\n text-color=\"rgb(191, 203, 217)\"\r\n active-text-color=\"#ffffff\"\r\n :collapse=\"collapsed\"\r\n :default-active=\"initActivePath\"\r\n >\r\n <!-- 左侧导航栏抽取循环部分 将路由列表传给子组件-->\r\n <asideBarItem v-for=\"router in routers\" :router=\"router\" v-if=\"showBarItem(router)\" @setActivePath='setActivePath' :key=\"router.path\"></asideBarItem>\r\n </el-menu>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n</template>\r\n \r\n<script>\r\nimport asideBarItem from \"@/components/asideBar/asideBarItem\";\r\nexport default {\r\n name: \"asideBar\",\r\n components: {\r\n asideBarItem\r\n },\r\n data() {\r\n return {\r\n collapsed:false,\r\n initActivePath:'/dashboard'\r\n };\r\n },\r\n computed: {\r\n routers() {\r\n //console.log(this.$router.options);\r\n //this.$router.options获取路由列表\r\n return this.$router.options.routes[0].children;\r\n },\r\n },\r\n watch: {},\r\n methods: {\r\n showBarItem(router){\r\n if(router.hidden){\r\n return false\r\n }\r\n\r\n return true;\r\n },\r\n handleOpen(key, keyPath) {\r\n //点击打开时当前的路径\r\n //console.log(key, keyPath, 'handleOpen');\r\n },\r\n handleClose(key, keyPath) {\r\n //console.log(key, keyPath, 'handleClose');\r\n },\r\n updateCollapse(collapse){\r\n this.collapsed=collapse;\r\n //console.log(\"==========\"+this.isCollapse);\r\n },\r\n setActivePath(path){\r\n this.initActivePath=path;\r\n window.sessionStorage.setItem(\"activePath\", path);\r\n //console.log(\"update active path \"+this.initActivePath);\r\n },\r\n getActivePath(){\r\n return window.sessionStorage.getItem(\"activePath\");\r\n }\r\n },\r\n created() {\r\n this.initActivePath = this.getActivePath();\r\n //console.log(\"init active path \"+this.initActivePath);\r\n },\r\n mounted() {\r\n // console.log(this.$router.options.routes[1])\r\n }\r\n};\r\n</script>\r\n \r\n <style scoped>\r\n.aside-container {\r\n padding-top: 2px;\r\n}\r\n\r\n.el-menu {\r\n padding: 0;\r\n border-right: none;\r\n}\r\n\r\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/asideBar/asideBar.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"aside-container\"},[_c('el-row',{staticClass:\"tac\"},[_c('el-col',{attrs:{\"span\":24}},[_c('el-menu',{attrs:{\"router\":true,\"unique-opened\":\"\",\"background-color\":\"#001529\",\"text-color\":\"rgb(191, 203, 217)\",\"active-text-color\":\"#ffffff\",\"collapse\":_vm.collapsed,\"default-active\":_vm.initActivePath},on:{\"open\":_vm.handleOpen,\"close\":_vm.handleClose}},_vm._l((_vm.routers),function(router){return (_vm.showBarItem(router))?_c('asideBarItem',{key:router.path,attrs:{\"router\":router},on:{\"setActivePath\":_vm.setActivePath}}):_vm._e()}),1)],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-1dde93fa\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/asideBar/asideBar.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-1dde93fa\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./asideBar.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./asideBar.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./asideBar.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1dde93fa\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./asideBar.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-1dde93fa\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/asideBar/asideBar.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-breadcrumb',{staticClass:\"app-breadcrumb\",attrs:{\"separator-class\":\"el-icon-arrow-right\"}},[_c('transition-group',_vm._l((_vm.levelList),function(item,index){return (item.name)?_c('el-breadcrumb-item',{key:item.path},[(item.redirect===\"noredirect\"||index==_vm.levelList.length-1)?_c('span',{staticClass:\"no-redirect\"},[_vm._v(_vm._s(item.name))]):_c('router-link',{attrs:{\"to\":item.redirect||item.path}},[_vm._v(_vm._s(item.name))])],1):_vm._e()}),1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-a2157ea2\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/breadcrumb/index.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-a2157ea2\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./index.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-a2157ea2\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-a2157ea2\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/breadcrumb/index.vue\n// module id = null\n// module chunks = ","<template>\r\n <div class=\"user-dropdown-wrap\">\r\n <el-dropdown>\r\n <div class=\"user-dropdown-photo\">\r\n <span class=\"user-dropdown-text\">\r\n {{ nickname }}({{username}})\r\n <i class=\"el-icon-caret-bottom\"></i>\r\n </span>\r\n <img src=\"../../assets/user.jpg\"\r\n alt=\"user\" />\r\n </div>\r\n <el-dropdown-menu solt=\"dropdown\">\r\n <el-dropdown-item>\r\n <router-link to=\"/user/self\">\r\n <i class=\"el-icon-s-custom\"></i>个人信息\r\n </router-link>\r\n </el-dropdown-item>\r\n <el-dropdown-item divided>\r\n <a @click=\"hadleLogout()\">\r\n <i class=\"el-icon-switch-button\"></i>退出登录\r\n </a>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n data () {\r\n return {\r\n username: \"\",\r\n nickname: \"\"\r\n };\r\n },\r\n created () {\r\n this.username = window.sessionStorage.getItem(\"username\");\r\n this.nickname = window.sessionStorage.getItem(\"realname\");\r\n },\r\n methods: {\r\n hadleLogout () {\r\n window.sessionStorage.clear();\r\n this.$http({\r\n method: 'GET',\r\n url: '/user/logout'\r\n }),\r\n this.$router.push(\"/login\");\r\n }\r\n },\r\n destroyed () {\r\n window.sessionStorage.setItem(\"activePath\", \"/\");\r\n }\r\n};\r\n</script>\r\n<style scoped>\r\n.user-dropdown-wrap {\r\n height: 60px;\r\n padding: 10px 0;\r\n float: right;\r\n}\r\n\r\n.user-dropdown-wrap .user-dropdown-photo img {\r\n width: 30px;\r\n height: 30px;\r\n vertical-align: middle;\r\n}\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/userDropdown/index.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-dropdown-wrap\"},[_c('el-dropdown',[_c('div',{staticClass:\"user-dropdown-photo\"},[_c('span',{staticClass:\"user-dropdown-text\"},[_vm._v(\"\\n \"+_vm._s(_vm.nickname)+\"(\"+_vm._s(_vm.username)+\")\\n \"),_c('i',{staticClass:\"el-icon-caret-bottom\"})]),_vm._v(\" \"),_c('img',{attrs:{\"src\":require(\"../../assets/user.jpg\"),\"alt\":\"user\"}})]),_vm._v(\" \"),_c('el-dropdown-menu',{attrs:{\"solt\":\"dropdown\"}},[_c('el-dropdown-item',[_c('router-link',{attrs:{\"to\":\"/user/self\"}},[_c('i',{staticClass:\"el-icon-s-custom\"}),_vm._v(\"个人信息\\n \")])],1),_vm._v(\" \"),_c('el-dropdown-item',{attrs:{\"divided\":\"\"}},[_c('a',{on:{\"click\":function($event){return _vm.hadleLogout()}}},[_c('i',{staticClass:\"el-icon-switch-button\"}),_vm._v(\"退出登录\\n \")])])],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-0a6f0f66\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/userDropdown/index.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-0a6f0f66\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./index.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0a6f0f66\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-0a6f0f66\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/userDropdown/index.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"viewer-container\"},[_c('router-view')],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-7b74460c\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/views/viewer.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-7b74460c\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./viewer.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./viewer.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./viewer.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-7b74460c\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./viewer.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-7b74460c\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/viewer.vue\n// module id = null\n// module chunks = ","<template>\r\n <el-container class=\"index-container\">\r\n <el-aside :width=\"isCollapse?'64px':'250px'\">\r\n <!-- 左侧LOGO -->\r\n <div class=\"title\">\r\n <img src=\"../assets/logo.png\" />\r\n <span class=\"title-text\"\r\n v-if=\"!isCollapse\">{{title}}</span>\r\n </div>\r\n <!-- 左侧导航菜单 -->\r\n <asideBar ref=\"asideBar\"></asideBar>\r\n </el-aside>\r\n <el-main>\r\n <el-header>\r\n <!-- 折叠图标 -->\r\n <div @click=\"handleToggleCollapse\"\r\n class=\"collapse\">\r\n <i class=\"el-icon-s-unfold\"\r\n v-if=\"isCollapse\"></i>\r\n <i class=\"el-icon-s-fold\"\r\n v-else></i>\r\n </div>\r\n\r\n <!-- 面包屑导航 -->\r\n <breadcrumb></breadcrumb>\r\n <userDropdown></userDropdown>\r\n </el-header>\r\n\r\n <!-- 右侧显示区域 -->\r\n <viewMain></viewMain>\r\n </el-main>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport asideBar from \"@/components/asideBar/asideBar\";\r\nimport breadcrumb from \"@/components/breadcrumb/index\";\r\nimport userDropdown from \"@/components/userDropdown/index\"\r\nimport viewMain from \"@/views/viewer\";\r\n\r\nexport default {\r\n name: \"home\",\r\n components: {\r\n asideBar,\r\n breadcrumb,\r\n userDropdown,\r\n viewMain\r\n },\r\n data () {\r\n return {\r\n title: \"SQLREST\",\r\n isCollapse: null\r\n };\r\n },\r\n computed: {},\r\n watch: {},\r\n methods: {\r\n handleToggleCollapse () {\r\n let status = !this.isCollapse;\r\n this.isCollapse = status;\r\n this.$refs.asideBar.updateCollapse(status);\r\n }\r\n },\r\n created () {\r\n },\r\n mounted () { }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.index-container {\r\n height: 100%;\r\n}\r\n\r\n.el-aside {\r\n float: left;\r\n background: #002140;\r\n color: #333;\r\n text-align: left;\r\n}\r\n\r\n.el-aside .title {\r\n height: 60px;\r\n background: #001529;\r\n line-height: 64px;\r\n background: #002140;\r\n text-align: center;\r\n}\r\n\r\n.el-aside .title img {\r\n width: 50px;\r\n height: 50px;\r\n vertical-align: middle;\r\n}\r\n\r\n.el-aside .title .title-text {\r\n color: #fff;\r\n font-weight: 600;\r\n font-size: 20px;\r\n vertical-align: middle;\r\n}\r\n\r\n.el-header {\r\n padding: 0px;\r\n color: #ffffff;\r\n width: 100%;\r\n background: #fff;\r\n}\r\n\r\n.el-header .collapse {\r\n float: left;\r\n padding-left: 2px;\r\n font-size: 22px;\r\n color: #838383;\r\n margin-top: 10px;\r\n margin-right: 20px;\r\n cursor: pointer;\r\n}\r\n\r\n.el-main {\r\n padding: 0px;\r\n float: left;\r\n background-color: #eaedf1;\r\n}\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/views/layout.vue","<template>\r\n <el-breadcrumb class=\"app-breadcrumb\" separator-class=\"el-icon-arrow-right\">\r\n <transition-group>\r\n <el-breadcrumb-item v-for=\"(item,index) in levelList\" :key=\"item.path\" v-if=\"item.name\">\r\n <span v-if='item.redirect===\"noredirect\"||index==levelList.length-1' class=\"no-redirect\">{{item.name}}</span>\r\n <router-link v-else :to=\"item.redirect||item.path\">{{item.name}}</router-link>\r\n </el-breadcrumb-item>\r\n </transition-group>\r\n </el-breadcrumb>\r\n</template>\r\n\r\n<!-- 参考教程:https://www.cnblogs.com/yangguoe/p/9406032.html -->\r\n<script>\r\nexport default {\r\n name: \"breadcrumb\",\r\n data() {\r\n return {\r\n levelList: []\r\n };\r\n },\r\n created() {\r\n this.getBreadcrumb();\r\n },\r\n watch: {\r\n $route() {\r\n this.getBreadcrumb();\r\n }\r\n },\r\n methods: {\r\n getBreadcrumb() {\r\n let matched = this.$route.matched.filter(item => item.name); //$route.matched 将会是一个包含从上到下的所有对象 (副本)。\r\n this.levelList = matched;\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.el-header .el-breadcrumb {\r\n float: left;\r\n margin: 18px 0 0 20px;\r\n}\r\n\r\n.app-breadcrumb .el-breadcrumb .no-redirect {\r\n color: #97a8be;\r\n cursor: text;\r\n}\r\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/breadcrumb/index.vue","<template>\r\n <div class=\"viewer-container\">\r\n <router-view></router-view>\r\n </div>\r\n</template>\r\n \r\n<script>\r\nexport default {\r\n name: \"viewer\",\r\n components: {},\r\n data () {\r\n return {};\r\n },\r\n computed: {},\r\n watch: {},\r\n methods: {},\r\n created () { },\r\n mounted () { }\r\n};\r\n</script>\r\n \r\n<style scoped>\r\n.viewer-container {\r\n padding-top: 10px;\r\n padding-right: 10px;\r\n padding-bottom: 10px;\r\n padding-left: 10px;\r\n}\r\n</style>\n\n\n// WEBPACK FOOTER //\n// src/views/viewer.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-container',{staticClass:\"index-container\"},[_c('el-aside',{attrs:{\"width\":_vm.isCollapse?'64px':'250px'}},[_c('div',{staticClass:\"title\"},[_c('img',{attrs:{\"src\":require(\"../assets/logo.png\")}}),_vm._v(\" \"),(!_vm.isCollapse)?_c('span',{staticClass:\"title-text\"},[_vm._v(_vm._s(_vm.title))]):_vm._e()]),_vm._v(\" \"),_c('asideBar',{ref:\"asideBar\"})],1),_vm._v(\" \"),_c('el-main',[_c('el-header',[_c('div',{staticClass:\"collapse\",on:{\"click\":_vm.handleToggleCollapse}},[(_vm.isCollapse)?_c('i',{staticClass:\"el-icon-s-unfold\"}):_c('i',{staticClass:\"el-icon-s-fold\"})]),_vm._v(\" \"),_c('breadcrumb'),_vm._v(\" \"),_c('userDropdown')],1),_vm._v(\" \"),_c('viewMain')],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-4972070e\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/views/layout.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-4972070e\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./layout.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./layout.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./layout.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4972070e\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./layout.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-4972070e\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/layout.vue\n// module id = null\n// module chunks = ","module.exports = __webpack_public_path__ + \"static/img/logo.a674d30.png\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/assets/logo.png\n// module id = 7Otq\n// module chunks = 1 2","<template>\n <div>\n <h3>关于SQLREST工具</h3>\n <el-tabs v-model=\"activeName\"\n @tab-click=\"handleClick()\">\n <el-tab-pane label=\"系统功能\"\n name=\"first\">\n <div class=\"content_tag\">\n <el-tag type=\"danger\">SQL接口</el-tag>\n <el-tag type=\"success\">脚本接口</el-tag>\n </div>\n <div class=\"content_card\">\n <el-card class=\"box-card\">\n <div class=\"text item\">\n <p>\n 一句话,sqlrest工具提供快速构建RESTful的<B>API接口</B>工具,包括SQl方式和脚本方式。功能包括:\n </p>\n <ul>\n <li>项目托管</li>\n <p>\n Gitee地址:<a href=\"https://gitee.com/inrgihc/sqlrest\">https://gitee.com/inrgihc/sqlrest</a>\n </p>\n <li>SQL方式构建RESTful接口</li>\n <p>\n 提供类似mybatis的动态SQL语法方式构建接口。\n </p>\n <li>脚本方式构建RESTful接口</li>\n <p>\n 基于groovy脚本的语法方式构建复杂场景下的接口。\n </p>\n <li>支持接口的token安全认证功能</li>\n <p>\n 执行器支持生成token及token认证。\n </p>\n <li>支持生成在线接口文档功能</li>\n <p>\n 基于swagger-ui提供生成在线接口文档功能。\n </p>\n </ul>\n </div>\n </el-card>\n </div>\n </el-tab-pane>\n <el-tab-pane label=\"关系数据库\"\n name=\"second\">\n <div class=\"content_tag\">\n <el-tag type=\"success\">JDBC</el-tag>\n <el-tag type=\"danger\">dbswitch</el-tag>\n </div>\n <div class=\"content_card\">\n <el-card class=\"box-card\">\n <div class=\"text item\">\n <p>\n sqlrest配置SQL生成接口的常规关系数据库,包括:\n </p>\n <ul>\n <li>甲骨文的Oracle\n </li>\n <li>微软的Microsoft SQLServer\n </li>\n <li>MySQL\n </li>\n <li>MariaDB\n </li>\n <li>PostgreSQL\n </li>\n <li>Greenplum(需使用PostgreSQL类型)\n </li>\n <li>IBM的DB2\n </li>\n <li>Sybase数据库\n </li>\n <li>国产达梦数据库DMDB\n </li>\n <li>国产人大金仓数据库Kingbase8\n </li>\n <li>国产翰高数据库HighGo\n </li>\n <li>国产神通数据库Oscar\n </li>\n <li>国产南大通用数据库GBase8a\n </li>\n <li>Apache Hive\n </li>\n <li>SQLite3\n </li>\n <li>OpenGuass\n </li>\n <li>ClickHouse\n </li>\n </ul>\n </div>\n </el-card>\n </div>\n </el-tab-pane>\n <el-tab-pane label=\"开发技术栈\"\n name=\"third\">\n <div class=\"content_tag\">\n <el-tag type=\"success\">SpringBoot</el-tag>\n <el-tag type=\"danger\">Mybatis</el-tag>\n <el-tag type=\"success\">Vue/ElementUI</el-tag>\n </div>\n <div class=\"content_card\">\n <el-card class=\"box-card\">\n <div class=\"text item\">\n <p>\n sqlrest基于Springboot脚手架进行的后端模块开发,模块组成结构如下:\n <pre>\n └── sqlrest\n ├── sqlrest-common // sqlrest通用定义模块\n ├── sqlrest-template // sqlrest的SQL内容模板模块\n ├── sqlrest-persistence // sqlrest的数据库持久化模块\n ├── sqlrest-core // sqlrest-core的接口实现模块\n ├── sqlrest-gateway // Gateway网关节点\n ├── sqlrest-executor // Executor接口执行节点\n ├── sqlrest-manager // Manager管理节点\n ├── sqlrest-manager-ui // 基于Vue2的Manager前段WEB交互页面\n ├── sqlrest-dist // 基于maven-assembly-plugin插件的项目打包模块\n </pre>\n </p>\n <ul>\n <li>SpringBoot</li>\n <p>\n sqlrest基于SpringBoot作为项目的基础脚手架。\n </p>\n <p>\n sqlrest-gateway/sqlrest-executor/sqlrest-manager基于SpringCloud的微服务架构提供接口配置与访问功能。\n </p>\n <li>MyBatis</li>\n <p>\n MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。\n <p>\n sqlrest-persistence模块基于Mybatis/Mybatis-plus提供配置数据的持久化。\n </p>\n <li>Vue/ElementUI</li>\n <p>\n Vue是一套用于构建用户界面的渐进式JavaScript框架。 Element是饿了么团队基于MVVM框架Vue开源出来的一套前端基于Vue 2.0的桌面端组件库。\n </p>\n <p>\n sqlrest-manager-ui模块基于Vue和ElementUI提供可视化的操作WEB界面。\n </p>\n </ul>\n </div>\n </el-card>\n </div>\n </el-tab-pane>\n\n </el-tabs>\n </div>\n</template>\n\n<script>\nimport layout from '../layout.vue';\nexport default {\n components: { layout },\n data () {\n return {\n activeName: 'first'\n };\n },\n methods: {\n handleClick (tab, event) {\n //console.log(tab, event);\n }\n }\n}\n</script>\n\n<style scoped>\ndiv h3 {\n text-align: center;\n}\n\n.content_tag {\n text-align: center;\n}\n\n.content_card {\n padding-top: 20px;\n}\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/views/aboutme/readme.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"关于SQLREST工具\")]),_vm._v(\" \"),_c('el-tabs',{on:{\"tab-click\":function($event){return _vm.handleClick()}},model:{value:(_vm.activeName),callback:function ($$v) {_vm.activeName=$$v},expression:\"activeName\"}},[_c('el-tab-pane',{attrs:{\"label\":\"系统功能\",\"name\":\"first\"}},[_c('div',{staticClass:\"content_tag\"},[_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(\"SQL接口\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"脚本接口\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"content_card\"},[_c('el-card',{staticClass:\"box-card\"},[_c('div',{staticClass:\"text item\"},[_c('p',[_vm._v(\"\\n 一句话,sqlrest工具提供快速构建RESTful的\"),_c('B',[_vm._v(\"API接口\")]),_vm._v(\"工具,包括SQl方式和脚本方式。功能包括:\\n \")],1),_vm._v(\" \"),_c('ul',[_c('li',[_vm._v(\"项目托管\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n Gitee地址:\"),_c('a',{attrs:{\"href\":\"https://gitee.com/inrgihc/sqlrest\"}},[_vm._v(\"https://gitee.com/inrgihc/sqlrest\")])]),_vm._v(\" \"),_c('li',[_vm._v(\"SQL方式构建RESTful接口\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 提供类似mybatis的动态SQL语法方式构建接口。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"脚本方式构建RESTful接口\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 基于groovy脚本的语法方式构建复杂场景下的接口。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"支持接口的token安全认证功能\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 执行器支持生成token及token认证。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"支持生成在线接口文档功能\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 基于swagger-ui提供生成在线接口文档功能。\\n \")])])])])],1)]),_vm._v(\" \"),_c('el-tab-pane',{attrs:{\"label\":\"关系数据库\",\"name\":\"second\"}},[_c('div',{staticClass:\"content_tag\"},[_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"JDBC\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(\"dbswitch\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"content_card\"},[_c('el-card',{staticClass:\"box-card\"},[_c('div',{staticClass:\"text item\"},[_c('p',[_vm._v(\"\\n sqlrest配置SQL生成接口的常规关系数据库,包括:\\n \")]),_vm._v(\" \"),_c('ul',[_c('li',[_vm._v(\"甲骨文的Oracle\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"微软的Microsoft SQLServer\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MySQL\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MariaDB\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"PostgreSQL\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"Greenplum(需使用PostgreSQL类型)\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"IBM的DB2\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"Sybase数据库\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产达梦数据库DMDB\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产人大金仓数据库Kingbase8\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产翰高数据库HighGo\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产神通数据库Oscar\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产南大通用数据库GBase8a\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"Apache Hive\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"SQLite3\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"OpenGuass\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"ClickHouse\\n \")])])])])],1)]),_vm._v(\" \"),_c('el-tab-pane',{attrs:{\"label\":\"开发技术栈\",\"name\":\"third\"}},[_c('div',{staticClass:\"content_tag\"},[_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"SpringBoot\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(\"Mybatis\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"Vue/ElementUI\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"content_card\"},[_c('el-card',{staticClass:\"box-card\"},[_c('div',{staticClass:\"text item\"},[_c('p',[_vm._v(\"\\n sqlrest基于Springboot脚手架进行的后端模块开发,模块组成结构如下:\\n \"),_c('pre',[_vm._v(\" └── sqlrest\\n ├── sqlrest-common // sqlrest通用定义模块\\n ├── sqlrest-template // sqlrest的SQL内容模板模块\\n ├── sqlrest-persistence // sqlrest的数据库持久化模块\\n ├── sqlrest-core // sqlrest-core的接口实现模块\\n ├── sqlrest-gateway // Gateway网关节点\\n ├── sqlrest-executor // Executor接口执行节点\\n ├── sqlrest-manager // Manager管理节点\\n ├── sqlrest-manager-ui // 基于Vue2的Manager前段WEB交互页面\\n ├── sqlrest-dist // 基于maven-assembly-plugin插件的项目打包模块\\n \")])]),_vm._v(\" \"),_c('ul',[_c('li',[_vm._v(\"SpringBoot\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n sqlrest基于SpringBoot作为项目的基础脚手架。\\n \")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n sqlrest-gateway/sqlrest-executor/sqlrest-manager基于SpringCloud的微服务架构提供接口配置与访问功能。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MyBatis\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。\\n \")]),_c('p',[_vm._v(\"\\n sqlrest-persistence模块基于Mybatis/Mybatis-plus提供配置数据的持久化。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"Vue/ElementUI\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n Vue是一套用于构建用户界面的渐进式JavaScript框架。 Element是饿了么团队基于MVVM框架Vue开源出来的一套前端基于Vue 2.0的桌面端组件库。\\n \")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n sqlrest-manager-ui模块基于Vue和ElementUI提供可视化的操作WEB界面。\\n \")])])])])],1)])],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-5dadd3b4\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/views/aboutme/readme.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-5dadd3b4\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./readme.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./readme.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./readme.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-5dadd3b4\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./readme.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-5dadd3b4\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/aboutme/readme.vue\n// module id = null\n// module chunks = ","module.exports = \"data:image/jpeg;base64,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\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/assets/user.jpg\n// module id = BQ5I\n// module chunks = 1 2"],"sourceRoot":""}
\ No newline at end of file
webpackJsonp([1,2],{"4er+":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a={name:"asideBarItem",props:{router:{type:Object}},components:{},data:function(){return{}},computed:{},watch:{},methods:{hasChildrenAndShow:function(t){return!t.hidden&&t.hasOwnProperty("children")},saveActivePath:function(t){this.$emit("setActivePath",t)}},created:function(){},mounted:function(){}},s={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"asideBarItem-container"},[t.hasChildrenAndShow(t.router)?n("el-submenu",{attrs:{index:t.router.path}},[n("template",{slot:"title"},[n("i",{class:t.router.icon}),t._v(" "),n("span",{attrs:{slot:"title"},slot:"title"},[t._v(t._s(t.router.name))])]),t._v(" "),t._l(t.router.children,function(t,e){return n("asideBarItem",{key:t.path,attrs:{router:t}})})],2):n("el-menu-item",{key:t.router.path,attrs:{index:t.router.path},on:{click:function(e){return t.saveActivePath(t.router.path)}}},[n("i",{class:t.router.icon}),t._v(" "),n("span",[t._v(t._s(t.router.name))])])],1)},staticRenderFns:[]};var r={name:"asideBar",components:{asideBarItem:n("VU/8")(a,s,!1,function(t){n("ASLc")},"data-v-645f620a",null).exports},data:function(){return{collapsed:!1,initActivePath:"/dashboard"}},computed:{routers:function(){return this.$router.options.routes[0].children}},watch:{},methods:{showBarItem:function(t){return!t.hidden},handleOpen:function(t,e){},handleClose:function(t,e){},updateCollapse:function(t){this.collapsed=t},setActivePath:function(t){this.initActivePath=t,window.sessionStorage.setItem("activePath",t)},getActivePath:function(){return window.sessionStorage.getItem("activePath")}},created:function(){this.initActivePath=this.getActivePath()},mounted:function(){}},i={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"aside-container"},[n("el-row",{staticClass:"tac"},[n("el-col",{attrs:{span:24}},[n("el-menu",{attrs:{router:!0,"unique-opened":"","background-color":"#001529","text-color":"rgb(191, 203, 217)","active-text-color":"#ffffff",collapse:t.collapsed,"default-active":t.initActivePath},on:{open:t.handleOpen,close:t.handleClose}},t._l(t.routers,function(e){return t.showBarItem(e)?n("asideBarItem",{key:e.path,attrs:{router:e},on:{setActivePath:t.setActivePath}}):t._e()}),1)],1)],1)],1)},staticRenderFns:[]};var l={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-breadcrumb",{staticClass:"app-breadcrumb",attrs:{"separator-class":"el-icon-arrow-right"}},[n("transition-group",t._l(t.levelList,function(e,a){return e.name?n("el-breadcrumb-item",{key:e.path},["noredirect"===e.redirect||a==t.levelList.length-1?n("span",{staticClass:"no-redirect"},[t._v(t._s(e.name))]):n("router-link",{attrs:{to:e.redirect||e.path}},[t._v(t._s(e.name))])],1):t._e()}),1)],1)},staticRenderFns:[]};var o={data:function(){return{username:"",nickname:""}},created:function(){this.username=window.sessionStorage.getItem("username"),this.nickname=window.sessionStorage.getItem("realname")},methods:{hadleLogout:function(){window.sessionStorage.clear(),this.$http({method:"GET",url:"/user/logout"}),this.$router.push("/login")}},destroyed:function(){window.sessionStorage.setItem("activePath","/")}},c={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"user-dropdown-wrap"},[a("el-dropdown",[a("div",{staticClass:"user-dropdown-photo"},[a("span",{staticClass:"user-dropdown-text"},[t._v("\n "+t._s(t.nickname)+"("+t._s(t.username)+")\n "),a("i",{staticClass:"el-icon-caret-bottom"})]),t._v(" "),a("img",{attrs:{src:n("BQ5I"),alt:"user"}})]),t._v(" "),a("el-dropdown-menu",{attrs:{solt:"dropdown"}},[a("el-dropdown-item",[a("router-link",{attrs:{to:"/user/self"}},[a("i",{staticClass:"el-icon-s-custom"}),t._v("个人信息\n ")])],1),t._v(" "),a("el-dropdown-item",{attrs:{divided:""}},[a("a",{on:{click:function(e){return t.hadleLogout()}}},[a("i",{staticClass:"el-icon-switch-button"}),t._v("退出登录\n ")])])],1)],1)],1)},staticRenderFns:[]};var u={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"viewer-container"},[e("router-view")],1)},staticRenderFns:[]};var d={name:"home",components:{asideBar:n("VU/8")(r,i,!1,function(t){n("GWYl")},"data-v-1dde93fa",null).exports,breadcrumb:n("VU/8")({name:"breadcrumb",data:function(){return{levelList:[]}},created:function(){this.getBreadcrumb()},watch:{$route:function(){this.getBreadcrumb()}},methods:{getBreadcrumb:function(){var t=this.$route.matched.filter(function(t){return t.name});this.levelList=t}}},l,!1,function(t){n("Yuwj")},"data-v-a2157ea2",null).exports,userDropdown:n("VU/8")(o,c,!1,function(t){n("8vZS")},"data-v-0a6f0f66",null).exports,viewMain:n("VU/8")({name:"viewer",components:{},data:function(){return{}},computed:{},watch:{},methods:{},created:function(){},mounted:function(){}},u,!1,function(t){n("mWqL")},"data-v-7b74460c",null).exports},data:function(){return{title:"SQLREST",isCollapse:null}},computed:{},watch:{},methods:{handleToggleCollapse:function(){var t=!this.isCollapse;this.isCollapse=t,this.$refs.asideBar.updateCollapse(t)}},created:function(){},mounted:function(){}},v={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("el-container",{staticClass:"index-container"},[a("el-aside",{attrs:{width:t.isCollapse?"64px":"250px"}},[a("div",{staticClass:"title"},[a("img",{attrs:{src:n("7Otq")}}),t._v(" "),t.isCollapse?t._e():a("span",{staticClass:"title-text"},[t._v(t._s(t.title))])]),t._v(" "),a("asideBar",{ref:"asideBar"})],1),t._v(" "),a("el-main",[a("el-header",[a("div",{staticClass:"collapse",on:{click:t.handleToggleCollapse}},[t.isCollapse?a("i",{staticClass:"el-icon-s-unfold"}):a("i",{staticClass:"el-icon-s-fold"})]),t._v(" "),a("breadcrumb"),t._v(" "),a("userDropdown")],1),t._v(" "),a("viewMain")],1)],1)},staticRenderFns:[]};var p=n("VU/8")(d,v,!1,function(t){n("z9t0")},"data-v-4972070e",null);e.default=p.exports},"7Otq":function(t,e,n){t.exports=n.p+"static/img/logo.a674d30.png"},"8vZS":function(t,e){},AEfp:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a={components:{layout:n("4er+").default},data:function(){return{activeName:"first"}},methods:{handleClick:function(t,e){}}},s={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("h3",[t._v("关于SQLREST工具")]),t._v(" "),n("el-tabs",{on:{"tab-click":function(e){return t.handleClick()}},model:{value:t.activeName,callback:function(e){t.activeName=e},expression:"activeName"}},[n("el-tab-pane",{attrs:{label:"系统功能",name:"first"}},[n("div",{staticClass:"content_tag"},[n("el-tag",{attrs:{type:"danger"}},[t._v("SQL接口")]),t._v(" "),n("el-tag",{attrs:{type:"success"}},[t._v("脚本接口")])],1),t._v(" "),n("div",{staticClass:"content_card"},[n("el-card",{staticClass:"box-card"},[n("div",{staticClass:"text item"},[n("p",[t._v("\n 一句话,sqlrest工具提供快速构建RESTful的"),n("B",[t._v("API接口")]),t._v("工具,包括SQl方式和脚本方式。功能包括:\n ")],1),t._v(" "),n("ul",[n("li",[t._v("项目托管")]),t._v(" "),n("p",[t._v("\n Gitee地址:"),n("a",{attrs:{href:"https://gitee.com/inrgihc/sqlrest"}},[t._v("https://gitee.com/inrgihc/sqlrest")])]),t._v(" "),n("li",[t._v("SQL方式构建RESTful接口")]),t._v(" "),n("p",[t._v("\n 提供类似mybatis的动态SQL语法方式构建接口。\n ")]),t._v(" "),n("li",[t._v("脚本方式构建RESTful接口")]),t._v(" "),n("p",[t._v("\n 基于groovy脚本的语法方式构建复杂场景下的接口。\n ")]),t._v(" "),n("li",[t._v("支持接口的token安全认证功能")]),t._v(" "),n("p",[t._v("\n 执行器支持生成token及token认证。\n ")]),t._v(" "),n("li",[t._v("支持生成在线接口文档功能")]),t._v(" "),n("p",[t._v("\n 基于swagger-ui提供生成在线接口文档功能。\n ")])])])])],1)]),t._v(" "),n("el-tab-pane",{attrs:{label:"关系数据库",name:"second"}},[n("div",{staticClass:"content_tag"},[n("el-tag",{attrs:{type:"success"}},[t._v("JDBC")]),t._v(" "),n("el-tag",{attrs:{type:"danger"}},[t._v("dbswitch")])],1),t._v(" "),n("div",{staticClass:"content_card"},[n("el-card",{staticClass:"box-card"},[n("div",{staticClass:"text item"},[n("p",[t._v("\n sqlrest配置SQL生成接口的常规关系数据库,包括:\n ")]),t._v(" "),n("ul",[n("li",[t._v("甲骨文的Oracle\n ")]),t._v(" "),n("li",[t._v("微软的Microsoft SQLServer\n ")]),t._v(" "),n("li",[t._v("MySQL\n ")]),t._v(" "),n("li",[t._v("MariaDB\n ")]),t._v(" "),n("li",[t._v("PostgreSQL\n ")]),t._v(" "),n("li",[t._v("Greenplum(需使用PostgreSQL类型)\n ")]),t._v(" "),n("li",[t._v("IBM的DB2\n ")]),t._v(" "),n("li",[t._v("Sybase数据库\n ")]),t._v(" "),n("li",[t._v("国产达梦数据库DMDB\n ")]),t._v(" "),n("li",[t._v("国产人大金仓数据库Kingbase8\n ")]),t._v(" "),n("li",[t._v("国产翰高数据库HighGo\n ")]),t._v(" "),n("li",[t._v("国产神通数据库Oscar\n ")]),t._v(" "),n("li",[t._v("国产南大通用数据库GBase8a\n ")]),t._v(" "),n("li",[t._v("Apache Hive\n ")]),t._v(" "),n("li",[t._v("SQLite3\n ")]),t._v(" "),n("li",[t._v("OpenGuass\n ")]),t._v(" "),n("li",[t._v("ClickHouse\n ")])])])])],1)]),t._v(" "),n("el-tab-pane",{attrs:{label:"开发技术栈",name:"third"}},[n("div",{staticClass:"content_tag"},[n("el-tag",{attrs:{type:"success"}},[t._v("SpringBoot")]),t._v(" "),n("el-tag",{attrs:{type:"danger"}},[t._v("Mybatis")]),t._v(" "),n("el-tag",{attrs:{type:"success"}},[t._v("Vue/ElementUI")])],1),t._v(" "),n("div",{staticClass:"content_card"},[n("el-card",{staticClass:"box-card"},[n("div",{staticClass:"text item"},[n("p",[t._v("\n sqlrest基于Springboot脚手架进行的后端模块开发,模块组成结构如下:\n "),n("pre",[t._v(" └── sqlrest\n ├── sqlrest-common // sqlrest通用定义模块\n ├── sqlrest-template // sqlrest的SQL内容模板模块\n ├── sqlrest-persistence // sqlrest的数据库持久化模块\n ├── sqlrest-core // sqlrest-core的接口实现模块\n ├── sqlrest-gateway // Gateway网关节点\n ├── sqlrest-executor // Executor接口执行节点\n ├── sqlrest-manager // Manager管理节点\n ├── sqlrest-manager-ui // 基于Vue2的Manager前段WEB交互页面\n ├── sqlrest-dist // 基于maven-assembly-plugin插件的项目打包模块\n ")])]),t._v(" "),n("ul",[n("li",[t._v("SpringBoot")]),t._v(" "),n("p",[t._v("\n sqlrest基于SpringBoot作为项目的基础脚手架。\n ")]),t._v(" "),n("p",[t._v("\n sqlrest-gateway/sqlrest-executor/sqlrest-manager基于SpringCloud的微服务架构提供接口配置与访问功能。\n ")]),t._v(" "),n("li",[t._v("MyBatis")]),t._v(" "),n("p",[t._v("\n MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。\n ")]),n("p",[t._v("\n sqlrest-persistence模块基于Mybatis/Mybatis-plus提供配置数据的持久化。\n ")]),t._v(" "),n("li",[t._v("Vue/ElementUI")]),t._v(" "),n("p",[t._v("\n Vue是一套用于构建用户界面的渐进式JavaScript框架。 Element是饿了么团队基于MVVM框架Vue开源出来的一套前端基于Vue 2.0的桌面端组件库。\n ")]),t._v(" "),n("p",[t._v("\n sqlrest-manager-ui模块基于Vue和ElementUI提供可视化的操作WEB界面。\n ")])])])])],1)])],1)],1)},staticRenderFns:[]};var r=n("VU/8")(a,s,!1,function(t){n("CN8I")},"data-v-5dadd3b4",null);e.default=r.exports},ASLc:function(t,e){},BQ5I:function(t,e){t.exports="data:image/jpeg;base64,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"},CN8I:function(t,e){},GWYl:function(t,e){},Yuwj:function(t,e){},mWqL:function(t,e){},z9t0:function(t,e){}});
//# sourceMappingURL=1.0dd0668e608dd0f54f6e.js.map
\ No newline at end of file
webpackJsonp([1,2],{"4er+":function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a={name:"asideBarItem",props:{router:{type:Object}},components:{},data:function(){return{}},computed:{},watch:{},methods:{hasChildrenAndShow:function(t){return!t.hidden&&t.hasOwnProperty("children")},saveActivePath:function(t){this.$emit("setActivePath",t)}},created:function(){},mounted:function(){}},s={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"asideBarItem-container"},[t.hasChildrenAndShow(t.router)?n("el-submenu",{attrs:{index:t.router.path}},[n("template",{slot:"title"},[n("i",{class:t.router.icon}),t._v(" "),n("span",{attrs:{slot:"title"},slot:"title"},[t._v(t._s(t.router.name))])]),t._v(" "),t._l(t.router.children,function(t,e){return n("asideBarItem",{key:t.path,attrs:{router:t}})})],2):n("el-menu-item",{key:t.router.path,attrs:{index:t.router.path},on:{click:function(e){return t.saveActivePath(t.router.path)}}},[n("i",{class:t.router.icon}),t._v(" "),n("span",[t._v(t._s(t.router.name))])])],1)},staticRenderFns:[]};var r={name:"asideBar",components:{asideBarItem:n("VU/8")(a,s,!1,function(t){n("ASLc")},"data-v-645f620a",null).exports},data:function(){return{collapsed:!1,initActivePath:"/dashboard"}},computed:{routers:function(){return this.$router.options.routes[0].children}},watch:{},methods:{showBarItem:function(t){return!t.hidden},handleOpen:function(t,e){},handleClose:function(t,e){},updateCollapse:function(t){this.collapsed=t},setActivePath:function(t){this.initActivePath=t,window.sessionStorage.setItem("activePath",t)},getActivePath:function(){return window.sessionStorage.getItem("activePath")}},created:function(){this.initActivePath=this.getActivePath()},mounted:function(){}},i={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"aside-container"},[n("el-row",{staticClass:"tac"},[n("el-col",{attrs:{span:24}},[n("el-menu",{attrs:{router:!0,"unique-opened":"","background-color":"#001529","text-color":"rgb(191, 203, 217)","active-text-color":"#ffffff",collapse:t.collapsed,"default-active":t.initActivePath},on:{open:t.handleOpen,close:t.handleClose}},t._l(t.routers,function(e){return t.showBarItem(e)?n("asideBarItem",{key:e.path,attrs:{router:e},on:{setActivePath:t.setActivePath}}):t._e()}),1)],1)],1)],1)},staticRenderFns:[]};var l={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("el-breadcrumb",{staticClass:"app-breadcrumb",attrs:{"separator-class":"el-icon-arrow-right"}},[n("transition-group",t._l(t.levelList,function(e,a){return e.name?n("el-breadcrumb-item",{key:e.path},["noredirect"===e.redirect||a==t.levelList.length-1?n("span",{staticClass:"no-redirect"},[t._v(t._s(e.name))]):n("router-link",{attrs:{to:e.redirect||e.path}},[t._v(t._s(e.name))])],1):t._e()}),1)],1)},staticRenderFns:[]};var o={data:function(){return{username:"",nickname:""}},created:function(){this.username=window.sessionStorage.getItem("username"),this.nickname=window.sessionStorage.getItem("realname")},methods:{hadleLogout:function(){window.sessionStorage.clear(),this.$http({method:"GET",url:"/user/logout"}),this.$router.push("/login")}},destroyed:function(){window.sessionStorage.setItem("activePath","/")}},c={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"user-dropdown-wrap"},[a("el-dropdown",[a("div",{staticClass:"user-dropdown-photo"},[a("span",{staticClass:"user-dropdown-text"},[t._v("\n "+t._s(t.nickname)+"("+t._s(t.username)+")\n "),a("i",{staticClass:"el-icon-caret-bottom"})]),t._v(" "),a("img",{attrs:{src:n("BQ5I"),alt:"user"}})]),t._v(" "),a("el-dropdown-menu",{attrs:{solt:"dropdown"}},[a("el-dropdown-item",[a("router-link",{attrs:{to:"/user/self"}},[a("i",{staticClass:"el-icon-s-custom"}),t._v("个人信息\n ")])],1),t._v(" "),a("el-dropdown-item",{attrs:{divided:""}},[a("a",{on:{click:function(e){return t.hadleLogout()}}},[a("i",{staticClass:"el-icon-switch-button"}),t._v("退出登录\n ")])])],1)],1)],1)},staticRenderFns:[]};var u={render:function(){var t=this.$createElement,e=this._self._c||t;return e("div",{staticClass:"viewer-container"},[e("router-view")],1)},staticRenderFns:[]};var v={name:"home",components:{asideBar:n("VU/8")(r,i,!1,function(t){n("GWYl")},"data-v-1dde93fa",null).exports,breadcrumb:n("VU/8")({name:"breadcrumb",data:function(){return{levelList:[]}},created:function(){this.getBreadcrumb()},watch:{$route:function(){this.getBreadcrumb()}},methods:{getBreadcrumb:function(){var t=this.$route.matched.filter(function(t){return t.name});this.levelList=t}}},l,!1,function(t){n("Yuwj")},"data-v-a2157ea2",null).exports,userDropdown:n("VU/8")(o,c,!1,function(t){n("8vZS")},"data-v-0a6f0f66",null).exports,viewMain:n("VU/8")({name:"viewer",components:{},data:function(){return{}},computed:{},watch:{},methods:{},created:function(){},mounted:function(){}},u,!1,function(t){n("mWqL")},"data-v-7b74460c",null).exports},data:function(){return{title:"SQLREST",isCollapse:null}},computed:{},watch:{},methods:{handleToggleCollapse:function(){var t=!this.isCollapse;this.isCollapse=t,this.$refs.asideBar.updateCollapse(t)}},created:function(){},mounted:function(){}},d={render:function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("el-container",{staticClass:"index-container"},[a("el-aside",{attrs:{width:t.isCollapse?"64px":"250px"}},[a("div",{staticClass:"title"},[a("img",{attrs:{src:n("7Otq")}}),t._v(" "),t.isCollapse?t._e():a("span",{staticClass:"title-text"},[t._v(t._s(t.title))])]),t._v(" "),a("asideBar",{ref:"asideBar"})],1),t._v(" "),a("el-main",[a("el-header",[a("div",{staticClass:"collapse",on:{click:t.handleToggleCollapse}},[t.isCollapse?a("i",{staticClass:"el-icon-s-unfold"}):a("i",{staticClass:"el-icon-s-fold"})]),t._v(" "),a("breadcrumb"),t._v(" "),a("userDropdown")],1),t._v(" "),a("viewMain")],1)],1)},staticRenderFns:[]};var p=n("VU/8")(v,d,!1,function(t){n("z9t0")},"data-v-4972070e",null);e.default=p.exports},"7Otq":function(t,e,n){t.exports=n.p+"static/img/logo.a674d30.png"},"8vZS":function(t,e){},AEfp:function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var a={components:{layout:n("4er+").default},data:function(){return{activeName:"first"}},methods:{handleClick:function(t,e){}}},s={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("h3",[t._v("关于SQLREST工具")]),t._v(" "),n("el-tabs",{on:{"tab-click":function(e){return t.handleClick()}},model:{value:t.activeName,callback:function(e){t.activeName=e},expression:"activeName"}},[n("el-tab-pane",{attrs:{label:"系统功能",name:"first"}},[n("div",{staticClass:"content_tag"},[n("el-tag",{attrs:{type:"danger"}},[t._v("SQL接口")]),t._v(" "),n("el-tag",{attrs:{type:"success"}},[t._v("脚本接口")])],1),t._v(" "),n("div",{staticClass:"content_card"},[n("el-card",{staticClass:"box-card"},[n("div",{staticClass:"text item"},[n("p",[t._v("\n 一句话,sqlrest工具提供快速构建RESTful的"),n("B",[t._v("API接口")]),t._v("工具,包括SQl方式和脚本方式。功能包括:\n ")],1),t._v(" "),n("ul",[n("li",[t._v("项目托管")]),t._v(" "),n("p",[t._v("\n Gitee地址:"),n("a",{attrs:{href:"https://gitee.com/inrgihc/sqlrest"}},[t._v("https://gitee.com/inrgihc/sqlrest")])]),t._v(" "),n("li",[t._v("SQL方式构建RESTful接口")]),t._v(" "),n("p",[t._v("\n 提供类似mybatis的动态SQL语法方式构建接口。\n ")]),t._v(" "),n("li",[t._v("脚本方式构建RESTful接口")]),t._v(" "),n("p",[t._v("\n 基于groovy脚本的语法方式构建复杂场景下的接口。\n ")]),t._v(" "),n("li",[t._v("支持接口的token安全认证功能")]),t._v(" "),n("p",[t._v("\n 执行器支持生成token及token认证。\n ")]),t._v(" "),n("li",[t._v("支持生成在线接口文档功能")]),t._v(" "),n("p",[t._v("\n 基于swagger-ui提供生成在线接口文档功能。\n ")]),t._v(" "),n("li",[t._v("支持接口的流量控制功能")]),t._v(" "),n("p",[t._v("\n 执行器基于sentinel支持接口的流量控制功能。\n ")])])])])],1)]),t._v(" "),n("el-tab-pane",{attrs:{label:"关系数据库",name:"second"}},[n("div",{staticClass:"content_tag"},[n("el-tag",{attrs:{type:"success"}},[t._v("JDBC")]),t._v(" "),n("el-tag",{attrs:{type:"danger"}},[t._v("dbswitch")])],1),t._v(" "),n("div",{staticClass:"content_card"},[n("el-card",{staticClass:"box-card"},[n("div",{staticClass:"text item"},[n("p",[t._v("\n sqlrest配置SQL生成接口的常规关系数据库,包括:\n ")]),t._v(" "),n("ul",[n("li",[t._v("甲骨文的Oracle\n ")]),t._v(" "),n("li",[t._v("微软的Microsoft SQLServer\n ")]),t._v(" "),n("li",[t._v("MySQL\n ")]),t._v(" "),n("li",[t._v("MariaDB\n ")]),t._v(" "),n("li",[t._v("PostgreSQL\n ")]),t._v(" "),n("li",[t._v("Greenplum(需使用PostgreSQL类型)\n ")]),t._v(" "),n("li",[t._v("IBM的DB2\n ")]),t._v(" "),n("li",[t._v("Sybase数据库\n ")]),t._v(" "),n("li",[t._v("国产达梦数据库DMDB\n ")]),t._v(" "),n("li",[t._v("国产人大金仓数据库Kingbase8\n ")]),t._v(" "),n("li",[t._v("国产翰高数据库HighGo\n ")]),t._v(" "),n("li",[t._v("国产神通数据库Oscar\n ")]),t._v(" "),n("li",[t._v("国产南大通用数据库GBase8a\n ")]),t._v(" "),n("li",[t._v("Apache Hive\n ")]),t._v(" "),n("li",[t._v("SQLite3\n ")]),t._v(" "),n("li",[t._v("OpenGuass\n ")]),t._v(" "),n("li",[t._v("ClickHouse\n ")])])])])],1)]),t._v(" "),n("el-tab-pane",{attrs:{label:"开发技术栈",name:"third"}},[n("div",{staticClass:"content_tag"},[n("el-tag",{attrs:{type:"success"}},[t._v("SpringBoot")]),t._v(" "),n("el-tag",{attrs:{type:"danger"}},[t._v("Mybatis")]),t._v(" "),n("el-tag",{attrs:{type:"success"}},[t._v("Vue/ElementUI")])],1),t._v(" "),n("div",{staticClass:"content_card"},[n("el-card",{staticClass:"box-card"},[n("div",{staticClass:"text item"},[n("p",[t._v("\n sqlrest基于Springboot脚手架进行的后端模块开发,模块组成结构如下:\n "),n("pre",[t._v(" └── sqlrest\n ├── sqlrest-common // sqlrest通用定义模块\n ├── sqlrest-template // sqlrest的SQL内容模板模块\n ├── sqlrest-persistence // sqlrest的数据库持久化模块\n ├── sqlrest-core // sqlrest-core的接口实现模块\n ├── sqlrest-gateway // Gateway网关节点\n ├── sqlrest-executor // Executor接口执行节点\n ├── sqlrest-manager // Manager管理节点\n ├── sqlrest-manager-ui // 基于Vue2的Manager前段WEB交互页面\n ├── sqlrest-dist // 基于maven-assembly-plugin插件的项目打包模块\n ")])]),t._v(" "),n("ul",[n("li",[t._v("SpringBoot")]),t._v(" "),n("p",[t._v("\n sqlrest基于SpringBoot作为项目的基础脚手架。\n ")]),t._v(" "),n("p",[t._v("\n sqlrest-gateway/sqlrest-executor/sqlrest-manager基于SpringCloud的微服务架构提供接口配置与访问功能。\n ")]),t._v(" "),n("li",[t._v("MyBatis")]),t._v(" "),n("p",[t._v("\n MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。\n ")]),n("p",[t._v("\n sqlrest-persistence模块基于Mybatis/Mybatis-plus提供配置数据的持久化。\n ")]),t._v(" "),n("li",[t._v("Vue/ElementUI")]),t._v(" "),n("p",[t._v("\n Vue是一套用于构建用户界面的渐进式JavaScript框架。 Element是饿了么团队基于MVVM框架Vue开源出来的一套前端基于Vue 2.0的桌面端组件库。\n ")]),t._v(" "),n("p",[t._v("\n sqlrest-manager-ui模块基于Vue和ElementUI提供可视化的操作WEB界面。\n ")])])])])],1)])],1)],1)},staticRenderFns:[]};var r=n("VU/8")(a,s,!1,function(t){n("cEl2")},"data-v-b466f4ca",null);e.default=r.exports},ASLc:function(t,e){},BQ5I:function(t,e){t.exports="data:image/jpeg;base64,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"},GWYl:function(t,e){},Yuwj:function(t,e){},cEl2:function(t,e){},mWqL:function(t,e){},z9t0:function(t,e){}});
//# sourceMappingURL=1.347dcbee299ce37dade6.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///src/components/asideBar/asideBarItem.vue","webpack:///./src/components/asideBar/asideBarItem.vue?5e90","webpack:///./src/components/asideBar/asideBarItem.vue","webpack:///src/components/asideBar/asideBar.vue","webpack:///./src/components/asideBar/asideBar.vue?3399","webpack:///./src/components/asideBar/asideBar.vue","webpack:///./src/components/breadcrumb/index.vue?cf18","webpack:///./src/components/breadcrumb/index.vue","webpack:///src/components/userDropdown/index.vue","webpack:///./src/components/userDropdown/index.vue?1aef","webpack:///./src/components/userDropdown/index.vue","webpack:///./src/views/viewer.vue?508d","webpack:///./src/views/viewer.vue","webpack:///src/views/layout.vue","webpack:///src/components/breadcrumb/index.vue","webpack:///src/views/viewer.vue","webpack:///./src/views/layout.vue?0d9b","webpack:///./src/views/layout.vue","webpack:///./src/assets/logo.png","webpack:///src/views/aboutme/readme.vue","webpack:///./src/views/aboutme/readme.vue?786d","webpack:///./src/views/aboutme/readme.vue","webpack:///./src/assets/user.jpg"],"names":["asideBarItem","name","props","router","type","Object","components","data","computed","watch","methods","hasChildrenAndShow","hidden","hasOwnProperty","saveActivePath","path","this","$emit","created","mounted","asideBar_asideBarItem","render","_vm","_h","$createElement","_c","_self","staticClass","attrs","index","slot","class","icon","_v","_s","_l","child","childKey","key","on","click","$event","staticRenderFns","asideBar","__webpack_require__","normalizeComponent","ssrContext","collapsed","initActivePath","routers","$router","options","routes","children","showBarItem","handleOpen","keyPath","handleClose","updateCollapse","collapse","setActivePath","window","sessionStorage","setItem","getActivePath","getItem","asideBar_asideBar","span","unique-opened","background-color","text-color","active-text-color","default-active","open","close","_e","components_breadcrumb","separator-class","item","redirect","levelList","length","to","userDropdown","username","nickname","hadleLogout","clear","$http","method","url","push","destroyed","components_userDropdown","src","alt","solt","divided","views_viewer","layout","asideBar_normalizeComponent","breadcrumb","breadcrumb_normalizeComponent","getBreadcrumb","$route","matched","filter","userDropdown_normalizeComponent","viewMain","viewer_normalizeComponent","title","isCollapse","handleToggleCollapse","status","$refs","views_layout","width","ref","layout_Component","layout_normalizeComponent","__webpack_exports__","module","exports","p","readme","activeName","handleClick","tab","event","aboutme_readme","tab-click","model","value","callback","$$v","expression","label","href","Component"],"mappings":"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","file":"static/js/1.347dcbee299ce37dade6.js","sourcesContent":["<template>\r\n <div class=\"asideBarItem-container\">\r\n <!-- 如果hasOwnProperty监测有children 就循环递归展示-->\r\n <el-submenu :index=\"router.path\" v-if=\"hasChildrenAndShow(router)\">\r\n <template slot=\"title\">\r\n <i :class=\"router.icon\"></i>\r\n <span slot=\"title\">{{router.name}}</span>\r\n </template>\r\n <!--递归子孙导航-->\r\n <asideBarItem v-for=\"(child, childKey) in router.children\" :key=\"child.path\" :router=\"child\"></asideBarItem>\r\n </el-submenu>\r\n <!-- 如果没有 就展示一级导航 -->\r\n <el-menu-item v-else :key=\"router.path\" :index=\"router.path\" @click=\"saveActivePath(router.path)\">\r\n <i :class=\"router.icon\"></i>\r\n <span>{{router.name}}</span>\r\n </el-menu-item>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n//hasOwnProperty可以用来检测一个对象是否含有特定的自身属性\r\nexport default {\r\n name: \"asideBarItem\",\r\n props: {\r\n router: {\r\n type: Object\r\n },\r\n },\r\n components: {},\r\n data() {\r\n return {\r\n };\r\n },\r\n computed: {\r\n // router () {\r\n // return this.$router.options.routes\r\n // }\r\n },\r\n watch: {},\r\n methods: {\r\n hasChildrenAndShow(router){\r\n if(router.hidden){\r\n return false\r\n }\r\n\r\n return router.hasOwnProperty('children');\r\n },\r\n saveActivePath(path) {\r\n //alert(path);\r\n this.$emit('setActivePath',path);\r\n },\r\n },\r\n created() {\r\n },\r\n mounted() {}\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.el-menu-item.is-active {\r\n background-color: #1890ff !important;\r\n}\r\n\r\n/*隐藏文字*/\r\n.el-menu--collapse .asideBarItem-container span{\r\n display: none;\r\n}\r\n/*隐藏 > */\r\n.el-menu--collapse .asideBarItem-container .el-submenu__title .el-submenu__icon-arrow{\r\n display: none;\r\n}\r\n\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/asideBar/asideBarItem.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"asideBarItem-container\"},[(_vm.hasChildrenAndShow(_vm.router))?_c('el-submenu',{attrs:{\"index\":_vm.router.path}},[_c('template',{slot:\"title\"},[_c('i',{class:_vm.router.icon}),_vm._v(\" \"),_c('span',{attrs:{\"slot\":\"title\"},slot:\"title\"},[_vm._v(_vm._s(_vm.router.name))])]),_vm._v(\" \"),_vm._l((_vm.router.children),function(child,childKey){return _c('asideBarItem',{key:child.path,attrs:{\"router\":child}})})],2):_c('el-menu-item',{key:_vm.router.path,attrs:{\"index\":_vm.router.path},on:{\"click\":function($event){return _vm.saveActivePath(_vm.router.path)}}},[_c('i',{class:_vm.router.icon}),_vm._v(\" \"),_c('span',[_vm._v(_vm._s(_vm.router.name))])])],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-645f620a\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/asideBar/asideBarItem.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-645f620a\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./asideBarItem.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./asideBarItem.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./asideBarItem.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-645f620a\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./asideBarItem.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-645f620a\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/asideBar/asideBarItem.vue\n// module id = null\n// module chunks = ","<template>\r\n <div class=\"aside-container\">\r\n <el-row class=\"tac\">\r\n <el-col :span=\"24\">\r\n <!-- 整体左侧导航 -->\r\n <el-menu\r\n :router=\"true\"\r\n unique-opened\r\n @open=\"handleOpen\"\r\n @close=\"handleClose\"\r\n background-color=\"#001529\"\r\n text-color=\"rgb(191, 203, 217)\"\r\n active-text-color=\"#ffffff\"\r\n :collapse=\"collapsed\"\r\n :default-active=\"initActivePath\"\r\n >\r\n <!-- 左侧导航栏抽取循环部分 将路由列表传给子组件-->\r\n <asideBarItem v-for=\"router in routers\" :router=\"router\" v-if=\"showBarItem(router)\" @setActivePath='setActivePath' :key=\"router.path\"></asideBarItem>\r\n </el-menu>\r\n </el-col>\r\n </el-row>\r\n </div>\r\n</template>\r\n \r\n<script>\r\nimport asideBarItem from \"@/components/asideBar/asideBarItem\";\r\nexport default {\r\n name: \"asideBar\",\r\n components: {\r\n asideBarItem\r\n },\r\n data() {\r\n return {\r\n collapsed:false,\r\n initActivePath:'/dashboard'\r\n };\r\n },\r\n computed: {\r\n routers() {\r\n //console.log(this.$router.options);\r\n //this.$router.options获取路由列表\r\n return this.$router.options.routes[0].children;\r\n },\r\n },\r\n watch: {},\r\n methods: {\r\n showBarItem(router){\r\n if(router.hidden){\r\n return false\r\n }\r\n\r\n return true;\r\n },\r\n handleOpen(key, keyPath) {\r\n //点击打开时当前的路径\r\n //console.log(key, keyPath, 'handleOpen');\r\n },\r\n handleClose(key, keyPath) {\r\n //console.log(key, keyPath, 'handleClose');\r\n },\r\n updateCollapse(collapse){\r\n this.collapsed=collapse;\r\n //console.log(\"==========\"+this.isCollapse);\r\n },\r\n setActivePath(path){\r\n this.initActivePath=path;\r\n window.sessionStorage.setItem(\"activePath\", path);\r\n //console.log(\"update active path \"+this.initActivePath);\r\n },\r\n getActivePath(){\r\n return window.sessionStorage.getItem(\"activePath\");\r\n }\r\n },\r\n created() {\r\n this.initActivePath = this.getActivePath();\r\n //console.log(\"init active path \"+this.initActivePath);\r\n },\r\n mounted() {\r\n // console.log(this.$router.options.routes[1])\r\n }\r\n};\r\n</script>\r\n \r\n <style scoped>\r\n.aside-container {\r\n padding-top: 2px;\r\n}\r\n\r\n.el-menu {\r\n padding: 0;\r\n border-right: none;\r\n}\r\n\r\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/asideBar/asideBar.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"aside-container\"},[_c('el-row',{staticClass:\"tac\"},[_c('el-col',{attrs:{\"span\":24}},[_c('el-menu',{attrs:{\"router\":true,\"unique-opened\":\"\",\"background-color\":\"#001529\",\"text-color\":\"rgb(191, 203, 217)\",\"active-text-color\":\"#ffffff\",\"collapse\":_vm.collapsed,\"default-active\":_vm.initActivePath},on:{\"open\":_vm.handleOpen,\"close\":_vm.handleClose}},_vm._l((_vm.routers),function(router){return (_vm.showBarItem(router))?_c('asideBarItem',{key:router.path,attrs:{\"router\":router},on:{\"setActivePath\":_vm.setActivePath}}):_vm._e()}),1)],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-1dde93fa\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/asideBar/asideBar.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-1dde93fa\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./asideBar.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./asideBar.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./asideBar.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-1dde93fa\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./asideBar.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-1dde93fa\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/asideBar/asideBar.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-breadcrumb',{staticClass:\"app-breadcrumb\",attrs:{\"separator-class\":\"el-icon-arrow-right\"}},[_c('transition-group',_vm._l((_vm.levelList),function(item,index){return (item.name)?_c('el-breadcrumb-item',{key:item.path},[(item.redirect===\"noredirect\"||index==_vm.levelList.length-1)?_c('span',{staticClass:\"no-redirect\"},[_vm._v(_vm._s(item.name))]):_c('router-link',{attrs:{\"to\":item.redirect||item.path}},[_vm._v(_vm._s(item.name))])],1):_vm._e()}),1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-a2157ea2\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/breadcrumb/index.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-a2157ea2\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./index.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-a2157ea2\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-a2157ea2\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/breadcrumb/index.vue\n// module id = null\n// module chunks = ","<template>\r\n <div class=\"user-dropdown-wrap\">\r\n <el-dropdown>\r\n <div class=\"user-dropdown-photo\">\r\n <span class=\"user-dropdown-text\">\r\n {{ nickname }}({{username}})\r\n <i class=\"el-icon-caret-bottom\"></i>\r\n </span>\r\n <img src=\"../../assets/user.jpg\"\r\n alt=\"user\" />\r\n </div>\r\n <el-dropdown-menu solt=\"dropdown\">\r\n <el-dropdown-item>\r\n <router-link to=\"/user/self\">\r\n <i class=\"el-icon-s-custom\"></i>个人信息\r\n </router-link>\r\n </el-dropdown-item>\r\n <el-dropdown-item divided>\r\n <a @click=\"hadleLogout()\">\r\n <i class=\"el-icon-switch-button\"></i>退出登录\r\n </a>\r\n </el-dropdown-item>\r\n </el-dropdown-menu>\r\n </el-dropdown>\r\n </div>\r\n</template>\r\n\r\n<script>\r\nexport default {\r\n data () {\r\n return {\r\n username: \"\",\r\n nickname: \"\"\r\n };\r\n },\r\n created () {\r\n this.username = window.sessionStorage.getItem(\"username\");\r\n this.nickname = window.sessionStorage.getItem(\"realname\");\r\n },\r\n methods: {\r\n hadleLogout () {\r\n window.sessionStorage.clear();\r\n this.$http({\r\n method: 'GET',\r\n url: '/user/logout'\r\n }),\r\n this.$router.push(\"/login\");\r\n }\r\n },\r\n destroyed () {\r\n window.sessionStorage.setItem(\"activePath\", \"/\");\r\n }\r\n};\r\n</script>\r\n<style scoped>\r\n.user-dropdown-wrap {\r\n height: 60px;\r\n padding: 10px 0;\r\n float: right;\r\n}\r\n\r\n.user-dropdown-wrap .user-dropdown-photo img {\r\n width: 30px;\r\n height: 30px;\r\n vertical-align: middle;\r\n}\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/components/userDropdown/index.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-dropdown-wrap\"},[_c('el-dropdown',[_c('div',{staticClass:\"user-dropdown-photo\"},[_c('span',{staticClass:\"user-dropdown-text\"},[_vm._v(\"\\n \"+_vm._s(_vm.nickname)+\"(\"+_vm._s(_vm.username)+\")\\n \"),_c('i',{staticClass:\"el-icon-caret-bottom\"})]),_vm._v(\" \"),_c('img',{attrs:{\"src\":require(\"../../assets/user.jpg\"),\"alt\":\"user\"}})]),_vm._v(\" \"),_c('el-dropdown-menu',{attrs:{\"solt\":\"dropdown\"}},[_c('el-dropdown-item',[_c('router-link',{attrs:{\"to\":\"/user/self\"}},[_c('i',{staticClass:\"el-icon-s-custom\"}),_vm._v(\"个人信息\\n \")])],1),_vm._v(\" \"),_c('el-dropdown-item',{attrs:{\"divided\":\"\"}},[_c('a',{on:{\"click\":function($event){return _vm.hadleLogout()}}},[_c('i',{staticClass:\"el-icon-switch-button\"}),_vm._v(\"退出登录\\n \")])])],1)],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-0a6f0f66\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/components/userDropdown/index.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-0a6f0f66\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./index.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./index.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-0a6f0f66\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./index.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-0a6f0f66\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/components/userDropdown/index.vue\n// module id = null\n// module chunks = ","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"viewer-container\"},[_c('router-view')],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-7b74460c\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/views/viewer.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-7b74460c\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./viewer.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./viewer.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./viewer.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-7b74460c\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./viewer.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-7b74460c\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/viewer.vue\n// module id = null\n// module chunks = ","<template>\r\n <el-container class=\"index-container\">\r\n <el-aside :width=\"isCollapse?'64px':'250px'\">\r\n <!-- 左侧LOGO -->\r\n <div class=\"title\">\r\n <img src=\"../assets/logo.png\" />\r\n <span class=\"title-text\"\r\n v-if=\"!isCollapse\">{{title}}</span>\r\n </div>\r\n <!-- 左侧导航菜单 -->\r\n <asideBar ref=\"asideBar\"></asideBar>\r\n </el-aside>\r\n <el-main>\r\n <el-header>\r\n <!-- 折叠图标 -->\r\n <div @click=\"handleToggleCollapse\"\r\n class=\"collapse\">\r\n <i class=\"el-icon-s-unfold\"\r\n v-if=\"isCollapse\"></i>\r\n <i class=\"el-icon-s-fold\"\r\n v-else></i>\r\n </div>\r\n\r\n <!-- 面包屑导航 -->\r\n <breadcrumb></breadcrumb>\r\n <userDropdown></userDropdown>\r\n </el-header>\r\n\r\n <!-- 右侧显示区域 -->\r\n <viewMain></viewMain>\r\n </el-main>\r\n </el-container>\r\n</template>\r\n\r\n<script>\r\nimport asideBar from \"@/components/asideBar/asideBar\";\r\nimport breadcrumb from \"@/components/breadcrumb/index\";\r\nimport userDropdown from \"@/components/userDropdown/index\"\r\nimport viewMain from \"@/views/viewer\";\r\n\r\nexport default {\r\n name: \"home\",\r\n components: {\r\n asideBar,\r\n breadcrumb,\r\n userDropdown,\r\n viewMain\r\n },\r\n data () {\r\n return {\r\n title: \"SQLREST\",\r\n isCollapse: null\r\n };\r\n },\r\n computed: {},\r\n watch: {},\r\n methods: {\r\n handleToggleCollapse () {\r\n let status = !this.isCollapse;\r\n this.isCollapse = status;\r\n this.$refs.asideBar.updateCollapse(status);\r\n }\r\n },\r\n created () {\r\n },\r\n mounted () { }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.index-container {\r\n height: 100%;\r\n}\r\n\r\n.el-aside {\r\n float: left;\r\n background: #002140;\r\n color: #333;\r\n text-align: left;\r\n}\r\n\r\n.el-aside .title {\r\n height: 60px;\r\n background: #001529;\r\n line-height: 64px;\r\n background: #002140;\r\n text-align: center;\r\n}\r\n\r\n.el-aside .title img {\r\n width: 50px;\r\n height: 50px;\r\n vertical-align: middle;\r\n}\r\n\r\n.el-aside .title .title-text {\r\n color: #fff;\r\n font-weight: 600;\r\n font-size: 20px;\r\n vertical-align: middle;\r\n}\r\n\r\n.el-header {\r\n padding: 0px;\r\n color: #ffffff;\r\n width: 100%;\r\n background: #fff;\r\n}\r\n\r\n.el-header .collapse {\r\n float: left;\r\n padding-left: 2px;\r\n font-size: 22px;\r\n color: #838383;\r\n margin-top: 10px;\r\n margin-right: 20px;\r\n cursor: pointer;\r\n}\r\n\r\n.el-main {\r\n padding: 0px;\r\n float: left;\r\n background-color: #eaedf1;\r\n}\r\n</style>\r\n\n\n\n// WEBPACK FOOTER //\n// src/views/layout.vue","<template>\r\n <el-breadcrumb class=\"app-breadcrumb\" separator-class=\"el-icon-arrow-right\">\r\n <transition-group>\r\n <el-breadcrumb-item v-for=\"(item,index) in levelList\" :key=\"item.path\" v-if=\"item.name\">\r\n <span v-if='item.redirect===\"noredirect\"||index==levelList.length-1' class=\"no-redirect\">{{item.name}}</span>\r\n <router-link v-else :to=\"item.redirect||item.path\">{{item.name}}</router-link>\r\n </el-breadcrumb-item>\r\n </transition-group>\r\n </el-breadcrumb>\r\n</template>\r\n\r\n<!-- 参考教程:https://www.cnblogs.com/yangguoe/p/9406032.html -->\r\n<script>\r\nexport default {\r\n name: \"breadcrumb\",\r\n data() {\r\n return {\r\n levelList: []\r\n };\r\n },\r\n created() {\r\n this.getBreadcrumb();\r\n },\r\n watch: {\r\n $route() {\r\n this.getBreadcrumb();\r\n }\r\n },\r\n methods: {\r\n getBreadcrumb() {\r\n let matched = this.$route.matched.filter(item => item.name); //$route.matched 将会是一个包含从上到下的所有对象 (副本)。\r\n this.levelList = matched;\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.el-header .el-breadcrumb {\r\n float: left;\r\n margin: 18px 0 0 20px;\r\n}\r\n\r\n.app-breadcrumb .el-breadcrumb .no-redirect {\r\n color: #97a8be;\r\n cursor: text;\r\n}\r\n</style>\n\n\n// WEBPACK FOOTER //\n// src/components/breadcrumb/index.vue","<template>\r\n <div class=\"viewer-container\">\r\n <router-view></router-view>\r\n </div>\r\n</template>\r\n \r\n<script>\r\nexport default {\r\n name: \"viewer\",\r\n components: {},\r\n data () {\r\n return {};\r\n },\r\n computed: {},\r\n watch: {},\r\n methods: {},\r\n created () { },\r\n mounted () { }\r\n};\r\n</script>\r\n \r\n<style scoped>\r\n.viewer-container {\r\n padding-top: 10px;\r\n padding-right: 10px;\r\n padding-bottom: 10px;\r\n padding-left: 10px;\r\n}\r\n</style>\n\n\n// WEBPACK FOOTER //\n// src/views/viewer.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-container',{staticClass:\"index-container\"},[_c('el-aside',{attrs:{\"width\":_vm.isCollapse?'64px':'250px'}},[_c('div',{staticClass:\"title\"},[_c('img',{attrs:{\"src\":require(\"../assets/logo.png\")}}),_vm._v(\" \"),(!_vm.isCollapse)?_c('span',{staticClass:\"title-text\"},[_vm._v(_vm._s(_vm.title))]):_vm._e()]),_vm._v(\" \"),_c('asideBar',{ref:\"asideBar\"})],1),_vm._v(\" \"),_c('el-main',[_c('el-header',[_c('div',{staticClass:\"collapse\",on:{\"click\":_vm.handleToggleCollapse}},[(_vm.isCollapse)?_c('i',{staticClass:\"el-icon-s-unfold\"}):_c('i',{staticClass:\"el-icon-s-fold\"})]),_vm._v(\" \"),_c('breadcrumb'),_vm._v(\" \"),_c('userDropdown')],1),_vm._v(\" \"),_c('viewMain')],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-4972070e\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/views/layout.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-4972070e\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../node_modules/vue-loader/lib/selector?type=styles&index=0!./layout.vue\")\n}\nvar normalizeComponent = require(\"!../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./layout.vue\"\nimport __vue_script__ from \"!!babel-loader!../../node_modules/vue-loader/lib/selector?type=script&index=0!./layout.vue\"\n/* template */\nimport __vue_template__ from \"!!../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-4972070e\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../node_modules/vue-loader/lib/selector?type=template&index=0!./layout.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-4972070e\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/layout.vue\n// module id = null\n// module chunks = ","module.exports = __webpack_public_path__ + \"static/img/logo.a674d30.png\";\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/assets/logo.png\n// module id = 7Otq\n// module chunks = 1 2","<template>\n <div>\n <h3>关于SQLREST工具</h3>\n <el-tabs v-model=\"activeName\"\n @tab-click=\"handleClick()\">\n <el-tab-pane label=\"系统功能\"\n name=\"first\">\n <div class=\"content_tag\">\n <el-tag type=\"danger\">SQL接口</el-tag>\n <el-tag type=\"success\">脚本接口</el-tag>\n </div>\n <div class=\"content_card\">\n <el-card class=\"box-card\">\n <div class=\"text item\">\n <p>\n 一句话,sqlrest工具提供快速构建RESTful的<B>API接口</B>工具,包括SQl方式和脚本方式。功能包括:\n </p>\n <ul>\n <li>项目托管</li>\n <p>\n Gitee地址:<a href=\"https://gitee.com/inrgihc/sqlrest\">https://gitee.com/inrgihc/sqlrest</a>\n </p>\n <li>SQL方式构建RESTful接口</li>\n <p>\n 提供类似mybatis的动态SQL语法方式构建接口。\n </p>\n <li>脚本方式构建RESTful接口</li>\n <p>\n 基于groovy脚本的语法方式构建复杂场景下的接口。\n </p>\n <li>支持接口的token安全认证功能</li>\n <p>\n 执行器支持生成token及token认证。\n </p>\n <li>支持生成在线接口文档功能</li>\n <p>\n 基于swagger-ui提供生成在线接口文档功能。\n </p>\n <li>支持接口的流量控制功能</li>\n <p>\n 执行器基于sentinel支持接口的流量控制功能。\n </p>\n </ul>\n </div>\n </el-card>\n </div>\n </el-tab-pane>\n <el-tab-pane label=\"关系数据库\"\n name=\"second\">\n <div class=\"content_tag\">\n <el-tag type=\"success\">JDBC</el-tag>\n <el-tag type=\"danger\">dbswitch</el-tag>\n </div>\n <div class=\"content_card\">\n <el-card class=\"box-card\">\n <div class=\"text item\">\n <p>\n sqlrest配置SQL生成接口的常规关系数据库,包括:\n </p>\n <ul>\n <li>甲骨文的Oracle\n </li>\n <li>微软的Microsoft SQLServer\n </li>\n <li>MySQL\n </li>\n <li>MariaDB\n </li>\n <li>PostgreSQL\n </li>\n <li>Greenplum(需使用PostgreSQL类型)\n </li>\n <li>IBM的DB2\n </li>\n <li>Sybase数据库\n </li>\n <li>国产达梦数据库DMDB\n </li>\n <li>国产人大金仓数据库Kingbase8\n </li>\n <li>国产翰高数据库HighGo\n </li>\n <li>国产神通数据库Oscar\n </li>\n <li>国产南大通用数据库GBase8a\n </li>\n <li>Apache Hive\n </li>\n <li>SQLite3\n </li>\n <li>OpenGuass\n </li>\n <li>ClickHouse\n </li>\n </ul>\n </div>\n </el-card>\n </div>\n </el-tab-pane>\n <el-tab-pane label=\"开发技术栈\"\n name=\"third\">\n <div class=\"content_tag\">\n <el-tag type=\"success\">SpringBoot</el-tag>\n <el-tag type=\"danger\">Mybatis</el-tag>\n <el-tag type=\"success\">Vue/ElementUI</el-tag>\n </div>\n <div class=\"content_card\">\n <el-card class=\"box-card\">\n <div class=\"text item\">\n <p>\n sqlrest基于Springboot脚手架进行的后端模块开发,模块组成结构如下:\n <pre>\n └── sqlrest\n ├── sqlrest-common // sqlrest通用定义模块\n ├── sqlrest-template // sqlrest的SQL内容模板模块\n ├── sqlrest-persistence // sqlrest的数据库持久化模块\n ├── sqlrest-core // sqlrest-core的接口实现模块\n ├── sqlrest-gateway // Gateway网关节点\n ├── sqlrest-executor // Executor接口执行节点\n ├── sqlrest-manager // Manager管理节点\n ├── sqlrest-manager-ui // 基于Vue2的Manager前段WEB交互页面\n ├── sqlrest-dist // 基于maven-assembly-plugin插件的项目打包模块\n </pre>\n </p>\n <ul>\n <li>SpringBoot</li>\n <p>\n sqlrest基于SpringBoot作为项目的基础脚手架。\n </p>\n <p>\n sqlrest-gateway/sqlrest-executor/sqlrest-manager基于SpringCloud的微服务架构提供接口配置与访问功能。\n </p>\n <li>MyBatis</li>\n <p>\n MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。\n <p>\n sqlrest-persistence模块基于Mybatis/Mybatis-plus提供配置数据的持久化。\n </p>\n <li>Vue/ElementUI</li>\n <p>\n Vue是一套用于构建用户界面的渐进式JavaScript框架。 Element是饿了么团队基于MVVM框架Vue开源出来的一套前端基于Vue 2.0的桌面端组件库。\n </p>\n <p>\n sqlrest-manager-ui模块基于Vue和ElementUI提供可视化的操作WEB界面。\n </p>\n </ul>\n </div>\n </el-card>\n </div>\n </el-tab-pane>\n\n </el-tabs>\n </div>\n</template>\n\n<script>\nimport layout from '../layout.vue';\nexport default {\n components: { layout },\n data () {\n return {\n activeName: 'first'\n };\n },\n methods: {\n handleClick (tab, event) {\n //console.log(tab, event);\n }\n }\n}\n</script>\n\n<style scoped>\ndiv h3 {\n text-align: center;\n}\n\n.content_tag {\n text-align: center;\n}\n\n.content_card {\n padding-top: 20px;\n}\n</style>\n\n\n\n// WEBPACK FOOTER //\n// src/views/aboutme/readme.vue","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h3',[_vm._v(\"关于SQLREST工具\")]),_vm._v(\" \"),_c('el-tabs',{on:{\"tab-click\":function($event){return _vm.handleClick()}},model:{value:(_vm.activeName),callback:function ($$v) {_vm.activeName=$$v},expression:\"activeName\"}},[_c('el-tab-pane',{attrs:{\"label\":\"系统功能\",\"name\":\"first\"}},[_c('div',{staticClass:\"content_tag\"},[_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(\"SQL接口\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"脚本接口\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"content_card\"},[_c('el-card',{staticClass:\"box-card\"},[_c('div',{staticClass:\"text item\"},[_c('p',[_vm._v(\"\\n 一句话,sqlrest工具提供快速构建RESTful的\"),_c('B',[_vm._v(\"API接口\")]),_vm._v(\"工具,包括SQl方式和脚本方式。功能包括:\\n \")],1),_vm._v(\" \"),_c('ul',[_c('li',[_vm._v(\"项目托管\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n Gitee地址:\"),_c('a',{attrs:{\"href\":\"https://gitee.com/inrgihc/sqlrest\"}},[_vm._v(\"https://gitee.com/inrgihc/sqlrest\")])]),_vm._v(\" \"),_c('li',[_vm._v(\"SQL方式构建RESTful接口\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 提供类似mybatis的动态SQL语法方式构建接口。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"脚本方式构建RESTful接口\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 基于groovy脚本的语法方式构建复杂场景下的接口。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"支持接口的token安全认证功能\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 执行器支持生成token及token认证。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"支持生成在线接口文档功能\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 基于swagger-ui提供生成在线接口文档功能。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"支持接口的流量控制功能\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 执行器基于sentinel支持接口的流量控制功能。\\n \")])])])])],1)]),_vm._v(\" \"),_c('el-tab-pane',{attrs:{\"label\":\"关系数据库\",\"name\":\"second\"}},[_c('div',{staticClass:\"content_tag\"},[_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"JDBC\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(\"dbswitch\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"content_card\"},[_c('el-card',{staticClass:\"box-card\"},[_c('div',{staticClass:\"text item\"},[_c('p',[_vm._v(\"\\n sqlrest配置SQL生成接口的常规关系数据库,包括:\\n \")]),_vm._v(\" \"),_c('ul',[_c('li',[_vm._v(\"甲骨文的Oracle\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"微软的Microsoft SQLServer\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MySQL\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MariaDB\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"PostgreSQL\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"Greenplum(需使用PostgreSQL类型)\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"IBM的DB2\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"Sybase数据库\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产达梦数据库DMDB\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产人大金仓数据库Kingbase8\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产翰高数据库HighGo\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产神通数据库Oscar\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"国产南大通用数据库GBase8a\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"Apache Hive\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"SQLite3\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"OpenGuass\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"ClickHouse\\n \")])])])])],1)]),_vm._v(\" \"),_c('el-tab-pane',{attrs:{\"label\":\"开发技术栈\",\"name\":\"third\"}},[_c('div',{staticClass:\"content_tag\"},[_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"SpringBoot\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"danger\"}},[_vm._v(\"Mybatis\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"Vue/ElementUI\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"content_card\"},[_c('el-card',{staticClass:\"box-card\"},[_c('div',{staticClass:\"text item\"},[_c('p',[_vm._v(\"\\n sqlrest基于Springboot脚手架进行的后端模块开发,模块组成结构如下:\\n \"),_c('pre',[_vm._v(\" └── sqlrest\\n ├── sqlrest-common // sqlrest通用定义模块\\n ├── sqlrest-template // sqlrest的SQL内容模板模块\\n ├── sqlrest-persistence // sqlrest的数据库持久化模块\\n ├── sqlrest-core // sqlrest-core的接口实现模块\\n ├── sqlrest-gateway // Gateway网关节点\\n ├── sqlrest-executor // Executor接口执行节点\\n ├── sqlrest-manager // Manager管理节点\\n ├── sqlrest-manager-ui // 基于Vue2的Manager前段WEB交互页面\\n ├── sqlrest-dist // 基于maven-assembly-plugin插件的项目打包模块\\n \")])]),_vm._v(\" \"),_c('ul',[_c('li',[_vm._v(\"SpringBoot\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n sqlrest基于SpringBoot作为项目的基础脚手架。\\n \")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n sqlrest-gateway/sqlrest-executor/sqlrest-manager基于SpringCloud的微服务架构提供接口配置与访问功能。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MyBatis\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。\\n \")]),_c('p',[_vm._v(\"\\n sqlrest-persistence模块基于Mybatis/Mybatis-plus提供配置数据的持久化。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"Vue/ElementUI\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n Vue是一套用于构建用户界面的渐进式JavaScript框架。 Element是饿了么团队基于MVVM框架Vue开源出来的一套前端基于Vue 2.0的桌面端组件库。\\n \")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n sqlrest-manager-ui模块基于Vue和ElementUI提供可视化的操作WEB界面。\\n \")])])])])],1)])],1)],1)}\nvar staticRenderFns = []\nvar esExports = { render: render, staticRenderFns: staticRenderFns }\nexport default esExports\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/vue-loader/lib/template-compiler?{\"id\":\"data-v-b466f4ca\",\"hasScoped\":true,\"transformToRequire\":{\"video\":[\"src\",\"poster\"],\"source\":\"src\",\"img\":\"src\",\"image\":\"xlink:href\"},\"buble\":{\"transforms\":{}}}!./node_modules/vue-loader/lib/selector.js?type=template&index=0!./src/views/aboutme/readme.vue\n// module id = null\n// module chunks = ","function injectStyle (ssrContext) {\n require(\"!!../../../node_modules/extract-text-webpack-plugin/dist/loader.js?{\\\"omit\\\":1,\\\"remove\\\":true,\\\"publicPath\\\":\\\"../../\\\"}!vue-style-loader!css-loader?{\\\"sourceMap\\\":true}!../../../node_modules/vue-loader/lib/style-compiler/index?{\\\"vue\\\":true,\\\"id\\\":\\\"data-v-b466f4ca\\\",\\\"scoped\\\":true,\\\"hasInlineConfig\\\":false}!../../../node_modules/vue-loader/lib/selector?type=styles&index=0!./readme.vue\")\n}\nvar normalizeComponent = require(\"!../../../node_modules/vue-loader/lib/component-normalizer\")\n/* script */\nexport * from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./readme.vue\"\nimport __vue_script__ from \"!!babel-loader!../../../node_modules/vue-loader/lib/selector?type=script&index=0!./readme.vue\"\n/* template */\nimport __vue_template__ from \"!!../../../node_modules/vue-loader/lib/template-compiler/index?{\\\"id\\\":\\\"data-v-b466f4ca\\\",\\\"hasScoped\\\":true,\\\"transformToRequire\\\":{\\\"video\\\":[\\\"src\\\",\\\"poster\\\"],\\\"source\\\":\\\"src\\\",\\\"img\\\":\\\"src\\\",\\\"image\\\":\\\"xlink:href\\\"},\\\"buble\\\":{\\\"transforms\\\":{}}}!../../../node_modules/vue-loader/lib/selector?type=template&index=0!./readme.vue\"\n/* template functional */\nvar __vue_template_functional__ = false\n/* styles */\nvar __vue_styles__ = injectStyle\n/* scopeId */\nvar __vue_scopeId__ = \"data-v-b466f4ca\"\n/* moduleIdentifier (server only) */\nvar __vue_module_identifier__ = null\nvar Component = normalizeComponent(\n __vue_script__,\n __vue_template__,\n __vue_template_functional__,\n __vue_styles__,\n __vue_scopeId__,\n __vue_module_identifier__\n)\n\nexport default Component.exports\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/views/aboutme/readme.vue\n// module id = null\n// module chunks = ","module.exports = \"data:image/jpeg;base64,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\"\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./src/assets/user.jpg\n// module id = BQ5I\n// module chunks = 1 2"],"sourceRoot":""}
\ No newline at end of file
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var f,d,i,u=0,s=[];u<r.length;u++)d=r[u],t[d]&&s.push(t[d][0]),t[d]=0;for(f in c)Object.prototype.hasOwnProperty.call(c,f)&&(e[f]=c[f]);for(n&&n(r,c,a);s.length;)s.shift()();if(a)for(u=0;u<a.length;u++)i=o(o.s=a[u]);return i};var r={},t={22:0};function o(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,o){n=t[e]=[r,o]});n[2]=r;var c=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+"static/js/"+e+"."+{0:"abe0376c7e6a5404f1a6",1:"0dd0668e608dd0f54f6e",2:"140338f6a5528feea1a3",3:"712d5b861100b5e0b704",4:"f8494b8dd039413f79c8",5:"f69840e8bd74f4d4e92b",6:"8f85de06573e2a5f9562",7:"7ea6008d16a44e79a428",8:"7483ee6d3a25506eb489",9:"1f165c58c9933d0da8a7",10:"cdd03027e5c73f31170c",11:"cdde61370dec5108c322",12:"57d1188c7336fe654844",13:"2865b5654b1d3bdf6e13",14:"42cdbd66a7803b30c641",15:"3b3f0c03ff4fed9903cc",16:"4de955682c1f7710c7ea",17:"819547b2361d544d3b8b",18:"5e7f065a8d031847e833",19:"3936346cb7e30aa279e2"}[e]+".js";var f=setTimeout(d,12e4);function d(){a.onerror=a.onload=null,clearTimeout(f);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=d,c.appendChild(a),r},o.m=e,o.c=r,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="/",o.oe=function(e){throw console.error(e),e}}([]);
//# sourceMappingURL=manifest.070750a1b98317df6608.js.map
\ No newline at end of file
!function(e){var n=window.webpackJsonp;window.webpackJsonp=function(r,c,a){for(var f,d,i,u=0,b=[];u<r.length;u++)d=r[u],t[d]&&b.push(t[d][0]),t[d]=0;for(f in c)Object.prototype.hasOwnProperty.call(c,f)&&(e[f]=c[f]);for(n&&n(r,c,a);b.length;)b.shift()();if(a)for(u=0;u<a.length;u++)i=o(o.s=a[u]);return i};var r={},t={22:0};function o(n){if(r[n])return r[n].exports;var t=r[n]={i:n,l:!1,exports:{}};return e[n].call(t.exports,t,t.exports,o),t.l=!0,t.exports}o.e=function(e){var n=t[e];if(0===n)return new Promise(function(e){e()});if(n)return n[2];var r=new Promise(function(r,o){n=t[e]=[r,o]});n[2]=r;var c=document.getElementsByTagName("head")[0],a=document.createElement("script");a.type="text/javascript",a.charset="utf-8",a.async=!0,a.timeout=12e4,o.nc&&a.setAttribute("nonce",o.nc),a.src=o.p+"static/js/"+e+"."+{0:"13ff46be1994a329d393",1:"347dcbee299ce37dade6",2:"140338f6a5528feea1a3",3:"712d5b861100b5e0b704",4:"f8494b8dd039413f79c8",5:"f69840e8bd74f4d4e92b",6:"8f85de06573e2a5f9562",7:"7ea6008d16a44e79a428",8:"7483ee6d3a25506eb489",9:"1f165c58c9933d0da8a7",10:"cdd03027e5c73f31170c",11:"cdde61370dec5108c322",12:"57d1188c7336fe654844",13:"2865b5654b1d3bdf6e13",14:"42cdbd66a7803b30c641",15:"3b3f0c03ff4fed9903cc",16:"4de955682c1f7710c7ea",17:"819547b2361d544d3b8b",18:"5e7f065a8d031847e833",19:"3936346cb7e30aa279e2"}[e]+".js";var f=setTimeout(d,12e4);function d(){a.onerror=a.onload=null,clearTimeout(f);var n=t[e];0!==n&&(n&&n[1](new Error("Loading chunk "+e+" failed.")),t[e]=void 0)}return a.onerror=a.onload=d,c.appendChild(a),r},o.m=e,o.c=r,o.d=function(e,n,r){o.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},o.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(n,"a",n),n},o.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},o.p="/",o.oe=function(e){throw console.error(e),e}}([]);
//# sourceMappingURL=manifest.e707a97f388d19a32b5e.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///webpack/bootstrap cbf088441c65377a649d"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","22","exports","module","l","e","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","script","createElement","type","charset","async","timeout","nc","setAttribute","src","p","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","setTimeout","onScriptComplete","onerror","onload","clearTimeout","chunk","Error","undefined","appendChild","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error"],"mappings":"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","file":"static/js/manifest.070750a1b98317df6608.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t22: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = \"text/javascript\";\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"abe0376c7e6a5404f1a6\",\"1\":\"0dd0668e608dd0f54f6e\",\"2\":\"140338f6a5528feea1a3\",\"3\":\"712d5b861100b5e0b704\",\"4\":\"f8494b8dd039413f79c8\",\"5\":\"f69840e8bd74f4d4e92b\",\"6\":\"8f85de06573e2a5f9562\",\"7\":\"7ea6008d16a44e79a428\",\"8\":\"7483ee6d3a25506eb489\",\"9\":\"1f165c58c9933d0da8a7\",\"10\":\"cdd03027e5c73f31170c\",\"11\":\"cdde61370dec5108c322\",\"12\":\"57d1188c7336fe654844\",\"13\":\"2865b5654b1d3bdf6e13\",\"14\":\"42cdbd66a7803b30c641\",\"15\":\"3b3f0c03ff4fed9903cc\",\"16\":\"4de955682c1f7710c7ea\",\"17\":\"819547b2361d544d3b8b\",\"18\":\"5e7f065a8d031847e833\",\"19\":\"3936346cb7e30aa279e2\"}[chunkId] + \".js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap cbf088441c65377a649d"],"sourceRoot":""}
\ No newline at end of file
{"version":3,"sources":["webpack:///webpack/bootstrap 092b0e6ccac73cbe1e0b"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","22","exports","module","l","e","installedChunkData","Promise","resolve","promise","reject","head","document","getElementsByTagName","script","createElement","type","charset","async","timeout","nc","setAttribute","src","p","0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","setTimeout","onScriptComplete","onerror","onload","clearTimeout","chunk","Error","undefined","appendChild","m","c","d","name","getter","o","defineProperty","configurable","enumerable","get","n","__esModule","object","property","oe","err","console","error"],"mappings":"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","file":"static/js/manifest.e707a97f388d19a32b5e.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tvar parentJsonpFunction = window[\"webpackJsonp\"];\n \twindow[\"webpackJsonp\"] = function webpackJsonpCallback(chunkIds, moreModules, executeModules) {\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [], result;\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(chunkIds, moreModules, executeModules);\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n \t\tif(executeModules) {\n \t\t\tfor(i=0; i < executeModules.length; i++) {\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = executeModules[i]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t};\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// objects to store loaded and loading chunks\n \tvar installedChunks = {\n \t\t22: 0\n \t};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData === 0) {\n \t\t\treturn new Promise(function(resolve) { resolve(); });\n \t\t}\n\n \t\t// a Promise means \"currently loading\".\n \t\tif(installedChunkData) {\n \t\t\treturn installedChunkData[2];\n \t\t}\n\n \t\t// setup Promise in chunk cache\n \t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t});\n \t\tinstalledChunkData[2] = promise;\n\n \t\t// start chunk loading\n \t\tvar head = document.getElementsByTagName('head')[0];\n \t\tvar script = document.createElement('script');\n \t\tscript.type = \"text/javascript\";\n \t\tscript.charset = 'utf-8';\n \t\tscript.async = true;\n \t\tscript.timeout = 120000;\n\n \t\tif (__webpack_require__.nc) {\n \t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t}\n \t\tscript.src = __webpack_require__.p + \"static/js/\" + chunkId + \".\" + {\"0\":\"13ff46be1994a329d393\",\"1\":\"347dcbee299ce37dade6\",\"2\":\"140338f6a5528feea1a3\",\"3\":\"712d5b861100b5e0b704\",\"4\":\"f8494b8dd039413f79c8\",\"5\":\"f69840e8bd74f4d4e92b\",\"6\":\"8f85de06573e2a5f9562\",\"7\":\"7ea6008d16a44e79a428\",\"8\":\"7483ee6d3a25506eb489\",\"9\":\"1f165c58c9933d0da8a7\",\"10\":\"cdd03027e5c73f31170c\",\"11\":\"cdde61370dec5108c322\",\"12\":\"57d1188c7336fe654844\",\"13\":\"2865b5654b1d3bdf6e13\",\"14\":\"42cdbd66a7803b30c641\",\"15\":\"3b3f0c03ff4fed9903cc\",\"16\":\"4de955682c1f7710c7ea\",\"17\":\"819547b2361d544d3b8b\",\"18\":\"5e7f065a8d031847e833\",\"19\":\"3936346cb7e30aa279e2\"}[chunkId] + \".js\";\n \t\tvar timeout = setTimeout(onScriptComplete, 120000);\n \t\tscript.onerror = script.onload = onScriptComplete;\n \t\tfunction onScriptComplete() {\n \t\t\t// avoid mem leaks in IE.\n \t\t\tscript.onerror = script.onload = null;\n \t\t\tclearTimeout(timeout);\n \t\t\tvar chunk = installedChunks[chunkId];\n \t\t\tif(chunk !== 0) {\n \t\t\t\tif(chunk) {\n \t\t\t\t\tchunk[1](new Error('Loading chunk ' + chunkId + ' failed.'));\n \t\t\t\t}\n \t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t}\n \t\t};\n \t\thead.appendChild(script);\n\n \t\treturn promise;\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 092b0e6ccac73cbe1e0b"],"sourceRoot":""}
\ No newline at end of file
......@@ -80,7 +80,8 @@ public class ApiAssignmentDao {
return apiConfigEntity;
}
public List<ApiAssignmentEntity> listAll(Long groupId, Long moduleId, Boolean publish, Boolean open, String searchText) {
public List<ApiAssignmentEntity> listAll(Long groupId, Long moduleId, Boolean publish, Boolean open,
String searchText) {
return apiAssignmentMapper.selectList(
Wrappers.<ApiAssignmentEntity>lambdaQuery()
.eq(Objects.nonNull(groupId), ApiAssignmentEntity::getGroupId, groupId)
......@@ -96,6 +97,16 @@ public class ApiAssignmentDao {
return apiAssignmentMapper.selectList(null);
}
public List<ApiAssignmentEntity> listFlowControlAll() {
return apiAssignmentMapper.selectList(
Wrappers.<ApiAssignmentEntity>lambdaQuery()
.eq(ApiAssignmentEntity::getStatus, true)
.eq(ApiAssignmentEntity::getFlowStatus, true)
.isNotNull(ApiAssignmentEntity::getFlowGrade)
.isNotNull(ApiAssignmentEntity::getFlowCount)
);
}
public boolean existsDataSourceById(Long dataSourceId) {
QueryWrapper<ApiAssignmentEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(ApiAssignmentEntity::getDatasourceId, dataSourceId);
......
......@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.annotation.TableName;
import com.gitee.sqlrest.common.dto.ItemParam;
import com.gitee.sqlrest.common.enums.ExecuteEngineEnum;
import com.gitee.sqlrest.common.enums.HttpMethodEnum;
import com.gitee.sqlrest.common.enums.OnOffEnum;
import com.gitee.sqlrest.persistence.handler.ListParamHandler;
import java.sql.Timestamp;
import java.util.List;
......@@ -63,6 +64,15 @@ public class ApiAssignmentEntity {
@TableField(value = "engine", typeHandler = EnumTypeHandler.class)
private ExecuteEngineEnum engine;
@TableField(value = "flow_status")
private Boolean flowStatus;
@TableField("flow_grade")
private Integer flowGrade;
@TableField("flow_count")
private Integer flowCount;
@TableField(value = "create_time", insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)
private Timestamp createTime;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment