Kaynağa Gözat

更新打包新逻辑

于添 4 ay önce
ebeveyn
işleme
7ef178a9fe

+ 20 - 0
.env.production245

@@ -0,0 +1,20 @@
+# 生产环境
+NODE_ENV = production
+
+# 标题
+VITE_TITLE = 飞行学院
+
+# 接口地址
+VITE_API_BASEURL = http://192.168.1.245:19003
+VITE_FILEURL = http://192.168.1.245:10005/education/
+
+# 22地址
+# VITE_API_BASEURL = http://22.120.128.109:19003
+# VITE_FILEURL = http://22.120.128.108:10005/education/
+
+
+# 本地端口
+VITE_PORT = 9000
+
+# 开启设置抽屉
+VITE_SET_DRAWER = false

+ 4 - 2
package.json

@@ -11,8 +11,9 @@
 		"dev": "vite --mode development --host 0.0.0.0",
 		"dev245": "vite --mode development245 --host 0.0.0.0",
 		"preview": "vite preview",
-		"build": "vite build --mode production",
-		"prod": "vite  --mode production"
+		"build": "vite build --mode production && node scripts/build-zip.cjs",
+		"build245": "vite build --mode production245 && node scripts/build-zip.cjs",
+		"prod": "vite  --mode production && node scripts/build-zip.cjs"
 	},
 	"dependencies": {
 		"@amap/amap-jsapi-loader": "1.0.1",
@@ -84,6 +85,7 @@
 		"@vue/eslint-config-standard": "8.0.1",
 		"antd-less-to-css-variable": "1.0.5",
 		"autoprefixer": "10.4.13",
+		"bestzip": "^2.2.1",
 		"eslint": "8.26.0",
 		"eslint-config-prettier": "8.5.0",
 		"eslint-plugin-prettier": "4.2.1",

+ 301 - 0
pnpm-lock.yaml

@@ -210,6 +210,9 @@ importers:
       autoprefixer:
         specifier: 10.4.13
         version: 10.4.13(postcss@8.4.21)
+      bestzip:
+        specifier: ^2.2.1
+        version: 2.2.1
       eslint:
         specifier: 8.26.0
         version: 8.26.0
@@ -1169,6 +1172,18 @@ packages:
     resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
     engines: {node: '>= 8'}
 
+  archiver-utils@2.1.0:
+    resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==}
+    engines: {node: '>= 6'}
+
+  archiver-utils@3.0.4:
+    resolution: {integrity: sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==}
+    engines: {node: '>= 10'}
+
+  archiver@5.3.2:
+    resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==}
+    engines: {node: '>= 10'}
+
   arg@5.0.2:
     resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
 
@@ -1213,6 +1228,9 @@ packages:
   async-validator@4.2.5:
     resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
 
+  async@3.2.6:
+    resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
   asynckit@0.4.0:
     resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
 
@@ -1236,10 +1254,21 @@ packages:
   balanced-match@1.0.2:
     resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
 
+  base64-js@1.5.1:
+    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+  bestzip@2.2.1:
+    resolution: {integrity: sha512-XdAb87RXqOqF7C6UgQG9IqpEHJvS6IOUo0bXWEAebjSSdhDjsbcqFKdHpn5Q7QHz2pGr3Zmw4wgG3LlzdyDz7w==}
+    engines: {node: '>=10'}
+    hasBin: true
+
   binary-extensions@2.3.0:
     resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
     engines: {node: '>=8'}
 
+  bl@4.1.0:
+    resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
   boolbase@1.0.0:
     resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
 
@@ -1261,9 +1290,15 @@ packages:
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
 
+  buffer-crc32@0.2.13:
+    resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+
   buffer-from@1.1.2:
     resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
 
+  buffer@5.7.1:
+    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
   builtin-modules@3.3.0:
     resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
     engines: {node: '>=6'}
@@ -1344,6 +1379,9 @@ packages:
   cliui@6.0.0:
     resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
 
+  cliui@7.0.4:
+    resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
   cliui@8.0.1:
     resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
     engines: {node: '>=12'}
@@ -1376,6 +1414,10 @@ packages:
   commander@2.20.3:
     resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
 
