5 changed files with 197 additions and 20 deletions
@ -0,0 +1,5 @@
@@ -0,0 +1,5 @@
|
||||
export default { |
||||
navigationBarTitleText: '权益详情', |
||||
navigationBarBackgroundColor: '#FFFFFF', |
||||
navigationBarTextStyle: 'black', |
||||
} |
||||
@ -0,0 +1,72 @@
@@ -0,0 +1,72 @@
|
||||
.benefit-detail-page { |
||||
min-height: 100vh; |
||||
background-color: #FFFFFF; |
||||
|
||||
// 权益列表 |
||||
.benefit-list { |
||||
padding: 30px; |
||||
|
||||
.benefit-item { |
||||
background-color: #FFFFFF; |
||||
margin-bottom: 25px; |
||||
|
||||
&:last-child { |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
// 标题行 |
||||
.benefit-header { |
||||
display: flex; |
||||
align-items: center; |
||||
justify-content: space-between; |
||||
padding: 30px 0; |
||||
border-bottom: 1px solid #F2F3F5; |
||||
|
||||
.benefit-title { |
||||
// font-weight: bold; |
||||
font-size: 30px; |
||||
color: #333333; |
||||
} |
||||
|
||||
.arrow-icon { |
||||
transition: transform 0.3s ease; |
||||
flex-shrink: 0; |
||||
|
||||
&.expanded { |
||||
transform: rotate(180deg); |
||||
} |
||||
} |
||||
} |
||||
|
||||
// 详情内容 |
||||
.benefit-details { |
||||
padding: 30px 0; |
||||
|
||||
.detail-item { |
||||
display: flex; |
||||
align-items: flex-start; |
||||
margin-bottom: 20px; |
||||
|
||||
&:last-child { |
||||
margin-bottom: 0; |
||||
} |
||||
|
||||
.detail-dot { |
||||
font-size: 25px; |
||||
color: #000000; |
||||
margin-right: 10px; |
||||
flex-shrink: 0; |
||||
line-height: 1.8; |
||||
} |
||||
|
||||
.detail-text { |
||||
flex: 1; |
||||
font-size: 25px; |
||||
color: #000000; |
||||
line-height: 1.8; |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,107 @@
@@ -0,0 +1,107 @@
|
||||
/** |
||||
* 权益详情页面 |
||||
*/ |
||||
import { View, Text } from '@tarojs/components' |
||||
import Taro, { useLoad, useRouter } from '@tarojs/taro' |
||||
import { useState } from 'react' |
||||
import { ArrowDown } from '@taroify/icons' |
||||
import './index.scss' |
||||
|
||||
interface BenefitItem { |
||||
id: string |
||||
title: string |
||||
details: string[] |
||||
} |
||||
|
||||
const BenefitDetail = () => { |
||||
const router = useRouter() |
||||
const { expand = '' } = router.params as { expand?: string } // 接收需要展开的项
|
||||
|
||||
// 权益数据
|
||||
const benefits: BenefitItem[] = [ |
||||
{ |
||||
id: 'first', |
||||
title: '首单立减', |
||||
details: [ |
||||
'开通VIP后,首笔台球订单(需原价开台,团购券等方式开台不可适用),订单结束时自动抵扣(不与VIP折扣及其他优惠同享),抵扣后不再支持。', |
||||
'VIP门店可用,非VIP门店不可使用,具体以前端展示的可用门店为准。', |
||||
'仅限台球服务可用,棋牌等其他类型服务不适用。' |
||||
] |
||||
}, |
||||
{ |
||||
id: 'vip', |
||||
title: 'VIP专属优惠', |
||||
details: [ |
||||
'享受全年VIP专属优惠,本优惠不与其他任何优惠同享(比如:门店充值、优惠券等),具体优惠折扣根据VIP门店开台页显示为准,在VIP有效期内优惠不限次数。', |
||||
'VIP门店可用,非VIP门店不可使用,具体以前端展示的可用门店为准。', |
||||
'仅限台球服务可用,棋牌等其他类型服务不适用。' |
||||
] |
||||
}, |
||||
{ |
||||
id: 'birthday', |
||||
title: '生日福利', |
||||
details: [ |
||||
'生日当天(以VIP填写的生日信息为准,无生日信息则不能享受生日赠时长福利),享受1次赠1小时时长优惠。', |
||||
'VIP门店可用,非VIP门店不可使用,具体以前端展示的可用门店为准。', |
||||
'仅限台球服务可用,棋牌等其他类型服务不适用。' |
||||
] |
||||
} |
||||
] |
||||
|
||||
// 展开状态管理
|
||||
const [expandedItems, setExpandedItems] = useState<string[]>(() => { |
||||
// 初始化时如果有 expand 参数,则展开对应项
|
||||
return expand ? [expand] : [] |
||||
}) |
||||
|
||||
useLoad(() => { |
||||
console.log('权益详情页面加载,展开项:', expand) |
||||
}) |
||||
|
||||
// 切换展开/收起
|
||||
const handleToggle = (id: string) => { |
||||
setExpandedItems(prev => { |
||||
if (prev.includes(id)) { |
||||
// 如果已展开,则收起
|
||||
return prev.filter(item => item !== id) |
||||
} else { |
||||
// 如果未展开,则展开
|
||||
return [...prev, id] |
||||
} |
||||
}) |
||||
} |
||||
|
||||
return ( |
||||
<View className="benefit-detail-page"> |
||||
<View className="benefit-list"> |
||||
{benefits.map((benefit) => ( |
||||
<View key={benefit.id} className="benefit-item"> |
||||
{/* 标题行 */} |
||||
<View className="benefit-header" onClick={() => handleToggle(benefit.id)}> |
||||
<Text className="benefit-title">{benefit.title}</Text> |
||||
<ArrowDown |
||||
className={`arrow-icon ${expandedItems.includes(benefit.id) ? 'expanded' : ''}`} |
||||
size="20px" |
||||
color="#999999" |
||||
/> |
||||
</View> |
||||
|
||||
{/* 详情内容(展开时显示) */} |
||||
{expandedItems.includes(benefit.id) && ( |
||||
<View className="benefit-details"> |
||||
{benefit.details.map((detail, index) => ( |
||||
<View key={index} className="detail-item"> |
||||
<Text className="detail-dot">•</Text> |
||||
<Text className="detail-text">{detail}</Text> |
||||
</View> |
||||
))} |
||||
</View> |
||||
)} |
||||
</View> |
||||
))} |
||||
</View> |
||||
</View> |
||||
) |
||||
} |
||||
|
||||
export default BenefitDetail |
||||
Loading…
Reference in new issue