<template>
  <div>
    <!--   查看详情   -->
    <el-dialog :visible.sync="viewDetailsOnOff" :title="'详情'" top="10px" width="70%" :close-on-click-modal="false"
               @close="gbOnOff()"
    >
      <el-tabs v-model="activeName">
        <el-tab-pane label="出库明细" name="first">
          <div>
            <el-button
              class="filter-item"
              type="success"
              icon="el-icon-edit"
              size="mini"
              :disabled="show_fp"
              @click="allocate([selectData])"
            >
              审核
            </el-button>
            <el-button
              class="filter-item"
              type="success"
              size="mini"
              :disabled="selectData.status != 'ALLOCATE'"
              @click="cancelPick(selectData)"
            >
              取消审核
            </el-button>
          </div>
          <!-- 出库明细 -->
          <el-table ref="tableOutboundDetailsData" :data="viewDetailsDatas.outboundDetailsData" size="small"
                    style="width: 100%;"
                    height="60vh" border
          >
            <el-table-column type="selection" width="55"/>
            <el-table-column prop="item.code" label="品番" width="100px">
            </el-table-column>
            <el-table-column prop="item.name" label="品名" width="120px">
            </el-table-column>
            <!--需求数量-->
            <el-table-column prop="xqQty" label="需求数" width="60px"/>
            <el-table-column prop="item.extendD3" label="收容数" width="60px" align="center"/>

            <!--备货需求数量 订单-->
            <el-table-column prop="propC4" label="纯需求数" width="80px"/>
            <!--纯需求数量-->
            <el-table-column prop="orderQty" label="备货需求数" width="90px"/>
            <!--未单数量  未出单=纯需求-出单数-->
            <el-table-column prop="wcdn" label="未单数" width="60px">
              <template slot-scope="scope">
                {{ scope.row.orderQty - scope.row.allocatedQty }}
              </template>
            </el-table-column>
            <!--出单数量 分配 出单数=分配时候写入的数量-->
            <el-table-column prop="allocatedQty" label="出单数" width="60px"/>
            <!--备货数量 拣货-->
            <el-table-column prop="pickedQty" label="备货数" width="60px"/>
            <!--在途数量 发运-->
            <el-table-column prop="shippedQty" label="在途数" width="60px"/>
            <!--线边数量-->
            <el-table-column prop="xbQty" label="线边数" width="60px"/>
            <el-table-column prop="supplier" label="供应商" width="120"/>
            <!--制造库位 点位-->
            <el-table-column prop="point.code" label="制造库位" width="100px"/>
          </el-table>
        </el-tab-pane>
        <el-tab-pane label="出单记录" name="second">
          <div>
            <el-button
              slot="right"
              class="filter-item"
              type="primary"
              size="mini"
              @click="cancelAllocateBtn(selectData)"
            >
              取消审核
            </el-button>
            <el-button
              slot="right"
              class="filter-item"
              type="primary"
              size="mini"
              @click="singlePick(selectData)"
            >
              整单拣货
            </el-button>
            <el-button
              slot="right"
              class="filter-item"
              type="primary"
              size="mini"
              @click="bulkPicking(selectData)"
            >
              批量拣货
            </el-button>
            <el-button
              slot="right"
              class="filter-item"
              type="primary"
              size="mini"
              @click="solePickGoodsOnOff()"
            >
              单一拣货
            </el-button>
            <el-button
              slot="right"
              class="filter-item"
              type="primary"
              size="mini"
              @click="xppPickGoodsOnOff()"
            >
              现品票拣货
            </el-button>
          </div>

          <!-- 出单记录 -->
          <el-table ref="tableAllocationRecords" :data="viewDetailsDatas.allocationRecords" size="small"
                    style="width: 100%;"
                    height="60vh" border @selection-change="taskSelection"
          >
            <el-table-column type="selection" width="55"/>
            <el-table-column :show-overflow-tooltip="true" prop="itemCode" label="品番" width="100px">
              <template slot-scope="scope">
                <div>{{ scope.row.item.code }}</div>
              </template>
            </el-table-column>
            <el-table-column :show-overflow-tooltip="true" prop="itemName" label="品名"  width="100px">
              <template slot-scope="scope">
                <div>{{ scope.row.item.name }}</div>
              </template>
            </el-table-column>
            <!--          <el-table-column prop="dstStockCode" label="目标托盘号"/>-->
            <el-table-column prop="srcPointCode" label="源库位" width="150px" align="center"/>
            <!--              <el-table-column prop="itemKey.propD1" label="生成日期" width="150px" align="center"/>-->
            <el-table-column prop="itemKey.propC1" label="批次号"  width="100px"/>
            <el-table-column prop="planQty" label="出单数量"/>
            <el-table-column prop="moveQty" label="拣货数量"/>
            <el-table-column prop="dstPointCode" label="目标库位"/>
            <el-table-column :show-overflow-tooltip="true" prop="supplier" label="供应商">
              <template slot-scope="scope">
                <div>{{ scope.row.pickDetail.supplier }}</div>
              </template>
            </el-table-column>
            <el-table-column prop="createBy" label="创建人"/>
            <el-table-column prop="createTime" label="创建时间" width="180px">

            </el-table-column>
          </el-table>
        </el-tab-pane>
        <el-tab-pane label="拣货记录" name="third">
          <div>
            <el-button
              slot="right"
              class="filter-item"
              type="primary"
              size="mini"
              @click="fullCancel(selectData)"
            >
              整单取消
            </el-button>
            <el-button
              slot="right"
              class="filter-item"
              type="primary"
              size="mini"
              @click="batchCancel(selectData)"
            >
              部分取消
            </el-button>
          </div>
          <!-- 拣货记录 -->
          <el-table ref="tablePickingRecords" :data="viewDetailsDatas.pickingRecords" size="small" style="width: 100%;"
                    height="60vh" border @selection-change="taskLogSelection"
          >
            <el-table-column type="selection" width="55"/>
            <el-table-column prop="item.code" label="品番"/>
            <el-table-column prop="item.name" label="品名"/>
            <el-table-column prop="itemKey.propC1" label="批次号"/>
            <el-table-column :show-overflow-tooltip="true" prop="task.pickDetail.point.code" label="制造库位" width="90px">
            </el-table-column>
            <el-table-column prop="moveQty" label="拣货数量" width="90px"/>
            <el-table-column prop="srcStockCode" label="现品票" :show-overflow-tooltip="true"/>
            <!--              <el-table-column prop="dstStockCode" label="目标托盘号"/>-->
            <el-table-column prop="createTime" label="创建时间"/>
          </el-table>
        </el-tab-pane>
      </el-tabs>
    </el-dialog>
    <el-dialog
      width="30%"
      title="单一拣货"
      :visible.sync="oneTf"
      :close-on-click-modal="false"
      append-to-body
    >
      <el-form ref="taskForm" :model="pickTicketButton" label-width="90px" style="height: 90px">
        <el-form-item label="数量:" prop="onePickConfirmNumber"
                      :rules="[{required:true,message:'请输入数量',trigger:'blur'}]"
        >
          <el-input v-model.number="pickTicketButton.onePickConfirmNumber" clearable></el-input>
        </el-form-item>
        <!--            <el-form-item label="目标托盘号:" prop="stockCode"-->
        <!--            >-->
        <!--              <el-input v-model.number="pickTicketButton.stockCode" clearable></el-input>-->
        <!--            </el-form-item>-->
        <el-button type="primary" @click="solePickGoods(selectData)"
                   style="float: right;padding-left: 10px"
        >确认
        </el-button>
        <el-button type="text" @click="oneTf = false" style="float: right;margin-right: 10px">取消</el-button>

      </el-form>
    </el-dialog>
    <el-dialog
      width="30%"
      title="现品票拣货"
      :visible.sync="xppOnOf"
      :close-on-click-modal="false"
      append-to-body
    >
      <el-form ref="xppTaskForm" :model="pickTicketButton" label-width="90px" style="height: 170px">
        <el-form-item label="现品票:" prop="xppQRCode"
                      :rules="[{required:true,message:'现品票不能为空',trigger:'blur'}]"
        >
          <el-input type="textarea" :autosize="{ minRows: 3}" placeholder="现品票"
                    v-model.trim="pickTicketButton.xppQRCode" clearable
          ></el-input>
        </el-form-item>
        <!--            <el-form-item label="托盘号:" prop="xppQRCode">-->
        <!--              <el-input type="text"  placeholder="托盘号" v-model.trim="pickTicketButton.stockCode" clearable-->
        <!--              ></el-input>-->
        <!--            </el-form-item>-->
        <el-form-item label="备货人:" prop="xppQRCode" v-if="false">
          <el-input type="text" placeholder="备货人" v-model.trim="pickTicketButton.bhr" clearable
          ></el-input>
        </el-form-item>
        <el-button type="primary" @click="xppPickGoods(selectData)" style="float: right;padding-left: 10px">
          确认
        </el-button>
        <el-button type="text" @click="oneTf = false" style="float: right;margin-right: 10px">取消</el-button>
      </el-form>
    </el-dialog>
  </div>
