From 354b1317aab21617881057c40f8c0580b8f28139 Mon Sep 17 00:00:00 2001 From: zxl <763096477@qq.com> Date: 星期五, 26 九月 2025 18:46:45 +0800 Subject: [PATCH] 用户绑定商店 --- pages/tabbar/user/my.vue | 270 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 248 insertions(+), 22 deletions(-) diff --git a/pages/tabbar/user/my.vue b/pages/tabbar/user/my.vue index 62a836b..48bf11a 100644 --- a/pages/tabbar/user/my.vue +++ b/pages/tabbar/user/my.vue @@ -6,7 +6,8 @@ </view> <view class="header" @click="userDetail"> <view class="head-1"> - <image :src="userInfo.face || userImage"></image> + <image v-if="userInfo.face" :src="endpoint + '/' + userInfo.face"></image> + <image v-else :src="userImage"></image> </view> <view class="head-2" v-if="userInfo.id"> <view class="user-name">{{ userInfo.nickName }}</view> @@ -16,6 +17,24 @@ </view> <u-icon style="display: flex;align-items: flex-start;" name="arrow-right"></u-icon> </view> + <!-- <button type="default" @click="goTOSuccess">绔嬪嵆鏌ョ湅</button> --> + <view class="member-gradient-bg"> + <view class="member-content"> + <view class="vip-icon"> + <image src="/static/tabbar/vip.png" mode="widthFix"></image> + </view> + <view class="vip-info"> + <p class="vip-level">缁挎弧绛愪細鍛�</p> + <p class="vip-validity">闀挎湡鏈夋晥</p> + </view> + + <!-- 浼氬憳鏍囪瘑瑁呴グ --> + <view class="vip-badge"> + <text class="badge-text">灏婁韩鐗规潈</text> + </view> + </view> + + </view> <!-- 绉垎锛屼紭鎯犲埜锛屽叧娉紝 --> <div class="pointBox box"> <u-row text-align="center" gutter="16" class="point"> @@ -68,23 +87,70 @@ </view> </view> </div> + + <!-- 瑙嗛鐩稿叧锛� --> + <div class="pointBox box" style="margin-top: 20rpx;"> + <view class="order"> + <view class="order-item" @click="jumpToVideoHome()"> + <view> + <text class="iconfont"></text> + </view> + <view>瑙嗛涓婚〉</view> + </view> + <view class="order-item" @click="navigateTo('/pages/mine/myAttention')"> + <view> + <text class="iconfont"></text> + </view> + <view>鍏虫敞鍒楄〃</view> + </view> +<!-- <view class="order-item" @click="navigateTo('/pages/mine/myCollect/myCollect')"> + <view> + <text class="iconfont"></text> + </view> + <view>鏀惰棌鍒楄〃</view> + </view --> + <view class="order-item" @click="navigateTo('/pages/mine/activity/myActivity')"> + <view> + <text class="iconfont"></text> + </view> + <view>鎴戠殑娲诲姩</view> + </view> + <view class="order-item" @click="navigateTo('/pages/mine/myTracks')"> + <view> + <text class="iconfont"></text> + </view> + <view>娴忚璁板綍</view> + </view> + </view> + </div> + <!-- 甯哥敤宸ュ叿 --> - - <tool /> - <custom-tabbar bgColor="#ffffff" :selected="3"></custom-tabbar> + <view class="pointBox box" style="margin-top: 20rpx;"> + <tool /> + </view> + <!-- 鎾戣捣涓嬫柟 --> + <view style="height:64px;"> + + </view> + <custom-tabbar bgColor="#ffffff" selected="my"></custom-tabbar> + </view> </template> <script> +import '@/pages/subComponents/uview-components/uview-ui'; import tool from "@/pages/tabbar/user/utils/tool.vue"; -import { getCouponsNum, getFootprintNum } from "@/api/members.js"; +import { getSTSToken } from "@/api/common.js"; +import { getCouponsNum, getFootprintNum,bindMemberAndStore } from "@/api/members.js"; import { getUserWallet } from "@/api/members"; import configs from '@/config/config' +import storage from '@/utils/storage.js' export default { components: { - tool, + tool }, data() { return { + endpoint: '', configs, userImage:configs.defaultUserPhoto, coverTransform: "translateY(0px)", @@ -96,7 +162,52 @@ walletNum: "", }; }, - onLoad() { }, + onLoad(option) { + console.log('-----------鍒嗕韩鍑虹殑鏁版嵁---------->', option) + let shareStoreId = null; + let shareTime = null; + // 妫�鏌ユ槸鍚﹀瓨鍦╭鍙傛暟 + if (option.q) { + // 鍙岄噸瑙g爜锛氬井淇″URL杩涜浜嗕袱娆$紪鐮� + const decodedUrl = decodeURIComponent(decodeURIComponent(option.q)); + console.log('鍘熷URL:', decodedUrl); + + // 瑙f瀽URL涓殑鏌ヨ鍙傛暟 + const params = this.parseUrlParams(decodedUrl); + shareStoreId = params.shareStoreId; + try { + // 灏嗘暟鎹瓨鍌ㄥ埌鏈湴缂撳瓨 + uni.setStorageSync('shareStoreId', shareStoreId); + //鍒涘缓涓�涓壂鐮佺殑鏃堕棿 + // 鑾峰彇褰撳墠鏃堕棿骞舵牸寮忓寲涓� yyyy-MM-dd HH:mm:ss + const now = new Date(); + const year = now.getFullYear(); + const month = String(now.getMonth() + 1).padStart(2, '0'); // 鏈堜唤浠�0寮�濮嬶紝闇�瑕�+1 + const day = String(now.getDate()).padStart(2, '0'); + const hours = String(now.getHours()).padStart(2, '0'); + const minutes = String(now.getMinutes()).padStart(2, '0'); + const seconds = String(now.getSeconds()).padStart(2, '0'); + + shareTime = `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`; + uni.setStorageSync('shareTime', shareTime); + console.log('鏁版嵁瀛樺偍鎴愬姛'); + } catch (e) { + console.error('瀛樺偍澶辫触锛�', e); + } + }else{ + shareStoreId = uni.getStorageSync('shareStoreId'); + shareStoreId = uni.getStorageSync('shareTime'); + console.log('浠庣紦瀛樿鍙栧弬鏁�:', { shareStoreId, shareTime }); + // this.bindMemberAndStore(shareStoreId, shareTime) + if (shareStoreId && shareTime) { + console.log('妫�娴嬪埌鏈夋晥鍙傛暟锛岃皟鐢ㄥ悗绔帴鍙�'); + this.bindMemberAndStore(shareStoreId, shareTime); + } else { + console.log('鏃犳湁鏁堝弬鏁帮紝鎵ц姝e父閫昏緫'); + } + } + this.initCOS() + }, onShow() { this.userInfo = this.$options.filters.isLogin() || {}; if (this.$options.filters.isLogin("auth")) { @@ -122,6 +233,47 @@ mounted() { }, methods: { + async bindMemberAndStore(shareStoreId, shareTime){ + let form ={ + shareStoreId: shareStoreId, + shareTime: shareTime + } + // let form ={ + // shareStoreId: "1376433565247471616", + // shareTime: "2025-09-26 16:18:00" + // } + try { + const res = await bindMemberAndStore(form); + if(res.statusCode === 200){ + //娓呴櫎缂撳瓨 + uni.removeStorageSync('shareStoreId'); + uni.removeStorageSync('shareTime'); + } + } + catch(error) { + console.error('鍑洪敊:', error); + }; + }, + // goTOSuccess(){ + // uni.redirectTo({ + // url:"/pages/cart/payment/success?paymentMethod=WECHAT" + + // "&payPrice=" + + // 10, + // }); + // }, + // 鍒濆鍖栬吘璁簯cos瀹㈡埛绔� + initCOS() { + // 璋冪敤鍚庣鑾峰彇sts涓存椂璁块棶鍑瘉 + getSTSToken().then(res => { + this.endpoint = res.data.data.endpoint + }) + }, + // 璺宠浆瑙嗛涓婚〉 + jumpToVideoHome() { + uni.navigateTo({ + url: '/pages/video/home-page?authorId=' + storage.getUserInfo().id + }); + }, /** * 缁熶竴璺宠浆鎺ュ彛,鎷︽埅鏈櫥褰曡矾鐢� * navigator鏍囩鐜板湪榛樿娌℃湁杞満鍔ㄧ敾锛屾墍浠ョ敤view @@ -154,27 +306,99 @@ </script> <style lang="scss" scoped> + @import url("/pages/subComponents/static/bgStyle.css"); html, body { overflow: auto; } + +.member-gradient-bg { + width: 98%; + height: 250rpx; + margin: 1% 1%; + background: linear-gradient(135deg, #FF7A45 0%, #FF5252 100%); + border-radius: 24rpx; + box-shadow: 0 8rpx 30rpx rgba(255, 82, 82, 0.3); + transition: all 0.3s ease; + + &:active { + transform: scale(0.98); + } +} +/* 鍐呭鍖哄煙 */ +.member-content { + width: 100%; + height: 100%; + display: flex; + align-items: center; + padding: 0 40rpx; + box-sizing: border-box; +} +/* 浼氬憳淇℃伅 */ +.vip-info { + flex: 1; + .vip-level { + font-size: 40rpx; + font-weight: bold; + color: #FFFFFF; + margin: 0; + line-height: 1; + text-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1); + } + + .vip-validity { + font-size: 26rpx; + color: rgba(255, 255, 255, 0.9); + margin: 10rpx 0 0 0; + } +} + +/* 浼氬憳鍥炬爣 */ +.vip-icon { + width: 100rpx; + height: 100rpx; + margin-right: 30rpx; + display: flex; + align-items: center; + justify-content: center; + background-color: rgba(255, 255, 255, 0.2); + border-radius: 50%; +} + +.vip-icon image { + width: 60rpx; + height: 60rpx; +} +/* 鐗规潈鏍囪瘑 */ +.vip-badge { + padding: 8rpx 20rpx; + background-color: rgba(255, 215, 0, 0.9); + border-radius: 30rpx; + box-shadow: 0 3rpx 6rpx rgba(0, 0, 0, 0.1); +} + +.badge-text { + font-size: 24rpx; + color: #E63946; + font-weight: 600; +} .money { overflow: hidden; - text-overflow: ellipsis; white-space: nowrap; } .user { + background: #e7e7e7; .header { max-width: 100%; padding: calc(50rpx + var(--status-bar-height)) 30rpx 0 6%; - height: calc(var(--status-bar-height) + 360rpx); + height: calc(360rpx); background-size: cover; border-bottom-left-radius: 30rpx; border-bottom-right-radius: 30rpx; - background-image: url("/static/img/main-bg.png"); + background-image: var(--main-bg); background-position: bottom; background-repeat: no-repeat; color: #ffffff; @@ -225,14 +449,6 @@ } } - .pointBox { - width: 94%; - margin: 0 3%; - background: #fff; - border-radius: 20rpx; - box-shadow: 0 4rpx 24rpx 0 rgba($color: #f6f6f6, $alpha: 1); - } - .point { text-align: center; height: 160rpx; @@ -264,8 +480,12 @@ justify-content: space-around; align-items: center; padding: 0 3%; - color: #999; - + color: #666; + background: #fff; + border-radius: 20rpx; + box-shadow: 0 4rpx 24rpx 0 #f6f6f6; + margin: 0 20rpx; + .order-item { position: relative; line-height: 2em; @@ -273,14 +493,20 @@ :first-child { font-size: 48rpx; - margin-bottom: 10rpx; + margin-bottom: 12rpx; + color: #333; } } } + } .box { - transform: translateY(-30rpx); + width: 95%; + margin: auto; + background: #fff; + border-radius: 20rpx; + box-shadow: 0 4rpx 24rpx 0 #f6f6f6; } .user-name { -- Gitblit v1.8.0