<template>
  <view class="">
    <com-empty-view v-if="jobList.length == 0"></com-empty-view>
    <job-filter :isShowFromLocationCode="true" :isShowProductionLineCode="true" :productionline="productionline" ref="filter" otherTitle="" @switchChangeToday="switchChangeToday" @switchChangeWait="switchChangeWait" @onScanNumber="getScanNumber" :checkedToday="checkedToday" :checkedWaitTask="checkedWaitTask" @productionLineCode="productionLineCode" @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 : detailOptions" bg-color="rgba(255,255,255,0)" class="u-m-b-20" @click="swipeClick">
        <com-issue-job-card :dataContent="item" @click="openJobDetail(item)"></com-issue-job-card>
      </u-swipe-action>

      <job-list-popup ref="jobListPopupRef" @selectedItem="selectedItem"></job-list-popup>
      <job-info-popup ref="jobInfoPopupRef"></job-info-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>
    <jobListView ref="jobListRef" @selectItem="selectItem"></jobListView>
    <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 { cancleTakeIssueJob, getIssueJobList, getIssueJobByProductionline } from '@/api/request2.js'
import { goHome, updateTitle } from '@/common/basic.js'

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

import comEmptyView from '@/mycomponents/common/comEmptyView.vue'
import jobFilter from '@/mycomponents/job/jobFilter.vue'
import comIssueJobCard from '@/pages/issue/coms/comIssueJobCard.vue'
import jobListPopup from '@/pages/issue/coms/jobListPopup.vue'
import jobInfoPopup from '@/pages/issue/coms/jobInfoPopup.vue'

import winScanButton from '@/mycomponents/scan/winScanButton.vue'
import winScanPackJob from '@/mycomponents/scan/winScanPackJob.vue'
import jobListView from '@/mycomponents/jobList/jobList.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 checkedWaitTask = ref(false)
const todayTime = ref('')
const status = ref('1,2') // 待处理 、进行中
const detailOptions = ref([])
const detailGiveupOptions = ref([])
const productionline = ref([])
const filter = ref()
const scanMessage = ref('')
const comMessageRef = ref()
const jobInfoPopupRef = ref()
const jobListPopupRef = ref()
const scanPopup = ref()
const jobListRef = ref()
onShow(() => {
  nextTick(() => {
    getList('refresh')
  })
})
onLoad(() => {
  getIssueJobByProductionline()
})
onReady(() => {
  detailOptions.value = getDetailOption()
  detailGiveupOptions.value = getDetailGiveupOption()
})
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 getIssueJobByProductionline = () => {
  getIssueJobByProductionline().then((res) => {
    console.log('生产线', res)
    if (res.code == 0) {
      productionline.value = res.data.map((item) => ({
        value: item,
        text: item
      }))
    } else {
      productionline.value = []
    }
  })
}
const getList = (type, fromLocationCode = '', productionLineCode = '') => {
  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
    })
  }
  if (productionLineCode != '') {
    // 生产线
    filters.push({
      column: 'productionLineCode',
      action: '==',
      value: productionLineCode
    })
  }
  const params = {
    filters,
    pageNo: pageNo.value,
    pageSize: pageSize.value,
    sort: 'fromLocationCode',
    by: 'asc'
  }
  getIssueJobList(params)
    .then((res) => {
      uni.hideLoading()
      if (type === 'refresh') {
        uni.stopPullDownRefresh()
      }

      const { list } = res.data
      totalCount.value = res.data.total
      updateTitle(`采购退货(${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('发料任务')
      uni.hideLoading()
      showErrorMessage(error)
    })
}

const openJobDetail = (item, scanMessage = '') => {
  proxy.$tab.navigateTo(`./issueDetail?id=${item.masterId}&status=${item.status}&scanMessage=${scanMessage}`)
}
const selectedItem = (item) => {
  openJobDetail(item)
}
const selectItem = (item) => {
  scanPopup.value.closeScanPopup()
  openJobDetail(item, scanMessage.value)
}
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)
      }
    })
  }
}
const fromLocationCode = (fromLocationCode) => {
  getList('refresh', fromLocationCode, '')
}

const productionLineCode = (productionLineCode) => {
  console.log('productionLineCode', productionLineCode)
  getList('refresh', '', productionLineCode)
}
const getByAsnNumber = (code) => {
  proxy.$modal.loading('加载中­....')
  getPurchasereceiptByAsnNumber(code)
    .then((res) => {
      uni.hideLoading()
      if (res.data.total == 0) {
        that.showMessage('未查找到' + `【${code}】的收货任务`)
      } else if (res.data.total == 1) {
        scanAsnNumber.value.closeScanPopup()
        openJobDetail(res.data.list[0])
      } else {
        scanAsnNumber.value.closeScanPopup()
        showItemList(res.data.list)
      }
    })
    .catch((error) => {
      uni.hideLoading()
      showErrorMessage(error)
    })
}
const openjobInfoPopup = (item) => {
  jobInfoPopupRef.value.openPopup(item)
}
const cancleJob = (id) => {
  cancleTakeIssueJob(id)
    .then((res) => {
      if (res.data) {
        getList('refresh')
        uni.showToast({
          title: '放弃任务成功'
        })
      } else {
        showMessage('放弃任务失败')
      }
    })
    .catch((error) => {
      showMessage(error)
    })
}
const switchChangeToday = (state, creationTime) => {
  checkedToday.value = state
  todayTime.value = creationTime
  getList('refresh')
}
const switchChangeWait = (state, jobStatus) => {
  checkedWaitTask.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
  })
  const params = {
    filters,
    pageNo: 1,
    pageSize: 100
  }
  getIssueJobList(params)
    .then((res) => {
      uni.hideLoading()
      if (res.data.list.length == 0) {
        showMessage('未查找到' + `【${code}】的收货任务`)
      } else if (res.data.list.length == 1) {
        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 getScanResult = (result) => {
  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
      }
    ]
    getIssueJobList({
      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}]未查找到任务`)
        }
      })
      .catch((error) => {
        showMessage(error)
      })
  } catch (e) {
    showMessage(e.message)
  }
}
</script>

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