utils.js 5.6 KB

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