Commit 1a97dd64 by yuwei

项目初始化

parent 44b84151
......@@ -84,7 +84,7 @@ spring:
args:
name: dataSqlConsoleHystrix
fallbackUri: forward:/fallback
# 数据市场中心
# 数据集市中心
- id: datax-service-data-market
uri: lb://datax-service-data-market
predicates:
......
......@@ -10,7 +10,7 @@
<packaging>pom</packaging>
<modelVersion>4.0.0</modelVersion>
<version>2.0.0</version>
<description>数据市场</description>
<description>数据集市</description>
<artifactId>data-market-service-parent</artifactId>
<modules>
......
......@@ -7,6 +7,7 @@ import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.io.Serializable;
/**
* <p>
* 元数据变更记录表 实体DTO
......
import request from '@/utils/request'
export function runData (data) {
return request({
url: '/data/console/v1/run',
method: 'post',
data: data
})
}
export function stopData (data) {
return request({
url: '/data/console/v1/stop',
method: 'post',
data: data
})
}
import request from '@/utils/request'
export function listDataSet (data) {
return request({
url: '/data/factory/dataSets/list',
method: 'get',
params: data
})
}
export function pageDataSet (data) {
return request({
url: '/data/factory/dataSets/page',
method: 'get',
params: data
})
}
export function getDataSet (id) {
return request({
url: '/data/factory/dataSets/' + id,
method: 'get'
})
}
export function delDataSet (id) {
return request({
url: '/data/factory/dataSets/' + id,
method: 'delete'
})
}
export function delDataSets (ids) {
return request({
url: '/data/factory/dataSets/batch/' + ids,
method: 'delete'
})
}
export function addDataSet (data) {
return request({
url: '/data/factory/dataSets',
method: 'post',
data: data
})
}
export function updateDataSet (data) {
return request({
url: '/data/factory/dataSets/' + data.id,
method: 'put',
data: data
})
}
export function sqlAnalyse (data) {
return request({
url: '/data/factory/dataSets/sql/analyse',
method: 'post',
data: data
})
}
import request from '@/utils/request'
export function listDataSource (data) {
return request({
url: '/data/factory/dataSources/list',
method: 'get',
params: data
})
}
export function pageDataSource (data) {
return request({
url: '/data/factory/dataSources/page',
method: 'get',
params: data
})
}
export function getDataSource (id) {
return request({
url: '/data/factory/dataSources/' + id,
method: 'get'
})
}
export function delDataSource (id) {
return request({
url: '/data/factory/dataSources/' + id,
method: 'delete'
})
}
export function delDataSources (ids) {
return request({
url: '/data/factory/dataSources/batch/' + ids,
method: 'delete'
})
}
export function addDataSource (data) {
return request({
url: '/data/factory/dataSources',
method: 'post',
data: data
})
}
export function updateDataSource (data) {
return request({
url: '/data/factory/dataSources/' + data.id,
method: 'put',
data: data
})
}
export function checkConnection (data) {
return request({
url: '/data/factory/dataSources/checkConnection',
method: 'post',
data: data
})
}
export function queryByPage (data) {
return request({
url: '/data/factory/dataSources/queryByPage',
method: 'post',
data: data
})
}
export function getDbTables (id) {
return request({
url: '/data/factory/dataSources/' + id + '/tables',
method: 'get'
})
}
export function getDbTableColumns (id, tableName) {
return request({
url: '/data/factory/dataSources/' + id + '/' + tableName + '/columns',
method: 'get'
})
}
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
})
}
import request from '@/utils/request'
export function sync (id) {
return request({
url: '/data/metadata/databases/sync/' + id,
method: 'post'
})
}
export function word (id) {
return request({
url: '/data/metadata/databases/word/' + id,
method: 'post',
responseType: 'blob'
})
}
......@@ -50,8 +50,14 @@ export const constantRoutes = [
},
{
path: '/chart/make',
component: () => import('@/views/chartboard/chart/make'),
path: '/data/chart',
component: () => import('@/views/visual/datachart/chart'),
hidden: true
},
{
path: '/data/board',
component: () => import('@/views/visual/databoard/board'),
hidden: true
},
......
<template>
<div class="app-container">
<el-card class="box-card" shadow="always">
<div slot="header" class="clearfix">
<span>{{ title }}</span>
</div>
<div :style="classCardbody">
<el-row>
<el-col :span="24">
<el-select v-model="sqlDataSource" 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-button size="mini" round @click="runData" :disabled="sqlExecuting">运行</el-button>
<el-button size="mini" round @click="stopData" :disabled="!sqlExecuting">停止</el-button>
<el-button size="mini" round @click="formaterSql" :disabled="sqlExecuting">格式化</el-button>
<el-button size="mini" round @click="refreshData" :disabled="sqlExecuting">重置</el-button>
</el-col>
</el-row>
<el-row>
<el-col :span="24">
<sql-editor
ref="sqleditor"
:value="sqlText"
@changeTextarea="changeTextarea($event)"
style="height: 300px;margin: 20px 0;"
></sql-editor>
</el-col>
</el-row>
<el-row>
<el-col>
<div v-if="sqlExecuting" v-loading="sqlExecuting">数据加载中...</div>
<div v-else>
<div v-if="sqlConsole.length > 0">
<el-tabs type="border-card" v-model="activeTabName">
<el-tab-pane label="信息" name="table0">
<pre>{{executeResultInfo}}</pre>
</el-tab-pane>
<el-tab-pane v-for="(item,index) in sqlConsole" :key="(index+1)" :name="'table'+(index+1)" :label="'结果'+(index+1)">
<el-table :data="item.dataList" stripe border
:max-height="300"
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 item.columnList">
<el-table-column
:prop="column"
:label="column"
:key="index"
align="center"
show-overflow-tooltip
/>
</template>
</el-table>
</el-tab-pane>
</el-tabs>
</div>
</div>
</el-col>
</el-row>
</div>
</el-card>
</div>
</template>
<script>
import sqlFormatter from 'sql-formatter'
import SqlEditor from '@/components/SqlEditor'
import { listDataSource } from '@/api/factory/datasource'
import { runData, stopData } from '@/api/factory/dataconsole'
export default {
name: 'SqlConsole',
components: {
SqlEditor
},
data () {
return {
classCardbody: {
overflow: 'auto',
height: document.body.offsetHeight - 240 + 'px'
},
title: 'SQL工作台',
// 数据源数据字典
sourceOptions: [],
sqlDataSource: undefined,
sqlText: undefined,
sqlExecuting: false,
activeTabName: 'table0',
sqlExecutorId: undefined,
sqlConsole: [],
executeResultInfo: undefined
}
},
created () {
this.getDataSourceList()
},
methods: {
getDataSourceList () {
listDataSource().then(response => {
if (response.success) {
this.sourceOptions = response.data
}
})
},
runData () {
if (!this.sqlDataSource) {
this.$message.error('数据源不能为空')
return
}
if (!this.sqlText) {
this.$message.error('查询SQL不能为空')
return
}
this.sqlExecuting = true
this.sqlExecutorId = (new Date()).getTime() + Math.ceil(Math.random() * 1000)
this.sqlConsole = []
let data = {}
data.sqlKey = this.sqlExecutorId
data.sourceId = this.sqlDataSource
data.sqlText = this.sqlText
runData(data).then(response => {
if (response.success) {
const { data } = response
let resultStr = ''
for (let i = 0; i < data.length; i++) {
let item = data[i]
resultStr += item.sql
resultStr += '\n> 状态:' + ((item.success) ? '成功' : '失败')
if (item.count && item.count >= 0) {
resultStr += '\n> 影响行数:' + item.count
}
resultStr += '\n> 耗时:' + (item.time || 0) / 1000 + 's'
resultStr += '\n\n'
}
this.executeResultInfo = resultStr
this.sqlConsole = data
this.sqlExecuting = false
}
})
},
stopData () {
let data = {}
data.sqlKey = this.sqlExecutorId
stopData(data).then(response => {
if (response.success) {
this.sqlExecuting = false
this.$message.success('停止成功')
} else {
this.$message.error('停止失败')
}
})
},
changeTextarea (val) {
this.sqlText = val
},
formaterSql () {
if (!this.sqlText) {
return
}
this.$refs.sqleditor.editor.setValue(sqlFormatter.format(this.$refs.sqleditor.editor.getValue()))
},
refreshData () {
if (!this.sqlText) {
return
}
this.sqlExecuting = false
this.activeTabName = 'table0'
this.sqlExecutorId = undefined
this.sqlText = undefined
this.$refs.sqleditor.editor.setValue('')
this.sqlConsole = []
this.executeResultInfo = undefined
}
}
}
</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-divider content-position="left">数据集</el-divider>
<el-row>
<el-col :span="24" style="padding: 0 20px;">
<sql-editor
ref="sqleditor"
:value="form.setSql"
:readOnly="true"
style="height: 300px;"
></sql-editor>
</el-col>
</el-row>
<el-divider content-position="left">数据模型定义</el-divider>
<el-row style="height: 300px;padding: 0 20px;">
<el-col :span="12" style="border: 1px dashed #999;height: 100%;">
<div class="tag-group" >
<el-tag v-for="(item, index) in columnList" :key="index" class="draggable-tag">
{{ item.col }}
</el-tag>
</div>
</el-col>
<el-col :span="12" style="box-shadow: 0 0 1px 1px #ccc;height: 100%;">
<el-row>
<el-divider content-position="left">维度列</el-divider>
<el-col>
<div style="height: 90px; border: 1px dashed #999; margin: 0 10px;">
<el-tag v-for="(item, index) in dimensionList" :key="index" class="draggable-item">
{{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}
</el-tag>
</div>
</el-col>
</el-row>
<el-row>
<el-divider content-position="left">指标列</el-divider>
<el-col>
<div style="height: 90px; border: 1px dashed #999; margin: 0 10px;">
<el-tag v-for="(item, index) in measureList" :key="index" class="draggable-item">
{{ item.alias ? item.alias + '(' + item.col + ')' : item.col }}
</el-tag>
</div>
</el-col>
</el-row>
</el-col>
</el-row>
<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: 'DataSetDetail',
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: [],
// 解析字段
columns: [],
columnList: [],
dimensionList: [],
measureList: [],
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()
},
mounted () {
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.columns = this.form.schemaConfig.columns || []
if (this.columns && this.columns.length > 0) {
this.dimensionList = this.form.schemaConfig.dimensions || []
this.measureList = this.form.schemaConfig.measures || []
this.columnList = this.columns.filter(x => [...this.dimensionList, ...this.measureList].every(y => y.col !== x)).map(function (item) {
let json = {}
json.col = item
json.alias = ''
return json
})
}
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>
.draggable-tag {
margin: 10px;
cursor: move;
}
.draggable-item {
cursor: move;
margin: 5px 5px;
display: inline-block;
border: 1px solid #ebecef;
height: 32px;
line-height: 30px;
border-radius: 4px;
.draggable-item-handle {
background-color: #ecf5ff;
border-color: #d9ecff;
display: inline-block;
height: 32px;
padding: 0 10px;
line-height: 30px;
font-size: 12px;
color: #409EFF;
border-width: 1px;
border-style: solid;
box-sizing: border-box;
white-space: nowrap;
cursor: pointer;
margin-left: -5px;
}
}
</style>
<template>
<div class="app-container">
<transition name="el-zoom-in-center">
<data-set-list v-if="options.showList" @showCard="showCard"></data-set-list>
</transition>
<transition name="el-zoom-in-top">
<data-set-add v-if="options.showAdd" :data="options.data" @showCard="showCard"></data-set-add>
</transition>
<transition name="el-zoom-in-top">
<data-set-edit v-if="options.showEdit" :data="options.data" @showCard="showCard"></data-set-edit>
</transition>
<transition name="el-zoom-in-bottom">
<data-set-detail v-if="options.showDetail" :data="options.data" @showCard="showCard"></data-set-detail>
</transition>
</div>
</template>
<script>
import DataSetList from './DataSetList'
import DataSetAdd from './DataSetAdd'
import DataSetEdit from './DataSetEdit'
import DataSetDetail from './DataSetDetail'
export default {
name: 'DataSet',
components: { DataSetList, DataSetAdd, DataSetEdit, DataSetDetail },
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-plus" v-if="active == 2" 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-steps :active="active" finish-status="success" align-center>
<el-step title="数据源信息"></el-step>
<el-step title="连接信息"></el-step>
</el-steps>
<el-form ref="form" :model="form" :rules="rules" label-width="80px" v-if="active == 1">
<el-form-item label="数据源类型" prop="dbType">
<el-select v-model="form.dbType">
<el-option
v-for="item in dbTypeOptions"
:key="item.id"
:label="item.itemValue"
:value="item.itemText"
></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>
<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-form ref="form2" :model="form2" :rules="rules2" label-width="80px" v-if="active == 2">
<el-form-item label="主机" prop="host">
<el-input v-model="form2.host" placeholder="请输入主机" />
</el-form-item>
<el-form-item label="端口" prop="port">
<el-input v-model="form2.port" placeholder="请输入端口" />
</el-form-item>
<el-form-item label="服务名" prop="sid" v-if="form.dbType === '3' || form.dbType === '4'">
<el-input v-model="form2.sid" placeholder="请输入服务名" />
</el-form-item>
<el-form-item label="数据库" prop="dbName" v-if="form.dbType !== '3' && form.dbType !== '4'">
<el-input v-model="form2.dbName" placeholder="请输入数据库" />
</el-form-item>
<el-form-item label="用户名" prop="username">
<el-input v-model="form2.username" placeholder="请输入用户名" />
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="form2.password" placeholder="请输入密码" />
</el-form-item>
<el-form-item>
<el-button size="mini" type="primary" @click="handleCheckConnection">连通性检测</el-button>
</el-form-item>
</el-form>
<el-button style="margin-top: 12px;" @click="handleNextStep" v-if="active == 1">下一步</el-button>
<el-button style="margin-top: 12px;" @click="handleLastStep" v-if="active == 2">上一步</el-button>
</div>
</el-card>
</div>
</template>
<script>
import { addDataSource, checkConnection } from '@/api/factory/datasource'
import { listDataTheme } from '@/api/factory/datatheme'
export default {
name: 'DataSourceAdd',
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
},
active: 1,
// 表单参数
form: {
id: undefined,
dbType: undefined,
themeId: undefined,
sourceName: undefined,
dbSchema: {},
status: '1',
remark: undefined
},
// 表单校验
rules: {
dbType: [
{ required: true, message: '数据源类型不能为空', trigger: 'change' }
],
themeId: [
{ required: true, message: '数据主题不能为空', trigger: 'change' }
],
sourceName: [
{ required: true, message: '数据源名称不能为空', trigger: 'blur' }
]
},
form2: {
host: undefined,
port: undefined,
dbName: undefined,
username: undefined,
password: undefined,
sid: undefined
},
rules2: {
host: [
{ required: true, message: '主机不能为空', trigger: 'blur' }
],
port: [
{ required: true, message: '端口不能为空', trigger: 'blur' }
],
sid: [
{ required: true, message: '服务名不能为空', trigger: 'blur' }
],
dbName: [
{ required: true, message: '数据库不能为空', trigger: 'blur' }
],
username: [
{ required: true, message: '用户名不能为空', trigger: 'blur' }
],
password: [
{ required: true, message: '密码不能为空', trigger: 'blur' }
]
},
// 状态数据字典
statusOptions: [],
// 数据源类型数据字典
dbTypeOptions: [],
// 数据主题数据字典
themeOptions: []
}
},
created () {
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
this.getDicts('data_db_type').then(response => {
if (response.success) {
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 => {
if (valid) {
this.active++
}
})
},
/** 步骤条上一步 */
handleLastStep () {
this.active--
},
/** 检测数据库连通性 */
handleCheckConnection () {
this.$refs['form2'].validate(valid => {
if (valid) {
this.form.dbSchema = this.form2
checkConnection(this.form).then(response => {
if (response.success) {
this.$message.success('连接成功')
}
})
}
})
},
/** 提交按钮 */
submitForm: function () {
this.$refs['form2'].validate(valid => {
if (valid) {
this.form.dbSchema = this.form2
this.loadingOptions.loading = true
this.loadingOptions.loadingText = '保存中...'
this.loadingOptions.isDisabled = true
addDataSource(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>
<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-coin" type="primary" round @click="handleSync">元数据同步</el-button>
<el-button size="mini" icon="el-icon-coin" type="primary" round @click="handleWord">数据库文档</el-button>
<el-button size="mini" icon="el-icon-coin" type="primary" round @click="handleCheckConnection" v-if="active == 2">连通性检测</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-steps>
<el-form ref="form" :model="form" label-width="80px" v-if="active == 1" disabled>
<el-form-item label="数据源类型" prop="dbType">
<el-select v-model="form.dbType">
<el-option
v-for="item in dbTypeOptions"
:key="item.id"
:label="item.itemValue"
:value="item.itemText"
></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>
<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-form ref="form2" :model="form2" label-width="80px" v-if="active == 2" disabled>
<el-form-item label="主机" prop="host">
<el-input v-model="form2.host" placeholder="请输入主机" />
</el-form-item>
<el-form-item label="端口" prop="port">
<el-input v-model="form2.port" placeholder="请输入端口" />
</el-form-item>
<el-form-item label="服务名" prop="sid" v-if="form.dbType === '3' || form.dbType === '4'">
<el-input v-model="form2.sid" placeholder="请输入服务名" />
</el-form-item>
<el-form-item label="数据库" prop="dbName" v-if="form.dbType !== '3' || form.dbType !== '4'">
<el-input v-model="form2.dbName" placeholder="请输入数据库" />
</el-form-item>
<el-form-item label="用户名" prop="username">
<el-input v-model="form2.username" placeholder="请输入用户名" />
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="form2.password" placeholder="请输入密码" />
</el-form-item>
</el-form>
<el-button style="margin-top: 12px;" @click="handleNextStep" v-if="active == 1">下一步</el-button>
<el-button style="margin-top: 12px;" @click="handleLastStep" v-if="active == 2">上一步</el-button>
</div>
</el-card>
</div>
</template>
<script>
import { getDataSource, checkConnection } from '@/api/factory/datasource'
import { listDataTheme } from '@/api/factory/datatheme'
import { sync, word } from '@/api/metadata/metadata'
export default {
name: 'DataSourceDetail',
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
},
active: 1,
// 表单参数
form: {},
form2: {},
// 状态数据字典
statusOptions: [],
// 数据源类型数据字典
dbTypeOptions: [],
// 数据主题数据字典
themeOptions: []
}
},
created () {
console.log('id:' + this.data.id)
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
this.getDicts('data_db_type').then(response => {
if (response.success) {
this.dbTypeOptions = response.data
}
})
this.getDataThemeList ()
},
mounted () {
this.getDataSource(this.data.id)
},
methods: {
showCard () {
this.$emit('showCard', this.showOptions)
},
getDataThemeList () {
listDataTheme().then(response => {
if (response.success) {
this.themeOptions = response.data
}
})
},
/** 获取详情 */
getDataSource: function (id) {
getDataSource(id).then(response => {
if (response.success) {
this.form = response.data
this.form2 = this.form.dbSchema
}
})
},
/** 步骤条下一步 */
handleNextStep () {
this.$refs['form'].validate(valid => {
if (valid) {
this.active++
}
})
},
/** 步骤条上一步 */
handleLastStep () {
this.active--
},
/** 检测数据库连通性 */
handleCheckConnection () {
checkConnection(this.form).then(response => {
if (response.success) {
this.$message.success('连接成功')
}
})
},
/** 元数据同步 */
handleSync () {
sync(this.data.id).then(response => {
if (response.success) {
this.$message.success('元数据正在后台同步中,请到元数据管理中查看结果')
}
})
},
/** 数据库文档 */
handleWord () {
word(this.data.id).then(response => {
const blob = new Blob([response])
const fileName = '数据库设计文档.doc'
if ('download' in document.createElement('a')) {
// 非IE下载
const elink = document.createElement('a')
elink.download = fileName
elink.style.display = 'none'
elink.href = URL.createObjectURL(blob)
document.body.appendChild(elink)
elink.click()
URL.revokeObjectURL(elink.href)
// 释放URL 对象
document.body.removeChild(elink)
} else {
// IE10+下载
navigator.msSaveBlob(blob, fileName)
}
})
}
}
}
</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" v-if="active == 2" 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-steps :active="active" finish-status="success" align-center>
<el-step title="数据源信息"></el-step>
<el-step title="连接信息"></el-step>
</el-steps>
<el-form ref="form" :model="form" :rules="rules" label-width="80px" v-if="active == 1">
<el-form-item label="数据源类型" prop="dbType">
<el-select v-model="form.dbType">
<el-option
v-for="item in dbTypeOptions"
:key="item.id"
:label="item.itemValue"
:value="item.itemText"
></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>
<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-form ref="form2" :model="form2" :rules="rules2" label-width="80px" v-if="active == 2">
<el-form-item label="主机" prop="host">
<el-input v-model="form2.host" placeholder="请输入主机" />
</el-form-item>
<el-form-item label="端口" prop="port">
<el-input v-model="form2.port" placeholder="请输入端口" />
</el-form-item>
<el-form-item label="服务名" prop="sid" v-if="form.dbType === '3' || form.dbType === '4'">
<el-input v-model="form2.sid" placeholder="请输入服务名" />
</el-form-item>
<el-form-item label="数据库" prop="dbName" v-if="form.dbType !== '3' && form.dbType !== '4'">
<el-input v-model="form2.dbName" placeholder="请输入数据库" />
</el-form-item>
<el-form-item label="用户名" prop="username">
<el-input v-model="form2.username" placeholder="请输入用户名" />
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="form2.password" placeholder="请输入密码" />
</el-form-item>
<el-form-item>
<el-button size="mini" type="primary" @click="handleCheckConnection">连通性检测</el-button>
</el-form-item>
</el-form>
<el-button style="margin-top: 12px;" @click="handleNextStep" v-if="active == 1">下一步</el-button>
<el-button style="margin-top: 12px;" @click="handleLastStep" v-if="active == 2">上一步</el-button>
</div>
</el-card>
</div>
</template>
<script>
import { getDataSource, updateDataSource, checkConnection } from '@/api/factory/datasource'
import { listDataTheme } from '@/api/factory/datatheme'
export default {
name: 'DataSourceEdit',
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
},
active: 1,
// 表单参数
form: {},
// 表单校验
rules: {
dbType: [
{ required: true, message: '数据源类型不能为空', trigger: 'change' }
],
themeId: [
{ required: true, message: '数据主题不能为空', trigger: 'change' }
],
sourceName: [
{ required: true, message: '数据源名称不能为空', trigger: 'blur' }
]
},
form2: {},
rules2: {
host: [
{ required: true, message: '主机不能为空', trigger: 'blur' }
],
port: [
{ required: true, message: '端口不能为空', trigger: 'blur' }
],
sid: [
{ required: true, message: '服务名不能为空', trigger: 'blur' }
],
dbName: [
{ required: true, message: '数据库不能为空', trigger: 'blur' }
],
username: [
{ required: true, message: '用户名不能为空', trigger: 'blur' }
],
password: [
{ required: true, message: '密码不能为空', trigger: 'blur' }
]
},
// 状态数据字典
statusOptions: [],
// 数据源类型数据字典
dbTypeOptions: [],
// 数据主题数据字典
themeOptions: []
}
},
created () {
console.log('id:' + this.data.id)
this.getDicts('sys_common_status').then(response => {
if (response.success) {
this.statusOptions = response.data
}
})
this.getDicts('data_db_type').then(response => {
if (response.success) {
this.dbTypeOptions = response.data
}
})
this.getDataThemeList ()
},
mounted () {
this.getDataSource(this.data.id)
},
methods: {
showCard () {
this.$emit('showCard', this.showOptions)
},
getDataThemeList () {
listDataTheme().then(response => {
if (response.success) {
this.themeOptions = response.data
}
})
},
/** 获取详情 */
getDataSource: function (id) {
getDataSource(id).then(response => {
if (response.success) {
this.form = response.data
this.form2 = this.form.dbSchema
}
})
},
/** 步骤条下一步 */
handleNextStep () {
this.$refs['form'].validate(valid => {
if (valid) {
this.active++
}
})
},
/** 步骤条上一步 */
handleLastStep () {
this.active--
},
/** 检测数据库连通性 */
handleCheckConnection () {
this.$refs['form2'].validate(valid => {
if (valid) {
this.form.dbSchema = this.form2
checkConnection(this.form).then(response => {
if (response.success) {
this.$message.success('连接成功')
}
})
}
})
},
/** 提交按钮 */
submitForm: function () {
this.$refs['form2'].validate(valid => {
if (valid) {
this.form.dbSchema = this.form2
this.loadingOptions.loading = true
this.loadingOptions.loadingText = '保存中...'
this.loadingOptions.isDisabled = true
updateDataSource(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>
<template>
<div class="app-container">
<transition name="el-zoom-in-center">
<data-source-list v-if="options.showList" @showCard="showCard"></data-source-list>
</transition>
<transition name="el-zoom-in-top">
<data-source-add v-if="options.showAdd" :data="options.data" @showCard="showCard"></data-source-add>
</transition>
<transition name="el-zoom-in-top">
<data-source-edit v-if="options.showEdit" :data="options.data" @showCard="showCard"></data-source-edit>
</transition>
<transition name="el-zoom-in-bottom">
<data-source-detail v-if="options.showDetail" :data="options.data" @showCard="showCard"></data-source-detail>
</transition>
</div>
</template>
<script>
import DataSourceList from './DataSourceList'
import DataSourceAdd from './DataSourceAdd'
import DataSourceEdit from './DataSourceEdit'
import DataSourceDetail from './DataSourceDetail'
export default {
name: 'DataSource',
components: { DataSourceList, DataSourceAdd, DataSourceEdit, DataSourceDetail },
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-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>
<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>
<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>
<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>
......@@ -25,7 +25,6 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPerm="['market:apimask:add']"
>新增</el-button>
<el-button
type="success"
......@@ -33,7 +32,6 @@
size="mini"
:disabled="single"
@click="handleEdit"
v-hasPerm="['market:apimask:edit']"
>修改</el-button>
<el-button
type="info"
......@@ -41,7 +39,6 @@
size="mini"
:disabled="single"
@click="handleDetail"
v-hasPerm="['market:apimask:detail']"
>详情</el-button>
<el-button
type="danger"
......@@ -49,7 +46,6 @@
size="mini"
:disabled="multiple"
@click="handleBatchDelete"
v-hasPerm="['market:apimask:remove']"
>删除</el-button>
</el-button-group>
</el-col>
......@@ -129,21 +125,18 @@
type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)"
v-hasPerm="['market:apimask:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleDetail(scope.row)"
v-hasPerm="['market:apimask:detail']"
>详情</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPerm="['market:apimask:remove']"
>删除</el-button>
<el-button slot="reference">操作</el-button>
</el-popover>
......
......@@ -250,7 +250,7 @@
<script>
import { addDataApi, sqlParse } from '@/api/market/dataapi'
import { listDataSource, getDbTables, getDbTableColumns } from '@/api/factory/datasource'
import { listDataSource, getDbTables, getDbTableColumns } from '@/api/metadata/datasource'
import SqlEditor from '@/components/SqlEditor'
export default {
......
......@@ -4,7 +4,7 @@
<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="apiDataCall">执行</el-button>
<el-button size="mini" icon="el-icon-s-data" round @click="apiDataCall">接口调用</el-button>
<el-button size="mini" icon="el-icon-back" round @click="showCard">返回</el-button>
</el-button-group>
</div>
......
......@@ -5,7 +5,7 @@
<span>{{ title }}</span>
<el-button-group style="float: right;">
<el-button size="mini" icon="el-icon-coin" type="primary" round @click="handleWord">接口文档</el-button>
<el-button size="mini" icon="el-icon-s-data" round @click="apiCall">接口调用</el-button>
<el-button size="mini" icon="el-icon-s-data" round @click="apiTry">接口示例</el-button>
<el-button size="mini" icon="el-icon-back" round @click="showCard">返回</el-button>
</el-button-group>
</div>
......@@ -239,7 +239,7 @@
<script>
import { getDataApi, word } from '@/api/market/dataapi'
import { listDataSource, getDbTables, getDbTableColumns } from '@/api/factory/datasource'
import { listDataSource, getDbTables, getDbTableColumns } from '@/api/metadata/datasource'
import SqlEditor from '@/components/SqlEditor'
export default {
......@@ -426,7 +426,7 @@ export default {
}) || []
}
},
apiCall () {
apiTry () {
this.showOptions.data.id = this.data.id
this.showOptions.showList = false
this.showOptions.showAdd = false
......
......@@ -250,7 +250,7 @@
<script>
import { getDataApi, updateDataApi, sqlParse } from '@/api/market/dataapi'
import { listDataSource, getDbTables, getDbTableColumns } from '@/api/factory/datasource'
import { listDataSource, getDbTables, getDbTableColumns } from '@/api/metadata/datasource'
import SqlEditor from '@/components/SqlEditor'
export default {
......
......@@ -25,7 +25,6 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPerm="['market:dataapi:add']"
>新增</el-button>
<el-button
type="success"
......@@ -33,7 +32,6 @@
size="mini"
:disabled="single"
@click="handleEdit"
v-hasPerm="['market:dataapi:edit']"
>修改</el-button>
<el-button
type="info"
......@@ -41,7 +39,6 @@
size="mini"
:disabled="single"
@click="handleDetail"
v-hasPerm="['market:dataapi:detail']"
>详情</el-button>
<el-button
type="danger"
......@@ -49,7 +46,6 @@
size="mini"
:disabled="multiple"
@click="handleBatchDelete"
v-hasPerm="['market:dataapi:remove']"
>删除</el-button>
</el-button-group>
</el-col>
......@@ -129,42 +125,36 @@
type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)"
v-hasPerm="['market:dataapi:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleDetail(scope.row)"
v-hasPerm="['market:dataapi:detail']"
>详情</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPerm="['market:dataapi:remove']"
>删除</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-copy-document"
@click="handleCopy(scope.row)"
v-hasPerm="['market:dataapi:copy']"
>拷贝</el-button>
<el-button v-if="scope.row.status !== '2'"
size="mini"
type="text"
icon="el-icon-upload2"
@click="handleRegister(scope.row)"
v-hasPerm="['market:dataapi:release']"
>发布</el-button>
<el-button v-if="scope.row.status === '2'"
size="mini"
type="text"
icon="el-icon-download"
@click="handleUnRegister(scope.row)"
v-hasPerm="['market:dataapi:cancel']"
>注销</el-button>
<el-button slot="reference">操作</el-button>
</el-popover>
......@@ -186,7 +176,7 @@
</template>
<script>
import { pageDataApi, delDataApi, delDataApis, copyDataApi, releaseDataApi, cancelDataApi, apiRegister, apiUnRegister } from '@/api/market/dataapi'
import { pageDataApi, delDataApi, delDataApis, copyDataApi, releaseDataApi, cancelDataApi } from '@/api/market/dataapi'
export default {
name: 'DataApiList',
......
......@@ -25,7 +25,6 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPerm="['factory:datasource:add']"
>新增</el-button>
<el-button
type="success"
......@@ -33,7 +32,6 @@
size="mini"
:disabled="single"
@click="handleEdit"
v-hasPerm="['factory:datasource:edit']"
>修改</el-button>
<el-button
type="info"
......@@ -41,7 +39,6 @@
size="mini"
:disabled="single"
@click="handleDetail"
v-hasPerm="['factory:datasource:detail']"
>详情</el-button>
<el-button
type="danger"
......@@ -49,7 +46,6 @@
size="mini"
:disabled="multiple"
@click="handleBatchDelete"
v-hasPerm="['factory:datasource:remove']"
>删除</el-button>
</el-button-group>
</el-col>
......@@ -129,21 +125,18 @@
type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)"
v-hasPerm="['factory:datasource:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleDetail(scope.row)"
v-hasPerm="['factory:datasource:detail']"
>详情</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPerm="['factory:datasource:remove']"
>删除</el-button>
<el-button slot="reference">操作</el-button>
</el-popover>
......
<template>
<div class="app-container">
DataManage
DataColumn
</div>
</template>
<script>
export default {
name: 'DataManage'
name: 'DataColumn'
}
</script>
......
......@@ -32,14 +32,14 @@
<script>
export default {
name: 'DataMap',
name: 'DataSearch',
data () {
return {
classCardbody: {
overflow: 'auto',
height: document.body.offsetHeight - 240 + 'px'
},
title: '数据地图'
title: '数据检索'
}
}
}
......
......@@ -25,7 +25,6 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPerm="['factory:datasource:add']"
>新增</el-button>
<el-button
type="success"
......@@ -33,7 +32,6 @@
size="mini"
:disabled="single"
@click="handleEdit"
v-hasPerm="['factory:datasource:edit']"
>修改</el-button>
<el-button
type="info"
......@@ -41,7 +39,6 @@
size="mini"
:disabled="single"
@click="handleDetail"
v-hasPerm="['factory:datasource:detail']"
>详情</el-button>
<el-button
type="danger"
......@@ -49,7 +46,6 @@
size="mini"
:disabled="multiple"
@click="handleBatchDelete"
v-hasPerm="['factory:datasource:remove']"
>删除</el-button>
</el-button-group>
</el-col>
......@@ -129,21 +125,18 @@
type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)"
v-hasPerm="['factory:datasource:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleDetail(scope.row)"
v-hasPerm="['factory:datasource:detail']"
>详情</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPerm="['factory:datasource:remove']"
>删除</el-button>
<el-button slot="reference">操作</el-button>
</el-popover>
......
<template>
<div class="app-container">
DataBoardConfig
</div>
</template>
<script>
export default {
name: 'DataBoardConfig'
}
</script>
<style lang="scss" scoped>
</style>
......@@ -125,11 +125,11 @@
</template>
<script>
import { getDataSet, listDataSet } from '@/api/factory/dataset'
import { getDataSet, listDataSet } from '@/api/visual/dataset'
import draggable from 'vuedraggable'
export default {
name: 'ChartMake',
name: 'DataChartConfig',
components: {
draggable
},
......
......@@ -142,7 +142,7 @@
<script>
import { addDataSet, sqlAnalyse } from '@/api/visual/dataset'
import { listDataSource, queryByPage } from '@/api/factory/datasource'
import { listDataSource, queryByPage } from '@/api/metadata/datasource'
import sqlFormatter from 'sql-formatter'
import SqlEditor from '@/components/SqlEditor'
import draggable from 'vuedraggable'
......
......@@ -119,7 +119,7 @@
<script>
import { getDataSet } from '@/api/visual/dataset'
import { listDataSource, queryByPage } from '@/api/factory/datasource'
import { listDataSource, queryByPage } from '@/api/metadata/datasource'
import SqlEditor from '@/components/SqlEditor'
export default {
......
......@@ -141,8 +141,8 @@
</template>
<script>
import { getDataSet, updateDataSet, sqlAnalyse } from '@/api/factory/dataset'
import { listDataSource, queryByPage } from '@/api/factory/datasource'
import { getDataSet, updateDataSet, sqlAnalyse } from '@/api/visual/dataset'
import { listDataSource, queryByPage } from '@/api/metadata/datasource'
import sqlFormatter from 'sql-formatter'
import SqlEditor from '@/components/SqlEditor'
import draggable from 'vuedraggable'
......
......@@ -25,7 +25,6 @@
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPerm="['factory:dataset:add']"
>新增</el-button>
<el-button
type="success"
......@@ -33,7 +32,6 @@
size="mini"
:disabled="single"
@click="handleEdit"
v-hasPerm="['factory:dataset:edit']"
>修改</el-button>
<el-button
type="info"
......@@ -41,7 +39,6 @@
size="mini"
:disabled="single"
@click="handleDetail"
v-hasPerm="['factory:dataset:detail']"
>详情</el-button>
<el-button
type="danger"
......@@ -49,7 +46,6 @@
size="mini"
:disabled="multiple"
@click="handleBatchDelete"
v-hasPerm="['factory:dataset:remove']"
>删除</el-button>
</el-button-group>
</el-col>
......@@ -129,21 +125,18 @@
type="text"
icon="el-icon-edit-outline"
@click="handleEdit(scope.row)"
v-hasPerm="['factory:dataset:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-view"
@click="handleDetail(scope.row)"
v-hasPerm="['factory:dataset:detail']"
>详情</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPerm="['factory:dataset:remove']"
>删除</el-button>
<el-button slot="reference">操作</el-button>
</el-popover>
......
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