新增:连接管理、数据查询等功能
This commit is contained in:
112
web/src/views/db-cli/composables/useResultState.ts
Normal file
112
web/src/views/db-cli/composables/useResultState.ts
Normal file
@@ -0,0 +1,112 @@
|
||||
import { ref } from 'vue'
|
||||
|
||||
interface ResultStats {
|
||||
rowsAffected: number
|
||||
executionTime: number
|
||||
}
|
||||
|
||||
interface Column {
|
||||
title: string
|
||||
dataIndex: string
|
||||
width: number
|
||||
tooltip?: boolean
|
||||
}
|
||||
|
||||
/**
|
||||
* 结果状态管理 Composable
|
||||
*/
|
||||
export function useResultState() {
|
||||
const resultLoading = ref(false)
|
||||
const resultError = ref('')
|
||||
const resultData = ref<unknown>(null)
|
||||
const resultMode = ref<'table' | 'json'>('table')
|
||||
const resultStats = ref<ResultStats | null>(null)
|
||||
const resultColumns = ref<Column[]>([])
|
||||
|
||||
const buildColumn = (key: string): Column => ({
|
||||
title: key,
|
||||
dataIndex: key,
|
||||
width: 120,
|
||||
tooltip: true
|
||||
})
|
||||
|
||||
const clearResults = () => {
|
||||
resultData.value = null
|
||||
resultError.value = ''
|
||||
resultStats.value = null
|
||||
resultColumns.value = []
|
||||
}
|
||||
|
||||
const setQueryResult = (data: unknown[], stats: ResultStats, columns?: string[]) => {
|
||||
const dataArray = data ?? []
|
||||
resultData.value = dataArray
|
||||
resultMode.value = 'table'
|
||||
resultStats.value = stats
|
||||
|
||||
if (columns?.length) {
|
||||
resultColumns.value = columns.map(buildColumn)
|
||||
} else if (dataArray.length) {
|
||||
resultColumns.value = Object.keys(dataArray[0] as Record<string, any>).map(buildColumn)
|
||||
} else {
|
||||
resultColumns.value = []
|
||||
}
|
||||
}
|
||||
|
||||
const setUpdateResult = (stats: ResultStats) => {
|
||||
resultData.value = null
|
||||
resultMode.value = 'table'
|
||||
resultStats.value = stats
|
||||
resultColumns.value = []
|
||||
}
|
||||
|
||||
const setCommandResult = (data: unknown, stats: ResultStats) => {
|
||||
resultData.value = data
|
||||
resultMode.value = 'json'
|
||||
resultStats.value = stats
|
||||
resultColumns.value = []
|
||||
}
|
||||
|
||||
const setError = (error: string) => {
|
||||
resultError.value = error
|
||||
resultData.value = null
|
||||
resultStats.value = null
|
||||
resultColumns.value = []
|
||||
}
|
||||
|
||||
// 开始加载(清空数据,用于新查询)
|
||||
const startLoading = () => {
|
||||
resultLoading.value = true
|
||||
resultError.value = ''
|
||||
resultData.value = null
|
||||
resultStats.value = null
|
||||
resultColumns.value = []
|
||||
}
|
||||
|
||||
// 开始加载但保留数据(用于翻页,避免闪烁)
|
||||
const startLoadingKeepData = () => {
|
||||
resultLoading.value = true
|
||||
resultError.value = ''
|
||||
}
|
||||
|
||||
const stopLoading = () => {
|
||||
resultLoading.value = false
|
||||
}
|
||||
|
||||
return {
|
||||
resultLoading,
|
||||
resultError,
|
||||
resultData,
|
||||
resultMode,
|
||||
resultStats,
|
||||
resultColumns,
|
||||
clearResults,
|
||||
setQueryResult,
|
||||
setUpdateResult,
|
||||
setCommandResult,
|
||||
setError,
|
||||
startLoading,
|
||||
startLoadingKeepData,
|
||||
stopLoading
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user