提交 0894299e authored 作者: caicai's avatar caicai

加载

上级 fcd7392d
/**
* 通过读取应用程序的.desktop文件来获取应用程序的图标URL。在Linux中,.desktop文件包含了应用程序的元数据信息,包括应用程序的名称、描述、图标等。
您可以使用以下命令来查看应用程序的.desktop文件:
```
cat /usr/share/applications/<application-name>.desktop
```
其中,`<application-name>`是应用程序的名称。
在.desktop文件中,您可以找到`Icon`字段,该字段指定了应用程序的图标文件名。您可以使用以下命令来获取应用程序的图标URL:
```
echo $(grep -i "^Icon=" /usr/share/applications/<application-name>.desktop | cut -d'=' -f2 | sed 's/\s//g') | xargs -I{} xdg-icon-resource lookup --size 48 {}
```。
其中,`48`是您想要获取的图标大小。如果应用程序没有指定图标,则此方法将无法获取图标URL。
在Linux中,应用程序图标的大小通常有以下几个:
- 16x16
- 22x22
- 24x24
- 32x32
- 48x48
- 64x64
- 128x128
- 256x256
*/
const fs = require('fs');
const path = require('path');
// 读取 SVG 文件并将其转换为 Base64 编码字符串
const svgFilePath = path.join(__dirname, 'path', 'to', 'file.svg');
const svgData = fs.readFileSync(svgFilePath, 'utf8');
const base64Data = Buffer.from(svgData).toString('base64');
// 在 Electron 应用程序中使用 Base64 编码字符串
const img = new Image();
img.src = `data:image/svg+xml;base64,${base64Data}`;
document.body.appendChild(img);
const fs = require('fs');
// 读取 .desktop 文件
const desktopFile = '/usr/share/applications/firefox.desktop';
const desktopData = fs.readFileSync(desktopFile, 'utf-8');
// 提取 Exec 字段中的命令
const execRegExp = /^Exec=(.*)$/m;
const execMatch = desktopData.match(execRegExp);
if (execMatch) {
const command = execMatch[1];
// 使用 exec 函数执行命令
const { exec } = require('child_process');
exec(command, (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.error(`stderr: ${stderr}`);
});
}
const { execSync } = require('child_process');
// 读取 .desktop 文件
const desktopFile1 = '/usr/share/applications/example.desktop';
const desktopContent = execSync(`cat ${desktopFile1}`).toString();
// 使用 file 命令获取文件类型和编码信息
const fileOutput = execSync(`file -i ${desktopFile1}`).toString();
const encodingMatch = fileOutput.match(/charset=(.*)/);
// 获取编码类型
const encoding = encodingMatch ? encodingMatch[1] : 'utf-8';
// 将 .desktop 文件内容从指定编码转换为 UTF-8
const desktopContentUtf8 = iconv.decode(Buffer.from(desktopContent), encoding).toString('utf-8');
...@@ -16,19 +16,19 @@ ...@@ -16,19 +16,19 @@
<!-- built files will be auto injected --> <!-- built files will be auto injected -->
</body> </body>
<script> <script>
// 电脑分辨率为1920*1680 ,1920/60=32 // // 电脑分辨率为1920*1680 ,1920/60=32
// 16px => 16/32 = 0.5rem // // 16px => 16/32 = 0.5rem
// 电脑分辨率为1440, 1440/144 = 10 // // 电脑分辨率为1440, 1440/144 = 10
// 260px => 260/10 = 26rem // // 260px => 260/10 = 26rem
function placeholderPic(){ // function placeholderPic(){
document.documentElement.style.fontSize=document.documentElement.offsetWidth/144+"px"; //同上 // document.documentElement.style.fontSize=document.documentElement.offsetWidth/144+"px"; //同上
// console.log('document.documentElement.style.fontSize',document.documentElement.style.fontSize); // // console.log('document.documentElement.style.fontSize',document.documentElement.style.fontSize);
} // }
placeholderPic(); // placeholderPic();
window.onresize=function(){ //窗口改变时再次执行一次函数即可 // window.onresize=function(){ //窗口改变时再次执行一次函数即可
placeholderPic(); // placeholderPic();
} // }
</script> </script>
</html> </html>
src/assets/U_1.png

7.4 KB | W: | H:

src/assets/U_1.png

1.8 KB | W: | H:

src/assets/U_1.png
src/assets/U_1.png
src/assets/U_1.png
src/assets/U_1.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/U_2.png

6.9 KB | W: | H:

src/assets/U_2.png

1.8 KB | W: | H:

src/assets/U_2.png
src/assets/U_2.png
src/assets/U_2.png
src/assets/U_2.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/U_3.png

6.9 KB | W: | H:

src/assets/U_3.png

1.7 KB | W: | H:

src/assets/U_3.png
src/assets/U_3.png
src/assets/U_3.png
src/assets/U_3.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/U_4.png

6.9 KB | W: | H:

src/assets/U_4.png

1.7 KB | W: | H:

src/assets/U_4.png
src/assets/U_4.png
src/assets/U_4.png
src/assets/U_4.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/addCategory.png

1.8 KB | W: | H:

src/assets/addCategory.png

1.1 KB | W: | H:

src/assets/addCategory.png
src/assets/addCategory.png
src/assets/addCategory.png
src/assets/addCategory.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/alisis.png

5.8 KB | W: | H:

src/assets/alisis.png

1.6 KB | W: | H:

src/assets/alisis.png
src/assets/alisis.png
src/assets/alisis.png
src/assets/alisis.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/alisis_a.png

5.4 KB | W: | H:

src/assets/alisis_a.png

1.7 KB | W: | H:

src/assets/alisis_a.png
src/assets/alisis_a.png
src/assets/alisis_a.png
src/assets/alisis_a.png
  • 2-up
  • Swipe
  • Onion skin
This source diff could not be displayed because it is too large. You can view the blob instead.
差异被折叠。
src/assets/edit_icon.png

404 Bytes | W: | H:

src/assets/edit_icon.png

311 Bytes | W: | H:

src/assets/edit_icon.png
src/assets/edit_icon.png
src/assets/edit_icon.png
src/assets/edit_icon.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/logo@3x.png

3.2 KB | W: | H:

src/assets/logo@3x.png

992 Bytes | W: | H:

src/assets/logo@3x.png
src/assets/logo@3x.png
src/assets/logo@3x.png
src/assets/logo@3x.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/1.png

3.5 KB | W: | H:

src/assets/school/1.png

1.3 KB | W: | H:

src/assets/school/1.png
src/assets/school/1.png
src/assets/school/1.png
src/assets/school/1.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/2.png

4.3 KB | W: | H:

src/assets/school/2.png

2.2 KB | W: | H:

src/assets/school/2.png
src/assets/school/2.png
src/assets/school/2.png
src/assets/school/2.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/3.png

1.4 KB | W: | H:

src/assets/school/3.png

684 Bytes | W: | H:

src/assets/school/3.png
src/assets/school/3.png
src/assets/school/3.png
src/assets/school/3.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/4.png

2.7 KB | W: | H:

src/assets/school/4.png

1.0 KB | W: | H:

src/assets/school/4.png
src/assets/school/4.png
src/assets/school/4.png
src/assets/school/4.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/5.png

2.3 KB | W: | H:

src/assets/school/5.png

945 Bytes | W: | H:

