Commit 2674df7a by inrgihc

代码优化与测试修复

parent 48304bfa
...@@ -3,24 +3,24 @@ ...@@ -3,24 +3,24 @@
![SQLREST](docs/images/SQLREST.PNG#pic_center) ![SQLREST](docs/images/SQLREST.PNG#pic_center)
> 将 SQL 查询转化为 RESTful API的便捷工具 > 将 SQL 操作转化为 RESTful API的便捷工具
## 一、工具介绍 ## 一、工具介绍
SQLREST 是一个开源项目,旨在提供一种简单而强大的方式来将 SQL 查询转化为 RESTful API。它支持多种数据库,允许用户通过配置 SQL 语句来创建 API,无 SQLREST 是一个开源项目,旨在提供一种简单而强大的方式来将 SQL 操作转化为 RESTful API。它支持多种数据库,允许用户通过配置 SQL 语句来创建 API,无
需编写复杂的后端逻辑,用户只需选择数据源、输入SQL或脚本、简单path配置即可快速生成API接口。 需编写复杂的后端逻辑,用户只需选择数据源、输入SQL或脚本、简单path配置即可快速生成API接口。
### 1、功能介绍 ### 1、功能介绍
SQLREST的功能包括: SQLREST的功能包括:
- **SQL直接构建API**:通过配置SQL和参数即可生成 RESTful API。 - **SQL直接构建API**:通过配置增删改查SQL和参数即可生成 RESTful API。
- **多数据库支持**:支持常见的20+种数据库,其中包含多款国产数据库。 - **多数据库支持**:支持常见的20+种数据库,其中包含多款国产数据库。
- **MyBatis语法支持**:支持MyBatis的动态SQL语法。 - **MyBatis语法支持**:支持MyBatis的动态SQL语法。
- **Groovy脚本支持**:支持groovy语法构建复杂场景下的接口。 - **Groovy脚本支持**:支持groovy语法构建复杂场景下的接口。
- **参数类型支持**:支持整型/浮点型/时间/日期/布尔/字符串/对象等多种类型。 - **参数类型支持**:支持整型/浮点型/时间/日期/布尔/字符串/对象等多种类型。
- **ContentType支持**:支持application/x-www-form-urlencoded及application/json等多种请求格式。 - **ContentType支持**:支持application/x-www-form-urlencoded及application/json等多种请求格式。
- **身份认证**:提供基于 Token 的认证机制,保护 API 安全。 - **身份认证支持**:提供基于 Token 的认证机制,保护 API 安全。
- **Swagger在线文档**:支持自动生成swagger-ui的在线接口文档。 - **Swagger在线文档**:支持自动生成swagger-ui的在线接口文档。
- **缓存配置支持**:支持 Hazelcast 和 Redis 缓存,提升 API 访问性能。 - **缓存配置支持**:支持 Hazelcast 和 Redis 缓存,提升 API 访问性能。
- **流控配置管理**:通过 Sentinel 支持流量控制,防止系统过载。 - **流控配置管理**:通过 Sentinel 支持流量控制,防止系统过载。
......
...@@ -45,6 +45,8 @@ public abstract class Constants { ...@@ -45,6 +45,8 @@ public abstract class Constants {
public static final String SYS_PARAM_KEY_SWAGGER_INFO_DESCRIPTION = "apiDocInfoDescription"; public static final String SYS_PARAM_KEY_SWAGGER_INFO_DESCRIPTION = "apiDocInfoDescription";
public static final String SYS_PARAM_KEY_MCP_TOOL_LIST_PAGE_SIZE = "mcpToolListPageSize";
public static final String DEFAULT_SSE_TOKEN_PRAM_NAME = "token"; public static final String DEFAULT_SSE_TOKEN_PRAM_NAME = "token";
public static final String DEFAULT_SSE_ENDPOINT = "/mcp/sse"; public static final String DEFAULT_SSE_ENDPOINT = "/mcp/sse";
public static final String MESSAGE_ENDPOINT = "/mcp/message"; public static final String MESSAGE_ENDPOINT = "/mcp/message";
......
...@@ -79,6 +79,7 @@ public class ApiExecuteService { ...@@ -79,6 +79,7 @@ public class ApiExecuteService {
} }
public ResultEntity<Object> execute(ApiAssignmentEntity config, HttpServletRequest request) { public ResultEntity<Object> execute(ApiAssignmentEntity config, HttpServletRequest request) {
String resourceName = Constants.getResourceName(config.getMethod().name(), config.getPath());
try { try {
List<ItemParam> invalidArgs = new ArrayList<>(); List<ItemParam> invalidArgs = new ArrayList<>();
Map<String, Object> paramValues = mergeParameters(request, config.getParams(), invalidArgs); Map<String, Object> paramValues = mergeParameters(request, config.getParams(), invalidArgs);
...@@ -87,10 +88,10 @@ public class ApiExecuteService { ...@@ -87,10 +88,10 @@ public class ApiExecuteService {
} }
return execute(config, paramValues); return execute(config, paramValues);
} catch (CommonException e) { } catch (CommonException e) {
log.warn("<SR出错>参数校验错误,错误消息:" + e.getMessage(), e); log.warn("Failed to valid parameters for {}, error:{}", resourceName, e.getMessage());
return ResultEntity.failed(e.getCode(), e.getMessage()); return ResultEntity.failed(e.getCode(), e.getMessage());
} catch (Throwable t) { } catch (Throwable t) {
log.warn("<SR出错>方法执行出错,错误消息:" + t.getMessage(), t); log.warn("Failed to execute for {}, error:{}", resourceName, t.getMessage());
return ResultEntity.failed(ResponseErrorCode.ERROR_INTERNAL_ERROR, ExceptionUtil.getMessage(t)); return ResultEntity.failed(ResponseErrorCode.ERROR_INTERNAL_ERROR, ExceptionUtil.getMessage(t));
} }
} }
......
...@@ -78,7 +78,7 @@ public class AuthenticationFilter implements Filter { ...@@ -78,7 +78,7 @@ public class AuthenticationFilter implements Filter {
String message = String.format("/%s/%s[%s]", Constants.API_PATH_PREFIX, path, method.name()); String message = String.format("/%s/%s[%s]", Constants.API_PATH_PREFIX, path, method.name());
ResultEntity result = ResultEntity.failed(ResponseErrorCode.ERROR_PATH_NOT_EXISTS, message); ResultEntity result = ResultEntity.failed(ResponseErrorCode.ERROR_PATH_NOT_EXISTS, message);
response.getWriter().append(JSONUtil.toJsonStr(result)); response.getWriter().append(JSONUtil.toJsonStr(result));
log.warn("<SR出错>404路径不存在:{}", message); log.warn("Request path not exists: {}", message);
return; return;
} }
......
...@@ -9,13 +9,16 @@ ...@@ -9,13 +9,16 @@
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
package com.gitee.sqlrest.core.service; package com.gitee.sqlrest.core.service;
import com.gitee.sqlrest.common.enums.ParamTypeEnum;
import com.gitee.sqlrest.common.exception.CommonException; import com.gitee.sqlrest.common.exception.CommonException;
import com.gitee.sqlrest.common.exception.ResponseErrorCode; import com.gitee.sqlrest.common.exception.ResponseErrorCode;
import com.gitee.sqlrest.persistence.dao.SystemParamDao; import com.gitee.sqlrest.persistence.dao.SystemParamDao;
import com.gitee.sqlrest.persistence.entity.SystemParamEntity; import com.gitee.sqlrest.persistence.entity.SystemParamEntity;
import javax.annotation.Resource; import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Slf4j
@Service @Service
public class SystemParamService { public class SystemParamService {
...@@ -44,4 +47,20 @@ public class SystemParamService { ...@@ -44,4 +47,20 @@ public class SystemParamService {
} }
systemParamDao.updateByParamKey(key, String.valueOf(paramValue)); systemParamDao.updateByParamKey(key, String.valueOf(paramValue));
} }
public Integer getIntByParamKey(String key, int defaultValue) {
SystemParamEntity entity = systemParamDao.getByParamKey(key);
if (null == entity) {
return defaultValue;
}
if (ParamTypeEnum.LONG.equals(entity.getParamType())) {
try {
return Integer.parseInt(entity.getParamValue());
} catch (Exception e) {
log.warn("Read system param integer value by key={} failed,use default value={},error:{} ",
key, defaultValue, e.getMessage());
}
}
return defaultValue;
}
} }
...@@ -12,19 +12,16 @@ package com.gitee.sqlrest.core.servlet; ...@@ -12,19 +12,16 @@ package com.gitee.sqlrest.core.servlet;
import com.gitee.sqlrest.common.consts.Constants; import com.gitee.sqlrest.common.consts.Constants;
import com.gitee.sqlrest.common.dto.ResultEntity; import com.gitee.sqlrest.common.dto.ResultEntity;
import com.gitee.sqlrest.common.enums.HttpMethodEnum; import com.gitee.sqlrest.common.enums.HttpMethodEnum;
import com.gitee.sqlrest.common.exception.ResponseErrorCode;
import com.gitee.sqlrest.core.exec.ApiExecuteService; import com.gitee.sqlrest.core.exec.ApiExecuteService;
import com.gitee.sqlrest.core.util.JacksonUtils; import com.gitee.sqlrest.core.util.JacksonUtils;
import com.gitee.sqlrest.persistence.dao.ApiAssignmentDao; import com.gitee.sqlrest.persistence.dao.ApiAssignmentDao;
import com.gitee.sqlrest.persistence.entity.ApiAssignmentEntity; import com.gitee.sqlrest.persistence.entity.ApiAssignmentEntity;
import com.google.common.base.Charsets;
import java.io.IOException; import java.io.IOException;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Slf4j @Slf4j
...@@ -39,16 +36,8 @@ public class ApiServletService { ...@@ -39,16 +36,8 @@ public class ApiServletService {
public void process(HttpMethodEnum method, HttpServletRequest request, HttpServletResponse response) public void process(HttpMethodEnum method, HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { throws ServletException, IOException {
String path = request.getRequestURI().substring(Constants.API_PATH_PREFIX.length() + 2); String path = request.getRequestURI().substring(Constants.API_PATH_PREFIX.length() + 2);
ResultEntity result = ResultEntity.success();
ApiAssignmentEntity apiConfigEntity = apiAssignmentDao.getByUk(method, path); ApiAssignmentEntity apiConfigEntity = apiAssignmentDao.getByUk(method, path);
if (null == apiConfigEntity || !apiConfigEntity.getStatus()) { ResultEntity result = apiExecuteService.execute(apiConfigEntity, request);
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
String message = String.format("/%s/%s[%s]", Constants.API_PATH_PREFIX, path, method.name());
result = ResultEntity.failed(ResponseErrorCode.ERROR_PATH_NOT_EXISTS, message);
log.warn("<SR出错>404路径不存在:{}", message);
} else {
result = apiExecuteService.execute(apiConfigEntity, request);
}
if (0 != result.getCode()) { if (0 != result.getCode()) {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} }
......
...@@ -40,6 +40,14 @@ ...@@ -40,6 +40,14 @@
<p> <p>
执行器基于sentinel支持接口的流量控制功能。 执行器基于sentinel支持接口的流量控制功能。
</p> </p>
<li>支持接口的缓存配置功能</li>
<p>
执行器支持哈希及SpEL表达式方式配置缓存功能。
</p>
<li>支持将接口转换为MCP工具功能</li>
<p>
Manager支持作为MCP服务端提供Tool功能。
</p>
</ul> </ul>
</div> </div>
</el-card> </el-card>
...@@ -65,9 +73,8 @@ ...@@ -65,9 +73,8 @@
<li>MariaDB <li>MariaDB
</li> </li>
<li>微软的Microsoft SQLServer <li>微软的Microsoft SQLServer
<li>PostgreSQL
</li> </li>
<li>Greenplum(需使用PostgreSQL类型) <li>PostgreSQL/Greenplum
</li> </li>
<li>IBM的DB2 <li>IBM的DB2
</li> </li>
...@@ -97,6 +104,8 @@ ...@@ -97,6 +104,8 @@
</li> </li>
<li>OceanBase <li>OceanBase
</li> </li>
<li>TDengine
</li>
</ul> </ul>
</div> </div>
</el-card> </el-card>
...@@ -118,6 +127,7 @@ ...@@ -118,6 +127,7 @@
<pre> <pre>
└── sqlrest └── sqlrest
├── sqlrest-common // sqlrest通用定义模块 ├── sqlrest-common // sqlrest通用定义模块
├── sqlrest-mcp // sqlrest的MCP协议模块
├── sqlrest-template // sqlrest的SQL内容模板模块 ├── sqlrest-template // sqlrest的SQL内容模板模块
├── sqlrest-persistence // sqlrest的数据库持久化模块 ├── sqlrest-persistence // sqlrest的数据库持久化模块
├── sqlrest-core // sqlrest-core的接口实现模块 ├── sqlrest-core // sqlrest-core的接口实现模块
......
...@@ -203,7 +203,7 @@ ...@@ -203,7 +203,7 @@
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.value" :value="item.value"
v-if="shouldShowOption(item,scope.row)"></el-option> v-if="shouldInputShowOption(item,scope.row)"></el-option>
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
...@@ -285,7 +285,8 @@ ...@@ -285,7 +285,8 @@
<el-option v-for="(item,index) in paramTypeList" <el-option v-for="(item,index) in paramTypeList"
:key="index" :key="index"
:label="item.name" :label="item.name"
:value="item.value"></el-option> :value="item.value"
v-if="shouldOutputShowOption(item,scope.row)"></el-option>
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
...@@ -301,8 +302,12 @@ ...@@ -301,8 +302,12 @@
v-if="!isOnlyShowDetail" v-if="!isOnlyShowDetail"
min-width="25%"> min-width="25%">
<template slot-scope="scope"> <template slot-scope="scope">
<el-link icon="el-icon-plus"
v-if="scope.row.type=='OBJECT'"
@click="addOutputSubParamsItem(scope.row)"></el-link>
&nbsp;&nbsp;&nbsp;&nbsp;
<el-link icon="el-icon-delete" <el-link icon="el-icon-delete"
@click="deleteOutputParamsItem(scope.$index)"></el-link> @click="deleteOutputParamsItem(scope.$index,scope.row)"></el-link>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
...@@ -1352,13 +1357,13 @@ export default { ...@@ -1352,13 +1357,13 @@ export default {
); );
} }
}, },
shouldShowOption: function (item, row) { shouldInputShowOption: function (item, row) {
if (this.getParentRow(row)) { if (this.getInputParamsParentRow(row)) {
return item.value != 'OBJECT'; return item.value != 'OBJECT';
} }
return true; return true;
}, },
getParentRow: function (childRow) { getInputParamsParentRow: function (childRow) {
for (const row of this.inputParams) { for (const row of this.inputParams) {
if (row.children && row.children.includes(childRow)) { if (row.children && row.children.includes(childRow)) {
return row; return row;
...@@ -1376,7 +1381,7 @@ export default { ...@@ -1376,7 +1381,7 @@ export default {
}, },
deleteInputSubParamsItem: function (index, childRow) { deleteInputSubParamsItem: function (index, childRow) {
// 通过 childRow 访问父级行数据 // 通过 childRow 访问父级行数据
const parentRow = this.getParentRow(childRow); const parentRow = this.getInputParamsParentRow(childRow);
if (parentRow) { if (parentRow) {
const childIndex = parentRow.children.indexOf(childRow); const childIndex = parentRow.children.indexOf(childRow);
if (childIndex !== -1) { if (childIndex !== -1) {
...@@ -1707,10 +1712,72 @@ export default { ...@@ -1707,10 +1712,72 @@ export default {
}, },
) )
}, },
deleteOutputParamsItem: function (index) { shouldOutputShowOption: function (item, row) {
if (this.getOutputParamsParentRow(row)) {
return item.value != 'OBJECT';
}
return true;
},
getOutputParamsParentRow: function (childRow) {
for (const row of this.outputParams) {
if (row.children && row.children.includes(childRow)) {
return row;
}
}
return null;
},
addOutputSubParamsItem: function (row) {
const index = this.outputParams.findIndex(item => row == item)
if (index !== -1) {
if (!this.outputParams[index].children) {
// 如果还没有 children 数组,则创建它
// 使用 Vue.set 来确保响应性
Vue.set(this.outputParams[index], 'children', []);
}
this.outputParams[index].location = 'REQUEST_BODY';
this.outputParams[index].type = 'OBJECT';
this.outputParams[index].children.push(
{
id: this.uuid(),
name: "",
type: "STRING",
location: 'REQUEST_BODY',
isArray: false,
required: true,
defaultValue: "",
remark: ""
},
);
} else {
row.type = 'STRING';
this.$alert('只允许嵌套一层,类型被还原为字符串类型', "操作提示",
{
confirmButtonText: "确定",
type: "info"
}
);
}
},
deleteOutputParamsItem: function (idx, row) {
const index = this.outputParams.indexOf(row);
if (index !== -1) {
this.outputParams.splice(index, 1); this.outputParams.splice(index, 1);
} else {
this.deleteOutputSubParamsItem(idx, row);
}
},
deleteOutputSubParamsItem: function (index, childRow) {
// 通过 childRow 访问父级行数据
const parentRow = this.getOutputParamsParentRow(childRow);
if (parentRow) {
const childIndex = parentRow.children.indexOf(childRow);
if (childIndex !== -1) {
parentRow.children.splice(childIndex, 1);
} else {
console.warn('Child not found');
}
}
}, },
}, },
created () { created () {
this.loadAssignmentDetail(); this.loadAssignmentDetail();
......
...@@ -14,10 +14,13 @@ import com.fasterxml.jackson.core.JsonProcessingException; ...@@ -14,10 +14,13 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
import com.gitee.sqlrest.common.consts.Constants;
import com.gitee.sqlrest.common.dto.BaseParam; import com.gitee.sqlrest.common.dto.BaseParam;
import com.gitee.sqlrest.common.dto.ItemParam; import com.gitee.sqlrest.common.dto.ItemParam;
import com.gitee.sqlrest.common.dto.ResultEntity; import com.gitee.sqlrest.common.dto.ResultEntity;
import com.gitee.sqlrest.common.enums.ParamTypeEnum;
import com.gitee.sqlrest.core.exec.ApiExecuteService; import com.gitee.sqlrest.core.exec.ApiExecuteService;
import com.gitee.sqlrest.core.service.SystemParamService;
import com.gitee.sqlrest.core.util.JacksonUtils; import com.gitee.sqlrest.core.util.JacksonUtils;
import com.gitee.sqlrest.persistence.entity.ApiAssignmentEntity; import com.gitee.sqlrest.persistence.entity.ApiAssignmentEntity;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
...@@ -48,13 +51,15 @@ public class McpToolCallHandler { ...@@ -48,13 +51,15 @@ public class McpToolCallHandler {
private final String toolDescription; private final String toolDescription;
private final ApiAssignmentEntity config; private final ApiAssignmentEntity config;
private final ApiExecuteService apiExecuteService; private final ApiExecuteService apiExecuteService;
private final int defaultPageSize;
public McpToolCallHandler(String toolName, String toolDescription, public McpToolCallHandler(String toolName, String description, ApiAssignmentEntity config) {
ApiAssignmentEntity config) {
this.toolName = toolName; this.toolName = toolName;
this.toolDescription = toolDescription; this.toolDescription = description;
this.config = config; this.config = config;
this.apiExecuteService = SpringUtil.getBean(ApiExecuteService.class); this.apiExecuteService = SpringUtil.getBean(ApiExecuteService.class);
this.defaultPageSize = SpringUtil.getBean(SystemParamService.class)
.getIntByParamKey(Constants.SYS_PARAM_KEY_MCP_TOOL_LIST_PAGE_SIZE, 1000);
} }
public McpSchema.Tool getMcpToolSchema() { public McpSchema.Tool getMcpToolSchema() {
...@@ -110,15 +115,35 @@ public class McpToolCallHandler { ...@@ -110,15 +115,35 @@ public class McpToolCallHandler {
} }
public CallToolResult executeTool(McpSyncServerExchange exchange, Map<String, Object> arguments) { public CallToolResult executeTool(McpSyncServerExchange exchange, Map<String, Object> arguments) {
prepareArgumentsPageSizeParameter(arguments);
ResultEntity<Object> resultEntity = apiExecuteService.execute(config, arguments); ResultEntity<Object> resultEntity = apiExecuteService.execute(config, arguments);
if (0 == resultEntity.getCode()) { if (0 == resultEntity.getCode()) {
String json = JacksonUtils.toJsonStr(resultEntity.getData(), config.getResponseFormat()); String json = JacksonUtils.toJsonStr(resultEntity.getData(), config.getResponseFormat());
McpSchema.TextContent content = new McpSchema.TextContent("获取JSON格式的数据为:\n " + json); McpSchema.TextContent content = new McpSchema.TextContent("操作成功,JSON格式的响应数据为:\n " + json);
return new McpSchema.CallToolResult(Lists.newArrayList(content), false); return new McpSchema.CallToolResult(Lists.newArrayList(content), false);
} else { } else {
String message = resultEntity.getMessage(); String message = resultEntity.getMessage();
McpSchema.TextContent content = new McpSchema.TextContent("获取数据异常:\n " + message); McpSchema.TextContent content = new McpSchema.TextContent("操作异常,JSON格式的响应数据为:\n " + message);
return new McpSchema.CallToolResult(Lists.newArrayList(content), true); return new McpSchema.CallToolResult(Lists.newArrayList(content), true);
} }
} }
private void prepareArgumentsPageSizeParameter(Map<String, Object> arguments) {
if (CollectionUtils.isNotEmpty(config.getParams())) {
for (ItemParam param : config.getParams()) {
String name = param.getName();
ParamTypeEnum type = param.getType();
Boolean required = param.getRequired();
String defaultValue = param.getDefaultValue();
if (!required && !arguments.containsKey(param.getName())) {
if (!type.isObject()) {
arguments.put(name, type.getConverter().apply(defaultValue));
}
}
}
}
if (!arguments.containsKey(Constants.PARAM_PAGE_SIZE)) {
arguments.put(Constants.PARAM_PAGE_SIZE, defaultPageSize);
}
}
} }
...@@ -18,6 +18,7 @@ import com.gitee.sqlrest.common.util.TokenUtils; ...@@ -18,6 +18,7 @@ import com.gitee.sqlrest.common.util.TokenUtils;
import com.gitee.sqlrest.core.dto.EntitySearchRequest; import com.gitee.sqlrest.core.dto.EntitySearchRequest;
import com.gitee.sqlrest.core.dto.McpToolResponse; import com.gitee.sqlrest.core.dto.McpToolResponse;
import com.gitee.sqlrest.core.dto.McpToolSaveRequest; import com.gitee.sqlrest.core.dto.McpToolSaveRequest;
import com.gitee.sqlrest.core.util.ApiPathUtils;
import com.gitee.sqlrest.manager.model.McpToolCallHandler; import com.gitee.sqlrest.manager.model.McpToolCallHandler;
import com.gitee.sqlrest.persistence.dao.ApiAssignmentDao; import com.gitee.sqlrest.persistence.dao.ApiAssignmentDao;
import com.gitee.sqlrest.persistence.dao.ApiModuleDao; import com.gitee.sqlrest.persistence.dao.ApiModuleDao;
...@@ -205,7 +206,7 @@ public class McpManageService { ...@@ -205,7 +206,7 @@ public class McpManageService {
.apiId(toolEntity.getApiId()) .apiId(toolEntity.getApiId())
.apiName(config.getName()) .apiName(config.getName())
.apiMethod(config.getMethod().name()) .apiMethod(config.getMethod().name())
.apiPath(config.getPath()) .apiPath(ApiPathUtils.getFullPath(config.getPath()))
.createTime(toolEntity.getCreateTime()) .createTime(toolEntity.getCreateTime())
.updateTime(toolEntity.getUpdateTime()) .updateTime(toolEntity.getUpdateTime())
.build(); .build();
......
...@@ -11,3 +11,5 @@ databaseChangeLog: ...@@ -11,3 +11,5 @@ databaseChangeLog:
file: classpath:db/changelog/log-v1.2.1.yaml file: classpath:db/changelog/log-v1.2.1.yaml
- include: - include:
file: classpath:db/changelog/log-v1.2.2.yaml file: classpath:db/changelog/log-v1.2.2.yaml
- include:
file: classpath:db/changelog/log-v1.3.1.yaml
\ No newline at end of file
databaseChangeLog:
- changeSet:
id: 1.3.1
author: sqlrest
runOnChange: false
changes:
- sqlFile:
encoding: UTF-8
path: db/migration/V1_3_1__system-ddl.sql
INSERT INTO `SQLREST_SYSTEM_PARAM` (`param_key`, `param_type`, `param_value`) VALUES ('mcpToolListPageSize', 'LONG', '1000');
\ 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.a8c22f6b9b014005bd869232cbdaa4b4.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.d9be689ba09af216a8ce.js></script><script type=text/javascript src=/static/js/vendor.a6ebeac16c85a178c5e7.js></script><script type=text/javascript src=/static/js/app.e892e4af016c82ce3f40.js></script></body></html> <!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.a0d428dcff1407fb55c58a847b2839b3.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=/static/js/manifest.52df910f8eccdd2a9197.js></script><script type=text/javascript src=/static/js/vendor.a6ebeac16c85a178c5e7.js></script><script type=text/javascript src=/static/js/app.e892e4af016c82ce3f40.js></script></body></html>
\ No newline at end of file \ No newline at end of file
...@@ -11,3 +11,5 @@ databaseChangeLog: ...@@ -11,3 +11,5 @@ databaseChangeLog:
file: classpath:pg/changelog/log-v1.2.1.yaml file: classpath:pg/changelog/log-v1.2.1.yaml
- include: - include:
file: classpath:pg/changelog/log-v1.2.2.yaml file: classpath:pg/changelog/log-v1.2.2.yaml
- include:
file: classpath:pg/changelog/log-v1.3.1.yaml
\ No newline at end of file
databaseChangeLog:
- changeSet:
id: 1.3.1
author: sqlrest
runOnChange: false
changes:
- sqlFile:
encoding: UTF-8
path: pg/migration/V1_3_1__system-ddl.sql
INSERT INTO SQLREST_SYSTEM_PARAM ("param_key", "param_type", "param_value") VALUES ('mcpToolListPageSize', 'LONG', '1000');
\ 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.
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("sqlrest")])],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配置支持的常规关系数据库有20+,包括:\n ")]),t._v(" "),n("ul",[n("li",[t._v("甲骨文的Oracle\n ")]),t._v(" "),n("li",[t._v("MySQL\n ")]),t._v(" "),n("li",[t._v("MariaDB\n ")]),t._v(" "),n("li",[t._v("微软的Microsoft SQLServer\n ")]),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("Apache Doris\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 ")]),t._v(" "),n("li",[t._v("StarRocks\n ")]),t._v(" "),n("li",[t._v("OceanBase\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("SpringCloud")]),t._v(" "),n("el-tag",{attrs:{type:"success"}},[t._v("Mybatis")]),t._v(" "),n("el-tag",{attrs:{type:"danger"}},[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("uOHX")},"data-v-1a9d125c",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){},mWqL:function(t,e){},uOHX:function(t,e){},z9t0:function(t,e){}}); 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 ")]),t._v(" "),n("li",[t._v("支持接口的缓存配置功能")]),t._v(" "),n("p",[t._v("\n 执行器支持哈希及SpEL表达式方式配置缓存功能。\n ")]),t._v(" "),n("li",[t._v("支持将接口转换为MCP工具功能")]),t._v(" "),n("p",[t._v("\n Manager支持作为MCP服务端提供Tool功能。\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("sqlrest")])],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配置支持的常规关系数据库有20+,包括:\n ")]),t._v(" "),n("ul",[n("li",[t._v("甲骨文的Oracle\n ")]),t._v(" "),n("li",[t._v("MySQL\n ")]),t._v(" "),n("li",[t._v("MariaDB\n ")]),t._v(" "),n("li",[t._v("微软的Microsoft SQLServer\n ")]),t._v(" "),n("li",[t._v("PostgreSQL/Greenplum\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("Apache Doris\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 ")]),t._v(" "),n("li",[t._v("StarRocks\n ")]),t._v(" "),n("li",[t._v("OceanBase\n ")]),t._v(" "),n("li",[t._v("TDengine\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("SpringCloud")]),t._v(" "),n("el-tag",{attrs:{type:"success"}},[t._v("Mybatis")]),t._v(" "),n("el-tag",{attrs:{type:"danger"}},[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-mcp // sqlrest的MCP协议模块\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("TkYE")},"data-v-a7fe75cc",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){},TkYE:function(t,e){},Yuwj:function(t,e){},mWqL:function(t,e){},z9t0:function(t,e){}});
//# sourceMappingURL=1.b17200cccd46e216dcb3.js.map //# sourceMappingURL=1.7acdf4fa190624b33517.js.map
\ No newline at end of file \ 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?8346","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":"yGAqBA,IAAAA,GACAC,KAAA,eACAC,OACAC,QACAC,KAAAC,SAGAC,cACAC,KARA,WASA,UAGAC,YAKAC,SACAC,SACAC,mBADA,SACAR,GACA,OAAAA,EAAAS,QAIAT,EAAAU,eAAA,aAEAC,eARA,SAQAC,GAEAC,KAAAC,MAAA,gBAAAF,KAGAG,QA/BA,aAiCAC,QAjCA,cClBeC,GADEC,OAFjB,WAA0B,IAAAC,EAAAN,KAAaO,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,YAAA,2BAAqCL,EAAAX,mBAAAW,EAAAnB,QAAAsB,EAAA,cAAwDG,OAAOC,MAAAP,EAAAnB,OAAAY,QAAyBU,EAAA,YAAiBK,KAAA,UAAaL,EAAA,KAAUM,MAAAT,EAAAnB,OAAA6B,OAAsBV,EAAAW,GAAA,KAAAR,EAAA,QAAyBG,OAAOE,KAAA,SAAeA,KAAA,UAAcR,EAAAW,GAAAX,EAAAY,GAAAZ,EAAAnB,OAAAF,WAAAqB,EAAAW,GAAA,KAAAX,EAAAa,GAAAb,EAAAnB,OAAA,kBAAAiC,EAAAC,GAAwG,OAAAZ,EAAA,gBAA0Ba,IAAAF,EAAArB,KAAAa,OAAsBzB,OAAAiC,QAAkB,GAAAX,EAAA,gBAAyBa,IAAAhB,EAAAnB,OAAAY,KAAAa,OAA2BC,MAAAP,EAAAnB,OAAAY,MAAwBwB,IAAKC,MAAA,SAAAC,GAAyB,OAAAnB,EAAAR,eAAAQ,EAAAnB,OAAAY,UAA6CU,EAAA,KAAUM,MAAAT,EAAAnB,OAAA6B,OAAsBV,EAAAW,GAAA,KAAAR,EAAA,QAAAH,EAAAW,GAAAX,EAAAY,GAAAZ,EAAAnB,OAAAF,YAAA,IAElrByC,oBCCjB,ICuBAC,GACA1C,KAAA,WACAK,YACAN,aD1ByB4C,EAAQ,OAcjCC,CACE7C,EACAoB,GATF,EAVA,SAAA0B,GACEF,EAAQ,SAaV,kBAEA,MAUgC,SCKhCrC,KALA,WAMA,OACAwC,WAAA,EACAC,eAAA,eAGAxC,UACAyC,QADA,WAIA,OAAAjC,KAAAkC,QAAAC,QAAAC,OAAA,GAAAC,WAGA5C,SACAC,SACA4C,YADA,SACAnD,GACA,OAAAA,EAAAS,QAMA2C,WARA,SAQAjB,EAAAkB,KAIAC,YAZA,SAYAnB,EAAAkB,KAGAE,eAfA,SAeAC,GACA3C,KAAA+B,UAAAY,GAGAC,cAnBA,SAmBA7C,GACAC,KAAAgC,eAAAjC,EACA8C,OAAAC,eAAAC,QAAA,aAAAhD,IAGAiD,cAxBA,WAyBA,OAAAH,OAAAC,eAAAG,QAAA,gBAGA/C,QA/CA,WAgDAF,KAAAgC,eAAAhC,KAAAgD,iBAGA7C,QAnDA,cCvBe+C,GADE7C,OAFP,WAAgB,IAAAC,EAAAN,KAAaO,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,YAAA,oBAA8BF,EAAA,UAAeE,YAAA,QAAkBF,EAAA,UAAeG,OAAOuC,KAAA,MAAW1C,EAAA,WAAgBG,OAAOzB,QAAA,EAAAiE,gBAAA,GAAAC,mBAAA,UAAAC,aAAA,qBAAAC,oBAAA,UAAAZ,SAAArC,EAAAyB,UAAAyB,iBAAAlD,EAAA0B,gBAA2LT,IAAKkC,KAAAnD,EAAAiC,WAAAmB,MAAApD,EAAAmC,cAA+CnC,EAAAa,GAAAb,EAAA,iBAAAnB,GAAuC,OAAAmB,EAAAgC,YAAAnD,GAAAsB,EAAA,gBAAoDa,IAAAnC,EAAAY,KAAAa,OAAuBzB,UAAgBoC,IAAKqB,cAAAtC,EAAAsC,iBAAmCtC,EAAAqD,OAAW,gBAErmBjC,oBCChC,ICAekC,GADEvD,OAFP,WAAgB,IAAAC,EAAAN,KAAaO,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,iBAA2BE,YAAA,iBAAAC,OAAoCiD,kBAAA,yBAAyCpD,EAAA,mBAAAH,EAAAa,GAAAb,EAAA,mBAAAwD,EAAAjD,GAAoE,OAAAiD,EAAA,KAAArD,EAAA,sBAA4Ca,IAAAwC,EAAA/D,OAAc,eAAA+D,EAAAC,UAAAlD,GAAAP,EAAA0D,UAAAC,OAAA,EAAAxD,EAAA,QAA2EE,YAAA,gBAA0BL,EAAAW,GAAAX,EAAAY,GAAA4C,EAAA7E,SAAAwB,EAAA,eAAgDG,OAAOsD,GAAAJ,EAAAC,UAAAD,EAAA/D,QAA+BO,EAAAW,GAAAX,EAAAY,GAAA4C,EAAA7E,UAAA,GAAAqB,EAAAqD,OAA2C,QAErgBjC,oBCChC,ICyBAyC,GACA5E,KADA,WAEA,OACA6E,SAAA,GACAC,SAAA,KAGAnE,QAPA,WAQAF,KAAAoE,SAAAvB,OAAAC,eAAAG,QAAA,YACAjD,KAAAqE,SAAAxB,OAAAC,eAAAG,QAAA,aAEAvD,SACA4E,YADA,WAEAzB,OAAAC,eAAAyB,QACAvE,KAAAwE,OACAC,OAAA,MACAC,IAAA,iBAEA1E,KAAAkC,QAAAyC,KAAA,YAGAC,UArBA,WAsBA/B,OAAAC,eAAAC,QAAA,oBC/Ce8B,GADExE,OAFP,WAAgB,IAAAC,EAAAN,KAAaO,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,YAAA,uBAAiCF,EAAA,eAAAA,EAAA,OAA8BE,YAAA,wBAAkCF,EAAA,QAAaE,YAAA,uBAAiCL,EAAAW,GAAA,aAAAX,EAAAY,GAAAZ,EAAA+D,UAAA,IAAA/D,EAAAY,GAAAZ,EAAA8D,UAAA,eAAA3D,EAAA,KAA2FE,YAAA,2BAAmCL,EAAAW,GAAA,KAAAR,EAAA,OAA0BG,OAAOkE,IAAMlD,EAAQ,QAAuBmD,IAAA,YAAgBzE,EAAAW,GAAA,KAAAR,EAAA,oBAAuCG,OAAOoE,KAAA,cAAmBvE,EAAA,oBAAAA,EAAA,eAA2CG,OAAOsD,GAAA,gBAAmBzD,EAAA,KAAUE,YAAA,qBAA+BL,EAAAW,GAAA,wBAAAX,EAAAW,GAAA,KAAAR,EAAA,oBAAoEG,OAAOqE,QAAA,MAAcxE,EAAA,KAAUc,IAAIC,MAAA,SAAAC,GAAyB,OAAAnB,EAAAgE,kBAA2B7D,EAAA,KAAUE,YAAA,0BAAoCL,EAAAW,GAAA,mCAEryBS,oBCChC,ICAewD,GADE7E,OAFP,WAAgB,IAAaE,EAAbP,KAAaQ,eAA0BC,EAAvCT,KAAuCU,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBE,YAAA,qBAA+BF,EAAA,oBAEzGiB,oBCChC,ICqCAyD,GACAlG,KAAA,OACAK,YACAqC,SRxCyBC,EAAQ,OAcjBwD,CACdzD,EACAuB,GAT6B,EAV/B,SAAoBpB,GAClBF,EAAQ,SAaS,kBAEU,MAUG,QQkBhCyD,WNzCyBzD,EAAQ,OAcjB0D,EOHhBrG,KAAA,aACAM,KAFA,WAGA,OACAyE,eAGA9D,QAPA,WAQAF,KAAAuF,iBAEA9F,OACA+F,OADA,WAEAxF,KAAAuF,kBAGA7F,SACA6F,cADA,WAEA,IAAAE,EAAAzF,KAAAwF,OAAAC,QAAAC,OAAA,SAAA5B,GAAA,OAAAA,EAAA7E,OACAe,KAAAgE,UAAAyB,KPZE7B,GAT6B,EAV/B,SAAoB9B,GAClBF,EAAQ,SAaS,kBAEU,MAUG,QMmBhCuC,aH1CyBvC,EAAQ,OAcjB+D,CACdxB,EACAU,GAT6B,EAV/B,SAAoB/C,GAClBF,EAAQ,SAaS,kBAEU,MAUG,QGoBhCgE,SD3CyBhE,EAAQ,OAcjBiE,EGThB5G,KAAA,SACAK,cACAC,KAHA,WAIA,UAEAC,YACAC,SACAC,WACAQ,QATA,aAUAC,QAVA,cHYE+E,GAT6B,EAV/B,SAAoBpD,GAClBF,EAAQ,SAaS,kBAEU,MAUG,SCsBhCrC,KARA,WASA,OACAuG,MAAA,UACAC,WAAA,OAGAvG,YACAC,SACAC,SACAsG,qBADA,WAEA,IAAAC,GAAAjG,KAAA+F,WACA/F,KAAA+F,WAAAE,EACAjG,KAAAkG,MAAAvE,SAAAe,eAAAuD,KAGA/F,QAvBA,aAyBAC,QAzBA,cGrCegG,GADE9F,OAFP,WAAgB,IAAAC,EAAAN,KAAaO,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,gBAA0BE,YAAA,oBAA8BF,EAAA,YAAiBG,OAAOwF,MAAA9F,EAAAyF,WAAA,kBAAuCtF,EAAA,OAAYE,YAAA,UAAoBF,EAAA,OAAYG,OAAOkE,IAAMlD,EAAQ,WAAuBtB,EAAAW,GAAA,KAAAX,EAAAyF,WAAoEzF,EAAAqD,KAApElD,EAAA,QAA2CE,YAAA,eAAyBL,EAAAW,GAAAX,EAAAY,GAAAZ,EAAAwF,YAAAxF,EAAAW,GAAA,KAAAR,EAAA,YAAoE4F,IAAA,cAAe,GAAA/F,EAAAW,GAAA,KAAAR,EAAA,WAAAA,EAAA,aAAAA,EAAA,OAA0DE,YAAA,WAAAY,IAA2BC,MAAAlB,EAAA0F,wBAAkC1F,EAAA,WAAAG,EAAA,KAA2BE,YAAA,qBAA+BF,EAAA,KAAUE,YAAA,qBAA6BL,EAAAW,GAAA,KAAAR,EAAA,cAAAH,EAAAW,GAAA,KAAAR,EAAA,oBAAAH,EAAAW,GAAA,KAAAR,EAAA,qBAEvnBiB,oBCChC,IAcI4E,EAdqB1E,EAAQ,OAcjB2E,CACdpB,EACAgB,GAT6B,EAV/B,SAAoBrE,GAClBF,EAAQ,SAaS,kBAEU,MAUd4E,EAAA,QAAAF,EAAiB,gCC1BhCG,EAAAC,QAAiB9E,EAAA+E,EAAuB,6IC6KxCC,GACAtH,YAAA6F,iBAAA,SACA5F,KAFA,WAGA,OACAsH,WAAA,UAGAnH,SACAoH,YADA,SACAC,EAAAC,OClLeC,GADE5G,OAFjB,WAA0B,IAAAC,EAAAN,KAAaO,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAAA,EAAA,MAAAH,EAAAW,GAAA,iBAAAX,EAAAW,GAAA,KAAAR,EAAA,WAA4Ec,IAAI2F,YAAA,SAAAzF,GAA6B,OAAAnB,EAAAwG,gBAA0BK,OAAQC,MAAA9G,EAAA,WAAA+G,SAAA,SAAAC,GAAgDhH,EAAAuG,WAAAS,GAAmBC,WAAA,gBAA0B9G,EAAA,eAAoBG,OAAO4G,MAAA,OAAAvI,KAAA,WAA+BwB,EAAA,OAAYE,YAAA,gBAA0BF,EAAA,UAAeG,OAAOxB,KAAA,YAAiBkB,EAAAW,GAAA,WAAAX,EAAAW,GAAA,KAAAR,EAAA,UAA6CG,OAAOxB,KAAA,aAAkBkB,EAAAW,GAAA,cAAAX,EAAAW,GAAA,KAAAR,EAAA,OAA6CE,YAAA,iBAA2BF,EAAA,WAAgBE,YAAA,aAAuBF,EAAA,OAAYE,YAAA,cAAwBF,EAAA,KAAAH,EAAAW,GAAA,+CAAAR,EAAA,KAAAH,EAAAW,GAAA,WAAAX,EAAAW,GAAA,2CAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAA,EAAA,MAAAH,EAAAW,GAAA,UAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,8BAAAR,EAAA,KAA4PG,OAAO6G,KAAA,uCAA4CnH,EAAAW,GAAA,yCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,sBAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,kEAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,qBAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,kEAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,sBAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,6DAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,kBAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,iEAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,iBAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,iEAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,iBAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,gEAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,qBAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,8EAAAX,EAAAW,GAAA,KAAAR,EAAA,eAA4iCG,OAAO4G,MAAA,QAAAvI,KAAA,YAAiCwB,EAAA,OAAYE,YAAA,gBAA0BF,EAAA,UAAeG,OAAOxB,KAAA,aAAkBkB,EAAAW,GAAA,UAAAX,EAAAW,GAAA,KAAAR,EAAA,UAA4CG,OAAOxB,KAAA,YAAiBkB,EAAAW,GAAA,iBAAAX,EAAAW,GAAA,KAAAR,EAAA,OAAgDE,YAAA,iBAA2BF,EAAA,WAAgBE,YAAA,aAAuBF,EAAA,OAAYE,YAAA,cAAwBF,EAAA,KAAAH,EAAAW,GAAA,+DAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAA,EAAA,MAAAH,EAAAW,GAAA,gCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,2BAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,6BAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,4CAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,0CAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,6BAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,+BAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,iCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,wCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,mCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,kCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,sCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,iCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,kCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,6BAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,+BAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,gCAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,+BAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,+BAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,0CAAAX,EAAAW,GAAA,KAAAR,EAAA,eAA40CG,OAAO4G,MAAA,QAAAvI,KAAA,WAAgCwB,EAAA,OAAYE,YAAA,gBAA0BF,EAAA,UAAeG,OAAOxB,KAAA,aAAkBkB,EAAAW,GAAA,gBAAAX,EAAAW,GAAA,KAAAR,EAAA,UAAkDG,OAAOxB,KAAA,YAAiBkB,EAAAW,GAAA,iBAAAX,EAAAW,GAAA,KAAAR,EAAA,UAAmDG,OAAOxB,KAAA,aAAkBkB,EAAAW,GAAA,aAAAX,EAAAW,GAAA,KAAAR,EAAA,UAA+CG,OAAOxB,KAAA,YAAiBkB,EAAAW,GAAA,uBAAAX,EAAAW,GAAA,KAAAR,EAAA,OAAsDE,YAAA,iBAA2BF,EAAA,WAAgBE,YAAA,aAAuBF,EAAA,OAAYE,YAAA,cAAwBF,EAAA,KAAAH,EAAAW,GAAA,2EAAAR,EAAA,OAAAH,EAAAW,GAAA,4xBAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAA,EAAA,MAAAH,EAAAW,GAAA,gBAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,sEAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,uHAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,aAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,kFAAAR,EAAA,KAAAH,EAAAW,GAAA,8FAAAX,EAAAW,GAAA,KAAAR,EAAA,MAAAH,EAAAW,GAAA,mBAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,0HAAAX,EAAAW,GAAA,KAAAR,EAAA,KAAAH,EAAAW,GAAA,8GAEznIS,oBCCjB,IAcAgG,EAdyB9F,EAAQ,OAcjCC,CACE+E,EACAK,GATF,EAVA,SAAAnF,GACEF,EAAQ,SAaV,kBAEA,MAUe4E,EAAA,QAAAkB,EAAiB,iDC1BhCjB,EAAAC,QAAA","file":"static/js/1.7acdf4fa190624b33517.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 <li>支持接口的缓存配置功能</li>\n <p>\n 执行器支持哈希及SpEL表达式方式配置缓存功能。\n </p>\n <li>支持将接口转换为MCP工具功能</li>\n <p>\n Manager支持作为MCP服务端提供Tool功能。\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\">sqlrest</el-tag>\n </div>\n <div class=\"content_card\">\n <el-card class=\"box-card\">\n <div class=\"text item\">\n <p>\n sqlrest配置支持的常规关系数据库有20+,包括:\n </p>\n <ul>\n <li>甲骨文的Oracle\n </li>\n <li>MySQL\n </li>\n <li>MariaDB\n </li>\n <li>微软的Microsoft SQLServer\n </li>\n <li>PostgreSQL/Greenplum\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>Apache Doris\n </li>\n <li>SQLite3\n </li>\n <li>OpenGuass\n </li>\n <li>ClickHouse\n </li>\n <li>StarRocks\n </li>\n <li>OceanBase\n </li>\n <li>TDengine\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\">SpringCloud</el-tag>\n <el-tag type=\"success\">Mybatis</el-tag>\n <el-tag type=\"danger\">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-mcp // sqlrest的MCP协议模块\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 \")]),_vm._v(\" \"),_c('li',[_vm._v(\"支持接口的缓存配置功能\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n 执行器支持哈希及SpEL表达式方式配置缓存功能。\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"支持将接口转换为MCP工具功能\")]),_vm._v(\" \"),_c('p',[_vm._v(\"\\n Manager支持作为MCP服务端提供Tool功能。\\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(\"sqlrest\")])],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配置支持的常规关系数据库有20+,包括:\\n \")]),_vm._v(\" \"),_c('ul',[_c('li',[_vm._v(\"甲骨文的Oracle\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MySQL\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MariaDB\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"微软的Microsoft SQLServer\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"PostgreSQL/Greenplum\\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(\"Apache Doris\\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 \")]),_vm._v(\" \"),_c('li',[_vm._v(\"StarRocks\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"OceanBase\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"TDengine\\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(\"SpringCloud\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"Mybatis\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"danger\"}},[_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-mcp // sqlrest的MCP协议模块\\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-a7fe75cc\",\"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-a7fe75cc\\\",\\\"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-a7fe75cc\\\",\\\"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-a7fe75cc\"\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
{"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?290b","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.b17200cccd46e216dcb3.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\">sqlrest</el-tag>\n </div>\n <div class=\"content_card\">\n <el-card class=\"box-card\">\n <div class=\"text item\">\n <p>\n sqlrest配置支持的常规关系数据库有20+,包括:\n </p>\n <ul>\n <li>甲骨文的Oracle\n </li>\n <li>MySQL\n </li>\n <li>MariaDB\n </li>\n <li>微软的Microsoft SQLServer\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>Apache Doris\n </li>\n <li>SQLite3\n </li>\n <li>OpenGuass\n </li>\n <li>ClickHouse\n </li>\n <li>StarRocks\n </li>\n <li>OceanBase\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\">SpringCloud</el-tag>\n <el-tag type=\"success\">Mybatis</el-tag>\n <el-tag type=\"danger\">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(\"sqlrest\")])],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配置支持的常规关系数据库有20+,包括:\\n \")]),_vm._v(\" \"),_c('ul',[_c('li',[_vm._v(\"甲骨文的Oracle\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MySQL\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"MariaDB\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"微软的Microsoft SQLServer\\n \")]),_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(\"Apache Doris\\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 \")]),_vm._v(\" \"),_c('li',[_vm._v(\"StarRocks\\n \")]),_vm._v(\" \"),_c('li',[_vm._v(\"OceanBase\\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(\"SpringCloud\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"success\"}},[_vm._v(\"Mybatis\")]),_vm._v(\" \"),_c('el-tag',{attrs:{\"type\":\"danger\"}},[_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-1a9d125c\",\"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-1a9d125c\\\",\\\"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-1a9d125c\\\",\\\"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-1a9d125c\"\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 c=window.webpackJsonp;window.webpackJsonp=function(a,t,f){for(var o,d,i,u=0,b=[];u<a.length;u++)d=a[u],n[d]&&b.push(n[d][0]),n[d]=0;for(o in t)Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);for(c&&c(a,t,f);b.length;)b.shift()();if(f)for(u=0;u<f.length;u++)i=r(r.s=f[u]);return i};var a={},n={28:0};function r(c){if(a[c])return a[c].exports;var n=a[c]={i:c,l:!1,exports:{}};return e[c].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.e=function(e){var c=n[e];if(0===c)return new Promise(function(e){e()});if(c)return c[2];var a=new Promise(function(a,r){c=n[e]=[a,r]});c[2]=a;var t=document.getElementsByTagName("head")[0],f=document.createElement("script");f.type="text/javascript",f.charset="utf-8",f.async=!0,f.timeout=12e4,r.nc&&f.setAttribute("nonce",r.nc),f.src=r.p+"static/js/"+e+"."+{0:"067f6a1af8c2636542e3",1:"7acdf4fa190624b33517",2:"140338f6a5528feea1a3",3:"776d791724a8de12ff9e",4:"f8494b8dd039413f79c8",5:"404ff5302fc6ee181ee9",6:"8f85de06573e2a5f9562",7:"061807fe4716131f26f8",8:"c4a2e9952c298efc080c",9:"313072ac394fc9349d2f",10:"0591dbe3e75f89e4c00e",11:"9ccf6e8ba19ce146e66b",12:"d26d5fe93a45bd5c6eaa",13:"bfc06db76836c228f491",14:"b74db4e8e5c2f13b4c43",15:"d80f5cf2fd51d72b22ea",16:"2ca69ffb53da98b61da4",17:"64a6906a4b77392d43c7",18:"bb8da82a2138ed7b18a8",19:"a2c24b3aee6af674aa30",20:"1272deb68d764581e1ab",21:"5952cc009e9eb6c25dfc",22:"0a5f684edcb8df816a5d",23:"93251b045354cc966a59",24:"61c786230b6da7b9ddc7",25:"e85f7ab22c459c102670"}[e]+".js";var o=setTimeout(d,12e4);function d(){f.onerror=f.onload=null,clearTimeout(o);var c=n[e];0!==c&&(c&&c[1](new Error("Loading chunk "+e+" failed.")),n[e]=void 0)}return f.onerror=f.onload=d,t.appendChild(f),a},r.m=e,r.c=a,r.d=function(e,c,a){r.o(e,c)||Object.defineProperty(e,c,{configurable:!1,enumerable:!0,get:a})},r.n=function(e){var c=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(c,"a",c),c},r.o=function(e,c){return Object.prototype.hasOwnProperty.call(e,c)},r.p="/",r.oe=function(e){throw console.error(e),e}}([]);
//# sourceMappingURL=manifest.52df910f8eccdd2a9197.js.map
\ No newline at end of file
{"version":3,"sources":["webpack:///webpack/bootstrap 290382fa1b040521abe2"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","28","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","20","21","22","23","24","25","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.d9be689ba09af216a8ce.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\t28: 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\":\"f72dbb9d754b88a9e6e3\",\"1\":\"b17200cccd46e216dcb3\",\"2\":\"140338f6a5528feea1a3\",\"3\":\"776d791724a8de12ff9e\",\"4\":\"f8494b8dd039413f79c8\",\"5\":\"404ff5302fc6ee181ee9\",\"6\":\"8f85de06573e2a5f9562\",\"7\":\"061807fe4716131f26f8\",\"8\":\"c4a2e9952c298efc080c\",\"9\":\"313072ac394fc9349d2f\",\"10\":\"0591dbe3e75f89e4c00e\",\"11\":\"9ccf6e8ba19ce146e66b\",\"12\":\"d26d5fe93a45bd5c6eaa\",\"13\":\"bfc06db76836c228f491\",\"14\":\"b74db4e8e5c2f13b4c43\",\"15\":\"d80f5cf2fd51d72b22ea\",\"16\":\"2ca69ffb53da98b61da4\",\"17\":\"64a6906a4b77392d43c7\",\"18\":\"bb8da82a2138ed7b18a8\",\"19\":\"a2c24b3aee6af674aa30\",\"20\":\"1272deb68d764581e1ab\",\"21\":\"5952cc009e9eb6c25dfc\",\"22\":\"0a5f684edcb8df816a5d\",\"23\":\"93251b045354cc966a59\",\"24\":\"61c786230b6da7b9ddc7\",\"25\":\"e85f7ab22c459c102670\"}[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 290382fa1b040521abe2"],"sourceRoot":""} {"version":3,"sources":["webpack:///webpack/bootstrap 623af53657c52d337f0f"],"names":["parentJsonpFunction","window","chunkIds","moreModules","executeModules","moduleId","chunkId","result","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","shift","__webpack_require__","s","installedModules","28","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","20","21","22","23","24","25","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.52df910f8eccdd2a9197.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\t28: 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\":\"067f6a1af8c2636542e3\",\"1\":\"7acdf4fa190624b33517\",\"2\":\"140338f6a5528feea1a3\",\"3\":\"776d791724a8de12ff9e\",\"4\":\"f8494b8dd039413f79c8\",\"5\":\"404ff5302fc6ee181ee9\",\"6\":\"8f85de06573e2a5f9562\",\"7\":\"061807fe4716131f26f8\",\"8\":\"c4a2e9952c298efc080c\",\"9\":\"313072ac394fc9349d2f\",\"10\":\"0591dbe3e75f89e4c00e\",\"11\":\"9ccf6e8ba19ce146e66b\",\"12\":\"d26d5fe93a45bd5c6eaa\",\"13\":\"bfc06db76836c228f491\",\"14\":\"b74db4e8e5c2f13b4c43\",\"15\":\"d80f5cf2fd51d72b22ea\",\"16\":\"2ca69ffb53da98b61da4\",\"17\":\"64a6906a4b77392d43c7\",\"18\":\"bb8da82a2138ed7b18a8\",\"19\":\"a2c24b3aee6af674aa30\",\"20\":\"1272deb68d764581e1ab\",\"21\":\"5952cc009e9eb6c25dfc\",\"22\":\"0a5f684edcb8df816a5d\",\"23\":\"93251b045354cc966a59\",\"24\":\"61c786230b6da7b9ddc7\",\"25\":\"e85f7ab22c459c102670\"}[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 623af53657c52d337f0f"],"sourceRoot":""}
\ No newline at end of file \ No newline at end of file
!function(e){var c=window.webpackJsonp;window.webpackJsonp=function(n,a,f){for(var o,d,b,i=0,u=[];i<n.length;i++)d=n[i],r[d]&&u.push(r[d][0]),r[d]=0;for(o in a)Object.prototype.hasOwnProperty.call(a,o)&&(e[o]=a[o]);for(c&&c(n,a,f);u.length;)u.shift()();if(f)for(i=0;i<f.length;i++)b=t(t.s=f[i]);return b};var n={},r={28:0};function t(c){if(n[c])return n[c].exports;var r=n[c]={i:c,l:!1,exports:{}};return e[c].call(r.exports,r,r.exports,t),r.l=!0,r.exports}t.e=function(e){var c=r[e];if(0===c)return new Promise(function(e){e()});if(c)return c[2];var n=new Promise(function(n,t){c=r[e]=[n,t]});c[2]=n;var a=document.getElementsByTagName("head")[0],f=document.createElement("script");f.type="text/javascript",f.charset="utf-8",f.async=!0,f.timeout=12e4,t.nc&&f.setAttribute("nonce",t.nc),f.src=t.p+"static/js/"+e+"."+{0:"f72dbb9d754b88a9e6e3",1:"b17200cccd46e216dcb3",2:"140338f6a5528feea1a3",3:"776d791724a8de12ff9e",4:"f8494b8dd039413f79c8",5:"404ff5302fc6ee181ee9",6:"8f85de06573e2a5f9562",7:"061807fe4716131f26f8",8:"c4a2e9952c298efc080c",9:"313072ac394fc9349d2f",10:"0591dbe3e75f89e4c00e",11:"9ccf6e8ba19ce146e66b",12:"d26d5fe93a45bd5c6eaa",13:"bfc06db76836c228f491",14:"b74db4e8e5c2f13b4c43",15:"d80f5cf2fd51d72b22ea",16:"2ca69ffb53da98b61da4",17:"64a6906a4b77392d43c7",18:"bb8da82a2138ed7b18a8",19:"a2c24b3aee6af674aa30",20:"1272deb68d764581e1ab",21:"5952cc009e9eb6c25dfc",22:"0a5f684edcb8df816a5d",23:"93251b045354cc966a59",24:"61c786230b6da7b9ddc7",25:"e85f7ab22c459c102670"}[e]+".js";var o=setTimeout(d,12e4);function d(){f.onerror=f.onload=null,clearTimeout(o);var c=r[e];0!==c&&(c&&c[1](new Error("Loading chunk "+e+" failed.")),r[e]=void 0)}return f.onerror=f.onload=d,a.appendChild(f),n},t.m=e,t.c=n,t.d=function(e,c,n){t.o(e,c)||Object.defineProperty(e,c,{configurable:!1,enumerable:!0,get:n})},t.n=function(e){var c=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(c,"a",c),c},t.o=function(e,c){return Object.prototype.hasOwnProperty.call(e,c)},t.p="/",t.oe=function(e){throw console.error(e),e}}([]);
//# sourceMappingURL=manifest.d9be689ba09af216a8ce.js.map
\ No newline at end of file
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