国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

這篇具有很好參考價值的文章主要介紹了ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

基于electron27+react18+arco電腦端后臺管理程序EXE實例ElectronRAdmin。

electron27-react18-admin 基于跨平臺技術(shù)Electron集成Vite.js構(gòu)建桌面端React18后臺管理系統(tǒng)應(yīng)用解決方案。支持dark/light主題、中英文/繁體國際化、動態(tài)組件權(quán)限驗證、內(nèi)置三種布局模板、tabs路由菜單標(biāo)簽欄等功能。

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

electron-react-admin支持暗黑/亮色兩種主題切換模式。

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

使用技術(shù)

  • 開發(fā)工具:VScode
  • 框架技術(shù):electron27+vite^4.4.5+react18+zustand+react-router
  • UI組件庫:arco-design (字節(jié)react輕量級UI組件庫)
  • 樣式處理:sass^1.69.5
  • 圖表組件:bizcharts^4.1.23
  • MD編輯器組件:@uiw/react-md-editor
  • 本地存儲管理:zustand^4.4.4
  • 打包管理:electron-builder

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

大家如果對electron+vite+react18搭建跨電腦端多窗口項目應(yīng)用感興趣,可以去看看下面這篇分享文章。

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

https://www.cnblogs.com/xiaoyan2017/p/17788495.html

項目結(jié)構(gòu)

整個項目采用electron27整合vite.js搭建開發(fā),遵循react18 hooks編碼語法。

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

主進(jìn)程入口electron-main.js

/**
 * Electron主進(jìn)程入口
 * @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()
})

electron預(yù)加載配置

/**
 * Electron預(yù)加載腳本
 * @author Hs  Q:282310962
 */

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

contextBridge.exposeInMainWorld('electronAPI', {
    // 通過 channel 向主進(jìn)程發(fā)送異步消息。主進(jìn)程使用 ipcMain.on() 監(jiān)聽 channel
    send: (channel, data) => {
        ipcRenderer.send(channel, data)
    },

    // 通過 channel 向主進(jìn)程發(fā)送消息,并異步等待結(jié)果。主進(jìn)程應(yīng)該使用 ipcMain.handle() 監(jiān)聽 channel
    invoke: (channel, data) => {
        return new Promise(resolve => ipcRenderer.invoke(channel, data).then(res => resolve(res)).catch(e => console.log(e)))
    },

    // 監(jiān)聽 channel 事件
    receive: (channel, func) => {
        console.log("preload-receive called. args: ")
        ipcRenderer.on(channel, (event, ...args) => func(event, ...args))
    },

    // 一次性監(jiān)聽事件
    once: (channel, func) => {
        ipcRenderer.once(channel, (event, ...args) => func(event, ...args))
    }
})

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

渲染進(jìn)程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 => {
    console.log('——+——+——窗口參數(shù):', config)
    console.log('——+——+——窗口id:', config.id)

    // 設(shè)置全局存儲窗口配置
    window.config = config

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

國際化 + 主題dark/light配置

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

App.jsx中配置全局多語言/主題。

import { useEffect, useMemo } from 'react'
import { HashRouter } from 'react-router-dom'
// 通過 ConfigProvider 組件實現(xiàn)國際化
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狀態(tài)管理庫內(nèi)置的中間件persist全局持久化存儲。

/**
 * react狀態(tài)管理庫Zustand4,中間件persist本地持久化存儲
*/
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,
                // 開啟面包屑導(dǎo)航
                breadcrumb: true,
                // 開啟標(biāo)簽欄
                tabsview: true,
                tabRoutes: [],
                // 顯示搜索
                showSearch: true,
                // 顯示全屏
                showFullscreen: true,
                // 顯示語言
                showLang: true,
                // 顯示公告
                showNotice: true,
                // 顯示底部
                showFooter: false
            },
            
            // 更新配置
            updateConfig: (key, value) => set({
                config: { ...get().config, [key]: value }
            }),
            // 設(shè)置角色
            setRoles: (roles) => set({roles}),
            // 設(shè)置多語言
            setLang: (lang) => set({lang}),
            // 設(shè)置主題模式
            setMode: (mode) => {
                if(mode == 'dark') {
                    // 設(shè)置為暗黑主題
                    document.body.setAttribute('arco-theme', 'dark')
                }else {
                    // 恢復(fù)亮色主題
                    document.body.removeAttribute('arco-theme')
                }
                get().updateConfig('mode', mode)
            },
            // 設(shè)置主題樣式
            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'
        }
    )
)

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

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] || {}
}

Okay,以上就是electron+react18+zustand開發(fā)電腦端后臺管理EXE程序的一些分享。

附上最近開發(fā)的兩個實例項目

https://www.cnblogs.com/xiaoyan2017/p/17468074.html

https://www.cnblogs.com/xiaoyan2017/p/17695193.html

ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE

?文章來源地址http://www.zghlxwxcb.cn/news/detail-712399.html

