提交 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.
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?8w1xyk');
src: url('fonts/icomoon.eot?8w1xyk#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?8w1xyk') format('truetype'),
url('fonts/icomoon.woff?8w1xyk') format('woff'),
url('fonts/icomoon.svg?8w1xyk#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
[class^="icon-"], [class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'icomoon' !important;
speak: never;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-upgrade-zfb:before {
content: "\e9f6";
color: #157afc;
}
.icon-upgrade-wx:before {
content: "\ea0b";
color: #15b41d;
}
.icon-upgrade-xz .path1:before {
content: "\ea0e";
color: rgb(254, 132, 15);
}
.icon-upgrade-xz .path2:before {
content: "\ea0f";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-upgrade-pay:before {
content: "\ea10";
color: #e74362;
}
.icon-eye-left-show:before {
content: "\ea0a";
color: #fff;
}
.icon-eye-left-hide:before {
content: "\e9f5";
color: #fff;
}
.icon-menu-edit:before {
content: "\e999";
color: #fff;
}
.icon-publish1:before {
content: "\e99a";
}
.icon-global-setting:before {
content: "\e9ed";
}
.icon-course-rename-top .path1:before {
content: "\e9ee";
color: rgb(255, 161, 179);
}
.icon-course-rename-top .path2:before {
content: "\e9ef";
margin-left: -1em;
color: rgb(181, 16, 47);
}
.icon-home-management:before {
content: "\e9f0";
}
.icon-quick-add-content:before {
content: "\ea09";
color: #51cfae;
}
.icon-tree-arrow-down:before {
content: "\ea08";
}
.icon-order-inline:before {
content: "\ea05";
color: #fff;
}
.icon-order-to-bottom:before {
content: "\ea06";
color: #fff;
}
.icon-order-to-top:before {
content: "\ea07";
color: #fff;
}
.icon-always_hide_white:before {
content: "\ea03";
color: #fff;
}
.icon-always_hide_gray:before {
content: "\ea04";
color: #b5b5b5;
}
.icon-picture-enlarge:before {
content: "\ea01";
color: #fff;
}
.icon-media-paly:before {
content: "\ea02";
color: #fff;
}
.icon-theme-add-page:before {
content: "\e9ff";
color: #fff;
}
.icon-theme-add-menu:before {
content: "\ea00";
color: #51cfae;
}
.icon-community:before {
content: "\e9fe";
color: #e74362;
}
.icon-green-arrow-up:before {
content: "\e9fc";
color: #51cfae;
}
.icon-green-arrow-down:before {
content: "\e9fd";
color: #51cfae;
}
.icon--12 .path1:before {
content: "\e9f7";
color: rgb(255, 204, 214);
}
.icon--12 .path2:before {
content: "\e9f8";
margin-left: -1em;
color: none;
}
.icon--12 .path3:before {
content: "\e9f9";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-theme-edit2:before {
content: "\e9ec";
color: #fff;
}
.icon-dot-more:before {
content: "\e9f1";
color: #a8a8a8;
}
.icon-collect .path1:before {
content: "\e9f2";
color: rgb(255, 201, 211);
}
.icon-collect .path2:before {
content: "\e9f3";
margin-left: -1em;
color: rgb(231, 67, 98);
}
.icon-collect .path3:before {
content: "\e9f4";
margin-left: -1em;
color: rgb(231, 67, 98);
}
.icon-menu-show:before {
content: "\e9fa";
color: #fff;
}
.icon-menu-hide:before {
content: "\e9fb";
color: #fff;
}
.icon-new-show:before {
content: "\e9ea";
color: #fff;
}
.icon-new-hide:before {
content: "\e9eb";
color: #fff;
}
.icon-new-edit:before {
content: "\e9e7";
color: #fff;
}
.icon-new-del:before {
content: "\e9e8";
color: #fff;
}
.icon-new-add:before {
content: "\e9e9";
color: #fff;
}
.icon-back-home .path1:before {
content: "\e928";
color: rgb(255, 204, 214);
}
.icon-back-home .path2:before {
content: "\e929";
margin-left: -1.0625em;
color: rgb(34, 34, 34);
}
.icon-back-home .path3:before {
content: "\e92a";
margin-left: -1.0625em;
color: rgb(34, 34, 34);
}
.icon-check:before {
content: "\e9dc";
color: #e74362;
}
.icon-personal_data:before {
content: "\e9dd";
}
.icon-default_avatar:before {
content: "\e9de";
color: #e74362;
}
.icon-all_read .path1:before {
content: "\e9df";
color: rgb(237, 237, 237);
}
.icon-all_read .path2:before {
content: "\e9e0";
margin-left: -1em;
color: rgb(110, 110, 110);
}
.icon-calendar:before {
content: "\e9e1";
}
.icon-logout:before {
content: "\e9e2";
}
.icon-unread:before {
content: "\e9e3";
color: #e74362;
}
.icon-markRead:before {
content: "\e9e4";
color: #a1a1a1;
}
.icon-account_security:before {
content: "\e9e5";
}
.icon-paymentAndOrder:before {
content: "\e9e6";
}
.icon-login-language:before {
content: "\e9d9";
color: #a1a1a1;
}
.icon-login-arrow-up:before {
content: "\e9da";
color: #a1a1a1;
}
.icon-login-arrow-down:before {
content: "\e9db";
color: #a1a1a1;
}
.icon-match-arrow-down:before {
content: "\e9d8";
color: #fff;
}
.icon-match-arrow-up:before {
content: "\e9d7";
color: #fff;
}
.icon-gmcq_selected:before {
content: "\e9d5";
color: #fff;
}
.icon-gmcq_default:before {
content: "\e9d6";
color: #fff;
}
.icon-checkbox_selected:before {
content: "\e9d3";
color: #fff;
}
.icon-checkbox_default:before {
content: "\e9d4";
color: #fff;
}
.icon-radio_error_answer .path1:before {
content: "\e9cf";
color: rgb(255, 255, 255);
}
.icon-radio_error_answer .path2:before {
content: "\e9d0";
margin-left: -1em;
color: rgb(231, 67, 98);
}
.icon-radio_right_answer .path1:before {
content: "\e9d1";
color: rgb(255, 255, 255);
}
.icon-radio_right_answer .path2:before {
content: "\e9d2";
margin-left: -1em;
color: rgb(81, 207, 174);
}
.icon-error_answer:before {
content: "\e9cd";
color: #fff;
}
.icon-right_answer:before {
content: "\e9ce";
color: #51cfae;
}
.icon-accordion-reduce:before {
content: "\e9cc";
color: #fff;
}
.icon-accordion-add:before {
content: "\e9cb";
color: #fff;
}
.icon-back-login-blue:before {
content: "\e9ca";
color: #1373e6;
}
.icon-account-login:before {
content: "\e9c9";
color: #e74362;
}
.icon-short-note:before {
content: "\e925";
color: #e74362;
}
.icon-warning:before {
content: "\e9c6";
color: #e74362;
}
.icon-wechat:before {
content: "\e9c7";
color: #58c30d;
}
.icon-show-psw:before {
content: "\e9c8";
color: #e74362;
}
.icon-preview-photo:before {
content: "\e9c5";
color: #fff;
}
.icon-change-photo:before {
content: "\e9c4";
color: #fff;
}
.icon-eye-show:before {
content: "\e922";
color: #fff;
}
.icon-eye-hide:before {
content: "\e991";
color: #fff;
}
.icon-arrow-down-green:before {
content: "\e9c3";
color: #51cfae;
}
.icon-arrow-up-green:before {
content: "\e9c2";
color: #51cfae;
}
.icon-add-chapter-white:before {
content: "\e920";
color: #fff;
}
.icon-edit-white:before {
content: "\e921";
color: #fff;
}
.icon-del-chapter-white:before {
content: "\e990";
color: #fff;
}
.icon-pause-white:before {
content: "\e9c0";
color: #fff;
}
.icon-play-gray:before {
content: "\e9c1";
color: #a1a1a1;
}
.icon-cropper-redo-white:before {
content: "\e9ab";
color: #fff;
}
.icon-cropper-redo-active:before {
content: "\e9ac";
color: #e74362;
}
.icon-cropper-redo-default:before {
content: "\e9ad";
}
.icon-cropper-cutting-white:before {
content: "\e9ae";
color: #fff;
}
.icon-cropper-cutting-active:before {
content: "\e9af";
color: #e74362;
}
.icon-cropper-cutting-default:before {
content: "\e9b0";
}
.icon-cropper-backout-white:before {
content: "\e9b1";
color: #fff;
}
.icon-cropper-backout-active:before {
content: "\e9b2";
color: #e74362;
}
.icon-cropper-backout-default:before {
content: "\e9b3";
}
.icon-cropper-flip-vertical-white:before {
content: "\e9b4";
color: #fff;
}
.icon-cropper-flip-vertical-active:before {
content: "\e9b5";
color: #e74362;
}
.icon-cropper-flip-vertical-default:before {
content: "\e9b6";
}
.icon-cropper-flip-horizintal-white:before {
content: "\e9b7";
color: #fff;
}
.icon-cropper-flip-horizintal-active:before {
content: "\e9b8";
color: #e74362;
}
.icon-cropper-flip-horizintal-default:before {
content: "\e9b9";
}
.icon-cropper-turn-right-white:before {
content: "\e9ba";
color: #fff;
}
.icon-cropper-turn-right-active:before {
content: "\e9bb";
color: #e74362;
}
.icon-icropper-turn-right-default:before {
content: "\e9bc";
}
.icon-cropper-turn-left-white:before {
content: "\e9bd";
color: #fff;
}
.icon-cropper-turn-left-active:before {
content: "\e9be";
color: #e74362;
}
.icon-cropper-turn-left-default:before {
content: "\e9bf";
}
.icon-loving_heart_default:before {
content: "\e9a4";
color: #a1a1a1;
}
.icon-photos_backArrow:before {
content: "\e9a5";
color: #fff;
}
.icon-photo_settings:before {
content: "\e9a6";
color: #fff;
}
.icon-link_nav_actived:before {
content: "\e9a7";
color: #e74362;
}
.icon-link_nav_default:before {
content: "\e9a8";
color: #a1a1a1;
}
.icon-loving_heart_selected:before {
content: "\e9a9";
color: #e74362;
}
.icon-photos_navBack:before {
content: "\e9aa";
color: #fff;
}
.icon-media-upload .path1:before {
content: "\e96f";
color: rgb(34, 34, 34);
}
.icon-media-upload .path2:before {
content: "\e970";
margin-left: -1.125em;
color: rgb(34, 34, 34);
}
.icon-media-upload .path3:before {
content: "\e9a0";
margin-left: -1.125em;
color: rgb(34, 34, 34);
}
.icon-media-upload .path4:before {
content: "\e9a1";
margin-left: -1.125em;
color: rgb(231, 67, 98);
}
.icon-media-upload .path5:before {
content: "\e9a2";
margin-left: -1.125em;
color: rgb(231, 67, 98);
}
.icon-media-upload .path6:before {
content: "\e9a3";
margin-left: -1.125em;
color: rgb(231, 67, 98);
}
.icon-multiple-notselected:before {
content: "\e99f";
color: #d4d4d4;
}
.icon-menu-theme .path1:before {
content: "\e939";
color: rgb(231, 67, 98);
}
.icon-menu-theme .path2:before {
content: "\e93a";
margin-left: -1.125em;
color: rgb(34, 34, 34);
}
.icon-menu-theme .path3:before {
content: "\e99b";
margin-left: -1.125em;
color: rgb(231, 67, 98);
}
.icon-menu-content .path1:before {
content: "\e99c";
color: rgb(34, 34, 34);
}
.icon-menu-content .path2:before {
content: "\e99d";
margin-left: -0.94140625em;
color: rgb(30, 156, 123);
}
.icon-menu-content .path3:before {
content: "\e99e";
margin-left: -0.94140625em;
color: rgb(30, 156, 123);
}
.icon-online-photos .path1:before {
content: "\e994";
color: rgb(34, 34, 34);
}
.icon-online-photos .path2:before {
content: "\e995";
margin-left: -1.1875em;
color: rgb(231, 67, 98);
}
.icon-online-photos .path3:before {
content: "\e996";
margin-left: -1.1875em;
color: rgb(231, 67, 98);
}
.icon-online-photos .path4:before {
content: "\e997";
margin-left: -1.1875em;
color: rgb(34, 34, 34);
}
.icon-media-upload2:before {
content: "\e998";
}
.icon-component-media .path1:before {
content: "\e945";
color: rgb(212, 212, 212);
}
.icon-component-media .path2:before {
content: "\e946";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-component-matching-ques .path1:before {
content: "\e947";
color: rgb(212, 212, 212);
}
.icon-component-matching-ques .path2:before {
content: "\e948";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-component-evaluate .path1:before {
content: "\e949";
color: rgb(212, 212, 212);
}
.icon-component-evaluate .path2:before {
content: "\e94a";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-component-blank .path1:before {
content: "\e94b";
color: rgb(212, 212, 212);
}
.icon-component-blank .path2:before {
content: "\e94c";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-component-hotpic .path1:before {
content: "\e94d";
color: rgb(212, 212, 212);
}
.icon-component-hotpic .path2:before {
content: "\e94e";
margin-left: -1em;
color: rgb(0, 0, 0);
}
.icon-component-accordion .path1:before {
content: "\e94f";
color: rgb(212, 212, 212);
}
.icon-component-accordion .path2:before {
content: "\e950";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-component-cloze .path1:before {
content: "\e951";
color: rgb(212, 212, 212);
}
.icon-component-cloze .path2:before {
content: "\e952";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-component-graphic .path1:before {
content: "\e953";
color: rgb(212, 212, 212);
}
.icon-component-graphic .path2:before {
content: "\e954";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-component-image .path1:before {
content: "\e955";
color: rgb(212, 212, 212);
}
.icon-component-image .path2:before {
content: "\e956";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-component-img-select .path1:before {
content: "\e957";
color: rgb(212, 212, 212);
}
.icon-component-img-select .path2:before {
content: "\e958";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-component-text .path1:before {
content: "\e959";
color: rgb(212, 212, 212);
}
.icon-component-text .path2:before {
content: "\e95a";
margin-left: -1em;
color: rgb(51, 51, 51);
}
.icon-component-choice .path1:before {
content: "\e95b";
color: rgb(212, 212, 212);
}
.icon-component-choice .path2:before {
content: "\e95c";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-media-excel .path1:before {
content: "\e95d";
color: rgb(0, 151, 42);
}
.icon-media-excel .path2:before {
content: "\e95e";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-media-excel .path3:before {
content: "\e95f";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-media-ppt .path1:before {
content: "\e960";
color: rgb(255, 91, 98);
}
.icon-media-ppt .path2:before {
content: "\e961";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-media-text .path1:before {
content: "\e962";
color: rgb(175, 155, 235);
}
.icon-media-text .path2:before {
content: "\e963";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-media-text .path3:before {
content: "\e964";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-media-word .path1:before {
content: "\e965";
color: rgb(55, 157, 255);
}
.icon-media-word .path2:before {
content: "\e966";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-media-video1 .path1:before {
content: "\e967";
color: rgb(246, 198, 58);
}
.icon-media-video1 .path2:before {
content: "\e968";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-media-picture .path1:before {
content: "\e969";
color: rgb(219, 55, 157);
}
.icon-media-picture .path2:before {
content: "\e96a";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-media-music .path1:before {
content: "\e989";
color: rgb(126, 158, 216);
}
.icon-media-music .path2:before {
content: "\e98a";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-add-article-default:before {
content: "\e98b";
color: #51cfae;
}
.icon-add-chapter-green .path1:before {
content: "\e98c";
color: rgb(81, 207, 174);
}
.icon-add-chapter-green .path2:before {
content: "\e98d";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-add-component-green .path1:before {
content: "\e98e";
color: rgb(30, 156, 123);
}
.icon-add-component-green .path2:before {
content: "\e98f";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-refresh-preview:before {
content: "\e913";
color: #fff;
}
.icon-nav__languagepicker-btn:before {
content: "\e90f";
color: #6e6e6e;
}
.icon-nav__back-btn:before {
content: "\e910";
color: #6e6e6e;
}
.icon-nav__drawer-btn:before {
content: "\e912";
color: #6e6e6e;
}
.icon-horizontally-layout-custom:before {
content: "\e90d";
color: #a1a1a1;
}
.icon-grid-layout-custom:before {
content: "\e90e";
color: #a1a1a1;
}
.icon-edit-thin:before {
content: "\e977";
color: #fff;
}
.icon-del-thin:before {
content: "\e978";
color: #fff;
}
.icon-copy-thin:before {
content: "\e979";
color: #fff;
}
.icon-edit-black:before {
content: "\e927";
}
.icon-language-gray:before {
content: "\e976";
color: #999;
}
.icon-tree-content:before {
content: "\e924";
color: #999;
}
.icon-remove-picture:before {
content: "\e974";
color: #e74362;
}
.icon-media-others:before {
content: "\e96e";
color: #999;
}
.icon-media-video:before {
content: "\e971";
color: #999;
}
.icon-media-image:before {
content: "\e972";
color: #999;
}
.icon-media-audio:before {
content: "\e973";
color: #999;
}
.icon-add-chapter-red:before {
content: "\e941";
color: #c20001;
}
.icon-component-blank1 .path1:before {
content: "\e944";
color: rgb(204, 204, 204);
}
.icon-component-blank1 .path2:before {
content: "\e96d";
margin-left: -1em;
color: rgb(51, 51, 51);
}
.icon-theme-default .path1:before {
content: "\e91a";
color: rgb(228, 228, 228);
}
.icon-theme-default .path2:before {
content: "\e91b";
margin-left: -0.875em;
color: rgb(34, 34, 34);
}
.icon-theme-default .path3:before {
content: "\e91e";
margin-left: -0.875em;
color: rgb(34, 34, 34);
}
.icon-page-active:before {
content: "\e91f";
color: #e74362;
}
.icon-search:before {
content: "\e900";
}
.icon-add-user:before {
content: "\e901";
}
.icon-tag:before {
content: "\e902";
}
.icon-exit:before {
content: "\e903";
}
.icon-create-course .path1:before {
content: "\e904";
color: rgb(51, 51, 51);
}
.icon-create-course .path2:before {
content: "\e905";
margin-left: -1em;
color: rgb(51, 51, 51);
}
.icon-create-course .path3:before {
content: "\e906";
margin-left: -1em;
color: rgb(231, 67, 98);
}
.icon-import-course .path1:before {
content: "\e907";
color: rgb(51, 51, 51);
}
.icon-import-course .path2:before {
content: "\e908";
margin-left: -1em;
color: rgb(231, 67, 98);
}
.icon-check-symbol:before {
content: "\e909";
color: #e74362;
}
.icon-user-community:before {
content: "\e90a";
color: #999;
}
.icon-whitebg-edit:before {
content: "\e90b";
color: #fff;
}
.icon-gray-more:before {
content: "\e90c";
color: #d8d8d8;
}
.icon-horizontally-layout-selected:before {
content: "\e911";
color: #e74362;
}
.icon-grid-layout-selected:before {
content: "\e917";
color: #e74362;
}
.icon-gray-down-arrow:before {
content: "\e918";
color: #979797;
}
.icon-gray-up-arrow:before {
content: "\e919";
}
.icon-shanglajiantou:before {
content: "\ea20";
}
.icon-xialajiantou:before {
content: "\ea21";
}
.icon-temp-more-down:before {
content: "\ea1a";
color: #e74362;
}
.icon-temp-more-up:before {
content: "\ea1b";
color: #e74362;
}
.icon-share-kx:before {
content: "\ea1c";
color: #e74362;
}
.icon-two-right:before {
content: "\ea1d";
color: #e74362;
}
.icon-select-fw .path1:before {
content: "\ea1e";
color: rgb(217, 217, 217);
}
.icon-select-fw .path2:before {
content: "\ea1f";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-share-select:before {
content: "\ea17";
color: #fff;
}
.icon-share-rili:before {
content: "\ea18";
color: #bfbfbf;
}
.icon-share-suo:before {
content: "\ea19";
color: #595959;
}
.icon-share-del:before {
content: "\ea11";
color: #8c8c8c;
}
.icon-share-del-active:before {
content: "\ea12";
color: #e74362;
}
.icon-share-edit-active:before {
content: "\ea13";
color: #8c8c8c;
}
.icon-share-edit:before {
content: "\ea14";
color: #d4d4d4;
}
.icon-share-fail:before {
content: "\ea15";
color: #fff;
}
.icon-share-svg:before {
content: "\ea16";
}
.icon-upgrade-remind:before {
content: "\ea0c";
color: #ff4d4f;
}
.icon-upgrade-win:before {
content: "\ea0d";
color: #fff;
}
.icon-eye-menu-hide:before {
content: "\e93b";
color: #fff;
}
.icon-add-content-page .path1:before {
content: "\e93c";
color: rgb(34, 34, 34);
}
.icon-add-content-page .path2:before {
content: "\e93d";
margin-left: -1em;
color: rgb(81, 207, 174);
}
.icon-add-content-page .path3:before {
content: "\e93e";
margin-left: -1em;
color: rgb(81, 207, 174);
}
.icon-add-content-page .path4:before {
content: "\e992";
margin-left: -1em;
color: rgb(34, 34, 34);
}
.icon-eye-menu-show:before {
content: "\e993";
color: #fff;
}
.icon-color_null .path1:before {
content: "\e914";
color: rgb(250, 250, 250);
}
.icon-color_null .path2:before {
content: "\e915";
margin-left: -1em;
color: rgb(250, 250, 250);
}
.icon-color_null .path3:before {
content: "\e916";
margin-left: -1em;
color: rgb(250, 250, 250);
}
.icon-color_null .path4:before {
content: "\e97a";
margin-left: -1em;
color: rgb(250, 250, 250);
}
.icon-color_null .path5:before {
content: "\e97b";
margin-left: -1em;
color: rgb(237, 237, 237);
}
.icon-color_null .path6:before {
content: "\e97c";
margin-left: -1em;
color: rgb(237, 237, 237);
}
.icon-color_null .path7:before {
content: "\e97d";
margin-left: -1em;
color: rgb(237, 237, 237);
}
.icon-color_null .path8:before {
content: "\e97e";
margin-left: -1em;
color: rgb(237, 237, 237);
}
.icon-color_null .path9:before {
content: "\e97f";
margin-left: -1em;
color: rgb(250, 250, 250);
}
.icon-color_null .path10:before {
content: "\e980";
margin-left: -1em;
color: rgb(250, 250, 250);
}
.icon-color_null .path11:before {
content: "\e981";
margin-left: -1em;
color: rgb(250, 250, 250);
}
.icon-color_null .path12:before {
content: "\e982";
margin-left: -1em;
color: rgb(250, 250, 250);
}
.icon-color_null .path13:before {
content: "\e983";
margin-left: -1em;
color: rgb(237, 237, 237);
}
.icon-color_null .path14:before {
content: "\e984";
margin-left: -1em;
color: rgb(237, 237, 237);
}
.icon-color_null .path15:before {
content: "\e985";
margin-left: -1em;
color: rgb(237, 237, 237);
}
.icon-color_null .path16:before {
content: "\e986";
margin-left: -1em;
color: rgb(237, 237, 237);
}
.icon-color_null .path17:before {
content: "\e987";
margin-left: -1em;
color: rgb(231, 67, 98);
}
.icon-color_null .path18:before {
content: "\e988";
margin-left: -1em;
color: rgb(212, 212, 212);
}
.icon-tree-folder4:before {
content: "\e975";
}
.icon-move-up:before {
content: "\e923";
}
.icon-move-down:before {
content: "\e926";
}
.icon-page-copy:before {
content: "\e92b";
}
.icon-menu-del:before {
content: "\e92c";
}
.icon-selected-white:before {
content: "\e92d";
color: #fff;
}
.icon-multiple:before {
content: "\e92e";
color: #e74362;
}
.icon-global-setting1 .path1:before {
content: "\e92f";
color: rgb(255, 201, 211);
}
.icon-global-setting1 .path2:before {
content: "\e930";
margin-left: -1em;
color: rgb(0, 0, 0);
}
.icon-publish .path1:before {
content: "\e931";
color: rgb(255, 201, 211);
}
.icon-publish .path2:before {
content: "\e932";
margin-left: -1em;
color: rgb(0, 0, 0);
}
.icon-share:before {
content: "\e933";
color: #e74362;
}
.icon-preview:before {
content: "\e934";
color: #fff;
}
.icon-theme-active .path1:before {
content: "\e935";
color: rgb(255, 201, 211);
}
.icon-theme-active .path2:before {
content: "\e936";
margin-left: -1em;
color: rgb(231, 67, 98);
}
.icon-theme-active .path3:before {
content: "\e937";
margin-left: -1em;
color: rgb(231, 67, 98);
}
.icon-page-default:before {
content: "\e938";
}
.icon-add-theme-page .path1:before {
content: "\e93f";
color: rgb(0, 0, 0);
}
.icon-add-theme-page .path2:before {
content: "\e940";
margin-left: -1em;
color: rgb(231, 67, 98);
}
.icon-add-component-black .path1:before {
content: "\e942";
color: rgb(0, 0, 0);
}
.icon-add-component-black .path2:before {
content: "\e943";
margin-left: -1em;
color: rgb(255, 255, 255);
}
.icon-more-black:before {
content: "\e96b";
}
.icon-arrow-right-blue:before {
content: "\e96c";
color: #4a90e2;
}
.icon-course-add:before {
content: "\e91c";
}
.icon-close-popup:before {
content: "\e91d";
}
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 人 到此讨论。请谨慎行事。
请先完成此评论的编辑!
请 注册 或者 后发表评论