2026原创Electron39.2+Vue3+DeepSeek从0-1手搓AI模板桌面应用Exe

2026最新研发跨平台Electron39.2结合Vite7全家桶调用DeepSeek-Chat客户端AI对话系统。

技术知识点

  • 跨平台框架:electron^39.2.7
  • 前端框架:vite^7.2.4+vue^3.5.24+vue-router^4.6.4
  • AI框架:DeepSeek-V3.2 + OpenAI
  • UI组件库:arco-design^2.57.0
  • 状态插件:pinia^3.0.4
  • 会话缓存:pinia-plugin-persistedstate^4.7.1
  • 高亮插件:highlight.js^11.11.1
  • markdown渲染插件:markdown-it^14.1.0
  • 打包工具:electron-builder^26.0.12

功能特性

  1. 基于最新跨平台Electron39框架,接入DeepSeek-V3.2,流式对话更丝滑
  2. 支持各种代码高亮/复制代码、便于分享代码片段
  3. 支持暗黑+浅色主题、深度思考、上下文多轮对话、本地存储对话
  4. 支持katex数学公式
  5. 支持mermaid甘特图/流程图/类图等图表
  6. 支持新窗口打开对话里面的链接

项目框架结构

使用最新vite7.2+electron39.2搭建项目模板,接入deepseek v3.2实现流式打字输出。

项目通用布局

项目整体布局结构如下:

ts 复制代码
<script setup>
  import Titlebar from '@/layouts/components/titlebar/index.vue'
  import Sidebar from '@/layouts/components/sidebar/index.vue'
</script>

<template>
  <div class="vu__container">
    <div class="vu__layout flexbox flex-col">
      <!-- 导航栏 -->
      <Titlebar />

      <div class="vu__layout-body flex1 flexbox">
        <!-- 侧边 -->
        <Sidebar />

        <!-- 对话区 -->
        <div class="vu__layout-main flex1">
          <router-view v-slot="{ Component, route }">
            <keep-alive>
              <component :is="Component" :key="route.path" />
            </keep-alive>
          </router-view>
        </div>
      </div>
    </div>
  </div>
</template>

项目入口模板

ts 复制代码
import { createApp } from 'vue'
import './style.scss'
import App from './App.vue'

import { launchApp } from '@/windows/actions'

// 引入路由/状态配置
import Router from './router'
import Pinia from './pinia'

// 引入插件配置
import Plugins from './plugins'

launchApp().then(config => {
  if(config) {// 全局存储窗口配置
    window.config = config
  }

  // 初始化app实例
  createApp(App)
  .use(Router)
  .use(Pinia)
  .use(Plugins)
  .mount('#app')
})

vue3+electron集成deepseek深度思考R1

ts 复制代码
const completion = await openai.chat.completions.create({
  // 单一会话
  /* messages: [
    {role: 'user', content: editorValue}
  ], */
  // 多轮会话
  messages: props.multiConversation ? historySession.value : [{role: 'user', content: editorValue}],
  // deepseek-chat对话模型 deepseek-reasoner推理模型
  model: sessionstate.thinkingEnabled ? 'deepseek-reasoner' : 'deepseek-chat',
  stream: true, // 流式输出
  max_tokens: 8192, // 一次请求中模型生成 completion 的最大 token 数(默认使用 4096)
  temperature: 0.4, // 严谨采样
})

支持katex数学公式+mermaid图表渲染

ts 复制代码
import { katex } from "@mdit/plugin-katex"; // 支持数学公式
import 'katex/dist/katex.min.css'
// 渲染mermaid图表
import { markdownItMermaidPlugin } from '@/components/markdown/plugins/mermaidPlugin'

封装Markdown组件渲染流式返回结果。

ts 复制代码
<Markdown
  :source="item.content"
  :html="true"
  :linkify="true"
  :typographer="true"
  :plugins="[
    [katex, {delimiters: 'all'}],
    [markdownItMermaidPlugin, { ... }]
  ]"
  @copy="onCopy"
/>

vue3实现ai编辑器框

