no message

This commit is contained in:
kuaifan 2021-06-30 15:07:05 +08:00
parent 3ecb3b3992
commit 7fea622174
11 changed files with 503 additions and 101 deletions

View File

@ -26,16 +26,25 @@ class FileController extends AbstractController
//
$pid = intval(Request::input('pid'));
//
$list = File::whereUserid($user->userid)->wherePid($pid)->orderBy('name')->take(500)->get();
$list = File::whereUserid($user->userid)->wherePid($pid)->take(500)->get();
$array = $list->toArray();
//
return Base::retSuccess('success', $list);
while ($pid > 0) {
$file = File::whereUserid($user->userid)->whereId($pid)->first();
if ($file) {
$array[] = $file->toArray();
$pid = $file->pid;
}
}
return Base::retSuccess('success', $array);
}
/**
* 添加项目
* 添加、修改文件()
*
* @apiParam {String} name 项目名称
* @apiParam {String} type 文件类型
* @apiParam {Number} [id] 文件ID赋值修改文件名称
* @apiParam {Number} [pid] 父级ID
*/
public function add()
@ -44,6 +53,7 @@ class FileController extends AbstractController
// 文件名称
$name = trim(Request::input('name'));
$type = trim(Request::input('type'));
$id = intval(Request::input('id'));
$pid = intval(Request::input('pid'));
if (mb_strlen($name) < 2) {
return Base::retError('文件名称不可以少于2个字');
@ -51,34 +61,137 @@ class FileController extends AbstractController
return Base::retError('文件名称最多只能设置32个字');
}
//
if (!in_array($type, [
'folder',
'document',
'mind',
'sheet',
'flow',
])) {
return Base::retError('类型错误');
if ($id > 0) {
// 修改
$file = File::whereUserid($user->userid)->whereId($id)->first();
if (empty($file)) {
return Base::retError('文件不存在或已被删除');
}
$file->name = $name;
$file->save();
return Base::retSuccess('修改成功', $file);
} else {
// 添加
if (!in_array($type, [
'folder',
'document',
'mind',
'sheet',
'flow',
])) {
return Base::retError('类型错误');
}
//
if ($pid > 0) {
if (!File::whereUserid($user->userid)->whereId($pid)->exists()) {
return Base::retError('参数错误');
}
}
if (File::whereUserid($user->userid)->wherePid($pid)->count() >= 300) {
return Base::retError('每个文件夹里最多只能创建300个文件或文件夹');
}
// 开始创建
$file = File::createInstance([
'pid' => $pid,
'name' => $name,
'type' => $type,
'userid' => $user->userid,
]);
$file->save();
//
$data = File::find($file->id);
return Base::retSuccess('添加成功', $data);
}
}
/**
* 复制文件()
*
* @apiParam {Number} id 文件ID
*/
public function copy()
{
$user = User::auth();
//
$id = intval(Request::input('id'));
//
$row = File::whereUserid($user->userid)->whereId($id)->first();
if (empty($row)) {
return Base::retError('文件不存在或已被删除');
}
if ($row->type == 'folder') {
return Base::retError('不支持复制文件夹');
}
$num = File::whereCid($row->id)->count() + 1;
$name = $row->name . " ({$num})";
// 开始复制
$file = File::createInstance([
'cid' => $row->id,
'pid' => $row->pid,
'name' => $name,
'type' => $row->type,
'userid' => $user->userid,
]);
$file->save();
//
$data = File::find($file->id);
return Base::retSuccess('复制成功', $data);
}
/**
* 移动文件()
*
* @apiParam {Number} id 文件ID
* @apiParam {Number} pid 移动到的文件夹ID
*/
public function move()
{
$user = User::auth();
//
$id = intval(Request::input('id'));
$pid = intval(Request::input('pid'));
//
$file = File::whereUserid($user->userid)->whereId($id)->first();
if (empty($file)) {
return Base::retError('文件不存在或已被删除');
}
//
if ($pid > 0) {
if (!File::whereUserid($user->userid)->whereId($pid)->exists()) {
return Base::retError('参数错误');
}
$arr = [];
$tid = $pid;
while ($tid > 0) {
$arr[] = $tid;
$tid = intval(File::whereId($tid)->value('pid'));
}
if (in_array($id, $arr)) {
return Base::retError('位置错误');
}
}
if (File::whereUserid($user->userid)->wherePid($pid)->count() >= 300) {
return Base::retError('每个文件夹里最多只能创建300个文件或文件夹');
}
// 开始创建
$file = File::createInstance([
'pid' => $pid,
'name' => $name,
'type' => $type,
'userid' => $user->userid,
]);
$file->save();
//
$data = File::find($file->id);
return Base::retSuccess('添加成功', $data);
$file->pid = $pid;
$file->save();
return Base::retSuccess('操作成功', $file);
}
/**
* 删除文件()
*
* @apiParam {Number} id 文件ID
*/
public function remove()
{
$user = User::auth();
//
$id = intval(Request::input('id'));
//
$file = File::whereUserid($user->userid)->whereId($id)->first();
if (empty($file)) {
return Base::retError('文件不存在或已被删除');
}
$file->deleteFile();
return Base::retSuccess('删除成功', $file);
}
}

