新增待办信息
@@ -530,14 +530,12 @@ public class MailReceiveUtils {
|
||||
String originalFileName = part.getFileName();
|
||||
String fileNameForLog = originalFileName == null ? "未知文件名" : decodeMimeText(originalFileName);
|
||||
logger.info("开始下载附件[" + fileNameForLog + "],开始时间:" + new Date(attachDownloadStartTime));
|
||||
|
||||
// 2. 修复:文件名解码(解决乱码)
|
||||
if (originalFileName != null) {
|
||||
originalFileName = decodeMimeText(originalFileName);
|
||||
} else {
|
||||
originalFileName = "unknown_" + System.currentTimeMillis();
|
||||
}
|
||||
|
||||
// 3. 修复:附件FileType(优先从文件扩展名识别,解决ContentType错误)
|
||||
String fileExt = getFileExtension(originalFileName);
|
||||
String fileType = MIME_TYPE_MAP.getContentType(originalFileName);
|
||||
@@ -584,12 +582,10 @@ public class MailReceiveUtils {
|
||||
long costTime = attachDownloadEndTime - attachDownloadStartTime;
|
||||
logger.info("完成下载附件[" + originalFileName + "],结束时间:" + new Date(attachDownloadEndTime) +
|
||||
",耗时:" + costTime + "ms,文件路径:" + finalFile.getAbsolutePath());
|
||||
|
||||
// 6. 封装附件信息(修复FileType,增加下载时间字段)
|
||||
attachment.setStoragePath(finalFile.getAbsolutePath());
|
||||
attachment.setFileSize(finalFile.length());
|
||||
attachment.setCreateTime(new Date());
|
||||
attachment.setTid(System.currentTimeMillis());
|
||||
attachment.setMailId(System.currentTimeMillis());
|
||||
attachment.setMessageId(messageId);
|
||||
attachment.setFileName(originalFileName);
|
||||
@@ -602,6 +598,7 @@ public class MailReceiveUtils {
|
||||
attachment.setDownloadStartTime(new Date(attachDownloadStartTime)); // 附件下载开始时间
|
||||
attachment.setDownloadEndTime(new Date(attachDownloadEndTime)); // 附件下载结束时间
|
||||
attachment.setDownloadCostTime(costTime); // 附件下载耗时(毫秒)
|
||||
attachment.setSvgIcon(MyFileUtils.getIcon(fileExt));
|
||||
return attachment;
|
||||
}
|
||||
|
||||
|
||||
@@ -95,18 +95,20 @@ public class MyFileUtils {
|
||||
|
||||
public static String getIcon(String ext) {
|
||||
switch (ext) {
|
||||
case "wps":
|
||||
return "icons/file-wps.png";
|
||||
case "doc", "docx":
|
||||
return "icons/file-word-line.svg";
|
||||
return "icons/file-docx.png";
|
||||
case "xls", "xlsx":
|
||||
return "icons/file-excel-line.svg";
|
||||
return "icons/file-xlsx.png";
|
||||
case "ppt", "pptx":
|
||||
return "icons/file-ppt-line.svg";
|
||||
return "icons/file-pptx.png";
|
||||
case "pdf":
|
||||
return "icons/file-pdf-line.svg";
|
||||
return "icons/file-pdf.png";
|
||||
case "zip", "gz":
|
||||
return "icons/folder-zip-line.svg";
|
||||
return "icons/file-zip.png";
|
||||
default:
|
||||
return "icons/file-text-line.svg";
|
||||
return "icons/file.png";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ import java.io.Serial;
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Table(name = "biz_mail_attachments", alias = "a", label = "邮件附件表信息", columns = {
|
||||
@Column(name = "create_time", attrName = "createTime", label = "记录时间", isUpdate = false, isUpdateForce = true),
|
||||
@Column(name = "id", attrName = "tid", label = "附件标识", isPK = true),
|
||||
@Column(name = "id", attrName = "id", label = "附件标识", isPK = true),
|
||||
@Column(name = "mail_id", attrName = "mailId", label = "收件标识"),
|
||||
@Column(name = "message_id", attrName = "messageId", label = "消息标识"),
|
||||
@Column(name = "file_name", attrName = "fileName", label = "附件名称", queryType = QueryType.LIKE),
|
||||
@@ -39,6 +39,7 @@ import java.io.Serial;
|
||||
@Column(name = "download_start_time", attrName = "downloadStartTime", label = "下载开始时间"),
|
||||
@Column(name = "download_end_time", attrName = "downloadEndTime", label = "下载结束时间"),
|
||||
@Column(name = "download_cost_time", attrName = "downloadCostTime", label = "下载耗时"),
|
||||
@Column(name = "svg_icon", attrName = "svgIcon", label = "文件夹标识"),
|
||||
}, orderBy = "a.create_time DESC"
|
||||
)
|
||||
@Data
|
||||
@@ -47,7 +48,6 @@ public class BizMailAttachments extends DataEntity<BizMailAttachments> implement
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
private Date createTime; // 记录时间
|
||||
private Long tid; // 附件标识
|
||||
private Long mailId; // 收件标识
|
||||
private String messageId; // 消息标识
|
||||
private String fileName; // 附件名称
|
||||
@@ -64,9 +64,11 @@ public class BizMailAttachments extends DataEntity<BizMailAttachments> implement
|
||||
private Date downloadEndTime; // 附件下载结束时间
|
||||
private Long downloadCostTime; // 附件下载耗时(毫秒)
|
||||
|
||||
private String svgIcon; //文件图标
|
||||
|
||||
@ExcelFields({
|
||||
@ExcelField(title = "记录时间", attrName = "createTime", align = Align.CENTER, sort = 10, dataFormat = "yyyy-MM-dd hh:mm"),
|
||||
@ExcelField(title = "附件标识", attrName = "tid", align = Align.CENTER, sort = 20),
|
||||
@ExcelField(title = "附件标识", attrName = "id", align = Align.CENTER, sort = 20),
|
||||
@ExcelField(title = "收件标识", attrName = "mailId", align = Align.CENTER, sort = 30),
|
||||
@ExcelField(title = "消息标识", attrName = "messageId", align = Align.CENTER, sort = 40),
|
||||
@ExcelField(title = "附件名称", attrName = "fileName", align = Align.CENTER, sort = 50),
|
||||
|
||||
@@ -4,6 +4,7 @@ import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
import com.jeesite.modules.app.utils.FileDownloadUtils;
|
||||
import com.jeesite.modules.app.utils.MyFileUtils;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
|
||||
@@ -141,6 +142,8 @@ public class BizMailAttachmentsController extends BaseController {
|
||||
@RequestMapping(value = "delete")
|
||||
@ResponseBody
|
||||
public String delete(BizMailAttachments bizMailAttachments) {
|
||||
BizMailAttachments attachments = bizMailAttachmentsService.get(bizMailAttachments);
|
||||
MyFileUtils.rmFile(attachments.getStoragePath());
|
||||
bizMailAttachmentsService.delete(bizMailAttachments);
|
||||
return renderResult(Global.TRUE, text("删除邮件附件表成功!"));
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 8.5 KiB |
@@ -168,6 +168,16 @@
|
||||
},
|
||||
auth: 'biz:mailAttachments:edit',
|
||||
},
|
||||
{
|
||||
icon: 'i-ant-design:download-outlined',
|
||||
color: 'success',
|
||||
title: t('下载'),
|
||||
popConfirm: {
|
||||
title: t('是否确认下载邮件附件?'),
|
||||
confirm: handleDownload.bind(this, record),
|
||||
},
|
||||
auth: 'biz:mailAttachments:edit',
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
@@ -205,6 +215,18 @@
|
||||
});
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
async function handleDownload(record: Recordable){
|
||||
loading.value = true;
|
||||
const { ctxAdminPath } = useGlobSetting();
|
||||
await downloadByUrl({
|
||||
url: ctxAdminPath + '/biz/mailAttachments/downloadFile',
|
||||
params: {
|
||||
id: record.id
|
||||
},
|
||||
});
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
const [registerImportModal, { openModal: importModal }] = useModal();
|
||||
|
||||
@@ -213,7 +235,7 @@
|
||||
}
|
||||
|
||||
async function handleDelete(record: Recordable) {
|
||||
const params = { tid: record.tid };
|
||||
const params = { id: record.id };
|
||||
const res = await bizMailAttachmentsDelete(params);
|
||||
showMessage(res.message);
|
||||
await handleSuccess(record);
|
||||
|
||||
@@ -32,12 +32,7 @@
|
||||
<div class="attachments-grid">
|
||||
<div class="attachment-card" v-for="(item, index) in MailAttachments" :key="index">
|
||||
<div class="attachment-icon-wrapper">
|
||||
<img
|
||||
class="attachment-icon"
|
||||
:src="getAttachmentIconUrl(item)"
|
||||
:alt="item.fileName + '图标'"
|
||||
@error="handleIconLoadError"
|
||||
/>
|
||||
<Icon :icon="item.svgIcon" size="24" />
|
||||
</div>
|
||||
|
||||
<div class="attachment-info-wrapper">
|
||||
@@ -62,6 +57,7 @@
|
||||
|
||||
<script lang="ts">
|
||||
import { defineComponent, ref, PropType } from 'vue';
|
||||
import { Icon } from '@jeesite/core/components/Icon';
|
||||
import { useMessage } from '@jeesite/core/hooks/web/useMessage';
|
||||
import { BasicModal, useModalInner } from '@jeesite/core/components/Modal';
|
||||
import { BizMailReceived } from '@jeesite/biz/api/biz/mailReceived';
|
||||
@@ -69,17 +65,6 @@
|
||||
import { downloadByUrl } from '@jeesite/core/utils/file/download';
|
||||
import { BizMailAttachments, bizMailAttachmentsListAll } from '@jeesite/biz/api/biz/mailAttachments';
|
||||
|
||||
import defaultIcon from '@jeesite/assets/images/file.png';
|
||||
import docxIcon from '@jeesite/assets/images/docx.png';
|
||||
import gzIcon from '@jeesite/assets/images/gz.png';
|
||||
import pdfIcon from '@jeesite/assets/images/pdf.png';
|
||||
import pptxIcon from '@jeesite/assets/images/pptx.png';
|
||||
import pyIcon from '@jeesite/assets/images/py.png';
|
||||
import sqlIcon from '@jeesite/assets/images/sql.png';
|
||||
import wpsIcon from '@jeesite/assets/images/wps.png';
|
||||
import xlsxIcon from '@jeesite/assets/images/xlsx.png';
|
||||
import zipIcon from '@jeesite/assets/images/zip.png';
|
||||
|
||||
// 定义自定义图标配置类型
|
||||
interface CustomIconConfig {
|
||||
default?: string;
|
||||
@@ -90,48 +75,11 @@
|
||||
export default defineComponent({
|
||||
components: { BasicModal },
|
||||
emits: ['modalClose'],
|
||||
props: {
|
||||
customIcons: {
|
||||
type: Object as PropType<CustomIconConfig>,
|
||||
default: () => ({
|
||||
default: 'default-file.png',
|
||||
types: {
|
||||
docx: 'docx.png',
|
||||
gz: 'gz.png',
|
||||
pdf: 'pdf.png',
|
||||
pptx: 'pptx.png',
|
||||
py: 'py.png',
|
||||
sql: 'sql.png',
|
||||
wps: 'wps.png',
|
||||
xlsx: 'xlsx.png',
|
||||
zip: 'zip.png',
|
||||
other: 'default-file.png'
|
||||
},
|
||||
exts: {}
|
||||
})
|
||||
},
|
||||
iconBasePath: {
|
||||
type: String,
|
||||
default: '@jeesite/assets/images/'
|
||||
}
|
||||
},
|
||||
setup(props, { emit }) {
|
||||
const ReceivedList = ref<BizMailReceived>();
|
||||
const MailAttachments = ref<BizMailAttachments[]>([]);
|
||||
const { createMessage } = useMessage();
|
||||
const iconMap = {
|
||||
'default-file.png': defaultIcon,
|
||||
'docx.png': docxIcon,
|
||||
'gz.png': gzIcon,
|
||||
'pdf.png': pdfIcon,
|
||||
'pptx.png': pptxIcon,
|
||||
'py.png': pyIcon,
|
||||
'sql.png': sqlIcon,
|
||||
'wps.png': wpsIcon,
|
||||
'xlsx.png': xlsxIcon,
|
||||
'zip.png': zipIcon
|
||||
};
|
||||
|
||||
|
||||
const [register, { closeModal }] = useModalInner(async (data: any) => {
|
||||
if (!data) return;
|
||||
if (data.messageId) {
|
||||
@@ -151,7 +99,6 @@
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
async function downloadAttachment(attachment: BizMailAttachments) {
|
||||
const { ctxAdminPath } = useGlobSetting();
|
||||
await downloadByUrl({
|
||||
@@ -175,64 +122,6 @@
|
||||
return `${fileSize.toFixed(1)} ${units[unitIndex]}`;
|
||||
};
|
||||
|
||||
// 第一步:根据文件扩展名获取图标文件名
|
||||
const getAttachmentIconName = (file: BizMailAttachments) => {
|
||||
const { customIcons } = props;
|
||||
const ext = file.fileExt?.toLowerCase() || ''; // 统一转小写,避免大小写问题
|
||||
|
||||
let iconName = '';
|
||||
// 1. 优先按扩展名配置匹配
|
||||
if (customIcons.exts?.[ext]) {
|
||||
iconName = customIcons.exts[ext];
|
||||
}
|
||||
// 2. 按文件类型映射匹配
|
||||
else if (customIcons.types) {
|
||||
// 扩展名 → 图标类型的映射(覆盖所有常见类型)
|
||||
const typeMap: Record<string, string> = {
|
||||
'doc': 'docx.png',
|
||||
'docx': 'docx.png',
|
||||
'gz': 'gz.png',
|
||||
'pdf': 'pdf.png',
|
||||
'ppt': 'pptx.png',
|
||||
'pptx': 'pptx.png',
|
||||
'py': 'py.png',
|
||||
'sql': 'sql.png',
|
||||
'wps': 'wps.png',
|
||||
'xls': 'xlsx.png',
|
||||
'xlsx': 'xlsx.png',
|
||||
'zip': 'zip.png',
|
||||
'rar': 'zip.png',
|
||||
'7z': 'zip.png',
|
||||
'tar': 'zip.png',
|
||||
'jpg': 'default-file.png',
|
||||
'png': 'default-file.png',
|
||||
'txt': 'default-file.png',
|
||||
'json': 'default-file.png'
|
||||
};
|
||||
// 匹配不到则用other类型
|
||||
iconName = typeMap[ext] || customIcons.types['other'] || 'default-file.png';
|
||||
}
|
||||
// 3. 兜底用默认图标
|
||||
iconName = iconName || customIcons.default || 'default-file.png';
|
||||
|
||||
return iconName;
|
||||
};
|
||||
|
||||
// 第二步:根据图标文件名获取打包后的真实URL(核心)
|
||||
const getAttachmentIconUrl = (file: BizMailAttachments) => {
|
||||
const iconName = getAttachmentIconName(file);
|
||||
// 从映射表获取,兜底用默认图标
|
||||
return iconMap[iconName] || iconMap['default-file.png'];
|
||||
};
|
||||
|
||||
// 处理图标加载失败
|
||||
const handleIconLoadError = (e: Event) => {
|
||||
const target = e.target as HTMLImageElement;
|
||||
// 避免无限循环
|
||||
if (target.src === iconMap['default-file.png']) return;
|
||||
target.src = iconMap['default-file.png'];
|
||||
};
|
||||
|
||||
const handleCancel = () => {
|
||||
emit('modalClose');
|
||||
closeModal();
|
||||
@@ -246,8 +135,6 @@
|
||||
MailAttachments,
|
||||
downloadAttachment,
|
||||
formatFileSize,
|
||||
getAttachmentIconUrl,
|
||||
handleIconLoadError
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
@@ -389,7 +389,7 @@
|
||||
</a-button>
|
||||
</span>
|
||||
<div class="action-buttons">
|
||||
<a-button type="link" size="small" @click="downloadFiles(file)" >
|
||||
<a-button type="link" size="small" :loading="loading" @click="downloadFiles(file)" >
|
||||
<Icon icon="ant-design:cloud-download-outlined"/>
|
||||
</a-button>
|
||||
<a-button type="link" size="small" @click="deleteFiles(file)" danger>
|
||||
@@ -416,22 +416,22 @@ import { Icon } from '@jeesite/core/components/Icon';
|
||||
import { useModal } from '@jeesite/core/components/Modal';
|
||||
import { useGlobSetting } from '@jeesite/core/hooks/setting';
|
||||
import { downloadByUrl } from '@jeesite/core/utils/file/download';
|
||||
import { bizFoldersSave, bizFoldersAllData, bizFolderItemAll, bizFoldersDelete } from '@jeesite/biz/api/biz/folders';
|
||||
import { BizMyfiles, bizMyfilesEdit, bizMyfilesListAll, bizMyfilesDelete } from '@jeesite/biz/api/biz/myfiles';
|
||||
import { BasicTree } from '@jeesite/core/components/Tree';
|
||||
import { useUserStore } from '@jeesite/core/store/modules/user';
|
||||
import UploadModal from './upload.vue';
|
||||
import FolderModal from './folder.vue';
|
||||
import InputModal from './form.vue';
|
||||
|
||||
import { bizFoldersSave, bizFoldersAllData, bizFolderItemAll, bizFoldersDelete } from '@jeesite/biz/api/biz/folders';
|
||||
import { BizMyfiles, bizMyfilesEdit, bizMyfilesListAll, bizMyfilesDelete } from '@jeesite/biz/api/biz/myfiles';
|
||||
|
||||
import { useUserStore } from '@jeesite/core/store/modules/user';
|
||||
const userStore = useUserStore();
|
||||
const userinfo = computed(() => userStore.getUserInfo);
|
||||
import { BasicTree } from '@jeesite/core/components/Tree';
|
||||
|
||||
|
||||
const [registerModal, { openModal: openInputModal }] = useModal();
|
||||
const [registerUpload, { openModal: openUploadModal }] = useModal();
|
||||
const [registerFolder, { openModal: openfolderModal }] = useModal();
|
||||
|
||||
const loading = ref(false);
|
||||
|
||||
interface FolderNode {
|
||||
id: string;
|
||||
@@ -1045,6 +1045,7 @@ const handleFolderModalClose = () => {
|
||||
|
||||
async function downloadFiles(myFiles: BizMyfiles) {
|
||||
message.success("文件正在下载中,请稍后...");
|
||||
loading.value = true;
|
||||
const { ctxAdminPath } = useGlobSetting();
|
||||
await downloadByUrl({
|
||||
url: ctxAdminPath + '/biz/myfiles/downloadFile',
|
||||
@@ -1052,6 +1053,7 @@ async function downloadFiles(myFiles: BizMyfiles) {
|
||||
id : myFiles.id
|
||||
},
|
||||
});
|
||||
loading.value = false;
|
||||
}
|
||||
|
||||
async function deleteFiles(myFiles: BizMyfiles) {
|
||||
|
||||
|
Before Width: | Height: | Size: 9.7 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 356.99 419.8"><defs><style>.cls-1{fill:#ffa546;}.cls-2{fill:#ff6059;opacity:0.4;}.cls-3{fill:#426572;}.cls-4{fill:#ffd947;}</style></defs><title>Asset 91</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M351,380.73v17.59a15.52,15.52,0,0,1-15.47,15.48H21.46A15.52,15.52,0,0,1,6,398.32V380.73a15.51,15.51,0,0,1,15.47-15.47H335.52A15.51,15.51,0,0,1,351,380.73Z"/><path class="cls-2" d="M351,406.85c0,3.95-7,7.19-15.47,7.19H21.46C13,414,6,410.8,6,406.85V380.73a15.51,15.51,0,0,1,15.47-15.47H37.66l3.44,25.27c0,4,7,7.2,15.47,7.2l283.72,12.44,7.38-2.28Z"/><path class="cls-3" d="M335.52,419.8H21.46A21.5,21.5,0,0,1,0,398.32V380.73a21.49,21.49,0,0,1,21.46-21.47H335.52A21.49,21.49,0,0,1,357,380.73v17.59a21.52,21.52,0,0,1-21.46,21.48ZM21.46,371.26A9.48,9.48,0,0,0,12,380.73v17.59a9.48,9.48,0,0,0,9.46,9.48H335.52a9.52,9.52,0,0,0,9.46-9.48V380.73a9.48,9.48,0,0,0-9.46-9.47Z"/><path class="cls-1" d="M247.93,138H233.23V41.7A35.7,35.7,0,0,0,197.53,6H159.45a35.7,35.7,0,0,0-35.7,35.7V138H109.06C80,138,61.84,169.48,76.37,194.64l34.72,60.13,30,52c16.6,28.76,58.12,28.76,74.72,0l30-52,34.72-60.13C295.14,169.48,277,138,247.93,138Z"/><path class="cls-2" d="M280.62,188l-34.73,60.13-30,52c-11.24,19.46-66.68,32.78-52.52,18.88,60.22-59.12,104.3-182.16,104.3-182.16A37.74,37.74,0,0,1,280.62,188Z"/><path class="cls-4" d="M192.3,6c-.22.23-.42.47-.63.72-38.92,45-18.36,116.49-42.85,170.71-10.14,22.45-29.18,41.51-52.15,49.48L78,194.64C63.52,169.48,81.67,138,110.72,138h14.7V41.7A35.7,35.7,0,0,1,161.12,6Z"/><path class="cls-3" d="M178.49,334.39h0a48.64,48.64,0,0,1-42.56-24.57L71.17,197.64A43.75,43.75,0,0,1,109.06,132h8.69V41.7A41.74,41.74,0,0,1,159.45,0h38.09a41.75,41.75,0,0,1,41.7,41.7V132h8.69a43.75,43.75,0,0,1,37.89,65.62L221,309.82A48.64,48.64,0,0,1,178.49,334.39ZM109.06,144a31.75,31.75,0,0,0-27.49,47.62l64.76,112.17a37.14,37.14,0,0,0,64.33,0l64.76-112.17A31.75,31.75,0,0,0,247.92,144H227.23V41.7A29.73,29.73,0,0,0,197.53,12H159.45a29.73,29.73,0,0,0-29.7,29.7V144Z"/></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 19 KiB |
|
Before Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 18 KiB |
|
Before Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 110 KiB After Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 110 KiB |
|
Before Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 13 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 445 271.8"><defs><style>.cls-1{fill:#32caf8;}.cls-2{fill:#00aaf8;opacity:0.5;}.cls-3{fill:#fff;}.cls-4{fill:#426572;}</style></defs><title>Asset 500</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><rect class="cls-1" x="6" y="8.17" width="433" height="259.8" rx="12" ry="12"/><path class="cls-2" d="M439,21.16V255a13,13,0,0,1-13,13H28.72l381-259.8H426A13,13,0,0,1,439,21.16Z"/><path class="cls-3" d="M328,33.24h88.92c3.86,0,3.87-6,0-6H328c-3.86,0-3.87,6,0,6Z"/><path class="cls-3" d="M283.49,33.24H312.6c3.86,0,3.87-6,0-6H283.49c-3.86,0-3.87,6,0,6Z"/><path class="cls-4" d="M427,271.8H18a18,18,0,0,1-18-18V18A18,18,0,0,1,18,0H427a18,18,0,0,1,18,18V253.8A18,18,0,0,1,427,271.8ZM18,12a6,6,0,0,0-6,6V253.8a6,6,0,0,0,6,6H427a6,6,0,0,0,6-6V18a6,6,0,0,0-6-6Z"/><rect class="cls-4" x="37.89" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="55.93" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="73.97" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="92.01" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="118.71" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="136.76" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="154.8" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="172.84" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="199.54" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="217.58" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="235.63" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="253.67" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="280.37" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="298.41" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="316.45" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="334.49" y="125.08" width="12" height="20.57"/><rect class="cls-4" x="43.89" y="177.53" width="161.29" height="12"/><rect class="cls-4" x="43.89" y="204.59" width="68.2" height="12"/><circle class="cls-3" cx="379.46" cy="207.35" r="23.82"/><rect class="cls-3" x="43.89" y="36.31" width="72.53" height="47.63" rx="12" ry="12"/><path class="cls-4" d="M104.42,88.86H55.89a18,18,0,0,1-18-18V47.23a18,18,0,0,1,18-18h48.53a18,18,0,0,1,18,18V70.86A18,18,0,0,1,104.42,88.86ZM55.89,41.23a6,6,0,0,0-6,6V70.86a6,6,0,0,0,6,6h48.53a6,6,0,0,0,6-6V47.23a6,6,0,0,0-6-6Z"/><path class="cls-4" d="M379.46,241.49a29.81,29.81,0,1,1,29.82-29.82A29.85,29.85,0,0,1,379.46,241.49Zm0-47.63a17.81,17.81,0,1,0,17.82,17.81A17.84,17.84,0,0,0,379.46,193.86Z"/></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 2.6 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 392.49 390.69"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#f3aa9f;}.cls-3{fill:#e1978f;}.cls-4,.cls-6{fill:#426572;}.cls-5{fill:#e1d2d5;}.cls-6{font-size:100.43px;font-family:Dosis-ExtraBold, Dosis;font-weight:700;}</style></defs><title>Asset 480</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><path class="cls-1" d="M383.9,162H199.69V2.19q4-.19,8.16-.19A176.87,176.87,0,0,1,383.9,162Z"/><path class="cls-2" d="M355.38,210a176.83,176.83,0,0,1-95.72,157.18l-.15.07A176.88,176.88,0,1,1,101.72,50.67l.15-.07a175.93,175.93,0,0,1,72.82-17.4V191H354.37A177.9,177.9,0,0,1,355.38,210Z"/><path class="cls-3" d="M357.53,212.16a176,176,0,0,1-17.44,76.66,1,1,0,0,1-.07.15A176.89,176.89,0,0,1,73.47,352.79l1.23.38q6,1.86,12.26,3.29A177,177,0,0,0,303.49,191h52.78A178.15,178.15,0,0,1,357.53,212.16Z"/><path class="cls-4" d="M182.85,390.69a182.87,182.87,0,0,1-84-345.31l.41-.2a180.59,180.59,0,0,1,75.13-20l6.27-.28V185H364.36l.51,5.44c.54,5.77.82,11.62.82,17.4a180.72,180.72,0,0,1-20.18,83.56c-.06.12-.12.26-.2.41a184.39,184.39,0,0,1-83,80.77l-.18.08,0,0A181.06,181.06,0,0,1,182.85,390.69ZM104.33,56.08A170.88,170.88,0,0,0,256.9,361.85l.17-.08,0,0a172.34,172.34,0,0,0,77.5-75.38l.15-.29a168.84,168.84,0,0,0,18.93-78.23c0-3.6-.11-7.23-.34-10.84H168.69V37.58a168.41,168.41,0,0,0-64.07,18.35Z"/><path class="cls-5" d="M382.9,158H309.11c-2.89-46.4-18.43-98.49-36.89-144.29l1.33.51a177.49,177.49,0,0,1,92.51,83.56A175.63,175.63,0,0,1,382.9,158Z"/><path class="cls-4" d="M392.49,172H195.69V.47L201.4.2C204.11.07,207,0,209.85,0a182.87,182.87,0,0,1,182,165.44Zm-184.8-12H379.18A170.89,170.89,0,0,0,209.85,12h-2.16Z"/><text class="cls-6" transform="translate(232.67 133.93)">%</text><path class="cls-1" d="M101.22,81.14a166.34,166.34,0,0,1,34.83-18c3.58-1.34,2-7.14-1.6-5.79A172.89,172.89,0,0,0,98.19,76c-3.18,2.15-.18,7.35,3,5.18Z"/><path class="cls-1" d="M36.28,166.34c2.62-8.63,6.74-16.94,11.05-24.83A180.58,180.58,0,0,1,87.86,91.34c2.93-2.52-1.33-6.75-4.24-4.24-23.3,20.06-44.07,47.84-53.12,77.65-1.12,3.7,4.67,5.29,5.79,1.6Z"/></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 2.1 KiB |
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 419.23 419.23"><defs><style>.cls-1{fill:#fbc907;}.cls-2{fill:#f3a70f;}.cls-3{fill:#426572;}.cls-4,.cls-9{fill:#fff;}.cls-5{fill:#e8e8e8;}.cls-6{fill:#dadada;}.cls-7{opacity:0.1;}.cls-8{fill:#55e0ff;}.cls-9{opacity:0.4;}</style></defs><title>Asset 510</title><g id="Layer_2" data-name="Layer 2"><g id="Layer_1-2" data-name="Layer 1"><circle class="cls-1" cx="210.66" cy="209.62" r="203.61"/><path class="cls-2" d="M27.21,209.62A203.61,203.61,0,0,1,220.72,6.26q-5-.25-10.08-.25C98.19,4.86,6.11,95.09,5,207.54S94.05,412.07,206.5,413.21q2.07,0,4.13,0,5.06,0,10.08-.25A203.61,203.61,0,0,1,27.21,209.62Z"/><path class="cls-3" d="M209.61,419.23C94,419.23,0,325.19,0,209.61S94,0,209.61,0,419.23,94,419.23,209.61,325.19,419.23,209.61,419.23Zm0-407.23C100.65,12,12,100.65,12,209.61s88.65,197.61,197.61,197.61,197.61-88.65,197.61-197.61S318.58,12,209.61,12Z"/><path class="cls-4" d="M111.69,60.1a195,195,0,0,1,41.08-21.2c3.59-1.34,2-7.14-1.6-5.79a201.47,201.47,0,0,0-42.51,21.8c-3.18,2.15-.18,7.35,3,5.18Z"/><path class="cls-4" d="M35.09,160.61c3.09-10.2,8-20,13.05-29.32A212.37,212.37,0,0,1,95.87,72.18c2.93-2.52-1.33-6.75-4.24-4.24A217.08,217.08,0,0,0,43,128.26C37.63,138,32.54,148.34,29.31,159c-1.12,3.7,4.67,5.29,5.79,1.6Z"/><circle class="cls-5" cx="211.45" cy="212.12" r="156.89"/><path class="cls-6" d="M67.05,232.07a156.89,156.89,0,0,1,283.33-92.82A156.91,156.91,0,1,0,85,304.92,156.19,156.19,0,0,1,67.05,232.07Z"/><path class="cls-5" d="M211.32,152.25h0a9.16,9.16,0,0,1,9.16,9.16V210.5a9.16,9.16,0,0,1-9.16,9.16h0a9.16,9.16,0,0,1-9.16-9.16V161.41A9.16,9.16,0,0,1,211.32,152.25Z"/><circle class="cls-5" cx="211.14" cy="221.32" r="15.94"/><path class="cls-3" d="M210.48,92.62c6.29,0,6.29-9.77,0-9.77S204.19,92.62,210.48,92.62Z"/><path class="cls-3" d="M210.48,343.89c6.29,0,6.29-9.77,0-9.77S204.19,343.89,210.48,343.89Z"/><path class="cls-3" d="M339.84,218.25c6.29,0,6.29-9.77,0-9.77S333.55,218.25,339.84,218.25Z"/><path class="cls-3" d="M81.13,218.25c6.29,0,6.29-9.77,0-9.77S74.84,218.25,81.13,218.25Z"/><path class="cls-3" d="M205.56,153.32h0a9.16,9.16,0,0,1,9.16,9.16v49.09a9.16,9.16,0,0,1-9.16,9.16h0a9.16,9.16,0,0,1-9.16-9.16V162.49A9.16,9.16,0,0,1,205.56,153.32Z"/><circle class="cls-3" cx="205.38" cy="221.15" r="15.94"/><path class="cls-3" d="M135.78,272.58l135.16-89.89L290.11,170c5.22-3.46.33-11.94-4.92-8.44L150,251.4l-19.17,12.74C125.64,267.6,130.52,276.08,135.78,272.58Z"/><g class="cls-7"><ellipse class="cls-8" cx="210.2" cy="211.21" rx="156.89" ry="154.23"/></g><path class="cls-9" d="M243.13,60.17,84.37,301.88a162.18,162.18,0,0,1-18.58-47.29L193.5,60.21a153.88,153.88,0,0,1,49.67,0Z"/><path class="cls-9" d="M289.69,72.6,115.93,325.78a155.09,155.09,0,0,1-14.77-15L270,64.76A155.38,155.38,0,0,1,289.69,72.6Z"/><path class="cls-9" d="M362.16,171.75h0L232.51,360.68h0a160.93,160.93,0,0,1-42.54.43L346.63,132.84A151.63,151.63,0,0,1,362.16,171.75Z"/><path class="cls-3" d="M210.12,369.75c-89.82,0-162.89-71.88-162.89-160.23S120.31,49.29,210.12,49.29,373,121.17,373,209.52,299.94,369.75,210.12,369.75Zm0-308.46c-83.2,0-150.89,66.5-150.89,148.23s67.69,148.23,150.89,148.23S361,291.25,361,209.52,293.32,61.29,210.12,61.29Z"/></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 8.0 KiB |