探索 Electron:构建用户友好的登录页面流程

Electron是一个开源的桌面应用程序开发框架,它允许开发者使用Web技术(如 HTML、CSS 和 JavaScript)构建跨平台的桌面应用程序,它的出现极大地简化了桌面应用程序的开发流程,让更多的开发者能够利用已有的 Web 开发技能来构建功能强大且跨平台的应用程序,这对于提升开发效率和应用程序的快速交付具有重要意义。

本文将带领您进入 Electron 的世界,探索如何通过其强大的功能和灵活的架构,为您的应用程序实现一个完善的用户登录流程,具体的框架搭建和基本配置这里就不再赘述了,可以参考我之前的文章:地址 ,里面的路由和组件库的配置,这里就不再赘述了!

目录

框架搭建

首页搭建

登录框搭建

跳转首页


框架搭建

这里就仿照一下新版QQ进行登录界面的内容进行编写:

首先我们来到主进程对用户的登录界面进行一个简单的处理,代码如下所示:

然后我们在App根组件中设置通配符选项,然后设置页面不可以进行文字复制:

<template><div class="container"><router-view></router-view></div>
</template><script setup lang="ts"></script><style lang="scss">
* {margin: 0;padding: 0;box-sizing: border-box;user-select: none; /* 禁止选择文本 */-webkit-user-select: none; /* Safari 和 Chrome 的兼容性 */-moz-user-select: none; /* Firefox 的兼容性 */-ms-user-select: none; /* IE 和 Edge 的兼容性 */
}
.container {width: 100%;height: 100%;
}
</style>

最终达到的效果如下所示:

然后这里我们需要用到element-plus组件库的内容,配置参考开局引出的链接即可,

首页搭建

然后这里我们借助elementPlus组件库中的icon图标设置登录页顶部右侧的一些小按钮,然后左侧设置一个通告栏的效果,在通过栏处我们通过axios拿到对应的接口数据:

let famousRemark = ref('') // 名言数据
// 获取名言数据
const getFamousRemark = () => {axios.get<any, any>('https://api.uomg.com/api/rand.qinghua').then((res) => {famousRemark.value = res.data.content})
}

在html代码中,我们拿到名言的接口数据,然后通过animationiteration函数设置每执行完一次动画效果之后,重新调用接口函数:

<div class="header"><div class="header-left"><div class="header-icon"><el-icon color="red"><VideoCamera /></el-icon></div><div class="header-text"><span @animationiteration="getFamousRemark">{{ famousRemark }}</span></div></div><div class="header-right"><div class="emplace" @click="handleEmplace"><el-icon :size="15"><Connection class="icon" /></el-icon></div><div class="close" @click="handleClose"><el-icon :size="15"><Close /></el-icon></div></div>
</div>

在首页这里我们也给出了一个背景图的效果,最终呈现的效果如下所示:

然后我们给头部右侧的图标设置一下点击事件,这里我们借助electron中的渲染进行的函数往主进程发送对应的信息,获取版本数据是主进程往渲染进程发数据,处理关闭事件是渲染进程往主进程发送数据,如下所示:

const { ipcRenderer } = require('electron')let versions = ref() // 版本数据
let dialogVisible = ref(false) // 弹窗
// 获取版本事件
const handleEmplace = async () => {const result = await ipcRenderer.invoke('getVersion')versions.value = resultdialogVisible.value = true
}
// 处理关闭事件
const handleClose = () => {ipcRenderer.send('close-main-window')
}

然后我们在主进程中开启渲染进程可以使用node模块的配置:

然后调用主进程的ipcMain函数进行数据的传递与接收:

// 获取版本数据
ipcMain.handle('getVersion', () => {const versions = {electron: process.versions.electron,node: process.versions.node,chrome: process.versions.chrome,  // 如果需要的话,也可以获取 Chrome 的版本};return versions;})
// 关闭窗口
ipcMain.on('close-main-window', (event) => {event.preventDefault()mainWindow.close()
})

最终呈现的效果如下所示:

登录框搭建

接下来借助elementPlus中的表单组件进行一个登录框页面的搭建,这里我把表单元素和底部的组件抽离出一个单独的组件进行设置:

<div class="content"><div class="content-title">MY QQ</div><div class="content-image"><img :src="avatar" alt="头像" /></div><div class="content-login"><LoginForm></LoginForm></div><div class="login-footer"><Footer></Footer></div>
</div>

页面搭建很简单,这里就不再一一赘述了,最终呈现的效果如下所示:

然后底部的组件的话,这里使用了一些小的svg增加了一点趣味性:

跳转首页

当我们要跳转的首页的时候,肯定要进行一个页面的大小的调整,不可能也是登录页的大小,所以我们在进入到首页的时候,页面加载完成时向主进程发送一个消息,通知主进程调整页面的大小:

onMounted(() => {ipcRenderer.invoke('home-window-size')
})

来到主进程,我们设置要调整的窗口大小已经设置其他初始化的时候页面的配置:

// 首页窗口大小
ipcMain.handle('home-window-size', () => {mainWindow.setSize(800, 600) // 设置窗口大小mainWindow.setMaximizable(true) // 允许最大化窗口mainWindow.center() // 居中窗口mainWindow.setResizable(true) // 允许窗口缩放, 默认是 false
})

然后这里我们再在首页设置一个跳转到登录页的按钮:

<template><div class="home"><div class="header">头部</div><div class="container"><div>登录界面</div><el-button type="primary" @click="goBack">跳转登录页</el-button></div></div>
</template><script setup lang="ts">
import { onMounted } from 'vue'
import { useRouter } from 'vue-router'
const { ipcRenderer } = require('electron')const router = useRouter()const goBack = () => {router.push('/')
}onMounted(() => {ipcRenderer.invoke('home-window-size')
})
</script>

在登录页面,我们在页面刚加载的时候也向主进程发送一个跳转窗口大小的指令:

onMounted(() => {ipcRenderer.invoke('login-window-size')
})

在主进程中也通样设置一下登录页面的窗口设置:

// 登录页窗口大小
ipcMain.handle('login-window-size', () => {mainWindow.setSize(320, 450) // 设置窗口大小mainWindow.setMinimizable(true) // 允许最小化窗口mainWindow.center() // 居中窗口mainWindow.setResizable(false) // 允许窗口缩放, 默认是 false
})

然后默认配置上,我们设置不可双击最大化,然后在具体需要最大化的地方再调用下面的函数即可,这里我们设置登录页不可最大化,然后首页可以:mainWindow.setMaximizable(true)

最终呈现的效果如下所示:

项目地址:地址。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3269932.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十九章 等待队列

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

远程项目调试-informer2020

informer2020 Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting(原文&#xff09;Informer 是一个基于Transformer的模型&#xff0c;是为了应对长依赖关系而开发的。本文的主要主题是序列预测。序列预测可以在任何具有不断变化的数据的地方…

【STM32物联网】基于STM32+ESP8266+手机APP设计的智能密码锁源码原理图APP文档

实物图 1.摘要 设计了一种基于单片机的智能密码锁系统,提供了一种安全度高、智能化 便捷的门锁解决方案。系统由多个关键模块组成,包括 STM32 主控芯片、 RC522 射频 卡模块、指纹采集模块、矩阵按键、LCD 显示屏、 WiFi 模块和继电器等。这些模块发挥 着重要的功…

回溯的undo choice

重写N皇后和分割回文串,发现会想不明白path.remove(path.size() - 1)是在if里面还是if外面&#xff0c;问了GPT感觉很清楚 题目 N皇后 class Solution {List<List<Integer>> res new ArrayList<>();List<Integer> path new ArrayList<>();pu…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第四十八章 Platform 设备驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

微信小程序之调查问卷

一、设计思路 1、界面 调查问卷又称调查表&#xff0c;是以问题的形式系统地记载调查内容的一种形式。微信小程序制作的调查问卷&#xff0c;可以在短时间内快速收集反馈信息。具体效果如下所示&#xff1a; 2、思路 此调查问卷采用服务器客户端的方式进行设计&#xff0c;服…

【0300】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (2 - 1)

1. 前言 在【0298】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (2)一文中讲解过Postgres内核在通过RangeVar打开一个目标关系表时,在函数parserOpenTable()中,会注册parser错误位置报告回调函数。 同时也说明了这个注册过程的使用模式。 本文将继续讲解该使用模…

【Linux】-----工具篇(编译器gcc/g++,调试器gdb)

目录 一、gcc/g 简单认识 程序的翻译过程认识gcc 预处理(宏替换) 编译 汇编 链接 宏观认识 如何理解&#xff08;核心&#xff09; 什么是链接&#xff1f; 链接的分类 二、gdb 基本的认识 基本操作及指令 安装gdb 启动gdb ​编辑 显示源代码(list) 运行程序…

【云原生】Docker搭建知识库文档协作平台Confluence

目录 一、前言 二、企业级知识库文档工具部署形式 2.1 开源工具平台 2.1.1 开源工具优点 2.1.2 开源工具缺点 2.2 私有化部署 2.3 混合部署 三、如何选择合适的知识库平台工具 3.1 明确目标和需求 3.2 选择合适的知识库平台工具 四、Confluence介绍 4.2 confluence特…

动视发布长篇“论文”试图证明:没有SBMM 只有高手受益

SBMM——基于技能的比赛匹配系统&#xff0c;一直是《使命召唤》和广大 FPS 玩家所诟病的东西&#xff0c;但是《使命召唤》抱怨的玩家最多&#xff0c;因为似乎它所使用的匹配系统是让技术较好的玩家体验最糟糕的。 动视在此前一改对匹配系统避而不谈的态度后&#xff0c;日前…

鸿蒙开发——axios封装请求、拦截器

描述&#xff1a;接口用的是PHP&#xff0c;框架TP5 源码地址 链接&#xff1a;https://pan.quark.cn/s/a610610ca406 提取码&#xff1a;rbYX 请求登录 HttpUtil HttpApi 使用方法

Hadoop单机版环境搭建

一 . 案例信息 Hadoop 的安装部署的模式一共有三种&#xff1a; 本地模式&#xff0c;默认的模式&#xff0c;无需运行任何守护进程&#xff08; daemon &#xff09;&#xff0c;所有程序都在单个 JVM 上执行。由 于在本机模式下测试和调试 MapReduce 程序较为方便&#x…

Object Detection in 20 Years: A Survey 论文阅读

前言 如果要学习目标检测&#xff0c;那了解目标检测发展历程和各个技术将有助于更好地学习。所以今天我们看一篇来自IEEE的综述。 论文名&#xff1a;Object Detection in 20 Years: A Survey 论文作者&#xff1a;Zhengxia Zou et.al. 期刊/会议名&#xff1a;IEEE 发表时间…

日记审计遵守合规安全要求

一、什么是日志审计系统 日记审计系统是一种用于记录、监视和分析系统日志的工具或系统。它主要用于帮助组织实时监控与分析各种事件和行为的日志记录&#xff0c;以便检测潜在的安全威胁&#xff0c;了解系统性能和进行故障排除。日志审计系统通常能够收集、存储和分析来自各…

用Python做一个翻译软件,比上浏览器快100倍

简单的用Python来做一个翻译软件 开发环境 Python 3.10 Pycharm模块使用 requests -> pip install requests hashlib tkinter案例分为三部分: 1. 爬虫: 获取翻译接口, 请求获取翻译结果问题1: 接口抓包分析问题2: 请求需要写cookie问题3: 不同文本翻译, s加密参数2. 界面…

PHP多场地预定小程序系统源码

一键畅游多地&#xff01;多场地预定小程序的超实用指南 段落一&#xff1a;【开篇&#xff1a;告别繁琐&#xff0c;预订新体验】 &#x1f389;&#x1f680; 还在为多个活动或会议的场地预订而头疼不已吗&#xff1f;多场地预定小程序来拯救你啦&#xff01;它像是一位贴心…

[Windows CMD] 检测网络连通性 ping

ping 是一个非常常用的网络工具&#xff0c;用于测试网络连接的可达性和测量网络延迟。它通过发送 ICMP (Internet Control Message Protocol) Echo Request 数据包到目标主机&#xff0c;并等待接收回显应答 (Echo Reply) 来工作。ping 命令可以帮助您快速检测网络问题&#x…

blender使用- 置换修改器

置换修改器 对于物体可以先做细分&#xff0c;然后添加置换修改器&#xff0c;添加贴图。再对贴图的参数进行修改&#xff0c;渲染想要的效果。 旋转模式下&#xff08;按下s&#xff09;&#xff0c;z表示方向&#xff0c;0表示平整

水源地(水库)泵闸远程控制与调度系统

水源地&#xff08;水库&#xff09;泵闸远程控制与调度系统是智慧水利管理领域的重要组成部分。这一系统集现代通信、自动化控制、物联网及大数据分析技术于一体&#xff0c;旨在实现对水源地&#xff08;水库&#xff09;泵闸设备的远程监控、智能调度和高效管理。还能够为管…

若依ruoyi+AI项目二次开发(智能售货机运营管理系统)

(一) 帝可得 - 产品原型 - 腾讯 CoDesign (qq.com)