由于近期DS非常火热,网页聊天框这个老生常谈的需求又被揪出来集成到网页中

思路:先实现大体框架,承载聊天信息的盒子与发送消息的盒子

<template>
    <div id="chat_components_box">
        <div id="msg_box">
            <div class="single_msg_box" v-for="item in msg_data" :key="item.id">
                <div :class="['avatar', item.className]" v-if="item.avatar_directions == 'left'"></div>
                <div
                    :class="item.className == 'user' ? ['message', 'right_msg', 'user_msg'] : item.avatar_directions == 'right' ? ['message', 'right_msg'] : ['message', 'left_msg']">
                    <pre>{{ item.msg }}</pre>
                    <div class="image_box" v-if="item.show_components">
                    </div>
                </div>
                <div :class="['avatar', item.className]" v-if="item.avatar_directions == 'right'"></div>
            </div>
        </div>
        <div id="send_box">
            <div id="user_avatar"></div>
            <div id="user_input"><input type="text" placeholder="输入问题或'/'获取提示词" v-model="user_input_msg"></div>
            <div id="user_send_msg" @click="user_send_msg"></div>
        </div>
    </div>
</template>

这里由于要对本人发出的消息进行单独处理,以及需要区分发送消息还是接收消息,还需要在聊天框中插入图片或其他组件,所以充斥了许多的vif判断

创建好我们的网页结构之后我们定义变量

let user_input_msg = ref("")
const msg_data = reactive([
    {
        id: 0,
        avatar_directions: 'right',
        className: "user",
        msg: "access",
        show_components: false
    }
])

定义点击发送消息事件

const user_send_msg = () => {
    msg_data.push({
        id: msg_data.length,
        avatar_directions: 'right',
        className: "user",
        msg: user_input_msg.value
    })
    user_input_msg.value = ''
}

定义完成后看成品

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