Files
gva/web/src/view/chatgpt/chatTable.vue
奇淼(piexlmax 64608f6b05 Gpt (#1389)
* fix:优化自动化代码搜索区域 (#1382)

* 增加gpt功能(万用表格)

* feat: chatTable页面
---------

Co-authored-by: ipanghu <bypanghu@163.com>
Co-authored-by: 陶正虎 <zhenghu.tao@jutze.com.cn>
Co-authored-by: krank <emosick@qq.com>
2023-03-25 20:02:14 +08:00

169 lines
4.2 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="gva-table-box">
<div v-if="!chatToken">
<warning-bar title="在资源权限中将此角色的资源权限清空 或者不包含创建者的角色 即可屏蔽此客户资源的显示" />
<el-input v-model="skObj.sk" class="query-ipt" placeholder="请输入您的ChatGpt SK" clearable />
<el-button type="primary" @click="save">保存</el-button>
<div class="secret">
<el-empty description="请到gpt网站获取您的skhttps://platform.openai.com/account/api-keys" />
</div>
</div>
<div v-else>
<el-form :model="form" label-width="120px">
<el-form-item label="删除当前sk">
<el-popover placement="top" width="160">
<p>确定要删除并返回吗</p>
<div style="text-align: right; margin-top: 8px;">
<el-button type="primary" @click="deleteSK">确定</el-button>
</div>
<template #reference>
<el-button type="primary" link icon="delete">删除</el-button>
</template>
</el-popover>
</el-form-item>
<el-form-item label="查询db名称">
<el-select v-model="form.dbname" placeholder="请选择库" style="width: 115px">
<el-option
v-for="(item, index) in dbArr"
:key="index"
:label="item.database"
:value="item.database"
/>
</el-select>
</el-form-item>
<el-form-item label="查询db描述">
<el-input
v-model="form.chat"
:autosize="{ minRows: 2, maxRows: 4 }"
type="textarea"
clearable
placeholder="请输入对话"
/>
</el-form-item>
<el-form-item label="GPT生成SQL:">
<el-input
v-model="sql"
:autosize="{ minRows: 2, maxRows: 4 }"
type="textarea"
disabled
placeholder="此处展示自动生成的sql"
/>
</el-form-item>
<el-button type="primary" @click="handleQueryTable">查询</el-button>
</el-form>
<div class="tables">
<el-table
v-if="tableData.length"
ref="multipleTable"
:data="tableData"
style="width: 100%"
tooltip-effect="dark"
height="400px"
>
<el-table-column
v-for="(item, index) in tableData[0]"
:key="index"
:prop="index"
:label="index"
min-width="200"
show-overflow-tooltip
/>
</el-table>
<p v-else class="text">请在对话框输入你需要AI帮你查询的内容</p>
</div>
</div>
</div>
</template>
<script setup>
import { ElMessage } from 'element-plus'
import { getTableApi,
createSKApi,
getSKApi,
deleteSKApi } from '@/api/chatgpt'
import { getDB as getDBAPI } from '@/api/autoCode'
import { ref, reactive } from 'vue'
const chatToken = ref(null)
const skObj = reactive({
sk: '',
})
const sql = ref("")
const getSK = async() => {
const res = await getSKApi()
chatToken.value = res.data.ok
}
const getDB = async() => {
const res = await getDBAPI()
if (res.code === 0) {
dbArr.value = res.data.dbs
}
}
getSK()
getDB()
const save = async() => {
const res = await createSKApi(skObj)
if (res.code === 0) {
await getSK()
}
}
const deleteSK = async() => {
const res = await deleteSKApi()
if (res.code === 0) {
await getSK()
}
}
const form = ref({
dbname: '',
chat: '',
})
const dbArr = ref([])
const tableData = ref([])
const handleQueryTable = async() => {
const res = await getTableApi(form.value)
if (res.code === 0) {
tableData.value = res.data.results||[]
}
sql.value = res.data.sql
// 根据后台返回值动态渲染表格
}
</script>
<style scoped lang="scss">
.secret{
padding: 30px;
margin-top: 20px;
background: #F5F5F5;
p {
line-height: 30px;
}
}
.query-ipt{
width: 300px;
margin-right: 30px;
}
.content{
p {
font-size: 16px;
line-height: 20px;
}
padding: 10px;
width: 100%;
background: #F5F5F5;
margin-top: 30px;
}
.tables{
width: 100%;
margin-top: 30px;
.text{
font-size: 18px;
color: #6B7687;
text-align: center;
}
}
</style>