基于Electron27+React18+ArcoDesign客户端后台管理EXE

这篇具有很好参考价值的文章主要介绍了基于Electron27+React18+ArcoDesign客户端后台管理EXE。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于electron27.x+react18搭建电脑端exe后台管理系统模板

electron-react-admin 基于electron27整合vite.js+react18搭建桌面端后台管理程序解决方案。

基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理

前几天有分享electron27+react18创建跨平台应用实践,大家感兴趣可以去看看。
https://blog.csdn.net/yanxinyun1990/article/details/134047329

基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理

Electron-ReactAdmin支持暗黑/白昼两种主题。

基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理

技术栈

  • 编辑器:vscode
  • 使用技术:electron27+vite^4.4.5+react18+zustand+react-router
  • UI组件库:arco-design (字节react轻量级UI组件库)
  • 样式管理:sass^1.69.5
  • 图表组件:bizcharts^4.1.23
  • markdown编辑器:@uiw/react-md-editor
  • 本地存储:zustand^4.4.4
  • 打包管理:electron-builder

基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理

项目结构

基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理
基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理

主进程入口

/**
 * Electron主进程入口
 * @author Hs
 */

const { app, BrowserWindow } = require('electron')

const Windows = require('./src/windows')

// 忽略安全警告
// ectron Security Warning (Insecure Content-Security-Policy)
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'

const createWindow = () => {
    let win = new Windows()
    win.createWin({ isMainWin: true })
}

app.whenReady().then(() => {
    createWindow()
    app.on('activate', () => {
        if (BrowserWindow.getAllWindows().length === 0) createWindow()
    })
})

app.on('window-all-closed', () => {
    if (process.platform !== 'darwin') app.quit()
})

预加载脚本

const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld('electronAPI', {
    // 通过 channel 向主进程发送异步消息。主进程使用 ipcMain.on() 监听 channel
    send: (channel, data) => {
        ipcRenderer.send(channel, data)
    },

    // 通过 channel 向主进程发送消息,并异步等待结果。主进程应该使用 ipcMain.handle() 监听 channel
    invoke: (channel, data) => {
        return new Promise(resolve => ipcRenderer.invoke(channel, data).then(res => resolve(res)).catch(e => console.log(e)))
    },

    // 监听 channel 事件
    receive: (channel, func) => {
        console.log("preload-receive called. args: ")
        ipcRenderer.on(channel, (event, ...args) => func(event, ...args))
    },

    // 一次性监听事件
    once: (channel, func) => {
        ipcRenderer.once(channel, (event, ...args) => func(event, ...args))
    }
})

基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理

渲染进程入口main.jsx

/**
 * 入口文件
 * @author Hs
*/

import ReactDOM from 'react-dom/client'
import App from './App.jsx'
import '@arco-design/web-react/dist/css/arco.css'
import './styles/common.scss'

import { launchWin } from '@/windows/action'

launchWin().then(config => {
    // 设置全局存储窗口配置
    window.config = config

    ReactDOM.createRoot(document.getElementById('root')).render(<App />)
})

国际化多语言+主题配置

基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理

import { useEffect, useMemo } from 'react'
import { HashRouter } from 'react-router-dom'
// 通过 ConfigProvider 组件实现国际化
import { ConfigProvider } from '@arco-design/web-react'
// 引入语言包
import enUS from '@arco-design/web-react/es/locale/en-US'
import zhCN from '@arco-design/web-react/es/locale/zh-CN'
import zhTW from '@arco-design/web-react/es/locale/zh-TW'

import { AuthRouter } from '@/hooks/useRoutes'
import { appStore } from '@/store/app'

// 引入路由配置
import Router from './router'

function App() {
    const { lang, config: { mode, theme }, setMode, setTheme } = appStore()

    const locale = useMemo(() => {
        switch(lang) {
            case 'en':
                return enUS
            case 'zh-CN':
                return zhCN
            case 'zh-TW':
                return zhTW
            default:
                return zhCN
        }
    }, [lang])

    useEffect(() => {
        setMode(mode)
        setTheme(theme)
    }, [])

    return (
        <ConfigProvider locale={locale}>
            <HashRouter>
                <AuthRouter>
                    <Router />
                </AuthRouter>
            </HashRouter>
        </ConfigProvider>
    )
}

export default App

lang.jsx语言配置

import { Dropdown, Menu, Button } from '@arco-design/web-react'
import Icon from '@components/Icon'
import { appStore } from '@/store/app'

export default function Lang() {
    const { lang, setLang } = appStore()

    const handleLang = val => {
        setLang(val)
    }

    return (
        <Dropdown
            position="bottom"
            droplist={
                <Menu className="radmin__dropdownLang" defaultSelectedKeys={[lang]} onClickMenuItem={handleLang}>
                    <Menu.Item key='zh-CN'>简体中文 <span>zh-CN</span></Menu.Item>
                    <Menu.Item key="zh-TW">繁体字 <span>zh-TW</span></Menu.Item>
                    <Menu.Item key="en">英文 <span>en</span></Menu.Item>
                </Menu>
            }
        >
            <Button
                shape="circle"
                size="small"
                icon={<Icon name="ve-icon-lang" />}
            />
        </Dropdown>
    )
}

zustand状态管理配置

/**
 * react状态管理库Zustand4,中间件persist本地持久化存储
 * create by Hs  Q:282310962
*/
import { create } from 'zustand'
import { persist, createJSONStorage } from 'zustand/middleware'
import { generate, getRgbStr } from '@arco-design/color'

export const appStore = create(
    persist(
        (set, get) => ({
            // 语言(中文zh-CN 英文en 繁体字zh-TW)
            lang: 'zh-CN',
            // 角色类型 roles: ['admin'] / roles: ['admin', 'dev'] / roles: ['dev', test']
            roles: ["dev"],
            // 配置信息
            config: {
                // 布局(分栏columns 纵向vertical 横向transverse)
                layout: 'columns',
                // 模式(亮色light - 暗黑dark)
                mode: 'light',
                // 主题色
                theme: '#3491FA',
                // 是否折叠菜单
                collapsed: false,
                // 开启面包屑导航
                breadcrumb: true,
                // 开启标签栏
                tabsview: true,
                tabRoutes: [],
                // 显示搜索
                showSearch: true,
                // 显示全屏
                showFullscreen: true,
                // 显示语言
                showLang: true,
                // 显示公告
                showNotice: true,
                // 显示底部
                showFooter: false
            },
            
            // 更新配置
            updateConfig: (key, value) => set({
                config: { ...get().config, [key]: value }
            }),
            // 设置角色
            setRoles: (roles) => set({roles}),
            // 设置多语言
            setLang: (lang) => set({lang}),
            // 设置主题模式
            setMode: (mode) => {
                if(mode == 'dark') {
                    // 设置为暗黑主题
                    document.body.setAttribute('arco-theme', 'dark')
                }else {
                    // 恢复亮色主题
                    document.body.removeAttribute('arco-theme')
                }
                get().updateConfig('mode', mode)
            },
            // 设置主题样式
            setTheme: (theme) => {
                const colors = generate(theme, { list: true })
                colors.map((item, index) => {
                    const rgbStr = getRgbStr(item)
                    document.body.style.setProperty(`--arcoblue-${index + 1}`, rgbStr)
                })
                get().updateConfig('theme', theme)
            }
        }),
        {
            name: 'appState'
        }
    )
)

基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理

import { appStore } from '@/store/app'

// 引入语言配置
import enUS from './en-US'
import zhCN from './zh-CN'
import zhTW from './zh-TW'

export const locales = {
    'en': enUS,
    'zh-CN': zhCN,
    'zh-TW': zhTW
}

export default (locale) => {
    const appState = appStore()
    const lang = appState.lang || 'zh-CN'

    return (locale || locales)[lang] || {}
}

以上就是electron27+react18开发跨端后台管理系统的一些分享,希望对大家有一些帮助!

https://blog.csdn.net/yanxinyun1990/article/details/127562518

https://blog.csdn.net/yanxinyun1990/article/details/120387832

基于Electron27+React18+ArcoDesign客户端后台管理EXE,electron27+react18,Electron+Vite.js,react18+arco实例,electron-radmin,electron+react,electron后台管理文章来源地址https://www.toymoban.com/news/detail-714283.html

