<template>
  <view class="">
    <com-empty-view v-if="jobList.length == 0"></com-empty-view>
    <job-filter :isShowFromLocationCode="true" ref="filter" otherTitle="ASN" @switchChangeToday="switchChangeToday" @switchChangeWait="switchChangeWait" @onScanNumber="getScanNumber" :checkedToday="checkedToday" :checkedWaitTask="checkedWaitTask" @fromLocationCode="fromLocationCode"> </job-filter>
    <view v-if="jobList.length > 0" class="u-m-20">
      <u-swipe-action :show="item.show" :index="index" v-for="(item, index) in jobList" :key="index" :options="item.status == '2' ? detailGiveupOptions : item.status == '1' ? detailCloseOptions : detailOptions" bg-color="rgba(255,255,255,0)" class="u-m-b-20" @click="swipeClick">
        <com-repleinsh-job-card :dataContent="item" @click="openJobDetail(item)"></com-repleinsh-job-card>
      </u-swipe-action>
      <repleinsh-info-popup ref="jobInfoPopupRef"></repleinsh-info-popup>
      <repleinsh-job-list-popup ref="jobListPopupRef" @selectedItem="selectedItem"></repleinsh-job-list-popup>
      <u-loadmore :status="loadingType" v-if="jobList.length > 0" />
    </view>
    <win-scan-button @goScan="openScanPopup" v-if="jobList.length > 0"></win-scan-button>
    <winScanPackJob ref="scanPopup" @getResult="getScanResult"></winScanPackJob>
    <com-message ref="comMessageRef" />
  </view>
</template>

<script setup lang="ts">
import { ref, getCurrentInstance, nextTick } from 'vue'
import { onLoad, onShow, onNavigationBarButtonTap, onReady, onBackPress, onReachBottom, onPullDownRefresh } from '@dcloudio/uni-app'

import { getRepleinshJobList, cancleTakeRepleinshJob, closeTakeRepleinshJob } from '@/api/request2.js'

import { goHome, updateTitle } from '@/common/basic.js'

import { getDetailOption, getDetailGiveupOption, getDetailCloseOption } from '@/common/array.js'

import comEmptyView from '@/mycomponents/common/comEmptyView.vue'
import jobFilter from '@/mycomponents/job/jobFilter.vue'

import comRepleinshJobCard from '@/pages/repleinsh/coms/comRepleinshJobCard.vue'
import repleinshJobListPopup from '@/pages/repleinsh/coms/repleinshJobListPopup.vue'
import repleinshInfoPopup from '@/pages/repleinsh/coms/repleinshInfoPopup.vue'
import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import winScanPackJob from '@/mycomponents/scan/winScanPackJob.vue'

import { useCountStore } from '@/store'
// 获取自定义的store
const store = useCountStore()

const { proxy } = getCurrentInstance()
const jobList = ref([])
const pageNo = ref(1)
const pageSize = ref(10)
const totalCount = ref(0)
const loadingType = ref('nomore')
const checkedToday = ref(false)
const waitTask = ref(false)
const todayTime = ref('')
const status = ref('1,2') // 待处理 、进行中
const detailOptions = ref([])
const scanMessage = ref('')
const detailGiveupOptions = ref([])
const detailCloseOptions = ref([])
const title = ref('')
const scanMessage = ref('')
const filter = ref()
const comMessageRef = ref()
const jobInfoPopupRef = ref()
const jobListPopupRef = ref()

