commit
c3924b2ece
Binary file not shown.
|
After Width: | Height: | Size: 716 KiB |
|
|
@ -3,7 +3,7 @@ import type { Ref } from 'vue'
|
||||||
import { computed, onMounted, onUnmounted, ref } from 'vue'
|
import { computed, onMounted, onUnmounted, ref } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { storeToRefs } from 'pinia'
|
import { storeToRefs } from 'pinia'
|
||||||
import { NAutoComplete, NButton, NInput, NRadioButton, NRadioGroup, useDialog, useMessage } from 'naive-ui'
|
import { NAutoComplete, NButton, NDropdown, NInput, NRadioButton, NRadioGroup, useDialog, useMessage } from 'naive-ui'
|
||||||
import html2canvas from 'html2canvas'
|
import html2canvas from 'html2canvas'
|
||||||
import { Message } from './components'
|
import { Message } from './components'
|
||||||
import { useScroll } from './hooks/useScroll'
|
import { useScroll } from './hooks/useScroll'
|
||||||
|
|
@ -11,13 +11,14 @@ import { useChat } from './hooks/useChat'
|
||||||
import { useUsingContext } from './hooks/useUsingContext'
|
import { useUsingContext } from './hooks/useUsingContext'
|
||||||
import HeaderComponent from './components/Header/index.vue'
|
import HeaderComponent from './components/Header/index.vue'
|
||||||
import { HoverButton, SvgIcon } from '@/components/common'
|
import { HoverButton, SvgIcon } from '@/components/common'
|
||||||
|
import { useIconRender } from '@/hooks/useIconRender'
|
||||||
import { useBasicLayout } from '@/hooks/useBasicLayout'
|
import { useBasicLayout } from '@/hooks/useBasicLayout'
|
||||||
import { useChatStore, usePromptStore } from '@/store'
|
import { useChatStore, usePromptStore } from '@/store'
|
||||||
import { t } from '@/locales'
|
import { t } from '@/locales'
|
||||||
import { bing_search, chat, chatfile } from '@/api/chat'
|
import { bing_search, chat, chatfile } from '@/api/chat'
|
||||||
import { idStore } from '@/store/modules/knowledgebaseid/id'
|
import { idStore } from '@/store/modules/knowledgebaseid/id'
|
||||||
let controller = new AbortController()
|
let controller = new AbortController()
|
||||||
|
const { iconRender } = useIconRender()
|
||||||
// const openLongReply = import.meta.env.VITE_GLOB_OPEN_LONG_REPLY === 'true'
|
// const openLongReply = import.meta.env.VITE_GLOB_OPEN_LONG_REPLY === 'true'
|
||||||
|
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
|
|
@ -525,7 +526,57 @@ const footerClass = computed(() => {
|
||||||
classes = ['sticky', 'left-0', 'bottom-0', 'right-0', 'p-2', 'pr-3', 'overflow-hidden']
|
classes = ['sticky', 'left-0', 'bottom-0', 'right-0', 'p-2', 'pr-3', 'overflow-hidden']
|
||||||
return classes
|
return classes
|
||||||
})
|
})
|
||||||
|
const options = computed(() => {
|
||||||
|
const common = [
|
||||||
|
{
|
||||||
|
label: '对话',
|
||||||
|
key: '对话',
|
||||||
|
icon: iconRender({ icon: 'ri-chat-1-line' }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '知识库',
|
||||||
|
key: '知识库',
|
||||||
|
icon: iconRender({ icon: 'ri-store-2-line' }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: 'Bing搜索',
|
||||||
|
key: 'Bing搜索',
|
||||||
|
icon: iconRender({ icon: 'ri-search-line' }),
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'divider',
|
||||||
|
key: 'd1',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: '清除会话',
|
||||||
|
key: '清除会话',
|
||||||
|
icon: iconRender({ icon: 'ri:delete-bin-line' }),
|
||||||
|
},
|
||||||
|
]
|
||||||
|
|
||||||
|
return common
|
||||||
|
})
|
||||||
|
function handleSelect(key: 'copyText' | 'delete' | 'toggleRenderType') {
|
||||||
|
if (key == '清除会话') {
|
||||||
|
handleClear()
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
search.value = key
|
||||||
|
searchfun()
|
||||||
|
ms.success(`切换${key}成功!`)
|
||||||
|
}
|
||||||
|
|
||||||
|
// switch (key) {
|
||||||
|
// case 'copyText':
|
||||||
|
// handleCopy()
|
||||||
|
// return
|
||||||
|
// case 'toggleRenderType':
|
||||||
|
// asRawText.value = !asRawText.value
|
||||||
|
// return
|
||||||
|
// case 'delete':
|
||||||
|
// emit('delete')
|
||||||
|
// }
|
||||||
|
}
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
scrollToBottom()
|
scrollToBottom()
|
||||||
if (inputRef.value && !isMobile.value)
|
if (inputRef.value && !isMobile.value)
|
||||||
|
|
@ -595,16 +646,27 @@ function searchfun() {
|
||||||
<footer :class="footerClass">
|
<footer :class="footerClass">
|
||||||
<div class="w-full max-w-screen-xl m-auto">
|
<div class="w-full max-w-screen-xl m-auto">
|
||||||
<div class="flex items-center justify-between space-x-2">
|
<div class="flex items-center justify-between space-x-2">
|
||||||
<NRadioGroup v-model:value="search" @change="searchfun">
|
<NRadioGroup v-if="!isMobile" v-model:value="search" @change="searchfun">
|
||||||
<NRadioButton value="对话" label="对话" />
|
<NRadioButton value="对话" label="对话" />
|
||||||
<NRadioButton value="知识库" label="知识库" />
|
<NRadioButton value="知识库" label="知识库" />
|
||||||
<NRadioButton value="Bing搜索" label="Bing搜索" />
|
<NRadioButton value="Bing搜索" label="Bing搜索" />
|
||||||
</NRadioGroup>
|
</NRadioGroup>
|
||||||
<HoverButton @click="handleClear">
|
<HoverButton v-if="!isMobile" @click="handleClear">
|
||||||
<span class="text-xl text-[#4f555e] dark:text-white">
|
<span class="text-xl text-[#4f555e] dark:text-white">
|
||||||
<SvgIcon icon="ri:delete-bin-line" />
|
<SvgIcon icon="ri:delete-bin-line" />
|
||||||
</span>
|
</span>
|
||||||
</HoverButton>
|
</HoverButton>
|
||||||
|
<NDropdown
|
||||||
|
v-if="isMobile"
|
||||||
|
:trigger="isMobile ? 'click' : 'hover'"
|
||||||
|
:placement="!inversion ? 'right' : 'left'"
|
||||||
|
:options="options"
|
||||||
|
@select="handleSelect"
|
||||||
|
>
|
||||||
|
<button>
|
||||||
|
<SvgIcon icon="ri:more-2-fill" />
|
||||||
|
</button>
|
||||||
|
</NDropdown>
|
||||||
<HoverButton v-if="!isMobile" @click="handleExport">
|
<HoverButton v-if="!isMobile" @click="handleExport">
|
||||||
<span class="text-xl text-[#4f555e] dark:text-white">
|
<span class="text-xl text-[#4f555e] dark:text-white">
|
||||||
<SvgIcon icon="ri:download-2-line" />
|
<SvgIcon icon="ri:download-2-line" />
|
||||||
|
|
@ -642,3 +704,27 @@ function searchfun() {
|
||||||
</footer>
|
</footer>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
#app{
|
||||||
|
background-image: url(../../assets/bg.jpg);
|
||||||
|
background-size:100% 100%;
|
||||||
|
|
||||||
|
}
|
||||||
|
.bg-green-50{
|
||||||
|
background-color: rgba(250, 250, 250, 0);
|
||||||
|
}
|
||||||
|
.n-layout{
|
||||||
|
background-color: rgba(250, 250, 250, 0.5);
|
||||||
|
}
|
||||||
|
.n-layout-sider{
|
||||||
|
background-color: rgba(250, 250, 250, 0.5);
|
||||||
|
}
|
||||||
|
.n-switch__button{
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
.shadow-md{
|
||||||
|
box-shadow: 0 12px 40px 0 rgba(148,186,215,.2);
|
||||||
|
border: 1px solid ;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ const rules = {
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
const handleValidateClick = (item: any) => {
|
const handleValidateClick = (item: any) => {
|
||||||
// console.log(item)
|
|
||||||
choice.value = item
|
choice.value = item
|
||||||
store.knowledgeid = choice.value
|
store.knowledgeid = choice.value
|
||||||
items.value.forEach((res: { value: any; show: boolean }) => {
|
items.value.forEach((res: { value: any; show: boolean }) => {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue