| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 | <template>  <view>    <u-navbar      title-color="#fff"      :custom-back="customBack"      :border-bottom="false"      back-icon-color="#CCE8FF"      :background="{ background: '#008CFF' }"      title="消息中心"    />    <mescroll-body ref="mescrollRef" @init="mescrollInit" @down="downCallback" @up="upCallback">      <scroll-view scroll-y style="height: 100%; width: 100%" v-for="(messageItem, index) in messageList" :key="messageItem.id">        <view class="time">{{ messageItem.createTime }}</view>        <view class="page-box">          <view class="message" @click="goDetails(messageItem)">            <view class="message-top u-flex">              <view class="message-top-left u-flex-1">                <view class="car">{{ messageItem.title }}</view>              </view>              <view class="message-top-right u-flex-2">                <u-badge :is-dot="true" type="error" v-if="messageItem.readFlag == '0'"></u-badge>              </view>            </view>            <view class="message-center">              <view class="message-center-item">{{ messageItem.content }}</view>            </view>            <view class="message-bottom">              <u-cell-item title="查看详情" style="color: #008cff"></u-cell-item>            </view>          </view>        </view>      </scroll-view>    </mescroll-body>    <u-toast ref="uToast" />  </view></template><script>import MescrollMixin from '@/uni_modules/mescroll-uni/components/mescroll-uni/mescroll-mixins.js';export default {  mixins: [MescrollMixin],   data() {    return {      messageList: []    };  },  methods: {        customBack() {      uni.getStorage({        key: 'messageBack',        success: (res) => {          this.$u.route({            type: 'switchTab',            url: res.data          });        }      });    },        downCallback() {            this.mescroll.resetUpScroll();     },        upCallback(page) {      let pageNum = page.num;       let pageSize = page.size;       this.$u.api        .getMessageList({          pageSize: pageSize,          pageNum: pageNum        })        .then((res) => {          if (res.code == 200) {                        let curPageData = res.data?.rows ?? [];                        let curPageLen = curPageData.length;                        let totalPage = res.data.pages;                        let totalSize = res.data.total;                        let hasNext = res.data.page < res.data.pages;                        if (page.num == 1) this.messageList = [];             this.messageList = this.messageList.concat(curPageData);                         this.mescroll.endByPage(curPageLen, totalPage);            setTimeout(() => {              this.mescroll.endSuccess(curPageLen);            }, 20);          } else {            this.mescroll.endErr();          }        })        .catch((err) => {          this.$refs.uToast.show({            title: err.msg,            type: 'error'          });        });    },        goDetails(item) {      if (Number(item.readFlag) === 0) {        this.$u.api          .messageRead({            newId: item.id          })          .then((res) => {            if (res.code == 200) {              this.$u.route({                url: 'pages/message/messageInfo',                params: {                  details: JSON.stringify(item)                }              });            } else {              this.$refs.uToast.show({                title: res.msg,                type: 'error'              });            }          })          .catch((err) => {            this.$refs.uToast.show({              title: '操作失败',              type: 'error'            });          });      } else {        this.$u.route({          url: 'pages/message/messageInfo',          params: {            details: JSON.stringify(item)          }        });      }    }  }};</script><style>page {  height: 100%;  background-color: #f6f6ff;}</style><style lang="scss" scoped>@import './message.scss';</style>
 |