onShow(() => {
  nextTick(() => {
    getList('refresh')
  })
})
onLoad((option) => {
  title.value = option.title
})
onReady(() => {
  detailOptions.value = getDetailOption()
  detailGiveupOptions.value = getDetailGiveupOption()
  detailCloseOptions.value = getDetailCloseOption()
})
onReachBottom(() => {
  // 避免多次触发
  if (loadingType.value == 'loading' || loadingType.value == 'nomore') {
    return
  }
  getList('more')
})
onPullDownRefresh(() => {
  getList('refresh')
})
// 后退按钮
onBackPress((options) => {
  if (options.from === 'navigateBack') {
    uni.navigateBack({
      delta: 1
    })
    return false
  }
})
// 返回首页
onNavigationBarButtonTap((e) => {
  if (e.index === 0) {
    goHome()
  } else if (e.index == 1) {
    filter.value.openFilter()
  }
})
const getList = (type, fromLocationCode = '') => {
  proxy.$modal.loading('加载中­....')
  loadingType.value = 'loading'
  if (type === 'refresh') {
    pageNo.value = 1
    jobList.value = []
  }

  const filters = []
  if (checkedToday.value) {
    filters.push({
      column: 'create_time',
      action: 'betweeen',
      value: todayTime.value
    })
  }

  filters.push({
    column: 'status',
    action: 'in',
    value: status.value
  })
  filters.push({
    column: 'accept_user_id',
    action: '==',
    value: store.id
  })
  if (fromLocationCode != '') {
    // 来源库位
    filters.push({
      column: 'fromLocationCode',
      action: '==',
      value: fromLocationCode
    })
  }
  const params = {
    filters,
    pageNo: pageNo.value,
    pageSize: pageSize.value,
    sort: 'number',
    by: 'desc'
  }
  getRepleinshJobList(params)
    .then((res) => {
      uni.hideLoading()
      if (type === 'refresh') {
        uni.stopPullDownRefresh()
      }

      const { list } = res.data
      totalCount.value = res.data.total
      updateTitle(`${title.value}(${totalCount.value})`)
      loadingType.value = 'loadmore'
      if (list == null || list.length == 0) {
        loadingType.value = 'nomore'
        return
      }
      jobList.value = type === 'refresh' ? list : jobList.value.concat(list)
      pageNo.value++
    })
    .catch((error) => {
      if (type === 'refresh') {
        uni.stopPullDownRefresh()
      }
      loadingType.value = ''
      updateTitle(title.value)
      uni.hideLoading()
      showErrorMessage(error)
    })
}
const fromLocationCode = (fromLocationCode) => {
  console.log('fromLocationCode', fromLocationCode)
  getList('refresh', fromLocationCode, '')
}
const openJobDetail = (item, scanMessageParams = '') => {
  proxy.$tab.navigateTo(`./repleinshDetail?id=${item.masterId}&status=${item.status}&scanMessage=${scanMessage.value}&title=${title.value}`)
  scanMessage.value = ''
}
const selectedItem = (item) => {
  openJobDetail(item)
}
const showItemList = (itemList) => {
  scanList.value.openPopup(itemList)
}
const swipeClick = (index, index1) => {
  // var text = clearTirmAndWrap(requestList.value[index].options[index].text)
  let text = ''
  const dataContent = jobList.value[index]
  if (dataContent.status == '2') {
    text = detailGiveupOptions.value[index1].text
  } else {
    text = detailOptions.value[index1].text
  }
  if (text == '详情') {
    openjobInfoPopup(dataContent)
  } else if (text == '放弃') {
    comMessageRef.value.showQuestionMessage('确定要放弃当前任务?', (res) => {
      if (res) {
        cancleJob(dataContent.masterId)
      }
    })
  } else if (e.content.text == '关闭') {
    comMessageRef.value.showQuestionMessage('确定要关闭当前任务?', (res) => {
      if (res) {
        closeJob(dataContent.masterId)
      }
    })
  }
}
const openjobInfoPopup = (item) => {
  jobInfoPopupRef.value.openPopup(item)
}
const cancleJob = (id) => {
  cancleTakeRepleinshJob(id)
    .then((res) => {
      if (res.data) {
        getList('refresh')
        uni.showToast({
          title: '放弃任务成功'
        })
      } else {
        showMessage('放弃任务失败')
      }
    })
    .catch((error) => {
      showMessage(error)
    })
}
const closeJob = (id) => {
  uni.showLoading({
    title: '加载中....',
    mask: true
  })

  closeTakeRepleinshJob(id)
    .then((res) => {
      uni.hideLoading()
      if (res.data) {
        getList('refresh')
        uni.showToast({
          title: '关闭任务成功'
        })
      } else {
        showMessage('关闭任务失败')
      }
    })
    .catch((error) => {
      uni.hideLoading()
      showMessage(error)
    })
}
const switchChangeToday = (state, creationTime) => {
  checkedToday.value = state
  todayTime.value = creationTime
  getList('refresh')
}
const switchChangeWait = (state, jobStatus) => {
  waitTask.value = state
  status.value = jobStatus
  getList('refresh')
}
const getScanNumber = (code) => {
  getDataListByType(code)
}
const getDataListByType = (code) => {
  proxy.$modal.loading('加载中­....')
  const filters = []
  filters.push({
    column: 'status',
    action: 'in',
    value: '1,2'
  })
  filters.push({
    column: 'number',
    action: '==',
    value: code
  })
  filters.push({
    column: 'accept_user_id',
    action: '==',
    value: store.id
  })
  const params = {
    filters,
    pageNo: 1,
    pageSize: 100,
    sort: 'number',
    by: 'desc'
  }
  getRepleinshJobList(params)
    .then((res) => {
      uni.hideLoading()
      if (res.data.list.length == 0) {
        showMessage('未查找到' + `【${code}】的补料任务`)
      } else {
        openJobDetail(res.data.list[0])
      }
    })
    .catch((error) => {
      uni.hideLoading()
      showMessage(error)
    })
}
const showMessage = (message) => {
  comMessageRef.value.showErrorMessage(message, (res) => {
    if (res) {
    }
  })
}
const openScanPopup = () => {
  scanPopup.value.openScanPopup()
}
const selectItem = (item) => {
  scanPopup.value.closeScanPopup()
  openJobDetail(item, scanMessage.value)
}
const getScanResult = (result) => {
  scanMessage.value = ''
  if (!result.label.batch) {
    showMessage('批次为空')
    return
  }
  if (!result.label.itemCode) {
    showMessage('物料号为空')
    return
  }
  try {
    const filters = [
      {
        column: 'status',
        action: 'in',
        value: '1,2'
      },
      {
        column: 'batch',
        action: '==',
        value: result.label.batch
      },
      {
        column: 'itemCode',
        action: '==',
        value: result.label.itemCode
      },
      {
        column: 'accept_user_id',
        action: '==',
        value: store.id
      }
    ]
    getRepleinshJobList({
      filters,
      pageNo: 1,
      pageSize: 1000,
      sort: 'createTime',
      by: 'asc'
    })
      .then((res) => {
        scanMessage.value = result.scanMessage
        const resultList = res.data.list
        if (resultList.length > 0) {
          resultList.forEach((item) => {
            item.title = item.number
            item.selected = false
          })
          const list = []
          resultList.forEach((item) => {
            if (!list.find((subItem) => subItem.title == item.title)) {
              list.push(item)
            }
          })
          if (list.length > 0) {
            selectItem(list[0])
          }
        } else {
          showMessage(`物料号[${result.label.itemCode}]批次[${result.label.batch}]未查找到任务<br>` + `扫描[${result.scanMessage}]`)
        }
      })
      .catch((error) => {
        showMessage(`${error}<br>扫描[${result.scanMessage}]`)
      })
  } catch (e) {
    showMessage(e.message)
  }
}
</script>

<style scoped lang="scss"></style>
