import { Toast } from '@douyinfe/semi-ui'; import { toastConstants } from '../constants'; import React from 'react'; import { toast } from 'react-toastify'; const HTMLToastContent = ({ htmlContent }) => { return
; }; export default HTMLToastContent; export function isAdmin() { let user = localStorage.getItem('user'); if (!user) return false; user = JSON.parse(user); return user.role >= 10; } export function isRoot() { let user = localStorage.getItem('user'); if (!user) return false; user = JSON.parse(user); return user.role >= 100; } export function getSystemName() { let system_name = localStorage.getItem('system_name'); if (!system_name) return 'New API'; return system_name; } export function getLogo() { let logo = localStorage.getItem('logo'); if (!logo) return '/logo.png'; return logo; } export function getFooterHTML() { return localStorage.getItem('footer_html'); } export async function copy(text) { let okay = true; try { await navigator.clipboard.writeText(text); } catch (e) { okay = false; console.error(e); } return okay; } export function isMobile() { return window.innerWidth <= 600; } let showErrorOptions = { autoClose: toastConstants.ERROR_TIMEOUT }; let showWarningOptions = { autoClose: toastConstants.WARNING_TIMEOUT }; let showSuccessOptions = { autoClose: toastConstants.SUCCESS_TIMEOUT }; let showInfoOptions = { autoClose: toastConstants.INFO_TIMEOUT }; let showNoticeOptions = { autoClose: false }; if (isMobile()) { showErrorOptions.position = 'top-center'; // showErrorOptions.transition = 'flip'; showSuccessOptions.position = 'top-center'; // showSuccessOptions.transition = 'flip'; showInfoOptions.position = 'top-center'; // showInfoOptions.transition = 'flip'; showNoticeOptions.position = 'top-center'; // showNoticeOptions.transition = 'flip'; } export function showError(error) { console.error(error); if (error.message) { if (error.name === 'AxiosError') { switch (error.response.status) { case 401: // toast.error('错误:未登录或登录已过期,请重新登录!', showErrorOptions); window.location.href = '/login?expired=true'; break; case 429: Toast.error('错误:请求次数过多,请稍后再试!'); break; case 500: Toast.error('错误:服务器内部错误,请联系管理员!'); break; case 405: Toast.info('本站仅作演示之用,无服务端!'); break; default: Toast.error('错误:' + error.message); } return; } Toast.error('错误:' + error.message); } else { Toast.error('错误:' + error); } } export function showWarning(message) { Toast.warning(message); } export function showSuccess(message) { Toast.success(message); } export function showInfo(message) { Toast.info(message); } export function showNotice(message, isHTML = false) { if (isHTML) { toast(, showNoticeOptions); } else { Toast.info(message); } } export function openPage(url) { window.open(url); } export function removeTrailingSlash(url) { if (url.endsWith('/')) { return url.slice(0, -1); } else { return url; } } export function timestamp2string(timestamp) { let date = new Date(timestamp * 1000); let year = date.getFullYear().toString(); let month = (date.getMonth() + 1).toString(); let day = date.getDate().toString(); let hour = date.getHours().toString(); let minute = date.getMinutes().toString(); let second = date.getSeconds().toString(); if (month.length === 1) { month = '0' + month; } if (day.length === 1) { day = '0' + day; } if (hour.length === 1) { hour = '0' + hour; } if (minute.length === 1) { minute = '0' + minute; } if (second.length === 1) { second = '0' + second; } return ( year + '-' + month + '-' + day + ' ' + hour + ':' + minute + ':' + second ); } export function timestamp2string1(timestamp, dataExportDefaultTime = 'hour') { let date = new Date(timestamp * 1000); // let year = date.getFullYear().toString(); let month = (date.getMonth() + 1).toString(); let day = date.getDate().toString(); let hour = date.getHours().toString(); if (month.length === 1) { month = '0' + month; } if (day.length === 1) { day = '0' + day; } if (hour.length === 1) { hour = '0' + hour; } let str = month + '-' + day; if (dataExportDefaultTime === 'hour') { str += ' ' + hour + ':00'; } else if (dataExportDefaultTime === 'week') { let nextWeek = new Date(timestamp * 1000 + 6 * 24 * 60 * 60 * 1000); let nextMonth = (nextWeek.getMonth() + 1).toString(); let nextDay = nextWeek.getDate().toString(); if (nextMonth.length === 1) { nextMonth = '0' + nextMonth; } if (nextDay.length === 1) { nextDay = '0' + nextDay; } str += ' - ' + nextMonth + '-' + nextDay; } return str; } export function downloadTextAsFile(text, filename) { let blob = new Blob([text], { type: 'text/plain;charset=utf-8' }); let url = URL.createObjectURL(blob); let a = document.createElement('a'); a.href = url; a.download = filename; a.click(); } export const verifyJSON = (str) => { try { JSON.parse(str); } catch (e) { return false; } return true; }; export function verifyJSONPromise(value) { try { JSON.parse(value); return Promise.resolve(); } catch (e) { return Promise.reject('不是合法的 JSON 字符串'); } } export function shouldShowPrompt(id) { let prompt = localStorage.getItem(`prompt-${id}`); return !prompt; } export function setPromptShown(id) { localStorage.setItem(`prompt-${id}`, 'true'); } /** * 比较两个对象的属性,找出有变化的属性,并返回包含变化属性信息的数组 * @param {Object} oldObject - 旧对象 * @param {Object} newObject - 新对象 * @return {Array} 包含变化属性信息的数组,每个元素是一个对象,包含 key, oldValue 和 newValue */ export function compareObjects(oldObject, newObject) { const changedProperties = []; // 比较两个对象的属性 for (const key in oldObject) { if (oldObject.hasOwnProperty(key) && newObject.hasOwnProperty(key)) { if (oldObject[key] !== newObject[key]) { changedProperties.push({ key: key, oldValue: oldObject[key], newValue: newObject[key], }); } } } return changedProperties; }