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

news2024/11/24 20:20:25

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 = result
  dialogVisible.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://www.coloradmin.cn/o/1953054.html

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

相关文章

88年汉城奥运追忆:差距尤存,出路何在

&#xff08;35年前的文章&#xff0c;摘自1989年2月1日《大众日报》&#xff09; 差距尤存 出路何在 ——汉城奥运会后的思索 刘伟 一项调查表明&#xff1a;在当今中国中学生最喜爱的十本杂志中&#xff0c;竟没有一本是体育类杂志&#xff1b;在城市工人、干部、科技人员家…

搜索引擎项目(四)

SearchEngine 王宇璇/submit - 码云 - 开源中国 (gitee.com) 基于Servlet完成前后端交互 WebServlet("/searcher") public class DocSearcherServlet extends HttpServlet {private static DocSearcher docSearcher new DocSearcher();private ObjectMapper obje…

【前端/js】使用js读取本地文件(xml、二进制)内容

目录 说在前面FileReaderDOMParser文本文件二进制文件 说在前面 浏览器版本&#xff1a;Microsoft Edge 126.0.2 (正式版本) (64 位) FileReader MDNFileReader 接口允许 Web 应用程序异步读取存储在用户计算机上的文件&#xff08;或原始数据缓冲区&#xff09;的内容&#x…

Golang 高性能 Websocket 库 gws 使用与设计(一)

前言 大家好这里是&#xff0c;白泽&#xff0c;这期分析一下 golang 开源高性能 websocket 库 gws。 视频讲解请关注&#x1f4fa;B站&#xff1a;白泽talk 介绍 gws&#xff1a;https://github.com/lxzan/gws &#xff5c;GitHub &#x1f31f; 1.2k&#xff0c;高性能的 …

STM32(七):STM32指南者-通信实验

目录 一、基本概念通讯基本概念1、串行和并行2、同步通讯与异步通讯3、全双工、半双工、单工4、通讯速率 USART基本概念1、串口通讯基本概念2、物理层3、协议层4、指南者的串口USART I2C基本概念SPI基本概念 二、USART串口实验前期准备1、安装安装 USB 转串口驱动_CH3402、野火…

【中项】系统集成项目管理工程师-第5章 软件工程-5.1软件工程定义与5.2软件需求

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

代码随想录算法训练营day22 | 77. 组合、216.组合总和III 、17.电话号码的字母组合

碎碎念&#xff1a;加油 参考&#xff1a;代码随想录 回溯算法理论基础 回溯和递归是相辅相成的&#xff0c;只要有递归&#xff0c;就会有回溯。回溯通常在递归函数的下面。 回溯搜索到法的效率&#xff1a; 它其实是纯暴力的做法&#xff0c;不是一个高效的算法。 回溯法能…

将控制台内容输出到文本文件

示例代码&#xff1a; Imports System.IO Module Module1Sub Main()Dim fs As New FileStream("D:\Desktop\test\输出结果.txt", FileMode.Create, FileAccess.Write, FileShare.None)Dim sw As New StreamWriter(fs)Console.SetOut(sw)Console.SetError(sw)For i …

Spring 自定义集合实现策略

Spring 自定义集合实现策略 日常开发中&#xff0c;如果遇到复杂业务通常会用一个接口实现多个实现类。需要根据对应参数判断获取不同实现类。例如支付场景&#xff0c;根据选择支付方式&#xff0c;选择相应路由。如果实现类不多&#xff0c;通常会这样。如果实现类多了&…

【论文10】复现代码tips

一、准备工作 1.创建一个虚拟环境 conda create --name drgcnn38 python=3.8.18 2.激活虚拟环境 conda activate drgcnn38 注意事项 在Pycharm中终端(terminal)显示PS而不是虚拟环境base 问题如下所示 解决方法:shell路径改成cmd.exe 重启终端显示虚拟环境 3.安装torch …

Linux:Linux进程控制

目录 1. 进程概念 1.1 并行和并发 2. 进程创建 2.1 fork()函数初识 2.2 写时拷贝 2.3 fork常规用法 2.4 fork调用失败的原因 3. 进程终止 3.1 进程场景 3.2 进程常见退出方法 4. 进程等待 4.1 进程等待必要性 4.2 进程等待的方法 4.2.1 wait方法&#xff1a; 4.…

推荐系统三十六式学习笔记:工程篇.常见架构24|典型的信息流架构是什么样的

目录 整体框架数据模型1.内容即Activity2.关系即连接 动态发布信息流排序数据管道总结 从今天起&#xff0c;我们不再单独介绍推荐算法的原理&#xff0c;而是开始进入一个新的模块-工程篇。 在工程实践的部分中&#xff0c;我首先介绍的内容是当今最热门的信息流架构。 信息…

关于数据存储位置的一点知识

关于数据存储位置的一点知识

c++红黑树,插入公式

概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路 径会比其他路径长出俩倍&#xff0c;因而是接近…

useRoute 函数的详细介绍与使用示例

title: useRoute 函数的详细介绍与使用示例 date: 2024/7/27 updated: 2024/7/27 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了Nuxt.js中useRoute函数的详细用途与示例&#xff0c;展示了如何在组合式API中使用useRoute获取当前路由信息&#xff0c;包括动态参数、…

web服务器dns服务器配置服务

1.搭建一个nfs服务器&#xff0c;客户端可以从该服务器的/share目录上传并下载文件 server服务器&#xff1a; 创建 /share目录&#xff0c;并且编辑/etc/exports文件 更改目录权限为755&#xff1a; 755权限码的含义是&#xff1a; 文件所有者&#xff08;第一位数字7&…

Docker Desktop安装(通俗易懂)

1、官网 https://www.docker.com/products/docker-desktop/ 2、阿里云镜像 docker-toolbox-windows-docker-for-windows安装包下载_开源镜像站-阿里云 1. 双击安装文件勾选选项 意思就是&#xff1a; Use WSL 2 instead of Hyper-V (recommended) : 启用虚拟化&#xff0c;…

20240727生活沉思------------关于报考软考高级架构师

软考高级架构师 软考高级架构师 缴费 主要是报的千峰 1880元。 相对来说还算可以吧。。。其他也没给我机会选择啊 备考 我现在开始备考&#xff0c;考试时间2024年11月。 今天是正式开始7.27号。 给大家看看接下来我的课程安排&#xff1a; 额&#xff0c;还是满满当当的…

Redis从入门到超神-(十二)Redis监听Key的过期事件

前言 试想一个业务场景&#xff0c;订单超过30分钟未支付需要做自动关单处理,修改订单状态&#xff0c;库存回退等&#xff0c;你怎么实现&#xff1f;方案一&#xff1a;可以使用定时任务扫表&#xff0c;通过支付状态和下单时间来判断是否支付过期。但是这样的方案是非常消耗…

Vue入门(二)常用指令

一、Vue 常用指令 Vue 常用指令 - 指令&#xff1a;是带有 v- 前缀的特殊属性&#xff0c;不同指令具有不同含义。例如 v-html&#xff0c;v-if&#xff0c;v-for。 - 使用指令时&#xff0c;通常编写在标签的属性上&#xff0c;值可以使用 JS 的表达式。 - 常用指令 二、常用…