|
@ -2,37 +2,21 @@ |
|
|
<view class="detail-container"> |
|
|
<view class="detail-container"> |
|
|
<!-- 轮播图区域 --> |
|
|
<!-- 轮播图区域 --> |
|
|
<view class="banner-content"> |
|
|
<view class="banner-content"> |
|
|
<swiper |
|
|
<swiper class="top-banner" :circular="true" :interval="6000" :duration="800" :indicator-dots="false" |
|
|
class="top-banner" |
|
|
:autoplay="true" @change="swiperChange"> |
|
|
:circular="true" |
|
|
|
|
|
:interval="6000" |
|
|
|
|
|
:duration="800" |
|
|
|
|
|
:indicator-dots="false" |
|
|
|
|
|
:autoplay="true" |
|
|
|
|
|
@change="swiperChange" |
|
|
|
|
|
> |
|
|
|
|
|
<swiper-item v-for="(item, index) in topBanner" :key="index"> |
|
|
<swiper-item v-for="(item, index) in topBanner" :key="index"> |
|
|
<image |
|
|
<image class="top-banner" :src="showImg(item)" mode="aspectFill"></image> |
|
|
class="top-banner" |
|
|
|
|
|
:src="showImg(item)" |
|
|
|
|
|
mode="aspectFill" |
|
|
|
|
|
></image> |
|
|
|
|
|
</swiper-item> |
|
|
</swiper-item> |
|
|
</swiper> |
|
|
</swiper> |
|
|
|
|
|
|
|
|
<view class="dot-container"> |
|
|
<view class="dot-container"> |
|
|
<view |
|
|
<view :class="['dot-line', index == swiperIndex ? 'active' : '']" v-for="(item, index) in topBanner" |
|
|
:class="['dot-line', index == swiperIndex ? 'active' : '']" |
|
|
:key="index"></view> |
|
|
v-for="(item, index) in topBanner" |
|
|
|
|
|
:key="index" |
|
|
|
|
|
></view> |
|
|
|
|
|
</view> |
|
|
</view> |
|
|
|
|
|
|
|
|
<!-- 页码指示器 --> |
|
|
<!-- 页码指示器 --> |
|
|
<view class="page-indicator"> |
|
|
<view class="page-indicator"> |
|
|
<text class="page-text" |
|
|
<text class="page-text">{{ swiperIndex + 1 }}/{{ topBanner.length }}</text> |
|
|
>{{ swiperIndex + 1 }}/{{ topBanner.length }}</text |
|
|
|
|
|
> |
|
|
|
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
|
|
|
|
|
@ -55,11 +39,9 @@ |
|
|
<text class="price">699.00</text> |
|
|
<text class="price">699.00</text> |
|
|
</view> |
|
|
</view> |
|
|
<view class="collect-container"> |
|
|
<view class="collect-container"> |
|
|
<image |
|
|
<image class="heart-icon" |
|
|
class="heart-icon" |
|
|
|
|
|
src="https://epic.js-dyyj.com/uploads/20250728/2f3ae212c01fa3b67be81abc5723cf5c.png" |
|
|
src="https://epic.js-dyyj.com/uploads/20250728/2f3ae212c01fa3b67be81abc5723cf5c.png" |
|
|
@click.stop="handleLikeClick(item, index)" |
|
|
@click.stop="handleLikeClick(item, index)"></image> |
|
|
></image> |
|
|
|
|
|
<text class="collect-count">1700收藏</text> |
|
|
<text class="collect-count">1700收藏</text> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
@ -92,27 +74,17 @@ |
|
|
<!-- 权益详情 --> |
|
|
<!-- 权益详情 --> |
|
|
<view class="equity-details"> |
|
|
<view class="equity-details"> |
|
|
<!-- 显示前两个权益项 --> |
|
|
<!-- 显示前两个权益项 --> |
|
|
<view |
|
|
<view class="equity-detail-item" v-for="(item, index) in displayEquityList" :key="index"> |
|
|
class="equity-detail-item" |
|
|
|
|
|
v-for="(item, index) in displayEquityList" |
|
|
|
|
|
:key="index" |
|
|
|
|
|
> |
|
|
|
|
|
<view class="detail-content-wrapper"> |
|
|
<view class="detail-content-wrapper"> |
|
|
<text class="detail-label">{{ item.label }}</text> |
|
|
<text class="detail-label">{{ item.label }}</text> |
|
|
<text class="detail-content">{{ item.content }}</text> |
|
|
<text class="detail-content">{{ item.content }}</text> |
|
|
</view> |
|
|
</view> |
|
|
<!-- 在最后一个显示项的右侧添加展开收起图标 --> |
|
|
<!-- 在最后一个显示项的右侧添加展开收起图标 --> |
|
|
<view |
|
|
<view v-if="index === displayEquityList.length - 1" class="toggle-icon" @click="toggleEquityExpand"> |
|
|
v-if="index === displayEquityList.length - 1" |
|
|
|
|
|
class="toggle-icon" |
|
|
|
|
|
@click="toggleEquityExpand" |
|
|
|
|
|
> |
|
|
|
|
|
<text class="icon-text">{{ |
|
|
<text class="icon-text">{{ |
|
|
isEquityExpanded ? "收起" : "展开" |
|
|
isEquityExpanded ? "收起" : "展开" |
|
|
}}</text> |
|
|
}}</text> |
|
|
<text class="icon-arrow" :class="{ expanded: isEquityExpanded }" |
|
|
<text class="icon-arrow" :class="{ expanded: isEquityExpanded }">▼</text> |
|
|
>▼</text |
|
|
|
|
|
> |
|
|
|
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
@ -120,12 +92,8 @@ |
|
|
|
|
|
|
|
|
<!-- Tab切换区域 --> |
|
|
<!-- Tab切换区域 --> |
|
|
<view class="tab-nav"> |
|
|
<view class="tab-nav"> |
|
|
<view |
|
|
<view v-for="(tab, index) in tabList" :key="index" :class="['tab-item', { active: currentTab === index }]" |
|
|
v-for="(tab, index) in tabList" |
|
|
@click="switchTab(index)"> |
|
|
:key="index" |
|
|
|
|
|
:class="['tab-item', { active: currentTab === index }]" |
|
|
|
|
|
@click="switchTab(index)" |
|
|
|
|
|
> |
|
|
|
|
|
<text class="tab-text">{{ tab.name }}</text> |
|
|
<text class="tab-text">{{ tab.name }}</text> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
@ -137,75 +105,30 @@ |
|
|
<!-- 登记证书 --> |
|
|
<!-- 登记证书 --> |
|
|
<view v-if="currentTab === 0" class="tab-panel"> |
|
|
<view v-if="currentTab === 0" class="tab-panel"> |
|
|
<view class="certificate-container"> |
|
|
<view class="certificate-container"> |
|
|
<image |
|
|
<image class="certificate-image" |
|
|
class="certificate-image" |
|
|
|
|
|
src="https://epic.js-dyyj.com/uploads/20250731/d7d5be03617e3cce94dc34e8de426395.png" |
|
|
src="https://epic.js-dyyj.com/uploads/20250731/d7d5be03617e3cce94dc34e8de426395.png" |
|
|
mode="widthFix" |
|
|
mode="widthFix"></image> |
|
|
></image> |
|
|
|
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
</view> |
|
|
|
|
|
|
|
|
<!-- IP资产详情 --> |
|
|
<!-- IP资产详情 --> |
|
|
<view v-if="currentTab === 1" class="tab-panel"> |
|
|
<view v-if="currentTab === 1" class="tab-panel"> |
|
|
<view class="info-content"> |
|
|
<image :src=" |
|
|
<view class="info-item"> |
|
|
showImg('/uploads/20250731/0d8cb190c358c0cf52fab89bb98a0373.jpg') |
|
|
<text class="info-label">IP资产名称:</text> |
|
|
" style="width: 100%" mode="widthFix"></image> |
|
|
<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> |
|
|
|
|
|
|
|
|
<!-- 数据商品详情 --> |
|
|
<!-- 数据商品详情 --> |
|
|
<view v-if="currentTab === 2" class="tab-panel"> |
|
|
<view v-if="currentTab === 2" class="tab-panel"> |
|
|
<image |
|
|
<image :src=" |
|
|
:src=" |
|
|
|
|
|
showImg('/uploads/20250731/ecf91ddfb9f89658a7d82e3ff846f71c.png') |
|
|
showImg('/uploads/20250731/ecf91ddfb9f89658a7d82e3ff846f71c.png') |
|
|
" |
|
|
" style="width: 100%" mode="widthFix"></image> |
|
|
style="width: 100%" |
|
|
|
|
|
mode="widthFix" |
|
|
|
|
|
></image> |
|
|
|
|
|
</view> |
|
|
</view> |
|
|
|
|
|
|
|
|
<!-- 权益信息 --> |
|
|
<!-- 权益信息 --> |
|
|
<view v-if="currentTab === 3" class="tab-panel"> |
|
|
<view v-if="currentTab === 3" class="tab-panel"> |
|
|
<view class="equity-info-content"> |
|
|
<image :src=" |
|
|
<view |
|
|
showImg('/uploads/20250731/83af15ea93f0cd91eb780a7bb240257a.jpg') |
|
|
class="equity-info-item" |
|
|
" style="width: 100%" mode="widthFix"></image> |
|
|
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> |
|
|
</view> |
|
|
</view> |
|
@ -231,26 +154,42 @@ export default { |
|
|
swiperIndex: 0, |
|
|
swiperIndex: 0, |
|
|
isEquityExpanded: false, // 权益详情展开状态 |
|
|
isEquityExpanded: false, // 权益详情展开状态 |
|
|
currentTab: 0, // 当前选中的tab索引 |
|
|
currentTab: 0, // 当前选中的tab索引 |
|
|
tabList: [ |
|
|
tabList: [{ |
|
|
{ name: "登记证书" }, |
|
|
name: "登记证书" |
|
|
{ name: "IP资产详情" }, |
|
|
}, |
|
|
{ name: "资源商品详情" }, |
|
|
{ |
|
|
{ name: "权益信息详情" }, |
|
|
name: "IP资产详情" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
name: "资源商品详情" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
name: "资源商品详情" |
|
|
|
|
|
}, |
|
|
], |
|
|
], |
|
|
equityList: [ |
|
|
equityList: [ |
|
|
// 权益列表数据 |
|
|
// 权益列表数据 |
|
|
{ label: "权益1:", content: "数字资产*1、数字资产*1" }, |
|
|
{ |
|
|
{ label: "权益2:", content: "IP文创公仔*1、IP文创公仔*1" }, |
|
|
label: "权益1:", |
|
|
{ label: "权益3:", content: "XX园林门票*1、XX园林门票*1" }, |
|
|
content: "数字资产*1、数字资产*1" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
label: "权益2:", |
|
|
|
|
|
content: "IP文创公仔*1、IP文创公仔*1" |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
label: "权益3:", |
|
|
|
|
|
content: "XX园林门票*1、XX园林门票*1" |
|
|
|
|
|
}, |
|
|
], |
|
|
], |
|
|
}; |
|
|
}; |
|
|
}, |
|
|
}, |
|
|
computed: { |
|
|
computed: { |
|
|
// 根据展开状态显示不同数量的权益项 |
|
|
// 根据展开状态显示不同数量的权益项 |
|
|
displayEquityList() { |
|
|
displayEquityList() { |
|
|
return this.isEquityExpanded |
|
|
return this.isEquityExpanded ? |
|
|
? this.equityList |
|
|
this.equityList : |
|
|
: this.equityList.slice(0, 2); |
|
|
this.equityList.slice(0, 2); |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
}, |
|
|
methods: { |
|
|
methods: { |
|
@ -374,7 +313,7 @@ export default { |
|
|
|
|
|
|
|
|
.remaining { |
|
|
.remaining { |
|
|
color: #808080; |
|
|
color: #808080; |
|
|
font-size: 17rpx; |
|
|
font-size: 22rpx; |
|
|
margin-left: auto; |
|
|
margin-left: auto; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -542,12 +481,14 @@ export default { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Tab导航 |
|
|
// Tab导航 |
|
|
.tab-nav { |
|
|
.tab-nav { |
|
|
margin: 0 40rpx; |
|
|
margin: 0 40rpx; |
|
|
margin-top: 40rpx; |
|
|
margin-top: 40rpx; |
|
|
display: flex; |
|
|
display: flex; |
|
|
justify-content: space-between; |
|
|
justify-content: space-between; |
|
|
|
|
|
|
|
|
.tab-item { |
|
|
.tab-item { |
|
|
padding: 10rpx 20rpx; |
|
|
padding: 10rpx 20rpx; |
|
|
text-align: center; |
|
|
text-align: center; |
|
@ -567,6 +508,7 @@ export default { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// Tab切换区域 |
|
|
// Tab切换区域 |
|
|
.tab-section { |
|
|
.tab-section { |
|
|
margin: 0 20rpx; |
|
|
margin: 0 20rpx; |
|
@ -675,6 +617,7 @@ export default { |
|
|
z-index: 100; |
|
|
z-index: 100; |
|
|
padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx); |
|
|
padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx); |
|
|
padding-bottom: calc(constant(safe-area-inset-bottom) + 20rpx); |
|
|
padding-bottom: calc(constant(safe-area-inset-bottom) + 20rpx); |
|
|
|
|
|
|
|
|
.purchase-button { |
|
|
.purchase-button { |
|
|
width: 100%; |
|
|
width: 100%; |
|
|
height: 88rpx; |
|
|
height: 88rpx; |
|
|