到了這里,關(guān)于ElectronReactAdmin跨平臺管理系統(tǒng)|electron27+react18后臺模板EXE的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • web自動化測試——跨平臺設(shè)備管理方案Selenium Grid

    web自動化測試——跨平臺設(shè)備管理方案Selenium Grid

    Selenium Grid 是 Selenium 的三大組件之一,它可以在多臺機(jī)器上并行運(yùn)行測試,集中管理不同的瀏覽器版本和瀏覽器配置。通過將客戶端命令發(fā)送到遠(yuǎn)程瀏覽器的實例, Selenium Grid 允許在遠(yuǎn)程計算機(jī) (虛擬或真實) 上執(zhí)行 WebDriver 腳本. 它旨在提供一種在多臺計算機(jī)上并行運(yùn)行測試的

    2024年02月08日
    瀏覽(24)
  • 軟件測試/測試開發(fā)/全日制/測試管理丨跨平臺設(shè)備管理方案 Selenium Grid

    軟件測試/測試開發(fā)/全日制/測試管理丨跨平臺設(shè)備管理方案 Selenium Grid

    Selenium Grid是一個用于實現(xiàn)分布式測試的工具,允許在多個機(jī)器和多個瀏覽器上同時運(yùn)行Selenium測試。它可以有效地管理和分發(fā)測試任務(wù),支持跨平臺和跨瀏覽器的測試。以下是關(guān)于Selenium Grid的一些關(guān)鍵特點和使用方案: 分布式測試: ?Selenium Grid支持在不同的計算機(jī)和操作系

    2024年01月20日
    瀏覽(25)
  • 通過堅果云、KeePassXC、keepass2android實現(xiàn)跨平臺的密碼管理方案

    通過堅果云、KeePassXC、keepass2android實現(xiàn)跨平臺的密碼管理方案

    KeePassXC、keepass2android都是屬于一個免費(fèi)的密碼管理軟件,但是密碼的數(shù)據(jù)庫文件是基于本地設(shè)備的、難做到Windows和Android使用同一個密碼數(shù)據(jù)庫文件的要求,但他們都支持使用對方的數(shù)據(jù)庫文件,堅果云支持第三方應(yīng)用授權(quán)WebDAV,所以我們借用堅果云實現(xiàn)一個把數(shù)據(jù)庫文件放

    2024年02月06日
    瀏覽(36)
  • 一個基于.NET Core構(gòu)建的簡單、跨平臺、模塊化的商城系統(tǒng)

    一個基于.NET Core構(gòu)建的簡單、跨平臺、模塊化的商城系統(tǒng)

    今天大姚給大家分享一個基于.NET Core構(gòu)建的簡單、跨平臺、模塊化、完全開源免費(fèi)(MIT License)的商城系統(tǒng):Module Shop。 商品:分類、品牌、單位、選項(銷售屬性)、屬性、屬性模板、屬性組。 銷售:訂單、物流。 內(nèi)容:首頁配置、評論、回復(fù)。 配置:國家、用戶、倉庫

    2024年03月27日
    瀏覽(1131)
  • 【QT+QGIS跨平臺編譯】之一:【sqlite+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    SQLite是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領(lǐng)域項目。它的設(shè)計目標(biāo)是嵌入式的,而且已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它

    2024年01月22日
    瀏覽(95)
  • 【QT+QGIS跨平臺編譯】之七:【libjpeg+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    【QT+QGIS跨平臺編譯】之七:【libjpeg+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    libjpeg是一個廣泛使用的jpeg圖像壓縮和解壓的函數(shù)庫,采用 C 語言開發(fā)。 2013年1月,Independent JPEG Group發(fā)布了版本9,對新引入的無損編碼模式進(jìn)行了改進(jìn)。2022年1月,發(fā)布了版本9e,是唯一真正的源參考JPEG編解碼器。 【libjpeg跨平臺編譯】:Windows環(huán)境下編譯成果(支撐QGIS跨平臺

    2024年01月25日
    瀏覽(96)
  • 【QT+QGIS跨平臺編譯】之五:【curl+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    【QT+QGIS跨平臺編譯】之五:【curl+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    (libcurl編譯,依賴OpenSSL、libSSH2等庫) curl(CommandLine Uniform Resource Locator)主要功能就是用不同的協(xié)議連接和溝通不同的服務(wù)器,相當(dāng)封裝了的socket。 libcurl支持http, https, ftp, gopher, telnet, dict, file, 和ldap 協(xié)議。libcurl同樣支持HTTPS證書授權(quán),HTTP POST, HTTP PUT, FTP 上傳(當(dāng)然你也可

    2024年01月23日
    瀏覽(161)
  • 【QT+QGIS跨平臺編譯】之八:【zstd+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    【QT+QGIS跨平臺編譯】之八:【zstd+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    【libzstd跨平臺編譯】:Windows環(huán)境下編譯成果(支撐QGIS跨平臺編譯,以及二次研發(fā)) 【libzstd跨平臺編譯】?

    2024年01月25日
    瀏覽(165)
  • 【QT+QGIS跨平臺編譯】之三:【OpenSSL+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    OpenSSL是一個開放源代碼的軟件庫包,應(yīng)用程序可以使用這個包來進(jìn)行安全通信,避免竊聽,同時確認(rèn)另一端連接者的身份。這個包廣泛被應(yīng)用在互聯(lián)網(wǎng)的網(wǎng)頁服務(wù)器上。 SSL是Secure Sockets Layer(安全套接層協(xié)議)的縮寫,可以在Internet上提供秘密性傳輸。SSL能使用戶/服務(wù)器應(yīng)用

    2024年01月22日
    瀏覽(168)
  • 【QT+QGIS跨平臺編譯】之三十六:【RasterLite2+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    【QT+QGIS跨平臺編譯】之三十六:【RasterLite2+Qt跨平臺編譯】(一套代碼、一套框架,跨平臺編譯)

    RasterLite2是一個開源的輕量級柵格數(shù)據(jù)庫,可以用于存儲和管理各種類型的柵格數(shù)據(jù),包括衛(wèi)星遙感圖像、數(shù)字高程模型等。 與傳統(tǒng)的GIS數(shù)據(jù)存儲方式不同,RasterLite2采用基于SQLite的數(shù)據(jù)庫引擎,支持快速的數(shù)據(jù)查詢和空間分析操作。同時,由于其輕量級的設(shè)計,RasterLite2可以

    2024年02月19日
    瀏覽(103)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包