2026最新款Tauri2.12+Vite8.3+ElementPlus电脑端聊天软件系统Exe

0 阅读3分钟

国庆期间爆肝升级,新款跨平台tauri2.12+vue3+pinia4仿微信/QQ界面聊天实例~

008360截图20251022005139749.png

360截图20251021233301432.png

技术栈

  • 开发工具:VScode
  • 跨平台框架:Tauri2.12.0
  • 前端技术框架:vite^8.3.4+vue^3.5.43+vue-router^5.4.0
  • 状态管理:pinia^4.0.3
  • 本地存储:pinia-plugin-persistedstate^4.7.1
  • 组件库:element-plus^2.14.7
  • 富文本编辑器:@vueup/vue-quill^1.5.5
  • 样式管理:sass^1.105.0
  • 短视频滑动组件:swiper^14.3.0

68339c66203126b142429f1da324023a_1289798-20251022094134938-705601068.gif

5e57a90e569dce385acb7722ec8357b3_1289798-20251022094246099-1474168463.gif

项目结构目录

tauri2-vue3chat基于最新跨平台框架tauri2.12+vite8.3构建项目模板。

d4b5ca5eb40dd634ad71fd717e4fb70c_1289798-20261010110248207-1283906178.png

04ee50c944c2099aeebaded3c1165815_1289798-20251022094613273-322519869.gif

625b2db56ad4a58e090840f09d2bbef7_1289798-20261010115127311-1595810878.png

taurichat实现类似QQ登录/主窗口切换,支持主题壁纸、自定义最大化/最小化/关闭按钮,新窗口打开朋友圈/短视频。聊天模块支持新开窗口预览图片/视频、拖拽图片到聊天区域。

cf978bf15549604f928f3b6c52a38030_1289798-20261010111024734-1056324697.png

项目布局结构

1e1c17c26b800e9c431aa91f636b599b_1289798-20251022100450393-1367708418.png

ffda48ad34b665a9df18e0a15911beac_1289798-20251022100625641-451414564.png

<template>
  <div class="vu__chatbox">
    <template v-if="!route?.meta?.isNewWin">
      <div
        class="vu__container flexbox flex-alignc flex-justifyc"
        :style="{'--themeSkin': appstate.config.skin}"
      >
        <div class="vu__layout flexbox flex-col">
          <div class="vu__layout-body flex1 flexbox" @contextmenu.prevent>
            <!-- 菜单栏 -->
            <slot v-if="!route?.meta?.hideMenuBar" name="menubar">
              <MenuBar />
            </slot>

            <!-- 侧边栏 -->
            <div v-if="route?.meta?.showSideBar" class="vu__layout-sidebar flexbox">
              <aside class="vu__layout-sidebar__body flexbox flex-col">
                <slot name="sidebar">
                  <SideBar />
                </slot>
              </aside>
            </div>

            <!-- 主内容区 -->
            <div class="vu__layout-main flex1 flexbox flex-col">
              <ToolBar v-if="!route?.meta?.hideToolBar" />
              <router-view v-slot="{ Component, route }">
                <keep-alive>
                  <component :is="Component" :key="route.path" />
                </keep-alive>
              </router-view>
            </div>
          </div>
        </div>
      </div>
    </template>
    <template v-else>
      <WinLayout />
    </template>
  </div>
</template>

ea9277bd5110df8fccdfb967692a8882_1289798-20261010111623061-160795311.png

2d2c3d45eecafcf2469880431febfda3_1289798-20261010111643819-584248333.png

d810f13f64669b1c0f467b73f59f7901_1289798-20261010111708970-1889291606.png

fcbe9b29157a737cc8435bea1d5df339_1289798-20251022100943640-476027935.png

de06192f5ac229e7250038b1aff02405_1289798-20251022100955741-1673667940.png

1d27189f71eb9adb17c568888c4e8bc7_1289798-20261010111444423-1018719132.png

394e9ba9342ff9542bcc23ee192146b2_1289798-20251022101051886-1960072751.png

99bf825afed8109e992a2ea6b49d2246_1289798-20251022101133162-1368630368.png

9156cb0d7333eafb31ee3c022336ac66_1289798-20261010112050869-1970723944.png

481652779d228cca00d75386cc5cdcb8_1289798-20261010112127849-2133664985.png

ed69deb1e127ebc1353c6e3bc8ade06d_1289798-20261010112218033-46560873.png

