|
|
- <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>
|