<template>
  <div class="page-box" v-loading="Loading.appMainLoading">
    <tablePagination
      :currenButtonData="currenButtonData"
      :tableData="tableData"
      :tableLoading="Loading.tableLoading"
      :tableColumns="tableColumns"
      @rowDrop="rowDrop"
      :totalCount="totalCount"
      :multipleSelection="multipleSelection"
      :MaxResultCount="PageListParams.MaxResultCount"
      @topbutton="topbutton"
      @inlineDialog="inlineDialog"
      @sortChange="sortChange"
      @alertoldSkipCount="alertoldSkipCount"
      @alterResultCount="alterResultCount"
      @handleSelectionChange="handleSelectionChange"
      :currentPageProps="oldSkipCount"
      :quicklySearchOption="quicklySearchOption"
      @quicklySearchClick="quicklySearchClick"
      @quicklySearchClear="quicklySearchClear"
      :primarySearchOption="primarySearchOption"
      @overallSearchFormClick="overallSearchFormClick"
      :httpOverallSearchData="httpOverallSearchData"
    >
    </tablePagination>
    <!-- 执行 -->
    <handelFrom
      :formTitle="formTitle"
      :displayDialog.sync="displayDialog.handleFromDialog"
      :CreateFormData="handleFormData"
      :CreateForm="handleForm"
      :Rules="editRules.handleRule"
      :Options="editOptions"
      :detailsTableColumns="handleDetailsTableColumns"
      :isShowIndex="true"
      :selectionTable="true"
      @handleSelectionChange="handleSelectionChange"
      @FormSubmit="handleFormSubmit"
    ></handelFrom>
    <curren-Drawer
      :title="tableColumns"
      :DrawerLoading="Loading.DrawerLoading"
      :drawer="displayDialog.detailsDialog"
      :propsData="propsData"
      :tabsDesTions="tabsDesTions"
      :Butttondata="DrawerButtonData"
      @drawerShut="(val) => (displayDialog.detailsDialog = val)"
      @drawerbutton="drawerbutton"
      @close-value="closeValue"
      :currenButtonData="currenButtonData"
      :tableColumns="detailsTableColumns"
      :totalCount="totalCountDetails"
      :MaxResultCount="MaxResultCountDetails"
      @alterResultCountDetails="alterResultCountDetails"
      @alertoldSkipCountDetails="alertoldSkipCountDetails"
      >
      <template>
        <el-table-column
          fixed="right"
          label="操作"
          align="center"
          width="120"
        >
          <template slot-scope="scope">
            <el-button 
              type="primary"
              @click="showLibraryShift(scope)"
              size="small"
            >查看库移</el-button>
          </template>
        </el-table-column>
      </template>		
    </curren-Drawer>
    <!-- 查看库移弹窗 -->
    <libraryShiftSearch
      :rowData="libraryShiftRow"
      :isShow="libraryShiftShow"
      v-on:setClose='closeLibraryShift'
    ></libraryShiftSearch>
  </div>
</template>
<script>
import { getPageList, createAndHandle } from "@/api/wms-api"
import { materialRequestByType, handle} from "@/api/wms-job"
import { tableMixins } from "@/mixins/TableMixins"
import { LoadingMixins } from "@/mixins/LoadingMixins"
import { drawerMixins } from "@/mixins/drawerMixins"
import { TableHeaderMixins } from "@/mixins/TableHeaderMixins"
import { mixins } from "@/mixins/mixins"
import { newAndEdiDialogMixins } from "@/mixins/newAndEdiDialogMixins"
import store  from '@/store'
import { initPrintAllData } from "@/mixins/printMixin"
import libraryShiftSearch from "@/views/materialIssueManage/libraryShiftSearch"

