From 66b2f1eade02a13af45eed4450050f8c6b8cd2c8 Mon Sep 17 00:00:00 2001 From: rick Date: Sat, 8 Mar 2025 21:11:34 +0800 Subject: [PATCH 1/6] feat: create a history based autocomplete input --- .../atest-ui/src/components/HistoryInput.vue | 119 ++++++++++++++++++ console/atest-ui/src/views/DataManager.vue | 33 +++-- console/atest-ui/src/views/TestCase.vue | 2 +- console/atest-ui/src/views/net.ts | 59 +++++---- 4 files changed, 178 insertions(+), 35 deletions(-) create mode 100644 console/atest-ui/src/components/HistoryInput.vue diff --git a/console/atest-ui/src/components/HistoryInput.vue b/console/atest-ui/src/components/HistoryInput.vue new file mode 100644 index 0000000..0eebf5b --- /dev/null +++ b/console/atest-ui/src/components/HistoryInput.vue @@ -0,0 +1,119 @@ + + + diff --git a/console/atest-ui/src/views/DataManager.vue b/console/atest-ui/src/views/DataManager.vue index 67678af..ead42d9 100644 --- a/console/atest-ui/src/views/DataManager.vue +++ b/console/atest-ui/src/views/DataManager.vue @@ -2,18 +2,23 @@ import { ref, watch } from 'vue' import { API } from './net' import { ElMessage } from 'element-plus' +import { Codemirror } from 'vue-codemirror' +import HistoryInput from '../components/HistoryInput.vue' const stores = ref([]) const kind = ref('') const store = ref('') const sqlQuery = ref('') const queryResult = ref([]) +const queryResultAsJSON= ref('') const columns = ref([]) const queryTip = ref('') const databases = ref([]) const tables = ref([]) const currentDatabase = ref('') const loadingStores = ref(true) +const dataFormat = ref('table') +const dataFormatOptions = ['table', 'json'] const tablesTree = ref([]) watch(store, (s) => { @@ -78,6 +83,7 @@ const ormDataHandler = (data) => { tables.value = data.meta.tables currentDatabase.value = data.meta.currentDatabase queryResult.value = result + queryResultAsJSON.value = JSON.stringify(result, null, 2) columns.value = Array.from(cols).sort((a, b) => { if (a === 'id') return -1; if (b === 'id') return 1; @@ -111,10 +117,13 @@ const executeQuery = async () => { break; } - API.DataQuery(store.value, kind.value, currentDatabase.value, sqlQuery.value, (data) => { + let success = false + try { + const data = await API.DataQueryAsync(store.value, kind.value, currentDatabase.value, sqlQuery.value); switch (kind.value) { case 'atest-store-orm': ormDataHandler(data) + success = true break; case 'atest-store-etcd': keyValueDataHandler(data) @@ -129,19 +138,20 @@ const executeQuery = async () => { type: 'error' }); } - }, (e) => { + } catch (e: any) { ElMessage({ showClose: true, message: e.message, type: 'error' }); - }) + } + return success }