<template>
  <!-- 联系运营 -->
  <image
    class="icon-phone"
    src="https://image.jxc4.com/image/dd78fd0b128be86e681f376e794f8309.png"
    mode="scaleToFill"
    @tap="getPhone"
    @touchmove.stop.prevent="touchM($event, 1)"
    @touchstart="touchS()"
    @touchend="touchE($event, 1)"
  />

  <!-- 当前门店是否休息 -->
  <view
    v-if="!isStatu"
    class="open-status-msg"
    @touchmove.prevent="touchM($event, 2)"
    @touchstart.prevent="touchS()"
    @touchend.prevent="touchE($event, 2)"
    ><text>本店</text><text>已休息</text></view
  >
  <view
    v-else-if="!isRest"
    class="open-status-msg open-to-booking"
    @touchmove.prevent="touchM($event, 2)"
    @touchstart.prevent="touchS()"
    @touchend.prevent="touchE($event, 2)"
    ><text>接受</text><text>预订单</text></view
  >

  <!-- tab -->
  <view class="jx-tabs-root">
    <jx-tab ref="tabInfo" @jxTab="jxTabClick"></jx-tab>

    <!-- 售后单，已完成 -->
    <template v-if="orderState == 6 || orderState == 7">
      <view class="filter-root">
        <text class="btn" @tap="orderFilterRef.openRef()">更多条件</text>
        <uni-search-bar
          v-model="keyword"
          @confirm="searchStore(keyword)"
          @clear="clearIpt"
          cancelButton="none"
          clearButton="auto"
          @input="changeIpt(keyword)"
          :placeholder="
            orderState == 6 ? '搜索售后单号、订单号、电话' : '搜索订单、电话等'
          "
        />
      </view>
    </template>

    <!-- 待配送筛选 -->
    <template v-if="orderState == 3">
      <view class="filter-order">
        <view :class="{ active: active == 0 }" @tap="distributionStatu(0)"
          >全&emsp;部</view
        >
        <view :class="{ active: active == 1 }" @tap="distributionStatu(1)"
          >未抢单</view
        >
        <view :class="{ active: active == 2 }" @tap="distributionStatu(2)"
          >已抢单</view
        >
      </view>
    </template>
  </view>

  <!-- 列表内容 -->
  <scroll-view
    class="order-item-main"
    scroll-y
    :style="{ height: `calc(100vh - ${scorllHeight})` }"
    refresher-enabled
    :refresher-triggered="triggered"
    @refresherrefresh="refresherrefresh"
    refresher-background="#efefef"
    @scrolltolower="scrolltolower"
  >
    <!-- 待接单 -->
    <template v-if="orderState == 1 && totalCount != 0">
      <pending-order
        v-for="item in orderDataList"
        :key="item.id"
        :item="item"
      />
    </template>

    <!-- 待拣货 -->
    <template v-if="orderState == 2 && totalCount != 0">
      <pending-picking
        v-for="item in orderDataList"
        :key="item.id"
        :item="item"
      />
    </template>

    <!-- 待配送 -->
    <template v-if="orderState == 3 && totalCount != 0">
      <view v-for="item in orderDataList" :key="item.id">
        <pending-distribution
          v-if="
            active === 0 ||
            (active === 1 && item.waybillStatus < 10) ||
            (active === 2 && item.waybillStatus >= 10 && item.lockStatus !== -5)
          "
          :item="item"
          :type="1"
        />
      </view>
      <jx-load-more
        v-show="totalCount >= 2 && active === 0"
        :isLoad="isLoad"
        marginTop="25rpx"
      />
    </template>

    <!-- 配送中 -->
    <template v-if="orderState == 4 && totalCount != 0">
      <pending-distribution
        v-for="item in orderDataList"
        :key="item.id"
        :item="item"
        :type="0"
      />
    </template>

    <!-- 异常单 -->
    <template v-if="orderState == 5 && totalCount != 0">
      <view v-for="item in orderDataList" :key="item.id">
        <abnormal-order
          v-if="
            item.lockStatus === -5 ||
            ((item.status === 17 || item.status === 18) &&
              item.lockStatus !== -5) ||
            (item.status === 22 && item.lockStatus !== -5)
          "
          :item="item"
        />
        <jx-empty title="暂无异常订单" v-else />
      </view>
    </template>

    <!-- 售后单 -->
    <template v-if="orderState == 6 && totalCount != 0">
      <after-sales-order
        v-for="item in orderDataList"
        :key="item.id"
        :item="item"
      ></after-sales-order>
    </template>

    <!-- 已完成 -->
    <template v-if="orderState == 7 && totalCount != 0">
      <completed
        v-for="item in orderDataList"
        :key="item.id"
        :item="item"
      ></completed>
    </template>

    <!-- 加载更多 -->
    <jx-load-more
      v-show="totalCount >= 2 && orderState != 3 && orderState != 5"
      :isLoad="isLoad"
      marginTop="25rpx"
    />

    <!-- 空状态 -->
    <jx-empty title="暂无订单信息" v-show="totalCount == 0" />
  </scroll-view>

  <!-- 切换筛选条件 -->
  <order-filter
    @filter-data="filterData"
    ref="orderFilterRef"
    :orderState="orderState"
    :orderStateInfo="orderStateInfo"
  />

  <!-- 公共组件 -->
  <jx-login-empty title="马上登录，查看订单" />
  <jx-loading />
