Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
D
datax-cloud
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
黄营
datax-cloud
Commits
40183ee2
Commit
40183ee2
authored
Aug 25, 2020
by
yuwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
项目初始化
parent
f2707f70
Show whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
485 additions
and
261 deletions
+485
-261
pom.xml
datax-common/datax-common-redis/pom.xml
+4
-0
ApiLogDto.java
.../java/cn/datax/service/data/market/api/dto/ApiLogDto.java
+0
-1
ServiceLogDto.java
...a/cn/datax/service/data/market/api/dto/ServiceLogDto.java
+0
-2
SqlParseDto.java
...ava/cn/datax/service/data/market/api/dto/SqlParseDto.java
+4
-0
ApiLogEntity.java
...cn/datax/service/data/market/api/entity/ApiLogEntity.java
+1
-0
ServiceLogEntity.java
...atax/service/data/market/api/entity/ServiceLogEntity.java
+2
-2
ServiceLogDao.java
...ax/service/data/market/integration/dao/ServiceLogDao.java
+11
-0
ServiceLogMapper.xml
...ntegration/src/main/resources/mapper/ServiceLogMapper.xml
+24
-1
ApiLogController.java
...vice/data/market/mapping/controller/ApiLogController.java
+1
-1
ApiLogDao.java
...a/cn/datax/service/data/market/mapping/dao/ApiLogDao.java
+12
-0
RequestInterceptor.java
...rvice/data/market/mapping/handler/RequestInterceptor.java
+5
-5
ApiLogMapper.xml
...ervice-mapping/src/main/resources/mapper/ApiLogMapper.xml
+24
-2
pom.xml
...es/data-market-service-parent/data-market-service/pom.xml
+5
-0
DataApiServiceImpl.java
.../service/data/market/service/impl/DataApiServiceImpl.java
+35
-11
api_1.0.0.docx
...arket-service/src/main/resources/templates/api_1.0.0.docx
+0
-0
StartedUpRunner.java
...n/datax/service/data/metadata/config/StartedUpRunner.java
+53
-0
MetadataSourceController.java
...ce/data/metadata/controller/MetadataSourceController.java
+11
-0
MetadataSourceService.java
.../service/data/metadata/service/MetadataSourceService.java
+2
-0
MetadataSourceServiceImpl.java
...data/metadata/service/impl/MetadataSourceServiceImpl.java
+41
-0
DeptRelationDao.java
...ain/java/cn/datax/service/system/dao/DeptRelationDao.java
+0
-2
RoleDeptDao.java
...rc/main/java/cn/datax/service/system/dao/RoleDeptDao.java
+0
-5
RoleMenuDao.java
...rc/main/java/cn/datax/service/system/dao/RoleMenuDao.java
+0
-5
UserPostDao.java
...rc/main/java/cn/datax/service/system/dao/UserPostDao.java
+0
-5
UserRoleDao.java
...rc/main/java/cn/datax/service/system/dao/UserRoleDao.java
+0
-5
DeptRelationMapper.xml
...-service/src/main/resources/mapper/DeptRelationMapper.xml
+4
-0
RoleDeptMapper.xml
...stem-service/src/main/resources/mapper/RoleDeptMapper.xml
+11
-0
RoleMenuMapper.xml
...stem-service/src/main/resources/mapper/RoleMenuMapper.xml
+11
-0
UserPostMapper.xml
...stem-service/src/main/resources/mapper/UserPostMapper.xml
+11
-0
UserRoleMapper.xml
...stem-service/src/main/resources/mapper/UserRoleMapper.xml
+11
-0
Topbar.vue
datax-ui/src/layout/components/Topbar.vue
+2
-0
topbar.scss
datax-ui/src/styles/topbar.scss
+5
-0
request.js
datax-ui/src/utils/request.js
+1
-0
DataApiAdd.vue
datax-ui/src/views/market/dataapi/DataApiAdd.vue
+7
-19
DataApiDetail.vue
datax-ui/src/views/market/dataapi/DataApiDetail.vue
+82
-89
DataApiEdit.vue
datax-ui/src/views/market/dataapi/DataApiEdit.vue
+105
-106
No files found.
datax-common/datax-common-redis/pom.xml
View file @
40183ee2
...
...
@@ -24,5 +24,9 @@
<groupId>
org.apache.commons
</groupId>
<artifactId>
commons-pool2
</artifactId>
</dependency>
<dependency>
<groupId>
com.fasterxml.jackson.datatype
</groupId>
<artifactId>
jackson-datatype-jsr310
</artifactId>
</dependency>
</dependencies>
</project>
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/dto/ApiLogDto.java
View file @
40183ee2
...
...
@@ -12,7 +12,6 @@ public class ApiLogDto implements Serializable {
private
String
id
;
private
String
apiId
;
private
String
apiName
;
private
String
callerId
;
private
String
callerIp
;
private
String
callerUrl
;
...
...
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/dto/ServiceLogDto.java
View file @
40183ee2
...
...
@@ -28,8 +28,6 @@ public class ServiceLogDto implements Serializable {
private
String
id
;
@ApiModelProperty
(
value
=
"服务id"
)
private
String
serviceId
;
@ApiModelProperty
(
value
=
"服务名称"
)
private
String
serviceName
;
@ApiModelProperty
(
value
=
"调用者id"
)
private
String
callerId
;
@ApiModelProperty
(
value
=
"调用者ip"
)
...
...
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/dto/SqlParseDto.java
View file @
40183ee2
...
...
@@ -11,6 +11,10 @@ public class SqlParseDto implements Serializable {
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"数据源"
)
@NotBlank
(
message
=
"数据源不能为空"
)
private
String
sourceId
;
@ApiModelProperty
(
value
=
"SQL文本"
)
@NotBlank
(
message
=
"SQL不能为空"
)
private
String
sqlText
;
...
...
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/entity/ApiLogEntity.java
View file @
40183ee2
...
...
@@ -27,6 +27,7 @@ public class ApiLogEntity implements Serializable {
/**
* api名称
*/
@TableField
(
exist
=
false
)
private
String
apiName
;
/**
* 调用者id
...
...
datax-modules/data-market-service-parent/data-market-service-api/src/main/java/cn/datax/service/data/market/api/entity/ServiceLogEntity.java
View file @
40183ee2
package
cn
.
datax
.
service
.
data
.
market
.
api
.
entity
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
cn.datax.common.base.BaseEntity
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
/**
...
...
@@ -41,6 +40,7 @@ public class ServiceLogEntity implements Serializable {
/**
* 服务名称
*/
@TableField
(
exist
=
false
)
private
String
serviceName
;
/**
...
...
datax-modules/data-market-service-parent/data-market-service-integration/src/main/java/cn/datax/service/data/market/integration/dao/ServiceLogDao.java
View file @
40183ee2
...
...
@@ -2,7 +2,13 @@ package cn.datax.service.data.market.integration.dao;
import
cn.datax.common.base.BaseDao
;
import
cn.datax.service.data.market.api.entity.ServiceLogEntity
;
import
com.baomidou.mybatisplus.core.conditions.Wrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.toolkit.Constants
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.io.Serializable
;
/**
* <p>
...
...
@@ -15,4 +21,9 @@ import org.apache.ibatis.annotations.Mapper;
@Mapper
public
interface
ServiceLogDao
extends
BaseDao
<
ServiceLogEntity
>
{
@Override
ServiceLogEntity
selectById
(
Serializable
id
);
@Override
<
E
extends
IPage
<
ServiceLogEntity
>>
E
selectPage
(
E
page
,
@Param
(
Constants
.
WRAPPER
)
Wrapper
<
ServiceLogEntity
>
queryWrapper
);
}
datax-modules/data-market-service-parent/data-market-service-integration/src/main/resources/mapper/ServiceLogMapper.xml
View file @
40183ee2
...
...
@@ -22,7 +22,30 @@
<sql
id=
"Base_Column_List"
>
id,
status,
service_id,
service_name,
caller_id, caller_ip, caller_date, caller_header, caller_param, caller_soap, time, msg
service_id, caller_id, caller_ip, caller_date, caller_header, caller_param, caller_soap, time, msg
</sql>
<sql
id=
"Log_Column_List"
>
${alias}.id,
${alias}.status,
${alias}.service_id, ${alias}.caller_id, ${alias}.caller_ip, ${alias}.caller_date,
${alias}.caller_header, ${alias}.caller_param, ${alias}.caller_soap, ${alias}.time, ${alias}.msg
</sql>
<select
id=
"selectById"
resultMap=
"BaseResultMap"
>
SELECT service.service_name,
<include
refid=
"Log_Column_List"
><property
name=
"alias"
value=
"log"
/></include>
FROM market_service_log log
LEFT JOIN market_service_integration service ON service.id = log.service_id
WHERE 1 = 1 AND log.id = #{id}
</select>
<select
id=
"selectPage"
resultMap=
"BaseResultMap"
>
SELECT service.service_name,
<include
refid=
"Log_Column_List"
><property
name=
"alias"
value=
"log"
/></include>
FROM market_service_log log
LEFT JOIN market_service_integration service ON service.id = log.service_id
${ew.customSqlSegment}
</select>
</mapper>
datax-modules/data-market-service-parent/data-market-service-mapping/src/main/java/cn/datax/service/data/market/mapping/controller/ApiLogController.java
View file @
40183ee2
...
...
@@ -72,7 +72,7 @@ public class ApiLogController extends BaseController {
@GetMapping
(
"/page"
)
public
R
getApiLogPage
(
ApiLogQuery
apiLogQuery
)
{
QueryWrapper
<
ApiLogEntity
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
like
(
StrUtil
.
isNotBlank
(
apiLogQuery
.
getApiName
()),
"api_name"
,
apiLogQuery
.
getApiName
());
queryWrapper
.
like
(
StrUtil
.
isNotBlank
(
apiLogQuery
.
getApiName
()),
"api
.api
_name"
,
apiLogQuery
.
getApiName
());
IPage
<
ApiLogEntity
>
page
=
apiLogService
.
page
(
new
Page
<>(
apiLogQuery
.
getPageNum
(),
apiLogQuery
.
getPageSize
()),
queryWrapper
);
List
<
ApiLogVo
>
collect
=
page
.
getRecords
().
stream
().
map
(
apiLogMapper:
:
toVO
).
collect
(
Collectors
.
toList
());
JsonPage
<
ApiLogVo
>
jsonPage
=
new
JsonPage
<>(
page
.
getCurrent
(),
page
.
getSize
(),
page
.
getTotal
(),
collect
);
...
...
datax-modules/data-market-service-parent/data-market-service-mapping/src/main/java/cn/datax/service/data/market/mapping/dao/ApiLogDao.java
View file @
40183ee2
...
...
@@ -2,8 +2,20 @@ package cn.datax.service.data.market.mapping.dao;
import
cn.datax.common.base.BaseDao
;
import
cn.datax.service.data.market.api.entity.ApiLogEntity
;
import
com.baomidou.mybatisplus.core.conditions.Wrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.core.toolkit.Constants
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.io.Serializable
;
@Mapper
public
interface
ApiLogDao
extends
BaseDao
<
ApiLogEntity
>
{
@Override
ApiLogEntity
selectById
(
Serializable
id
);
@Override
<
E
extends
IPage
<
ApiLogEntity
>>
E
selectPage
(
E
page
,
@Param
(
Constants
.
WRAPPER
)
Wrapper
<
ApiLogEntity
>
queryWrapper
);
}
datax-modules/data-market-service-parent/data-market-service-mapping/src/main/java/cn/datax/service/data/market/mapping/handler/RequestInterceptor.java
View file @
40183ee2
...
...
@@ -5,6 +5,7 @@ import cn.datax.common.exception.DataException;
import
cn.datax.common.utils.IPUtil
;
import
cn.datax.common.utils.MD5Util
;
import
cn.datax.service.data.market.api.dto.ApiLogDto
;
import
cn.datax.service.data.market.api.dto.RateLimit
;
import
cn.datax.service.data.market.api.entity.DataApiEntity
;
import
cn.datax.service.data.market.api.enums.ParamType
;
import
cn.datax.service.data.market.mapping.utils.ThreadUtil
;
...
...
@@ -80,11 +81,10 @@ public class RequestInterceptor {
}
// 限流校验
String
rateLimit
=
api
.
getRateLimit
();
rateLimit
=
Optional
.
ofNullable
(
rateLimit
).
orElse
(
DataConstant
.
TrueOrFalse
.
TRUE
.
getKey
());
if
(
DataConstant
.
TrueOrFalse
.
TRUE
.
getKey
().
equals
(
rateLimit
))
{
Integer
times
=
api
.
getTimes
();
Integer
seconds
=
api
.
getSeconds
();
RateLimit
rateLimit
=
api
.
getRateLimit
();
if
(
DataConstant
.
TrueOrFalse
.
TRUE
.
getKey
().
equals
(
rateLimit
.
getEnable
()))
{
Integer
times
=
rateLimit
.
getTimes
();
Integer
seconds
=
rateLimit
.
getSeconds
();
// 请求次数
times
=
Optional
.
ofNullable
(
times
).
orElse
(
5
);
// 请求时间范围60秒
...
...
datax-modules/data-market-service-parent/data-market-service-mapping/src/main/resources/mapper/ApiLogMapper.xml
View file @
40183ee2
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"cn.datax.service.data.market.
api.call
.dao.ApiLogDao"
>
<mapper
namespace=
"cn.datax.service.data.market.
mapping
.dao.ApiLogDao"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"cn.datax.service.data.market.api.entity.ApiLogEntity"
>
...
...
@@ -22,7 +22,29 @@
<sql
id=
"Base_Column_List"
>
id,
status,
api_id,
api_name, caller_id, caller_ip, caller_url, caller_params, caller_date, callerS
ize, time, msg
api_id,
caller_id, caller_ip, caller_url, caller_params, caller_date, caller_s
ize, time, msg
</sql>
<sql
id=
"Log_Column_List"
>
${alias}.id,
${alias}.status,
${alias}.api_id, ${alias}.caller_id, ${alias}.caller_ip, ${alias}.caller_url, ${alias}.caller_params,
${alias}.caller_date, ${alias}.caller_size, ${alias}.time, ${alias}.msg
</sql>
<select
id=
"selectById"
resultMap=
"BaseResultMap"
>
SELECT api.api_name,
<include
refid=
"Log_Column_List"
><property
name=
"alias"
value=
"log"
/></include>
FROM market_api_log log
LEFT JOIN market_api api ON api.id = log.api_id
WHERE 1 = 1 AND log.id = #{id}
</select>
<select
id=
"selectPage"
resultMap=
"BaseResultMap"
>
SELECT api.api_name,
<include
refid=
"Log_Column_List"
><property
name=
"alias"
value=
"log"
/></include>
FROM market_api_log log
LEFT JOIN market_api api ON api.id = log.api_id
${ew.customSqlSegment}
</select>
</mapper>
datax-modules/data-market-service-parent/data-market-service/pom.xml
View file @
40183ee2
...
...
@@ -84,6 +84,11 @@
<artifactId>
datax-common-rabbitmq
</artifactId>
<version>
2.0.0
</version>
</dependency>
<dependency>
<groupId>
cn.datax
</groupId>
<artifactId>
data-metadata-service-api
</artifactId>
<version>
2.0.0
</version>
</dependency>
</dependencies>
<build>
...
...
datax-modules/data-market-service-parent/data-market-service/src/main/java/cn/datax/service/data/market/service/impl/DataApiServiceImpl.java
View file @
40183ee2
...
...
@@ -3,8 +3,10 @@ package cn.datax.service.data.market.service.impl;
import
cn.datax.commo.office.word.WordUtil
;
import
cn.datax.common.core.DataConstant
;
import
cn.datax.common.core.R
;
import
cn.datax.common.core.RedisConstant
;
import
cn.datax.common.exception.DataException
;
import
cn.datax.common.rabbitmq.config.RabbitMqConstant
;
import
cn.datax.common.redis.service.RedisService
;
import
cn.datax.common.utils.MD5Util
;
import
cn.datax.common.utils.SecurityUtil
;
import
cn.datax.common.utils.ThrowableUtil
;
...
...
@@ -17,6 +19,10 @@ import cn.datax.service.data.market.mapstruct.DataApiMapper;
import
cn.datax.service.data.market.dao.DataApiDao
;
import
cn.datax.common.base.BaseServiceImpl
;
import
cn.datax.service.data.market.utils.SqlBuilderUtil
;
import
cn.datax.service.data.metadata.api.entity.MetadataColumnEntity
;
import
cn.datax.service.data.metadata.api.entity.MetadataSourceEntity
;
import
cn.datax.service.data.metadata.api.entity.MetadataTableEntity
;
import
cn.hutool.core.util.StrUtil
;
import
com.aspose.words.Document
;
import
com.aspose.words.MailMerge
;
import
com.aspose.words.net.System.Data.DataRow
;
...
...
@@ -77,6 +83,9 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
@Autowired
private
ObjectMapper
objectMapper
;
@Autowired
private
RedisService
redisService
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
saveDataApi
(
DataApiDto
dataApiDto
)
{
...
...
@@ -125,6 +134,7 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
@Override
public
SqlParseVo
sqlParse
(
SqlParseDto
sqlParseDto
)
{
String
sourceId
=
sqlParseDto
.
getSourceId
();
String
sql
=
sqlParseDto
.
getSqlText
();
sql
=
sql
.
replace
(
SqlBuilderUtil
.
getInstance
().
MARK_KEY_START
,
""
);
sql
=
sql
.
replace
(
SqlBuilderUtil
.
getInstance
().
MARK_KEY_END
,
""
);
...
...
@@ -157,21 +167,35 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
return
reqParam
;
}).
collect
(
Collectors
.
toList
());
sqlParseVo
.
setReqParams
(
reqParams
);
List
<
ResParam
>
resParams
=
new
ArrayList
<>();
List
<
MetadataSourceEntity
>
sourceEntityList
=
(
List
<
MetadataSourceEntity
>)
redisService
.
get
(
RedisConstant
.
METADATA_SOURCE_KEY
);
MetadataSourceEntity
sourceEntity
=
sourceEntityList
.
stream
().
filter
(
s
->
sourceId
.
equals
(
s
.
getId
())).
findFirst
().
orElse
(
null
);
if
(
sourceEntity
!=
null
)
{
List
<
MetadataTableEntity
>
tableEntityList
=
(
List
<
MetadataTableEntity
>)
redisService
.
hget
(
RedisConstant
.
METADATA_TABLE_KEY
,
sourceEntity
.
getId
());
Map
<
String
,
List
<
Map
<
String
,
String
>>>
map
=
cols
.
stream
().
collect
(
Collectors
.
groupingBy
(
e
->
e
.
get
(
"tableName"
).
toString
()));
for
(
Map
.
Entry
<
String
,
List
<
Map
<
String
,
String
>>>
entry
:
map
.
entrySet
())
{
String
entryKey
=
entry
.
getKey
().
toLowerCase
();
// 根据entryKey找到数据库表
List
<
Map
<
String
,
String
>>
entryValue
=
entry
.
getValue
();
entryValue
.
stream
().
map
(
m
->
m
.
get
(
"columnName"
));
}
// List<ResParam> resParams = cols.stream().map(s -> {
// ResParam resParam = new ResParam();
// resParam.setFieldName(s);
// return resParam;
// }).collect(Collectors.toList());
// sqlParseVo.setResParams(resParams);
MetadataTableEntity
tableEntity
=
tableEntityList
.
stream
().
filter
(
t
->
entryKey
.
equals
(
t
.
getTableName
().
toLowerCase
())).
findFirst
().
orElse
(
null
);
if
(
tableEntity
!=
null
)
{
List
<
MetadataColumnEntity
>
columnEntityList
=
(
List
<
MetadataColumnEntity
>)
redisService
.
hget
(
RedisConstant
.
METADATA_COLUMN_KEY
,
tableEntity
.
getId
());
entryValue
.
stream
().
forEach
(
m
->
{
String
columnName
=
m
.
get
(
"columnName"
).
toLowerCase
();
String
columnAliasName
=
m
.
get
(
"columnAliasName"
);
MetadataColumnEntity
columnEntity
=
columnEntityList
.
stream
().
filter
(
c
->
columnName
.
equals
(
c
.
getColumnName
().
toLowerCase
())).
findFirst
().
orElse
(
null
);
if
(
columnEntity
!=
null
)
{
ResParam
resParam
=
new
ResParam
();
resParam
.
setFieldName
(
columnEntity
.
getColumnName
());
resParam
.
setFieldComment
(
StrUtil
.
isNotBlank
(
columnEntity
.
getColumnComment
())
?
columnEntity
.
getColumnComment
()
:
""
);
resParam
.
setDataType
(
StrUtil
.
isNotBlank
(
columnEntity
.
getDataType
())
?
columnEntity
.
getDataType
()
:
""
);
resParam
.
setFieldAliasName
(
StrUtil
.
isNotBlank
(
columnAliasName
)
?
columnAliasName
:
""
);
resParams
.
add
(
resParam
);
}
});
}
}
}
sqlParseVo
.
setResParams
(
resParams
);
return
sqlParseVo
;
}
...
...
datax-modules/data-market-service-parent/data-market-service/src/main/resources/templates/api_1.0.0.docx
View file @
40183ee2
No preview for this file type
datax-modules/data-metadata-service-parent/data-metadata-service/src/main/java/cn/datax/service/data/metadata/config/StartedUpRunner.java
View file @
40183ee2
package
cn
.
datax
.
service
.
data
.
metadata
.
config
;
import
cn.datax.common.core.RedisConstant
;
import
cn.datax.common.redis.service.RedisService
;
import
cn.datax.service.data.metadata.api.entity.MetadataColumnEntity
;
import
cn.datax.service.data.metadata.api.entity.MetadataSourceEntity
;
import
cn.datax.service.data.metadata.api.entity.MetadataTableEntity
;
import
cn.datax.service.data.metadata.dao.MetadataColumnDao
;
import
cn.datax.service.data.metadata.dao.MetadataSourceDao
;
import
cn.datax.service.data.metadata.dao.MetadataTableDao
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.ApplicationArguments
;
import
org.springframework.boot.ApplicationRunner
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.core.env.Environment
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Component
;
import
java.time.LocalDateTime
;
import
java.time.format.DateTimeFormatter
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
@Component
@RequiredArgsConstructor
...
...
@@ -17,6 +31,21 @@ public class StartedUpRunner implements ApplicationRunner {
private
final
ConfigurableApplicationContext
context
;
private
final
Environment
environment
;
@Autowired
private
MetadataSourceDao
metadataSourceDao
;
@Autowired
private
MetadataTableDao
metadataTableDao
;
@Autowired
private
MetadataColumnDao
metadataColumnDao
;
@Autowired
private
RedisService
redisService
;
@Autowired
private
RedisTemplate
<
String
,
Object
>
redisTemplate
;
@Override
public
void
run
(
ApplicationArguments
args
)
{
if
(
context
.
isActive
())
{
...
...
@@ -26,6 +55,30 @@ public class StartedUpRunner implements ApplicationRunner {
"端口号:"
+
environment
.
getProperty
(
"server.port"
)
+
"\n"
+
"-----------------------------------------"
;
System
.
out
.
println
(
banner
);
// 项目启动时,初始化缓存
String
sourceKey
=
RedisConstant
.
METADATA_SOURCE_KEY
;
Boolean
hasSourceKey
=
redisService
.
hasKey
(
sourceKey
);
if
(!
hasSourceKey
)
{
List
<
MetadataSourceEntity
>
sourceEntityList
=
metadataSourceDao
.
selectList
(
Wrappers
.
emptyWrapper
());
redisService
.
set
(
sourceKey
,
sourceEntityList
);
}
String
tableKey
=
RedisConstant
.
METADATA_TABLE_KEY
;
Boolean
hasTableKey
=
redisService
.
hasKey
(
tableKey
);
if
(!
hasTableKey
)
{
List
<
MetadataTableEntity
>
tableEntityList
=
metadataTableDao
.
selectList
(
Wrappers
.
emptyWrapper
());
Map
<
String
,
List
<
MetadataTableEntity
>>
tableListMap
=
tableEntityList
.
stream
().
collect
(
Collectors
.
groupingBy
(
MetadataTableEntity:
:
getSourceId
));
redisTemplate
.
opsForHash
().
putAll
(
tableKey
,
tableListMap
);
}
String
columnKey
=
RedisConstant
.
METADATA_COLUMN_KEY
;
Boolean
hasColumnKey
=
redisService
.
hasKey
(
columnKey
);
if
(!
hasColumnKey
)
{
List
<
MetadataColumnEntity
>
columnEntityList
=
metadataColumnDao
.
selectList
(
Wrappers
.
emptyWrapper
());
Map
<
String
,
List
<
MetadataColumnEntity
>>
columnListMap
=
columnEntityList
.
stream
().
collect
(
Collectors
.
groupingBy
(
MetadataColumnEntity:
:
getTableId
));
redisTemplate
.
opsForHash
().
putAll
(
columnKey
,
columnListMap
);
}
}
}
}
datax-modules/data-metadata-service-parent/data-metadata-service/src/main/java/cn/datax/service/data/metadata/controller/MetadataSourceController.java
View file @
40183ee2
...
...
@@ -238,4 +238,15 @@ public class MetadataSourceController extends BaseController {
out
.
flush
();
out
.
close
();
}
/**
* 刷新参数缓存
*
* @return
*/
@GetMapping
(
"/refresh"
)
public
R
refreshMetadata
()
{
metadataSourceService
.
refreshMetadata
();
return
R
.
ok
();
}
}
datax-modules/data-metadata-service-parent/data-metadata-service/src/main/java/cn/datax/service/data/metadata/service/MetadataSourceService.java
View file @
40183ee2
...
...
@@ -41,4 +41,6 @@ public interface MetadataSourceService extends BaseService<MetadataSourceEntity>
void
syncMetadata
(
String
id
);
Document
wordMetadata
(
String
id
)
throws
Exception
;
void
refreshMetadata
();
}
datax-modules/data-metadata-service-parent/data-metadata-service/src/main/java/cn/datax/service/data/metadata/service/impl/MetadataSourceServiceImpl.java
View file @
40183ee2
...
...
@@ -3,12 +3,14 @@ package cn.datax.service.data.metadata.service.impl;
import
cn.datax.commo.office.word.WordUtil
;
import
cn.datax.common.base.BaseServiceImpl
;
import
cn.datax.common.core.DataConstant
;
import
cn.datax.common.core.RedisConstant
;
import
cn.datax.common.database.DataSourceFactory
;
import
cn.datax.common.database.DbQuery
;
import
cn.datax.common.database.constants.DbQueryProperty
;
import
cn.datax.common.database.core.DbColumn
;
import
cn.datax.common.database.core.DbTable
;
import
cn.datax.common.exception.DataException
;
import
cn.datax.common.redis.service.RedisService
;
import
cn.datax.common.utils.SecurityUtil
;
import
cn.datax.service.data.metadata.api.dto.DbSchema
;
import
cn.datax.service.data.metadata.api.dto.MetadataSourceDto
;
...
...
@@ -29,14 +31,18 @@ import com.aspose.words.net.System.Data.DataRow;
import
com.aspose.words.net.System.Data.DataSet
;
import
com.aspose.words.net.System.Data.DataTable
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.core.io.ClassPathResource
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.io.InputStream
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
/**
* <p>
...
...
@@ -68,6 +74,12 @@ public class MetadataSourceServiceImpl extends BaseServiceImpl<MetadataSourceDao
@Autowired
private
MetadataColumnDao
metadataColumnDao
;
@Autowired
private
RedisService
redisService
;
@Autowired
private
RedisTemplate
<
String
,
Object
>
redisTemplate
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
saveMetadataSource
(
MetadataSourceDto
metadataSourceDto
)
{
...
...
@@ -231,4 +243,33 @@ public class MetadataSourceServiceImpl extends BaseServiceImpl<MetadataSourceDao
WordUtil
.
getInstance
().
insertWatermarkText
(
doc
,
SecurityUtil
.
getUserName
());
return
doc
;
}
@Override
public
void
refreshMetadata
()
{
String
sourceKey
=
RedisConstant
.
METADATA_SOURCE_KEY
;
Boolean
hasSourceKey
=
redisService
.
hasKey
(
sourceKey
);
if
(
hasSourceKey
)
{
redisService
.
del
(
sourceKey
);
}
List
<
MetadataSourceEntity
>
sourceEntityList
=
metadataSourceDao
.
selectList
(
Wrappers
.
emptyWrapper
());
redisService
.
set
(
sourceKey
,
sourceEntityList
);
String
tableKey
=
RedisConstant
.
METADATA_TABLE_KEY
;
Boolean
hasTableKey
=
redisService
.
hasKey
(
tableKey
);
if
(
hasTableKey
)
{
redisService
.
del
(
tableKey
);
}
List
<
MetadataTableEntity
>
tableEntityList
=
metadataTableDao
.
selectList
(
Wrappers
.
emptyWrapper
());
Map
<
String
,
List
<
MetadataTableEntity
>>
tableListMap
=
tableEntityList
.
stream
().
collect
(
Collectors
.
groupingBy
(
MetadataTableEntity:
:
getSourceId
));
redisTemplate
.
opsForHash
().
putAll
(
tableKey
,
tableListMap
);
String
columnKey
=
RedisConstant
.
METADATA_COLUMN_KEY
;
Boolean
hasColumnKey
=
redisService
.
hasKey
(
columnKey
);
if
(
hasColumnKey
)
{
redisService
.
del
(
columnKey
);
}
List
<
MetadataColumnEntity
>
columnEntityList
=
metadataColumnDao
.
selectList
(
Wrappers
.
emptyWrapper
());
Map
<
String
,
List
<
MetadataColumnEntity
>>
columnListMap
=
columnEntityList
.
stream
().
collect
(
Collectors
.
groupingBy
(
MetadataColumnEntity:
:
getTableId
));
redisTemplate
.
opsForHash
().
putAll
(
columnKey
,
columnListMap
);
}
}
datax-modules/system-service-parent/system-service/src/main/java/cn/datax/service/system/dao/DeptRelationDao.java
View file @
40183ee2
...
...
@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import
cn.datax.service.system.api.entity.DeptRelationEntity
;
import
cn.datax.common.base.BaseDao
;
import
org.apache.ibatis.annotations.Delete
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
...
...
@@ -20,6 +19,5 @@ public interface DeptRelationDao extends BaseDao<DeptRelationEntity> {
void
insertBatch
(
List
<
DeptRelationEntity
>
list
);
@Delete
(
"delete from sys_dept_relation where ancestor = #{id}"
)
void
deleteByAncestor
(
String
id
);
}
datax-modules/system-service-parent/system-service/src/main/java/cn/datax/service/system/dao/RoleDeptDao.java
View file @
40183ee2
...
...
@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import
cn.datax.service.system.api.entity.RoleDeptEntity
;
import
cn.datax.common.base.BaseDao
;
import
org.apache.ibatis.annotations.Delete
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
...
...
@@ -20,11 +19,7 @@ public interface RoleDeptDao extends BaseDao<RoleDeptEntity> {
void
insertBatch
(
List
<
RoleDeptEntity
>
list
);
@Delete
(
"delete from sys_role_dept where role_id = #{id}"
)
void
deleteByRoleId
(
String
id
);
@Delete
(
"<script>"
+
"delete from sys_role_dept where role_id in <foreach collection='list' item='id' open='(' separator=',' close=')'>#{id}</foreach>"
+
"</script>"
)
void
deleteByRoleIds
(
List
<
String
>
ids
);
}
datax-modules/system-service-parent/system-service/src/main/java/cn/datax/service/system/dao/RoleMenuDao.java
View file @
40183ee2
...
...
@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import
cn.datax.service.system.api.entity.RoleMenuEntity
;
import
cn.datax.common.base.BaseDao
;
import
org.apache.ibatis.annotations.Delete
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
...
...
@@ -20,11 +19,7 @@ public interface RoleMenuDao extends BaseDao<RoleMenuEntity> {
void
insertBatch
(
List
<
RoleMenuEntity
>
list
);
@Delete
(
"delete from sys_role_menu where role_id = #{id}"
)
void
deleteByRoleId
(
String
id
);
@Delete
(
"<script>"
+
"delete from sys_role_menu where role_id in <foreach collection='list' item='id' open='(' separator=',' close=')'>#{id}</foreach>"
+
"</script>"
)
void
deleteByRoleIds
(
List
<
String
>
ids
);
}
datax-modules/system-service-parent/system-service/src/main/java/cn/datax/service/system/dao/UserPostDao.java
View file @
40183ee2
...
...
@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import
cn.datax.service.system.api.entity.UserPostEntity
;
import
cn.datax.common.base.BaseDao
;
import
org.apache.ibatis.annotations.Delete
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
...
...
@@ -20,11 +19,7 @@ public interface UserPostDao extends BaseDao<UserPostEntity> {
void
insertBatch
(
List
<
UserPostEntity
>
list
);
@Delete
(
"delete from sys_user_post where user_id = #{id}"
)
void
deleteByUserId
(
String
id
);
@Delete
(
"<script>"
+
"delete from sys_user_post where user_id in <foreach collection='list' item='id' open='(' separator=',' close=')'>#{id}</foreach>"
+
"</script>"
)
void
deleteByUserIds
(
List
<
String
>
ids
);
}
datax-modules/system-service-parent/system-service/src/main/java/cn/datax/service/system/dao/UserRoleDao.java
View file @
40183ee2
...
...
@@ -2,7 +2,6 @@ package cn.datax.service.system.dao;
import
cn.datax.common.base.BaseDao
;
import
cn.datax.service.system.api.entity.UserRoleEntity
;
import
org.apache.ibatis.annotations.Delete
;
import
org.apache.ibatis.annotations.Mapper
;
import
java.util.List
;
...
...
@@ -20,11 +19,7 @@ public interface UserRoleDao extends BaseDao<UserRoleEntity> {
void
insertBatch
(
List
<
UserRoleEntity
>
list
);
@Delete
(
"delete from sys_user_role where user_id = #{id}"
)
void
deleteByUserId
(
String
id
);
@Delete
(
"<script>"
+
"delete from sys_user_role where user_id in <foreach collection='list' item='id' open='(' separator=',' close=')'>#{id}</foreach>"
+
"</script>"
)
void
deleteByUserIds
(
List
<
String
>
ids
);
}
datax-modules/system-service-parent/system-service/src/main/resources/mapper/DeptRelationMapper.xml
View file @
40183ee2
...
...
@@ -24,4 +24,8 @@
</foreach>
</insert>
<delete
id=
"deleteByAncestor"
>
DELETE FROM sys_dept_relation WHERE ancestor = #{id}
</delete>
</mapper>
datax-modules/system-service-parent/system-service/src/main/resources/mapper/RoleDeptMapper.xml
View file @
40183ee2
...
...
@@ -24,4 +24,15 @@
</foreach>
</insert>
<delete
id=
"deleteByRoleId"
>
DELETE FROM sys_role_dept WHERE role_id = #{id}
</delete>
<delete
id=
"deleteByRoleIds"
>
DELETE FROM sys_role_dept WHERE role_id IN
<foreach
collection=
'list'
item=
'id'
open=
'('
separator=
','
close=
')'
>
#{id}
</foreach>
</delete>
</mapper>
datax-modules/system-service-parent/system-service/src/main/resources/mapper/RoleMenuMapper.xml
View file @
40183ee2
...
...
@@ -24,4 +24,15 @@
</foreach>
</insert>
<delete
id=
"deleteByRoleId"
>
DELETE FROM sys_role_menu WHERE role_id = #{id}
</delete>
<delete
id=
"deleteByRoleIds"
>
DELETE FROM sys_role_menu WHERE role_id in
<foreach
collection=
'list'
item=
'id'
open=
'('
separator=
','
close=
')'
>
#{id}
</foreach>
</delete>
</mapper>
datax-modules/system-service-parent/system-service/src/main/resources/mapper/UserPostMapper.xml
View file @
40183ee2
...
...
@@ -24,4 +24,15 @@
</foreach>
</insert>
<delete
id=
"deleteByUserId"
>
DELETE FROM sys_user_post WHERE user_id = #{id}
</delete>
<delete
id=
"deleteByUserIds"
>
DELETE FROM sys_user_post WHERE user_id in
<foreach
collection=
'list'
item=
'id'
open=
'('
separator=
','
close=
')'
>
#{id}
</foreach>
</delete>
</mapper>
datax-modules/system-service-parent/system-service/src/main/resources/mapper/UserRoleMapper.xml
View file @
40183ee2
...
...
@@ -24,4 +24,15 @@
</foreach>
</insert>
<delete
id=
"deleteByUserId"
>
DELETE FROM sys_user_role WHERE user_id = #{id}
</delete>
<delete
id=
"deleteByUserIds"
>
DELETE FROM sys_user_role WHERE user_id in
<foreach
collection=
'list'
item=
'id'
open=
'('
separator=
','
close=
')'
>
#{id}
</foreach>
</delete>
</mapper>
datax-ui/src/layout/components/Topbar.vue
View file @
40183ee2
...
...
@@ -23,7 +23,9 @@
<div
class=
"right-menu"
>
<screenfull
id=
"screenfull"
class=
"right-menu-btn"
/>
<span
class=
"right-menu-btn"
>
<el-badge
is-dot
class=
"badge"
>
<i
class=
"el-icon-bell"
></i>
</el-badge>
</span>
<el-dropdown>
<span
class=
"right-menu-btn"
>
...
...
datax-ui/src/styles/topbar.scss
View file @
40183ee2
...
...
@@ -47,6 +47,11 @@
cursor
:
pointer
;
padding
:
0
14px
;
color
:
#fff
;
.badge
{
.el-badge__content
{
margin-top
:
10px
;
}
}
&
:hover
{
background-color
:
mix
(
#000
,
#0086f1
,
10%
);
}
...
...
datax-ui/src/utils/request.js
View file @
40183ee2
...
...
@@ -48,6 +48,7 @@ service.interceptors.response.use(
},
error
=>
{
loadingInstance
.
close
()
console
.
log
(
error
.
response
)
if
(
error
.
response
.
status
)
{
switch
(
error
.
response
.
status
)
{
// 401: 未登录
...
...
datax-ui/src/views/market/dataapi/DataApiAdd.vue
View file @
40183ee2
...
...
@@ -45,7 +45,7 @@
</el-select>
</el-form-item>
<el-form-item
label=
"IP黑名单"
prop=
"deny"
>
<el-input
v-model=
"form1.deny"
type=
"textarea"
placeholder=
"请输入IP黑名单多个用
,
隔开"
/>
<el-input
v-model=
"form1.deny"
type=
"textarea"
placeholder=
"请输入IP黑名单多个用
英文,
隔开"
/>
</el-form-item>
<el-form-item
label=
"是否限流"
prop=
"rateLimit"
>
<el-radio-group
v-model=
"form1.rateLimit.enable"
>
...
...
@@ -56,11 +56,9 @@
>
{{
dict
.
itemValue
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-if=
"form1.rateLimit.enable === '1'"
label=
"请求次数"
prop=
"times"
>
<el-input-number
v-model=
"form1.rateLimit.times"
controls-position=
"right"
:min=
"1"
/>
</el-form-item>
<el-form-item
v-if=
"form1.rateLimit.enable === '1'"
label=
"请求时间范围"
prop=
"seconds"
>
<el-input-number
v-model=
"form1.rateLimit.seconds"
controls-position=
"right"
:min=
"1"
/>
<el-form-item
v-if=
"form1.rateLimit.enable === '1'"
label=
"限流配置"
>
每
<el-input-number
v-model=
"form1.rateLimit.seconds"
controls-position=
"right"
:min=
"1"
/>
秒内限制请求
<el-input-number
v-model=
"form1.rateLimit.times"
controls-position=
"right"
:min=
"1"
/>
次
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-radio-group
v-model=
"form1.status"
disabled
>
...
...
@@ -500,23 +498,13 @@ export default {
return
}
const
data
=
{}
data
.
sourceId
=
this
.
form2
.
sourceId
data
.
sqlText
=
this
.
form2
.
sqlText
sqlParse
(
data
).
then
(
response
=>
{
if
(
response
.
success
)
{
const
{
data
}
=
response
const
reqParams
=
data
.
reqParams
const
resParams
=
data
.
resParams
this
.
form3
.
reqParams
=
reqParams
.
map
(
function
(
item
)
{
const
json
=
{}
json
.
paramName
=
item
.
paramName
json
.
nullable
=
'0'
return
json
})
this
.
form3
.
resParams
=
resParams
.
map
(
function
(
item
)
{
const
json
=
{}
json
.
fieldName
=
item
.
fieldName
return
json
})
this
.
form3
.
reqParams
=
data
.
reqParams
this
.
form3
.
resParams
=
data
.
resParams
this
.
$message
.
success
(
'解析成功,请进行下一步'
)
}
})
...
...
datax-ui/src/views/market/dataapi/DataApiDetail.vue
View file @
40183ee2
...
...
@@ -11,11 +11,11 @@
</div>
<div
:style=
"classCardbody"
>
<el-steps
:active=
"active"
finish-status=
"success"
align-center
>
<el-step
title=
"属性配置"
></el-step
>
<el-step
title=
"执行配置"
></el-step
>
<el-step
title=
"参数配置"
></el-step
>
<el-step
title=
"属性配置"
/
>
<el-step
title=
"执行配置"
/
>
<el-step
title=
"参数配置"
/
>
</el-steps>
<el-form
ref=
"form1"
:model=
"form1"
label-width=
"80px"
v-if=
"active == 1
"
disabled
>
<el-form
v-if=
"active == 1"
ref=
"form1"
:model=
"form1"
label-width=
"80px
"
disabled
>
<el-form-item
label=
"API名称"
prop=
"apiName"
>
<el-input
v-model=
"form1.apiName"
placeholder=
"请输入API名称"
/>
</el-form-item>
...
...
@@ -32,7 +32,7 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"返回格式"
prop=
"resType"
>
...
...
@@ -42,11 +42,11 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"IP黑名单"
prop=
"deny"
>
<el-input
v-model=
"form1.deny"
type=
"textarea"
placeholder=
"请输入IP黑名单多个用
,
隔开"
/>
<el-input
v-model=
"form1.deny"
type=
"textarea"
placeholder=
"请输入IP黑名单多个用
英文,
隔开"
/>
</el-form-item>
<el-form-item
label=
"是否限流"
prop=
"rateLimit"
>
<el-radio-group
v-model=
"form1.rateLimit.enable"
>
...
...
@@ -57,11 +57,9 @@
>
{{
dict
.
itemValue
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-if=
"form1.rateLimit.enable === '1'"
label=
"请求次数"
prop=
"times"
>
<el-input-number
v-model=
"form1.rateLimit.times"
controls-position=
"right"
:min=
"1"
/>
</el-form-item>
<el-form-item
v-if=
"form1.rateLimit.enable === '1'"
label=
"请求时间范围"
prop=
"seconds"
>
<el-input-number
v-model=
"form1.rateLimit.seconds"
controls-position=
"right"
:min=
"1"
/>
<el-form-item
v-if=
"form1.rateLimit.enable === '1'"
label=
"限流配置"
>
每
<el-input-number
v-model=
"form1.rateLimit.seconds"
controls-position=
"right"
:min=
"1"
/>
秒内限制请求
<el-input-number
v-model=
"form1.rateLimit.times"
controls-position=
"right"
:min=
"1"
/>
次
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-radio-group
v-model=
"form1.status"
>
...
...
@@ -69,14 +67,14 @@
v-for=
"dict in statusOptions"
:key=
"dict.id"
:label=
"dict.itemText"
>
{{
dict
.
itemValue
}}
</el-radio>
>
{{
dict
.
itemValue
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"form1.remark"
type=
"textarea"
placeholder=
"请输入内容"
/>
</el-form-item>
</el-form>
<el-form
ref=
"form2"
:model=
"form2"
label-width=
"80px"
v-if=
"active == 2
"
disabled
>
<el-form
v-if=
"active == 2"
ref=
"form2"
:model=
"form2"
label-width=
"80px
"
disabled
>
<el-form-item
label=
"配置方式"
prop=
"configType"
>
<el-select
v-model=
"form2.configType"
placeholder=
"请选择配置方式"
>
<el-option
...
...
@@ -84,7 +82,7 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"数据源"
prop=
"sourceId"
>
...
...
@@ -95,59 +93,55 @@
:label=
"source.sourceName"
:value=
"source.id"
:disabled=
"source.status === '0'"
></el-option
>
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"数据库表"
prop=
"tableName"
v-if=
"form2.configType === '1'
"
>
<el-form-item
v-if=
"form2.configType === '1'"
label=
"数据库表"
prop=
"tableName
"
>
<el-select
v-model=
"form2.table"
value-key=
"id"
placeholder=
"请选择数据库表"
>
<el-option
v-for=
"item in tableOptions"
:key=
"item.id"
:label=
"item.tableComment ? item.tableComment : item.tableName"
:value=
"item"
>
</el-option
>
:value=
"item"
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"字段列表"
v-if=
"form2.configType === '1'"
>
<el-table
:data=
"form2.fieldParams"
stripe
border
<el-form-item
v-if=
"form2.configType === '1'"
label=
"字段列表"
>
<el-table
:data=
"form2.fieldParams"
stripe
border
:max-height=
"300"
style=
"width: 100%; margin: 15px 0;"
>
<el-table-column
prop=
"columnPosition"
label=
"序号"
width=
"55"
align=
"center"
>
</el-table-column>
<el-table-column
prop=
"columnName"
label=
"列名"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dataType"
label=
"数据类型"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dataLength"
label=
"数据长度"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dataPrecision"
label=
"数据精度"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dataScale"
label=
"数据小数位"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"columnKey"
label=
"是否主键"
align=
"center"
show-overflow-tooltip
>
style=
"width: 100%; margin: 15px 0;"
>
<el-table-column
prop=
"columnPosition"
label=
"序号"
width=
"55"
align=
"center"
/>
<el-table-column
prop=
"columnName"
label=
"列名"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"dataType"
label=
"数据类型"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"dataLength"
label=
"数据长度"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"dataPrecision"
label=
"数据精度"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"dataScale"
label=
"数据小数位"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"columnKey"
label=
"是否主键"
align=
"center"
show-overflow-tooltip
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.columnKey === '1'"
>
Y
</span>
<span
v-if=
"scope.row.columnKey === '0'"
>
N
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"columnNullable"
label=
"是否允许为空"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"columnNullable"
label=
"是否允许为空"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.columnNullable === '1'"
>
Y
</span>
<span
v-if=
"scope.row.columnNullable === '0'"
>
N
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"dataDefault"
label=
"列默认值"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"columnComment"
label=
"列注释"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"reqable"
label=
"是否作为请求参数"
align=
"center"
width=
"50"
>
<el-table-column
prop=
"dataDefault"
label=
"列默认值"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"columnComment"
label=
"列注释"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"reqable"
label=
"是否作为请求参数"
align=
"center"
width=
"50"
>
<
template
slot-scope=
"scope"
>
<el-checkbox
v-model=
"scope.row.reqable"
true-label=
"1"
false-label=
"0"
></el-checkbox
>
<el-checkbox
v-model=
"scope.row.reqable"
true-label=
"1"
false-label=
"0"
/
>
</
template
>
</el-table-column>
<el-table-column
prop=
"resable"
label=
"是否作为返回参数"
align=
"center"
width=
"50"
>
<el-table-column
prop=
"resable"
label=
"是否作为返回参数"
align=
"center"
width=
"50"
>
<
template
slot-scope=
"scope"
>
<el-checkbox
v-model=
"scope.row.resable"
true-label=
"1"
false-label=
"0"
></el-checkbox
>
<el-checkbox
v-model=
"scope.row.resable"
true-label=
"1"
false-label=
"0"
/
>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -157,32 +151,34 @@
<sql-editor
ref=
"sqleditor"
:value=
"form2.sqlText"
:read
O
nly=
"true"
:read
-o
nly=
"true"
style=
"height: 300px;margin: 10px 10px;"
></sql-editor
>
/
>
</el-col>
</el-row>
</el-form>
<el-form
ref=
"form3"
:model=
"form3"
label-width=
"80px"
v-if=
"active == 3
"
disabled
>
<el-form
v-if=
"active == 3"
ref=
"form3"
:model=
"form3"
label-width=
"80px
"
disabled
>
<el-divider
content-position=
"left"
>
请求参数
</el-divider>
<el-table
:data=
"form3.reqParams"
stripe
border
<el-table
:data=
"form3.reqParams"
stripe
border
:max-height=
"300"
style=
"width: 100%; margin: 15px 0;"
>
style=
"width: 100%; margin: 15px 0;"
>
<el-table-column
label=
"序号"
width=
"55"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"paramName"
label=
"参数名称"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"nullable"
label=
"是否允许为空"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"paramName"
label=
"参数名称"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"nullable"
label=
"是否允许为空"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-checkbox
v-model=
"scope.row.nullable"
true-label=
"1"
false-label=
"0"
></el-checkbox
>
<el-checkbox
v-model=
"scope.row.nullable"
true-label=
"1"
false-label=
"0"
/
>
</
template
>
</el-table-column>
<el-table-column
prop=
"paramComment"
label=
"描述"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"paramType"
label=
"参数类型"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"paramComment"
label=
"描述"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"paramType"
label=
"参数类型"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-select
v-model=
"scope.row.paramType"
placeholder=
"请选择参数类型"
>
<el-option
...
...
@@ -190,11 +186,11 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</
template
>
</el-table-column>
<el-table-column
prop=
"whereType"
label=
"操作符"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"whereType"
label=
"操作符"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-select
v-model=
"scope.row.whereType"
placeholder=
"请选择操作符"
>
<el-option
...
...
@@ -202,36 +198,34 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</
template
>
</el-table-column>
<el-table-column
prop=
"exampleValue"
label=
"示例值"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"defaultValue"
label=
"默认值"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"exampleValue"
label=
"示例值"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"defaultValue"
label=
"默认值"
align=
"center"
show-overflow-tooltip
/>
</el-table>
<el-divider
content-position=
"left"
>
返回字段
</el-divider>
<el-table
:data=
"form3.resParams"
stripe
border
<el-table
:data=
"form3.resParams"
stripe
border
:max-height=
"300"
style=
"width: 100%; margin: 15px 0;"
>
style=
"width: 100%; margin: 15px 0;"
>
<el-table-column
label=
"序号"
width=
"55"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"fieldName"
label=
"字段名称"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"fieldComment"
label=
"描述"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dataType"
label=
"数据类型"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"exampleValue"
label=
"示例值"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"fieldName"
label=
"字段名称"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"fieldComment"
label=
"描述"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"dataType"
label=
"数据类型"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"exampleValue"
label=
"示例值"
align=
"center"
show-overflow-tooltip
/>
</el-table>
</el-form>
<el-button
style=
"margin-top: 12px;"
@
click=
"handleNextStep"
v-if=
"active < 3
"
>
下一步
</el-button>
<el-button
style=
"margin-top: 12px;"
@
click=
"handleLastStep"
v-if=
"active > 1
"
>
上一步
</el-button>
<el-button
v-if=
"active < 3"
style=
"margin-top: 12px;"
@
click=
"handleNextStep
"
>
下一步
</el-button>
<el-button
v-if=
"active > 1"
style=
"margin-top: 12px;"
@
click=
"handleLastStep
"
>
上一步
</el-button>
</div>
</el-card>
</div>
...
...
@@ -241,7 +235,6 @@
import
{
getDataApi
,
word
}
from
'@/api/market/dataapi'
import
{
listDataSource
}
from
'@/api/metadata/datasource'
import
{
listDataTable
}
from
'@/api/metadata/datatable'
import
{
listDataColumn
}
from
'@/api/metadata/datacolumn'
import
SqlEditor
from
'@/components/SqlEditor'
export
default
{
...
...
@@ -252,12 +245,12 @@ export default {
props
:
{
data
:
{
type
:
Object
,
default
:
function
()
{
default
:
function
()
{
return
{}
}
}
},
data
()
{
data
()
{
return
{
classCardbody
:
{
overflow
:
'auto'
,
...
...
@@ -354,7 +347,7 @@ export default {
paramTypeOptions
:
[]
}
},
created
()
{
created
()
{
console
.
log
(
'id:'
+
this
.
data
.
id
)
this
.
getDicts
(
'data_req_method'
).
then
(
response
=>
{
if
(
response
.
success
)
{
...
...
@@ -393,14 +386,14 @@ export default {
}
})
},
mounted
()
{
mounted
()
{
this
.
getDataApi
(
this
.
data
.
id
)
},
methods
:
{
showCard
()
{
showCard
()
{
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
getDataSourceList
()
{
getDataSourceList
()
{
listDataSource
().
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
sourceOptions
=
response
.
data
...
...
@@ -408,33 +401,33 @@ export default {
})
},
/** 步骤条下一步 */
handleNextStep
()
{
handleNextStep
()
{
this
.
active
++
},
/** 步骤条上一步 */
handleLastStep
()
{
handleLastStep
()
{
this
.
active
--
},
/** 获取详情 */
async
getDataApi
(
id
)
{
async
getDataApi
(
id
)
{
this
.
form1
=
await
getDataApi
(
id
).
then
(
response
=>
{
if
(
response
.
success
)
{
return
response
.
data
}
})
||
{}
this
.
form2
=
this
.
form1
.
executeConfig
this
.
form2
.
table
=
{
id
:
this
.
form2
.
tableId
}
this
.
form2
.
table
=
{
id
:
this
.
form2
.
tableId
}
this
.
form3
.
reqParams
=
this
.
form1
.
reqParams
this
.
form3
.
resParams
=
this
.
form1
.
resParams
if
(
this
.
form2
.
configType
===
'1'
)
{
this
.
tableOptions
=
await
listDataTable
({
sourceId
:
this
.
form2
.
sourceId
}).
then
(
response
=>
{
this
.
tableOptions
=
await
listDataTable
({
sourceId
:
this
.
form2
.
sourceId
}).
then
(
response
=>
{
if
(
response
.
success
)
{
return
response
.
data
}
})
||
[]
}
},
apiTry
()
{
apiTry
()
{
this
.
showOptions
.
data
.
id
=
this
.
data
.
id
this
.
showOptions
.
showList
=
false
this
.
showOptions
.
showAdd
=
false
...
...
@@ -444,7 +437,7 @@ export default {
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
/** 接口文档 */
handleWord
()
{
handleWord
()
{
word
(
this
.
data
.
id
).
then
(
response
=>
{
const
blob
=
new
Blob
([
response
])
const
fileName
=
'接口文档.docx'
...
...
datax-ui/src/views/market/dataapi/DataApiEdit.vue
View file @
40183ee2
...
...
@@ -4,17 +4,17 @@
<div
slot=
"header"
class=
"clearfix"
>
<span>
{{
title
}}
</span>
<el-button-group
style=
"float: right;"
>
<el-button
size=
"mini"
icon=
"el-icon-plus"
round
@
click=
"submitForm"
:loading=
"loadingOptions.loading"
:disabled=
"loadingOptions.isDisabled"
>
{{
loadingOptions
.
loadingText
}}
</el-button>
<el-button
size=
"mini"
icon=
"el-icon-plus"
round
:loading=
"loadingOptions.loading"
:disabled=
"loadingOptions.isDisabled"
@
click=
"submitForm"
>
{{
loadingOptions
.
loadingText
}}
</el-button>
<el-button
size=
"mini"
icon=
"el-icon-back"
round
@
click=
"showCard"
>
返回
</el-button>
</el-button-group>
</div>
<div
:style=
"classCardbody"
>
<el-steps
:active=
"active"
finish-status=
"success"
align-center
>
<el-step
title=
"属性配置"
></el-step
>
<el-step
title=
"执行配置"
></el-step
>
<el-step
title=
"参数配置"
></el-step
>
<el-step
title=
"属性配置"
/
>
<el-step
title=
"执行配置"
/
>
<el-step
title=
"参数配置"
/
>
</el-steps>
<el-form
ref=
"form1"
:model=
"form1"
:rules=
"rules1"
label-width=
"80px"
v-if=
"active == 1
"
>
<el-form
v-if=
"active == 1"
ref=
"form1"
:model=
"form1"
:rules=
"rules1"
label-width=
"80px
"
>
<el-form-item
label=
"API名称"
prop=
"apiName"
>
<el-input
v-model=
"form1.apiName"
placeholder=
"请输入API名称"
/>
</el-form-item>
...
...
@@ -31,7 +31,7 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"返回格式"
prop=
"resType"
>
...
...
@@ -41,11 +41,11 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"IP黑名单"
prop=
"deny"
>
<el-input
v-model=
"form1.deny"
type=
"textarea"
placeholder=
"请输入IP黑名单多个用
,
隔开"
/>
<el-input
v-model=
"form1.deny"
type=
"textarea"
placeholder=
"请输入IP黑名单多个用
英文,
隔开"
/>
</el-form-item>
<el-form-item
label=
"是否限流"
prop=
"rateLimit"
>
<el-radio-group
v-model=
"form1.rateLimit.enable"
>
...
...
@@ -56,11 +56,9 @@
>
{{
dict
.
itemValue
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
v-if=
"form1.rateLimit.enable === '1'"
label=
"请求次数"
prop=
"times"
>
<el-input-number
v-model=
"form1.rateLimit.times"
controls-position=
"right"
:min=
"1"
/>
</el-form-item>
<el-form-item
v-if=
"form1.rateLimit.enable === '1'"
label=
"请求时间范围"
prop=
"seconds"
>
<el-input-number
v-model=
"form1.rateLimit.seconds"
controls-position=
"right"
:min=
"1"
/>
<el-form-item
v-if=
"form1.rateLimit.enable === '1'"
label=
"限流配置"
>
每
<el-input-number
v-model=
"form1.rateLimit.seconds"
controls-position=
"right"
:min=
"1"
/>
秒内限制请求
<el-input-number
v-model=
"form1.rateLimit.times"
controls-position=
"right"
:min=
"1"
/>
次
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-radio-group
v-model=
"form1.status"
disabled
>
...
...
@@ -68,14 +66,14 @@
v-for=
"dict in statusOptions"
:key=
"dict.id"
:label=
"dict.itemText"
>
{{
dict
.
itemValue
}}
</el-radio>
>
{{
dict
.
itemValue
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"form1.remark"
type=
"textarea"
placeholder=
"请输入内容"
/>
</el-form-item>
</el-form>
<el-form
ref=
"form2"
:model=
"form2"
:rules=
"rules2"
label-width=
"80px"
v-if=
"active == 2
"
>
<el-form
v-if=
"active == 2"
ref=
"form2"
:model=
"form2"
:rules=
"rules2"
label-width=
"80px
"
>
<el-form-item
label=
"配置方式"
prop=
"configType"
>
<el-select
v-model=
"form2.configType"
placeholder=
"请选择配置方式"
@
change=
"configTypeSelectChanged"
>
<el-option
...
...
@@ -83,7 +81,7 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"数据源"
prop=
"sourceId"
>
...
...
@@ -94,59 +92,55 @@
:label=
"source.sourceName"
:value=
"source.id"
:disabled=
"source.status === '0'"
></el-option
>
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"数据库表"
prop=
"tableName"
v-if=
"form2.configType === '1'
"
>
<el-form-item
v-if=
"form2.configType === '1'"
label=
"数据库表"
prop=
"tableName
"
>
<el-select
v-model=
"form2.table"
value-key=
"id"
placeholder=
"请选择数据库表"
@
change=
"tableSelectChanged"
>
<el-option
v-for=
"item in tableOptions"
:key=
"item.id"
:label=
"item.tableComment ? item.tableComment : item.tableName"
:value=
"item"
>
</el-option
>
:value=
"item"
/
>
</el-select>
</el-form-item>
<el-form-item
label=
"字段列表"
v-if=
"form2.configType === '1'"
>
<el-table
:data=
"form2.fieldParams"
stripe
border
<el-form-item
v-if=
"form2.configType === '1'"
label=
"字段列表"
>
<el-table
:data=
"form2.fieldParams"
stripe
border
:max-height=
"300"
style=
"width: 100%; margin: 15px 0;"
>
<el-table-column
prop=
"columnPosition"
label=
"序号"
width=
"55"
align=
"center"
>
</el-table-column>
<el-table-column
prop=
"columnName"
label=
"列名"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dataType"
label=
"数据类型"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dataLength"
label=
"数据长度"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dataPrecision"
label=
"数据精度"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"dataScale"
label=
"数据小数位"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"columnKey"
label=
"是否主键"
align=
"center"
show-overflow-tooltip
>
style=
"width: 100%; margin: 15px 0;"
>
<el-table-column
prop=
"columnPosition"
label=
"序号"
width=
"55"
align=
"center"
/>
<el-table-column
prop=
"columnName"
label=
"列名"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"dataType"
label=
"数据类型"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"dataLength"
label=
"数据长度"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"dataPrecision"
label=
"数据精度"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"dataScale"
label=
"数据小数位"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"columnKey"
label=
"是否主键"
align=
"center"
show-overflow-tooltip
>
<template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.columnKey === '1'"
>
Y
</span>
<span
v-if=
"scope.row.columnKey === '0'"
>
N
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"columnNullable"
label=
"是否允许为空"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"columnNullable"
label=
"是否允许为空"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<span
v-if=
"scope.row.columnNullable === '1'"
>
Y
</span>
<span
v-if=
"scope.row.columnNullable === '0'"
>
N
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"dataDefault"
label=
"列默认值"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"columnComment"
label=
"列注释"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"reqable"
label=
"是否作为请求参数"
align=
"center"
width=
"50"
>
<el-table-column
prop=
"dataDefault"
label=
"列默认值"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"columnComment"
label=
"列注释"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"reqable"
label=
"是否作为请求参数"
align=
"center"
width=
"50"
>
<
template
slot-scope=
"scope"
>
<el-checkbox
v-model=
"scope.row.reqable"
true-label=
"1"
false-label=
"0"
@
change=
"checked=>reqCheckChange(scope.row, checked)"
></el-checkbox
>
<el-checkbox
v-model=
"scope.row.reqable"
true-label=
"1"
false-label=
"0"
@
change=
"checked=>reqCheckChange(scope.row, checked)"
/
>
</
template
>
</el-table-column>
<el-table-column
prop=
"resable"
label=
"是否作为返回参数"
align=
"center"
width=
"50"
>
<el-table-column
prop=
"resable"
label=
"是否作为返回参数"
align=
"center"
width=
"50"
>
<
template
slot-scope=
"scope"
>
<el-checkbox
v-model=
"scope.row.resable"
true-label=
"1"
false-label=
"0"
@
change=
"checked=>resCheckChange(scope.row, checked)"
></el-checkbox
>
<el-checkbox
v-model=
"scope.row.resable"
true-label=
"1"
false-label=
"0"
@
change=
"checked=>resCheckChange(scope.row, checked)"
/
>
</
template
>
</el-table-column>
</el-table>
...
...
@@ -156,35 +150,41 @@
<sql-editor
ref=
"sqleditor"
:value=
"form2.sqlText"
@
changeTextarea=
"changeTextarea($event)"
style=
"height: 300px;margin: 10px 10px;"
></sql-editor>
@
changeTextarea=
"changeTextarea($event)"
/>
</el-col>
</el-row>
<el-form-item
v-if=
"form2.configType === '2'"
>
<el-button
size=
"mini"
type=
"primary"
@
click=
"sqlParse"
>
SQL解析
</el-button>
</el-form-item>
</el-form>
<el-form
ref=
"form3"
:model=
"form3"
label-width=
"80px"
v-if=
"active == 3
"
>
<el-form
v-if=
"active == 3"
ref=
"form3"
:model=
"form3"
label-width=
"80px
"
>
<el-divider
content-position=
"left"
>
请求参数
</el-divider>
<el-table
:data=
"form3.reqParams"
stripe
border
<el-table
:data=
"form3.reqParams"
stripe
border
:max-height=
"300"
style=
"width: 100%; margin: 15px 0;"
>
style=
"width: 100%; margin: 15px 0;"
>
<el-table-column
label=
"序号"
width=
"55"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"paramName"
label=
"参数名称"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"nullable"
label=
"是否允许为空"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"paramName"
label=
"参数名称"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"nullable"
label=
"是否允许为空"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-checkbox
v-model=
"scope.row.nullable"
true-label=
"1"
false-label=
"0"
></el-checkbox
>
<el-checkbox
v-model=
"scope.row.nullable"
true-label=
"1"
false-label=
"0"
/
>
</
template
>
</el-table-column>
<el-table-column
prop=
"paramComment"
label=
"描述"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"paramComment"
label=
"描述"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-input
v-model=
"scope.row.paramComment"
placeholder=
"请输入描述"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"paramType"
label=
"参数类型"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"paramType"
label=
"参数类型"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-select
v-model=
"scope.row.paramType"
placeholder=
"请选择参数类型"
>
<el-option
...
...
@@ -192,11 +192,11 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</
template
>
</el-table-column>
<el-table-column
prop=
"whereType"
label=
"操作符"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"whereType"
label=
"操作符"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-select
v-model=
"scope.row.whereType"
placeholder=
"请选择操作符"
>
<el-option
...
...
@@ -204,45 +204,54 @@
:key=
"dict.id"
:label=
"dict.itemValue"
:value=
"dict.itemText"
></el-option
>
/
>
</el-select>
</
template
>
</el-table-column>
<el-table-column
prop=
"exampleValue"
label=
"示例值"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"exampleValue"
label=
"示例值"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-input
v-model=
"scope.row.exampleValue"
placeholder=
"请输入示例值"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"defaultValue"
label=
"默认值"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"defaultValue"
label=
"默认值"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-input
v-model=
"scope.row.defaultValue"
placeholder=
"请输入默认值"
/>
</
template
>
</el-table-column>
</el-table>
<el-divider
content-position=
"left"
>
返回字段
</el-divider>
<el-table
:data=
"form3.resParams"
stripe
border
<el-table
:data=
"form3.resParams"
stripe
border
:max-height=
"300"
style=
"width: 100%; margin: 15px 0;"
>
style=
"width: 100%; margin: 15px 0;"
>
<el-table-column
label=
"序号"
width=
"55"
align=
"center"
>
<
template
slot-scope=
"scope"
>
<span>
{{
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<el-table-column
prop=
"fieldName"
label=
"字段名称"
align=
"center"
show-overflow-tooltip
>
</el-table-column>
<el-table-column
prop=
"fieldComment"
label=
"描述"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"fieldName"
label=
"字段名称"
align=
"center"
show-overflow-tooltip
/>
<el-table-column
prop=
"fieldComment"
label=
"描述"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-input
v-model=
"scope.row.fieldComment"
placeholder=
"请输入描述"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"dataType"
label=
"数据类型"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"dataType"
label=
"数据类型"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-input
v-model=
"scope.row.dataType"
placeholder=
"请输入数据类型"
/>
</
template
>
</el-table-column>
<el-table-column
prop=
"exampleValue"
label=
"示例值"
align=
"center"
show-overflow-tooltip
>
<el-table-column
prop=
"exampleValue"
label=
"示例值"
align=
"center"
show-overflow-tooltip
>
<
template
slot-scope=
"scope"
>
<el-input
v-model=
"scope.row.exampleValue"
placeholder=
"请输入示例值"
/>
</
template
>
</el-table-column>
</el-table>
</el-form>
<el-button
style=
"margin-top: 12px;"
@
click=
"handleNextStep"
v-if=
"active < 3
"
>
下一步
</el-button>
<el-button
style=
"margin-top: 12px;"
@
click=
"handleLastStep"
v-if=
"active > 1
"
>
上一步
</el-button>
<el-button
v-if=
"active < 3"
style=
"margin-top: 12px;"
@
click=
"handleNextStep
"
>
下一步
</el-button>
<el-button
v-if=
"active > 1"
style=
"margin-top: 12px;"
@
click=
"handleLastStep
"
>
上一步
</el-button>
</div>
</el-card>
</div>
...
...
@@ -263,12 +272,12 @@ export default {
props
:
{
data
:
{
type
:
Object
,
default
:
function
()
{
default
:
function
()
{
return
{}
}
}
},
data
()
{
data
()
{
return
{
classCardbody
:
{
overflow
:
'auto'
,
...
...
@@ -371,7 +380,7 @@ export default {
paramTypeOptions
:
[]
}
},
created
()
{
created
()
{
console
.
log
(
'id:'
+
this
.
data
.
id
)
this
.
getDicts
(
'data_req_method'
).
then
(
response
=>
{
if
(
response
.
success
)
{
...
...
@@ -410,14 +419,14 @@ export default {
}
})
},
mounted
()
{
mounted
()
{
this
.
getDataApi
(
this
.
data
.
id
)
},
methods
:
{
showCard
()
{
showCard
()
{
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
getDataSourceList
()
{
getDataSourceList
()
{
listDataSource
().
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
sourceOptions
=
response
.
data
...
...
@@ -425,7 +434,7 @@ export default {
})
},
/** 步骤条下一步 */
handleNextStep
()
{
handleNextStep
()
{
if
(
this
.
active
===
1
)
{
this
.
$refs
[
'form1'
].
validate
(
valid
=>
{
if
(
valid
)
{
...
...
@@ -442,15 +451,15 @@ export default {
}
},
/** 步骤条上一步 */
handleLastStep
()
{
handleLastStep
()
{
this
.
active
--
},
changeTextarea
(
val
)
{
changeTextarea
(
val
)
{
this
.
form2
.
sqlText
=
val
},
configTypeSelectChanged
(
val
)
{
configTypeSelectChanged
(
val
)
{
if
(
this
.
form2
.
configType
===
'1'
&&
this
.
form2
.
sourceId
&&
this
.
tableOptions
.
length
<=
0
)
{
le
t
data
=
{}
cons
t
data
=
{}
data
.
sourceId
=
this
.
form2
.
sourceId
listDataTable
(
data
).
then
(
response
=>
{
if
(
response
.
success
)
{
...
...
@@ -460,9 +469,9 @@ export default {
})
}
},
sourceSelectChanged
(
val
)
{
sourceSelectChanged
(
val
)
{
if
(
this
.
form2
.
configType
&&
this
.
form2
.
configType
===
'1'
)
{
le
t
data
=
{}
cons
t
data
=
{}
data
.
sourceId
=
val
listDataTable
(
data
).
then
(
response
=>
{
if
(
response
.
success
)
{
...
...
@@ -472,8 +481,8 @@ export default {
})
}
},
tableSelectChanged
(
item
)
{
le
t
data
=
{}
tableSelectChanged
(
item
)
{
cons
t
data
=
{}
data
.
sourceId
=
item
.
sourceId
data
.
tableId
=
item
.
id
this
.
form2
.
tableId
=
item
.
id
...
...
@@ -486,7 +495,7 @@ export default {
}
})
},
sqlParse
()
{
sqlParse
()
{
if
(
!
this
.
form2
.
sourceId
)
{
this
.
$message
.
error
(
'数据源不能为空'
)
return
...
...
@@ -495,30 +504,20 @@ export default {
this
.
$message
.
error
(
'解析SQL不能为空'
)
return
}
let
data
=
{}
const
data
=
{}
data
.
sourceId
=
this
.
form2
.
sourceId
data
.
sqlText
=
this
.
form2
.
sqlText
sqlParse
(
data
).
then
(
response
=>
{
if
(
response
.
success
)
{
const
{
data
}
=
response
let
reqParams
=
data
.
reqParams
let
resParams
=
data
.
resParams
this
.
form3
.
reqParams
=
reqParams
.
map
(
function
(
item
)
{
let
json
=
{}
json
.
paramName
=
item
.
paramName
json
.
nullable
=
'0'
return
json
})
this
.
form3
.
resParams
=
resParams
.
map
(
function
(
item
)
{
let
json
=
{}
json
.
fieldName
=
item
.
fieldName
return
json
})
this
.
form3
.
reqParams
=
data
.
reqParams
this
.
form3
.
resParams
=
data
.
resParams
this
.
$message
.
success
(
'解析成功,请进行下一步'
)
}
})
},
/** 获取详情 */
async
getDataApi
(
id
)
{
async
getDataApi
(
id
)
{
this
.
form1
=
await
getDataApi
(
id
).
then
(
response
=>
{
if
(
response
.
success
)
{
return
response
.
data
...
...
@@ -541,9 +540,9 @@ export default {
// }) || []
}
},
reqCheckChange
(
row
,
checked
)
{
reqCheckChange
(
row
,
checked
)
{
if
(
checked
===
'1'
)
{
le
t
json
=
{}
cons
t
json
=
{}
json
.
paramName
=
row
.
columnName
json
.
paramComment
=
row
.
columnComment
||
undefined
json
.
nullable
=
'0'
...
...
@@ -552,9 +551,9 @@ export default {
this
.
form3
.
reqParams
.
splice
(
this
.
form3
.
reqParams
.
findIndex
(
item
=>
item
.
paramName
===
row
.
columnName
),
1
)
}
},
resCheckChange
(
row
,
checked
)
{
resCheckChange
(
row
,
checked
)
{
if
(
checked
===
'1'
)
{
le
t
json
=
{}
cons
t
json
=
{}
json
.
fieldName
=
row
.
columnName
json
.
fieldComment
=
row
.
columnComment
||
undefined
json
.
dataType
=
row
.
dataType
||
undefined
...
...
@@ -564,7 +563,7 @@ export default {
}
},
/** 提交按钮 */
submitForm
:
function
()
{
submitForm
:
function
()
{
this
.
$refs
[
'form3'
].
validate
(
valid
=>
{
if
(
valid
)
{
if
(
this
.
form3
.
reqParams
.
length
<=
0
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment