diff --git a/package-lock.json b/package-lock.json
index 64aca88..cf1bc83 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1428,6 +1428,23 @@
       "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz",
       "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
     },
+    "asn1.js": {
+      "version": "4.10.1",
+      "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-4.10.1.tgz",
+      "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==",
+      "requires": {
+        "bn.js": "^4.0.0",
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.2",
+          "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.2.tgz",
+          "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="
+        }
+      }
+    },
     "async": {
       "version": "3.2.6",
       "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz",
@@ -1502,6 +1519,11 @@
       "resolved": "https://registry.npmmirror.com/blueimp-canvas-to-blob/-/blueimp-canvas-to-blob-3.29.0.tgz",
       "integrity": "sha512-0pcSSGxC0QxT+yVkivxIqW0Y4VlO2XSDPofBAqoJ1qJxgH9eiUDLv50Rixij2cDuEfx4M6DpD9UGZpRhT5Q8qg=="
     },
+    "bn.js": {
+      "version": "5.2.2",
+      "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.2.tgz",
+      "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw=="
+    },
     "brace-expansion": {
       "version": "2.0.1",
       "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -1518,6 +1540,107 @@
         "fill-range": "^7.1.1"
       }
     },
+    "brorand": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz",
+      "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="
+    },
+    "browserify-aes": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz",
+      "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==",
+      "requires": {
+        "buffer-xor": "^1.0.3",
+        "cipher-base": "^1.0.0",
+        "create-hash": "^1.1.0",
+        "evp_bytestokey": "^1.0.3",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "browserify-cipher": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz",
+      "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==",
+      "requires": {
+        "browserify-aes": "^1.0.4",
+        "browserify-des": "^1.0.0",
+        "evp_bytestokey": "^1.0.0"
+      }
+    },
+    "browserify-des": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz",
+      "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==",
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "des.js": "^1.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
+    "browserify-rsa": {
+      "version": "4.1.1",
+      "resolved": "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.1.tgz",
+      "integrity": "sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==",
+      "requires": {
+        "bn.js": "^5.2.1",
+        "randombytes": "^2.1.0",
+        "safe-buffer": "^5.2.1"
+      },
+      "dependencies": {
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+        }
+      }
+    },
+    "browserify-sign": {
+      "version": "4.2.3",
+      "resolved": "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.3.tgz",
+      "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==",
+      "requires": {
+        "bn.js": "^5.2.1",
+        "browserify-rsa": "^4.1.0",
+        "create-hash": "^1.2.0",
+        "create-hmac": "^1.1.7",
+        "elliptic": "^6.5.5",
+        "hash-base": "~3.0",
+        "inherits": "^2.0.4",
+        "parse-asn1": "^5.1.7",
+        "readable-stream": "^2.3.8",
+        "safe-buffer": "^5.2.1"
+      },
+      "dependencies": {
+        "readable-stream": {
+          "version": "2.3.8",
+          "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz",
+          "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
+          "requires": {
+            "core-util-is": "~1.0.0",
+            "inherits": "~2.0.3",
+            "isarray": "~1.0.0",
+            "process-nextick-args": "~2.0.0",
+            "safe-buffer": "~5.1.1",
+            "string_decoder": "~1.1.1",
+            "util-deprecate": "~1.0.1"
+          },
+          "dependencies": {
+            "safe-buffer": {
+              "version": "5.1.2",
+              "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz",
+              "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
+            }
+          }
+        },
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+        }
+      }
+    },
     "browserslist": {
       "version": "4.24.2",
       "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.2.tgz",
@@ -1548,6 +1671,11 @@
       "resolved": "https://registry.npmmirror.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz",
       "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A=="
     },
+    "buffer-xor": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz",
+      "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ=="
+    },
     "buffers": {
       "version": "0.1.1",
       "resolved": "https://registry.npmmirror.com/buffers/-/buffers-0.1.1.tgz",
@@ -1633,6 +1761,22 @@
       "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz",
       "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ=="
     },
+    "cipher-base": {
+      "version": "1.0.6",
+      "resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.6.tgz",
+      "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==",
+      "requires": {
+        "inherits": "^2.0.4",
+        "safe-buffer": "^5.2.1"
+      },
+      "dependencies": {
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+        }
+      }
+    },
     "citty": {
       "version": "0.1.6",
       "resolved": "https://registry.npmmirror.com/citty/-/citty-0.1.6.tgz",
@@ -1743,6 +1887,47 @@
         "readable-stream": "^3.4.0"
       }
     },
+    "create-ecdh": {
+      "version": "4.0.4",
+      "resolved": "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz",
+      "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==",
+      "requires": {
+        "bn.js": "^4.1.0",
+        "elliptic": "^6.5.3"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.2",
+          "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.2.tgz",
+          "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="
+        }
+      }
+    },
+    "create-hash": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz",
+      "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==",
+      "requires": {
+        "cipher-base": "^1.0.1",
+        "inherits": "^2.0.1",
+        "md5.js": "^1.3.4",
+        "ripemd160": "^2.0.1",
+        "sha.js": "^2.4.0"
+      }
+    },
+    "create-hmac": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz",
+      "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==",
+      "requires": {
+        "cipher-base": "^1.0.3",
+        "create-hash": "^1.1.0",
+        "inherits": "^2.0.1",
+        "ripemd160": "^2.0.0",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
     "cross-spawn": {
       "version": "7.0.3",
       "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1763,6 +1948,25 @@
         }
       }
     },