View File

@ -2,30 +2,57 @@
namespace App\Models;
use Illuminate\Database\Eloquent\SoftDeletes;
/**
* Class File
*
* @package App\Models
* @property int $id
* @property int|null $pid 上级ID
* @property int|null $cid 复制ID
* @property string|null $name 名称
* @property string|null $type 类型
* @property int|null $userid 拥有者ID
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property \Illuminate\Support\Carbon|null $deleted_at
* @method static \Illuminate\Database\Eloquent\Builder|File newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|File newQuery()
* @method static \Illuminate\Database\Query\Builder|File onlyTrashed()
* @method static \Illuminate\Database\Eloquent\Builder|File query()
* @method static \Illuminate\Database\Eloquent\Builder|File whereCid($value)
* @method static \Illuminate\Database\Eloquent\Builder|File whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|File whereDeletedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|File whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|File whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|File wherePid($value)
* @method static \Illuminate\Database\Eloquent\Builder|File whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|File whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|File whereUserid($value)
* @method static \Illuminate\Database\Query\Builder|File withTrashed()
* @method static \Illuminate\Database\Query\Builder|File withoutTrashed()
* @mixin \Eloquent
*/
class File extends AbstractModel
{
use SoftDeletes;
/**
* 遍历删除文件()
* @return bool
*/
public function deleteFile()
{
AbstractModel::transaction(function () {
$this->delete();
$list = self::wherePid($this->id)->get();
if ($list->isNotEmpty()) {
foreach ($list as $item) {
$item->deleteFile();
}
}
});
return true;
}
}

View File

@ -0,0 +1,31 @@
<?php
namespace App\Models;
/**
* Class FileContent
*
* @package App\Models
* @property int $id
* @property int|null $fid 文件ID
* @property string|null $content 内容
* @property string|null $text 内容(主要用于文档类型搜索)
* @property int|null $userid 会员ID
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|FileContent newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|FileContent newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|FileContent query()
* @method static \Illuminate\Database\Eloquent\Builder|FileContent whereContent($value)
* @method static \Illuminate\Database\Eloquent\Builder|FileContent whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|FileContent whereFid($value)
* @method static \Illuminate\Database\Eloquent\Builder|FileContent whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|FileContent whereText($value)
* @method static \Illuminate\Database\Eloquent\Builder|FileContent whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|FileContent whereUserid($value)
* @mixin \Eloquent
*/
class FileContent extends AbstractModel
{
}

View File

