Files
template-10582/src/hooks/useDealerUser.ts
赵忠林 238a652afc feat(dealer): 优化分享码页面加载和保存功能
- 修改配置文件环境接口地址为本地调试
- 更新分享二维码页面标题为“账户管理中心”,启用分享按钮
- 新增分享小程序功能,支持转发给朋友和分享到朋友圈
- 改进生成小程序码的加载状态及错误处理
- 增加保存小程序码到相册的权限申请和下载容错机制
- 处理保存失败时授权提示和异常提醒
- 显示加载失败及重试按钮,避免未授权用户界面死循环
- 未成为分销商时增加跳转申请页面引导
- 更新邀请文案和页面UI细节优化
- 在useDealerUser钩子中新增无经销商数据自动跳转申请页逻辑
2026-04-16 14:22:23 +08:00

89 lines
2.4 KiB
TypeScript
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.

import {useState, useEffect, useCallback} from 'react'
import Taro from '@tarojs/taro'
import {getShopDealerUser} from '@/api/shop/shopDealerUser'
import type {ShopDealerUser} from '@/api/shop/shopDealerUser/model'
// Hook 返回值接口
export interface UseDealerUserReturn {
// 经销商用户信息
dealerUser: ShopDealerUser | null
// 加载状态
loading: boolean
// 错误信息
error: string | null
// 刷新数据
refresh: () => Promise<void>
}
/**
* 经销商用户 Hook - 简化版本
* 只查询经销商用户信息和判断是否存在
*/
export const useDealerUser = (): UseDealerUserReturn => {
const [dealerUser, setDealerUser] = useState<ShopDealerUser | null>(null)
const [loading, setLoading] = useState(false)
const [error, setError] = useState<string | null>(null)
const userId = Taro.getStorageSync('UserId');
// 获取经销商用户数据
const fetchDealerData = useCallback(async () => {
if (!userId) {
console.log('🔍 用户未登录,提前返回')
setDealerUser(null)
return
}
try {
setLoading(true)
setError(null)
// 查询当前用户的经销商信息
const dealer = await getShopDealerUser(userId)
if (dealer) {
setDealerUser(dealer)
} else {
setDealerUser(null)
// 没有经销商记录,跳转到申请加入页面
Taro.redirectTo({ url: '/dealer/apply/add' })
}
} catch (err) {
const errorMessage = err instanceof Error ? err.message : '获取经销商信息失败'
// 如果错误消息是"操作成功"(接口返回成功但无数据),也跳转到申请页面
if (errorMessage === '操作成功' || errorMessage === '查询成功') {
setDealerUser(null)
Taro.redirectTo({ url: '/dealer/apply/add' })
return
}
setError(errorMessage)
setDealerUser(null)
} finally {
setLoading(false)
}
}, [userId])
// 刷新数据
const refresh = useCallback(async () => {
await fetchDealerData()
}, [fetchDealerData])
// 初始化加载数据
useEffect(() => {
if (userId) {
console.log('🔍 调用 fetchDealerData')
fetchDealerData().then()
} else {
console.log('🔍 用户ID不存在不调用 fetchDealerData')
}
}, [fetchDealerData, userId])
return {
dealerUser,
loading,
error,
refresh
}
}