最新研发vite7.0+electron38客户端仿微信EXE聊天软件
【摘要】 electron38-vue3-chat:基于electron38+vue3 setup+pinia3+element-plus纯手撸搭建桌面端聊天实例项目。包含聊天、通讯录、收藏、朋友圈、短视频、我的等模块。使用技术编码工具:Vscode技术框架:electron38.0.0+vite7.1.2+vue3.5.18+vue-router4.5.1组件库:element-plus^2.11....
electron38-vue3-chat:基于electron38+vue3 setup+pinia3+element-plus纯手撸搭建桌面端聊天实例项目。包含聊天、通讯录、收藏、朋友圈、短视频、我的等模块。
使用技术
- 编码工具:Vscode
- 技术框架:electron38.0.0+vite7.1.2+vue3.5.18+vue-router4.5.1
- 组件库:element-plus^2.11.2
- 状态管理:pinia^3.0.3
- 存储服务:pinia-plugin-persistedstate^4.5.0
- 打包构建:electron-builder^24.13.3
- electron+vite插件:vite-plugin-electron^0.29.0
项目结构目录
使用最新跨平台技术Electron38结合Vite7.x构建工具搭建项目框架。
项目通用模板
如下图:整个项目分为菜单栏+侧边栏+右侧主区域三个板块。
<template> <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> </template>
渲染主入口main.js
import { createApp } from 'vue' import './style.scss' import App from './App.vue' // 引入组件库 import ElementPlus from 'element-plus' import 'element-plus/dist/index.css' import VEPlus from 've-plus' import 've-plus/dist/ve-plus.css' // 引入路由/状态管理 import Router from './router' import Pinia from './pinia' import { launchApp } from '@/windows/actions' launchApp().then(config => { if(config) { // 全局存储窗口配置 window.config = config } // 创建app应用实例 createApp(App) .use(ElementPlus) .use(VEPlus) .use(Router) .use(Pinia) .mount('#app') })
electron38+vue3自定义无边框窗口导航条
<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}, }) </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>
electron38自定义托盘管理|消息闪烁提醒
/** * 系统托盘图标管理 */ trayManager() { if(this.tray) return const trayMenu = Menu.buildFromTemplate([ { label: '打开主界面', icon: join(__root, 'resources/tray-win.png'), click: () => { this.winMain.restore() this.winMain.show() } }, { label: '设置', icon: join(__root, 'resources/tray-setting.png'), click: () => this.sendByMainWin('win-ipcdata', {type: 'WINIPC_SETTINGWIN', value: null}) }, { label: '锁定系统', click: () => null, }, { label: '关闭托盘闪烁', click: () => this.trayFlash(false) }, { label: '关于', click: () => this.sendByMainWin('win-ipcdata', {type: 'WINIPC_ABOUTWIN', value: null}) }, { label: '退出聊天室', icon: join(__root, 'resources/tray-exit.png'), click: () => { dialog.showMessageBox(this.winMain, { title: '提示', message: '确定要退出聊天程序吗?', buttons: ['取消', '最小化托盘', '确认退出'], type: 'error', noLink: false, cancelId: 0, }).then(res => { // console.log(res) const index = res.response if(index == 0) { console.log('用户取消操作') }else if(index == 1) { console.log('最小化到托盘') this.winMain.hide() }else if(index == 2) { console.log('退出程序') this.sendByMainWin('win-ipcdata', {type: 'WINIPC_LOGOUT', value: null}) app.quit() } }) } } ]) this.tray = new Tray(this.trayIcon) this.tray.setContextMenu(trayMenu) this.tray.setToolTip(app.name) this.tray.on('double-click', () => { console.log('tray double clicked!') this.winMain.restore() this.winMain.show() }) this.tray.on('mouse-enter', (event, position) => { // console.log('鼠标划入', position) if(!this.hasFlash) return this.sendByMainWin('win-ipcdata', {type: 'WINIPC_MESSAGEWIN', value: position}) // 简略消息通知 /* this.tray.displayBalloon({ iconType: 'none', title: 'Electron38研发组', content: 'Electron38+Vite7仿微信客户端聊天。' }) */ }) this.tray.on('mouse-leave', (event, position) => { // console.log('鼠标离开') }) }
this.tray.on('mouse-enter', (event, position) => { // console.log('鼠标划入', position) if(!this.hasFlash) return this.sendByMainWin('win-ipcdata', {type: 'WINIPC_MESSAGEWIN', value: position}) // 简略消息通知 /* this.tray.displayBalloon({ iconType: 'none', title: 'Electron38研发组', content: 'Electron38+Vite7仿微信客户端聊天。' }) */ }) // 托盘新消息提醒窗口 export function messageWindow(position) { winCreate({ url: '/win/msgbox', title: '设置', width: 250, height: 120, resizable: false, movable: false, fullscreenable: false, alwaysOnTop: true, skipTaskbar: true, x: position?.x - 125, y: position?.y - 120 - 10, show: true, }) }
以上就是electron38+vite7搭建客户端聊天系统的一些分享。感谢小伙伴的阅读与支持。
原创tauri2.0+vue3.5+element-plus桌面版后台管理系统
Electron32-Vite5-OS跨平台os模板|electron32+vue3通用os系统
Flutter3.32实战桌面端OS系统|flutter3仿macOS桌面
flutter3.27跨平台仿微信客户端聊天Exe程序|朋友圈|短视频
原创uniapp+vite5+vue3+uv-ui跨三端短视频+直播+聊天app应用
uni-app+deepseek-v3跨三端ai流式输出对话模板
flutter3+deepseek手机端ai流式输出聊天模板
实战跨平台Electron35+DeepSeek-V3搭建客户端AI模板
deepseek-v3+vue3.5网页版webai流式对话模板
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)