当前位置: 首页 > news >正文

Vue 3 和 Electron 来构建一个桌面端应用

我们将使用 Vue 3 和 Electron 来构建一个桌面端应用,该应用可以通过 Websocket 与服务器进行通信,并实现心跳检测、客户端上线、获取资产信息以及修改资产状态的功能。以下是实现步骤的概述:

  1. 项目结构:创建一个 Vue 3 项目,并集成 Electron。
  2. Websocket 连接:在 Vue 组件中建立 Websocket 连接,并处理心跳检测、客户端上线、获取资产信息和修改资产状态的逻辑。
  3. UI 设计:设计简单的 UI 界面,用于展示资产信息和操作按钮。
  4. Electron 打包:使用 Electron 将 Vue 项目打包为桌面应用。

详细步骤

1. 项目结构

我们已经有一个 Vue 3 项目,接下来需要安装 Electron 和其他必要的依赖。

npm install electron --save-dev
npm install vue-router
npm install websocket
npm install axios

在 src 目录下创建以下文件:

  • src/main.js:Vue 应用的入口文件。
  • src/electron.js:Electron 的主进程文件。
  • src/router/index.js:Vue Router 的配置文件。
  • src/components/Home.vue:主页面组件。
2. Websocket 连接

在 src/components/Home.vue 中,我们将实现 Websocket 连接和相关业务逻辑。

<template><div><h1>资产管理系统</h1><button @click="pingServer">Ping 服务器</button><button @click="clientOnline">客户端上线</button><button @click="getAssetInfo">获取资产信息</button><button @click="updateAssetStatus">修改资产状态</button><div v-if="assetInfo"><h2>资产信息</h2><pre>{{ assetInfo }}</pre></div></div>
</template><script>
import { ref } from 'vue';
import { w3cwebsocket as W3CWebSocket } from 'websocket';const client = new W3CWebSocket('ws://192.168.5.145:8899/iothub');export default {setup() {const assetInfo = ref(null);client.onopen = () => {console.log('WebSocket Client Connected');};client.onmessage = (message) => {const data = JSON.parse(message.data);console.log('Received: ', data);if (data.code === '0') {assetInfo.value = data.data;} else {alert(data.msg);}};const pingServer = () => {client.send(JSON.stringify({ type: 'ping' }));};const clientOnline = () => {client.send(JSON.stringify({ type: 'up', from: 'doorDev', uid: 'unique-id-123' }));};const getAssetInfo = () => {const epc = prompt('请输入资产 EPC');if (epc) {client.send(JSON.stringify({type: 'send',from: 'doorDev',uid: 'unique-id-123',msg: {method: 'getAssetByEpc',passType: 'out',epc: epc}}));}};const updateAssetStatus = () => {const assetId = prompt('请输入资产 ID');if (assetId) {client.send(JSON.stringify({type: 'send',from: 'doorDev',uid: 'unique-id-123',msg: {method: 'updateAssetStatus',assetId: assetId}}));}};return {pingServer,clientOnline,getAssetInfo,updateAssetStatus,assetInfo};}
};
</script><style>
/* 这里可以添加一些简单的样式 */
</style>
3. Vue Router 配置

在 src/router/index.js 中配置路由:

import { createRouter, createWebHistory } from 'vue-router';
import Home from '../components/Home.vue';const routes = [{path: '/',name: 'Home',component: Home}
];const router = createRouter({history: createWebHistory(),routes
});export default router;
4. Electron 主进程

在 src/electron.js 中配置 Electron 主进程:

const { app, BrowserWindow } = require('electron');
const path = require('path');function createWindow() {const mainWindow = new BrowserWindow({width: 800,height: 600,webPreferences: {preload: path.join(__dirname, 'preload.js'),nodeIntegration: true,contextIsolation: false}});mainWindow.loadURL('http://localhost:8080');
}app.whenReady().then(() => {createWindow();app.on('activate', function () {if (BrowserWindow.getAllWindows().length === 0) createWindow();});
});app.on('window-all-closed', function () {if (process.platform !== 'darwin') app.quit();
});
5. 修改 package.json

