|
|
@ -10,15 +10,15 @@ |
|
|
|
<!-- todo: 对接接口 --> |
|
|
|
<view class="flex info"> |
|
|
|
<view class="flex flex-column info-item"> |
|
|
|
<view class="info-value">5</view> |
|
|
|
<view class="info-value">{{ duration }}</view> |
|
|
|
<view class="info-label">连续签到/天</view> |
|
|
|
</view> |
|
|
|
<view class="flex flex-column info-item"> |
|
|
|
<view class="info-value">20</view> |
|
|
|
<view class="info-value">{{ total }}</view> |
|
|
|
<view class="info-label">累计签到/天</view> |
|
|
|
</view> |
|
|
|
<view class="flex flex-column info-item"> |
|
|
|
<view class="info-value">50</view> |
|
|
|
<view class="info-value">{{ userCenterData.score }}</view> |
|
|
|
<view class="info-label">获得积分</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
@ -51,46 +51,91 @@ |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import { mapState } from 'vuex' |
|
|
|
|
|
|
|
export default { |
|
|
|
data() { |
|
|
|
return { |
|
|
|
// todo: fetch |
|
|
|
signedDates: [], |
|
|
|
// signedDates: SELECTED_DATE_ARR.map(date => { |
|
|
|
// return { |
|
|
|
// date, |
|
|
|
// info: date[date.length - 1], |
|
|
|
// infoColor: '#FFFFFF', |
|
|
|
// badge: true, |
|
|
|
// } |
|
|
|
// }), |
|
|
|
isSigned: false |
|
|
|
total: 0, |
|
|
|
duration: 0, |
|
|
|
isSigned: false, |
|
|
|
} |
|
|
|
}, |
|
|
|
onLoad() { |
|
|
|
if (uni.getStorageSync('token')) { |
|
|
|
this.$store.commit('getUserCenterInfo') |
|
|
|
this.fetchSignedData() |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
...mapState(['userCenterData']), |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
async fetchSignedData() { |
|
|
|
try { |
|
|
|
const res = await this.$fetch('queryScoreList') |
|
|
|
|
|
|
|
const { records, total } = res |
|
|
|
const today = this.$dayjs() |
|
|
|
let todaySigned = false |
|
|
|
let duration = 0 |
|
|
|
let baseDay = today.subtract(1, 'day') |
|
|
|
|
|
|
|
const set = new Set() |
|
|
|
const dates = [] |
|
|
|
|
|
|
|
records.forEach(item => { |
|
|
|
const { createTime } = item |
|
|
|
const date = this.$dayjs(createTime) |
|
|
|
const dateStr = date.format("YYYY-MM-DD") |
|
|
|
|
|
|
|
if (set.has(dateStr)) { |
|
|
|
return |
|
|
|
} |
|
|
|
|
|
|
|
set.add(dateStr) |
|
|
|
|
|
|
|
if (!todaySigned && date.isSame(today, 'day')) { |
|
|
|
todaySigned = true |
|
|
|
} |
|
|
|
|
|
|
|
if (date.isSame(baseDay, 'day')) { |
|
|
|
duration++ |
|
|
|
baseDay = baseDay.subtract(1, 'day') |
|
|
|
} |
|
|
|
|
|
|
|
dates.push({ |
|
|
|
date: date.format("YYYY-MM-DD"), |
|
|
|
info: date.date(), |
|
|
|
infoColor: '#FFFFFF', |
|
|
|
badge: true, |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
this.signedDates = dates |
|
|
|
this.isSigned = todaySigned |
|
|
|
this.isSigned && (duration++) |
|
|
|
this.duration = duration |
|
|
|
this.total = total |
|
|
|
|
|
|
|
} catch (err) { |
|
|
|
|
|
|
|
} |
|
|
|
}, |
|
|
|
async onSignIn() { |
|
|
|
|
|
|
|
try { |
|
|
|
|
|
|
|
await this.$fetch('sign') |
|
|
|
|
|
|
|
this.isSigned = true |
|
|
|
|
|
|
|
const date = this.$dayjs() |
|
|
|
|
|
|
|
this.signedDates.push({ |
|
|
|
date: date.format("YYYY-MM-DD"), |
|
|
|
info: date.date(), |
|
|
|
infoColor: '#FFFFFF', |
|
|
|
badge: true, |
|
|
|
}) |
|
|
|
|
|
|
|
this.$store.commit('getUserCenterInfo') |
|
|
|
this.fetchSignedData() |
|
|
|
|
|
|
|
uni.showToast({ |
|
|
|
title: '签到成功~', |
|
|
|
}); |
|
|
|
|
|
|
|
// todo: refresh overview data |
|
|
|
|
|
|
|
} catch (err) { |
|
|
|
|
|
|
|
} |
|
|
|