青鸟ai,pc版仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

117 lines
2.5 KiB

<!-- 公共输入框组件 -->
<script setup lang="ts">
import { computed, ref } from 'vue'
import { Button, Textarea, message } from 'ant-design-vue'
import { SvgIcon } from '@/components/SvgIcon'
import { useMessageStore } from '@/store/moules/messageStore/index'
import { MessageStatusEnum } from '@/enums/messageEnum'
const props = defineProps({
placeholder: {
type: String,
default: '在此输入你想了解的内容(Shift + Enter = 换行)',
},
btnLoading: {
type: Boolean,
default: false,
},
isStop: {
type: Boolean,
default: false,
},
})
const emit = defineEmits(['pressEnter', 'send', 'stopMessage'])
const messageStore = useMessageStore()
const value = ref('')
const stopShow = computed(() => {
if (!props.isStop) {
return false
}
if (
messageStore.getMessageList.length
&& messageStore.getMessageList[messageStore.getMessageList.length - 1].messageStatus === MessageStatusEnum.ACTICON
) {
return true
}
else {
return false
}
})
function pressEnter(event: KeyboardEvent) {
if (event.shiftKey) {
return false
}
if (value.value === '') {
message.warning('请输入内容')
setTimeout(() => {
value.value = ''
}, 0)
return false
}
emit('pressEnter', value.value)
handeleSend()
}
function handeleSend() {
emit('send', value.value)
setTimeout(() => {
value.value = ''
}, 0)
}
function stopMessage() {
emit('stopMessage')
}
</script>
<template>
<div class="app-textarea absolute right-0 bottom-5 w-full">
<div class="relative">
<div
v-if="stopShow"
class="stop flex justify-center items-center cursor-pointer"
@click="stopMessage"
>
<SvgIcon class="mr-2" name="stop"></SvgIcon>
停止回答
</div>
<Textarea
v-model:value="value"
class="pt-4 pr-34 pb-6 pl-4"
:placeholder="placeholder"
:auto-size="{ minRows: 3, maxRows: 8 }"
@press-enter="pressEnter"
>
</Textarea>
<Button
class="w-28 absolute right-5 bottom-3"
type="primary"
:loading="btnLoading"
@click="handeleSend"
>
发送
</Button>
</div>
</div>
</template>
<style lang="scss" scoped>
@include app('textarea') {
min-height: 108px;
.stop {
width: 100px;
height: 30px;
border-radius: 20px;
background-color: #edf3ff;
position: absolute;
top: -38px;
left: calc(50% - 40px);
z-index: 1;
}
}
</style>