+  compress-commons@4.1.2:
+    resolution: {integrity: sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==}
+    engines: {node: '>= 10'}
+
   compute-scroll-into-view@1.0.20:
     resolution: {integrity: sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==}
 
@@ -1404,6 +1446,18 @@ packages:
   core-js@3.43.0:
     resolution: {integrity: sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA==}
 
+  core-util-is@1.0.3:
+    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+  crc-32@1.2.2:
+    resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
+    engines: {node: '>=0.8'}
+    hasBin: true
+
+  crc32-stream@4.0.3:
+    resolution: {integrity: sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==}
+    engines: {node: '>= 10'}
+
   crelt@1.0.6:
     resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
 
@@ -1593,6 +1647,9 @@ packages:
   encode-utf8@1.0.3:
     resolution: {integrity: sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==}
 
+  end-of-stream@1.4.5:
+    resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
+
   enquire.js@2.1.6:
     resolution: {integrity: sha512-/KujNpO+PT63F7Hlpu4h3pE3TokKRHN26JYmQpPyjkRD/N57R7bPDNojMXdi7uveAKjYB7yQnartCxZnFWr0Xw==}
 
@@ -1962,6 +2019,9 @@ packages:
   fraction.js@4.3.7:
     resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
 
+  fs-constants@1.0.0:
+    resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
   fs-extra@10.1.0:
     resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
     engines: {node: '>=12'}
@@ -2114,6 +2174,9 @@ packages:
     resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
     engines: {node: '>=0.10.0'}
 
+  ieee754@1.2.1:
+    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
   ignore@5.3.2:
     resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
     engines: {node: '>= 4'}
@@ -2311,6 +2374,9 @@ packages:
     resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
     engines: {node: '>=8'}
 
+  isarray@1.0.0:
+    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
   isarray@2.0.5:
     resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
 
@@ -2390,6 +2456,10 @@ packages:
     resolution: {integrity: sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==}
     engines: {node: '>=0.10.0'}
 
+  lazystream@1.0.1:
+    resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
+    engines: {node: '>= 0.6.3'}
+
   less@4.1.3:
     resolution: {integrity: sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==}
     engines: {node: '>=6'}
@@ -2428,13 +2498,28 @@ packages:
   lodash.clonedeep@4.5.0:
     resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==}
 
+  lodash.defaults@4.2.0:
+    resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
+
+  lodash.difference@4.5.0:
+    resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==}
+
+  lodash.flatten@4.4.0:
+    resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==}
+
   lodash.isequal@4.5.0:
     resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
     deprecated: This package is deprecated. Use require('node:util').isDeepStrictEqual instead.
 
+  lodash.isplainobject@4.0.6:
+    resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+
   lodash.merge@4.6.2:
     resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
 
+  lodash.union@4.6.0:
+    resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==}
+
   lodash@4.17.21:
     resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
 
@@ -2513,6 +2598,10 @@ packages:
   minimatch@3.1.2:
     resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
 
+  minimatch@5.1.6:
+    resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+    engines: {node: '>=10'}
+
   minimatch@7.4.6:
     resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
     engines: {node: '>=10'}
@@ -2809,6 +2898,9 @@ packages:
     engines: {node: '>=10.13.0'}
     hasBin: true
 
+  process-nextick-args@2.0.1:
+    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
   process@0.11.10:
     resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
     engines: {node: '>= 0.6.0'}
@@ -2866,6 +2958,16 @@ packages:
     resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
     engines: {node: '>=8'}
 
+  readable-stream@2.3.8:
+    resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+  readable-stream@3.6.2:
+    resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+    engines: {node: '>= 6'}
+
+  readdir-glob@1.1.3:
+    resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
+
   readdirp@3.6.0:
     resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
     engines: {node: '>=8.10.0'}
@@ -2957,6 +3059,12 @@ packages:
     resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
     engines: {node: '>=0.4'}
 
+  safe-buffer@5.1.2:
+    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+  safe-buffer@5.2.1:
+    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
   safe-push-apply@1.0.0:
     resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
     engines: {node: '>= 0.4'}
@@ -3137,6 +3245,12 @@ packages:
     resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
     engines: {node: '>= 0.4'}
 