到了这里,关于基于Electron27+React18+ArcoDesign客户端后台管理EXE的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 三:基于TCP的服务端/客户端

    其中四层模型说的就是TCP(UDP)/IP协议栈 并列图片 listen详解 当客户端发送连接请求时,并不一定能立即连接到。尽管此时服务端处于等待连接请求状态(listen),但是由于系统正忙,此连接请求需要进入连接请求等待队列,listen第二个参数便是设置此等待队列的大小。 accept函数

    2024年01月20日
    浏览(47)
  • 基于C#的ModbusTcp客户端Demo

            今天跟大家分享一个基于C#的ModbusTcp客户端的创建,本人小白一枚,第一次发表博客,有诸多不足之处,还请谅解,也希望大佬可以指点,如何可以做得更好。 先展示一下成品效果吧。         Demo看起来就跟上图一样,这里ui使用了sunnyui的一些控件,以及运用

    2024年02月11日
    浏览(55)
  • 配置基于 AWS CRT 的 HTTP 客户端

    基于 AWS CRT 的 HTTP 客户端包括同步 AwsCrtHttpClient 和异步 AwsCrtAsyncHttpClient。基于 AWS CRT 的 HTTP 客户端具有以下 HTTP 客户端优势: 更快的 SDK 启动时间 更小的内存占用空间 降低的延迟时间 连接运行状况管理 DNS 负载均衡 SDK 中基于 AWS CRT 的组件 本主题中介绍的基于 AWS CRT 的 

    2024年02月21日
    浏览(45)
  • CentOS 7 基于C 连接ZooKeeper 客户端

    前提条件:CentOS 7 编译ZooKeeper 客户端,请参考:CentOS 7 编译ZooKeeper 客户端 在 /usr/local/source_code/zookeeper_demo/ 目录下,新增zookeeper_demo.c 文件,内容如下: 在 编译代码的时候需要加链接的库及库的路径 ,那么编译命令如下 在执行的时候 如果出现动态库无法加载,请进行如下

    2024年02月08日
    浏览(43)
  • 基于SpringBoot+Vue+uniapp毕业论文管理系统(实现三个端,小程序客户端、PC前台客户端、PC管理端)

    文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JDK版本:Java jdk8 Maven:apache-maven 3.8.1-bin 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序运行软

    2024年02月04日
    浏览(51)
  • 【计算机网络】 基于TCP的简单通讯(客户端)

    加载库 创建套接字 连接服务端 连接服务端我们使用的是connect()函数,分别为连接使用的socket,连接的地址信息,连接的地址信息长度。返回值为int类型,如果没有错误返回0,否则返回SOCKET_ERROR。 收发数据 关闭套接字、卸载库 这样我们的TCP协议简单通讯就写好了。 先运行

    2024年02月07日
    浏览(59)
  • Modbus协议及基于Python的ModbusTCP客户端实现

    Modbus 协议是由 Modicon 公司(现在的施耐德电气 Schneider Electric )于1979年为使用可编程逻辑控制器(PLC)通信而推出,主要建立在物理串口、以太网 TCP/IP 层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业电子设备之间的互联。 Modbus技术文档 Modbus 是OSI模型

    2024年02月07日
    浏览(47)
  • 基于C# Socket实现的简单的Redis客户端

         Redis 是一款强大的高性能键值存储数据库,也是目前 NOSQL 中 最流行 比较流行的一款数据库,它在广泛的应用场景中扮演着至关重要的角色,包括但不限于缓存、消息队列、会话存储等。在本文中,我们将介绍如何基于 C# Socket 来实现一个简单的Redis客户端类 RedisClien

    2024年02月05日
    浏览(54)
  • Kubernetes客户端认证——基于CA证书的双向认证方式

    Kubernetes集群的访问权限控制由API Server负责,API Server的访问权限控制由身份验证(Authentication)、授权(Authorization)和准入控制(Admission control)三个步骤组成,这个三个步骤是按序进行的(详细介绍请参见《(转)使用kubectl访问Kubernetes集群时的身份验证和授权》)。 其中身份验证

    2023年04月10日
    浏览(37)
  • 基于Spring OAuth2 之客户端凭证模式演示

    客户端凭证模式(Client Credentials Grant) :适用于客户端访问自己的资源的情况,而不是代表用户访问资源。 客户端应用程序使用其自身的凭证(即客户端ID和客户端密钥)直接向身份验证服务器进行身份验证,并获取访问令牌。此授权方式不涉及用户,因为它只允许客户端访

    2024年02月14日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包