<!-- 可开发票订单 -->
<template>
  <view class="order-box">
    <z-paging ref="paging" v-model="orderList" @query="queryList">
      <!-- 导航栏 -->
      <u-navbar
        title-color="#fff"
        :custom-back="customBack"
        :border-bottom="false"
        back-icon-color="#CCE8FF"
        :background="{ background: '#008CFF' }"
        title="可开票订单"
        slot="top"
      />
      <view class="order-box-list">
        <view class="order-box-list-item" v-for="(item, index) in orderList" :key="index" @click="radioClick(item)">
          <view class="left">
            <view class="left-radio small-radio">
              <radio value="true" :checked="currentIds.includes(item.id)" />
            </view>
            <view class="left-content">
              <view class="left-content-item money">￥{{ item.amount }}</view>
              <view class="left-content-item">{{ item.name }}</view>
              <view class="left-content-item time">{{ $u.timeFormat(new Date(item.payTime), 'yyyy-mm-dd hh:MM:ss') }}</view>
            </view>
          </view>
          <view class="right">{{ item.vehicleNo }}</view>
        </view>
      </view>
      <view class="order-box-bottom" slot="bottom">
        <view class="order-box-bottom-radio small-radio"> <radio value="true" :checked="checkedAll" @click="checkedChange" />本页全选 </view>
        <view class="order-box-bottom-next">
          <u-button type="primary" size="medium" :disabled="!currentIds.length" @click="nextStep">下一步</u-button>
        </view>
      </view>
    </z-paging>
    <u-toast ref="uToast" />
  </view>
</template>

<script>
export default {
  data() {
    return {
      orderList: [],
      currentIds: [],
      currentList: [],
      checkedAll: false,
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        invoType: 1
      }
    };
  },
  watch: {
    currentIds(val) {
      this.checkedAll = val.length === this.orderList.length;
    }
  },
  onLoad(options) {
    const { orderType } = options;
    if (orderType) {
      this.queryParams.invoType = orderType;
    }
  },
  methods: {
    /**
     * @description: 分页触发
     * @param {*} pageNo
     * @param {*} pageSize
     * @return {*}
     */
    queryList(pageNo, pageSize) {
      this.queryParams.pageNum = pageNo;
      this.queryParams.pageSize = pageSize;
      this.getList();
    },
    customBack() {
      this.$u.route({
        url: '/pages/invoiceModule/myInvoice/myInvoice'
      });
    },
    /**
     * @description: 获取列表
     * @return {*}
     */
    async getList() {
      const { code, data } = await this.$u.api.invoiceModuleApi.getInvoiceOrderListApi({ ...this.queryParams });
      if (code === 200) {
        this.$refs.paging.complete(data?.pageInfo?.rows || []);
      }
    },
    /**
     * @description: 单项条目点击
     * @param {*} item
     * @return {*}
     */
    radioClick(item) {
      if (this.currentIds.includes(item.id)) {
        const index = this.currentIds.indexOf(item.id);
        this.currentIds.splice(index, 1);
        this.currentList.splice(index, 1);
      } else {
        this.currentIds.push(item.id);
        this.currentList.push(item);
      }
    },
    /**
     * @description: 全选
     * @return {*}
     */
    checkedChange(item) {
      this.checkedAll = !this.checkedAll;
      this.currentIds = this.checkedAll ? this.orderList.map((item) => item.id) : [];
      this.currentList = this.checkedAll
        ? this.orderList.map((item) => {
            return { ...item };
          })
        : [];
    },
    /**
     * @description: 下一步
     * @return {*}
     */
    nextStep() {
      if (this.currentIds.length) {
        const storageObj = {
          total: this.countSum(this.currentList),
          ids: this.currentIds,
          invoType: this.queryParams.invoType
        };
        uni.setStorage({
          key: 'availableOrderKey',
          data: JSON.stringify(storageObj),
          success: () => {
            this.$u.route({
              url: '/pages/invoiceModule/addInvoice/addInvoice',
              params: {
                invoType: this.queryParams.invoType
              }
            });
          }
        });
      } else {
        this.$refs.uToast.show({
          title: '请先选择订单',
          type: 'warning'
        });
      }
    },
    /** 
     * @description: 计算累加精度丢失问题
     * @param {*} arr
     * @return {*}
     */
    countSum(arr) {
      if (!arr.length) return 0;
      arr = arr.map((v) => {
        if (v.amount && !Number.isNaN(Number(v.amount))) return Math.round((v.amount).toFixed(2) * 100);
        return 0;
      });
      const result = arr.reduce((prev, curr) => {
        return prev + curr;
      }, 0);
      return result / 100;
    }
  }
};
</script>

<style lang="scss" scoped>
@import './availableOrder.scss';
</style>
