first commit
1
website/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
217f21b5-347e-4f33-a65b-393510a3aad4
|
||||
1
website/css/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
21346b34-b71b-4b9b-ad37-e55a12c45f97
|
||||
33
website/css/clear.css
Normal file
@@ -0,0 +1,33 @@
|
||||
body,ul,li,p,h1,h2,h3,h4,h5,h6 {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
font-size: 14px;
|
||||
font-weight: normal;
|
||||
text-decoration: none;
|
||||
font-family: "微软雅黑";
|
||||
color: #222222;
|
||||
}
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
input, video {
|
||||
outline: none;
|
||||
border: none;
|
||||
}
|
||||
|
||||
video::-webkit-media-controls-panel{
|
||||
background: none !important;
|
||||
}
|
||||
|
||||
video::-webkit-media-controls-volume-control-container {
|
||||
display: none !important;
|
||||
}
|
||||
BIN
website/css/icomoon.ttf
Normal file
170
website/css/index.css
Normal file
@@ -0,0 +1,170 @@
|
||||
.header {
|
||||
background: var(--background);
|
||||
height: 1325px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.header .logo {
|
||||
width: 100px;
|
||||
margin-top: 50px;
|
||||
}
|
||||
|
||||
.header .desc {
|
||||
color: #fff;
|
||||
font-size: 23px;
|
||||
line-height: 47px;
|
||||
margin-top: 10px;
|
||||
margin-bottom: 40px;
|
||||
font-family: "title";
|
||||
}
|
||||
|
||||
.header .banner_img {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.header .desc_tips {
|
||||
width: 915px;
|
||||
margin: 0 auto;
|
||||
font-family: "desc";
|
||||
font-size: var(--decSize);
|
||||
color: #fff;
|
||||
font-weight: 100;
|
||||
line-height: 36px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
|
||||
.header .down {
|
||||
width: 120px;
|
||||
height: 42px;
|
||||
text-align: center;
|
||||
background: #4072e1;
|
||||
color: #fff;
|
||||
line-height: 42px;
|
||||
border-radius: 25px;
|
||||
margin: 0 auto;
|
||||
cursor: pointer;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
.header .support {
|
||||
font-size: 12px;
|
||||
color: #b1b1b1;
|
||||
font-weight: 100;
|
||||
}
|
||||
|
||||
.content .item {
|
||||
|
||||
}
|
||||
|
||||
.item .title {
|
||||
font-size: var(--titleSize);
|
||||
color: #000;
|
||||
font-weight: 600;
|
||||
font-family: "title";
|
||||
line-height: 68px;
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.item .desc {
|
||||
font-size: var(--decSize);
|
||||
color: #000;
|
||||
font-weight: 100;
|
||||
font-family: "desc";
|
||||
margin-bottom: 20px;
|
||||
line-height: 34px;
|
||||
}
|
||||
|
||||
.item .demonstration {
|
||||
width: 100%;
|
||||
position: relative;
|
||||
background: url("../img/item_back.png");
|
||||
background-size: cover;
|
||||
height: 683px;
|
||||
left: -112px;
|
||||
}
|
||||
|
||||
.item .demonstration video {
|
||||
width: 940px;
|
||||
height: 590px;
|
||||
position: absolute;
|
||||
left: 129px;
|
||||
top: 37px;
|
||||
}
|
||||
|
||||
.base {
|
||||
background: linear-gradient(484deg, rgba(139, 95, 224, 1) 0%, rgba(104, 159, 232, 1) 100%);
|
||||
}
|
||||
|
||||
.base .title,
|
||||
.base .desc,
|
||||
.theme .desc,
|
||||
.tray .title,
|
||||
.tray .desc{
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.core .title {
|
||||
color: #eb1d4e;
|
||||
}
|
||||
|
||||
.core .demonstration {
|
||||
background: url("../img/core_back.png");
|
||||
background-size: cover;
|
||||
left: -50px;
|
||||
height: 1007px;
|
||||
}
|
||||
|
||||
.core video {
|
||||
width: 96% !important;
|
||||
height: 647px !important;
|
||||
left: 33px !important;
|
||||
object-fit: fill;
|
||||
}
|
||||
|
||||
.theme {
|
||||
background: #1a1a1a;
|
||||
}
|
||||
|
||||
|
||||
.theme .title {
|
||||
color: #4cb050 !important;
|
||||
text-shadow: 238px -64px 2px #2c2b2bb3;
|
||||
}
|
||||
|
||||
.theme .title span {
|
||||
color: #b45dc3 !important;
|
||||
}
|
||||
|
||||
.theme .demonstration {
|
||||
background: url("../img/theme.png");
|
||||
background-size: cover;
|
||||
left: -50px;
|
||||
}
|
||||
|
||||
.theme .padding {
|
||||
padding-bottom: 0 !important;
|
||||
}
|
||||
|
||||
.tray {
|
||||
background: var(--background);
|
||||
}
|
||||
.tray .demonstration {
|
||||
background: url("../img/tray.png");
|
||||
background-size: contain;
|
||||
left: -50px;
|
||||
width: 71.6% !important;
|
||||
}
|
||||
|
||||
.contact {
|
||||
background: #efefef;
|
||||
}
|
||||
.contact ul {
|
||||
margin-top: 12px;
|
||||
padding-left: 15px;
|
||||
}
|
||||
.contact ul li {
|
||||
margin-bottom: 10px;
|
||||
font-size: 16px;
|
||||
font-family: "desc";
|
||||
}
|
||||
32
website/css/public.css
Normal file
@@ -0,0 +1,32 @@
|
||||
@font-face {
|
||||
font-family: "title";
|
||||
src: url("https://13315641.s21i.faiusr.com/76/1/ABUIudysBhBMGAAg7sPB_AUo2L3_RA") format("truetype");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "desc";
|
||||
src: url("https://13315641.s21i.faiusr.com/76/1/ABUIudysBhBMGAAg2e_fgQYomsuqwgE") format("truetype");
|
||||
font-weight: normal;
|
||||
font-style: normal;
|
||||
}
|
||||
|
||||
:root {
|
||||
/*背景色*/
|
||||
--background: rgba(0, 0, 0, 1);
|
||||
/*标题颜色*/
|
||||
--titleColor: rgb(0, 0, 0);
|
||||
--titleSize: 48px;
|
||||
--decSize: 18px;
|
||||
}
|
||||
|
||||
.auto {
|
||||
width: 1200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
.padding {
|
||||
padding-top: 110px;
|
||||
padding-bottom: 60px;
|
||||
}
|
||||
1
website/img/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
e14eef18-622d-470c-a1ca-f276fe942daf
|
||||
BIN
website/img/banner_img.png
Normal file
|
After Width: | Height: | Size: 520 KiB |
BIN
website/img/base.mp4
Normal file
BIN
website/img/core.mp4
Normal file
BIN
website/img/core_back.png
Normal file
|
After Width: | Height: | Size: 68 KiB |
1
website/img/doc/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
6b83670c-4b35-4f2f-903e-149de982ee1f
|
||||
BIN
website/img/doc/install-min.png
Normal file
|
After Width: | Height: | Size: 1.9 MiB |
BIN
website/img/doc/main-min.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
website/img/doc/package-min.png
Normal file
|
After Width: | Height: | Size: 1.7 MiB |
BIN
website/img/doc/setting-min.png
Normal file
|
After Width: | Height: | Size: 1.3 MiB |
BIN
website/img/import.mp4
Normal file
BIN
website/img/item_back.png
Normal file
|
After Width: | Height: | Size: 599 KiB |
BIN
website/img/item_other.png
Normal file
|
After Width: | Height: | Size: 360 KiB |
BIN
website/img/logo.png
Normal file
|
After Width: | Height: | Size: 60 KiB |
BIN
website/img/theme.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
BIN
website/img/tray.png
Normal file
|
After Width: | Height: | Size: 1.4 MiB |
112
website/index.html
Normal file
@@ -0,0 +1,112 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>EasyProject | 前端项目管理工具</title>
|
||||
<link rel="shortcut icon" href="./img/logo.png">
|
||||
<link rel="stylesheet" href="./css/clear.css">
|
||||
<link rel="stylesheet" href="./css/public.css">
|
||||
<link rel="stylesheet" href="./css/index.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/animate.css/4.1.1/animate.min.css"/>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<div class="auto">
|
||||
<img class="logo" src="./img/logo.png"/>
|
||||
<div class="desc">导入前端项目,帮您将零碎零散的前端项目进行统一管理</div>
|
||||
<img class="banner_img" src="./img/banner_img.png" alt="">
|
||||
<div class="desc_tips">
|
||||
<div>EasyProject 是 MacOS 平台上一款前端项目管理,配置工具。</div>
|
||||
<div>导入删除项目、实时编辑 package.json、一键启停项目、复制终端日志、一键更新,删除,安装,查看依赖、更换项目图片、自定义背景,模糊,透明个性设置......等众多丰富功能满足你的需求。</div>
|
||||
<div>欢迎您下载体验!</div>
|
||||
</div>
|
||||
<div class="down"> MacOS 下载 </div>
|
||||
<div class="support">*支持 Apple M1 和 Intel 芯片</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content">
|
||||
<!--导入项目-->
|
||||
<div class="auto">
|
||||
<div class="padding import item">
|
||||
<div class="title">一键导入项目,<br>简单快速、无需等待。</div>
|
||||
<div class="desc">点击【导入项目】,选择本地具有 package.json 文件的项目,注意:支持所有 前端 和 Nodejs.js项目<br>一次导入永久有效,除非您选择移除项目。</div>
|
||||
<div class="demonstration wow animate__animated animate__backInLeft">
|
||||
<video src="./img/import.mp4" oncontextmenu="return false" controlslist="nodownload noplaybackrate" disablePictureInPicture controls muted></video>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--主题功能-->
|
||||
<div class="theme">
|
||||
<div class="auto">
|
||||
<div class="padding item">
|
||||
<div class="title">个性张扬<br><span>要效率也要颜值</span></div>
|
||||
<div class="desc">多种内置配置方案和默认图片主题。<br>不够?<br>支持设置 本地&网络 图片作为主题,自定义 文字颜色&激活色。你的个性你自己做主!</div>
|
||||
<div class="demonstration wow animate__animated animate__bounce"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--核心项目-->
|
||||
<div class="auto">
|
||||
<div class="padding core item">
|
||||
<div class="title">轻松自如的管理众多项目,<br>省下的时间何不摸鱼。</div>
|
||||
<div class="desc">进入项目主页,您可以使用【配置】编辑项目的 package.json(实时同步到您本地文件哦) <br>
|
||||
或是选择【任务】来随意启动停止服务,亦或使用【依赖】来轻松处理依赖关系,查看依赖文档等..</div>
|
||||
<div class="demonstration wow animate__animated animate__slideInUp">
|
||||
<video src="./img/core.mp4" oncontextmenu="return false" controlslist="nodownload noplaybackrate" disablePictureInPicture controls muted></video>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--主题功能-->
|
||||
<div class="tray">
|
||||
<div class="auto">
|
||||
<div class="padding item">
|
||||
<div class="title">操作便捷,选择更多</div>
|
||||
<div class="desc">支持TouchBar,顶部菜单栏<br> 如果不喜欢频繁切换应用,您还可以通过点击状态栏上的图标选择【隐藏Dock】,然后关闭程序,纯粹作为状态栏应用来使用。</div>
|
||||
<div class="demonstration wow animate__animated animate__bounce"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--基础功能-->
|
||||
<div class="base">
|
||||
<div class="auto">
|
||||
<div class="padding item">
|
||||
<div class="title">众多便捷功能<br>让您的开发效率不断提升</div>
|
||||
<div class="desc">可以一键在资源管理器中打开项目、为项目打开终端、修改项目图标,重命名项目、从本地移除等</div>
|
||||
<div class="demonstration wow animate__animated animate__fadeInDown">
|
||||
<video src="./img/base.mp4" oncontextmenu="return false" controlslist="nodownload noplaybackrate" disablePictureInPicture controls muted></video>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
<!--意见反馈-->
|
||||
<div class="contact">
|
||||
<div class="auto">
|
||||
<div class="padding item">
|
||||
<div class="title">联系作者</div>
|
||||
<div class="desc">有任何问题请加QQ联系: 2271608011</div>
|
||||
<!-- <h2>待实现功能:</h2>-->
|
||||
<!-- <ul>-->
|
||||
<!-- <li>1: 把当前正在使用项目的所有命令放到Touchbar上,可以在Touchbar上启停。</li>-->
|
||||
<!-- <li>2: 把项目命令运行时的内存占用,CPU占用显示在顶部菜单栏。</li>-->
|
||||
<!-- <li>3: 设置里面还需增加个 选择包管理工具的select,现在默认用的npm,可以选cpm,npm,yarn,pnpm。</li>-->
|
||||
<!-- <li>4: 优化未完成的页面样式和细节。</li>-->
|
||||
<!-- <li>5: 修改框架创建窗口的数据存储方式,让升级弹窗基于BrowserWindow实现。</li>-->
|
||||
<!-- <li>6: 增加一键停止所有项目命令的功能,方便在项目较多时一键启停</li>-->
|
||||
<!-- </ul>-->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="footer"></div>
|
||||
</body>
|
||||
<script src="https://cdn.bootcdn.net/ajax/libs/wow/1.1.2/wow.min.js"></script>
|
||||
<script src="./js/index.js"></script>
|
||||
</html>
|
||||
1
website/js/.pydio
Normal file
@@ -0,0 +1 @@
|
||||
3b4e6f1e-44db-452f-af67-af56350a8d37
|
||||
39
website/js/index.js
Normal file
@@ -0,0 +1,39 @@
|
||||
class Index {
|
||||
constructor() {
|
||||
// 下载地址
|
||||
this.newDownUrl = ""
|
||||
this.getLatestReleases();
|
||||
this.initWow();
|
||||
}
|
||||
|
||||
async initWow() {
|
||||
new WOW({
|
||||
boxClass: 'wow', // 需要执行动画的元素的类名
|
||||
animateClass: 'animate__animated', // animation.css 动画类名
|
||||
offset: 0, // 设置滚动触发动画的距离(相对于底部)
|
||||
mobile: true, // 是否在移动设备执行动画
|
||||
live: true // 异步加载的内容持续检测
|
||||
}).init();
|
||||
}
|
||||
|
||||
downApp() {
|
||||
this.$(".down").onclick = () => {
|
||||
open(this.newDownUrl)
|
||||
}
|
||||
}
|
||||
|
||||
async getLatestReleases() {
|
||||
let data = await fetch("https://api.github.com/repos/helpcode/EasyProject/releases/latest", {
|
||||
headers: { 'Authorization': 'Basic aGVscGNvZGU6Z2hwXzBEZmx3cDFQY2l6VVRNOFkxTTNBMDZxQlhTZGpvSjRHak4xMw==' }
|
||||
});
|
||||
let res = await data.json();
|
||||
this.newDownUrl = res.assets[0].browser_download_url;
|
||||
this.downApp();
|
||||
}
|
||||
|
||||
$ (className) {
|
||||
return document.querySelector(className)
|
||||
}
|
||||
}
|
||||
|
||||
new Index();
|
||||