Browse Source

样式修改

dev_des
1054425342@qq.com 2 months ago
parent
commit
d3249c5098
  1. 54
      components/ActivateAgentPopup.vue
  2. 10
      components/DynamicIsland.vue
  3. 3
      pages.json
  4. 42
      pages/index/iSoul.vue
  5. 20
      pages/index/timeShopBank.vue
  6. 4
      static/js/request.js
  7. 937
      subPackages/memorialAlbum/detail.vue

54
components/ActivateAgentPopup.vue

@ -19,7 +19,7 @@
<view class="agent-avatar"> <view class="agent-avatar">
<view class="avatar-bubble"> <view class="avatar-bubble">
<image <image
:src="agent.avatar" :src="agent.headImage"
mode="aspectFill" mode="aspectFill"
class="avatar-img" class="avatar-img"
></image> ></image>
@ -29,8 +29,8 @@
<!-- 信息区域 --> <!-- 信息区域 -->
<view class="agent-info"> <view class="agent-info">
<view class="agent-name"> <view class="agent-name">
<text class="name-chinese">{{ agent.nameChinese }}</text> <text class="name-chinese">{{ agent.name }}</text>
<text class="name-pinyin">{{ agent.namePinyin }}</text> <!-- <text class="name-pinyin">{{ agent.namePinyin }}</text> -->
</view> </view>
</view> </view>
@ -39,10 +39,10 @@
<view <view
class="status-btn" class="status-btn"
:class=" :class="
agent.status === '待激活' ? 'status-inactive' : 'status-active' agent.status == '0' ? 'status-inactive' : 'status-active'
" "
> >
<text class="status-text">{{ agent.status }}</text> <text class="status-text">{{ agent.status==1?'已激活':'待激活' }}</text>
</view> </view>
</view> </view>
</view> </view>
@ -54,42 +54,10 @@
<script> <script>
export default { export default {
name: "ActivateAgentPopup", name: "ActivateAgentPopup",
props:["agentList"],
data() { data() {
return { return {
agentList: [
{
id: 1,
avatar:
"https://epic.js-dyyj.com/uploads/20250728/d27ef6e6c26877da7775664fed376c6f.png",
nameChinese: "颜真卿",
namePinyin: "YAN ZHENQING",
status: "待激活",
},
{
id: 2,
avatar:
"https://epic.js-dyyj.com/uploads/20250728/d7bf0dd2f3f272afba687b525a7c575c.png",
nameChinese: "杜丽娘",
namePinyin: "DU LINNIANG",
status: "去使用",
},
{
id: 3,
avatar:
"https://epic.js-dyyj.com/uploads/20250728/d27ef6e6c26877da7775664fed376c6f.png",
nameChinese: "文徵明",
namePinyin: "WEN ZHENGMING",
status: "去使用",
},
{
id: 4,
avatar:
"https://epic.js-dyyj.com/uploads/20250728/d7bf0dd2f3f272afba687b525a7c575c.png",
nameChinese: "朵朵",
namePinyin: "DUODUO",
status: "去使用",
},
],
}; };
}, },
methods: { methods: {
@ -110,7 +78,7 @@ export default {
if (agent.status === "待激活") { if (agent.status === "待激活") {
// //
uni.showToast({ uni.showToast({
title: `正在激活${agent.nameChinese}...`, title: `正在激活${agent.name}...`,
icon: "loading", icon: "loading",
}); });
@ -118,21 +86,21 @@ export default {
setTimeout(() => { setTimeout(() => {
agent.status = "去使用"; agent.status = "去使用";
uni.showToast({ uni.showToast({
title: `${agent.nameChinese}激活成功!`, title: `${agent.name}激活成功!`,
icon: "success", icon: "success",
}); });
}, 2000); }, 2000);
} else { } else {
// 使 // 使
uni.showToast({ uni.showToast({
title: `正在启动${agent.nameChinese}...`, title: `正在启动${agent.name}...`,
icon: "loading", icon: "loading",
}); });
// AGENT // AGENT
setTimeout(() => { setTimeout(() => {
uni.showToast({ uni.showToast({
title: `${agent.nameChinese}启动成功!`, title: `${agent.name}启动成功!`,
icon: "success", icon: "success",
}); });
}, 1500); }, 1500);

10
components/DynamicIsland.vue

@ -94,14 +94,16 @@
userInfo && userInfo.token ? userInfo.nickname : "用户" userInfo && userInfo.token ? userInfo.nickname : "用户"
}} }}
</view> </view>
<view class="time-reward-label" style="margin-top: 15rpx;font-weight: bold;font-size: 24rpx;"> <view class="time-reward-label" style="margin-top: 15rpx;font-weight: bold;font-size: 26rpx;">
积分:999<text style="color: #999999;font-size: 20rpx;margin-left: 10rpx;">积分获取规则</text> 积分:999<text style="color: #999999;font-size: 22rpx;margin-left: 10rpx;">积分获取规则</text>
</view> </view>
</view> </view>
</view> </view>
<view class="" style="display: flex;align-items: center;font-size: 24rpx;font-weight: bold;display: flex;align-items: center;margin-top: 20rpx;"> <view class="" style="display: flex;align-items: center;font-size: 26rpx;font-weight: bold;display: flex;align-items: center;margin-top: 20rpx;">
<view class="" style="width: 200rpx;"> <view class="" style="width: 200rpx;">
时长:10H 时长:{{
userInfo && userInfo.token ? userInfo.hour+'h' : "-"
}}
</view> </view>
<view class=""> <view class="">
<image style="width: 22rpx;height: 22rpx;margin-right: 15rpx;" :src="showImg('/uploads/20250822/c8ee7615823a1ffaba400a4d5746de9a.png')"></image> <image style="width: 22rpx;height: 22rpx;margin-right: 15rpx;" :src="showImg('/uploads/20250822/c8ee7615823a1ffaba400a4d5746de9a.png')"></image>

3
pages.json

@ -33,7 +33,8 @@
{ {
"path": "pages/index/iSoul", "path": "pages/index/iSoul",
"style": { "style": {
"navigationStyle": "custom" "navigationStyle": "custom",
"navigationBarTextStyle": "white"
} }
}, },
{ {

42
pages/index/iSoul.vue

@ -66,8 +66,12 @@
</view> </view>
<view class="stat-item"> <view class="stat-item">
<view class="stat-number">{{ userStats.likes || "5.4万" }}</view> <view class="stat-number">{{ userStats.likes || "5.4万" }}</view>
<view class="stat-label">获赞与收藏</view> <view class="stat-label">点赞</view>
</view> </view>
<view class="stat-item">
<view class="stat-number">{{ userStats.likes || "5.4万" }}</view>
<view class="stat-label">收藏</view>
</view>
</view> </view>
<!-- 权益兑换入口 --> <!-- 权益兑换入口 -->
<!-- <view class="exchange-entry" @click="showExchangePopup"> <!-- <view class="exchange-entry" @click="showExchangePopup">
@ -279,7 +283,7 @@
<MusicControl /> <MusicControl />
<!-- 激活AGENT弹窗 --> <!-- 激活AGENT弹窗 -->
<ActivateAgentPopup ref="activateAgentPopup" /> <ActivateAgentPopup :agentList="agentList" ref="activateAgentPopup" />
<!-- 权益兑换弹窗 --> <!-- 权益兑换弹窗 -->
<uni-popup ref="exchangePopup" type="center"> <uni-popup ref="exchangePopup" type="center">
@ -341,24 +345,6 @@ export default {
followers: "2462", followers: "2462",
likes: "5.4万", likes: "5.4万",
}, },
agentList: [
{
avatar:
"https://epic.js-dyyj.com/uploads/20250728/d27ef6e6c26877da7775664fed376c6f.png",
},
{
avatar:
"https://epic.js-dyyj.com/uploads/20250728/d7bf0dd2f3f272afba687b525a7c575c.png",
},
{
avatar:
"https://epic.js-dyyj.com/uploads/20250728/d27ef6e6c26877da7775664fed376c6f.png",
},
{
avatar:
"https://epic.js-dyyj.com/uploads/20250728/d7bf0dd2f3f272afba687b525a7c575c.png",
},
],
menuItems: [ menuItems: [
{ {
title: "账号与安全", title: "账号与安全",
@ -388,11 +374,11 @@ export default {
exchangeCode: "", // exchangeCode: "", //
memorialItems: [], memorialItems: [],
assetList: [], assetList: [],
agentList:[]
}; };
}, },
onLoad() { onLoad() {
// //
console.log("iSoul页面加载完成");
}, },
onShow() { onShow() {
this.userInfo = this.userInfo =
@ -400,13 +386,25 @@ export default {
JSON.parse(uni.getStorageSync("userInfo"))) || JSON.parse(uni.getStorageSync("userInfo"))) ||
this.$store.state.user.userInfo || this.$store.state.user.userInfo ||
{}; {};
console.log(this.userInfo);
if (this.userInfo && this.userInfo.token) { if (this.userInfo && this.userInfo.token) {
this.getListIp(); this.getListIp();
this.getOrderChildList(); this.getOrderChildList();
this.getUserInfo();
this.getAgentList()
} }
}, },
methods: { methods: {
getAgentList(){
this.Post({}, "/framework/agent/purchaseList", "DES").then((res) => {
this.agentList = res.data
});
},
getUserInfo() {
this.Post({}, "/framework/user/getInfo", "DES").then((res) => {
uni.setStorageSync("userInfo", JSON.stringify(res.data));
this.userInfo = res.data
});
},
getListIp() { getListIp() {
this.Post({}, "/framework/order/ipOrderList", "DES").then((res) => { this.Post({}, "/framework/order/ipOrderList", "DES").then((res) => {
if (res.code == 200) { if (res.code == 200) {

20
pages/index/timeShopBank.vue

@ -4,7 +4,7 @@
<headerVue fixed></headerVue> <headerVue fixed></headerVue>
<!-- 灵动岛组件 --> <!-- 灵动岛组件 -->
<DynamicIsland :page-id="'timeShopBank_page'" :style-type="'timeShop'" /> <DynamicIsland ref="dynamicIsland" :page-id="'timeShopBank_page'" :style-type="'timeShop'" />
<!-- Tab切换组件 --> <!-- Tab切换组件 -->
<view class="tab-container"> <view class="tab-container">
@ -137,8 +137,17 @@ export default {
}, },
onLoad() { onLoad() {
this.initializeData(); this.initializeData();
this.userInfo =
(uni.getStorageSync("userInfo") &&
JSON.parse(uni.getStorageSync("userInfo"))) ||
this.$store.state.user.userInfo ||
{};
if (this.userInfo && this.userInfo.token) {
this.getUserInfo()
}
}, },
// //
onReachBottom() { onReachBottom() {
this.loadMoreItems(); this.loadMoreItems();
@ -150,6 +159,15 @@ export default {
uni.$emit("pageScroll_timeShopBank_page", e.scrollTop); uni.$emit("pageScroll_timeShopBank_page", e.scrollTop);
}, },
methods: { methods: {
getUserInfo() {
this.Post({}, "/framework/user/getInfo", "DES").then((res) => {
uni.setStorageSync("userInfo", JSON.stringify(res.data));
this.userInfo = res.data
this.$nextTick(() =>{
this.$refs.dynamicIsland.getUserInfo();
})
});
},
// //
getRandomItem() { getRandomItem() {
const titleType = const titleType =

4
static/js/request.js

@ -7,8 +7,8 @@ const DEV_API_URL = 'https://epic.js-dyyj.com';
// const PROD_API_URL = 'https://epic.js-dyyj.com'; // const PROD_API_URL = 'https://epic.js-dyyj.com';
const PROD_API_URL = 'https://epic.new.js-dyyj.com'; const PROD_API_URL = 'https://epic.new.js-dyyj.com';
const NEWAPIURL = process.env.NODE_ENV === 'development' ? DEV_API_URL : PROD_API_URL; const NEWAPIURL = process.env.NODE_ENV === 'development' ? DEV_API_URL : PROD_API_URL;
const DEV_API_URL_DES = 'http://192.168.124.118:8083/xcx'; // const DEV_API_URL_DES = 'http://192.168.124.118:8083/xcx';
// const DEV_API_URL_DES = 'https://des.js-dyyj.com/xcx'; const DEV_API_URL_DES = 'https://des.js-dyyj.com/xcx';
const PROD_API_URL_DES = 'https://des.js-dyyj.com/xcx'; const PROD_API_URL_DES = 'https://des.js-dyyj.com/xcx';
const NEWAPIURL_DES = process.env.NODE_ENV === 'development' ? DEV_API_URL_DES : PROD_API_URL_DES; const NEWAPIURL_DES = process.env.NODE_ENV === 'development' ? DEV_API_URL_DES : PROD_API_URL_DES;
const getToken = () => { const getToken = () => {

937
subPackages/memorialAlbum/detail.vue

@ -1,382 +1,569 @@
<template> <template>
<view class="memorial-detail"> <view class="memorial-detail">
<!-- 轮播图区域 --> <!-- 轮播图区域 -->
<view class="banner-content"> <view class="content">
<swiper class="top-banner" :circular="true" :interval="6000" :duration="800" :indicator-dots="false" <view class="banner-content">
:autoplay="true" @change="swiperChange"> <swiper
<swiper-item v-for="(item, index) in topBanner" :key="index"> class="top-banner"
<image class="top-banner" :src="showImg(item)" mode="aspectFill"></image> :circular="true"
</swiper-item> :interval="6000"
</swiper> :duration="800"
:indicator-dots="false"
<view class="dot-container"> :autoplay="true"
<view :class="['dot-line', index == swiperIndex ? 'active' : '']" v-for="(item, index) in topBanner" @change="swiperChange"
:key="index"></view> >
</view> <swiper-item v-for="(item, index) in topBanner" :key="index">
<image
<!-- 页码指示器 --> class="top-banner"
<view class="page-indicator"> :src="showImg(item)"
<text class="page-text">{{ swiperIndex + 1 }}/{{ topBanner.length }}</text> mode="aspectFill"
</view> ></image>
</view> </swiper-item>
</swiper>
<!-- 数字资产信息卡片 -->
<view class="asset-info-card"> <view class="dot-container">
<view class="card-header"> <view
<text class="asset-title">{{ detailInfo.goodsName }}</text> :class="['dot-line', index == swiperIndex ? 'active' : '']"
</view> v-for="(item, index) in topBanner"
:key="index"
<view class="info-row"> ></view>
<text class="info-label">发行数量</text> </view>
<text class="info-value">{{ detailInfo.publishQuantity||0 }}</text> </view>
</view> <view class="asset-title">
{{ detailInfo.goodsName }}
<view class="divider"></view> </view>
<view class="info-row"> <!-- 发行数量胶囊 -->
<text class="info-label">数字资产所有方</text> <view class="issue-quantity-pill">
<text class="info-value">{{ detailInfo.ownPart||'-' }}</text> <text class="pill-text"
</view> >发行数量: {{ detailInfo.publishQuantity || 0 }}</text
>
<view class="info-row"> </view>
<text class="info-label">数字资产权利方</text>
<text class="info-value">{{ detailInfo.powerPart||'-' }}</text> <!-- 收藏信息区域 -->
</view> <view class="info-section">
<view class="info-row"> <view
<text class="info-label">授权品牌</text> class="info-row"
<text class="info-value">{{ detailInfo.authorizeBrand||'-' }}</text> style="flex-direction: row; justify-content: space-around"
</view> >
<!-- 收藏信息 --> <view class="info-item">
<view class="collection-info"> <text class="info-label">收藏者</text>
<view class="collection-header"> 收藏信息 </view> <text class="info-value">{{
<view class="collector-info"> (userInfo && userInfo.nickname) || "--"
<text class="collector-label">收藏者</text> }}</text>
<text class="collector-name">{{ detailInfo.nickname||'--' }}</text> </view>
<text class="collection-number">编号</text> <view class="info-item">
<text class="collection-code">{{ detailInfo.code||'--' }}</text> <text class="info-label">编号</text>
<text class="collection-time-label">收藏时间</text> <text class="info-value">{{ detailInfo.code || "--" }}</text>
<text class="collection-time">{{ detailInfo.activeTime||'--' }}</text> </view>
</view> <view class="info-item">
</view> <text class="info-label">收藏时间</text>
</view> <text class="info-value">{{ detailInfo.activeTime || "--" }}</text>
</view>
<!-- 认证信息卡片 --> </view>
<view class="cert-info-card"> </view>
<view class="cert-header"> 认证信息 </view>
<!-- 分割线 -->
<view class="cert-row"> <view class="section-divider"></view>
<text class="cert-label">授权码</text>
<text class="cert-value">{{ detailInfo.activeCode||"--" }}</text> <!-- 资产权利信息区域 -->
</view> <view class="info-section">
</view> <view class="info-row">
<view class="info-item">
<!-- 藏品详情卡片 --> <text class="info-label">数字资产所有方</text>
<view class="product-detail-card"> <text class="info-value">{{ detailInfo.ownPart || "--" }}</text>
<view class="product-header"> 藏品详情 </view> </view>
<view class="product-content"> <view class="info-item">
<view class="" v-html="detailInfo.detailUrl"> <text class="info-label">数字资产权利方</text>
<text class="info-value">{{ detailInfo.powerPart || "--" }}</text>
</view> </view>
</view> <view class="info-item">
</view> <text class="info-label">授权品牌</text>
</view> <text class="info-value">{{
detailInfo.authorizeBrand || "--"
}}</text>
</view>
</view>
</view>
<!-- 分割线 -->
<view class="section-divider"></view>
<!-- 授权码和下载按钮区域 -->
<view class="auth-section">
<view class="auth-code-item">
<text class="info-label">授权码</text>
<text class="auth-code-value">{{
detailInfo.activeCode || "--"
}}</text>
</view>
<view class="download-button" @click="handleDownload">
<text class="download-text">点击下载</text>
</view>
</view>
</view>
<!-- 藏品详情卡片 -->
<view class="product-detail-card">
<view class="product-header"> 藏品详情 </view>
<view class="product-content">
<view class="" v-html="detailInfo.detailUrl"> </view>
</view>
</view>
</view>
</template> </template>
<script> <script>
export default { export default {
name: "MemorialDetail", name: "MemorialDetail",
data() { data() {
return { return {
swiperIndex: 0, swiperIndex: 0,
detailInfo: { detailInfo: {},
topBanner: [],
}, userInfo: null,
topBanner: [] };
}; },
}, onLoad(options) {
onLoad(options) { let userInfo = uni.getStorageSync("userInfo");
// if (userInfo) {
if (options.id) { this.userInfo = JSON.parse(userInfo);
this.loadDetailInfo(options.id); }
} //
}, if (options.id) {
methods: { this.loadDetailInfo(options.id);
swiperChange(e) { }
this.swiperIndex = e.detail.current; },
}, methods: {
// swiperChange(e) {
async loadDetailInfo(id) { this.swiperIndex = e.detail.current;
try { },
this.Post({ //
orderChildId: id async loadDetailInfo(id) {
}, `/framework/order/ipOrderDetail`, "DES").then((res) => { try {
if (res.code == 200) { this.Post(
res.data.detailUrl = this.addImgStyleToHtml(res.data.detailUrl) {
this.detailInfo = res.data; orderChildId: id,
this.topBanner = res.data.hdUrl.split(',') },
`/framework/order/ipOrderDetail`,
} else { "DES"
uni.showToast({ ).then((res) => {
title: res.msg, if (res.code == 200) {
icon: "none", res.data.detailUrl = this.addImgStyleToHtml(res.data.detailUrl);
}); this.detailInfo = res.data;
} this.topBanner = res.data.hdUrl.split(",");
}); } else {
// uni.showToast({
console.log("加载纪念册详情,ID:", id); title: res.msg,
} catch (error) { icon: "none",
console.error("加载详情失败:", error); });
uni.showToast({ }
title: "加载失败", });
icon: "none", //
}); console.log("加载纪念册详情,ID:", id);
} } catch (error) {
}, console.error("加载详情失败:", error);
uni.showToast({
// title: "加载失败",
previewMainImage() { icon: "none",
const imageUrl = this.showImg(this.detailInfo.image); });
uni.previewImage({ }
urls: [imageUrl], },
current: imageUrl,
}); //
}, previewMainImage() {
const imageUrl = this.showImg(this.detailInfo.image);
// uni.previewImage({
showImg(img) { urls: [imageUrl],
if (!img) return ""; current: imageUrl,
if (img.startsWith("http")) { });
return img; },
} //
const NEWAPIURL = "https://epic.js-dyyj.com"; handleDownload() {
return `${NEWAPIURL}${img}`; // URL
}, const imageUrl = this.topBanner[0];
}, console.log(imageUrl);
}; //
uni.downloadFile({
url: imageUrl,
success: (res) => {
console.log(res);
if (res.statusCode === 200) {
//
uni.saveImageToPhotosAlbum({
filePath: res.tempFilePath,
success: () => {
uni.showToast({
title: "图片已保存到相册",
icon: "success",
});
},
fail: (err) => {
uni.showToast({
title: "保存失败,请检查权限",
icon: "none",
});
},
});
} else {
uni.showToast({
title: "下载失败",
icon: "none",
});
}
},
fail: (err) => {
console.log(err);
uni.showToast({
title: "下载失败",
icon: "none",
});
},
});
},
},
};
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.memorial-detail { .memorial-detail {
min-height: 100vh; min-height: 100vh;
background: #f8f9fa; background: #f8f9fa;
padding-bottom: env(safe-area-inset-bottom); padding-bottom: env(safe-area-inset-bottom);
} }
// //
.main-image-section { .main-image-section {
width: 100%; width: 100%;
height: 600rpx; height: 600rpx;
background: #f0f0f0; background: #f0f0f0;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
.main-image { .main-image {
width: 100%; width: 100%;
height: 100%; height: 100%;
object-fit: cover; object-fit: cover;
} }
} }
// //
.asset-info-card, .asset-info-card,
.cert-info-card, .cert-info-card,
.product-detail-card { .product-detail-card {
margin: 20rpx; margin: 20rpx;
background: white; background: white;
border-radius: 16rpx; border-radius: 16rpx;
padding: 32rpx; padding: 32rpx;
box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08); box-shadow: 0 4rpx 20rpx rgba(0, 0, 0, 0.08);
} }
.asset-title {
// font-size: 44rpx;
.asset-info-card { font-weight: 600;
.card-header { color: #333;
margin-bottom: 32rpx; line-height: 1.4;
text-align: center;
.asset-title { margin-top: 45rpx;
font-size: 36rpx; }
font-weight: 600; //
color: #333; .asset-info-card {
line-height: 1.4; .card-header {
} margin-bottom: 32rpx;
} }
.info-row { .info-row {
display: flex; display: flex;
margin-bottom: 20rpx; margin-bottom: 20rpx;
align-items: flex-start; align-items: center;
.info-label { .info-label {
font-size: 28rpx; font-size: 28rpx;
color: #666; color: #989898;
margin-right: 16rpx; margin-right: 16rpx;
flex-shrink: 0; flex-shrink: 0;
} text-align: center;
}
.info-value {
font-size: 28rpx; .info-value {
color: #333; font-size: 28rpx;
flex: 1; color: #333;
} flex: 1;
} }
}
.divider {
height: 1rpx; .divider {
background: #e0e0e0; height: 1rpx;
margin: 24rpx 0; background: #e0e0e0;
} margin: 24rpx 0;
}
//
.collection-info { //
margin-top: 40rpx; .collection-info {
padding: 32rpx; margin-top: 40rpx;
background: #f8f9fa; padding: 32rpx;
border-radius: 12rpx; background: #f8f9fa;
border: 2rpx solid #e0e0e0; border-radius: 12rpx;
border: 2rpx solid #e0e0e0;
.collection-header {
text-align: center; .collection-header {
font-size: 28rpx; text-align: center;
color: #666; font-size: 28rpx;
margin-bottom: 24rpx; color: #666;
font-weight: 500; margin-bottom: 24rpx;
} font-weight: 500;
}
.collector-info {
display: grid; .collector-info {
grid-template-columns: auto auto; display: grid;
gap: 16rpx 24rpx; grid-template-columns: auto auto;
text-align: center; gap: 16rpx 24rpx;
text-align: center;
.collector-label,
.collection-number, .collector-label,
.collection-time-label { .collection-number,
font-size: 24rpx; .collection-time-label {
color: #666; font-size: 24rpx;
} color: #666;
}
.collector-name,
.collection-code, .collector-name,
.collection-time { .collection-code,
font-size: 26rpx; .collection-time {
color: #333; font-size: 26rpx;
font-weight: 500; color: #333;
} font-weight: 500;
}
.collection-code {
font-family: "Courier New", monospace; .collection-code {
} font-family: "Courier New", monospace;
}
.collection-time {
font-family: "Courier New", monospace; .collection-time {
} font-family: "Courier New", monospace;
} }
} }
} }
}
//
.cert-info-card { //
.cert-header { .cert-info-card {
text-align: center; .cert-header {
font-size: 28rpx; text-align: center;
color: #666; font-size: 28rpx;
margin-bottom: 32rpx; color: #666;
font-weight: 500; margin-bottom: 32rpx;
} font-weight: 500;
}
.cert-row {
margin-bottom: 24rpx; .cert-row {
padding-bottom: 20rpx; margin-bottom: 24rpx;
border-bottom: 1rpx solid #f0f0f0; padding-bottom: 20rpx;
border-bottom: 1rpx solid #f0f0f0;
&:last-child {
margin-bottom: 0; &:last-child {
padding-bottom: 0; margin-bottom: 0;
border-bottom: none; padding-bottom: 0;
} border-bottom: none;
}
.cert-label {
display: block; .cert-label {
font-size: 26rpx; display: block;
color: #666; font-size: 26rpx;
margin-bottom: 8rpx; color: #666;
} margin-bottom: 8rpx;
}
.cert-value {
display: block; .cert-value {
font-size: 24rpx; display: block;
color: #333; font-size: 24rpx;
font-family: "Courier New", monospace; color: #333;
word-break: break-all; font-family: "Courier New", monospace;
line-height: 1.5; word-break: break-all;
} line-height: 1.5;
} }
} }
}
//
.product-detail-card { //
.product-header { .product-detail-card {
text-align: center; .product-header {
font-size: 28rpx; text-align: center;
color: #666; font-size: 28rpx;
margin-bottom: 32rpx; color: #000000;
font-weight: 500; margin-bottom: 32rpx;
} font-weight: bold;
}
.product-content {
.product-description { .product-content {
font-size: 28rpx; .product-description {
color: #333; font-size: 28rpx;
line-height: 1.6; color: #333;
} line-height: 1.6;
} }
} }
}
.banner-content {
width: 100%; .banner-content {
height: 700rpx; width: 100%;
position: relative; height: 1624rpx;
position: relative;
.top-banner {
width: 100%; .top-banner {
height: 100%; width: 100%;
} height: 100%;
border-radius: 20rpx;
.dot-container { }
position: absolute;
bottom: 43rpx; .dot-container {
display: flex; position: absolute;
align-items: center; bottom: 43rpx;
justify-content: center; display: flex;
width: 100%; align-items: center;
left: 0; justify-content: center;
width: 100%;
.dot-line { left: 0;
width: 52rpx;
height: 4rpx; .dot-line {
margin: 0 8rpx; width: 52rpx;
background: RGBA(189, 170, 173, 0.8); height: 4rpx;
margin: 0 8rpx;
&.active { background: RGBA(189, 170, 173, 0.8);
background: #94fafa;
} &.active {
} background: #94fafa;
} }
}
.page-indicator { }
position: absolute;
bottom: 20rpx; .page-indicator {
right: 20rpx; position: absolute;
// background: rgba(0, 0, 0, 0.5); bottom: 20rpx;
border-radius: 10rpx; right: 20rpx;
padding: 10rpx 20rpx; // background: rgba(0, 0, 0, 0.5);
border-radius: 10rpx;
.page-text { padding: 10rpx 20rpx;
font-size: 24rpx;
color: #fff; .page-text {
font-weight: 500; font-size: 24rpx;
} color: #fff;
} font-weight: 500;
} }
</style> }
}
.content {
margin: 30rpx;
background: white;
border-radius: 16rpx;
padding: 20rpx;
box-shadow: 0 4rpx 20rpx #00ff02;
}
//
.issue-quantity-pill {
display: flex;
justify-content: center;
margin: 30rpx 0;
.pill-text {
background: linear-gradient(135deg, #00fffe, #00ff08);
border-radius: 50rpx;
padding: 10rpx 20rpx;
font-size: 24rpx;
color: #333333;
font-weight: 500;
}
}
//
.info-section {
margin: 20rpx 0;
.info-row {
display: flex;
flex-direction: column;
gap: 20rpx;
}
.info-item {
display: flex;
flex-direction: column;
gap: 8rpx;
padding: 16rpx;
align-items: center;
.info-label {
font-size: 24rpx;
color: #989898;
font-weight: 500;
}
.info-value {
font-size: 28rpx;
color: #333;
font-weight: bold;
word-break: break-all;
}
}
}
// 线
.section-divider {
height: 2rpx;
background: #e5e5e5;
margin: 30rpx 0;
}
//
.auth-section {
margin: 20rpx 0;
.auth-code-item {
display: flex;
flex-direction: column;
gap: 8rpx;
padding: 16rpx;
margin-bottom: 30rpx;
align-items: center;
.info-label {
font-size: 24rpx;
color: #989898;
font-weight: 500;
}
.auth-code-value {
font-size: 24rpx;
color: #333;
font-family: "Courier New", monospace;
font-weight: bold;
word-break: break-all;
padding: 12rpx;
border-radius: 8rpx;
}
}
.download-button {
display: flex;
justify-content: center;
align-items: center;
background: linear-gradient(135deg, #00fffe, #00ff08);
width: 334rpx;
border-radius: 20rpx;
padding: 15rpx 40rpx;
transition: all 0.3s ease;
margin: 0 auto;
&:active {
transform: scale(0.95);
box-shadow: 0 2rpx 10rpx rgba(119, 243, 249, 0.5);
}
.download-text {
margin: 0 auto;
font-size: 28rpx;
color: #000000;
font-weight: bold;
}
}
}
</style>

Loading…
Cancel
Save