超好用的AI聊天框组件库,打字机效果,自动编译markdown语法和echarts图表

依赖名称:l-ai-chat

AI聊天输入框组件库
效果图

视频演示

一、组件说明

1. LAIChatComponent (容器组件)

  • 提供整体布局框架
  • 插槽:
    • #content - 放置聊天内容区域
    • #input - 放置输入控制区域

2. LChatContent (内容展示组件)

Props:
props注释类型默认值
dataSource消息数据Array[]

dataSource - 格式示例:

[
  {
    id: '主键',
    content: '提问内容', // 我的提问内容 
    type: 'myMsg', // type: 'myMsg' 是指我的提问
    avatar: '头像地址', // 我的头像(在线图片地址)
  },
  { 
    id: '主键',
    content: 'AI的响应内容',// 支持markdown语法
    type: 'ai', // type: 'ai' 是指AI的回答
    avatar: '头像地址', // AI的头像(在线图片地址)
    contentLoading: false, // ai内容是否处于加载中,默认false
    echartsType: false, // 是否有echarts图标,默认false
    echartsData: {}, // 要渲染的echarts数据,参考echarts官网:https://echarts.apache.org/zh/index.html
  }
]

3. LChatInput (输入控制组件)

Props:
props注释类型默认值
value(v-model)输入框内容String
stopAnswerShow是否显示【停止回答】按钮Booleanfalse
Events(事件):
事件名称注释回调
send发送消息事件,返回最新的消息function(e)
stopAnswer停止回答事件function()
input输入变化事件,返回最新的消息function(e)

二、安装使用

1. 下载依赖

npm install l-ai-chat

2. 在main.js中导入样式文件

import 'l-ai-chat/l-ai-chat.css'

3. .vue文件中使用的示例代码:

<template>
  <LAIChatComponent>
    <template #content>
      <LChatContent :data-source="messages"/>
    </template>
    <template #input>
      <LChatInput 
        :value="inputVal"
        :stop-answer-show="isResponding"
        @send="handleSend"
        @stop-answer="handleStopAnswer"
        @input="handleInput"
      />
    </template>
  </LAIChatComponent>
</template>

<script>
import { LAIChatComponent, LChatContent, LChatInput } from 'l-ai-chat'
export default {
  components: {
    LAIChatComponent, LChatContent, LChatInput
  },
  data() {
    return {
      // 输入框内容
      inputVal:'',
      // 消息数据
      messages: [
          { content: '测试提问', type: 'myMsg', avatar: 'psn-avatar.png' },
          {
              "content": "- 测试项目人员数量和研发转化率\n     - 转化率以百分比形式显示,保留两位小数\n     - 结果按日期和代码排序\n<br></br>\n| 人员 | 人员转化率 | 日期       | 工号   | 金额       | 研发转化率 | 项目名称   |\n|------|------------|------------|------------|------------|------------|------------|\n| 001    | 0.06%      | 2025-05-01 | 001 | 100        | 0.18%      | 测试项目01     |\n",
              "type": "otherMsg",
              "id": "98b75c98a27dbad33e195bd516a185f7",
              "avatar": "ai-robot.png",
              "contentLoading": false,
              "echartsType": true,
              "echartsData": {
                  "title": {
                      "text": "人员和研发转化率"
                  },
                  "tooltip": {},
                  "legend": {
                      "data": [
                          "人员转化率",
                          "研发转化率"
                      ]
                  },
                  "xAxis": [
                      {
                          "type": "category",
                          "data": [
                              "2025-05-01",
                              "2025-05-02",
                              "2025-05-03",
                              "2025-05-04",
                              "2025-05-05"
                          ]
                      }
                  ],
                  "yAxis": [
                      {
                          "type": "value",
                          "name": "转化率"
                      }
                  ],
                  "series": [
                      {
                          "name": "人员转化率",
                          "type": "line",
                          "stack": "转化率",
                          "data": [
                              100.06,
                              90.06,
                              100.06,
                              90.06,
                              100.06
                          ]
                      },
                      {
                          "name": "研发转化率",
                          "type": "line",
                          "stack": "转化率",
                          "data": [
                              100.18,
                              110.18,
                              100.18,
                              110.18,
                              100.18
                          ]
                      }
                  ]
              }
          }
      ],
    }
  },
  methods:{
    /**
     * 发送消息事件,返回最新的消息
     * @param {*} value 输入框内容
     */
    handleSend(value){
      console.log(value)
    },
    /**
     * 输入框输入事件,返回最新的消息
     * @param {*} value 输入框内容
     */
    handleInput(value){
      console.log(value)
    },
    // 停止回答事件
    stopAnswer() {},
  }
}
</script>

NPM地址

NPM: https://www.npmjs.com/package/l-ai-chat

