11<script setup lang="ts">
22import { ref , watch } from ' vue'
33import { API } from ' ./net'
4+ import type { QueryObject } from ' ./net'
45import type { Store } from ' ./store'
56import type { Pair } from ' ./types'
67import { ElMessage } from ' element-plus'
@@ -12,6 +13,10 @@ import { Refresh, Document } from '@element-plus/icons-vue'
1213const stores: Ref <Store []> = ref ([])
1314const kind = ref (' ' )
1415const store = ref (' ' )
16+ const query = ref ({
17+ offset: 0 ,
18+ limit: 10
19+ } as QueryObject )
1520const sqlQuery = ref (' ' )
1621const queryResult = ref ([] as any [])
1722const queryResultAsJSON = ref (' ' )
@@ -34,8 +39,17 @@ watch(store, (s) => {
3439 return
3540 }
3641 })
37- queryDataMeta .value .currentDatabase = ' '
38- sqlQuery .value = ' '
42+
43+ switch (kind .value ) {
44+ case ' atest-store-elasticsearch' :
45+ case ' atest-store-etcd' :
46+ sqlQuery .value = ' *'
47+ break
48+ default :
49+ queryDataMeta .value .currentDatabase = ' '
50+ sqlQuery .value = ' '
51+ }
52+
3953 executeQuery ()
4054})
4155
@@ -63,13 +77,22 @@ const describeTable = (data: QueryData) => {
6377 case ' atest-store-cassandra' :
6478 sqlQuery .value = ` @describeTable_${queryDataMeta .value .currentDatabase }:${data .label } `
6579 break
80+ break
6681 default :
6782 sqlQuery .value = ` @describeTable_${data .label } `
6883 }
6984 executeQuery ()
7085}
7186const queryTables = () => {
72- sqlQuery .value = ` `
87+ switch (kind .value ) {
88+ case ' atest-store-elasticsearch' :
89+ if (sqlQuery .value === ' ' ) {
90+ sqlQuery .value = ' *'
91+ }
92+ break
93+ default :
94+ sqlQuery .value = ` `
95+ }
7396 executeQuery ()
7497}
7598watch (kind , (k ) => {
@@ -84,6 +107,9 @@ watch(kind, (k) => {
84107 case ' atest-store-redis' :
85108 queryTip .value = ' Enter key'
86109 break ;
110+ case ' atest-store-elasticsearch' :
111+ queryTip .value = ' field:value OR field:other'
112+ break ;
87113 }
88114})
89115
@@ -162,12 +188,18 @@ const executeWithQuery = async (sql: string) => {
162188 }
163189
164190 let success = false
191+ query .value .store = store .value
192+ query .value .key = queryDataMeta .value .currentDatabase
193+ query .value .sql = sql
194+
165195 try {
166- const data = await API .DataQueryAsync (store .value , kind . value , queryDataMeta . value . currentDatabase , sql );
196+ const data = await API .DataQueryAsync (query .value );
167197 switch (kind .value ) {
168198 case ' atest-store-orm' :
169199 case ' atest-store-cassandra' :
170200 case ' atest-store-iotdb' :
201+ case ' atest-store-opengemini' :
202+ case ' atest-store-elasticsearch' :
171203 ormDataHandler (data )
172204 success = true
173205 break ;
@@ -193,12 +225,16 @@ const executeWithQuery = async (sql: string) => {
193225 }
194226 return success
195227}
228+ const nextPage = () => {
229+ query .value .offset += query .value .limit
230+ executeQuery ()
231+ }
196232 </script >
197233
198234<template >
199235 <div >
200236 <el-container style =" height : calc (100vh - 50px );" >
201- <el-aside v-if =" kind === 'atest-store-orm' || kind === 'atest-store-iotdb' || kind === 'atest-store-cassandra'" >
237+ <el-aside v-if =" kind === 'atest-store-orm' || kind === 'atest-store-iotdb' || kind === 'atest-store-cassandra' || kind === 'atest-store-elasticsearch' || kind === 'atest-store-opengemini' " >
202238 <el-scrollbar >
203239 <el-select v-model =" queryDataMeta.currentDatabase" placeholder =" Select database"
204240 @change =" queryTables" filterable >
@@ -220,7 +256,7 @@ const executeWithQuery = async (sql: string) => {
220256 </el-scrollbar >
221257 </el-aside >
222258 <el-container >
223- <el-header >
259+ <el-header style = " height : auto " >
224260 <el-form @submit.prevent =" executeQuery" >
225261 <el-row :gutter =" 10" >
226262 <el-col :span =" 4" >
@@ -250,6 +286,21 @@ const executeWithQuery = async (sql: string) => {
250286 </el-select >
251287 </el-col >
252288 </el-row >
289+ <el-row :gutter =" 10" v-if =" kind === 'atest-store-elasticsearch'" >
290+ <el-col :span =" 10" >
291+ <el-input type =" number" v-model =" query.offset" >
292+ <template #prepend >Offset</template >
293+ </el-input >
294+ </el-col >
295+ <el-col :span =" 10" >
296+ <el-input type =" number" v-model =" query.limit" >
297+ <template #prepend >Limit</template >
298+ </el-input >
299+ </el-col >
300+ <el-col :span =" 2" >
301+ <el-button type =" primary" @click =" nextPage" >Next</el-button >
302+ </el-col >
303+ </el-row >
253304 </el-form >
254305 </el-header >
255306 <el-main >
0 commit comments