+  string_decoder@1.1.1:
+    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+  string_decoder@1.3.0:
+    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
   strip-ansi@3.0.1:
     resolution: {integrity: sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==}
     engines: {node: '>=0.10.0'}
@@ -3193,6 +3307,10 @@ packages:
     resolution: {integrity: sha512-KCuXjYxCZ3ru40dmND+oCLsXyuA8hoseu2SS404Px5ouyS0A99v8X/mdiLqsR5MTAyamMBN7PRwt2Dv3+xGIxw==}
     hasBin: true
 
+  tar-stream@2.2.0:
+    resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+    engines: {node: '>=6'}
+
   terser@5.42.0:
     resolution: {integrity: sha512-UYCvU9YQW2f/Vwl+P0GfhxJxbUGLwd+5QrrGgLajzWAtC/23AX0vcise32kkP7Eu0Wu9VlzzHAXkLObgjQfFlQ==}
     engines: {node: '>=10'}
@@ -3580,6 +3698,10 @@ packages:
     resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
     engines: {node: '>=6'}
 
+  yargs-parser@20.2.9:
+    resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+    engines: {node: '>=10'}
+
   yargs-parser@21.1.1:
     resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
     engines: {node: '>=12'}
@@ -3588,6 +3710,10 @@ packages:
     resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
     engines: {node: '>=8'}
 
+  yargs@16.2.0:
+    resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+    engines: {node: '>=10'}
+
   yargs@17.7.2:
     resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
     engines: {node: '>=12'}
@@ -3599,6 +3725,10 @@ packages:
     resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
     engines: {node: '>=10'}
 
+  zip-stream@4.1.1:
+    resolution: {integrity: sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==}
+    engines: {node: '>= 10'}
+
   zrender@5.4.0:
     resolution: {integrity: sha512-rOS09Z2HSVGFs2dn/TuYk5BlCaZcVe8UDLLjj1ySYF828LATKKdxuakSZMvrDz54yiKPDYVfjdKqcX8Jky3BIA==}
 
@@ -4818,6 +4948,42 @@ snapshots:
       normalize-path: 3.0.0
       picomatch: 2.3.1
 
+  archiver-utils@2.1.0:
+    dependencies:
+      glob: 7.2.3
+      graceful-fs: 4.2.11
+      lazystream: 1.0.1
+      lodash.defaults: 4.2.0
+      lodash.difference: 4.5.0
+      lodash.flatten: 4.4.0
+      lodash.isplainobject: 4.0.6
+      lodash.union: 4.6.0
+      normalize-path: 3.0.0
+      readable-stream: 2.3.8
+
+  archiver-utils@3.0.4:
+    dependencies:
+      glob: 7.2.3
+      graceful-fs: 4.2.11
+      lazystream: 1.0.1
+      lodash.defaults: 4.2.0
+      lodash.difference: 4.5.0
+      lodash.flatten: 4.4.0
+      lodash.isplainobject: 4.0.6
+      lodash.union: 4.6.0
+      normalize-path: 3.0.0
+      readable-stream: 3.6.2
+
+  archiver@5.3.2:
+    dependencies:
+      archiver-utils: 2.1.0
+      async: 3.2.6
+      buffer-crc32: 0.2.13
+      readable-stream: 3.6.2
+      readdir-glob: 1.1.3
+      tar-stream: 2.2.0
+      zip-stream: 4.1.1
+
   arg@5.0.2: {}
 
   argparse@2.0.1: {}
@@ -4880,6 +5046,8 @@ snapshots:
 
   async-validator@4.2.5: {}
 
+  async@3.2.6: {}
+
   asynckit@0.4.0: {}
 
   autoprefixer@10.4.13(postcss@8.4.21):
@@ -4911,8 +5079,24 @@ snapshots:
 
   balanced-match@1.0.2: {}
 
+  base64-js@1.5.1: {}
+
+  bestzip@2.2.1:
+    dependencies:
+      archiver: 5.3.2
+      async: 3.2.6
+      glob: 7.2.3
+      which: 2.0.2
+      yargs: 16.2.0
+
   binary-extensions@2.3.0: {}
 
