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; justify-content: center;
height: 80px; height: 80px;
} }
.cart-buy-only{
border-radius: 20px;
flex: 1;
}
} }
image { image {

View File

@@ -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>

View File

@@ -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>*/}