# Shop API 移植说明 ## 移植概述 将 `doc/code/shop` 目录下的 API 移植到 `src/api/shop` 目录下,并适配本项目的 HTTP 请求方式。 ## 目录结构 ### 移植前 (`doc/code/shop/`) ``` doc/code/shop/ ├── type.ts # 类型定义 └── index.ts # API 函数 ``` ### 移植后 (`src/api/shop/`) ``` src/api/shop/ ├── types.ts # 类型定义(从 type.ts 移植) ├── index.ts # API 函数(适配后) └── README.md # 使用说明文档 ``` ## 关键变更对比 ### 1. 导入语句变更 **移植前:** ```typescript import { request } from "@/http/axios" import { GetBalanceResponse, ... } from './type' ``` **移植后:** ```typescript import { http } from "@/http/http"; import type { ApiResult } from '@/api'; import type { GetBalanceResponse, ... } from './types'; import { GetOpenIdRequestParams } from './types'; ``` ### 2. API 函数变更 **移植前:** ```typescript export function getShopGoodsListApi(corpid: string, belongType: number) { return request>({ url: "shop/goods/list", method: "get", params: { corpid, belongType } }); } ``` **移植后:** ```typescript export async function getShopGoodsListApi(corpid: string, belongType: number) { const res: any = await http.get>("shop/goods/list", { corpid, belongType }); if (res.data.state === 'ok') { return res.data.data; } return Promise.reject(new Error(res.data.message)); } ``` ### 3. 主要变更点 | 变更项 | 移植前 | 移植后 | |--------|--------|--------| | HTTP 请求库 | `@/http/axios` | `@/http/http` | | 请求方法 | `request({ url, method, params/data })` | `http.get()` / `http.post()` | | 泛型类型 | `ApiResponseData` | `ApiResult` | | 函数声明 | `function` | `async function` | | 返回处理 | 直接返回 Promise | 增加状态判断和错误处理 | | 类型导入 | 命名导入 | 类型专用导入 (`type` 关键字) | ## 移植的 API 函数列表 ✅ 已完成移植的 API: 1. `getShopGoodsListApi` - 获取商品列表 2. `getShopGoodsApi` - 获取商品详情 3. `submitOrderApi` - 提交订单 4. `getOpenIdApi` - 获取微信 openid 5. `qyLogin` - 企业微信登录 6. `fakeQyLoginApi` - 模拟企业微信登录 7. `getOrdersByOpenIdApi` - 根据 openid 获取订单 8. `getOrdersByQyUserIdApi` - 根据企业微信用户ID获取订单 9. `openCabinetApi` - 打开储物柜 10. `getBalanceApi` - 获取用户余额(openid) 11. `getBalanceByQyUserid` - 获取用户余额(userid) 12. `getShopListApi` - 获取商店列表 ## 使用方式 所有 API 函数现在都是 `async` 函数,返回值为实际数据(成功后)或 `Promise.reject`(失败后)。 **调用示例:** ```typescript import { getShopGoodsListApi } from '@/api/shop'; // 在 async 函数中调用 const goods = await getShopGoodsListApi('corpid', 0); ``` ## 注意事项 1. 所有 API 函数现在返回实际数据,而不是包装后的响应对象 2. 需要自行处理错误(使用 try-catch 或 .catch()) 3. 类型定义文件 `types.ts` 包含了所有必要的类型 4. 如需了解更多用法,请参考 `README.md`