<script setup>
import { onMounted, reactive, ref } from "vue"
import border from "@/components/border.vue"
import mitt from "@/utils/mitt"
import { orderList } from "@/api/index.js"

const initData = (data) => {
  let arr = [];
  for (let i = 0; i < data.length; i++) {
    let calss = 'div';
    if (i % 2 != 0) {
      calss = 'div div2'
    }
    arr.push(
      [
        `<div class="${calss}">${i + 1}</div>`,
        `<div class="${calss}">${data[i].real_name || '-'}</div>`,
        `<div class="${calss}">${data[i].user_phone || '-'}</div>`,
        `<div class="${calss}">${data[i].store_name || '-'}</div>`,
        `<div class="${calss}">${data[i].user_address || '-'}</div>`,
      ]
    )
  }
  list.data = arr;
  scrollBoardRef.value.updateRows(list.data);
}

const scrollBoardRef = ref(null);
const list = reactive({
  header: [
    `<div style='width: 100%;text-align: center; height: 100%; color: aliceblue; background: linear-gradient(rgba(0, 168, 255, 0.76), rgba(0, 84, 128, 0.73));'>序号</div>`,
    `<div style='width: 100%;text-align: center; height: 100%; color: aliceblue; background: linear-gradient(rgba(0, 168, 255, 0.76), rgba(0, 84, 128, 0.73));'>收货人</div>`,
    `<div style='width: 100%;text-align: center; height: 100%; color: aliceblue; background: linear-gradient(rgba(0, 168, 255, 0.76), rgba(0, 84, 128, 0.73));'>收货人电话</div>`,
    `<div style='width: 100%;text-align: center; height: 100%; color: aliceblue; background: linear-gradient(rgba(0, 168, 255, 0.76), rgba(0, 84, 128, 0.73));'>商品名称</div>`,
    `<div style='width: 100%;text-align: center; height: 100%; color: aliceblue; background: linear-gradient(rgba(0, 168, 255, 0.76), rgba(0, 84, 128, 0.73));'>收货人地址</div>`,
  ],
  data: [],
  //   index: true,
  // headerBGC: 'rgba(0, 168, 255, 0.76)',
  // oddRowBGC: 'rgba(91, 219, 246, 0.20)',
  // evenRowBGC: 'rgba(0, 168, 255, 0.16)',
  oddRowBGC: '',
  evenRowBGC: "",
  columnWidth: [40, 80],
  align: ['center'],
  rowNum: 7
})
const cell = reactive([
  {
    value: 0,
    label: '0%',
    count: 0,
    borderWidth: 1,
    borderGap: 1,
    borderRadius: 3,
    colors: ['#66FFFF', '#FEDB65']
  },
  {
    value: 0,
    label: '0%',
    count: 0,
    borderWidth: 1,
    borderGap: 1,
    borderRadius: 3,
    colors: ['#66FFFF', '#FEDB65']
  },
  {
    value: 0,
    label: '0%',
    count: 0,
    borderWidth: 1,
    borderGap: 1,
    borderRadius: 3,
    colors: ['#66FFFF', '#FEDB65']
  }
])
const initCell = () => {
  let all = pendingOrderCount.value + undeliveredOrderCount.value + doneOrderCountQuery.value;
  cell[0].value = (pendingOrderCount.value / all * 100).toFixed(0);
  cell[0].label = (pendingOrderCount.value / all * 100).toFixed(2) + '%';
  cell[0].count = pendingOrderCount.value;
  cell[1].value = (undeliveredOrderCount.value / all * 100).toFixed(0);
  cell[1].label = (undeliveredOrderCount.value / all * 100).toFixed(2) + '%';
  cell[1].count = undeliveredOrderCount.value;
  cell[2].value = (doneOrderCountQuery.value / all * 100).toFixed(0);
  cell[2].label = (doneOrderCountQuery.value / all * 100).toFixed(2) + '%';
  cell[2].count = doneOrderCountQuery.value;
}


const openList = () => {
  mitt.emit('showBusinesses')
}

const orderCount = ref(0);
const pendingOrderCount = ref(0);
const undeliveredOrderCount = ref(0);
const doneOrderCountQuery = ref(0);
const cOrder = () => {
  orderCount.value = orderCount.value + '';
  let c = 6 - orderCount.value.length;
  for (let i = 0; i < c; i++) {
    orderCount.value = '0' + orderCount.value;
  }
  return orderCount.value.split('');
}

const pages = ref({
  areaCode: 510524,
  streetCode: 510524100,
  page: 1,
  limit: 30
})

const loadOrderList = () => {
  orderList(pages.value).then((res) => {
    initData(res.data.currOrderList);
    orderCount.value = res.data.currOrderCount;
    pendingOrderCount.value = res.data.pendingOrderCount;
    undeliveredOrderCount.value = res.data.undeliveredOrderCount;
    doneOrderCountQuery.value = res.data.doneOrderCountQuery;
    initCell();
  }).catch(err => {
    console.error(err);
  })
}

