Files
frontend/src/utils/functions.js

139 lines
3.7 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { postLog } from '../../logger.js';
function showNotification(message, type = 'info') {
const icons = {
success: '✓',
error: '✕',
info: '',
warning: '⚠'
};
const colors = {
success: '#52c41a',
error: '#ff4d4f',
info: '#1890ff',
warning: '#faad14'
};
const notification = document.createElement('div');
notification.style.cssText = `
position: fixed;
top: -60px;
left: 50%;
transform: translateX(-50%);
background: ${colors[type] || colors.info};
color: white;
padding: 12px 24px;
border-radius: 8px;
display: flex;
align-items: center;
gap: 8px;
font-size: 14px;
font-weight: 500;
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
z-index: 10000;
transition: top 0.3s ease-out;
cursor: pointer;
`;
notification.innerHTML = `<span style="font-size: 18px;">${icons[type] || icons.info}</span><span>${message}</span>`;
document.body.appendChild(notification);
setTimeout(() => {
notification.style.top = '20px';
}, 10);
setTimeout(() => {
notification.style.top = '-60px';
setTimeout(() => {
document.body.removeChild(notification);
}, 300);
}, 3000);
notification.addEventListener('click', () => {
notification.style.top = '-60px';
setTimeout(() => {
document.body.removeChild(notification);
}, 300);
});
postLog.info(`Notification: ${message} (${type})`);
}
function setCookie(name, value, days = 7) {
const expires = new Date();
expires.setTime(expires.getTime() + days * 24 * 60 * 60 * 1000);
document.cookie = `${name}=${value};expires=${expires.toUTCString()};path=/`;
postLog.debug(`Cookie set: ${name}`);
}
function getCookie(name) {
const nameEQ = name + '=';
const cookies = document.cookie.split(';');
for (let i = 0; i < cookies.length; i++) {
let cookie = cookies[i];
while (cookie.charAt(0) === ' ') {
cookie = cookie.substring(1, cookie.length);
}
if (cookie.indexOf(nameEQ) === 0) {
const value = cookie.substring(nameEQ.length, cookie.length);
return value;
}
}
return null;
}
function deleteCookie(name) {
document.cookie = `${name}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/`;
postLog.debug(`Cookie deleted: ${name}`);
}
function formatDate(timestamp) {
const date = new Date(timestamp);
return date.toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
}
function formatBytes(bytes) {
if (bytes === 0) return '0 B';
const k = 1024;
const sizes = ['B', 'KB', 'MB', 'GB', 'TB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
}
function highlightText(text, keyword) {
if (!keyword) return text;
const regex = new RegExp(`(${keyword})`, 'gi');
return text.replace(regex, '<mark style="background-color: #fffb8f; padding: 0 2px;">$1</mark>');
}
function debounce(func, wait) {
let timeout;
return function executedFunction(...args) {
const later = () => {
clearTimeout(timeout);
func(...args);
};
clearTimeout(timeout);
timeout = setTimeout(later, wait);
};
}
export {
showNotification,
setCookie,
getCookie,
deleteCookie,
formatDate,
formatBytes,
highlightText,
debounce
};