在 package.json 中添加 Electron 启动脚本:

{"scripts": {"serve": "vue-cli-service serve","build": "vue-cli-service build","lint": "vue-cli-service lint","electron:serve": "vue-cli-service serve & electron ."}
}
6. 运行项目

使用以下命令启动项目:

npm run electron:serve

相关文章:

Vue 3 和 Electron 来构建一个桌面端应用

我们将使用 Vue 3 和 Electron 来构建一个桌面端应用&#xff0c;该应用可以通过 Websocket 与服务器进行通信&#xff0c;并实现心跳检测、客户端上线、获取资产信息以及修改资产状态的功能。以下是实现步骤的概述&#xff1a; 项目结构&#xff1a;创建一个 Vue 3 项目&…...

Python中的asyncio:高效的异步编程模型

随着互联网应用的快速发展&#xff0c;程序的响应性和处理效率成为衡量系统性能的重要指标。传统的同步编程模型在面对高并发和IO密集型任务时&#xff0c;常常显得捉襟见肘&#xff0c;难以满足现代应用的需求。Python的asyncio库作为一种高效的异步编程模型&#xff0c;为开发…...

《解锁鸿蒙系统AI能力,开启智能应用开发新时代》

在当今科技飞速发展的时代&#xff0c;鸿蒙系统以其独特的分布式架构和强大的AI能力&#xff0c;为开发者们带来了前所未有的机遇。本文将深入探讨开发者如何利用鸿蒙系统的AI能力开发更智能的应用&#xff0c;开启智能应用开发的新时代。 鸿蒙系统构筑了15系统级的AI能力&…...

安卓OCR使用(Google ML Kit)

OCR是一个很常用的功能&#xff0c;Google ML Kit提供了OCR能力&#xff0c;用起来也很简单&#xff0c;本文介绍一下使用方法。 1. 相关概念 名词概念解释TextBlock块一个段落Line行一行文本Element元素单词&#xff1b;对汉字来说&#xff0c;类似"开头 (分隔符)中间&…...

使用redis的5种常用场景

文章目录 1. 缓存热点数据2. 分布式锁3. 计数器和限流器4. 消息队列5. 会话管理总结 在日常开发工作中&#xff0c;Redis作为一款高性能的内存数据库&#xff0c;凭借其强大的功能特性和卓越的性能表现&#xff0c;已经成为了许多项目中不可或缺的组件。本文将详细介绍Redis在实…...

Extreme670和440的DHCP和vlan划分

1.网关配置 防火墙 USG 添加静态路由&#xff0c;也就是回指路由192.168.0.0 255.255.0.0 192.168.100.2 usg关闭DHCP192.168.100.0段的&#xff0c;usg接口的网关地址是192.168.100.1&#xff0c;防火墙策略启用192.168.100.0段到wan1段的内网和外网的NAT地址转换。 2…...

VTK知识学习(33)-交互问题2

1、前言 主要是针对前面有过实现不了交互的情况进行说明&#xff0c;经过一些尝试和分析调用API&#xff0c;总算实现RenderWindowControl函数回调正常串接&#xff0c;当然这个移动处理事件的效果目前也没有确认。 2、使用 vtkImageReslice reslice vtkImageReslice.New();p…...

c++ thread线程join、detach、joinable方法

(621条消息) 线程中断Thread的interrupt()方法_thread interrupt_萝卜阿咕咕的博客-CSDN博客 C/C编程&#xff1a;std::thread 详解-CSDN博客 #include <iostream> #include <thread>void do_some_work() {std::cout<<"Hello Concurrent World\n"…...

Transformer:深度学习的变革力量

深度学习领域的发展日新月异&#xff0c;在自然语言处理&#xff08;NLP&#xff09;、计算机视觉等领域取得了巨大突破。然而&#xff0c;早期的循环神经网络&#xff08;RNN&#xff09;在处理长序列时面临着梯度消失、并行计算能力不足等瓶颈。而 Transformer 的横空出世&am…...

【Python】__main__.py、__init__.py