+    "crypto-browserify": {
+      "version": "3.12.1",
+      "resolved": "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.1.tgz",
+      "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==",
+      "requires": {
+        "browserify-cipher": "^1.0.1",
+        "browserify-sign": "^4.2.3",
+        "create-ecdh": "^4.0.4",
+        "create-hash": "^1.2.0",
+        "create-hmac": "^1.1.7",
+        "diffie-hellman": "^5.0.3",
+        "hash-base": "~3.0.4",
+        "inherits": "^2.0.4",
+        "pbkdf2": "^3.1.2",
+        "public-encrypt": "^4.0.3",
+        "randombytes": "^2.1.0",
+        "randomfill": "^1.0.4"
+      }
+    },
     "csstype": {
       "version": "2.6.21",
       "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz",
@@ -1777,6 +1981,11 @@
         "type": "^2.7.2"
       }
     },
+    "data-uri-to-buffer": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
+      "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="
+    },
     "dayjs": {
       "version": "1.11.13",
       "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
@@ -1796,6 +2005,11 @@
         "ms": "^2.1.3"
       }
     },
+    "decode-uri-component": {
+      "version": "0.4.1",
+      "resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.4.1.tgz",
+      "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ=="
+    },
     "deep-pick-omit": {
       "version": "1.2.1",
       "resolved": "https://registry.npmmirror.com/deep-pick-omit/-/deep-pick-omit-1.2.1.tgz",
@@ -1811,6 +2025,15 @@
       "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz",
       "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="
     },
+    "des.js": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmmirror.com/des.js/-/des.js-1.1.0.tgz",
+      "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==",
+      "requires": {
+        "inherits": "^2.0.1",
+        "minimalistic-assert": "^1.0.0"
+      }
+    },
     "destr": {
       "version": "2.0.3",
       "resolved": "https://registry.npmmirror.com/destr/-/destr-2.0.3.tgz",
@@ -1822,6 +2045,23 @@
       "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
       "dev": true
     },
+    "diffie-hellman": {
+      "version": "5.0.3",
+      "resolved": "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz",
+      "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==",
+      "requires": {
+        "bn.js": "^4.1.0",
+        "miller-rabin": "^4.0.0",
+        "randombytes": "^2.0.0"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.2",
+          "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.2.tgz",
+          "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="
+        }
+      }
+    },
     "dom7": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz",
@@ -1886,6 +2126,27 @@
         "normalize-wheel-es": "^1.2.0"
       }
     },
+    "elliptic": {
+      "version": "6.6.1",
+      "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.6.1.tgz",
+      "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
+      "requires": {
+        "bn.js": "^4.11.9",
+        "brorand": "^1.1.0",
+        "hash.js": "^1.0.0",
+        "hmac-drbg": "^1.0.1",
+        "inherits": "^2.0.4",
+        "minimalistic-assert": "^1.0.1",
+        "minimalistic-crypto-utils": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.2",
+          "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.2.tgz",
+          "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="
+        }
+      }
+    },
     "end-of-stream": {
       "version": "1.4.4",
       "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz",
@@ -2015,6 +2276,15 @@
       "resolved": "https://registry.npmmirror.com/event-target-shim/-/event-target-shim-5.0.1.tgz",
       "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="
     },
+    "evp_bytestokey": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz",
+      "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==",
+      "requires": {
+        "md5.js": "^1.3.4",
+        "safe-buffer": "^5.1.1"
+      }
+    },
     "exceljs": {
       "version": "4.4.0",
       "resolved": "https://registry.npmmirror.com/exceljs/-/exceljs-4.4.0.tgz",
@@ -2084,6 +2354,22 @@
         "reusify": "^1.0.4"
       }
     },
+    "fetch-blob": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmmirror.com/fetch-blob/-/fetch-blob-3.2.0.tgz",
+      "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
+      "requires": {
+        "node-domexception": "^1.0.0",
+        "web-streams-polyfill": "^3.0.3"
+      },
+      "dependencies": {
+        "web-streams-polyfill": {
+          "version": "3.3.3",
+          "resolved": "https://registry.npmmirror.com/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz",
+          "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw=="
+        }
+      }
+    },
     "file-saver": {
       "version": "2.0.5",
       "resolved": "https://registry.npmmirror.com/file-saver/-/file-saver-2.0.5.tgz",
@@ -2097,6 +2383,11 @@
         "to-regex-range": "^5.0.1"
       }
     },
+    "filter-obj": {
+      "version": "5.1.0",
+      "resolved": "https://registry.npmmirror.com/filter-obj/-/filter-obj-5.1.0.tgz",
+      "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng=="
+    },
     "follow-redirects": {
       "version": "1.15.9",
       "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz",
@@ -2126,6 +2417,14 @@
         "web-streams-polyfill": "4.0.0-beta.3"
       }
     },
+    "formdata-polyfill": {
+      "version": "4.0.10",
+      "resolved": "https://registry.npmmirror.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
+      "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
+      "requires": {
+        "fetch-blob": "^3.1.2"
+      }
+    },
     "frac": {
       "version": "1.1.2",
       "resolved": "https://registry.npmmirror.com/frac/-/frac-1.1.2.tgz",
@@ -2279,17 +2578,52 @@
       "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz",
       "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
     },
+    "hash-base": {
+      "version": "3.0.5",
+      "resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.0.5.tgz",
+      "integrity": "sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==",
+      "requires": {
+        "inherits": "^2.0.4",
+        "safe-buffer": "^5.2.1"
+      },
+      "dependencies": {
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+        }
+      }
+    },
     "hash-sum": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz",
       "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg=="
     },
+    "hash.js": {
+      "version": "1.1.7",
+      "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz",
+      "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
+      "requires": {
+        "inherits": "^2.0.3",
+        "minimalistic-assert": "^1.0.1"
+      }
+    },
     "he": {
       "version": "1.2.0",
       "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz",
       "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
       "dev": true
     },
