鸿宇研学生前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

151 lines
3.4 KiB

<template>
<view class="page__view highlight">
<!-- 导航栏 -->
<navbar title="我的成就" leftClick @leftClick="$utils.navigateBack" />
<view class="main">
<view class="flex summary">
<view class="info">
<view class="flex title">共获得<view class="highlight">{{ total }}</view>枚成就</view>
<view class="tag">新获得</view>
</view>
<view class="icon">
<image class="img" src="@/pages_order/static/temp-49.png" mode="widthFix"></image>
</view>
</view>
<view class="list">
<recordsView :list="list" @lighted="getData"></recordsView>
</view>
</view>
</view>
</template>
<script>
import { mapState } from 'vuex'
import mixinsList from '@/mixins/list.js'
import recordsView from './recordsView.vue'
export default {
mixins: [mixinsList],
components: {
recordsView,
},
data() {
return {
keyword: '',
mixinsListApi: 'queryMedalList',
}
},
computed: {
...mapState(['userInfo', 'memberInfo']),
},
onLoad({ search }) {
if (search) {
this.keyword = search
this.queryParams.title = search
}
this.queryParams.bindUserId = this.memberInfo?.id || this.userInfo.id
this.getData()
},
methods: {
getDataThen(records) {
const list = records.reduce((arr, item) => {
const { id, activityId, activityId_dictText, medalId, medal, lightDate, createTime, isLight: _isLight } = item
const { title, icon1, icon2 } = medal
const isLight = _isLight == '1'
const obj = {
medalId,
icon: isLight ? icon1 : icon2,
label: title,
createTime: lightDate || createTime,
isLight,
}
let index = arr.findIndex(activity => activity.id === activityId)
if (index === -1) {
arr.push({
id: activityId,
name: activityId_dictText,
createTime,
children: [obj]
})
} else {
arr[index].children.push(obj)
}
return arr
}, [])
list.sort((a, b) => new Date(b.createTime).getTime() - new Date(a.createTime).getTime())
list.forEach(item => {
item.children.sort((a, b) => {
if ((a.isLight && b.isLight) || (!a.isLight && !b.isLight)) {
return new Date(a.createTime).getTime() - new Date(b.createTime).getTime()
}
if (a.isLight) {
return -1
}
return 1
})
})
this.list = list
},
},
}
</script>
<style scoped lang="scss">
.summary {
padding: 16rpx 72rpx 32rpx 64rpx;
justify-content: space-between;
font-family: PingFang SC;
font-weight: 400;
line-height: 1.4;
.info {
.title {
font-size: 32rpx;
font-weight: 600;
color: #000000;
.highlight {
margin: 0 8rpx;
color: $uni-color;
}
}
.tag {
margin-top: 4rpx;
display: inline-block;
padding: 4rpx 16rpx;
font-size: 26rpx;
color: #21607D;
background: #DBF4FF;
border-radius: 22rpx;
}
}
.icon {
width: 160rpx;
height: auto;
.img {
width: 100%;
height: auto;
}
}
}
</style>