fix(goods): 修复水票套票商品的购买流程控制

- 添加 ticketTemplateChecked 状态用于跟踪套票模板检查状态
- 在获取套票模板后正确设置 checked 状态避免重复检查
- 修复立即购买按钮样式在无购物车按钮时的显示问题
- 隐藏用户票券页面中的操作标签元素
This commit is contained in:
2026-02-26 12:30:24 +08:00
parent 78ac461ef9
commit ef26a207b0
3 changed files with 29 additions and 9 deletions

View File

@@ -87,6 +87,10 @@ button[open-type="chooseAvatar"] {
justify-content: center;
height: 80px;
}
.cart-buy-only{
border-radius: 20px;
flex: 1;
}
}
image {

View File

@@ -36,6 +36,7 @@ const GoodsDetail = () => {
})
// 水票套票模板:存在时该商品不允许加入购物车(购物车无法支付此类商品)
const [ticketTemplate, setTicketTemplate] = useState<GltTicketTemplate | null>(null)
const [ticketTemplateChecked, setTicketTemplateChecked] = useState(false)
// const [selectedSku, setSelectedSku] = useState<ShopGoodsSku | null>(null);
const [loading, setLoading] = useState(false);
const router = Taro.getCurrentInstance().router;
@@ -70,16 +71,20 @@ const GoodsDetail = () => {
// 水票套票商品:不允许加入购物车(购物车无法支付)
// 优先使用已加载的 ticketTemplate若尚未加载则补一次查询
let tpl = ticketTemplate
let checked = ticketTemplateChecked
if (!tpl && goods?.goodsId) {
try {
tpl = await getGltTicketTemplateByGoodsId(Number(goods.goodsId))
setTicketTemplate(tpl)
setTicketTemplateChecked(true)
checked = true
} catch (_e) {
tpl = null
setTicketTemplateChecked(true)
checked = true
}
}
if (tpl) {
Taro.showToast({title: '该商品为水票套票商品,请点击“立即购买”下单', icon: 'none'})
if (!checked || tpl) {
return
}
@@ -126,16 +131,20 @@ const GoodsDetail = () => {
if (action === 'cart') {
// 水票套票商品:不允许加入购物车(购物车无法支付)
let tpl = ticketTemplate
let checked = ticketTemplateChecked
if (!tpl && goods?.goodsId) {
try {
tpl = await getGltTicketTemplateByGoodsId(Number(goods.goodsId))
setTicketTemplate(tpl)
setTicketTemplateChecked(true)
checked = true
} catch (_e) {
tpl = null
setTicketTemplateChecked(true)
checked = true
}
}
if (tpl) {
Taro.showToast({title: '该商品为水票套票商品,请点击“立即购买”下单', icon: 'none'})
if (!checked || tpl) {
return
}
@@ -190,6 +199,7 @@ const GoodsDetail = () => {
setLoading(true);
// 切换商品时先重置套票模板,避免复用上一个商品状态
setTicketTemplate(null)
setTicketTemplateChecked(false)
// 加载商品详情
getShopGoods(Number(goodsId))
@@ -218,10 +228,12 @@ const GoodsDetail = () => {
.then((tpl) => {
if (!alive) return
setTicketTemplate(tpl)
setTicketTemplateChecked(true)
})
.catch((_e) => {
if (!alive) return
setTicketTemplate(null)
setTicketTemplateChecked(true)
})
// 加载商品规格
@@ -284,6 +296,8 @@ const GoodsDetail = () => {
return <View>...</View>;
}
const showAddToCart = ticketTemplateChecked && !ticketTemplate
return (
<View className={"py-0"}>
<View
@@ -442,10 +456,12 @@ const GoodsDetail = () => {
</button>
</View>
<View className={'buy-btn mx-4'}>
{showAddToCart && (
<View className={'cart-add px-4 text-sm'}
onClick={() => handleAddToCart()}>
</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()}>
</View>
</View>

View File

@@ -490,7 +490,7 @@ const UserTicketList = () => {
</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'}>*/}
{/* {item.status === 1 ? '冻结' : '正常'}*/}
{/*</Tag>*/}