forked from gxwebsoft/mp-10550
fix(goods): 修复水票套票商品的购买流程控制
- 添加 ticketTemplateChecked 状态用于跟踪套票模板检查状态 - 在获取套票模板后正确设置 checked 状态避免重复检查 - 修复立即购买按钮样式在无购物车按钮时的显示问题 - 隐藏用户票券页面中的操作标签元素
This commit is contained in:
@@ -87,6 +87,10 @@ button[open-type="chooseAvatar"] {
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
height: 80px;
|
height: 80px;
|
||||||
}
|
}
|
||||||
|
.cart-buy-only{
|
||||||
|
border-radius: 20px;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
image {
|
image {
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ const GoodsDetail = () => {
|
|||||||
})
|
})
|
||||||
// 水票套票模板:存在时该商品不允许加入购物车(购物车无法支付此类商品)
|
// 水票套票模板:存在时该商品不允许加入购物车(购物车无法支付此类商品)
|
||||||
const [ticketTemplate, setTicketTemplate] = useState<GltTicketTemplate | null>(null)
|
const [ticketTemplate, setTicketTemplate] = useState<GltTicketTemplate | null>(null)
|
||||||
|
const [ticketTemplateChecked, setTicketTemplateChecked] = useState(false)
|
||||||
// const [selectedSku, setSelectedSku] = useState<ShopGoodsSku | null>(null);
|
// const [selectedSku, setSelectedSku] = useState<ShopGoodsSku | null>(null);
|
||||||
const [loading, setLoading] = useState(false);
|
const [loading, setLoading] = useState(false);
|
||||||
const router = Taro.getCurrentInstance().router;
|
const router = Taro.getCurrentInstance().router;
|
||||||
@@ -70,16 +71,20 @@ const GoodsDetail = () => {
|
|||||||
// 水票套票商品:不允许加入购物车(购物车无法支付)
|
// 水票套票商品:不允许加入购物车(购物车无法支付)
|
||||||
// 优先使用已加载的 ticketTemplate;若尚未加载则补一次查询
|
// 优先使用已加载的 ticketTemplate;若尚未加载则补一次查询
|
||||||
let tpl = ticketTemplate
|
let tpl = ticketTemplate
|
||||||
|
let checked = ticketTemplateChecked
|
||||||
if (!tpl && goods?.goodsId) {
|
if (!tpl && goods?.goodsId) {
|
||||||
try {
|
try {
|
||||||
tpl = await getGltTicketTemplateByGoodsId(Number(goods.goodsId))
|
tpl = await getGltTicketTemplateByGoodsId(Number(goods.goodsId))
|
||||||
setTicketTemplate(tpl)
|
setTicketTemplate(tpl)
|
||||||
|
setTicketTemplateChecked(true)
|
||||||
|
checked = true
|
||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
tpl = null
|
tpl = null
|
||||||
|
setTicketTemplateChecked(true)
|
||||||
|
checked = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tpl) {
|
if (!checked || tpl) {
|
||||||
Taro.showToast({title: '该商品为水票套票商品,请点击“立即购买”下单', icon: 'none'})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,16 +131,20 @@ const GoodsDetail = () => {
|
|||||||
if (action === 'cart') {
|
if (action === 'cart') {
|
||||||
// 水票套票商品:不允许加入购物车(购物车无法支付)
|
// 水票套票商品:不允许加入购物车(购物车无法支付)
|
||||||
let tpl = ticketTemplate
|
let tpl = ticketTemplate
|
||||||
|
let checked = ticketTemplateChecked
|
||||||
if (!tpl && goods?.goodsId) {
|
if (!tpl && goods?.goodsId) {
|
||||||
try {
|
try {
|
||||||
tpl = await getGltTicketTemplateByGoodsId(Number(goods.goodsId))
|
tpl = await getGltTicketTemplateByGoodsId(Number(goods.goodsId))
|
||||||
setTicketTemplate(tpl)
|
setTicketTemplate(tpl)
|
||||||
|
setTicketTemplateChecked(true)
|
||||||
|
checked = true
|
||||||
} catch (_e) {
|
} catch (_e) {
|
||||||
tpl = null
|
tpl = null
|
||||||
|
setTicketTemplateChecked(true)
|
||||||
|
checked = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (tpl) {
|
if (!checked || tpl) {
|
||||||
Taro.showToast({title: '该商品为水票套票商品,请点击“立即购买”下单', icon: 'none'})
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -190,6 +199,7 @@ const GoodsDetail = () => {
|
|||||||
setLoading(true);
|
setLoading(true);
|
||||||
// 切换商品时先重置套票模板,避免复用上一个商品状态
|
// 切换商品时先重置套票模板,避免复用上一个商品状态
|
||||||
setTicketTemplate(null)
|
setTicketTemplate(null)
|
||||||
|
setTicketTemplateChecked(false)
|
||||||
|
|
||||||
// 加载商品详情
|
// 加载商品详情
|
||||||
getShopGoods(Number(goodsId))
|
getShopGoods(Number(goodsId))
|
||||||
@@ -218,10 +228,12 @@ const GoodsDetail = () => {
|
|||||||
.then((tpl) => {
|
.then((tpl) => {
|
||||||
if (!alive) return
|
if (!alive) return
|
||||||
setTicketTemplate(tpl)
|
setTicketTemplate(tpl)
|
||||||
|
setTicketTemplateChecked(true)
|
||||||
})
|
})
|
||||||
.catch((_e) => {
|
.catch((_e) => {
|
||||||
if (!alive) return
|
if (!alive) return
|
||||||
setTicketTemplate(null)
|
setTicketTemplate(null)
|
||||||
|
setTicketTemplateChecked(true)
|
||||||
})
|
})
|
||||||
|
|
||||||
// 加载商品规格
|
// 加载商品规格
|
||||||
@@ -284,6 +296,8 @@ const GoodsDetail = () => {
|
|||||||
return <View>加载中...</View>;
|
return <View>加载中...</View>;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const showAddToCart = ticketTemplateChecked && !ticketTemplate
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<View className={"py-0"}>
|
<View className={"py-0"}>
|
||||||
<View
|
<View
|
||||||
@@ -442,10 +456,12 @@ const GoodsDetail = () => {
|
|||||||
</button>
|
</button>
|
||||||
</View>
|
</View>
|
||||||
<View className={'buy-btn mx-4'}>
|
<View className={'buy-btn mx-4'}>
|
||||||
|
{showAddToCart && (
|
||||||
<View className={'cart-add px-4 text-sm'}
|
<View className={'cart-add px-4 text-sm'}
|
||||||
onClick={() => handleAddToCart()}>加入购物车
|
onClick={() => handleAddToCart()}>加入购物车
|
||||||
</View>
|
</View>
|
||||||
<View className={'cart-buy pl-4 pr-5 text-sm'}
|
)}
|
||||||
|
<View className={`cart-buy text-sm ${showAddToCart ? 'pl-4 pr-5' : 'cart-buy-only px-4'}`}
|
||||||
onClick={() => handleBuyNow()}>立即购买
|
onClick={() => handleBuyNow()}>立即购买
|
||||||
</View>
|
</View>
|
||||||
</View>
|
</View>
|
||||||
|
|||||||
@@ -490,7 +490,7 @@ const UserTicketList = () => {
|
|||||||
</View>
|
</View>
|
||||||
)}
|
)}
|
||||||
</View>
|
</View>
|
||||||
<View className="flex flex-col items-end gap-2">
|
<View className="flex flex-col items-end gap-2 hidden">
|
||||||
{/*<Tag type={item.status === 1 ? 'danger' : 'success'}>*/}
|
{/*<Tag type={item.status === 1 ? 'danger' : 'success'}>*/}
|
||||||
{/* {item.status === 1 ? '冻结' : '正常'}*/}
|
{/* {item.status === 1 ? '冻结' : '正常'}*/}
|
||||||
{/*</Tag>*/}
|
{/*</Tag>*/}
|
||||||
|
|||||||
Reference in New Issue
Block a user