vue模仿主流ai大模型聊天对话流式单独右侧输出代码块并预览效果代码
代码语言:html
所属分类:其他
代码描述:vue模仿主流ai大模型聊天对话流式单独右侧输出代码块并预览效果代码,支持多个代码块的输出和切换、支持本地消息记录的存储,聊天记录与代码显示区域可隐藏,跟豆包的ai编程输出效果很像,ai回复中的代码块是一个卡片占位符,点开后右侧显示具体的代码并且还能预览,配合后端的websocket实时流openai兼容api请求,后端python代码地址:https://code.bfw.wiki/code/17541760817047710067.html
代码标签: vue 模仿 主流 ai 大模型 聊天 对话 流式 单独 右侧 输出 代码块 预览
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>AI 智能编程助手</title> <style> /* --- 核心布局 (无变化) --- */ :root { --sidebar-width: 260px; --right-panel-width: 50%; --border-color: #e0e0e0; --main-bg: #f4f7f6; --panel-bg: #ffffff; --primary-color: #007bff; --primary-hover: #0056b3; } body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; margin: 0; background-color: var(--main-bg); color: #333; height: 100vh; overflow: hidden; } #app { display: flex; height: 100%; width: 100%; transition: margin-left 0.3s ease; } .sidebar { width: var(--sidebar-width); background-color: var(--panel-bg); border-right: 1px solid var(--border-color); padding: 20px; display: flex; flex-direction: column; overflow-y: auto; flex-shrink: 0; transition: margin-left 0.3s ease; } .sidebar.hidden { margin-left: calc(-1 * var(--sidebar-width)); } .sidebar h2 { margin: 0 0 20px 0; color: var(--primary-color); font-size: 1.3em; } .sidebar ul { list-style: none; padding: 0; margin: 0; flex-grow: 1; } .sidebar li { padding: 10px 15px; cursor: pointer; border-radius: 5px; margin-bottom: 8px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; transition: background-color 0.2s ease; } .sidebar li:hover { background-color: #f0f0f0; } .sidebar li.active { background-color: #e0e0ff; color: #0056b3; font-weight: bold; } .sidebar .new-chat-btn { padding: 10px; background-color: var(--primary-color); color: white; border: none; border-radius: 5px; cursor: pointer; transition: background-color 0.2s ease; font-size: 1em; } .sidebar .new-chat-btn:hover { background-color: var(--primary-hover); } .main-content { flex-grow: 1; display: flex; flex-direction: column; overflow: hidden; background-color: #fdfdfd; } .chat-header { display: flex; align-items: center; padding: 10px 20px; background-color: var(--panel-bg); border-bottom: 1px solid var(--border-color); flex-shrink: 0; } .chat-header .menu-toggle { font-size: 1.5em; cursor: pointer; padding: 5px 10px; margin-right: 15px; border-radius: 5px; } .chat-header .menu-toggle:hover { background-color: #f0f0f0; } .chat-header h2 { margin: 0; font-size: 1.2em; } .chat-history-scrollable { flex-grow: 1; padding: 20px; overflow-y: auto; display: flex; flex-direction: column; } .message { margin-bottom: 20px; display: flex; max-width: 80%; } .message.user { align-self: flex-end; } .message.assistant { align-self: flex-start; } .message p { margin: 0; padding: 12px 18px; border-radius: 18px; line-height: 1.5; word-wrap: break-word; white-space: pre-wrap; } .message.user p { background-color: var(--primary-color); color: white; } /* 助手消息背景现在由 .markdown-content 控制 */ .message.assistant .markdown-content-wrapper { background-color: #e9ecef; padding: 12px 18px; border-radius: 18px; } .code-card { padding: 15px; border: 1px solid #d1e7dd; background-color: #f8f9fa; border-radius: 8px; cursor: pointer; transition: box-shadow 0.2s ease; max-width: 100%; } .code-card:hover { box-shadow: 0 2px 8px rgba(0,0,0,0.1); } .code-card-content { display: flex; align-items: center; font-weight: 500; color: #0f5132; } .code-card-content svg { width: 24px; height: 24px; margin-right: 12px; flex-shrink: 0; } .input-area { padding: 15px 20px; background-color: var(--panel-bg); border-top: 1px solid var(--border-color); display: flex; align-items: center; } .input-area textarea { flex-grow: 1; margin-right: 15px; padding: 10px; border: 1px solid #ccc; border-radius: 8px; resize: none; font-size: 1em; line-height: 1.5; max-height: 150px; overflow-y: auto; } .input-area button { padding: 10px 20px; background-color: #28a745; color: white; border: none; border-radius: 8px; cursor: pointer; transition: background-color 0.2s ease; } .input-area button:hover { background-color: #218838; } .right-panel { width: var(--right-panel-width); background-color: var(--panel-bg); border-left: 1px solid var(--border-color); display: flex; flex-direction: column; overflow: hidden; flex-shrink: 0; transition:.........完整代码请登录后点击上方下载按钮下载查看
网友评论0