@@ -6,21 +6,25 @@ import type { Pair } from './types'
66import { ElMessage } from ' element-plus'
77import { Codemirror } from ' vue-codemirror'
88import HistoryInput from ' ../components/HistoryInput.vue'
9+ import type { Ref } from ' vue'
910
10- const stores = ref ([] as Store [])
11+ const stores: Ref < Store []> = ref ( [])
1112const kind = ref (' ' )
1213const store = ref (' ' )
1314const sqlQuery = ref (' ' )
1415const queryResult = ref ([] as any [])
15- const queryResultAsJSON= ref (' ' )
16+ const queryResultAsJSON = ref (' ' )
1617const columns = ref ([] as string [])
1718const queryTip = ref (' ' )
1819const loadingStores = ref (true )
1920const dataFormat = ref (' table' )
2021const dataFormatOptions = [' table' , ' json' ]
2122const queryDataMeta = ref ({} as QueryDataMeta )
2223
23- const tablesTree = ref ([])
24+ interface TreeItem {
25+ label: string
26+ }
27+ const tablesTree = ref ([] as TreeItem [])
2428watch (store , (s ) => {
2529 kind .value = ' '
2630 stores .value .forEach ((e : Store ) => {
@@ -60,6 +64,7 @@ const queryTables = () => {
6064watch (kind , (k ) => {
6165 switch (k ) {
6266 case ' atest-store-orm' :
67+ case ' atest-store-iotdb' :
6368 queryTip .value = ' Enter SQL query'
6469 executeQuery ()
6570 break ;
@@ -144,6 +149,7 @@ const executeQuery = async () => {
144149 const data = await API .DataQueryAsync (store .value , kind .value , queryDataMeta .value .currentDatabase , sqlQuery .value );
145150 switch (kind .value ) {
146151 case ' atest-store-orm' :
152+ case ' atest-store-iotdb' :
147153 ormDataHandler (data )
148154 success = true
149155 break ;
@@ -172,60 +178,64 @@ const executeQuery = async () => {
172178 </script >
173179
174180<template >
175- <div >
176- <el-container style =" height : calc (100vh - 50px );" >
177- <el-aside v-if =" kind === 'atest-store-orm'" >
178- <el-scrollbar >
179- <el-select v-model =" queryDataMeta.currentDatabase" placeholder =" Select database" @change =" queryTables" filterable >
180- <el-option v-for =" item in queryDataMeta.databases" :key =" item" :label =" item"
181- :value =" item" ></el-option >
182- </el-select >
183- <el-tree :data =" tablesTree" node-key =" label" @node-click =" queryDataFromTable" highlight-current draggable />
184- </el-scrollbar >
185- </el-aside >
186- <el-container >
187- <el-header >
188- <el-form @submit.prevent =" executeQuery" >
189- <el-row :gutter =" 10" >
190- <el-col :span =" 4" >
191- <el-form-item >
192- <el-select v-model =" store" placeholder =" Select store" filterable :loading =" loadingStores" >
193- <el-option v-for =" item in stores" :key =" item.name" :label =" item.name"
194- :value =" item.name" :disabled =" !item.ready" :kind =" item.kind.name" ></el-option >
195- </el-select >
196- </el-form-item >
197- </el-col >
198- <el-col :span =" 16" >
199- <el-form-item >
200- <HistoryInput :placeholder =" queryTip" :callback =" executeQuery" v-model =" sqlQuery" />
201- </el-form-item >
202- </el-col >
203- <el-col :span =" 2" >
204- <el-form-item >
205- <el-button type =" primary" @click =" executeQuery" >Execute</el-button >
206- </el-form-item >
207- </el-col >
208- <el-col :span =" 2" >
209- <el-select v-model =" dataFormat" placeholder =" Select data format" >
210- <el-option v-for =" item in dataFormatOptions" :key =" item" :label =" item" :value =" item" ></el-option >
211- </el-select >
212- </el-col >
213- </el-row >
214- </el-form >
215- </el-header >
216- <el-main >
217- <div style =" display : flex ; gap : 8px ;" >
218- <el-tag type =" primary" v-if =" queryResult.length > 0" >{{ queryResult.length }} rows</el-tag >
219- <el-tag type =" primary" v-if =" queryDataMeta.duration" >{{ queryDataMeta.duration }}</el-tag >
220- <el-tag type =" primary" v-for =" label in queryDataMeta.labels" >{{ label.value }}</el-tag >
221- </div >
222- <el-table :data =" queryResult" stripe v-if =" dataFormat === 'table'" >
223- <el-table-column v-for =" col in columns" :key =" col" :prop =" col" :label =" col" sortable />
224- </el-table >
225- <Codemirror v-else-if =" dataFormat === 'json'"
226- v-model =" queryResultAsJSON" />
227- </el-main >
228- </el-container >
229- </el-container >
230- </div >
181+ <div >
182+ <el-container style =" height : calc (100vh - 50px );" >
183+ <el-aside v-if =" kind === 'atest-store-orm' || kind === 'atest-store-iotdb'" >
184+ <el-scrollbar >
185+ <el-select v-model =" queryDataMeta.currentDatabase" placeholder =" Select database"
186+ @change =" queryTables" filterable >
187+ <el-option v-for =" item in queryDataMeta.databases" :key =" item" :label =" item"
188+ :value =" item" ></el-option >
189+ </el-select >
190+ <el-tree :data =" tablesTree" node-key =" label" @node-click =" queryDataFromTable" highlight-current
191+ draggable />
192+ </el-scrollbar >
193+ </el-aside >
194+ <el-container >
195+ <el-header >
196+ <el-form @submit.prevent =" executeQuery" >
197+ <el-row :gutter =" 10" >
198+ <el-col :span =" 4" >
199+ <el-form-item >
200+ <el-select v-model =" store" placeholder =" Select store" filterable
201+ :loading =" loadingStores" >
202+ <el-option v-for =" item in stores" :key =" item.name" :label =" item.name"
203+ :value =" item.name" :disabled =" !item.ready"
204+ :kind =" item.kind.name" ></el-option >
205+ </el-select >
206+ </el-form-item >
207+ </el-col >
208+ <el-col :span =" 16" >
209+ <el-form-item >
210+ <HistoryInput :placeholder =" queryTip" :callback =" executeQuery" v-model =" sqlQuery" />
211+ </el-form-item >
212+ </el-col >
213+ <el-col :span =" 2" >
214+ <el-form-item >
215+ <el-button type =" primary" @click =" executeQuery" >Execute</el-button >
216+ </el-form-item >
217+ </el-col >
218+ <el-col :span =" 2" >
219+ <el-select v-model =" dataFormat" placeholder =" Select data format" >
220+ <el-option v-for =" item in dataFormatOptions" :key =" item" :label =" item"
221+ :value =" item" ></el-option >
222+ </el-select >
223+ </el-col >
224+ </el-row >
225+ </el-form >
226+ </el-header >
227+ <el-main >
228+ <div style =" display : flex ; gap : 8px ;" >
229+ <el-tag type =" primary" v-if =" queryResult.length > 0" >{{ queryResult.length }} rows</el-tag >
230+ <el-tag type =" primary" v-if =" queryDataMeta.duration" >{{ queryDataMeta.duration }}</el-tag >
231+ <el-tag type =" primary" v-for =" label in queryDataMeta.labels" >{{ label.value }}</el-tag >
232+ </div >
233+ <el-table :data =" queryResult" stripe v-if =" dataFormat === 'table'" >
234+ <el-table-column v-for =" col in columns" :key =" col" :prop =" col" :label =" col" sortable />
235+ </el-table >
236+ <Codemirror v-else-if =" dataFormat === 'json'" v-model =" queryResultAsJSON" />
237+ </el-main >
238+ </el-container >
239+ </el-container >
240+ </div >
231241</template >
0 commit comments