ts 复制代码
<template>
  <div class="v3ai__inputbox flexbox flex-col">
    <!-- 编辑器 -->
    <div class="v3ai__editor flexbox">
      <a-textarea v-model="editorText" :auto-size="autoSize" :spellcheck="false" placeholder="给 DeepSeek 发送消息" @input="handleInput" />
    </div>
    <!-- 操作栏 -->
    <div class="v3ai__tools flexbox flex-alignc">
      <div class="option flex1 flexbox">
        <a-tooltip content="先思考后回答,解决推理问题" position="top" mini>
          <div class="btn" :class="{'active': sessionstate.thinkingEnabled}" @click="sessionstate.thinkingEnabled =! sessionstate.thinkingEnabled"><i class="iconfont ai-deepthink"></i><span>深度思考</span></div>
        </a-tooltip>
        <div class="btn" :class="{'active': sessionstate.searchEnabled}" @click="sessionstate.searchEnabled =! sessionstate.searchEnabled"><i class="iconfont ai-network"></i><span>联网</span></div>
        <!-- 技能栏 -->
        <a-dropdown v-if="skillbar" position="tl" :content-style="{'min-width': '120px'}" @select="handleSkill">
          <div class="btn"><icon-command size="16" /><span>技能</span></div>
          <template #content>
            <a-doption v-for="(item, index) in skills" :key="index" :value="item"><template #icon><i class="iconfont" :class="item.icon"></i></template>{{item.text}}</a-doption>
          </template>
        </a-dropdown>
      </div>
      <a-dropdown trigger="hover" :show-arrow="false" position="lb" :content-style="{'min-width': '200px'}">
        <a-button class="icon-btn" shape="circle"><icon-attachment size="18" /></a-button>
        <template #content>
          <a-dgroup>
            <template #title><div style="margin-bottom: 5px;">从网盘添加</div></template>
            <a-doption value="wx"><icon-more /> 选择网盘文件</a-doption>
          </a-dgroup>
          <a-dgroup>
            <template #title><div style="margin-bottom: 5px;">从本地添加</div></template>
            <a-doption value="wx"><icon-apps /> 上传文件</a-doption>
            <a-dsubmenu trigger="hover" position="rb" :popup-translate="[5, 5]" value="option-1" :content-style="{'min-width': '120px'}">
              <template #default><icon-apps /> 上传代码</template>
              <template #content>
                <a-doption value="pyq"><icon-apps /> 代码文件</a-doption>
                <a-doption value="qq"><icon-apps /> 代码文件夹</a-doption>
                <a-doption value="qq"><icon-apps /> GitHub仓库</a-doption>
              </template>
            </a-dsubmenu>
          </a-dgroup>
        </template>
      </a-dropdown>
      <a-tooltip content="截图提问" position="top" mini>
        <a-button class="icon-btn" shape="circle"><icon-scissor size="18" @click="handleCut" /></a-button>
      </a-tooltip>
      <a-dropdown :show-arrow="false" position="top" :content-style="{'min-width': '160px'}">
        <a-button class="icon-btn" shape="circle"><icon-plus size="18" /></a-button>
        <template #content>
          <a-doption value="image"><icon-file-image /> 图片</a-doption>
            <a-doption value="file"><icon-file /> 本地文件</a-doption>
            <a-doption value="pdf"><icon-file-pdf /> PDF文档分析</a-doption>
            <a-doption value="page"><icon-cloud /> 网页总结</a-doption>
        </template>
      </a-dropdown>
      <a-divider direction="vertical" style="margin: 0 15px 0 10px; height: 15px;" />
      <a-button class="btn-submit" v-if="!sessionstate.loading" type="primary" shape="circle" :disabled="!editorText?.trim() || sessionstate.loading" @click="handleSubmit">
        <icon-arrow-up size="20" />
      </a-button>
      <a-button class="btn-submit" v-else type="primary" shape="circle" @click="handleStopStream">
        <div style="background:#fff;border-radius:2px;height:10px;width:10px;"></div>
      </a-button>
    </div>
  </div>
</template>

2026最新款Vue3+DeepSeek-V3.2+Arco+Markdown网页端流式生成AI Chat

基于uniapp+vue3+deepseek+markdown搭建app版流式输出AI模板

2026最新款Vite7+Vue3+DeepSeek-V3.2+Markdown流式输出AI会话

electron38.2-vue3os系统|Vite7+Electron38+Pinia3+ArcoDesign桌面版OS后台管理

基于electron38+vite7+vue3 setup+elementPlus电脑端仿微信/QQ聊天软件

2025最新款Electron38+Vite7+Vue3+ElementPlus电脑端后台系统Exe

自研2025版flutter3.38实战抖音app短视频+聊天+直播商城系统

基于uni-app+vue3+uvui跨三端仿微信app聊天模板【h5+小程序+app】

基于uniapp+vue3+uvue短视频+聊天+直播app系统

基于flutter3.32+window_manager仿macOS/Wins风格桌面os系统

flutter3.27+bitsdojo_window电脑端仿微信Exe应用

自研tauri2.0+vite6.x+vue3+rust+arco-design桌面版os管理系统Tauri2-ViteOS

相关推荐
Irene19912 小时前
使用 TypeScript 编写一个 Vue 3 模态框(Modal)组件
javascript·vue.js·typescript
前端_yu小白2 小时前
React实现Vue的watch和computed
前端·vue.js·react.js·watch·computed·hooks
多看书少吃饭2 小时前
OnlyOffice 编辑器的实现及使用
前端·vue.js·编辑器
用户65868180338403 小时前
Vue3 项目编码规范:基于Composable的清晰架构实践
vue.js
小酒星小杜3 小时前
在AI时代,技术人应该每天都要花两小时来构建一个自身的构建系统 - Build 篇
前端·vue.js·架构
zengyufei3 小时前
2.4 watch 监听变化
vue.js
m0_471199633 小时前
【小程序】订单数据缓存 以及针对海量库存数据的 懒加载+数据分片 的具体实现方式
前端·vue.js·小程序
貂蝉空大3 小时前
vue-pdf-embed分页预览解决文字丢失问题
前端·vue.js·pdf
ss2733 小时前
RuoYi-App 本地启动教程
前端·javascript·vue.js