fa83deea930c6bd289c94397e3e05f62_1289798-20261010112245859-1265326904.png

image.png

f8a09bc122374cb37cb4aa96b08e0f1b_1289798-20261010201215343-1655210592.png

9799447589b8d87c334b46e1529279fb_1289798-20251022101601875-436214174.png

765406c46b5e5579c3bf34c076063cdb_1289798-20261010203452504-122852650.png

92c60ef72c56f955e47aaee70e9c07b4_1289798-20261010201333776-979795553.png

fd8155d912f78c947aa900bddb390677_1289798-20261010203157780-1471607899.png

735c27d0aa9a1219c5fc5022fa1ed14a_1289798-20261010202552307-1510013010.png

41d109319cf3eb8bb480af7d91c32e9d_1289798-20261010202714905-270066238.png

a32d0fbed25e292f62985cdec869d773_1289798-20261010202831707-1206674217.png

662fd95e5c8952414aa627c653533624_1289798-20261010112517016-1226869979.png

项目入口配置

import { createApp } from 'vue'
import './style.scss'
import App from './App.vue'

// 引入组件库
import ElementPlus from 'element-plus'
import 'element-plus/dist/index.css'

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

createApp(App)
.use(ElementPlus)
.use(Router)
.use(Pinia)
.mount('#app')

tauri2+vue3无边框阴影窗口

image.png

bc3c16d4f624980b49c9701f3c41c33c_1289798-20251022103143509-1312140525.png

<!-- 自定义系统导航条 -->

<script setup>
  import { ref } from 'vue'
  import { isTrue } from '@/utils'

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

  import Winbtns from './btns.vue'

  const props = defineProps({
    // 标题
    title: {type: String, default: ''},
    // 标题颜色
    color: String,
    // 背景色
    background: String,
    // 标题是否居中
    center: {type: [Boolean, String], default: false},
    // 是否固定
    fixed: {type: [Boolean, String], default: false},
    // 背景是否镂空
    transparent: {type: [Boolean, String], default: false},
    // 层级
    zIndex: {type: [Number, String], default: 2024},

    /* 控制Winbtn参数 */
    // 窗口是否可最小化
    minimizable: {type: [Boolean, String], default: true},
    // 窗口是否可最大化
    maximizable: {type: [Boolean, String], default: true},
    // 窗口是否可关闭
    closable: {type: [Boolean, String], default: true},
    // 关闭前回调,会暂停实例关闭 function(done),done用于关闭
        beforeClose: Function
  })
</script>

<template>
  <div class="ev__winbar" :class="{'fixed': fixed || transparent, 'transparent': transparent}">
    <div class="ev__winbar-wrap flexbox flex-alignc vu__drag">
      <div class="ev__winbar-body flex1 flexbox flex-alignc">
        <!-- 左侧区域 -->
        <div class="ev__winbar-left"><slot name="left" /></div>
        <!-- 标题 -->
        <div class="ev__winbar-title" :class="{'center': center}">
          <slot name="title">{{title}}</slot>
        </div>
        <!-- 右侧附加区域 -->
        <div class="ev__winbar-extra vu__undrag"><slot name="extra" /></div>
      </div>
      <Winbtns :color="color" :minimizable="minimizable" :maximizable="maximizable" :closable="closable" :zIndex="zIndex" />
    </div>
  </div>
</template>

tauri+vite新开窗口管理

image.png

/**
 * 创建新窗口
 * @param {object} args 窗口配置参数 {label: 'home', url: '/home', width: 850, height: 610, ...}
 */
export async function winCreate(args) {
  await emit('win-create', args)
}
// 主窗口
export async function mainWindow() {
  await winCreate({
    label: 'main',
    url: '/',
    title: 'TAURI-WINCHAT',
    width: 850,
    height: 620,
    minWidth: 700,
    minHeight: 450
  })
}

// 登录窗口
export async function loginWindow() {
  await winCreate({
    label: 'main-login',
    url: '/login',
    title: '登录',
    width: 320,
    height: 420,
    resizable: false,
    maximizable: false,
    alwaysOnTop: true
  })
}

// 关于窗口
export async function aboutWindow() {
  await winCreate({
    label: 'win-about',
    url: '/win/about',
    title: '关于',
    width: 320,
    height: 350,
    minWidth: 320,
    minHeight: 350,
    maximizable: false,
    alwaysOnTop: true,
  })
}

