diff --git a/electron.vite.config.mjs b/electron.vite.config.mjs
index fcc5633..3436c6a 100644
--- a/electron.vite.config.mjs
+++ b/electron.vite.config.mjs
@@ -17,6 +17,8 @@ export default defineConfig({
// '@': resolve('./src/renderer/src'),
// '@': path.resolve(__dirname, 'src/renderer/src'),
'@': path.join(__dirname, './src/renderer/src'),
+ '@root': path.join(__dirname, '.'),
+
}
},
server: {
diff --git a/jsconfig.json b/jsconfig.json
index 63f8c59..f611e59 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -4,7 +4,8 @@
"paths": {
"@/*":[
"src/renderer/src/*"
- ]
+ ],
+ "@root/*":["./*"]
}
},
"exclude": [
diff --git a/package.json b/package.json
index 62c23fe..4f1678f 100644
--- a/package.json
+++ b/package.json
@@ -37,6 +37,7 @@
},
"devDependencies": {
"@electron-toolkit/eslint-config": "^1.0.2",
+ "@electron/remote": "^2.1.2",
"@rushstack/eslint-patch": "^1.10.3",
"@vitejs/plugin-vue": "^5.0.5",
"@vue/eslint-config-prettier": "^9.0.0",
diff --git a/src/main/index.js b/src/main/index.js
index 73d3f5d..f50e06d 100644
--- a/src/main/index.js
+++ b/src/main/index.js
@@ -3,7 +3,10 @@ import { join } from 'path'
import { electronApp, optimizer, is } from '@electron-toolkit/utils'
import icon from '../../resources/icon.png?asset'
import File from './file'
-import Tool from './tool'
+import * as Tool from './tool'
+// 代理 electron/remote
+import remote from '@electron/remote/main' // 第一步:引入remote
+remote.initialize() // 第二步: 初始化remote
File({ app, shell, BrowserWindow, ipcMain })
@@ -50,7 +53,10 @@ function createMainWindow() {
webPreferences: {
preload: join(__dirname, '../preload/index.js'),
sandbox: false,
- nodeIntegration: true
+ // nodeIntegration: true,
+ nodeIntegration: true, // nodeApi调用
+ contextIsolation: false, // 沙箱取消
+ // webSecurity: false // 跨域关闭
}
})
@@ -68,6 +74,8 @@ function createMainWindow() {
} else {
mainWindow.loadFile(join(__dirname, '../renderer/index.html'))
}
+ // 第三步: 开启remote服务
+ remote.enable(mainWindow.webContents)
}
// 作业窗口相关-开发中
@@ -152,9 +160,9 @@ app.on('ready', () => {
if (!mainWindow) {
createMainWindow()
}
-
loginWindow.destroy()
loginWindow = null
+ Tool.setWin({mainWindow}) // 将主窗口传递到工具类中
})
// 打开登录窗口
ipcMain.on('openLoginWindow', () => {
@@ -171,7 +179,7 @@ app.on('ready', () => {
createWork(data)
})
// zdg: 创建工具窗口-如 悬浮球
- Tool()
+ Tool.init()
// 打开-登录窗口
createLoginWindow()
app.on('activate', function () {
diff --git a/src/main/tool.js b/src/main/tool.js
index f2f4312..27bea98 100644
--- a/src/main/tool.js
+++ b/src/main/tool.js
@@ -1,18 +1,23 @@
/**
* @description: electron 封装的工具函数
+ * 消息整理
+ * tool-sphere:create 创建-悬浮球-窗口
*/
import { app, shell, BrowserWindow, ipcMain } from 'electron'
import { is } from '@electron-toolkit/utils'
// const baseUrl = 'http://localhost:5173/#' // 开发环境使用
const baseUrl = process.env['ELECTRON_RENDERER_URL']+'/#' // 开发环境使用
-
-export default function() {
+// 所有窗口
+let allWindow = {}
+// 其他已有窗口 wins
+export function init() {
// 创建工具-悬浮球
- ipcMain.on('create-tool-sphere', async(e, data) => {
- console.log('测试xxxx', data)
+ ipcMain.on('tool-sphere:create', async(e, data) => {
+ console.log('xxx', allWindow)
+ // console.log('测试xxxx', data)
await createTools(data) // 执行逻辑
- e.reply('create-tool-sphere-reply', {code: 200, msg: 'success'}) // 返回结果
+ e.reply('tool-sphere:create-reply', {code: 200, msg: 'success'}) // 返回结果
})
}
/**
@@ -24,18 +29,22 @@ export default function() {
* @author: zdg
* @date 2021-07-05 14:07:01
*/
-function createTools({url, width = 800, height = 600, option={}}) {
+ export function createTools({url, width = 800, height = 600, option={}}) {
+ const { mainWindow } = allWindow||{} // 获取主窗口
const devUrl = `${baseUrl}${url}`
const buildUrl = `file://${__dirname}/index.html${url}`
const urlAll = is.dev ? devUrl : buildUrl
return new Promise((resolve) => {
let win = new BrowserWindow({
width, height,
- type: 'toolbar', //创建的窗口类型为工具栏窗口
- frame: false, //要创建无边框窗口
- resizable: false, //禁止窗口大小缩放
- transparent: true, //设置透明
- alwaysOnTop: true, //窗口是否总是显示在其他窗口之前
+ type: 'toolbar', // 创建的窗口类型为工具栏窗口
+ frame: false, // 要创建无边框窗口
+ resizable: false, // 禁止窗口大小缩放
+ transparent: true, // 设置透明
+ alwaysOnTop: true, // 窗口是否总是显示在其他窗口之前
+
+ parent: mainWindow, // 父窗口
+ autoClose: true, // 关闭窗口后自动关闭
webPreferences: {
nodeIntegration: true, // nodeApi调用
contextIsolation: false, // 沙箱取消
@@ -47,6 +56,8 @@ function createTools({url, width = 800, height = 600, option={}}) {
// url = 'https://www.baidu.com'
console.log(urlAll)
win.loadURL(urlAll)
+ // win.setFullScreen(true) // 设置窗口为全屏
+ win.setIgnoreMouseEvents(true) // 忽略鼠标事件|使窗口不可选中
win.once('ready-to-show', () => {
win.show()
resolve(win)
@@ -55,4 +66,25 @@ function createTools({url, width = 800, height = 600, option={}}) {
win = null
})
})
-}
\ No newline at end of file
+}
+// 保存窗口
+export function setWin(win = {}) {
+ if (win && Object.keys(win).length){
+ Object.keys(win).forEach(key => {
+ if (!allWindow[key]) { // 不存在就保存
+ allWindow[key] = win[key]
+ }
+ })
+ }
+}
+
+// 工具窗口-特殊区域恢复鼠标
+function toolMouse(toolWin) {
+ ipcMain.on('tool-mouse', (e, data) => {
+ const { id } = data
+ const win = allWindow[id]
+ if (win) {
+ win.setIgnoreMouseEvents(false)
+ }
+ })
+}
diff --git a/src/preload/index.js b/src/preload/index.js
index 75383f9..9da4869 100644
--- a/src/preload/index.js
+++ b/src/preload/index.js
@@ -1,16 +1,15 @@
-import { contextBridge, ipcRenderer } from 'electron'
+import { contextBridge } from 'electron'
import { electronAPI } from '@electron-toolkit/preload'
// Custom APIs for renderer
-const api = {}
-
+const api = {
+}
// Use `contextBridge` APIs to expose Electron APIs to
// renderer only if context isolation is enabled, otherwise
// just add to the DOM global.
if (process.contextIsolated) {
try {
contextBridge.exposeInMainWorld('electron', electronAPI)
- contextBridge.exposeInMainWorld('electronAPI')
contextBridge.exposeInMainWorld('api', api)
} catch (error) {
console.error(error)
diff --git a/src/renderer/src/assets/iconfont/iconfont.css b/src/renderer/src/assets/iconfont/iconfont.css
index 529bfc4..d4e9d4e 100644
--- a/src/renderer/src/assets/iconfont/iconfont.css
+++ b/src/renderer/src/assets/iconfont/iconfont.css
@@ -1,9 +1,9 @@
@font-face {
font-family: "iconfont"; /* Project id 2794390 */
- src: url('iconfont.woff2?t=1721179711733') format('woff2'),
- url('iconfont.woff?t=1721179711733') format('woff'),
- url('iconfont.ttf?t=1721179711733') format('truetype'),
- url('iconfont.svg?t=1721179711733#iconfont') format('svg');
+ src: url('iconfont.woff2?t=1721815727687') format('woff2'),
+ url('iconfont.woff?t=1721815727687') format('woff'),
+ url('iconfont.ttf?t=1721815727687') format('truetype'),
+ url('iconfont.svg?t=1721815727687#iconfont') format('svg');
}
.iconfont {
@@ -14,6 +14,54 @@
-moz-osx-font-smoothing: grayscale;
}
+.icon-xiazai9:before {
+ content: "\e60b";
+}
+
+.icon-hudong:before {
+ content: "\e60c";
+}
+
+.icon-xiangpica:before {
+ content: "\e6be";
+}
+
+.icon-gengduo:before {
+ content: "\e62d";
+}
+
+.icon-jujiao:before {
+ content: "\e615";
+}
+
+.icon-huabi:before {
+ content: "\e795";
+}
+
+.icon-mouse:before {
+ content: "\e603";
+}
+
+.icon-xiayiye:before {
+ content: "\e68b";
+}
+
+.icon-shangyiye:before {
+ content: "\e68e";
+}
+
+.icon-shuangye:before {
+ content: "\e64e";
+}
+
+.icon-danyemoban:before {
+ content: "\e859";
+}
+
+.icon-lingdang:before {
+ content: "\e613";
+}
+
.icon-yidongdaozu:before {
content: "\e67d";
}
diff --git a/src/renderer/src/assets/iconfont/iconfont.js b/src/renderer/src/assets/iconfont/iconfont.js
index 6058761..79b363e 100644
--- a/src/renderer/src/assets/iconfont/iconfont.js
+++ b/src/renderer/src/assets/iconfont/iconfont.js
@@ -1 +1 @@
-window._iconfont_svg_string_2794390='',function(l){var h=(h=document.getElementsByTagName("script"))[h.length-1],v=h.getAttribute("data-injectcss"),h=h.getAttribute("data-disable-injectsvg");if(!h){var c,a,t,z,p,i=function(h,v){v.parentNode.insertBefore(h,v)};if(v&&!l.__iconfont__svg__cssinject__){l.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(h){console&&console.log(h)}}c=function(){var h,v=document.createElement("div");v.innerHTML=l._iconfont_svg_string_2794390,(v=v.getElementsByTagName("svg")[0])&&(v.setAttribute("aria-hidden","true"),v.style.position="absolute",v.style.width=0,v.style.height=0,v.style.overflow="hidden",v=v,(h=document.body).firstChild?i(v,h.firstChild):h.appendChild(v))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),c()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(t=c,z=l.document,p=!1,d(),z.onreadystatechange=function(){"complete"==z.readyState&&(z.onreadystatechange=null,M())})}function M(){p||(p=!0,t())}function d(){try{z.documentElement.doScroll("left")}catch(h){return void setTimeout(d,50)}M()}}(window);
\ No newline at end of file
+window._iconfont_svg_string_2794390='',function(v){var h=(h=document.getElementsByTagName("script"))[h.length-1],l=h.getAttribute("data-injectcss"),h=h.getAttribute("data-disable-injectsvg");if(!h){var c,a,t,i,z,p=function(h,l){l.parentNode.insertBefore(h,l)};if(l&&!v.__iconfont__svg__cssinject__){v.__iconfont__svg__cssinject__=!0;try{document.write("")}catch(h){console&&console.log(h)}}c=function(){var h,l=document.createElement("div");l.innerHTML=v._iconfont_svg_string_2794390,(l=l.getElementsByTagName("svg")[0])&&(l.setAttribute("aria-hidden","true"),l.style.position="absolute",l.style.width=0,l.style.height=0,l.style.overflow="hidden",l=l,(h=document.body).firstChild?p(l,h.firstChild):h.appendChild(l))},document.addEventListener?~["complete","loaded","interactive"].indexOf(document.readyState)?setTimeout(c,0):(a=function(){document.removeEventListener("DOMContentLoaded",a,!1),c()},document.addEventListener("DOMContentLoaded",a,!1)):document.attachEvent&&(t=c,i=v.document,z=!1,d(),i.onreadystatechange=function(){"complete"==i.readyState&&(i.onreadystatechange=null,M())})}function M(){z||(z=!0,t())}function d(){try{i.documentElement.doScroll("left")}catch(h){return void setTimeout(d,50)}M()}}(window);
\ No newline at end of file
diff --git a/src/renderer/src/assets/iconfont/iconfont.json b/src/renderer/src/assets/iconfont/iconfont.json
index d630aec..5549155 100644
--- a/src/renderer/src/assets/iconfont/iconfont.json
+++ b/src/renderer/src/assets/iconfont/iconfont.json
@@ -5,6 +5,90 @@
"css_prefix_text": "icon-",
"description": "",
"glyphs": [
+ {
+ "icon_id": "720967",
+ "name": "更多",
+ "font_class": "xiazai9",
+ "unicode": "e60b",
+ "unicode_decimal": 58891
+ },
+ {
+ "icon_id": "3596229",
+ "name": "互动",
+ "font_class": "hudong",
+ "unicode": "e60c",
+ "unicode_decimal": 58892
+ },
+ {
+ "icon_id": "5233263",
+ "name": "橡皮擦",
+ "font_class": "xiangpica",
+ "unicode": "e6be",
+ "unicode_decimal": 59070
+ },
+ {
+ "icon_id": "5905756",
+ "name": "更多",
+ "font_class": "gengduo",
+ "unicode": "e62d",
+ "unicode_decimal": 58925
+ },
+ {
+ "icon_id": "11107711",
+ "name": "聚焦",
+ "font_class": "jujiao",
+ "unicode": "e615",
+ "unicode_decimal": 58901
+ },
+ {
+ "icon_id": "36969022",
+ "name": "画笔",
+ "font_class": "huabi",
+ "unicode": "e795",
+ "unicode_decimal": 59285
+ },
+ {
+ "icon_id": "30792830",
+ "name": "28D鼠标箭头-copy",
+ "font_class": "mouse",
+ "unicode": "e603",
+ "unicode_decimal": 58883
+ },
+ {
+ "icon_id": "694110",
+ "name": "下一页",
+ "font_class": "xiayiye",
+ "unicode": "e68b",
+ "unicode_decimal": 59019
+ },
+ {
+ "icon_id": "694115",
+ "name": "上一页",
+ "font_class": "shangyiye",
+ "unicode": "e68e",
+ "unicode_decimal": 59022
+ },
+ {
+ "icon_id": "930693",
+ "name": "双页",
+ "font_class": "shuangye",
+ "unicode": "e64e",
+ "unicode_decimal": 58958
+ },
+ {
+ "icon_id": "2144697",
+ "name": "单页模板",
+ "font_class": "danyemoban",
+ "unicode": "e859",
+ "unicode_decimal": 59481
+ },
+ {
+ "icon_id": "17990800",
+ "name": "铃铛",
+ "font_class": "lingdang",
+ "unicode": "e613",
+ "unicode_decimal": 58899
+ },
{
"icon_id": "1207918",
"name": "移动到组",
diff --git a/src/renderer/src/assets/iconfont/iconfont.svg b/src/renderer/src/assets/iconfont/iconfont.svg
index 69fe782..bdabebc 100644
--- a/src/renderer/src/assets/iconfont/iconfont.svg
+++ b/src/renderer/src/assets/iconfont/iconfont.svg
@@ -14,6 +14,30 @@
/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/renderer/src/assets/iconfont/iconfont.ttf b/src/renderer/src/assets/iconfont/iconfont.ttf
index f179db3..409d7e1 100644
Binary files a/src/renderer/src/assets/iconfont/iconfont.ttf and b/src/renderer/src/assets/iconfont/iconfont.ttf differ
diff --git a/src/renderer/src/assets/iconfont/iconfont.woff b/src/renderer/src/assets/iconfont/iconfont.woff
index 06b4847..607d8f9 100644
Binary files a/src/renderer/src/assets/iconfont/iconfont.woff and b/src/renderer/src/assets/iconfont/iconfont.woff differ
diff --git a/src/renderer/src/assets/iconfont/iconfont.woff2 b/src/renderer/src/assets/iconfont/iconfont.woff2
index 280df28..2acffdf 100644
Binary files a/src/renderer/src/assets/iconfont/iconfont.woff2 and b/src/renderer/src/assets/iconfont/iconfont.woff2 differ
diff --git a/src/renderer/src/plugins/fabric/event/clickEvent.js b/src/renderer/src/plugins/fabric/event/clickEvent.js
index 98c5816..790e47f 100644
--- a/src/renderer/src/plugins/fabric/event/clickEvent.js
+++ b/src/renderer/src/plugins/fabric/event/clickEvent.js
@@ -135,7 +135,6 @@ export class CanvasClickEvent {
// autoDrawData.resetLoadedSVG()
// this.mouseDownTime = new Date().getTime()
// }
- console.log('xxxx')
this.isDrawBasic = true
break
default:
@@ -211,7 +210,6 @@ export class CanvasClickEvent {
}
// zdg: 基础画笔 保存数据
if (this.isDrawBasic) FabricVue.history?.saveState()
- window.test = FabricVue
})
canvas?.on('mouse:dblclick', (e) => {
diff --git a/src/renderer/src/store/modules/draw.js b/src/renderer/src/store/modules/draw.js
index 3f85c56..fc28064 100644
--- a/src/renderer/src/store/modules/draw.js
+++ b/src/renderer/src/store/modules/draw.js
@@ -156,7 +156,7 @@ export const useDrawStore = defineStore(
{
state() {
return {
- drawWidth: 10,
+ drawWidth: 1,
drawColors: ['#000000'],
shadowWidth: 0,
shadowColor: '#000000',
diff --git a/src/renderer/src/utils/tool.js b/src/renderer/src/utils/tool.js
index 076c931..4132cf8 100644
--- a/src/renderer/src/utils/tool.js
+++ b/src/renderer/src/utils/tool.js
@@ -2,23 +2,43 @@
* @description: electron 封装的工具函数
*/
const { ipcRenderer } = window.electron || {}
-
+// const {getCurrentWindow,BrowserWindow, shell, app} = require('@electron/remote');
+import remote from '@electron/remote'
+const remote = require('@electron/remote')
+console.log('xxxxx ', remote)
/**
+ * @description 消息发送-nodejs 消息发送
* @form src/main/tool.js 来源
- * @description 创建工具
- * @param {*} key 消息头
- * create-tool-sphere 创建-悬浮球 | url:路由地址,width:窗口宽度,height:窗口高度,option:自定义选项
- * @param {*} data 参数
+ * @param {*} key 消息key
+ * tool-sphere:create 创建-悬浮球
+ * @param {*} data 参数
+ * url:路由地址,width:窗口宽度,height:窗口高度,option:自定义选项
+ * @returns
*/
-export function createTools(key, data) {
- const msgKey = `create-tool-${key}` // 消息头
- const msgKeyRes = `${msgKey}-reply` // 消息头-返回结果
+export function ipcMsgSend(key, data) {
return new Promise((resolve) => {
// 返回结果-监听
- ipcRenderer.once(msgKeyRes, async (e, res) => {
+ ipcRenderer.once(`${key}-reply`, (e, res) => {
resolve(res)
})
// 发送消息
- ipcRenderer.send(msgKey, data)
+ ipcRenderer.send(key, data)
})
+}
+
+export function test() {
+ // console.log(BrowserWindow)
+ // const win = new BrowserWindow({
+ // width: 400, height: 400
+ // })
+ // win.loadURL('https://www.baidu.com')
+ // win.show()
+ // win.on('close', () => {
+ // win = null
+ // })
+ // const url = app.getPath('userData')+'/123.pdf'
+ // console.log(app.getPath('userData'))
+ // shell.openExternal(url)
+ const win = getCurrentWindow()
+ console.log(win)
}
\ No newline at end of file
diff --git a/src/renderer/src/views/resource/index.vue b/src/renderer/src/views/resource/index.vue
index 2dd57e8..c46d0a3 100644
--- a/src/renderer/src/views/resource/index.vue
+++ b/src/renderer/src/views/resource/index.vue
@@ -16,6 +16,7 @@
+
\ No newline at end of file
diff --git a/src/renderer/src/views/tool/test.vue b/src/renderer/src/views/tool/test.vue
new file mode 100644
index 0000000..a0cd220
--- /dev/null
+++ b/src/renderer/src/views/tool/test.vue
@@ -0,0 +1,31 @@
+
+
+ xxxxx
+
+
+
+
+
+
+
\ No newline at end of file