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
99cb89cd
Commit
99cb89cd
authored
Jul 26, 2020
by
yuwei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
项目初始化
parent
2022dbb0
Hide whitespace changes
Inline
Side-by-side
Showing
30 changed files
with
1470 additions
and
10 deletions
+1470
-10
pom.xml
datax-common/datax-common-redis/pom.xml
+6
-0
RedisCacheAop.java
.../java/cn/datax/common/redis/annotation/RedisCacheAop.java
+18
-0
RedisCacheAspect.java
.../java/cn/datax/common/redis/aspectj/RedisCacheAspect.java
+122
-0
spring.factories
...common-redis/src/main/resources/META-INF/spring.factories
+2
-1
DataSourceDto.java
.../cn/datax/service/data/factory/api/dto/DataSourceDto.java
+3
-0
DataThemeDto.java
...a/cn/datax/service/data/factory/api/dto/DataThemeDto.java
+30
-0
DataSourceEntity.java
...tax/service/data/factory/api/entity/DataSourceEntity.java
+5
-0
DataThemeEntity.java
...atax/service/data/factory/api/entity/DataThemeEntity.java
+29
-0
DataSourceQuery.java
...datax/service/data/factory/api/query/DataSourceQuery.java
+2
-0
DataThemeQuery.java
.../datax/service/data/factory/api/query/DataThemeQuery.java
+22
-0
DataSourceVo.java
...va/cn/datax/service/data/factory/api/vo/DataSourceVo.java
+1
-0
DataThemeVo.java
...ava/cn/datax/service/data/factory/api/vo/DataThemeVo.java
+28
-0
DataSourceController.java
...service/data/factory/controller/DataSourceController.java
+1
-0
DataThemeController.java
.../service/data/factory/controller/DataThemeController.java
+149
-0
DataThemeDao.java
.../java/cn/datax/service/data/factory/dao/DataThemeDao.java
+18
-0
DataThemeMapper.java
...datax/service/data/factory/mapstruct/DataThemeMapper.java
+20
-0
DataThemeService.java
.../datax/service/data/factory/service/DataThemeService.java
+28
-0
DataThemeServiceImpl.java
...rvice/data/factory/service/impl/DataThemeServiceImpl.java
+67
-0
DataSetMapper.xml
...ctory-service/src/main/resources/mapper/DataSetMapper.xml
+3
-2
DataSourceMapper.xml
...ry-service/src/main/resources/mapper/DataSourceMapper.xml
+4
-2
DataThemeMapper.xml
...ory-service/src/main/resources/mapper/DataThemeMapper.xml
+31
-0
datatheme.js
datax-ui/src/api/factory/datatheme.js
+54
-0
DataSourceAdd.vue
datax-ui/src/views/factory/datasource/DataSourceAdd.vue
+28
-2
DataSourceDetail.vue
datax-ui/src/views/factory/datasource/DataSourceDetail.vue
+23
-1
DataSourceEdit.vue
datax-ui/src/views/factory/datasource/DataSourceEdit.vue
+27
-2
DataThemeAdd.vue
datax-ui/src/views/factory/datatheme/DataThemeAdd.vue
+123
-0
DataThemeDetail.vue
datax-ui/src/views/factory/datatheme/DataThemeDetail.vue
+96
-0
DataThemeEdit.vue
datax-ui/src/views/factory/datatheme/DataThemeEdit.vue
+133
-0
DataThemeList.vue
datax-ui/src/views/factory/datatheme/DataThemeList.vue
+349
-0
index.vue
datax-ui/src/views/factory/datatheme/index.vue
+48
-0
No files found.
datax-common/datax-common-redis/pom.xml
View file @
99cb89cd
...
...
@@ -29,5 +29,10 @@
<artifactId>
redisson
</artifactId>
<version>
${redisson.version}
</version>
</dependency>
<dependency>
<groupId>
com.alibaba
</groupId>
<artifactId>
fastjson
</artifactId>
<version>
${fastjson.version}
</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
datax-common/datax-common-redis/src/main/java/cn/datax/common/redis/annotation/RedisCacheAop.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
common
.
redis
.
annotation
;
import
java.lang.annotation.*
;
@Target
(
ElementType
.
METHOD
)
@Retention
(
RetentionPolicy
.
RUNTIME
)
@Documented
public
@interface
RedisCacheAop
{
// 缓存名
String
cacheName
()
default
""
;
// 过期时间(秒) time要大于0 如果time小于等于0 将设置无限期
long
expire
()
default
-
1
;
// 缓存反序列化获取的对象
Class
clazz
()
default
Object
.
class
;
// 序列化后的对象是否是数组 比如 List<Object>
boolean
isArray
()
default
false
;
}
datax-common/datax-common-redis/src/main/java/cn/datax/common/redis/aspectj/RedisCacheAspect.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
common
.
redis
.
aspectj
;
import
cn.datax.common.redis.annotation.RedisCacheAop
;
import
com.alibaba.fastjson.JSON
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
lombok.extern.slf4j.Slf4j
;
import
org.aspectj.lang.ProceedingJoinPoint
;
import
org.aspectj.lang.annotation.Around
;
import
org.aspectj.lang.annotation.Aspect
;
import
org.aspectj.lang.annotation.Pointcut
;
import
org.aspectj.lang.reflect.MethodSignature
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
java.lang.reflect.Method
;
import
java.util.Arrays
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
@Aspect
@Slf4j
public
class
RedisCacheAspect
{
@Autowired
private
RedisTemplate
redisTemplate
;
@Autowired
private
ObjectMapper
objectMapper
;
/**
* 分隔符 生成key 格式为 类全类名|方法名|参数所属类全类名
**/
private
static
final
String
DELIMITER
=
":"
;
/**
* Service层切点 使用到了我们定义的 RedisCacheAspect 作为切点表达式。
* 而且我们可以看出此表达式基于 annotation。
* 并且用于内建属性为查询的方法之上
*/
@Pointcut
(
"@annotation(cn.datax.common.redis.annotation.RedisCacheAop)"
)
public
void
redisCacheAspect
()
{
}
/**
* Around 手动控制调用核心业务逻辑,以及调用前和调用后的处理,
* <p>
* 注意:当核心业务抛异常后,立即退出,转向AfterAdvice 执行完AfterAdvice,再转到ThrowingAdvice
*/
@Around
(
value
=
"redisCacheAspect()"
)
public
Object
aroundAdvice
(
ProceedingJoinPoint
joinPoint
)
throws
Throwable
{
// 得到类名、方法名和参数
String
clazzName
=
joinPoint
.
getTarget
().
getClass
().
getName
();
String
methodName
=
joinPoint
.
getSignature
().
getName
();
Object
[]
args
=
joinPoint
.
getArgs
();
// 根据类名、方法名和参数生成Key
log
.
info
(
"key参数: "
+
clazzName
+
"."
+
methodName
);
String
key
=
getKey
(
clazzName
,
methodName
,
args
);
if
(
log
.
isInfoEnabled
())
{
log
.
info
(
"生成key: "
+
key
);
}
// 得到被代理的方法
Method
method
=
((
MethodSignature
)
joinPoint
.
getSignature
()).
getMethod
();
String
cacheName
=
method
.
getAnnotation
(
RedisCacheAop
.
class
).
cacheName
();
long
expire
=
method
.
getAnnotation
(
RedisCacheAop
.
class
).
expire
();
Class
objectType
=
method
.
getAnnotation
(
RedisCacheAop
.
class
).
clazz
();
boolean
isArray
=
method
.
getAnnotation
(
RedisCacheAop
.
class
).
isArray
();
// 检查Redis中是否有缓存
String
value
=
(
String
)
redisTemplate
.
opsForValue
().
get
(
key
+
DELIMITER
+
cacheName
);
// result是方法的最终返回结果
Object
result
=
null
;
try
{
if
(
null
==
value
)
{
log
.
info
(
"缓存未命中"
);
// 调用数据库查询方法
result
=
joinPoint
.
proceed
(
args
);
// 结果放入缓存
if
(
expire
>
0
)
{
redisTemplate
.
opsForValue
().
set
(
key
+
DELIMITER
+
cacheName
,
objectMapper
.
writeValueAsString
(
result
),
expire
,
TimeUnit
.
SECONDS
);
}
else
{
redisTemplate
.
opsForValue
().
set
(
key
+
DELIMITER
+
cacheName
,
objectMapper
.
writeValueAsString
(
result
));
}
}
else
{
/**
* 可以直接针对mapper进行缓存,如果mapper查询返回的List<Objec> 需要isArray 为true 否则转换异常
*/
if
(
isArray
){
return
JSON
.
parseArray
(
value
,
objectType
);
}
else
{
return
JSON
.
parseObject
(
value
,
objectType
);
}
}
}
catch
(
Throwable
e
)
{
log
.
error
(
"程序异常"
,
e
.
getMessage
());
throw
e
;
}
return
result
;
}
/**
* 根据类名、方法名和参数生成Key
* @param clazzName
* @param methodName
* @param args
* @return key格式:全类名:方法名:参数类型
*/
private
String
getKey
(
String
clazzName
,
String
methodName
,
Object
[]
args
)
{
StringBuilder
key
=
new
StringBuilder
(
clazzName
);
key
.
append
(
DELIMITER
);
key
.
append
(
methodName
);
key
.
append
(
DELIMITER
);
key
.
append
(
Arrays
.
stream
(
args
).
map
(
x
->
x
.
toString
()).
collect
(
Collectors
.
joining
(
DELIMITER
)));
return
key
.
toString
();
}
}
datax-common/datax-common-redis/src/main/resources/META-INF/spring.factories
View file @
99cb89cd
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
cn.datax.common.redis.config.RedisConfig,\
cn.datax.common.redis.config.RedissonConfig
cn.datax.common.redis.config.RedissonConfig,\
cn.datax.common.redis.aspectj.RedisCacheAspect
datax-modules/data-factory-service-parent/data-factory-service-api/src/main/java/cn/datax/service/data/factory/api/dto/DataSourceDto.java
View file @
99cb89cd
...
...
@@ -32,6 +32,9 @@ public class DataSourceDto implements Serializable {
@ApiModelProperty
(
value
=
"数据源名称"
)
@NotBlank
(
message
=
"数据源名称不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
private
String
sourceName
;
@ApiModelProperty
(
value
=
"数据主题"
)
@NotBlank
(
message
=
"数据主题不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
private
String
themeId
;
@ApiModelProperty
(
value
=
"数据源连接信息"
)
@Valid
private
DbSchema
dbSchema
;
...
...
datax-modules/data-factory-service-parent/data-factory-service-api/src/main/java/cn/datax/service/data/factory/api/dto/DataThemeDto.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
service
.
data
.
factory
.
api
.
dto
;
import
cn.datax.common.validate.ValidationGroups
;
import
io.swagger.annotations.ApiModel
;
import
io.swagger.annotations.ApiModelProperty
;
import
lombok.Data
;
import
javax.validation.constraints.NotBlank
;
import
java.io.Serializable
;
/**
* <p>
* 数据主题信息表 实体DTO
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@ApiModel
(
value
=
"数据主题信息表Model"
)
@Data
public
class
DataThemeDto
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
@ApiModelProperty
(
value
=
"主键ID"
)
@NotBlank
(
message
=
"主键ID不能为空"
,
groups
=
{
ValidationGroups
.
Update
.
class
})
private
String
id
;
@ApiModelProperty
(
value
=
"主题名称"
)
@NotBlank
(
message
=
"主题名称不能为空"
,
groups
=
{
ValidationGroups
.
Insert
.
class
,
ValidationGroups
.
Update
.
class
})
private
String
themeName
;
}
datax-modules/data-factory-service-parent/data-factory-service-api/src/main/java/cn/datax/service/data/factory/api/entity/DataSourceEntity.java
View file @
99cb89cd
...
...
@@ -36,6 +36,11 @@ public class DataSourceEntity extends DataScopeBaseEntity {
private
String
sourceName
;
/**
* 数据主题
*/
private
String
themeId
;
/**
* 数据源连接信息
*/
@TableField
(
typeHandler
=
JacksonTypeHandler
.
class
)
...
...
datax-modules/data-factory-service-parent/data-factory-service-api/src/main/java/cn/datax/service/data/factory/api/entity/DataThemeEntity.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
service
.
data
.
factory
.
api
.
entity
;
import
cn.datax.common.base.DataScopeBaseEntity
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
import
lombok.experimental.Accessors
;
/**
* <p>
* 数据主题信息表
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
@Accessors
(
chain
=
true
)
@TableName
(
"data_theme"
)
public
class
DataThemeEntity
extends
DataScopeBaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 数据主题
*/
private
String
themeName
;
}
datax-modules/data-factory-service-parent/data-factory-service-api/src/main/java/cn/datax/service/data/factory/api/query/DataSourceQuery.java
View file @
99cb89cd
...
...
@@ -19,4 +19,6 @@ public class DataSourceQuery extends BaseQueryParams {
private
static
final
long
serialVersionUID
=
1L
;
private
String
sourceName
;
private
String
themeId
;
}
datax-modules/data-factory-service-parent/data-factory-service-api/src/main/java/cn/datax/service/data/factory/api/query/DataThemeQuery.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
service
.
data
.
factory
.
api
.
query
;
import
cn.datax.common.base.BaseQueryParams
;
import
lombok.Data
;
import
lombok.EqualsAndHashCode
;
/**
* <p>
* 数据主题信息表 查询实体
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Data
@EqualsAndHashCode
(
callSuper
=
true
)
public
class
DataThemeQuery
extends
BaseQueryParams
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
themeName
;
}
datax-modules/data-factory-service-parent/data-factory-service-api/src/main/java/cn/datax/service/data/factory/api/vo/DataSourceVo.java
View file @
99cb89cd
...
...
@@ -27,5 +27,6 @@ public class DataSourceVo implements Serializable {
private
String
remark
;
private
String
dbType
;
private
String
sourceName
;
private
String
themeId
;
private
DbSchema
dbSchema
;
}
datax-modules/data-factory-service-parent/data-factory-service-api/src/main/java/cn/datax/service/data/factory/api/vo/DataThemeVo.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
service
.
data
.
factory
.
api
.
vo
;
import
com.fasterxml.jackson.annotation.JsonFormat
;
import
lombok.Data
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
/**
* <p>
* 数据主题信息表 实体VO
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Data
public
class
DataThemeVo
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
private
String
id
;
private
String
status
;
@JsonFormat
(
pattern
=
"yyyy-MM-dd HH:mm:ss"
,
timezone
=
"GMT+8"
)
private
LocalDateTime
createTime
;
private
String
remark
;
private
String
themeName
;
}
datax-modules/data-factory-service-parent/data-factory-service/src/main/java/cn/datax/service/data/factory/controller/DataSourceController.java
View file @
99cb89cd
...
...
@@ -90,6 +90,7 @@ public class DataSourceController extends BaseController {
public
R
getDataSourcePage
(
DataSourceQuery
dataSourceQuery
)
{
QueryWrapper
<
DataSourceEntity
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
like
(
StrUtil
.
isNotBlank
(
dataSourceQuery
.
getSourceName
()),
"source_name"
,
dataSourceQuery
.
getSourceName
());
queryWrapper
.
eq
(
StrUtil
.
isNotBlank
(
dataSourceQuery
.
getThemeId
()),
"theme_id"
,
dataSourceQuery
.
getThemeId
());
IPage
<
DataSourceEntity
>
page
=
dataSourceService
.
page
(
new
Page
<>(
dataSourceQuery
.
getPageNum
(),
dataSourceQuery
.
getPageSize
()),
queryWrapper
);
List
<
DataSourceVo
>
collect
=
page
.
getRecords
().
stream
().
map
(
dataSourceMapper:
:
toVO
).
collect
(
Collectors
.
toList
());
JsonPage
<
DataSourceVo
>
jsonPage
=
new
JsonPage
<>(
page
.
getCurrent
(),
page
.
getSize
(),
page
.
getTotal
(),
collect
);
...
...
datax-modules/data-factory-service-parent/data-factory-service/src/main/java/cn/datax/service/data/factory/controller/DataThemeController.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
service
.
data
.
factory
.
controller
;
import
cn.datax.common.core.DataConstant
;
import
cn.datax.common.core.JsonPage
;
import
cn.datax.common.core.R
;
import
cn.datax.common.validate.ValidationGroups
;
import
cn.datax.service.data.factory.api.dto.DataThemeDto
;
import
cn.datax.service.data.factory.api.entity.DataSourceEntity
;
import
cn.datax.service.data.factory.api.entity.DataThemeEntity
;
import
cn.datax.service.data.factory.api.vo.DataSourceVo
;
import
cn.datax.service.data.factory.api.vo.DataThemeVo
;
import
cn.datax.service.data.factory.api.query.DataThemeQuery
;
import
cn.datax.service.data.factory.mapstruct.DataThemeMapper
;
import
cn.datax.service.data.factory.service.DataThemeService
;
import
cn.hutool.core.util.StrUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.ApiImplicitParam
;
import
io.swagger.annotations.ApiImplicitParams
;
import
io.swagger.annotations.ApiOperation
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
cn.datax.common.base.BaseController
;
import
java.util.List
;
import
java.util.stream.Collectors
;
/**
* <p>
* 数据主题信息表 前端控制器
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Api
(
tags
=
{
"数据主题信息表"
})
@RestController
@RequestMapping
(
"/dataThemes"
)
public
class
DataThemeController
extends
BaseController
{
@Autowired
private
DataThemeService
dataThemeService
;
@Autowired
private
DataThemeMapper
dataThemeMapper
;
/**
* 通过ID查询信息
*
* @param id
* @return
*/
@ApiOperation
(
value
=
"获取详细信息"
,
notes
=
"根据url的id来获取详细信息"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"ID"
,
required
=
true
,
dataType
=
"String"
,
paramType
=
"path"
)
@GetMapping
(
"/{id}"
)
public
R
getDataThemeById
(
@PathVariable
String
id
)
{
DataThemeEntity
dataThemeEntity
=
dataThemeService
.
getDataThemeById
(
id
);
return
R
.
ok
().
setData
(
dataThemeMapper
.
toVO
(
dataThemeEntity
));
}
@ApiOperation
(
value
=
"获取列表"
,
notes
=
""
)
@GetMapping
(
"/list"
)
public
R
getDataThemeList
()
{
QueryWrapper
<
DataThemeEntity
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
eq
(
"status"
,
DataConstant
.
EnableState
.
ENABLE
.
getKey
());
List
<
DataThemeEntity
>
list
=
dataThemeService
.
list
(
queryWrapper
);
List
<
DataThemeVo
>
collect
=
list
.
stream
().
map
(
dataThemeMapper:
:
toVO
).
collect
(
Collectors
.
toList
());
return
R
.
ok
().
setData
(
collect
);
}
/**
* 分页查询信息
*
* @param dataThemeQuery
* @return
*/
@ApiOperation
(
value
=
"分页查询"
,
notes
=
""
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"dataThemeQuery"
,
value
=
"查询实体dataThemeQuery"
,
required
=
true
,
dataTypeClass
=
DataThemeQuery
.
class
)
})
@GetMapping
(
"/page"
)
public
R
getDataThemePage
(
DataThemeQuery
dataThemeQuery
)
{
QueryWrapper
<
DataThemeEntity
>
queryWrapper
=
new
QueryWrapper
<>();
queryWrapper
.
like
(
StrUtil
.
isNotBlank
(
dataThemeQuery
.
getThemeName
()),
"theme_name"
,
dataThemeQuery
.
getThemeName
());
IPage
<
DataThemeEntity
>
page
=
dataThemeService
.
page
(
new
Page
<>(
dataThemeQuery
.
getPageNum
(),
dataThemeQuery
.
getPageSize
()),
queryWrapper
);
List
<
DataThemeVo
>
collect
=
page
.
getRecords
().
stream
().
map
(
dataThemeMapper:
:
toVO
).
collect
(
Collectors
.
toList
());
JsonPage
<
DataThemeVo
>
jsonPage
=
new
JsonPage
<>(
page
.
getCurrent
(),
page
.
getSize
(),
page
.
getTotal
(),
collect
);
return
R
.
ok
().
setData
(
jsonPage
);
}
/**
* 添加
* @param dataTheme
* @return
*/
@ApiOperation
(
value
=
"添加信息"
,
notes
=
"根据dataTheme对象添加信息"
)
@ApiImplicitParam
(
name
=
"dataTheme"
,
value
=
"详细实体dataTheme"
,
required
=
true
,
dataType
=
"DataThemeDto"
)
@PostMapping
()
public
R
saveDataTheme
(
@RequestBody
@Validated
({
ValidationGroups
.
Insert
.
class
})
DataThemeDto
dataTheme
)
{
DataThemeEntity
dataThemeEntity
=
dataThemeService
.
saveDataTheme
(
dataTheme
);
return
R
.
ok
().
setData
(
dataThemeMapper
.
toVO
(
dataThemeEntity
));
}
/**
* 修改
* @param dataTheme
* @return
*/
@ApiOperation
(
value
=
"修改信息"
,
notes
=
"根据url的id来指定修改对象,并根据传过来的信息来修改详细信息"
)
@ApiImplicitParams
({
@ApiImplicitParam
(
name
=
"id"
,
value
=
"ID"
,
required
=
true
,
dataType
=
"String"
,
paramType
=
"path"
),
@ApiImplicitParam
(
name
=
"dataTheme"
,
value
=
"详细实体dataTheme"
,
required
=
true
,
dataType
=
"DataThemeDto"
)
})
@PutMapping
(
"/{id}"
)
public
R
updateDataTheme
(
@PathVariable
String
id
,
@RequestBody
@Validated
({
ValidationGroups
.
Update
.
class
})
DataThemeDto
dataTheme
)
{
DataThemeEntity
dataThemeEntity
=
dataThemeService
.
updateDataTheme
(
dataTheme
);
return
R
.
ok
().
setData
(
dataThemeMapper
.
toVO
(
dataThemeEntity
));
}
/**
* 删除
* @param id
* @return
*/
@ApiOperation
(
value
=
"删除"
,
notes
=
"根据url的id来指定删除对象"
)
@ApiImplicitParam
(
name
=
"id"
,
value
=
"ID"
,
required
=
true
,
dataType
=
"String"
,
paramType
=
"path"
)
@DeleteMapping
(
"/{id}"
)
public
R
deleteDataThemeById
(
@PathVariable
String
id
)
{
dataThemeService
.
deleteDataThemeById
(
id
);
return
R
.
ok
();
}
/**
* 批量删除
* @param ids
* @return
*/
@ApiOperation
(
value
=
"批量删除角色"
,
notes
=
"根据url的ids来批量删除对象"
)
@ApiImplicitParam
(
name
=
"ids"
,
value
=
"ID集合"
,
required
=
true
,
dataType
=
"List"
,
paramType
=
"path"
)
@DeleteMapping
(
"/batch/{ids}"
)
public
R
deleteDataThemeBatch
(
@PathVariable
List
<
String
>
ids
)
{
dataThemeService
.
deleteDataThemeBatch
(
ids
);
return
R
.
ok
();
}
}
datax-modules/data-factory-service-parent/data-factory-service/src/main/java/cn/datax/service/data/factory/dao/DataThemeDao.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
service
.
data
.
factory
.
dao
;
import
cn.datax.common.base.BaseDao
;
import
cn.datax.service.data.factory.api.entity.DataThemeEntity
;
import
org.apache.ibatis.annotations.Mapper
;
/**
* <p>
* 数据主题信息表 Mapper 接口
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Mapper
public
interface
DataThemeDao
extends
BaseDao
<
DataThemeEntity
>
{
}
datax-modules/data-factory-service-parent/data-factory-service/src/main/java/cn/datax/service/data/factory/mapstruct/DataThemeMapper.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
service
.
data
.
factory
.
mapstruct
;
import
cn.datax.common.mapstruct.EntityMapper
;
import
cn.datax.service.data.factory.api.dto.DataThemeDto
;
import
cn.datax.service.data.factory.api.entity.DataThemeEntity
;
import
cn.datax.service.data.factory.api.vo.DataThemeVo
;
import
org.mapstruct.Mapper
;
/**
* <p>
* 数据主题信息表 Mapper 实体映射
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Mapper
(
componentModel
=
"spring"
)
public
interface
DataThemeMapper
extends
EntityMapper
<
DataThemeDto
,
DataThemeEntity
,
DataThemeVo
>
{
}
datax-modules/data-factory-service-parent/data-factory-service/src/main/java/cn/datax/service/data/factory/service/DataThemeService.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
service
.
data
.
factory
.
service
;
import
cn.datax.service.data.factory.api.entity.DataThemeEntity
;
import
cn.datax.service.data.factory.api.dto.DataThemeDto
;
import
cn.datax.common.base.BaseService
;
import
java.util.List
;
/**
* <p>
* 数据主题信息表 服务类
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
public
interface
DataThemeService
extends
BaseService
<
DataThemeEntity
>
{
DataThemeEntity
saveDataTheme
(
DataThemeDto
dataTheme
);
DataThemeEntity
updateDataTheme
(
DataThemeDto
dataTheme
);
DataThemeEntity
getDataThemeById
(
String
id
);
void
deleteDataThemeById
(
String
id
);
void
deleteDataThemeBatch
(
List
<
String
>
ids
);
}
datax-modules/data-factory-service-parent/data-factory-service/src/main/java/cn/datax/service/data/factory/service/impl/DataThemeServiceImpl.java
0 → 100644
View file @
99cb89cd
package
cn
.
datax
.
service
.
data
.
factory
.
service
.
impl
;
import
cn.datax.service.data.factory.api.entity.DataThemeEntity
;
import
cn.datax.service.data.factory.api.dto.DataThemeDto
;
import
cn.datax.service.data.factory.service.DataThemeService
;
import
cn.datax.service.data.factory.mapstruct.DataThemeMapper
;
import
cn.datax.service.data.factory.dao.DataThemeDao
;
import
cn.datax.common.base.BaseServiceImpl
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Propagation
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.List
;
/**
* <p>
* 数据主题信息表 服务实现类
* </p>
*
* @author yuwei
* @since 2020-07-26
*/
@Service
@Transactional
(
propagation
=
Propagation
.
SUPPORTS
,
readOnly
=
true
,
rollbackFor
=
Exception
.
class
)
public
class
DataThemeServiceImpl
extends
BaseServiceImpl
<
DataThemeDao
,
DataThemeEntity
>
implements
DataThemeService
{
@Autowired
private
DataThemeDao
dataThemeDao
;
@Autowired
private
DataThemeMapper
dataThemeMapper
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
DataThemeEntity
saveDataTheme
(
DataThemeDto
dataThemeDto
)
{
DataThemeEntity
dataTheme
=
dataThemeMapper
.
toEntity
(
dataThemeDto
);
dataThemeDao
.
insert
(
dataTheme
);
return
dataTheme
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
DataThemeEntity
updateDataTheme
(
DataThemeDto
dataThemeDto
)
{
DataThemeEntity
dataTheme
=
dataThemeMapper
.
toEntity
(
dataThemeDto
);
dataThemeDao
.
updateById
(
dataTheme
);
return
dataTheme
;
}
@Override
public
DataThemeEntity
getDataThemeById
(
String
id
)
{
DataThemeEntity
dataThemeEntity
=
super
.
getById
(
id
);
return
dataThemeEntity
;
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
deleteDataThemeById
(
String
id
)
{
dataThemeDao
.
deleteById
(
id
);
}
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
void
deleteDataThemeBatch
(
List
<
String
>
ids
)
{
dataThemeDao
.
deleteBatchIds
(
ids
);
}
}
datax-modules/data-factory-service-parent/data-factory-service/src/main/resources/mapper/DataSetMapper.xml
View file @
99cb89cd
...
...
@@ -11,9 +11,9 @@
<result
column=
"create_dept"
property=
"createDept"
/>
<result
column=
"update_by"
property=
"updateBy"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"remark"
property=
"remark"
/>
<result
column=
"source_id"
property=
"sourceId"
/>
<result
column=
"set_name"
property=
"setName"
/>
<result
column=
"remark"
property=
"remark"
/>
<result
column=
"set_sql"
property=
"setSql"
/>
<result
column=
"schema_json"
property=
"schemaConfig"
typeHandler=
"com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"
/>
...
...
@@ -28,7 +28,8 @@
create_dept,
update_by,
update_time,
source_id, set_name, remark, set_sql, schema_json
remark,
source_id, set_name, set_sql, schema_json
</sql>
</mapper>
datax-modules/data-factory-service-parent/data-factory-service/src/main/resources/mapper/DataSourceMapper.xml
View file @
99cb89cd
...
...
@@ -11,9 +11,10 @@
<result
column=
"create_dept"
property=
"createDept"
/>
<result
column=
"update_by"
property=
"updateBy"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"remark"
property=
"remark"
/>
<result
column=
"db_type"
property=
"dbType"
/>
<result
column=
"source_name"
property=
"sourceName"
/>
<result
column=
"
remark"
property=
"remark
"
/>
<result
column=
"
theme_id"
property=
"themeId
"
/>
<result
column=
"db_schema"
property=
"dbSchema"
typeHandler=
"com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"
/>
</resultMap>
...
...
@@ -26,7 +27,8 @@
create_dept,
update_by,
update_time,
db_type, source_name, source_desc, remark, db_schema
remark,
db_type, source_name, theme_id, db_schema
</sql>
</mapper>
datax-modules/data-factory-service-parent/data-factory-service/src/main/resources/mapper/DataThemeMapper.xml
0 → 100644
View file @
99cb89cd
<?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.factory.dao.DataThemeDao"
>
<!-- 通用查询映射结果 -->
<resultMap
id=
"BaseResultMap"
type=
"cn.datax.service.data.factory.api.entity.DataThemeEntity"
>
<result
column=
"id"
property=
"id"
/>
<result
column=
"status"
property=
"status"
/>
<result
column=
"create_by"
property=
"createBy"
/>
<result
column=
"create_time"
property=
"createTime"
/>
<result
column=
"create_dept"
property=
"createDept"
/>
<result
column=
"update_by"
property=
"updateBy"
/>
<result
column=
"update_time"
property=
"updateTime"
/>
<result
column=
"remark"
property=
"remark"
/>
<result
column=
"theme_name"
property=
"themeName"
/>
</resultMap>
<!-- 通用查询结果列 -->
<sql
id=
"Base_Column_List"
>
id,
status,
create_by,
create_time,
create_dept,
update_by,
update_time,
remark,
theme_name
</sql>
</mapper>
datax-ui/src/api/factory/datatheme.js
0 → 100644
View file @
99cb89cd
import
request
from
'@/utils/request'
export
function
listDataTheme
(
data
)
{
return
request
({
url
:
'/data/factory/dataThemes/list'
,
method
:
'get'
,
params
:
data
})
}
export
function
pageDataTheme
(
data
)
{
return
request
({
url
:
'/data/factory/dataThemes/page'
,
method
:
'get'
,
params
:
data
})
}
export
function
getDataTheme
(
id
)
{
return
request
({
url
:
'/data/factory/dataThemes/'
+
id
,
method
:
'get'
})
}
export
function
delDataTheme
(
id
)
{
return
request
({
url
:
'/data/factory/dataThemes/'
+
id
,
method
:
'delete'
})
}
export
function
delDataThemes
(
ids
)
{
return
request
({
url
:
'/data/factory/dataThemes/batch/'
+
ids
,
method
:
'delete'
})
}
export
function
addDataTheme
(
data
)
{
return
request
({
url
:
'/data/factory/dataThemes'
,
method
:
'post'
,
data
:
data
})
}
export
function
updateDataTheme
(
data
)
{
return
request
({
url
:
'/data/factory/dataThemes/'
+
data
.
id
,
method
:
'put'
,
data
:
data
})
}
datax-ui/src/views/factory/datasource/DataSourceAdd.vue
View file @
99cb89cd
...
...
@@ -24,6 +24,17 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"数据主题"
prop=
"themeId"
>
<el-select
v-model=
"form.themeId"
placeholder=
"请选择数据主题"
>
<el-option
v-for=
"item in themeOptions"
:key=
"item.id"
:label=
"item.themeName"
:value=
"item.id"
:disabled=
"item.status === '0'"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"数据源名称"
prop=
"sourceName"
>
<el-input
v-model=
"form.sourceName"
placeholder=
"请输入数据源名称"
/>
</el-form-item>
...
...
@@ -72,6 +83,7 @@
<
script
>
import
{
addDataSource
,
checkConnection
}
from
'@/api/factory/datasource'
import
{
listDataTheme
}
from
'@/api/factory/datatheme'
export
default
{
name
:
'DataSourceAdd'
,
...
...
@@ -109,6 +121,7 @@ export default {
form
:
{
id
:
undefined
,
dbType
:
undefined
,
themeId
:
undefined
,
sourceName
:
undefined
,
dbSchema
:
{},
status
:
'1'
,
...
...
@@ -117,7 +130,10 @@ export default {
// 表单校验
rules
:
{
dbType
:
[
{
required
:
true
,
message
:
'数据源类型不能为空'
,
trigger
:
'blur'
}
{
required
:
true
,
message
:
'数据源类型不能为空'
,
trigger
:
'change'
}
],
themeId
:
[
{
required
:
true
,
message
:
'数据主题不能为空'
,
trigger
:
'change'
}
],
sourceName
:
[
{
required
:
true
,
message
:
'数据源名称不能为空'
,
trigger
:
'blur'
}
...
...
@@ -154,7 +170,9 @@ export default {
// 状态数据字典
statusOptions
:
[],
// 数据源类型数据字典
dbTypeOptions
:
[]
dbTypeOptions
:
[],
// 数据主题数据字典
themeOptions
:
[]
}
},
created
()
{
...
...
@@ -168,11 +186,19 @@ export default {
this
.
dbTypeOptions
=
response
.
data
}
})
this
.
getDataThemeList
()
},
methods
:
{
showCard
()
{
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
getDataThemeList
()
{
listDataTheme
().
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
themeOptions
=
response
.
data
}
})
},
/** 步骤条下一步 */
handleNextStep
()
{
this
.
$refs
[
'form'
].
validate
(
valid
=>
{
...
...
datax-ui/src/views/factory/datasource/DataSourceDetail.vue
View file @
99cb89cd
...
...
@@ -24,6 +24,17 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"数据主题"
prop=
"themeId"
>
<el-select
v-model=
"form.themeId"
>
<el-option
v-for=
"item in themeOptions"
:key=
"item.id"
:label=
"item.themeName"
:value=
"item.id"
:disabled=
"item.status === '0'"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"数据源名称"
prop=
"sourceName"
>
<el-input
v-model=
"form.sourceName"
placeholder=
"请输入数据源名称"
/>
</el-form-item>
...
...
@@ -69,6 +80,7 @@
<
script
>
import
{
getDataSource
,
checkConnection
}
from
'@/api/factory/datasource'
import
{
listDataTheme
}
from
'@/api/factory/datatheme'
export
default
{
name
:
'DataSourceDetail'
,
...
...
@@ -102,7 +114,9 @@ export default {
// 状态数据字典
statusOptions
:
[],
// 数据源类型数据字典
dbTypeOptions
:
[]
dbTypeOptions
:
[],
// 数据主题数据字典
themeOptions
:
[]
}
},
created
()
{
...
...
@@ -117,6 +131,7 @@ export default {
this
.
dbTypeOptions
=
response
.
data
}
})
this
.
getDataThemeList
()
},
mounted
()
{
this
.
getDataSource
(
this
.
data
.
id
)
...
...
@@ -125,6 +140,13 @@ export default {
showCard
()
{
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
getDataThemeList
()
{
listDataTheme
().
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
themeOptions
=
response
.
data
}
})
},
/** 获取详情 */
getDataSource
:
function
(
id
)
{
getDataSource
(
id
).
then
(
response
=>
{
...
...
datax-ui/src/views/factory/datasource/DataSourceEdit.vue
View file @
99cb89cd
...
...
@@ -24,6 +24,17 @@
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"数据主题"
prop=
"themeId"
>
<el-select
v-model=
"form.themeId"
placeholder=
"请选择数据主题"
>
<el-option
v-for=
"item in themeOptions"
:key=
"item.id"
:label=
"item.themeName"
:value=
"item.id"
:disabled=
"item.status === '0'"
></el-option>
</el-select>
</el-form-item>
<el-form-item
label=
"数据源名称"
prop=
"sourceName"
>
<el-input
v-model=
"form.sourceName"
placeholder=
"请输入数据源名称"
/>
</el-form-item>
...
...
@@ -72,6 +83,7 @@
<
script
>
import
{
getDataSource
,
updateDataSource
,
checkConnection
}
from
'@/api/factory/datasource'
import
{
listDataTheme
}
from
'@/api/factory/datatheme'
export
default
{
name
:
'DataSourceEdit'
,
...
...
@@ -110,7 +122,10 @@ export default {
// 表单校验
rules
:
{
dbType
:
[
{
required
:
true
,
message
:
'数据源类型不能为空'
,
trigger
:
'blur'
}
{
required
:
true
,
message
:
'数据源类型不能为空'
,
trigger
:
'change'
}
],
themeId
:
[
{
required
:
true
,
message
:
'数据主题不能为空'
,
trigger
:
'change'
}
],
sourceName
:
[
{
required
:
true
,
message
:
'数据源名称不能为空'
,
trigger
:
'blur'
}
...
...
@@ -140,7 +155,9 @@ export default {
// 状态数据字典
statusOptions
:
[],
// 数据源类型数据字典
dbTypeOptions
:
[]
dbTypeOptions
:
[],
// 数据主题数据字典
themeOptions
:
[]
}
},
created
()
{
...
...
@@ -155,6 +172,7 @@ export default {
this
.
dbTypeOptions
=
response
.
data
}
})
this
.
getDataThemeList
()
},
mounted
()
{
this
.
getDataSource
(
this
.
data
.
id
)
...
...
@@ -163,6 +181,13 @@ export default {
showCard
()
{
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
getDataThemeList
()
{
listDataTheme
().
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
themeOptions
=
response
.
data
}
})
},
/** 获取详情 */
getDataSource
:
function
(
id
)
{
getDataSource
(
id
).
then
(
response
=>
{
...
...
datax-ui/src/views/factory/datatheme/DataThemeAdd.vue
0 → 100644
View file @
99cb89cd
<
template
>
<div>
<el-card
class=
"box-card"
shadow=
"always"
>
<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-back"
round
@
click=
"showCard"
>
返回
</el-button>
</el-button-group>
</div>
<div
:style=
"classCardbody"
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
<el-form-item
label=
"主题名称"
prop=
"themeName"
>
<el-input
v-model=
"form.themeName"
placeholder=
"请输入主题名称"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio
v-for=
"dict in statusOptions"
:key=
"dict.id"
:label=
"dict.itemText"
>
{{
dict
.
itemValue
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"form.remark"
type=
"textarea"
placeholder=
"请输入内容"
/>
</el-form-item>
</el-form>
</div>
</el-card>
</div>
</
template
>
<
script
>
import
{
addDataTheme
}
from
'@/api/factory/datatheme'
export
default
{
name
:
'DataThemeAdd'
,
props
:
{
data
:
{
type
:
Object
,
default
:
function
()
{
return
{}
}
}
},
data
()
{
return
{
classCardbody
:
{
overflow
:
'auto'
,
height
:
document
.
body
.
offsetHeight
-
240
+
'px'
},
title
:
'数据主题新增'
,
// 展示切换
showOptions
:
{
data
:
{},
showList
:
true
,
showAdd
:
false
,
showEdit
:
false
,
showDetail
:
false
},
// 保存按钮
loadingOptions
:
{
loading
:
false
,
loadingText
:
'保存'
,
isDisabled
:
false
},
// 表单参数
form
:
{
status
:
'1'
},
// 表单校验
rules
:
{
themeName
:
[
{
required
:
true
,
message
:
'主题名称不能为空'
,
trigger
:
'blur'
}
]
},
// 状态数据字典
statusOptions
:
[]
}
},
created
()
{
this
.
getDicts
(
'sys_common_status'
).
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
statusOptions
=
response
.
data
}
})
},
methods
:
{
showCard
()
{
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
/** 提交按钮 */
submitForm
:
function
()
{
this
.
$refs
[
'form'
].
validate
(
valid
=>
{
if
(
valid
)
{
this
.
loadingOptions
.
loading
=
true
this
.
loadingOptions
.
loadingText
=
'保存中...'
this
.
loadingOptions
.
isDisabled
=
true
addDataTheme
(
this
.
form
).
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
$message
.
success
(
'保存成功'
)
setTimeout
(()
=>
{
// 2秒后跳转列表页
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
2000
)
}
else
{
this
.
$message
.
error
(
'保存失败'
)
this
.
loadingOptions
.
loading
=
false
this
.
loadingOptions
.
loadingText
=
'保存'
this
.
loadingOptions
.
isDisabled
=
false
}
})
}
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
datax-ui/src/views/factory/datatheme/DataThemeDetail.vue
0 → 100644
View file @
99cb89cd
<
template
>
<div>
<el-card
class=
"box-card"
shadow=
"always"
>
<div
slot=
"header"
class=
"clearfix"
>
<span>
{{
title
}}
</span>
<el-button-group
style=
"float: right;"
>
<el-button
size=
"mini"
icon=
"el-icon-back"
round
@
click=
"showCard"
>
返回
</el-button>
</el-button-group>
</div>
<div
:style=
"classCardbody"
>
<el-form
ref=
"form"
:model=
"form"
label-width=
"80px"
disabled
>
<el-form-item
label=
"主题名称"
prop=
"themeName"
>
<el-input
v-model=
"form.themeName"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio
v-for=
"dict in statusOptions"
:key=
"dict.id"
:label=
"dict.itemText"
>
{{
dict
.
itemValue
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"form.remark"
type=
"textarea"
/>
</el-form-item>
</el-form>
</div>
</el-card>
</div>
</
template
>
<
script
>
import
{
getDataTheme
}
from
'@/api/factory/datatheme'
export
default
{
name
:
'DataThemeDetail'
,
props
:
{
data
:
{
type
:
Object
,
default
:
function
()
{
return
{}
}
}
},
data
()
{
return
{
classCardbody
:
{
overflow
:
'auto'
,
height
:
document
.
body
.
offsetHeight
-
240
+
'px'
},
title
:
'数据主题详情'
,
// 展示切换
showOptions
:
{
data
:
{},
showList
:
true
,
showAdd
:
false
,
showEdit
:
false
,
showDetail
:
false
},
// 表单参数
form
:
{},
// 状态数据字典
statusOptions
:
[]
}
},
created
()
{
console
.
log
(
'id:'
+
this
.
data
.
id
)
this
.
getDicts
(
'sys_common_status'
).
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
statusOptions
=
response
.
data
}
})
},
mounted
()
{
this
.
getDataTheme
(
this
.
data
.
id
)
},
methods
:
{
showCard
()
{
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
/** 获取详情 */
getDataTheme
:
function
(
id
)
{
getDataTheme
(
id
).
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
form
=
response
.
data
}
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
datax-ui/src/views/factory/datatheme/DataThemeEdit.vue
0 → 100644
View file @
99cb89cd
<
template
>
<div>
<el-card
class=
"box-card"
shadow=
"always"
>
<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-back"
round
@
click=
"showCard"
>
返回
</el-button>
</el-button-group>
</div>
<div
:style=
"classCardbody"
>
<el-form
ref=
"form"
:model=
"form"
:rules=
"rules"
label-width=
"80px"
>
<el-form-item
label=
"主题名称"
prop=
"themeName"
>
<el-input
v-model=
"form.themeName"
placeholder=
"请输入主题名称"
/>
</el-form-item>
<el-form-item
label=
"状态"
prop=
"status"
>
<el-radio-group
v-model=
"form.status"
>
<el-radio
v-for=
"dict in statusOptions"
:key=
"dict.id"
:label=
"dict.itemText"
>
{{
dict
.
itemValue
}}
</el-radio>
</el-radio-group>
</el-form-item>
<el-form-item
label=
"备注"
prop=
"remark"
>
<el-input
v-model=
"form.remark"
type=
"textarea"
placeholder=
"请输入内容"
/>
</el-form-item>
</el-form>
</div>
</el-card>
</div>
</
template
>
<
script
>
import
{
getDataTheme
,
updateDataTheme
}
from
'@/api/factory/datatheme'
export
default
{
name
:
'DataThemeEdit'
,
props
:
{
data
:
{
type
:
Object
,
default
:
function
()
{
return
{}
}
}
},
data
()
{
return
{
classCardbody
:
{
overflow
:
'auto'
,
height
:
document
.
body
.
offsetHeight
-
240
+
'px'
},
title
:
'数据主题编辑'
,
// 展示切换
showOptions
:
{
data
:
{},
showList
:
true
,
showAdd
:
false
,
showEdit
:
false
,
showDetail
:
false
},
// 保存按钮
loadingOptions
:
{
loading
:
false
,
loadingText
:
'保存'
,
isDisabled
:
false
},
// 表单参数
form
:
{},
// 表单校验
rules
:
{
themeName
:
[
{
required
:
true
,
message
:
'主题名称不能为空'
,
trigger
:
'blur'
}
]
},
// 状态数据字典
statusOptions
:
[]
}
},
created
()
{
console
.
log
(
'id:'
+
this
.
data
.
id
)
this
.
getDicts
(
'sys_common_status'
).
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
statusOptions
=
response
.
data
}
})
},
mounted
()
{
this
.
getDataTheme
(
this
.
data
.
id
)
},
methods
:
{
showCard
()
{
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
/** 获取详情 */
getDataTheme
:
function
(
id
)
{
getDataTheme
(
id
).
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
form
=
response
.
data
}
})
},
/** 提交按钮 */
submitForm
:
function
()
{
this
.
$refs
[
'form'
].
validate
(
valid
=>
{
if
(
valid
)
{
this
.
loadingOptions
.
loading
=
true
this
.
loadingOptions
.
loadingText
=
'保存中...'
this
.
loadingOptions
.
isDisabled
=
true
updateDataTheme
(
this
.
form
).
then
(
response
=>
{
if
(
response
.
success
)
{
this
.
$message
.
success
(
'保存成功'
)
setTimeout
(()
=>
{
// 2秒后跳转列表页
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
2000
)
}
else
{
this
.
$message
.
error
(
'保存失败'
)
this
.
loadingOptions
.
loading
=
false
this
.
loadingOptions
.
loadingText
=
'保存'
this
.
loadingOptions
.
isDisabled
=
false
}
})
}
})
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
datax-ui/src/views/factory/datatheme/DataThemeList.vue
0 → 100644
View file @
99cb89cd
<
template
>
<div>
<el-card
class=
"box-card"
shadow=
"always"
>
<el-form
:model=
"queryParams"
ref=
"queryForm"
:inline=
"true"
>
<el-form-item
label=
"主题名称"
prop=
"themeName"
>
<el-input
v-model=
"queryParams.themeName"
placeholder=
"请输入主题名称"
clearable
size=
"small"
@
keyup
.
enter
.
native=
"handleQuery"
/>
</el-form-item>
<el-form-item>
<el-button
type=
"primary"
icon=
"el-icon-search"
size=
"mini"
@
click=
"handleQuery"
>
搜索
</el-button>
<el-button
icon=
"el-icon-refresh"
size=
"mini"
@
click=
"resetQuery"
>
重置
</el-button>
</el-form-item>
</el-form>
<el-row
type=
"flex"
justify=
"space-between"
>
<el-col
:span=
"12"
>
<el-button-group>
<el-button
type=
"primary"
icon=
"el-icon-plus"
size=
"mini"
@
click=
"handleAdd"
v-hasPerm=
"['factory:datatheme:add']"
>
新增
</el-button>
<el-button
type=
"success"
icon=
"el-icon-edit-outline"
size=
"mini"
:disabled=
"single"
@
click=
"handleEdit"
v-hasPerm=
"['factory:datatheme:edit']"
>
修改
</el-button>
<el-button
type=
"info"
icon=
"el-icon-view"
size=
"mini"
:disabled=
"single"
@
click=
"handleDetail"
v-hasPerm=
"['factory:datatheme:detail']"
>
详情
</el-button>
<el-button
type=
"danger"
icon=
"el-icon-delete"
size=
"mini"
:disabled=
"multiple"
@
click=
"handleBatchDelete"
v-hasPerm=
"['factory:datatheme:remove']"
>
删除
</el-button>
</el-button-group>
</el-col>
<el-col
:span=
"12"
>
<div
class=
"right-toolbar"
>
<el-tooltip
content=
"密度"
effect=
"dark"
placement=
"top"
>
<el-dropdown
trigger=
"click"
@
command=
"handleCommand"
>
<el-button
circle
size=
"mini"
>
<svg-icon
class-name=
"size-icon"
icon-class=
"colum-height"
/>
</el-button>
<el-dropdown-menu
slot=
"dropdown"
>
<el-dropdown-item
command=
"medium"
>
正常
</el-dropdown-item>
<el-dropdown-item
command=
"small"
>
中等
</el-dropdown-item>
<el-dropdown-item
command=
"mini"
>
紧凑
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-tooltip>
<el-tooltip
content=
"刷新"
effect=
"dark"
placement=
"top"
>
<el-button
circle
size=
"mini"
@
click=
"handleRefresh"
>
<svg-icon
class-name=
"size-icon"
icon-class=
"shuaxin"
/>
</el-button>
</el-tooltip>
<el-tooltip
content=
"列设置"
effect=
"dark"
placement=
"top"
>
<el-popover
placement=
"bottom"
width=
"100"
trigger=
"click"
>
<el-checkbox-group
v-model=
"checkedTableColumns"
@
change=
"handleCheckedColsChange"
>
<el-checkbox
v-for=
"(item, index) in tableColumns"
:key=
"index"
:label=
"item.prop"
>
{{
item
.
label
}}
</el-checkbox>
</el-checkbox-group>
<span
slot=
"reference"
>
<el-button
circle
size=
"mini"
>
<svg-icon
class-name=
"size-icon"
icon-class=
"shezhi"
/>
</el-button>
</span>
</el-popover>
</el-tooltip>
</div>
</el-col>
</el-row>
<el-table
v-loading=
"loading"
:data=
"dataThemeList"
@
selection-change=
"handleSelectionChange"
border
tooltip-effect=
"dark"
:size=
"tableSize"
:height=
"tableHeight"
style=
"width: 100%;margin: 15px 0;"
>
<el-table-column
type=
"selection"
width=
"55"
align=
"center"
/>
<el-table-column
label=
"序号"
width=
"55"
align=
"center"
>
<template
slot-scope=
"scope"
>
<span>
{{
scope
.
$index
+
1
}}
</span>
</
template
>
</el-table-column>
<
template
v-for=
"(item, index) in tableColumns"
>
<el-table-column
v-if=
"item.show"
:prop=
"item.prop"
:label=
"item.label"
:key=
"index"
:formatter=
"item.formatter"
align=
"center"
show-overflow-tooltip
/>
</
template
>
<el-table-column
label=
"操作"
align=
"center"
class-name=
"small-padding fixed-width"
>
<
template
slot-scope=
"scope"
>
<el-popover
placement=
"left"
trigger=
"click"
>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-edit-outline"
@
click=
"handleEdit(scope.row)"
v-hasPerm=
"['factory:datatheme:edit']"
>
修改
</el-button>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-view"
@
click=
"handleDetail(scope.row)"
v-hasPerm=
"['factory:datatheme:detail']"
>
详情
</el-button>
<el-button
size=
"mini"
type=
"text"
icon=
"el-icon-delete"
@
click=
"handleDelete(scope.row)"
v-hasPerm=
"['factory:datatheme:remove']"
>
删除
</el-button>
<el-button
slot=
"reference"
>
操作
</el-button>
</el-popover>
</
template
>
</el-table-column>
</el-table>
<el-pagination
:page-sizes=
"[10, 20, 50, 100]"
layout=
"total, sizes, prev, pager, next, jumper"
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
:current-page
.
sync=
"queryParams.pageNum"
:page-size
.
sync=
"queryParams.pageSize"
:total=
"total"
></el-pagination>
</el-card>
</div>
</template>
<
script
>
import
{
pageDataTheme
,
delDataTheme
,
delDataThemes
}
from
'@/api/factory/datatheme'
export
default
{
name
:
'DataThemeList'
,
data
()
{
return
{
tableHeight
:
document
.
body
.
offsetHeight
-
340
+
'px'
,
// 展示切换
showOptions
:
{
data
:
{},
showList
:
true
,
showAdd
:
false
,
showEdit
:
false
,
showDetail
:
false
},
// 遮罩层
loading
:
true
,
// 选中数组
ids
:
[],
// 非单个禁用
single
:
true
,
// 非多个禁用
multiple
:
true
,
// 表格头
tableColumns
:
[
{
prop
:
'themeName'
,
label
:
'主题名称'
,
show
:
true
},
{
prop
:
'status'
,
label
:
'状态'
,
show
:
true
,
formatter
:
this
.
statusFormatter
},
{
prop
:
'createTime'
,
label
:
'创建时间'
,
show
:
true
}
],
// 默认选择中表格头
checkedTableColumns
:
[],
tableSize
:
'medium'
,
// 主题表格数据
dataThemeList
:
[],
// 总数据条数
total
:
0
,
// 查询参数
queryParams
:
{
pageNum
:
1
,
pageSize
:
20
,
themeName
:
''
}
}
},
created
()
{
this
.
getList
()
},
mounted
()
{
this
.
initCols
()
},
methods
:
{
/** 查询主题列表 */
getList
()
{
this
.
loading
=
true
pageDataTheme
(
this
.
queryParams
).
then
(
response
=>
{
this
.
loading
=
false
if
(
response
.
success
)
{
const
{
data
}
=
response
this
.
dataThemeList
=
data
.
data
this
.
total
=
data
.
total
}
})
},
initCols
()
{
this
.
checkedTableColumns
=
this
.
tableColumns
.
map
(
col
=>
col
.
prop
)
},
handleCheckedColsChange
(
val
)
{
this
.
tableColumns
.
forEach
(
col
=>
{
if
(
!
this
.
checkedTableColumns
.
includes
(
col
.
prop
))
{
col
.
show
=
false
}
else
{
col
.
show
=
true
}
})
},
handleCommand
(
command
)
{
this
.
tableSize
=
command
},
/** 搜索按钮操作 */
handleQuery
()
{
this
.
queryParams
.
pageNum
=
1
this
.
getList
()
},
/** 重置按钮操作 */
resetQuery
()
{
this
.
$refs
[
'queryForm'
].
resetFields
()
this
.
handleQuery
()
},
/** 刷新列表 */
handleRefresh
()
{
this
.
getList
()
},
/** 多选框选中数据 */
handleSelectionChange
(
selection
)
{
this
.
ids
=
selection
.
map
(
item
=>
item
.
id
)
this
.
single
=
selection
.
length
!==
1
this
.
multiple
=
!
selection
.
length
},
/** 新增按钮操作 */
handleAdd
()
{
this
.
showOptions
.
data
=
{}
this
.
showOptions
.
showList
=
false
this
.
showOptions
.
showAdd
=
true
this
.
showOptions
.
showEdit
=
false
this
.
showOptions
.
showDetail
=
false
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
/** 修改按钮操作 */
handleEdit
(
row
)
{
this
.
showOptions
.
data
.
id
=
row
.
id
||
this
.
ids
[
0
]
this
.
showOptions
.
showList
=
false
this
.
showOptions
.
showAdd
=
false
this
.
showOptions
.
showEdit
=
true
this
.
showOptions
.
showDetail
=
false
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
/** 详情按钮操作 */
handleDetail
(
row
)
{
this
.
showOptions
.
data
.
id
=
row
.
id
||
this
.
ids
[
0
]
this
.
showOptions
.
showList
=
false
this
.
showOptions
.
showAdd
=
false
this
.
showOptions
.
showEdit
=
false
this
.
showOptions
.
showDetail
=
true
this
.
$emit
(
'showCard'
,
this
.
showOptions
)
},
/** 删除按钮操作 */
handleDelete
(
row
)
{
this
.
$confirm
(
'选中数据将被永久删除, 是否继续?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
}).
then
(()
=>
{
delDataTheme
(
row
.
id
)
}).
then
(()
=>
{
this
.
$message
.
success
(
'删除成功'
)
this
.
getList
()
}).
catch
(()
=>
{
})
},
/** 批量删除按钮操作 */
handleBatchDelete
()
{
if
(
!
this
.
ids
.
length
)
{
this
.
$message
({
message
:
'请先选择需要操作的数据'
,
type
:
'warning'
})
}
this
.
$message
.
warning
(
'不支持批量删除'
)
},
handleSizeChange
(
val
)
{
console
.
log
(
`每页
${
val
}
条`
)
this
.
queryParams
.
pageNum
=
1
this
.
queryParams
.
pageSize
=
val
this
.
getList
()
},
handleCurrentChange
(
val
)
{
console
.
log
(
`当前页:
${
val
}
`
)
this
.
queryParams
.
pageNum
=
val
this
.
getList
()
},
statusFormatter
(
row
,
column
,
cellValue
,
index
)
{
let
dictText
=
row
.
status_dictText
if
(
cellValue
===
'1'
)
{
return
<
el
-
tag
type
=
"success"
>
{
dictText
}
<
/el-tag
>
}
else
{
return
<
el
-
tag
type
=
"warning"
>
{
dictText
}
<
/el-tag
>
}
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
.right-toolbar
{
float
:
right
;
}
</
style
>
datax-ui/src/views/factory/datatheme/index.vue
0 → 100644
View file @
99cb89cd
<
template
>
<div
class=
"app-container"
>
<transition
name=
"el-zoom-in-center"
>
<data-theme-list
v-if=
"options.showList"
@
showCard=
"showCard"
></data-theme-list>
</transition>
<transition
name=
"el-zoom-in-top"
>
<data-theme-add
v-if=
"options.showAdd"
:data=
"options.data"
@
showCard=
"showCard"
></data-theme-add>
</transition>
<transition
name=
"el-zoom-in-top"
>
<data-theme-edit
v-if=
"options.showEdit"
:data=
"options.data"
@
showCard=
"showCard"
></data-theme-edit>
</transition>
<transition
name=
"el-zoom-in-bottom"
>
<data-theme-detail
v-if=
"options.showDetail"
:data=
"options.data"
@
showCard=
"showCard"
></data-theme-detail>
</transition>
</div>
</
template
>
<
script
>
import
DataThemeList
from
'./DataThemeList'
import
DataThemeAdd
from
'./DataThemeAdd'
import
DataThemeEdit
from
'./DataThemeEdit'
import
DataThemeDetail
from
'./DataThemeDetail'
export
default
{
name
:
'DataTheme'
,
components
:
{
DataThemeList
,
DataThemeAdd
,
DataThemeEdit
,
DataThemeDetail
},
data
()
{
return
{
options
:
{
data
:
{},
showList
:
true
,
showAdd
:
false
,
showEdit
:
false
,
showDetail
:
false
}
}
},
methods
:
{
showCard
(
data
)
{
Object
.
assign
(
this
.
options
,
data
)
}
}
}
</
script
>
<
style
lang=
"scss"
scoped
>
</
style
>
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