func.tsx 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import { getCookie } from "cookies-next";
  2. import JSEncrypt from "jsencrypt";
  3. export async function fetchApi(url: string, push: any, options?: RequestInit) {
  4. const token = getCookie("token");
  5. const authHeader = {
  6. Authorization: "Bearer " + token,
  7. };
  8. const requestHeader = {
  9. ...options?.headers,
  10. ...authHeader,
  11. credentials: "include",
  12. };
  13. const requestOptions = {
  14. ...options,
  15. headers: requestHeader,
  16. };
  17. const response = await fetch(url, requestOptions);
  18. try {
  19. const body = await response.json();
  20. if (response.ok) {
  21. if (body.code == 401) {
  22. push("/login");
  23. return;
  24. }
  25. }
  26. return body;
  27. } catch (error) {
  28. console.log("fetch error:", error);
  29. }
  30. }
  31. export async function fetchFile(
  32. url: string,
  33. push: any,
  34. options: RequestInit,
  35. fileName: string
  36. ) {
  37. const token = getCookie("token");
  38. const authHeader = {
  39. Authorization: "Bearer " + token,
  40. };
  41. const requestHeader = {
  42. ...options?.headers,
  43. ...authHeader,
  44. credentials: "include",
  45. };
  46. const requestOptions = {
  47. ...options,
  48. headers: requestHeader,
  49. };
  50. const response = await fetch(url, requestOptions);
  51. try {
  52. const contentType = response.headers.get("Content-Type");
  53. //如果文件处理出现了json响应信息,肯定是出错了
  54. if (contentType && contentType.includes("application/json")) {
  55. const body = await response.json();
  56. if (response.ok) {
  57. if (body.code == 401) {
  58. push("/login");
  59. return;
  60. }
  61. }
  62. } else {
  63. const blob = await response.blob();
  64. const url = window.URL.createObjectURL(blob);
  65. const a = document.createElement("a");
  66. (a.href = url), (a.download = fileName);
  67. document.body.appendChild(a);
  68. a.click();
  69. window.URL.revokeObjectURL(url);
  70. }
  71. } catch (error) {
  72. console.log("fetch file error:", error);
  73. }
  74. }
  75. //公钥
  76. const publicKey =
  77. "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu/JW5RlS6o2Cz3Vlm96u8D+aY3WvzRQyC+B8TQGjOTvtklSXbKYwoccL9RLU1IHUu+Pk1GlZM87OhULq4B3cU9AxXWj24eaxoaWSO4iuMjF7SvsQtWCEmbECJg5WTf8gRi89PjyGntawp04KfR6AXCyTWmTm2vwC+PqoQcnZl9GdNerxeLpD1k7NxSe+syMUaIgM0mVqcirzdPrIVO9v89l5RVxVVUv6XCR3Z05iK8ODQ4ITCoJB8XrGlDPa3TqDlnpME4/upLx3u6oogIRncIPw3P2kAF2viwoll0H23fKkNQvsLdH9jUw+zl0ZJjSb/e2fcMYYrT+AlER3zBOW/wIDAQAB";
  78. //私钥
  79. const privateKey =
  80. "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC78lblGVLqjYLPdWWb3q7wP5pjda/NFDIL4HxNAaM5O+2SVJdspjChxwv1EtTUgdS74+TUaVkzzs6FQurgHdxT0DFdaPbh5rGhpZI7iK4yMXtK+xC1YISZsQImDlZN/yBGLz0+PIae1rCnTgp9HoBcLJNaZOba/AL4+qhBydmX0Z016vF4ukPWTs3FJ76zIxRoiAzSZWpyKvN0+shU72/z2XlFXFVVS/pcJHdnTmIrw4NDghMKgkHxesaUM9rdOoOWekwTj+6kvHe7qiiAhGdwg/Dc/aQAXa+LCiWXQfbd8qQ1C+wt0f2NTD7OXRkmNJv97Z9wxhitP4CURHfME5b/AgMBAAECggEACOp9Ls8dvNzLuNXD5ToSKHmL9G3v0hXELgYPP4P1X1C1e3yh1lin8/TCX3TuPcqO8f7kqyL4RVnpOC8tf0ZLXnqA7QJ+u8a65IU7Q7G/OchZJfx1FXWntLbN+Eoz0+1ndYzmJd6vMDfVF4q/OqJIypaewuoIfZj49yDE/KH7vZTyQQi8dmP2Re86WjlJyt+FrWUpzQh7R/NcDaRJ1fUBpOB+PZ+WYFK4BHTmvZ6f/XDYSbuiIMEcA/BejklaIFIAv9mMZ7MBCs+pPvgtleIlvfZwmCEEwYWCnZPncYovtaeKmTY7KMjp5LbyAeK/mqblqhiXl9mp3NM1Tk6doCKbyQKBgQDkhLlG50t6BO/xl7kkDUkG5QRe6MctoiN5BB/tNlLWImOhzNka+JPu278R2n6Ls4fYD74RxKwcy8a0683TsVC1mo8S/ck6o6HlDmBB+N6IMbMF8snKksKM6yytvOj4O3V8KZdaJDGzTz/CUEIWKUfBCQmbl7iFhOwpo7bNzxA0QwKBgQDSjI2Ew0v8TUDdNfFcd3exDQm3HmA1XcTIAapmVsgcLK76IIDsJSFqA+b8cHTM1I01kiK1kadPy9ZIR1NNb5ZjCNJqzIpzTI2ZdZdBgyQh7tjw9hdzcd2n7aKXmahZ9vNgzGVOhCT4A4RmBvozCuHLpEHT431A8L04WTdLEalklQKBgA8Fenhis99te6hR5OWtyeMeIs9qVc12HwbRcpfRPli9Ifd807imJnNJFqJBzpe4UXGudzwLxZSPAJzb80e7HCcT5dvFuviT0QyRiVpM1bP2MGJvtzwNsaQ5wVIaXOYUYoCq6zwNrQawauyHAhEa3ZCe23bS3lpIho2mKVoWBmapAoGAbepMMuPVdjhKRXFUuEXx6S76RGuKJDH4ecVM1LI3M2YsTo3LX/weTn8NBfobL5dCxJWuowUPyDuMeR0rIsC/TKIdXv26xWhQf62AsgWpRkGvZVPDeFQYOAN5nxTra1PdSEpMFMotloAXjT/VO/JRYAM3DkuzZsSGs7T3hawJt2UCgYEAmVE0x7c1zxD62h68v2jmLdPbG5UVmuSSwVod2PqSv5WDY/7tg1HUh4/UcSX/9rbXXzacMTBE/aJDZkusFSThsmMFkpKmt5a2JOtsbzwFHo0kSCOngUBwxyPY+JEMgDJo9Y+6fnYNnhQklrjiyAdaUGb4YrPQSNas1G29OzE5Mcs=";
  81. //加密数据
  82. export function encrypt(content: string) {
  83. const encryptor = new JSEncrypt();
  84. encryptor.setPublicKey(publicKey);
  85. return encryptor.encrypt(content);
  86. }
  87. //解密数据
  88. export function decrypt(content: string) {
  89. const encryptor = new JSEncrypt();
  90. encryptor.setPrivateKey(privateKey);
  91. return encryptor.decrypt(content);
  92. }
  93. //获取当前浏览器是否深色模式
  94. export function displayModeIsDark() {
  95. if (typeof window !== 'undefined') {
  96. return window.matchMedia("(prefers-color-scheme: dark)").matches;
  97. }
  98. return false;
  99. }
  100. //动态获取浏览器是否深色模式
  101. export function watchDarkModeChange(callback: (value: boolean) => void) {
  102. if (typeof window !== 'undefined') {
  103. const darkModeQuery = window.matchMedia("(prefers-color-scheme: dark)");
  104. const onChange = (e: any) => {
  105. callback(e.matches);
  106. };
  107. darkModeQuery.addEventListener("change", onChange);
  108. return () => {
  109. darkModeQuery.removeEventListener("change", onChange);
  110. };
  111. }
  112. return () => {};
  113. }