src/assets/school/5.png
src/assets/school/5.png
src/assets/school/5.png
src/assets/school/5.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/6.png

2.3 KB | W: | H:

src/assets/school/6.png

991 Bytes | W: | H:

src/assets/school/6.png
src/assets/school/6.png
src/assets/school/6.png
src/assets/school/6.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/7.png

3.6 KB | W: | H:

src/assets/school/7.png

1.3 KB | W: | H:

src/assets/school/7.png
src/assets/school/7.png
src/assets/school/7.png
src/assets/school/7.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/beikeziyuan.png

1.0 KB | W: | H:

src/assets/school/beikeziyuan.png

444 Bytes | W: | H:

src/assets/school/beikeziyuan.png
src/assets/school/beikeziyuan.png
src/assets/school/beikeziyuan.png
src/assets/school/beikeziyuan.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/jiaowuguanli.png

866 Bytes | W: | H:

src/assets/school/jiaowuguanli.png

422 Bytes | W: | H:

src/assets/school/jiaowuguanli.png
src/assets/school/jiaowuguanli.png
src/assets/school/jiaowuguanli.png
src/assets/school/jiaowuguanli.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/jiaoxuegongju.png

656 Bytes | W: | H:

src/assets/school/jiaoxuegongju.png

341 Bytes | W: | H:

src/assets/school/jiaoxuegongju.png
src/assets/school/jiaoxuegongju.png
src/assets/school/jiaoxuegongju.png
src/assets/school/jiaoxuegongju.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/school/kehoulianxi.png

807 Bytes | W: | H:

src/assets/school/kehoulianxi.png

359 Bytes | W: | H:

src/assets/school/kehoulianxi.png
src/assets/school/kehoulianxi.png
src/assets/school/kehoulianxi.png
src/assets/school/kehoulianxi.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/search.png

3.4 KB | W: | H:

src/assets/search.png

1.4 KB | W: | H:

src/assets/search.png
src/assets/search.png
src/assets/search.png
src/assets/search.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/search_a.png

4.2 KB | W: | H:

src/assets/search_a.png

1.4 KB | W: | H:

src/assets/search_a.png
src/assets/search_a.png
src/assets/search_a.png
src/assets/search_a.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/setting.png

6.9 KB | W: | H:

src/assets/setting.png

2.1 KB | W: | H:

src/assets/setting.png
src/assets/setting.png
src/assets/setting.png
src/assets/setting.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/setting_a.png

6.7 KB | W: | H:

src/assets/setting_a.png

2.1 KB | W: | H:

src/assets/setting_a.png
src/assets/setting_a.png
src/assets/setting_a.png
src/assets/setting_a.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/statr.png

248 Bytes | W: | H:

src/assets/statr.png

209 Bytes | W: | H:

src/assets/statr.png
src/assets/statr.png
src/assets/statr.png
src/assets/statr.png
  • 2-up
  • Swipe
  • Onion skin
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#229;&#133;&#168;&#233;&#131;&#168;&#229;&#186;&#148;&#231;&#148;&#168;-&#230;&#156;&#170;&#233;&#128;&#137;&#228;&#184;&#173;">
<path id="Rectangle 91" d="M14.25 9V13.25H10C7.65279 13.25 5.75 11.3472 5.75 9C5.75 6.65279 7.65279 4.75 10 4.75C12.3472 4.75 14.25 6.65279 14.25 9Z" stroke="#333333" stroke-width="1.5"/>
<path id="Rectangle 93" d="M14.25 20V15.75H10C7.65279 15.75 5.75 17.6528 5.75 20C5.75 22.3472 7.65279 24.25 10 24.25C12.3472 24.25 14.25 22.3472 14.25 20Z" stroke="#333333" stroke-width="1.5"/>
<path id="Rectangle 92" d="M17.75 9V13.25H22C24.3472 13.25 26.25 11.3472 26.25 9C26.25 6.65279 24.3472 4.75 22 4.75C19.6528 4.75 17.75 6.65279 17.75 9Z" stroke="#333333" stroke-width="1.5"/>
<path id="Rectangle 94" d="M17.75 20V15.75H22C24.3472 15.75 26.25 17.6528 26.25 20C26.25 22.3472 24.3472 24.25 22 24.25C19.6528 24.25 17.75 22.3472 17.75 20Z" stroke="#333333" stroke-width="1.5"/>
</g>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#229;&#133;&#168;&#233;&#131;&#168;&#229;&#186;&#148;&#231;&#148;&#168;-&#233;&#128;&#137;&#228;&#184;&#173;">
<path id="Rectangle 91" d="M14.25 9V13.25H10C7.65279 13.25 5.75 11.3472 5.75 9C5.75 6.65279 7.65279 4.75 10 4.75C12.3472 4.75 14.25 6.65279 14.25 9Z" stroke="#399DF9" stroke-width="1.5"/>
<path id="Rectangle 93" d="M14.25 20V15.75H10C7.65279 15.75 5.75 17.6528 5.75 20C5.75 22.3472 7.65279 24.25 10 24.25C12.3472 24.25 14.25 22.3472 14.25 20Z" stroke="#399DF9" stroke-width="1.5"/>
<path id="Rectangle 92" d="M17.75 9V13.25H22C24.3472 13.25 26.25 11.3472 26.25 9C26.25 6.65279 24.3472 4.75 22 4.75C19.6528 4.75 17.75 6.65279 17.75 9Z" stroke="#399DF9" stroke-width="1.5"/>
<path id="Rectangle 94" d="M17.75 20V15.75H22C24.3472 15.75 26.25 17.6528 26.25 20C26.25 22.3472 24.3472 24.25 22 24.25C19.6528 24.25 17.75 22.3472 17.75 20Z" stroke="#399DF9" stroke-width="1.5"/>
</g>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#229;&#173;&#166;&#230;&#160;&#161;&#229;&#186;&#148;&#231;&#148;&#168;-&#230;&#156;&#170;&#233;&#128;&#137;&#228;&#184;&#173;">
<path id="Rectangle 96" d="M22 14V21.4917C22 22.3431 21.461 23.1012 20.6568 23.3808L17.9705 24.3149C16.6943 24.7586 15.3057 24.7586 14.0295 24.3149L11.3432 23.3808C10.539 23.1012 10 22.3431 10 21.4917V14" stroke="#333333" stroke-width="1.5"/>
<rect id="Rectangle 95" x="-0.00808896" y="0.735627" width="12.1242" height="12.4153" rx="1.25" transform="matrix(0.866025 0.5 -0.876811 0.480836 16.8451 5.38596)" stroke="#333333" stroke-width="1.5"/>
<rect id="Rectangle 97" x="6.375" y="12.375" width="0.75" height="7.25" rx="0.375" fill="#399DF9" stroke="#333333" stroke-width="0.75"/>
</g>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#229;&#173;&#166;&#230;&#160;&#161;&#229;&#186;&#148;&#231;&#148;&#168;-&#233;&#128;&#137;&#228;&#184;&#173;">
<path id="Rectangle 96" d="M22 14V21.4917C22 22.3431 21.461 23.1012 20.6568 23.3808L17.9705 24.3149C16.6943 24.7586 15.3057 24.7586 14.0295 24.3149L11.3432 23.3808C10.539 23.1012 10 22.3431 10 21.4917V14" stroke="#399DF9" stroke-width="1.5"/>
<rect id="Rectangle 95" x="-0.00808896" y="0.735627" width="12.1242" height="12.4153" rx="1.25" transform="matrix(0.866025 0.5 -0.876811 0.480836 16.8451 5.38596)" stroke="#399DF9" stroke-width="1.5"/>
<rect id="Rectangle 97" x="6.375" y="12.375" width="0.75" height="7.25" rx="0.375" fill="#399DF9" stroke="#399DF9" stroke-width="0.75"/>
</g>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#230;&#136;&#145;&#231;&#154;&#132;&#229;&#186;&#148;&#231;&#148;&#168;-&#230;&#156;&#170;&#233;&#128;&#137;&#228;&#184;&#173;">
<circle id="Ellipse 93" cx="15" cy="11" r="5.25" stroke="#333333" stroke-width="1.5"/>
<path id="Ellipse 94" d="M24 25C23.3413 20.4718 19.5627 17 15 17C10.4373 17 6.65871 20.4718 6 25" stroke="#333333" stroke-width="1.5"/>
</g>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#230;&#136;&#145;&#231;&#154;&#132;&#229;&#186;&#148;&#231;&#148;&#168;-&#233;&#128;&#137;&#228;&#184;&#173;">
<circle id="Ellipse 93" cx="15" cy="11" r="5.25" stroke="#399DF9" stroke-width="1.5"/>
<path id="Ellipse 94" d="M24 25C23.3413 20.4718 19.5627 17 15 17C10.4373 17 6.65871 20.4718 6 25" stroke="#399DF9" stroke-width="1.5"/>
</g>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#230;&#144;&#156;&#231;&#180;&#162;&#230;&#150;&#135;&#230;&#161;&#163;-&#230;&#156;&#170;&#233;&#128;&#137;&#228;&#184;&#173;">
<path id="Ellipse 80" d="M14.4824 20.0985C14.0045 20.1977 13.5087 20.25 13 20.25C8.99594 20.25 5.75 17.0041 5.75 13C5.75 8.99594 8.99594 5.75 13 5.75C17.0041 5.75 20.25 8.99594 20.25 13C20.25 15.9439 18.4953 18.4795 15.9717 19.6152L14.4824 20.0985Z" stroke="#333333" stroke-width="1.5" stroke-linejoin="round"/>
<rect id="Rectangle 101" x="21.3577" y="20" width="7.2" height="1.92" rx="0.96" transform="rotate(45 21.3577 20)" fill="#333333"/>
</g>
</svg>
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="&#230;&#144;&#156;&#231;&#180;&#162;&#230;&#150;&#135;&#230;&#161;&#163;-&#233;&#128;&#137;&#228;&#184;&#173;">
<path id="Ellipse 80" d="M14.4824 20.0985C14.0045 20.1977 13.5087 20.25 13 20.25C8.99594 20.25 5.75 17.0041 5.75 13C5.75 8.99594 8.99594 5.75 13 5.75C17.0041 5.75 20.25 8.99594 20.25 13C20.25 15.9439 18.4953 18.4795 15.9717 19.6152L14.4824 20.0985Z" stroke="#399DF9" stroke-width="1.5" stroke-linejoin="round"/>
<rect id="Rectangle 101" x="21.3577" y="20.5657" width="6.4" height="1.12" rx="0.56" transform="rotate(45 21.3577 20.5657)" fill="#399DF9" stroke="#399DF9" stroke-width="0.8"/>
</g>
</svg>
src/assets/user.png

