<template>
  <div class="app-container">
    <el-card>
      <div slot="header">
        <span>机床编号:</span>
        <el-select v-model="machineNumberValue" filterable placeholder="机床编号" size="small" clearable @change="machineChange">
          <el-option
            v-for="item in machineNumber"
            :key="item.value"
            :label="item.label"
            :value="item.value">
            <div style="float: left">{{ item.label }}</div>
            <div style="float: right; color: #8492a6; font-size: 13px">{{ item.name }}</div>
          </el-option>
        </el-select>
        <span>组号:</span>
        <el-select v-model="groupNumberValue" placeholder="组号" size="small" clearable>
          <el-option
            v-for="item in groupNumber"
            :key="item.value"
            :label="item.label"
            :value="item.value"/>
        </el-select>
        <el-button size="small" type="success" icon="el-icon-search" style="margin: 0 0 0 10px" @click="pageCurrent0=1;pageSize0=20;pageCurrent1=1;pageSize1=20;pageCurrent2=1;pageSize2=20;searchTable()">查询</el-button>
      </div>
      <el-tabs v-model="PartType" type="card" @tab-click="searchTable()">
        <el-tab-pane label="标准件" name="标准件">
          <el-table ref="multipleTable" :data="tableData0" size="mini" style="max-height: 600px" height="600px" border stripe @selection-change="handleSelectionChange">
            <el-table-column type="selection" align="center" width="50"/>
            <el-table-column align="center" label="机床图号" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.机床图号 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="组号" min-width="80px">
              <template slot-scope="scope">
                {{ scope.row.组号 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="名称" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.物料名称 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="型号" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.物料型号 || '—' }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="规格" min-width="200px">
              <template slot-scope="scope">
                {{ scope.row.物料规格 || '—' }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="单台机床数量" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.单台机床数量 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="总数量" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.总数量 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="备件数量" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.备件总数量 }}
              </template>
            </el-table-column>
          </el-table>
          <div class="block" style="float:right;">
            <el-pagination
              :current-page="pageCurrent0"
              :page-sizes="[10, 20, 30, 40]"
              :page-size="pageSize0"
              :total="total0"
              style="margin-top:10px;display:inline-block;width:50%"
              layout="total, sizes, prev, pager, next, jumper"
              @size-change="handleSizeChange0"
              @current-change="handleCurrentChange0"/>
          </div>
        </el-tab-pane>
        <el-tab-pane label="外购件" name="外购件">
          <el-table ref="multipleTable" :data="tableData1" size="mini" style="max-height: 600px" height="600px" border stripe @selection-change="handleSelectionChange">
            <el-table-column type="selection" align="center" width="50"/>
            <el-table-column align="center" label="机床图号" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.机床图号 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="组号" min-width="80px">
              <template slot-scope="scope">
                {{ scope.row.组号 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="名称" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.物料名称 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="型号" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.物料型号 || '—' }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="规格" min-width="200px">
              <template slot-scope="scope">
                {{ scope.row.物料规格 || '—' }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="总数量" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.总数量 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="备件数量" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.备件总数量 }}
              </template>
            </el-table-column>
          </el-table>
          <div class="block" style="float:right;">
            <el-pagination
              :current-page="pageCurrent1"
              :page-sizes="[10, 20, 30, 40]"
              :page-size="pageSize1"
              :total="total1"
              style="margin-top:10px;display:inline-block;width:50%"
              layout="total, sizes, prev, pager, next, jumper"
              @size-change="handleSizeChange1"
              @current-change="handleCurrentChange1"/>
          </div>
        </el-tab-pane>
        <el-tab-pane label="基本件" name="基本件">
          <el-table ref="multipleTable" :data="tableData2" size="mini" style="max-height: 600px" height="600px" border stripe @selection-change="handleSelectionChange">
            <el-table-column type="selection" align="center" width="50"/>
            <el-table-column align="center" label="机床图号" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.机床图号 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="组号" min-width="80px">
              <template slot-scope="scope">
                {{ scope.row.组号 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="名称" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.零件名称 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="图号" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.零件图号 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="规格" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.规格 || '—' }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="材料" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.材料 || '—' }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="总数量" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.总数量 }}
              </template>
            </el-table-column>
            <el-table-column align="center" label="备件数量" min-width="100px">
              <template slot-scope="scope">
                {{ scope.row.备件总数量 }}
              </template>
            </el-table-column>
          </el-table>
          <div class="block" style="float:right;">
            <el-pagination
              :current-page="pageCurrent2"
              :page-sizes="[10, 20, 30, 40]"
              :page-size="pageSize2"
              :total="total2"
              style="margin-top:10px;display:inline-block;width:50%"
              layout="total, sizes, prev, pager, next, jumper"
              @size-change="handleSizeChange2"
              @current-change="handleCurrentChange2"/>
          </div>
        </el-tab-pane>
      </el-tabs>
    </el-card>

    <el-card>
      <div slot="header">
        <span style="margin: 5px">领料单编号:</span>
        <el-input v-model="pickingListNumber" clearable size="small" style="width:200px" />
        <el-button size="small" type="success" icon="el-icon-search" style="margin: 0 0 0 10px" @click="searchList()">查询</el-button>
        <el-button size="small" type="primary" icon="el-icon-plus" style="margin: 0 0 0 10px" @click="createList()">创建</el-button>
        <el-button size="small" type="primary" icon="el-icon-bottom" style="margin: 0 0 0 10px" @click="selectInto()">选入</el-button>
      </div>
      <h4 style="margin-top:0">领料单</h4>
      <el-table :data="pickListTable1" highlight-current-row border style="width: 100%;" size="mini" height="300" @row-click="clickList">
        <el-table-column label="序号" align="center" type="index" width="50"/>
        <el-table-column label="领料单编号" align="center" min-width="200">
          <template slot-scope="scope">
            {{ scope.row.领料单编号 }}
          </template>
        </el-table-column>
        <el-table-column label="创建时间" align="center" min-width="200" >
          <template slot-scope="scope">
            {{ scope.row.操作日期.split(' ')[0] }}
          </template>
        </el-table-column>
        <el-table-column label="领料人" align="center" min-width="130">
          <template slot-scope="scope">
            {{ scope.row.姓名 }}
          </template>
        </el-table-column>
        <el-table-column label="领料单备注" align="center" min-width="130">
          <template slot-scope="scope">
            {{ scope.row.领料单备注 }}
          </template>
        </el-table-column>
        <el-table-column label="审批" align="center" min-width="90">
          <template slot-scope="scope">
            <el-tag v-if="Number(scope.row.是否审批)===1" type="success">已审批</el-tag>
            <el-tag v-if="Number(scope.row.是否审批)===0 && Number(token)!==21" type="warning">未审批</el-tag>
            <el-button v-if="Number(scope.row.是否审批)===0 && Number(token)===21" size="mini" type="primary" plain icon="el-icon-check" @click="approvalPass(scope.row)">审批</el-button>
          </template>
        </el-table-column>
        <el-table-column label="领回确认" align="center" min-width="80">
          <template slot-scope="scope">
            <el-tag v-if="Number(scope.row.是否启用)===1" type="warning">未确认</el-tag>
            <el-tag v-else type="success">已确认</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="操作" align="center" width="230px">
          <template slot-scope="scope" align="center">
            <el-button v-if="Number(token)===21" :disabled="Number(scope.row.是否审批)===0 || Number(scope.row.是否启用)===0" size="mini" type="primary" @click="checkList(scope.row)">确认领回</el-button>
            <el-button :disabled="Number(scope.row.是否启用)===0" size="mini" type="danger" icon="el-icon-delete" @click="dropList(scope.row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
      <div class="block" style="float:right;margin: 10px 0;">
        <el-pagination
          :current-page="pageCurrent3"
          :page-sizes="[10, 20, 30, 40]"
          :page-size="pageSize3"
          :total="total3"
          layout="total, sizes, prev, pager, next, jumper"
          @size-change="handleSizeChange3"
          @current-change="handleCurrentChange3"/>
      </div>
      <h4>领料单明细：{{ pickingListNumberShow }}</h4>
      <el-table :data="pickListTable2" border style="width: 100%;" size="mini" height="300">
        <el-table-column label="序号" align="center" type="index" width="50"/>
        <el-table-column label="名称" align="center" min-width="100">
          <template slot-scope="scope">
            {{ scope.row.名称 }}
          </template>
        </el-table-column>
        <el-table-column label="图号或型号" align="center" min-width="100">
          <template slot-scope="scope">
            {{ scope.row.图号或型号 || '—' }}
          </template>
        </el-table-column>
        <el-table-column label="规格" align="center" min-width="100">
          <template slot-scope="scope">
            {{ scope.row.规格 || '—' }}
          </template>
        </el-table-column>
        <el-table-column label="机床图号" align="center" min-width="100">
          <template slot-scope="scope">
            {{ scope.row.机床图号 }}
          </template>
        </el-table-column>
        <el-table-column label="组号" align="center" min-width="70">
          <template slot-scope="scope">
            {{ scope.row.组号 }}
          </template>
        </el-table-column>
        <el-table-column label="总数量" align="center" min-width="70">
          <template slot-scope="scope">
            {{ scope.row.总数量 }}
          </template>
        </el-table-column>
        <el-table-column label="备件数量" align="center" min-width="70">
          <template slot-scope="scope">
            {{ scope.row.备件数量 }}
          </template>
        </el-table-column>
        <el-table-column label="已领数量" align="center" min-width="70">
          <template slot-scope="scope">
            {{ scope.row.出库数量 }}
          </template>
        </el-table-column>
        <el-table-column v-if="true" label="操作" align="center" width="100">
          <template slot-scope="scope">
            <el-button :disabled="!!scope.row.是否出库" size="mini" type="danger" icon="el-icon-delete" @click="dropListDetail(scope.row)">删除</el-button>
          </template>
        </el-table-column>
      </el-table>
    </el-card>

    <el-dialog :visible.sync="dialogFormVisible1" title="创建领料单" center width="380px">
      <el-form ref="form1" :model="form1" :rules="rules1" label-position="left">
        <el-form-item label="领料人" prop="领料人流水号" label-width="100px" size="small">
          <el-select v-model="form1.领料人流水号" placeholder="请选择" size="small" clearable filterable>
            <el-option
              v-for="item in pickPerson"
              :key="item.value"
              :label="item.label"
              :value="item.value"/>
          </el-select>
        </el-form-item>
        <el-form-item label="领料单备注" prop="领料单备注" label-width="100px">
          <el-input v-model="form1.领料单备注" size="small" placeholder="备注" style="width: 200px"/>
        </el-form-item>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="dialogFormVisible1=false">取消</el-button>
        <el-button type="primary" @click="submitCreateList()">确 定</el-button>
      </div>
    </el-dialog>
  </div>
</template>

<script>
import { initPickPerson, initMachineProject, searchgroup, searchTable, searchList, createList, dropList, selectIntoList, searchListDetail, dropListDetail } from '@/api/Inventory/CreatePickingList'
import request from '@/utils/request'
import { mapGetters } from 'vuex'
export default {
  name: 'CreatePickingList',
  data() {
    return {
      PartType: '基本件',
      machineNumberValue: '',
      machineNumber: [],
      groupNumberValue: '',
      groupNumber: [],
      tableData0: [],
      tableData1: [],
      tableData2: [],
      pageCurrent0: 1,
      pageSize0: 20,
      total0: 0,
      pageCurrent1: 1,
      pageSize1: 20,
      total1: 0,
      pageCurrent2: 1,
      pageSize2: 20,
      total2: 0,
      pickListTable1: [],
      pageCurrent3: 1,
      pageSize3: 20,
      total3: 0,
      pickListTable2: [],
      dialogFormVisible1: false,
      form1: {
        领料人流水号: '',
        领料单备注: ''
      },
      rules1: {
        领料人流水号: [{ required: true, message: '请选择领料人' }]
      },
      pickPerson: [],
      pickingListNumber: '', // 领料单编号
      pickingListNumberShow: '', // 领料单编号
      pickingListNum: '', // 领料单流水号
      multipleSelection: []
    }
  },
  computed: {
    ...mapGetters([
      'id',
      'token'
    ])
  },
  mounted() {
    this.fetchData()
    this.searchTable()
    this.searchList()
  },
  methods: {
    // 审批通过
    approvalPass(row) {
      this.$confirm('是否审批通过?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        const param = {
          url: '',
          method: 'post',
          data: {
            type: '4',
            name: `update 车间装配管理_领料单 set 是否审批 = 1 where 领料单流水号 = ${row.领料单流水号}`
          }
        }
        request(param).then(res => {
          if (res.data[0].result === '1') {
            this.$message.success('操作成功')
            this.pickingListNumber = ''
            this.searchList()
          } else {
            this.$message.error('操作失败')
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消操作'
        })
      })
    },
    // 初始化数据
    fetchData() {
      initPickPerson().then(response => {
        for (let i = 0; i < response.data.length; i++) {
          this.pickPerson.push({
            label: response.data[i].姓名,
            value: response.data[i].人员编号
          })
        }
      })
      initMachineProject().then(response => {
        for (let i = 0; i < response.data.length; i++) {
          this.machineNumber.push({
            label: response.data[i].机床图号,
            name: response.data[i].项目名称,
            value: response.data[i].机床流水号
          })
        }
      })
    },
    // 根据机床查分组
    machineChange() {
      this.groupNumberValue = ''
      this.groupNumber = []
      searchgroup(this.machineNumberValue).then(response => {
        for (let i = 0; i < response.data.length; i++) {
          this.groupNumber.push({
            label: response.data[i].组号,
            value: response.data[i].组件流水号
          })
        }
      })
    },
    // 查三表
    searchTable() {
      this.multipleSelection = []
      if (this.PartType === '标准件') {
        this.searchTable0()
      } else if (this.PartType === '外购件') {
        this.searchTable1()
      } else if (this.PartType === '基本件') {
        this.searchTable2()
      }
    },
    // 标准件
    searchTable0() {
      let check1, check2
      this.machineNumberValue ? check1 = 1 : check1 = 0
      this.groupNumberValue ? check2 = 1 : check2 = 0
      searchTable(check1, this.machineNumberValue, check2, this.groupNumberValue, this.pageCurrent0, this.pageSize0, 1).then(response => {
        this.tableData0 = response.data.rows
        this.total0 = response.data.total
      })
    },
    // 外购件
    searchTable1() {
      let check1, check2
      this.machineNumberValue ? check1 = 1 : check1 = 0
      this.groupNumberValue ? check2 = 1 : check2 = 0
      searchTable(check1, this.machineNumberValue, check2, this.groupNumberValue, this.pageCurrent1, this.pageSize1, 2).then(response => {
        this.tableData1 = response.data.rows
        this.total1 = response.data.total
      })
    },
    // 基本件
    searchTable2() {
      let check1, check2
      this.machineNumberValue ? check1 = 1 : check1 = 0
      this.groupNumberValue ? check2 = 1 : check2 = 0
      searchTable(check1, this.machineNumberValue, check2, this.groupNumberValue, this.pageCurrent2, this.pageSize2, 3).then(response => {
        this.tableData2 = response.data.rows
        this.total2 = response.data.total
      })
    },
    handleSizeChange0(val) {
      this.pageSize0 = val
      this.pageCurrent0 = 1
      this.searchTable0()
    },
    handleCurrentChange0(val) {
      this.pageCurrent0 = val
      this.searchTable0()
    },
    handleSizeChange1(val) {
      this.pageSize1 = val
      this.pageCurrent1 = 1
      this.searchTable1()
    },
    handleCurrentChange1(val) {
      this.pageCurrent1 = val
      this.searchTable1()
    },
    handleSizeChange2(val) {
      this.pageSize2 = val
      this.pageCurrent2 = 1
      this.searchTable2()
    },
    handleCurrentChange2(val) {
      this.pageCurrent2 = val
      this.searchTable2()
    },
    // 查询领料单列表
    searchList() {
      let check
      this.pickingListNumber ? check = 1 : check = 0
      searchList(this.pageCurrent3, this.pageSize3, check, this.pickingListNumber).then(response => {
        this.pickListTable1 = response.data.rows
        this.total3 = response.data.total
      })
    },
    handleSizeChange3(val) {
      this.pageSize3 = val
      this.pageCurrent3 = 1
      this.searchList()
    },
    handleCurrentChange3(val) {
      this.pageCurrent3 = val
      this.searchList()
    },
    // 创建领料单
    createList() {
      if (this.$refs['form1'] !== undefined) {
        this.$refs['form1'].resetFields()
      }
      this.form1.领料人流水号 = ''
      this.form1.领料单备注 = ''
      this.dialogFormVisible1 = true
    },
    // 提交创建领料单
    submitCreateList() {
      createList(this.form1.领料人流水号, this.form1.领料单备注).then(response => {
        if (response.data[0].result === '1') {
          this.$message.success('创建成功')
          this.dialogFormVisible1 = false
          this.searchList()
        } else { this.$message.error('操作失败') }
      })
    },
    // 确认领料单
    checkList(row) {
      this.$confirm('是否确认领回?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        const param = {
          url: '',
          method: 'post',
          data: {
            type: '4',
            name: `update 车间装配管理_领料单 set 是否启用 = 0 where 领料单流水号 = ${row.领料单流水号}`
          }
        }
        request(param).then(res => {
          if (res.data[0].result === '1') {
            this.$message.success('操作成功')
            this.pickingListNumber = ''
            this.searchList()
          } else {
            this.$message.error('操作失败')
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消操作'
        })
      })
    },
    // 删除领料单
    dropList(row) {
      this.$confirm('此操作将永久删除该行, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        dropList(row.领料单流水号).then(response => {
          if (Number(response.data[0].result) === 1) {
            this.$message.success('删除成功')
            this.searchList()
          } else {
            this.$message.error('数据占用')
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        })
      })
    },
    // 多选
    handleSelectionChange(val) {
      this.multipleSelection = val
    },
    // 选入
    selectInto() {
      const basePartGroup = []
      const purchasePartGroup = []
      this.multipleSelection.map(v => {
        v.基本件流水号 ? basePartGroup.push(v.基本件流水号) : purchasePartGroup.push(v.标准件和外购件流水号)
      })
      if (basePartGroup.length === 0 && purchasePartGroup.length === 0) {
        this.$message.warning('请勾选零件')
        return
      }
      if (!this.pickingListNum || !this.pickingListNumberShow) {
        this.$message.warning('请选择领料单')
        return
      }
      if (basePartGroup.length) { // 基本件
        selectIntoList(basePartGroup, null, this.pickingListNum).then(response => {
          if (response.data[0].result === '1') {
            this.$message.success('操作成功')
            this.searchTable()
            this.clickList()
          } else { this.$message.error('操作失败') }
        })
      } else { // 标准件外购件
        selectIntoList(null, purchasePartGroup, this.pickingListNum).then(response => {
          if (response.data[0].result === '1') {
            this.$message.success('操作成功')
            this.searchTable()
            this.clickList()
          } else { this.$message.error('操作失败') }
        })
      }
    },
    // 查看领料单明细
    clickList(row) {
      console.log(row)
      row ? this.pickingListNum = row.领料单流水号 : this.pickingListNum
      row ? this.pickingListNumberShow = row.领料单编号 : this.pickingListNumberShow
      searchListDetail(this.pickingListNum).then(res => {
        this.pickListTable2 = res.data
      })
    },
    // 删除领料单明细
    dropListDetail(row) {
      console.log(row)
      this.$confirm('此操作将永久删除该行, 是否继续?', '提示', {
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        dropListDetail(row.领料单明细流水号).then(response => {
          if (Number(response.data[0].result) === 1) {
            this.$message.success('删除成功')
            this.clickList()
          } else {
            this.$message.error('已领取，不可删除')
          }
        })
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        })
      })
    }
  }
}
</script>

<style scoped>
  .el-card{
    margin-bottom: 15px;
  }
  .el-select{
    width:200px
  }
  .el-input{
    width:200px
  }
  span{
    margin: 10px 0 10px 10px;
  }
  .el-tag{
    margin: 0
  }
</style>
