mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-27 13:46:38 +08:00
181 lines
4.3 KiB
JavaScript
181 lines
4.3 KiB
JavaScript
import { toast } from 'react-toastify';
|
||
import { toastConstants } from '../constants';
|
||
|
||
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 'ANALOG AI ONE 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('Error: Not logged in or login expired, please log in again.!', showErrorOptions);
|
||
window.location.href = '/login?expired=true';
|
||
break;
|
||
case 429:
|
||
toast.error('Error: Too many requests, please try again later.!', showErrorOptions);
|
||
break;
|
||
case 500:
|
||
toast.error('Error: Internal server error, please contact the administrator.!', showErrorOptions);
|
||
break;
|
||
case 405:
|
||
toast.info('This site is for demonstration purposes only and does not have a server-side.!');
|
||
break;
|
||
default:
|
||
toast.error('Error.:' + error.message, showErrorOptions);
|
||
}
|
||
return;
|
||
}
|
||
toast.error('Error:' + error.message, showErrorOptions);
|
||
} else {
|
||
toast.error('Error:' + error, showErrorOptions);
|
||
}
|
||
}
|
||
|
||
export function showWarning(message) {
|
||
toast.warn(message, showWarningOptions);
|
||
}
|
||
|
||
export function showSuccess(message) {
|
||
toast.success(message, showSuccessOptions);
|
||
}
|
||
|
||
export function showInfo(message) {
|
||
toast.info(message, showInfoOptions);
|
||
}
|
||
|
||
export function showNotice(message) {
|
||
toast.info(message, showNoticeOptions);
|
||
}
|
||
|
||
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 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;
|
||
};
|