Browse Source

灵动岛

dev_des
1054425342@qq.com 2 months ago
parent
commit
0d170b8380
  1. 18
      App.vue
  2. 300
      components/DynamicIsland.vue
  3. 2760
      pages/index/iSoul.vue
  4. 5
      subPackages/orderQy/detail.vue

18
App.vue

@ -1,6 +1,5 @@
<script>
import store from './store'
import store from "./store";
export default {
globalData: {
mainSliderIndex: 0,
@ -34,20 +33,19 @@ export default {
onShow: function () {
//
this.recordAppShow();
this.getUserInfo()
this.getUserInfo();
},
onHide: function () {
// 退
this.recordAppHide();
},
methods: {
getUserInfo(){
if(!this.getUserId())return
this.Post({}, "/framework/user/getInfo", "DES")
.then((res) => {
uni.setStorageSync('userInfo', JSON.stringify(res.data))
})
},
getUserInfo() {
if (!this.getUserId()) return;
this.Post({}, "/framework/user/getInfo", "DES").then((res) => {
uni.setStorageSync("userInfo", JSON.stringify(res.data));
});
},
// 使
initUserUsageStats() {
// ID

300
components/DynamicIsland.vue

@ -16,47 +16,63 @@
>
<!-- 展开状态 -->
<view v-if="!actualCompactState" class="expanded-content">
<!-- <view style="display: flex;align-items: center;justify-content: center;color: white;" v-if="!(userInfo&&userInfo.token)">
去登录
</view> -->
<template>
<template v-if="styleType != 'timeShop'">
<view class="top-section">
<text class="welcome-text" v-if="userInfo && userInfo.token">{{
title
}}</text>
<text class="welcome-text" v-else @click="toLogin"
>hi 快去登录 ></text
>
<view class="qr-code">
<image
style="width: 39rpx; height: 39rpx"
src="https://epic.js-dyyj.com/uploads/20250728/88e0991e58e692c86c25e42537edc6ca.png"
></image>
</view>
</view>
<view class="bottom-section">
<view class="stats-section">
<view class="stat-item">
<text class="stat-number">{{ getStatNumber("权益") }}</text>
<text class="stat-label">权益</text>
<!-- 三栏布局 -->
<view class="three-column-layout">
<!-- 左侧欢迎信息 -->
<view class="left-section">
<view class="welcome-message">
<text class="welcome-text"
>Hi!{{
userInfo && userInfo.token ? userInfo.nickname : "用户"
}}</text
>
<text class="welcome-subtitle">欢迎回来~</text>
</view>
<view class="stat-item">
<text class="stat-number">{{
getStatNumber("时间银行")
}}</text>
<text class="stat-label">时间银行</text>
<view class="stats-info">
<text class="stats-number">2</text>
<text class="stats-unit"></text>
</view>
<view class="stats-label">文旅权益</view>
</view>
<view class="divider"></view>
<view class="action-section">
<text class="action-text">{{ actionText }}</text>
<image
@click="toWebView"
class="avatar"
src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png"
mode="aspectFill"
></image>
<!-- 左侧分隔线 -->
<view class="column-divider"></view>
<!-- 中间时间奖励 -->
<view class="middle-section">
<view class="time-reward-container">
<text class="time-reward-title">时间奖励</text>
<view class="time-reward-stats">
<text class="time-reward-number">120</text>
<text class="time-reward-unit"></text>
</view>
<text class="time-reward-label">文旅时间银行</text>
</view>
</view>
<!-- 右侧分隔线 -->
<view class="column-divider"></view>
<!-- 右侧头像和链接 -->
<view class="right-section">
<view class="avatar-container">
<image
class="avatar"
src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png"
mode="aspectFill"
></image>
</view>
<view class="">
<view class="profile-info">
<text class="profile-title">文化工厂主理人</text>
<text class="profile-name">EVITA</text>
</view>
<view class="platform-link" @click="toWebView">
<text class="link-text">平台简介 >></text>
</view>
</view>
</view>
</view>
</template>
@ -169,6 +185,7 @@ export default {
currentAvatar: "https://picsum.photos/80/80",
currentAction: "激活你的Agent",
userInfo: {},
JDSU_IMG_URL: "https://epic.js-dyyj.com",
};
},
computed: {
@ -332,6 +349,16 @@ export default {
"https://des.js-dyyj.com/dist/#/",
});
},
//
showImg(img) {
if (!img) return;
if (img.indexOf("https://") != -1 || img.indexOf("http://") != -1) {
return img;
} else {
return this.JDSU_IMG_URL + img;
}
},
},
};
</script>
@ -344,7 +371,7 @@ export default {
position: relative;
opacity: 1;
transition: opacity 0.3s ease;
padding:24rpx 0
padding: 24rpx 0;
}
.dynamic-island-placeholder.visible {
@ -362,13 +389,12 @@ export default {
margin: 0 auto;
z-index: 100;
background: rgba(0, 0, 0, 0.75);
background: linear-gradient(180deg, #fffdb7 0%, #97fffa 100%);
backdrop-filter: blur(20rpx);
-webkit-backdrop-filter: blur(20rpx);
border: 1rpx solid rgba(255, 255, 255, 0.1);
border-radius: 40rpx;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.3),
0 0 0 1rpx rgba(255, 255, 255, 0.05) inset;
box-shadow: 0 8rpx 32rpx rgba(0, 0, 0, 0.1),
0 0 0 1rpx rgba(255, 255, 255, 0.2) inset;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
overflow: hidden;
@ -414,54 +440,182 @@ export default {
display: flex;
flex-direction: column;
height: 100%;
padding: 24rpx 32rpx;
padding: 24rpx 20rpx;
opacity: 1;
visibility: visible;
transition: opacity 0.2s ease-in 0.1s, visibility 0s linear 0s;
}
.top-section {
/* 三栏布局样式 */
.three-column-layout {
display: flex;
align-items: flex-end;
justify-content: space-between;
align-items: center;
height: 100%;
width: 100%;
}
/* 列分隔线 */
.column-divider {
width: 2rpx;
height: 60rpx;
background: rgba(0, 0, 0, 0.1);
margin: 35rpx 16rpx;
flex-shrink: 0;
}
/* 左侧区域 */
.left-section {
display: flex;
flex-direction: column;
align-items: flex-start;
color: #333;
width: 140rpx;
}
.welcome-message {
display: flex;
flex-direction: column;
margin-bottom: 16rpx;
}
.welcome-text {
font-size: 28rpx;
color: #ffffff;
font-weight: 500;
font-size: 24rpx;
color: #000000;
font-weight: bold;
line-height: 1.2;
}
.welcome-subtitle {
font-size: 24rpx;
color: #000000;
margin-top: 4rpx;
font-weight: bold;
}
.stats-info {
display: flex;
align-items: baseline;
margin-bottom: 8rpx;
}
.stats-number {
font-size: 40rpx;
color: #333;
font-weight: bold;
line-height: 1;
}
.stats-unit {
font-size: 24rpx;
color: #000000;
margin-left: 4rpx;
}
.stats-label {
font-size: 22rpx;
color: #000000;
}
/* 中间区域 */
.middle-section {
display: flex;
justify-content: flex-start;
align-items: center;
flex: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.time-reward-container {
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: flex-start;
padding: 0 10rpx;
width: 160rpx;
}
.time-reward-title {
font-size: 22rpx;
color: #000000;
font-weight: 500;
margin-bottom: 12rpx;
}
.time-reward-stats {
display: flex;
align-items: baseline;
margin-bottom: 8rpx;
}
.time-reward-number {
font-size: 40rpx;
color: #000000;
font-weight: bold;
line-height: 1;
}
.qr-code {
width: 32rpx;
height: 32rpx;
.time-reward-unit {
font-size: 24rpx;
color: #000000;
margin-left: 4rpx;
}
.qr-icon {
width: 24rpx;
height: 24rpx;
background: rgba(255, 255, 255, 0.8);
border-radius: 4rpx;
.time-reward-label {
font-size: 22rpx;
color: #000000;
}
/* 右侧区域 */
.right-section {
display: flex;
align-items: flex-end;
width: 375rpx;
}
.avatar-container {
position: relative;
margin-right: 10rpx;
width: 140rpx;
height: 140rpx;
}
&::before {
content: "";
position: absolute;
top: 2rpx;
left: 2rpx;
right: 2rpx;
bottom: 2rpx;
background: rgba(0, 0, 0, 0.6);
border-radius: 2rpx;
}
.avatar {
width: 140rpx;
height: 140rpx;
border-radius: 50%;
}
.profile-info {
display: flex;
flex-direction: column;
align-items: flex-start;
justify-content: flex-start;
}
.profile-title {
font-size: 24rpx;
color: #000000;
margin-bottom: 4rpx;
font-weight: bold;
}
.profile-name {
font-size: 24rpx;
color: #000000;
font-weight: bold;
}
.platform-link {
cursor: pointer;
}
.link-text {
font-size: 22rpx;
color: #000000;
text-decoration: underline;
}
/* 保留原有的底部区域样式用于timeShop模式 */
.bottom-section {
display: flex;
align-items: center;
@ -521,12 +675,6 @@ export default {
max-width: 200rpx;
}
.avatar {
width: 113rpx;
height: 113rpx;
border-radius: 50%;
}
//
.dynamic-island:active {
transform: scale(0.98);
@ -561,7 +709,7 @@ export default {
.compact-name {
font-size: 27rpx;
color: #ffffff;
color: #333;
font-weight: bold;
flex: 1;
text-align: left;
@ -575,7 +723,7 @@ export default {
width: 48rpx;
height: 48rpx;
border-radius: 50%;
border: 2rpx solid rgba(255, 255, 255, 0.3);
border: 2rpx solid rgba(0, 0, 0, 0.2);
flex-shrink: 0;
}

2760
pages/index/iSoul.vue

File diff suppressed because it is too large

5
subPackages/orderQy/detail.vue

@ -618,10 +618,7 @@ export default {
//
viewDigitalAsset(goods) {
//
uni.showToast({
title: "查看数字资产",
icon: "none",
});
uni.navigateTo({
url: "/subPackages/memorialAlbum/detail?id=" + goods.childId,
});

Loading…
Cancel
Save