# 🚨 模块导入错误修复 ## 问题描述 错误信息:`Error: Cannot find module '@/api/user/coupon'` 这是因为某些文件导入了不存在的模块路径。 ## 🔍 问题分析 ### 错误原因 1. **路径不存在**:`src/api/user/coupon` 目录不存在 2. **接口迁移**:优惠券相关接口已迁移到 `src/api/shop/shopUserCoupon` 3. **导入未更新**:部分文件仍使用旧的导入路径 ### 实际目录结构 ``` src/api/user/ ├── balance-log/ ├── points/ └── (没有coupon目录) src/api/shop/ ├── shopUserCoupon/ ← 正确的优惠券接口位置 └── ... ``` ## 🔧 修复内容 ### 1. **src/user/coupon/coupon.tsx** #### 修复前 ```typescript import {pageUserCoupon, getUserCouponCount} from "@/api/user/coupon"; import {UserCoupon as UserCouponType} from "@/api/user/coupon/model"; ``` #### 修复后 ```typescript import {pageShopUserCoupon as pageUserCoupon, getMyAvailableCoupons, getMyUsedCoupons, getMyExpiredCoupons} from "@/api/shop/shopUserCoupon"; import {ShopUserCoupon as UserCouponType} from "@/api/shop/shopUserCoupon/model"; ``` #### 函数实现更新 ```typescript // 修复前 const loadCouponCount = () => { getUserCouponCount(parseInt(userId)) .then((res: any) => { setCouponCount(res) }) } // 修复后 const loadCouponCount = async () => { try { // 并行获取各种状态的优惠券数量 const [availableCoupons, usedCoupons, expiredCoupons] = await Promise.all([ getMyAvailableCoupons().catch(() => []), getMyUsedCoupons().catch(() => []), getMyExpiredCoupons().catch(() => []) ]) setCouponCount({ unused: availableCoupons.length || 0, used: usedCoupons.length || 0, expired: expiredCoupons.length || 0 }) } catch (error) { console.error('Coupon count error:', error) } } ``` ### 2. **src/pages/user/components/UserCard.tsx** #### 修复前 ```typescript import {getUserCouponCount} from "@/api/user/coupon"; // 函数调用 getUserCouponCount(userId) .then((res: any) => { setCouponCount(res.unused || 0) }) ``` #### 修复后 ```typescript import {getMyAvailableCoupons} from "@/api/shop/shopUserCoupon"; // 函数调用 getMyAvailableCoupons() .then((coupons: any) => { setCouponCount(coupons?.length || 0) }) ``` ## 📊 接口映射表 | 旧接口 | 新接口 | 说明 | |--------|--------|------| | `@/api/user/coupon` | `@/api/shop/shopUserCoupon` | 优惠券API路径 | | `pageUserCoupon` | `pageShopUserCoupon` | 分页查询优惠券 | | `getUserCouponCount` | `getMyAvailableCoupons` + 计算 | 获取优惠券统计 | | `UserCoupon` | `ShopUserCoupon` | 优惠券数据类型 | ## 🎯 新的API接口 ### 可用的shopUserCoupon接口 ```typescript // 分页查询 export async function pageShopUserCoupon(params: ShopUserCouponParam) // 获取我的可用优惠券 export async function getMyAvailableCoupons() // 获取我的已使用优惠券 export async function getMyUsedCoupons() // 获取我的已过期优惠券 export async function getMyExpiredCoupons() // 根据ID查询 export async function getShopUserCoupon(id: number) // 增删改操作 export async function addShopUserCoupon(data: ShopUserCoupon) export async function updateShopUserCoupon(data: ShopUserCoupon) export async function removeShopUserCoupon(id?: number) ``` ## ✅ 修复效果 ### 修复前 ``` ❌ Error: Cannot find module '@/api/user/coupon' ❌ 页面无法加载 ❌ 优惠券功能异常 ``` ### 修复后 ``` ✅ 模块导入正常 ✅ 页面可以正常加载 ✅ 优惠券统计功能正常 ✅ 使用正确的API接口 ``` ## 🧪 验证方法 ### 1. **编译验证** ```bash npm run build:weapp ``` 应该没有模块找不到的错误。 ### 2. **功能验证** - [ ] 用户卡片显示正确的优惠券数量 - [ ] 优惠券页面可以正常加载 - [ ] 优惠券列表可以正常显示 - [ ] 各个tab的统计数字正确 ### 3. **控制台验证** - [ ] 没有模块导入错误 - [ ] API请求正常发送 - [ ] 数据正常返回 ## 🔍 相关文件检查 确保以下文件都已正确更新: - ✅ `src/user/coupon/coupon.tsx` - ✅ `src/pages/user/components/UserCard.tsx` - ✅ `src/user/coupon/index.tsx` (之前已修复) - ✅ `src/user/coupon/receive.tsx` (之前已修复) ## 🚀 后续建议 ### 1. **统一接口使用** - 所有优惠券相关功能都使用 `@/api/shop/shopUserCoupon` - 避免混用不同的API路径 ### 2. **类型安全** - 使用 `ShopUserCoupon` 类型而不是 `any` - 添加适当的错误处理 ### 3. **性能优化** - 考虑缓存优惠券统计数据 - 避免重复的API调用 **现在模块导入错误应该已经完全修复,页面可以正常加载了!** 🎉