<template>
  <view>
    <uni-popup ref="popup" :mask-click="false">
      <view class="popup_box">
        <view class="pop_title uni-flex space-between">
          <view class="" style="font-size: 35rpx"> 扫描{{ title }} </view>

          <view class="">
            <image class="fr icons_scan_close" src="/static/icons/icons_scan_close.svg" @click="closeScanPopup()"></image>
          </view>
        </view>
        <view class="">
          <view class="">
            <win-com-scan ref="comscan" :placeholder="title" @getResult="getScanResult" :isShowHistory="isShowHistory" :clearResult="true" :headerType="headerType"></win-com-scan>
          </view>
        </view>
      </view>
    </uni-popup>
    <balance-select ref="balanceSelect" @onSelectItem="selectBalanceItem"></balance-select>
    <!-- 模拟扫描功能 -->
  </view>
  <comMessage ref="comMessage"></comMessage>
</template>

<script>
import winComScan from '@/mycomponents/scan/winComScan.vue'
import balanceSelect from '@/mycomponents/balance/balanceSelect.vue'
import { getBalanceByManagementPrecisionByPacking } from '@/common/balance.js'

import { getBalanceByParams, getBasicItemByCode } from '@/api/request2.js'

import { getListLocationAreaTypeDesc, checkDirectoryItemExist, getDirectoryItemArray, getLocationAreaTypeName, getInventoryStatusDesc, getListItemTypeDesc, getItemTypeInfo } from '@/common/directory.js'

export default {
  name: 'winScanPack',
  emits: ['getBalance'],
  components: {
    winComScan,
    balanceSelect
  },
  props: {
    title: {
      type: String,
      default: '箱标签'
    },
    isShowHistory: {
      type: Boolean,
      default: false
    },
    headerType: {
      type: String,
      default: 'HPQ,HMQ'
    },
    balanceFromInventoryStatuses: {
      // 是否传fromInventoryStatuses
      type: Boolean,
      default: true
    },
    bussinessCode: {
      type: String,
      default: ''
    }
  },
  data() {
    return {
      scanResult: {},
      show: false,
      scanList: [],
      expand: false,
      showScanResult: {},
      expendIcon: 'arrow-down',
      fromLocationCode: '',
      fromLocation: '',
      fromLocationList: [],
      fromLocationAreaTypeList: [],
      locationOnFocus: false,
      businessType: {},
      inventoryStatus: [],
      managementPrecision: '',
      fromInventoryStatuses: [],
      itemTypesList: [],
      isCheck: false,
      resultData: {}
    }
  },
  created() {},
  methods: {
    openScanPopup(businessType) {
      this.businessType = businessType
      this.fromInventoryStatuses = getDirectoryItemArray(businessType.outInventoryStatuses)
      this.fromLocationAreaTypeList = getDirectoryItemArray(businessType.outAreaTypes)
      this.itemTypesList = getDirectoryItemArray(businessType.itemTypes)
      this.$refs.popup.open('bottom')
    },

    getScanResult(result) {
      this.resultData = result
      this.getItemCodeType(result.package.itemCode, (callBack) => {
        this.queryBalance(this.resultData)
      })
    },

    queryBalance(result) {
      const params = {
        itemCode: result.package.itemCode,
        batch: result.label.batch,
        packingNumber: result.label.packingNumber,
        inventoryStatus: this.fromInventoryStatuses,
        areaType: this.fromLocationAreaTypeList,
        bussinessCode: this.bussinessCode
      }
      getBalanceByParams(params)
        .then((res) => {
          uni.hideLoading()
          if (res.data.length == 0) {
            const status = getInventoryStatusDesc(params.inventoryStatus)
            const areaType = getListLocationAreaTypeDesc(params.areaType)
            const hint = `按物料号 [${params.itemCode}] <br>` + `包装号 [${params.packingNumber}] <br>` + `批次 [${params.batch}] <br>` + `状态 [${status}] <br>` + `库区 [${areaType}] <br>` + '未查找到库存余额'
            this.showErrorMessage(hint)
          } else if (res.data.length == 1) {
            result.balance = res.data[0]
            this.$emit('getBalance', result)
            this.closeScanPopup()
          } else {
            // 多条记录
            this.$refs.balanceSelect.openPopup(res.data)
          }
        })
        .catch((error) => {
          uni.hideLoading()
          this.showErrorMessage(error)
        })
    },
    getItemCodeType(itemCode, callBack) {
      uni.showLoading({
        title: '加载中',
        mask: true
      })
      getBasicItemByCode(itemCode)
        .then((res) => {
          if (res.data != null && res.data.list.length > 0) {
            const result = res.data.list[0]
            const { status } = result
            const { type } = result
            if (status == 'ENABLE') {
              if (checkDirectoryItemExist(this.itemTypesList, type)) {
                callBack()
              } else {
                const hint = getListItemTypeDesc(this.itemTypesList)
                uni.hideLoading()
                this.showErrorMessage(`扫描物料[${itemCode}]是[${getItemTypeInfo(type).label}],需要的物料类型是[${hint}]`)
              }
            } else {
              uni.hideLoading()
              this.showErrorMessage(`物料【${itemCode}】不可用`)
            }
          } else {
            uni.hideLoading()
            this.showErrorMessage(`未查找到物料【${itemCode}】`)
          }
        })
        .catch((error) => {
          uni.hideLoading()
          this.showErrorMessage(error)
        })
    },
    showErrorMessage(message) {
      this.$refs.comMessage.showErrorMessage(message, (res) => {
        if (res) {
        }
      })
    },
    selectBalanceItem(item) {
      this.resultData.balance = item
      this.$emit('getBalance', this.resultData)
      this.closeScanPopup()
    },
    closeScanPopup() {
      this.$refs.popup.close()
    }
  }
}
</script>

<style lang="scss">
.scroll-view {
  overflow-y: scroll;
  height: auto;
  max-height: 300rpx;
}
</style>
