Skip to content

ChatInput 聊天输入框

更新: 2025/2/12 字数: 0 字 时长: 0 分钟

提示

ChatInput 组件用于创建聊天输入框。拍照、语音转文字、发送消息的样式已完成,具体功能需要自行实现。

基本使用

发送消息

v-mode:value用于绑定输入框的值,点击发送按钮,触发send事件,v-model:loading可以用来控制当前发送状态,type控制当前转换类型,可选textvoice

vue
<script setup lang="ts">
const inputValue = ref("");
const loading = ref(false);
const type = ref("text");

function sendMessage(val) {
  console.log(val);
  loading.value = true;
  setTimeout(() => {
    loading.value = false;
  }, 2000);
}
</script>

<template>
  <ChatInput
    v-model:value="inputValue"
    v-model:loading="loading"
    v-model:type="type"
    @send="sendMessage"
  />
</template>

拍照

UploadImg组件一样,调用beforeReadafterRead方法即可。

vue
<script lang="ts" setup>
import { useRecord } from "@/hooks";

definePage({
  name: "ChatInput",
  meta: {
    level: 2,
    title: "聊天输入框",
    i18n: "menus.chatInput",
  },
});
const inputValue = ref("");

const { beforeRead, afterRead } = useUpload();
</script>
<template>
  <ChatInput
    v-model:value="inputValue"
    @before-read="beforeRead"
    @after-read="afterRead"
  />
</template>

录音转文字

需调用useRecord的方法,配合组件的startRecordednRecord方法使用。conversionType为录音转文字的状态,有starting/endnoVioce四种状态,showDialog控制是否显示录音转文字的对话框。

vue
<script setup lang="ts">
import { useUpload } from "../upload/utils/hook";
import { useRecord } from "@/hooks";

const inputValue = ref("");
const conversionType = ref("start");
const showDialog = ref(false);

const { beforeRead, afterRead } = useUpload();
const { audioUrl, startRecord, stopRecord } = useRecord();

function startRecordFn() {
  console.log("开始录音");
  conversionType.value = "start";
  startRecord()
    .then(() => {
      console.log("录音中");
    })
    .catch((err) => {
      console.log(err);
      showDialog.value = false;
    });
}
function endRecordFn() {
  console.log("结束录音");
  stopRecord()
    .then(() => {
      console.log("录音文件", audioUrl);
      inputValue.value = "录音结果";
      conversionType.value = "end";
      showDialog.value = false;
    })
    .catch((err) => {
      console.log(err);
      conversionType.value = "noVioce";
    });
}
</script>

<template>
  <ChatInput
    v-model:value="inputValue"
    v-model:conversion-type="conversionType"
    v-model:show-dialog="showDialog"
    v-model:type="type"
    @before-read="beforeRead"
    @after-read="afterRead"
    @start-record="startRecordFn"
    @end-record="endRecordFn"
  />
</template>

API

传参配置

参数名类型默认值说明
v-model:valuestring-输入框的值
v-model:loadingbooleanfalse是否正在发送消息
v-model:typestringtext当前转换类型,可选textvoice
v-model:conversion-typestringstart录音转文字的状态,有startingendnoVioce四种状态
v-model:show-dialogbooleanfalse是否显示录音转文字的对话框

事件

事件名说明回调参数
send发送消息事件输入框的值
before-read图片上传前触发图片信息
after-read图片上传后触发图片信息
start-record开始录音事件-
end-record结束录音事件-

Released under the MIT License.

本站访客数 人次 本站总访问量