Compare commits

...

128 Commits

Author SHA1 Message Date
kuaifan
f09b864e30 perf: 仅客户端或Chrome浏览器支持主题功能 2022-01-22 09:07:13 +08:00
kuaifan
7ce15d5a71 优化代码 2022-01-21 23:31:01 +08:00
kuaifan
cc767b164e 优化工作报告 2022-01-21 23:16:50 +08:00
kuaifan
230ff75c0b 优化搜索栏前端 2022-01-21 21:56:27 +08:00
kuaifan
da39739fb5 优化工作报告前端 2022-01-21 21:49:27 +08:00
kuaifan
c33be22057 Merge branch 'develop' of ssh://git.gezi.vip:6006/gx/dootask into develop
# Conflicts:
#	resources/assets/js/pages/manage/components/ReportDetail.vue
#	resources/assets/js/pages/manage/components/ReportEdit.vue
2022-01-21 21:04:28 +08:00
kuaifan
902f35d21b 优化前端代码 2022-01-21 21:02:17 +08:00
韦荣超
d8426780d2 build: a1aaf90d2e 2022-01-21 21:01:08 +08:00
韦荣超
a1aaf90d2e fix: 【工作报告】新增报告初始化数据不导入已有时间点数据 2022-01-21 20:59:28 +08:00
韦荣超
53ed4d4072 build: da75554447 2022-01-21 19:59:44 +08:00
韦荣超
da75554447 fix: 【工作报告】详情页面前端报错修改 2022-01-21 19:58:03 +08:00
韦荣超
04998d6a60 Merge remote-tracking branch 'origin/develop' into develop
# Conflicts:
#	public/js/app.js
2022-01-21 18:10:53 +08:00
韦荣超
3d88a28465 build: 2dd8f75d52 2022-01-21 18:10:24 +08:00
韦荣超
2dd8f75d52 fix: 【工作报告】填写内容--汇报类型切换提交提示错误问题 2022-01-21 18:08:48 +08:00
kuaifan
7a4bdd0ada no message 2022-01-21 17:59:08 +08:00
韦荣超
0ed0b5ee43 build: 2475ee90ee 2022-01-21 17:41:09 +08:00
韦荣超
2475ee90ee perf: 工作报告优化 2022-01-21 17:39:10 +08:00
kuaifan
511c19d5aa 优化前端代码 2022-01-21 14:49:20 +08:00
韦荣超
c4fed86f1e Merge remote-tracking branch 'origin/develop' into develop 2022-01-21 14:26:32 +08:00
韦荣超
18904ebbaa perf: 规范代码 2022-01-21 14:26:17 +08:00
kuaifan
da3672e6be 优化前端代码 2022-01-21 14:24:31 +08:00
kuaifan
52e9836bbf build 2022-01-21 14:07:14 +08:00
kuaifan
3201d90a53 格式化代码 2022-01-21 14:07:02 +08:00
kuaifan
cd9c1d9660 Merge branch 'master' of github.com:kuaifan/dootask into develop 2022-01-21 13:54:58 +08:00
kuaifan
0f54a1f638 no message 2022-01-21 13:50:41 +08:00
kuaifan
713316f87c 优化暗黑皮肤 2022-01-21 13:50:23 +08:00
kuaifan
88d38ba8d1 fix: 发送图片显示错误 2022-01-21 13:45:33 +08:00
kuaifan
164f3275f4 优化暗黑皮肤 2022-01-21 13:13:07 +08:00
韦荣超
a44d6b8b79 build: 942cf57c36 2022-01-21 12:10:48 +08:00
韦荣超
942cf57c36 perf: 工作报告优化 2022-01-21 12:06:26 +08:00
kuaifan
18bc75242b fix: 项目负责人还原已经回档的自己不是任务负责人的任务时,无法还原,且会提示错误 2022-01-21 11:10:29 +08:00
kuaifan
3b38c8b408 perf: 共享文件删除、移动改为仅限所有者或创建者操作 2022-01-21 10:00:31 +08:00
kuaifan
22e718423e 优化暗黑模式 2022-01-21 01:38:05 +08:00
kuaifan
0dc0e7226e 调整主题色 2022-01-20 22:59:51 +08:00
kuaifan
8069784198 no message 2022-01-20 00:38:30 +08:00
kuaifan
a9e71567fe Merge branch 'master' of github.com:kuaifan/dootask into develop
# Conflicts:
#	electron/package.json
#	package.json
#	public/css/app.css
#	public/js/app.js
#	public/js/build/146.js
#	public/js/build/169.js
#	public/js/build/631.js
#	public/js/build/679.js
#	public/js/build/700.js
#	public/js/build/728.js
#	public/js/build/802.js
#	public/js/build/823.js
#	public/js/build/954.js
#	resources/assets/js/pages/manage.vue
2022-01-20 00:33:05 +08:00
kuaifan
0fae151731 build 2022-01-20 00:20:06 +08:00
kuaifan
3bb0b55955 feat: 添加暗黑模式 2022-01-20 00:19:00 +08:00
kuaifan
071ca80bae fix: 无法读取 /www/.env:没有那个文件或目录 2022-01-18 22:52:43 +08:00
kuaifan
1abd78305f Merge branch 'master' of github.com:kuaifan/dootask into develop
# Conflicts:
#	public/css/app.css
#	public/js/app.js
#	public/js/build/120.js
#	public/js/build/120.js.LICENSE.txt
#	public/js/build/198.js
#	public/js/build/494.js
#	public/js/build/79.js
#	public/js/build/793.js
#	public/js/build/875.js
#	public/js/build/890.js
#	resources/assets/js/components/DrawerOverlay.vue
2022-01-17 17:13:12 +08:00
kuaifan
e1ef9a94af no message 2022-01-17 00:36:19 +08:00
kuaifan
9f62023175 build 2022-01-17 00:12:34 +08:00
kuaifan
c9a6d2f5a8 perf: 优化安装脚本 2022-01-16 22:03:50 +08:00
kuaifan
07fca8b895 fix: 最大只能上传64M的问题 2022-01-16 14:53:35 +08:00
kuaifan
1a65c4a579 修复客户端 2022-01-16 01:11:19 +08:00
kuaifan
7a28a8950c 修复前端编译 2022-01-16 00:43:05 +08:00
kuaifan
89e8b0d8b9 perf: 新增工作流初始化数据 2022-01-16 00:05:49 +08:00
kuaifan
74803df5bd no message 2022-01-15 23:37:29 +08:00
kuaifan
2a8e030fb4 perf: 优化客户端自动更新 2022-01-15 23:36:21 +08:00
kuaifan
c6ebe994cc build 2022-01-15 12:53:21 +08:00
kuaifan
be3677cfa8 优化DrawerOverlay组件支持底部显示动态改变尺寸 2022-01-15 12:16:50 +08:00
kuaifan
0c2e56271b 优化DrawerOverlay组件 2022-01-15 00:06:40 +08:00
kuaifan
b019d40009 fix: websocket获取链接失败 2022-01-14 23:15:59 +08:00
kuaifan
361484be95 build 2022-01-14 18:12:33 +08:00
kuaifan
f0ce6cc28f build 2022-01-14 17:59:07 +08:00
kuaifan
ede298a142 perf: 工作汇报样式 2022-01-14 17:57:51 +08:00
kuaifan
aca1a4d34c 优化ws返回的地址 2022-01-14 16:56:45 +08:00
韦荣超
e63c5c074c build: 0d0b5dd552 2022-01-14 16:46:30 +08:00
韦荣超
0d0b5dd552 fix: 【工作报告】填写'提交'按钮位置被挤压修改 2022-01-14 16:43:13 +08:00
kuaifan
08704e7f60 优化报错 2022-01-14 16:35:00 +08:00
韦荣超
d48ed18102 feat: 【工作报告】功能 2022-01-14 15:55:26 +08:00
kuaifan
3602acd187 build 2022-01-14 14:05:09 +08:00
kuaifan
ad477eb608 优化文案 2022-01-14 14:01:56 +08:00
kuaifan
0a393845e9 优化任务详情窗口聊天 2022-01-14 13:52:10 +08:00
kuaifan
59b98209ac 优化websocket重连后的逻辑 2022-01-14 13:46:22 +08:00
kuaifan
ac26713f86 优化查询代码 2022-01-14 12:19:50 +08:00
kuaifan
9250ef6f65 fix: 查看日历页面部分任务会不见 2022-01-14 10:23:43 +08:00
kuaifan
cabbeb07d0 优化websocket重连后的逻辑 2022-01-14 10:23:23 +08:00
kuaifan
43171645c0 build 2022-01-14 00:04:28 +08:00
kuaifan
79c1484288 新增优化websocket重连后刷新项目、对话、仪表盘数据 2022-01-13 23:59:38 +08:00
kuaifan
e730875db3 perf: 客户端更新提示 2022-01-13 23:55:07 +08:00
kuaifan
18e9fb99b5 更新nginx持续握手时间 2022-01-13 23:53:29 +08:00
kuaifan
fd82b9b555 build 2022-01-13 19:42:41 +08:00
kuaifan
5c3bf0067e 优化日志显示 2022-01-13 19:19:58 +08:00
kuaifan
ac6b90c986 fix: 任务流转会出错 2022-01-13 18:39:57 +08:00
kuaifan
7dcd8b29fc build 2022-01-13 11:50:54 +08:00
kuaifan
d951da2c02 fix: 修复客户端旧版本更新任务出现已完成列表中有状态为“进行中”的情况 2022-01-13 11:48:33 +08:00
kuaifan
605aee35c4 perf: 发送文件ws返回错误地址 2022-01-13 11:42:01 +08:00
kuaifan
dc1f1985e8 访问接口header加上version、platform 2022-01-13 11:22:46 +08:00
kuaifan
cebcc26baf 优化项目日志 2022-01-13 11:11:29 +08:00
kuaifan
75a12fc6f5 优化日志 2022-01-13 09:00:39 +08:00
kuaifan
a3e0d89eb0 修改任务状态判断是否项目负责人直接查表 2022-01-13 00:32:35 +08:00
kuaifan
9594cc674f no message 2022-01-13 00:30:36 +08:00
kuaifan
87cdee4fe8 pref: 优化任务日志的显示 2022-01-13 00:30:36 +08:00
kuaifan
1df55b78c2 perf: 项目页面点击搜索按钮再点击弹出的搜索框窗会隐藏 2022-01-13 00:30:36 +08:00
kuaifan
f7820a23be no message 2022-01-12 16:34:16 +08:00
kuaifan
f80b9cdca5 feat: 工作流程状态支持仅限状态负责人修改 2022-01-12 16:16:04 +08:00
kuaifan
f2180b22c7 build 2022-01-11 23:23:44 +08:00
kuaifan
a745088213 perf: 任务日志刷新 2022-01-11 23:17:59 +08:00
kuaifan
14be7bd2b1 no msg 2022-01-11 22:58:30 +08:00
kuaifan
d453ea66da 优化登录页按钮 2022-01-11 21:31:23 +08:00
kuaifan
e7ae86e261 feat: 任务流转自动负责人支持转让模式 2022-01-11 20:07:58 +08:00
kuaifan
b7417f41c5 perf: action中错误提醒弱化 2022-01-11 17:54:42 +08:00
kuaifan
9e7aa381ed perf: 手机版无法选择日期范围的问题 2022-01-11 17:47:34 +08:00
kuaifan
b02453e9f4 perf: 手机版无法聊天,输入页面跳动 2022-01-11 17:35:53 +08:00
kuaifan
6b7f8fd31c 优化完成任务标记 2022-01-11 14:18:49 +08:00
kuaifan
4652242d6b build 2022-01-11 12:16:01 +08:00
kuaifan
a47ca2f357 perf: 个人设置显示版本号 2022-01-11 12:13:26 +08:00
kuaifan
e5a1e58159 perf: 完成任务暂时继续显示在我的列表 2022-01-11 12:13:06 +08:00
kuaifan
01a1e34e99 no message 2022-01-11 10:59:47 +08:00
kuaifan
e711220a66 优化自定义服务器 2022-01-11 10:31:37 +08:00
kuaifan
1d20f529a0 no message 2022-01-11 00:28:58 +08:00
kuaifan
79a94d25bd perf: 客户端自动下载新版本更新 2022-01-10 19:27:43 +08:00
kuaifan
92793b8ff8 no message 2022-01-10 00:25:36 +08:00
kuaifan
982024f359 子任务时间在主任务时间内 2022-01-09 20:13:59 +08:00
kuaifan
e851bd4d61 子任务时间大于主任务时主任务自动修改 2022-01-09 18:56:30 +08:00
kuaifan
e4b9383e96 perf: 设置子任务时间时,如果主任务没有时间则自动设置 2022-01-09 18:20:36 +08:00
kuaifan
95ac9aac14 添加任务自动上工作流状态 2022-01-09 17:59:08 +08:00
kuaifan
b895eec69c 初步完成工作流 2022-01-09 17:52:46 +08:00
kuaifan
1fe4e80f82 no msg 2022-01-09 12:56:55 +08:00
kuaifan
eb1f5f2632 perf: 任务操作菜单组件化 2022-01-09 00:09:43 +08:00
kuaifan
114b792300 no message 2022-01-08 21:23:47 +08:00
kuaifan
56a352a9d2 perf: 调整仅项目负责人可以删除任务列表 2022-01-08 17:35:25 +08:00
kuaifan
4c4d60dd83 no message 2022-01-08 17:32:03 +08:00
kuaifan
134ab0fe98 no message 2022-01-08 17:27:30 +08:00
kuaifan
bbd394272f feat: 添加工作流 2022-01-08 17:24:48 +08:00
kuaifan
8a2571f514 no msg 2022-01-08 08:56:29 +08:00
kuaifan
bf15be8144 perf: 领取任务需要设置计划时间 2022-01-08 08:51:34 +08:00
kuaifan
bf6f8de7fa no msg 2022-01-08 00:35:01 +08:00
kuaifan
2e75e6ffb6 后台限制任务负责人、协助人员每项最多不能超过10个 2022-01-07 23:36:05 +08:00
kuaifan
b987be54bf 优化前端变量 2022-01-07 23:28:07 +08:00
kuaifan
533e8a3742 build 2022-01-07 19:12:38 +08:00
kuaifan
9d007e64f6 优化部分相同代码 2022-01-07 18:42:04 +08:00
kuaifan
8ec1578f50 左边底部新增添加任务选项 2022-01-07 18:23:30 +08:00
kuaifan
4e8cc36d3a 显示完成时间 2022-01-07 18:09:22 +08:00
kuaifan
5a64cb2323 替换Tooltip改成ETooltip 2022-01-07 18:09:05 +08:00
kuaifan
b2aba82a1b perf: 任务版本如果只有一个负责人时显示负责人的名字 2022-01-07 17:46:03 +08:00
kuaifan
9d9500ba1b fix: 其他人员添加任务会临时出现在自己的列表中 2022-01-07 17:26:22 +08:00
297 changed files with 16083 additions and 2426 deletions

View File

