diff --git a/package.json b/package.json
index 19ec2cc..c0822a3 100644
--- a/package.json
+++ b/package.json
@@ -76,6 +76,8 @@
"lint:fix": "eslint --fix"
},
"dependencies": {
+ "@alova/adapter-uniapp": "^2.0.14",
+ "@alova/shared": "^1.3.1",
"@dcloudio/uni-app": "3.0.0-4060620250520001",
"@dcloudio/uni-app-harmony": "3.0.0-4060620250520001",
"@dcloudio/uni-app-plus": "3.0.0-4060620250520001",
@@ -94,6 +96,7 @@
"@dcloudio/uni-quickapp-webview": "3.0.0-4060620250520001",
"@tanstack/vue-query": "^5.62.16",
"abortcontroller-polyfill": "^1.7.8",
+ "alova": "^3.3.3",
"dayjs": "1.11.10",
"js-cookie": "^3.0.5",
"pinia": "2.0.36",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 940debd..711b391 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -16,6 +16,12 @@ importers:
.:
dependencies:
+ '@alova/adapter-uniapp':
+ specifier: ^2.0.14
+ version: 2.0.14(alova@3.3.3)
+ '@alova/shared':
+ specifier: ^1.3.1
+ version: 1.3.1
'@dcloudio/uni-app':
specifier: 3.0.0-4060620250520001
version: 3.0.0-4060620250520001(@dcloudio/types@3.4.14)(postcss@8.4.49)(rollup@4.41.1)(vue@3.5.15(typescript@5.7.2))
@@ -70,6 +76,9 @@ importers:
abortcontroller-polyfill:
specifier: ^1.7.8
version: 1.7.8
+ alova:
+ specifier: ^3.3.3
+ version: 3.3.3
dayjs:
specifier: 1.11.10
version: 1.11.10
@@ -230,6 +239,14 @@ importers:
packages:
+ '@alova/adapter-uniapp@2.0.14':
+ resolution: {integrity: sha512-AHrS/evdhONySkmtYHs6Sh1D+a0+zjBeOltcYY2/az/KEPN9p/l4H9Nvy+ghLhzMzfKfnITxeeMOi5ANyERimw==}
+ peerDependencies:
+ alova: ^3.0.20
+
+ '@alova/shared@1.3.1':
+ resolution: {integrity: sha512-ijSOaFLUFcVzMKSY3avoEE5C03/p9atjMDPBwvNkwnzaCrhv6/m4A121NdadF8YlHCRuifyYfz90IyEdMXTsJg==}
+
'@ampproject/remapping@2.3.0':
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
engines: {node: '>=6.0.0'}
@@ -2738,6 +2755,10 @@ packages:
alien-signals@1.0.13:
resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==}
+ alova@3.3.3:
+ resolution: {integrity: sha512-DB1t2qpQUERVaymz+u9bS71kcN5PzZ+G5LawHm9grabv++tfHOeYsKaW+LCpgMIJ/V7lQqFyqwOvTHGDph43Jw==}
+ engines: {node: '>= 18.0.0'}
+
ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
engines: {node: '>=8'}
@@ -5454,6 +5475,9 @@ packages:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
+ rate-limiter-flexible@5.0.5:
+ resolution: {integrity: sha512-+/dSQfo+3FYwYygUs/V2BBdwGa9nFtakDwKt4l0bnvNB53TNT++QSFewwHX9qXrZJuMe9j+TUaU21lm5ARgqdQ==}
+
raw-body@2.5.2:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
engines: {node: '>= 0.8'}
@@ -6426,6 +6450,13 @@ packages:
snapshots:
+ '@alova/adapter-uniapp@2.0.14(alova@3.3.3)':
+ dependencies:
+ '@alova/shared': 1.3.1
+ alova: 3.3.3
+
+ '@alova/shared@1.3.1': {}
+
'@ampproject/remapping@2.3.0':
dependencies:
'@jridgewell/gen-mapping': 0.3.5
@@ -10023,6 +10054,11 @@ snapshots:
alien-signals@1.0.13: {}
+ alova@3.3.3:
+ dependencies:
+ '@alova/shared': 1.3.1
+ rate-limiter-flexible: 5.0.5
+
ansi-escapes@4.3.2:
dependencies:
type-fest: 0.21.3
@@ -13260,6 +13296,8 @@ snapshots:
range-parser@1.2.1: {}
+ rate-limiter-flexible@5.0.5: {}
+
raw-body@2.5.2:
dependencies:
bytes: 3.1.2
diff --git a/src/pages.json b/src/pages.json
index 1fe326b..3c4f228 100644
--- a/src/pages.json
+++ b/src/pages.json
@@ -59,6 +59,14 @@
"style": {
"navigationBarTitleText": "关于"
}
+ },
+ {
+ "path": "pages/about/alova",
+ "type": "page",
+ "layout": "default",
+ "style": {
+ "navigationBarTitleText": "Alova 请求演示"
+ }
}
],
"subPackages": []
diff --git a/src/pages/about/about.vue b/src/pages/about/about.vue
index 71ca5fe..396e273 100644
--- a/src/pages/about/about.vue
+++ b/src/pages/about/about.vue
@@ -20,6 +20,12 @@ const { safeAreaInsets } = uni.getSystemInfoSync()
// }
// testOxlint('oxlint')
console.log('about')
+
+function gotoAlova() {
+ uni.navigateTo({
+ url: '/pages/about/alova',
+ })
+}
@@ -32,6 +38,9 @@ console.log('about')
+
diff --git a/src/pages/about/alova.vue b/src/pages/about/alova.vue
new file mode 100644
index 0000000..fada4e6
--- /dev/null
+++ b/src/pages/about/alova.vue
@@ -0,0 +1,60 @@
+
+{
+ layout: 'default',
+ style: {
+ navigationBarTitleText: 'Alova 请求演示',
+ },
+}
+
+
+
+
+
+
+
+ 发送请求
+
+
+
+ loading...
+
+
+
+ 请求数据如下
+
+
+ {{ JSON.stringify(data) }}
+
+
+
+
+ 重置数据
+
+
+
+
+
diff --git a/src/utils/request/alova.ts b/src/utils/request/alova.ts
new file mode 100644
index 0000000..77584d3
--- /dev/null
+++ b/src/utils/request/alova.ts
@@ -0,0 +1,35 @@
+import AdapterUniapp from '@alova/adapter-uniapp'
+import { createAlova } from 'alova'
+
+const baseURL = JSON.parse(__VITE_APP_PROXY__)
+ ? import.meta.env.VITE_APP_PROXY_PREFIX
+ : import.meta.env.VITE_SERVER_BASEURL
+
+export const http = createAlova({
+ baseURL,
+ ...AdapterUniapp(),
+ async responded(res: UniApp.RequestSuccessCallbackResult, method) {
+ console.log('responded:', method, res)
+ // 请求成功的拦截器
+ // 状态码 2xx,参考 axios 的设计
+ const resData = res.data as IResData
+ if (res.statusCode >= 200 && res.statusCode < 300) {
+ // 2.1 提取核心数据 res.data
+ return resData.data
+ }
+ else if (res.statusCode === 401) {
+ // 401错误 -> 清理用户信息,跳转到登录页
+ // userStore.clearUserInfo()
+ // uni.navigateTo({ url: '/pages/login/login' })
+ console.log(res)
+ throw new Error(resData.msg || '401错误')
+ }
+ else {
+ uni.showToast({
+ icon: 'none',
+ title: (resData).msg || '请求错误',
+ })
+ throw new Error(resData.msg || '请求错误')
+ }
+ },
+})