</template>
<script>

import { pickingCancel, pickingOperations, queryTaskLogDataS, xppPickGoods ,pickWhole,pickBatch,pickSingle,pickForXpp} from '@/api/pickTicket'
import crudPickDetail,{cancelAllocate} from '@/api/pickDetail'
import CRUD from '@crud/crud'

export default {
  props: {
    viewDetailsDatas: {
      type: Object,
      default: {
        //出库明细 data_pick_detail
        outboundDetailsData: [],
        //分配记录 data_task
        allocationRecords: [],
        //拣货记录 data_task_log
        pickingRecords: []
      }
    },
    viewDetailsOnOff: {
      type: Boolean,
      default: false
    },
    height: {
      type: Number,
      default: null
    },
    selectData: {
      type: Object,
      default: {}
    },
    show_fp:{
      type:Boolean,
      default:false
    }
  },
  name: 'OutParticulars',
  watch:{
    viewDetailsDatas(newV,oldV){
      this.viewDetailsDatas(newV)
    }
  },
  data() {
    return {
      viewDetailsDatas: this.viewDetailsDatas,
      viewDetailsOnOff: this.viewDetailsOnOff,
      //当前标签页
      activeName: 'first',
      taskLogSelectionData: [],
      //task选着的数据
      tsakSelectData: [],
      oneTf: false,
      //拣货确认 弹窗开关
      pickConfirmTF: false,
      cancelAllocateTF: false,
      xppOnOf: false,
      pickTicketButton: {
        //拣货确认按钮号 1整单拣货 2单一拣货 3批量拣货 4取消拣货
        pickConfirmNo: 0,
        //单一拣货 输入数量
        onePickConfirmNumber: 0,
        //单一拣货输入的容器
        stockCode: null,
        //task表
        taskId: [],
        //选着的其他出库数据
        pickTicketId: 0,
        //拣货批量取消使用
        taskLogId: [],
        //现品票二维码
        xppQRCode: null,
        //备货人
        bhr: null
      }
    }
  },
  mounted() {

  },
  methods: {
    // queryData(){
    //   this.$emit('queryDA',this.selectData.id)
    // },
    gbOnOff() {
      this.$emit('gbOnOff')
    },
    taskLogSelection(data) {
      this.taskLogSelectionData = data
    },
    taskSelection(data) {
      this.tsakSelectData = data
    },
    //取消分配
    cancelAllocateBtn(data) {
      if (this.tsakSelectData.length > 0) {
        let list = []
        for (const datum of data) {
          list.push(datum.id)
        }
        cancelAllocate(list).then(res => {
          this.cancelAllocateTF = false
          this.$message.success(res)
          this.gbOnOff();
        })
      } else {
        this.$message.error('你未选着数据')
      }
    },
    //整单拣货
    singlePick(data) {
      if (data.status === 'ALLOCATE' || data.status === 'PICKUP') {
        pickWhole(data.id).then(res => {
          this.pickConfirmTF = false
          this.$message.success(res)
          this.gbOnOff();
        })
      } else {
        this.$message.error('状态必须是已分配的才能拣货确认')
      }
    },
    //批量拣货
    bulkPicking(data) {
      if (this.tsakSelectData.length > 0) {
        let list = []
        for (const datum of data) {
          list.push(datum.id)
        }
        pickBatch(list).then(res => {
          this.pickConfirmTF = false
          this.$message.success(res)
           this.gbOnOff();
        })
      } else {
        this.$message.error('你未选着数据')
      }
    },
    //单一拣货确认
    solePickGoods(data) {
      this.$refs['taskForm'].validate((valid) => {
        if (valid) {
          let data_ = this.pickTicketButton
          data_.pickConfirmNo = 2
          data_.pickTicketId = data.id
          data_.taskId = []
          if (this.tsakSelectData.length === 1) {
            for (const dataKey of this.tsakSelectData) {
              data_.taskId.push(dataKey.id)
            }
            pickSingle(data_).then(res => {
              this.gbOnOff();
              this.$message.success(res)
              this.oneTf = false
            })
          } else {
            this.$message.error('你未选着数据或选着了多个')
          }
        } else {
          return false
        }
      })
    },
    //单一拣货的开关
    solePickGoodsOnOff() {
      if (this.tsakSelectData.length !== 1) {
        if (this.tsakSelectData.length > 0) {
          this.$message.error('你选着的数据大于1条')
        } else {
          this.$message.error('你未选着数据')
        }
      } else {
        this.pickTicketButton.onePickConfirmNumber = this.tsakSelectData[0].planQty - this.tsakSelectData[0].moveQty
        this.oneTf = true
      }
    },
    //现品票拣货的开关
    xppPickGoodsOnOff() {
      this.xppOnOf = true
    },
    //现品票拣货
    xppPickGoods(data) {
      this.$refs['xppTaskForm'].validate((valid) => {
        if (valid) {
          let data_ = this.pickTicketButton
          data_.pickConfirmNo = 7
          data_.pickTicketId = data.id
          pickForXpp(data_).then(res => {
            this.pickConfirmOnOffM(data)
            this.$message.success('操作成功')
            this.xppOnOf = false
            this.pickTicketButton.xppQRCode = null
            this.pickTicketButton.stockCode = null
            this.pickTicketButton.bhr = null
          })
        } else {
          return false
        }
      })
    },
    //拣货确认取消
    // 整单取消
    fullCancel(data) {
      let data_ = this.pickTicketButton
      data_.pickConfirmNo = 5
      data_.pickTicketId = data.id
      pickingCancel(data_).then(res => {
        this.taskLogTF = false
         this.gbOnOff();
        this.$message.success(res)
      })
    },
    //批量取消
    batchCancel(data) {
      let data_ = this.pickTicketButton
      data_.pickConfirmNo = 6
      data_.pickTicketId = data.id
      data_.taskLogId = []
      if (this.taskLogSelectionData.length > 0) {
        for (const dataKey of this.taskLogSelectionData) {
          data_.taskLogId.push(dataKey.id)
        }
        pickingCancel(data_).then(res => {
          this.taskLogTF = false
           this.gbOnOff();
          this.$message.success(res)

        })
      } else {
        this.$message.error('你未选着数据')
      }
    },
    allocate(datas) {
      this.$confirm(`选中${datas.length}条数据确认是否分配?`, '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        const ids = []
        for (let i = 0; i < datas.length; i++) {
          ids.push(datas[i].id)
        }
        crudPickDetail.allocate(ids).then(res => {
          this.gbOnOff();
          this.crud.notify('分配成功！', CRUD.NOTIFICATION_TYPE.SUCCESS)
        }).catch(() => {
          this.gbOnOff();
          this.crud.notify('分配失败！', CRUD.NOTIFICATION_TYPE.ERROR)
        })
      }).catch(() => {
        this.$refs.table.clearSelection()
        this.crud.notify('取消成功！', CRUD.NOTIFICATION_TYPE.SUCCESS)
      })
    },
    //取消分配
    cancelPick(data) {
      if (data.status === 'ALLOCATE') {
        let dataTF_ = this.pickTicketButton;
        dataTF_.pickTicketId = data.id
        queryTaskLogDataS(dataTF_).then(res => {
          if (res.length === 0){
            let data_ = this.pickTicketButton
            data_.pickConfirmNo = 4
            data_.pickTicketId = data.id
            pickingOperations(data_).then(res => {
              this.$message.success(res)
              this.gbOnOff();
            })
          }else {
            this.$message.error('该单据有已经拣货确认的数据');
          }
        })
      } else {
        this.$message.error('状态必须是已分配的才能取消拣货')
      }
    },
  }
}

</script>

<style scoped>

</style>
