feat: sql执行改为选中鼠标右击显示执行按钮等

This commit is contained in:
meilin.huang
2022-04-12 17:14:44 +08:00
parent 6e38ad320e
commit a9d6c5f7ee
3 changed files with 49 additions and 36 deletions

View File

@@ -41,7 +41,7 @@ const service = Axios.create({
// request interceptor
service.interceptors.request.use(
config => {
(config: any) => {
// do something before request is sent
const token = getSession("token")
if (token) {
@@ -99,7 +99,7 @@ service.interceptors.response.use(
* @param {Object} uri uri
* @param {Object} params 参数
*/
function request(method: string, url: string, params: any, headers: any, options: any): Promise<any> {
function request(method: string, url: string, params: any = null, headers: any = null, options: any = null): Promise<any> {
if (!url)
throw new Error('请求url不能为空');
// 简单判断该url是否是restful风格

View File

@@ -1,5 +1,9 @@
<template>
<div>
<el-button-group :style="btnStyle">
<el-button @click="onRunSql" type="success" icon="video-play" size="small" plain>执行</el-button>
<el-button @click="formatSql" type="primary" icon="magic-stick" size="small" plain>格式化</el-button>
</el-button-group>
<div class="toolbar">
<el-row type="flex" justify="space-between">
<el-col :span="24">
@@ -82,12 +86,8 @@
</div>
</div>
<div class="mt5 sqlEditor" @mousemove="listenMouse">
<div @click="closeExecBtns" class="mt5 sqlEditor" @contextmenu="showExecBtns">
<textarea ref="codeTextarea"></textarea>
<el-button-group :style="btnStyle">
<el-button @click="onRunSql" type="success" icon="video-play" size="small" plain>执行</el-button>
<el-button @click="formatSql" type="primary" icon="magic-stick" size="small" plain>格式化</el-button>
</el-button-group>
</div>
<div class="mt5">
@@ -189,7 +189,6 @@
<script lang="ts">
import { onMounted, toRefs, reactive, defineComponent, ref } from 'vue';
import { dbApi } from './api';
import _ from 'lodash';
import 'codemirror/addon/hint/show-hint.css';
// import base style
@@ -297,15 +296,27 @@ export default defineComponent({
// 将sql提示去除
changeObj.text[0] = text.split(' ')[0];
});
// 默认300px
codemirror.setSize('auto', `${window.innerHeight - 538}px`);
};
onMounted(() => {
initCodemirror();
state.dataTabsTableHeight = window.innerHeight - 258;
setHeight();
// 监听浏览器窗口大小变化,更新对应组件高度
window.onresize = () => (() => {
setHeight();
})();
});
/**
* 设置codemirror高度和数据表高度
*/
const setHeight = () => {
// 默认300px
codemirror.setSize('auto', `${window.innerHeight - 538}px`);
state.dataTabsTableHeight = window.innerHeight - 258;
}
/**
* 项目及环境更改后的回调事件
*/
@@ -332,7 +343,7 @@ export default defineComponent({
notBlank(state.dbId, '请先选择数据库');
// 没有选中的文本,则为全部文本
let sql = getSql();
notBlank(sql.trim(), 'sql内容不能为空');
isTrue(sql && sql.trim(), '请选中需要执行的sql');
state.queryTab.loading = true;
// 即只有以该字符串开头的sql才可修改表数据内容
@@ -360,6 +371,7 @@ export default defineComponent({
} catch (e: any) {
state.queryTab.loading = false;
}
closeExecBtns();
};
/**
@@ -499,7 +511,7 @@ export default defineComponent({
const getSql = () => {
// 没有选中的文本,则为全部文本
let selectSql = codemirror.getSelection();
if (selectSql == '') {
if (!selectSql) {
selectSql = getCodermirrorValue();
}
return selectSql;
@@ -730,6 +742,7 @@ export default defineComponent({
state.queryTab.execRes.tableColumn = [];
state.cmOptions.hintOptions.tables = [];
tableMap.clear();
closeExecBtns();
};
const onDataSelectionChange = (datas: []) => {
@@ -872,13 +885,9 @@ export default defineComponent({
*/
const formatSql = () => {
let selectSql = codemirror.getSelection();
// 有选中sql则只格式化选中部分否则格式化全部
if (selectSql != '') {
isTrue(selectSql, '请选中需要格式化的sql');
codemirror.replaceSelection(sqlFormatter(selectSql));
} else {
/* 将sql内容进行格式后放入编辑器中*/
setCodermirrorValue(sqlFormatter(getCodermirrorValue()));
}
closeExecBtns();
};
const search = async () => {
@@ -887,25 +896,28 @@ export default defineComponent({
};
/**
* 获取选择文字,显示隐藏按钮,防抖
* 显示执行sql和格式化按钮
*/
const getSelection = _.debounce((e: any) => {
let temp = codemirror.getSelection();
if (temp) {
state.btnStyle.display = 'block';
if (!state.btnStyle.left) {
state.btnStyle.left = e.target.getBoundingClientRect().left;
state.btnStyle.top = e.target.getBoundingClientRect().top - 160 + 'px';
}
const showExecBtns = (event: any) => {
if (event.preventDefault) {
event.preventDefault();
} else {
event.returnValue = false;
}
state.btnStyle.display = 'inline';
state.btnStyle.left = event.offsetX + 15 + 'px';
state.btnStyle.top = event.clientY - 80 + 'px';
};
/**
* 关闭执行sql和格式化按钮
*/
const closeExecBtns = () => {
if (state.btnStyle.left) {
state.btnStyle.display = 'none';
state.btnStyle.left = '';
state.btnStyle.top = '';
}
}, 100);
const listenMouse = (e: any) => {
getSelection(e);
};
return {
@@ -929,7 +941,6 @@ export default defineComponent({
clearDb,
formatSql,
onBeforeChange,
listenMouse,
onRefresh,
selectByCondition,
onCommit,
@@ -937,6 +948,8 @@ export default defineComponent({
onDataSelectionChange,
onDeleteData,
onTableSortChange,
showExecBtns,
closeExecBtns,
};
},
});

View File

@@ -189,7 +189,7 @@ import { recommendList } from './mock.ts';
import { useStore } from '@/store/index.ts';
import { personApi } from './api';
export default {
name: 'personal',
name: 'PersonalPage',
setup() {
const store = useStore();
const state = reactive({