<script setup lang="ts">
import { findDvSqlBotDataset } from '@/api/aiSqlBot'
import { onMounted, reactive } from 'vue'
import { storeToRefs } from 'pinia'
import { dvMainStoreWithOut } from '@/store/modules/data-visualization/dvMain'
import { useI18n } from '@/hooks/web/useI18n'
import { Refresh } from '@element-plus/icons-vue'
const { t } = useI18n()
const dvMainStore = dvMainStoreWithOut()
const { dvInfo } = storeToRefs(dvMainStore)
const props = defineProps({
assistantId: {
type: String,
required: false
}
})
const newChat = (param?: any) => {
const handler = window['sqlbot_assistant_handler']
if (handler && handler[props.assistantId]) {
handler[props.assistantId].createConversation(param)
}
}
const init = () => {
if (dvInfo.value.id) {
findDvSqlBotDataset(dvInfo.value.id).then(res => {
state.baseDatasetInfo = res.data
state.curDatasetInfo = state.baseDatasetInfo[0]
state.curDatasetId = state.curDatasetInfo.tableId
datasetSelect()
})
}
}
onMounted(() => {
init()
})
const state = reactive({
baseDatasetInfo: [],
curDatasetInfo: null,
curDatasetId: null
})
const datasetSelect = () => {
state.baseDatasetInfo.forEach(datasetInfo => {
if (datasetInfo.tableId === state.curDatasetId) {
localStorage.setItem('dsId', state.curDatasetInfo.dsId)
localStorage.setItem('tableId', state.curDatasetInfo.tableId)
newChat()
}
})
}
const refresh = () => {
init()
newChat()
}
</script>
<template>
<el-row class="de-sq-assistant">
<span class="de-sq-tips">{{ t('visualization.cur_sq_dataset') }}</span>
<el-select
v-model="state.curDatasetId"
class="de-sq-select"
:teleported="false"
size="small"
@change="datasetSelect"
>
<el-option
v-for="option in state.baseDatasetInfo"
size="mini"
:key="option.tableId"
:value="option.tableId"
:label="option.tableName"
></el-option>
</el-select>
<div class="de-sq-button">
<el-button
size="small"
:title="t('visualization.refresh')"
:icon="Refresh"
text
@click="refresh"
/>
</div>
</el-row>
</template>
<style lang="less">
.assistant-chat-main {
padding: 0 0 40px;
}
</style>
<style scoped lang="less">
.de-sq-assistant {
position: absolute;
display: flex;
bottom: 140px;
left: 20px;
width: 100%;
z-index: 10;
color: #646a73;
background-color: #fff;
font-size: 14px;
}
.de-sq-tips {
font-size: 14px;
line-height: 28px;
}
.de-sq-icon {
font-size: 14px;
line-height: 28px;
}
.de-sq-select {
width: auto;
min-width: 150px;
max-width: 400px;
}
.de-sq-button {
margin-left: 4px;
}
</style>