<!--  -->
<template>
  <div
    v-loading="loading"
    element-loading-text="拼命加载中"
    element-loading-spinner="el-icon-loading"
    element-loading-background="rgba(0, 0, 0, 0.8)"
    class="message_box"
    :style="'height:' + fullHeight + 'px'"
  >
    <!-- 头部 -->
    <div class="message_box_head">
      <!-- 返回图标 -->
      <div class="head_div" @click="goBack()">
        <img src="../../assets/image/return.png" alt class="head_div_img" />
      </div>

      <!-- 标题 -->
      <div class="head_title">
        <span class="head_title_text">留言列表</span>
      </div>

      <!-- 添加 -->
      <div class="head_add">
        <img @click="add()" src="../../assets/image/add.png" alt class="add_img" />
      </div>
    </div>

    <mescroll-vue ref="mescroll" :down="mescrollDown" :up="mescrollUp" @init="mescrollInit">
      <!-- 列表 -->
      <ul class="message_box_ul" v-if="listShow">
        <li
          class="message_box_li"
          @click="xiangqi($event, index)"
          v-for="(item, index) in this.redata"
          :key="index"
        >
          <div class="message_box_data_box">
            <!-- 用户 -->
            <div class="message_box_data_user">用户：</div>

            <!-- 内容 -->
            <div
              class="message_box_data_text"
            >{{ item.user_remark === null || item.user_remark === '' ? item.username : item.user_remark | ellipsis }}</div>

            <!-- 未回复 -->
            <div class="message_box_data_meg">{{ item.store !== null ? '已回复' : '未回复' }}</div>
          </div>

          <!-- 时间 -->
          <div class="message_box_time">{{ item.time }}</div>

          <!-- 线 -->
          <div class="message_box_wire"></div>
        </li>
      </ul>

      <!-- 暂无数据 -->
      <div class="message_box_judge" id="empty" v-else>
        <img src="../../assets/image/wu.png" alt class="message_box_judge_img" />
        <div class="message_box_judge_text">抱歉，暂无留言</div>
      </div>
    </mescroll-vue>
  </div>
</template>