文章目录 1. __init__.py作用&#xff1a;用法&#xff1a;示例&#xff1a;特点 2. __main__.py作用&#xff1a;用法&#xff1a;示例&#xff1a;特点&#xff1a; 3. 综合示例总结&#xff1a; 1. init.py 作用&#xff1a; __init__.py 文件的主要作用是标识一个目录是一…...

springboot集成整合工作流,activiti审批流,整合实际案例,流程图设计,流程自定义,表单配置自定义,代码demo流程

前言 activiti工作流引擎项目&#xff0c;企业erp、oa、hr、crm等企事业办公系统轻松落地&#xff0c;一套完整并且实际运用在多套项目中的案例&#xff0c;满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器&#xff0c;流行的前后端…...

代码随想录算法【Day16】

Day16 513.找二叉树左下角的值 本题使用迭代法更简单&#xff0c;使用迭代法和递归法的区别是什么 递归法 目标就是找深度最大的叶子结点 无论前中后序遍历&#xff0c;都是左节点先被遍历到&#xff0c;所以一旦得到深度最大的节点&#xff0c;就是最后一行最靠左侧的节点…...

从光子到图像——相机如何捕获世界?

引言 你是否想过为何我们按一下相机快门就可以将眼前广袤多彩的世界显示于一个小小的相机屏幕上&#xff1f;本期推文中将带着大家重现从光子转换为电子、电子转换为图像中数字驱动值的整个流程。 ▲人们通过相机捕获眼前的场景 从光子到电子的转换 光线首先通过光学镜头进入相…...

Harmony开发【笔记1】报错解决(字段名写错了。。)

在利用axios从网络接收请求时&#xff0c;发现返回obj的code为“-1”&#xff0c;非常不解&#xff0c;利用console.log测试&#xff0c;更加不解&#xff0c;可知抛出错误是 “ E 其他错误: userName required”。但是我在测试时&#xff0c;它并没有体现为空&#xff0c;…...

Ubuntu 下载安装 elasticsearch7.17.9

参考 https://blog.csdn.net/qq_26039331/article/details/115024218 https://blog.csdn.net/mengo1234/article/details/104989382 过程 来到 Es 的版本发布列表页面&#xff1a;https://www.elastic.co/downloads/past-releases#elasticsearch 根据自己的系统以及要安装的…...

8. LINUX 用户和组

文章目录 8.1 密码文件&#xff1a;/etc/passwd1. 登录名&#xff08;Login Name&#xff09;2. 经过加密的密码&#xff08;Encrypted Password&#xff09;3. 用户 ID&#xff08;User ID, UID&#xff09;4. 组 ID&#xff08;Group ID, GID&#xff09;5. 注释&#xff08;…...

vue监听中的watch监听(详解)

1、watch 选项用于监听数据的变化并执行相应的回调函数。watch 选项提供了两个重要的属性&#xff1a;deep 和 immediate。1.1、深度监听 (deep: true) 当你需要监听一个对象或数组内部的变化时&#xff0c;可以使用 deep: true。 这会使得 watch 监听器递归地监听对象或数组内…...

微信小程序中 隐藏scroll-view 滚动条 网页中隐藏滚动条

在微信小程序中隐藏scroll-view的滚动条可以通过以下几种方法实现&#xff1a; 方法一&#xff1a;使用CSS隐藏滚动条 在小程序的样式文件中&#xff08;如app.wxss或页面的.wxss文件&#xff09;&#xff0c;添加以下CSS代码来隐藏滚动条&#xff1a; scroll-view ::-webkit…...

K8s Pod OOMKilled,监控却显示内存资源并未打满

1. 问题现象 pod一直重启&#xff0c;通过grafana查看&#xff0c;发现内存使用率并没有100%。 2. 排查过程 2.1 describe查看pod最新一次的状态 可以明显看到&#xff0c;最近一次的重启就是因为内存不足导致的。 2.2 describe 查看node节点状态 找到原因了&#xff0c;原来…...

对话|全年HUD前装将超330万台,疆程技术瞄准人机交互“第一屏”