+  bl@4.1.0:
+    dependencies:
+      buffer: 5.7.1
+      inherits: 2.0.4
+      readable-stream: 3.6.2
+
   boolbase@1.0.0: {}
 
   bowser@2.11.0: {}
@@ -4937,8 +5121,15 @@ snapshots:
       node-releases: 2.0.19
       update-browserslist-db: 1.1.3(browserslist@4.25.0)
 
+  buffer-crc32@0.2.13: {}
+
   buffer-from@1.1.2: {}
 
+  buffer@5.7.1:
+    dependencies:
+      base64-js: 1.5.1
+      ieee754: 1.2.1
+
   builtin-modules@3.3.0: {}
 
   builtins@5.1.0:
@@ -5032,6 +5223,12 @@ snapshots:
       strip-ansi: 6.0.1
       wrap-ansi: 6.2.0
 
+  cliui@7.0.4:
+    dependencies:
+      string-width: 4.2.3
+      strip-ansi: 6.0.1
+      wrap-ansi: 7.0.0
+
   cliui@8.0.1:
     dependencies:
       string-width: 4.2.3
@@ -5068,6 +5265,13 @@ snapshots:
 
   commander@2.20.3: {}
 
+  compress-commons@4.1.2:
+    dependencies:
+      buffer-crc32: 0.2.13
+      crc32-stream: 4.0.3
+      normalize-path: 3.0.0
+      readable-stream: 3.6.2
+
   compute-scroll-into-view@1.0.20: {}
 
   concat-map@0.0.1: {}
@@ -5088,6 +5292,15 @@ snapshots:
 
   core-js@3.43.0: {}
 
+  core-util-is@1.0.3: {}
+
+  crc-32@1.2.2: {}
+
+  crc32-stream@4.0.3:
+    dependencies:
+      crc-32: 1.2.2
+      readable-stream: 3.6.2
+
   crelt@1.0.6: {}
 
   cropperjs@1.5.12: {}
@@ -5258,6 +5471,10 @@ snapshots:
 
   encode-utf8@1.0.3: {}
 
+  end-of-stream@1.4.5:
+    dependencies:
+      once: 1.4.0
+
   enquire.js@2.1.6: {}
 
   entities@4.5.0: {}
@@ -5761,6 +5978,8 @@ snapshots:
 
   fraction.js@4.3.7: {}
 
+  fs-constants@1.0.0: {}
+
   fs-extra@10.1.0:
     dependencies:
       graceful-fs: 4.2.11
@@ -5919,6 +6138,8 @@ snapshots:
       safer-buffer: 2.1.2
     optional: true
 
+  ieee754@1.2.1: {}
+
   ignore@5.3.2: {}
 
   image-size@0.5.5:
@@ -6104,6 +6325,8 @@ snapshots:
     dependencies:
       is-docker: 2.2.1
 
+  isarray@1.0.0: {}
+
   isarray@2.0.5: {}
 
   isexe@2.0.0: {}
@@ -6169,6 +6392,10 @@ snapshots:
 
   lazy-cache@1.0.4: {}
 
+  lazystream@1.0.1:
+    dependencies:
+      readable-stream: 2.3.8
+
   less@4.1.3:
     dependencies:
       copy-anything: 2.0.6
@@ -6212,10 +6439,20 @@ snapshots:
 
   lodash.clonedeep@4.5.0: {}
 
+  lodash.defaults@4.2.0: {}
+
+  lodash.difference@4.5.0: {}
+
+  lodash.flatten@4.4.0: {}
+
   lodash.isequal@4.5.0: {}
 
+  lodash.isplainobject@4.0.6: {}
+
   lodash.merge@4.6.2: {}
 
+  lodash.union@4.6.0: {}
+
   lodash@4.17.21: {}
 
   longest@1.0.1: {}
@@ -6303,6 +6540,10 @@ snapshots:
     dependencies:
       brace-expansion: 1.1.11
 
+  minimatch@5.1.6:
+    dependencies:
+      brace-expansion: 2.0.1
+
   minimatch@7.4.6:
     dependencies:
       brace-expansion: 2.0.1