export default {
  name: "IssueJobZP",
  mixins: [
    tableMixins,
    LoadingMixins,
    drawerMixins,
    TableHeaderMixins,
    mixins,
    newAndEdiDialogMixins
  ],
  components:{libraryShiftSearch},
  computed: {
    editDialog: {
      get: function () {
        return this.displayDialog.newDialog || this.displayDialog.editDialog;
      },
    },
    // hideButton: function () {
    //   return function (val) {
    //     let data = true
    //     val.forEach(key => {
    //       if (this.propsData.jobStatus == key) {
    //         data = false
    //       }
    //     })
    //     return data
    //   }
    // },
  },
  data () {
    return {
      URL: 'wms/store/issue-job',
      tableLoading: false,
      handleMultipleSelection: [],
      //常用按钮数据
      currenButtonData: [
        // this.defaultExportBtn(),//导出
        this.defaultFieldSettingBtn(),//字段设置
        this.defaultFreshBtn(),//刷新
        this.defaultFilterBtn(),//筛选
      ],
      DrawerButtonData: [
        {
          type: 'info',
          icon: 'el-icon-printer',
          label: '打印',
          hide: false,
          name: "print",
          size: 'mini'
        },
      ],
      handleDetailsTableColumns: [
        { label: "物品代码", prop: "itemCode", },
        { label: "物品名称",  prop: "itemName" },
        { label: "实际库位", prop: "handledLocationCode", },
        { label: "推荐库位", prop: "recommendLocationCode", },
        { label: "实际箱标签", prop: "handledPackingCode", },
        { label: "推荐箱标签", prop: "recommendPackingCode", },
        { label: "实际批次", prop: "handledLot", },
        { label: "推荐批次", prop: "recommendLot", },
        { type: "object", label: "实际数量", prop: "handledQty", showProp: "qty", },
        { type: "object", label: "实际单位", prop: "handledQty", showProp: "uom", },
        { type: "object", label: "推荐数量", prop: "recommendQty", showProp: "qty", },
        { type: "object", label: "推荐单位", prop: "recommendQty", showProp: "uom", },
      ],
      editOptions: {

      },
      handleFormData: {
        id: null,
        creationTime: null,
        IssueNoteNumber: "123",
        lastModificationTime: null,
        remark: null,
        concurrencyStamp: null,
        company: null,
        number: null,
        upStreamJobNumber: null,
        materialRequestNumber: null,
        jobType: 1,
        jobStatus: 1,
        priority: 0,
        priorityIncrement: 0,
        wlgCode: "123",
        isAutoComplete: true,
        details: [],
        acceptTime: null,
        completeTime: null,
        prodLine: null,
        toLocationCode: null,
      },
      childTableData: [
        {
          "id": null,
          "creationTime": null,
          //   "creatorId": null,
          "lastModificationTime": null,
          //   "lastModifierId": null,
          "remark": null,
          "concurrencyStamp": null,
          "masterID": null,
          "packingCode": null,
          "containerCode": null,
          "item": {
            "id": null,
            "name": null,
            "desc1": null,
            "desc2": null
          },
          "itemCode": null,
          "stdPack": {
            "packUom": null,
            "packQty": 0
          },
          "recommendBatch": {
            "supplierBatch": null,
            "produceDate": null
          },
          "recommendLot": "",
          "recommendLocationCode": "",
          "recomendQty": {
            "uom": null,
            "qty": 0
          },
          "handledBatch": {
            "supplierBatch": null,
            "produceDate": null
          },
          "handledLot": "",
          "handledLocationCode": "",
          "handledQty": {
            "uom": null,
            "qty": 0
          },
          "fromLocation": "",
          "toLocation": "",
          "workshop": null,
          "prodLine": null,
          "workCenter": null,
        }
      ],
      handleForm: [
        { type: "input", label: "任务编号", prop: "number", colSpan: 12, disabled: "true" },
        { type: "input", label: "到货编号", prop: "arriveNumber", colSpan: 12, disabled: "true" },
        { type: "select", label: "任务类型", prop: "jobType", options: "taskType", colSpan: 12, disabled: "true" },
        { type: "select", label: "任务状态", prop: "jobStatus", options: "jobStatus", colSpan: 12, disabled: "true" },
        { type: "input", label: "优先级", prop: "priority", colSpan: 12, disabled: "true" },
        { type: "input", label: "工作组", prop: "wlgCode", colSpan: 12, disabled: "true" },
        { type: "dateTime", label: "接收时间", prop: "acceptTime", colSpan: 12, },
        { type: "input", label: "备注", prop: "remark", colSpan: 12, },
        { type: "input", label: "生产线", prop: "prodLine", disabled: "true", colSpan: 12,  },
        // { type: "autocomplete", label: "目标库位", prop: "toLocationCode", optionsLabel: "itemCode", optionsValue: "locationCode", focus: (val) => { return this.getSelectList(val, "wms/inventory/Inventory-Balance") }, click: (val) => { this.filterTable(val, 'wms/inventory/Inventory-Balance', 'InventoryBalance-PullForm', '库位选择') }, colSpan: 12 },
        { type: "autocomplete", label: "目标库位", prop: "toLocationCode", optionsLabel: "name", optionsValue: "code", focus: (val) => { return this.getSelectList(val, "basedata/Location") }, click: (val) => { this.filterTable(val, 'basedata/Location', 'InventoryBalance-PullForm', '库位选择') }, colSpan: 12 },
      ],
      editRules: {
        handleRule: {
          number: [
            { required: true, trigger: "blur", message: "不可为空" },
          ],
          jobType: [{ required: true, trigger: "blur", message: "不可为空" }],
          jobStatus: [{ required: true, trigger: "blur", message: "不可为空" }],
          priority: [{ required: true, trigger: "blur", message: "不可为空" }],
          wlgCode: [{ required: true, trigger: "blur", message: "不可为空" }],
        },
        cerateRule: {
          itemCode: [{ required: true, trigger: "blur", message: "不可为空" }],
          toLocationCode: [{ required: false, trigger: "blur", message: "不可为空" }],
          numberInput: [{ required: true, trigger: "blur", message: "不可为空" }],
        }
      },
      libraryShiftShow:false,//查看库移弹窗显示
      libraryShiftRow:null,//查看库移当前行数据
    };
  },
  mounted () {
    this.paging();
  },
  methods: {
    //渲染数据
    paging(callback) {
      this.Loading.tableLoading = true;
      this.PageListParams.SkipCount = (this.oldSkipCount - 1) * this.PageListParams.MaxResultCount
      // 叫料请求类型: 人工拉动:Issue_Manual;  线边拉动:Issue_WIP; 直接发料:Direct_Issue
      let params = {
        requestType: 'Issue_Manual'
      }
      materialRequestByType(this.PageListParams, this.URL + '/by-type', params)
        .then(res => {
          this.tableData = res.items
          this.totalCount = res.totalCount
          this.pagingCallback(callback)
        }).catch(err => {
          this.Loading.tableLoading = false
        })
    },
    handleFormSubmit (val) {
      let that = this
      return new Promise((resolve, reject) => {
        if (that.handleMultipleSelection.length == 0) {
          that.$errorMsg('请先择提交的数据！')
          reject()
        } else {
          if (that.handleMultipleSelection[0].requestLocationCode != that.handleFormData.toLocationCode) {
            that.$confirm('目标库位与需求库位不一致,是否要将所有物品发到目标库位?', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              that.checkHandleSubmit(resolve, reject)
            }).catch(() => {
              reject()
            })
          } else {
            that.$confirm('是否要将物品发到目标库位:[' + that.handleFormData.toLocationCode + ']', '提示', {
              confirmButtonText: '确定',
              cancelButtonText: '取消',
              type: 'warning'
            }).then(() => {
              that.checkHandleSubmit(resolve, reject)
            }).catch(() => {
              reject()
            })
          }
        }
      })
    },
    checkHandleSubmit(resolve, reject) {
      let that = this
      
      let items = that.handleMultipleSelection.filter(r => {
        return (r.handledPackingCode === null || r.handledPackingCode === '')
      })

      if (items.length > 0) {
        let packingCodes = '';
        items.forEach(r => {
          packingCodes += r.recommendPackingCode + ','
        })
        that.$confirm('以下箱码对应的实际箱码为空,是否要继续发料?:[' + packingCodes + ']', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          that.finshIssueJobHandle(resolve, reject)
        }).catch(() => {
          return reject()
        })
      } else {
        that.finshIssueJobHandle(resolve, reject)
      }
    },
    finshIssueJobHandle(resolve, reject) {
      let that = this
      let data = {
        id: that.propsData.id
      }
      that.handleMultipleSelection.forEach(item => {
        item.toLocationCode = that.handleFormData.toLocationCode
        item.handledContainerCode = item.recommendContainerCode;
				item.handledPackingCode = item.recommendPackingCode;
				item.handledBatch = item.recommendBatch;
				item.handledLot = item.recommendLot;
				item.handledLocationCode = item.recommendLocationCode;
      })
      let params = JSON.parse(JSON.stringify(that.handleFormData))
      delete params.details
      params.details = that.handleMultipleSelection
      handle(params, data, that.URL).then(res => {
        that.displayDialog.handleFromDialog = false;
        that.$successMsg('已生成发料记录！')
        that.paging()
        return resolve()
      }).catch(err => {
        return reject();
      })
    },
    // 输入框 变更
    changeInput(prop, val) {
      let that = this
      if (prop == 'numberInput' ) {
        this.$confirm('是否要将以下所有零件的需求数量更改为[' + val + ']', '提示', {
          confirmButtonText: '确定',
          cancelButtonText: '取消',
          type: 'warning'
        }).then(() => {
          that.CreateFormData.details.forEach(item => {
            item.numberDetails = parseInt(val)
          })
        }).catch(() => {
        })
      }
    },
    //新增——删除table
    deleteRow(index, rows) {
      rows.splice(index, 1);
    },
    //新增-按钮
    FormClick(val) {
      let that = this
      if (val[0] == 0) {
      } else if (val[0] == 1) {
        // 查询
        this.editRules.cerateRule.toLocationCode[0].required = false
        val[1].validate((valid) => {
          if (valid) {
            this.tableLoading = true
            let params = {
              condition: {
                filters: [
                  {
                      logic: "And",
                      column: "code",
                      action: "==",
                      value: that.CreateFormData.itemCode
                  }
                ]
              },
              Sorting: "",
              SkipCount: 0,
              MaxResultCount: 100
            }
            getPageList(params, 'basedata/item-basic').then(res => {
              if (res.items.length == 0) {
                this.$errorMsg('未查询到该物品信息!')
              } else {
                let findRs = that.CreateFormData.details.find(item => (
                  item.code == that.CreateFormData.itemCode
                ))
                if (!findRs) {
                  res.items.forEach(item => {
                    item.numberDetails = 0
                    that.CreateFormData.details.push(item)
                  })
                }
              }
              this.tableLoading = false
            }).catch(err => {
              console.log(err)
              this.tableLoading = false
            })
          } else {
            this.$errorMsg('请检查表单')
          }
        })
      } else {
        this.editRules.cerateRule.toLocationCode[0].required = true
        val[1].validate((valid) => {
          if (valid) {
            if (this.CreateFormData.details.length > 0) {
              let params = {
                worker: store.getters.name.userName,
                company: localStorage.getItem("company"),
                details: [],
              }
              for (var i = 0; i < this.CreateFormData.details.length; i++) {
                if (this.CreateFormData.details[i].numberDetails <= 0) {
                  this.$errorMsg('物品[' + this.CreateFormData.details[i].code + ']的数量应该大于0')
                  return
                } else {
                  params.details.push({
                    itemCode: this.CreateFormData.details[i].code,
                    item: {
                      id: this.CreateFormData.details[i].id,
                      name: this.CreateFormData.details[i].name,
                      desc1: this.CreateFormData.details[i].desc1,
                      desc2: this.CreateFormData.details[i].desc2,
                    },
                    qty: {
                      uom: this.CreateFormData.details[i].basicUom,
                      qty: this.CreateFormData.details[i].numberDetails
                    },
                    prodLine: '',
                    status: this.CreateFormData.details[i].status,
                    toLocationCode: this.CreateFormData.toLocationCode,
                    worker: store.getters.name.userName,
                  })
                }
              }
              this.Loading.newAndEdiLoading = true
              createAndHandle(params).then( res => {
                this.displayDialog.newDialog = false
                this.Loading.newAndEdiLoading = false
                this.$successMsg("发料任务创建成功！")
                this.paging()
              }).catch(err => {
                console.log(err)
                this.Loading.newAndEdiLoading = false
              })
            } else {
              this.$errorMsg('无数据可提交！')
            }
          } else {
            this.$errorMsg('请检查表单')
          }
        })
      }
    },
    drawerbutton (val) {
      // 打印
      if(val == 'print'){
        let _propsData = JSON.parse(JSON.stringify(this.tableDataDetails))
        _propsData.title = "线边仓领料单"
        _propsData.details.forEach(item=>{
          item.recommendLot = item.recommendLot + " "
        })
        let _option = {
          details:{
            fromLocationCode:"recommendFromLocationCode",
            qty:"handledQty",
            fromLot:"recommendLot",
            fromLocationErpCode:"recommendFromLocationErpCode",
          }
        }
        let data = initPrintAllData(_propsData,'xbcll.rdlx',false,_option);
        this.Print(data)
      } else {
        drawerMixins.methods.drawerbutton(val, this)
      }
    },
    // drawerbutton(val) {
    //   if (val == 'handleJob') {
    //     this.Loading.appMainLoading = true
    //     let propsData = JSON.parse(JSON.stringify(this.propsData));
    //     this.$listAssign(this.handleFormData, propsData)
    //     this.handleFormData.toLocationCode = this.handleFormData.details[0].toLocationCode
    //     this.handleMultipleSelection = []
    //     this.Loading.appMainLoading = false
    //     this.formTitle = "执行" + this.$route.meta.title;
    //     this.displayDialog.handleFromDialog = true
    //   } else {
    //     drawerMixins.methods.drawerbutton(val, this)
    //   }
    // },
    handleSelectionChange(val) {
      this.handleMultipleSelection = val
    },
    showLibraryShift(scope){
      if(!scope.row.tenantId){return this.$errorMsg("事务类型有误")}
      this.libraryShiftShow = true
      this.libraryShiftRow = scope
    },
    closeLibraryShift(data){
      this.libraryShiftShow = data
      this.libraryShiftRow = null
    }
  }
};
</script>
<style lang="scss" scoped>
@import "../../../styles/mainbasicData.scss";
::v-deep .newAndEdiDialog {
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
  .el-form {
    flex: 1;
    display: flex;
    justify-content: flex-start;
    align-content: flex-start;
    flex-wrap: wrap;
    overflow: hidden;
    overflow-y: auto;
  }
  .screen-push {
    color: rgb(64, 158, 255);
    span {
      cursor: pointer;
      &:hover {
        color: blue;
      }
    }
  }
  .formButton {
    padding: 20px 20px 20px 0;
  }
  .formTable-box {
      height: 70% !important;

      .el-form-item__content {
        width: 100%;
        height: 100%;
        display: flex;
        flex-direction: column;
        overflow: hidden;
        margin: 0 !important;
      }
    }
}
</style>