</template>

<script lang="ts" setup>
import jxTab from './childPages/jx-tab/jx-tab.vue' // 待拣货
import pendingOrder from './childPages/pending-order/pending-order.vue' // 待拣货
import pendingPicking from './childPages/pending-picking/pending-picking.vue' // 待配送
import pendingDistribution from './childPages/pending-distribution/pending-distribution.vue' // 配送中
import afterSalesOrder from './childPages/after-sales-order/after-sales-order.vue' // 售后单
import completed from './childPages/completed/completed.vue'
import orderFilter from './childPages/order-filter/order-filter.vue'
import abnormalOrder from './childPages/abnormal-order/abnormal-order.vue'
import orderInfoFn from './main'
import { ref } from 'vue'
import { jx_throttles } from '@/utils/tools'
const {
  jxTabClick,                 // 导航栏单击事件
  orderDataList,              // 订单数据
  totalCount,                 // 订单条数
  orderState,                 // 订单列表判断条件
  orderStateInfo,             // 订单列表信息
  tabInfo,                    // 导航栏实例
  searchStore,                // 输入库条件筛选
  keyword,                    // 输入库内容
  changeIpt,                  // 输入款输入变化
  clearIpt,                   // 清空输入框
  scorllHeight,               // 动态计算scorll-view高度
  active,                     // 待配送筛选高亮
  orderFilterRef,             // 筛选条件实例对象
  filterData,                 // 筛选条件数据
  refresherrefresh,           // 下拉刷新
  triggered,                  // 刷新状态
  scrolltolower,              // 页面触底
  isLoad,                     // 触底加载
  distributionStatu,          // 配送筛选
  isRest,                     // 是否显示休息状态
  isStatu,                    // 门店营业状态
} = orderInfoFn()
/**
 * 联系运营页面跳转
 */
function getPhone() {
  uni.navigateTo({ url: '/subPages/orderChild/getPhone/getPhone' })
}

/*************************************************
 * 开始触摸运营
 */
const isAnmarion = ref<string>('0s')
let windowW = 0
let windowH = 0
function touchS() {
  isAnmarion.value = '0s'
  windowW = 0
  windowH = 0
  let sysTem = uni.getSystemInfoSync()
  windowW = sysTem.windowWidth
  windowH = sysTem.windowHeight
}

/*************************************************
 * 移动联系运营
 */
const pageX1 = ref<string>('20rpx')
const pageY1 = ref<string>('450rpx')
const pageX2 = ref<string>('20rpx')
const pageY2 = ref<string>('300rpx')
function touchM(e: AnyObject, type: number) {
  touchMThrottles(e, type)
}
const touchMThrottles = jx_throttles({
  time: 5,
  success(e: AnyObject, type: number) {
    let sysTem = e.changedTouches[0]
    if (type == 1) {
      pageX1.value = sysTem.clientX - 25 + 'px'
      pageY1.value = sysTem.clientY - 25 + 'px'
    }

    if (type == 2) {
      pageX2.value = sysTem.clientX - 25 + 'px'
      pageY2.value = sysTem.clientY - 25 + 'px'
    }
  },
})