@@ -6593,6 +6834,8 @@ snapshots:
 
   prettier@2.8.7: {}
 
+  process-nextick-args@2.0.1: {}
+
   process@0.11.10: {}
 
   proxy-from-env@1.1.0: {}
@@ -6661,6 +6904,26 @@ snapshots:
       parse-json: 5.2.0
       type-fest: 0.6.0
 
+  readable-stream@2.3.8:
+    dependencies:
+      core-util-is: 1.0.3
+      inherits: 2.0.4
+      isarray: 1.0.0
+      process-nextick-args: 2.0.1
+      safe-buffer: 5.1.2
+      string_decoder: 1.1.1
+      util-deprecate: 1.0.2
+
+  readable-stream@3.6.2:
+    dependencies:
+      inherits: 2.0.4
+      string_decoder: 1.3.0
+      util-deprecate: 1.0.2
+
+  readdir-glob@1.1.3:
+    dependencies:
+      minimatch: 5.1.6
+
   readdirp@3.6.0:
     dependencies:
       picomatch: 2.3.1
@@ -6751,6 +7014,10 @@ snapshots:
       has-symbols: 1.1.0
       isarray: 2.0.5
 
+  safe-buffer@5.1.2: {}
+
+  safe-buffer@5.2.1: {}
+
   safe-push-apply@1.0.0:
     dependencies:
       es-errors: 1.3.0
@@ -6965,6 +7232,14 @@ snapshots:
       define-properties: 1.2.1
       es-object-atoms: 1.1.1
 
+  string_decoder@1.1.1:
+    dependencies:
+      safe-buffer: 5.1.2
+
+  string_decoder@1.3.0:
+    dependencies:
+      safe-buffer: 5.2.1
+
   strip-ansi@3.0.1:
     dependencies:
       ansi-regex: 2.1.1
@@ -7048,6 +7323,14 @@ snapshots:
       resolve: 1.22.10
       string.prototype.trim: 1.2.10
 
+  tar-stream@2.2.0:
+    dependencies:
+      bl: 4.1.0
+      end-of-stream: 1.4.5
+      fs-constants: 1.0.0
+      inherits: 2.0.4
+      readable-stream: 3.6.2
+
   terser@5.42.0:
     dependencies:
       '@jridgewell/source-map': 0.3.6
@@ -7488,6 +7771,8 @@ snapshots:
       camelcase: 5.3.1
       decamelize: 1.2.0
 
+  yargs-parser@20.2.9: {}
+
   yargs-parser@21.1.1: {}
 
   yargs@15.4.1:
@@ -7504,6 +7789,16 @@ snapshots:
       y18n: 4.0.3
       yargs-parser: 18.1.3
 
+  yargs@16.2.0:
+    dependencies:
+      cliui: 7.0.4
+      escalade: 3.2.0
+      get-caller-file: 2.0.5
+      require-directory: 2.1.1
+      string-width: 4.2.3
+      y18n: 5.0.8
+      yargs-parser: 20.2.9
+
   yargs@17.7.2:
     dependencies:
       cliui: 8.0.1
@@ -7523,6 +7818,12 @@ snapshots:
 
   yocto-queue@0.1.0: {}
 
+  zip-stream@4.1.1:
+    dependencies:
+      archiver-utils: 3.0.4
+      compress-commons: 4.1.2
+      readable-stream: 3.6.2
+
   zrender@5.4.0:
     dependencies:
       tslib: 2.3.0

+ 35 - 0
scripts/build-zip.cjs

@@ -0,0 +1,35 @@
+const { execSync } = require('child_process');
+const fs = require('fs');
+const path = require('path');
+
+// 获取当前时间戳
+const now = new Date();
+const timestamp = `${now.getFullYear()}${String(now.getMonth() + 1).padStart(2, '0')}${String(now.getDate()).padStart(2, '0')}_${String(now.getHours()).padStart(2, '0')}${String(now.getMinutes()).padStart(2, '0')}${String(now.getSeconds()).padStart(2, '0')}`;
+
+// 自定义文字
+const customText = '后台端';
+
+// 新的文件夹名称
+const newDistName = `dist_${timestamp}_${customText}`;
+const distPath = path.join(__dirname, '../dist');
+const newDistPath = path.join(__dirname, `../${newDistName}`);
+const zipFileName = `${newDistName}.zip`;
+
+// 重命名 dist 文件夹
+if (fs.existsSync(distPath)) {
+	fs.renameSync(distPath, newDistPath);
+	console.log(`📁 文件夹已重命名为: ${newDistName}`);
+}
+
+// 使用 bestzip 打包为 zip 文件
+try {
+	execSync(`npx bestzip "${zipFileName}" "${newDistName}"`, {
+		cwd: path.join(__dirname, '..'),
+		stdio: 'inherit'
+	});
+	fs.rmdirSync(newDistPath, { recursive: true });
+	console.log(`✅ 成功创建压缩包: ${zipFileName}`);
+} catch (error) {
+	fs.rmdirSync(newDistPath, { recursive: true });
+	console.error('❌ 压缩失败:', error.message);
+}

+ 90 - 0
src/components/Editor/index.vue

@@ -1,5 +1,8 @@
 <template>
 	<Editor v-model="contentValue" :init="init" :disabled="disabled" :placeholder="placeholder" @onClick="onClick" />
+	<div>
+		<span>{{removeHTMLTag(contentValue).length}}/{{props.countMax}}</span>
+	</div>
 </template>
 
 <script setup name="Editor">
@@ -23,6 +26,10 @@
 			type: String,
 			default: ''
 		},
+		countMax: {
+			type: Number,
+			default: 200
+		},
 		placeholder: {
 			type: String,
 			default: ''
@@ -51,6 +58,19 @@
 			default: undefined
 		}
 	})
+	const removeHTMLTag =  (str) => {
+		if((typeof str) === 'string'){
+			str = str.replace(/<\/?[^>]*>/g, '');
+			str = str.replace(/[ | ]*\n/g, '\n');
+			str = str.replace(/&nbsp;/ig, '');
+			str = str.replace(/\s/g, '');
+			return str;
+		}else {
+			return str;
+		}
+
+
+	}
 	const init = ref({
 		language_url: '/tinymce/langs/zh_CN.js',
 		language: 'zh_CN',
@@ -90,6 +110,34 @@
 			editor.on('init', () => {
 				// getBody().style.fontSize = '14px'
 			})
+			editor.on('beforeinput', (event) => {
+				const pureText = removeHTMLTag(editor.getContent());
+				const inputType = event.inputType;
+
+				// 如果当前已经超限,且是插入操作,则阻止
+				if (pureText.length >= props.countMax &&
+					(inputType.includes('insert') || inputType === 'insertText')) {
+					event.preventDefault();
+					return false;
+				}
+			})
+			// editor.on('input', () => {
+			// 	setTimeout(() => {
+			// 		const content = editor.getContent();
+			// 		editor.setContent(oldVal);
+			// 		const pureText = removeHTMLTag(content);
+			// 		// 达到限制时禁用编辑器
+			// 		if (pureText.length >= props.countMax) {
+			// 			editor.mode.set('readonly');
+			// 		} else {
+			// 			// 未达到限制时启用编辑器
+			// 			if (editor.mode.get() === 'readonly') {
+			// 				editor.mode.set('design');
+			// 			}
+			// 		}
+			// 	}, 0);
+			//
+			// })
 			editor.ui.registry.addButton('numberedline', {
 				text: '填空',
 				onAction: function () {
@@ -103,14 +151,56 @@
 			})
 		}
 	})
+
 	const contentValue = ref(props.modelValue)
 	watch(props, (newValue) => {
 		contentValue.value = newValue.modelValue
 		emit('update:modelValue', newValue.modelValue)
 	})
 	watch(contentValue, (newValue) => {
+		console.log('输入内容呢',newValue)
 		emit('update:modelValue', newValue)
 	})
