提交 a5b147f0 authored 作者: 蔡芬's avatar 蔡芬

获取

上级 2c08361f
{
"name": "feidao",
"name": "menudock",
"version": "1.0.0",
"private": true,
"description": "菜单平台",
......@@ -68,6 +68,7 @@
"electron": "^13.6.9",
"electron-chromedriver": "^20.0.0",
"electron-devtools-installer": "^3.1.0",
"electron-store": "^8.1.0",
"eslint": "^6.7.2",
"eslint-plugin-prettier": "^3.3.1",
"eslint-plugin-vue": "^6.2.2",
......
import { ipcMain, dialog, Menu, BrowserWindow } from 'electron'
import { saveJson } from '@/libs/utils/backfunction.js';
const { exec, execSync } = require('child_process');
class IpcEvents {
create (appManager) {
this.appManager = appManager
this.windowManager = appManager.windowManager;
this.win = this.windowManager.mainWindow.win;
this.store = this.windowManager.mainWindow.store;
/* 翻译器函数
Translator function */
......@@ -48,7 +50,18 @@ class IpcEvents {
ipcMain.on("setMainWindow0", (e, data) => {
console.log('data',data)
this.windowManager.mainWindow.win.setPosition((data.width-600)/2,(data.height-80))
this.windowManager.mainWindow.win.setPosition((data.width-1000)/2,(data.height-40))
})
ipcMain.on("getApps", (e, data) => {
let apps = this.store.get("apps");
console.log(1)
console.log(apps)
this.windowManager.mainWindow.win.webContents.send("appsList", apps)
})
ipcMain.on("openApp", (e, data) => {
exec(data.execCommand);
})
}
......
......@@ -3,7 +3,7 @@ import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
const fs = require('fs');
const path = require('path')
const Store = require('electron-store');
const { exec } = require('child_process');
const { exec, execSync } = require('child_process');
const store = new Store({
defaults: {
......@@ -16,6 +16,7 @@ class MainWindow {
/* win代表electron窗口实例
win is this electron window instance */
this.win = win
this.store = store;
}
initBrowserPage () {
......@@ -43,12 +44,12 @@ class MainWindow {
}
const win = new BrowserWindow({
width: 600,
height: 80,
width: 1000,
height: 40,
// fullscreen:true, //是否全屏显示
// fullscreenable:true,
maxWidth: 600,
maxHeight: 80,
maxWidth: 1000,
maxHeight: 40,
resizable: false,
x:400,
y:500,
......@@ -189,14 +190,13 @@ class MainWindow {
// };
// });
}
updateAppsList() {
console.log('linux')
exec('ls /usr/share/applications/*.desktop', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
const apps = stdout.trim().split('\n').map(file => {
const content = fs.readFileSync(file, 'utf8');
const lines = content.trim().split('\n');
......@@ -214,9 +214,49 @@ class MainWindow {
});
store.set('apps', apps);
// console.log(apps)
this.win.webContents.send("appsList", newarr)
// updateContextMenu();
});
}
updateAppsList_mac() {
// ls /usr/share/applications/*.desktop
exec('ls /System/Applications/*.app', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
let temp = stdout.replace(/Contents/g, '');
temp=temp.replace(/[:]/g, '');
if(!temp || temp == undefined) return
const apps = temp.trim().split('\n').map((file,index) => {
if(!file || file.indexOf('.app') == -1 || typeof file != 'string') return {};
let fileArr = file.split('/');
let fileName = fileArr[fileArr.length-1];
let fileNameShort = fileName.split('.')[0];
let icon = '';
try {
var res = execSync(`ls /System/Applications/'${fileName}'/Contents/Resources/*.icns`
, { encoding: 'utf8' });
} catch (e) {
console.log("Errors:", e);
}
icon = res && res.trim().split('\n') || '';
icon = icon[icon.length-1];
let execCommand = `open '${file}'`
return {
name: fileNameShort,
icon,
execCommand,
};
});
let newarr = apps.filter(v => !!v.name)
store.set('apps', newarr);
// store.get('apps')
this.win.webContents.send("appsList", newarr)
});
}
}
export default MainWindow
<template>
<div id="app" ref="appcontainer" class="container">
<img src="~@/assets/logo@3x.png" alt="" class="img1">
<img src="~@/assets/word@2x.png" alt="" class="img">
<div class="left_main">
<img src="~@/assets/WechatIMG17.jpeg" alt="" class="left_img">
<span class="left_name">许昌市第十六中学</span>
</div>
<div class="group1_wrap first">
<div v-for="(appItem, appIndex) in group1"
v-show="appIndex < 14"
class="app_item"
@click="tapApp(appItem)">
<img :src="appItem.icon" alt="" class="img">
<span class="app_name">{{ appItem.name }}</span>
</div>
</div>
<div class="group1_wrap">
<div v-for="(appItem, appIndex) in group2"
v-show="appIndex < 14"
class="app_item"
@click="tapApp(appItem)">
<img :src="appItem.icon" alt="" class="img">
<span class="app_name">{{ appItem.name }}</span>
</div>
</div>
<div class="group1_wrap">
<div v-for="(appItem, appIndex) in group3"
v-show="appIndex < 14"
class="app_item"
@click="tapApp(appItem)">
<img :src="appItem.icon" alt="" class="img">
<span class="app_name">{{ appItem.name }}</span>
</div>
</div>
<div class="group1_wrap">
<div v-for="(appItem, appIndex) in group4"
v-show="appIndex < 14"
class="app_item"
@click="tapApp(appItem)">
<img :src="appItem.icon" alt="" class="img">
<span class="app_name">{{ appItem.name }}</span>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
appList:[],
group1:[],
group2:[],
group3:[],
group4:[],
};
},
created() {
......@@ -19,9 +61,24 @@ export default {
console.log('宽高',width,height);
let ipcRenderer = this.$electron && this.$electron.ipcRenderer || {};
ipcRenderer.send("setMainWindow0",{width,height});
ipcRenderer.send("getApps")
ipcRenderer.on("appsList", (event, list) => {
console.log('获取到app列表', list)
this.appList = list;
if(list) {
if(list.length > 8) this.group1 = list.slice(0,9);
if(list.length > 10) this.group2 = list.slice(9,11);
if(list.length > 12) this.group3 = list.slice(11,13);
if(list.length > 14) this.group4 = list.slice(13,15);
}
});
},
methods: {
tapApp(item) {
console.log(item)
let ipcRenderer = this.$electron && this.$electron.ipcRenderer || {};
ipcRenderer.send("openApp",item);
}
},
}
</script>
......@@ -37,16 +94,80 @@ body {
display: flex;
justify-content: space-evenly;
align-items: center;
flex-wrap: wrap;
height: 100%;
border-radius: 20px;
overflow: hidden;
background-color: hsl(0, 0%, 25%);
.img1 {
height: 80px;
// background-color: hsl(0, 0%, 25%);
background-color: #fff;
.group1_wrap {
border-radius: 6px;
margin-left: 4px;
background-color: hsl(0, 0%, 25%);
display: flex;
align-items: center;
justify-content: center;
flex: 1;
height: 40px;
&.first {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
margin-left: 0;
}
}
.app_item {
margin: 0 4px;
flex-shrink: 0;
width: 36px;
height: 36px;
border-radius: 10px;
border: 1px solid rgba(255, 255, 255, .1);
display: flex;
align-items: center;
justify-content: center;
font-size: 10px;
overflow: hidden;
text-align: left;
cursor: pointer;
flex-wrap: wrap;
}
.img {
height: 60px;
flex-shrink: 0;
height: 36px;
// width: 36px;
}
.app_name {
font-size: 14px;
color: #fff;
}
}
.left_main {
position: relative;
display: flex;
align-items: center;
height: 40px;
flex-shrink: 0;
padding: 0 20px;
background-color: hsl(0, 0%, 25%);
&::after {
position: absolute;
content: "";
right: 10px;
border-right: 1px solid #e4e4e4;
width: 1px;
height: 100%;
}
}
.left_img {
width: 35px;
height: 35px;
}
.left_name {
padding-left: 4px;
font-size: 20px;
font-weight: 500;
color: #fff;
}
</style>
......@@ -2312,6 +2312,13 @@ ajv-errors@^1.0.0:
resolved "https://registry.npmmirror.com/ajv-errors/download/ajv-errors-1.0.1.tgz"
integrity sha1-81mGrOuRr63sQQL72FAUlQzvpk0=
ajv-formats@^2.1.1:
version "2.1.1"
resolved "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520"
integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==
dependencies:
ajv "^8.0.0"
ajv-keywords@^3.1.0, ajv-keywords@^3.4.1, ajv-keywords@^3.5.2:
version "3.5.2"
resolved "https://registry.npmmirror.com/ajv-keywords/download/ajv-keywords-3.5.2.tgz"
......@@ -2327,6 +2334,16 @@ ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.0, ajv@^6.12.3, ajv@^6.12.4, ajv
json-schema-traverse "^0.4.1"
uri-js "^4.2.2"
ajv@^8.0.0, ajv@^8.6.3:
version "8.12.0"
resolved "https://registry.npmmirror.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
dependencies:
fast-deep-equal "^3.1.1"
json-schema-traverse "^1.0.0"
require-from-string "^2.0.2"
uri-js "^4.2.2"
alphanum-sort@^1.0.0:
version "1.0.2"
resolved "https://registry.npmmirror.com/alphanum-sort/download/alphanum-sort-1.0.2.tgz"
......@@ -2692,6 +2709,11 @@ atob@^2.1.2:
resolved "https://registry.npmmirror.com/atob/download/atob-2.1.2.tgz"
integrity sha1-bZUX654DDSQ2ZmZR6GvZ9vE1M8k=
atomically@^1.7.0:
version "1.7.0"
resolved "https://registry.npmmirror.com/atomically/-/atomically-1.7.0.tgz#c07a0458432ea6dbc9a3506fffa424b48bccaafe"
integrity sha512-Xcz9l0z7y9yQ9rdDaxlmaI4uJHf/T8g9hOEzJcsEqX2SjCj4J20uK7+ldkDHMbpJDK76wF7xEIgxc/vSlsfw5w==
autoprefixer@^9.8.6:
version "9.8.8"
resolved "https://registry.npmmirror.com/autoprefixer/download/autoprefixer-9.8.8.tgz?cache=0&sync_timestamp=1635421704162&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fautoprefixer%2Fdownload%2Fautoprefixer-9.8.8.tgz"
......@@ -3913,6 +3935,22 @@ condense-newlines@^0.2.1:
is-whitespace "^0.3.0"
kind-of "^3.0.2"
conf@^10.2.0:
version "10.2.0"
resolved "https://registry.npmmirror.com/conf/-/conf-10.2.0.tgz#838e757be963f1a2386dfe048a98f8f69f7b55d6"
integrity sha512-8fLl9F04EJqjSqH+QjITQfJF8BrOVaYr1jewVgSRAEWePfxT0sku4w2hrGQ60BC/TNLGQ2pgxNlTbWQmMPFvXg==
dependencies:
ajv "^8.6.3"
ajv-formats "^2.1.1"
atomically "^1.7.0"
debounce-fn "^4.0.0"
dot-prop "^6.0.1"
env-paths "^2.2.1"
json-schema-typed "^7.0.3"
onetime "^5.1.2"
pkg-up "^3.1.0"
semver "^7.3.5"
config-chain@^1.1.11, config-chain@^1.1.12:
version "1.1.13"
resolved "https://registry.npmmirror.com/config-chain/download/config-chain-1.1.13.tgz"
......@@ -4413,6 +4451,13 @@ de-indent@^1.0.2:
resolved "https://registry.npmmirror.com/de-indent/download/de-indent-1.0.2.tgz"
integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=
debounce-fn@^4.0.0:
version "4.0.0"
resolved "https://registry.npmmirror.com/debounce-fn/-/debounce-fn-4.0.0.tgz#ed76d206d8a50e60de0dd66d494d82835ffe61c7"
integrity sha512-8pYCQiL9Xdcg0UPSD3d+0KMlOjp+KGU5EPwYddgzQ7DATsg4fuUDjQtsYLmWjnk2obnNHgV3vE2Y4jejSOJVBQ==
dependencies:
mimic-fn "^3.0.0"
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9:
version "2.6.9"
resolved "https://registry.npmmirror.com/debug/download/debug-2.6.9.tgz"
......@@ -4842,6 +4887,13 @@ dot-prop@^5.2.0:
dependencies:
is-obj "^2.0.0"
dot-prop@^6.0.1:
version "6.0.1"
resolved "https://registry.npmmirror.com/dot-prop/-/dot-prop-6.0.1.tgz#fc26b3cf142b9e59b74dbd39ed66ce620c681083"
integrity sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==
dependencies:
is-obj "^2.0.0"
dotenv-expand@^5.1.0:
version "5.1.0"
resolved "https://registry.npmmirror.com/dotenv-expand/download/dotenv-expand-5.1.0.tgz"
......@@ -5013,6 +5065,14 @@ electron-publish@23.6.0:
lazy-val "^1.0.5"
mime "^2.5.2"
electron-store@^8.1.0:
version "8.1.0"
resolved "https://registry.npmmirror.com/electron-store/-/electron-store-8.1.0.tgz#46a398f2bd9aa83c4a9daaae28380e2b3b9c7597"
integrity sha512-2clHg/juMjOH0GT9cQ6qtmIvK183B39ZXR0bUoPwKwYHJsEF3quqyDzMFUAu+0OP8ijmN2CbPRAelhNbWUbzwA==
dependencies:
conf "^10.2.0"
type-fest "^2.17.0"
electron-to-chromium@^1.3.896:
version "1.3.901"
resolved "https://registry.npmmirror.com/electron-to-chromium/download/electron-to-chromium-1.3.901.tgz?cache=0&sync_timestamp=1637175454711&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Felectron-to-chromium%2Fdownload%2Felectron-to-chromium-1.3.901.tgz"
......@@ -5103,7 +5163,7 @@ entities@^2.0.0:
resolved "https://registry.npmmirror.com/entities/download/entities-2.2.0.tgz"
integrity sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU=
env-paths@^2.2.0:
env-paths@^2.2.0, env-paths@^2.2.1:
version "2.2.1"
resolved "https://registry.npmmirror.com/env-paths/download/env-paths-2.2.1.tgz"
integrity sha1-QgOZ1BbOH76bwKB8Yvpo1n/Q+PI=
......@@ -7633,6 +7693,16 @@ json-schema-traverse@^0.4.1:
resolved "https://registry.npmmirror.com/json-schema-traverse/download/json-schema-traverse-0.4.1.tgz"
integrity sha1-afaofZUTq4u4/mO9sJecRI5oRmA=
json-schema-traverse@^1.0.0:
version "1.0.0"
resolved "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
json-schema-typed@^7.0.3:
version "7.0.3"
resolved "https://registry.npmmirror.com/json-schema-typed/-/json-schema-typed-7.0.3.tgz#23ff481b8b4eebcd2ca123b4fa0409e66469a2d9"
integrity sha512-7DE8mpG+/fVw+dTpjbxnx47TaMnDfOI1jwft9g1VybltZCduyRQPJPvc+zzKY9WPHxhPWczyFuYa6I8Mw4iU5A==
json-schema@0.2.3:
version "0.2.3"
resolved "https://registry.npmmirror.com/json-schema/download/json-schema-0.2.3.tgz?cache=0&sync_timestamp=1636423462103&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fjson-schema%2Fdownload%2Fjson-schema-0.2.3.tgz"
......@@ -8346,6 +8416,11 @@ mimic-fn@^2.1.0:
resolved "https://registry.npmmirror.com/mimic-fn/download/mimic-fn-2.1.0.tgz"
integrity sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=
mimic-fn@^3.0.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-3.1.0.tgz#65755145bbf3e36954b949c16450427451d5ca74"
integrity sha512-Ysbi9uYW9hFyfrThdDEQuykN4Ey6BuwPD2kpI5ES/nFTDn/98yxYNLZJcgUAKPT/mcrLLKaGzJR9YVxJrIdASQ==
mimic-response@^1.0.0, mimic-response@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/mimic-response/download/mimic-response-1.0.1.tgz"
......@@ -9508,6 +9583,13 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0:
dependencies:
find-up "^4.0.0"
pkg-up@^3.1.0:
version "3.1.0"
resolved "https://registry.npmmirror.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5"
integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==
dependencies:
find-up "^3.0.0"
plist@^3.0.1:
version "3.0.4"
resolved "https://registry.npmmirror.com/plist/download/plist-3.0.4.tgz"
......@@ -10460,6 +10542,11 @@ require-directory@^2.1.1:
resolved "https://registry.npmmirror.com/require-directory/download/require-directory-2.1.1.tgz"
integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=
require-from-string@^2.0.2:
version "2.0.2"
resolved "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
require-main-filename@^1.0.1:
version "1.0.1"
resolved "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-1.0.1.tgz"
......@@ -11979,6 +12066,11 @@ type-fest@^0.8.1:
resolved "https://registry.npmmirror.com/type-fest/download/type-fest-0.8.1.tgz?cache=0&sync_timestamp=1637150020795&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftype-fest%2Fdownload%2Ftype-fest-0.8.1.tgz"
integrity sha1-CeJJ696FHTseSNJ8EFREZn8XuD0=
type-fest@^2.17.0:
version "2.19.0"
resolved "https://registry.npmmirror.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b"
integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==
type-is@~1.6.17, type-is@~1.6.18:
version "1.6.18"
resolved "https://registry.npmmirror.com/type-is/download/type-is-1.6.18.tgz"
......
Markdown 格式
0% 或
您添加了 0 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论