onMounted(() => {
  loadOrderList();
})

</script>

<template>
  <border>
    <div class="box">
      <div class="title">今日订单数</div>
      <div class="my-day-num">
        <div class="my-num-item" v-for="(item, index) in cOrder()" :key="index">
          {{ item }}
        </div>
      </div>
      <div class="order-list">
        <div class="top">
          <div class="t-right">
            <img src="/src/assets/img/item.png" />
            <div>今日订单</div>
          </div>
          <div class="flex" @click="openList">
            <div>查看更多</div>
            <div>{{ "〉" }}</div>
          </div>
        </div>
        <dv-scroll-board
          ref="scrollBoardRef"
          :config="list"
          style="width: 100%; height: 90%"
        />
      </div>

      <div class="cylinder">
        <div class="cy">
          <div class="text">
            <div>
              占比<span class="sapn">{{ cell[0].label }}</span>
            </div>
            <div class="num">{{ cell[0].count }}</div>
          </div>
          <dv-percent-pond :config="cell[0]" class="cell" />
          <div class="type">待取货订单数</div>
        </div>
        <div class="cy">
          <div class="text">
            <div>
              占比<span class="sapn">{{ cell[1].label }}</span>
            </div>
            <div class="num">{{ cell[1].count }}</div>
          </div>
          <dv-percent-pond :config="cell[1]" class="cell" />
          <div class="type">未配送订单数</div>
        </div>
        <div class="cy">
          <div class="text">
            <div>
              占比<span class="sapn">{{ cell[2].label }}</span>
            </div>
            <div class="num">{{ cell[2].count }}</div>
          </div>
          <dv-percent-pond :config="cell[2]" class="cell" />
          <div class="type">已完成订单数</div>
        </div>
      </div>
    </div>
  </border>
</template>

<style scoped lang="scss">
.box {
  height: 100%;
  width: 100%;
  box-sizing: border-box;
  padding: 20px 20px;
  font-size: 0.8rem;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  align-items: center;
  .title {
    width: 100%;
    background-image: url(../../../assets/img/title.png);
    background-size: 100% 100%;
    height: 40px;
    display: flex;
    justify-content: center;
    align-items: center;
    font-family: "ifonts";
    font-size: 1.2rem;
  }
  .my-day-num {
    display: flex;
    justify-content: center;
    width: 100%;
    height: 10%;
    margin-top: 10px;
    .my-num-item {
      margin-right: 10px;
      width: 4rem;
      height: 4rem;
      background-image: url(../../../assets/img/day_num.png);
      background-size: 100% 100%;
      display: flex;
      justify-content: center;
      align-items: center;
      font-size: 2.2rem;
      font-family: "ifonts";
    }
  }
  .order-list {
    height: 55%;
    width: 100%;
    margin-top: 10px;
    .top {
      height: 10%;
      width: 100%;
      display: flex;
      justify-content: space-between;
      align-items: center;
      .t-right {
        display: flex;
        align-items: center;
        img {
          width: 1rem;
          height: 1rem;
          margin-right: 0.5rem;
        }
      }
      .flex {
        display: flex;
        cursor: pointer;
        div {
          margin-left: 0.5rem;
        }
      }
    }

    :deep(.div) {
      width: 100%;
      text-align: center;
      height: 100%;
      color: aliceblue;
      background: rgba(91, 219, 246, 0.2);
      white-space: nowrap; /* 防止文本换行 */
      overflow: hidden; /* 溢出部分隐藏 */
      text-overflow: ellipsis; /* 显示省略号 */
    }

    :deep(.div2) {
      background: rgba(0, 168, 255, 0.16);
    }

    :deep(.ceil) {
      padding: 0 !important;
      margin-bottom: 5px;
    }

    :deep(.header-item) {
      padding: 0 !important;
    }
  }
  .cylinder {
    width: 100%;
    display: flex;
    justify-content: space-between;
    height: 20%;
    .cy {
      width: 30%;
      height: 100%;
      background-image: url(../../../assets/img/cylinder.png);
      background-size: 100% 100%;
      position: relative;
      .text {
        height: 70%;
        width: 100%;
        display: flex;
        flex-direction: column;
        justify-content: center;
        align-items: center;
        .top {
          margin-top: 1rem;
        }
        .num {
          font-size: 1.5rem;
          font-family: "ifonts";
        }
        .sapn {
          color: #fee165;
        }
      }
      .type {
        height: 30%;
        display: flex;
        justify-content: center;
        align-items: center;
        font-size: 1rem;
      }
      .cell {
        transform: rotate(-90deg);
        width: 3rem;
        height: 1rem;
        position: absolute;
        right: -0.5rem;
        top: 2rem;
      }
      ::v-deep .dv-percent-pond text {
        display: none;
      }
    }
  }
}
</style>