+	// watch(
+	// 	() => contentValue.value,
+	// 	(newVal, oldVal) => {
+	// 		let str = removeHTMLTag(newVal);
+	// 		let oldStr = removeHTMLTag(oldVal);
+	//
+	// 		if (str.length <= props.countMax) {
+	// 			// 未超过限制,正常更新
+	// 			emit('update:modelValue', newVal);
+	// 		} else if (str.length < oldStr.length) {
+	// 			// 超过限制,但是是在减少内容(删除操作),允许更新
+	// 			emit('update:modelValue', newVal);
+	// 		} else {
+	// 			console.log('具体呢',oldVal,' 长吨 ',oldVal.length)
+	// 			// 超过限制且在增加内容,恢复到旧值
+	// 			contentValue.value = oldVal;
+	//
+	// 			console.log('具体呢 23 ',oldVal,' 长吨 ',contentValue.value)
+	// 		}
+	// 	},
+	// 	{ deep: true }
+	// )
+	// watch(
+	// 	() => contentValue.value,
+	// 	(newVal, oldVal) => {
+	// 		if(newVal != oldVal){
+	// 			let str =	removeHTMLTag(newVal)
+	// 			if(str.length <= props.countMax){
+	// 				emit('update:modelValue', newVal)
+	//
+	// 			}else{
+	// 				console.log('怎么将',oldVal)
+	// 				contentValue.value = oldVal
+	// 			}
+	// 		}
+	//
+	// 	},
+	// 	{ deep: true, immediate: true }
+	// )
+
 	const onClick = (e) => {
 		emit('onClick', e, tinymce)
 	}

+ 8 - 3
src/views/course/key_word/form.vue

@@ -1,6 +1,6 @@
 <template>
 	<xn-form-container
-		:title="formData.id ? '编辑key_word' : '增加key_word'"
+		:title="formData.id ? '编辑' : '增加'"
 		:width="700"
 		:visible="visible"
 		:destroy-on-close="true"
@@ -10,8 +10,13 @@
 			<a-form-item label="名称:" name="wordName">
 				<a-input v-model:value="formData.wordName" placeholder="请输入名称" allow-clear />
 			</a-form-item>
-			<a-form-item label="是否热门  1 热门 0不热门:" name="popular">
-				<a-input v-model:value="formData.popular" placeholder="请输入是否热门  1 热门 0不热门" allow-clear />
+<!--			1 热门 0不热门-->
+			<a-form-item label="是否热门:" name="popular">
+				<a-switch v-model:checked="formData.popular" checkedValue="1" unCheckedValue="0">
+					<template #checkedChildren>热门</template>
+					<template #unCheckedChildren>普通</template>
+				</a-switch>
+<!--				<a-input v-model:value="formData.popular" placeholder="请输入是否热门  1 热门 0不热门" allow-clear />-->
 			</a-form-item>
 		</a-form>
 		<template #footer>

+ 12 - 1
src/views/course/key_word/index.vue

@@ -20,6 +20,16 @@
 				</a-space>
 			</template>
 			<template #bodyCell="{ column, record }">
+
+				<template v-if="column.dataIndex === 'popular'">
+					<template v-if="record.popular == 1">
+						<a-tag color="red">热门</a-tag>
+					</template>
+					<template v-if="record.popular == 0">
+						<a-tag color="blue">普通</a-tag>
+					</template>
+				</template>
+
 				<template v-if="column.dataIndex === 'action'">
 					<a-space>
 						<a @click="formRef.onOpen(record)">编辑</a>