<script>
// 引入mescroll的vue组件
import MescrollVue from "mescroll.js/mescroll.vue";
export default {
  components: {
    MescrollVue // 注册mescroll组件
  },
  //限时数据文本的字数限时
  filters: {
    ellipsis(value) {
      if (!value) return "";
      if (value.length > 7) {
        return value.slice(0, 7) + "...";
      }
      return value;
    }
  },
  data() {
    //这里存放数据
    return {
      listShow: true, //数据暂空判断
      loading: true, //加载
      fullHeight: document.documentElement.clientHeight,
      redata: [], //后端数据
      //上拉加载下拉刷新
      mescroll: null, // mescroll实例对象
      mescrollDown: {}, //下拉刷新的配置. (如果下拉刷新和上拉加载处理的逻辑是一样的,则mescrollDown可不用写了)
      mescrollUp: {
        // 上拉加载的配置.
        callback: this.upCallback, // 上拉回调,此处简写; 相当于 callback: function(page, mescroll) { }
        //以下是一些常用的配置,当然不写也可以的.
        page: {
          num: 0, //当前页 默认0,回调之前会加1; 即callback(page)会从1开始
          size: 10 //每页数据条数,默认10
        },
        isBounce: true, //根据记录的滚动条高度回弹
        htmlNodata: '<p class="upwarp-nodata">-- 已经到底了! --</p>',
        noMoreSize: 10, //如果列表已无数据,可设置列表的总数量要大于5才显示无更多数据;
        // 避免列表数据过少(比如只有一条数据),显示无更多数据会不好看
        // 这就是为什么无更多数据有时候不显示的原因
        toTop: {
          //回到顶部按钮
          src:
            "http://pic.51yuansu.com/pic3/cover/00/65/23/5896fa4bc81fc_610.jpg", //图片路径,默认null,支持网络图
          offset: 800 //列表滚动1000px才显示回到顶部按钮
        },
        empty: {
          //列表第一页无任何数据时,显示的空提示布局; 需配置warpId才显示
          warpId: "xxid", //父布局的id (1.3.5版本支持传入dom元素)
          icon: "./static/mescroll/mescroll-empty.png", //图标,默认null,支持网络图
          tip: "暂无相关数据~" //提示
        },
        onScroll: function(mescroll, y, isUp) {
          //监听滚动条
          // console.log(y);
        },
        lazyLoad: {
          use: true // 是否开启懒加载,默认false
        }
      }
    };
  },
  beforeRouteEnter(to, from, next) {
    // 如果没有配置顶部按钮或isBounce,则beforeRouteEnter不用写
    next(vm => {
      // 滚动到原来的列表位置,恢复顶部按钮和isBounce的配置
      vm.$refs.mescroll && vm.$refs.mescroll.beforeRouteEnter();
    });
  },
  beforeRouteLeave(to, from, next) {
    // 如果没有配置顶部按钮或isBounce,则beforeRouteLeave不用写
    // 记录列表滚动的位置,隐藏顶部按钮和isBounce的配置
    this.$refs.mescroll && this.$refs.mescroll.beforeRouteLeave();
    next();
  },
  //监听属性 类似于data概念
  computed: {},
  //监控data中的数据变化
  watch: {
    fullHeight(val) {
      //监控浏览器高度变化
      if (!this.timer) {
        this.fullHeight = val;
        this.timer = true;
        let that = this;
        setTimeout(function() {
          //防止过度调用监测事件，导致卡顿
          that.timer = false;
        }, 400);
      }
    }
  },
  //方法集合
  methods: {
    mescrollInit(mescroll) {
      this.mescroll = mescroll; // 如果this.mescroll对象没有使用到,则mescrollInit可以不用配置
    },

    // 上拉回调 page = {num:1, size:10}; num:当前页 ,默认从1开始; size:每页数据条数,默认10
    upCallback(page, mescroll) {
      let _this = this;
      this.$axios({
        method: "get",
        url: "bigservers/check_leaving",
        params: {
          page: _this.mescrollUp.page.num
        }
      })
        .then(res => {
          _this.loading = false;
          let arr = res.data.dat;
          // 如果是第一页需手动置空列表
          if (page.num === 1) this.redata = [];
          // 把请求到的数据添加到列表
          this.redata = this.redata.concat(arr);
          // 数据渲染成功后,隐藏下拉刷新的状态
          _this.loading = false;
          this.$nextTick(() => {
            mescroll.endSuccess(arr.length);
          });

          //判读是否有数据
          if (res.data.dat.length === 0) {
            _this.listShow = false;
          } else if (res.data.dat.length !== 0) {
            _this.listShow = true;
            // _this.redata = res.data.dat; //全部数据
          }
        })
        .catch(error => {
          _this.loading = false;
          mescroll.endErr();
        });
    },

    //动态获取浏览器高度
    get_boderHeight() {
      const that = this;
      window.onresize = () => {
        return (() => {
          window.fullHeight = document.documentElement.clientHeight;
          that.fullHeight = window.fullHeight;
        })();
      };
    },

    //点击返回到主页
    goBack() {
      let _this = this;
      // _this.$router.push("/person");
      _this.$router.replace("/person");
      location.reload();
    },

    //点击进入新增留言页面
    add() {
      let _this = this;
      _this.$router.push("/addMeg");
    },

    //点击进入反馈详情页面
    xiangqi(e, index) {
      let _this = this;
      if (
        e.target.className === "message_box_li" ||
        e.target.className === "message_box_time" ||
        e.target.className === "message_box_data_box" ||
        e.target.className === "message_box_data_text" ||
        e.target.className === "message_box_data_meg"
      ) {
        _this.current = index;
        //获取点击对象
        let el = e.currentTarget;
        let listId = _this.redata[index].id;
        let listDistinction = _this.redata[index].ret;
        localStorage.setItem("messageID", listId); //保存ID
        localStorage.setItem("messageRet", listDistinction); //保存数据中的ret
        _this.$router.replace("/megXq");
        // _this.$router.push("/megXq");
      }
    }
  },
  //生命周期 - 创建完成（可以访问当前this实例）
  created() {},
  //生命周期 - 挂载完成（可以访问DOM元素）
  mounted() {
    this.get_boderHeight();
  }
};
</script>
<style lang='scss'>
@import "../../assets/scss/bus.scss";
@import "../../assets/scss/message.scss";
.message_box .mescroll {
  position: fixed;
  top: 44px;
  bottom: 0;
  height: auto;
}
</style>