feat:开始跳转笔记,跳转首页
This commit is contained in:
parent
9febf49d37
commit
9fda560ba3
26
main.js
26
main.js
|
@ -1,13 +1,7 @@
|
||||||
// npm start
|
// npm start
|
||||||
const { app,Menu, BrowserWindow , ipcMain } = require('electron')
|
const { app,Menu, BrowserWindow } = require('electron')
|
||||||
const path = require('path')
|
const path = require('path')
|
||||||
const fs = require('fs')
|
|
||||||
const https = require('https')
|
|
||||||
const {menuRebuild} = require('./src/comment/TopMenu.js')
|
const {menuRebuild} = require('./src/comment/TopMenu.js')
|
||||||
const { fileHelper } = require('./src/utils/File/fileHelper');
|
|
||||||
|
|
||||||
const iconName = path.join(__dirname, 'iconForDragAndDrop.png')
|
|
||||||
|
|
||||||
const createWindow = () => {
|
const createWindow = () => {
|
||||||
// Create the browser window.
|
// Create the browser window.
|
||||||
const win = new BrowserWindow({
|
const win = new BrowserWindow({
|
||||||
|
@ -15,8 +9,8 @@ const createWindow = () => {
|
||||||
height: 600,
|
height: 600,
|
||||||
webPreferences: {
|
webPreferences: {
|
||||||
nodeIntegration:true,
|
nodeIntegration:true,
|
||||||
|
// 启用后nodeIntegration会无效
|
||||||
contextIsolation:false,
|
contextIsolation:false,
|
||||||
|
|
||||||
preload: path.join(__dirname, 'preload.js')
|
preload: path.join(__dirname, 'preload.js')
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -25,28 +19,12 @@ const createWindow = () => {
|
||||||
win.loadURL('http://localhost:3000')
|
win.loadURL('http://localhost:3000')
|
||||||
// 打开开发工具
|
// 打开开发工具
|
||||||
win.webContents.openDevTools()
|
win.webContents.openDevTools()
|
||||||
console.log('fileHelper',fileHelper)
|
|
||||||
Menu.setApplicationMenu(Menu.buildFromTemplate(menuRebuild(win)))
|
Menu.setApplicationMenu(Menu.buildFromTemplate(menuRebuild(win)))
|
||||||
}
|
}
|
||||||
|
|
||||||
const ipcMainOn = () => {
|
|
||||||
// ipcMain.handle('ping', () => 'pong')
|
|
||||||
ipcMain.on('open-dir-result', (_event, value) => {
|
|
||||||
console.log(value)
|
|
||||||
})
|
|
||||||
ipcMain.on('ondragstart', (event, filePath) => {
|
|
||||||
console.log(filePath)
|
|
||||||
event.sender.startDrag({
|
|
||||||
file: path.join(__dirname, filePath),
|
|
||||||
icon: iconName
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
// 这段程序将会在 Electron 结束初始化和创建浏览器窗口的时候调用
|
// 这段程序将会在 Electron 结束初始化和创建浏览器窗口的时候调用
|
||||||
// 部分 API 在 ready 事件触发后才能使用。
|
// 部分 API 在 ready 事件触发后才能使用。
|
||||||
app.whenReady().then(() => {
|
app.whenReady().then(() => {
|
||||||
ipcMainOn()
|
|
||||||
createWindow()
|
createWindow()
|
||||||
// 在 macOS 系统内, 如果没有已开启的应用窗口
|
// 在 macOS 系统内, 如果没有已开启的应用窗口
|
||||||
// 点击托盘图标时通常会重新创建一个新窗口
|
// 点击托盘图标时通常会重新创建一个新窗口
|
||||||
|
|
12
preload.js
12
preload.js
|
@ -1,10 +1,8 @@
|
||||||
// 预加载脚本 在上下文隔离渲染器进程中导入 Node.js 和 Electron 模块的概念
|
// 预加载脚本 在上下文隔离渲染器进程中导入 Node.js 和 Electron 模块的概念
|
||||||
// 所有的 Node.js API接口 都可以在 preload 进程中被调用.
|
// 所有的 Node.js API接口 都可以在 preload 进程中被调用.
|
||||||
// 它拥有与Chrome扩展一样的沙盒。
|
// 它拥有与Chrome扩展一样的沙盒。
|
||||||
const { contextBridge, ipcRenderer } = require('electron/renderer')
|
const { ipcRenderer } = require('electron/renderer')
|
||||||
contextBridge.exposeInMainWorld('electronAPI', {
|
ipcRenderer.on('redirectUrl',(event,args) => {
|
||||||
startDrag : (fileName) => ipcRenderer.send('ondragstart', fileName),
|
console.log('event',event)
|
||||||
openDirectory : (callback) =>
|
console.log('args',args)
|
||||||
ipcRenderer.on('openDirectory', (_event, value) => callback(value)),
|
})
|
||||||
openDirectoryResult:(value) => ipcRenderer.send('open-dir-result', value)
|
|
||||||
})
|
|
||||||
|
|
13
src/App.js
13
src/App.js
|
@ -1,9 +1,20 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import routes from './routes'
|
import routes from './routes'
|
||||||
import {Outlet, useRoutes} from 'react-router-dom'
|
import {Outlet, useNavigate, useRoutes} from 'react-router-dom'
|
||||||
|
import useIpcRenderer from '../src/utils/useIpcRenderer'
|
||||||
function App() {
|
function App() {
|
||||||
|
|
||||||
|
let navigateFunction = useNavigate();
|
||||||
|
function nativeTo(path){
|
||||||
|
navigateFunction(path)
|
||||||
|
}
|
||||||
|
const redirectUrl =(event,args)=> {
|
||||||
|
nativeTo(args)
|
||||||
|
}
|
||||||
|
|
||||||
console.log("routes",routes)
|
console.log("routes",routes)
|
||||||
const element = useRoutes(routes)
|
const element = useRoutes(routes)
|
||||||
|
useIpcRenderer({'redirectUrl':redirectUrl})
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
{/* 注册路由 */}
|
{/* 注册路由 */}
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
// https://nodejs.org/docs/latest-v16.x/api/fs.html
|
|
||||||
import { readdir } from 'node:fs/promises';
|
|
||||||
try {
|
|
||||||
const files = await readdir("/home/shixiaohua");
|
|
||||||
for (const file of files)
|
|
||||||
console.log(file);
|
|
||||||
} catch (err) {
|
|
||||||
console.error(err);
|
|
||||||
}
|
|
|
@ -54,6 +54,11 @@ exports.menuRebuild=(mainWindow)=> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
{label:'全部应用',
|
||||||
|
click: () => {
|
||||||
|
mainWindow.webContents.send('redirectUrl', '/GateWay')
|
||||||
|
}
|
||||||
|
},
|
||||||
isMac ? { role: 'close' } : { role: 'quit' },
|
isMac ? { role: 'close' } : { role: 'quit' },
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
// html中使用的js代码 之后用react替换
|
|
||||||
document.getElementById('drag1').ondragstart = (event) => {
|
|
||||||
event.preventDefault()
|
|
||||||
window.electronAPI.startDrag('drag-and-drop-1.md')
|
|
||||||
}
|
|
||||||
|
|
||||||
document.getElementById('drag2').ondragstart = (event) => {
|
|
||||||
event.preventDefault()
|
|
||||||
window.electronAPI.startDrag('drag-and-drop-2.md')
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
const openDir=document.getElementById('openDir');
|
|
||||||
window.electronAPI.openDirectory ((value) => {
|
|
||||||
openDir.innerText = JSON.stringify(value)
|
|
||||||
window.electronAPI.openDirectoryResult('ok')
|
|
||||||
})
|
|
|
@ -1,43 +1,30 @@
|
||||||
import React, { useState } from 'react';
|
import React, {useState} from 'react';
|
||||||
import { Col, Row, Slider } from 'antd';
|
import {Col, Row, Slider} from 'antd';
|
||||||
import { NavLink } from 'react-router-dom'
|
import {NavLink} from 'react-router-dom'
|
||||||
import './index.less'
|
import './index.less'
|
||||||
// const gutters = {};
|
|
||||||
// const vgutters = {};
|
|
||||||
// const colCounts = {};
|
|
||||||
// [8, 16, 24, 32, 40, 48].forEach((value, i) => {
|
|
||||||
// gutters[i] = value;
|
|
||||||
// });
|
|
||||||
// [8, 16, 24, 32, 40, 48].forEach((value, i) => {
|
|
||||||
// vgutters[i] = value;
|
|
||||||
// });
|
|
||||||
// [2, 3, 4, 6, 8, 12].forEach((value, i) => {
|
|
||||||
// colCounts[i] = value;
|
|
||||||
// });
|
|
||||||
const GateWay = () => {
|
const GateWay = () => {
|
||||||
|
|
||||||
const cols = [];
|
const cols = [];
|
||||||
const colCount = 3;
|
const colCount = 3;
|
||||||
let colCode = '';
|
|
||||||
cols.push(
|
cols.push(
|
||||||
<Col key={'bj'} span={24 / colCount}>
|
<Col key={'bj'} span={24 / colCount}>
|
||||||
<div><NavLink to='/note'>笔记</NavLink></div>
|
<div><NavLink to='/note'>笔记</NavLink></div>
|
||||||
</Col>,
|
</Col>,
|
||||||
);
|
);
|
||||||
cols.push(
|
cols.push(
|
||||||
<Col key={'todo'} span={24 / colCount}>
|
<Col key={'todo'} span={24 / colCount}>
|
||||||
<div>TODO</div>
|
<div>TODO</div>
|
||||||
</Col>,
|
</Col>,
|
||||||
);
|
);
|
||||||
cols.push(
|
cols.push(
|
||||||
<Col key={'dlt'} span={24 / colCount}>
|
<Col key={'dlt'} span={24 / colCount}>
|
||||||
<div><NavLink to='/show/sync'>大乐透</NavLink></div>
|
<div><NavLink to='/show/sync'>大乐透</NavLink></div>
|
||||||
</Col>,
|
</Col>,
|
||||||
|
);
|
||||||
|
return (
|
||||||
|
<Row id='components-grid-demo-playground' gutter={[8, 8]}>
|
||||||
|
{cols}
|
||||||
|
</Row>
|
||||||
);
|
);
|
||||||
return (
|
|
||||||
<Row id='components-grid-demo-playground' gutter={[8, 8]}>
|
|
||||||
{cols}
|
|
||||||
</Row>
|
|
||||||
);
|
|
||||||
};
|
};
|
||||||
export default GateWay;
|
export default GateWay;
|
|
@ -0,0 +1,23 @@
|
||||||
|
import { createSlice } from '@reduxjs/toolkit'
|
||||||
|
|
||||||
|
export const redirectUrlSlice = createSlice({
|
||||||
|
name: 'redirectUrl',
|
||||||
|
initialState: {
|
||||||
|
data: []
|
||||||
|
},
|
||||||
|
reducers: {
|
||||||
|
redirectUrlSync: (state, action) => {
|
||||||
|
console.log("redirectUrl:redirectUrlSync", state, action)
|
||||||
|
console.log(state)
|
||||||
|
console.log(action)
|
||||||
|
if(action.payload.length>0){
|
||||||
|
// 路径跳转
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
export const { redirectUrlSync } = redirectUrlSlice.actions
|
||||||
|
|
||||||
|
export default redirectUrlSlice.reducer
|
|
@ -1,9 +1,11 @@
|
||||||
import { configureStore } from '@reduxjs/toolkit'
|
import { configureStore } from '@reduxjs/toolkit'
|
||||||
import historyReducer from './historyRecord_reducer'
|
import historyReducer from './historyRecord_reducer'
|
||||||
|
import redirectReducer from './redirectUrl_reducer'
|
||||||
// 用于支持异步函数
|
// 用于支持异步函数
|
||||||
// import thunk from 'redux-thunk'
|
// import thunk from 'redux-thunk'
|
||||||
export default configureStore({
|
export default configureStore({
|
||||||
reducer: {
|
reducer: {
|
||||||
historyRecord:historyReducer
|
historyRecord:historyReducer,
|
||||||
|
redirectUrl:redirectReducer
|
||||||
}
|
}
|
||||||
})
|
})
|
|
@ -33,32 +33,20 @@ export default [
|
||||||
{
|
{
|
||||||
path:'Hlexical',
|
path:'Hlexical',
|
||||||
element:<Hlexical/>
|
element:<Hlexical/>
|
||||||
},
|
}
|
||||||
{
|
|
||||||
path:'sync',
|
|
||||||
element:<SyncContext/>,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
path:'probability',
|
|
||||||
element:<EchartsPage/>
|
|
||||||
}
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path:'/login',
|
path:'/login',
|
||||||
element:<Login/>,
|
element:<Login/>,
|
||||||
},
|
},
|
||||||
// {
|
|
||||||
// path:'/',
|
|
||||||
// element:<Navigate to="/show/sync"/>
|
|
||||||
// }
|
|
||||||
{
|
{
|
||||||
path:'/GateWay',
|
path:'/GateWay',
|
||||||
element:<GateWay/>,
|
element:<GateWay/>,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path:'/',
|
path:'/',
|
||||||
element:<Navigate to="/gateway"/>
|
element:<Navigate to="/note"/>
|
||||||
},
|
},
|
||||||
|
|
||||||
]
|
]
|
|
@ -0,0 +1,18 @@
|
||||||
|
import { useEffect } from 'react'
|
||||||
|
const { ipcRenderer } = window.require('electron')
|
||||||
|
|
||||||
|
|
||||||
|
const useIpcRenderer = (keyCallbackMap) => {
|
||||||
|
useEffect(() => {
|
||||||
|
Object.keys(keyCallbackMap).forEach(key => {
|
||||||
|
ipcRenderer.on(key, keyCallbackMap[key])
|
||||||
|
})
|
||||||
|
return () => {
|
||||||
|
Object.keys(keyCallbackMap).forEach(key => {
|
||||||
|
ipcRenderer.removeListener(key, keyCallbackMap[key])
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export default useIpcRenderer
|
Loading…
Reference in New Issue