tauri2.0+vite6+arco.design仿macos/windows桌面OS系统

举报
yxybox 发表于 2024/12/23 15:54:36 2024/12/23
480 0 1
【摘要】 Tauri2-Vue3OS原创跨平台Tauri2.0+Vite6+Pinia2+Arco-Design+Echarts+sortablejs桌面端OS管理平台系统解决方案。

自研Tauri2.1+Vite6.0+ArcoDesign桌面os模板|vue3+tauri2+pinia2客户端os管理系统

vue3-tauri2-winos基于跨平台框架tauri2.0+vue3+vite6+pinia2+arco-design仿MacOS/Windows桌面os管理平台。自研拖拽式栅格引擎、封装tauri2多窗口、自定义json配置桌面/Dock菜单

运用技术

  • 编辑器:vscode
  • 技术框架:vite^6.0.3+vue^3.5.13+vue-router^4.5.0
  • 跨平台框架:tauri^2.1.1
  • 组件库:@arco-design/web-vue^2.56.3 (字节桌面版vue3组件库)
  • 状态管理:pinia^2.3.0
  • 拖拽插件:sortablejs^1.15.6
  • 滑动分屏插件:swiper^11.1.15
  • 图表组件:echarts^5.5.1
  • markdown编辑器:md-editor-v3^5.1.1
  • 模拟数据:mockjs^1.1.0

p2.gif

p4.gif

项目框架目录

使用最新版tauri2.x跨平台框架结合vite6.x搭建项目框架,采用vue3 setup语法开发。

360截图20241219171029819.png

tauri2-vue3-os桌面os项目已经发布到我的原创作品集。

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

p1.gif

p3.gif

002360截图20241219141657242.png

360截图20241219162458542.png

360截图20241219162614145.png

360截图20241219163031294.png

tauri2-vue3os桌面布局结构

<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 flexbox" :style="{'--themeSkin': appstate.config.skin}">
    <component :is="DeskLayout[appstate.config.layout]" />
  </div>
</template>

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

  import Titlebar from '@/layouts/components/titlebar/index.vue'
  import Desk from '@/layouts/components/mac/desk.vue'
  import Dock from '@/layouts/components/mac/dock.vue'

  const appstate = appState()
</script>

<template>
  <div class="vu__layout flexbox flex-col">
    <div class="vu__layout-header">
      <Titlebar />
    </div>
    <div class="vu__layout-body flex1 flexbox">
      <Desk />
    </div>
    <div class="vu__layout-footer">
      <Dock v-if="appstate.config.dockEnable" />
    </div>
  </div>
</template>

360截图20241219164506025.png

002360截图20241219142048884.png

003360截图20241219142543901.png

003360截图20241219142621523.png

004360截图20241219142828638.png

004360截图20241219144009376.png

008360截图20241219151504897.png

009360截图20241219152536009.png

009360截图20241219152747992.png

010360截图20241219153140935.png

011360截图20241219153433287.png

011360截图20241219153455569.png

011360截图20241219153547775.png

016360截图20241219155101909.png

016360截图20241219155124317.png

017360截图20241219155249260.png

017360截图20241219155309877.png

018360截图20241219155607193.png

019360截图20241219155649517.png

020360截图20241219160040413.png

tauri2+vue3桌面栅格系统

桌面菜单配置项

/**
 * ===== Desk桌面菜单配置项 =====
 * label 图标标题
 * imgico 图标(本地或网络图片) 支持Arco Design内置图标或自定义iconfont图标
 * path 跳转路由页面
 * link 跳转外部链接
 * hideLabel 是否隐藏图标标题
 * filter 是否禁用拖拽
 * background 自定义图标背景色
 * color 自定义图标颜色
 * size 栅格磁贴布局 1x1 ... 12x12
 * padding 内边距
 * onClick 点击图标回调函数
 * isNewin 新窗口打开路由页面
 * children 二级菜单
 */

tauri2+vue3自定义底部Dock栏

dock菜单配置项

/**
 * ===== Dock菜单配置项 =====
 * label 图标tooltip提示
 * imgico 图标(本地或网络图片) 支持Arco Design内置图标或自定义iconfont图标
 * path 跳转路由页面
 * link 跳转外部链接
 * filter 是否禁用拖拽
 * color 自定义图标颜色
 * onClick 点击图标回调函数
 * isNewin 新窗口打开路由页面
 * children 二级菜单
 */

tauri2+rust自定义系统托盘

/**
 * 自定义托盘图标
 */

use tauri::{
  tray::{MouseButton, TrayIconBuilder, TrayIconEvent}, Emitter, Manager, Runtime
};

pub fn tray_create<R: Runtime>(app: &tauri::AppHandle<R>) -> tauri::Result<()> {
  let _ = TrayIconBuilder::with_id("tray")
    .tooltip("TAURI2-ViteOS")
    .icon(app.default_window_icon().unwrap().clone())
    .on_tray_icon_event(|tray, event| match event {
      TrayIconEvent::Click {
        id: _,
        position,
        rect: _,
        button,
        button_state: _,
      } => match button {
        MouseButton::Left {} => {
          let windows = tray.app_handle().webview_windows();
          for (key, value) in windows {
            println!("点击左键: {}", key);
            if key == "main-login" || key == "main" {
              value.show().unwrap();
              value.unminimize().unwrap();
              value.set_focus().unwrap();
            }
          }
        }
        MouseButton::Right {} => {
          println!("点击右键");
          tray.app_handle().emit("tray_rightclick", position).unwrap();
        }
        _ => {}
      },
      /* TrayIconEvent::Enter {
        id: _,
        position,
        rect: _,
      } => {
        println!("鼠标滑过托盘");
        tray.app_handle().emit("tray_mouseenter", position).unwrap();
      }
      TrayIconEvent::Leave {
        id: _,
        position,
        rect: _,
      } => {
        println!("鼠标离开托盘");
        tray.app_handle().emit("tray_mouseleave", position).unwrap();
      } */
      _ => {}
    })
    .build(app);
  Ok(())
}

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

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

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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