2024年&#xff0c;在高阶智驾进入快速上车的同时&#xff0c;座舱人机交互也在迎来新的增长点。Chat GPT、AR-HUD、车载投影等新配置都在带来新增量机会。 高工智能汽车研究院监测数据显示&#xff0c;2024年1-10月&#xff0c;中国市场&#xff08;不含进出口&#xff09;乘用…...

【HTML+CSS+JS+VUE】web前端教程-10-列表标签之无序列表

无序列表实现 无序列表是一个项目的列表,此列项目使用粗体圆点(典型的小黑圆圈)进行标记 无序列表始于<ul>标签,每个列表项始于<li>标签。<ul><li>苹果...

基于V2X的无人机与特种车辆战地智能通信:技术融合与实战应用

一、引言 1.1 研究背景与意义 在现代战争的复杂环境中&#xff0c;通信系统的高效与可靠已然成为决定胜负的关键因素。随着军事技术的飞速发展&#xff0c;战争形态发生了深刻变革&#xff0c;作战空间不断拓展&#xff0c;从陆地、海洋、天空延伸至电磁、网络、太空等多维领…...

20250109下载JDK17的方法链接

20250109下载JDK17的方法&链接 2025/1/9 16:20 缘起&#xff1a;编译地面站应用程序QGC&#xff0c;需要安装QT和【旧版本的】JDK17。 当时在网上没有找到JDK17&#xff0c;就安装了比较接近的JDK21。反正最后的QT for Android最后就是没有编译通过。 到底是谁的问题&#…...

杭州铭师堂的云原生升级实践

作者&#xff1a;升学e网通研发部基建团队 公司介绍 杭州铭师堂&#xff0c;是一个致力于为人的全面发展而服务的在线教育品牌。杭州铭师堂秉持“用互联网改变教育&#xff0c;让中国人都有好书读”的使命&#xff0c;致力于用“互联网教育”的科技手段让更多的孩子都能享有优…...

chrome浏览器的更新提示弹窗无法更新Chrome解决方法

使用组策略编辑器 此方法适用于 Windows 系统且系统为专业版及以上版本&#xff0c;家庭版系统没有组策略功能。 按下Win R键&#xff0c;打开 “运行” 对话框&#xff0c;输入gpedit.msc并回车&#xff0c;打开组策略编辑器。 在组策略编辑器中&#xff0c;依次展开 “计算机…...

LLM prompt提示构造案例:语音回复内容;o1思维链

1、语音回复内容 目的&#xff1a; 语音聊天助手的prompt&#xff0c;让大模型来引导聊天内容&#xff0c;简短和友好&#xff0c;从而文字转语音时候也比较高效。 ## 角色设定与交互规则 ### 基本角色 你是用户的好朋友. 你的回答将通过逼真的文字转语音技术阅读. ### 回答规则…...

OceanBase 学习计划全攻略:开启分布式数据库探索之旅

《OceanBase 学习计划全攻略&#xff1a;开启分布式数据库探索之旅》 在当今数字化浪潮汹涌澎湃的时代&#xff0c;数据库作为企业信息存储与管理的核心基础设施&#xff0c;其性能、可靠性和扩展性至关重要。OceanBase 作为一款具有卓越分布式特性的国产数据库&#xff0c;正…...

Linux 虚拟机与windows主机之间的文件传输--设置共享文件夹方式

Linux 虚拟机与windows主机之间的文件传输 设置共享文件夹方式 在虚拟机中打开终端查看是否已经新建完成&#xff0c;到文件夹中找到它看一下&#xff0c;这个位置就能存储东西啦...

React Context用法总结

1. 基本概念 1.1 什么是 Context Context 提供了一种在组件树中共享数据的方式&#xff0c;而不必通过 props 显式地逐层传递。它主要用于共享那些对于组件树中许多组件来说是"全局"的数据。 1.2 基本用法 // 1. 创建 Context const ThemeContext React.createC…...

Linux好用软件

