refactor(doctor): 重构医生模块为经销商模块并优化相关功能

- 将 doctor 目录重命名为 dealer 目录
- 更新页面标题从'会员注册'为'注册会员'
- 删除银行卡管理、患者报备和订单消息功能
- 重命名组件 AddDoctor 为 AddUserAddress
- 添加用户角色管理和默认角色写入逻辑
- 优化注册成功后跳转至用户中心页面
- 更新应用配置中的页面路径和子包结构
- 添加经销商资金管理、团队管理和二维码推广功能
- 更新租户信息配置,增加租户名称和版权信息
- 优化文章列表组件的类型定义和渲染方式
- 修复广告轮播图数据加载和图片兼容性问题
This commit is contained in:
2026-02-02 19:59:50 +08:00
parent 46f42e08a8
commit 5612f40818
161 changed files with 5129 additions and 5735 deletions

View File

@@ -15,6 +15,7 @@ import SpecSelector from "@/components/SpecSelector";
import "./index.scss";
import {useCart} from "@/hooks/useCart";
import {useConfig} from "@/hooks/useConfig";
import {parseInviteParams, saveInviteParams, trackInviteSource} from "@/utils/invite";
const GoodsDetail = () => {
const [statusBarHeight, setStatusBarHeight] = useState<number>(44);
@@ -39,6 +40,24 @@ const GoodsDetail = () => {
const {cartCount, addToCart} = useCart()
const {config} = useConfig()
// 如果从分享链接进入(携带 inviter/source/t且当前未登录则暂存邀请信息用于注册后绑定关系
useEffect(() => {
try {
const currentUserId = Taro.getStorageSync('UserId')
if (currentUserId) return
const inviteParams = parseInviteParams({query: router?.params})
if (inviteParams?.inviter) {
saveInviteParams(inviteParams)
trackInviteSource(inviteParams.source || 'share', parseInt(inviteParams.inviter))
}
} catch (e) {
// 邀请参数解析/存储失败不影响正常浏览商品
console.error('商品详情页处理邀请参数失败:', e)
}
// router 在 Taro 中可能不稳定;这里仅在 goodsId 变化时尝试处理一次即可
}, [goodsId])
// 处理加入购物车
const handleAddToCart = () => {
if (!goods) return;
@@ -186,10 +205,16 @@ const GoodsDetail = () => {
// 分享给好友
useShareAppMessage(() => {
const inviter = Taro.getStorageSync('UserId')
const sharePath =
inviter
? `/shop/goodsDetail/index?id=${goodsId}&inviter=${inviter}&source=goods_share&t=${Date.now()}`
: `/shop/goodsDetail/index?id=${goodsId}`
return {
title: goods?.name || '精选商品',
path: `/shop/goodsDetail/index?id=${goodsId}`,
imageUrl: goods?.image, // 分享图片
path: sharePath,
imageUrl: goods?.image ? `${goods.image}?x-oss-process=image/resize,w_500,h_400,m_fill` : undefined, // 分享图片调整为5:4比例
success: function (res: any) {
console.log('分享成功', res);
Taro.showToast({
@@ -280,8 +305,10 @@ const GoodsDetail = () => {
<>
<View className={'flex justify-between'}>
<View className={'flex text-red-500 text-xl items-baseline'}>
<span className={'text-xs'}></span>
<span className={'font-bold text-2xl'}>{goods.price}</span>
<Text className={'text-xs'}></Text>
<Text className={'font-bold text-2xl'}>{goods.price}</Text>
<Text className={'text-xs px-1'}></Text>
<Text className={'text-xs text-gray-400 line-through'}>{goods.salePrice}</Text>
</View>
<span className={"text-gray-400 text-xs"}> {goods.sales}</span>
</View>
@@ -342,9 +369,7 @@ const GoodsDetail = () => {
)}
</View>
<View className={'w-full'}>
<View className={'p-4 bg-white leading-7 '}>
<RichText nodes={goods.content || '内容详情'}/>
</View>
<RichText nodes={goods.content || '内容详情'}/>
<View className={'h-24'}></View>
</View>
</View>