11 changed files with 1050 additions and 105 deletions
@ -0,0 +1,706 @@ |
|||
<template> |
|||
<view class="detail-container"> |
|||
<!-- 轮播图区域 --> |
|||
<view class="banner-content"> |
|||
<swiper |
|||
class="top-banner" |
|||
:circular="true" |
|||
:interval="6000" |
|||
:duration="800" |
|||
:indicator-dots="false" |
|||
:autoplay="true" |
|||
@change="swiperChange" |
|||
> |
|||
<swiper-item v-for="(item, index) in topBanner" :key="index"> |
|||
<image |
|||
class="top-banner" |
|||
:src="showImg(item)" |
|||
mode="aspectFill" |
|||
></image> |
|||
</swiper-item> |
|||
</swiper> |
|||
|
|||
<view class="dot-container"> |
|||
<view |
|||
:class="['dot-line', index == swiperIndex ? 'active' : '']" |
|||
v-for="(item, index) in topBanner" |
|||
:key="index" |
|||
></view> |
|||
</view> |
|||
|
|||
<!-- 页码指示器 --> |
|||
<view class="page-indicator"> |
|||
<text class="page-text" |
|||
>{{ swiperIndex + 1 }}/{{ topBanner.length }}</text |
|||
> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 商品信息区域 --> |
|||
<view class="product-info"> |
|||
<!-- 标题和标签 --> |
|||
<view class="title-section"> |
|||
<view class="product-title">食在苏州|世界美食之都巡礼</view> |
|||
<view class="tags-container"> |
|||
<view class="limit-tag">限量</view> |
|||
<view class="limit-count">1000份</view> |
|||
<view class="remaining">剩余 900份</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 价格和收藏 --> |
|||
<view class="price-section"> |
|||
<view class="price-container"> |
|||
<text class="currency">¥</text> |
|||
<text class="price">699.00</text> |
|||
</view> |
|||
<view class="collect-container"> |
|||
<image |
|||
class="heart-icon" |
|||
src="https://epic.js-dyyj.com/uploads/20250728/2f3ae212c01fa3b67be81abc5723cf5c.png" |
|||
@click.stop="handleLikeClick(item, index)" |
|||
></image> |
|||
<text class="collect-count">1700收藏</text> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 权益信息 --> |
|||
<view class="equity-section"> |
|||
<view class="equity-row"> |
|||
<view class="equity-item"> |
|||
<view class="equity-label">创作数字资产所属方者</view> |
|||
<view class="equity-value">苏州xxx博物馆</view> |
|||
</view> |
|||
<view class="equity-item"> |
|||
<view class="equity-label">数字资产权力方</view> |
|||
<view class="equity-value">江苏大运河见</view> |
|||
</view> |
|||
<view class="equity-item"> |
|||
<view class="equity-label">备案平台</view> |
|||
<view class="equity-value">江苏文交所</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 权益信息标题 --> |
|||
<view class="equity-title"> |
|||
<view class="title-line"></view> |
|||
<text class="title-text">权益信息</text> |
|||
<view class="title-line"></view> |
|||
</view> |
|||
|
|||
<!-- 权益详情 --> |
|||
<view class="equity-details"> |
|||
<!-- 显示前两个权益项 --> |
|||
<view |
|||
class="equity-detail-item" |
|||
v-for="(item, index) in displayEquityList" |
|||
:key="index" |
|||
> |
|||
<view class="detail-content-wrapper"> |
|||
<text class="detail-label">{{ item.label }}</text> |
|||
<text class="detail-content">{{ item.content }}</text> |
|||
</view> |
|||
<!-- 在最后一个显示项的右侧添加展开收起图标 --> |
|||
<view |
|||
v-if="index === displayEquityList.length - 1" |
|||
class="toggle-icon" |
|||
@click="toggleEquityExpand" |
|||
> |
|||
<text class="icon-text">{{ |
|||
isEquityExpanded ? "收起" : "展开" |
|||
}}</text> |
|||
<text class="icon-arrow" :class="{ expanded: isEquityExpanded }" |
|||
>▼</text |
|||
> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- Tab切换区域 --> |
|||
<view class="tab-nav"> |
|||
<view |
|||
v-for="(tab, index) in tabList" |
|||
:key="index" |
|||
:class="['tab-item', { active: currentTab === index }]" |
|||
@click="switchTab(index)" |
|||
> |
|||
<text class="tab-text">{{ tab.name }}</text> |
|||
</view> |
|||
</view> |
|||
<view class="tab-section"> |
|||
<!-- Tab导航 --> |
|||
|
|||
<!-- Tab内容 --> |
|||
<view class="tab-content"> |
|||
<!-- 登记证书 --> |
|||
<view v-if="currentTab === 0" class="tab-panel"> |
|||
<view class="certificate-container"> |
|||
<image |
|||
class="certificate-image" |
|||
src="https://epic.js-dyyj.com/uploads/20250731/d7d5be03617e3cce94dc34e8de426395.png" |
|||
mode="widthFix" |
|||
></image> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- IP资产详情 --> |
|||
<view v-if="currentTab === 1" class="tab-panel"> |
|||
<view class="info-content"> |
|||
<view class="info-item"> |
|||
<text class="info-label">IP资产名称:</text> |
|||
<text class="info-value">食在苏州|世界美食之都巡礼</text> |
|||
</view> |
|||
<view class="info-item"> |
|||
<text class="info-label">创作者:</text> |
|||
<text class="info-value">苏州xxx博物馆</text> |
|||
</view> |
|||
<view class="info-item"> |
|||
<text class="info-label">发行数量:</text> |
|||
<text class="info-value">1000份</text> |
|||
</view> |
|||
<view class="info-item"> |
|||
<text class="info-label">发行时间:</text> |
|||
<text class="info-value">2024年6月16日</text> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 数据商品详情 --> |
|||
<view v-if="currentTab === 2" class="tab-panel"> |
|||
<image |
|||
:src=" |
|||
showImg('/uploads/20250731/ecf91ddfb9f89658a7d82e3ff846f71c.png') |
|||
" |
|||
style="width: 100%" |
|||
mode="widthFix" |
|||
></image> |
|||
</view> |
|||
|
|||
<!-- 权益信息 --> |
|||
<view v-if="currentTab === 3" class="tab-panel"> |
|||
<view class="equity-info-content"> |
|||
<view |
|||
class="equity-info-item" |
|||
v-for="(item, index) in equityList" |
|||
:key="index" |
|||
> |
|||
<text class="equity-info-label">{{ item.label }}</text> |
|||
<text class="equity-info-value">{{ item.content }}</text> |
|||
</view> |
|||
<view class="equity-description"> |
|||
<text class="description-text"> |
|||
本数字文创作品基于区块链技术发行,具有唯一性和不可篡改性。持有者享有以下权益: |
|||
1. |
|||
数字资产所有权:获得该数字文创作品的完整所有权,包括展示、收藏等权利; |
|||
2. |
|||
实物权益兑换:可凭此数字资产兑换相应的实物文创产品,包括限量版公仔、纪念品等; |
|||
3. |
|||
文化体验权益:享受苏州相关文化场所的优惠门票、专属活动参与资格等特殊权益; |
|||
4. |
|||
增值收益权:作为限量发行的数字资产,具有一定的收藏价值和增值潜力; |
|||
5. |
|||
社区会员权益:加入专属收藏者社区,享受优先购买新品、参与线下活动等会员特权。 |
|||
注:以上权益的具体实施细则以官方最终解释为准,部分权益可能存在时效性限制。 |
|||
</text> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
|
|||
<!-- 立即购买按钮 --> |
|||
<view class="purchase-section"> |
|||
<view class="purchase-button" @click="handlePurchase"> |
|||
<text class="purchase-text">立即购买</text> |
|||
</view> |
|||
</view> |
|||
</view> |
|||
</template> |
|||
|
|||
<script> |
|||
export default { |
|||
data() { |
|||
return { |
|||
topBanner: [ |
|||
"/uploads/20250731/5f6f00e6f037c5ca03423b3ed190c20d.png", |
|||
"/uploads/20250731/5f6f00e6f037c5ca03423b3ed190c20d.png", |
|||
], |
|||
list: [], |
|||
swiperIndex: 0, |
|||
isEquityExpanded: false, // 权益详情展开状态 |
|||
currentTab: 0, // 当前选中的tab索引 |
|||
tabList: [ |
|||
{ name: "登记证书" }, |
|||
{ name: "IP资产详情" }, |
|||
{ name: "资源商品详情" }, |
|||
{ name: "权益信息详情" }, |
|||
], |
|||
equityList: [ |
|||
// 权益列表数据 |
|||
{ label: "权益1:", content: "数字资产*1、数字资产*1" }, |
|||
{ label: "权益2:", content: "IP文创公仔*1、IP文创公仔*1" }, |
|||
{ label: "权益3:", content: "XX园林门票*1、XX园林门票*1" }, |
|||
], |
|||
}; |
|||
}, |
|||
computed: { |
|||
// 根据展开状态显示不同数量的权益项 |
|||
displayEquityList() { |
|||
return this.isEquityExpanded |
|||
? this.equityList |
|||
: this.equityList.slice(0, 2); |
|||
}, |
|||
}, |
|||
methods: { |
|||
swiperChange(e) { |
|||
this.swiperIndex = e.detail.current; |
|||
}, |
|||
|
|||
// 切换权益详情展开收起状态 |
|||
toggleEquityExpand() { |
|||
this.isEquityExpanded = !this.isEquityExpanded; |
|||
}, |
|||
// 处理购买点击 |
|||
handlePurchase() { |
|||
console.log("立即购买"); |
|||
// 这里可以添加购买逻辑 |
|||
}, |
|||
// 处理收藏点击 |
|||
handleLikeClick(item, index) { |
|||
console.log("收藏点击", item, index); |
|||
// 这里可以添加收藏逻辑 |
|||
}, |
|||
// 切换tab |
|||
switchTab(index) { |
|||
this.currentTab = index; |
|||
}, |
|||
}, |
|||
}; |
|||
</script> |
|||
|
|||
<style lang="scss" scoped> |
|||
.detail-container { |
|||
background: #f5f5f5; |
|||
min-height: 100vh; |
|||
} |
|||
|
|||
.banner-content { |
|||
width: 100%; |
|||
height: 700rpx; |
|||
position: relative; |
|||
|
|||
.top-banner { |
|||
width: 100%; |
|||
height: 100%; |
|||
} |
|||
|
|||
.dot-container { |
|||
position: absolute; |
|||
bottom: 43rpx; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
width: 100%; |
|||
left: 0; |
|||
|
|||
.dot-line { |
|||
width: 52rpx; |
|||
height: 4rpx; |
|||
margin: 0 8rpx; |
|||
background: RGBA(189, 170, 173, 0.8); |
|||
|
|||
&.active { |
|||
background: #ff1e55; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.page-indicator { |
|||
position: absolute; |
|||
bottom: 20rpx; |
|||
right: 20rpx; |
|||
// background: rgba(0, 0, 0, 0.5); |
|||
border-radius: 10rpx; |
|||
padding: 10rpx 20rpx; |
|||
|
|||
.page-text { |
|||
font-size: 24rpx; |
|||
color: #fff; |
|||
font-weight: 500; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.product-info { |
|||
background: white; |
|||
padding: 40rpx 30rpx; |
|||
margin: 20rpx; |
|||
border-radius: 20rpx 20rpx 0 0; |
|||
padding-bottom: 20rpx; |
|||
|
|||
.title-section { |
|||
margin-bottom: 30rpx; |
|||
|
|||
.product-title { |
|||
font-size: 31rpx; |
|||
font-weight: bold; |
|||
color: #000000; |
|||
line-height: 1.4; |
|||
margin-bottom: 20rpx; |
|||
} |
|||
|
|||
.tags-container { |
|||
display: flex; |
|||
align-items: center; |
|||
flex-wrap: wrap; |
|||
|
|||
.limit-tag { |
|||
background: #ff1e55; |
|||
color: white; |
|||
padding: 8rpx 16rpx; |
|||
font-size: 20rpx; |
|||
border-radius: 6rpx 0 0 6rpx; |
|||
} |
|||
|
|||
.limit-count { |
|||
background: #f0f0f0; |
|||
color: #000000; |
|||
padding: 8rpx 16rpx; |
|||
font-size: 20rpx; |
|||
border-radius: 0rpx 6rpx 6rpx 0; |
|||
} |
|||
|
|||
.remaining { |
|||
color: #808080; |
|||
font-size: 17rpx; |
|||
margin-left: auto; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.price-section { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
align-items: center; |
|||
margin-bottom: 40rpx; |
|||
|
|||
.price-container { |
|||
display: flex; |
|||
align-items: baseline; |
|||
|
|||
.currency { |
|||
font-size: 28rpx; |
|||
color: #333; |
|||
font-weight: bold; |
|||
} |
|||
|
|||
.price { |
|||
font-size: 40rpx; |
|||
color: #333; |
|||
font-weight: bold; |
|||
font-family: "Futura"; |
|||
} |
|||
} |
|||
|
|||
.collect-container { |
|||
display: flex; |
|||
align-items: center; |
|||
gap: 10rpx; |
|||
|
|||
.heart-icon { |
|||
width: 35rpx; |
|||
height: 29rpx; |
|||
transition: all 0.3s ease; |
|||
flex-shrink: 0; |
|||
|
|||
&.liked { |
|||
opacity: 1; |
|||
filter: hue-rotate(320deg) saturate(2); |
|||
} |
|||
|
|||
&:active { |
|||
transform: scale(1.2); |
|||
} |
|||
} |
|||
|
|||
.collect-count { |
|||
color: #231815; |
|||
font-size: 28rpx; |
|||
font-weight: 500; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.equity-section { |
|||
margin-bottom: 40rpx; |
|||
border-top: 0.5rpx solid #e5e5e5; |
|||
border-bottom: 0.5rpx solid #e5e5e5; |
|||
padding: 40rpx 0; |
|||
|
|||
.equity-row { |
|||
display: flex; |
|||
justify-content: space-between; |
|||
gap: 20rpx; |
|||
|
|||
.equity-item { |
|||
text-align: left; |
|||
|
|||
.equity-label { |
|||
font-size: 23rpx; |
|||
color: #231815; |
|||
font-weight: bold; |
|||
margin-bottom: 10rpx; |
|||
line-height: 1.3; |
|||
} |
|||
|
|||
.equity-value { |
|||
font-size: 20rpx; |
|||
color: #595757; |
|||
font-weight: 500; |
|||
line-height: 1.3; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
.equity-title { |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
margin: 40rpx 0 30rpx; |
|||
|
|||
.title-line { |
|||
width: 30rpx; |
|||
height: 2rpx; |
|||
background: #ff1e55; |
|||
} |
|||
|
|||
.title-text { |
|||
padding: 0 30rpx; |
|||
font-size: 25rpx; |
|||
color: #ff1e55; |
|||
font-weight: bold; |
|||
} |
|||
} |
|||
|
|||
.equity-details { |
|||
.equity-detail-item { |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: space-between; |
|||
margin-bottom: 20rpx; |
|||
line-height: 1.5; |
|||
|
|||
.detail-content-wrapper { |
|||
display: flex; |
|||
flex: 1; |
|||
|
|||
.detail-label { |
|||
font-size: 23rpx; |
|||
color: #231815; |
|||
font-weight: 500; |
|||
} |
|||
|
|||
.detail-content { |
|||
font-size: 23rpx; |
|||
color: #231815; |
|||
flex: 1; |
|||
font-weight: 500; |
|||
} |
|||
} |
|||
|
|||
.toggle-icon { |
|||
display: flex; |
|||
align-items: center; |
|||
gap: 8rpx; |
|||
cursor: pointer; |
|||
padding: 10rpx; |
|||
margin-left: 20rpx; |
|||
|
|||
.icon-text { |
|||
font-size: 22rpx; |
|||
color: #666; |
|||
} |
|||
|
|||
.icon-arrow { |
|||
font-size: 20rpx; |
|||
color: #666; |
|||
transition: transform 0.3s ease; |
|||
transform: rotate(0deg); |
|||
|
|||
&.expanded { |
|||
transform: rotate(180deg); |
|||
} |
|||
} |
|||
|
|||
&:active { |
|||
opacity: 0.7; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
// Tab导航 |
|||
.tab-nav { |
|||
margin: 0 40rpx; |
|||
margin-top: 40rpx; |
|||
display: flex; |
|||
justify-content: space-between; |
|||
.tab-item { |
|||
padding: 10rpx 20rpx; |
|||
text-align: center; |
|||
color: #3e3a39; |
|||
cursor: pointer; |
|||
transition: all 0.3s ease; |
|||
|
|||
&.active { |
|||
background-color: #ff1e55; |
|||
color: #fff; |
|||
border-radius: 20rpx 20rpx 0 0; |
|||
} |
|||
|
|||
.tab-text { |
|||
font-size: 23rpx; |
|||
font-weight: bold; |
|||
} |
|||
} |
|||
} |
|||
// Tab切换区域 |
|||
.tab-section { |
|||
margin: 0 20rpx; |
|||
background-color: #fff; |
|||
border-radius: 20rpx; |
|||
overflow: hidden; |
|||
margin-bottom: calc(20px + constant(safe-area-inset-bottom)); |
|||
margin-bottom: calc(20px + env(safe-area-inset-bottom)); |
|||
|
|||
// Tab内容 |
|||
.tab-content { |
|||
padding: 30rpx; |
|||
|
|||
.tab-panel { |
|||
min-height: 400rpx; |
|||
|
|||
// 证书容器 |
|||
.certificate-container { |
|||
display: flex; |
|||
justify-content: center; |
|||
align-items: center; |
|||
|
|||
.certificate-image { |
|||
width: 100%; |
|||
max-width: 600rpx; |
|||
height: auto; |
|||
border-radius: 12rpx; |
|||
} |
|||
} |
|||
|
|||
// 信息内容 |
|||
.info-content { |
|||
padding: 20rpx 0; |
|||
|
|||
.info-item { |
|||
display: flex; |
|||
margin-bottom: 20rpx; |
|||
align-items: flex-start; |
|||
|
|||
.info-label { |
|||
font-size: 28rpx; |
|||
color: #666; |
|||
min-width: 160rpx; |
|||
flex-shrink: 0; |
|||
} |
|||
|
|||
.info-value { |
|||
font-size: 28rpx; |
|||
color: #333; |
|||
flex: 1; |
|||
line-height: 1.5; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 权益信息内容 |
|||
.equity-info-content { |
|||
padding: 20rpx 0; |
|||
|
|||
.equity-info-item { |
|||
display: flex; |
|||
margin-bottom: 20rpx; |
|||
align-items: flex-start; |
|||
|
|||
.equity-info-label { |
|||
font-size: 28rpx; |
|||
color: #666; |
|||
min-width: 160rpx; |
|||
flex-shrink: 0; |
|||
} |
|||
|
|||
.equity-info-value { |
|||
font-size: 28rpx; |
|||
color: #333; |
|||
flex: 1; |
|||
line-height: 1.5; |
|||
} |
|||
} |
|||
|
|||
.equity-description { |
|||
margin-top: 30rpx; |
|||
padding: 20rpx; |
|||
background-color: #f8f9fa; |
|||
border-radius: 12rpx; |
|||
|
|||
.description-text { |
|||
font-size: 26rpx; |
|||
color: #666; |
|||
line-height: 1.6; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 立即购买按钮 |
|||
.purchase-section { |
|||
position: fixed; |
|||
bottom: 0; |
|||
left: 0; |
|||
right: 0; |
|||
background: white; |
|||
padding: 20rpx 30rpx 40rpx; |
|||
border-top: 1rpx solid #e5e5e5; |
|||
z-index: 100; |
|||
padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx); |
|||
padding-bottom: calc(constant(safe-area-inset-bottom) + 20rpx); |
|||
.purchase-button { |
|||
width: 100%; |
|||
height: 88rpx; |
|||
background: linear-gradient(135deg, #ff1e55 0%, #ff4081 100%); |
|||
border-radius: 44rpx; |
|||
display: flex; |
|||
align-items: center; |
|||
justify-content: center; |
|||
box-shadow: 0 8rpx 20rpx rgba(255, 30, 85, 0.3); |
|||
transition: all 0.3s ease; |
|||
|
|||
&:active { |
|||
transform: scale(0.98); |
|||
box-shadow: 0 4rpx 10rpx rgba(255, 30, 85, 0.2); |
|||
} |
|||
|
|||
.purchase-text { |
|||
font-size: 32rpx; |
|||
font-weight: bold; |
|||
color: white; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 为底部按钮预留空间 |
|||
.detail-container { |
|||
padding-bottom: 140rpx; |
|||
} |
|||
</style> |
Loading…
Reference in new issue