力荐软件 apt-fast:更快速的软件管理安装过程会进入一个图形界面,配置线程数等信息,全部默认即可 sudo add-apt-repository ppa:apt-fast/stable sudo apt-get update sudo apt-get -y install apt-fast 以后安装应用,把apt-get直接替换成apt-fast即可,例如安装vlc sudo…...

【MYSQL】

文章目录 1.DDL 1.DDL --添加字段 ALTER TABLE table_name add COLUMN embed_model VARCHAR(32) NOT NULL COMMENT 名称备注 COLLATE utf8mb4_bin AFTER config_code;--修改字段 ALTER TABLE table_name CHANGE COLUMN column_a column_b VARCHAR(500) NOT NULL COMMENT 配置信…...

webrtc之rtc::ArrayView<const uint8_t>

rtc::ArrayView<const uint8_t> 是 WebRTC&#xff08;或其他基于 rtc 命名空间的库&#xff09;中常见的一个类型&#xff0c;它通常用于表示一块 只读的内存区域&#xff0c;该内存区域由一系列 uint8_t 类型&#xff08;无符号 8 位整数&#xff09;元素组成。 1. rt…...

深入理解 MySQL 的 EXPLAIN 工具

1. 什么是 EXPLAIN 工具&#xff1f; EXPLAIN 是 MySQL 中用来分析 SQL 查询执行计划的命令&#xff0c;它能够显示查询在执行时会如何访问表、使用哪些索引、扫描多少行等信息。通过 EXPLAIN 工具&#xff0c;开发者可以直观地了解查询的执行过程&#xff0c;从而进行针对性的…...

谷歌Google、紫鸟浏览器插件开发

对于跨境电商行业的IT部门来说&#xff0c;经常需要获取各种店铺相关数据&#xff0c;但是仅靠官方提供的接口来获取数据远远不够&#xff0c;这个时候我们就需要插件或者RPA的方式来获取数据。 以下是关于自研紫鸟插件的简单demo&#xff0c;紫鸟浏览器使用的是火狐和谷歌的插…...

HTML 显示器纯色亮点检测工具

HTML 显示器纯色亮点检测工具 相关资源文件已经打包成html等文件&#xff0c;可双击直接运行程序&#xff0c;且文章末尾已附上相关源码&#xff0c;以供大家学习交流&#xff0c;博主主页还有更多Html相关程序案例&#xff0c;秉着开源精神的想法&#xff0c;望大家喜欢&#…...

Win32汇编学习笔记09.SEH和反调试

