Compare commits
128 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f09b864e30 | ||
|
|
7ce15d5a71 | ||
|
|
cc767b164e | ||
|
|
230ff75c0b | ||
|
|
da39739fb5 | ||
|
|
c33be22057 | ||
|
|
902f35d21b | ||
|
|
d8426780d2 | ||
|
|
a1aaf90d2e | ||
|
|
53ed4d4072 | ||
|
|
da75554447 | ||
|
|
04998d6a60 | ||
|
|
3d88a28465 | ||
|
|
2dd8f75d52 | ||
|
|
7a4bdd0ada | ||
|
|
0ed0b5ee43 | ||
|
|
2475ee90ee | ||
|
|
511c19d5aa | ||
|
|
c4fed86f1e | ||
|
|
18904ebbaa | ||
|
|
da3672e6be | ||
|
|
52e9836bbf | ||
|
|
3201d90a53 | ||
|
|
cd9c1d9660 | ||
|
|
0f54a1f638 | ||
|
|
713316f87c | ||
|
|
88d38ba8d1 | ||
|
|
164f3275f4 | ||
|
|
a44d6b8b79 | ||
|
|
942cf57c36 | ||
|
|
18bc75242b | ||
|
|
3b38c8b408 | ||
|
|
22e718423e | ||
|
|
0dc0e7226e | ||
|
|
8069784198 | ||
|
|
a9e71567fe | ||
|
|
0fae151731 | ||
|
|
3bb0b55955 | ||
|
|
071ca80bae | ||
|
|
1abd78305f | ||
|
|
e1ef9a94af | ||
|
|
9f62023175 | ||
|
|
c9a6d2f5a8 | ||
|
|
07fca8b895 | ||
|
|
1a65c4a579 | ||
|
|
7a28a8950c | ||
|
|
89e8b0d8b9 | ||
|
|
74803df5bd | ||
|
|
2a8e030fb4 | ||
|
|
c6ebe994cc | ||
|
|
be3677cfa8 | ||
|
|
0c2e56271b | ||
|
|
b019d40009 | ||
|
|
361484be95 | ||
|
|
f0ce6cc28f | ||
|
|
ede298a142 | ||
|
|
aca1a4d34c | ||
|
|
e63c5c074c | ||
|
|
0d0b5dd552 | ||
|
|
08704e7f60 | ||
|
|
d48ed18102 | ||
|
|
3602acd187 | ||
|
|
ad477eb608 | ||
|
|
0a393845e9 | ||
|
|
59b98209ac | ||
|
|
ac26713f86 | ||
|
|
9250ef6f65 | ||
|
|
cabbeb07d0 | ||
|
|
43171645c0 | ||
|
|
79c1484288 | ||
|
|
e730875db3 | ||
|
|
18e9fb99b5 | ||
|
|
fd82b9b555 | ||
|
|
5c3bf0067e | ||
|
|
ac6b90c986 | ||
|
|
7dcd8b29fc | ||
|
|
d951da2c02 | ||
|
|
605aee35c4 | ||
|
|
dc1f1985e8 | ||
|
|
cebcc26baf | ||
|
|
75a12fc6f5 | ||
|
|
a3e0d89eb0 | ||
|
|
9594cc674f | ||
|
|
87cdee4fe8 | ||
|
|
1df55b78c2 | ||
|
|
f7820a23be | ||
|
|
f80b9cdca5 | ||
|
|
f2180b22c7 | ||
|
|
a745088213 | ||
|
|
14be7bd2b1 | ||
|
|
d453ea66da | ||
|
|
e7ae86e261 | ||
|
|
b7417f41c5 | ||
|
|
9e7aa381ed | ||
|
|
b02453e9f4 | ||
|
|
6b7f8fd31c | ||
|
|
4652242d6b | ||
|
|
a47ca2f357 | ||
|
|
e5a1e58159 | ||
|
|
01a1e34e99 | ||
|
|
e711220a66 | ||
|
|
1d20f529a0 | ||
|
|
79a94d25bd | ||
|
|
92793b8ff8 | ||
|
|
982024f359 | ||
|
|
e851bd4d61 | ||
|
|
e4b9383e96 | ||
|
|
95ac9aac14 | ||
|
|
b895eec69c | ||
|
|
1fe4e80f82 | ||
|
|
eb1f5f2632 | ||
|
|
114b792300 | ||
|
|
56a352a9d2 | ||
|
|
4c4d60dd83 | ||
|
|
134ab0fe98 | ||
|
|
bbd394272f | ||
|
|
8a2571f514 | ||
|
|
bf15be8144 | ||
|
|
bf6f8de7fa | ||
|
|
2e75e6ffb6 | ||
|
|
b987be54bf | ||
|
|
533e8a3742 | ||
|
|
9d007e64f6 | ||
|
|
8ec1578f50 | ||
|
|
4e8cc36d3a | ||
|
|
5a64cb2323 | ||
|
|
b2aba82a1b | ||
|
|
9d9500ba1b |
40
README.md
@@ -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
|
||||
|
||||
41
README_CN.md
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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:00,false表示未完成)
|
||||
*
|
||||
* @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) ,
|
||||
|
||||
466
app/Http/Controllers/Api/ReportController.php
Executable 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> ') : '';
|
||||
$completeContent .= '<li>' . $pre . $task->name . '</li>';
|
||||
}
|
||||
} else {
|
||||
$completeContent = '<li> </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> ' : '';
|
||||
$unfinishedContent .= '<li>' . $pre . $task->name . '</li>';
|
||||
}
|
||||
} else {
|
||||
$unfinishedContent = '<li> </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);
|
||||
}
|
||||
}
|
||||
@@ -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/',
|
||||
];
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 => '没有访问权限',
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
51
app/Models/ProjectFlow.php
Normal 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();
|
||||
});
|
||||
}
|
||||
}
|
||||
90
app/Models/ProjectFlowItem.php
Normal 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();
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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
@@ -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 );
|
||||
}
|
||||
}
|
||||
39
app/Models/ReportReceive.php
Normal 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",
|
||||
];
|
||||
}
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
@@ -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
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
32
database/migrations/2022_01_04_111739_add_report_sign.php
Normal 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");
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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');
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
388
database/seeders/ProjectFlowItemsTableSeeder.php
Normal 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',
|
||||
),
|
||||
));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
76
database/seeders/ProjectFlowsTableSeeder.php
Normal 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',
|
||||
),
|
||||
));
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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'),
|
||||
),
|
||||
|
||||
@@ -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' => 'Retinize:iOS切图神器',
|
||||
'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' => 'iConify:Mac平台的苹果应用图标自动化生成工具',
|
||||
'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' => 'LogoDesignLove:Logo设计技巧分享网',
|
||||
'color' => '',
|
||||
'desc' => 'LogoDesignLove:Logo设计技巧分享网',
|
||||
@@ -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' => 'LogoDesignLove:Logo设计技巧分享网',
|
||||
'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 Palette:Material 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' => '',
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
@@ -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,
|
||||
|
||||
@@ -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
@@ -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({
|
||||
|
||||
@@ -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
@@ -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)
|
||||
},
|
||||
}
|
||||
11
package.json
@@ -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
2
public/css/iview.css
vendored
@@ -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 |
|
Before Width: | Height: | Size: 4.9 KiB |
@@ -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 |
63
public/images/file/dark/archive.svg
Normal 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 |
109
public/images/file/dark/cad.svg
Normal 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 |
64
public/images/file/dark/code.svg
Normal 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 |
84
public/images/file/dark/document.svg
Normal 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 |
60
public/images/file/dark/excel.svg
Normal 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 |
94
public/images/file/dark/flow.svg
Normal 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 |
25
public/images/file/dark/folder.svg
Normal 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 |
58
public/images/file/dark/media.svg
Normal 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 |
106
public/images/file/dark/mind.svg
Normal 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 |
61
public/images/file/dark/ofd.svg
Normal 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 |
72
public/images/file/dark/other.svg
Normal 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 |
93
public/images/file/dark/pdf.svg
Normal 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 |
57
public/images/file/dark/picture.svg
Normal 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 |
62
public/images/file/dark/ppt.svg
Normal 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 |
90
public/images/file/dark/sheet.svg
Normal 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 |
71
public/images/file/dark/tif.svg
Normal 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 |
81
public/images/file/dark/txt.svg
Normal 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 |
48
public/images/file/dark/updir.svg
Normal 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 |
74
public/images/file/dark/upload.svg
Normal 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 |
54
public/images/file/dark/word.svg
Normal 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 |
70
public/images/file/dark/wps.svg
Normal 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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
69
public/images/file/light/archive.svg
Normal 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 |
100
public/images/file/light/cad.svg
Normal 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 |
76
public/images/file/light/code.svg
Normal 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 |
90
public/images/file/light/document.svg
Normal 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 |
67
public/images/file/light/excel.svg
Normal 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 |
106
public/images/file/light/flow.svg
Normal 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 |
27
public/images/file/light/folder.svg
Normal 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 |
64
public/images/file/light/media.svg
Normal 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 |
106
public/images/file/light/mind.svg
Normal 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 |
67
public/images/file/light/ofd.svg
Normal 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 |
72
public/images/file/light/other.svg
Normal 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 |
105
public/images/file/light/pdf.svg
Normal 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 |
69
public/images/file/light/picture.svg
Normal 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 |
62
public/images/file/light/ppt.svg
Normal 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 |
90
public/images/file/light/sheet.svg
Normal 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 |
77
public/images/file/light/tif.svg
Normal 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 |
105
public/images/file/light/txt.svg
Normal 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 |
50
public/images/file/light/updir.svg
Normal 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 |
80
public/images/file/light/upload.svg
Normal 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 |
61
public/images/file/light/word.svg
Normal 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 |
76
public/images/file/light/wps.svg
Normal 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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |
@@ -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 |