<think>我们正在讨论在Markdown中渲染ECharts图表的问题。根据引用内容,有几种方法可以实现: 1. **使用支持EChartsMarkdown解析器**(如引用[1]所示): 某些Markdown解析器内置了ECharts支持,允许直接在Markdown代码块中书写ECharts配置。例如: ```echarts { "title": { "text": "示例图表" }, "xAxis": { "data": ["A", "B", "C"] }, "yAxis": {}, "series": [{ "type": "bar", "data": [10, 20, 30] }] } ``` 这种方法需要你的Markdown解析器支持自定义代码块渲染,并且已经集成了ECharts。 2. **在React项目中使用ECharts**(如引用[2]所示): 如果你是在React项目中,可以按照以下步骤: - 安装ECharts:`npm install echarts` - 在组件中导入ECharts:`import * as echarts from 'echarts'` - 使用`useRef`绑定一个DOM元素(如div) - 在`useEffect`中初始化图表并设置配置项 示例代码: ```jsx import React, { useEffect, useRef } from 'react'; import * as echarts from 'echarts'; function ChartComponent() { const chartRef = useRef(null); useEffect(() => { const myChart = echarts.init(chartRef.current); const option = { title: { text: '示例图表' }, xAxis: { data: ['A', 'B', 'C'] }, yAxis: {}, series: [{ type: 'bar', data: [10, 20, 30] }] }; myChart.setOption(option); // 清理函数 return () => myChart.dispose(); }, []); return <div ref={chartRef} style={{ width: '100%', height: '400px' }}></div>; } ``` 3. **处理流式返回的Markdown数据并渲染图表**(如引用[3]所示): 如果你从后端通过SSE(Server-Sent Events)接收流式Markdown数据,并且其中包含ECharts配置,你需要: - 解析接收到的Markdown(可能包含代码块) - 识别特定的代码块(例如标记为`echarts`的代码块) - 动态渲染ECharts图表 这通常需要自定义Markdown渲染组件,在解析到图表代码块时,动态创建ECharts实例并渲染。 **总结步骤**: 1. 确定你的环境:是普通的Markdown文件(需要特定解析器支持)还是前端项目(如React)? 2. 如果是前端项目,按照引用[2]的方法,使用React组件包裹ECharts。 3. 如果是在Markdown中直接写ECharts配置,确保你的Markdown解析器支持(如引用[1]),或者使用自定义的Markdown组件(如引用[3]提到的处理方式)。 **注意事项**: - ECharts需要DOM元素来挂载,所以在Markdown中直接写ECharts配置通常需要额外的解析渲染支持。 - 在React等架中,注意组件的生命周期,及时销毁图表以避免内存泄漏。 §§相关问题§§ 1. 如何在Vue项目中集成ECharts并渲染图表? 2. Markdown解析器如何自定义以支持ECharts图表? 3. 如何从后端获取数据动态更新ECharts图表? 4. ECharts图表在响应式布局中如何自适应?</think>### 在 Markdown 中渲染 ECharts 图表的方法 根据引用内容,主要有以下三种实现方式: #### 方法一:使用支持 EChartsMarkdown 解析器(推荐) 1. **选择内置 ECharts 的解析器** 如引用[1]提到的解析器,可直接在 Markdown 代码块中写 ECharts 配置: ````markdown ```echarts { "title": { "text": "销售数据" }, "xAxis": { "data": ["1月", "2月", "3月"] }, "yAxis": {}, "series": [{ "type": "bar", "data": [120, 200, 150] }] } ``` ```` 2. **自动渲染** 解析器会自动将代码块转换为交互式图表[^1] #### 方法二:在 React 项目中手动集成 1. **安装依赖** ```bash npm install echarts ``` 2. **组件实现**(引用[2]方案) ```jsx import React, { useEffect, useRef } from 'react'; import * as echarts from 'echarts'; export default function Chart() { const chartRef = useRef(null); useEffect(() => { const chart = echarts.init(chartRef.current); const option = { title: { text: '用户增长' }, xAxis: { data: ['2020', '2021', '2022'] }, yAxis: {}, series: [{ type: 'line', data: [30, 72, 128] }] }; chart.setOption(option); // 窗口缩放时自适应 const resizeHandler = () => chart.resize(); window.addEventListener('resize', resizeHandler); return () => { window.removeEventListener('resize', resizeHandler); chart.dispose(); // 清理实例 }; }, []); return <div ref={chartRef} style={{ width: '100%', height: 400 }} />; } ``` #### 方法三:流式数据渲染(SSE 场景) 1. **后端返回 Markdown 流数据**(引用[3]) 后端通过 SSE 返回含 ECharts 配置的 Markdown: ```markdown ```echarts { "series": [{ "type": "pie", "data": [...] }] } ``` ``` 2. **前端动态解析** 使用自定义 Markdown 渲染器,检测到 `echarts` 代码块时动态创建图表容器并初始化 ### 注意事项 1. **容器尺寸**:图表需指定明确宽高(如 `height: 400px`) 2. **按需引入**:大型项目建议按需导入模块: ```js import { use } from 'echarts/core'; import { BarChart } from 'echarts/charts'; import { GridComponent } from 'echarts/components'; use([BarChart, GridComponent]); ``` 3. **响应式处理**:添加窗口 `resize` 事件监听器,调用 `chart.resize()` > 示例效果: > ![柱状图示例](https://fastly.jsdelivr.net/gh/apache/echarts-website@asf-site/examples/data/thumb/bar-simple.webp) > _基础柱状图(ECharts 官方示例)_
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值