diff --git a/App.vue b/App.vue index 70df386..013f263 100644 --- a/App.vue +++ b/App.vue @@ -62,12 +62,12 @@ export default { }, onShow: function () { console.log("App Show"); - // 如果不是首次启动才调用登录记录接口,避免与onLaunch重复调用 - if (!this.isFirstLaunch) { - this.callLoginRecordApi(); - } else { - this.isFirstLaunch = false; // 重置标志 - } + // // 如果不是首次启动才调用登录记录接口,避免与onLaunch重复调用,有问题,当用户分享的时候,会频繁触发 + // if (!this.isFirstLaunch) { + // this.callLoginRecordApi(); + // } else { + // this.isFirstLaunch = false; // 重置标志 + // } }, onHide: function () { console.log("App Hide"); diff --git a/components/empty-state/empty-state.vue b/components/empty-state/empty-state.vue new file mode 100644 index 0000000..f73744c --- /dev/null +++ b/components/empty-state/empty-state.vue @@ -0,0 +1,58 @@ + + + + + \ No newline at end of file diff --git a/pages.json b/pages.json index c9a053e..e5eb9b2 100644 --- a/pages.json +++ b/pages.json @@ -466,6 +466,13 @@ { "navigationStyle": "custom" } + }, + { + "path" : "pages/shouye/danye", + "style" : + { + "navigationStyle": "custom" + } } ], "subPackages": [{ diff --git a/pages/infinite/bonus_house.vue b/pages/infinite/bonus_house.vue index 528832f..c681916 100644 --- a/pages/infinite/bonus_house.vue +++ b/pages/infinite/bonus_house.vue @@ -17,78 +17,83 @@ - - + + + + + + + + + + + + - + 赏品记录 @@ -99,17 +104,21 @@ @@ -635,6 +723,8 @@ export default { justify-content: space-between; align-items: center; padding: 10rpx 60rpx; + position: relative; + z-index: 1; .tab-item { @@ -642,6 +732,11 @@ export default { height: 68rpx; position: relative; margin-right: 25rpx; + transition: all 0.3s ease; + + &:active { + transform: scale(0.95); + } &.act { font-weight: 400; @@ -657,6 +752,8 @@ export default { width: 48rpx; height: 4rpx; background: #333333; + transition: all 0.3s cubic-bezier(0.68, -0.55, 0.27, 1.55); + animation: fadeInWidth 0.3s forwards; } } @@ -664,10 +761,31 @@ export default { font-weight: 400; font-size: 28rpx; color: #CCCCCC; + + &::after { + content: ''; + position: absolute; + bottom: 0; + left: 50%; + transform: translateX(-50%); + width: 0; + height: 4rpx; + background: #333333; + transition: all 0.3s ease; + } } } } +@keyframes fadeInWidth { + from { + width: 0; + } + to { + width: 48rpx; + } +} + .grid-container { display: grid; grid-template-columns: repeat(4, 124rpx); @@ -682,11 +800,69 @@ export default { .grid-item { width: 142rpx; height: 150rpx; + transition: all 0.3s ease; + padding: 8rpx; + border-radius: 12rpx; + position: relative; + + &:active { + transform: translateY(-6rpx) scale(1.05); + background-color: rgba(0, 0, 0, 0.02); + } + + image { + transition: all 0.25s ease; + box-shadow: 0 2rpx 6rpx rgba(0, 0, 0, 0.1); + } + + &:active image { + box-shadow: 0 8rpx 12rpx rgba(0, 0, 0, 0.15); + } + + text { + transition: color 0.25s ease; + } + + &:active text { + color: #666 !important; + } } .button { background-image: url($imgurl + 'checkin/ic_share.png'); background-size: 100% 100%; + transition: all 0.3s ease; + position: relative; + overflow: visible; + border: none !important; + outline: none !important; + + &::after { + border: none !important; + } + + &::before { + content: ''; + position: absolute; + top: -5rpx; + right: -5rpx; + bottom: -5rpx; + left: -5rpx; + border-radius: 50%; + background-color: rgba(0, 0, 0, 0.05); + transform: scale(0); + opacity: 0; + transition: all 0.2s ease; + } + + &:active { + transform: scale(0.9) rotate(15deg); + } + + &:active::before { + transform: scale(1); + opacity: 1; + } } .swiper-container { @@ -743,14 +919,98 @@ export default { border-radius: 16rpx; margin-top: 32rpx; box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.1); - transition: all 0.2s ease; + position: relative; + overflow: hidden; + + // 页面加载动画 + opacity: 0; + transform: translateY(20rpx); + transition: transform 0.5s ease, opacity 0.5s ease, background-color 0.2s ease, box-shadow 0.2s ease; + transition-delay: 0.3s; + + &.show { + opacity: 1; + transform: translateY(0); + } + + &.pulse { + animation: buttonPulse 0.4s cubic-bezier(0.175, 0.885, 0.32, 1.275); + } +} + +.button-text { + color: #333333; + font-size: 32rpx; + font-weight: 600; + z-index: 2; + position: relative; +} + +.popup-container { + width: 636rpx; + background-color: #FFFFFF; + border-radius: 16rpx; + overflow: hidden; + transform: scale(0.9); + opacity: 0; + animation: popIn 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275) forwards; +} + +.popup-title { + width: 100%; + height: 80rpx; + border-radius: 24rpx 24rpx 0 0; + display: flex; + justify-content: center; + align-items: center; + font-size: 35rpx; + background-color: #f9f9f9; + position: relative; + + &::after { + content: ''; + position: absolute; + bottom: 0; + left: 10%; + width: 80%; + height: 1px; + background-color: #eee; + } +} + +.popup-content { + padding: 24rpx; + font-size: 28rpx; + color: #666; + line-height: 1.5; +} + +.popup-buttons { + display: flex; + width: 636rpx; + justify-content: space-around; + margin-top: 32rpx; + animation: slideUp 0.4s ease-out forwards; + animation-delay: 0.1s; + opacity: 0; + transform: translateY(20rpx); +} + +.popup-button { + display: flex; + justify-content: center; + align-items: center; + width: 200rpx; + height: 68rpx; + border-radius: 16rpx; + font-size: 24rpx; + font-weight: 600; + transition: all 0.25s ease; position: relative; overflow: hidden; &:active { transform: scale(0.95); - background-color: #c5e822; - box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.1); } &::after { @@ -760,7 +1020,7 @@ export default { left: 50%; width: 100rpx; height: 100rpx; - background-color: rgba(255, 255, 255, 0.4); + background-color: rgba(255, 255, 255, 0.3); border-radius: 50%; transform: translate(-50%, -50%) scale(0); opacity: 0; @@ -768,14 +1028,140 @@ export default { } &:active::after { - transform: translate(-50%, -50%) scale(5); + transform: translate(-50%, -50%) scale(3); opacity: 0; } + + text { + position: relative; + z-index: 1; + font-size: 24rpx; + font-weight: 600; + } } -.button-text { - color: #333333; - font-size: 32rpx; - font-weight: 600; +.cancel-button { + background-color: #FFFFFF; + border: 1px solid #eee; + + text { + color: #333333; + } + + &:active { + background-color: #f5f5f5; + } +} + +.confirm-button { + background-color: #CDEF27; + box-shadow: 0 4rpx 8rpx rgba(205, 239, 39, 0.3); + + text { + color: #333333; + } + + &:active { + background-color: #b9d721; + box-shadow: 0 2rpx 4rpx rgba(205, 239, 39, 0.2); + } +} + +@keyframes popIn { + from { + transform: scale(0.9); + opacity: 0; + } + to { + transform: scale(1); + opacity: 1; + } +} + +@keyframes slideUp { + from { + opacity: 0; + transform: translateY(20rpx); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.participant-row { + opacity: 0; + transform: translateX(-20rpx); + transition: all 0.4s ease; + + &.show { + opacity: 1; + transform: translateX(0); + } +} + +.award-row { + opacity: 0; + transform: translateX(-20rpx); + transition: all 0.4s ease; + + &.show { + opacity: 1; + transform: translateX(0); + } +} + +.header-info { + opacity: 0; + transform: translateY(-20rpx); + transition: all 0.5s ease; + + &.show { + opacity: 1; + transform: translateY(0); + } +} + +.tab-item { + opacity: 0; + transform: translateY(10rpx); + transition: all 0.4s ease; + + &.show { + opacity: 1; + transform: translateY(0); + } +} + +.content-area { + opacity: 0; + transform: translateY(20rpx); + transition: all 0.5s ease; + transition-delay: 0.2s; + + &.show { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes buttonPulse { + 0% { + transform: scale(1); + box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.1); + } + 40% { + transform: scale(0.92); + box-shadow: 0 2rpx 4rpx rgba(0, 0, 0, 0.05); + } + 80% { + transform: scale(1.05); + box-shadow: 0 6rpx 10rpx rgba(0, 0, 0, 0.15); + background-color: #e0ff3a; + } + 100% { + transform: scale(1); + box-shadow: 0 4rpx 8rpx rgba(0, 0, 0, 0.1); + } } \ No newline at end of file diff --git a/pages/infinite/daily_check_in.vue b/pages/infinite/daily_check_in.vue index fb7926b..f571d35 100644 --- a/pages/infinite/daily_check_in.vue +++ b/pages/infinite/daily_check_in.vue @@ -2,7 +2,7 @@