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