Commit 4a45ded6 by yuwei

2.0.0项目初始化

parent b5d6b5c1
...@@ -12,12 +12,12 @@ public class PageResult<T> implements Serializable { ...@@ -12,12 +12,12 @@ public class PageResult<T> implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private long pageNum; private Integer pageNum;
private long pageSize; private Integer pageSize;
private long total; private Integer total;
private List<T> data; private List<T> data;
public PageResult(long total, List<T> data) { public PageResult(Integer total, List<T> data) {
this.total = total; this.total = total;
this.data = data; this.data = data;
} }
......
...@@ -195,7 +195,7 @@ public class DataSourceController extends BaseController { ...@@ -195,7 +195,7 @@ public class DataSourceController extends BaseController {
@ApiOperation(value = "获取SQL结果", notes = "根据数据源的id来获取SQL结果") @ApiOperation(value = "获取SQL结果", notes = "根据数据源的id来获取SQL结果")
@ApiImplicitParam(name = "dbDataQuery", value = "详细实体dbDataQuery", required = true, dataType = "DbDataQuery") @ApiImplicitParam(name = "dbDataQuery", value = "详细实体dbDataQuery", required = true, dataType = "DbDataQuery")
@GetMapping("/queryList") @PostMapping("/queryList")
public R queryList(@RequestBody @Validated DbDataQuery dbDataQuery) { public R queryList(@RequestBody @Validated DbDataQuery dbDataQuery) {
DbQuery dbQuery = dataSourceService.getDbQuery(dbDataQuery.getDataSourceId()); DbQuery dbQuery = dataSourceService.getDbQuery(dbDataQuery.getDataSourceId());
List<Map<String, Object>> list = dbQuery.queryList(dbDataQuery.getSql()); List<Map<String, Object>> list = dbQuery.queryList(dbDataQuery.getSql());
...@@ -204,7 +204,7 @@ public class DataSourceController extends BaseController { ...@@ -204,7 +204,7 @@ public class DataSourceController extends BaseController {
@ApiOperation(value = "分页获取SQL结果", notes = "根据数据源的id来分页获取SQL结果") @ApiOperation(value = "分页获取SQL结果", notes = "根据数据源的id来分页获取SQL结果")
@ApiImplicitParam(name = "dbDataQuery", value = "详细实体dbDataQuery", required = true, dataType = "DbDataQuery") @ApiImplicitParam(name = "dbDataQuery", value = "详细实体dbDataQuery", required = true, dataType = "DbDataQuery")
@GetMapping("/queryByPage") @PostMapping("/queryByPage")
public R queryByPage(@RequestBody @Validated DbDataQuery dbDataQuery) { public R queryByPage(@RequestBody @Validated DbDataQuery dbDataQuery) {
DbQuery dbQuery = dataSourceService.getDbQuery(dbDataQuery.getDataSourceId()); DbQuery dbQuery = dataSourceService.getDbQuery(dbDataQuery.getDataSourceId());
PageResult<Map<String, Object>> page = dbQuery.queryByPage(dbDataQuery.getSql(), dbDataQuery.getOffset(), dbDataQuery.getPageSize()); PageResult<Map<String, Object>> page = dbQuery.queryByPage(dbDataQuery.getSql(), dbDataQuery.getOffset(), dbDataQuery.getPageSize());
......
...@@ -60,3 +60,11 @@ export function checkConnection (data) { ...@@ -60,3 +60,11 @@ export function checkConnection (data) {
data: data data: data
}) })
} }
export function queryByPage (data) {
return request({
url: '/data/factory/dataSources/queryByPage',
method: 'post',
data: data
})
}
...@@ -32,6 +32,13 @@ export function logout (token) { ...@@ -32,6 +32,13 @@ export function logout (token) {
}) })
} }
export function log () {
return request({
url: '/system/login/logs',
method: 'post'
})
}
export function pageUser (data) { export function pageUser (data) {
return request({ return request({
url: '/system/users/page', url: '/system/users/page',
......
...@@ -7,14 +7,6 @@ ...@@ -7,14 +7,6 @@
<div :style="classCardbody"> <div :style="classCardbody">
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<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">
<el-select v-model="sqlDataSource" placeholder="请选择数据源"> <el-select v-model="sqlDataSource" placeholder="请选择数据源">
<el-option <el-option
v-for="source in sourceOptions" v-for="source in sourceOptions"
...@@ -24,6 +16,10 @@ ...@@ -24,6 +16,10 @@
:disabled="source.status === '0'" :disabled="source.status === '0'"
></el-option> ></el-option>
</el-select> </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-col>
</el-row> </el-row>
<el-row> <el-row>
...@@ -95,13 +91,13 @@ export default { ...@@ -95,13 +91,13 @@ export default {
title: 'SQL工作台', title: 'SQL工作台',
// 数据源数据字典 // 数据源数据字典
sourceOptions: [], sourceOptions: [],
sqlDataSource: '', sqlDataSource: undefined,
sqlText: '', sqlText: undefined,
sqlExecuting: false, sqlExecuting: false,
activeTabName: 'table0', activeTabName: 'table0',
sqlExecutorId: undefined, sqlExecutorId: undefined,
sqlConsole: [], sqlConsole: [],
executeResultInfo: '' executeResultInfo: undefined
} }
}, },
created () { created () {
...@@ -167,16 +163,22 @@ export default { ...@@ -167,16 +163,22 @@ export default {
this.sqlText = val this.sqlText = val
}, },
formaterSql () { formaterSql () {
if (!this.sqlText) {
return
}
this.$refs.sqleditor.editor.setValue(sqlFormatter.format(this.$refs.sqleditor.editor.getValue())) this.$refs.sqleditor.editor.setValue(sqlFormatter.format(this.$refs.sqleditor.editor.getValue()))
}, },
refreshData () { refreshData () {
if (!this.sqlText) {
return
}
this.sqlExecuting = false this.sqlExecuting = false
this.activeTabName = 'table0' this.activeTabName = 'table0'
this.sqlExecutorId = undefined this.sqlExecutorId = undefined
this.sqlText = '' this.sqlText = undefined
this.$refs.sqleditor.editor.setValue('') this.$refs.sqleditor.editor.setValue('')
this.sqlConsole = [] this.sqlConsole = []
this.executeResultInfo = '' this.executeResultInfo = undefined
} }
} }
} }
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="mini" type="primary" @click="formaterSql">Sql格式化</el-button> <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>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
...@@ -49,13 +50,45 @@ ...@@ -49,13 +50,45 @@
</el-form-item> </el-form-item>
</el-form> </el-form>
</div> </div>
<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>
</el-card> </el-card>
</div> </div>
</template> </template>
<script> <script>
import { addDataSet } from '@/api/factory/dataset' import { addDataSet } from '@/api/factory/dataset'
import { listDataSource } from '@/api/factory/datasource' import { listDataSource, queryByPage } from '@/api/factory/datasource'
import sqlFormatter from 'sql-formatter' import sqlFormatter from 'sql-formatter'
import SqlEditor from '@/components/SqlEditor' import SqlEditor from '@/components/SqlEditor'
...@@ -95,7 +128,9 @@ export default { ...@@ -95,7 +128,9 @@ export default {
}, },
// 表单参数 // 表单参数
form: { form: {
status: '1' status: '1',
sourceId: undefined,
setSql: undefined
}, },
// 表单校验 // 表单校验
rules: { rules: {
...@@ -106,7 +141,15 @@ export default { ...@@ -106,7 +141,15 @@ export default {
// 状态数据字典 // 状态数据字典
statusOptions: [], statusOptions: [],
// 数据源数据字典 // 数据源数据字典
sourceOptions: [] sourceOptions: [],
drawer: false,
previewData: {
dataList: [],
columnList: [],
pageNum: 1,
pageSize: 20,
dataTotal: 0
}
} }
}, },
created () { created () {
...@@ -133,8 +176,46 @@ export default { ...@@ -133,8 +176,46 @@ export default {
this.$set(this.form, 'setSql', val) this.$set(this.form, 'setSql', val)
}, },
formaterSql () { formaterSql () {
let sqleditor = this.$refs.sqleditor if (!this.form.setSql) {
sqleditor.editor.setValue(sqlFormatter.format(sqleditor.editor.getValue())) return
}
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 () { submitForm: function () {
...@@ -156,6 +237,11 @@ export default { ...@@ -156,6 +237,11 @@ export default {
this.loadingOptions.loadingText = '保存' this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false this.loadingOptions.isDisabled = false
} }
}).catch(error => {
this.$message.error(error.data.msg || '保存失败')
this.loadingOptions.loading = false
this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false
}) })
} }
}) })
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
<div slot="header" class="clearfix"> <div slot="header" class="clearfix">
<span>{{ title }}</span> <span>{{ title }}</span>
<el-button-group style="float: right;"> <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 size="mini" icon="el-icon-back" round @click="showCard">返回</el-button>
</el-button-group> </el-button-group>
</div> </div>
...@@ -44,6 +45,38 @@ ...@@ -44,6 +45,38 @@
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
</el-form> </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> </div>
</el-card> </el-card>
</div> </div>
...@@ -51,7 +84,7 @@ ...@@ -51,7 +84,7 @@
<script> <script>
import { getDataSet } from '@/api/factory/dataset' import { getDataSet } from '@/api/factory/dataset'
import { listDataSource } from '@/api/factory/datasource' import { listDataSource, queryByPage } from '@/api/factory/datasource'
import SqlEditor from '@/components/SqlEditor' import SqlEditor from '@/components/SqlEditor'
export default { export default {
...@@ -87,7 +120,15 @@ export default { ...@@ -87,7 +120,15 @@ export default {
// 状态数据字典 // 状态数据字典
statusOptions: [], statusOptions: [],
// 数据源数据字典 // 数据源数据字典
sourceOptions: [] sourceOptions: [],
drawer: false,
previewData: {
dataList: [],
columnList: [],
pageNum: 1,
pageSize: 20,
dataTotal: 0
}
} }
}, },
created () { created () {
...@@ -119,6 +160,42 @@ export default { ...@@ -119,6 +160,42 @@ export default {
this.$refs.sqleditor.editor.setValue(this.form.setSql) 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()
} }
} }
} }
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
</el-form-item> </el-form-item>
<el-form-item> <el-form-item>
<el-button size="mini" type="primary" @click="formaterSql">Sql格式化</el-button> <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>
<el-form-item label="状态" prop="status"> <el-form-item label="状态" prop="status">
<el-radio-group v-model="form.status"> <el-radio-group v-model="form.status">
...@@ -48,6 +49,38 @@ ...@@ -48,6 +49,38 @@
<el-input v-model="form.remark" type="textarea" placeholder="请输入内容" /> <el-input v-model="form.remark" type="textarea" placeholder="请输入内容" />
</el-form-item> </el-form-item>
</el-form> </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> </div>
</el-card> </el-card>
</div> </div>
...@@ -55,7 +88,7 @@ ...@@ -55,7 +88,7 @@
<script> <script>
import { getDataSet, updateDataSet } from '@/api/factory/dataset' import { getDataSet, updateDataSet } from '@/api/factory/dataset'
import { listDataSource } from '@/api/factory/datasource' import { listDataSource, queryByPage } from '@/api/factory/datasource'
import sqlFormatter from 'sql-formatter' import sqlFormatter from 'sql-formatter'
import SqlEditor from '@/components/SqlEditor' import SqlEditor from '@/components/SqlEditor'
...@@ -104,7 +137,15 @@ export default { ...@@ -104,7 +137,15 @@ export default {
// 状态数据字典 // 状态数据字典
statusOptions: [], statusOptions: [],
// 数据源数据字典 // 数据源数据字典
sourceOptions: [] sourceOptions: [],
drawer: false,
previewData: {
dataList: [],
columnList: [],
pageNum: 1,
pageSize: 20,
dataTotal: 0
}
} }
}, },
created () { created () {
...@@ -142,8 +183,43 @@ export default { ...@@ -142,8 +183,43 @@ export default {
this.$set(this.form, 'setSql', val) this.$set(this.form, 'setSql', val)
}, },
formaterSql (val) { formaterSql (val) {
let sqleditor = this.$refs.sqleditor this.$refs.sqleditor.editor.setValue(sqlFormatter.format(this.$refs.sqleditor.editor.getValue()))
sqleditor.editor.setValue(sqlFormatter.format(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 () { submitForm: function () {
...@@ -165,6 +241,11 @@ export default { ...@@ -165,6 +241,11 @@ export default {
this.loadingOptions.loadingText = '保存' this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false this.loadingOptions.isDisabled = false
} }
}).catch(error => {
this.$message.error(error.data.msg || '保存失败')
this.loadingOptions.loading = false
this.loadingOptions.loadingText = '保存'
this.loadingOptions.isDisabled = false
}) })
} }
}) })
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
<script> <script>
import { validUsername } from '@/utils/validate' import { validUsername } from '@/utils/validate'
import { log } from '@/api/system/user'
export default { export default {
name: 'Login', name: 'Login',
...@@ -93,6 +94,8 @@ export default { ...@@ -93,6 +94,8 @@ export default {
this.$store.dispatch('user/login', this.loginForm).then(() => { this.$store.dispatch('user/login', this.loginForm).then(() => {
this.$router.push({ path: this.redirect || '/' }) this.$router.push({ path: this.redirect || '/' })
this.loading = false this.loading = false
}).then(() => {
log()
}).catch(() => { }).catch(() => {
this.loading = false this.loading = false
}) })
...@@ -153,7 +156,7 @@ $cursor: #fff; ...@@ -153,7 +156,7 @@ $cursor: #fff;
</style> </style>
<style lang="scss" scoped> <style lang="scss" scoped>
$bg:#fff; $bg:#2d3a4b;
$dark_gray:#889aa4; $dark_gray:#889aa4;
$light_gray:#eee; $light_gray:#eee;
......
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