Commit bde04da0 by yuwei

2.0.0项目初始化

parent 4a45ded6
......@@ -10,6 +10,7 @@ import cn.datax.service.data.factory.api.vo.DataSetVo;
import cn.datax.service.data.factory.api.query.DataSetQuery;
import cn.datax.service.data.factory.mapstruct.DataSetMapper;
import cn.datax.service.data.factory.service.DataSetService;
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;
......@@ -82,6 +83,7 @@ public class DataSetController extends BaseController {
@GetMapping("/page")
public R getDataSetPage(DataSetQuery dataSetQuery) {
QueryWrapper<DataSetEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataSetQuery.getSetName()), "set_name", dataSetQuery.getSetName());
IPage<DataSetEntity> page = dataSetService.page(new Page<>(dataSetQuery.getPageNum(), dataSetQuery.getPageSize()), queryWrapper);
List<DataSetVo> collect = page.getRecords().stream().map(dataSetMapper::toVO).collect(Collectors.toList());
JsonPage<DataSetVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
......
......@@ -15,6 +15,7 @@ import cn.datax.service.data.factory.api.query.DbDataQuery;
import cn.datax.service.data.factory.api.vo.DataSourceVo;
import cn.datax.service.data.factory.mapstruct.DataSourceMapper;
import cn.datax.service.data.factory.service.DataSourceService;
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;
......@@ -88,6 +89,7 @@ public class DataSourceController extends BaseController {
@GetMapping("/page")
public R getDataSourcePage(DataSourceQuery dataSourceQuery) {
QueryWrapper<DataSourceEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataSourceQuery.getSourceName()), "source_name", dataSourceQuery.getSourceName());
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);
......
......@@ -9,6 +9,6 @@ import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(contextId = "apiMaskServiceFeign", value = "datax-service-data-market", fallbackFactory = ApiMaskServiceFeignFallbackFactory.class)
public interface ApiMaskServiceFeign {
@GetMapping("/apiMask/api/{apiId}")
@GetMapping("/apiMasks/api/{apiId}")
R getApiMaskByApiId(@PathVariable("apiId") String apiId);
}
......@@ -9,6 +9,6 @@ import org.springframework.web.bind.annotation.PathVariable;
@FeignClient(contextId = "dataApiServiceFeign", value = "datax-service-data-market", fallbackFactory = DataApiServiceFeignFallbackFactory.class)
public interface DataApiServiceFeign {
@GetMapping("/dataApi/{id}")
@GetMapping("/dataApis/{id}")
R getDataApiById(@PathVariable("id") String id);
}
package cn.datax.service.data.market.controller;
import cn.datax.common.base.BaseController;
import cn.datax.common.core.DataConstant;
import cn.datax.common.core.JsonPage;
import cn.datax.common.core.R;
import cn.datax.common.validate.ValidationGroups;
......@@ -10,6 +11,7 @@ import cn.datax.service.data.market.api.query.ApiMaskQuery;
import cn.datax.service.data.market.api.vo.ApiMaskVo;
import cn.datax.service.data.market.mapstruct.ApiMaskMapper;
import cn.datax.service.data.market.service.ApiMaskService;
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;
......@@ -34,7 +36,7 @@ import java.util.stream.Collectors;
*/
@Api(tags = {"数据API脱敏信息表"})
@RestController
@RequestMapping("/apiMask")
@RequestMapping("/apiMasks")
public class ApiMaskController extends BaseController {
@Autowired
......@@ -71,6 +73,16 @@ public class ApiMaskController extends BaseController {
return R.ok().setData(apiMaskMapper.toVO(apiMaskEntity));
}
@ApiOperation(value = "获取列表", notes = "")
@GetMapping("/list")
public R getApiMaskList() {
QueryWrapper<ApiMaskEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", DataConstant.EnableState.ENABLE.getKey());
List<ApiMaskEntity> list = apiMaskService.list(queryWrapper);
List<ApiMaskVo> collect = list.stream().map(apiMaskMapper::toVO).collect(Collectors.toList());
return R.ok().setData(collect);
}
/**
* 分页查询信息
*
......@@ -84,6 +96,7 @@ public class ApiMaskController extends BaseController {
@GetMapping("/page")
public R getApiMaskPage(ApiMaskQuery apiMaskQuery) {
QueryWrapper<ApiMaskEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(apiMaskQuery.getMaskName()), "mask_name", apiMaskQuery.getMaskName());
IPage<ApiMaskEntity> page = apiMaskService.page(new Page<>(apiMaskQuery.getPageNum(), apiMaskQuery.getPageSize()), queryWrapper);
List<ApiMaskVo> collect = page.getRecords().stream().map(apiMaskMapper::toVO).collect(Collectors.toList());
JsonPage<ApiMaskVo> jsonPage = new JsonPage<>(page.getCurrent(), page.getSize(), page.getTotal(), collect);
......@@ -131,4 +144,12 @@ public class ApiMaskController extends BaseController {
apiMaskService.deleteApiMaskById(id);
return R.ok();
}
@ApiOperation(value = "批量删除", notes = "根据url的ids来批量删除对象")
@ApiImplicitParam(name = "ids", value = "ID集合", required = true, dataType = "List", paramType = "path")
@DeleteMapping("/batch/{ids}")
public R deleteApiMaskBatch(@PathVariable List<String> ids) {
apiMaskService.deleteApiMaskBatch(ids);
return R.ok();
}
}
package cn.datax.service.data.market.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;
......@@ -11,6 +12,7 @@ import cn.datax.service.data.market.api.query.DataApiQuery;
import cn.datax.service.data.market.api.vo.SqlParseVo;
import cn.datax.service.data.market.mapstruct.DataApiMapper;
import cn.datax.service.data.market.service.DataApiService;
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;
......@@ -37,7 +39,7 @@ import java.util.stream.Collectors;
*/
@Api(tags = {"数据API信息表"})
@RestController
@RequestMapping("/dataApi")
@RequestMapping("/dataApis")
public class DataApiController extends BaseController {
@Autowired
......@@ -60,6 +62,16 @@ public class DataApiController extends BaseController {
return R.ok().setData(dataApiMapper.toVO(dataApiEntity));
}
@ApiOperation(value = "获取列表", notes = "")
@GetMapping("/list")
public R getDataApiList() {
QueryWrapper<DataApiEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", DataConstant.EnableState.ENABLE.getKey());
List<DataApiEntity> list = dataApiService.list(queryWrapper);
List<DataApiVo> collect = list.stream().map(dataApiMapper::toVO).collect(Collectors.toList());
return R.ok().setData(collect);
}
/**
* 分页查询信息
*
......@@ -73,6 +85,7 @@ public class DataApiController extends BaseController {
@GetMapping("/page")
public R getDataApiPage(DataApiQuery dataApiQuery) {
QueryWrapper<DataApiEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StrUtil.isNotBlank(dataApiQuery.getApiName()), "api_name", dataApiQuery.getApiName());
queryWrapper.select("id", "status", "create_time", "api_name", "api_version", "api_url", "req_method", "res_type", "remark");
IPage<DataApiEntity> page = dataApiService.page(new Page<>(dataApiQuery.getPageNum(), dataApiQuery.getPageSize()), queryWrapper);
List<DataApiVo> collect = page.getRecords().stream().map(dataApiMapper::toVO).collect(Collectors.toList());
......@@ -122,6 +135,14 @@ public class DataApiController extends BaseController {
return R.ok();
}
@ApiOperation(value = "批量删除", notes = "根据url的ids来批量删除对象")
@ApiImplicitParam(name = "ids", value = "ID集合", required = true, dataType = "List", paramType = "path")
@DeleteMapping("/batch/{ids}")
public R deleteDataApiBatch(@PathVariable List<String> ids) {
dataApiService.deleteDataApiBatch(ids);
return R.ok();
}
/**
* SQL解析
* @param sqlParseDto
......
......@@ -4,6 +4,8 @@ import cn.datax.common.base.BaseService;
import cn.datax.service.data.market.api.dto.ApiMaskDto;
import cn.datax.service.data.market.api.entity.ApiMaskEntity;
import java.util.List;
/**
* <p>
* 数据API脱敏信息表 服务类
......@@ -23,4 +25,6 @@ public interface ApiMaskService extends BaseService<ApiMaskEntity> {
ApiMaskEntity getApiMaskByApiId(String apiId);
void deleteApiMaskById(String id);
void deleteApiMaskBatch(List<String> ids);
}
......@@ -6,6 +6,8 @@ import cn.datax.service.data.market.api.dto.DataApiDto;
import cn.datax.common.base.BaseService;
import cn.datax.service.data.market.api.vo.SqlParseVo;
import java.util.List;
/**
* <p>
* 数据API信息表 服务类
......@@ -24,5 +26,7 @@ public interface DataApiService extends BaseService<DataApiEntity> {
void deleteDataApiById(String id);
void deleteDataApiBatch(List<String> ids);
SqlParseVo sqlParse(SqlParseDto sqlParseDto);
}
......@@ -17,6 +17,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
* <p>
* 数据API脱敏信息表 服务实现类
......@@ -71,4 +73,10 @@ public class ApiMaskServiceImpl extends BaseServiceImpl<ApiMaskDao, ApiMaskEntit
public void deleteApiMaskById(String id) {
apiMaskDao.deleteById(id);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteApiMaskBatch(List<String> ids) {
apiMaskDao.deleteBatchIds(ids);
}
}
......@@ -105,6 +105,12 @@ public class DataApiServiceImpl extends BaseServiceImpl<DataApiDao, DataApiEntit
}
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteDataApiBatch(List<String> ids) {
dataApiDao.deleteBatchIds(ids);
}
@Override
public SqlParseVo sqlParse(SqlParseDto sqlParseDto) {
String sql = sqlParseDto.getSqlText();
sql = sql.replace(SqlBuilderUtil.getInstance().MARK_KEY_START, "");
......
import request from '@/utils/request'
export function getApiCall (data) {
return request({
url: '/data/api/v1/list',
method: 'get',
params: data
})
}
export function postApiCall (data) {
return request({
url: '/data/api/v1/list',
method: 'post',
data: data
})
}
import request from '@/utils/request'
export function listApiMask (data) {
return request({
url: '/data/market/apiMasks/list',
method: 'get',
params: data
})
}
export function pageApiMask (data) {
return request({
url: '/data/market/apiMasks/page',
method: 'get',
params: data
})
}
export function getApiMask (id) {
return request({
url: '/data/market/apiMasks/' + id,
method: 'get'
})
}
export function delApiMask (id) {
return request({
url: '/data/market/apiMasks/' + id,
method: 'delete'
})
}
export function delApiMasks (ids) {
return request({
url: '/data/market/apiMasks/batch/' + ids,
method: 'delete'
})
}
export function addApiMask (data) {
return request({
url: '/data/market/apiMasks',
method: 'post',
data: data
})
}
export function updateApiMask (data) {
return request({
url: '/data/market/apiMasks/' + data.id,
method: 'put',
data: data
})
}
import request from '@/utils/request'
export function listDataApi (data) {
return request({
url: '/data/market/dataApis/list',
method: 'get',
params: data
})
}
export function pageDataApi (data) {
return request({
url: '/data/market/dataApis/page',
method: 'get',
params: data
})
}
export function getDataApi (id) {
return request({
url: '/data/market/dataApis/' + id,
method: 'get'
})
}
export function delDataApi (id) {
return request({
url: '/data/market/dataApis/' + id,
method: 'delete'
})
}
export function delDataApis (ids) {
return request({
url: '/data/market/dataApis/batch/' + ids,
method: 'delete'
})
}
export function addDataApi (data) {
return request({
url: '/data/market/dataApis',
method: 'post',
data: data
})
}
export function updateDataApi (data) {
return request({
url: '/data/market/dataApis/' + data.id,
method: 'put',
data: data
})
}
<template>
<div class="app-container">
<transition name="el-zoom-in-center">
<api-mask-list v-if="options.showList" @showCard="showCard"></api-mask-list>
</transition>
<transition name="el-zoom-in-top">
<api-mask-add v-if="options.showAdd" :data="options.data" @showCard="showCard"></api-mask-add>
</transition>
<transition name="el-zoom-in-top">
<api-mask-edit v-if="options.showEdit" :data="options.data" @showCard="showCard"></api-mask-edit>
</transition>
<transition name="el-zoom-in-bottom">
<api-mask-detail v-if="options.showDetail" :data="options.data" @showCard="showCard"></api-mask-detail>
</transition>
</div>
</template>
<script>
import ApiMaskList from './ApiMaskList'
import ApiMaskAdd from './ApiMaskAdd'
import ApiMaskEdit from './ApiMaskEdit'
import ApiMaskDetail from './ApiMaskDetail'
export default {
name: 'ApiMask',
components: { ApiMaskList, ApiMaskAdd, ApiMaskEdit, ApiMaskDetail },
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>
<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-s-data" round @click="dataPreview">数据预览</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" label-width="80px" disabled>
<el-form-item label="数据源" prop="sourceId">
<el-select v-model="form.sourceId" placeholder="请选择数据源">
<el-option
v-for="source in sourceOptions"
:key="source.id"
:label="source.sourceName"
:value="source.id"
:disabled="source.status === '0'"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据集名称" prop="setName">
<el-input v-model="form.setName" placeholder="请输入数据集名称" />
</el-form-item>
<el-form-item label="数据集sql" prop="setSql">
<sql-editor
ref="sqleditor"
:value="form.setSql"
:readOnly="true"
style="height: 300px;"
></sql-editor>
</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>
<el-drawer
:visible.sync="drawer"
direction="btt"
:with-header="false">
<el-table :data="previewData.dataList" stripe border
:max-height="200"
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>
<template v-for="(column, index) in previewData.columnList">
<el-table-column
:prop="column"
:label="column"
:key="index"
align="center"
show-overflow-tooltip
/>
</template>
</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="previewData.pageNum"
:page-size.sync="previewData.pageSize"
:total="previewData.dataTotal"
></el-pagination>
</el-drawer>
</div>
</el-card>
</div>
</template>
<script>
import { getDataSet } from '@/api/factory/dataset'
import { listDataSource, queryByPage } from '@/api/factory/datasource'
import SqlEditor from '@/components/SqlEditor'
export default {
name: 'DataApiDetail',
components: {
SqlEditor
},
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: [],
// 数据源数据字典
sourceOptions: [],
drawer: false,
previewData: {
dataList: [],
columnList: [],
pageNum: 1,
pageSize: 20,
dataTotal: 0
}
}
},
created () {
console.log('id:' + this.data.id)
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
this.getDataSourceList()
this.getDataSet(this.data.id)
},
methods: {
showCard () {
this.$emit('showCard', this.showOptions)
},
getDataSourceList () {
listDataSource().then(response => {
if (response.success) {
this.sourceOptions = response.data
}
})
},
/** 获取详情 */
getDataSet: function (id) {
getDataSet(id).then(response => {
if (response.success) {
this.form = response.data
this.$refs.sqleditor.editor.setValue(this.form.setSql)
}
})
},
dataPreview () {
if (!this.form.sourceId) {
return
}
if (!this.form.setSql) {
return
}
let data = {}
data.dataSourceId = this.form.sourceId
data.sql = this.form.setSql
data.pageNum = this.previewData.pageNum
data.pageSize = this.previewData.pageSize
queryByPage(data).then(response => {
if (response.success) {
const { data } = response
let dataList = data.data || []
let columnList = []
if (dataList.length > 0) {
columnList = Object.keys(dataList[0])
}
this.previewData.dataList = dataList
this.previewData.columnList = columnList
this.previewData.dataTotal = data.total
this.drawer = true
}
})
},
handleSizeChange (val) {
this.previewData.pageNum = 1
this.previewData.pageSize = val
this.dataPreview()
},
handleCurrentChange (val) {
this.previewData.pageNum = val
this.dataPreview()
}
}
}
</script>
<style lang="scss" scoped>
</style>
<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="sourceId">
<el-select v-model="form.sourceId" placeholder="请选择数据源">
<el-option
v-for="source in sourceOptions"
:key="source.id"
:label="source.sourceName"
:value="source.id"
:disabled="source.status === '0'"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="数据集名称" prop="setName">
<el-input v-model="form.setName" placeholder="请输入数据集名称" />
</el-form-item>
<el-form-item label="数据集sql" prop="setSql">
<sql-editor
ref="sqleditor"
:value="form.setSql"
@changeTextarea="changeTextarea($event)"
style="height: 300px;"
></sql-editor>
</el-form-item>
<el-form-item>
<el-button size="mini" type="primary" @click="formaterSql">Sql格式化</el-button>
<el-button size="mini" type="primary" @click="dataPreview">预览</el-button>
</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>
<el-drawer
:visible.sync="drawer"
direction="btt"
:with-header="false">
<el-table :data="previewData.dataList" stripe border
:max-height="200"
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>
<template v-for="(column, index) in previewData.columnList">
<el-table-column
:prop="column"
:label="column"
:key="index"
align="center"
show-overflow-tooltip
/>
</template>
</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="previewData.pageNum"
:page-size.sync="previewData.pageSize"
:total="previewData.dataTotal"
></el-pagination>
</el-drawer>
</div>
</el-card>
</div>
</template>
<script>
import { getDataSet, updateDataSet } from '@/api/factory/dataset'
import { listDataSource, queryByPage } from '@/api/factory/datasource'
import sqlFormatter from 'sql-formatter'
import SqlEditor from '@/components/SqlEditor'
export default {
name: 'DataApiEdit',
components: {
SqlEditor
},
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: {
setName: [
{ required: true, message: '数据集名称不能为空', trigger: 'blur' }
]
},
// 状态数据字典
statusOptions: [],
// 数据源数据字典
sourceOptions: [],
drawer: false,
previewData: {
dataList: [],
columnList: [],
pageNum: 1,
pageSize: 20,
dataTotal: 0
}
}
},
created () {
console.log('id:' + this.data.id)
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
this.getDataSourceList()
this.getDataSet(this.data.id)
},
methods: {
showCard () {
this.$emit('showCard', this.showOptions)
},
getDataSourceList () {
listDataSource().then(response => {
if (response.success) {
this.sourceOptions = response.data
}
})
},
/** 获取详情 */
getDataSet: function (id) {
getDataSet(id).then(response => {
if (response.success) {
this.form = response.data
this.$refs.sqleditor.editor.setValue(this.form.setSql)
}
})
},
// 绑定编辑器value值的变化
changeTextarea (val) {
this.$set(this.form, 'setSql', val)
},
formaterSql (val) {
this.$refs.sqleditor.editor.setValue(sqlFormatter.format(this.$refs.sqleditor.editor.getValue()))
},
dataPreview () {
if (!this.form.sourceId) {
return
}
if (!this.form.setSql) {
return
}
let data = {}
data.dataSourceId = this.form.sourceId
data.sql = this.form.setSql
data.pageNum = this.previewData.pageNum
data.pageSize = this.previewData.pageSize
queryByPage(data).then(response => {
if (response.success) {
const { data } = response
let dataList = data.data || []
let columnList = []
if (dataList.length > 0) {
columnList = Object.keys(dataList[0])
}
this.previewData.dataList = dataList
this.previewData.columnList = columnList
this.previewData.dataTotal = data.total
this.drawer = true
}
})
},
handleSizeChange (val) {
this.previewData.pageNum = 1
this.previewData.pageSize = val
this.dataPreview()
},
handleCurrentChange (val) {
this.previewData.pageNum = val
this.dataPreview()
},
/** 提交按钮 */
submitForm: function () {
this.$refs['form'].validate(valid => {
if (valid) {
this.loadingOptions.loading = true
this.loadingOptions.loadingText = '保存中...'
this.loadingOptions.isDisabled = true
updateDataSet(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
}
}).catch(error => {
this.$message.error(error.data.msg || '保存失败')
this.loadingOptions.loading = false
this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false
})
}
})
}
}
}
</script>
<style lang="scss" scoped>
</style>
<template>
<div class="app-container">
<transition name="el-zoom-in-center">
<data-api-list v-if="options.showList" @showCard="showCard"></data-api-list>
</transition>
<transition name="el-zoom-in-top">
<data-api-add v-if="options.showAdd" :data="options.data" @showCard="showCard"></data-api-add>
</transition>
<transition name="el-zoom-in-top">
<data-api-edit v-if="options.showEdit" :data="options.data" @showCard="showCard"></data-api-edit>
</transition>
<transition name="el-zoom-in-bottom">
<data-api-detail v-if="options.showDetail" :data="options.data" @showCard="showCard"></data-api-detail>
</transition>
</div>
</template>
<script>
import DataApiList from './DataApiList'
import DataApiAdd from './DataApiAdd'
import DataApiEdit from './DataApiEdit'
import DataApiDetail from './DataApiDetail'
export default {
name: 'DataApi',
components: { DataApiList, DataApiAdd, DataApiEdit, DataApiDetail },
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>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment