Просмотр исходного кода

Merge branch 'main' into alovajs

feige996 10 месяцев назад
Родитель
Сommit
0bfb507aae
4 измененных файлов с 32 добавлено и 13 удалено
  1. 1 2
      package.json
  2. 0 9
      pnpm-lock.yaml
  3. 2 2
      src/interceptors/request.ts
  4. 29 0
      src/utils/queryString.ts

+ 1 - 2
package.json

@@ -1,7 +1,7 @@
 {
   "name": "unibest",
   "type": "commonjs",
-  "version": "3.0.0",
+  "version": "3.1.0",
   "description": "unibest - 最好的 uniapp 开发模板",
   "update-time": "2025-06-21",
   "author": {
@@ -101,7 +101,6 @@
     "js-cookie": "^3.0.5",
     "pinia": "2.0.36",
     "pinia-plugin-persistedstate": "3.2.1",
-    "qs": "6.5.3",
     "vue": "^3.4.21",
     "wot-design-uni": "^1.9.1",
     "z-paging": "2.8.7"

+ 0 - 9
pnpm-lock.yaml

@@ -91,9 +91,6 @@ importers:
       pinia-plugin-persistedstate:
         specifier: 3.2.1
         version: 3.2.1(pinia@2.0.36(typescript@5.7.2)(vue@3.5.15(typescript@5.7.2)))
-      qs:
-        specifier: 6.5.3
-        version: 6.5.3
       vue:
         specifier: ^3.4.21
         version: 3.5.15(typescript@5.7.2)
@@ -5461,10 +5458,6 @@ packages:
     resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
     engines: {node: '>=0.6'}
 
-  qs@6.5.3:
-    resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
-    engines: {node: '>=0.6'}
-
   quansync@0.2.10:
     resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
 
@@ -13293,8 +13286,6 @@ snapshots:
     dependencies:
       side-channel: 1.0.6
 
-  qs@6.5.3: {}
-
   quansync@0.2.10: {}
 
   querystringify@2.2.0: {}

+ 2 - 2
src/interceptors/request.ts

@@ -1,7 +1,7 @@
-import qs from 'qs'
 import { useUserStore } from '@/store'
 import { getEnvBaseUrl } from '@/utils'
 import { platform } from '@/utils/platform'
+import { stringifyQuery } from '@/utils/queryString'
 
 export type CustomRequestOptions = UniApp.RequestOptions & {
   query?: Record<string, any>
@@ -18,7 +18,7 @@ const httpInterceptor = {
   invoke(options: CustomRequestOptions) {
     // 接口请求支持通过 query 参数配置 queryString
     if (options.query) {
-      const queryStr = qs.stringify(options.query)
+      const queryStr = stringifyQuery(options.query)
       if (options.url.includes('?')) {
         options.url += `&${queryStr}`
       }

+ 29 - 0
src/utils/queryString.ts

@@ -0,0 +1,29 @@
+/**
+ * 将对象序列化为URL查询字符串,用于替代第三方的 qs 库,节省宝贵的体积
+ * 支持基本类型值和数组,不支持嵌套对象
+ * @param obj 要序列化的对象
+ * @returns 序列化后的查询字符串
+ */
+export function stringifyQuery(obj: Record<string, any>): string {
+  if (!obj || typeof obj !== 'object' || Array.isArray(obj))
+    return ''
+
+  return Object.entries(obj)
+    .filter(([_, value]) => value !== undefined && value !== null)
+    .map(([key, value]) => {
+      // 对键进行编码
+      const encodedKey = encodeURIComponent(key)
+
+      // 处理数组类型
+      if (Array.isArray(value)) {
+        return value
+          .filter(item => item !== undefined && item !== null)
+          .map(item => `${encodedKey}=${encodeURIComponent(item)}`)
+          .join('&')
+      }
+
+      // 处理基本类型
+      return `${encodedKey}=${encodeURIComponent(value)}`
+    })
+    .join('&')
+}