diff --git a/web/berry/src/utils/common.js b/web/berry/src/utils/common.js index a329cc56..be296122 100644 --- a/web/berry/src/utils/common.js +++ b/web/berry/src/utils/common.js @@ -1,259 +1,260 @@ -import { enqueueSnackbar } from 'notistack'; -import { snackbarConstants } from 'constants/SnackbarConstants'; -import { API } from './api'; +import {enqueueSnackbar} from 'notistack'; +import {snackbarConstants} from 'constants/SnackbarConstants'; +import {API} from './api'; export function getSystemName() { - let system_name = localStorage.getItem('system_name'); - if (!system_name) return 'One API'; - return system_name; + let system_name = localStorage.getItem('system_name'); + if (!system_name) return 'One API'; + return system_name; } export function isMobile() { - return window.innerWidth <= 600; + return window.innerWidth <= 600; } // eslint-disable-next-line -export function SnackbarHTMLContent({ htmlContent }) { - return
; +export function SnackbarHTMLContent({htmlContent}) { + return
; } export function getSnackbarOptions(variant) { - let options = snackbarConstants.Common[variant]; - if (isMobile()) { - // 合并 options 和 snackbarConstants.Mobile - options = { ...options, ...snackbarConstants.Mobile }; - } - return options; + let options = snackbarConstants.Common[variant]; + if (isMobile()) { + // 合并 options 和 snackbarConstants.Mobile + options = {...options, ...snackbarConstants.Mobile}; + } + return options; } export function showError(error) { - if (error.message) { - if (error.name === 'AxiosError') { - switch (error.response.status) { - case 429: - enqueueSnackbar('错误:请求次数过多,请稍后再试!', getSnackbarOptions('ERROR')); - break; - case 500: - enqueueSnackbar('错误:服务器内部错误,请联系管理员!', getSnackbarOptions('ERROR')); - break; - case 405: - enqueueSnackbar('本站仅作演示之用,无服务端!', getSnackbarOptions('INFO')); - break; - default: - enqueueSnackbar('错误:' + error.message, getSnackbarOptions('ERROR')); - } - return; + if (error.message) { + if (error.name === 'AxiosError') { + switch (error.response.status) { + case 429: + enqueueSnackbar('错误:请求次数过多,请稍后再试!', getSnackbarOptions('ERROR')); + break; + case 500: + enqueueSnackbar('错误:服务器内部错误,请联系管理员!', getSnackbarOptions('ERROR')); + break; + case 405: + enqueueSnackbar('本站仅作演示之用,无服务端!', getSnackbarOptions('INFO')); + break; + default: + enqueueSnackbar('错误:' + error.message, getSnackbarOptions('ERROR')); + } + return; + } + } else { + enqueueSnackbar('错误:' + error, getSnackbarOptions('ERROR')); } - } else { - enqueueSnackbar('错误:' + error, getSnackbarOptions('ERROR')); - } } export function showNotice(message, isHTML = false) { - if (isHTML) { - enqueueSnackbar(, getSnackbarOptions('NOTICE')); - } else { - enqueueSnackbar(message, getSnackbarOptions('NOTICE')); - } + if (isHTML) { + enqueueSnackbar(, getSnackbarOptions('NOTICE')); + } else { + enqueueSnackbar(message, getSnackbarOptions('NOTICE')); + } } export function showWarning(message) { - enqueueSnackbar(message, getSnackbarOptions('WARNING')); + enqueueSnackbar(message, getSnackbarOptions('WARNING')); } export function showSuccess(message) { - enqueueSnackbar(message, getSnackbarOptions('SUCCESS')); + enqueueSnackbar(message, getSnackbarOptions('SUCCESS')); } export function showInfo(message) { - enqueueSnackbar(message, getSnackbarOptions('INFO')); + enqueueSnackbar(message, getSnackbarOptions('INFO')); } export async function getOAuthState() { - const res = await API.get('/api/oauth/state'); - const { success, message, data } = res.data; - if (success) { - return data; - } else { - showError(message); - return ''; - } + const res = await API.get('/api/oauth/state'); + const {success, message, data} = res.data; + if (success) { + return data; + } else { + showError(message); + return ''; + } } export async function onGitHubOAuthClicked(github_client_id, openInNewTab = false) { - const state = await getOAuthState(); - if (!state) return; - let url = `https://github.com/login/oauth/authorize?client_id=${github_client_id}&state=${state}&scope=user:email`; - if (openInNewTab) { - window.open(url); - } else { - window.location.href = url; - } + const state = await getOAuthState(); + if (!state) return; + let url = `https://github.com/login/oauth/authorize?client_id=${github_client_id}&state=${state}&scope=user:email`; + if (openInNewTab) { + window.open(url); + } else { + window.location.href = url; + } } export async function onLarkOAuthClicked(lark_client_id) { - const state = await getOAuthState(); - if (!state) return; - let redirect_uri = `${window.location.origin}/oauth/lark`; - window.open(`https://accounts.feishu.cn/open-apis/authen/v1/authorize?redirect_uri=${redirect_uri}&client_id=${lark_client_id}&state=${state}`); + const state = await getOAuthState(); + if (!state) return; + let redirect_uri = `${window.location.origin}/oauth/lark`; + window.open(`https://accounts.feishu.cn/open-apis/authen/v1/authorize?redirect_uri=${redirect_uri}&client_id=${lark_client_id}&state=${state}`); } export async function onOidcClicked(auth_url, client_id, openInNewTab = false) { - const state = await getOAuthState(); - if (!state) return; - const redirect_uri = `${window.location.origin}/oauth/oidc`; - const response_type = "code"; - const scope = "openid profile email"; - const url = `${auth_url}?client_id=${client_id}&redirect_uri=${redirect_uri}&response_type=${response_type}&scope=${scope}&state=${state}`; - if (openInNewTab) { - window.open(url); - } else - { - window.location.href = url; - } + const state = await getOAuthState(); + if (!state) return; + const redirect_uri = `${window.location.origin}/oauth/oidc`; + const response_type = "code"; + const scope = "openid profile email"; + const url = `${auth_url}?client_id=${client_id}&redirect_uri=${redirect_uri}&response_type=${response_type}&scope=${scope}&state=${state}`; + if (openInNewTab) { + window.open(url); + } else { + window.location.href = url; + } } export function isAdmin() { - let user = localStorage.getItem('user'); - if (!user) return false; - user = JSON.parse(user); - return user.role >= 10; + let user = localStorage.getItem('user'); + if (!user) return false; + user = JSON.parse(user); + return user.role >= 10; } 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; + 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 calculateQuota(quota, digits = 2) { - let quotaPerUnit = localStorage.getItem('quota_per_unit'); - quotaPerUnit = parseFloat(quotaPerUnit); + let quotaPerUnit = localStorage.getItem('quota_per_unit'); + quotaPerUnit = parseFloat(quotaPerUnit); - return (quota / quotaPerUnit).toFixed(digits); + return (quota / quotaPerUnit).toFixed(digits); } export function renderQuota(quota, digits = 2) { - let displayInCurrency = localStorage.getItem('display_in_currency'); - displayInCurrency = displayInCurrency === 'true'; - if (displayInCurrency) { - return '$' + calculateQuota(quota, digits); - } - return renderNumber(quota); + let displayInCurrency = localStorage.getItem('display_in_currency'); + displayInCurrency = displayInCurrency === 'true'; + if (displayInCurrency) { + return '$' + calculateQuota(quota, digits); + } + return renderNumber(quota); } export const verifyJSON = (str) => { - try { - JSON.parse(str); - } catch (e) { - return false; - } - return true; + try { + JSON.parse(str); + } catch (e) { + return false; + } + return true; }; export function renderNumber(num) { - if (num >= 1000000000) { - return (num / 1000000000).toFixed(1) + 'B'; - } else if (num >= 1000000) { - return (num / 1000000).toFixed(1) + 'M'; - } else if (num >= 10000) { - return (num / 1000).toFixed(1) + 'k'; - } else { - return num; - } + if (num >= 1000000000) { + return (num / 1000000000).toFixed(1) + 'B'; + } else if (num >= 1000000) { + return (num / 1000000).toFixed(1) + 'M'; + } else if (num >= 10000) { + return (num / 1000).toFixed(1) + 'k'; + } else { + return num; + } } export function renderQuotaWithPrompt(quota, digits) { - let displayInCurrency = localStorage.getItem('display_in_currency'); - displayInCurrency = displayInCurrency === 'true'; - if (displayInCurrency) { - return `(等价金额:${renderQuota(quota, digits)})`; - } - return ''; + let displayInCurrency = localStorage.getItem('display_in_currency'); + displayInCurrency = displayInCurrency === 'true'; + if (displayInCurrency) { + return `(等价金额:${renderQuota(quota, digits)})`; + } + return ''; } 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(); + 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 function removeTrailingSlash(url) { - if (url.endsWith('/')) { - return url.slice(0, -1); - } else { - return url; - } + if (url.endsWith('/')) { + return url.slice(0, -1); + } else { + return url; + } } let channelModels = undefined; + export async function loadChannelModels() { - const res = await API.get('/api/models'); - const { success, data } = res.data; - if (!success) { - return; - } - channelModels = data; - localStorage.setItem('channel_models', JSON.stringify(data)); + const res = await API.get('/api/models'); + const {success, data} = res.data; + if (!success) { + return; + } + channelModels = data; + localStorage.setItem('channel_models', JSON.stringify(data)); } export function getChannelModels(type) { - if (channelModels !== undefined && type in channelModels) { - return channelModels[type]; - } - let models = localStorage.getItem('channel_models'); - if (!models) { + if (channelModels !== undefined && type in channelModels) { + return channelModels[type]; + } + let models = localStorage.getItem('channel_models'); + if (!models) { + return []; + } + channelModels = JSON.parse(models); + if (type in channelModels) { + return channelModels[type]; + } return []; - } - channelModels = JSON.parse(models); - if (type in channelModels) { - return channelModels[type]; - } - return []; } export function copy(text, name = '') { - if (navigator.clipboard && navigator.clipboard.writeText) { - navigator.clipboard.writeText(text).then(() => { - showNotice(`复制${name}成功!`, true); - }, () => { - text = `复制${name}失败,请手动复制:

${text}`; - enqueueSnackbar(, getSnackbarOptions('COPY')); - }); - } else { - const textArea = document.createElement("textarea"); - textArea.value = text; - document.body.appendChild(textArea); - textArea.select(); - try { - document.execCommand('copy'); - showNotice(`复制${name}成功!`, true); - } catch (err) { - text = `复制${name}失败,请手动复制:

${text}`; - enqueueSnackbar(, getSnackbarOptions('COPY')); + if (navigator.clipboard && navigator.clipboard.writeText) { + navigator.clipboard.writeText(text).then(() => { + showNotice(`复制${name}成功!`, true); + }, () => { + text = `复制${name}失败,请手动复制:

${text}`; + enqueueSnackbar(, getSnackbarOptions('COPY')); + }); + } else { + const textArea = document.createElement("textarea"); + textArea.value = text; + document.body.appendChild(textArea); + textArea.select(); + try { + document.execCommand('copy'); + showNotice(`复制${name}成功!`, true); + } catch (err) { + text = `复制${name}失败,请手动复制:

${text}`; + enqueueSnackbar(, getSnackbarOptions('COPY')); + } + document.body.removeChild(textArea); } - document.body.removeChild(textArea); - } +}