@ -3,9 +3,11 @@
<PageTitle :title="$L('文件')"/>
<div class="file-wrapper">
<div class="file-head">
<h1 @click="pid=0">{{$L('文件')}}</h1>
<div class="file-search">
<i class="iconfont">&#xe6f8;</i>
<div class="file-nav">
<h1>{{$L('文件')}}</h1>
</div>
<div :class="['file-search', searchKey ? 'has-value' : '']">
<Input v-model="searchKey" suffix="ios-search" :placeholder="$L('搜索名称')"/>
</div>
<div class="file-add">
<EDropdown
@ -15,19 +17,47 @@
<i class="iconfont">&#xe6f2;</i>
<EDropdownMenu slot="dropdown" class="page-file-dropdown-menu">
<EDropdownItem v-for="(type, key) in types" :key="key" :command="type.value">
<div :class="['file-item ' + type.value]">新建{{$L(type.name)}}</div>
<div :class="['file-item ' + type.value]">{{$L('新建' + type.name)}}</div>
</EDropdownItem>
</EDropdownMenu>
</EDropdown>
</div>
</div>
<div v-if="files.length == 0" class="file-no">
<div class="file-navigator">
<ul>
<li @click="[pid=0,searchKey='']">{{$L('全部文件')}}</li>
<li v-if="searchKey">{{$L('搜索')}} "{{searchKey}}"</li>
<li v-else v-for="item in navigator" @click="pid=item.id">{{item.name}}</li>
</ul>
<Button v-if="shearFile && shearFile.pid != pid" size="small" type="primary" @click="shearTo">
<div class="file-shear">
<span>{{$L('粘贴')}}</span>
"<em>{{shearFile.name}}</em>"
</div>
</Button>
</div>
<div v-if="fileList.length == 0 && loadIng == 0" class="file-no">
<i class="iconfont">&#xe60b;</i>
<p>{{$L('没有任何文件')}}</p>
</div>
<div v-else class="file-list">
<ul class="clearfix">
<li v-for="item in folderList" :class="item.type" @click="openFile(item)">
<li v-for="item in fileList" :class="[item.type, item.id && shearId == item.id ? 'shear' : '']" @click="openFile(item)">
<EDropdown
trigger="click"
size="small"
placement="bottom"
class="file-menu"
@command="dropFile(item, $event)">
<Icon @click.stop="" type="ios-more" />
<EDropdownMenu slot="dropdown">
<EDropdownItem command="open">{{$L('打开')}}</EDropdownItem>
<EDropdownItem divided command="rename">{{$L('重命名')}}</EDropdownItem>
<EDropdownItem :disabled="item.type=='folder'" command="copy">{{$L('复制')}}</EDropdownItem>
<EDropdownItem command="shear">{{$L('剪切')}}</EDropdownItem>
<EDropdownItem divided command="delete" style="color:red">{{$L('删除')}}</EDropdownItem>
</EDropdownMenu>
</EDropdown>
<div class="file-icon"></div>
<div v-if="item._edit" class="file-input">
<Input
@ -39,20 +69,7 @@
@on-enter="onEnter(item)"/>
<div v-if="item._load" class="file-load"><Loading/></div>
</div>
<div v-else class="file-name">{{item.name}}</div>
</li>
<li v-for="item in fileList" :class="item.type" @click="openFile(item)">
<div class="file-icon"></div>
<div v-if="item._edit" class="file-input">
<Input
:ref="'input_' + item.id"
v-model="item.newname"
size="small"
@on-blur="onBlur(item)"
@on-enter="onEnter(item)"/>
<div v-if="item._load" class="file-load"><Loading/></div>
</div>
<div v-else class="file-name">{{item.name}}</div>
<div v-else class="file-name" :title="item.name">{{item.name}}</div>
</li>
</ul>
</div>
@ -68,7 +85,10 @@ export default {
data() {
return {
loadIng: 0,
searchKey: '',
pid: 0,
shearId: 0,
types: [
{value: 'folder', name: "目录"},
@ -77,6 +97,7 @@ export default {
{value: 'sheet', name: "表格"},
{value: 'flow', name: "流程图"},
],
files: [],
}
},
@ -92,12 +113,40 @@ export default {
computed: {
...mapState(['userInfo']),
folderList() {
return sortBy(this.files.filter(({type, pid}) => pid == this.pid && type == 'folder'), 'name')
shearFile() {
const {files, shearId} = this;
if (shearId > 0) {
let file = files.find(({id}) => id == shearId);
if (file) {
return file;
}
}
return null;
},
fileList() {
return sortBy(this.files.filter(({type, pid}) => pid == this.pid && type != 'folder'), 'name')
const {files, searchKey, pid} = this;
return sortBy(files.filter((file) => {
if (searchKey) {
return file.name.indexOf(searchKey) !== -1;
}
return file.pid == pid;
}), (file) => {
return (file.type == 'folder' ? 'a' : 'b') + file.name;
})
},
navigator() {
let {pid, files} = this;
let array = [];
while (pid > 0) {
let file = files.find(({id}) => id == pid);
if (file) {
array.unshift(file);
pid = file.pid;
}
}
return array;
}
},
@ -160,44 +209,144 @@ export default {
},
openFile(item) {
if (item._edit || item._load) {
return;
}
if (item.type == 'folder') {
this.searchKey = '';
this.pid = item.id;
}
},
onBlur(item) {
if (!item.newname) {
this.files = this.files.filter(({id}) => id != item.id);
dropFile(item, command) {
switch (command) {
case 'open':
this.openFile(item);
break;
case 'rename':
this.$set(item, 'newname', item.name);
this.$set(item, '_edit', true);
this.$nextTick(() => {
this.$refs['input_' + item.id][0].focus({
cursor: 'all'
})
})
break;
case 'copy':
this.$store.dispatch("call", {
url: 'file/copy',
data: {
id: item.id,
},
}).then(({data, msg}) => {
$A.messageSuccess(msg);
this.saveFile(data);
}).catch(({msg}) => {
$A.modalError(msg);
});
break;
case 'shear':
this.shearId = item.id;
break;
case 'delete':
let typeName = item.type == 'folder' ? '文件夹' : '文件';
$A.modalConfirm({
title: '删除' + typeName,
content: '你确定要删除' + typeName +'【' + item.name + '】吗?',
loading: true,
onOk: () => {
this.$store.dispatch("call", {
url: 'file/remove',
data: {
id: item.id,
},
}).then(({msg}) => {
$A.messageSuccess(msg);
this.$Modal.remove();
this.removeFile(item.id);
}).catch(({msg}) => {
$A.modalError(msg);
this.$Modal.remove();
});
}
});
break;
}
},
onEnter(item) {
if (!item.newname) {
this.files = this.files.filter(({id}) => id != item.id);
} else {
if (item._load) {
return;
}
this.$set(item, '_load', true);
this.$store.dispatch("call", {
url: 'file/add',
data: {
pid: item.pid,
name: item.newname,
type: item.type,
},
}).then(({data, msg}) => {
$A.messageSuccess(msg)
this.$set(item, '_load', false);
this.$set(item, '_edit', false);
this.files = this.files.filter(({id}) => id != item.id);
this.saveFile(data);
}).catch(({msg}) => {
$A.modalError(msg)
this.$set(item, '_edit', false);
this.files = this.files.filter(({id}) => id != item.id);
})
shearTo() {
if (!this.shearFile) {
return;
}
this.$store.dispatch("call", {
url: 'file/move',
data: {
id: this.shearFile.id,
pid: this.pid,
},
}).then(({data, msg}) => {
$A.messageSuccess(msg);
this.shearId = 0;
this.saveFile(data);
}).catch(({msg}) => {
$A.modalError(msg);
});
},
removeFile(id) {
this.files = this.files.filter((file) => file.id != id);
this.files.forEach((file) => {
if (file.pid == id) {
this.removeFile(file.id);
}
});
},
onBlur(item) {
this.onEnter(item);
},
onEnter(item) {
let isCreate = !/^\d+$/.test(item.id);
if (!item.newname) {
if (isCreate) {
this.files = this.files.filter(({id}) => id != item.id);
} else {
this.$set(item, '_edit', false);
}
return;
}
if (item._load) {
return;
}
this.$set(item, '_load', true);
this.$store.dispatch("call", {
url: 'file/add',
data: {
id: isCreate ? 0 : item.id,
pid: item.pid,
name: item.newname,
type: item.type,
},
}).then(({data, msg}) => {
$A.messageSuccess(msg)
this.$set(item, '_load', false);
this.$set(item, '_edit', false);
this.saveFile(data);
if (isCreate) {
this.files = this.files.filter(({id}) => id != item.id);
}
}).catch(({msg}) => {
$A.modalError(msg)
this.$set(item, '_load', false);
if (isCreate) {
this.files = this.files.filter(({id}) => id != item.id);
}
})
}
}
}

View File

@ -1,8 +1,8 @@
@font-face {
font-family: 'iconfont'; /* Project id 2583385 */
src: url('//at.alicdn.com/t/font_2583385_9cbmdxw5tl.woff2?t=1624963755686') format('woff2'),
url('//at.alicdn.com/t/font_2583385_9cbmdxw5tl.woff?t=1624963755686') format('woff'),
url('//at.alicdn.com/t/font_2583385_9cbmdxw5tl.ttf?t=1624963755686') format('truetype');
src: url('//at.alicdn.com/t/font_2583385_0n9xtibhf9vq.woff2?t=1625032849662') format('woff2'),
url('//at.alicdn.com/t/font_2583385_0n9xtibhf9vq.woff?t=1625032849662') format('woff'),
url('//at.alicdn.com/t/font_2583385_0n9xtibhf9vq.ttf?t=1625032849662') format('truetype');
}
.iconfont {

View File

@ -13,23 +13,29 @@
padding-bottom: 16px;
margin: 32px 32px 16px;
border-bottom: 1px solid #F4F4F5;
> h1 {
.file-nav {
flex: 1;
color: #333333;
font-size: 28px;
font-weight: 600;
display: flex;
align-items: center;
> h1 {
color: #333333;
font-size: 28px;
font-weight: 600;
}
}
.file-search {
flex-shrink: 0;
margin-left: 24px;
margin-left: 22px;
cursor: pointer;
.iconfont {
font-size: 18px;
width: 140px;
transition: width 0.3s;
&.has-value {
width: 180px;
}
}
.file-add {
flex-shrink: 0;
margin-left: 24px;
margin-left: 22px;
cursor: pointer;
.iconfont {
font-size: 18px;
@ -54,6 +60,59 @@
line-height: 1;
}
}
.file-navigator {
display: flex;
align-items: center;
height: 24px;
line-height: 24px;
margin: 0 32px 0;
> ul {
display: flex;
align-items: center;
> li {
display: flex;
list-style: none;
align-items: center;
padding-left: 8px;
font-size: 14px;
color: #09aaff;
cursor: pointer;
&:last-child {
color: #515a6e;
cursor: default;
}
&+li:before {
content: "\203a";
margin-top: -2px;
padding-right: 8px;
color: #515a6e;
line-height: 1;
font-size: 16px;
font-weight: 500;
font-family: system-ui, sans-serif;
}
}
}
.ivu-btn {
font-size: 12px;
margin-left: 12px;
}
.file-shear {
display: flex;
align-items: center;
> span {
padding-right: 3px;
}
> em {
display: inline-block;
max-width: 120px;
font-style: normal;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
}
}
.file-list {
flex: 1;
padding: 0 20px 20px;
@ -98,7 +157,7 @@
width: 100%;
height: 20px;
line-height: 20px;
color: #666;
color: #515a6e;
font-size: 12px;
text-align: center;
margin-top: 5px;
@ -108,13 +167,33 @@
white-space: nowrap;
text-overflow: ellipsis;
}
.file-menu {
opacity: 0;
position: absolute;
top: 0;
right: 0;
transition: opacity 0.2s;
display: flex;
.ivu-icon {
font-size: 16px;
color: #aaaaaa;
transition: color 0.2s;
padding: 2px 5px;
&:hover {
color: #515a6e;
}
}
}
.file-icon {
display: inline-block;
width: 38px;
height: 38px;
background: no-repeat center center;
width: 46px;
height: 46px;
background-repeat: no-repeat;
background-size: contain;
margin-top: 14px;
margin-top: 12px;
}
&.shear {
opacity: 0.38;
}
&.folder .file-icon {
background-image: url("../images/file/folder.svg");
@ -133,6 +212,9 @@
}
&:hover {
background-color: #f4f5f7;
.file-menu {
opacity: 1;
}
}
}
}
@ -147,11 +229,11 @@
position: relative;
&:before {
content: "";
width: 14px;
height: 14px;
background: no-repeat center center;
width: 18px;
height: 18px;
background-repeat: no-repeat;
background-size: contain;
margin-right: 6px;
margin-right: 8px;
}
&.folder:before {
background-image: url("../images/file/folder.svg");

View File

@ -1 +1 @@
<?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="1624964505724" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1059" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="1024"><defs><style type="text/css"></style></defs><path d="M594.944 0l335.12448 341.31968v563.2c0 65.9968-52.50048 119.48032-117.29408 119.48032H209.54624c-64.7936 0-117.2992-53.5296-117.2992-119.48032V119.48032C92.25216 53.48352 144.75776 0 209.55136 0H594.944z" fill="#5895FF" p-id="1060"></path><path d="M930.06848 341.31968h-211.9168c-64.74752 0-123.20768-59.48928-123.20768-125.4912V0l335.12448 341.31968z" fill="#FFFFFF" fill-opacity=".4" p-id="1061"></path><path d="M427.37664 725.31968V768H259.8144v-42.68032h167.56224zM594.944 640v42.68032H259.8144V640H594.944z m0-85.31968v42.63936H259.8144v-42.63936H594.944z m0-85.36064V512H259.8144v-42.68032H594.944z" fill="#FFFFFF" p-id="1062"></path></svg>
<?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" width="1024" height="1024"><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.0 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -1 +1 @@
<?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="1624964747859" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1522" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="1024"><defs><style type="text/css"></style></defs><path d="M594.944 0l335.12448 341.31968v563.2c0 65.9968-52.50048 119.48032-117.29408 119.48032H209.54624c-64.7936 0-117.2992-53.5296-117.2992-119.48032V119.48032C92.25216 53.48352 144.75776 0 209.55136 0H594.944z" fill="#424242" p-id="1523"></path><path d="M930.06848 341.31968h-211.9168c-64.74752 0-123.20768-59.48928-123.20768-125.4912V0l335.12448 341.31968z" fill="#FFFFFF" fill-opacity=".4" p-id="1524"></path><path d="M504.45824 580.608c49.52576 0 90.3424 40.86784 90.3424 92.02176 0 50.45248-40.81664 92.06784-90.3424 92.06784a86.10816 86.10816 0 0 1-51.57376-16.384c-6.05184-4.096-7.35232-12.94336-3.34848-19.08736a13.5424 13.5424 0 0 1 18.75456-3.39456c10.70592 7.44448 23.41376 11.58656 36.16768 11.58656 34.816 0 63.58016-29.32224 63.58016-64.78848 0-35.47136-28.76416-64.7936-63.58016-64.7936-32.768 0-60.1856 25.97376-63.30368 58.6496l-0.32256 6.144c0 50.45248-40.82176 92.06784-90.34752 92.06784-49.52576 0-90.38848-41.61536-90.38848-92.06784 0-50.4576 40.86272-92.02176 90.38848-92.02176 17.408 0 34.11968 4.74624 48.87552 14.2848 6.04672 4.096 8.00256 12.288 3.99872 19.08736a13.5936 13.5936 0 0 1-18.75456 4.096 60.8768 60.8768 0 0 0-34.11968-10.24c-34.816 0-63.58016 29.32224-63.58016 64.7936 0 35.46624 28.76416 64.78848 63.58016 64.78848 34.816 0 63.58016-29.32224 63.58016-64.78848 0-50.4576 40.82176-92.02176 90.3936-92.02176z" fill="#FFFFFF" p-id="1525"></path></svg>
<?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" width="1024" height="1024"><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.7 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

View File

@ -1 +1 @@
<?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="1624964488544" class="icon" viewBox="0 0 1208 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="907" xmlns:xlink="http://www.w3.org/1999/xlink" width="1208" height="1024"><defs><style type="text/css"></style></defs><path d="M132.51584 120.4736h879.4368c33.26976 0 60.2368 26.96704 60.2368 60.23168v409.6c0 33.26976-26.96704 60.2368-60.2368 60.2368H132.51584c-33.26464 0-60.23168-26.96704-60.23168-60.2368v-409.6c0-33.26464 26.96704-60.2368 60.23168-60.2368z" fill="#F9B552" p-id="908"></path><path d="M469.8368 0c73.18528 0 132.51584 59.33056 132.51584 132.51584v84.3264h469.8368c73.18528 0 132.51584 59.33568 132.51584 132.52096v542.12096c0 73.18528-59.33056 132.51584-132.51584 132.51584H132.51584A132.51584 132.51584 0 0 1 0 891.48416V349.3632c0-4.03456 0.1792-8.06912 0.54272-12.04736A134.25664 134.25664 0 0 1 0 325.2736V132.51584C0 59.33056 59.33056 0 132.51584 0h337.32096z" fill="#FFCF5C" p-id="909"></path></svg>
<?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" width="1024" height="1024"><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: 1.0 KiB

After

Width:  |  Height:  |  Size: 1017 B

View File

@ -1 +1 @@
<?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="1624964573291" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1367" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="1024"><defs><style type="text/css"></style></defs><path d="M594.944 0l335.12448 341.31968v563.2c0 65.9968-52.50048 119.48032-117.29408 119.48032H209.54624c-64.7936 0-117.2992-53.5296-117.2992-119.48032V119.48032C92.25216 53.48352 144.75776 0 209.55136 0H594.944z" fill="#E94848" p-id="1368"></path><path d="M482.95424 375.48032a40.58624 40.58624 0 0 0-40.02816 40.77568c0 27.78624 15.17056 62.32576 31.1808 94.7712-12.56448 39.8336-26.71616 82.47296-44.82048 118.5024-37.0944 14.7968-70.1952 25.8304-90.0608 42.16832a41.70752 41.70752 0 0 0-12.3904 29.9264c0 22.34368 18.06336 40.77568 40.0384 40.77568a39.33184 39.33184 0 0 0 29.27104-12.47232c14.6176-17.82784 31.88736-50.12992 47.29344-79.6416 35.42016-14.19776 72.60672-28.672 108.44672-37.3248 26.1632 21.4528 64.0512 35.65056 95.18592 35.65056 21.96992 0 40.03328-18.38592 40.03328-40.77568a40.58624 40.58624 0 0 0-40.03328-40.72448c-24.99072 0-61.29664 9.07264-89.0368 18.61632a301.3376 301.3376 0 0 1-58.09152-76.98432c10.65984-33.3312 23.04-66.65728 23.04-92.48768a40.58624 40.58624 0 0 0-40.02816-40.77568z m0 24.43776c8.98048 0 16.01024 7.168 16.01024 16.29184 0 12.2368-6.42048 34.816-13.87008 59.01824C475.136 451.67616 466.944 429.056 466.944 416.256c0-9.1648 7.02464-16.29184 16.01024-16.29184v-0.04608z m6.8864 139.5456a323.57376 323.57376 0 0 0 41.5232 53.76c-23.74144 6.6048-46.91968 15.0784-69.82144 23.92064 11.07968-25.36448 19.9168-51.75808 28.29824-77.72672v0.04608z m157.2352 52.12672c8.98048 0 16.01024 7.12192 16.01024 16.29184 0 9.12384-7.02976 16.29184-16.01536 16.29184-18.05824 0-43.65824-8.28416-64.18432-19.87584 23.552-6.79424 49.2032-12.7488 64.18432-12.7488v0.04096zM408.15104 664.576c-11.264 20.48-22.43584 39.56224-30.2592 49.152a15.0784 15.0784 0 0 1-11.02848 4.18816 15.96416 15.96416 0 0 1-16.01024-16.29184c0.03072-4.16256 1.53088-8.18688 4.23424-11.35616 9.40032-7.3984 29.83424-16.29184 53.06368-25.69216z" fill="#FFFFFF" p-id="1369"></path><path d="M930.06848 341.31968h-211.9168c-64.74752 0-123.20768-59.48928-123.20768-125.4912V0l335.12448 341.31968z" fill="#FFFFFF" fill-opacity=".4" p-id="1370"></path></svg>
<?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" width="1024" height="1024"><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: 2.4 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

@ -1 +1 @@
<?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="1624964523472" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1212" xmlns:xlink="http://www.w3.org/1999/xlink" width="1024" height="1024"><defs><style type="text/css"></style></defs><path d="M594.944 0l335.12448 341.31968v563.2c0 65.9968-52.50048 119.48032-117.29408 119.48032H209.54624c-64.7936 0-117.2992-53.5296-117.2992-119.48032V119.48032C92.25216 53.48352 144.75776 0 209.55136 0H594.944z" fill="#1ABF74" p-id="1213"></path><path d="M930.06848 341.31968h-211.9168c-64.74752 0-123.20768-59.48928-123.20768-125.4912V0l335.12448 341.31968z" fill="#FFFFFF" fill-opacity=".4" p-id="1214"></path><path d="M594.61632 426.82368v0.2304h0.09216V768H566.8352v-0.0512h-83.968 0.04608H399.7696h0.0512-139.91936v-28.3904l0.0512-0.04608v-85.82656h-0.0512v-28.39552h0.0512v-85.82656h-0.09728v-28.39552l0.09216-0.04608V455.168h-0.09216v-28.3904h334.70976l0.04608 0.04608z m-222.62784 226.86208H287.88224v85.82656h84.10624v-85.82656z m83.08224 0h-55.2448v85.82656h55.19872v-85.82656h0.0512z m111.75936 0H482.90816v85.82656H566.784v-85.82656h0.04608z m-194.8416-114.2272H287.88224v85.83168h84.10624v-85.82656z m83.08224 0h-55.2448v85.83168h55.19872v-85.82656h0.0512z m111.75936 0H482.90816v85.83168H566.784v-85.82656h0.04608z m0-84.24448H287.88224v55.808H566.784V455.168l0.04608 0.0512z" fill="#FFFFFF" p-id="1215"></path></svg>
<?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" width="1024" height="1024"><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

After

Width:  |  Height:  |  Size: 1.5 KiB