+    "hmac-drbg": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
+      "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
+      "requires": {
+        "hash.js": "^1.0.3",
+        "minimalistic-assert": "^1.0.0",
+        "minimalistic-crypto-utils": "^1.0.1"
+      }
+    },
     "hookable": {
       "version": "5.5.3",
       "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz",
@@ -2744,6 +3078,16 @@
         "uc.micro": "^2.1.0"
       }
     },
+    "md5.js": {
+      "version": "1.3.5",
+      "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz",
+      "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==",
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      }
+    },
     "mdurl": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz",
@@ -2779,6 +3123,22 @@
         "picomatch": "^2.3.1"
       }
     },
+    "miller-rabin": {
+      "version": "4.0.1",
+      "resolved": "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz",
+      "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==",
+      "requires": {
+        "bn.js": "^4.0.0",
+        "brorand": "^1.0.1"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.2",
+          "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.2.tgz",
+          "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="
+        }
+      }
+    },
     "mime": {
       "version": "1.6.0",
       "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz",
@@ -2812,6 +3172,16 @@
       "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-4.0.0.tgz",
       "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw=="
     },
+    "minimalistic-assert": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
+      "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="
+    },
+    "minimalistic-crypto-utils": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
+      "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
+    },
     "minimatch": {
       "version": "9.0.5",
       "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz",
@@ -2930,11 +3300,13 @@
       "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ=="
     },
     "node-fetch": {
-      "version": "2.7.0",
-      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
-      "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+      "version": "3.3.2",
+      "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-3.3.2.tgz",
+      "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
       "requires": {
-        "whatwg-url": "^5.0.0"
+        "data-uri-to-buffer": "^4.0.0",
+        "fetch-blob": "^3.1.4",
+        "formdata-polyfill": "^4.0.10"
       }
     },
     "node-fetch-native": {
@@ -3050,6 +3422,14 @@
             "undici-types": "~5.26.4"
           }
         },
+        "node-fetch": {
+          "version": "2.7.0",
+          "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz",
+          "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
+          "requires": {
+            "whatwg-url": "^5.0.0"
+          }
+        },
         "undici-types": {
           "version": "5.26.5",
           "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz",
@@ -3062,6 +3442,26 @@
       "resolved": "https://registry.npmmirror.com/pako/-/pako-2.1.0.tgz",
       "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="
     },
+    "parse-asn1": {
+      "version": "5.1.7",
+      "resolved": "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.7.tgz",
+      "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==",
+      "requires": {
+        "asn1.js": "^4.10.1",
+        "browserify-aes": "^1.2.0",
+        "evp_bytestokey": "^1.0.3",
+        "hash-base": "~3.0",
+        "pbkdf2": "^3.1.2",
+        "safe-buffer": "^5.2.1"
+      },
+      "dependencies": {
+        "safe-buffer": {
+          "version": "5.2.1",
+          "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+          "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+        }
+      }
+    },
     "parse-node-version": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/parse-node-version/-/parse-node-version-1.0.1.tgz",
@@ -3094,6 +3494,18 @@
       "resolved": "https://registry.npmmirror.com/pathe/-/pathe-1.1.2.tgz",
       "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ=="
     },
+    "pbkdf2": {
+      "version": "3.1.2",
+      "resolved": "https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz",
+      "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==",
+      "requires": {
+        "create-hash": "^1.1.2",
+        "create-hmac": "^1.1.4",
+        "ripemd160": "^2.0.1",
+        "safe-buffer": "^5.0.1",
+        "sha.js": "^2.4.8"
+      }
+    },
     "perfect-debounce": {
       "version": "1.0.0",
       "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz",
@@ -3189,11 +3601,41 @@
       "dev": true,
       "optional": true
     },
+    "public-encrypt": {
+      "version": "4.0.3",
+      "resolved": "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz",
+      "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==",
+      "requires": {
+        "bn.js": "^4.1.0",
+        "browserify-rsa": "^4.0.0",
+        "create-hash": "^1.1.0",
+        "parse-asn1": "^5.0.0",
+        "randombytes": "^2.0.1",
+        "safe-buffer": "^5.1.2"
+      },
+      "dependencies": {
+        "bn.js": {
+          "version": "4.12.2",
+          "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.2.tgz",
+          "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw=="
+        }
+      }
+    },
     "punycode.js": {
       "version": "2.3.1",
       "resolved": "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz",
       "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="
     },
+    "query-string": {
+      "version": "9.1.2",
+      "resolved": "https://registry.npmmirror.com/query-string/-/query-string-9.1.2.tgz",
+      "integrity": "sha512-s3UlTyjxRux4KjwWaJsjh1Mp8zoCkSGKirbD9H89pEM9UOZsfpRZpdfzvsy2/mGlLfC3NnYVpy2gk7jXITHEtA==",
+      "requires": {
+        "decode-uri-component": "^0.4.1",
+        "filter-obj": "^5.1.0",
+        "split-on-first": "^3.0.0"
+      }
+    },
     "querystring": {
       "version": "0.2.1",
       "resolved": "https://registry.npmmirror.com/querystring/-/querystring-0.2.1.tgz",
@@ -3204,6 +3646,23 @@
       "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz",
       "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
     },
+    "randombytes": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz",
+      "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+      "requires": {
+        "safe-buffer": "^5.1.0"
+      }
+    },
+    "randomfill": {
+      "version": "1.0.4",
+      "resolved": "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz",
+      "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==",
+      "requires": {
+        "randombytes": "^2.0.5",
+        "safe-buffer": "^5.1.0"
+      }
+    },
     "rc9": {
       "version": "2.1.2",
       "resolved": "https://registry.npmmirror.com/rc9/-/rc9-2.1.2.tgz",
@@ -3275,6 +3734,15 @@
         "glob": "^7.1.3"
       }
     },
