utils.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. import { toast } from 'react-toastify';
  2. import { toastConstants } from '../constants';
  3. export function isAdmin() {
  4. let user = localStorage.getItem('user');
  5. if (!user) return false;
  6. user = JSON.parse(user);
  7. return user.role >= 10;
  8. }
  9. export function isRoot() {
  10. let user = localStorage.getItem('user');
  11. if (!user) return false;
  12. user = JSON.parse(user);
  13. return user.role >= 100;
  14. }
  15. export function getSystemName() {
  16. let system_name = localStorage.getItem('system_name');
  17. if (!system_name) return 'One API';
  18. return system_name;
  19. }
  20. export function getLogo() {
  21. let logo = localStorage.getItem('logo');
  22. if (!logo) return '/logo.png';
  23. return logo
  24. }
  25. export function getFooterHTML() {
  26. return localStorage.getItem('footer_html');
  27. }
  28. export async function copy(text) {
  29. let okay = true;
  30. try {
  31. await navigator.clipboard.writeText(text);
  32. } catch (e) {
  33. okay = false;
  34. console.error(e);
  35. }
  36. return okay;
  37. }
  38. export function isMobile() {
  39. return window.innerWidth <= 600;
  40. }
  41. let showErrorOptions = { autoClose: toastConstants.ERROR_TIMEOUT };
  42. let showWarningOptions = { autoClose: toastConstants.WARNING_TIMEOUT };
  43. let showSuccessOptions = { autoClose: toastConstants.SUCCESS_TIMEOUT };
  44. let showInfoOptions = { autoClose: toastConstants.INFO_TIMEOUT };
  45. let showNoticeOptions = { autoClose: false };
  46. if (isMobile()) {
  47. showErrorOptions.position = 'top-center';
  48. // showErrorOptions.transition = 'flip';
  49. showSuccessOptions.position = 'top-center';
  50. // showSuccessOptions.transition = 'flip';
  51. showInfoOptions.position = 'top-center';
  52. // showInfoOptions.transition = 'flip';
  53. showNoticeOptions.position = 'top-center';
  54. // showNoticeOptions.transition = 'flip';
  55. }
  56. export function showError(error) {
  57. console.error(error);
  58. if (error.message) {
  59. if (error.name === 'AxiosError') {
  60. switch (error.response.status) {
  61. case 401:
  62. // toast.error('错误:未登录或登录已过期,请重新登录!', showErrorOptions);
  63. window.location.href = '/login?expired=true';
  64. break;
  65. case 429:
  66. toast.error('错误:请求次数过多,请稍后再试!', showErrorOptions);
  67. break;
  68. case 500:
  69. toast.error('错误:服务器内部错误,请联系管理员!', showErrorOptions);
  70. break;
  71. case 405:
  72. toast.info('本站仅作演示之用,无服务端!');
  73. break;
  74. default:
  75. toast.error('错误:' + error.message, showErrorOptions);
  76. }
  77. return;
  78. }
  79. toast.error('错误:' + error.message, showErrorOptions);
  80. } else {
  81. toast.error('错误:' + error, showErrorOptions);
  82. }
  83. }
  84. export function showWarning(message) {
  85. toast.warn(message, showWarningOptions);
  86. }
  87. export function showSuccess(message) {
  88. toast.success(message, showSuccessOptions);
  89. }
  90. export function showInfo(message) {
  91. toast.info(message, showInfoOptions);
  92. }
  93. export function showNotice(message) {
  94. toast.info(message, showNoticeOptions);
  95. }
  96. export function openPage(url) {
  97. window.open(url);
  98. }
  99. export function removeTrailingSlash(url) {
  100. if (url.endsWith('/')) {
  101. return url.slice(0, -1);
  102. } else {
  103. return url;
  104. }
  105. }
  106. export function timestamp2string(timestamp) {
  107. let date = new Date(timestamp * 1000);
  108. let year = date.getFullYear().toString();
  109. let month = (date.getMonth() + 1).toString();
  110. let day = date.getDate().toString();
  111. let hour = date.getHours().toString();
  112. let minute = date.getMinutes().toString();
  113. let second = date.getSeconds().toString();
  114. if (month.length === 1) {
  115. month = '0' + month;
  116. }
  117. if (day.length === 1) {
  118. day = '0' + day;
  119. }
  120. if (hour.length === 1) {
  121. hour = '0' + hour;
  122. }
  123. if (minute.length === 1) {
  124. minute = '0' + minute;
  125. }
  126. if (second.length === 1) {
  127. second = '0' + second;
  128. }
  129. return (
  130. year +
  131. '-' +
  132. month +
  133. '-' +
  134. day +
  135. ' ' +
  136. hour +
  137. ':' +
  138. minute +
  139. ':' +
  140. second
  141. );
  142. }
  143. export function downloadTextAsFile(text, filename) {
  144. let blob = new Blob([text], { type: 'text/plain;charset=utf-8' });
  145. let url = URL.createObjectURL(blob);
  146. let a = document.createElement('a');
  147. a.href = url;
  148. a.download = filename;
  149. a.click();
  150. }
  151. export const verifyJSON = (str) => {
  152. try {
  153. JSON.parse(str);
  154. } catch (e) {
  155. return false;
  156. }
  157. return true;
  158. };