Compare commits

...

2 Commits

Author SHA1 Message Date
feige996
0dd0cab15d chore: 更新 package.json 中的版本号至 3.1.0 2025-06-22 16:58:18 +08:00
feige996
02d8fb1268 feat(utils): 添加查询字符串序列化工具函数替代qs库
实现一个轻量级的查询字符串序列化工具,支持基本类型和数组,用于替代第三方qs库以减少打包体积
2025-06-22 16:55:57 +08:00
4 changed files with 32 additions and 13 deletions

View File

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

9
pnpm-lock.yaml generated
View File

@ -82,9 +82,6 @@ importers:
pinia-plugin-persistedstate: pinia-plugin-persistedstate:
specifier: 3.2.1 specifier: 3.2.1
version: 3.2.1(pinia@2.0.36(typescript@5.7.2)(vue@3.5.15(typescript@5.7.2))) 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: vue:
specifier: ^3.4.21 specifier: ^3.4.21
version: 3.5.15(typescript@5.7.2) version: 3.5.15(typescript@5.7.2)
@ -5440,10 +5437,6 @@ packages:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'} engines: {node: '>=0.6'}
qs@6.5.3:
resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
engines: {node: '>=0.6'}
quansync@0.2.10: quansync@0.2.10:
resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==}
@ -13257,8 +13250,6 @@ snapshots:
dependencies: dependencies:
side-channel: 1.0.6 side-channel: 1.0.6
qs@6.5.3: {}
quansync@0.2.10: {} quansync@0.2.10: {}
querystringify@2.2.0: {} querystringify@2.2.0: {}

View File

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

29
src/utils/queryString.ts Normal file
View File

@ -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('&')
}