Browse Source

fix:优化会话、文生图、角色、知识库、图像分析的布局;修改图像分析ui切换;

dxj
李朋徽 1 year ago
parent
commit
76747cc21d
  1. 1
      src/components/AppTextarea/index.vue
  2. 1
      src/utils/axios/index.ts
  3. 2
      src/views/conversation/index.vue
  4. 54
      src/views/repository/index.vue
  5. 42
      src/views/role/index.vue
  6. 40
      src/views/textToImage/index.vue
  7. 114
      src/views/visualAnalysis/index.vue

1
src/components/AppTextarea/index.vue

@ -101,7 +101,6 @@ function stopMessage() {
<style lang="scss" scoped> <style lang="scss" scoped>
@include app('textarea') { @include app('textarea') {
min-height: 108px;
.stop { .stop {
width: 100px; width: 100px;
height: 30px; height: 30px;

1
src/utils/axios/index.ts

@ -29,6 +29,7 @@ const notDecryptWhiteList = [
'/open-chat/chat/stopGenerate', '/open-chat/chat/stopGenerate',
'/hulk-system/hulk-resource/oss/endpoint/put-file', '/hulk-system/hulk-resource/oss/endpoint/put-file',
'/open-gpts/gpts/getQanythingStreamChat', '/open-gpts/gpts/getQanythingStreamChat',
'/open-gpts/gpts/getImageVision',
] ]
/** /**

2
src/views/conversation/index.vue

@ -454,7 +454,7 @@ onBeforeRouteLeave(() => {
<!-- 发送框 --> <!-- 发送框 -->
<AppTextarea <AppTextarea
class="pl-52 pr-32 mt-10" class="pl-44 pr-24 mt-10"
:btn-loading="sendBtnLoading" :btn-loading="sendBtnLoading"
:is-stop="false" :is-stop="false"
@send="handleSend" @send="handleSend"

54
src/views/repository/index.vue

@ -426,29 +426,31 @@ onBeforeRouteLeave(() => {
> >
</AppConversationDefault> </AppConversationDefault>
<!-- 消息列表 --> <div class="h-full flex flex-col">
<AppMessage <!-- 消息列表 -->
v-if="!conversationDefaultShow && appMessageShow" <AppMessage
ref="appMessageRef" v-if="!conversationDefaultShow && appMessageShow"
:key="MenuTypeEnum.REPOSITORY" ref="appMessageRef"
class="pl-27 pr-5" :key="MenuTypeEnum.REPOSITORY"
:el-index="elIndex" class="pl-27 pr-5"
:list="messageList" :el-index="elIndex"
@on-scroll-top="onScrollTop" :list="messageList"
@reload-message="reloadMessage" @on-scroll-top="onScrollTop"
> @reload-message="reloadMessage"
</AppMessage> >
</AppMessage>
<!-- 发送框 -->
<AppTextarea
class="pl-44 pr-24 mt-10"
:btn-loading="sendBtnLoading"
:is-stop="false"
@send="handleSend"
@stop-message="stopMessageFun"
></AppTextarea>
</div>
</Spin> </Spin>
<!-- 发送框 -->
<AppTextarea
class="pl-52 pr-32 mt-10"
:btn-loading="sendBtnLoading"
:is-stop="false"
@send="handleSend"
@stop-message="stopMessageFun"
></AppTextarea>
<Modal v-model:open="fileModelShow" :footer="false"> <Modal v-model:open="fileModelShow" :footer="false">
<AppRepositoryFile></AppRepositoryFile> <AppRepositoryFile></AppRepositoryFile>
</Modal> </Modal>
@ -459,10 +461,10 @@ onBeforeRouteLeave(() => {
<style lang="scss" scoped> <style lang="scss" scoped>
.file-box { .file-box {
position: absolute; position: absolute;
bottom: 130px; bottom: 125px;
left: 10px; left: 10px;
width: 60px; width: 55px;
height: 60px; height: 55px;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: center; justify-content: center;
@ -473,8 +475,8 @@ onBeforeRouteLeave(() => {
border-radius: 32px; border-radius: 32px;
cursor: pointer; cursor: pointer;
.icon { .icon {
width: 22px; width: 20px;
height: 22px; height: 20px;
} }
} }
</style> </style>

42
src/views/role/index.vue

@ -426,27 +426,29 @@ onBeforeRouteLeave(() => {
> >
</AppRoleDefault> </AppRoleDefault>
<!-- 消息列表 --> <div class="h-full flex flex-col">
<AppMessage <!-- 消息列表 -->
v-if="!conversationDefaultShow && appMessageShow" <AppMessage
ref="appMessageRef" v-if="!conversationDefaultShow && appMessageShow"
:key="MenuTypeEnum.ROLE" ref="appMessageRef"
class="pl-27 pr-5" :key="MenuTypeEnum.ROLE"
:el-index="elIndex" class="pl-27 pr-5"
:list="messageList" :el-index="elIndex"
@on-scroll-top="onScrollTop" :list="messageList"
@reload-message="reloadMessage" @on-scroll-top="onScrollTop"
> @reload-message="reloadMessage"
</AppMessage> >
</AppMessage>
<!-- 发送框 -->
<AppTextarea
v-if="!conversationDefaultShow"
class="pl-44 pr-24 mt-10"
:btn-loading="sendBtnLoading"
@send="handleSend"
></AppTextarea>
</div>
</Spin> </Spin>
<!-- 发送框 -->
<AppTextarea
v-if="!conversationDefaultShow"
class="pl-52 pr-32 mt-10"
:btn-loading="sendBtnLoading"
@send="handleSend"
></AppTextarea>
</template> </template>
</AppContainerBox> </AppContainerBox>
</template> </template>

40
src/views/textToImage/index.vue

@ -386,26 +386,28 @@ onBeforeRouteLeave(() => {
> >
</AppConversationDefault> </AppConversationDefault>
<!-- 消息列表 --> <div class="h-full flex flex-col">
<AppMessage <!-- 消息列表 -->
v-if="!conversationDefaultShow && appMessageShow" <AppMessage
ref="appMessageRef" v-if="!conversationDefaultShow && appMessageShow"
class="pl-27 pr-5" ref="appMessageRef"
:list="messageList" class="pl-27 pr-5"
:el-index="elIndex" :list="messageList"
ai-width-type="auto" :el-index="elIndex"
@on-scroll-top="onScrollTop" ai-width-type="auto"
@reload-message="reloadMessage" @on-scroll-top="onScrollTop"
> @reload-message="reloadMessage"
</AppMessage> >
</AppMessage>
<!-- 发送框 -->
<AppTextarea
class="pl-44 pr-24 mt-10"
:btn-loading="sendBtnLoading"
@send="handleSend"
></AppTextarea>
</div>
</Spin> </Spin>
<!-- 发送框 -->
<AppTextarea
class="pl-52 pr-32 mt-10"
:btn-loading="sendBtnLoading"
@send="handleSend"
></AppTextarea>
</template> </template>
</AppContainerBox> </AppContainerBox>
</template> </template>

114
src/views/visualAnalysis/index.vue

@ -2,7 +2,6 @@
import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue' import { computed, nextTick, onMounted, onUnmounted, ref, watch } from 'vue'
import { onBeforeRouteLeave } from 'vue-router' import { onBeforeRouteLeave } from 'vue-router'
import { Button, Image, Spin, UploadDragger, message } from 'ant-design-vue' import { Button, Image, Spin, UploadDragger, message } from 'ant-design-vue'
import type { UploadChangeParam, UploadProps } from 'ant-design-vue'
import { SvgIcon } from '@/components/SvgIcon' import { SvgIcon } from '@/components/SvgIcon'
import { AppTextarea } from '@/components/AppTextarea' import { AppTextarea } from '@/components/AppTextarea'
import { AppContainerBox } from '@/components/AppContainerBox' import { AppContainerBox } from '@/components/AppContainerBox'
@ -141,6 +140,7 @@ async function handleSubMenuChange(index: number, item?: SubMenuItem) {
// item // item
if (item) { if (item) {
getHistoryMessage() getHistoryMessage()
fileList.value = []
} }
} }
@ -176,6 +176,7 @@ async function handleSend(value: string) {
return return
} }
sendMessage(conversationData.value.id, value) sendMessage(conversationData.value.id, value)
fileList.value = []
} }
} }
@ -260,7 +261,7 @@ async function sendMessage(conversationId: string, question: string): Promise<vo
messageStore.setMessageStatus(MessageStatusEnum.LOADING) messageStore.setMessageStatus(MessageStatusEnum.LOADING)
messageStore.setMessagePushItem({ messageStore.setMessagePushItem({
messageType: MessageTypeEnum.USER, messageType: MessageTypeEnum.USER,
content: question, content: `${question}![Picture](${fileList.value[0]})`,
time: String(new Date().getTime()), time: String(new Date().getTime()),
avatar: '', avatar: '',
}) })
@ -323,9 +324,9 @@ function handleModel(index: number) {
* @description: 图片上传前的处理 * @description: 图片上传前的处理
*/ */
function handleBeforeUpload(file: File) { function handleBeforeUpload(file: File) {
const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png' const isJpgOrPng = file.type === 'image/jpeg' || file.type === 'image/png' || file.type === 'image/gif'
if (!isJpgOrPng) { if (!isJpgOrPng) {
message.error('只能上传JPG、PNG格式图片!') message.error('只能上传JPG、JPEG、PNG、GIF格式图片!')
} }
const isLt10M = file.size / 1024 / 1024 < 10 const isLt10M = file.size / 1024 / 1024 < 10
if (!isLt10M) { if (!isLt10M) {
@ -435,59 +436,60 @@ onBeforeRouteLeave(() => {
> >
</AppConversationDefault> </AppConversationDefault>
<!-- 消息列表 --> <div class="h-full flex flex-col">
<AppMessage <!-- 消息列表 -->
v-if="!conversationDefaultShow && appMessageShow" <AppMessage
ref="appMessageRef" v-if="!conversationDefaultShow && appMessageShow"
class="pl-27 pr-5" ref="appMessageRef"
height="calc(100% - 160px)" class="pl-27 pr-5"
:el-index="elIndex" height="calc(100% - 200px)"
:list="messageList" :el-index="elIndex"
@on-scroll-top="onScrollTop" :list="messageList"
@reload-message="reloadMessage" @on-scroll-top="onScrollTop"
> @reload-message="reloadMessage"
</AppMessage> >
</Spin> </AppMessage>
<!-- 发送框 --> <!-- 发送框 -->
<div v-if="!fileList.length" class="upload-box absolute right-0 bottom-5 pl-52 pr-32 mt-10s w-full"> <div v-if="!fileList.length" class="upload-box absolute right-0 bottom-5 pl-44 pr-24 mt-10s w-full">
<UploadDragger <UploadDragger
name="file" name="file"
:multiple="false" :multiple="false"
:max-count="1" :max-count="1"
:show-upload-list="false" :show-upload-list="false"
:custom-request="handleCustomRequest" :custom-request="handleCustomRequest"
:before-upload="handleBeforeUpload" :before-upload="handleBeforeUpload"
> >
<SvgIcon class="upload-icon" name="image"></SvgIcon> <SvgIcon class="upload-icon" name="image"></SvgIcon>
<p class="ant-upload-text"> <p class="ant-upload-text">
拖拽图片到这里或者点击添加 拖拽图片到这里或者点击添加
</p> </p>
<p class="ant-upload-hint"> <p class="ant-upload-hint">
图片格式支持jpgjpegpnggifwebp 图片格式支持jpgjpegpnggifwebp
</p> </p>
</UploadDragger> </UploadDragger>
</div> </div>
<div <div
v-else v-else
class="w-full" class="w-full"
> >
<div class="absolute left-0 bottom-35 pl-52 pr-32 mt-10 "> <div class="pl-44 pr-24 mt-2">
已上传图片 <Image
<Image class="rounded"
class="rounded" :width="60"
:width="60" :height="60"
:height="60" :src="fileList[0]"
:src="fileList[0]" fallback="data:image/png;base64,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"
fallback="data:image/png;base64,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" ></Image>
></Image> </div>
<AppTextarea
class="pl-44 pr-24 mt-2"
:btn-loading="sendBtnLoading"
@send="handleSend"
></AppTextarea>
</div>
</div> </div>
<AppTextarea </Spin>
class="pl-52 pr-32 mt-10 "
:btn-loading="sendBtnLoading"
@send="handleSend"
></AppTextarea>
</div>
</template> </template>
</AppContainerBox> </AppContainerBox>
</template> </template>

Loading…
Cancel
Save