11<script setup lang="ts">
2- import { ref } from ' vue'
2+ import { ref , watch } from ' vue'
33import { API } from ' ./net'
4- import { Cache } from ' ./cache'
54import { ElMessage } from ' element-plus'
65
76const stores = ref ([])
7+ const kind = ref (' ' )
88const store = ref (' ' )
9- const sqlQuery = ref (' select * from t_sys_global_config ' )
9+ const sqlQuery = ref (' ' )
1010const queryResult = ref ([])
1111const columns = ref ([])
12+ const queryTip = ref (' ' )
13+
14+ watch (store , (s ) => {
15+ stores .value .forEach ((e : Store ) => {
16+ if (e .name === s ) {
17+ kind .value = e .kind .name
18+ return
19+ }
20+ })
21+ })
22+ watch (kind , (k ) => {
23+ switch (k ) {
24+ case ' atest-store-orm' :
25+ sqlQuery .value = ' show tables'
26+ queryTip .value = ' Enter SQL query'
27+ break ;
28+ case ' atest-store-etcd' :
29+ sqlQuery .value = ' '
30+ queryTip .value = ' Enter key'
31+ break ;
32+ }
33+ })
1234
1335API .GetStores ((data ) => {
1436 stores .value = data .data
@@ -20,33 +42,62 @@ API.GetStores((data) => {
2042 });
2143})
2244
23- const executeQuery = async () => {
24- API .DataQuery (store .value , sqlQuery .value , (data ) => {
45+ const ormDataHandler = (data ) => {
2546 const result = []
2647 const cols = new Set ()
2748
2849 data .items .forEach (e => {
29- const obj = {}
30- e .data .forEach (item => {
31- obj [item .key ] = item .value
32- cols .add (item .key )
33- })
34- result .push (obj )
50+ const obj = {}
51+ e .data .forEach (item => {
52+ obj [item .key ] = item .value
53+ cols .add (item .key )
54+ })
55+ result .push (obj )
3556 })
3657
3758 queryResult .value = result
3859 columns .value = Array .from (cols ).sort ((a , b ) => {
39- if (a === ' id' ) return - 1 ;
40- if (b === ' id' ) return 1 ;
41- return a .localeCompare (b );
60+ if (a === ' id' ) return - 1 ;
61+ if (b === ' id' ) return 1 ;
62+ return a .localeCompare (b );
63+ })
64+ }
65+
66+ const keyValueDataHandler = (data ) => {
67+ queryResult .value = []
68+ data .data .forEach (e => {
69+ const obj = {}
70+ obj [' key' ] = e .key
71+ obj [' value' ] = e .value
72+ queryResult .value .push (obj )
73+
74+ columns .value = [' key' , ' value' ]
75+ })
76+ }
77+
78+ const executeQuery = async () => {
79+ API .DataQuery (store .value , kind .value , sqlQuery .value , (data ) => {
80+ switch (kind .value ) {
81+ case ' atest-store-orm' :
82+ ormDataHandler (data )
83+ break ;
84+ case ' atest-store-etcd' :
85+ keyValueDataHandler (data )
86+ break ;
87+ default :
88+ ElMessage ({
89+ showClose: true ,
90+ message: ' Unsupported store kind' ,
91+ type: ' error'
92+ });
93+ }
94+ }, (e ) => {
95+ ElMessage ({
96+ showClose: true ,
97+ message: e .message ,
98+ type: ' error'
99+ });
42100 })
43- }, (e ) => {
44- ElMessage ({
45- showClose: true ,
46- message: e .message ,
47- type: ' error'
48- });
49- })
50101}
51102 </script >
52103
@@ -57,13 +108,14 @@ const executeQuery = async () => {
57108 <el-col :span =" 2" >
58109 <el-form-item >
59110 <el-select v-model =" store" placeholder =" Select store" >
60- <el-option v-for =" item in stores" :key =" item.name" :label =" item.name" :value =" item.name" ></el-option >
111+ <el-option v-for =" item in stores" :key =" item.name" :label =" item.name"
112+ :value =" item.name" :disabled =" !item.ready" :kind =" item.kind.name" ></el-option >
61113 </el-select >
62114 </el-form-item >
63115 </el-col >
64116 <el-col :span =" 18" >
65117 <el-form-item >
66- <el-input v-model =" sqlQuery" placeholder =" Enter SQL query " ></el-input >
118+ <el-input v-model =" sqlQuery" : placeholder =" queryTip " ></el-input >
67119 </el-form-item >
68120 </el-col >
69121 <el-col :span =" 2" >
@@ -77,4 +129,4 @@ const executeQuery = async () => {
77129 <el-table-column v-for =" col in columns" :key =" col" :prop =" col" :label =" col" ></el-table-column >
78130 </el-table >
79131 </div >
80- </template >
132+ </template >
0 commit comments