npm i monaco-sqlpad --save
const CopyWebpackPlugin = require('copy-webpack-plugin')
module.exports = {
configureWebpack: {
plugins: [new CopyWebpackPlugin(
{
patterns: [
{
context: 'node_modules/monaco-sqlpad/dist/',
from: '*.umd.min.*.js',
to: 'js/',
toType: 'dir'
},
{
from: 'node_modules/monaco-sqlpad/dist/editor.worker.js',
to: 'editor.worker.js',
toType: 'file'
},
{
context: 'node_modules/monaco-sqlpad/dist/',
from: 'fonts',
to: 'js/fonts',
toType: 'dir'
}
]
}
)]
}
}
<template>
<div style="height:500px">
<monaco-sqlpad v-model="content" :on-input-field="onInputField" :dbs="dbs" :width="500" :height="500" />
</div>
</template>
<script>
import MonacoSqlpad from 'monaco-sqlpad'
export default {
data() {
return {
content: null,
dbs: []
}
},
components: {
MonacoSqlpad
},
async mounted() {
// 初始化数据库及表信息用于编辑器提示数据库和表
this.dbs = await this.getDbList()
},
methods: {
/
* 当用户需要输入表字段时回调方法
* @return { Array } 表格字段数组
*/
async onInputField() {
const fields = await this.getTableCloumn()
return fields
},
/**
* 模拟异步获取数据库名&&表名
*/
getDbList() {
return new Promise((resolve, reject) => {
resolve([
{
dbName: 'db_bar',
tables: [
{
tblName: 'user',
tableColumns: [
{
fieldName: 'username'
}
]
},
{
tblName: 'log',
tableColumns: []
},
{
tblName: 'goods',
tableColumns: []
}
]
},
{
dbName: 'db_foo',
tables: [
{
tblName: 'price',
tableColumns: []
},
{
tblName: 'time',
tableColumns: []
},
{
tblName: 'updata_user',
tableColumns: []
}
]
}
])
})
},
/**
* 模拟异步获取表字段
*/
getTableCloumn() {
return new Promise((resolve, reject) => {
resolve(['username', 'password'])
})
}
}
}
</script>
future |
---|
单元测试 |
Event配置 |
Option配置 |
SQL解析优化 目前使用正则匹配表名和字段 |