// 设置窗口
export async function settingWindow() {
  await winCreate({
    label: 'win-setting',
    url: '/win/setting',
    title: '设置',
    width: 550,
    height: 470,
    resizable: false,
    maximizable: false,
  })
}

支持如下参数配置:

// 系统窗口参数(与tauri的new WebviewWindow()参数一致)
const windowBaseOptions = {
  // 窗口唯一标识label
  label: null,
  // 窗口标题
  title: '',
  // 窗口路由地址
  url: '',
  // 宽度
  width: 850,
  // 高度
  height: 620,
  // 最小宽度
  minWidth: null,
  // 最小高度
  minHeight: null,
  // 窗口x坐标
  x: null,
  // 窗口y坐标
  y: null,
  // 窗口居中显示(当设置x/y,则需要设置为false)
  center: true,
  // 是否可缩放
  resizable: true,
  // 是否可最小化
  minimizable: true,
  // 是否可最大化
  maximizable: true,
  // 是否可关闭
  closable: true,
  // 最大化窗口
  maximized: false,
  // 父窗口句柄label
  parent: null,
  // 窗口是否置顶
  alwaysOnTop: false,
  // 是否显示窗口边框(要创建无边框窗口,将decorations参数设置为false)
  decorations: false,
  // 是否透明窗口
  transparent: true,
  // 是否显示窗口阴影
  shadow: false,
  // 创建时是否显示窗口
  visible: false,
  // 禁止系统拖放
  dragDropEnabled: false
}

tauri+vue3自定义托盘/消息提醒

adfaaf3d5bcfa6c78307601fffc736ae_1289798-20251022104002525-1939244736.gif

501e62318f6793ca130f46bb470ee16a_1289798-20251022104040740-431127253.png

/**
 * 自定义托盘图标
 */

use tauri::{
  tray::{MouseButton, TrayIconBuilder, TrayIconEvent}, Emitter, Manager, Runtime
};

pub fn tray_create<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
  let _ = TrayIconBuilder::with_id("tray")
    .tooltip("TAURI-WINCHAT")
    .icon(app.default_window_icon().unwrap().clone())
    .on_tray_icon_event(|tray, event| match event {
      TrayIconEvent::Click {
        id: _,
        position,
        rect: _,
        button,
        button_state: _,
      } => match button {
        MouseButton::Left {} => {
          let windows = tray.app_handle().webview_windows();
          for (key, value) in windows {
            println!("点击左键: {}", key);
            if key == "main-login" || key == "main" {
              value.show().unwrap();
              value.unminimize().unwrap();
              value.set_focus().unwrap();
            }
          }
        }
        MouseButton::Right {} => {
          println!("点击右键");
          tray.app_handle().emit("tray_contextmenu", position).unwrap();
        }
        _ => {}
      },
      TrayIconEvent::Enter {
        id: _,
        position,
        rect: _,
      } => {
        println!("鼠标滑过托盘");
        tray.app_handle().emit("tray_mouseenter", position).unwrap();
      }
      TrayIconEvent::Leave {
        id: _,
        position,
        rect: _,
      } => {
        println!("鼠标离开托盘");
        tray.app_handle().emit("tray_mouseleave", position).unwrap();
      }
      _ => {}
    })
    .build(app);
  Ok(())
}

Tauri2-Vite7Admin客户端管理后台|tauri2.9+vue3+element-plus后台系统

Tauri2.9+Vue3桌面版OS系统|vite7+tauri2+arcoDesign电脑端os后台模板

Electron38-Wechat电脑端聊天|vite7+electron38仿微信桌面端聊天系统

electron38-admin桌面端后台|Electron38+Vue3+ElementPlus管理系统

Electron38-Vue3OS客户端OS系统|vite7+electron38+arco桌面os后台管理

React19+Electron聊天室|electron41跨平台仿QQ/微信客户端聊天软件

React-WebOS网页版os系统|react19+zustand5+arco搭建web版os管理系统

react19-webai网页版AI模板|DeepSeek-V4+React19+Arco智能ai系统

React19-Admin后台管理系统|vite8+react19+arco+zustand通用后台模板

最新版Flutter3.41+Dart3.11仿写抖音APP直播+短视频+聊天应用程序

Vite8-Vue3-Admin网页版后台模板|vue3.5+pinia3+echarts后台管理系统

uniapp+deepseek-v4-flash+vue3跨端流式ai应用模板【h5+小程序+app端】

Vite8+DeepSeek-V4网页版AI助手|vue3+arco本地web版ai流式问答系统