3.4 KB | W: | H:

src/assets/user.png

1.4 KB | W: | H:

src/assets/user.png
src/assets/user.png
src/assets/user.png
src/assets/user.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/user_a.png

4.2 KB | W: | H:

src/assets/user_a.png

1.4 KB | W: | H:

src/assets/user_a.png
src/assets/user_a.png
src/assets/user_a.png
src/assets/user_a.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/xuchanzhongxue.png

40.1 KB | W: | H:

src/assets/xuchanzhongxue.png

10.7 KB | W: | H:

src/assets/xuchanzhongxue.png
src/assets/xuchanzhongxue.png
src/assets/xuchanzhongxue.png
src/assets/xuchanzhongxue.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/xueshimao.png

4.4 KB | W: | H:

src/assets/xueshimao.png

1.6 KB | W: | H:

src/assets/xueshimao.png
src/assets/xueshimao.png
src/assets/xueshimao.png
src/assets/xueshimao.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/xueshimao_a.png

5.1 KB | W: | H:

src/assets/xueshimao_a.png

1.6 KB | W: | H:

src/assets/xueshimao_a.png
src/assets/xueshimao_a.png
src/assets/xueshimao_a.png
src/assets/xueshimao_a.png
  • 2-up
  • Swipe
  • Onion skin
src/assets/yunpingtai.png

14.8 KB | W: | H:

src/assets/yunpingtai.png

3.8 KB | W: | H:

src/assets/yunpingtai.png
src/assets/yunpingtai.png
src/assets/yunpingtai.png
src/assets/yunpingtai.png
  • 2-up
  • Swipe
  • Onion skin
