|
<script setup lang="ts"> |
|
import { ref } from 'vue'; |
|
import { useI18n } from 'vue-i18n'; |
|
type Emits = { |
|
(e: 'ask', val: string): void |
|
} |
|
|
|
type Props = { |
|
loading: boolean |
|
limit?: number |
|
} |
|
const { t } = useI18n(); |
|
|
|
const props = withDefaults(defineProps<Props>(), { |
|
limit: 520 |
|
}); |
|
|
|
const emits = defineEmits<Emits>(); |
|
|
|
const query = ref(''); |
|
|
|
const onAsk = () => { |
|
if (!query.value.trim()) { |
|
query.value = ''; |
|
return; |
|
} |
|
emits('ask', query.value); |
|
query.value = ''; |
|
}; |
|
</script> |
|
<script lang="ts"> |
|
export default { |
|
name: 'ChatInput' |
|
}; |
|
</script> |
|
|
|
<template> |
|
<div id="ask" class="flex items-center justify-center"> |
|
<div class="w-10/12 overflow-hidden rounded-3xl border border-gray-100 bg-white dark:border-gray-300 dark:bg-zinc-700"> |
|
<t-input v-model="query" :disabled="props.loading" clearable :autofocus="false" :maxlength="limit" size="large" :placeholder="t('tips.continue')" @enter="onAsk" /> |
|
</div> |
|
</div> |
|
</template> |
|
|
|
|
|
<style scoped> |
|
#ask { |
|
--td-radius-default: 24px; |
|
} |
|
</style> |
|
|