diff --git a/package.json b/package.json index 6582535..d29e1f8 100644 --- a/package.json +++ b/package.json @@ -98,7 +98,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" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b4b9e85..940debd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -82,9 +82,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) @@ -5440,10 +5437,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==} @@ -13257,8 +13250,6 @@ snapshots: dependencies: side-channel: 1.0.6 - qs@6.5.3: {} - quansync@0.2.10: {} querystringify@2.2.0: {} diff --git a/src/interceptors/request.ts b/src/interceptors/request.ts index ad77815..48cbf09 100644 --- a/src/interceptors/request.ts +++ b/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 @@ -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}` } diff --git a/src/utils/queryString.ts b/src/utils/queryString.ts new file mode 100644 index 0000000..edf973e --- /dev/null +++ b/src/utils/queryString.ts @@ -0,0 +1,29 @@ +/** + * 将对象序列化为URL查询字符串,用于替代第三方的 qs 库,节省宝贵的体积 + * 支持基本类型值和数组,不支持嵌套对象 + * @param obj 要序列化的对象 + * @returns 序列化后的查询字符串 + */ +export function stringifyQuery(obj: Record): 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('&') +}