时里院子市集
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

4.7 KiB

🚨 模块导入错误修复

问题描述

错误信息: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

修复前

import {pageUserCoupon, getUserCouponCount} from "@/api/user/coupon";
import {UserCoupon as UserCouponType} from "@/api/user/coupon/model";

修复后

import {pageShopUserCoupon as pageUserCoupon, getMyAvailableCoupons, getMyUsedCoupons, getMyExpiredCoupons} from "@/api/shop/shopUserCoupon";
import {ShopUserCoupon as UserCouponType} from "@/api/shop/shopUserCoupon/model";

函数实现更新

// 修复前
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

修复前

import {getUserCouponCount} from "@/api/user/coupon";

// 函数调用
getUserCouponCount(userId)
  .then((res: any) => {
    setCouponCount(res.unused || 0)
  })

修复后

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接口

// 分页查询
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. 编译验证

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调用

现在模块导入错误应该已经完全修复,页面可以正常加载了! 🎉