electron + vite + vue3问题

electron + vite + vue3
 参考网址: https://evite.netlify.app/
    安装步骤
    npx degit alex8088/electron-vite-boilerplate electron-app
    cd electron-app
    npm install
    npm run dev
 
electron-app项目,目录结构说明
    build ==》打包操作,例如:打包后的应用图标,.env环境变量的配置等等
    resources ==〉资料目录,例如:放入图片,有点类似于vue-cli中的publick目录
    src
        |main      ==>操作主进程内容,例如:创建窗口等
        |preload   ==>预加载,本身渲染进程是不可以使用electron等api的,通过preload预加载就可以使用了。
        |renderer  ==>操作渲染进程,就是应用中的内容。
 
    electron.vite.config.ts  ==》这个和vue中的vite.config.js || vue.config.js类似
 
 安装路由
             安装路由:npm install vue-router -S
    新建:router/index.js
    router/index.js写入内容
 
    import { createRouter, createWebHashHistory } from "vue-router";
    export default createRouter({
      history: createWebHashHistory(),//hash模式
      routes:[{ path: "/", component: Login }]//路由配置规则数组
    })
 
    main.ts中use一下router
    use(router)
 
 下载pinia
    官网:https://pinia.web3doc.top/
    下载:npm install pinia -S
    main.ts引入
     import { createPinia } from 'pinia'
    app.use(createPinia())
 
    新建目录:store/index.js
    import { defineStore } from 'pinia'
    export const useStore = defineStore('storeId', {
     state: () => {
      return {
       counter: 0,
       }
      },
      getters:{},
      actions:{}
    })
 
electron.vite.config.ts配置
  export default defineConfig({
    main: {
      ...
    },
    preload: {
      ...
    },
    renderer: {
      resolve: {
        alias: {
          ...
        }
      },
      server:{
        "proxy":{
          "/api":{
            target:'http://uat.crm.xuexiluxian.cn',
            changeOrigin:true,
            rewrite: path =>  path.replace(/^\/api/,'')
          }
        }
      },
      plugins: [
        ...
      ]
    }
  })
  
    打开调适
    窗口.webContents.openDevTools();
 
    渲染进程 向 主进程通信
    渲染进程:
    electron.ipcRenderer.invoke('名称',{ 传值 } )
    主进程:
    import { app, shell, BrowserWindow , ipcMain } from 'electron'
    ipcMain.handle('名称',(event,渲染进程向主进程传递的参数)=>{
 
    })
 
  窗口大小位置设置
    1、大小   
    new BrowserWindow({
        width: 500,
        height: 500,
        minHeight:500,
        minWidth:500,
        maxHeight:500,
        maxWidth:500,
        show: false,
        resizable:false, ==> 窗口大小是否可调整。 默认值为 true。
    })
 
    2、位置   
    //初始化设置
    new BrowserWindow({
        x:10,
        y:10
    })
    //有计算的设置
    mainWindow.setBounds({
        y:winHeight-250
    })
 
    3、screen
      检索有关屏幕大小、显示器、光标位置等的信息。
      获取屏幕宽度高度等: screen.getPrimaryDisplay()
    
    4、窗口置顶 
      alwaysOnTop:true,//置顶窗口
    5、透明窗口
      transparent:true,//窗口透明
    6、锁定、解锁窗口
      参考链接:https://www.xuexiluxian.cn/blog/detail/207128a5387c43a198f69669728ac71e
    7、解决阴影问题
      hasShadow:false,//去除阴影
 问题:
  
    1、原生状态:有标题和关闭、缩小、放大
    2、无标题,有:关闭、缩小、放大
      2.1 隐藏标题
        titleBarStyle:'hidden'
    3、无标题,无关闭、缩小、放大
      3.1 无边框窗口
        frame:false
      3.2 无关闭、缩小、放大 需要 ==> 自定义
    4、解决窗口无法移动
      4.1 渲染进程添加样式来解决
        1. 在渲染进程的dom中,添加样式:-webkit-app-region: drag;
        2. 给不需要拖拽的元素,取消-webkit-app-region: no-drag;事件才可以生效
      4.2 渲染进程向主进程通信==》主进程设置窗口的位置
        1. 渲染进程添加事件mousedown,使用拖拽的方式来记录值
        2. 渲染进程把值,传递给主进程
        3. 主进程设置窗口的位置: mainWindow.setPosition(res.appX,res.appY);
 
 
 
 
posted @ 2024-11-18 16:50  新恒  阅读(7)  评论(0编辑  收藏  举报