/*************************************************
 * 触摸运营结束
 */
function touchE(e: AnyObject, type: number) {
  isAnmarion.value = '0.5s'
  let sysTem = e.target
  if (type == 1) {
    if (sysTem.offsetLeft <= 0 || sysTem.offsetLeft <= windowW / 2 - 25) {
      pageX1.value = '10px'
    }
    if (sysTem.offsetLeft >= windowW || sysTem.offsetLeft >= windowW / 2 - 25) {
      pageX1.value = windowW - 60 + 'px'
    }
    if (sysTem.offsetTop <= 50) {
      pageY1.value = '50px'
    }
    if (sysTem.offsetTop >= windowH - 100) {
      pageY1.value = windowH - 60 + 'px'
    }
  }

  if (type == 2) {
    let pageX = parseInt(pageX2.value)
    let pageY = parseInt(pageY2.value)
    if (pageX <= 0 || pageX <= windowW / 2 - 25) {
      pageX2.value = '10px'
    }
    if (pageX >= windowW || pageX >= windowW / 2 - 25) {
      pageX2.value = windowW - 60 + 'px'
    }
    if (pageY <= 50) {
      pageY2.value = '50px'
    }
    if (pageY >= windowH - 100) {
      pageY2.value = windowH - 60 + 'px'
    }
  }
}
</script>

<style lang="scss" scoped>
.open-status-msg {
  position: absolute;
  z-index: 99999999999;
  left: v-bind(pageX2);
  top: v-bind(pageY2);
  width: 50px;
  height: 50px;
  font-size: 10px;
  padding: 10px;
  text-align: center;
  box-sizing: border-box;
  border-radius: 50%;
  color: #fff;
  font-weight: bold;
  background: rgba(116, 116, 116, 0.75);
  text-shadow: 1rpx 1rpx 2rpx #eb6100;
  transition: all v-bind(isAnmarion);

  text {
    display: inline-block;
  }
}

.open-to-booking {
  text-shadow: 2rpx 2rpx 2rpx $jx-warring;
}

.icon-phone {
  position: absolute;
  z-index: 99999999999;
  left: v-bind(pageX1);
  top: v-bind(pageY1);
  width: 50px;
  height: 50px;
  transition: all v-bind(isAnmarion);
}
.filter-root {
  box-sizing: border-box;
  height: 90rpx;
  padding: 15rpx;
  background-color: #fff;
  display: flex;
  align-items: center;

  .btn {
    padding: 8rpx 0;
    width: 160rpx;
    text-align: center;
    background-color: $jx-primary;
    color: #fff;
    font-size: 28rpx;
    border-radius: 100rpx;
    margin-right: 15rpx;
  }

  :deep(.uni-searchbar) {
    padding: 0 !important;
    width: 545rpx !important;

    .uni-searchbar__box {
      border-radius: 100rpx !important;
      height: auto !important;
    }
  }
}
</style>
<style lang="scss">
page {
  position: relative;
  background-color: #efefef;
  width: 100%;
  height: 100%;
}

.self-order {
  width: 100%;
  text-align: center;
  color: #ff0000;
  font-weight: bold;
  padding-bottom: 20rpx;
  font-size: 28rpx;
}

.btn-picked {
  background: $jx-primary;
  color: white;
  border-radius: 10rpx;
  font-size: 36rpx;
  font-weight: 400;
  height: 94rpx;
  line-height: 94rpx;
  text-align: center;
  margin: 0rpx 20rpx;
  margin-top: 15rpx;
}

.jx-tabs-root {
  position: sticky;
  top: 0;
  box-shadow: 0 5rpx 7rpx #ececec;
}

.filter-order {
  height: 90rpx;
  box-sizing: border-box;
  padding: 15rpx;
  display: flex;
  justify-content: space-between;
  background-color: #fff;

  view {
    box-sizing: border-box;
    width: 230rpx;
    padding: 10rpx 20rpx;
    border: 1rpx solid #999999;
    color: #999999;
    border-radius: 10rpx;
    text-align: center;
  }

  .active {
    background-color: #82c86f;
    border: 1rpx solid #82c86f;
    color: #fff;
  }
}
.order-item-main {
  box-sizing: border-box;
}
</style>