Win32汇编学习笔记09.SEH和反调试-C/C基础-断点社区-专业的老牌游戏安全技术交流社区 - BpSend.net SEH - structed exception handler 结构化异常处理 跟筛选一样都是用来处理异常的,但不同的是 筛选器是整个进程最终处理异常的函数,但无法做到比较精细的去处理异常(例如处理…...

计算机组成原理(九):乘法器

乘法器原理 乘法器的工作原理可以用二进制乘法来说明。二进制乘法和十进制乘法类似&#xff0c;通过部分积的累加得到结果。 部分积的生成 在二进制乘法中&#xff0c;每一位的乘积是两个二进制数位的 与运算&#xff08;0 0 0&#xff0c;1 0 0&#xff0c;0 1 0&…...

前端开发中常用的插件库

ahooks 一个高质量且可靠的React Hooks库。class-variance-authority&#xff08;CVA&#xff09; 是一个专注于解决CSS类管理问题的库。classnames 是一个在React开发中非常流行的JavaScript工具库&#xff0c;它可以帮助开发者有条件地连接类名字符串。copy-to-clipboard 一个…...

认识+安装ElasticSearch

1. 为什么要学习ElasticSearch? 一般的来说,项目中的搜索功能尤其是电商项目,商品的搜索肯定是访问频率最高的页面之一。目前搜索功能是基于数据库的模糊搜索来实现的&#xff0c;存在很多问题。 1.1 数据库搜索所存在的问题 1.1.1 查询效率较低 由于数据库模糊查询不走索引&…...

Nginx | 解决 Spring Boot 与 Nginx 中的 “413 Request Entity Too Large“ 错误

关注&#xff1a;CodingTechWork 引言 在 Web 开发中&#xff0c;413 Request Entity Too Large 是一种常见的 HTTP 错误&#xff0c;它指示客户端请求的实体&#xff08;例如文件或数据&#xff09;超出了服务器允许的最大大小。对于使用 Spring Boot 和 Nginx 的应用程序来说…...

CAD批量打印可检索的PDF文件

本文虽介绍CAD使用方法&#xff0c;但还是劝告大家尽早放弃使用CAD软件。。。。太TM难用了 当你打开CAD时发现如下一堆图纸&#xff0c;但是不想一个一个打印时。你可以按照下面操作实现自动识别图框实现批量打印。 1.安装批量打印插件 2.安装后打开CAD&#xff0c;输入命令Bp…...

理解Unity脚本编译过程:程序集

https://docs.unity3d.com/Manual/script-compilation.html 关于Unity C#脚本编译的细节&#xff0c;其中一个比较重要的知识点就是如何自定义Assembly。 预定义的assembly 默认情况下&#xff0c;Unity会按照这个规则进行编译。 PhaseAssembly nameScript files1Assembly-…...

Linux-Ubuntu之SPI串行通信陀螺仪和加速度计

Linux-Ubuntu之SPI串口通信陀螺仪和加速度计 一&#xff0c;SPI通信原理二&#xff0c;ICM-20608六轴传感器控制三&#xff0c;代码1.小tip 一&#xff0c;SPI通信原理 SPI&#xff1a;串行全双工通信&#xff0c;最高能达到百MHZ&#xff0c;通常一个主设备跟多个从设备&…...

【C++/控制台】2048小游戏

源代码&#xff1a; #include <iostream> #include <windows.h> #include <stdio.h> #include <math.h> #include <stdlib.h> #include <conio.h> #include <time.h>// #define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME)…...

github gitbook写书

github创建新的仓库 在仓库中添加目录 ‘SUMMARY.md # Summary * [简介](README.md)gitbook 新建一个site https://www.gitbook.com/ 注册账号 取名字 一路 next&#xff0c;注意选免费版 最后 gitbook同步到github 你在主页可以看到 刚刚的test网站 点击右上角圈出来…...

鸿蒙中调整应用内文字大小

1、ui Stack() {Row() {ForEach([1, 2, 3, 4], (item: number) > {Text().width(3).height(20).backgroundColor(Color.Black).margin(item 2 ? { left: 8 } : item 3 ? { left: 7 } : { left: 0 })})}.width(97%).justifyContent(FlexAlign.SpaceBetween).padding({ ri…...

欧拉公式和傅里叶变换

注&#xff1a;英文引文机翻&#xff0c;未校。 中文引文未整理去重&#xff0c;如有异常&#xff0c;请看原文。 Euler’s Formula and Fourier Transform Posted byczxttkl October 7, 2018 Euler’s formula states that e i x cos ⁡ x i sin ⁡ x e^{ix} \cos{x} i …...

【C++经典例题】求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a; 期待您的关注 题目描述&#xff1a; 原题链接&#xff1a; 求123...n_牛客题霸_牛客网 (nowcoder.com) 解题思路&#xff1a; …...

Robot---奇思妙想轮足机器人

1 背景 传统机器人有足式、轮式、履带式三种移动方式&#xff0c;每种移动方式都有各自的优缺点。轮式机器人依靠车轮在地面上移动&#xff0c;能源利用率高、移动速度快&#xff0c;但是仅以轮子与地面接触&#xff0c;缺乏越障能力和对复杂地形的适应能力&#xff0c;尤其面对…...

升级 Spring Boot 3 配置讲解 —— 如何处理文件上传下载?

学会这款 &#x1f525;全新设计的 Java 脚手架 &#xff0c;从此面试不再怕&#xff01; 1. 环境准备 在开始之前&#xff0c;确保你已经具备以下环境&#xff1a; JDK 17 或更高版本&#xff08;Spring Boot 3 要求的最低 JDK 版本&#xff09;Maven 或 Gradle 构建工具Spr…...