| @ -0,0 +1,217 @@ | |||
| <template> | |||
| <view class="page"> | |||
| <navbar title="每日签到" leftClick @leftClick="$utils.navigateBack" color="#fff" /> | |||
| <view class="content"> | |||
| <view class="flex info"> | |||
| <view class="flex flex-column info-item"> | |||
| <view class="info-value">5</view> | |||
| <view class="info-label">连续签到/天</view> | |||
| </view> | |||
| <view class="flex flex-column info-item"> | |||
| <view class="info-value">20</view> | |||
| <view class="info-label">累计签到/天</view> | |||
| </view> | |||
| <view class="flex flex-column info-item"> | |||
| <view class="info-value">50</view> | |||
| <view class="info-label">获得积分</view> | |||
| </view> | |||
| </view> | |||
| <view class="calendars"> | |||
| <uv-calendars | |||
| insert | |||
| :showMonth="false" | |||
| :selected="selected" | |||
| /> | |||
| <view class="flex tips"> | |||
| <image class="tips-icon" src="../static/signIn/icon-tips.png" mode="widthFix"></image> | |||
| <text>签到一次得 5 积分</text> | |||
| </view> | |||
| </view> | |||
| <view style="text-align: right;"> | |||
| <button class="flex btn btn-record"> | |||
| <text>积分明细</text> | |||
| <image class="btn-record-icon" src="../static/signIn/icon-arrow.png" mode="widthFix"></image> | |||
| </button> | |||
| </view> | |||
| <view class="tools"> | |||
| <button class="flex btn btn-sign" @click="onSignIn">我要签到</button> | |||
| </view> | |||
| </view> | |||
| </view> | |||
| </template> | |||
| <script> | |||
| export default { | |||
| data() { | |||
| const SELECTED_DATE_ARR = ['2025-03-04', '2025-03-05', '2025-03-06', '2025-03-07'] | |||
| return { | |||
| // todo: fetch | |||
| selected: SELECTED_DATE_ARR.map(date => { | |||
| return { | |||
| date, | |||
| info: date[date.length - 1], | |||
| infoColor: '#FFFFFF', | |||
| badge: true, | |||
| } | |||
| }), | |||
| } | |||
| }, | |||
| methods: { | |||
| onSignIn() { | |||
| // todo | |||
| } | |||
| }, | |||
| } | |||
| </script> | |||
| <style lang="scss" scoped> | |||
| .page { | |||
| background-color: $uni-bg-color; | |||
| position: relative; | |||
| /deep/ .nav-bar__view { | |||
| padding-bottom: 409rpx; | |||
| background-image: linear-gradient(#84A73F, #D8FF8F); | |||
| } | |||
| /deep/ .uv-calendar { | |||
| width: calc(100vw - 14rpx*2); | |||
| } | |||
| /deep/ .uv-calendar__header { | |||
| border: none; | |||
| } | |||
| /deep/ .uv-calendar__header-btn { | |||
| border-color: $uni-color-light; | |||
| } | |||
| /deep/ .uv-calendar__backtoday, | |||
| /deep/ .uv-calendar-item--isDay-text.uv-calendar-item__weeks-lunar-text { | |||
| display: none; | |||
| } | |||
| /deep/ .uv-calendar__weeks-day { | |||
| border-color: #E6E6E6; | |||
| } | |||
| /deep/ .uv-calendar-item__weeks-box-item { | |||
| height: 72rpx; | |||
| } | |||
| /deep/ .uv-calendar-item--isDay { | |||
| color: #333 !important; | |||
| background-color: transparent !important; | |||
| } | |||
| /deep/ .uv-calendar-item__weeks-box-circle { | |||
| top: 50%; | |||
| left: 50%; | |||
| width: 53rpx; | |||
| height: 53rpx; | |||
| transform: translate(-50%, -50%); | |||
| border-radius: 50%; | |||
| background-color: $uni-color-light; | |||
| } | |||
| /deep/ .uv-calendar-item__weeks-lunar-text { | |||
| position: absolute; | |||
| top: 50%; | |||
| left: 50%; | |||
| transform: translate(-50%, -50%); | |||
| font-size: 28rpx; | |||
| line-height: 1; | |||
| } | |||
| } | |||
| .content { | |||
| position: absolute; | |||
| top: 243rpx; | |||
| z-index: 999; | |||
| } | |||
| .info { | |||
| width: 100vw; | |||
| box-sizing: border-box; | |||
| padding: 0 48rpx; | |||
| font-size: 0; | |||
| justify-content: space-between; | |||
| &-item { | |||
| color: $uni-text-color-inverse; | |||
| } | |||
| &-value { | |||
| font-size: 46rpx; | |||
| } | |||
| &-label { | |||
| font-size: 26rpx; | |||
| margin-top: 19rpx; | |||
| } | |||
| } | |||
| .calendars { | |||
| background-color: $uni-fg-color; | |||
| margin: 56rpx 14rpx 0 14rpx; | |||
| border-radius: 45rpx; | |||
| overflow: hidden; | |||
| .tips { | |||
| padding: 30rpx 30rpx 38rpx 30rpx; | |||
| color: $uni-color-light; | |||
| justify-content: flex-start; | |||
| &-icon { | |||
| width: 36rpx; | |||
| height: auto; | |||
| margin-right: 11rpx; | |||
| } | |||
| } | |||
| } | |||
| .tools { | |||
| margin-top: 146rpx; | |||
| width: 100%; | |||
| padding: 0 82rpx; | |||
| box-sizing: border-box; | |||
| } | |||
| .btn { | |||
| border: none; | |||
| &-record { | |||
| margin-top: 19rpx; | |||
| margin-right: 28rpx; | |||
| display: inline-flex; | |||
| color: #999999; | |||
| &-icon { | |||
| width: 21rpx; | |||
| height: auto; | |||
| margin-left: 18rpx; | |||
| } | |||
| } | |||
| &-sign { | |||
| width: 100%; | |||
| padding: 29rpx 0; | |||
| color: $uni-text-color-inverse; | |||
| font-size: 28rpx; | |||
| line-height: 40rpx; | |||
| border-radius: 44rpx; | |||
| background-image: linear-gradient(to right, #84A73F, #D8FF8F); | |||
| } | |||
| } | |||
| </style> | |||