+    "ripemd160": {
+      "version": "2.0.2",
+      "resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz",
+      "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==",
+      "requires": {
+        "hash-base": "^3.0.0",
+        "inherits": "^2.0.1"
+      }
+    },
     "rollup": {
       "version": "4.24.0",
       "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.24.0.tgz",
@@ -3371,6 +3839,15 @@
       "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz",
       "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="
     },
+    "sha.js": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz",
+      "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==",
+      "requires": {
+        "inherits": "^2.0.1",
+        "safe-buffer": "^5.0.1"
+      }
+    },
     "shebang-command": {
       "version": "2.0.0",
       "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -3448,6 +3925,11 @@
       "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
       "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA=="
     },
+    "split-on-first": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmmirror.com/split-on-first/-/split-on-first-3.0.0.tgz",
+      "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA=="
+    },
     "ssf": {
       "version": "0.11.2",
       "resolved": "https://registry.npmmirror.com/ssf/-/ssf-0.11.2.tgz",
diff --git a/package.json b/package.json
index d83f4e4..27a2d82 100644
--- a/package.json
+++ b/package.json
@@ -16,15 +16,18 @@
     "@wangeditor/editor-for-vue": "^5.1.12",
     "axios": "^1.7.2",
     "compressorjs": "^1.2.1",
+    "crypto-browserify": "^3.12.1",
     "dayjs": "^1.11.13",
     "element-plus": "^2.9.0",
     "exceljs": "^4.4.0",
     "file-saver": "^2.0.5",
     "markdown-it": "^14.1.0",
     "mitt": "^3.0.1",
+    "node-fetch": "^3.3.2",
     "openai": "^4.89.0",
     "pinia": "^2.0.35",
     "pinia-plugin-persistedstate": "^4.1.2",
+    "query-string": "^9.1.2",
     "querystring": "^0.2.1",
     "shrinkpng": "^1.2.0-beta.1",
     "vue": "^3.2.31",
diff --git a/src/api/myAxios.ts b/src/api/myAxios.ts
index 66ca6df..5d644d6 100644
--- a/src/api/myAxios.ts
+++ b/src/api/myAxios.ts
@@ -4,9 +4,9 @@ import router from '../router'
 
 const myAxios = axios.create({
     withCredentials:true,
-    // baseURL: 'http://localhost:9092/api'
+    baseURL: 'http://localhost:9092/api'
     // baseURL: 'http://154.8.193.216:9093/api'  //隋雨霏服务器测试环境
-    baseURL: 'https://www.carboner.cn:8888/api'
+    // baseURL: 'https://www.carboner.cn:8888/api'
     // baseURL:'http://1.94.237.210:9092/api'
 });
 // 添加请求拦截器
diff --git a/src/router/index.ts b/src/router/index.ts
index 8bcf760..d8854a0 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -1,10 +1,10 @@
-import {createRouter, createWebHashHistory} from "vue-router";
+import {createRouter, createWebHistory} from "vue-router";
 import {constantRoute } from "./routes";
 import { userStore } from "@/store/userStore";
 // 创建路由实例并传递 `routes` 配置
 const router = createRouter({
     // 4. 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式。
-    history: createWebHashHistory(),
+    history: createWebHistory(),
     routes: constantRoute , // `routes: routes` 的缩写
 })
 //路由的请求拦截器 
diff --git a/src/router/routes.ts b/src/router/routes.ts
index d832a78..238169c 100644
--- a/src/router/routes.ts
+++ b/src/router/routes.ts
@@ -1,6 +1,10 @@
 export const constantRoute = [
     {
         path: '/',
+        redirect: '/login'
+    },
+    {
+        path: '/login',
         name: 'login',
         component: () => import("@/views/Login.vue"),
         meta: {
@@ -515,19 +519,9 @@ export const constantRoute = [
             }
         ]
     },
-    {
-        path: '/Test',
-        name: '测试页面',
-        component: () => import("../views/test.vue")
-    },
-    {
-        path: '/Test2',
-        name: '测试页面2',
-        component: () => import("../views/test2.vue")
-    },
-    {
-        path: '/Test3',
-        name: '测试页面3',
-        component: () => import("../views/excelTest.vue")
-    }
+    // {
+    //     path: '/Test',
+    //     name: '测试页面',
+    //     component: () => import("@/views/test.vue")
+    // }
 ]
diff --git a/src/utils/imgUpload/ImgSingleUpload.vue b/src/utils/imgUpload/ImgSingleUpload.vue
index 0892010..e6a906d 100644
--- a/src/utils/imgUpload/ImgSingleUpload.vue
+++ b/src/utils/imgUpload/ImgSingleUpload.vue
@@ -39,7 +39,7 @@ interface Emits {
 
 
 const compressImage =(file: any)=> {   //图片压缩方法
-  // console.log('compressImage',file)
+  console.log('compressImage',file)
   return new Promise((resolve, reject) => {
     new Compressor(file.file, {
       quality: 0.2,   //压缩质量,越高文件越大
diff --git a/src/views/ActivityMessageManagement/MessageCenter.vue b/src/views/ActivityMessageManagement/MessageCenter.vue
index 68aabde..63d6259 100644
--- a/src/views/ActivityMessageManagement/MessageCenter.vue
+++ b/src/views/ActivityMessageManagement/MessageCenter.vue
@@ -48,7 +48,7 @@
     <!-- 分页器 -->
     <div style="padding: 10px 0">
       <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                      :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                      :total="total"/>
     </div>
@@ -67,7 +67,7 @@ const total = ref(0); //总页数
 const idList = ref<Number[]>([]);
 const searchParams: any = ref({ //封装分页
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend" //降序
 })
diff --git a/src/views/Commodity/MerchandiseCenter.vue b/src/views/Commodity/MerchandiseCenter.vue
index 2fc6663..b3bef10 100644
--- a/src/views/Commodity/MerchandiseCenter.vue
+++ b/src/views/Commodity/MerchandiseCenter.vue
@@ -84,7 +84,7 @@
     <!-- 分页器 -->
     <div style="padding: 10px 0">
       <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                      :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                      :total="total"/>
     </div>
@@ -104,7 +104,7 @@ const total = ref(0); //总页数
 const idList = ref<Number[]>([]);
 const searchParams: any = ref({ //封装分页
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend" //降序
 })
@@ -126,7 +126,7 @@ onMounted(() => { //页面加载时获取商品列表和分类页表
 const getProductList = async () => {
   try {
     const res = await myAxios.post('/goods/list/page', {...searchParams.value});
-    // console.log('res--->', res.data)
+    console.log('后端返回的res--->', res.data)
     if (res.data.code === 1) {
       tableData.value = res.data.data.records;
       total.value = parseInt(res.data.data.total)  //总数据量,用于分页
diff --git a/src/views/CostumeAppointments/AppointmentOrder.vue b/src/views/CostumeAppointments/AppointmentOrder.vue
index 59ab0ab..d26937f 100644
--- a/src/views/CostumeAppointments/AppointmentOrder.vue
+++ b/src/views/CostumeAppointments/AppointmentOrder.vue
@@ -62,7 +62,7 @@
     <!-- 分页器 -->
     <div style="padding: 10px 0">
       <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                      :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                      :total="total" />
     </div>
@@ -84,7 +84,7 @@ const total = ref(0);
 const orderNumber = ref('')
 const searchParams: any = ref({ //封装分页 
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend", //降序
   orderType: 'service'
diff --git a/src/views/CostumeAppointments/ManagementCenter.vue b/src/views/CostumeAppointments/ManagementCenter.vue
index e98d074..2eed5bf 100644
--- a/src/views/CostumeAppointments/ManagementCenter.vue
+++ b/src/views/CostumeAppointments/ManagementCenter.vue
@@ -115,7 +115,7 @@
   <!-- 分页器 -->
   <div style="padding: 10px 0">
     <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                    :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                    :total="total" />
   </div>
@@ -175,7 +175,7 @@ const total = ref(0); //总页数
 const idList = ref<Number[]>([]);  //用于批量删除
 const searchParams: any = ref({ //封装分页
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend" //降序
 })
diff --git a/src/views/Coupons/CouponCenter.vue b/src/views/Coupons/CouponCenter.vue
index 163c19f..912142e 100644
--- a/src/views/Coupons/CouponCenter.vue
+++ b/src/views/Coupons/CouponCenter.vue
@@ -61,7 +61,7 @@
     <!--  分页-->
     <div style="padding: 10px 0">
       <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                      :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                      :total="total" />
     </div>
@@ -126,7 +126,7 @@ const editForm : any = ref({})
 const disabled = ref(true)
 const searchParams: any = ref({ //分页
   current: 1,
-  pageSize: 5,
+  pageSize: 10,
   sortField: "id",  //根据ID分类
   sortOrder: "descend" //降序
 })
diff --git a/src/views/Login.vue b/src/views/Login.vue
index 85c8bb5..f68f0bf 100644
--- a/src/views/Login.vue
+++ b/src/views/Login.vue
@@ -46,7 +46,7 @@ import {onMounted, onUnmounted, ref} from 'vue'
 import { SuccessInfo, ErrorInfo, WarnInfo, CommInfo  } from '@/utils/messageInfo';
 import {useRouter} from 'vue-router'
 import myAxios from '@/api/myAxios';
-import { userStore } from '../store/userStore';
+import { userStore } from '@/store/userStore';
 import { User , Lock} from '@element-plus/icons-vue'
 
 const user = ref({})
@@ -75,6 +75,10 @@ const Login = async ()=>{
     ErrorInfo('检查账号或密码是否成功填写')
     return;
   }
+  if(password.value.length < 6) {
+    ErrorInfo('密码过短,请重新填写')
+    return;
+  }
   const res: any = await myAxios.post("/user/login",{
     userAccount: username.value,
     userPassword: password.value
diff --git a/src/views/Orders/OrderList.vue b/src/views/Orders/OrderList.vue
index 74de77f..13eb4a5 100644
--- a/src/views/Orders/OrderList.vue
+++ b/src/views/Orders/OrderList.vue
@@ -20,7 +20,7 @@
     <el-table v-loading="loading" :data="tableData" border stripe header-cell-class-name="headerBg"
               :cell-style="{ 'text-align': 'center', 'font-size': '16px' }" @selection-change="handleSelectionChange"
               :header-cell-style="{ 'text-align': 'center' }" :row-style="{ height: '70px' }">
-      <el-table-column type="selection" width="55" fixed="left"></el-table-column>
+<!--      <el-table-column type="selection" width="55" fixed="left"></el-table-column>-->
       <el-table-column prop="id" label="订单序号" width="80">
         <template #default="{ $index }">
           {{ $index + 1 }}
@@ -95,7 +95,7 @@
   <!-- 分页器 -->
   <div style="padding: 10px 0">
     <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                    :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                    :total="total" />
   </div>
@@ -201,7 +201,7 @@ const shipments = ref(false)
 const orderNumber = ref('')
 const searchParams: any = ref({ //封装分页 
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend", //降序
   orderType: "product"
diff --git a/src/views/Orders/PendingServiceOrderList.vue b/src/views/Orders/PendingServiceOrderList.vue
index 7252ab7..570e6be 100644
--- a/src/views/Orders/PendingServiceOrderList.vue
+++ b/src/views/Orders/PendingServiceOrderList.vue
@@ -25,7 +25,7 @@
   <el-table v-loading="loading" :data="tableData" border stripe header-cell-class-name="headerBg"
     :cell-style="{ 'text-align': 'center', 'font-size': '16px' }" @selection-change="handleSelectionChange"
     :header-cell-style="{ 'text-align': 'center' }" :row-style="{ height: '70px' }">
-    <el-table-column type="selection" width="55" fixed="left"></el-table-column>
+<!--    <el-table-column type="selection" width="55" fixed="left"></el-table-column>-->
     <el-table-column prop="id" label="待处理订单序号" width="80">
       <template #default="{ $index }">
         {{ $index + 1 }}
@@ -82,7 +82,7 @@
   <!-- 分页器 -->
   <div style="padding: 10px 0">
     <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-      :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+      :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
       :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
       :total="totalPage" />
   </div>
@@ -153,7 +153,7 @@ const reservationDate = ref('')
 const timeSlot = ref('')
 const searchParams: any = ref({ //封装分页
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",
   sortOrder: "descend", //降序
 })
diff --git a/src/views/Orders/ServiceOrderList.vue b/src/views/Orders/ServiceOrderList.vue
index 040413e..50929c8 100644
--- a/src/views/Orders/ServiceOrderList.vue
+++ b/src/views/Orders/ServiceOrderList.vue
@@ -20,7 +20,7 @@
     <el-table v-loading="loading" :data="tableData" border stripe header-cell-class-name="headerBg"
               :cell-style="{ 'text-align': 'center', 'font-size': '16px' }" @selection-change="handleSelectionChange"
               :header-cell-style="{ 'text-align': 'center' }" :row-style="{ height: '70px' }">
-      <el-table-column type="selection" width="55" fixed="left"></el-table-column>
+<!--      <el-table-column type="selection" width="55" fixed="left"></el-table-column>-->
       <el-table-column prop="id" label="订单序号" width="80">
         <template #default="{ $index }">
           {{ $index + 1 }}
@@ -88,7 +88,7 @@
   <!-- 分页器 -->
   <div style="padding: 10px 0">
     <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                    :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                    :total="total" />
   </div>
@@ -108,7 +108,7 @@ const total = ref(0);
 const orderNumber = ref('')
 const searchParams: any = ref({ //封装分页 
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend", //降序
   orderType: 'service'
diff --git a/src/views/OtherManagement/CourseCarouseCenter.vue b/src/views/OtherManagement/CourseCarouseCenter.vue
index cb9779b..64d3e76 100644
--- a/src/views/OtherManagement/CourseCarouseCenter.vue
+++ b/src/views/OtherManagement/CourseCarouseCenter.vue
@@ -47,7 +47,7 @@
     <el-pagination
         :current-page="searchParams.current"
         :page-size="searchParams.pageSize"
-        :page-sizes="[2, 5, 10, 20]"
+        :page-sizes="[10, 20, 30, 50]"
         @size-change="handleSizeChange"
         @current-change="handleCurrentChange"
         :small="null"
@@ -108,7 +108,7 @@ const searchParams: any = ref({
   //当前页码
   current: 1,
   //每页显示条数
-  pageSize: 5,
+  pageSize: 10,
   //轮播图类别
   type: '服务类',
   sortOrder: 'descend'
diff --git a/src/views/OtherManagement/EntityCarouseCenter.vue b/src/views/OtherManagement/EntityCarouseCenter.vue
index 8b5c135..a0885d6 100644
--- a/src/views/OtherManagement/EntityCarouseCenter.vue
+++ b/src/views/OtherManagement/EntityCarouseCenter.vue
@@ -46,7 +46,7 @@
     <el-pagination
         :current-page="searchParams.current"
         :page-size="searchParams.pageSize"
-        :page-sizes="[2, 5, 10, 20]"
+        :page-sizes="[10, 20, 30, 50]"
         @size-change="handleSizeChange"
         @current-change="handleCurrentChange"
         :small="null"
@@ -108,7 +108,7 @@ const searchParams: any = ref({
   //当前页码
   current: 1,
   //每页显示条数
-  pageSize: 5,
+  pageSize: 10,
   //轮播图类别
   type: '实体类',
   sortOrder: 'descend'
diff --git a/src/views/OutfitLease/LeaseOutfitCenter.vue b/src/views/OutfitLease/LeaseOutfitCenter.vue
index f1a1dd8..876c99e 100644
--- a/src/views/OutfitLease/LeaseOutfitCenter.vue
+++ b/src/views/OutfitLease/LeaseOutfitCenter.vue
@@ -96,7 +96,7 @@
     <!-- 分页器 -->
     <div style="padding: 10px 0">
       <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                     :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                      :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                      :total="total"/>
     </div>
@@ -116,7 +116,7 @@ const total = ref(0); //总页数
 const idList = ref<Number[]>([]);
 const searchParams: any = ref({ //封装分页
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend" //降序
 })
diff --git a/src/views/OutfitLease/OutfitLeaseOrderCenter.vue b/src/views/OutfitLease/OutfitLeaseOrderCenter.vue
index b8f215e..9931e75 100644
--- a/src/views/OutfitLease/OutfitLeaseOrderCenter.vue
+++ b/src/views/OutfitLease/OutfitLeaseOrderCenter.vue
@@ -83,7 +83,7 @@
   <!-- 分页器 -->
   <div style="padding: 10px 0">
     <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                    :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                    :total="total" />
   </div>
@@ -104,7 +104,7 @@ const total = ref(0);
 const orderNumber = ref('')
 const searchParams: any = ref({ //封装分页
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend", //降序
 })
diff --git a/src/views/Refund/Refund.vue b/src/views/Refund/Refund.vue
index 0a1d731..82c06c4 100644
--- a/src/views/Refund/Refund.vue
+++ b/src/views/Refund/Refund.vue
@@ -32,7 +32,7 @@
   <!-- 分页器 -->
   <div style="padding: 10px 0">
     <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+                   :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                    :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
                    :total="total" />
   </div>
@@ -46,7 +46,7 @@ const total = ref(0); //总页数
 const outTradeNo = ref('');
 const searchParams: any = ref({ //封装分页
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend", //降序
   outTradeNo: outTradeNo.value
diff --git a/src/views/ServiceType/ProductCenter.vue b/src/views/ServiceType/ProductCenter.vue
index 34699a9..2124a9f 100644
--- a/src/views/ServiceType/ProductCenter.vue
+++ b/src/views/ServiceType/ProductCenter.vue
@@ -109,7 +109,7 @@
   <!-- 分页器 -->
   <div style="padding: 10px 0">
     <el-pagination @size-change="handleSizeChange" @current-change="handleCurrentChange"
-      :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[5, 10, 15, 20]"
+      :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
       :small="null" :disabled="null" :background="null" layout="total, sizes, prev, pager, next, jumper"
       :total="total" />
   </div>
@@ -189,7 +189,7 @@ const total = ref(0); //总页数
 const idList = ref<Number[]>([]);  //用于批量删除
 const searchParams: any = ref({ //封装分页
   current: 1, //当前页码
-  pageSize: 5, //每页显示条数
+  pageSize: 10, //每页显示条数
   sortField: "id",  //根据ID分类
   sortOrder: "descend" //降序
 })
diff --git a/src/views/User/UserManagement.vue b/src/views/User/UserManagement.vue
index da85a32..507420d 100644
--- a/src/views/User/UserManagement.vue
+++ b/src/views/User/UserManagement.vue
@@ -8,7 +8,7 @@
     </div>
     <el-table :data="tableData" border stripe header-cell-class-name="headerBg" :cell-style="{ textAlign: 'center' }"
               @selection-change="handleSelectionChange" :header-cell-style="{ 'text-align': 'center' }">
-      <el-table-column type="selection" width="55"></el-table-column>
+<!--      <el-table-column type="selection" width="55"></el-table-column>-->
       <el-table-column prop="id" label="序号" width="50">
         <template #default="{ $index }">
           {{ $index + 1 }}
@@ -32,7 +32,7 @@
     </el-table>
     <!-- 分页查询 -->
     <div style="padding: 10px 0">
-      <el-pagination :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[2, 5, 10, 20]"
+      <el-pagination :current-page="searchParams.current" :page-size="searchParams.pageSize" :page-sizes="[10, 20, 30, 50]"
                      @size-change="handleSizeChange" @current-change="handleCurrentChange" :small="null" background
                      layout="total, sizes, prev, pager, next, jumper" :total="total" />
     </div>
@@ -55,7 +55,7 @@ const searchParams: any = ref({
   //当前页码
   current: 1,
   //每页显示条数
-  pageSize: 5
+  pageSize: 10
 })
 const reload: any = inject("reload") //导入组件刷新
 const router = useRouter()
diff --git a/src/views/test.vue b/src/views/test.vue
index fd732af..d006edb 100644
--- a/src/views/test.vue
+++ b/src/views/test.vue
@@ -1,143 +1,10 @@
 <template>
-  <view class="container">
-    <!-- 聊天记录展示 -->
-    <scroll-view scroll-y class="chat-list" :style="{ height: chatHeight + 'px' }">
-      <view v-for="(msg, index) in messages" :key="index" class="message-item">
-        <view :class="msg.isUser ? 'message-user' : 'message-other'">
-          {{ msg.text }}
-        </view>
-      </view>
-    </scroll-view>
-
-    <!-- 输入框和发送按钮 -->
-    <view class="input-area">
-      <input
-          v-model="newMessage"
-          class="input-box"
-          placeholder="请输入消息"
-          @confirm="sendMessage"
-      />
-      <button class="send-btn" @click="sendMessage">发送</button>
-    </view>
-  </view>
+test
 </template>
 
 <script>
-import { ref, reactive, onMounted } from 'vue';
 
-export default {
-  setup() {
-    // 响应式数据
-    const newMessage = ref(''); // 用户输入的消息
-    const messages = reactive([]); // 消息数组
-    const chatHeight = ref(0); // 动态调整聊天区域高度
-
-    // 页面加载时加载历史消息
-    onMounted(() => {
-      loadMessages();
-      setChatHeight();
-    });
-
-    // 发送消息
-    const sendMessage = () => {
-      if (newMessage.value.trim() === '') return;
-
-      // 添加用户消息
-      messages.push({ text: newMessage.value, isUser: true });
-      saveMessages();
-
-      // 模拟对方回复
-      setTimeout(() => {
-        const response = '这是一条自动回复消息';
-        messages.push({ text: response, isUser: false });
-        saveMessages();
-      }, 1000);
-
-      // 清空输入框
-      newMessage.value = '';
-    };
-
-    // 加载历史消息
-    const loadMessages = () => {
-      const savedMessages = uni.getStorageSync('chatMessages');
-      if (savedMessages) {
-        messages.push(...JSON.parse(savedMessages));
-      }
-    };
-
-    // 保存消息
-    const saveMessages = () => {
-      uni.setStorageSync('chatMessages', JSON.stringify(messages));
-    };
-
-    // 设置聊天区域高度
-    const setChatHeight = () => {
-      const systemInfo = uni.getSystemInfoSync();
-      chatHeight.value = systemInfo.windowHeight - 150; // 留出底部输入框的位置
-    };
-
-    return {
-      newMessage,
-      messages,
-      chatHeight,
-      sendMessage
-    };
-  }
-};
 </script>
 
 <style scoped>
-.container {
-  display: flex;
-  flex-direction: column;
-  height: 100vh;
-}
-
-.chat-list {
-  flex: 1;
-  padding: 10px;
-  background-color: #f0f0f0;
-}
-
-.message-item {
-  margin-bottom: 10px;
-}
-
-.message-user {
-  background-color: #007aff;
-  color: white;
-  padding: 10px;
-  border-radius: 10px;
-  text-align: right;
-}
-
-.message-other {
-  background-color: #e5e5e5;
-  color: black;
-  padding: 10px;
-  border-radius: 10px;
-}
-
-.input-area {
-  display: flex;
-  padding: 10px;
-  background-color: #fff;
-  align-items: center;
-}
-
-.input-box {
-  flex: 1;
-  height: 40px;
-  padding: 0 10px;
-  border-radius: 20px;
-  border: 1px solid #ddd;
-}
-
-.send-btn {
-  background-color: #007aff;
-  color: white;
-  padding: 10px 20px;
-  border-radius: 20px;
-  margin-left: 10px;
-}
 </style>
diff --git a/src/views/test2.vue b/src/views/test2.vue
deleted file mode 100644
index 16628bc..0000000
--- a/src/views/test2.vue
+++ /dev/null
@@ -1,110 +0,0 @@
-import { saveAs } from "file-saver";
-import ExcelJS from "exceljs";
-
-// 用于将图片转换为 Base64 编码
-function getBase64Image(url) {
-return new Promise((resolve, reject) => {
-const img = new Image();
-img.crossOrigin = 'Anonymous'; // 允许跨域获取
-img.onload = () => {
-const canvas = document.createElement('canvas');
-const ctx = canvas.getContext('2d');
-canvas.height = img.height;
-canvas.width = img.width;
-ctx.drawImage(img, 0, 0);
-const dataURL = canvas.toDataURL('image/png');
-resolve(dataURL);
-};
-img.onerror = (error) => reject(error);
-img.src = url;
-});
-}
-
-export const serviceOrderList = (tableData, downloadUrl) => {
-const workbook = new ExcelJS.Workbook();
-const worksheet = workbook.addWorksheet('Order Details');
-
-// 设置列标题
-worksheet.columns = [
-{ header: '订单序号', key: 'index', width: 10 },
-{ header: '订单编号', key: 'orderNumber', width: 30 },
-{ header: '下单时间', key: 'createTime', width: 20 },
-{ header: '用户名', key: 'userName', width: 15 },
-{ header: '所购买的商品', key: 'goodName', width: 30 },
-{ header: '商品图片', key: 'goodImg', width: 20 },
-{ header: '商品类别', key: 'type', width: 20 },
-{ header: '商品单价', key: 'price', width: 15 },
-{ header: '数量', key: 'quantity', width: 10 },
-{ header: '总价', key: 'itemTotalAmount', width: 15 },
-{ header: '预约日期', key: 'reservationDate', width: 15 },
-{ header: '预约时间段', key: 'timeSlot', width: 15 },
-{ header: '联系人姓名', key: 'contactName', width: 20 },
-{ header: '联系人手机号', key: 'contactPhone', width: 20 },
-{ header: '订单实付金额', key: 'totalAmount', width: 20 },
-{ header: '订单状态', key: 'orderStatus', width: 20 },
-];
-
-// 遍历 tableData 并填充数据
-tableData.forEach((order, index) => {
-// 展平每个订单的数据
-order.orderItemList.forEach(async (item) => {
-// 订单每个商品的行
-const row = worksheet.addRow({
-index: index + 1,
-orderNumber: order.orderNumber,
-createTime: order.createTime,
-userName: order.userName,
-goodName: item.goodSnapshot.name,
-goodImg: item.goodSnapshot.goodImg.split(';')[0], // 提取商品图片路径
-type: item.goodSnapshot.type,
-price: item.goodSnapshot.price,
-quantity: item.quantity,
-itemTotalAmount: item.itemTotalAmount,
-reservationDate: item.reservationDate,
-timeSlot: item.timeSlot,
-contactName: order.contactsSnapshot.name,
-contactPhone: order.contactsSnapshot.phone,
-totalAmount: order.totalAmount,
-orderStatus: order.orderStatus,
-});
-
-// 获取商品图片的 Base64 编码
-try {
-const imageUrl = 'https://www.carboner.cn:8888/api/file/downloadFile?objectKey=' + row.getCell('goodImg').value;
-const base64Image = await getBase64Image(imageUrl);
-
-// 将 Base64 图片添加到 Excel
-const imageId = workbook.addImage({
-base64: base64Image,
-extension: 'png',
-});
-
-// 设置图片在 Excel 单元格中的显示
-worksheet.getRow(row.number).getCell('goodImg').value = { type: 'image', imageId };
-worksheet.getRow(row.number).getCell('goodImg').style = {
-alignment: { vertical: 'middle', horizontal: 'center' },
-};
-} catch (error) {
-console.error('图片转换失败', error);
-}
-});
-});
-
-// 自适应列宽
-worksheet.columns.forEach((column) => {
-let maxLength = 0;
-column.eachCell({ includeEmpty: true }, (cell) => {
-const cellValue = cell.value ? String(cell.value) : ''; // 确保空值也处理
-maxLength = Math.max(maxLength, cellValue.length);
-});
-
-// 设置列宽,确保列宽适应最大值
-column.width = maxLength + 2; // 留出额外的空间
-});
-
-// 导出为 Excel 文件
-workbook.xlsx.writeBuffer().then((buffer) => {
-const blob = new Blob([buffer], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
-saveAs(blob, '订单信息.xlsx');
-});
-};
diff --git a/vite.config.ts b/vite.config.ts
index c30c9f9..7860bd3 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -24,3 +24,4 @@ export default defineConfig({
   //   }
   // },
 })
+