@@ -47,7 +57,8 @@
 			dataIndex: 'wordName'
 		},
 		{
-			title: '是否热门  1 热门 0不热门',
+			//1 热门 0不热门
+			title: '热门',
 			dataIndex: 'popular'
 		},
 		{

+ 5 - 5
src/views/forum/postinfo/form.vue

@@ -1,6 +1,6 @@
 <template>
 	<xn-form-container
-		:title="formData.postId ? '编辑帖子信息' : '增加帖子信息'"
+		:title="formData.postId ? '编辑帖子信息' : '增加帖子信息'"
 		:width="700"
 		:visible="visible"
 		:destroy-on-close="true"
@@ -28,7 +28,7 @@
 				></a-select>
 			</a-form-item>
 			<a-form-item label="帖子标题:" name="postTitle">
-				<a-input v-model:value="formData.postTitle" placeholder="请输入帖子标题" allow-clear />
+				<a-input v-model:value="formData.postTitle" placeholder="请输入帖子标题" allow-clear show-count maxlength="50"/>
 			</a-form-item>
 			<a-form-item label="帖子内容:" name="postContent">
 				<xn-editor v-model="formData.postContent" placeholder="请输入内容" :height="400"></xn-editor>
@@ -235,13 +235,13 @@
 	const targetList = ref([])
 	const selectErrorType = (event) => {
 		if (event == 0) {
-			
+
 		}
 		if (event == 1) {
-			
+
 		}
 		if (event == 2) {
-			
+
 		}
 	}
 	//获取操作系统/浏览器等信息

+ 1 - 1
src/views/forum/postinfo/index.vue

@@ -228,7 +228,7 @@
 		forumApi
 			.postinfoTop({
 				postId: params.postId,
-				postStatus: event
+				isTop: event
 			})
 			.then((data) => {
 				table.value.refresh(true)

+ 3 - 3
src/views/forum/posttype/form.vue

@@ -1,6 +1,6 @@
 <template>
     <xn-form-container
-        :title="formData.typeId ? '编辑帖子分类' : '增加帖子分类'"
+        :title="formData.typeId ? '编辑帖子分类' : '增加帖子分类'"
         :width="700"
         :visible="visible"
         :destroy-on-close="true"
@@ -8,10 +8,10 @@
     >
         <a-form ref="formRef" :model="formData" :rules="formRules" layout="vertical">
             <a-form-item label="分类名称:" name="typeName">
-                <a-input v-model:value="formData.typeName" placeholder="请输入分类名称" allow-clear />
+                <a-input v-model:value="formData.typeName" placeholder="请输入分类名称" allow-clear show-count  maxlength="50"/>
             </a-form-item>
             <a-form-item label="分类描述:" name="typeDesc">
-                <a-input v-model:value="formData.typeDesc" placeholder="请输入分类描述" allow-clear />
+                <a-input v-model:value="formData.typeDesc" placeholder="请输入分类描述" allow-clear show-count maxlength="50"/>
             </a-form-item>
         </a-form>
         <template #footer>

+ 3 - 3
src/views/statisticalAnalysis/platformStatusOverview/index.vue

@@ -154,7 +154,7 @@
 			align: 'center',
 			customRender: ({ record }) => {
 				console.log("分析呢",record)
-				return h('button', { class: 'btn-view', onClick: () => showVisitModal(record.id) }, '查看')
+				return h('button', { class: 'btn-view', onClick: () => showVisitModal(record.id,record.name) }, '查看')
 			}
 		}
 	]
@@ -215,8 +215,8 @@
 	}
 
 	// 显示访问统计弹窗
-	const showVisitModal = async (courseId) => {
-		modalTitle.value = `${courseId} - 近7天访问统计`
+	const showVisitModal = async (courseId,name) => {
+		modalTitle.value = `${name} - 近7天访问统计`
 		visitModalVisible.value = true
 
 		try {

+ 1 - 1
src/views/student/classCentre/form.vue

@@ -49,7 +49,7 @@
 	import { required } from '@/utils/formRules'
 	import note from './note.vue'
 	import askDiv from './ask.vue'
-	import VueOfficePdf from '@vue-office/pdf'
+	import VueOfficePdf from '@vue-office/pdf/lib/v3/vue-office-pdf.mjs'
 	import axios from 'axios'
 	const props = defineProps({
 		rightItem: {

+ 1 - 1
src/views/student/classCentre/index.vue

@@ -102,7 +102,7 @@
 	import sysConfig from '@/config/index'
 	import note from './note.vue'
 	import askDiv from './ask.vue'
-	import VueOfficePdf from '@vue-office/pdf'
+	import VueOfficePdf from '@vue-office/pdf/lib/v3/vue-office-pdf.mjs'
 	import axios from 'axios'
 	const route = useRoute()
 	const router = useRouter()

+ 2 - 2
src/views/student/record/index.vue

@@ -80,8 +80,8 @@
 	const queryParam = reactive({
 		pageIndex: 1,
 		pageSize: 10,
-		paperName: '',
-		paperType: ''
+		paperName: undefined,
+		paperType: undefined
 	})
 	const listLoading = ref(false)
 	const tableData = ref([])