Electron32-Vite5-OS跨平台os模板|electron32+vue3通用os系统

举报
Andy Yan 发表于 2024/09/10 07:10:30 2024/09/10
【摘要】 全新原创Electron32+Vite5+Vue3+Pinia2+ArcoDesign+Echarts搭建桌面版os管理模板。内置macos和windows两种桌面布局模板、自研可拖拽式栅格布局模板引擎。

半个月之前有分享一款electron31+vue3桌面端中后台管理系统,这次带来原创自研的Electron32+Vite5+Arco桌面版os管理系统项目Electron32Vue3OS

https://bbs.huaweicloud.com/blogs/433300

p-360截图20240903115024999.png

360截图20240903114426005.png

vue3-electron-os内置了macos/windows两种不同风格的桌面模板。

p2.gif

p2_1.gif

自研可拖拽式栅格布局模板引擎、支持动态json配置桌面菜单/Dock菜单。

360截图20240903113515114.png

框架版本信息

  • 技术框架:vite^5.4.1+vue^3.4.37+vue-router^4.4.3
  • 跨平台框架:electron^32.0.1
  • 组件库:@arco-design/web-vue^2.56.0 (字节前端vue3组件库)
  • 状态插件:pinia^2.2.2
  • 拖拽插件:sortablejs^1.15.2
  • 图表组件:echarts^5.5.1
  • markdown编辑器:md-editor-v3^4.19.2
  • 模拟数据:mockjs^1.1.0
  • 打包构建:electron-builder^24.13.3
  • electron+vite插件:vite-plugin-electron^0.28.7

p3-3.gif

项目结构

360截图20240903125225523.png

项目特点

  1. 基于electron32.x封装高性能、高复用多窗口管理器
  2. 支持macos/windows两种桌面模板风格
  3. 支持动态json配置桌面菜单和Dock菜单
  4. 自研栅格化拖拽布局引擎
  5. 支持自定义桌面多窗口主题壁纸、全场景高斯模糊UI质感
  6. 支持主窗口和新开窗口打开路由页面

p3-4.gif

目前electron32-vue3os已经同步到我的原创作品集。

https://gf.bilibili.com/item/detail/1106958011

electron配置主线程

/**
 * electron主线程配置
 * @author andy
 */

import { app, BrowserWindow } from 'electron'

import { WindowManager } from '../src/windows/index.js'

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

const createWindow = () => {
  let win = new WindowManager()
  win.create({isMajor: true})
  // 系统托盘管理
  win.trayManager()
  // 监听ipcMain事件
  win.ipcManager()
}

app.whenReady().then(() => {
  createWindow()

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

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

vue3-electron-os桌面布局

提供了macos/windows两种风格桌面布局。

<script setup>
  import { appState } from '@/pinia/modules/app'

  // 引入布局模板
  import MacosLayout from './template/macos.vue'
  import WindowsLayout from './template/windows.vue'

  const appstate = appState()

  const DeskLayout = {
    macos: MacosLayout,
    windows: WindowsLayout
  }
</script>

<template>
  <div class="vu__container" :style="{'--themeSkin': appstate.config.skin}">
    <component :is="DeskLayout[appstate.config.layout]" />
  </div>
</template>

<script setup>
  import Wintool from '@/layouts/components/wintool/index.vue'
  import Desk from '@/layouts/components/mac/desk.vue'
  import Dock from '@/layouts/components/mac/dock.vue'
</script>

<template>
  <div class="vu__layout flexbox flex-col">
    <div class="vu__layout-header">
      <Wintool />
    </div>
    <div class="vu__layout-body flex1 flexbox">
      <Desk />
    </div>
    <div class="vu__layout-footer">
      <Dock />
    </div>
  </div>
</template>

p-360截图20240903115024998.png

p-360截图20240903115046112.png

p-360截图20240903115442843.png

p-360截图20240903115628748.png

001360截图20240903081452222.png

003360截图20240903092456389.png

003360截图20240903092508325.png

003360截图20240903094108609.png

005360截图20240903095258041.png

006360截图20240903095437354.png

007360截图20240903104057354.png

008360截图20240903104716329.png

008360截图20240903104819347.png

009360截图20240903105146082.png

011360截图20240903105942194.png

012360截图20240903110149657.png

013360截图20240903110953196.png

014360截图20240903111108954.png

019360截图20240903111653048.png

021360截图20240903111750203.png

electron32-vite-os实现栅格桌面

桌面菜单配置参数

/**
  * label 图标标签
  * imgico 图标(本地或网络图片) 支持Arco Design内置图标或自定义iconfont字体图标
  * path 跳转路由地址
  * link 跳转外部链接
  * hideLabel 是否隐藏图标标签
  * background 自定义图标背景色
  * color 自定义图标颜色
  * size 栅格布局(16种) 1x1 1x2 1x3 1x4、2x1 2x2 2x3 2x4、3x1 3x2 3x3 3x4、4x1 4x2 4x3 4x4
  * onClick 点击图标回调函数
  * children 二级菜单配置  * isNewin 新窗口打开路由页面
  */

桌面菜单json配置示例

const deskMenu = [
  {
    uid: 'd137f210-507e-7e8e-1950-9deefac27e48',
    list: [
      {imgico: markRaw(Today), size: '2x2'},
      {label: '日历', imgico: markRaw(Calendar3x3), size: '3x3'},
      {label: 'Electron32', imgico: '/electron.svg', link: 'https://www.electronjs.org/'},
      // ...
    ]
  },
  {
    uid: 'g270f210-207e-6e8e-2650-9deefac27e48',
    list: [
      {label: 'Appstore', imgico: '/static/mac/appstore.png'},
      // ...
    ]
  },
  {
    uid: 't165f210-607e-4e8e-9950-9deefac27e48',
    list: [
      {label: 'Vue.js', imgico: '/vue.svg', link: 'https://vuejs.org/',},
      {label: 'Vite.js官方文档', imgico: '/vite.svg', link: 'https://vitejs.dev/',},
      // ...
    ]
  },
  {
    uid: 'u327f210-207e-1e8e-9950-9deefac27e48',
    list: [
      {label: 'Electron32', imgico: '/electron.svg', link: 'https://www.electronjs.org/'},
      {label: '首页', imgico: markRaw(IconHome), path: '/home', color: '#fff', isNewin: true},
      {label: '工作台', imgico: 'elec-icon-dotchart', path: '/home/dashboard', color: '#fff'},
      // ...
      {
        label: '用户中心',
        children: [
          {label: '主页', imgico: '/static/svg/ucenter.svg', path: '/setting'},
          {label: '用户管理', imgico: markRaw(IconUserGroup), path: '/user', color: '#fff'},
          // ...
        ]
      },
      {
        label: '设置',
        children: [
          // ...
        ]
      },
      {
        label: '收藏网址',
        children: [
          {label: 'Electron32', imgico: '/electron.svg', link: 'https://www.electronjs.org/'},
          {label: 'Vite.js', imgico: '/vite.svg',},
          // ...
        ]
      },
      {
        label: '公众号', imgico: '/static/qrimg.png', color: '#07c160',
        onClick: () => {
          Modal.info({
            // ...
          })
        }
      },
    ]
  }
]

p6.gif

作者:xiaoyan2017
链接:https://www.cnblogs.com/xiaoyan2017/p/18396212
来源:博客园
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。