pet/examples/api-usage-example.js

250 lines
5.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// HTTP API使用示例
// 注意:鉴权配置已简化,只需要在 http/config/config.js 中配置不需要鉴权的接口即可
// 导入API模块
import { petsApi, assistantApi, adoptionApi, profileApi, commonApi, addNoAuthApis, setEnvironment } from '@/http/index.js'
// 或者导入所有API
// import api from '@/http/index.js'
export default {
data() {
return {
petsList: [],
userInfo: {},
loading: false
}
},
methods: {
// 示例1获取宠物列表自动鉴权
async loadPets() {
try {
// 使用默认配置,自动根据接口判断是否需要鉴权
const pets = await petsApi.getPetsList()
this.petsList = pets
} catch (error) {
console.error('获取宠物列表失败:', error)
}
},
// 示例2添加不需要鉴权的接口
addCustomNoAuthApis() {
// 如果有自定义的接口不需要鉴权,可以这样添加
addNoAuthApis([
'/custom/public-api',
'/special/no-auth-endpoint'
])
},
// 示例3切换环境
switchEnvironment() {
// 根据需要切换环境
// #ifdef H5
setEnvironment('development') // H5开发环境
// #endif
// #ifdef MP-WEIXIN
setEnvironment('production') // 小程序生产环境
// #endif
// 或者根据条件动态切换
const isDev = process.env.NODE_ENV === 'development'
setEnvironment(isDev ? 'development' : 'production')
},
// 示例2添加宠物
async addNewPet() {
try {
const petData = {
name: '小白',
breed: '金毛',
age: 2,
gender: '公'
}
const result = await petsApi.addPet(petData, {
custom: {
auth: true,
loading: true,
toast: true // 显示成功/失败提示
}
})
uni.showToast({
title: '添加成功',
icon: 'success'
})
// 重新加载列表
this.loadPets()
} catch (error) {
// 错误已在拦截器中处理,这里可以做额外处理
console.error('添加宠物失败:', error)
}
},
// 示例3AI助手对话
async sendMessageToAI() {
try {
const messageData = {
message: '我的猫咪最近不爱吃饭,怎么办?',
petId: 123
}
const response = await assistantApi.sendMessage(messageData, {
custom: {
auth: true,
loading: true,
loadingText: 'AI正在思考中...'
}
})
console.log('AI回复:', response.reply)
} catch (error) {
console.error('AI对话失败:', error)
}
},
// 示例4用户登录
async userLogin() {
try {
const loginData = {
username: 'user@example.com',
password: '123456'
}
const result = await profileApi.userLogin(loginData, {
custom: {
auth: false, // 登录接口不需要token
loading: true,
loadingText: '正在登录...'
}
})
// 保存token和用户信息
uni.setStorageSync('token', result.token)
uni.setStorageSync('userInfo', result.userInfo)
uni.showToast({
title: '登录成功',
icon: 'success'
})
} catch (error) {
console.error('登录失败:', error)
}
},
// 示例5上传图片
async uploadPetImage() {
try {
// 选择图片
const chooseResult = await uni.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera']
})
const imageData = {
filePath: chooseResult.tempFilePaths[0],
name: 'petImage',
formData: {
type: 'pet',
petId: 123
}
}
const uploadResult = await commonApi.uploadImage(imageData, {
custom: {
auth: true,
loading: true,
loadingText: '正在上传图片...'
}
})
console.log('上传成功:', uploadResult.url)
uni.showToast({
title: '上传成功',
icon: 'success'
})
} catch (error) {
console.error('上传失败:', error)
}
},
// 示例6搜索领养宠物
async searchAdoptionPets() {
try {
const searchParams = {
keyword: '金毛',
type: 'dog',
age: '1-3',
location: '北京'
}
const pets = await adoptionApi.searchPets(searchParams, {
custom: {
auth: false, // 搜索不需要登录
loading: true
}
})
console.log('搜索结果:', pets)
} catch (error) {
console.error('搜索失败:', error)
}
},
// 示例7批量操作
async batchOperations() {
try {
// 并发执行多个请求
const [pets, userInfo, adoptionPets] = await Promise.all([
petsApi.getPetsList(),
profileApi.getUserInfo(),
adoptionApi.getAdoptionPets()
])
console.log('批量获取数据成功:', { pets, userInfo, adoptionPets })
} catch (error) {
console.error('批量操作失败:', error)
}
},
// 示例8自定义错误处理
async customErrorHandling() {
try {
const result = await petsApi.getPetsList({}, {
custom: {
auth: true,
loading: true,
toast: false, // 不显示默认错误提示
catch: true // 允许catch捕获错误
}
})
} catch (error) {
// 自定义错误处理
if (error.code === 401) {
uni.showModal({
title: '提示',
content: '登录已过期,请重新登录',
success: (res) => {
if (res.confirm) {
uni.reLaunch({
url: '/pages/login/login'
})
}
}
})
} else {
uni.showToast({
title: error.message || '操作失败',
icon: 'none'
})
}
}
}
}
}