@@ -5,10 +5,15 @@ English | **[中文文档](./README_CN.md)**
- [Screenshot Preview](README_PREVIEW.md)
- [Demo site](http://www.dootask.com/)
**QQ Group**
Group No.: `546574618`
## Setup
> `Docker` & `Docker Compose v2.0+` must be installed
- `Docker` & `Docker Compose v2.0+` must be installed
- System: `Centos/Debian/Ubuntu/macOS`
- Hardware suggestion: 2 cores and above 2G memory
### Deployment project
@@ -49,18 +54,28 @@ cd dootask
./cmd start
```
### Development compilation
```bash
# Development mode, Mac OS only
./cmd dev
# Production projects, macOS only
./cmd prod
```
### Shortcuts for running command
```bash
# You can do this using the following command
./cmd artisan "your command" // To run a artisan command
./cmd php "your command" // To run a php command
./cmd nginx "your command" // To run a nginx command
./cmd redis "your command" // To run a redis command
./cmd composer "your command" // To run a composer command
./cmd supervisorctl "your command" // To run a supervisorctl command
./cmd test "your command" // To run a phpunit command
./cmd mysql "your command" // To run a mysql command (backup: Backup database, recovery: Restore database)
./cmd artisan "your command" # To run a artisan command
./cmd php "your command" # To run a php command
./cmd nginx "your command" # To run a nginx command
./cmd redis "your command" # To run a redis command
./cmd composer "your command" # To run a composer command
./cmd supervisorctl "your command" # To run a supervisorctl command
./cmd test "your command" # To run a phpunit command
./cmd mysql "your command" # To run a mysql command (backup: Backup database, recovery: Restore database)
```
### NGINX PROXY SSL
@@ -89,6 +104,7 @@ git pull
./cmd uninstall
./cmd install
./cmd mysql recovery
./cmd artisan migrate
```
## Uninstall
@@ -97,7 +113,3 @@ git pull
# Enter directory and run command
./cmd uninstall
```
## Contact us
QQ Group: 546574618

View File

@@ -5,10 +5,15 @@
- [截图预览](README_PREVIEW.md)
- [演示站点](http://www.dootask.com/)
**QQ交流群**
- QQ群号: `546574618`
## 安装程序
> 必须安装 `Docker` 和 `Docker Compose v2.0+`
- 必须安装`Docker``Docker Compose v2.0+`
- 支持环境:`Centos/Debian/Ubuntu/macOS`
- 硬件建议2核2G以上
### 部署项目
@@ -49,18 +54,29 @@ cd dootask
./cmd start
```
### 开发编译
```bash
# 开发模式仅限macOS
./cmd dev
# 编译项目仅限macOS
./cmd prod
```
### 运行命令的快捷方式
```bash
# 你可以使用以下命令来执行
./cmd artisan "your command" // 运行 artisan 命令
./cmd php "your command" // 运行 php 命令
./cmd nginx "your command" // 运行 nginx 命令
./cmd redis "your command" // 运行 redis 命令
./cmd composer "your command" // 运行 composer 命令
./cmd supervisorctl "your command" // 运行 supervisorctl 命令
./cmd test "your command" // 运行 phpunit 命令
./cmd mysql "your command" // 运行 mysql 命令 (backup: 备份数据库recovery: 还原数据库)
./cmd artisan "your command" # 运行 artisan 命令
./cmd php "your command" # 运行 php 命令
./cmd nginx "your command" # 运行 nginx 命令
./cmd redis "your command" # 运行 redis 命令
./cmd composer "your command" # 运行 composer 命令
./cmd supervisorctl "your command" # 运行 supervisorctl 命令
./cmd test "your command" # 运行 phpunit 命令
./cmd mysql "your command" # 运行 mysql 命令 (backup: 备份数据库recovery: 还原数据库)
```
### NGINX 代理 SSL
@@ -89,6 +105,7 @@ git pull
./cmd uninstall
./cmd install
./cmd mysql recovery
./cmd artisan migrate
```
## 卸载项目
@@ -97,7 +114,3 @@ git pull
# 进入项目所在目录,运行以下命令
./cmd uninstall
```
## 联系我们
QQ群号: 546574618

View File

@@ -10,7 +10,7 @@ if (!function_exists('asset_main')) {
if (!function_exists('seeders_at')) {
function seeders_at($data)
{
$diff = time() - strtotime("2021-07-01");
$diff = time() - strtotime("2021-07-02");
$time = strtotime($data) + $diff;
return date("Y-m-d H:i:s", $time);
}

View File

@@ -6,6 +6,8 @@ use App\Exceptions\ApiException;
use App\Models\AbstractModel;
use App\Models\Project;
use App\Models\ProjectColumn;
use App\Models\ProjectFlow;
use App\Models\ProjectFlowItem;
use App\Models\ProjectInvite;
use App\Models\ProjectLog;
use App\Models\ProjectTask;
@@ -184,7 +186,7 @@ class ProjectController extends AbstractController
//
$project = Project::userProject($project_id);
$data = array_merge($project->toArray(), $project->getTaskStatistics($user->userid), [
'project_user' => $project->projectUser
'project_user' => $project->projectUser,
]);
//
return Base::retSuccess('success', $data);
@@ -308,7 +310,9 @@ class ProjectController extends AbstractController
$project = Project::userProject($project_id, true, true);
//
if ($project->name != $name) {
$project->addLog("修改项目名称{$project->name} => {$name}");
$project->addLog("修改项目名称", [
'change' => [$project->name, $name]
]);
$project->name = $name;
}
if ($project->desc != $desc) {
@@ -493,7 +497,7 @@ class ProjectController extends AbstractController
$projectInvite->save();
//
$projectInvite->project->syncDialogUser();
$projectInvite->project->addLog("会员ID" . $user->userid . " 通过邀请链接加入项目");
$projectInvite->project->addLog("通过邀请链接加入项目");
//
$data = $projectInvite->toArray();
$data['already'] = true;
@@ -537,7 +541,7 @@ class ProjectController extends AbstractController
'owner' => 1,
]);
$project->syncDialogUser();
$project->addLog("移交项目给会员ID" . $owner_userid);
$project->addLog("移交项目给", ['userid' => $owner_userid]);
});
//
$project->pushMsg('detail');
@@ -632,7 +636,7 @@ class ProjectController extends AbstractController
$row = ProjectUser::whereProjectId($project->id)->whereUserid($user->userid)->first();
$row?->exitProject();
$project->syncDialogUser();
$project->addLog("会员ID" . $user->userid . " 退出项目");
$project->addLog("退出项目");
$project->pushMsg('delete', null, $user->userid);
});
return Base::retSuccess('退出成功', ['id' => $project->id]);
@@ -822,7 +826,7 @@ class ProjectController extends AbstractController
/**
* @api {get} api/project/column/remove 17. 删除任务列表
*
* @apiDescription 需要token身份
* @apiDescription 需要token身份(限:项目负责人)
* @apiVersion 1.0.0
* @apiGroup project
* @apiName column__remove
@@ -844,7 +848,7 @@ class ProjectController extends AbstractController
return Base::retError('列表不存在');
}
// 项目
Project::userProject($column->project_id);
Project::userProject($column->project_id, true, true);
//
$column->deleteColumn();
return Base::retSuccess('删除成功', ['id' => $column->id]);
@@ -1134,10 +1138,11 @@ class ProjectController extends AbstractController
'project_id' => $project->id,
'column_id' => $column->id,
]));
$data = [
'new_column' => $newColumn,
'task' => ProjectTask::oneTask($task->id),
];
$data = ProjectTask::oneTask($task->id);
if ($newColumn) {
$data = $data->toArray();
$data['new_column'] = $newColumn;
}
$task->pushMsg('add', $data);
return Base::retSuccess('添加成功', $data);
}
@@ -1165,6 +1170,9 @@ class ProjectController extends AbstractController
$name = Request::input('name');
//
$task = ProjectTask::userTask($task_id, true, true);
if ($task->complete_at) {
return Base::retError('主任务已完成无法添加子任务');
}
//
$task = ProjectTask::addTask([
'name' => $name,
@@ -1174,10 +1182,7 @@ class ProjectController extends AbstractController
'times' => [$task->start_at, $task->end_at],
'owner' => [User::userid()]
]);
$data = [
'new_column' => null,
'task' => ProjectTask::oneTask($task->id),
];
$data = ProjectTask::oneTask($task->id);
$task->pushMsg('add', $data);
return Base::retSuccess('添加成功', $data);
}
@@ -1202,6 +1207,7 @@ class ProjectController extends AbstractController
* @apiParam {String} [p_name] 优先级相关(子任务不支持)
* @apiParam {String} [p_color] 优先级相关(子任务不支持)
*
* @apiParam {Number} [flow_item_id] 任务状态工作流状态ID
* @apiParam {String|false} [complete_at] 完成时间2020-01-01 00:00false表示未完成
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
@@ -1217,15 +1223,11 @@ class ProjectController extends AbstractController
//
$task = ProjectTask::userTask($task_id, true, 2);
// 更新任务
$updateProject = false;
$updateContent = false;
$updateSubTask = false;
$task->updateTask($data, $updateProject, $updateContent, $updateSubTask);
$updateMarking = [];
$task->updateTask($data, $updateMarking);
//
$data = ProjectTask::oneTask($task->id)->toArray();
$data['is_update_project'] = $updateProject;
$data['is_update_content'] = $updateContent;
$data['is_update_subtask'] = $updateSubTask;
$data['update_marking'] = $updateMarking ?: json_decode('{}');
$task->pushMsg('update', $data);
//
return Base::retSuccess('修改成功', $data);
@@ -1408,6 +1410,323 @@ class ProjectController extends AbstractController
return Base::retSuccess('删除成功', ['id' => $task->id]);
}
/**
* @api {get} api/project/task/resetfromlog 29. 根据日志重置任务
*
* @apiDescription 需要token身份项目、任务负责人
* @apiVersion 1.0.0
* @apiGroup project
* @apiName task__resetfromlog
*
* @apiParam {Number} task_id 任务ID
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function task__resetfromlog()
{
User::auth();
//
$id = intval(Request::input('id'));
//
$projectLog = ProjectLog::find($id);
if (empty($projectLog) || empty($projectLog->task_id)) {
return Base::retError('记录不存在');
}
//
$task = ProjectTask::userTask($projectLog->task_id, null, true);
//
$record = $projectLog->record;
if ($record['flow'] && is_array($record['flow'])) {
$rawData = $record['flow'];
$newFlowItem = ProjectFlowItem::find(intval($rawData['flow_item_id']));
if (empty($newFlowItem)) {
return Base::retError('流程不存在或已被删除');
}
return AbstractModel::transaction(function() use ($rawData, $task, $newFlowItem) {
$currentFlowItem = $task->flow_item_id ? ProjectFlowItem::find($task->flow_item_id) : null;
//
$task->flow_item_id = $newFlowItem->id;
$task->flow_item_name = $newFlowItem->name;
$task->addLog("重置{任务}状态", [
'change' => [$currentFlowItem?->name, $newFlowItem->name]
]);
//
$updateMarking = [];
$data = array_intersect_key($rawData, array_flip(['complete_at', 'owner', 'assist']));
$task->updateTask($data, $updateMarking);
//
$data = ProjectTask::oneTask($task->id)->toArray();
$data['update_marking'] = $updateMarking ?: json_decode('{}');
$task->pushMsg('update', $data);
//
return Base::retSuccess('重置成功', $data);
});
} else {
return Base::retError('暂不支持此操作');
}
}
/**
* @api {get} api/project/task/flow 29. 任务工作流信息
*
* @apiDescription 需要token身份
* @apiVersion 1.0.0
* @apiGroup project
* @apiName task__flow
*
* @apiParam {Number} task_id 任务ID
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function task__flow()
{
User::auth();
//
$task_id = intval(Request::input('task_id'));
//
$projectTask = ProjectTask::select(['id', 'project_id', 'complete_at', 'flow_item_id', 'flow_item_name'])->find($task_id);
if (empty($projectTask)) {
return Base::retError('任务不存在', [ 'task_id' => $task_id ], -4002);
}
//
$projectFlowItem = $projectTask->flow_item_id ? ProjectFlowItem::with(['projectFlow'])->find($projectTask->flow_item_id) : null;
if ($projectFlowItem?->projectFlow) {
$projectFlow = $projectFlowItem->projectFlow;
} else {
$projectFlow = ProjectFlow::whereProjectId($projectTask->project_id)->orderByDesc('id')->first();
}
if (empty($projectFlow)) {
return Base::retSuccess('success', [
'task_id' => $projectTask->id,
'flow_item_id' => 0,
'turns' => [],
]);
}
//
$turns = ProjectFlowItem::select(['id', 'name', 'status', 'turns'])->whereFlowId($projectFlow->id)->orderBy('sort')->get();
if (empty($projectFlowItem)) {
$data = [
'task_id' => $projectTask->id,
'flow_item_id' => 0,
'turns' => $turns,
];
if ($projectTask->complete_at) {
// 赋一个结束状态
foreach ($turns as $turn) {
if ($turn->status == 'end' || preg_match("/complete|done|完成/i", $turn->name)) {
$data['flow_item_id'] = $turn->id;
break;
}
}
if (empty($data['flow_item_id'])) {
foreach ($turns as $turn) {
if ($turn->status == 'end') {
$data['flow_item_id'] = $turn->id;
break;
}
}
}
} else {
// 赋一个开始状态
foreach ($turns as $turn) {
if ($turn->status == 'start') {
$data['flow_item_id'] = $turn->id;
break;
}
}
}
} else {
$data = [
'task_id' => $projectTask->id,
'flow_item_id' => $projectFlowItem->id,
'turns' => $turns,
];
}
//
return Base::retSuccess('success', $data);
}
/**
* @api {get} api/project/flow/list 29. 工作流列表
*
* @apiDescription 需要token身份项目负责人
* @apiVersion 1.0.0
* @apiGroup project
* @apiName flow__list
*
* @apiParam {Number} project_id 项目ID
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function flow__list()
{
User::auth();
//
$project_id = intval(Request::input('project_id'));
//
$project = Project::userProject($project_id, true, true);
//
$list = ProjectFlow::with(['ProjectFlowItem'])->whereProjectId($project->id)->get();
return Base::retSuccess('success', $list);
}
/**
* @api {post} api/project/flow/save 29. 保存工作流
*
* @apiDescription 需要token身份项目负责人
* @apiVersion 1.0.0
* @apiGroup project
* @apiName flow__save
*
* @apiParam {Number} project_id 项目ID
* @apiParam {Array} flows 工作流数据
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function flow__save()
{
User::auth();
//
$project_id = intval(Base::getContentValue('project_id'));
$flows = Base::getContentValue('flows');
//
if (!is_array($flows)) {
return Base::retError('参数错误');
}
if (count($flows) > 10) {
return Base::retError('流程状态最多不能超过10个');
}
//
$project = Project::userProject($project_id, true, true);
//
return AbstractModel::transaction(function() use ($project, $flows) {
$projectFlow = ProjectFlow::whereProjectId($project->id)->first();
if (empty($projectFlow)) {
$projectFlow = ProjectFlow::createInstance([
'project_id' => $project->id,
'name' => 'Default'
]);
if (!$projectFlow->save()) {
throw new ApiException('工作流创建失败');
}
}
//
$ids = [];
$idc = [];
$hasStart = false;
$hasEnd = false;
foreach ($flows as $item) {
$id = intval($item['id']);
$turns = Base::arrayRetainInt($item['turns'] ?: [], true);
$userids = Base::arrayRetainInt($item['userids'] ?: [], true);
$usertype = trim($item['usertype']);
$userlimit = intval($item['userlimit']);
if ($usertype == 'replace' && empty($userids)) {
throw new ApiException("状态[{$item['name']}]设置错误,设置流转模式时必须填写状态负责人");
}
if ($userlimit && empty($userids)) {
throw new ApiException("状态[{$item['name']}]设置错误,设置限制负责人时必须填写状态负责人");
}
$flow = ProjectFlowItem::updateInsert([
'id' => $id,
'project_id' => $project->id,
'flow_id' => $projectFlow->id,
], [
'name' => trim($item['name']),
'status' => trim($item['status']),
'sort' => intval($item['sort']),
'turns' => $turns,
'userids' => $userids,
'usertype' => trim($item['usertype']),
'userlimit' => $userlimit,
]);
if ($flow) {
$ids[] = $flow->id;
if ($flow->id != $id) {
$idc[$id] = $flow->id;
}
if ($flow->status == 'start') {
$hasStart = true;
}
if ($flow->status == 'end') {
$hasEnd = true;
}
}
}
if (!$hasStart) {
throw new ApiException('至少需要1个开始状态');
}
if (!$hasEnd) {
throw new ApiException('至少需要1个结束状态');
}
ProjectFlowItem::whereFlowId($projectFlow->id)->whereNotIn('id', $ids)->chunk(100, function($list) {
foreach ($list as $item) {
$item->deleteFlowItem();
}
});
//
$projectFlow = ProjectFlow::with(['projectFlowItem'])->whereProjectId($project->id)->find($projectFlow->id);
$itemIds = $projectFlow->projectFlowItem->pluck('id')->toArray();
foreach ($projectFlow->projectFlowItem as $item) {
$turns = $item->turns;
foreach ($idc as $oid => $nid) {
if (in_array($oid, $turns)) {
$turns = array_diff($turns, [$oid]);
$turns[] = $nid;
}
}
if (!in_array($item->id, $turns)) {
$turns[] = $item->id;
}
$turns = array_values(array_filter(array_unique(array_intersect($turns, $itemIds))));
sort($turns);
$item->turns = $turns;
ProjectFlowItem::whereId($item->id)->update([ 'turns' => Base::array2json($turns) ]);
}
return Base::retSuccess('保存成功', $projectFlow);
});
}
/**
* @api {get} api/project/flow/delete 29. 删除工作流
*
* @apiDescription 需要token身份项目负责人
* @apiVersion 1.0.0
* @apiGroup project
* @apiName flow__delete
*
* @apiParam {Number} project_id 项目ID
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function flow__delete()
{
User::auth();
//
$project_id = intval(Request::input('project_id'));
//
$project = Project::userProject($project_id, true, true);
//
return AbstractModel::transaction(function() use ($project) {
ProjectFlow::whereProjectId($project->id)->chunk(100, function($list) {
foreach ($list as $item) {
$item->deleteFlow();
}
});
return Base::retSuccess('删除成功');
});
}
/**
* @api {get} api/project/log/lists 30. 获取项目、任务日志
*
@@ -1433,18 +1752,21 @@ class ProjectController extends AbstractController
$project_id = intval(Request::input('project_id'));
$task_id = intval(Request::input('task_id'));
//
$builder = ProjectLog::with(['user']);
$builder = ProjectLog::select(["*"]);
if ($task_id > 0) {
$task = ProjectTask::userTask($task_id);
$builder->whereTaskId($task->id);
} else {
$project = Project::userProject($project_id);
$builder->whereProjectId($project->id);
$builder->with(['projectTask:id,parent_id,name'])->whereProjectId($project->id);
}
//
$list = $builder->orderByDesc('created_at')->paginate(Base::getPaginate(100, 20));
$list->transform(function (ProjectLog $log) {
$list->transform(function (ProjectLog $log) use ($task_id) {
$timestamp = Carbon::parse($log->created_at)->timestamp;
if ($task_id === 0) {
$log->projectTask?->cancelAppend();
}
$log->time = [
'ymd' => date(date("Y", $timestamp) == date("Y", Base::time()) ? "m-d" : "Y-m-d", $timestamp),
'hi' => date("h:i", $timestamp) ,

View File

@@ -0,0 +1,466 @@
<?php
namespace App\Http\Controllers\Api;
use App\Exceptions\ApiException;
use App\Models\ProjectTask;
use App\Models\Report;
use App\Models\ReportReceive;
use App\Models\User;
use App\Module\Base;
use App\Tasks\PushTask;
use Carbon\Carbon;
use Hhxsv5\LaravelS\Swoole\Task\Task;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Validation\Rule;
use Request;
use Illuminate\Support\Facades\Validator;
/**
* @apiDefine report
*
* 汇报
*/
class ReportController extends AbstractController
{
/**
* @api {get} api/report/my 01. 我发送的汇报
*
* @apiVersion 1.0.0
* @apiGroup report
* @apiName my
*
* @apiParam {String} [type] 汇报类型weekly:周报daily:日报
* @apiParam {Array} [created_at] 汇报时间
* @apiParam {Number} [page] 当前页,默认:1
* @apiParam {Number} [pagesize] 每页显示数量,默认:20最大:50
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function my(): array
{
$user = User::auth();
// 搜索当前用户
$builder = Report::with(['receivesUser'])->whereUserid($user->userid);
$type = trim(Request::input('type'));
$createAt = Request::input('created_at');
in_array($type, [Report::WEEKLY, Report::DAILY]) && $builder->whereType($type);
$whereArray = [];
if (is_array($createAt)) {
if ($createAt[0] > 0) $whereArray[] = ['created_at', '>=', date('Y-m-d H:i:s', Base::dayTimeF($createAt[0]))];
if ($createAt[1] > 0) $whereArray[] = ['created_at', '<=', date('Y-m-d H:i:s', Base::dayTimeE($createAt[1]))];
}
$list = $builder->where($whereArray)->orderByDesc('created_at')->paginate(Base::getPaginate(50, 20));
return Base::retSuccess('success', $list);
}
/**
* @api {get} api/report/receive 02. 我接收的汇报
*
* @apiVersion 1.0.0
* @apiGroup report
* @apiName receive
*
* @apiParam {String} [username] 会员名
* @apiParam {String} [type] 汇报类型weekly:周报daily:日报
* @apiParam {Array} [created_at] 汇报时间
* @apiParam {Number} [page] 当前页,默认:1
* @apiParam {Number} [pagesize] 每页显示数量,默认:20最大:50
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function receive(): array
{
$user = User::auth();
$builder = Report::with(['receivesUser']);
$builder->whereHas("receivesUser", function ($query) use ($user) {
$query->where("report_receives.userid", $user->userid);
});
$type = trim(Request::input('type'));
$createAt = Request::input('created_at');
$username = trim(Request::input('username', ''));
$builder->whereHas('sendUser', function ($query) use ($username) {
if (!empty($username)) {
$query->where('users.email', 'LIKE', '%' . $username . '%');
}
});
in_array($type, [Report::WEEKLY, Report::DAILY]) && $builder->whereType($type);
$whereArray = [];
if (is_array($createAt)) {
if ($createAt[0] > 0) $whereArray[] = ['created_at', '>=', date('Y-m-d H:i:s', Base::dayTimeF($createAt[0]))];
if ($createAt[1] > 0) $whereArray[] = ['created_at', '<=', date('Y-m-d H:i:s', Base::dayTimeE($createAt[1]))];
}
$list = $builder->where($whereArray)->orderByDesc('created_at')->paginate(Base::getPaginate(50, 20));
if ($list->items()) {
foreach ($list->items() as $item) {
$item->receive_time = ReportReceive::query()->whereRid($item["id"])->whereUserid($user->userid)->value("receive_time");
}
}
return Base::retSuccess('success', $list);
}
/**
* @api {get} api/report/store 03. 保存并发送工作汇报
*
* @apiVersion 1.0.0
* @apiGroup report
* @apiName store
*
* @apiParam {Number} [id] 汇报ID
* @apiParam {String} [title] 汇报标题
* @apiParam {Array} [type] 汇报类型weekly:周报daily:日报
* @apiParam {Number} [content] 内容
* @apiParam {Number} [receive] 汇报对象
* @apiParam {Number} [offset] 偏移量
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function store(): array
{
$input = [
"id" => Base::getPostValue("id", 0),
"title" => Base::getPostValue("title"),
"type" => Base::getPostValue("type"),
"content" => Base::getPostValue("content"),
"receive" => Base::getPostValue("receive"),
// 以当前日期为基础的周期偏移量。例如选择了上一周那么就是 -1上一天同理。
"offset" => Base::getPostValue("offset", 0),
];
$validator = Validator::make($input, [
'id' => 'numeric',
'title' => 'required',
'type' => ['required', Rule::in([Report::WEEKLY, Report::DAILY])],
'content' => 'required',
'receive' => 'required',
'offset' => ['numeric', 'max:0'],
], [
'id.numeric' => 'ID只能是数字',
'title.required' => '请填写标题',
'type.required' => '请选择汇报类型',
'type.in' => '汇报类型错误',
'content.required' => '请填写汇报内容',
'receive.required' => '请选择接收人',
'offset.numeric' => '工作汇报周期格式错误,只能是数字',
'offset.max' => '只能提交当天/本周或者之前的的工作汇报',
]);
if ($validator->fails())
return Base::retError($validator->errors()->first());
$user = User::auth();
// 接收人
if (is_array($input["receive"])) {
// 删除当前登录人
$input["receive"] = array_diff($input["receive"], [$user->userid]);
// 查询用户是否存在
if (count($input["receive"]) !== User::whereIn("userid", $input["receive"])->count())
return Base::retError("用户不存在");
foreach ($input["receive"] as $userid) {
$input["receive_content"][] = [
"receive_time" => Carbon::now()->toDateTimeString(),
"userid" => $userid,
"read" => 0,
];
}
}
// 在事务中运行
Report::transaction(function () use ($input, $user) {
$id = $input["id"];
if ($id) {
// 编辑
$report = Report::getOne($id);
$report->updateInstance([
"title" => $input["title"],
"type" => $input["type"],
"content" => htmlspecialchars($input["content"]),
]);
} else {
// 生成唯一标识
$sign = Report::generateSign($input["type"], $input["offset"]);
// 检查唯一标识是否存在
if (empty($input["id"])) {
if (Report::query()->whereSign($sign)->count() > 0)
throw new ApiException("请勿重复提交工作汇报");
}
$report = Report::createInstance([
"title" => $input["title"],
"type" => $input["type"],
"content" => htmlspecialchars($input["content"]),
"userid" => $user->userid,
"sign" => $sign,
]);
}
$report->save();
if (!empty($input["receive_content"])) {
// 删除关联
$report->Receives()->delete();
// 保存接收人
$report->Receives()->createMany($input["receive_content"]);
}
// 推送消息
$userids = [];
foreach ($input["receive_content"] as $item) {
$userids[] = $item['userid'];
}
if ($userids) {
$params = [
'ignoreFd' => Request::header('fd'),
'userid' => $userids,
'msg' => [
'type' => 'report',
'action' => 'unreadUpdate',
]
];
Task::deliver(new PushTask($params, false));
}
});
return Base::retSuccess('保存成功');
}
/**
* @api {get} api/report/template 04. 生成汇报模板
*
* @apiVersion 1.0.0
* @apiGroup report
* @apiName template
*
* @apiParam {Array} [type] 汇报类型weekly:周报daily:日报
* @apiParam {Number} [offset] 偏移量
* @apiParam {String} [date] 时间
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function template(): array
{
$user = User::auth();
$type = trim(Request::input("type"));
$offset = abs(intval(Request::input("offset", 0)));
$id = intval(Request::input("offset", 0));
$now_dt = trim(Request::input("date")) ? Carbon::parse(Request::input("date")) : Carbon::now();
// 获取开始时间
if ($type === Report::DAILY) {
$start_time = Carbon::today();
if ($offset > 0) {
// 将当前时间调整为偏移量当天结束
$now_dt->subDays($offset)->endOfDay();
// 开始时间偏移量计算
$start_time->subDays($offset);
}
$end_time = Carbon::instance($start_time)->endOfDay();
} else {
$start_time = Carbon::now();
if ($offset > 0) {
// 将当前时间调整为偏移量当周结束
$now_dt->subWeeks($offset)->endOfDay();
// 开始时间偏移量计算
$start_time->subWeeks($offset);
}
$start_time->startOfWeek();
$end_time = Carbon::instance($start_time)->endOfWeek();
}
// 生成唯一标识
$sign = Report::generateSign($type, 0, Carbon::instance($start_time));
$one = Report::query()->whereSign($sign)->first();
// 如果已经提交了相关汇报
if ($one && $id > 0) {
return Base::retSuccess('success', [
"content" => $one->content,
"title" => $one->title,
"id" => $one->id,
]);
}
// 已完成的任务
$completeContent = "";
$complete_task = ProjectTask::query()
->whereNotNull("complete_at")
->whereBetween("complete_at", [$start_time->toDateTimeString(), $end_time->toDateTimeString()])
->whereHas("taskUser", function ($query) use ($user) {
$query->where("userid", $user->userid);
})
->orderByDesc("id")
->get();
if ($complete_task->isNotEmpty()) {
foreach ($complete_task as $task) {
$complete_at = Carbon::parse($task->complete_at);
$pre = $type == Report::WEEKLY ? ('<span>[' . Base::Lang('周' . ['日', '一', '二', '三', '四', '五', '六'][$complete_at->dayOfWeek]) . ']</span>&nbsp;') : '';
$completeContent .= '<li>' . $pre . $task->name . '</li>';
}
} else {
$completeContent = '<li>&nbsp;</li>';
}
// 未完成的任务
$unfinishedContent = "";
$unfinished_task = ProjectTask::query()
->whereNull("complete_at")
->whereNotNull("start_at")
->where("end_at", "<", $end_time->toDateTimeString())
->whereHas("taskUser", function ($query) use ($user) {
$query->where("userid", $user->userid);
})
->orderByDesc("id")
->get();
if ($unfinished_task->isNotEmpty()) {
foreach ($unfinished_task as $task) {
empty($task->end_at) || $end_at = Carbon::parse($task->end_at);
$pre = (!empty($end_at) && $end_at->lt($now_dt)) ? '<span style="color:#ff0000;">[' . Base::Lang('超期') . ']</span>&nbsp;' : '';
$unfinishedContent .= '<li>' . $pre . $task->name . '</li>';
}
} else {
$unfinishedContent = '<li>&nbsp;</li>';
}
// 生成标题
if ($type === Report::WEEKLY) {
$title = $user->nickname . "的周报[" . $start_time->format("m/d") . "-" . $end_time->format("m/d") . "]";
$title .= "[" . $start_time->month . "月第" . $start_time->weekOfMonth . "周]";
} else {
$title = $user->nickname . "的日报[" . $start_time->format("Y/m/d") . "]";
}
$data = [
"time" => $start_time->toDateTimeString(),
"complete_task" => $complete_task,
"unfinished_task" => $unfinished_task,
"content" => '<h2>' . Base::Lang('已完成工作') . '</h2><ol>' .
$completeContent . '</ol><h2>' .
Base::Lang('未完成的工作') . '</h2><ol>' .
$unfinishedContent . '</ol>',
"title" => $title,
];
if ($one) {
$data['id'] = $one->id;
}
return Base::retSuccess('success', $data);
}
/**
* @api {get} api/report/detail 05. 报告详情
*
* @apiVersion 1.0.0
* @apiGroup report
* @apiName detail
*
* @apiParam {Number} [id] 报告id
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function detail(): array
{
$id = intval(trim(Request::input("id")));
if (empty($id))
return Base::retError("缺少ID参数");
$one = Report::getOne($id);
$one->type_val = $one->getRawOriginal("type");
$user = User::auth();
// 标记为已读
if (!empty($one->receivesUser)) {
foreach ($one->receivesUser as $item) {
if ($item->userid === $user->userid && $item->pivot->read === 0) {
$one->receivesUser()->updateExistingPivot($user->userid, [
"read" => 1,
]);
}
}
}
return Base::retSuccess("success", $one);
}
/**
* @api {get} api/report/last_submitter 06. 获取最后一次提交的接收人
*
* @apiVersion 1.0.0
* @apiGroup report
* @apiName last_submitter
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function last_submitter(): array
{
$one = Report::getLastOne();
return Base::retSuccess("success", empty($one["receives"]) ? [] : $one["receives"]);
}
/**
* @api {get} api/report/unread 07. 获取未读
*
* @apiVersion 1.0.0
* @apiGroup report
* @apiName unread
*
* @apiParam {Number} [userid] 用户id
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function unread(): array
{
$userid = intval(trim(Request::input("userid")));
$user = empty($userid) ? User::auth() : User::find($userid);
$data = Report::whereHas("Receives", function (Builder $query) use ($user) {
$query->where("userid", $user->userid)->where("read", 0);
})->orderByDesc('created_at')->paginate(Base::getPaginate(50, 20));
return Base::retSuccess("success", $data);
}
/**
* @api {get} api/report/read 08. 标记汇报已读,可批量
*
* @apiVersion 1.0.0
* @apiGroup report
* @apiName read
*
* @apiParam {String} [ids] 报告id
*
* @apiSuccess {Number} ret 返回状态码1正确、0错误
* @apiSuccess {String} msg 返回信息(错误描述)
* @apiSuccess {Object} data 返回数据
*/
public function read(): array
{
$user = User::auth();
$ids = Request::input("ids");
if (!is_array($ids) && !is_string($ids)) {
return Base::retError("请传入正确的工作汇报Id");
}
if (is_string($ids)) {
$ids = explode(",", $ids);
}
$data = Report::with(["receivesUser" => function (BelongsToMany $query) use ($user) {
$query->where("report_receives.userid", $user->userid)->where("read", 0);
}])->whereIn("id", $ids)->get();
if ($data->isNotEmpty()) {
foreach ($data as $item) {
(!empty($item->receivesUser) && $item->receivesUser->isNotEmpty()) && $item->receivesUser()->updateExistingPivot($user->userid, [
"read" => 1,
]);
}
}
return Base::retSuccess("success", $data);
}
}

View File

@@ -24,6 +24,9 @@ class VerifyCsrfToken extends Middleware
// 添加任务
'api/project/task/add/',
// 保存工作流
'api/project/flow/save/',
// 修改任务
'api/project/task/update/',
@@ -41,5 +44,8 @@ class VerifyCsrfToken extends Middleware
// 保存文件内容(上传)
'api/file/content/upload/',
// 保存汇报
'api/report/store/',
];
}

View File

