bookingList.vue 3.16 KB
<!--
 * @Date: 2024-01-16 11:37:10
 * @LastEditors: hookehuyr hookehuyr@gmail.com
 * @LastEditTime: 2024-01-27 11:26:24
 * @FilePath: /xysBooking/src/views/bookingList.vue
 * @Description: 预约记录列表页
-->
<template>
  <div class="booking-list-page">
    <van-list
      v-model:loading="loading"
      :finished="finished"
      :finished-text="finishedTextStatus ? '没有更多了' : ''"
      @load="onLoad"
    >
      <template v-for="(item, index) in bookingList" :key="index">
        <reserveCard :data="item" />
      </template>
    </van-list>
    <div v-if="!bookingList.length" class="no-qrcode">
      <img src="https://cdn.ipadbiz.cn/xys/booking/%E6%9A%82%E6%97%A0@2x.png" style="width: 10rem;">
      <div class="no-qrcode-title">您还没有预约过参观</div>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { useGo } from '@/hooks/useGo'
import { Cookies, $, _, axios, storeToRefs, mainStore, Toast, useTitle } from '@/utils/generatePackage.js'
//import { } from '@/utils/generateModules.js'
//import { } from '@/utils/generateIcons.js'
//import { } from '@/composables'
import { billListAPI } from '@/api/index'
import reserveCard from '@/components/reserveCard.vue'
const $route = useRoute();
const $router = useRouter();
useTitle($route.meta.title);

const go = useGo();

const page = ref(1); // 页码默认为1
const limit = ref(5); // 每页默认显示5条
const bookingList = ref([]);
const loading = ref(false);
const finished = ref(false);
const finishedTextStatus = ref(false);

const formatDatetime = (data) => { // 格式化日期
  let begin_time = data.begin_time.slice(0, -3);
  let end_time = data.end_time.slice(0, -3);
  let str = begin_time + ' ' + end_time;
  return `${str.split(' ')[0]} ${str.split(' ')[1]}-${str.split(' ')[3]}`;
}

onMounted(async () => {
  const { code, data } = await billListAPI({ page: page.value, row_num: limit.value });
  if (code) {
    // 格式化数据
    data.forEach(item => {
      item.booking_time = item && formatDatetime(item);
      item.order_time = item.created_time.slice(0, -3);
    });
    bookingList.value = data;
  }
});

const onLoad = async () => {
  page.value++;
  const { code, data } = await billListAPI({ page: page.value, row_num: limit.value });
  if (code) {
    // 格式化数据
    data.forEach(item => {
      item.booking_time = item && formatDatetime(item);
      item.order_time = item.created_time.slice(0, -3);
    });
    // 合并数据
    bookingList.value = bookingList.value.concat(data);
    // 结束loading状态
    loading.value = false;
    // 数据全部加载完成
    if (!data.length) {
      // 加载状态结束
      finished.value = true;
      if (!bookingList.value.length) {
        finishedTextStatus.value = false;
      }
    }
  }
}

</script>

<style lang="less" scoped>
.booking-list-page {
  padding: 1rem;
  .no-qrcode {
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
    img {
      margin-top: 1rem;
      margin-bottom: 1rem;
      width: 10rem;
    }
    .no-qrcode-title {
      color: #A67939;
      font-size: 1.05rem;
    }
  }
}
</style>