Browse Source

样式修改

dev_des
1054425342@qq.com 2 months ago
parent
commit
6cf9d9acdf
  1. 39
      components/ActivateAgentPopup.vue
  2. 2
      components/BackButton.vue
  3. 795
      components/DynamicIsland - 副本.vue
  4. 195
      components/DynamicIsland.vue
  5. 2
      components/MusicControl.vue
  6. 18
      components/header.vue
  7. 15
      pages.json
  8. 16
      pages/index/iSoul.vue
  9. 8
      pages/index/index.vue
  10. 4
      pages/index/timeShopBank.vue
  11. BIN
      static/image/tabbar/time.png
  12. BIN
      static/image/tabbar/time_select.png
  13. 4
      static/js/request.js
  14. 40
      subPackages/other/evita.vue
  15. 33
      subPackages/other/introduction.vue
  16. 5
      subPackages/techan/detail.vue

39
components/ActivateAgentPopup.vue

@ -1,5 +1,5 @@
<template> <template>
<uni-popup ref="popup" type="bottom" :mask-click="false"> <uni-popup ref="popup" type="bottom" :mask-click="false" :z-index="999">
<view class="activate-agent-popup"> <view class="activate-agent-popup">
<!-- 弹窗头部 --> <!-- 弹窗头部 -->
<view class="popup-header"> <view class="popup-header">
@ -42,7 +42,7 @@
agent.status == '0' ? 'status-inactive' : 'status-active' agent.status == '0' ? 'status-inactive' : 'status-active'
" "
> >
<text class="status-text">{{ agent.status==1?'已激活':'待激活' }}</text> <text class="status-text">{{ agent.status==1?'去使用':'去激活' }}</text>
</view> </view>
</view> </view>
</view> </view>
@ -75,35 +75,15 @@ export default {
handleAgentClick(agent) { handleAgentClick(agent) {
console.log("点击了AGENT:", agent); console.log("点击了AGENT:", agent);
if (agent.status === "待激活") { if (agent.status ==1) {
// //
uni.showToast({ uni.navigateTo({
title: `正在激活${agent.name}...`, url:"/subPackages/equityGoods/detail?id="+agent.vos[0].benefitPackageId
icon: "loading", })
});
//
setTimeout(() => {
agent.status = "去使用";
uni.showToast({
title: `${agent.name}激活成功!`,
icon: "success",
});
}, 2000);
} else { } else {
// 使 uni.navigateTo({
uni.showToast({ url:"/subPackages/equityGoods/detail?id="+agent.vos[0].benefitPackageId
title: `正在启动${agent.name}...`, })
icon: "loading",
});
// AGENT
setTimeout(() => {
uni.showToast({
title: `${agent.name}启动成功!`,
icon: "success",
});
}, 1500);
} }
}, },
}, },
@ -111,6 +91,7 @@ export default {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.activate-agent-popup { .activate-agent-popup {
background: #ffffff; background: #ffffff;
border-radius: 24rpx 24rpx 0 0; border-radius: 24rpx 24rpx 0 0;

2
components/BackButton.vue

@ -16,7 +16,7 @@ export default {
// //
iconSrc: { iconSrc: {
type: String, type: String,
default: "https://static.ticket.sz-trip.com/epicSoul/taozi/back.png", default: "https://epic.js-dyyj.com/uploads/20250825/f7e4825867dbd90e2cd0721a49fad6eb.png",
}, },
// //
customBack: { customBack: {

795
components/DynamicIsland - 副本.vue

@ -0,0 +1,795 @@
<template>
<!-- 灵动岛占位区域 - 始终存在但控制可见性 -->
<view class="dynamic-island-placeholder" :class="{ visible: isScrolled }"
:style="{ height: 216 + 'rpx' }">
<view class="dynamic-island" :class="{
compact: actualCompactState,
fixed: isFixed,
}" :style="{ top: isFixed ? fixedTopPosition + 'px' : 0 }" @click="handleToggle">
<!-- 展开状态 -->
<view v-if="!actualCompactState" class="expanded-content">
<template>
<template v-if="styleType != 'timeShop'">
<!-- 三栏布局 -->
<view class="three-column-layout">
<!-- 右侧头像和链接 -->
<view class="right-section">
<view class="avatar-container" @click="toWebView">
<image class="avatar"
src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png"
mode="aspectFill"></image>
</view>
<view class="" style="display: flex;flex-direction: column;justify-content: space-between;height: 100%;">
<view class="profile-info">
<text class="profile-title">数字领航员</text>
<text class="profile-name">EVITA</text>
</view>
<view class="platform-link">
<view class="link-text" style="margin-bottom: 15rpx;">DES介绍 >>
</view>
<view class="link-text">DES广播 >></view>
</view>
</view>
</view>
<!-- 左侧分隔线 -->
<view class="column-divider"></view>
<!-- 左侧欢迎信息 -->
<view class="left-section">
<view class="welcome-message">
<view class="welcome-text">Hi!{{
userInfo && userInfo.token ? userInfo.nickname : "用户"
}}欢迎回来~</view>
</view>
<view class="" style="font-size: 24rpx;font-weight: bold;color: #000000;">
查看您的DES数据资产行
</view>
<view class="" style="display: flex;align-items: flex-end;justify-content: space-between;">
<view class="">
<view class="stats-info" @click="toOrder">
<text class="stats-number">2</text>
<text class="stats-unit"></text>
</view>
<view class="stats-label">数字权益行</view>
</view>
<div>
<view class="stats-info" @click="toOrder">
<text class="stats-number">2</text>
<text class="stats-unit"></text>
</view>
<view class="stats-label">数字资产行</view>
</div>
<view class="middle-section">
<view class="time-reward-container">
<text class="time-reward-title" style="margin-bottom: 5rpx;">时间奖励</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" style="font-weight: bold;">旅行时间行</text>
</view>
</view>
</view>
</view>
</view>
</template>
<template v-if="styleType == 'timeShop'">
<view class="bottom-section">
<view class="" style="flex:1;">
<view class="" style="display: flex;">
<view class="time-reward-container" style="width: 200rpx;">
<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"
style="font-size: 24rpx;font-weight: bold;">旅行时间行</text>
</view>
<view class="">
<view class="time-reward-number" style="font-size: 34rpx;">
{{
userInfo && userInfo.token ? userInfo.nickname : "用户"
}}
</view>
<view class="time-reward-label"
style="margin-top: 15rpx;font-weight: bold;font-size: 26rpx;">
积分:999<text
style="color: #999999;font-size: 22rpx;margin-left: 10rpx;">积分获取规则</text>
</view>
</view>
</view>
<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;">
时长:{{
userInfo && userInfo.token ? userInfo.hour+'h' : "-"
}}
</view>
<view class="">
<image style="width: 22rpx;height: 22rpx;margin-right: 15rpx;"
:src="showImg('/uploads/20250822/c8ee7615823a1ffaba400a4d5746de9a.png')">
</image>
点赞:120
</view>
<view class="">
<image style="width: 22rpx;height: 22rpx;margin: 0 15rpx;"
:src="showImg('/uploads/20250822/84c49f78f1c86b7340aaaa391bd4b7cf.png')">
</image>
留言:120
</view>
</view>
</view>
<image class="avatar"
src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png"
mode="aspectFill"></image>
</view>
</template>
</template>
</view>
<!-- 紧凑状态 -->
<view v-else class="compact-content">
<text class="compact-name">{{ getCompactName() }}</text>
<image class="compact-avatar"
src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png"
mode="aspectFill"></image>
</view>
</view>
</view>
</template>
<script>
export default {
name: "DynamicIsland",
props: {
isCompact: {
type: Boolean,
default: false,
},
styleType: {
type: String,
default: "",
},
isFixed: {
type: Boolean,
default: false,
},
title: {
type: String,
default: "用户",
},
subtitle: {
type: String,
default: "周杰伦 - 青花瓷",
},
avatarUrl: {
type: String,
default: "https://picsum.photos/80/80",
},
actionText: {
type: String,
default: "暂停",
},
//
pageId: {
type: String,
default: "default_page",
},
},
data() {
return {
isExpanded: false,
statusBarHeight: 0,
isScrolled: false,
scrollThreshold: 160, // 160rpx
// props
currentTitle: "Hi!用户,欢迎回来~",
currentSubtitle: "2个权益 | 120时间银行",
currentAvatar: "https://picsum.photos/80/80",
currentAction: "激活你的Agent",
userInfo: {},
JDSU_IMG_URL: "https://epic.js-dyyj.com",
};
},
computed: {
// 使
actualCompactState() {
if (this.isScrolled) {
return !this.isExpanded;
}
return false; //
},
// top
fixedTopPosition() {
// + (40px) + (20px)
return this.statusBarHeight + 40 + 20;
},
// -
placeholderHeight() {
//
// 32rpx() + 160rpx() + 24rpx() = 216rpx
const islandHeightRpx = 160; //
const topMarginRpx = 32; //
const bottomMarginRpx = 24; //
return topMarginRpx + islandHeightRpx + bottomMarginRpx;
},
// 使props
title() {
return this.currentTitle;
},
subtitle() {
return this.currentSubtitle;
},
avatarUrl() {
return this.currentAvatar;
},
actionText() {
return this.currentAction;
},
//
isFixed() {
return this.isScrolled;
},
},
mounted() {
// uni-app
this.setStatusBarHeight();
//
this.addScrollListener();
//
this.getUserInfo();
},
beforeDestroy() {
//
this.removeScrollListener();
},
methods: {
toLogin() {
uni.navigateTo({
url: "/pages/login/login",
});
},
handleToggle() {
if (this.isScrolled) {
//
this.isExpanded = !this.isExpanded;
this.$emit("toggle", this.isExpanded);
} else {
//
this.$emit("toggle");
}
},
handleAction() {
this.$emit("action");
},
//
collapseIsland() {
if (this.isScrolled && this.isExpanded) {
this.isExpanded = false;
this.$emit("toggle", this.isExpanded);
}
},
//
addScrollListener() {
// ID
const eventName = `pageScroll_${this.pageId}`;
console.log("DynamicIsland 添加滚动监听:", eventName);
uni.$on(eventName, this.handlePageScroll);
},
//
removeScrollListener() {
// ID
const eventName = `pageScroll_${this.pageId}`;
uni.$off(eventName, this.handlePageScroll);
},
//
handlePageScroll(e) {
const scrollTop = e.scrollTop || e;
const shouldScroll = scrollTop > this.scrollThreshold;
if (this.isScrolled !== shouldScroll) {
this.isScrolled = shouldScroll;
//
}
//
if (this.isScrolled) {
this.collapseIsland();
}
},
toOrder() {
uni.switchTab({
url: '/pages/index/iSoul'
})
},
getCompactName() {
//
if (this.userInfo && this.userInfo.nickname) {
return this.userInfo.nickname;
}
return "用户";
},
getStatNumber(type) {
//
if (this.subtitle) {
if (type === "权益") {
const match = this.subtitle.match(/(\d+)个权益/);
return match ? match[1] : "0";
} else if (type === "时间银行") {
const match = this.subtitle.match(/(\d+)时间银行/);
return match ? match[1] : "0";
}
}
return "0";
},
//
setStatusBarHeight() {
try {
const systemInfo = uni.getSystemInfoSync();
this.statusBarHeight = systemInfo.statusBarHeight || 0;
} catch (e) {
console.warn("获取系统信息失败:", e);
this.statusBarHeight = 0;
}
},
//
getUserInfo() {
try {
this.userInfo =
(uni.getStorageSync("userInfo") &&
JSON.parse(uni.getStorageSync("userInfo"))) ||
this.$store.state.user.userInfo || {};
console.log(this.userInfo, "this.userInfo");
//
if (this.userInfo && this.userInfo.nickname) {
this.currentTitle = `Hi!${this.userInfo.nickname},欢迎回来~`;
}
} catch (e) {
console.warn("获取用户信息失败:", e);
this.userInfo = {};
}
},
toWebView() {
uni.navigateTo({
url: "/subPackages/webPage/webPage?url=" +
"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>
<style scoped lang="scss">
/* 灵动岛占位区域样式 - 始终存在但控制可见性 */
.dynamic-island-placeholder {
width: 100%;
background: transparent;
position: relative;
opacity: 1;
transition: opacity 0.3s ease;
padding: 24rpx 0;
}
.dynamic-island-placeholder.visible {
opacity: 1;
}
/* 当灵动岛不是固定状态时,确保它在占位符内正常显示 */
.dynamic-island-placeholder .dynamic-island:not(.fixed) {
position: relative;
z-index: 100;
}
.dynamic-island {
// margin: 24rpx auto 24rpx;
margin: 0 auto;
z-index: 100;
background: linear-gradient(180deg, #fffdb7 0%, #97fffa 100%);
backdrop-filter: blur(20rpx);
-webkit-backdrop-filter: blur(20rpx);
border-radius: 40rpx;
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;
//
width: 710rpx;
height: 216rpx;
//
&.compact {
width: 300rpx;
height: 80rpx;
border-radius: 40rpx;
.expanded-content {
opacity: 0;
visibility: hidden;
transition: opacity 0.15s ease-out, visibility 0s linear 0.15s;
}
}
&:not(.compact) {
.compact-content {
opacity: 0;
visibility: hidden;
transition: opacity 0.15s ease-out, visibility 0s linear 0.15s;
}
}
//
&.fixed {
position: fixed;
left: 50%;
transform: translateX(-50%);
z-index: 998;
margin: 0;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
animation: slideInFromTop 0.4s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}
}
.expanded-content {
display: flex;
flex-direction: column;
height: 100%;
padding: 24rpx 25rpx;
opacity: 1;
visibility: visible;
transition: opacity 0.2s ease-in 0.1s, visibility 0s linear 0s;
}
/* 三栏布局样式 */
.three-column-layout {
display: flex;
align-items: flex-end;
height: 100%;
width: 100%;
}
/* 列分隔线 */
.column-divider {
width: 2rpx;
height: 160rpx;
background: rgba(0, 0, 0, 0.1);
margin: 0rpx 25rpx;
flex-shrink: 0;
}
/* 左侧区域 */
.left-section {
color: #333;
display: flex;
flex-direction: column;
justify-content: space-between;
flex: 1;
height: 100%;
}
.welcome-message {
display: flex;
flex-direction: column;
}
.welcome-text {
font-size: 22rpx;
color: #000000;
line-height: 1.2;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
.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;
font-weight: bold;
}
/* 中间区域 */
.middle-section {
display: flex;
justify-content: flex-start;
align-items: center;
}
.time-reward-container {
display: flex;
flex-direction: column;
justify-content: flex-end;
align-items: flex-start;
}
.time-reward-title {
font-size: 20rpx;
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;
}
.time-reward-unit {
font-size: 24rpx;
color: #000000;
margin-left: 4rpx;
}
.time-reward-label {
font-size: 22rpx;
color: #000000;
}
/* 右侧区域 */
.right-section {
display: flex;
align-items: flex-end;
height: 100%;
}
.avatar-container {
position: relative;
margin-right: 10rpx;
width: 140rpx;
height: 140rpx;
}
.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: 26rpx;
color: #000000;
margin-bottom: 4rpx;
font-weight: bold;
}
.profile-name {
font-size: 26rpx;
color: #000000;
font-weight: bold;
}
.platform-link {
cursor: pointer;
}
.link-text {
font-size: 22rpx;
color: #000000;
text-decoration: underline;
font-weight: 500;
}
/* 保留原有的底部区域样式用于timeShop模式 */
.bottom-section {
display: flex;
align-items: center;
justify-content: space-between;
flex: 1;
color: #000000;
}
.stats-section {
display: flex;
gap: 32rpx;
}
.stat-item {
display: flex;
flex-direction: column;
align-items: center;
font-size: 28rpx;
font-weight: bold;
}
.stat-number {
font-size: 32rpx;
color: #000000;
font-weight: bold;
line-height: 1;
margin-bottom: 4rpx;
}
.stat-label {
font-size: 28rpx;
color: #000000;
line-height: 1;
font-weight: bold;
margin-top: 20rpx;
}
.divider {
width: 2rpx;
height: 60rpx;
background: rgba(255, 255, 255, 0.3);
margin: 0 24rpx;
}
.action-section {
display: flex;
align-items: center;
flex: 1;
justify-content: space-between;
}
.action-text {
font-size: 26rpx;
color: #ffffff;
font-weight: bold;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 200rpx;
}
//
.dynamic-island:active {
transform: scale(0.98);
&.fixed {
transform: translateX(-50%) scale(0.98);
}
}
//
@keyframes slideInFromTop {
0% {
transform: translateX(-50%) translateY(-100%);
opacity: 0;
}
100% {
transform: translateX(-50%) translateY(0);
opacity: 1;
}
}
.compact-content {
display: flex;
align-items: center;
justify-content: space-between;
height: 100%;
padding: 0 24rpx;
opacity: 1;
visibility: visible;
transition: opacity 0.2s ease-in 0.1s, visibility 0s linear 0s;
}
.compact-name {
font-size: 27rpx;
color: #333;
font-weight: bold;
flex: 1;
text-align: left;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
max-width: 200rpx;
}
.compact-avatar {
width: 48rpx;
height: 48rpx;
border-radius: 50%;
border: 2rpx solid rgba(0, 0, 0, 0.2);
flex-shrink: 0;
}
//
@keyframes pulse {
0% {
opacity: 1;
transform: scale(1);
}
50% {
opacity: 0.6;
transform: scale(1.1);
}
100% {
opacity: 1;
transform: scale(1);
}
}
//
// @media (max-width: 750rpx) {
// .dynamic-island {
// &.is-expanded {
// width: 100vw;
// max-width: 750rpx;
// }
// &.is-compact {
// width: 280rpx;
// }
// }
// }
.action-text-box {
color: #000000;
.action-text-box-des {
font-size: 20rpx;
}
.action-text-box-msg {
font-size: 24rpx;
display: flex;
align-items: center;
margin-top: 20rpx;
}
.action-text-box-img {
width: 57rpx;
height: 46rpx;
margin-right: 10rpx;
}
}
</style>

195
components/DynamicIsland.vue

@ -1,79 +1,80 @@
<template> <template>
<!-- 灵动岛占位区域 - 始终存在但控制可见性 --> <!-- 灵动岛占位区域 - 始终存在但控制可见性 -->
<view <view class="dynamic-island-placeholder" :class="{ visible: isScrolled }"
class="dynamic-island-placeholder" :style="{ height: 216 + 'rpx' }">
:class="{ visible: isScrolled }" <view class="dynamic-island" :class="{
:style="{ height: placeholderHeight + 'rpx' }"
>
<view
class="dynamic-island"
:class="{
compact: actualCompactState, compact: actualCompactState,
fixed: isFixed, fixed: isFixed,
}" }" :style="{ top: isFixed ? fixedTopPosition + 'px' : 0 }" @click="handleToggle">
:style="{ top: isFixed ? fixedTopPosition + 'px' : 0 }"
@click="handleToggle"
>
<!-- 展开状态 --> <!-- 展开状态 -->
<view v-if="!actualCompactState" class="expanded-content"> <view v-if="!actualCompactState" class="expanded-content">
<template> <template>
<template v-if="styleType != 'timeShop'"> <template v-if="styleType != 'timeShop'">
<!-- 三栏布局 --> <!-- 三栏布局 -->
<view class="three-column-layout"> <view class="three-column-layout">
<!-- 右侧头像和链接 -->
<view class="right-section">
<view class="avatar-container" @click="toWebView">
<image class="avatar"
src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png"
mode="aspectFill"></image>
</view>
<view class="" style="display: flex;flex-direction: column;justify-content: space-between;height: 100%;">
<view class="profile-info">
<text class="profile-title">数字领航员</text>
<text class="profile-name">EVITA</text>
</view>
<view class="platform-link">
<view class="link-text" @click="toDesInfo" style="margin-bottom: 15rpx;">DES介绍 >>
</view>
<view class="link-text">DES广播 >></view>
</view>
</view>
</view>
<!-- 左侧分隔线 -->
<view class="column-divider"></view>
<!-- 左侧欢迎信息 --> <!-- 左侧欢迎信息 -->
<view class="left-section"> <view class="left-section">
<view class="welcome-message"> <view class="welcome-message">
<view class="welcome-text" <view class="welcome-text">Hi!{{
>Hi!{{
userInfo && userInfo.token ? userInfo.nickname : "用户" userInfo && userInfo.token ? userInfo.nickname : "用户"
}}</view }}欢迎回来~</view>
> </view>
<text class="welcome-subtitle">欢迎回来~</text> <view class="" style="font-size: 24rpx;font-weight: bold;color: #000000;">
查看您的DES数据资产行
</view> </view>
<view class="stats-info" @click="toOrder"> <view class="" style="display: flex;align-items: flex-end;justify-content: space-between;">
<view class="" @click="toOrder">
<view class="stats-info">
<text class="stats-number">2</text> <text class="stats-number">2</text>
<text class="stats-unit"></text> <text class="stats-unit"></text>
</view> </view>
<view class="stats-label">文旅权益</view> <view class="stats-label">数字权益行</view>
</view> </view>
<div @click="toTime">
<!-- 左侧分隔线 --> <view class="stats-info" >
<view class="column-divider"></view> <text class="stats-number">2</text>
<text class="stats-unit"></text>
<!-- 中间时间奖励 --> </view>
<view class="stats-label">数字资产行</view>
</div>
<view class="middle-section"> <view class="middle-section">
<view class="time-reward-container"> <view class="time-reward-container">
<text class="time-reward-title">时间奖励</text> <text class="time-reward-title" style="margin-bottom: 5rpx;">时间奖励</text>
<view class="time-reward-stats"> <view class="time-reward-stats">
<text class="time-reward-number">120</text> <text class="time-reward-number">120</text>
<text class="time-reward-unit"></text> <text class="time-reward-unit"></text>
</view> </view>
<text class="time-reward-label">旅时间</text> <text class="time-reward-label" style="font-weight: bold;">时间行</text>
</view> </view>
</view> </view>
<!-- 右侧分隔线 -->
<view class="column-divider"></view>
<!-- 右侧头像和链接 -->
<view class="right-section">
<view class="avatar-container" @click="toWebView">
<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" >
<text class="link-text">平台简介 >></text>
</view>
</view> </view>
</view> </view>
</view> </view>
</template> </template>
<template v-if="styleType == 'timeShop'"> <template v-if="styleType == 'timeShop'">
@ -86,7 +87,8 @@
<text class="time-reward-number">120</text> <text class="time-reward-number">120</text>
<text class="time-reward-unit"></text> <text class="time-reward-unit"></text>
</view> </view>
<text class="time-reward-label" style="font-size: 24rpx;font-weight: bold;">文旅时间银行</text> <text class="time-reward-label"
style="font-size: 24rpx;font-weight: bold;">旅行时间行</text>
</view> </view>
<view class=""> <view class="">
<view class="time-reward-number" style="font-size: 34rpx;"> <view class="time-reward-number" style="font-size: 34rpx;">
@ -94,32 +96,37 @@
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: 26rpx;"> <view class="time-reward-label"
积分:999<text style="color: #999999;font-size: 22rpx;margin-left: 10rpx;">积分获取规则</text> style="margin-top: 15rpx;font-weight: bold;font-size: 26rpx;">
积分: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: 26rpx;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;">
时长:{{ 时长:{{
userInfo && userInfo.token ? userInfo.hour+'h' : "-" 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>
点赞:120 点赞:120
</view> </view>
<view class=""> <view class="">
<image style="width: 22rpx;height: 22rpx;margin: 0 15rpx;" :src="showImg('/uploads/20250822/84c49f78f1c86b7340aaaa391bd4b7cf.png')"></image> <image style="width: 22rpx;height: 22rpx;margin: 0 15rpx;"
:src="showImg('/uploads/20250822/84c49f78f1c86b7340aaaa391bd4b7cf.png')">
</image>
留言:120 留言:120
</view> </view>
</view> </view>
</view> </view>
<image <image class="avatar"
class="avatar"
src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png" src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png"
mode="aspectFill" mode="aspectFill"></image>
></image>
</view> </view>
</template> </template>
</template> </template>
@ -128,11 +135,9 @@
<!-- 紧凑状态 --> <!-- 紧凑状态 -->
<view v-else class="compact-content"> <view v-else class="compact-content">
<text class="compact-name">{{ getCompactName() }}</text> <text class="compact-name">{{ getCompactName() }}</text>
<image <image class="compact-avatar"
class="compact-avatar"
src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png" src="https://epic.js-dyyj.com/uploads/20250728/7d9ba1fe109643681396cb03f60f3218.png"
mode="aspectFill" mode="aspectFill"></image>
></image>
</view> </view>
</view> </view>
</view> </view>
@ -150,10 +155,7 @@ export default {
type: String, type: String,
default: "", default: "",
}, },
isFixed: {
type: Boolean,
default: false,
},
title: { title: {
type: String, type: String,
default: "用户", default: "用户",
@ -302,6 +304,11 @@ export default {
url: '/pages/index/iSoul' url: '/pages/index/iSoul'
}) })
}, },
toTime() {
uni.switchTab({
url: '/pages/index/timeShopBank'
})
},
getCompactName() { getCompactName() {
// //
if (this.userInfo && this.userInfo.nickname) { if (this.userInfo && this.userInfo.nickname) {
@ -338,8 +345,7 @@ export default {
this.userInfo = this.userInfo =
(uni.getStorageSync("userInfo") && (uni.getStorageSync("userInfo") &&
JSON.parse(uni.getStorageSync("userInfo"))) || JSON.parse(uni.getStorageSync("userInfo"))) ||
this.$store.state.user.userInfo || this.$store.state.user.userInfo || {};
{};
console.log(this.userInfo, "this.userInfo"); console.log(this.userInfo, "this.userInfo");
// //
if (this.userInfo && this.userInfo.nickname) { if (this.userInfo && this.userInfo.nickname) {
@ -351,11 +357,13 @@ export default {
} }
}, },
toWebView() { toWebView() {
// uni.navigateTo({
// url: "/subPackages/webPage/webPage?url=" +
// "https://des.js-dyyj.com/dist/#/",
// });
uni.navigateTo({ uni.navigateTo({
url: url:'/subPackages/other/evita'
"/subPackages/webPage/webPage?url=" + })
"https://des.js-dyyj.com/dist/#/",
});
}, },
// //
@ -367,6 +375,12 @@ export default {
return this.JDSU_IMG_URL + img; return this.JDSU_IMG_URL + img;
} }
}, },
toDesInfo(){
uni.navigateTo({
url:'/subPackages/other/introduction'
})
},
}, },
}; };
</script> </script>
@ -379,7 +393,8 @@ export default {
position: relative; position: relative;
opacity: 1; opacity: 1;
transition: opacity 0.3s ease; transition: opacity 0.3s ease;
padding: 24rpx 0; // padding: 24rpx 0;
margin-top: 24rpx;
} }
.dynamic-island-placeholder.visible { .dynamic-island-placeholder.visible {
@ -409,7 +424,7 @@ export default {
// //
width: 710rpx; width: 710rpx;
height: 220rpx; height: 216rpx;
// //
&.compact { &.compact {
@ -458,7 +473,6 @@ export default {
.three-column-layout { .three-column-layout {
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
justify-content: space-between;
height: 100%; height: 100%;
width: 100%; width: 100%;
} }
@ -466,36 +480,34 @@ export default {
/* 列分隔线 */ /* 列分隔线 */
.column-divider { .column-divider {
width: 2rpx; width: 2rpx;
height: 60rpx; height: 160rpx;
background: rgba(0, 0, 0, 0.1); background: rgba(0, 0, 0, 0.1);
margin: 35rpx 16rpx; margin: 0rpx 25rpx;
flex-shrink: 0; flex-shrink: 0;
} }
/* 左侧区域 */ /* 左侧区域 */
.left-section { .left-section {
color: #333;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
align-items: flex-start; justify-content: space-between;
color: #333; flex: 1;
width: 140rpx; height: 100%;
} }
.welcome-message { .welcome-message {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
margin-bottom: 16rpx;
} }
.welcome-text { .welcome-text {
font-size: 24rpx; font-size: 22rpx;
color: #000000; color: #000000;
font-weight: bold;
line-height: 1.2; line-height: 1.2;
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
max-width: 140rpx;
} }
.welcome-subtitle { .welcome-subtitle {
@ -527,6 +539,7 @@ export default {
.stats-label { .stats-label {
font-size: 22rpx; font-size: 22rpx;
color: #000000; color: #000000;
font-weight: bold;
} }
/* 中间区域 */ /* 中间区域 */
@ -534,7 +547,6 @@ export default {
display: flex; display: flex;
justify-content: flex-start; justify-content: flex-start;
align-items: center; align-items: center;
flex: 1;
} }
.time-reward-container { .time-reward-container {
@ -542,11 +554,10 @@ export default {
flex-direction: column; flex-direction: column;
justify-content: flex-end; justify-content: flex-end;
align-items: flex-start; align-items: flex-start;
width: 137rpx;
} }
.time-reward-title { .time-reward-title {
font-size: 22rpx; font-size: 20rpx;
color: #000000; color: #000000;
font-weight: 500; font-weight: 500;
margin-bottom: 12rpx; margin-bottom: 12rpx;
@ -580,7 +591,7 @@ export default {
.right-section { .right-section {
display: flex; display: flex;
align-items: flex-end; align-items: flex-end;
width: 320rpx; height: 100%;
} }
.avatar-container { .avatar-container {
@ -604,14 +615,14 @@ export default {
} }
.profile-title { .profile-title {
font-size: 24rpx; font-size: 26rpx;
color: #000000; color: #000000;
margin-bottom: 4rpx; margin-bottom: 4rpx;
font-weight: bold; font-weight: bold;
} }
.profile-name { .profile-name {
font-size: 24rpx; font-size: 26rpx;
color: #000000; color: #000000;
font-weight: bold; font-weight: bold;
} }
@ -624,6 +635,7 @@ export default {
font-size: 22rpx; font-size: 22rpx;
color: #000000; color: #000000;
text-decoration: underline; text-decoration: underline;
font-weight: 500;
} }
/* 保留原有的底部区域样式用于timeShop模式 */ /* 保留原有的底部区域样式用于timeShop模式 */
@ -703,6 +715,7 @@ export default {
transform: translateX(-50%) translateY(-100%); transform: translateX(-50%) translateY(-100%);
opacity: 0; opacity: 0;
} }
100% { 100% {
transform: translateX(-50%) translateY(0); transform: translateX(-50%) translateY(0);
opacity: 1; opacity: 1;
@ -746,10 +759,12 @@ export default {
opacity: 1; opacity: 1;
transform: scale(1); transform: scale(1);
} }
50% { 50% {
opacity: 0.6; opacity: 0.6;
transform: scale(1.1); transform: scale(1.1);
} }
100% { 100% {
opacity: 1; opacity: 1;
transform: scale(1); transform: scale(1);
@ -775,12 +790,14 @@ export default {
.action-text-box-des { .action-text-box-des {
font-size: 20rpx; font-size: 20rpx;
} }
.action-text-box-msg { .action-text-box-msg {
font-size: 24rpx; font-size: 24rpx;
display: flex; display: flex;
align-items: center; align-items: center;
margin-top: 20rpx; margin-top: 20rpx;
} }
.action-text-box-img { .action-text-box-img {
width: 57rpx; width: 57rpx;
height: 46rpx; height: 46rpx;

2
components/MusicControl.vue

@ -72,7 +72,7 @@ export default {
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
z-index: 999; z-index: 998;
} }
.music-text { .music-text {

18
components/header.vue

@ -49,11 +49,13 @@
<view class="left-section" v-else></view> <view class="left-section" v-else></view>
<!-- 中间Logo --> <!-- 中间Logo -->
<view class="logo">
<image <image
class="logo" class=""
src="https://static.ticket.sz-trip.com/uploads/20250625/9bb05097e07570a934235983e1681a9f.png" :src="showImg('/uploads/20250825/7ad541ebe1b7e1f82f78362978f627ff.png')"
mode="heightFix" mode="heightFix"
></image> ></image>
</view>
<!-- 右侧占位 --> <!-- 右侧占位 -->
<view class="right-section"></view> <view class="right-section"></view>
@ -252,10 +254,18 @@ export default {
} }
.logo { .logo {
height: 36.16rpx;
position: absolute; position: absolute;
left: 50%; left: 50%;
transform: translateX(-50%); transform: translateX(-50%);
display: flex;
flex-direction: column;
align-items: center;
color: #000000;
font-weight: bold;
font-size: 35rpx;
image{
height: 29.16rpx;
}
} }
.right-section { .right-section {
@ -264,7 +274,7 @@ export default {
.location-selector { .location-selector {
display: flex; display: flex;
align-items: center; align-items: center;
padding: 8rpx 16rpx; padding: 8rpx 0rpx;
// border: 2rpx solid #e0e0e0; // border: 2rpx solid #e0e0e0;
border-radius: 20rpx; border-radius: 20rpx;
background-color: #fff; background-color: #fff;

15
pages.json

@ -279,7 +279,22 @@
"navigationBarBackgroundColor": "#ffffff", "navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black" "navigationBarTextStyle": "black"
} }
},
{
"path": "other/introduction",
"style": {
"navigationBarTextStyle": "white",
"navigationStyle": "custom"
} }
},
{
"path": "other/evita",
"style": {
"navigationBarTextStyle": "white",
"navigationStyle": "custom"
}
}
] ]
}, },
{ {

16
pages/index/iSoul.vue

@ -340,18 +340,7 @@
}, },
getAgentList() { getAgentList() {
this.Post({}, "/framework/agent/purchaseList", "DES").then((res) => { this.Post({}, "/framework/agent/purchaseList", "DES").then((res) => {
this.agentList = [{ this.agentList =res.data
headImage: "https://epic.js-dyyj.com/uploads/20250728/d27ef6e6c26877da7775664fed376c6f.png",
name: '文徵明',
status: 0
},
{
headImage: "https://epic.js-dyyj.com/uploads/20250728/d7bf0dd2f3f272afba687b525a7c575c.png",
name: '颜真卿',
status: 1
},
]
}); });
}, },
getUserInfo() { getUserInfo() {
@ -656,6 +645,9 @@
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
::v-deep .uni-popup{
z-index: 999 !important;
}
view { view {
box-sizing: border-box; box-sizing: border-box;
} }

8
pages/index/index.vue

@ -97,20 +97,20 @@ export default {
], ],
productListFeeling: [ productListFeeling: [
{ {
id: 34, id: 37,
image: image:
"https://epic.js-dyyj.com/uploads/20250822/f0ade3dd98a5a5e24ed0b60a023979e4.png", "https://epic.js-dyyj.com/uploads/20250822/f0ade3dd98a5a5e24ed0b60a023979e4.png",
title: "中国神仙IP系列 丝织品", title: "中国神仙IP系列 丝织品",
price: "138.00", price: "198.00",
isLiked: true, isLiked: true,
isShop: true, isShop: true,
}, },
{ {
id: 32, id: 39,
image: image:
"https://epic.js-dyyj.com/uploads/20250822/19b1fb3e07fd459d347e727274af445c.png", "https://epic.js-dyyj.com/uploads/20250822/19b1fb3e07fd459d347e727274af445c.png",
title: "仙人乘槎 马克杯", title: "仙人乘槎 马克杯",
price: "398.00", price: "35.00",
isLiked: false, isLiked: false,
}, },
], ],

4
pages/index/timeShopBank.vue

@ -24,7 +24,7 @@
<!-- 发布按钮 --> <!-- 发布按钮 -->
<view class="fab-container"> <view class="fab-container">
<image :src="showImg('/uploads/20250824/8a56130faf5787bb75b22b161e66b1b6.png')" style="width: 91rpx;height: 100rpx;"></image> <image :src="showImg('/uploads/20250825/7ea7864b8abb89c3dd7834f025e49b3f.png')" style="width: 91rpx;height: 91rpx;"></image>
<!-- <button class="fab-btn" @click="goToPublish"> <!-- <button class="fab-btn" @click="goToPublish">
<text class="fab-icon">+</text> <text class="fab-icon">+</text>
</button> --> </button> -->
@ -401,7 +401,7 @@ page {
.fab-container { .fab-container {
position: fixed; position: fixed;
bottom: 250rpx; bottom: 250rpx;
right: 0rpx; right: 40rpx;
z-index: 999; z-index: 999;
} }

BIN
static/image/tabbar/time.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
static/image/tabbar/time_select.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

4
static/js/request.js

@ -8,8 +8,8 @@ const DEV_API_URL = 'https://epic.new.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 = () => {

40
subPackages/other/evita.vue

@ -0,0 +1,40 @@
<template>
<view class="" style="font-size: 0;position: relative;">
<BackButton />
<image class="bannerImg" mode="widthFix" :src="showImg('/uploads/20250825/a5e4ad2654df63d751ffd547e3359776.png')"> </image>
<image @click="toWebView" mode="aspectFill" style="width: 147rpx;height: 147rpx;position: absolute;bottom: 300rpx;left: 301rpx;" :src="showImg('/uploads/20250825/688bc64132881464a23b44ecbc66ec85.png')"> </image>
</view>
</template>
<script>
import BackButton from "@/components/BackButton.vue";
export default{
components: {
BackButton,
},
data(){
return{
img:''
}
},
onLoad() {
},
methods:{
toWebView() {
uni.navigateTo({
url: "/subPackages/webPage/webPage?url=" +
"https://des.js-dyyj.com/dist/#/",
});
},
}
}
</script>
<style lang="scss" scoped>
.bannerImg{
width: 100vw;
}
</style>

33
subPackages/other/introduction.vue

@ -0,0 +1,33 @@
<template>
<view class="" style="font-size: 0;">
<BackButton />
<image class="bannerImg" mode="aspectFill" :src="showImg('/uploads/20250825/86509d1c16bd2611f7bd923caba0b648.png')"> </image>
</view>
</template>
<script>
import BackButton from "@/components/BackButton.vue";
export default{
components: {
BackButton,
},
data(){
return{
img:''
}
},
onLoad() {
},
methods:{
}
}
</script>
<style lang="scss" scoped>
.bannerImg{
width: 100vw;
height: 100vh;
}
</style>

5
subPackages/techan/detail.vue

@ -526,12 +526,12 @@
z-index: 9999; z-index: 9999;
bottom: 0; bottom: 0;
width: 750rpx; width: 750rpx;
height: 180rpx;
background: #FFFFFF; background: #FFFFFF;
box-shadow: 0rpx 0rpx 16rpx 0rpx rgba(6, 0, 1, 0.1); box-shadow: 0rpx 0rpx 16rpx 0rpx rgba(6, 0, 1, 0.1);
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
padding: 30rpx 25rpx 0 50rpx; padding: 30rpx 25rpx 30rpx;
// padding-bottom: calc(30rpx + env(safe-area-inset-bottom));
.left-box { .left-box {
display: flex; display: flex;
@ -744,6 +744,7 @@
line-height: 77rpx; line-height: 77rpx;
text-align: center; text-align: center;
display: flex; display: flex;
margin-bottom: env(safe-area-inset-bottom);
.left-btn-buy{ .left-btn-buy{
width: 186rpx; width: 186rpx;

Loading…
Cancel
Save