5.1 KiB
5.1 KiB
ApiMixin 使用指南
概述
ApiMixin 是一个 Vue mixin,用于统一管理和简化应用中的 API 调用。它提供了两个主要方法:
callApi()- 基础的 API 调用方法callApiWithErrorMsg()- 带自动错误处理的 API 调用方法
安装步骤
1. 引入 ApiMixin
在您的 HTML 页面中添加脚本引用(在 Vue 和其他依赖之后):
<script src="Scripts/ApiMixin.js"></script>
2. 在 Vue 组件中使用
在您的 Vue 组件中,在 mixins 数组中添加 ApiMixin:
receiptEditApp = new Vue({
el: '#receiptEditApp',
mixins: [DateMixin, ToastMixin, ApiMixin], // 添加 ApiMixin
data: { ... },
// 其他选项
});
API 方法
callApi(endpoint, functionName, data)
用途: 调用 API 并返回原始结果
参数:
endpoint(string): API 端点名称(.asmx 文件名)- 示例:
'領據處理','付款設定'
- 示例:
functionName(string): 方法名称- 示例:
'Save','GetOne','SearchRecipient'
- 示例:
data(object, 可选): 要传送的数据对象,默认为{}
返回值: Promise,resolve 时返回 API 响应对象,reject 时返回错误对象
示例:
// 基础使用
try {
const result = await this.callApi('領據處理', 'GetOne', { no: '001' });
console.log(result.Data);
} catch (error) {
console.error('API 调用失败:', error);
}
// 不等待结果
this.callApi('領據處理', 'Save', data)
.then(result => {
this.ShowSuccess(result.Message);
})
.catch(error => {
this.ShowError(error.message);
});
callApiWithErrorMsg(endpoint, functionName, data, errorPrefix)
用途: 调用 API 并自动显示错误消息
参数:
endpoint(string): API 端点名称functionName(string): 方法名称data(object, 可选): 要传送的数据对象errorPrefix(string, 可选): 错误消息前缀,默认为'操作'
返回值: Promise,reject 时自动调用 this.ShowError()
示例:
// 使用自动错误处理
try {
const result = await this.callApiWithErrorMsg('領據處理', 'Save', data, '儲存');
this.ShowSuccess(result.Message);
} catch (error) {
// 错误已自动显示
console.error('操作失败:', error);
}
完整示例
原始代码(冗长)
loadData(no) {
this.loading = true;
axios({
method: 'post',
url: `${API_BASE}/GetOne`,
headers: {
'Content-Type': 'application/json; charset=utf-8'
},
data: JSON.stringify({ no })
})
.then(response => {
const result = response.data.d || response.data;
if (result.Success) {
this.mainData = result.Data.main;
this.laborData = result.Data.labor;
this.travelData = result.Data.travel;
this.backupData();
} else {
this.ShowError('載入失敗: ' + result.Message);
}
})
.catch(error => {
console.error('LoadData error:', error);
this.ShowError('載入發生錯誤: ' + (error.message || '請檢查網路連線'));
})
.finally(() => {
this.loading = false;
});
}
使用 ApiMixin 的简化代码
async loadData(no) {
this.loading = true;
try {
const result = await this.callApiWithErrorMsg('領據處理', 'GetOne', { no }, '載入');
this.mainData = result.Data.main;
this.laborData = result.Data.labor;
this.travelData = result.Data.travel;
this.backupData();
} catch (error) {
console.error('LoadData error:', error);
} finally {
this.loading = false;
}
}
重构建议
使用 ApiMixin 后,您可以将 領據處理.js 中的多个方法简化:
- save() - 减少 ~15 行代码
- loadDropdownList() - 减少 ~10 行代码
- searchRecipient() - 减少 ~10 行代码
- searchPlan() - 减少 ~10 行代码
- searchOriginStation() - 减少 ~10 行代码
- searchDestStation() - 减少 ~10 行代码
- calculateTax() - 减少 ~5 行代码
- calculateFare() - 减少 ~5 行代码
总计: 可减少 ~65+ 行代码,提高代码可读性和可维护性
错误处理
ApiMixin 会自动处理以下情况:
- ✅ API 响应格式 (
data.d或data) - ✅ Success 字段检查
- ✅ 错误消息提取
- ✅ 网络错误捕获
- ✅ 自动显示错误(使用
callApiWithErrorMsg)
注意事项
-
ToastMixin 依赖:
callApiWithErrorMsg需要this.ShowError()方法,确保您的 Vue 组件已混入ToastMixin -
API_BASE 变量: 确保
API_BASE全局变量已定义 -
异步/等待: 建议在 async/await 的 try-catch 块中使用,更易读
-
错误消息格式: 错误消息会自动格式化为
"{errorPrefix}失敗: {具体错误信息}"
性能优化
由于所有 API 调用都走同一个方法,未来可以在 callApi 中添加:
- ✅ API 请求/响应日志
- ✅ 请求超时管理
- ✅ 重试机制
- ✅ 请求缓存
- ✅ 性能监测
无需修改调用代码!