@@ -17,6 +17,7 @@ use Illuminate\Support\Facades\DB;
* @method static \Illuminate\Database\Eloquent\Builder|AbstractModel query()
* @method static \Illuminate\Database\Eloquent\Builder|AbstractModel saveOrIgnore()
* @method static \Illuminate\Database\Eloquent\Builder|AbstractModel getKeyValue()
* @method static \Illuminate\Database\Eloquent\Model|object|static|null cancelAppend()
* @method static \Illuminate\Database\Eloquent\Builder|static with($relations)
* @method static \Illuminate\Database\Query\Builder|static select($columns = [])
* @method static \Illuminate\Database\Query\Builder|static whereNotIn($column, $values, $boolean = 'and')
@@ -62,6 +63,15 @@ class AbstractModel extends Model
return $this->$key;
}
/**
* 取消附加值
* @return static
*/
protected function scopeCancelAppend()
{
return $this->setAppends([]);
}
/**
* 为数组 / JSON 序列化准备日期。
* @param DateTimeInterface $date
@@ -140,7 +150,11 @@ class AbstractModel extends Model
$row = static::where($where)->first();
if (empty($row)) {
$row = new static;
$row->updateInstance(array_merge($where, $insert ?: $update));
$array = array_merge($where, $insert ?: $update);
if (isset($array[$row->primaryKey])) {
unset($array[$row->primaryKey]);
}
$row->updateInstance($array);
} elseif ($update) {
$row->updateInstance($update);
}

View File

@@ -53,12 +53,12 @@ class File extends AbstractModel
/**
* 是否有访问权限
* @param $userid
* @return int -1:没有权限0:访问权限1:读写权限1000:所有者
* @return int -1:没有权限0:访问权限1:读写权限1000:所有者或创建者
*/
public function getPermission($userid)
{
if ($userid == $this->userid) {
// ① 自己的文件夹
if ($userid == $this->userid || $userid == $this->created_id) {
// ① 自己的文件夹 或 自己创建的文件夹
return 1000;
}
$row = $this->getShareInfo();
@@ -217,7 +217,7 @@ class File extends AbstractModel
/**
* 获取文件并检测权限
* @param $id
* @param int $limit 要求权限: 0-访问权限、1-读写权限、1000-所有者
* @param int $limit 要求权限: 0-访问权限、1-读写权限、1000-所有者或创建者
* @param $permission
* @return File
*/
@@ -231,7 +231,7 @@ class File extends AbstractModel
$permission = $file->getPermission(User::userid());
if ($permission < $limit) {
$msg = match ($limit) {
1000 => '仅限所有者操作',
1000 => '仅限所有者或创建者操作',
1 => '没有读写权限',
default => '没有访问权限',
};

View File

@@ -285,18 +285,23 @@ class Project extends AbstractModel
/**
* 添加项目日志
* @param string $detail
* @param array $record
* @param int $userid
* @return ProjectLog
*/
public function addLog($detail, $userid = 0)
public function addLog($detail, $record = [], $userid = 0)
{
$log = ProjectLog::createInstance([
$array = [
'project_id' => $this->id,
'column_id' => 0,
'task_id' => 0,
'userid' => $userid ?: User::userid(),
'detail' => $detail,
]);
];
if ($record) {
$array['record'] = $record;
}
$log = ProjectLog::createInstance($array);
$log->save();
return $log;
}
@@ -304,28 +309,45 @@ class Project extends AbstractModel
/**
* 推送消息
* @param string $action
* @param array $data 发送内容,默认为[id=>项目ID]
* @param array $userid 指定会员,默认为项目所有成员
* @param array|self $data 发送内容,默认为[id=>项目ID]
* @param array $userid 指定会员,默认为项目所有成员
*/
public function pushMsg($action, $data = null, $userid = null)
{
if ($data === null) {
$data = ['id' => $this->id];
} elseif ($data instanceof self) {
$data = $data->toArray();
}
//
$array = [$userid, []];
if ($userid === null) {
$userid = $this->relationUserids();
$array[0] = $this->relationUserids();
} elseif (!is_array($userid)) {
$array[0] = [$userid];
}
//
if (isset($data['owner'])) {
$owners = ProjectUser::whereProjectId($data['id'])->whereOwner(1)->pluck('userid')->toArray();
$array = [array_intersect($array[0], $owners), array_diff($array[0], $owners)];
}
//
foreach ($array as $index => $item) {
if ($index > 0) {
$data['owner'] = 0;
}
$params = [
'ignoreFd' => Request::header('fd'),
'userid' => array_values($item),
'msg' => [
'type' => 'project',
'action' => $action,
'data' => $data,
]
];
$task = new PushTask($params, false);
Task::deliver($task);
}
$params = [
'ignoreFd' => Request::header('fd'),
'userid' => $userid,
'msg' => [
'type' => 'project',
'action' => $action,
'data' => $data,
]
];
$task = new PushTask($params, false);
Task::deliver($task);
}
/**

View File

@@ -0,0 +1,51 @@
<?php
namespace App\Models;
use App\Module\Base;
/**
* App\Models\ProjectFlow
*
* @property int $id
* @property int|null $project_id 项目ID
* @property string|null $name 流程名称
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ProjectFlowItem[] $projectFlowItem
* @property-read int|null $project_flow_item_count
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlow newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlow newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlow query()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlow whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlow whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlow whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlow whereProjectId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlow whereUpdatedAt($value)
* @mixin \Eloquent
*/
class ProjectFlow extends AbstractModel
{
/**
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function projectFlowItem(): \Illuminate\Database\Eloquent\Relations\HasMany
{
return $this->hasMany(ProjectFlowItem::class, 'flow_id', 'id')->orderBy('sort');
}
/**
* @return mixed
*/
public function deleteFlow()
{
return AbstractModel::transaction(function() {
ProjectFlowItem::whereProjectId($this->project_id)->chunk(100, function($list) {
foreach ($list as $item) {
$item->deleteFlowItem();
}
});
return $this->delete();
});
}
}

View File

@@ -0,0 +1,90 @@
<?php
namespace App\Models;
use App\Module\Base;
/**
* App\Models\ProjectFlowItem
*
* @property int $id
* @property int|null $project_id 项目ID
* @property int|null $flow_id 流程ID
* @property string|null $name 名称
* @property string|null $status 状态
* @property array $turns 可流转
* @property array $userids 自动负责人ID
* @property string|null $usertype 流转模式
* @property int|null $userlimit 限制负责人
* @property int|null $sort 排序
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Models\ProjectFlow|null $projectFlow
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem query()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereFlowId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereProjectId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereSort($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereStatus($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereTurns($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereUserids($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereUserlimit($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectFlowItem whereUsertype($value)
* @mixin \Eloquent
*/
class ProjectFlowItem extends AbstractModel
{
protected $hidden = [
'created_at',
'updated_at',
];
/**
* @param $value
* @return array
*/
public function getTurnsAttribute($value)
{
if (is_array($value)) {
return $value;
}
return Base::json2array($value);
}
/**
* @param $value
* @return array
*/
public function getUseridsAttribute($value)
{
if (is_array($value)) {
return $value;
}
return Base::json2array($value);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function projectFlow(): \Illuminate\Database\Eloquent\Relations\HasOne
{
return $this->hasOne(ProjectFlow::class, 'id', 'flow_id');
}
/**
* @return bool|null
*/
public function deleteFlowItem()
{
ProjectTask::whereFlowItemId($this->id)->update([
'flow_item_id' => 0,
'flow_item_name' => "",
]);
return $this->delete();
}
}

View File

@@ -2,6 +2,8 @@
namespace App\Models;
use App\Module\Base;
/**
* App\Models\ProjectLog
*
@@ -11,8 +13,10 @@ namespace App\Models;
* @property int|null $task_id 项目ID
* @property int|null $userid 会员ID
* @property string|null $detail 详细信息
* @property array $record 记录数据
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Models\ProjectTask|null $projectTask
* @property-read \App\Models\User|null $user
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog newQuery()
@@ -22,6 +26,7 @@ namespace App\Models;
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereDetail($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereProjectId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereRecord($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereTaskId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectLog whereUserid($value)
@@ -30,6 +35,18 @@ namespace App\Models;
class ProjectLog extends AbstractModel
{
/**
* @param $value
* @return array
*/
public function getRecordAttribute($value)
{
if (is_array($value)) {
return $value;
}
return Base::json2array($value);
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
@@ -38,4 +55,12 @@ class ProjectLog extends AbstractModel
return $this->hasOne(User::class, 'userid', 'userid');
}
/**
* @return \Illuminate\Database\Eloquent\Relations\HasOne
*/
public function projectTask(): \Illuminate\Database\Eloquent\Relations\HasOne
{
return $this->hasOne(ProjectTask::class, 'id', 'task_id');
}
}

View File

@@ -21,6 +21,8 @@ use Request;
* @property int|null $project_id 项目ID
* @property int|null $column_id 列表ID
* @property int|null $dialog_id 聊天会话ID
* @property int|null $flow_item_id 工作流状态ID
* @property string|null $flow_item_name 工作流状态名称
* @property string|null $name 标题
* @property string|null $color 颜色
* @property string|null $desc 描述
@@ -72,6 +74,8 @@ use Request;
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereDialogId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereEndAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereFlowItemId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereFlowItemName($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|ProjectTask wherePColor($value)
@@ -108,7 +112,7 @@ class ProjectTask extends AbstractModel
public function getFileNumAttribute()
{
if (!isset($this->appendattrs['file_num'])) {
$this->appendattrs['file_num'] = ProjectTaskFile::whereTaskId($this->id)->count();
$this->appendattrs['file_num'] = $this->parent_id > 0 ? 0 : ProjectTaskFile::whereTaskId($this->id)->count();
}
return $this->appendattrs['file_num'];
}
@@ -415,9 +419,24 @@ class ProjectTask extends AbstractModel
} else {
$task->sort = intval(self::whereColumnId($task->column_id)->orderByDesc('sort')->value('sort')) + 1;
}
// 工作流
$projectFlow = ProjectFlow::whereProjectId($project_id)->orderByDesc('id')->first();
if ($projectFlow) {
$projectFlowItem = ProjectFlowItem::whereFlowId($projectFlow->id)->orderBy('sort')->get();
// 赋一个开始状态
foreach ($projectFlowItem as $item) {
if ($item->status == 'start') {
$task->flow_item_id = $item->id;
$task->flow_item_name = $item->status . "|" . $item->name;
$owner = array_merge($owner, $item->userids);
break;
}
}
}
//
return AbstractModel::transaction(function() use ($times, $subtasks, $content, $owner, $task) {
$task->save();
$owner = array_values(array_unique($owner));
foreach ($owner as $uid) {
ProjectTaskUser::createInstance([
'project_id' => $task->project_id,
@@ -453,7 +472,7 @@ class ProjectTask extends AbstractModel
self::addTask($subtask);
}
}
$task->addLog("创建{任务}" . $task->name);
$task->addLog("创建{任务}");
return $task;
});
}
@@ -461,16 +480,96 @@ class ProjectTask extends AbstractModel
/**
* 修改任务
* @param $data
* @param bool $updateProject 是否更新项目数据(项目统计)
* @param bool $updateContent 是否更新任务详情
* @param bool $updateSubTask 是否更新任务
* @param array $updateMarking 更新的标记
* - is_update_project 是否更新项目数据(项目统计)
* - is_update_content 是否更新任务详情
* - is_update_maintask 是否更新主任务
* - is_update_subtask 是否更新子任务
* @return bool
*/
public function updateTask($data, &$updateProject = false, &$updateContent = false, &$updateSubTask = false)
public function updateTask($data, &$updateMarking = [])
{
AbstractModel::transaction(function () use ($data, &$updateProject, &$updateContent, &$updateSubTask) {
AbstractModel::transaction(function () use ($data, &$updateMarking) {
// 判断版本
if (version_compare(Base::getClientVersion(), '0.6.0', '<')) {
throw new ApiException('当前版本过低');
}
// 主任务
$mainTask = $this->parent_id > 0 ? self::find($this->parent_id) : null;
// 工作流
if (Arr::exists($data, 'flow_item_id')) {
if ($this->flow_item_id == $data['flow_item_id']) {
throw new ApiException('任务状态未发生改变');
}
$flowData = [
'flow_item_id' => $this->flow_item_id,
'flow_item_name' => $this->flow_item_name,
];
$currentFlowItem = null;
$newFlowItem = ProjectFlowItem::whereProjectId($this->project_id)->find(intval($data['flow_item_id']));
if (empty($newFlowItem) || empty($newFlowItem->projectFlow)) {
throw new ApiException('任务状态不存在');
}
if ($this->flow_item_id) {
// 判断符合流转
$currentFlowItem = ProjectFlowItem::find($this->flow_item_id);
if ($currentFlowItem) {
if (!in_array($newFlowItem->id, $currentFlowItem->turns)) {
throw new ApiException("当前状态[{$currentFlowItem->name}]不可流转到[{$newFlowItem->name}]");
}
if ($currentFlowItem->userlimit) {
if (!in_array(User::userid(), $currentFlowItem->userids)
&& !ProjectUser::whereProjectId($this->project_id)->whereOwner(1)->exists()) {
throw new ApiException("当前状态[{$currentFlowItem->name}]仅限状态负责人或项目负责人修改");
}
}
}
}
if ($newFlowItem->status == 'end') {
// 判断自动完成
if (!$this->complete_at) {
$flowData['complete_at'] = $this->complete_at;
$data['complete_at'] = date("Y-m-d H:i");
}
} else {
// 判断自动打开
if ($this->complete_at) {
$flowData['complete_at'] = $this->complete_at;
$data['complete_at'] = false;
}
}
if ($newFlowItem->userids) {
// 判断自动添加负责人
$flowData['owner'] = $data['owner'] = $this->taskUser->where('owner', 1)->pluck('userid')->toArray();
if ($newFlowItem->usertype == "replace") {
// 流转模式
if ($this->parent_id === 0) {
$flowData['assist'] = $data['assist'] = $this->taskUser->where('owner', 0)->pluck('userid')->toArray();
$data['assist'] = array_merge($data['assist'], $data['owner']);
}
$data['owner'] = $newFlowItem->userids;
} else {
// 添加模式
$data['owner'] = array_merge($data['owner'], $newFlowItem->userids);
}
$data['owner'] = array_values(array_unique($data['owner']));
if (isset($data['assist'])) {
$data['assist'] = array_values(array_unique(array_diff($data['assist'], $data['owner'])));
}
}
$this->flow_item_id = $newFlowItem->id;
$this->flow_item_name = $newFlowItem->status . "|" . $newFlowItem->name;
$this->addLog("修改{任务}状态", [
'flow' => $flowData,
'change' => [$currentFlowItem?->name, $newFlowItem->name]
]);
}
// 状态
if (Arr::exists($data, 'complete_at')) {
// 子任务:主任务已完成时无法修改
if ($mainTask?->complete_at) {
throw new ApiException('主任务已完成,无法修改子任务状态');
}
if (Base::isDate($data['complete_at'])) {
// 标记已完成
if ($this->complete_at) {
@@ -484,7 +583,7 @@ class ProjectTask extends AbstractModel
}
$this->completeTask(null);
}
$updateProject = true;
$updateMarking['is_update_project'] = true;
return;
}
// 标题
@@ -494,14 +593,19 @@ class ProjectTask extends AbstractModel
} elseif (mb_strlen($data['name']) > 255) {
throw new ApiException('任务描述最多只能设置255个字');
}
$this->addLog("修改{任务}标题{$this->name} => {$data['name']}");
$this->addLog("修改{任务}标题", [
'change' => [$this->name, $data['name']]
]);
$this->name = $data['name'];
}
// 负责人
if (Arr::exists($data, 'owner')) {
$count = $this->taskUser->count();
$count = $this->taskUser->where('owner', 1)->count();
$array = [];
$owner = is_array($data['owner']) ? $data['owner'] : [$data['owner']];
if (count($owner) > 10) {
throw new ApiException('任务负责人最多不能超过10个');
}
foreach ($owner as $uid) {
if (intval($uid) == 0) continue;
if (!$this->project->useridInTheProject($uid)) continue;
@@ -523,51 +627,79 @@ class ProjectTask extends AbstractModel
if ($count == 0 && count($array) == 1 && $array[0] == User::userid()) {
$this->addLog("认领{任务}");
} else {
$this->addLog("修改{任务}负责人" . implode(",", $array));
$this->addLog("修改{任务}负责人", ['userid' => $array]);
}
}
$rows = ProjectTaskUser::whereTaskId($this->id)->whereOwner(1)->whereNotIn('userid', $array)->get();
if ($rows->isNotEmpty()) {
$this->addLog("删除{任务}负责人" . $rows->implode('userid', ','));
$this->addLog("删除{任务}负责人", ['userid' => $rows->implode('userid', ',')]);
foreach ($rows as $row) {
$row->delete();
}
}
$updateProject = true;
$updateMarking['is_update_project'] = true;
$this->syncDialogUser();
}
// 计划时间
// 计划时间(原则:子任务时间在主任务时间内)
if (Arr::exists($data, 'times')) {
$originalWhere = [
'parent_id' => $this->id,
'start_at' => $this->start_at,
'end_at' => $this->end_at,
];
$oldAt = [Carbon::parse($this->start_at), Carbon::parse($this->end_at)];
$this->start_at = null;
$this->end_at = null;
$times = $data['times'];
list($start, $end) = is_string($times) ? explode(",", $times) : (is_array($times) ? $times : []);
if (Base::isDate($start) && Base::isDate($end) && $start != $end) {
if ($this->parent_id > 0 && $data['skipTimesCheck'] !== true) {
// 如果是子任务,则不能超过主任务时间
$mainTask = self::find($this->parent_id);
if (Carbon::parse($start)->lt($mainTask->start_at)) {
throw new ApiException('子任务开始时间不能小于主任务开始时间');
}
if (Carbon::parse($end)->gt($mainTask->end_at)) {
throw new ApiException('子任务结束时间不能大于主任务结束时间');
$start_at = Carbon::parse($start);
$end_at = Carbon::parse($end);
if ($this->parent_id > 0) {
// 判断同步主任务时间(子任务时间 超出 主任务)
if ($mainTask) {
$isUp = false;
if ($start_at->lt(Carbon::parse($mainTask->start_at))) {
$mainTask->start_at = $start_at;
$isUp = true;
}
if ($end_at->gt(Carbon::parse($mainTask->end_at))) {
$mainTask->end_at = $end_at;
$isUp = true;
}
if ($isUp) {
$updateMarking['is_update_maintask'] = true;
$mainTask->addLog("同步修改{任务}时间");
$mainTask->save();
}
}
}
$this->start_at = Carbon::parse($start);
$this->end_at = Carbon::parse($end);
$this->start_at = $start_at;
$this->end_at = $end_at;
} else {
if ($this->parent_id > 0) {
// 清空子任务时间(子任务时间等于主任务时间)
$this->start_at = $mainTask->start_at;
$this->end_at = $mainTask->end_at;
}
}
if ($this->parent_id == 0) {
// 如果是主任务,则同步跟主任务相同时间的子任务
self::where($originalWhere)->chunk(100, function($list) use ($times, &$updateSubTask) {
foreach ($list as $item) {
$item->updateTask(['times' => $times, 'skipTimesCheck' => true]);
// 判断同步子任务时间(主任务时间 不在 子任务时间 之外)
self::whereParentId($this->id)->chunk(100, function($list) use ($oldAt, &$updateMarking) {
/** @var self $subTask */
foreach ($list as $subTask) {
$start_at = Carbon::parse($subTask->start_at);
$end_at = Carbon::parse($subTask->end_at);
$isUp = false;
if ($start_at->eq($oldAt[0]) || $start_at->lt(Carbon::parse($this->start_at))) {
$subTask->start_at = $this->start_at;
$isUp = true;
}
if ($end_at->eq($oldAt[1]) || $end_at->gt(Carbon::parse($this->end_at))) {
$subTask->end_at = $this->end_at;
$isUp = true;
}
if ($isUp) {
$updateMarking['is_update_subtask'] = true;
$subTask->addLog("同步修改{任务}时间");
$subTask->save();
}
}
$updateSubTask = true;
});
}
$this->addLog("修改{任务}时间");
@@ -578,6 +710,9 @@ class ProjectTask extends AbstractModel
if (Arr::exists($data, 'assist')) {
$array = [];
$assist = is_array($data['assist']) ? $data['assist'] : [$data['assist']];
if (count($assist) > 10) {
throw new ApiException('任务协助人员最多不能超过10个');
}
foreach ($assist as $uid) {
if (intval($uid) == 0) continue;
if (!$this->project->useridInTheProject($uid)) continue;
@@ -593,11 +728,11 @@ class ProjectTask extends AbstractModel
$array[] = $uid;
}
if ($array) {
$this->addLog("修改{任务}协助人员" . implode(",", $array));
$this->addLog("修改{任务}协助人员", ['userid' => $array]);
}
$rows = ProjectTaskUser::whereTaskId($this->id)->whereOwner(0)->whereNotIn('userid', $array)->get();
if ($rows->isNotEmpty()) {
$this->addLog("删除{任务}协助人员" . $rows->implode('userid', ','));
$this->addLog("删除{任务}协助人员", ['userid' => $rows->implode('userid', ',')]);
foreach ($rows as $row) {
$row->delete();
}
@@ -606,7 +741,9 @@ class ProjectTask extends AbstractModel
}
// 背景色
if (Arr::exists($data, 'color') && $this->color != $data['color']) {
$this->addLog("修改{任务}背景色{$this->color} => {$data['color']}");
$this->addLog("修改{任务}背景色", [
'change' => [$this->color, $data['color']]
]);
$this->color = $data['color'];
}
// 列表
@@ -616,7 +753,9 @@ class ProjectTask extends AbstractModel
if (empty($column)) {
throw new ApiException('请选择正确的列表');
}
$this->addLog("修改{任务}列表{$oldName} => {$column->name}");
$this->addLog("修改{任务}列表", [
'change' => [$oldName, $column->name]
]);
$this->column_id = $column->id;
}
// 内容
@@ -629,7 +768,7 @@ class ProjectTask extends AbstractModel
]);
$this->desc = Base::getHtml($data['content'], 100);
$this->addLog("修改{任务}详细描述");
$updateContent = true;
$updateMarking['is_update_content'] = true;
}
// 优先级
$p = false;
@@ -663,9 +802,7 @@ class ProjectTask extends AbstractModel
{
if ($this->parent_id > 0) {
$task = self::find($this->parent_id);
if ($task) {
$task->syncDialogUser();
}
$task?->syncDialogUser();
return;
}
if (empty($this->dialog_id)) {
@@ -737,24 +874,6 @@ class ProjectTask extends AbstractModel
return $this->appendattrs['has_owner'];
}
/**
* 是否负责人
* @param bool $isParent 是父级任务的负责人也算
* @return bool
*/
public function isOwner($isParent = true) {
if ($this->owner) {
return true;
}
if ($isParent && $this->parent_id > 0) {
$parentTask = self::find($this->parent_id);
if ($parentTask?->owner) {
return true;
}
}
return false;
}
/**
* 标记已完成、未完成
* @param Carbon|null $complete_at 完成时间
@@ -766,7 +885,7 @@ class ProjectTask extends AbstractModel
if ($complete_at === null) {
// 标记未完成
$this->complete_at = null;
$this->addLog("{任务}标记未完成" . $this->name);
$this->addLog("标记{任务}未完成");
} else {
// 标记已完成
if ($this->parent_id == 0) {
@@ -778,7 +897,7 @@ class ProjectTask extends AbstractModel
throw new ApiException('请先领取任务');
}
$this->complete_at = $complete_at;
$this->addLog("{任务}标记已完成" . $this->name);
$this->addLog("标记{任务}已完成");
}
$this->save();
});
@@ -798,24 +917,21 @@ class ProjectTask extends AbstractModel
$this->archived_at = null;
$this->archived_userid = User::userid();
$this->archived_follow = 0;
$this->addLog("任务取消归档" . $this->name);
$this->pushMsg('add', [
'new_column' => null,
'task' => ProjectTask::oneTask($this->id),
]);
$this->addLog("任务取消归档");
$this->pushMsg('add', ProjectTask::oneTask($this->id));
} else {
// 归档任务
if ($isAuto === true) {
$logText = "自动任务归档" . $this->name;
$logText = "自动任务归档";
$userid = 0;
} else {
$logText = "任务归档" . $this->name;
$logText = "任务归档";
$userid = User::userid();
}
$this->archived_at = $archived_at;
$this->archived_userid = $userid;
$this->archived_follow = 0;
$this->addLog($logText, $userid);
$this->addLog($logText, [], $userid);
$this->pushMsg('archived');
}
self::whereParentId($this->id)->update([
@@ -841,7 +957,7 @@ class ProjectTask extends AbstractModel
$dialog?->deleteDialog();
}
self::whereParentId($this->id)->delete();
$this->addLog("删除{任务}" . $this->name);
$this->addLog("删除{任务}");
$this->delete();
});
if ($pushMsg) {
@@ -853,19 +969,27 @@ class ProjectTask extends AbstractModel
/**
* 添加任务日志
* @param string $detail
* @param array $record
* @param int $userid
* @return ProjectLog
*/
public function addLog($detail, $userid = 0)
public function addLog($detail, $record = [], $userid = 0)
{
$detail = str_replace("{任务}", $this->parent_id > 0 ? "子任务" : "任务", $detail);
$log = ProjectLog::createInstance([
$detail = str_replace("{任务}", $this->parent_id ? "子任务" : "任务", $detail);
$array = [
'project_id' => $this->project_id,
'column_id' => $this->column_id,
'task_id' => $this->parent_id ?: $this->id,
'userid' => $userid ?: User::userid(),
'detail' => $detail,
]);
];
if ($this->parent_id) {
$record['subtitle'] = $this->name;
}
if ($record) {
$array['record'] = $record;
}
$log = ProjectLog::createInstance($array);
$log->save();
return $log;
}
@@ -873,8 +997,8 @@ class ProjectTask extends AbstractModel
/**
* 推送消息
* @param string $action
* @param array $data 发送内容,默认为[id, parent_id, project_id, column_id, dialog_id]
* @param array $userid 指定会员,默认为项目所有成员
* @param array|self $data 发送内容,默认为[id, parent_id, project_id, column_id, dialog_id]
* @param array $userid 指定会员,默认为项目所有成员
*/
public function pushMsg($action, $data = null, $userid = null)
{
@@ -889,21 +1013,37 @@ class ProjectTask extends AbstractModel
'column_id' => $this->column_id,
'dialog_id' => $this->dialog_id,
];
} elseif ($data instanceof self) {
$data = $data->toArray();
}
//
$array = [$userid, []];
if ($userid === null) {
$userid = $this->project->relationUserids();
$array[0] = $this->project->relationUserids();
} elseif (!is_array($userid)) {
$array[0] = [$userid];
}
//
if (isset($data['owner'])) {
$owners = ProjectTaskUser::whereTaskId($data['id'])->whereOwner(1)->pluck('userid')->toArray();
$array = [array_intersect($array[0], $owners), array_diff($array[0], $owners)];
}
foreach ($array as $index => $item) {
if ($index > 0) {
$data['owner'] = 0;
}
$params = [
'ignoreFd' => Request::header('fd'),
'userid' => array_values($item),
'msg' => [
'type' => 'projectTask',
'action' => $action,
'data' => $data,
]
];
$task = new PushTask($params, false);
Task::deliver($task);
}
$params = [
'ignoreFd' => Request::header('fd'),
'userid' => $userid,
'msg' => [
'type' => 'projectTask',
'action' => $action,
'data' => $data,
]
];
$task = new PushTask($params, false);
Task::deliver($task);
}
/**
@@ -939,7 +1079,7 @@ class ProjectTask extends AbstractModel
}
//
try {
$project = Project::userProject($task->project_id, $archived);
$project = Project::userProject($task->project_id);
} catch (Exception $e) {
if ($task->owner === null) {
throw new ApiException($e->getMessage(), [ 'task_id' => $task_id ], -4002);

158
app/Models/Report.php Normal file
View File

@@ -0,0 +1,158 @@
<?php
namespace App\Models;
use App\Exceptions\ApiException;
use Carbon\Carbon;
use Carbon\Traits\Creator;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsToMany;
use Illuminate\Database\Eloquent\Relations\HasMany;
use JetBrains\PhpStorm\Pure;
/**
* App\Models\Report
*
* @property int $id
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property string $title 标题
* @property string $type 汇报类型
* @property int $userid
* @property string $content
* @property string $sign 汇报唯一标识
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\ReportReceive[] $Receives
* @property-read int|null $receives_count
* @property-read mixed $receives
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Models\User[] $receivesUser
* @property-read int|null $receives_user_count
* @property-read \App\Models\User|null $sendUser
* @method static Builder|Report newModelQuery()
* @method static Builder|Report newQuery()
* @method static Builder|Report query()
* @method static Builder|Report whereContent($value)
* @method static Builder|Report whereCreatedAt($value)
* @method static Builder|Report whereId($value)
* @method static Builder|Report whereSign($value)
* @method static Builder|Report whereTitle($value)
* @method static Builder|Report whereType($value)
* @method static Builder|Report whereUpdatedAt($value)
* @method static Builder|Report whereUserid($value)
* @mixin \Eloquent
*/
class Report extends AbstractModel
{
use HasFactory;
const WEEKLY = "weekly";
const DAILY = "daily";
protected $fillable = [
"title",
"type",
"userid",
"content",
];
protected $appends = [
'receives',
];
public function Receives(): HasMany
{
return $this->hasMany(ReportReceive::class, "rid");
}
public function receivesUser(): BelongsToMany
{
return $this->belongsToMany(User::class, ReportReceive::class, "rid", "userid")
->withPivot("receive_time", "read");
}
public function sendUser()
{
return $this->hasOne(User::class, "userid", "userid");
}
public function getTypeAttribute($value): string
{
return match ($value) {
Report::WEEKLY => "周报",
Report::DAILY => "日报",
default => "",
};
}
public function getContentAttribute($value): string
{
return htmlspecialchars_decode($value);
}
public function getReceivesAttribute()
{
if (!isset($this->appendattrs['receives'])) {
$this->appendattrs['receives'] = empty( $this->receivesUser ) ? [] : array_column($this->receivesUser->toArray(), "userid");
}
return $this->appendattrs['receives'];
}
/**
* 获取单条记录
* @param $id
* @param User|null $user
* @return Report|Builder|Model|object|null
* @throw ApiException
*/
public static function getOne($id, User $user = null)
{
$user === null && $user = User::auth();
$one = self::whereUserid($user->userid)->whereId($id)->first();
if ( empty($one) )
throw new ApiException("记录不存在");
return $one;
}
/**
* 获取最后一条提交记录
* @param User|null $user
* @return Builder|Model|\Illuminate\Database\Query\Builder|object
*/
public static function getLastOne(User $user = null)
{
$user === null && $user = User::auth();
$one = self::whereUserid($user->userid)->orderByDesc("created_at")->first();
if ( empty($one) )
throw new ApiException("记录不存在");
return $one;
}
/**
* 生成唯一标识
* @param $type
* @param $offset
* @param Carbon|null $time
* @return string
*/
public static function generateSign($type, $offset, Carbon $time = null): string
{
$user = User::auth();
$now_dt = $time === null ? Carbon::now() : $time;
$time_s = match ($type) {
Report::WEEKLY => function() use ($now_dt, $offset) {
// 如果设置了周期偏移量
empty( $offset ) || $now_dt->subWeeks( abs( $offset ) );
$now_dt->startOfWeek(); // 设置为当周第一天
return $now_dt->year . $now_dt->weekOfYear . $now_dt->month . $now_dt->weekOfMonth;
},
Report::DAILY => function() use ($now_dt, $offset) {
// 如果设置了周期偏移量
empty( $offset ) || $now_dt->subDays( abs( $offset ) );
return $now_dt->year . $now_dt->dayOfYear . $now_dt->month . $now_dt->daysInMonth;
},
default => "",
};
return md5( $user->userid . ( is_callable($time_s) ? $time_s() : "" ) . $type );
}
}

View File

@@ -0,0 +1,39 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
/**
* App\Models\ReportReceive
*
* @property int $id
* @property int $rid
* @property string|null $receive_time 接收时间
* @property int $userid 接收人
* @property int $read 是否已读
* @method static \Illuminate\Database\Eloquent\Builder|ReportReceive newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ReportReceive newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|ReportReceive query()
* @method static \Illuminate\Database\Eloquent\Builder|ReportReceive whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|ReportReceive whereRead($value)
* @method static \Illuminate\Database\Eloquent\Builder|ReportReceive whereReceiveTime($value)
* @method static \Illuminate\Database\Eloquent\Builder|ReportReceive whereRid($value)
* @method static \Illuminate\Database\Eloquent\Builder|ReportReceive whereUserid($value)
* @mixin \Eloquent
*/
class ReportReceive extends AbstractModel
{
use HasFactory;
// 关闭时间戳自动写入
public $timestamps = false;
protected $fillable = [
"rid",
"receive_time",
"userid",
"read",
];
}

View File

@@ -28,8 +28,10 @@ use Carbon\Carbon;
* @property string|null $line_at 最后在线时间(接口)
* @property int|null $task_dialog_id 最后打开的任务会话ID
* @property string|null $created_ip 注册IP
* @property string|null $disable_at 禁用时间
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Database\Factories\UserFactory factory(...$parameters)
* @method static \Illuminate\Database\Eloquent\Builder|User newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|User newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|User query()
@@ -37,6 +39,7 @@ use Carbon\Carbon;
* @method static \Illuminate\Database\Eloquent\Builder|User whereChangepass($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereCreatedIp($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereDisableAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereEmail($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereEncrypt($value)
* @method static \Illuminate\Database\Eloquent\Builder|User whereIdentity($value)

View File

@@ -74,6 +74,19 @@ class Base
});
}
/**
* 获取客户端版本号
* @return string
*/
public static function getClientVersion()
{
global $_A;
if (!isset($_A["__static_client_version"])) {
$_A["__static_client_version"] = Request::header('version') ?: '0.0.1';
}
return $_A["__static_client_version"];
}
/**
* 判断是否域名格式
* @param $domain
@@ -725,6 +738,7 @@ class Base
*/
public static function fillUrl($str = '')
{
global $_A;
if (is_array($str)) {
foreach ($str as $key => $item) {
$str[$key] = Base::fillUrl($item);
@@ -743,9 +757,12 @@ class Base
) {
return $str;
} else {
if ($_A['__fill_url_remote_url'] === true) {
return "{{RemoteURL}}" . $str;
}
try {
return url($str);
} catch (\Throwable $e) {
} catch (\Throwable) {
return self::getSchemeAndHost() . "/" . $str;
}
}
@@ -766,7 +783,7 @@ class Base
}
try {
$find = url('');
} catch (\Throwable $e) {
} catch (\Throwable) {
$find = self::getSchemeAndHost();
}
return Base::leftDelete($str, $find . '/');
@@ -830,13 +847,16 @@ class Base
/**
* 数组只保留数字的
* @param $array
* @param bool $int 是否格式化值
* @return array
*/
public static function arrayRetainInt($array)
public static function arrayRetainInt($array, $int = false)
{
foreach ($array as $k => $v) {
if (!is_numeric($v)) {
unset($array[$k]);
} elseif ($int === true) {
$array[$k] = intval($v);
}
}
return array_values($array);

View File

@@ -33,6 +33,11 @@ class WebSocketDialogMsgTask extends AbstractTask
public function start()
{
global $_A;
$_A = [
'__fill_url_remote_url' => true,
];
//
$msg = WebSocketDialogMsg::find($this->id);
if (empty($msg)) {
return;

60
cmd
View File

@@ -31,6 +31,15 @@ rand() {
echo $(($num%$max+$min))
}
rand_string() {
local lan=$1
if [[ `uname` == 'Linux' ]]; then
echo "$(date +%s%N | md5sum | cut -c 1-${lan})"
else
echo "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-${lan}")"
fi
}
supervisorctl_restart() {
local RES=`run_exec php "supervisorctl update $1"`
if [ -z "$RES" ]; then
@@ -117,11 +126,7 @@ run_exec() {
echo -e "${Error} ${RedBG} 没有找到 $container 容器! ${Font}"
exit 1
fi
if [ "$container" = "mariadb" ] || [ "$container" = "nginx" ] || [ "$container" = "redis" ]; then
docker exec -it "$name" /bin/sh -c "$cmd"
else
docker exec -it "$name" /bin/bash -c "$cmd"
fi
docker exec -it "$name" /bin/sh -c "$cmd"
}
run_mysql() {
@@ -160,6 +165,7 @@ run_mysql() {
fi
docker cp $filename $container_name:/
run_exec mariadb "gunzip < /$inputname | mysql -u$username -p$password $database"
run_exec php "php artisan migrate"
judge "还原数据库"
fi
}
@@ -177,8 +183,11 @@ env_set() {
if [ -z "$exist" ]; then
echo "$key=$val" >> $cur_path/.env
else
command="sed -i '/^$key=/c\\$key=$val' /www/.env"
docker run -it --rm -v ${cur_path}:/www alpine sh -c "$command"
if [[ `uname` == 'Linux' ]]; then
sed -i "/^${key}=/c\\${key}=${val}" ${cur_path}/.env
else
docker run -it --rm -v ${cur_path}:/www alpine sh -c "sed -i "/^${key}=/c\\${key}=${val}" /www/.env"
fi
if [ $? -ne 0 ]; then
echo -e "${Error} ${RedBG} 设置env参数失败${Font}"
exit 1
@@ -191,10 +200,10 @@ env_init() {
cp .env.docker .env
fi
if [ -z "$(env_get DB_ROOT_PASSWORD)" ]; then
env_set DB_ROOT_PASSWORD "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-16")"
env_set DB_ROOT_PASSWORD "$(rand_string 16)"
fi
if [ -z "$(env_get APP_ID)" ]; then
env_set APP_ID "$(docker run -it --rm alpine sh -c "date +%s%N | md5sum | cut -c 1-6")"
env_set APP_ID "$(rand_string 6)"
fi
if [ -z "$(env_get APP_IPPR)" ]; then
env_set APP_IPPR "10.$(rand 50 100).$(rand 100 200)"
@@ -206,16 +215,28 @@ arg_get() {
local value=""
for var in $cur_arg; do
if [[ "$find" == "y" ]]; then
value=$var
if [[ ! $var =~ "--" ]]; then
value=$var
fi
break
fi
if [[ "--$1" == "$var" ]] || [[ "-$1" == "$var" ]]; then
find="y"
value="yes"
fi
done
echo $value
}
is_arm() {
local get_arch=`arch`
if [[ $get_arch =~ "aarch" ]] || [[ $get_arch =~ "arm" ]]; then
echo "yes"
else
echo "no"
fi
}
####################################################################################
####################################################################################
####################################################################################
@@ -228,6 +249,11 @@ fi
if [ $# -gt 0 ]; then
if [[ "$1" == "init" ]] || [[ "$1" == "install" ]]; then
shift 1
# 判断架构
if [[ "$(is_arm)" == "yes" ]] && [[ -z "$(arg_get force)" ]]; then
echo -e "${Error} ${RedBG}暂不支持arm架构强制安装请使用./cmd install --force${Font}"
exit 1
fi
# 初始化文件
rm -rf composer.lock
rm -rf package-lock.json
@@ -236,7 +262,7 @@ if [ $# -gt 0 ]; then
chmod -R 775 "${cur_path}/docker/log/supervisor"
chmod -R 775 "${cur_path}/docker/mysql/data"
# 启动容器
[ "$(arg_get port)" -gt 0 ] && env_set APP_PORT "$(arg_get port)"
[[ "$(arg_get port)" -gt 0 ]] && env_set APP_PORT "$(arg_get port)"
docker-compose up -d
docker-compose restart php
# 安装composer依赖
@@ -250,7 +276,7 @@ if [ $# -gt 0 ]; then
echo -e "${Error} ${RedBG}composer install 失败,请重试! ${Font}"
exit 1
fi
[ -z "$(env_get APP_KEY)" ] && run_exec php "php artisan key:generate"
[[ -z "$(env_get APP_KEY)" ]] && run_exec php "php artisan key:generate"
run_exec php "php bin/run --mode=prod"
# 检查数据库
remaining=10
@@ -301,9 +327,9 @@ if [ $# -gt 0 ]; then
echo -e "${OK} ${GreenBG} 卸载完成 ${Font}"
elif [[ "$1" == "reinstall" ]]; then
shift 1
./cmd uninstall
./cmd uninstall $@
sleep 3
./cmd install
./cmd install $@
elif [[ "$1" == "port" ]]; then
shift 1
env_set APP_PORT "$1"
@@ -366,10 +392,10 @@ if [ $# -gt 0 ]; then
elif [[ "$1" == "composer" ]]; then
shift 1
e="composer $@" && run_exec php "$e"
elif [[ "$1" == "super" ]]; then
elif [[ "$1" == "service" ]]; then
shift 1
supervisorctl_restart "$@"
elif [[ "$1" == "supervisorctl" ]]; then
e="service $@" && run_exec php "$e"
elif [[ "$1" == "super" ]] || [[ "$1" == "supervisorctl" ]]; then
shift 1
e="supervisorctl $@" && run_exec php "$e"
elif [[ "$1" == "models" ]]; then

View File

@@ -0,0 +1,39 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateReportsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if ( Schema::hasTable('reports') )
return;
Schema::create('reports', function (Blueprint $table) {
$table->id();
$table->timestamps();
$table->string("title")->default("")->comment("标题");
$table->enum("type", ["weekly", "daily"])->default("daily")->comment("汇报类型");
$table->unsignedBigInteger("userid")->default(0);
$table->longText("content")->nullable();
$table->index(["userid", "created_at"], "default");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('reports');
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateReportReceivesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if ( Schema::hasTable('report_receives') )
return;
Schema::create('report_receives', function (Blueprint $table) {
$table->bigIncrements("id");
$table->unsignedInteger("rid")->default(0);
$table->timestamp("receive_time")->nullable()->comment("接收时间");
$table->unsignedBigInteger("userid")->default(0)->comment("接收人");
$table->unsignedTinyInteger("read")->default(0)->comment("是否已读");
$table->index(["userid", "receive_time"], "default");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('report_receives');
}
}

View File

@@ -0,0 +1,32 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddReportSign extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('reports', function (Blueprint $table) {
$table->string("sign")->default("")->comment("汇报唯一标识");
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('reports', function (Blueprint $table) {
$table->dropColumn("sign");
});
}
}

View File

@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateProjectFlowItemsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('project_flow_items', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('project_id')->nullable()->default(0)->comment('项目ID');
$table->bigInteger('flow_id')->nullable()->default(0)->comment('流程ID');
$table->string('name', 50)->nullable()->default('')->comment('名称');
$table->string('status', 20)->nullable()->default('')->comment('状态');
$table->string('turns')->nullable()->default('')->comment('可流转');
$table->string('userids')->nullable()->default('')->comment('状态负责人ID');
$table->integer('sort')->nullable()->comment('排序');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('project_flow_items');
}
}

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateProjectFlowsTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('project_flows', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('project_id')->nullable()->default(0)->comment('项目ID');
$table->string('name', 50)->nullable()->default('')->comment('流程名称');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('project_flows');
}
}

View File

@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ProjectTasksAddFlowItemIdFlowItemName extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('project_tasks', function (Blueprint $table) {
if (!Schema::hasColumn('project_tasks', 'flow_item_id')) {
$table->bigInteger('flow_item_id')->nullable()->default(0)->after('dialog_id')->comment('工作流状态ID');
$table->string('flow_item_name', 50)->nullable()->default('')->after('flow_item_id')->comment('工作流状态名称');
}
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('project_tasks', function (Blueprint $table) {
$table->dropColumn("flow_item_id");
$table->dropColumn("flow_item_name");
});
}
}

View File

@@ -0,0 +1,42 @@
<?php
use App\Models\ProjectFlowItem;
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ProjectFlowItemsAddUsertype extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$isAdd = false;
Schema::table('project_flow_items', function (Blueprint $table) use (&$isAdd) {
if (!Schema::hasColumn('project_flow_items', 'usertype')) {
$isAdd = true;
$table->string('usertype', 10)->nullable()->default('')->after('userids')->comment('流转模式');
}
});
if ($isAdd) {
ProjectFlowItem::where("usertype", "")->update([
'usertype' => 'add',
]);
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('project_flow_items', function (Blueprint $table) {
$table->dropColumn("usertype");
});
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ProjectLogsAddRecord extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('project_logs', function (Blueprint $table) {
if (!Schema::hasColumn('project_logs', 'record')) {
$table->text('record')->nullable()->after('detail')->comment('记录数据');
}
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('project_logs', function (Blueprint $table) {
$table->dropColumn("record");
});
}
}

View File

@@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class ProjectFlowItemsAddUserlimit extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('project_flow_items', function (Blueprint $table) {
if (!Schema::hasColumn('project_flow_items', 'userlimit')) {
$table->tinyInteger('userlimit')->nullable()->default(0)->after('usertype')->comment('限制负责人');
}
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('project_flow_items', function (Blueprint $table) {
$table->dropColumn("userlimit");
});
}
}

View File

@@ -18,6 +18,8 @@ class DatabaseSeeder extends Seeder
$this->call(FilesTableSeeder::class);
$this->call(FileUsersTableSeeder::class);
$this->call(ProjectColumnsTableSeeder::class);
$this->call(ProjectFlowItemsTableSeeder::class);
$this->call(ProjectFlowsTableSeeder::class);
$this->call(ProjectLogsTableSeeder::class);
$this->call(ProjectTaskContentsTableSeeder::class);
$this->call(ProjectTaskUsersTableSeeder::class);

View File

@@ -0,0 +1,388 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class ProjectFlowItemsTableSeeder extends Seeder
{
/**
* Auto generated seed file
*
* @return void
*/
public function run()
{
if (\DB::table('project_flow_items')->count() > 0) {
return;
}
\DB::table('project_flow_items')->insert(array (
0 =>
array (
'id' => 1,
'project_id' => 2,
'flow_id' => 1,
'name' => '待处理',
'status' => 'start',
'turns' => '[1,2,3,4]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 0,
'created_at' => '2022-01-15 23:43:15',
'updated_at' => '2022-01-15 23:43:15',
),
1 =>
array (
'id' => 2,
'project_id' => 2,
'flow_id' => 1,
'name' => '进行中',
'status' => 'progress',
'turns' => '[1,2,3,4]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 1,
'created_at' => '2022-01-15 23:43:15',
'updated_at' => '2022-01-15 23:43:15',
),
2 =>
array (
'id' => 3,
'project_id' => 2,
'flow_id' => 1,
'name' => '已完成',
'status' => 'end',
'turns' => '[1,2,3,4]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 2,
'created_at' => '2022-01-15 23:43:15',
'updated_at' => '2022-01-15 23:43:15',
),
3 =>
array (
'id' => 4,
'project_id' => 2,
'flow_id' => 1,
'name' => '已取消',
'status' => 'end',
'turns' => '[1,2,3,4]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 3,
'created_at' => '2022-01-15 23:43:15',
'updated_at' => '2022-01-15 23:43:15',
),
4 =>
array (
'id' => 5,
'project_id' => 3,
'flow_id' => 2,
'name' => '待处理',
'status' => 'start',
'turns' => '[5,6,7,8]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 0,
'created_at' => '2022-01-15 23:43:23',
'updated_at' => '2022-01-15 23:43:23',
),
5 =>
array (
'id' => 6,
'project_id' => 3,
'flow_id' => 2,
'name' => '进行中',
'status' => 'progress',
'turns' => '[5,6,7,8]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 1,
'created_at' => '2022-01-15 23:43:23',
'updated_at' => '2022-01-15 23:43:23',
),
6 =>
array (
'id' => 7,
'project_id' => 3,
'flow_id' => 2,
'name' => '已完成',
'status' => 'end',
'turns' => '[5,6,7,8]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 2,
'created_at' => '2022-01-15 23:43:23',
'updated_at' => '2022-01-15 23:43:23',
),
7 =>
array (
'id' => 8,
'project_id' => 3,
'flow_id' => 2,
'name' => '已取消',
'status' => 'end',
'turns' => '[5,6,7,8]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 3,
'created_at' => '2022-01-15 23:43:23',
'updated_at' => '2022-01-15 23:43:23',
),
8 =>
array (
'id' => 9,
'project_id' => 4,
'flow_id' => 3,
'name' => '待处理',
'status' => 'start',
'turns' => '[9,10,11,12]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 0,
'created_at' => '2022-01-15 23:43:28',
'updated_at' => '2022-01-15 23:43:28',
),
9 =>
array (
'id' => 10,
'project_id' => 4,
'flow_id' => 3,
'name' => '进行中',
'status' => 'progress',
'turns' => '[9,10,11,12]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 1,
'created_at' => '2022-01-15 23:43:28',
'updated_at' => '2022-01-15 23:43:28',
),
10 =>
array (
'id' => 11,
'project_id' => 4,
'flow_id' => 3,
'name' => '已完成',
'status' => 'end',
'turns' => '[9,10,11,12]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 2,
'created_at' => '2022-01-15 23:43:28',
'updated_at' => '2022-01-15 23:43:28',
),
11 =>
array (
'id' => 12,
'project_id' => 4,
'flow_id' => 3,
'name' => '已取消',
'status' => 'end',
'turns' => '[9,10,11,12]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 3,
'created_at' => '2022-01-15 23:43:28',
'updated_at' => '2022-01-15 23:43:28',
),
12 =>
array (
'id' => 13,
'project_id' => 5,
'flow_id' => 4,
'name' => '待处理',
'status' => 'start',
'turns' => '[13,14,15,16]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 0,
'created_at' => '2022-01-15 23:43:34',
'updated_at' => '2022-01-15 23:43:34',
),
13 =>
array (
'id' => 14,
'project_id' => 5,
'flow_id' => 4,
'name' => '进行中',
'status' => 'progress',
'turns' => '[13,14,15,16]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 1,
'created_at' => '2022-01-15 23:43:34',
'updated_at' => '2022-01-15 23:43:34',
),
14 =>
array (
'id' => 15,
'project_id' => 5,
'flow_id' => 4,
'name' => '已完成',
'status' => 'end',
'turns' => '[13,14,15,16]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 2,
'created_at' => '2022-01-15 23:43:34',
'updated_at' => '2022-01-15 23:43:34',
),
15 =>
array (
'id' => 16,
'project_id' => 5,
'flow_id' => 4,
'name' => '已取消',
'status' => 'end',
'turns' => '[13,14,15,16]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 3,
'created_at' => '2022-01-15 23:43:34',
'updated_at' => '2022-01-15 23:43:34',
),
16 =>
array (
'id' => 17,
'project_id' => 6,
'flow_id' => 5,
'name' => '待处理',
'status' => 'start',
'turns' => '[17,18,19,20]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 0,
'created_at' => '2022-01-15 23:43:40',
'updated_at' => '2022-01-15 23:43:40',
),
17 =>
array (
'id' => 18,
'project_id' => 6,
'flow_id' => 5,
'name' => '进行中',
'status' => 'progress',
'turns' => '[17,18,19,20]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 1,
'created_at' => '2022-01-15 23:43:40',
'updated_at' => '2022-01-15 23:43:40',
),
18 =>
array (
'id' => 19,
'project_id' => 6,
'flow_id' => 5,
'name' => '已完成',
'status' => 'end',
'turns' => '[17,18,19,20]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 2,
'created_at' => '2022-01-15 23:43:40',
'updated_at' => '2022-01-15 23:43:40',
),
19 =>
array (
'id' => 20,
'project_id' => 6,
'flow_id' => 5,
'name' => '已取消',
'status' => 'end',
'turns' => '[17,18,19,20]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 3,
'created_at' => '2022-01-15 23:43:40',
'updated_at' => '2022-01-15 23:43:40',
),
20 =>
array (
'id' => 21,
'project_id' => 7,
'flow_id' => 6,
'name' => '待处理',
'status' => 'start',
'turns' => '[21,22,23,24]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 0,
'created_at' => '2022-01-15 23:43:45',
'updated_at' => '2022-01-15 23:43:45',
),
21 =>
array (
'id' => 22,
'project_id' => 7,
'flow_id' => 6,
'name' => '进行中',
'status' => 'progress',
'turns' => '[21,22,23,24]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 1,
'created_at' => '2022-01-15 23:43:45',
'updated_at' => '2022-01-15 23:43:45',
),
22 =>
array (
'id' => 23,
'project_id' => 7,
'flow_id' => 6,
'name' => '已完成',
'status' => 'end',
'turns' => '[21,22,23,24]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 2,
'created_at' => '2022-01-15 23:43:45',
'updated_at' => '2022-01-15 23:43:45',
),
23 =>
array (
'id' => 24,
'project_id' => 7,
'flow_id' => 6,
'name' => '已取消',
'status' => 'end',
'turns' => '[21,22,23,24]',
'userids' => '[]',
'usertype' => 'add',
'userlimit' => 0,
'sort' => 3,
'created_at' => '2022-01-15 23:43:45',
'updated_at' => '2022-01-15 23:43:45',
),
));
}
}

View File

@@ -0,0 +1,76 @@
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class ProjectFlowsTableSeeder extends Seeder
{
/**
* Auto generated seed file
*
* @return void
*/
public function run()
{
if (\DB::table('project_flows')->count() > 0) {
return;
}
\DB::table('project_flows')->insert(array (
0 =>
array (
'id' => 1,
'project_id' => 2,
'name' => 'Default',
'created_at' => '2022-01-15 23:43:15',
'updated_at' => '2022-01-15 23:43:15',
),
1 =>
array (
'id' => 2,
'project_id' => 3,
'name' => 'Default',
'created_at' => '2022-01-15 23:43:23',
'updated_at' => '2022-01-15 23:43:23',
),
2 =>
array (
'id' => 3,
'project_id' => 4,
'name' => 'Default',
'created_at' => '2022-01-15 23:43:28',
'updated_at' => '2022-01-15 23:43:28',
),
3 =>
array (
'id' => 4,
'project_id' => 5,
'name' => 'Default',
'created_at' => '2022-01-15 23:43:34',
'updated_at' => '2022-01-15 23:43:34',
),
4 =>
array (
'id' => 5,
'project_id' => 6,
'name' => 'Default',
'created_at' => '2022-01-15 23:43:40',
'updated_at' => '2022-01-15 23:43:40',
),
5 =>
array (
'id' => 6,
'project_id' => 7,
'name' => 'Default',
'created_at' => '2022-01-15 23:43:45',
'updated_at' => '2022-01-15 23:43:45',
),
));
}
}

View File

@@ -296,7 +296,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 6,
'task_id' => 8,
'userid' => 1,
'detail' => '任务标记已完成:官网项目一期',
'detail' => '标记任务已完成:官网项目一期',
'created_at' => seeders_at('2021-07-01 10:53:47'),
'updated_at' => seeders_at('2021-07-01 10:53:47'),
),
@@ -2998,7 +2998,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 27,
'task_id' => 77,
'userid' => 1,
'detail' => '任务标记已完成:🚴 里程碑 1 需求评审完成,资源准备到位',
'detail' => '标记任务已完成:🚴 里程碑 1 需求评审完成,资源准备到位',
'created_at' => seeders_at('2021-07-01 15:39:46'),
'updated_at' => seeders_at('2021-07-01 15:39:46'),
),
@@ -3229,7 +3229,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 32,
'task_id' => 85,
'userid' => 1,
'detail' => '子任务标记已完成:首页',
'detail' => '子标记任务已完成:首页',
'created_at' => seeders_at('2021-07-01 16:17:30'),
'updated_at' => seeders_at('2021-07-01 16:17:30'),
),
@@ -3240,7 +3240,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 32,
'task_id' => 85,
'userid' => 1,
'detail' => '子任务标记已完成:公司介绍',
'detail' => '子标记任务已完成:公司介绍',
'created_at' => seeders_at('2021-07-01 16:17:31'),
'updated_at' => seeders_at('2021-07-01 16:17:31'),
),
@@ -3251,7 +3251,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 32,
'task_id' => 85,
'userid' => 1,
'detail' => '子任务标记已完成:新闻动态',
'detail' => '子标记任务已完成:新闻动态',
'created_at' => seeders_at('2021-07-01 16:17:32'),
'updated_at' => seeders_at('2021-07-01 16:17:32'),
),
@@ -3262,7 +3262,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 32,
'task_id' => 85,
'userid' => 1,
'detail' => '子任务标记已完成:产品介绍',
'detail' => '子标记任务已完成:产品介绍',
'created_at' => seeders_at('2021-07-01 16:17:34'),
'updated_at' => seeders_at('2021-07-01 16:17:34'),
),
@@ -3273,7 +3273,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 32,
'task_id' => 85,
'userid' => 1,
'detail' => '子任务标记已完成:案例展示',
'detail' => '子标记任务已完成:案例展示',
'created_at' => seeders_at('2021-07-01 16:17:35'),
'updated_at' => seeders_at('2021-07-01 16:17:35'),
),
@@ -3284,7 +3284,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 32,
'task_id' => 85,
'userid' => 1,
'detail' => '子任务标记已完成:联系我们',
'detail' => '子标记任务已完成:联系我们',
'created_at' => seeders_at('2021-07-01 16:17:36'),
'updated_at' => seeders_at('2021-07-01 16:17:36'),
),
@@ -3295,7 +3295,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 32,
'task_id' => 85,
'userid' => 1,
'detail' => '任务标记已完成:产品官网设计',
'detail' => '标记任务已完成:产品官网设计',
'created_at' => seeders_at('2021-07-01 16:17:37'),
'updated_at' => seeders_at('2021-07-01 16:17:37'),
),
@@ -3306,7 +3306,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 32,
'task_id' => 85,
'userid' => 1,
'detail' => '子任务标记未完成:联系我们',
'detail' => '标记子任务未完成:联系我们',
'created_at' => seeders_at('2021-07-01 16:17:41'),
'updated_at' => seeders_at('2021-07-01 16:17:41'),
),
@@ -3317,7 +3317,7 @@ class ProjectLogsTableSeeder extends Seeder
'column_id' => 32,
'task_id' => 85,
'userid' => 1,
'detail' => '任务标记未完成:产品官网设计',
'detail' => '标记任务未完成:产品官网设计',
'created_at' => seeders_at('2021-07-01 16:17:44'),
'updated_at' => seeders_at('2021-07-01 16:17:44'),
),

View File

@@ -28,6 +28,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 2,
'dialog_id' => 0,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => '说明:将进度分成多级
每张卡片为一个项目任务,标签表示任务状况
通过将卡片拖至不同的进度列表下,来表示各项目进度',
@@ -54,6 +56,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 2,
'dialog_id' => 0,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => '官网项目',
'color' => '',
'desc' => '',
@@ -78,6 +82,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 2,
'dialog_id' => 0,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => '新增职位需求',
'color' => '',
'desc' => '',
@@ -102,6 +108,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 2,
'dialog_id' => 0,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => '更新公司简介',
'color' => '',
'desc' => '',
@@ -126,6 +134,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 3,
'dialog_id' => 0,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => '官网项目四期',
'color' => '',
'desc' => '',
@@ -150,6 +160,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 4,
'dialog_id' => 16,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => '官网项目三期',
'color' => '',
'desc' => '',
@@ -174,6 +186,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 5,
'dialog_id' => 0,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => '官网项目二期',
'color' => '',
'desc' => '',
@@ -198,6 +212,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 6,
'dialog_id' => 0,
'flow_item_id' => 3,
'flow_item_name' => 'end|已完成',
'name' => '官网项目一期',
'color' => '',
'desc' => '',
@@ -222,6 +238,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 7,
'dialog_id' => 18,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => '免费高品质的Sketch资源',
'color' => '',
'desc' => 'https://sketchrepo.com/',
@@ -246,6 +264,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 7,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => '免费高品质的PSD资源',
'color' => '',
'desc' => 'https://psdrepo.com/',
@@ -270,6 +290,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 7,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => '免费高清灵感图片网(偏文艺)',
'color' => '',
'desc' => 'https://magdeleine.co/',
@@ -294,6 +316,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 7,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => '每天发现充满灵感且美丽的图片',
'color' => '',
'desc' => 'https://weheartit.com/',
@@ -318,6 +342,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 8,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => '花瓣网:设计师寻找灵感的天堂',
'color' => '',
'desc' => 'https://huaban.com/',
@@ -342,6 +368,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 8,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'WallHaven高清壁纸图片搜索引擎',
'color' => '',
'desc' => 'https://wallhaven.typepad.com/',
@@ -366,6 +394,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 8,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Pexels免费高品质图片 可商用',
'color' => '',
'desc' => 'https://www.pexels.com/',
@@ -390,6 +420,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 9,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'RetinizeiOS切图神器',
'color' => '',
'desc' => 'http://retinize.it/',
@@ -414,6 +446,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 9,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'GuideGuide一款PS参考线插件',
'color' => '',
'desc' => 'https://guideguide.me/photoshop/',
@@ -438,6 +472,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 9,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Assistor PS一个功能强大的PS辅助工具',
'color' => '',
'desc' => 'http://wit-web.azurewebsites.net/assistor/download',
@@ -462,6 +498,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 10,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Fontello图标字体生成器',
'color' => '',
'desc' => 'http://fontello.com/',
@@ -486,6 +524,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 10,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'inconfont: 免费提供高度可辨识符号图标',
'color' => '',
'desc' => 'https://www.iconfont.cn/',
@@ -510,6 +550,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 10,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'The Noun Project免费提供高度可辨识符号图标',
'color' => '',
'desc' => 'https://thenounproject.com/',
@@ -534,6 +576,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 10,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'EasyIcon免费图标搜索和下载平台',
'color' => '',
'desc' => 'https://www.easyicon.net/',
@@ -558,6 +602,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 10,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Icon Deposit一个奇妙的图标下载站',
'color' => '',
'desc' => 'https://www.icondeposit.com/',
@@ -582,6 +628,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 10,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'iConifyMac平台的苹果应用图标自动化生成工具',
'color' => '',
'desc' => 'https://iconify.net/',
@@ -606,6 +654,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 11,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Logaster教你在线几分钟内搞定专业的LOGO',
'color' => '',
'desc' => '设计https://www.logaster.cn/',
@@ -630,6 +680,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 11,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'LogoLounge国际知名的LOGO设计权威网站',
'color' => '',
'desc' => 'https://www.logolounge.com/',
@@ -654,6 +706,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 11,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'LogoMoose一个优秀的logo素材站点',
'color' => '',
'desc' => 'https://www.logomoose.com/',
@@ -678,6 +732,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 11,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'LOGOED一个展示Logo设计的博客',
'color' => '',
'desc' => 'http://www.logoed.co.uk/page/2/',
@@ -702,6 +758,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 11,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Logo of the Day汇集世界各地优秀LOGO作品的站点',
'color' => '',
'desc' => 'https://logooftheday.com/',
@@ -726,6 +784,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 5,
'dialog_id' => 0,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => 'asdasdad1111',
'color' => '',
'desc' => '7777777',
@@ -750,6 +810,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 5,
'dialog_id' => 0,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => 'hjhjhjjh',
'color' => '',
'desc' => '',
@@ -774,6 +836,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 11,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Logo of the Day汇集世界各地优秀LOGO作品的站点',
'color' => '',
'desc' => '',
@@ -798,6 +862,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 11,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'LogoDesignLoveLogo设计技巧分享网',
'color' => '',
'desc' => 'LogoDesignLoveLogo设计技巧分享网',
@@ -822,6 +888,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 11,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'LogoDesignLoveLogo设计技巧分享网',
'color' => '',
'desc' => '',
@@ -846,6 +914,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 12,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Coolors自动生成配色色板的小工具',
'color' => '',
'desc' => 'https://coolors.co/',
@@ -870,6 +940,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 12,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Material PaletteMaterial Design专用在线配色工具',
'color' => '',
'desc' => 'https://www.materialpalette.com/',
@@ -894,6 +966,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 12,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Web安全色WEB设计、开发中常用的安全颜色',
'color' => '',
'desc' => 'https://www.bootcss.com/p/websafecolors/',
@@ -918,6 +992,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 12,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'ColorZilla火狐浏览器网页取色器插件',
'color' => '',
'desc' => 'https://www.colorzilla.com/',
@@ -942,6 +1018,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 12,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'Color Palette Generator图片配色工具',
'color' => '',
'desc' => '',
@@ -966,6 +1044,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 12,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'inconfont: 免费提供高度可辨识符号图标',
'color' => '',
'desc' => 'https://www.iconfont.cn/',
@@ -990,6 +1070,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 12,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'inconfont: 免费提供高度可辨识符号图标https://www.iconfont.cn/',
'color' => '',
'desc' => 'https://www.iconfont.cn/',
@@ -1014,6 +1096,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 3,
'column_id' => 12,
'dialog_id' => 0,
'flow_item_id' => 5,
'flow_item_name' => 'start|待处理',
'name' => 'https://www.iconfont.cn/',
'color' => '',
'desc' => '',
@@ -1038,6 +1122,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '将收集箱的事务进行判断。要立即执行进入Q2列表。非立即执行判断——1.不做删掉、2.稍晚再做进入「稍后做」、3.可做可不做的任务或可能有用的资源进入「Mark」列表',
'color' => '',
'desc' => '',
@@ -1062,6 +1148,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '2分钟内能做完贴上2分钟标签进入「2分钟速战」列表。2分钟以上做完的事务进入Q3',
'color' => '',
'desc' => '',
@@ -1086,6 +1174,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '判断能否一步做完能进入Q4不能打上多步标签进入「项目清单」或将多步骤任务分解成多个一步做完任务进入Q4。',
'color' => '',
'desc' => '',
@@ -1110,6 +1200,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '如果自己做,打上自己做标签(进入「执行清单」);如果别人做,打上别人做标签(进入「等待清单」)。',
'color' => '',
'desc' => '',
@@ -1134,6 +1226,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 2,
'column_id' => 2,
'dialog_id' => 0,
'flow_item_id' => 1,
'flow_item_name' => 'start|待处理',
'name' => '❓❗ 说明:将进度分成多级
每张卡片为一个项目任务,标签表示任务状况
@@ -1162,6 +1256,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '每天晚上复查整套流程',
'color' => '',
'desc' => '',
@@ -1186,6 +1282,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '1.检查「收集箱」是否清空。',
'color' => '',
'desc' => '',
@@ -1210,6 +1308,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '2.检查「Mark」是否有条目需要执行转化成行动或项目。',
'color' => '',
'desc' => '',
@@ -1234,6 +1334,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '3.检查「项目清单」了解项目进度。',
'color' => '',
'desc' => '',
@@ -1258,6 +1360,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '4.检查「等待清单」是否有条目需要转化成行动,也就是催促。',
'color' => '',
'desc' => '',
@@ -1282,6 +1386,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 13,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '5.检查各清单是否有已完成,完成的、已作废的卡片,立刻删除。',
'color' => '',
'desc' => '',
@@ -1306,6 +1412,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 14,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '任何事务或信息,先以最简单的方式记录到“收集箱”。然后判断,贴上标签后,拖动到相应列表里',
'color' => '',
'desc' => '',
@@ -1330,6 +1438,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 15,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '优先级1立即去做的事',
'color' => '',
'desc' => '',
@@ -1354,6 +1464,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 14,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '任何事务或信息,先以最简单的方式记录到“收集箱”。然后判断,贴上标签后,拖动到相应列表里',
'color' => '',
'desc' => '',
@@ -1378,6 +1490,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 16,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '优先级2主要的执行清单',
'color' => '',
'desc' => '',
@@ -1402,6 +1516,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 17,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '优先级3存放需要多步骤做的事持续追踪',
'color' => '',
'desc' => '',
@@ -1426,6 +1542,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 17,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '可以为这个多步骤项目单独建一个项目,并把项目的链接放到卡片的详情页里,点击就能跳转进去。',
'color' => '',
'desc' => '',
@@ -1450,6 +1568,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 17,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '活动策划',
'color' => '',
'desc' => '',
@@ -1474,6 +1594,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 16,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '填问卷',
'color' => '',
'desc' => '',
@@ -1498,6 +1620,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 18,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '存放等待协同的事',
'color' => '',
'desc' => '',
@@ -1522,6 +1646,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 18,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '设计稿反馈',
'color' => '',
'desc' => '',
@@ -1546,6 +1672,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 18,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '存放等待协同的事',
'color' => '',
'desc' => '',
@@ -1570,6 +1698,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 19,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '存放稍后做的任务',
'color' => '',
'desc' => '',
@@ -1594,6 +1724,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 19,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '阅实习生简历',
'color' => '',
'desc' => '',
@@ -1618,6 +1750,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 20,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '存放可做可不做的任务,以及各种可能用到的资源',
'color' => '',
'desc' => '',
@@ -1642,6 +1776,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 4,
'column_id' => 20,
'dialog_id' => 0,
'flow_item_id' => 9,
'flow_item_name' => 'start|待处理',
'name' => '团建KTV',
'color' => '',
'desc' => '',
@@ -1666,6 +1802,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 5,
'column_id' => 21,
'dialog_id' => 0,
'flow_item_id' => 13,
'flow_item_name' => 'start|待处理',
'name' => '产品新需求',
'color' => '',
'desc' => '',
@@ -1690,6 +1828,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 5,
'column_id' => 22,
'dialog_id' => 0,
'flow_item_id' => 13,
'flow_item_name' => 'start|待处理',
'name' => '需要调研的需求',
'color' => '',
'desc' => '',
@@ -1714,6 +1854,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 5,
'column_id' => 23,
'dialog_id' => 17,
'flow_item_id' => 13,
'flow_item_name' => 'start|待处理',
'name' => '进入交互设计的需求',
'color' => '',
'desc' => '',
@@ -1738,6 +1880,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 5,
'column_id' => 25,
'dialog_id' => 0,
'flow_item_id' => 13,
'flow_item_name' => 'start|待处理',
'name' => '设计稿(放入设计稿)',
'color' => '',
'desc' => '',
@@ -1762,6 +1906,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 5,
'column_id' => 25,
'dialog_id' => 0,
'flow_item_id' => 13,
'flow_item_name' => 'start|待处理',
'name' => '提测(放入提测时间规划表)',
'color' => '',
'desc' => '',
@@ -1786,6 +1932,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 5,
'column_id' => 25,
'dialog_id' => 0,
'flow_item_id' => 13,
'flow_item_name' => 'start|待处理',
'name' => '发布流程(放入发布流程,应用文案等)',
'color' => '',
'desc' => '',
@@ -1810,6 +1958,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 5,
'column_id' => 25,
'dialog_id' => 0,
'flow_item_id' => 13,
'flow_item_name' => 'start|待处理',
'name' => '-----上线需求-----(将左边列表中的需求拖动至下方,表示本版本上线需求)',
'color' => '',
'desc' => '',
@@ -1834,6 +1984,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 6,
'column_id' => 26,
'dialog_id' => 0,
'flow_item_id' => 17,
'flow_item_name' => 'start|待处理',
'name' => '将小组一年工作目标拆解,设置出里程碑时间节点。并指派相关责任人。用标签来展示进行状况',
'color' => '',
'desc' => '',
@@ -1858,6 +2010,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 6,
'column_id' => 27,
'dialog_id' => 0,
'flow_item_id' => 19,
'flow_item_name' => 'end|已完成',
'name' => '🚴 里程碑 1 需求评审完成,资源准备到位',
'color' => '',
'desc' => '',
@@ -1882,6 +2036,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 6,
'column_id' => 27,
'dialog_id' => 0,
'flow_item_id' => 17,
'flow_item_name' => 'start|待处理',
'name' => '🚴 里程碑 2 设计完成,进行评审',
'color' => '',
'desc' => '',
@@ -1906,6 +2062,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 6,
'column_id' => 28,
'dialog_id' => 0,
'flow_item_id' => 17,
'flow_item_name' => 'start|待处理',
'name' => '🚴 里程碑 3 产品开发完成,开始提测',
'color' => '',
'desc' => '',
@@ -1930,6 +2088,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 6,
'column_id' => 28,
'dialog_id' => 0,
'flow_item_id' => 17,
'flow_item_name' => 'start|待处理',
'name' => '🚴 里程碑 4 测试完成准备线上发布',
'color' => '',
'desc' => '',
@@ -1954,6 +2114,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 6,
'column_id' => 28,
'dialog_id' => 0,
'flow_item_id' => 17,
'flow_item_name' => 'start|待处理',
'name' => '测试1',
'color' => '',
'desc' => '',
@@ -1978,6 +2140,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 6,
'column_id' => 28,
'dialog_id' => 0,
'flow_item_id' => 17,
'flow_item_name' => 'start|待处理',
'name' => '测试2',
'color' => '',
'desc' => '',
@@ -2002,6 +2166,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 6,
'column_id' => 28,
'dialog_id' => 0,
'flow_item_id' => 17,
'flow_item_name' => 'start|待处理',
'name' => '测试3',
'color' => '',
'desc' => '',
@@ -2026,6 +2192,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 6,
'column_id' => 29,
'dialog_id' => 0,
'flow_item_id' => 17,
'flow_item_name' => 'start|待处理',
'name' => '🚴 里程碑 5 市场发布',
'color' => '',
'desc' => '',
@@ -2050,6 +2218,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 7,
'column_id' => 32,
'dialog_id' => 0,
'flow_item_id' => 21,
'flow_item_name' => 'start|待处理',
'name' => '产品官网设计',
'color' => '',
'desc' => '',
@@ -2074,6 +2244,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 7,
'column_id' => 32,
'dialog_id' => 0,
'flow_item_id' => 23,
'flow_item_name' => 'end|已完成',
'name' => '首页',
'color' => '',
'desc' => '',
@@ -2098,6 +2270,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 7,
'column_id' => 32,
'dialog_id' => 0,
'flow_item_id' => 23,
'flow_item_name' => 'end|已完成',
'name' => '公司介绍',
'color' => '',
'desc' => '',
@@ -2122,6 +2296,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 7,
'column_id' => 32,
'dialog_id' => 0,
'flow_item_id' => 23,
'flow_item_name' => 'end|已完成',
'name' => '新闻动态',
'color' => '',
'desc' => '',
@@ -2146,6 +2322,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 7,
'column_id' => 32,
'dialog_id' => 0,
'flow_item_id' => 23,
'flow_item_name' => 'end|已完成',
'name' => '产品介绍',
'color' => '',
'desc' => '',
@@ -2170,6 +2348,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 7,
'column_id' => 32,
'dialog_id' => 0,
'flow_item_id' => 23,
'flow_item_name' => 'end|已完成',
'name' => '案例展示',
'color' => '',
'desc' => '',
@@ -2194,6 +2374,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 7,
'column_id' => 32,
'dialog_id' => 0,
'flow_item_id' => 21,
'flow_item_name' => 'start|待处理',
'name' => '联系我们',
'color' => '',
'desc' => '',
@@ -2218,6 +2400,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 7,
'column_id' => 32,
'dialog_id' => 0,
'flow_item_id' => 21,
'flow_item_name' => 'start|待处理',
'name' => '官网新增一级栏目,“招聘信息”',
'color' => '',
'desc' => '',
@@ -2242,6 +2426,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 7,
'column_id' => 33,
'dialog_id' => 0,
'flow_item_id' => 21,
'flow_item_name' => 'start|待处理',
'name' => '产品官网',
'color' => '',
'desc' => '',
@@ -2266,6 +2452,8 @@ class ProjectTasksTableSeeder extends Seeder
'project_id' => 5,
'column_id' => 24,
'dialog_id' => 0,
'flow_item_id' => 13,
'flow_item_name' => 'start|待处理',
'name' => '版本的确定',
'color' => '',
'desc' => '',

View File

@@ -4,8 +4,8 @@ services:
php:
container_name: "dootask-php-${APP_ID}"
image: "kuaifan/php:swoole-8.0"
shm_size: "1024m"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./docker/crontab/crontab.conf:/etc/supervisor/conf.d/crontab.conf
- ./docker/php/php.conf:/etc/supervisor/conf.d/php.conf
- ./docker/php/php.ini:/usr/local/etc/php/php.ini

View File

@@ -63,6 +63,8 @@ server {
proxy_set_header Server-Port $server_port;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_read_timeout 600s;
proxy_send_timeout 600s;
proxy_pass http://service;
}

114
electron/build.js vendored
View File

@@ -3,103 +3,11 @@ const fse = require('fs-extra');
const path = require('path')
const inquirer = require('inquirer');
const child_process = require('child_process');
const utils = require('./utils');
const config = require('../package.json')
const argv = process.argv;
const env = require('dotenv').config({ path: './.env' })
/**
* 删除文件夹及文件
* @param path
*/
function deleteFile(path) {
let files = [];
if (fs.existsSync(path)) {
files = fs.readdirSync(path);
files.forEach(function (file, index) {
let curPath = path + "/" + file;
if (fs.statSync(curPath).isDirectory()) {
deleteFile(curPath);
} else {
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
}
/**
* 复制文件
* @param srcPath
* @param tarPath
* @param cb
*/
function copyFile(srcPath, tarPath, cb) {
let rs = fs.createReadStream(srcPath)
rs.on('error', function (err) {
if (err) {
console.log('read error', srcPath)
}
cb && cb(err)
})
let ws = fs.createWriteStream(tarPath)
ws.on('error', function (err) {
if (err) {
console.log('write error', tarPath)
}
cb && cb(err)
})
ws.on('close', function (ex) {
cb && cb(ex)
})
rs.pipe(ws)
}
/**
* 给地址加上前后
* @param str
* @returns {string}
*/
function formatUrl(str) {
let url;
if (str.substring(0, 7) === "http://" ||
str.substring(0, 8) === "https://") {
url = str.trim();
} else {
url = "http://" + str.trim();
}
if (url.substring(url.length - 1) != "/") {
url += "/"
}
return url;
}
/**
* 正则提取域名
* @param weburl
* @returns {string|string}
*/
function getDomain(weburl) {
let urlReg = /http(s)?:\/\/([^\/]+)/i;
let domain = weburl.match(urlReg);
return ((domain != null && domain.length > 0) ? domain[2] : "");
}
/**
* 右边是否包含
* @param string
* @param find
* @returns {boolean}
*/
function rightExists(string, find) {
string += "";
find += "";
return (string.substring(string.length - find.length) === find);
}
/** ***************************************************************************************************/
/** ***************************************************************************************************/
/** ***************************************************************************************************/
const electronDir = path.resolve(__dirname, "public");
const nativeCachePath = path.resolve(__dirname, ".native");
const devloadCachePath = path.resolve(__dirname, ".devload");
@@ -108,7 +16,7 @@ const packageBakFile = path.resolve(__dirname, "package-bak.json");
const platform = ["build-mac", "build-mac-arm", "build-win"];
// 生成配置、编译应用
function start(data, publish) {
function startBuild(data, publish) {
console.log("Name: " + data.name);
console.log("AppId: " + data.id);
console.log("Version: " + config.version);
@@ -117,10 +25,10 @@ function start(data, publish) {
title: data.name,
version: config.version,
origin: "./",
apiUrl: formatUrl(data.url) + "api/",
apiUrl: utils.formatUrl(data.url) + "api/",
}
fs.writeFileSync(electronDir + "/config.js", "window.systemInformation = " + JSON.stringify(systemInfo, null, 2), 'utf8');
fs.writeFileSync(nativeCachePath, formatUrl(data.url));
fs.writeFileSync(electronDir + "/config.js", "window.systemInfo = " + JSON.stringify(systemInfo, null, 2), 'utf8');
fs.writeFileSync(nativeCachePath, utils.formatUrl(data.url));
fs.writeFileSync(devloadCachePath, "", 'utf8');
// index.html
let indexFile = path.resolve(electronDir, "index.html");
@@ -134,8 +42,8 @@ function start(data, publish) {
econfig.name = data.name;
econfig.version = config.version;
econfig.build.appId = data.id;
econfig.build.artifactName = getDomain(data.url) + "-v${version}-${os}-${arch}.${ext}";
econfig.build.nsis.artifactName = getDomain(data.url) + "-v${version}-${os}-${arch}.${ext}";
econfig.build.artifactName = utils.getDomain(data.url) + "-v${version}-${os}-${arch}.${ext}";
econfig.build.nsis.artifactName = utils.getDomain(data.url) + "-v${version}-${os}-${arch}.${ext}";
econfig.build.pkg.mustClose = [data.id];
fs.writeFileSync(packageFile, JSON.stringify(econfig, null, 2), 'utf8');
// build
@@ -146,7 +54,7 @@ function start(data, publish) {
if (["dev"].includes(argv[2])) {
// 开发模式
fs.writeFileSync(devloadCachePath, formatUrl("127.0.0.1:" + env.parsed.APP_PORT), 'utf8');
fs.writeFileSync(devloadCachePath, utils.formatUrl("127.0.0.1:" + env.parsed.APP_PORT), 'utf8');
child_process.spawn("npx", ["mix", "watch", "--hot", "--", "--env", "--electron"], {stdio: "inherit"});
child_process.spawn("npm", ["run", "start-quiet"], {stdio: "inherit", cwd: "electron"});
} else if (platform.includes(argv[2])) {
@@ -154,7 +62,7 @@ if (["dev"].includes(argv[2])) {
config.app.sites.forEach((data) => {
if (data.name && data.id && data.url) {
data.platform = argv[2];
start(data, true)
startBuild(data, true)
}
})
} else {
@@ -171,7 +79,7 @@ if (["dev"].includes(argv[2])) {
return undefined;
},
validate: function (value) {
if (!rightExists(value, "/")) {
if (!utils.rightExists(value, "/")) {
return '网址必须以 "/" 结尾';
}
return value !== ''
@@ -198,7 +106,7 @@ if (["dev"].includes(argv[2])) {
];
inquirer.prompt(questions).then(answers => {
answers.platform.forEach(platform => {
start({
startBuild({
"name": config.name,
"id": config.app.id,
"url": answers.website,

View File

@@ -34,7 +34,7 @@
</div>
<script type="text/javascript">
document.writeln("<script src=\'./js/app.js?v=" + window.systemInformation.version + "\'><\/script>");
document.writeln("<script src=\'./js/app.js?v=" + window.systemInfo.version + "\'><\/script>");
</script>
</body>

185
electron/main.js vendored
View File

@@ -1,45 +1,63 @@
const fs = require('fs')
const fse = require('fs-extra')
const os = require("os");
const path = require('path')
const XLSX = require('xlsx');
const {app, BrowserWindow, ipcMain, dialog} = require('electron')
const utils = require('./utils');
const config = require('./package.json');
const log = require("electron-log");
let mainWindow = null,
subWindow = [],
willQuitApp = false,
inheritClose = false,
devloadUrl = "",
devloadCachePath = path.resolve(__dirname, ".devload"),
devloadUrl = "";
downloadList = [],
downloadCacheFile = path.join(app.getPath('cache'), config.name, '.downloadCache');
if (fs.existsSync(devloadCachePath)) {
devloadUrl = fs.readFileSync(devloadCachePath, 'utf8')
}
function runNum(str, fixed) {
let _s = Number(str);
if (_s + "" === "NaN") {
_s = 0;
}
if (/^[0-9]*[1-9][0-9]*$/.test(fixed)) {
_s = _s.toFixed(fixed);
let rs = _s.indexOf('.');
if (rs < 0) {
_s += ".";
for (let i = 0; i < fixed; i++) {
_s += "0";
}
}
}
return _s;
if (fs.existsSync(downloadCacheFile)) {
downloadList = utils.jsonParse(fs.readFileSync(downloadCacheFile, 'utf8'), [])
} else {
fse.ensureDirSync(path.join(app.getPath('cache'), config.name))
}
function randomString(len) {
len = len || 32;
let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678oOLl9gqVvUuI1';
let maxPos = $chars.length;
let pwd = '';
for (let i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
function downloadUpdate(item) {
const chain = item.getURLChain()
if (chain.length == 0) {
return
}
let currentState = item.getState()
if (currentState == "progressing" && item.isPaused()) {
currentState = "paused"
}
//
const downloadItem = downloadList.find(item => item.url == chain[0])
if (downloadItem && downloadItem.state != currentState) {
downloadItem.state = currentState;
downloadItem.result = {
url: item.getURL(),
name: item.getFilename(),
savePath: item.getSavePath(),
mimeType: item.getMimeType(),
totalBytes: item.getTotalBytes(),
chain,
};
fs.writeFileSync(downloadCacheFile, utils.jsonStringify(downloadList), 'utf8');
//
if (currentState == 'completed') {
mainWindow.webContents.send("downloadDone", downloadItem)
log.info("下载完成", downloadItem)
} else {
mainWindow.webContents.send("downloadUpdate", downloadItem)
log.info("下载更新", downloadItem)
}
}
return pwd;
}
function createMainWindow() {
@@ -54,7 +72,7 @@ function createMainWindow() {
contextIsolation: false
}
})
mainWindow.webContents.setUserAgent(mainWindow.webContents.getUserAgent() + " MainTaskWindow/1.0");
mainWindow.webContents.setUserAgent(mainWindow.webContents.getUserAgent() + " MainTaskWindow/" + process.platform + "/" + os.arch() + "/1.0");
if (devloadUrl) {
mainWindow.loadURL(devloadUrl).then(r => {
@@ -86,6 +104,16 @@ function createMainWindow() {
}
}
})
mainWindow.webContents.session.on('will-download', (event, item) => {
item.setSavePath(path.join(app.getPath('cache'), config.name, item.getFilename()));
item.on('updated', () => {
downloadUpdate(item)
})
item.on('done', () => {
downloadUpdate(item)
})
})
}
function createSubWindow(args) {
@@ -100,7 +128,7 @@ function createSubWindow(args) {
}
}
let name = args.name || "auto_" + randomString(6);
let name = args.name || "auto_" + utils.randomString(6);
let item = subWindow.find(item => item.name == name);
let browser = item ? item.browser : null;
if (browser) {
@@ -139,7 +167,7 @@ function createSubWindow(args) {
})
subWindow.push({ name, browser })
}
browser.webContents.setUserAgent(browser.webContents.getUserAgent() + " SubTaskWindow/1.0" + (args.userAgent ? (" " + args.userAgent) : ""));
browser.webContents.setUserAgent(browser.webContents.getUserAgent() + " SubTaskWindow/" + process.platform + "/" + os.arch() + "/1.0" + (args.userAgent ? (" " + args.userAgent) : ""));
if (devloadUrl) {
browser.loadURL(devloadUrl + '#' + (args.hash || args.path)).then(r => {
@@ -172,16 +200,77 @@ app.on('before-quit', () => {
willQuitApp = true
})
/**
* 继承关闭窗口事件
*/
ipcMain.on('inheritClose', (event) => {
inheritClose = true
event.returnValue = "ok"
})
/**
* 下载文件
* @param args {url}
*/
ipcMain.on('downloadFile', (event, args) => {
event.returnValue = "ok"
//
let appendJson = {state: "progressing", startTime: utils.Time()}
let downloadItem = downloadList.find(({url}) => url == args.url)
if (downloadItem) {
switch (downloadItem.state) {
case "completed":
if (fs.existsSync(downloadItem.result.savePath)) { // 下载完成,文件存在
log.info("下载已完成", downloadItem)
mainWindow.webContents.send("downloadDone", downloadItem)
return
}
break;
case "progressing":
if (downloadItem.startTime + 480 > utils.Time()) { // 下载中未超时超时时间8分钟
log.info("下载已存在", downloadItem)
return;
}
break;
}
downloadItem = Object.assign(downloadItem, appendJson)
} else {
downloadList.push(downloadItem = Object.assign(args, appendJson))
}
fs.writeFileSync(downloadCacheFile, utils.jsonStringify(downloadList), 'utf8');
mainWindow.webContents.downloadURL(downloadItem.url);
log.info("下载开始", downloadItem)
})
/**
* 打开文件
* @param args {path}
*/
ipcMain.on('openFile', (event, args) => {
utils.openFile(args.path)
event.returnValue = "ok"
})
/**
* 退出客户端
*/
ipcMain.on('windowQuit', (event) => {
event.returnValue = "ok"
app.quit();
})
/**
* 创建路由窗口
* @param args {path, ?}
*/
ipcMain.on('windowRouter', (event, args) => {
createSubWindow(args)
event.returnValue = "ok"
})
/**
* 隐藏窗口mac隐藏其他关闭
*/
ipcMain.on('windowHidden', (event) => {
if (process.platform === 'darwin') {
app.hide();
@@ -191,12 +280,19 @@ ipcMain.on('windowHidden', (event) => {
event.returnValue = "ok"
})
/**
* 关闭窗口
*/
ipcMain.on('windowClose', (event) => {
const win = BrowserWindow.fromWebContents(event.sender);
win.close()
event.returnValue = "ok"
})
/**
* 设置窗口尺寸
* @param args {width, height, autoZoom, minWidth, minHeight, maxWidth, maxHeight}
*/
ipcMain.on('windowSize', (event, args) => {
const win = BrowserWindow.fromWebContents(event.sender);
if (win) {
@@ -232,23 +328,34 @@ ipcMain.on('windowSize', (event, args) => {
event.returnValue = "ok"
})
/**
* 设置窗口最小尺寸
* @param args {minWidth, minHeight}
*/
ipcMain.on('windowMinSize', (event, args) => {
const win = BrowserWindow.fromWebContents(event.sender);
if (win) {
win.setMinimumSize(args.width || win.getMinimumSize()[0], args.height || win.getMinimumSize()[1])
win.setMinimumSize(args.minWidth || win.getMinimumSize()[0], args.minHeight || win.getMinimumSize()[1])
}
event.returnValue = "ok"
})
/**
* 设置窗口最大尺寸
* @param args {maxWidth, maxHeight}
*/
ipcMain.on('windowMaxSize', (event, args) => {
const win = BrowserWindow.fromWebContents(event.sender);
if (win) {
win.setMaximumSize(args.width || win.getMaximumSize()[0], args.height || win.getMaximumSize()[1])
win.setMaximumSize(args.maxWidth || win.getMaximumSize()[0], args.maxHeight || win.getMaximumSize()[1])
}
event.returnValue = "ok"
})
ipcMain.on('windowCenter', (event, args) => {
/**
* 窗口居中
*/
ipcMain.on('windowCenter', (event) => {
const win = BrowserWindow.fromWebContents(event.sender);
if (win) {
win.center();
@@ -256,6 +363,9 @@ ipcMain.on('windowCenter', (event, args) => {
event.returnValue = "ok"
})
/**
* 窗口最大化或恢复
*/
ipcMain.on('windowMax', (event) => {
const win = BrowserWindow.fromWebContents(event.sender);
if (win.isMaximized()) {
@@ -266,6 +376,10 @@ ipcMain.on('windowMax', (event) => {
event.returnValue = "ok"
})
/**
* 给主窗口发送信息
* @param args {channel, data}
*/
ipcMain.on('sendForwardMain', (event, args) => {
if (mainWindow) {
mainWindow.webContents.send(args.channel, args.data)
@@ -273,12 +387,16 @@ ipcMain.on('sendForwardMain', (event, args) => {
event.returnValue = "ok"
})
/**
* 设置Dock标记
* @param args
*/
ipcMain.on('setDockBadge', (event, args) => {
if(process.platform !== 'darwin'){
// Mac only
return;
}
if (runNum(args) > 0) {
if (utils.runNum(args) > 0) {
app.dock.setBadge(String(args))
} else {
app.dock.setBadge("")
@@ -286,6 +404,9 @@ ipcMain.on('setDockBadge', (event, args) => {
event.returnValue = "ok"
})
/**
* 保存sheets
*/
ipcMain.on('saveSheet', (event, data, filename, opts) => {
const EXTENSIONS = "xls|xlsx|xlsm|xlsb|xml|csv|txt|dif|sylk|slk|prn|ods|fods|htm|html".split("|");
dialog.showSaveDialog({

View File

@@ -1,6 +1,6 @@
{
"name": "DooTask",
"version": "0.5.52",
"version": "0.6.80",
"description": "DooTask is task management system.",
"main": "main.js",
"license": "MIT",
@@ -25,7 +25,7 @@
},
"repository": {
"type": "git",
"url": "git+https://github.com/kuaifan/dootask.git"
"url": "https://github.com/kuaifan/dootask.git"
},
"devDependencies": {
"@electron-forge/cli": "^6.0.0-beta.61",
@@ -36,11 +36,12 @@
"dmg-license": "^1.0.10",
"dotenv": "^10.0.0",
"electron": "^16.0.5",
"electron-builder": "^22.14.5",
"electron-log": "^4.4.3"
"electron-builder": "^22.14.5"
},
"dependencies": {
"axios": "^0.24.0",
"electron-squirrel-startup": "^1.0.0",
"electron-log": "^4.4.3",
"fs-extra": "^10.0.0",
"xlsx": "^0.17.2"
},
@@ -50,7 +51,8 @@
"files": [
"public/**/*",
"main.js",
"preload.js"
"preload.js",
"utils.js"
],
"mac": {
"icon": "../resources/assets/statics/public/images/logo-app.png",

272
electron/utils.js vendored Normal file
View File

@@ -0,0 +1,272 @@
const fs = require("fs");
const {shell} = require("electron");
module.exports = {
/**
* 是否数组
* @param obj
* @returns {boolean}
*/
isArray(obj) {
return typeof (obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == '[object array]' && typeof obj.length == "number";
},
/**
* 是否数组对象
* @param obj
* @returns {boolean}
*/
isJson(obj) {
return typeof (obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && typeof obj.length == "undefined";
},
/**
* 将一个 JSON 字符串转换为对象已try
* @param str
* @param defaultVal
* @returns {*}
*/
jsonParse(str, defaultVal = undefined) {
if (str === null) {
return defaultVal ? defaultVal : {};
}
if (typeof str === "object") {
return str;
}
try {
return JSON.parse(str.replace(/\n/g,"\\n").replace(/\r/g,"\\r"));
} catch (e) {
return defaultVal ? defaultVal : {};
}
},
/**
* 将 JavaScript 值转换为 JSON 字符串已try
* @param json
* @param defaultVal
* @returns {string}
*/
jsonStringify(json, defaultVal = undefined) {
if (typeof json !== 'object') {
return json;
}
try{
return JSON.stringify(json);
}catch (e) {
return defaultVal ? defaultVal : "";
}
},
/**
* 随机数字
* @param str
* @param fixed
* @returns {number}
*/
runNum(str, fixed = null) {
let _s = Number(str);
if (_s + "" === "NaN") {
_s = 0;
}
if (fixed && /^[0-9]*[1-9][0-9]*$/.test(fixed)) {
_s = _s.toFixed(fixed);
let rs = _s.indexOf('.');
if (rs < 0) {
_s += ".";
for (let i = 0; i < fixed; i++) {
_s += "0";
}
}
}
return _s;
},
/**
* 随机字符串
* @param len
* @returns {string}
*/
randomString(len) {
len = len || 32;
let $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678oOLl9gqVvUuI1';
let maxPos = $chars.length;
let pwd = '';
for (let i = 0; i < len; i++) {
pwd += $chars.charAt(Math.floor(Math.random() * maxPos));
}
return pwd;
},
/**
* 字符串是否包含
* @param string
* @param find
* @param lower
* @returns {boolean}
*/
strExists(string, find, lower = false) {
string += "";
find += "";
if (lower !== true) {
string = string.toLowerCase();
find = find.toLowerCase();
}
return (string.indexOf(find) !== -1);
},
/**
* 字符串是否左边包含
* @param string
* @param find
* @param lower
* @returns {boolean}
*/
leftExists(string, find, lower = false) {
string += "";
find += "";
if (lower !== true) {
string = string.toLowerCase();
find = find.toLowerCase();
}
return (string.substring(0, find.length) === find);
},
/**
* 删除左边字符串
* @param string
* @param find
* @param lower
* @returns {string}
*/
leftDelete(string, find, lower = false) {
string += "";
find += "";
if (this.leftExists(string, find, lower)) {
string = string.substring(find.length)
}
return string ? string : '';
},
/**
* 字符串是否右边包含
* @param string
* @param find
* @param lower
* @returns {boolean}
*/
rightExists(string, find, lower = false) {
string += "";
find += "";
if (lower !== true) {
string = string.toLowerCase();
find = find.toLowerCase();
}
return (string.substring(string.length - find.length) === find);
},
/**
* 打开文件
* @param path
*/
openFile(path) {
if (!fs.existsSync(path)) {
return
}
shell.openPath(path).then(() => {
})
},
/**
* 删除文件夹及文件
* @param path
*/
deleteFile(path) {
let files = [];
if (fs.existsSync(path)) {
files = fs.readdirSync(path);
files.forEach(function (file, index) {
let curPath = path + "/" + file;
if (fs.statSync(curPath).isDirectory()) {
deleteFile(curPath);
} else {
fs.unlinkSync(curPath);
}
});
fs.rmdirSync(path);
}
},
/**
* 复制文件
* @param srcPath
* @param tarPath
* @param cb
*/
copyFile(srcPath, tarPath, cb) {
let rs = fs.createReadStream(srcPath)
rs.on('error', function (err) {
if (err) {
console.log('read error', srcPath)
}
cb && cb(err)
})
let ws = fs.createWriteStream(tarPath)
ws.on('error', function (err) {
if (err) {
console.log('write error', tarPath)
}
cb && cb(err)
})
ws.on('close', function (ex) {
cb && cb(ex)
})
rs.pipe(ws)
},
/**
* 给地址加上前后
* @param str
* @returns {string}
*/
formatUrl(str) {
let url;
if (str.substring(0, 7) === "http://" ||
str.substring(0, 8) === "https://") {
url = str.trim();
} else {
url = "http://" + str.trim();
}
if (url.substring(url.length - 1) != "/") {
url += "/"
}
return url;
},
/**
* 正则提取域名
* @param weburl
* @returns {string|string}
*/
getDomain(weburl) {
let urlReg = /http(s)?:\/\/([^\/]+)/i;
let domain = (weburl + "").match(urlReg);
return ((domain != null && domain.length > 0) ? domain[2] : "");
},
/**
* 返回10位数时间戳
* @param v
* @returns {number}
* @constructor
*/
Time(v = undefined) {
let time
if (typeof v === "string" && this.strExists(v, "-")) {
v = v.replace(/-/g, '/');
time = new Date(v).getTime();
} else {
time = new Date().getTime();
}
return Math.round(time / 1000)
},
}

View File

@@ -1,6 +1,6 @@
{
"name": "DooTask",
"version": "0.5.52",
"version": "0.6.80",
"description": "DooTask is task management system.",
"scripts": {
"start": "./cmd dev",
@@ -19,6 +19,11 @@
"name": "HitoseaTask",
"id": "com.hitosea.task",
"url": "https://t.hitosea.com/"
},
{
"name": "PublicDooTask",
"id": "com.dootask.public",
"url": "https://public/"
}
]
},
@@ -58,8 +63,8 @@
"stylus": "^0.56.0",
"stylus-loader": "^6.2.0",
"tinymce": "^5.10.2",
"tui-calendar-hi": "^1.15.1-1",
"view-design-hi": "^4.7.0-5",
"tui-calendar-hi": "^1.15.1-5",
"view-design-hi": "^4.7.0-7",
"vue": "^2.6.14",
"vue-clipboard2": "^0.3.3",
"vue-emoji-picker": "^1.0.3",

2
public/css/app.css vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1639134709586" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5694" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#989FA5" p-id="5695"></path><path d="M686.933333 337.066667h166.4L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="5696"></path><path d="M533.333333 524.8v119.466667l12.8 25.6c0 4.266667 4.266667 8.533333 4.266667 8.533333v72.533333c8.533333-4.266667 12.8-12.8 12.8-25.6v-170.666666c-4.266667-12.8-17.066667-25.6-29.866667-29.866667zM512 652.8v-119.466667c0-12.8-8.533333-21.333333-21.333333-21.333333h-68.266667v29.866667h-29.866667v-29.866667h-55.466666c-12.8 0-21.333333 8.533333-21.333334 21.333333v213.333334c0 12.8 8.533333 21.333333 21.333334 21.333333h170.666666c12.8 0 21.333333-8.533333 21.333334-21.333333v-64l-17.066667-29.866667z m-59.733333-76.8h-29.866667v29.866667h29.866667v89.6h-59.733334v-59.733334h29.866667v-29.866666h-29.866667v-29.866667h29.866667v-29.866667h29.866667v29.866667z" fill="#FFFFFF" p-id="5697"></path></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1625028321516" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10195" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#447AF9" p-id="10196"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="10197"></path><path d="M486.4 780.8h-170.666667c-4.266667 0-8.533333-4.266667-8.533333-8.533333s4.266667-8.533333 8.533333-8.533334h170.666667c4.266667 0 8.533333 4.266667 8.533333 8.533334s-4.266667 8.533333-8.533333 8.533333zM571.733333 695.466667h-256c-4.266667 0-8.533333-4.266667-8.533333-8.533334s4.266667-8.533333 8.533333-8.533333h256c4.266667 0 8.533333 4.266667 8.533334 8.533333s-4.266667 8.533333-8.533334 8.533334zM571.733333 610.133333h-256c-4.266667 0-8.533333-4.266667-8.533333-8.533333s4.266667-8.533333 8.533333-8.533333h256c4.266667 0 8.533333 4.266667 8.533334 8.533333s-4.266667 8.533333-8.533334 8.533333zM571.733333 524.8h-256c-4.266667 0-8.533333-4.266667-8.533333-8.533333s4.266667-8.533333 8.533333-8.533334h256c4.266667 0 8.533333 4.266667 8.533334 8.533334s-4.266667 8.533333-8.533334 8.533333z" fill="#FFFFFF" p-id="10198"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);}
.st2{fill:#989FA5;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_6_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_294" class="st0">
<g id="组_293" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_3_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_292" class="st1">
<path id="路径_155" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_291" transform="translate(30.15)" class="st3">
<g id="组_290">
<g>
<g>
<defs>
<rect id="SVGID_5_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g id="组_289" class="st4">
<path id="路径_156" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<path id="路径_157" class="st5" d="M521.7,522.8c1,3,1.6,6,1.8,9.1v102.2l12.1,21.5c1.6,2.9,2.5,6.2,2.5,9.5v61.8
c0,0.8-0.4,1.4-0.4,2.3c6.4-5.4,10.1-13.4,10.2-21.8v-156C547.7,536.6,536.4,524.3,521.7,522.8"/>
<path id="路径_158" class="st5" d="M504,639.2V531.9c0-10.8-8.7-19.5-19.5-19.5H421v27.3h-27.3v-27.3H343
c-10.8,0-19.5,8.7-19.5,19.5v195c0,10.8,8.7,19.5,19.5,19.5h156c10.8,0,19.5-8.7,19.5-19.5v-61.7L504,639.2z M448.3,567H421
v27.3h27.3v81.9h-54.6v-54.6H421v-27.3h-27.3V567H421v-27.3h27.3V567z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#4D994D;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
.st6{enable-background:new ;}
.st7{clip-path:url(#SVGID_4_);}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_344" class="st0">
<g id="组_346" transform="translate(8 2)">
<g id="组_341">
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_340" class="st1">
<path id="路径_181" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_339" transform="translate(30.15)" class="st3">
<g id="组_338">
<g>
<g>
<g>
<defs>
<rect id="SVGID_13_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_13_" style="overflow:visible;"/>
</clipPath>
<g id="组_337" class="st4">
<path id="路径_182" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st6">
<path class="st5" d="M343.8,538.8l12.8,4c-2,7.1-5.2,12.4-9.8,15.8c-4.6,3.5-10.3,5.2-17.3,5.2c-8.7,0-15.8-3-21.3-8.9
c-5.6-5.9-8.4-14-8.4-24.2c0-10.8,2.8-19.3,8.4-25.3s13-9,22.1-9c8,0,14.4,2.3,19.4,7.1c3,2.8,5.2,6.8,6.7,12l-13,3.1
c-0.8-3.4-2.4-6-4.8-8c-2.5-2-5.4-2.9-8.9-2.9c-4.8,0-8.7,1.7-11.8,5.2c-3,3.5-4.5,9.1-4.5,16.8c0,8.2,1.5,14.1,4.4,17.6
s6.8,5.2,11.6,5.2c3.5,0,6.5-1.1,9-3.3C340.9,547,342.7,543.5,343.8,538.8z"/>
<path class="st5" d="M426.6,562.7h-14.3l-5.7-14.8h-26l-5.4,14.8h-14l25.4-65.1h13.9L426.6,562.7z M402.3,536.9l-9-24.2
l-8.8,24.2H402.3z"/>
<path class="st5" d="M433.5,497.6h24c5.4,0,9.6,0.4,12.4,1.2c3.8,1.1,7.1,3.1,9.8,6c2.7,2.9,4.8,6.4,6.2,10.5
c1.4,4.2,2.1,9.3,2.1,15.4c0,5.4-0.7,10-2,13.9c-1.6,4.7-4,8.6-7,11.5c-2.3,2.2-5.4,4-9.2,5.2c-2.9,0.9-6.8,1.4-11.6,1.4
h-24.7L433.5,497.6L433.5,497.6z M446.6,508.6v43.2h9.8c3.7,0,6.3-0.2,8-0.6c2.1-0.5,3.9-1.4,5.3-2.7s2.6-3.4,3.4-6.3
s1.3-6.9,1.3-11.9s-0.4-8.9-1.3-11.6c-0.9-2.7-2.1-4.8-3.7-6.3s-3.6-2.5-6.1-3.1c-1.8-0.4-5.4-0.6-10.8-0.6h-5.9L446.6,508.6
L446.6,508.6z"/>
</g>
<g id="组_343">
<g>
<g>
<g>
<defs>
<rect id="SVGID_15_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_15_" style="overflow:visible;"/>
</clipPath>
<g id="组_342" class="st7">
<g id="直线_96">
<path class="st5" d="M580.7,666.3h-273c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h273c4.5,0,8.1,3.6,8.1,8.1
S585.2,666.3,580.7,666.3z"/>
</g>
<g id="直线_97">
<path class="st5" d="M522.7,732.6c-4.5,0-8.1-3.6-8.1-8.1V471c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v253.5
C530.9,729,527.2,732.6,522.7,732.6z"/>
</g>
<g id="路径_186">
<path class="st5" d="M551.5,697.2H493c-5.4,0-9.8-4.4-9.8-9.8V629c0-5.4,4.4-9.8,9.8-9.8h58.5c5.4,0,9.8,4.4,9.8,9.8
v58.5C561.2,692.8,556.8,697.2,551.5,697.2"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);}
.st2{fill:#3661C7;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_6_);}
.st5{fill:#FFFFFF;}
.st6{enable-background:new ;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_404" class="st0">
<g id="组_406" transform="translate(8 2)">
<g id="组_401">
<g>
<defs>
<rect id="SVGID_3_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_400" class="st1">
<g id="路径_215">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270z"
/>
</g>
<g id="组_399" transform="translate(30.15)" class="st3">
<g id="组_398">
<g>
<defs>
<rect id="SVGID_5_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g id="组_397" class="st4">
<g id="路径_216">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st6">
<path class="st5" d="M297.2,668.8v-17.1l98.6-41.6v18.2l-78.2,32.1l78.2,32.4v18.2L297.2,668.8z"/>
<path class="st5" d="M407.3,736.4l43.2-154h14.6l-43.1,154H407.3z"/>
<path class="st5" d="M575.1,668.8l-98.6,42.1v-18.2l78.1-32.4l-78.1-32.1v-18.2l98.6,41.6V668.8z"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#3A6ACC;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_244" class="st0">
<g id="组_243" transform="translate(8 2)">
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_242" class="st1">
<g id="路径_134">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120
H270z"/>
</g>
<g id="组_241" transform="translate(30.15)" class="st3">
<g id="组_240">
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_239" class="st4">
<g id="路径_135">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="直线_87">
<path class="st5" d="M480.3,754.9h-156c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h156c4.5,0,8.1,3.6,8.1,8.1
S484.8,754.9,480.3,754.9z"/>
</g>
<g id="直线_88">
<path class="st5" d="M558.3,676.5h-234c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h234c4.5,0,8.1,3.6,8.1,8.1
S562.8,676.5,558.3,676.5z"/>
</g>
<g id="直线_89">
<path class="st5" d="M558.3,598.5h-234c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h234c4.5,0,8.1,3.6,8.1,8.1
S562.8,598.5,558.3,598.5z"/>
</g>
<g id="直线_90">
<path class="st5" d="M558.3,520.5h-234c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h234c4.5,0,8.1,3.6,8.1,8.1
C566.4,516.9,562.8,520.5,558.3,520.5z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -0,0 +1,60 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#26915F;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_258" class="st0">
<g id="组_257" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_256" class="st1">
<path id="路径_139" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_255" transform="translate(30.15)" class="st3">
<g id="组_254">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_253" class="st4">
<path id="路径_140" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<path id="路径_141" class="st5" d="M351.8,735.6l69.8-110.4l-64.6-102h40.5l29.3,49.8c5.5,9.5,9.9,17.4,13.4,23.8
c5.3-8.8,10.1-16.6,14.5-23.4l32.2-50.2h38.7l-66.1,100l71.1,112.4h-39.7l-39.2-66l-10.4-17.8l-50.2,83.7h-39.3V735.6z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);}
.st2{fill:#434343;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_6_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_279" class="st0">
<g id="组_278" transform="translate(8 2)">
<g>
<defs>
<rect id="SVGID_3_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_277" class="st1">
<g id="路径_149">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270z"
/>
</g>
<g id="组_276" transform="translate(30.15)" class="st3">
<g id="组_275">
<g>
<defs>
<rect id="SVGID_5_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g id="组_274" class="st4">
<g id="路径_150">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<g id="矩形_151">
<path class="st5" d="M363.3,683.7c-2.1,0-4.2-0.8-5.7-2.4l-39-39c-3.2-3.2-3.2-8.3,0-11.5l39-39c3-3,8.4-3,11.5,0l39,39
c1.5,1.5,2.4,3.6,2.4,5.7c0,2.2-0.9,4.2-2.4,5.7l-39,39C367.4,682.9,365.4,683.7,363.3,683.7z M335.8,636.6l27.5,27.5
l27.5-27.5l-27.5-27.5L335.8,636.6z"/>
</g>
<g id="矩形_152">
<path class="st5" d="M558.3,664.2h-92.9c-4.5,0-8.1-3.6-8.1-8.1v-39c0-4.5,3.6-8.1,8.1-8.1h92.9c4.5,0,8.1,3.6,8.1,8.1v39
C566.4,660.5,562.8,664.2,558.3,664.2z M473.5,647.9h76.7v-22.8h-76.7V647.9z"/>
</g>
<g id="矩形_153">
<path class="st5" d="M558.3,754.5h-92.9c-4.5,0-8.1-3.6-8.1-8.1v-39c0-4.5,3.6-8.1,8.1-8.1h92.9c4.5,0,8.1,3.6,8.1,8.1v39
C566.4,750.9,562.8,754.5,558.3,754.5z M473.5,738.3h76.7v-22.8h-76.7V738.3z"/>
</g>
<g id="路径_151">
<path class="st5" d="M382.8,531.9c0,10.8-8.7,19.5-19.5,19.5s-19.5-8.7-19.5-19.5c0-10.8,8.7-19.5,19.5-19.5
S382.8,521.1,382.8,531.9"/>
</g>
<g id="椭圆_35">
<path class="st5" d="M363.3,559.5c-15.2,0-27.6-12.4-27.6-27.6s12.4-27.6,27.6-27.6s27.6,12.4,27.6,27.6
S378.5,559.5,363.3,559.5z M363.3,520.5c-6.3,0-11.4,5.1-11.4,11.4s5.1,11.4,11.4,11.4s11.4-5.1,11.4-11.4
S369.5,520.5,363.3,520.5z"/>
</g>
<g id="直线_91">
<path class="st5" d="M363.3,605.7c-4.5,0-8.1-3.6-8.1-8.1v-85.2c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v85.2
C371.4,602.1,367.8,605.7,363.3,605.7z"/>
</g>
<g id="直线_92">
<path class="st5" d="M464.2,644.7h-62c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h62c4.5,0,8.1,3.6,8.1,8.1
S468.7,644.7,464.2,644.7z"/>
</g>
<g id="直线_93">
<path class="st5" d="M363.3,735c-4.5,0-8.1-3.6-8.1-8.1v-51.3c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v51.3
C371.4,731.4,367.8,735,363.3,735z"/>
</g>
<g id="直线_94">
<path class="st5" d="M464.2,735H363.7c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h100.5c4.5,0,8.1,3.6,8.1,8.1
S468.7,735,464.2,735z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{fill:#CC8829;}
.st2{fill:#E6A82E;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_229" class="st0">
<path id="路径_130" class="st1" d="M224,752.4h576.1c35.3-0.1,63.9-28.7,64-64V299.8c-0.1-35.3-28.7-63.9-64-64H224
c-35.3,0.1-63.9,28.7-64,64v388.6C160.1,723.7,188.7,752.3,224,752.4"/>
<path id="路径_131" class="st2" d="M842.7,871.6H181.3c-47.1,0-85.3-38.2-85.3-85.3V252.8c0-47.1,38.2-85.3,85.3-85.3h268.5
c36.6,0,69.1,23.3,80.9,58l24.1,71.4c11.7,34.7,44.3,58,80.9,58h206.6c47.1,0,85.3,38.1,85.3,85.2l0.5,346
C928,833.3,889.8,871.6,842.7,871.6C842.7,871.6,842.7,871.6,842.7,871.6"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#4A4FA8;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_395" class="st0">
<g id="组_394" transform="translate(8 2)">
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_393" class="st1">
<path id="路径_210" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1
L584,120H270z"/>
<g id="组_392" transform="translate(30.15)" class="st3">
<g id="组_391">
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_390" class="st4">
<path id="路径_211" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
<path id="路径_212" class="st5" d="M508.9,615.6v27.7l52.8,46.3c6.6,5.7,16.6,5.1,22.3-1.5c2.5-2.9,3.9-6.6,3.9-10.4v-96.3
c0-8.7-7-15.8-15.8-15.8c-3.8,0-7.5,1.4-10.4,3.9L508.9,615.6z"/>
<path id="路径_213" class="st5" d="M469.9,526.6H334.5c-21.5,0-38.9,17.5-39,39v127.5c0.1,21.5,17.5,38.9,39,39h135.4
c21.5-0.1,38.9-17.5,39-39V565.6C508.8,544.1,491.4,526.7,469.9,526.6 M440.1,635.6l-50.9,40.8c-3.4,2.8-8.5,2.2-11.2-1.2
c-1.1-1.4-1.8-3.2-1.8-5v-81.5c0-4.4,3.6-8,8-8c1.8,0,3.6,0.6,5,1.7l50.9,40.8c3.4,2.7,4,7.8,1.3,11.2
C441,634.9,440.6,635.3,440.1,635.6"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#6441A6;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_237" class="st0">
<g id="组_236" transform="translate(7.75 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="189" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_235" class="st1">
<g id="路径_132">
<path class="st2" d="M267,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L581,120H267z
"/>
</g>
<g id="组_234" transform="translate(30.15)" class="st3">
<g id="组_233">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="550.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_232" class="st4">
<g id="路径_133">
<path class="st5" d="M628.8,352.1h154L550.8,120v154.1C550.9,317.1,585.8,351.9,628.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="椭圆_29">
<path class="st5" d="M428.5,670.7c-22.8,0-41.3-18.5-41.3-41.3s18.5-41.3,41.3-41.3s41.3,18.5,41.3,41.3
S451.2,670.7,428.5,670.7z M428.5,604.4c-13.8,0-25,11.2-25,25s11.2,25,25,25s25-11.2,25-25S442.3,604.4,428.5,604.4z"/>
</g>
<g id="椭圆_30">
<path class="st5" d="M465.3,571.2c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S483.8,571.2,465.3,571.2z
M465.3,520.5c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S474.8,520.5,465.3,520.5z"/>
</g>
<g id="椭圆_31">
<path class="st5" d="M346.6,572.6c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S365.1,572.6,346.6,572.6z
M346.6,521.9c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S356.1,521.9,346.6,521.9z"/>
</g>
<g id="椭圆_32">
<path class="st5" d="M346.6,746.4c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S365.1,746.4,346.6,746.4z
M346.6,695.7c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S356.1,695.7,346.6,695.7z"/>
</g>
<g id="椭圆_33">
<path class="st5" d="M478.9,754.5c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S497.4,754.5,478.9,754.5z
M478.9,703.8c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S488.4,703.8,478.9,703.8z"/>
</g>
<g id="椭圆_34">
<path class="st5" d="M529.9,667.1c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S548.4,667.1,529.9,667.1z
M529.9,616.3c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S539.4,616.3,529.9,616.3z"/>
</g>
<g id="直线_82">
<path class="st5" d="M400.2,618.9c-2.5,0-4.9-1.1-6.5-3.2l-33.3-44.4c-2.7-3.6-2-8.7,1.6-11.4s8.7-2,11.4,1.6l33.3,44.4
c2.7,3.6,2,8.7-1.6,11.4C403.6,618.3,401.9,618.9,400.2,618.9z"/>
</g>
<g id="直线_83">
<path class="st5" d="M470.5,704.3c-2.5,0-5-1.2-6.6-3.4l-23.2-32.4c-2.6-3.7-1.8-8.7,1.9-11.3c3.7-2.6,8.7-1.8,11.3,1.9
l23.2,32.4c2.6,3.7,1.8,8.7-1.9,11.3C473.7,703.8,472.1,704.3,470.5,704.3z"/>
</g>
<g id="直线_84">
<path class="st5" d="M504.6,641.7h-41.8c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h41.8c4.5,0,8.1,3.6,8.1,8.1
S509.1,641.7,504.6,641.7z"/>
</g>
<g id="直线_85">
<path class="st5" d="M446.2,604.5c-1.4,0-2.8-0.3-4-1.1c-3.9-2.2-5.2-7.2-3-11.1l19.2-33.3c2.2-3.9,7.2-5.2,11.1-3
s5.2,7.2,3,11.1l-19.2,33.3C451.7,603.1,449,604.5,446.2,604.5z"/>
</g>
<g id="直线_86">
<path class="st5" d="M364.5,700.5c-2.2,0-4.5-0.9-6.1-2.8c-3-3.4-2.6-8.5,0.7-11.5l38.7-34.1c3.4-3,8.5-2.7,11.5,0.7
s2.6,8.5-0.7,11.5l-38.7,34.1C368.3,699.9,366.4,700.5,364.5,700.5z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#129FE6;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_328" class="st0">
<g id="组_327" transform="translate(8 2)">
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_326" class="st1">
<path id="路径_172" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1
L584,120H270z"/>
<g id="组_325" transform="translate(30.15)" class="st3">
<g id="组_324">
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_323" class="st4">
<path id="路径_173" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
<path id="路径_174" class="st5" d="M368.3,711.4c-0.5,0-0.8,0.2-1.3,0.2c-30,0-54.4-24.3-54.4-54.3c0-30,24.3-54.4,54.3-54.4
c25.6,0,47.7,17.8,53.2,42.8l13.6-17.2c-11.2-27-37.4-44.8-66.7-45c-40.7-0.1-73.7,32.8-73.8,73.5
c-0.1,35.8,25.6,66.4,60.8,72.7L368.3,711.4z"/>
<path id="路径_175" class="st5" d="M573.3,626.1c6.9,9,10.7,19.9,10.9,31.2c0,29.9-24.3,54.2-54.2,54.2
c-10.8,0-21.4-3.3-30.4-9.4l-30.4-23.9l-12,15.4l27.3,21.8c1.6,0.8,2.7,1.9,4.3,2.7c12.1,8.4,26.6,12.9,41.3,12.9
c40.5,0.2,73.5-32.4,73.7-72.9c0.1-17.6-6.2-34.7-17.7-48.1L573.3,626.1z"/>
<path id="路径_176" class="st5" d="M529.9,602.9c10.5,0.2,20.8,3.6,29.4,9.7l12.3-15.6c-12.1-8.7-26.7-13.4-41.6-13.6
c-23.3,0.1-45.2,11.2-59,29.9L378.7,730c19.6-3.2,37-14.2,48.4-30.5l52.8-66.6l46.7,37.2l12.2-15.2l-46-36.7
C502.7,608.5,516,603,529.9,602.9"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#55575E;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
.st6{enable-background:new ;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_310" class="st0">
<g id="组_312" transform="translate(8 2)">
<g id="组_307">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_306" class="st1">
<g id="路径_167">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270
z"/>
</g>
<g id="组_305" transform="translate(30.15)" class="st3">
<g id="组_304">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_303" class="st4">
<g id="路径_168">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st6">
<path class="st5" d="M424.2,658.4h-32.4c-0.1-4.7-0.1-7.5-0.1-8.5c0-10.5,1.7-19.1,5.2-25.9s10.4-14.4,20.8-22.9
s16.6-14,18.7-16.6c3.1-4.2,4.7-8.7,4.7-13.7c0-6.9-2.8-12.9-8.3-17.8s-13-7.4-22.4-7.4c-9.1,0-16.6,2.6-22.7,7.7
s-10.3,13-12.6,23.6l-32.8-4.1c0.9-15.1,7.4-28,19.4-38.6s27.7-15.9,47.2-15.9c20.5,0,36.8,5.4,48.9,16.1s18.2,23.2,18.2,37.4
c0,7.9-2.2,15.3-6.7,22.3s-13.9,16.6-28.5,28.7c-7.5,6.3-12.2,11.3-14,15.1S424,648.6,424.2,658.4z M391.8,706.4v-35.7h35.7
v35.7H391.8z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);}
.st2{fill:#E04A4D;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_6_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_301" class="st0">
<g id="组_300" transform="translate(8 2)">
<g>
<defs>
<rect id="SVGID_3_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_299" class="st1">
<g id="路径_159">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270z"
/>
</g>
<g id="组_298" transform="translate(30.15)" class="st3">
<g id="组_297">
<g>
<defs>
<rect id="SVGID_5_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g id="组_296" class="st4">
<g id="路径_160">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<g id="路径_161">
<path class="st5" d="M541.4,693.4c-0.3,0-0.6,0-0.9-0.1c-24.1-2.7-46.6-12.3-65.2-27.9c-0.5-0.2-0.9-0.5-1.3-0.7
c-13.2-9.8-25.5-20.9-36.6-32.9c-6.5-7.1-12.7-14.7-18.4-22.5c-22.5-30.5-35.1-62.8-33.9-86.3c0.1-5.5,1.7-11.2,4.7-16.1
c2.3-3.9,7.3-5.1,11.1-2.8c3.9,2.3,5.1,7.3,2.8,11.1c-1.5,2.5-2.3,5.4-2.4,8.4c-1.1,19.8,10.7,48.9,30.7,76.1
c5.4,7.4,11.1,14.5,17.2,21.1c10.1,10.9,21.2,21,33.2,30c0.7,0.3,1.4,0.7,2,1.2c16.3,14.1,36.3,22.8,57.7,25.1
c4.5,0.5,7.7,4.5,7.2,9C549,690.3,545.5,693.4,541.4,693.4z"/>
</g>
<g id="路径_162">
<path class="st5" d="M353.9,750.1c-2.3,0-4.5-0.9-6.1-2.8c-3-3.4-2.6-8.5,0.7-11.5c0.7-0.6,1.3-1.3,1.9-1.9
c13.8-16.6,26-34.9,36.1-54.2c0.4-0.7,0.8-1.3,1.3-1.9c6.5-13,12-25.2,16.9-37.3c5-12.4,9.3-25.3,13-38.2
c8.5-25.7,12.4-52,11.7-78.7c0-2.2-0.4-4.1-1.1-5.9c-1.7-4.1,0.2-8.9,4.3-10.6c4.1-1.8,8.9,0.2,10.6,4.3
c1.6,3.8,2.4,7.9,2.4,12.1c0.7,28.3-3.4,56.5-12.4,83.6c-3.7,13.1-8.3,26.5-13.5,39.5c-5.3,13.1-11.4,26.4-18.5,40.5
c-0.4,0.8-0.9,1.5-1.5,2.1c-10.4,19.6-22.9,38.2-37.1,55.3c-1.2,1.4-2.3,2.5-3.6,3.6C357.7,749.4,355.8,750.1,353.9,750.1z
M394.2,683.5h0.1H394.2z"/>
</g>
<g id="路径_163">
<path class="st5" d="M329.6,723.5c-2.2,0-4.4-0.9-6-2.6c-3-3.3-2.8-8.4,0.5-11.5c2.3-2.1,4.8-3.9,7.6-5.3
c18.5-11,38.7-20.6,59.4-28.3c0.5-0.2,0.9-0.3,1.4-0.4c9.6-3.8,20.5-7.6,35.3-12.2c19.1-5.9,35.3-10.1,49.5-13
c0.4-0.1,0.7-0.1,1.1-0.1c20.4-4.4,41.2-6.8,62-7.1h1.9c4.5,0,8.1,3.6,8.1,8.1s-3.6,8.1-8.1,8.1h-1.8
c-19.9,0.3-39.9,2.6-59.5,6.9c-0.6,0.1-1.2,0.2-1.7,0.2c-12.5,2.6-28.2,6.8-46.8,12.5c-14.9,4.7-25.8,8.4-35.2,12.2
c-0.6,0.2-1.2,0.4-1.8,0.5c-19.4,7.3-38.3,16.3-56.1,26.9c-1.9,1-3.2,1.9-4.4,3C333.5,722.8,331.6,723.5,329.6,723.5z"/>
</g>
<g id="路径_164">
<path class="st5" d="M436,522.7c-3.1,0-6.1-1.8-7.5-4.9c-2.2-5.1-7.2-8.4-12.8-8.4c0,0-0.1,0-0.2,0c-4.8,0-9.2,2.3-11.9,6.2
c-2.5,3.7-7.6,4.7-11.3,2.1c-3.7-2.5-4.7-7.6-2.1-11.3c5.7-8.3,15.1-13.3,25.2-13.3c0.1,0,0.2,0,0.4,0
c12,0,22.8,7.1,27.6,18.2c1.8,4.1-0.1,8.9-4.2,10.7C438.1,522.5,437,522.7,436,522.7z"/>
</g>
<g id="路径_165">
<path class="st5" d="M342.7,754.5c-0.1,0-0.2,0-0.3,0c-7.5-0.1-14-2.9-18.8-7.9s-7.5-11.6-7.4-18.5
c-0.1-6.8,2.7-13.6,7.7-18.5c3.2-3.1,8.4-3.1,11.5,0.1c3.1,3.2,3.1,8.3-0.1,11.5c-1.9,1.8-2.9,4.4-2.9,6.9
c-0.1,5.6,4.3,10.1,9.7,10.2c2.6,0.2,4.8-0.8,6.4-2.3c3.3-3,8.4-2.8,11.5,0.5c3,3.3,2.8,8.4-0.5,11.5
C354.9,752.2,349,754.5,342.7,754.5z"/>
</g>
<g id="路径_166">
<path class="st5" d="M541.6,693.4l-0.1-16.2c4.8,0,8.7-3.9,8.7-8.7c0.1-4.9-3.6-8.9-8.3-9.2c-4.5-0.3-7.9-4.1-7.6-8.6
c0.3-4.5,4.1-8,8.6-7.6c13.4,0.9,23.8,12.1,23.6,25.5C566.5,682.1,555.3,693.3,541.6,693.4z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);}
.st2{fill:#3F9984;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_6_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_272" class="st0">
<g id="组_271" transform="translate(8 2)">
<g>
<defs>
<rect id="SVGID_3_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_270" class="st1">
<path id="路径_146" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1
L584,120H270z"/>
<g id="组_269" transform="translate(30.15)" class="st3">
<g id="组_268">
<g>
<defs>
<rect id="SVGID_5_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g id="组_267" class="st4">
<path id="路径_147" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
<path id="路径_148" class="st5" d="M538.4,503H344.1c-16.1,0-29.2,13.1-29.2,29.2v194.3c0,16.1,13.1,29.2,29.2,29.2h194.3
c16.2,0,29.2-13.1,29.2-29.2V532.2C567.7,516.1,554.6,503,538.4,503 M476,566c15.8,0,28.6,12.8,28.6,28.6
c0,15.8-12.8,28.6-28.6,28.6c-15.8,0-28.6-12.8-28.6-28.5C447.4,578.9,460.2,566.1,476,566 M548.2,726.6c0,5.4-4.4,9.8-9.8,9.8
H344.1c-5.4,0-9.8-4.4-9.8-9.8v-23l51.2-51.2c9.8-9.9,25.8-9.9,35.6,0c0,0,0,0,0,0l52.7,52.7l18.4-18.4
c9.8-9.9,25.8-9.9,35.6,0c0,0,0,0,0,0l20.1,20.1V726.6z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#CC7356;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_286" class="st0">
<g id="组_285" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_284" class="st1">
<path id="路径_152" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_283" transform="translate(30.15)" class="st3">
<g id="组_282">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_281" class="st4">
<path id="路径_153" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<path id="路径_154" class="st5" d="M510.2,555.6c-3.4-8.4-8.9-15.7-16-21.3c-7.2-5.4-15.6-8.9-24.5-10.4
c-9.7-1.6-19.4-2.3-29.2-2.1h-74V737h30.8v-85.1h45.4c27.4,0,46.8-6.6,57.5-19.6c10.8-13.3,16.5-30,16-47.1
C516.3,575,514.2,564.9,510.2,555.6 M484.6,586.1c0.6,9.6-2.8,19-9.3,26c-9.2,7-20.7,10.3-32.3,9.1h-45.8v-68.9h45.2
c7.5-0.3,15,0.2,22.4,1.7c5.9,1.8,11,5.8,14.2,11.2C482.9,571.5,484.8,578.7,484.6,586.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#006B34;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
.st6{fill:none;stroke:#FFFFFF;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_379" class="st0">
<g id="组_378" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_377" class="st1">
<g id="路径_200">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270z
"/>
</g>
<g id="组_376" transform="translate(30.15)" class="st3">
<g id="组_375">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_374" class="st4">
<g id="路径_201">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="矩形_196">
<path class="st5" d="M551.8,754.5h-221c-8.1,0-14.6-6.6-14.6-14.6v-221c0-8.1,6.6-14.6,14.6-14.6h221
c8.1,0,14.6,6.6,14.6,14.6v221C566.4,748,559.8,754.5,551.8,754.5z M332.4,738.3h217.8V520.5H332.4V738.3z M551.8,520.5
L551.8,520.5L551.8,520.5z"/>
</g>
<g id="路径_202">
<path class="st6" d="M558.3,590.4L558.3,590.4z"/>
</g>
<g id="直线_98">
<path class="st5" d="M402.3,752.3c-4.5,0-8.1-3.6-8.1-8.1V590.6c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v153.6
C410.4,748.7,406.8,752.3,402.3,752.3z"/>
</g>
<g id="直线_99">
<path class="st5" d="M480.3,752.3c-4.5,0-8.1-3.6-8.1-8.1V590.6c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v153.6
C488.4,748.7,484.8,752.3,480.3,752.3z"/>
</g>
<g id="路径_203">
<path class="st6" d="M558.3,668.4L558.3,668.4z"/>
</g>
<g id="直线_99_1_">
<path class="st5" d="M318.6,590.4c0-4.5,5.2-8.1,11.7-8.1H552c6.5,0,11.7,3.6,11.7,8.1s-5.2,8.1-11.7,8.1H330.3
C323.8,598.5,318.6,594.9,318.6,590.4z"/>
</g>
<g id="直线_99_2_">
<path class="st5" d="M318.6,672c0-4.5,5.2-8.1,11.7-8.1H552c6.5,0,11.7,3.6,11.7,8.1s-5.2,8.1-11.7,8.1H330.3
C323.8,680.1,318.6,676.4,318.6,672z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#493E8C;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
.st6{enable-background:new ;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_320" class="st0">
<g id="组_322" transform="translate(8 2)">
<g id="组_317">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_316" class="st1">
<g id="路径_170">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270
z"/>
</g>
<g id="组_315" transform="translate(30.15)" class="st3">
<g id="组_314">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_313" class="st4">
<g id="路径_171">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st6">
<path class="st5" d="M325.3,706.4V605.9h-35.9v-20.5h96.1v20.5h-35.8v100.5H325.3z"/>
<path class="st5" d="M400.6,706.4v-121H425v121H400.6z"/>
<path class="st5" d="M448.5,706.4v-121h82.9v20.5h-58.5v28.6h50.5V655h-50.5v51.4H448.5z"/>
<path class="st5" d="M551.7,706.4v-121h82.9v20.5h-58.5v28.6h50.5V655h-50.5v51.4H551.7z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);}
.st2{opacity:0.375;}
.st3{clip-path:url(#SVGID_6_);}
.st4{fill:#E5E5E5;}
.st5{opacity:0.4;}
.st6{clip-path:url(#SVGID_8_);}
.st7{fill:#FFFFFF;}
.st8{enable-background:new ;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_357" class="st0">
<g id="组_359" transform="translate(8 2)">
<g id="组_354">
<g>
<defs>
<rect id="SVGID_3_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_353" class="st1">
<g id="组_349" class="st2">
<g id="组_348">
<g>
<defs>
<rect id="SVGID_5_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g id="组_347" class="st3">
<g id="路径_187">
<path class="st4" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120
H270z"/>
</g>
</g>
</g>
</g>
</g>
<g id="组_352" transform="translate(30.15)" class="st5">
<g id="组_351">
<g>
<defs>
<rect id="SVGID_7_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_8_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_350" class="st6">
<g id="路径_188">
<path class="st7" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st8">
<path class="st7" d="M345.4,698.9V598.4h-35.9V578h96.1v20.5h-35.8v100.5H345.4z"/>
<path class="st7" d="M409.1,698.9l41.3-63.1L413,578h28.6l24.3,38.9l23.8-38.9h28.3l-37.6,58.8l41.3,62.2h-29.5l-26.8-41.8
l-26.9,41.8H409.1z"/>
<path class="st7" d="M561.4,698.9V598.4h-35.9V578h96.1v20.5h-35.8v100.5H561.4z"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{fill:#CC8829;}
.st2{fill:#E6A82E;}
.st3{fill:#FFFFFF;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_381" class="st0">
<g id="路径_204">
<path class="st1" d="M224,745.9h576.1c35.3-0.1,63.9-28.7,64-64V293.3c-0.1-35.3-28.7-63.9-64-64H224c-35.3,0.1-63.9,28.7-64,64
v388.6C160.1,717.2,188.7,745.8,224,745.9"/>
</g>
<g id="路径_205">
<path class="st2" d="M842.7,865.1H181.3c-47.1,0-85.3-38.2-85.3-85.3V246.3c0-47.1,38.2-85.3,85.3-85.3h268.5
c36.6,0,69.1,23.3,80.9,58l24.1,71.4c11.7,34.7,44.3,58,80.9,58h206.6c47.1,0,85.3,38.1,85.3,85.2l0.5,346
C928,826.8,889.8,865.1,842.7,865.1C842.7,865.1,842.7,865.1,842.7,865.1"/>
</g>
<g id="直线_106">
<path class="st3" d="M411.2,576.4c-2.1,0-4.2-0.8-5.7-2.4l-53.7-53.7c-3.2-3.2-3.2-8.3,0-11.5c3.2-3.2,8.3-3.2,11.5,0l53.7,53.7
c3.2,3.2,3.2,8.3,0,11.5C415.4,575.6,413.3,576.4,411.2,576.4z"/>
</g>
<g id="直线_107">
<path class="st3" d="M303.9,576.4c-2.1,0-4.2-0.8-5.7-2.4c-3.2-3.2-3.2-8.3,0-11.5l53.7-53.7c3.2-3.2,8.3-3.2,11.5,0
c3.2,3.2,3.2,8.3,0,11.5L309.6,574C308,575.6,306,576.4,303.9,576.4z"/>
</g>
<g id="直线_108">
<path class="st3" d="M357.5,687.1c-4.5,0-8.1-3.6-8.1-8.1V514.6c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1V679
C365.7,683.5,362,687.1,357.5,687.1z"/>
</g>
<g id="路径_214">
<path class="st3" d="M446,756.7H270.5c-20.5-0.1-37.3-16.8-37.4-37.3V641c0-18.4,15-33.4,33.4-33.4c0,0,0,0,0,0h12.7
c4.5,0,8.1,3.6,8.1,8.1s-3.6,8.1-8.1,8.1h-12.7h0c-9.5,0-17.2,7.7-17.2,17.2v78.3c0,11.6,9.5,21.1,21.2,21.1H446
c11.6,0,21.1-9.5,21.1-21.1V641c0-9.5-7.7-17.1-17.2-17.1c0,0,0,0,0,0h-12.6c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h12.6
c0,0,0,0,0,0c18.4,0,33.4,15,33.4,33.4v78.3C483.3,739.9,466.6,756.7,446,756.7z"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,74 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);}
.st2{fill:#1370AD;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_6_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_388" class="st0">
<g id="组_387" transform="translate(8 2)">
<g>
<defs>
<rect id="SVGID_3_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_386" class="st1">
<g id="路径_207">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270z"
/>
</g>
<g id="组_385" transform="translate(30.15)" class="st3">
<g id="组_384">
<g>
<defs>
<rect id="SVGID_5_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g id="组_383" class="st4">
<g id="路径_208">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<g id="直线_103">
<path class="st5" d="M494.2,574.4c-2.1,0-4.2-0.8-5.7-2.4l-53.7-53.7c-3.2-3.2-3.2-8.3,0-11.5s8.3-3.2,11.5,0l53.7,53.7
c3.2,3.2,3.2,8.3,0,11.5C498.4,573.6,496.3,574.4,494.2,574.4z"/>
</g>
<g id="直线_104">
<path class="st5" d="M386.9,574.4c-2.1,0-4.2-0.8-5.7-2.4c-3.2-3.2-3.2-8.3,0-11.5l53.7-53.7c3.2-3.2,8.3-3.2,11.5,0
s3.2,8.3,0,11.5L392.6,572C391,573.6,389,574.4,386.9,574.4z"/>
</g>
<g id="直线_105">
<path class="st5" d="M440.5,685.1c-4.5,0-8.1-3.6-8.1-8.1V512.6c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1V677
C448.7,681.5,445,685.1,440.5,685.1z"/>
</g>
<g id="路径_209">
<path class="st5" d="M529,754.7H353.5c-20.5-0.1-37.3-16.8-37.4-37.3V639c0-18.4,15-33.4,33.4-33.4c0,0,0,0,0,0h12.7
c4.5,0,8.1,3.6,8.1,8.1s-3.6,8.1-8.1,8.1h-12.7h0c-9.5,0-17.2,7.7-17.2,17.2v78.3c0,11.6,9.5,21.1,21.2,21.1H529
c11.6,0,21.1-9.5,21.1-21.1V639c0-9.5-7.7-17.1-17.2-17.1c0,0,0,0,0,0h-12.6c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h12.6h0
c18.4,0,33.4,15,33.4,33.4v78.3C566.3,737.9,549.6,754.7,529,754.7z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);}
.st2{fill:#3282BA;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_6_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_251" class="st0">
<g id="组_250" transform="translate(8 2)">
<g>
<defs>
<rect id="SVGID_3_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_249" class="st1">
<path id="路径_136" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1
L584,120H270z"/>
<g id="组_248" transform="translate(30.15)" class="st3">
<g id="组_247">
<g>
<defs>
<rect id="SVGID_5_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g id="组_246" class="st4">
<path id="路径_137" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
<path id="路径_138" class="st5" d="M368.7,735.8l-58.5-212.4h33.4L374,646l11.3,45.6c0.5-2.3,3.8-16.9,9.9-43.8l30.4-124.4
h33.3l28.6,123.2l9.5,40.6l11-41l32.8-122.8h31.6l-59.8,212.4H479l-30.4-127.1l-7.4-36.2l-38.6,163.3H368.7z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,70 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_2_);}
.st1{clip-path:url(#SVGID_4_);}
.st2{fill:#CC353A;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_6_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<defs>
<rect id="SVGID_1_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" style="overflow:visible;"/>
</clipPath>
<g id="组_335" class="st0">
<g id="组_334" transform="translate(8 2)">
<g>
<defs>
<rect id="SVGID_3_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_333" class="st1">
<g id="路径_177">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270z"
/>
</g>
<g id="组_332" transform="translate(30.15)" class="st3">
<g id="组_331">
<g>
<defs>
<rect id="SVGID_5_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" style="overflow:visible;"/>
</clipPath>
<g id="组_330" class="st4">
<g id="路径_178">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<g id="路径_179">
<path class="st5" d="M490,729.5c-1.2,0-2.5-0.3-3.7-0.9c-4-2-5.6-6.9-3.6-10.9l92.6-183.2h-79.3L399.8,725
c-2,4-6.9,5.6-10.9,3.6c-4-2-5.6-6.9-3.6-10.9l98.6-195c1.4-2.7,4.2-4.5,7.2-4.5h97.5c2.8,0,5.4,1.5,6.9,3.9
c1.5,2.4,1.6,5.4,0.3,7.9l-98.6,195C495.9,727.9,493,729.5,490,729.5z"/>
</g>
<g id="路径_180">
<path class="st5" d="M392.5,729.5c-3,0-5.8-1.6-7.3-4.5l-98.5-195c-1.3-2.5-1.1-5.5,0.3-7.9c1.5-2.4,4.1-3.9,6.9-3.9h97.5
c3.1,0,5.9,1.7,7.2,4.5l33.4,66c2,4,0.4,8.9-3.6,10.9c-4,2-8.9,0.4-10.9-3.6l-31.1-61.6h-79.3l92.5,183.2
c2,4,0.4,8.9-3.6,10.9C395,729.2,393.7,729.5,392.5,729.5z"/>
</g>
<g id="直线_95">
<path class="st5" d="M490,729.5c-3,0-5.8-1.6-7.3-4.5l-32.4-64.1c-2-4-0.4-8.9,3.6-10.9c4-2,8.9-0.4,10.9,3.6l32.4,64.1
c2,4,0.4,8.9-3.6,10.9C492.5,729.2,491.2,729.5,490,729.5z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1625028321516" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10195" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#447AF9" p-id="10196"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="10197"></path><path d="M486.4 780.8h-170.666667c-4.266667 0-8.533333-4.266667-8.533333-8.533333s4.266667-8.533333 8.533333-8.533334h170.666667c4.266667 0 8.533333 4.266667 8.533333 8.533334s-4.266667 8.533333-8.533333 8.533333zM571.733333 695.466667h-256c-4.266667 0-8.533333-4.266667-8.533333-8.533334s4.266667-8.533333 8.533333-8.533333h256c4.266667 0 8.533333 4.266667 8.533334 8.533333s-4.266667 8.533333-8.533334 8.533334zM571.733333 610.133333h-256c-4.266667 0-8.533333-4.266667-8.533333-8.533333s4.266667-8.533333 8.533333-8.533333h256c4.266667 0 8.533333 4.266667 8.533334 8.533333s-4.266667 8.533333-8.533334 8.533333zM571.733333 524.8h-256c-4.266667 0-8.533333-4.266667-8.533333-8.533333s4.266667-8.533333 8.533333-8.533334h256c4.266667 0 8.533333 4.266667 8.533334 8.533334s-4.266667 8.533333-8.533334 8.533333z" fill="#FFFFFF" p-id="10198"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1 +0,0 @@
<svg t="1626148982812" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10915"><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#33C481" p-id="10916"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="10917"></path><path d="M345.6 759.466667L422.4 640l-72.533333-110.933333h42.666666l34.133334 55.466666c4.266667 8.533333 12.8 17.066667 12.8 25.6 4.266667-8.533333 12.8-17.066667 17.066666-25.6l34.133334-55.466666h42.666666L460.8 640l76.8 123.733333h-42.666667l-42.666666-72.533333-12.8-21.333333L384 759.466667h-38.4z" fill="#FFFFFF" p-id="10918"></path></svg>

Before

Width:  |  Height:  |  Size: 880 B

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1625028302681" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9763" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#434343" p-id="9764"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="9765"></path><path d="M469.333333 682.666667h102.4c4.266667 0 8.533333-4.266667 8.533334-8.533334v-42.666666c0-4.266667-4.266667-8.533333-8.533334-8.533334H469.333333c-4.266667 0-8.533333 4.266667-8.533333 8.533334v8.533333H405.333333l-38.4-38.4v-38.4c12.8-4.266667 21.333333-17.066667 21.333334-29.866667 0-17.066667-12.8-34.133333-34.133334-34.133333s-34.133333 12.8-34.133333 34.133333c0 12.8 8.533333 25.6 21.333333 29.866667v38.4l-38.4 38.4c-4.266667 4.266667-4.266667 12.8 0 17.066667l38.4 38.4v51.2c0 4.266667 4.266667 8.533333 8.533334 8.533333h102.4v8.533333c0 4.266667 4.266667 8.533333 8.533333 8.533334h102.4c4.266667 0 8.533333-4.266667 8.533333-8.533334v-42.666666c0-4.266667-4.266667-8.533333-8.533333-8.533334H469.333333c-4.266667 0-8.533333 4.266667-8.533333 8.533334v8.533333H366.933333v-42.666667l38.4-38.4h55.466667v8.533334c0 21.333333 4.266667 25.6 8.533333 25.6z m12.8 55.466666h81.066667v21.333334h-81.066667v-21.333334z m-123.733333-59.733333l-25.6-25.6 25.6-25.6 25.6 21.333333-25.6 29.866667z m123.733333-38.4h81.066667v21.333333h-81.066667V640z" fill="#FFFFFF" p-id="9766"></path></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1625032843298" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4865" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M520.533333 230.4l34.133334 72.533333c12.8 29.866667 42.666667 46.933333 76.8 46.933334h174.933333c21.333333 0 38.4 4.266667 55.466667 12.8V294.4c0-34.133333-29.866667-64-64-64h-277.333334z" fill="#F9B552" p-id="4866"></path><path d="M844.8 349.866667h-209.066667c-34.133333 0-64-17.066667-76.8-46.933334L512 213.333333c-12.8-29.866667-42.666667-46.933333-76.8-46.933333h-256c-46.933333 0-85.333333 38.4-85.333333 85.333333v529.066667c0 46.933333 38.4 85.333333 85.333333 85.333333h661.333333c46.933333 0 85.333333-38.4 85.333334-85.333333v-341.333333c4.266667-51.2-34.133333-89.6-81.066667-89.6z" fill="#FFCF5C" p-id="4867"></path></svg>

Before

Width:  |  Height:  |  Size: 990 B

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#989FA5;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_294" class="st0">
<g id="组_293" transform="translate(8 2)">
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_292" class="st1">
<path id="路径_155" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_291" transform="translate(30.15)" class="st3">
<g id="组_290">
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_289" class="st4">
<path id="路径_156" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
<path id="路径_157" class="st5" d="M521.7,522.8c1,3,1.6,6,1.8,9.1v102.2l12.1,21.5c1.6,2.9,2.5,6.2,2.5,9.5v61.8
c0,0.8-0.4,1.4-0.4,2.3c6.4-5.4,10.1-13.4,10.2-21.8v-156C547.7,536.6,536.4,524.3,521.7,522.8"/>
<path id="路径_158" class="st5" d="M504,639.2V531.9c0-10.8-8.7-19.5-19.5-19.5H421v27.3h-27.3v-27.3H343
c-10.8,0-19.5,8.7-19.5,19.5v195c0,10.8,8.7,19.5,19.5,19.5h156c10.8,0,19.5-8.7,19.5-19.5v-61.7L504,639.2z M448.3,567
H421v27.3h27.3v81.9h-54.6v-54.6H421v-27.3h-27.3V567H421v-27.3h27.3V567z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#66CC66;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
.st6{enable-background:new ;}
.st7{clip-path:url(#SVGID_4_);}
</style>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_344" class="st0">
<g id="组_346" transform="translate(8 2)">
<g id="组_341">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_340" class="st1">
<path id="路径_181" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_339" transform="translate(30.15)" class="st3">
<g id="组_338">
<g>
<g>
<defs>
<rect id="SVGID_13_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_13_" style="overflow:visible;"/>
</clipPath>
<g id="组_337" class="st4">
<path id="路径_182" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st6">
<path class="st5" d="M343.8,538.8l12.8,4c-2,7.1-5.2,12.4-9.8,15.8c-4.6,3.5-10.3,5.2-17.3,5.2c-8.7,0-15.8-3-21.3-8.9
c-5.6-5.9-8.4-14-8.4-24.2c0-10.8,2.8-19.3,8.4-25.3s13-9,22.1-9c8,0,14.4,2.3,19.4,7.1c3,2.8,5.2,6.8,6.7,12l-13,3.1
c-0.8-3.4-2.4-6-4.8-8c-2.5-2-5.4-2.9-8.9-2.9c-4.8,0-8.7,1.7-11.8,5.2c-3,3.5-4.5,9.1-4.5,16.8c0,8.2,1.5,14.1,4.4,17.6
s6.8,5.2,11.6,5.2c3.5,0,6.5-1.1,9-3.3C340.9,547,342.7,543.5,343.8,538.8z"/>
<path class="st5" d="M426.6,562.7h-14.3l-5.7-14.8h-26l-5.4,14.8h-14l25.4-65.1h13.9L426.6,562.7z M402.3,536.9l-9-24.2
l-8.8,24.2H402.3z"/>
<path class="st5" d="M433.5,497.6h24c5.4,0,9.6,0.4,12.4,1.2c3.8,1.1,7.1,3.1,9.8,6c2.7,2.9,4.8,6.4,6.2,10.5
c1.4,4.2,2.1,9.3,2.1,15.4c0,5.4-0.7,10-2,13.9c-1.6,4.7-4,8.6-7,11.5c-2.3,2.2-5.4,4-9.2,5.2c-2.9,0.9-6.8,1.4-11.6,1.4h-24.7
L433.5,497.6L433.5,497.6z M446.6,508.6v43.2h9.8c3.7,0,6.3-0.2,8-0.6c2.1-0.5,3.9-1.4,5.3-2.7s2.6-3.4,3.4-6.3
s1.3-6.9,1.3-11.9s-0.4-8.9-1.3-11.6c-0.9-2.7-2.1-4.8-3.7-6.3s-3.6-2.5-6.1-3.1c-1.8-0.4-5.4-0.6-10.8-0.6h-5.9V508.6z"/>
</g>
<g id="组_343">
<g>
<g>
<defs>
<rect id="SVGID_15_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_15_" style="overflow:visible;"/>
</clipPath>
<g id="组_342" class="st7">
<g id="直线_96">
<path class="st5" d="M580.7,666.3h-273c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h273c4.5,0,8.1,3.6,8.1,8.1
S585.2,666.3,580.7,666.3z"/>
</g>
<g id="直线_97">
<path class="st5" d="M522.7,732.6c-4.5,0-8.1-3.6-8.1-8.1V471c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v253.5
C530.9,729,527.2,732.6,522.7,732.6z"/>
</g>
<g id="路径_186">
<path class="st5" d="M551.5,697.2H493c-5.4,0-9.8-4.4-9.8-9.8V629c0-5.4,4.4-9.8,9.8-9.8h58.5c5.4,0,9.8,4.4,9.8,9.8v58.5
C561.2,692.8,556.8,697.2,551.5,697.2"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#447AF9;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
.st6{enable-background:new ;}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_404" class="st0">
<g id="组_406" transform="translate(8 2)">
<g id="组_401">
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_400" class="st1">
<g id="路径_215">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120
H270z"/>
</g>
<g id="组_399" transform="translate(30.15)" class="st3">
<g id="组_398">
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_397" class="st4">
<g id="路径_216">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st6">
<path class="st5" d="M297.2,668.8v-17.1l98.6-41.6v18.2l-78.2,32.1l78.2,32.4V711L297.2,668.8z"/>
<path class="st5" d="M407.3,736.4l43.2-154h14.6l-43.1,154H407.3z"/>
<path class="st5" d="M575.1,668.8l-98.6,42.1v-18.2l78.1-32.4l-78.1-32.1V610l98.6,41.6V668.8z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#447AF9;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_244" class="st0">
<g id="组_243" transform="translate(8 2)">
<g>
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_242" class="st1">
<g id="路径_134">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120
H270z"/>
</g>
<g id="组_241" transform="translate(30.15)" class="st3">
<g id="组_240">
<g>
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_239" class="st4">
<g id="路径_135">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="直线_87">
<path class="st5" d="M480.3,754.9h-156c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h156c4.5,0,8.1,3.6,8.1,8.1
S484.8,754.9,480.3,754.9z"/>
</g>
<g id="直线_88">
<path class="st5" d="M558.3,676.5h-234c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h234c4.5,0,8.1,3.6,8.1,8.1
S562.8,676.5,558.3,676.5z"/>
</g>
<g id="直线_89">
<path class="st5" d="M558.3,598.5h-234c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h234c4.5,0,8.1,3.6,8.1,8.1
S562.8,598.5,558.3,598.5z"/>
</g>
<g id="直线_90">
<path class="st5" d="M558.3,520.5h-234c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h234c4.5,0,8.1,3.6,8.1,8.1
C566.4,516.9,562.8,520.5,558.3,520.5z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#33C481;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_258" class="st0">
<g id="组_257" transform="translate(8 2)">
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_256" class="st1">
<path id="路径_139" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_255" transform="translate(30.15)" class="st3">
<g id="组_254">
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_253" class="st4">
<path id="路径_140" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
<path id="路径_141" class="st5" d="M351.8,735.6l69.8-110.4l-64.6-102h40.5l29.3,49.8c5.5,9.5,9.9,17.4,13.4,23.8
c5.3-8.8,10.1-16.6,14.5-23.4l32.2-50.2h38.7l-66.1,100l71.1,112.4h-39.7l-39.2-66l-10.4-17.8l-50.2,83.7h-39.3
L351.8,735.6L351.8,735.6z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#434343;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_279" class="st0">
<g id="组_278" transform="translate(8 2)">
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_277" class="st1">
<g id="路径_149">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120
H270z"/>
</g>
<g id="组_276" transform="translate(30.15)" class="st3">
<g id="组_275">
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_274" class="st4">
<g id="路径_150">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="矩形_151">
<path class="st5" d="M363.3,683.7c-2.1,0-4.2-0.8-5.7-2.4l-39-39c-3.2-3.2-3.2-8.3,0-11.5l39-39c3-3,8.4-3,11.5,0l39,39
c1.5,1.5,2.4,3.6,2.4,5.7c0,2.2-0.9,4.2-2.4,5.7l-39,39C367.4,682.9,365.4,683.7,363.3,683.7z M335.8,636.6l27.5,27.5
l27.5-27.5l-27.5-27.5L335.8,636.6z"/>
</g>
<g id="矩形_152">
<path class="st5" d="M558.3,664.2h-92.9c-4.5,0-8.1-3.6-8.1-8.1v-39c0-4.5,3.6-8.1,8.1-8.1h92.9c4.5,0,8.1,3.6,8.1,8.1v39
C566.4,660.5,562.8,664.2,558.3,664.2z M473.5,647.9h76.7v-22.8h-76.7V647.9z"/>
</g>
<g id="矩形_153">
<path class="st5" d="M558.3,754.5h-92.9c-4.5,0-8.1-3.6-8.1-8.1v-39c0-4.5,3.6-8.1,8.1-8.1h92.9c4.5,0,8.1,3.6,8.1,8.1v39
C566.4,750.9,562.8,754.5,558.3,754.5z M473.5,738.3h76.7v-22.8h-76.7V738.3z"/>
</g>
<g id="路径_151">
<path class="st5" d="M382.8,531.9c0,10.8-8.7,19.5-19.5,19.5s-19.5-8.7-19.5-19.5s8.7-19.5,19.5-19.5
S382.8,521.1,382.8,531.9"/>
</g>
<g id="椭圆_35">
<path class="st5" d="M363.3,559.5c-15.2,0-27.6-12.4-27.6-27.6s12.4-27.6,27.6-27.6s27.6,12.4,27.6,27.6
S378.5,559.5,363.3,559.5z M363.3,520.5c-6.3,0-11.4,5.1-11.4,11.4s5.1,11.4,11.4,11.4s11.4-5.1,11.4-11.4
S369.5,520.5,363.3,520.5z"/>
</g>
<g id="直线_91">
<path class="st5" d="M363.3,605.7c-4.5,0-8.1-3.6-8.1-8.1v-85.2c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v85.2
C371.4,602.1,367.8,605.7,363.3,605.7z"/>
</g>
<g id="直线_92">
<path class="st5" d="M464.2,644.7h-62c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h62c4.5,0,8.1,3.6,8.1,8.1
S468.7,644.7,464.2,644.7z"/>
</g>
<g id="直线_93">
<path class="st5" d="M363.3,735c-4.5,0-8.1-3.6-8.1-8.1v-51.3c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v51.3
C371.4,731.4,367.8,735,363.3,735z"/>
</g>
<g id="直线_94">
<path class="st5" d="M464.2,735H363.7c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h100.5c4.5,0,8.1,3.6,8.1,8.1
S468.7,735,464.2,735z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{fill:#F9B552;}
.st2{fill:#FFCF5C;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_3_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_229" class="st0">
<path id="路径_130" class="st1" d="M224,752.4h576.1c35.3-0.1,63.9-28.7,64-64V299.8c-0.1-35.3-28.7-63.9-64-64H224
c-35.3,0.1-63.9,28.7-64,64v388.6C160.1,723.7,188.7,752.3,224,752.4"/>
<path id="路径_131" class="st2" d="M842.7,871.6H181.3c-47.1,0-85.3-38.2-85.3-85.3V252.8c0-47.1,38.2-85.3,85.3-85.3h268.5
c36.6,0,69.1,23.3,80.9,58l24.1,71.4c11.7,34.7,44.3,58,80.9,58h206.6c47.1,0,85.3,38.1,85.3,85.2l0.5,346
C928,833.3,889.8,871.6,842.7,871.6L842.7,871.6"/>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#6067DC;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_395" class="st0">
<g id="组_394" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_393" class="st1">
<path id="路径_210" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_392" transform="translate(30.15)" class="st3">
<g id="组_391">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_390" class="st4">
<path id="路径_211" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<path id="路径_212" class="st5" d="M508.9,615.6v27.7l52.8,46.3c6.6,5.7,16.6,5.1,22.3-1.5c2.5-2.9,3.9-6.6,3.9-10.4v-96.3
c0-8.7-7-15.8-15.8-15.8c-3.8,0-7.5,1.4-10.4,3.9L508.9,615.6z"/>
<path id="路径_213" class="st5" d="M469.9,526.6H334.5c-21.5,0-38.9,17.5-39,39v127.5c0.1,21.5,17.5,38.9,39,39h135.4
c21.5-0.1,38.9-17.5,39-39V565.6C508.8,544.1,491.4,526.7,469.9,526.6 M440.1,635.6l-50.9,40.8c-3.4,2.8-8.5,2.2-11.2-1.2
c-1.1-1.4-1.8-3.2-1.8-5v-81.5c0-4.4,3.6-8,8-8c1.8,0,3.6,0.6,5,1.7l50.9,40.8c3.4,2.7,4,7.8,1.3,11.2
C441,634.9,440.6,635.3,440.1,635.6"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.4 KiB

View File

@@ -0,0 +1,106 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#925DF1;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_237" class="st0">
<g id="组_236" transform="translate(7.75 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="189" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_235" class="st1">
<g id="路径_132">
<path class="st2" d="M267,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L581,120H267z
"/>
</g>
<g id="组_234" transform="translate(30.15)" class="st3">
<g id="组_233">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="550.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_232" class="st4">
<g id="路径_133">
<path class="st5" d="M628.8,352.1h154L550.8,120v154.1C550.9,317.1,585.8,351.9,628.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="椭圆_29">
<path class="st5" d="M428.5,670.7c-22.8,0-41.3-18.5-41.3-41.3s18.5-41.3,41.3-41.3s41.3,18.5,41.3,41.3
S451.2,670.7,428.5,670.7z M428.5,604.4c-13.8,0-25,11.2-25,25s11.2,25,25,25s25-11.2,25-25S442.3,604.4,428.5,604.4z"/>
</g>
<g id="椭圆_30">
<path class="st5" d="M465.3,571.2c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S483.8,571.2,465.3,571.2z
M465.3,520.5c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S474.8,520.5,465.3,520.5z"/>
</g>
<g id="椭圆_31">
<path class="st5" d="M346.6,572.6c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S365.1,572.6,346.6,572.6z
M346.6,521.9c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S356.1,521.9,346.6,521.9z"/>
</g>
<g id="椭圆_32">
<path class="st5" d="M346.6,746.4c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S365.1,746.4,346.6,746.4z
M346.6,695.7c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S356.1,695.7,346.6,695.7z"/>
</g>
<g id="椭圆_33">
<path class="st5" d="M478.9,754.5c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S497.4,754.5,478.9,754.5z
M478.9,703.8c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S488.4,703.8,478.9,703.8z"/>
</g>
<g id="椭圆_34">
<path class="st5" d="M529.9,667.1c-18.5,0-33.5-15-33.5-33.5s15-33.5,33.5-33.5s33.5,15,33.5,33.5S548.4,667.1,529.9,667.1z
M529.9,616.3c-9.5,0-17.2,7.7-17.2,17.2s7.7,17.2,17.2,17.2s17.2-7.7,17.2-17.2S539.4,616.3,529.9,616.3z"/>
</g>
<g id="直线_82">
<path class="st5" d="M400.2,618.9c-2.5,0-4.9-1.1-6.5-3.2l-33.3-44.4c-2.7-3.6-2-8.7,1.6-11.4s8.7-2,11.4,1.6l33.3,44.4
c2.7,3.6,2,8.7-1.6,11.4C403.6,618.3,401.9,618.9,400.2,618.9z"/>
</g>
<g id="直线_83">
<path class="st5" d="M470.5,704.3c-2.5,0-5-1.2-6.6-3.4l-23.2-32.4c-2.6-3.7-1.8-8.7,1.9-11.3c3.7-2.6,8.7-1.8,11.3,1.9
l23.2,32.4c2.6,3.7,1.8,8.7-1.9,11.3C473.7,703.8,472.1,704.3,470.5,704.3z"/>
</g>
<g id="直线_84">
<path class="st5" d="M504.6,641.7h-41.8c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h41.8c4.5,0,8.1,3.6,8.1,8.1
S509.1,641.7,504.6,641.7z"/>
</g>
<g id="直线_85">
<path class="st5" d="M446.2,604.5c-1.4,0-2.8-0.3-4-1.1c-3.9-2.2-5.2-7.2-3-11.1l19.2-33.3c2.2-3.9,7.2-5.2,11.1-3
s5.2,7.2,3,11.1l-19.2,33.3C451.7,603.1,449,604.5,446.2,604.5z"/>
</g>
<g id="直线_86">
<path class="st5" d="M364.5,700.5c-2.2,0-4.5-0.9-6.1-2.8c-3-3.4-2.6-8.5,0.7-11.5l38.7-34.1c3.4-3,8.5-2.7,11.5,0.7
s2.6,8.5-0.7,11.5l-38.7,34.1C368.3,699.9,366.4,700.5,364.5,700.5z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#15B2FF;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_328" class="st0">
<g id="组_327" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_326" class="st1">
<path id="路径_172" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_325" transform="translate(30.15)" class="st3">
<g id="组_324">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_323" class="st4">
<path id="路径_173" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<path id="路径_174" class="st5" d="M368.3,711.4c-0.5,0-0.8,0.2-1.3,0.2c-30,0-54.4-24.3-54.4-54.3s24.3-54.4,54.3-54.4
c25.6,0,47.7,17.8,53.2,42.8l13.6-17.2c-11.2-27-37.4-44.8-66.7-45c-40.7-0.1-73.7,32.8-73.8,73.5
c-0.1,35.8,25.6,66.4,60.8,72.7L368.3,711.4z"/>
<path id="路径_175" class="st5" d="M573.3,626.1c6.9,9,10.7,19.9,10.9,31.2c0,29.9-24.3,54.2-54.2,54.2
c-10.8,0-21.4-3.3-30.4-9.4l-30.4-23.9l-12,15.4l27.3,21.8c1.6,0.8,2.7,1.9,4.3,2.7c12.1,8.4,26.6,12.9,41.3,12.9
c40.5,0.2,73.5-32.4,73.7-72.9c0.1-17.6-6.2-34.7-17.7-48.1L573.3,626.1z"/>
<path id="路径_176" class="st5" d="M529.9,602.9c10.5,0.2,20.8,3.6,29.4,9.7l12.3-15.6c-12.1-8.7-26.7-13.4-41.6-13.6
c-23.3,0.1-45.2,11.2-59,29.9L378.7,730c19.6-3.2,37-14.2,48.4-30.5l52.8-66.6l46.7,37.2l12.2-15.2l-46-36.7
C502.7,608.5,516,603,529.9,602.9"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@@ -0,0 +1,72 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#55575E;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
.st6{enable-background:new ;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_310" class="st0">
<g id="组_312" transform="translate(8 2)">
<g id="组_307">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_306" class="st1">
<g id="路径_167">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270
z"/>
</g>
<g id="组_305" transform="translate(30.15)" class="st3">
<g id="组_304">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_303" class="st4">
<g id="路径_168">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st6">
<path class="st5" d="M424.2,658.4h-32.4c-0.1-4.7-0.1-7.5-0.1-8.5c0-10.5,1.7-19.1,5.2-25.9s10.4-14.4,20.8-22.9
s16.6-14,18.7-16.6c3.1-4.2,4.7-8.7,4.7-13.7c0-6.9-2.8-12.9-8.3-17.8s-13-7.4-22.4-7.4c-9.1,0-16.6,2.6-22.7,7.7
s-10.3,13-12.6,23.6l-32.8-4.1c0.9-15.1,7.4-28,19.4-38.6s27.7-15.9,47.2-15.9c20.5,0,36.8,5.4,48.9,16.1s18.2,23.2,18.2,37.4
c0,7.9-2.2,15.3-6.7,22.3s-13.9,16.6-28.5,28.7c-7.5,6.3-12.2,11.3-14,15.1S424,648.6,424.2,658.4z M391.8,706.4v-35.7h35.7
v35.7H391.8z"/>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#EA4845;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_301" class="st0">
<g id="组_300" transform="translate(8 2)">
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_299" class="st1">
<g id="路径_159">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120
H270z"/>
</g>
<g id="组_298" transform="translate(30.15)" class="st3">
<g id="组_297">
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_296" class="st4">
<g id="路径_160">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="路径_161">
<path class="st5" d="M541.4,693.4c-0.3,0-0.6,0-0.9-0.1c-24.1-2.7-46.6-12.3-65.2-27.9c-0.5-0.2-0.9-0.5-1.3-0.7
c-13.2-9.8-25.5-20.9-36.6-32.9c-6.5-7.1-12.7-14.7-18.4-22.5c-22.5-30.5-35.1-62.8-33.9-86.3c0.1-5.5,1.7-11.2,4.7-16.1
c2.3-3.9,7.3-5.1,11.1-2.8c3.9,2.3,5.1,7.3,2.8,11.1c-1.5,2.5-2.3,5.4-2.4,8.4c-1.1,19.8,10.7,48.9,30.7,76.1
c5.4,7.4,11.1,14.5,17.2,21.1c10.1,10.9,21.2,21,33.2,30c0.7,0.3,1.4,0.7,2,1.2c16.3,14.1,36.3,22.8,57.7,25.1
c4.5,0.5,7.7,4.5,7.2,9C549,690.3,545.5,693.4,541.4,693.4z"/>
</g>
<g id="路径_162">
<path class="st5" d="M353.9,750.1c-2.3,0-4.5-0.9-6.1-2.8c-3-3.4-2.6-8.5,0.7-11.5c0.7-0.6,1.3-1.3,1.9-1.9
c13.8-16.6,26-34.9,36.1-54.2c0.4-0.7,0.8-1.3,1.3-1.9c6.5-13,12-25.2,16.9-37.3c5-12.4,9.3-25.3,13-38.2
c8.5-25.7,12.4-52,11.7-78.7c0-2.2-0.4-4.1-1.1-5.9c-1.7-4.1,0.2-8.9,4.3-10.6c4.1-1.8,8.9,0.2,10.6,4.3
c1.6,3.8,2.4,7.9,2.4,12.1c0.7,28.3-3.4,56.5-12.4,83.6c-3.7,13.1-8.3,26.5-13.5,39.5c-5.3,13.1-11.4,26.4-18.5,40.5
c-0.4,0.8-0.9,1.5-1.5,2.1c-10.4,19.6-22.9,38.2-37.1,55.3c-1.2,1.4-2.3,2.5-3.6,3.6C357.7,749.4,355.8,750.1,353.9,750.1
z M394.2,683.5h0.1H394.2z"/>
</g>
<g id="路径_163">
<path class="st5" d="M329.6,723.5c-2.2,0-4.4-0.9-6-2.6c-3-3.3-2.8-8.4,0.5-11.5c2.3-2.1,4.8-3.9,7.6-5.3
c18.5-11,38.7-20.6,59.4-28.3c0.5-0.2,0.9-0.3,1.4-0.4c9.6-3.8,20.5-7.6,35.3-12.2c19.1-5.9,35.3-10.1,49.5-13
c0.4-0.1,0.7-0.1,1.1-0.1c20.4-4.4,41.2-6.8,62-7.1h1.9c4.5,0,8.1,3.6,8.1,8.1s-3.6,8.1-8.1,8.1h-1.8
c-19.9,0.3-39.9,2.6-59.5,6.9c-0.6,0.1-1.2,0.2-1.7,0.2c-12.5,2.6-28.2,6.8-46.8,12.5c-14.9,4.7-25.8,8.4-35.2,12.2
c-0.6,0.2-1.2,0.4-1.8,0.5c-19.4,7.3-38.3,16.3-56.1,26.9c-1.9,1-3.2,1.9-4.4,3C333.5,722.8,331.6,723.5,329.6,723.5z"/>
</g>
<g id="路径_164">
<path class="st5" d="M436,522.7c-3.1,0-6.1-1.8-7.5-4.9c-2.2-5.1-7.2-8.4-12.8-8.4c0,0-0.1,0-0.2,0
c-4.8,0-9.2,2.3-11.9,6.2c-2.5,3.7-7.6,4.7-11.3,2.1c-3.7-2.5-4.7-7.6-2.1-11.3c5.7-8.3,15.1-13.3,25.2-13.3
c0.1,0,0.2,0,0.4,0c12,0,22.8,7.1,27.6,18.2c1.8,4.1-0.1,8.9-4.2,10.7C438.1,522.5,437,522.7,436,522.7z"/>
</g>
<g id="路径_165">
<path class="st5" d="M342.7,754.5c-0.1,0-0.2,0-0.3,0c-7.5-0.1-14-2.9-18.8-7.9s-7.5-11.6-7.4-18.5
c-0.1-6.8,2.7-13.6,7.7-18.5c3.2-3.1,8.4-3.1,11.5,0.1c3.1,3.2,3.1,8.3-0.1,11.5c-1.9,1.8-2.9,4.4-2.9,6.9
c-0.1,5.6,4.3,10.1,9.7,10.2c2.6,0.2,4.8-0.8,6.4-2.3c3.3-3,8.4-2.8,11.5,0.5c3,3.3,2.8,8.4-0.5,11.5
C354.9,752.2,349,754.5,342.7,754.5z"/>
</g>
<g id="路径_166">
<path class="st5" d="M541.6,693.4l-0.1-16.2c4.8,0,8.7-3.9,8.7-8.7c0.1-4.9-3.6-8.9-8.3-9.2c-4.5-0.3-7.9-4.1-7.6-8.6
c0.3-4.5,4.1-8,8.6-7.6c13.4,0.9,23.8,12.1,23.6,25.5C566.5,682.1,555.3,693.3,541.6,693.4z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@@ -0,0 +1,69 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#53CBAE;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_272" class="st0">
<g id="组_271" transform="translate(8 2)">
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_270" class="st1">
<path id="路径_146" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_269" transform="translate(30.15)" class="st3">
<g id="组_268">
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_267" class="st4">
<path id="路径_147" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
<path id="路径_148" class="st5" d="M538.4,503H344.1c-16.1,0-29.2,13.1-29.2,29.2v194.3c0,16.1,13.1,29.2,29.2,29.2
h194.3c16.2,0,29.2-13.1,29.2-29.2V532.2C567.7,516.1,554.6,503,538.4,503 M476,566c15.8,0,28.6,12.8,28.6,28.6
s-12.8,28.6-28.6,28.6c-15.8,0-28.6-12.8-28.6-28.5C447.4,578.9,460.2,566.1,476,566 M548.2,726.6c0,5.4-4.4,9.8-9.8,9.8
H344.1c-5.4,0-9.8-4.4-9.8-9.8v-23l51.2-51.2c9.8-9.9,25.8-9.9,35.6,0l0,0l52.7,52.7l18.4-18.4c9.8-9.9,25.8-9.9,35.6,0
l0,0l20.1,20.1v19.8L548.2,726.6L548.2,726.6z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,62 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#FF8F6B;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_286" class="st0">
<g id="组_285" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_284" class="st1">
<path id="路径_152" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_283" transform="translate(30.15)" class="st3">
<g id="组_282">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_281" class="st4">
<path id="路径_153" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<path id="路径_154" class="st5" d="M510.2,555.6c-3.4-8.4-8.9-15.7-16-21.3c-7.2-5.4-15.6-8.9-24.5-10.4
c-9.7-1.6-19.4-2.3-29.2-2.1h-74V737h30.8v-85.1h45.4c27.4,0,46.8-6.6,57.5-19.6c10.8-13.3,16.5-30,16-47.1
C516.3,575,514.2,564.9,510.2,555.6 M484.6,586.1c0.6,9.6-2.8,19-9.3,26c-9.2,7-20.7,10.3-32.3,9.1h-45.8v-68.9h45.2
c7.5-0.3,15,0.2,22.4,1.7c5.9,1.8,11,5.8,14.2,11.2C482.9,571.5,484.8,578.7,484.6,586.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,90 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#009F4E;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
.st6{fill:none;stroke:#FFFFFF;stroke-width:1.25;stroke-linecap:round;stroke-linejoin:round;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_379" class="st0">
<g id="组_378" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_377" class="st1">
<g id="路径_200">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270z
"/>
</g>
<g id="组_376" transform="translate(30.15)" class="st3">
<g id="组_375">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_374" class="st4">
<g id="路径_201">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="矩形_196">
<path class="st5" d="M551.8,754.5h-221c-8.1,0-14.6-6.6-14.6-14.6v-221c0-8.1,6.6-14.6,14.6-14.6h221
c8.1,0,14.6,6.6,14.6,14.6v221C566.4,748,559.8,754.5,551.8,754.5z M332.4,738.3h217.8V520.5H332.4V738.3z M551.8,520.5
L551.8,520.5L551.8,520.5z"/>
</g>
<g id="路径_202">
<path class="st6" d="M558.3,590.4L558.3,590.4z"/>
</g>
<g id="直线_98">
<path class="st5" d="M402.3,752.3c-4.5,0-8.1-3.6-8.1-8.1V590.6c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v153.6
C410.4,748.7,406.8,752.3,402.3,752.3z"/>
</g>
<g id="直线_99">
<path class="st5" d="M480.3,752.3c-4.5,0-8.1-3.6-8.1-8.1V590.6c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1v153.6
C488.4,748.7,484.8,752.3,480.3,752.3z"/>
</g>
<g id="路径_203">
<path class="st6" d="M558.3,668.4L558.3,668.4z"/>
</g>
<g id="直线_99_1_">
<path class="st5" d="M318.6,590.4c0-4.5,5.2-8.1,11.7-8.1H552c6.5,0,11.7,3.6,11.7,8.1s-5.2,8.1-11.7,8.1H330.3
C323.8,598.5,318.6,594.9,318.6,590.4z"/>
</g>
<g id="直线_99_2_">
<path class="st5" d="M318.6,672c0-4.5,5.2-8.1,11.7-8.1H552c6.5,0,11.7,3.6,11.7,8.1s-5.2,8.1-11.7,8.1H330.3
C323.8,680.1,318.6,676.4,318.6,672z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#615ECC;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
.st6{enable-background:new ;}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_320" class="st0">
<g id="组_322" transform="translate(8 2)">
<g id="组_317">
<g>
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_316" class="st1">
<g id="路径_170">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120
H270z"/>
</g>
<g id="组_315" transform="translate(30.15)" class="st3">
<g id="组_314">
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_313" class="st4">
<g id="路径_171">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st6">
<path class="st5" d="M325.3,706.4V605.9h-35.9v-20.5h96.1v20.5h-35.8v100.5H325.3z"/>
<path class="st5" d="M400.6,706.4v-121H425v121H400.6z"/>
<path class="st5" d="M448.5,706.4v-121h82.9v20.5h-58.5v28.6h50.5V655h-50.5v51.4H448.5z"/>
<path class="st5" d="M551.7,706.4v-121h82.9v20.5h-58.5v28.6h50.5V655h-50.5v51.4H551.7z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{fill:#999999;}
.st2{clip-path:url(#SVGID_2_);}
.st3{clip-path:url(#SVGID_3_);}
.st4{opacity:0.375;}
.st5{clip-path:url(#SVGID_4_);}
.st6{opacity:0.4;}
.st7{clip-path:url(#SVGID_5_);}
.st8{fill:#FFFFFF;}
.st9{enable-background:new ;}
</style>
<g>
<g>
<g>
<defs>
<rect id="SVGID_11_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="路径_187" class="st0">
<path class="st1" d="M278,122c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V354.1L592,122H278z"/>
</g>
</g>
<g>
<defs>
<rect id="SVGID_13_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_13_" style="overflow:visible;"/>
</clipPath>
<g id="组_357" class="st2">
<g id="组_359" transform="translate(8 2)">
<g id="组_354">
<g>
<g>
<g>
<defs>
<rect id="SVGID_15_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_15_" style="overflow:visible;"/>
</clipPath>
<g id="组_353" class="st3">
<g id="组_349" class="st4">
<g id="组_348">
<g>
<g>
<g>
<defs>
<rect id="SVGID_17_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_17_" style="overflow:visible;"/>
</clipPath>
<g id="组_347" class="st5">
</g>
</g>
</g>
</g>
</g>
</g>
<g id="组_352" transform="translate(30.15)" class="st6">
<g id="组_351">
<g>
<g>
<g>
<defs>
<rect id="SVGID_19_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_5_">
<use xlink:href="#SVGID_19_" style="overflow:visible;"/>
</clipPath>
<g id="组_350" class="st7">
<g id="路径_188">
<path class="st8" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g class="st9">
<path class="st8" d="M345.4,698.9V598.4h-35.9V578h96.1v20.5h-35.8V699L345.4,698.9L345.4,698.9z"/>
<path class="st8" d="M409.1,698.9l41.3-63.1L413,578h28.6l24.3,38.9l23.8-38.9H518l-37.6,58.8l41.3,62.2h-29.5l-26.8-41.8
L438.5,699L409.1,698.9L409.1,698.9z"/>
<path class="st8" d="M561.4,698.9V598.4h-35.9V578h96.1v20.5h-35.8V699L561.4,698.9L561.4,698.9z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{fill:#F9B552;}
.st2{fill:#FFCF5C;}
.st3{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_3_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_3_" style="overflow:visible;"/>
</clipPath>
<g id="组_381" class="st0">
<g id="路径_204">
<path class="st1" d="M224,745.9h576.1c35.3-0.1,63.9-28.7,64-64V293.3c-0.1-35.3-28.7-63.9-64-64H224c-35.3,0.1-63.9,28.7-64,64
v388.6C160.1,717.2,188.7,745.8,224,745.9"/>
</g>
<g id="路径_205">
<path class="st2" d="M842.7,865.1H181.3c-47.1,0-85.3-38.2-85.3-85.3V246.3c0-47.1,38.2-85.3,85.3-85.3h268.5
c36.6,0,69.1,23.3,80.9,58l24.1,71.4c11.7,34.7,44.3,58,80.9,58h206.6c47.1,0,85.3,38.1,85.3,85.2l0.5,346
C928,826.8,889.8,865.1,842.7,865.1L842.7,865.1"/>
</g>
<g id="直线_106">
<path class="st3" d="M411.2,576.4c-2.1,0-4.2-0.8-5.7-2.4l-53.7-53.7c-3.2-3.2-3.2-8.3,0-11.5s8.3-3.2,11.5,0l53.7,53.7
c3.2,3.2,3.2,8.3,0,11.5C415.4,575.6,413.3,576.4,411.2,576.4z"/>
</g>
<g id="直线_107">
<path class="st3" d="M303.9,576.4c-2.1,0-4.2-0.8-5.7-2.4c-3.2-3.2-3.2-8.3,0-11.5l53.7-53.7c3.2-3.2,8.3-3.2,11.5,0
s3.2,8.3,0,11.5L309.6,574C308,575.6,306,576.4,303.9,576.4z"/>
</g>
<g id="直线_108">
<path class="st3" d="M357.5,687.1c-4.5,0-8.1-3.6-8.1-8.1V514.6c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1V679
C365.7,683.5,362,687.1,357.5,687.1z"/>
</g>
<g id="路径_214">
<path class="st3" d="M446,756.7H270.5c-20.5-0.1-37.3-16.8-37.4-37.3V641c0-18.4,15-33.4,33.4-33.4l0,0h12.7
c4.5,0,8.1,3.6,8.1,8.1s-3.6,8.1-8.1,8.1h-12.7l0,0c-9.5,0-17.2,7.7-17.2,17.2v78.3c0,11.6,9.5,21.1,21.2,21.1H446
c11.6,0,21.1-9.5,21.1-21.1V641c0-9.5-7.7-17.1-17.2-17.1l0,0h-12.6c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h12.6l0,0
c18.4,0,33.4,15,33.4,33.4v78.3C483.3,739.9,466.6,756.7,446,756.7z"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,80 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#188FE1;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_388" class="st0">
<g id="组_387" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_386" class="st1">
<g id="路径_207">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270z
"/>
</g>
<g id="组_385" transform="translate(30.15)" class="st3">
<g id="组_384">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_383" class="st4">
<g id="路径_208">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="直线_103">
<path class="st5" d="M494.2,574.4c-2.1,0-4.2-0.8-5.7-2.4l-53.7-53.7c-3.2-3.2-3.2-8.3,0-11.5s8.3-3.2,11.5,0l53.7,53.7
c3.2,3.2,3.2,8.3,0,11.5C498.4,573.6,496.3,574.4,494.2,574.4z"/>
</g>
<g id="直线_104">
<path class="st5" d="M386.9,574.4c-2.1,0-4.2-0.8-5.7-2.4c-3.2-3.2-3.2-8.3,0-11.5l53.7-53.7c3.2-3.2,8.3-3.2,11.5,0
s3.2,8.3,0,11.5L392.6,572C391,573.6,389,574.4,386.9,574.4z"/>
</g>
<g id="直线_105">
<path class="st5" d="M440.5,685.1c-4.5,0-8.1-3.6-8.1-8.1V512.6c0-4.5,3.6-8.1,8.1-8.1s8.1,3.6,8.1,8.1V677
C448.7,681.5,445,685.1,440.5,685.1z"/>
</g>
<g id="路径_209">
<path class="st5" d="M529,754.7H353.5c-20.5-0.1-37.3-16.8-37.4-37.3V639c0-18.4,15-33.4,33.4-33.4l0,0h12.7
c4.5,0,8.1,3.6,8.1,8.1s-3.6,8.1-8.1,8.1h-12.7l0,0c-9.5,0-17.2,7.7-17.2,17.2v78.3c0,11.6,9.5,21.1,21.2,21.1H529
c11.6,0,21.1-9.5,21.1-21.1V639c0-9.5-7.7-17.1-17.2-17.1l0,0h-12.6c-4.5,0-8.1-3.6-8.1-8.1s3.6-8.1,8.1-8.1h12.6l0,0
c18.4,0,33.4,15,33.4,33.4v78.3C566.3,737.9,549.6,754.7,529,754.7z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#41A5EE;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_251" class="st0">
<g id="组_250" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_249" class="st1">
<path id="路径_136" class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78
V352.1L584,120H270z"/>
<g id="组_248" transform="translate(30.15)" class="st3">
<g id="组_247">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_246" class="st4">
<path id="路径_137" class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
<path id="路径_138" class="st5" d="M368.7,735.8l-58.5-212.4h33.4L374,646l11.3,45.6c0.5-2.3,3.8-16.9,9.9-43.8l30.4-124.4
h33.3l28.6,123.2l9.5,40.6l11-41l32.8-122.8h31.6l-59.8,212.4H479l-30.4-127.1l-7.4-36.2l-38.6,163.3L368.7,735.8
L368.7,735.8z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -0,0 +1,76 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 25.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="图层_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 1024 1024" style="enable-background:new 0 0 1024 1024;" xml:space="preserve">
<style type="text/css">
.st0{clip-path:url(#SVGID_1_);}
.st1{clip-path:url(#SVGID_2_);}
.st2{fill:#FF434A;}
.st3{opacity:0.4;}
.st4{clip-path:url(#SVGID_3_);}
.st5{fill:#FFFFFF;}
</style>
<g>
<g>
<defs>
<rect id="SVGID_7_" x="96" y="96" width="832" height="832"/>
</defs>
<clipPath id="SVGID_1_">
<use xlink:href="#SVGID_7_" style="overflow:visible;"/>
</clipPath>
<g id="组_335" class="st0">
<g id="组_334" transform="translate(8 2)">
<g>
<g>
<defs>
<rect id="SVGID_9_" x="192" y="120" width="624" height="780"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_9_" style="overflow:visible;"/>
</clipPath>
<g id="组_333" class="st1">
<g id="路径_177">
<path class="st2" d="M270,120c-43,0.1-77.9,35-78,78v624c0.1,43,35,77.9,78,78h468c43-0.1,77.9-35,78-78V352.1L584,120H270z
"/>
</g>
<g id="组_332" transform="translate(30.15)" class="st3">
<g id="组_331">
<g>
<g>
<defs>
<rect id="SVGID_11_" x="553.8" y="120" width="232.1" height="232.1"/>
</defs>
<clipPath id="SVGID_3_">
<use xlink:href="#SVGID_11_" style="overflow:visible;"/>
</clipPath>
<g id="组_330" class="st4">
<g id="路径_178">
<path class="st5" d="M631.8,352.1h154L553.8,120v154.1C553.9,317.1,588.8,351.9,631.8,352.1"/>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="路径_179">
<path class="st5" d="M490,729.5c-1.2,0-2.5-0.3-3.7-0.9c-4-2-5.6-6.9-3.6-10.9l92.6-183.2H496L399.8,725
c-2,4-6.9,5.6-10.9,3.6s-5.6-6.9-3.6-10.9l98.6-195c1.4-2.7,4.2-4.5,7.2-4.5h97.5c2.8,0,5.4,1.5,6.9,3.9s1.6,5.4,0.3,7.9
l-98.6,195C495.9,727.9,493,729.5,490,729.5z"/>
</g>
<g id="路径_180">
<path class="st5" d="M392.5,729.5c-3,0-5.8-1.6-7.3-4.5l-98.5-195c-1.3-2.5-1.1-5.5,0.3-7.9c1.5-2.4,4.1-3.9,6.9-3.9h97.5
c3.1,0,5.9,1.7,7.2,4.5l33.4,66c2,4,0.4,8.9-3.6,10.9s-8.9,0.4-10.9-3.6l-31.1-61.6h-79.3l92.5,183.2c2,4,0.4,8.9-3.6,10.9
C395,729.2,393.7,729.5,392.5,729.5z"/>
</g>
<g id="直线_95">
<path class="st5" d="M490,729.5c-3,0-5.8-1.6-7.3-4.5l-32.4-64.1c-2-4-0.4-8.9,3.6-10.9s8.9-0.4,10.9,3.6l32.4,64.1
c2,4,0.4,8.9-3.6,10.9C492.5,729.2,491.2,729.5,490,729.5z"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1639131652752" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11826" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#6067DC" p-id="11827"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="11828"></path><path d="M516.266667 627.2v29.866667l59.733333 51.2c12.8 8.533333 29.866667 0 29.866667-12.8v-106.666667c0-12.8-17.066667-21.333333-29.866667-12.8l-59.733333 51.2z" fill="#FFFFFF" p-id="11829"></path><path d="M473.6 529.066667H328.533333c-21.333333 0-42.666667 21.333333-42.666666 42.666666v140.8c0 21.333333 21.333333 42.666667 42.666666 42.666667h149.333334c21.333333 0 42.666667-21.333333 42.666666-42.666667v-140.8c-4.266667-21.333333-21.333333-42.666667-46.933333-42.666666z m-29.866667 119.466666l-55.466666 42.666667c-4.266667 4.266667-12.8 0-12.8-8.533333v-85.333334c0-8.533333 8.533333-12.8 12.8-8.533333l55.466666 42.666667c4.266667 8.533333 4.266667 12.8 0 17.066666z" fill="#FFFFFF" p-id="11830"></path></svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1625028315575" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10051" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#925DF1" p-id="10052"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="10053"></path><path d="M541.866667 610.133333c-17.066667 0-29.866667 12.8-34.133334 29.866667h-29.866666c0-12.8-8.533333-21.333333-12.8-29.866667l17.066666-29.866666c17.066667-4.266667 29.866667-17.066667 29.866667-38.4s-17.066667-38.4-38.4-38.4-38.4 17.066667-38.4 38.4c0 17.066667 8.533333 29.866667 21.333333 34.133333l-12.8 21.333333c-4.266667 0-8.533333-4.266667-12.8-4.266666-12.8 0-21.333333 4.266667-29.866666 12.8l-29.866667-38.4c4.266667-8.533333 8.533333-12.8 8.533333-21.333334 0-21.333333-17.066667-38.4-38.4-38.4s-38.4 17.066667-38.4 38.4 17.066667 38.4 38.4 38.4c4.266667 0 8.533333 0 12.8-4.266666l34.133334 42.666666c0 8.533333-4.266667 12.8-4.266667 21.333334s4.266667 17.066667 8.533333 25.6l-34.133333 29.866666c-4.266667-4.266667-8.533333-4.266667-17.066667-4.266666-21.333333 0-38.4 17.066667-38.4 38.4s17.066667 38.4 38.4 38.4 38.4-17.066667 38.4-38.4c0-8.533333-4.266667-12.8-4.266666-21.333334l34.133333-29.866666c8.533333 4.266667 12.8 4.266667 21.333333 4.266666 4.266667 0 8.533333 0 12.8-4.266666l17.066667 25.6c-8.533333 8.533333-12.8 17.066667-12.8 29.866666 0 21.333333 17.066667 38.4 38.4 38.4s38.4-17.066667 38.4-38.4-17.066667-38.4-38.4-38.4h-4.266667l-21.333333-29.866666c4.266667-4.266667 8.533333-12.8 12.8-17.066667h29.866667c4.266667 17.066667 17.066667 25.6 34.133333 25.6 21.333333 0 38.4-17.066667 38.4-38.4s-12.8-29.866667-34.133333-29.866667z m-68.266667-85.333333c8.533333 0 17.066667 8.533333 17.066667 17.066667s-8.533333 17.066667-17.066667 17.066666-17.066667-8.533333-17.066667-17.066666 8.533333-17.066667 17.066667-17.066667z m-149.333333 17.066667c0-8.533333 8.533333-17.066667 17.066666-17.066667s17.066667 8.533333 17.066667 17.066667-4.266667 17.066667-17.066667 17.066666-17.066667-4.266667-17.066666-17.066666z m179.2 200.533333c0 8.533333-8.533333 17.066667-17.066667 17.066667s-17.066667-8.533333-17.066667-17.066667 8.533333-17.066667 17.066667-17.066667 17.066667 8.533333 17.066667 17.066667z m-162.133334 8.533333c-8.533333 0-17.066667-8.533333-17.066666-17.066666s8.533333-17.066667 17.066666-17.066667 17.066667 8.533333 17.066667 17.066667-4.266667 17.066667-17.066667 17.066666z m64-106.666666c0-12.8 12.8-25.6 25.6-25.6s25.6 12.8 25.6 25.6-12.8 25.6-25.6 25.6-25.6-12.8-25.6-25.6z m136.533334 21.333333c-8.533333 0-17.066667-8.533333-17.066667-17.066667s8.533333-17.066667 17.066667-17.066666 17.066667 8.533333 17.066666 17.066666-4.266667 17.066667-17.066666 17.066667z" fill="#FFFFFF" p-id="10054"></path></svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1639159863770" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="6249" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M208.50324948 98.14070655a39.70462592 39.70462592 0 0 0-28.9701507 12.41577865C171.94621747 118.83367123 167.11812845 129.18015316 167.11812845 139.52663591v744.94672818a39.70462592 39.70462592 0 0 0 12.41577864 28.97015071 40.85728849 40.85728849 0 0 0 28.97015071 12.41577865h606.99255288a39.70462592 39.70462592 0 0 0 28.97014989-12.41577865 40.85809681 40.85809681 0 0 0 12.41577946-28.97015071V332.661512L622.36173459 98.14070655z" fill="#356FFE" p-id="6250"></path><path d="M856.88173172 332.66070368H663.74766394a42.43108545 42.43108545 0 0 1-41.38592935-41.38592935V98.14070655z" fill="#AEC5FE" p-id="6251"></path><path d="M624.92653026 367.31091116a25.01908736 25.01908736 0 0 1 0 50.03494147 75.0564546 75.0564546 0 0 0-75.05645379 75.0564546v180.13872416a125.09462933 125.09462933 0 1 1-79.91040983-116.68811302 25.01827905 25.01827905 0 1 1-18.06431179 46.66182727 75.0564546 75.0564546 0 1 0 47.81125657 74.43000711l0.12528949-4.40372136V487.40123788a22.77923608 22.77923608 0 0 1 0.250579-3.22761753A125.09462933 125.09462933 0 0 1 624.92653026 367.31091116z m75.0564546 195.14678132a25.01908736 25.01908736 0 1 1 0 50.03494228H599.90825121a25.01908736 25.01908736 0 0 1 0-50.03494228h100.07554196z" fill="#FFFFFF" p-id="6252"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1625028321516" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10195" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#989FA5" p-id="10196"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="10197"></path><path d="M486.4 780.8h-170.666667c-4.266667 0-8.533333-4.266667-8.533333-8.533333s4.266667-8.533333 8.533333-8.533334h170.666667c4.266667 0 8.533333 4.266667 8.533333 8.533334s-4.266667 8.533333-8.533333 8.533333zM571.733333 695.466667h-256c-4.266667 0-8.533333-4.266667-8.533333-8.533334s4.266667-8.533333 8.533333-8.533333h256c4.266667 0 8.533333 4.266667 8.533334 8.533333s-4.266667 8.533333-8.533334 8.533334zM571.733333 610.133333h-256c-4.266667 0-8.533333-4.266667-8.533333-8.533333s4.266667-8.533333 8.533333-8.533333h256c4.266667 0 8.533333 4.266667 8.533334 8.533333s-4.266667 8.533333-8.533334 8.533333zM571.733333 524.8h-256c-4.266667 0-8.533333-4.266667-8.533333-8.533333s4.266667-8.533333 8.533333-8.533334h256c4.266667 0 8.533333 4.266667 8.533334 8.533334s-4.266667 8.533333-8.533334 8.533333z" fill="#FFFFFF" p-id="10198"></path></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1639131674043" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11971" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#EA4845" p-id="11972"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="11973"></path><path d="M554.666667 657.066667c-21.333333 0-42.666667 4.266667-68.266667 8.533333-12.8-8.533333-21.333333-21.333333-34.133333-29.866667l-17.066667-17.066666c12.8-42.666667 12.8-72.533333 12.8-85.333334 0-4.266667 0-8.533333-4.266667-12.8-4.266667-12.8-17.066667-21.333333-29.866666-21.333333-12.8 0-21.333333 4.266667-29.866667 17.066667 0-4.266667-4.266667 4.266667-4.266667 8.533333 0 25.6 12.8 59.733333 34.133334 89.6l-12.8 38.4c-4.266667 12.8-12.8 25.6-17.066667 38.4-21.333333 8.533333-42.666667 17.066667-64 29.866667-4.266667 0-4.266667 4.266667-8.533333 4.266666-4.266667 4.266667-8.533333 12.8-8.533334 21.333334 0 17.066667 12.8 29.866667 29.866667 29.866666 8.533333 0 12.8-4.266667 21.333333-8.533333l4.266667-4.266667c17.066667-17.066667 29.866667-38.4 38.4-59.733333 12.8-4.266667 21.333333-8.533333 34.133333-12.8 17.066667-4.266667 34.133333-8.533333 46.933334-12.8 25.6 17.066667 51.2 29.866667 68.266666 29.866667 17.066667 0 29.866667-12.8 29.866667-29.866667 4.266667-8.533333-4.266667-21.333333-21.333333-21.333333z m-38.4 21.333333c12.8 0 25.6-4.266667 38.4-4.266667 4.266667 0 8.533333 4.266667 8.533333 8.533334s-4.266667 8.533333-8.533333 8.533333c-12.8 0-25.6-4.266667-38.4-12.8z m-110.933334-157.866667c4.266667-8.533333 17.066667-8.533333 21.333334 0v4.266667c0 17.066667 0 38.4-8.533334 64-12.8-21.333333-21.333333-46.933333-21.333333-64 4.266667 0 4.266667-4.266667 8.533333-4.266667zM341.333333 759.466667c-4.266667 4.266667-12.8 0-12.8-8.533334 0-4.266667 0-4.266667 4.266667-8.533333l4.266667-4.266667c8.533333-4.266667 21.333333-12.8 34.133333-17.066666-12.8 12.8-21.333333 25.6-29.866667 38.4z m85.333334-81.066667c-4.266667 0-12.8 4.266667-17.066667 4.266667 4.266667-8.533333 8.533333-12.8 8.533333-21.333334 4.266667-8.533333 4.266667-17.066667 8.533334-25.6l8.533333 8.533334 21.333333 21.333333c-4.266667 4.266667-17.066667 8.533333-29.866666 12.8z" fill="#FFFFFF" p-id="11974"></path></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1639131622718" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11457" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#53CBAE" p-id="11458"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="11459"></path><path d="M550.4 503.466667h-213.333333c-17.066667 0-34.133333 12.8-34.133334 34.133333v213.333333c0 17.066667 12.8 34.133333 34.133334 34.133334h213.333333c17.066667 0 34.133333-12.8 34.133333-34.133334v-213.333333c-4.266667-17.066667-17.066667-34.133333-34.133333-34.133333z m-68.266667 68.266666c17.066667 0 29.866667 12.8 29.866667 29.866667s-12.8 29.866667-29.866667 29.866667-29.866667-12.8-29.866666-29.866667 12.8-29.866667 29.866666-29.866667z m76.8 179.2c0 4.266667-4.266667 8.533333-8.533333 8.533334h-213.333333c-4.266667 0-8.533333-4.266667-8.533334-8.533334V725.333333L384 665.6c12.8-12.8 29.866667-12.8 38.4 0l59.733333 59.733333 21.333334-21.333333c12.8-12.8 29.866667-12.8 38.4 0l21.333333 21.333333v25.6z" fill="#FFFFFF" p-id="11460"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -1 +0,0 @@
<svg t="1626148939398" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10646"><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#FF8F6B" p-id="10647"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="10648"></path><path d="M520.533333 563.2c-4.266667-8.533333-8.533333-17.066667-17.066666-21.333333l-25.6-12.8c-8.533333 0-17.066667-4.266667-29.866667-4.266667h-85.333333v234.666667h34.133333v-93.866667h51.2c29.866667 0 51.2-8.533333 64-21.333333 12.8-12.8 17.066667-29.866667 17.066667-51.2-4.266667-8.533333-4.266667-21.333333-8.533334-29.866667z m-29.866666 34.133333c0 12.8-4.266667 21.333333-8.533334 29.866667-8.533333 8.533333-17.066667 8.533333-34.133333 8.533333H396.8v-76.8H473.6c8.533333 0 12.8 4.266667 17.066667 12.8v25.6z" fill="#FFFFFF" p-id="10649"></path></svg>

Before

Width:  |  Height:  |  Size: 1.1 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1625028309807" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="9907" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><style type="text/css"></style></defs><path d="M256 85.333333c-46.933333 0-85.333333 38.4-85.333333 85.333334v682.666666c0 46.933333 38.4 85.333333 85.333333 85.333334h512c46.933333 0 85.333333-38.4 85.333333-85.333334V337.066667L601.6 85.333333H256z" fill="#009F4E" p-id="9908"></path><path d="M686.933333 337.066667H853.333333L601.6 85.333333v166.4c0 46.933333 38.4 85.333333 85.333333 85.333334z" fill="#FFFFFF" opacity=".4" p-id="9909"></path><path d="M550.4 503.466667h-213.333333c-17.066667 0-34.133333 12.8-34.133334 34.133333v213.333333c0 17.066667 12.8 34.133333 34.133334 34.133334h213.333333c17.066667 0 34.133333-12.8 34.133333-34.133334v-213.333333c-4.266667-21.333333-17.066667-34.133333-34.133333-34.133333z m-140.8 170.666666v-64h64v64H409.6z m64 21.333334v64H409.6v-64h64z m-149.333333-85.333334h64v64H324.266667v-64z m170.666666 0h64v64h-64v-64z m-157.866666-85.333333h213.333333c4.266667 0 8.533333 4.266667 8.533333 8.533333v51.2H324.266667v-51.2c0-4.266667 8.533333-8.533333 12.8-8.533333z m-12.8 226.133333v-51.2h64v64H337.066667c-4.266667-4.266667-12.8-8.533333-12.8-12.8z m226.133333 8.533334h-51.2v-64h64v51.2c-4.266667 8.533333-8.533333 12.8-12.8 12.8z" fill="#FFFFFF" p-id="9910"></path></svg>

Before

Width:  |  Height:  |  Size: 1.5 KiB

Some files were not shown because too many files have changed in this diff Show More