<template>
  <!-- 自定义工作台头部 -->
  <NavBar :count="state.count" :title="'工作台'"></NavBar>
  <view
    class="contaner"
    :style="{
      marginTop: navbarRect.height + navbarRect.top + 'px',
      height: navbarRect.safeHeight + 'px',
    }"
  >
    <!-- 筛选条件 -->
    <view class="time-filter">
      <up-text
        v-for="item in timeList"
        :key="item.id"
        :text="item.name"
        :color="`${
          stateNew.filterTimeValue === item.name ? '#00DCEE' : '#999999'
        }`"
        :size="'32rpx'"
        @click="handleFilter(item)"
      ></up-text>
    </view>
    <!-- 数据汇总面板 -->
    <view class="summary">
      <view class="panel" v-for="(item, index) in summaryList" :key="index">
        <image
          :src="`${url}/static/pages/${item.imgUrl}`"
        />
        <view class="box">
          <view class="num">{{ formatMoney(item.num, 2) }}</view>
          <view class="title">{{ item.title }}</view>
        </view>
      </view>
    </view>
    <!-- 其他核心模块 -->
    <view class="core-content">
      <view>
        <text class="title">收货入库</text>
        <up-grid :border="false">
          <up-grid-item
            v-for="(item, index) in stateNew.receiveList"
            :key="index"
            @click="handleClick(item)"
          >
            <up-badge
              max="99"
              :value="item.num"
              :absolute="true"
              :offset="[10, 10]"
            ></up-badge>
            <up-image
              :src="`${url}/static/110/home/${item.icon}`"
              width="184rpx"
              height="162rpx"
            ></up-image>
            <view class="name">{{ item.title }}</view>
          </up-grid-item>
        </up-grid>
      </view>
      <view style="margin: 30rpx 0rpx">
        <text class="title title-shipment">出货销售</text>
        <up-grid :border="false">
          <up-grid-item
            v-for="(item, index) in stateNew.shipmentList"
            :key="index"
            @click="handleClick(item)"
          >
            <up-badge
              max="99"
              :value="item.num"
              :absolute="true"
              :offset="[10, 10]"
            ></up-badge>
            <up-image
              :src="`${url}/static/110/home/${item.icon}`"
              width="184rpx"
              height="162rpx"
            ></up-image>
            <view class="name">{{ item.title }}</view>
          </up-grid-item>
        </up-grid>
      </view>
    </view>
    <!-- <up-empty
      v-if="
        !isShowModule(receiveList.concat(shipmentList)) &&
        !isShowModule(appList)
      "
      mode="permission"
      icon="http://cdn.uviewui.com/uview/empty/permission.png"
      :text="'暂无相关权限, 请联系管理员'"
    >
    </up-empty> -->
  </view>

  <TabBar />
</template>

<script setup lang="ts">
import { timeList, homeInitData, url } from "@/utils/data";
import { useMemberStore } from "@/store/index";
import {
  MessageApi,
  ProfileApi,
  ReceiveApi,
  ShipmentApi,
} from "@/services/index";
import { formatMoney } from "@/utils";
import { onBackPress, onShow } from "@dcloudio/uni-app";
import pinia from "@/store";
import { timeRange } from "@/utils";
const store = useMemberStore(pinia);
const navbarRect = reactive({
  height: 42,
  top: 48,
  safeHeight: 500,
});

const getSafeHeight = () => {
  // #ifdef APP-PLUS || MP-WEIXIN
  uni.getSystemInfo({
    success: (res) => {
      navbarRect.safeHeight =
        res.windowHeight - 50 - navbarRect.top - navbarRect.height;
    },
  });
  // #endif
};

const stateNew = reactive({
  filterTimeValue: "本月",
  receiveList: homeInitData.receiveList,
  shipmentList: homeInitData.shipmentList,
  startTime: timeRange(3).startTime + " 00:00:00",
  endTime: timeRange(3).endTime + " 23:59:59",
});
const handleFilter = (item: { id: number; name: string }) => {
  stateNew.filterTimeValue = item.name;
  const range = timeRange(item.id);
  stateNew.startTime = range.startTime + " 00:00:00";
  stateNew.endTime = range.endTime + " 23:59:59";
  // 获取数据面板信息
  getSummery();
};

const summaryList = reactive([
  {
    title: "总收货/KG",
    num: 0,
    imgUrl: "01.png",
  },
  {
    title: "收货总支出/元",
    num: 0,
    imgUrl: "02.png",
  },
  {
    title: "总出货/KG",
    num: 0,
    imgUrl: "03.png",
  },
  {
    title: "出货总收入/元",
    num: 0,
    imgUrl: "04.png",
  },
]);
const state = reactive({
  count: 0,
});

// H获取数据面板信息
const getSummery = () => {
  // 收货入库相关信息
  ReceiveApi.countOrderByMonth({
    startTime: stateNew.startTime,
    endTime: stateNew.endTime,
  }).then((res) => {
    if (res.code === 200) {
      const {
        totalReceipt,
        totalExpenditure,
        toBePriced,
        toBeTare,
        audit,
        toBePaid,
      } = res.data;
      summaryList[0].num = totalReceipt;
      summaryList[1].num = totalExpenditure;
      stateNew.receiveList[0].num = toBePriced;
      stateNew.receiveList[1].num = toBeTare;
      stateNew.receiveList[2].num = audit;
      stateNew.receiveList[3].num = toBePaid;
    }
  });
  // 出货相关信息
  ShipmentApi.countOrderByMonth({
    startTime: stateNew.startTime,
    endTime: stateNew.endTime,
  }).then((res) => {
    if (res.code === 200) {
      const {
        totalShipment,
        totalIncome,
        toBeShipped,
        roughWeight,
        shipmentReview,
        toBeSettled,
      } = res.data;
      summaryList[2].num = totalShipment;
      summaryList[3].num = totalIncome;
      stateNew.shipmentList[0].num = toBeShipped;
      stateNew.shipmentList[1].num = roughWeight;
      stateNew.shipmentList[2].num = shipmentReview;
      stateNew.shipmentList[3].num = toBeSettled;
    }
  });
};
const init = () => {
  // 消息统计
  MessageApi.getUserNoticeInfoNumVo().then((res: any) => {
    if (res.code === 200) {
      state.count = res.data.unreadNoticeNum;
    }
  });
  // 获取数据面板信息
  getSummery();
  // 重新获取权限
  ProfileApi.getUserInfo().then((res: any) => {
    if (res.code === 200) {
      store.setProfile({ ...res.data, token: store.profile.token });
    }
  });
};
const handleClick = (item: any) => {
  uni.navigateTo({
    url: item.path, // 要跳转到的页面路径
  });
};
onMounted(() => {
  // #ifdef MP-WEIXIN
  let menuButtonInfo = uni.getMenuButtonBoundingClientRect();
  navbarRect.height = menuButtonInfo.height;
  navbarRect.top = menuButtonInfo.top;
  getSafeHeight();
  // #endif
  // #ifndef MP-WEIXIN
  const systemInfo = uni.getSystemInfoSync();
  navbarRect.safeHeight = (systemInfo.safeArea as any).height;
  getSafeHeight();
  // #endif
});
onShow(() => {
  if (store.profile?.token) {
    init();
  } else {
    // 当应用启动时，检查是否已显示过启动页
    if (Boolean(uni.getStorageSync("hasLaunched"))) {
      // 如果已显示过，不再显示启动页
      uni.reLaunch({
        url: "/pagesLogin/login/index",
      });
    } else {
      // 如果未显示过，标记为已显示，并保存到存储
      uni.setStorageSync("hasLaunched", true);
      uni.reLaunch({ url: "/pagesLaunch/index" });
    }
  }
});
</script>

<style lang="scss" scoped>
.contaner {
  padding: 17rpx;
  /* #ifdef H5 */
  height: calc(100vh - 67px - 70px) !important;
  /* #endif */
  overflow: auto;
  .time-filter {
    display: flex;
    text-align: center;
    align-items: center;
    justify-content: center;
    padding: 16rpx 130rpx;
    > view {
      justify-content: center;
    }
  }

  .summary {
    .panel {
      width: 50%;
      display: inline-block;
      height: 155rpx;
      position: relative;
      // background: url('/static/img/01.png');
      image {
        width: 100%;
        height: 100%;
      }
      .box {
        position: absolute;
        padding: 20rpx 0rpx 0rpx 40rpx;
        margin-top: -155rpx;
        .num {
          font-size: 40rpx;
          font-family: Source Han Sans CN;
          font-weight: bold;
          color: #ffffff;
        }
        .title {
          font-size: 24rpx;
          font-family: Source Han Sans CN;
          font-weight: 400;
          color: #ffffff;
        }
      }
    }
  }

  .core-content {
    padding: 22rpx;
    background: #ffffff;
    box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
    border-radius: 13rpx;
    position: relative;
    .title {
      font-size: 28rpx;
      font-family: Source Han Sans CN;
      font-weight: 500;
      color: #000000;
      padding-left: 20rpx;
      &::before {
        content: "";
        position: absolute;
        margin-top: 6px;
        margin-left: -20rpx;
        width: 6rpx;
        height: 26rpx;
        background: #22d594;
        box-shadow: 0rpx 0rpx 10rpx 0rpx rgba(5, 68, 37, 0.12);
        border-radius: 3rpx;
      }
    }
    .title-shipment {
      &::before {
        content: "";
        background: #ff782b;
      }
    }
    .name {
      font-weight: 400;
      font-size: 28rpx;
      color: #000000;
    }
    ::v-deep.u-grid-item {
      padding: 22rpx 0rpx 0rpx 0rpx;
    }
    ::v-deep.u-badge {
      z-index: 999;
    }
  }
}
</style>