...@@ -6,14 +6,14 @@ class AppEvents { ...@@ -6,14 +6,14 @@ class AppEvents {
this.windowManager = appManager.windowManager this.windowManager = appManager.windowManager
app.on('activate', () => { app.on('activate', () => {
console.log('\n app activate!', new Date().getTime() ) // console.log('\n app activate!', new Date().getTime() )
if (this.windowManager.mainWindow.win === null) { if (this.windowManager.mainWindow.win === null) {
console.log('Main window is null!') console.log('Main window is null!')
} }
}) })
app.on('browser-window-blur', () => { app.on('browser-window-blur', () => {
console.log('\n app browser-window-blur!', new Date().getTime() ) // console.log('\n app browser-window-blur!', new Date().getTime() )
}) })
...@@ -22,24 +22,21 @@ class AppEvents { ...@@ -22,24 +22,21 @@ class AppEvents {
}) })
app.on('continue-activit', () => { app.on('continue-activit', () => {
console.log('\n app continue-activit!', new Date().getTime() ) // console.log('\n app continue-activit!', new Date().getTime() )
}) })
app.on('did-become-active', () => { app.on('did-become-active', () => {
console.log('\n app did-become-active!', new Date().getTime() ) // console.log('\n app did-become-active!', new Date().getTime() )
}) })
/* 在Electron加载前需要进行初始化 /* 在Electron加载前需要进行初始化
Before electron app is ready, we should initial */ Before electron app is ready, we should initial */
app.on('ready', async () => { app.on('ready', async () => {
try { try {
console.log('getPrimaryDisplay') // console.log('getPrimaryDisplay')
console.log(screen.getPrimaryDisplay()) // console.log(screen.getPrimaryDisplay())
setTimeout(()=>{ appManager.initApp()
appManager.initApp()
},100);
} catch (error) { } catch (error) {
console.log(990)
console.error(error) console.error(error)
} }
}) })
......
...@@ -60,7 +60,7 @@ class IpcEvents { ...@@ -60,7 +60,7 @@ class IpcEvents {
label: '简约模式', label: '简约模式',
str:'modeJianYue', str:'modeJianYue',
click: () => { click: () => {
console.log('modeJianYue') // console.log('modeJianYue')
event.sender.send('context-menu-command', 'modeJianYue'); event.sender.send('context-menu-command', 'modeJianYue');
this.store.set("currentMode", "modeJianYue"); this.store.set("currentMode", "modeJianYue");
this.windowManager.mainWindow.win.setBounds({ this.windowManager.mainWindow.win.setBounds({
...@@ -77,7 +77,7 @@ class IpcEvents { ...@@ -77,7 +77,7 @@ class IpcEvents {
label: '极简模式', label: '极简模式',
str:'modeJiJian', str:'modeJiJian',
click: () => { click: () => {
console.log('modeJiJian',displayWH.width,displayWH.height) // console.log('modeJiJian',displayWH.width,displayWH.height)
event.sender.send('context-menu-command', 'modeJiJian'); event.sender.send('context-menu-command', 'modeJiJian');
this.store.set("currentMode", "modeJiJian"); this.store.set("currentMode", "modeJiJian");
this.windowManager.mainWindow.win.setBounds({ this.windowManager.mainWindow.win.setBounds({
...@@ -93,7 +93,7 @@ class IpcEvents { ...@@ -93,7 +93,7 @@ class IpcEvents {
label: 'U学模式', label: 'U学模式',
str:'modeUXue', str:'modeUXue',
click: () => { click: () => {
console.log('modeUXue') // console.log('modeUXue')
event.sender.send('context-menu-command', 'modeUXue'); event.sender.send('context-menu-command', 'modeUXue');
this.windowManager.mainWindow.win.setBounds({ this.windowManager.mainWindow.win.setBounds({
// x: ( Number(displayWH.width) - 419)/2, // x: ( Number(displayWH.width) - 419)/2,
...@@ -163,8 +163,8 @@ class IpcEvents { ...@@ -163,8 +163,8 @@ class IpcEvents {
let resIndex = appList.findIndex(v => v.name == addFile.shortName); let resIndex = appList.findIndex(v => v.name == addFile.shortName);
if(targetIndex>=0) { if(targetIndex>=0) {
console.log('替换掉', targetIndex, appList[targetIndex]) // console.log('替换掉', targetIndex, appList[targetIndex])
console.log('新增', resIndex,addFiles[0]) // console.log('新增', resIndex,addFiles[0])
// addFile.execCommand = `open '${addFile.path}'` // addFile.execCommand = `open '${addFile.path}'`
// 同个软件无需移动 // 同个软件无需移动
...@@ -226,15 +226,15 @@ class IpcEvents { ...@@ -226,15 +226,15 @@ class IpcEvents {
// mac-获取前台应用程序 // mac-获取前台应用程序
ipcMain.on("getfrontApp", (e, data) => { ipcMain.on("getfrontApp", (e, data) => {
console.log('获取前台应用程序') // console.log('获取前台应用程序')
exec('osascript -e \'tell application "System Events" to get name of application processes whose frontmost is true\'', (err, stdout, stderr) => { exec('osascript -e \'tell application "System Events" to get name of application processes whose frontmost is true\'', (err, stdout, stderr) => {
if (err) { if (err) {
console.error(err); console.error(err);
return; return;
} }
console.log(stdout.trim()); // console.log(stdout.trim());
if( stdout.trim() == app.getName()) { if( stdout.trim() == app.getName()) {
console.log("点击了当前") // console.log("点击了当前")
e.sender.send("sendMsg", "点击了当前"); e.sender.send("sendMsg", "点击了当前");
} }
}); });
......
...@@ -11,12 +11,21 @@ class WindowManager { ...@@ -11,12 +11,21 @@ class WindowManager {
createAllWindows () { createAllWindows () {
const displayDetail = screen.getPrimaryDisplay(); const displayDetail = screen.getPrimaryDisplay();
this.mainWindow.listen() this.mainWindow.listen()
// 简约
// this.mainWindow.createWindow({
// isMainWin: true,
// width:Number(displayDetail.size.width || process.env.VUE_APP_mainW),
// height: Number(process.env.VUE_APP_mainH),
// // minWidth:Number(process.env.VUE_APP_mainW),
// // minHeight: Number(process.env.VUE_APP_mainH),
// })
// 极简模式
this.mainWindow.createWindow({ this.mainWindow.createWindow({
isMainWin: true, isMainWin: true,
width:Number(displayDetail.size.width || process.env.VUE_APP_mainW), x:0,
height: Number(process.env.VUE_APP_mainH), y: ( Number(displayDetail.size.height) - 60),
// minWidth:Number(process.env.VUE_APP_mainW), width: 419,
// minHeight: Number(process.env.VUE_APP_mainH), height: 60 ,
}) })
} }
} }
......
...@@ -99,7 +99,7 @@ class category { ...@@ -99,7 +99,7 @@ class category {
let categoryList = this.store.get('category'); let categoryList = this.store.get('category');
let id = detail.id; let id = detail.id;
let hasIn = categoryList.findIndex(v => v.id == id); let hasIn = categoryList.findIndex(v => v.id == id);
console.log('hasIn-updateName', hasIn) // console.log('hasIn-updateName', hasIn)
if(hasIn == -1) return null; if(hasIn == -1) return null;
categoryList[hasIn].name = name; categoryList[hasIn].name = name;
......
...@@ -15,7 +15,7 @@ class SoftList { ...@@ -15,7 +15,7 @@ class SoftList {
let appsList = this.store.get('apps'); let appsList = this.store.get('apps');
if(appsList && appsList.length > 0) { if(appsList && appsList.length > 0) {
// 已有app列表 // 已有app列表
console.log('apps-length', appsList.length) // console.log('apps-length', appsList.length)
this.mainWindow.win.webContents.send("appsList", appsList); this.mainWindow.win.webContents.send("appsList", appsList);
return; return;
} }
...@@ -99,7 +99,6 @@ class SoftList { ...@@ -99,7 +99,6 @@ class SoftList {
let str = v.replace('/usr/share/icons/hicolor/','') let str = v.replace('/usr/share/icons/hicolor/','')
if(str.indexOf('/')>0 && str.split('/')[0] && str.split('/')[0].indexOf('x')>0) { if(str.indexOf('/')>0 && str.split('/')[0] && str.split('/')[0].indexOf('x')>0) {
let curHi = Number(str.split('/')[0].split('x')[0]); let curHi = Number(str.split('/')[0].split('x')[0]);
// if(name && name.indexOf('Visual Studio Code') >= 0) console.log('curHi', curHi)
if(curHi > hiMax) { if(curHi > hiMax) {
hiMax = curHi; hiMax = curHi;
hicolorIcon = v; hicolorIcon = v;
...@@ -222,7 +221,6 @@ class SoftList { ...@@ -222,7 +221,6 @@ class SoftList {
searchIcon:true, searchIcon:true,
}; };
}) })
console.log(newApps)
this.store.set('apps', newApps); this.store.set('apps', newApps);
// this.mainWindow.win.webContents.send("appsList", newApps); // this.mainWindow.win.webContents.send("appsList", newApps);
} catch (error) { } catch (error) {
......
...@@ -99,6 +99,8 @@ class MainWindow { ...@@ -99,6 +99,8 @@ class MainWindow {
height: wh[1], height: wh[1],
// autoHideMenuBar: true, // autoHideMenuBar: true,
// titleBarStyle: "hidden", // titleBarStyle: "hidden",
// backgroundColor: '#00000000', //透明颜色
// transparent: true,
resizable: true, resizable: true,
minimizable: true, minimizable: true,
maximizable: true, maximizable: true,
...@@ -236,8 +238,10 @@ class MainWindow { ...@@ -236,8 +238,10 @@ class MainWindow {
// }) // })
// 等待加载完成再去显示,不显示白屏加载过程 // 等待加载完成再去显示,不显示白屏加载过程
win.once('ready-to-show', () => { win.once('ready-to-show', () => {
if(args.visible!='hide') win.show(); if(args.visible!='hide') {
// win.setAlwaysOnTop(true); win.show();
}
if(win.webContents.webType === 'mainWindow') { if(win.webContents.webType === 'mainWindow') {
win.setAlwaysOnTop(true); win.setAlwaysOnTop(true);
} }
...@@ -437,7 +441,6 @@ class MainWindow { ...@@ -437,7 +441,6 @@ class MainWindow {
onlyOneShowMain() { onlyOneShowMain() {
// 只显示一个主窗口 // 只显示一个主窗口
const gotTheLock = app.requestSingleInstanceLock() const gotTheLock = app.requestSingleInstanceLock()
console.log('gotTheLock', gotTheLock)
if (!gotTheLock) { if (!gotTheLock) {
app.quit() app.quit()
} else { } else {
......
...@@ -14,6 +14,7 @@ body { ...@@ -14,6 +14,7 @@ body {
margin: 0; margin: 0;
font-size: 14px !important; font-size: 14px !important;
// background-color: rgba(0,0,0,0.25); // background-color: rgba(0,0,0,0.25);
background: linear-gradient(180deg, rgba(10,37,91,0.3) 0%, #05173A 100%);
} }
</style> </style>
<style> <style>
......
...@@ -179,7 +179,6 @@ export default { ...@@ -179,7 +179,6 @@ export default {
selectMenu(item) { selectMenu(item) {
// 选中某个分类 // 选中某个分类
let {id,current} = this.menuPosition; let {id,current} = this.menuPosition;
console.log('this.menuPosition',this.menuPosition,item)
this.$emit('softAddtoCate', { this.$emit('softAddtoCate', {
cate: item, cate: item,
soft: {id,current} soft: {id,current}
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
<div class="one_container"> <div class="one_container">
<div class="left_main"> <div class="left_main">
<img src="~@/assets/xuchanzhongxue.png" alt="" class="left_img" @click="getFrontApp"> <img src="~@/assets/xuchanzhongxue.png" alt="" class="left_img" @click="getFrontApp">
<!-- <span class="left_name" @click="getFrontApp">许昌市第十六中学</span> -->
</div> </div>
<div v-if="mode === 'modeJiJian'" class="group1_wrap center"> <div v-if="mode === 'modeJiJian'" class="group1_wrap center">
<img src="~@/assets/yunpingtai.png" alt="" class="yun_img"> <img src="~@/assets/yunpingtai.png" alt="" class="yun_img">
...@@ -21,42 +20,6 @@ ...@@ -21,42 +20,6 @@
</div> </div>
</div> </div>
</block> </block>
<!-- <div v-if="mode === 'modeJianYue'" class="group1_wrap first">
<div v-for="(appItem, appIndex) in group1"
:data-appname="appItem.name"
class="app_item"
@click="tapApp(appItem)">
<img :src="appItem.icon" alt="" class="img" v-if="appItem.icon && appItem.icon.indexOf('.png') == -1">
<span class="app_name">{{ appItem.name }}</span>
</div>
</div>
<div v-if="mode === 'modeJianYue'" class="group1_wrap">
<div v-for="(appItem, appIndex) in group2"
:data-appname="appItem.name"
class="app_item"
@click="tapApp(appItem)">
<img :src="appItem.icon" alt="" class="img">
<span class="app_name">{{ appItem.name }}</span>
</div>
</div>
<div v-if="mode === 'modeJianYue'" class="group1_wrap">
<div v-for="(appItem, appIndex) in group3"
:data-appname="appItem.name"
class="app_item"
@click="tapApp(appItem)">
<img :src="appItem.icon" alt="" class="img">
<span class="app_name">{{ appItem.name }}</span>
</div>
</div>
<div v-if="mode === 'modeJianYue'" class="group1_wrap">
<div v-for="(appItem, appIndex) in group4"
:data-appname="appItem.name"
class="app_item"
@click="tapApp(appItem)">
<img :src="appItem.icon" alt="" class="img">
<span class="app_name">{{ appItem.name }}</span>
</div>
</div> -->
</div> </div>
</template> </template>
...@@ -69,22 +32,6 @@ export default { ...@@ -69,22 +32,6 @@ export default {
return []; return [];
} }
}, },
group1: {
type:Array,
default:[]
},
group2: {
type:Array,
default:[]
},
group3: {
type:Array,
default:[]
},
group4: {
type:Array,
default:[]
},
mode: { mode: {
type:String, type:String,
default:"" default:""
......
...@@ -160,7 +160,7 @@ export default { ...@@ -160,7 +160,7 @@ export default {
this.editIndex = -1; this.editIndex = -1;
}, },
modifyName(name, index) { modifyName(name, index) {
console.log('修改名字') // 修改名字
this.editName = name; this.editName = name;
this.editIndex = index; this.editIndex = index;
}, },
......
...@@ -5,12 +5,6 @@ import VueI18n from "vue-i18n"; ...@@ -5,12 +5,6 @@ import VueI18n from "vue-i18n";
import infiniteScroll from "vue-infinite-scroll"; import infiniteScroll from "vue-infinite-scroll";
import componentsInstall from './components/install' import componentsInstall from './components/install'
import { navAndOpenTagPage, isElectron } from '@/libs/utils/tools' import { navAndOpenTagPage, isElectron } from '@/libs/utils/tools'
import VueClipboard from 'vue-clipboard2'
// 代码编辑器
import ace from 'ace-builds'
import 'ace-builds/webpack-resolver'
import 'ace-builds/src-noconflict/theme-monokai' // 默认设置的主题
import 'ace-builds/src-noconflict/mode-javascript' // 默认设置的语言模式
// 引入组件和样式 // 引入组件和样式
import RouterTab from "vue-router-tab"; import RouterTab from "vue-router-tab";
...@@ -74,7 +68,6 @@ import { ...@@ -74,7 +68,6 @@ import {
Vue.config.productionTip = false; Vue.config.productionTip = false;
Vue.use(VueI18n); Vue.use(VueI18n);
Vue.use(RouterTab); Vue.use(RouterTab);
Vue.use(ace);
Vue.use(componentsInstall) Vue.use(componentsInstall)
Vue.use(Tooltip); Vue.use(Tooltip);
...@@ -125,7 +118,6 @@ Vue.use(TableColumn); ...@@ -125,7 +118,6 @@ Vue.use(TableColumn);
Vue.use(infiniteScroll); Vue.use(infiniteScroll);
Vue.use(Loading.directive); Vue.use(Loading.directive);
Vue.use(VueClipboard)
// Vue.prototype.$loading = Loading.service; // Vue.prototype.$loading = Loading.service;
Vue.prototype.$confirm = MessageBox.confirm; Vue.prototype.$confirm = MessageBox.confirm;
Vue.prototype.$message = Message; Vue.prototype.$message = Message;
......
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
<div class="application-list-container" :class="{'uMode':mode === 'modeUXue'}"> <div class="application-list-container" :class="{'uMode':mode === 'modeUXue'}">
<one v-if="mode !== 'modeUXue'" :cateList="categoryList" :mode="mode" <one v-if="mode !== 'modeUXue'" :cateList="categoryList" :mode="mode"
@tapApp="tapApp" @getFrontApp="newWin"></one> @tapApp="tapApp" @getFrontApp="newWin"></one>
<!-- <div @click="newWin">打开新窗口</div> -->
<second v-else <second v-else
:groupList="categoryList" :current="secondAcitveIndex" :groupList="categoryList" :current="secondAcitveIndex"
@tapApp="tapApp" @getFrontApp="newWin" @changeTab="changeSecond"></second> @tapApp="tapApp" @getFrontApp="newWin" @changeTab="changeSecond"></second>
...@@ -23,63 +22,27 @@ export default { ...@@ -23,63 +22,27 @@ export default {
return { return {
appList: [], appList: [],
categoryList:[], categoryList:[],
mode: "modeJianYue", mode: "modeJiJian",
showManage:false, showManage:false,
secondAcitveIndex:1, //U学模式,当前选中 secondAcitveIndex:1, //U学模式,当前选中
}; };
}, },
computed: { computed: {
group1() {
return (this.appList.length > 4 && this.appList.slice(0, 5)) || [];
},
group2() {
return (this.appList.length > 6 && this.appList.slice(5, 9)) || [];
},
group3() {
return (this.appList.length > 10 && this.appList.slice(9, 12)) || [];
},
group4() {
return (this.appList.length > 13 && this.appList.slice(12, 15)) || [];
},
ipcRenderer() { ipcRenderer() {
return (this.$electron && this.$electron.ipcRenderer) || {}; return (this.$electron && this.$electron.ipcRenderer) || {};
}, },
groupSecond() {
return [
{
name:"备课资源",
// jiaowuguanli.png
list:this.group1
},
{
name:"教学工具",
// beikeziyuan.png
list:this.group2
},
{
name:"课后练习",
// jiaoxuegongju.png
list:this.group3
},
{
name:"教务管理",
// kehoulianxi.png
list:this.group4
}
]
}
}, },
created() { created() {
// this.ipcRenderer.invoke('getOsPlatform').then((platform) => { // this.ipcRenderer.invoke('getOsPlatform').then((platform) => {
// console.log(platform); // console.log(platform);
// }); // });
let osPlatform = this.ipcRenderer.sendSync('getOsPlatform',null); // let osPlatform = this.ipcRenderer.sendSync('getOsPlatform',null);
console.log('str', osPlatform ) // console.log('str', osPlatform )
if( osPlatform === 'linux' ) { // if( osPlatform === 'linux' ) {
// 当前平台是 Linux,引入 pinyin 模块 // 当前平台是 Linux,引入 pinyin 模块
// pinyin = require('pinyin'); // pinyin = require('pinyin');
// ... // ...
} // }
}, },
mounted() { mounted() {
this.listener(); this.listener();
...@@ -88,8 +51,13 @@ export default { ...@@ -88,8 +51,13 @@ export default {
this.ipcSend(); this.ipcSend();
// 接收主进程消息 // 接收主进程消息
this.ipcOn(); this.ipcOn();
// 提前创建,后续显示 this.$nextTick(() => {
this.createAppWin(); // 延迟创建
setTimeout(() => {
// 提前创建,后续显示
this.createAppWin();
}, 10000);
});
}, },
methods: { methods: {
getCategoryList() { getCategoryList() {
...@@ -156,59 +124,59 @@ export default { ...@@ -156,59 +124,59 @@ export default {
ipcRenderer.send("show-context-menu"); ipcRenderer.send("show-context-menu");
}); });
// 监听 `dragover` 事件,防止默认行为 // 监听 `dragover` 事件,防止默认行为
window.addEventListener("dragover", (e) => { // window.addEventListener("dragover", (e) => {
e.preventDefault(); // e.preventDefault();
}); // });
// 监听 `drop` 事件,获取拖拽的文件路径 // 监听 `drop` 事件,获取拖拽的文件路径
window.addEventListener("drop", (e) => { // window.addEventListener("drop", (e) => {
e.preventDefault(); // e.preventDefault();
let appFiles = []; // let appFiles = [];
console.log(e); // // console.log(e);
let ele = this.findParentOf({ // let ele = this.findParentOf({
className: "app_item", // className: "app_item",
element: e.target, // element: e.target,
}); // });
console.dir(ele); // console.dir(ele);
if (!ele || !ele.dataset || !ele.dataset.appname) { // if (!ele || !ele.dataset || !ele.dataset.appname) {
// 无法放置 // // 无法放置
return; // return;
} // }
let filesArr = new Array(e.dataTransfer.files.length).fill(1); // let filesArr = new Array(e.dataTransfer.files.length).fill(1);
filesArr.forEach((v, index) => { // filesArr.forEach((v, index) => {
// mac-应用程序文件 // // mac-应用程序文件
let file = e.dataTransfer.files[index]; // let file = e.dataTransfer.files[index];
if (file.path.lastIndexOf(".app") == file.path.length - 4) { // if (file.path.lastIndexOf(".app") == file.path.length - 4) {
appFiles.push({ // appFiles.push({
path: file.path, // path: file.path,
name: file.name, // name: file.name,
shortName: file.name.split(".")[0] || file.name, // shortName: file.name.split(".")[0] || file.name,
}); // });
} // }
// let linux-快捷键 // // let linux-快捷键
if (file.path.lastIndexOf(".desktop") == file.path.length - 8) { // if (file.path.lastIndexOf(".desktop") == file.path.length - 8) {
appFiles.push({ // appFiles.push({
path: file.path, // path: file.path,
name: file.name, // name: file.name,
shortName: file.name.split(".")[0] || file.name, // shortName: file.name.split(".")[0] || file.name,
}); // });
} // }
}); // });
if (appFiles.length == 0) { // if (appFiles.length == 0) {
// 无可用应用程序文件 // // 无可用应用程序文件
return; // return;
} // }
let targetIndex = this.appList.findIndex( // let targetIndex = this.appList.findIndex(
(v) => v.name == ele.dataset.appname // (v) => v.name == ele.dataset.appname
); // );
if (targetIndex >= 0) { // if (targetIndex >= 0) {
// 移动软件 // // 移动软件
this.ipcRenderer.send("moveSoft", { // this.ipcRenderer.send("moveSoft", {
appname: ele.dataset.appname, // appname: ele.dataset.appname,
addFiles: appFiles, // addFiles: appFiles,
}); // });
} // }
}); // });
}, },
ipcOn() { ipcOn() {
// 接收主进程消息 // 接收主进程消息
...@@ -227,7 +195,7 @@ export default { ...@@ -227,7 +195,7 @@ export default {
// 获取到app列表 // 获取到app列表
this.ipcRenderer.on("appsList", (event, list) => { this.ipcRenderer.on("appsList", (event, list) => {
console.log("获取到app列表", list); // console.log("获取到app列表", list);
this.appList = list; this.appList = list;
this.appList.forEach((item, index) => { this.appList.forEach((item, index) => {
// console.log(item.icon) // console.log(item.icon)
...@@ -275,12 +243,14 @@ export default { ...@@ -275,12 +243,14 @@ export default {
console.log("宽高", width, height); console.log("宽高", width, height);
// 设置程序位置 // 设置程序位置
this.ipcRenderer.send("setMainWindow0", { width, height }); // this.ipcRenderer.send("setMainWindow0", { width, height });
//获取app列表 //获取app列表
this.ipcRenderer.send("getApps"); // this.ipcRenderer.send("getApps"); //现在不需要用到
// 获取分类列表 setTimeout(() => {
this.getCategoryList(); // 获取分类列表
this.getCategoryList();
}, 1000);
}, },
tapApp(item) { tapApp(item) {
console.log(item); console.log(item);
...@@ -349,7 +319,7 @@ export default { ...@@ -349,7 +319,7 @@ export default {
height: 60px; height: 60px;
font-size: 24px; font-size: 24px;
// background: #fff; // background: #fff;
background: linear-gradient(180deg, rgba(10,37,91,0.3) 0%, #05173A 100%);
&.uMode { &.uMode {
height: 100px; height: 100px;
} }
......
...@@ -138,7 +138,7 @@ export default { ...@@ -138,7 +138,7 @@ export default {
softAddtoCate(detail) { softAddtoCate(detail) {
// 软件添加到哪个分类 // 软件添加到哪个分类
let { cate, soft } = detail; let { cate, soft } = detail;
console.log('软件添加到哪个分类', detail) // console.log('软件添加到哪个分类', detail)
this.ipcRenderer.send("changeCategory", { this.ipcRenderer.send("changeCategory", {
soft, soft,
category:cate category:cate
...@@ -146,11 +146,11 @@ export default { ...@@ -146,11 +146,11 @@ export default {
}, },
getAppList() { getAppList() {
//获取app列表 //获取app列表
this.ipcRenderer.send("getApps"); this.ipcRenderer.send("getApps"); //待恢复
}, },
getCategoryList() { getCategoryList() {
// 获取分类列表 // 获取分类列表
this.ipcRenderer.send("getCategoryList"); this.ipcRenderer.send("getCategoryList"); //待恢复
}, },
ipcOn() { ipcOn() {
this.ipcRenderer.on("manageVisible", (event,visible) => { this.ipcRenderer.on("manageVisible", (event,visible) => {
...@@ -158,7 +158,7 @@ export default { ...@@ -158,7 +158,7 @@ export default {
}) })
// 获取到app列表 // 获取到app列表
this.ipcRenderer.on("appsList", (event, list) => { this.ipcRenderer.on("appsList", (event, list) => {
console.log("获取到app列表 2", list); // console.log("获取到app列表 2", list);
this.listObj.lastest = list; this.listObj.lastest = list;
this.appList = list; this.appList = list;
// this.appList.forEach((item, index) => { // this.appList.forEach((item, index) => {
...@@ -170,17 +170,17 @@ export default { ...@@ -170,17 +170,17 @@ export default {
// this.getPinyin(); // this.getPinyin();
}); });
this.ipcRenderer.on("category-list", (event, list) => { this.ipcRenderer.on("category-list", (event, list) => {
console.log("获取到分类列表 2", list); // console.log("获取到分类列表 2", list);
this.categoryList = list; this.categoryList = list;
}); });
this.ipcRenderer.on("change-category", (event, {detail,id}) => { this.ipcRenderer.on("change-category", (event, {detail,id}) => {
console.log("修改分类 2", detail,id); // console.log("修改分类 2", detail,id);
let curIndex = this.categoryList.findIndex(v => v.id == id); let curIndex = this.categoryList.findIndex(v => v.id == id);
this.categoryList[curIndex] = detail; this.categoryList[curIndex] = detail;
this.$message.success("加入成功"); this.$message.success("加入成功");
}); });
this.ipcRenderer.on("add-category", (event, data) => { this.ipcRenderer.on("add-category", (event, data) => {
console.log("添加分类 2", data); // console.log("添加分类 2", data);
this.categoryList.unshift(data); this.categoryList.unshift(data);
this.$message.success("添加成功"); this.$message.success("添加成功");
this.$refs.dragEl.cancelAdd(); this.$refs.dragEl.cancelAdd();
...@@ -195,7 +195,7 @@ export default { ...@@ -195,7 +195,7 @@ export default {
}); });
this.ipcRenderer.on("remove-soft", (event, {detail,id}) => { this.ipcRenderer.on("remove-soft", (event, {detail,id}) => {
console.log('移出成功', detail) // console.log('移出成功', detail)
let curIndex = this.categoryList.findIndex(v => v.id == detail.id); let curIndex = this.categoryList.findIndex(v => v.id == detail.id);
this.categoryList[curIndex] = detail; this.categoryList[curIndex] = detail;
this.$set(this.categoryList, curIndex, detail); this.$set(this.categoryList, curIndex, detail);
......
"use strict";
import { app, protocol, BrowserWindow, shell, Menu, ipcMain, globalShortcut } from "electron";
import path from 'path';
import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
import installExtension, { VUEJS_DEVTOOLS } from "electron-devtools-installer";
import { downloadFile, openFile, saveJson, openFileFolder, getFilePositionFromUrl } from '@/libs/utils/backfunction.js';
const isDevelopment = process.env.NODE_ENV !== "production";
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
{ scheme: "app", privileges: { secure: true, standard: true } },
]);
//热加载
try {
require('electron-reloader')(module);
} catch {}
async function createWindow() {
// 关闭顶部导航菜单栏
Menu.setApplicationMenu(null)
// Create the browser window.
const win = new BrowserWindow({
width: 800,
height: 600,
center: true, //窗口居中
title: "菜单平台", //如果由loadURL()加载的HTML文件中含有标签<title>,此属性将被忽略
icon: path.join(__static, '/favicon.ico'), //图标更换,仅支持svg、ico ,在public下
// resizable:false, //窗口大小是否可以改变
// maximizable: false, //窗口是否可以最大化
// frame: false, //无边框窗口 - 去掉顶部导航,关闭按钮,最大最小化按钮
webPreferences: {
// Required for Spectron testing
// enableRemoteModule: !!process.env.IS_TEST,
// 在electron 10.0.0之后,remote模块默认关闭
// 必须手动设置webPreferences中的enableRemoteModule为true之后才能使用
enableRemoteModule: true, // 这里是关键设置
// Use pluginOptions.nodeIntegration, leave this alone
// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
// nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
// contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,
nodeIntegration: true, //web开启主进程中集成node
// 在独立JavaScript环境中运行Electron API和指定的preload脚本
contextIsolation: false,
preload: path.join(__dirname, 'preload.js')
},
});
if (process.env.WEBPACK_DEV_SERVER_URL) {
// Load the url of the dev server if in development mode
await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
if (!process.env.IS_TEST) win.webContents.openDevTools();
} else {
createProtocol("app");
// Load the index.html when not in development
win.loadURL("app://./index.html");
}
win.on('closed', () => {
win = null
});
// 注册一个'CommandOrControl+Shift+i' 快捷键监听器
const ret = globalShortcut.register('CommandOrControl+Shift+i', function () {
win.webContents.openDevTools()
});
if (!ret) {
console.log('registration failed')
}
//检查快捷键是否注册成功
// console.log(globalShortcut.isRegistered('CommandOrControl+X'))
// win.webContents.on('new-window', (event, url, frameName, disposition, options, additionalFeatures) => {
// event.preventDefault()
// Object.assign(options, {
// // modal: true,
// // parent: win,
// title: frameName,
// frame: false,
// width: 300,
// height: 400
// })
// // 创建新的窗口
// var a = new BrowserWindow(options)
// a.loadURL(url)
// ipcMain.on('close-app', () => {
// // 通知关闭
// a.close();
// ipcMain.removeAllListeners('close-app')
// });
// // if (!process.env.IS_TEST) a.webContents.openDevTools()
// })
var downloadpath = '';
var folderpath = '';
win.webContents.session.on('will-download', (event, item, webContents) => {
//设置文件存放位置
// console.log(folderpath,item.getFilename(),folderpath+`\\${item.getFilename()}`,'C:/Users/mayn/Downloads/test/'+`${item.getFilename()}`)
item.setSavePath(folderpath+`\\${item.getFilename()}`);
// item.setSavePath('C:/Users/mayn/Downloads/test/'+`${item.getFilename()}`);
item.on('updated', (event, state) => {
console.log(`Received bytes: ${item.getReceivedBytes()}`)
if (state === 'interrupted') {
console.log('Download is interrupted but can be resumed')
} else if (state === 'progressing') {
if (item.isPaused()) {
console.log('Download is paused')
} else {
console.log(`Received bytes: ${item.getReceivedBytes()}`)
}
}
})
item.once('done', (event, state) => {
if (state === 'completed') {
console.log('Download successfully')
} else {
console.log(`Download failed: ${state}`)
}
})
});
ipcMain.on('downLoadFile', (evt,{downLoadUrl,targetUrl}) => {
targetUrl = targetUrl.replace(/\\/g, '/');
targetUrl = targetUrl + '/' +downLoadUrl.substring(downLoadUrl.lastIndexOf('/')+1);
downloadFile(downLoadUrl, targetUrl,({percentage,received,total,success,filepath, filePosition})=>{
if(!!success) {
// 下载完成打开文件
let openStatus = openFile(filepath); //同浏览器效果 - 打开文件
// let openStatus = openFileFolder(filepath);
// console.log('打开文件位置状态',openStatus,filepath)
return;
}
// console.log(percentage + "% | " + received + " bytes out of " + total + " bytes.");
});
// electron 的下载一直 interrupted -- 失败
// downloadpath = downLoadUrl;
// folderpath = targetUrl;
// evt.sender.send('tips',downloadpath);
// win.webContents.downloadURL(downloadpath);
});
ipcMain.on('saveJson', (evt,{fileName, data}) => {
saveJson(fileName, data)
});
}
ipcMain.on('fromFullPage', e => {
// 主进程监听到渲染进程
});
// Quit when all windows are closed.
app.on("window-all-closed", () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== "darwin") {
app.quit();
}
});
app.on("activate", () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on("ready", async () => {
// 不加载VUEJS_DEVTOOLS
// if (isDevelopment && !process.env.IS_TEST) {
// // Install Vue Devtools
// try {
// await installExtension(VUEJS_DEVTOOLS);
// } catch (e) {
// console.error("Vue Devtools failed to install:", e.toString());
// }
// }
createWindow();
});
//所有第三方链接,都通过默认浏览器打开
// app.on('web-contents-created', (e, webContents) => {
// webContents.on('new-window', (event, url) => {
// event.preventDefault();
// shell.openExternal(url);
// });
// });
// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
if (process.platform === "win32") {
process.on("message", (data) => {
if (data === "graceful-exit") {
app.quit();
}
});
} else {
process.on("SIGTERM", () => {
app.quit();
});
}
}
"use strict";
import { app, protocol, BrowserWindow, Menu
} from "electron";
import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
import installExtension, { VUEJS_DEVTOOLS } from "electron-devtools-installer";
const isDevelopment = process.env.NODE_ENV !== "production";
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
{ scheme: "app", privileges: { secure: true, standard: true } },
]);
//热加载
try {
require('electron-reloader')(module);
} catch {}
async function createWindow() {
// Create the browser window.
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
// Required for Spectron testing
enableRemoteModule: !!process.env.IS_TEST,
// Use pluginOptions.nodeIntegration, leave this alone
// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,
},
});
if (process.env.WEBPACK_DEV_SERVER_URL) {
// Load the url of the dev server if in development mode
await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
if (!process.env.IS_TEST) win.webContents.openDevTools();
} else {
createProtocol("app");
// Load the index.html when not in development
win.loadURL("app://./index.html");
}
}
// Quit when all windows are closed.
app.on("window-all-closed", () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== "darwin") {
app.quit();
}
});
app.on("activate", () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on("ready", async () => {
// 不加载VUEJS_DEVTOOLS
// if (isDevelopment && !process.env.IS_TEST) {
// // Install Vue Devtools
// try {
// await installExtension(VUEJS_DEVTOOLS);
// } catch (e) {
// console.error("Vue Devtools failed to install:", e.toString());
// }
// }
createWindow();
});
// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
if (process.platform === "win32") {
process.on("message", (data) => {
if (data === "graceful-exit") {
app.quit();
}
});
} else {
process.on("SIGTERM", () => {
app.quit();
});
}
}
"use strict";
import { app, protocol, BrowserWindow } from "electron";
import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
import installExtension, { VUEJS_DEVTOOLS } from "electron-devtools-installer";
const isDevelopment = process.env.NODE_ENV !== "production";
// Scheme must be registered before the app is ready
protocol.registerSchemesAsPrivileged([
{ scheme: "app", privileges: { secure: true, standard: true } },
]);
async function createWindow() {
// Create the browser window.
const win = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
// Required for Spectron testing
enableRemoteModule: !!process.env.IS_TEST,
// Use pluginOptions.nodeIntegration, leave this alone
// See nklayman.github.io/vue-cli-plugin-electron-builder/guide/security.html#node-integration for more info
nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION,
contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,
},
});
if (process.env.WEBPACK_DEV_SERVER_URL) {
// Load the url of the dev server if in development mode
await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
if (!process.env.IS_TEST) win.webContents.openDevTools();
} else {
createProtocol("app");
// Load the index.html when not in development
win.loadURL("app://./index.html");
}
}
// Quit when all windows are closed.
app.on("window-all-closed", () => {
// On macOS it is common for applications and their menu bar
// to stay active until the user quits explicitly with Cmd + Q
if (process.platform !== "darwin") {
app.quit();
}
});
app.on("activate", () => {
// On macOS it's common to re-create a window in the app when the
// dock icon is clicked and there are no other windows open.
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
// This method will be called when Electron has finished
// initialization and is ready to create browser windows.
// Some APIs can only be used after this event occurs.
app.on("ready", async () => {
if (isDevelopment && !process.env.IS_TEST) {
// Install Vue Devtools
try {
await installExtension(VUEJS_DEVTOOLS);
} catch (e) {
console.error("Vue Devtools failed to install:", e.toString());
}
}
createWindow();
});
// Exit cleanly on request from parent process in development mode.
if (isDevelopment) {
if (process.platform === "win32") {
process.on("message", (data) => {
if (data === "graceful-exit") {
app.quit();
}
});
} else {
process.on("SIGTERM", () => {
app.quit();
});
}
}
Markdown 格式
0% 或
您添加了 0 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论