<template>
    <div class="app-container-form">
        <el-form ref="dataForm" :model="dataForm" :rules="rules" label-width="120px" inline>
            <h3>报损单</h3>
            <el-form-item label="报损时间" prop="serialDate">
                <el-date-picker v-model="dataForm.serialDate" value-format="yyyy-MM-dd HH:mm:ss" type="datetime"
                    placeholder="选择日期时间" style="width:200px" :disabled="type === 'detail'">
                </el-date-picker>
            </el-form-item>
            
            <el-form-item label="报损类型" prop="breakType">
                <el-select v-model="dataForm.breakType" filterable placeholder="请选择" style="width: 100%">
                    <el-option :key="item.dictLabel" v-for="item in breakTypeList" :label="item.dictLabel" :value="item.dictLabel">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="仓库" prop="warehouseId">
                <el-select v-model="dataForm.warehouseId" clearable filterable placeholder="请选择" style="width: 200px;" :disabled="type === 'detail'">
                    <el-option :key="item.id" v-for="item in warehouseList" :label="item.warehouseName" :value="item.id">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="经手人" prop="addHandlerId">
                <el-select v-model="dataForm.addHandlerId" clearable filterable placeholder="请选择" style="width: 200px" :disabled="type === 'detail'">
                    <el-option :key="item.loginId" v-for="item in userSelsctList" :label="item.deptName+'_'+item.userName" :value="item.loginId">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="报损原因" prop="remarks">
                <el-input style="width:535px" v-model="dataForm.remarks" :maxlength="120"
                    type="textarea" :disabled="type === 'detail'" :autosize="{ minRows: 1, maxRows: 4 }"
                    placeholder="请输入报损原因 最大120字"></el-input>
            </el-form-item>
            <el-form-item label="作废原因" v-if="dataForm.cancelMsg">
                <el-input style="width:535px" v-model="dataForm.cancelMsg" type="textarea" disabled :autosize="{ minRows: 1, maxRows: 4 }"></el-input>
            </el-form-item>
            <div class="mx">
        <h3>报损明细</h3>
        <el-button size="small" type="primary" v-if="type !== 'detail'"
          @click="handleSelectGoods" icon="el-icon-plus">商品/物料</el-button>
      </div>
      <el-table size="small" :data="dataForm.inventoryOutInfos" border :cell-style="{ textAlign: 'center' }"
            :header-cell-style="{ textAlign: 'center' }" style="width: 100%">
            <el-table-column label="商品编号">
              <template slot-scope="scope">
                {{ scope.row.productCode }}
              </template>
            </el-table-column>
            <el-table-column label="商品名称">
              <template slot-scope="scope">
                {{ scope.row.productName }}
              </template>
            </el-table-column>
            <el-table-column label="单价(￥)">
              <template slot-scope="scope">
                {{ scope.row.createPrice.toFixed(2) }}
              </template>
            </el-table-column>
            <el-table-column label="库存数量">
              <template slot-scope="scope">
                {{ scope.row.createProductNumber }}
              </template>
            </el-table-column>
            <el-table-column label="报损数量">
              <template slot-scope="scope">
                <el-form-item v-if="type !== 'detail'" :prop="'inventoryOutInfos.'+scope.$index+'.updateNumber'" :rules="{ required: true, message: '报损数量不能为空', trigger: 'blur' }" class="tableFormItem">
                    <el-input-number v-model="scope.row.updateNumber" @change="handleChange(scope.row)" size="small" :min="1" :max="10000" label="报损数量"></el-input-number>
                </el-form-item>
                <span v-else>{{ scope.row.updateNumber }}</span>
              </template>
            </el-table-column>
            <el-table-column label="备注">
              <template slot-scope="scope">
                <el-input v-if="type !== 'detail'" :maxlength="99" v-model="scope.row.remarks"/>
                <span v-else>{{ scope.row.remarks }}</span>
              </template>
            </el-table-column>
            <el-table-column label="操作" width="150" v-if="type !== 'detail'">
              <template slot-scope="scope">
                <el-button size="mini" type="danger"
                  @click="dataForm.inventoryOutInfos.splice(scope.$index, 1)">删除</el-button>
              </template>
            </el-table-column>
          </el-table>
        </el-form>
        <div class="footer">
            <el-button type="primary" @click="submitForm" v-if="type !== 'detail'">保存
            </el-button>
            <el-button @click="roBack()">返回
            </el-button>
        </div>
    </div>
</template>
<script>
import { createBreakage, updateBreakage, readBreakage } from '@/api/breakage'
import { warehouseList } from '@/api/warehouse'
import { allUserList, dataTypeList } from '@/api/public'
import waves from '@/directive/waves' // 水波纹指令

export default {
  directives: { waves },
  data() {
    return {
      userSelsctList: [],
      breakTypeList: [],
      warehouseList: [],
      id: '',
      type: '',
      /** 表单*/
      dataForm: {
        serialDate: '',
        breakType: undefined,
        warehouseId: undefined,
        addHandlerId: undefined,
        remarks: undefined,
        inventoryOutInfos: []
      },
      rules: {
        serialDate: [
          { required: true, message: '请选择报损时间', trigger: 'blur' }
        ],
        breakType: [
          { required: true, message: '请选择报损类型', trigger: 'blur' }
        ],
        warehouseId: [
          { required: true, message: '请选择仓库', trigger: 'blur' }
        ],
        addHandlerId: [
          { required: true, message: '请选择经手人', trigger: 'blur' }
        ],
        remarks: [
          { required: true, message: '请填写报损原因', trigger: 'blur' }
        ]
      }
    }
  },
  watch: {
    $route: {
      immediate: true,
      handler(newVal) {
        if (this.$route.name === 'breakageAdd') {
          this.dataForm = {
            serialDate: '',
            breakType: undefined,
            warehouseId: undefined,
            addHandlerId: undefined,
            remarks: undefined,
            inventoryOutInfos: []
          }
        } else if (this.$route.name === 'breakageDetail') {
          this.type = 'detail'
        }
        if (this.$route.params.id) {
          this.id = this.$route.params.id
          this.getDataFormDetail()
        }
      }
    }
  },
  mounted() {
    this.getBreakTypeList()
    this.getStoreList()
    this.getAllUserList()
  },
  methods: {
    /** 获取报损类型列表数据 */
    getBreakTypeList() {
      dataTypeList({ dictType: 'break_type' }).then(response => {
        this.breakTypeList = response.data.data
      })
    },
    /** 获取仓库列表数据 */
    getStoreList() {
      warehouseList().then(response => {
        this.warehouseList = response.data.data
      }).catch(() => {})
    },
    /** 获取人员列表数据 */
    getAllUserList() {
      allUserList().then(response => {
        this.userSelsctList = response.data.data
      }).catch(() => { })
    },
    /** 获取详情页面数据 */
    getDataFormDetail() {
      readBreakage({ id: this.id }).then(response => {
        const dataForm = response.data.data
        dataForm.inventoryOutInfos = dataForm.inventoryOutInfos == null ? [] : dataForm.inventoryOutInfos
        dataForm.inventoryOutInfos = dataForm.inventoryOutInfos == null ? [] : dataForm.inventoryOutInfos
        this.dataForm = dataForm
      }).catch(() => {})
    },
    // 选择商品
    async handleSelectGoods() {
      if (!this.dataForm.warehouseId) {
        this.$message.error('请先选择调出仓库！')
        return
      } else {
        console.log(this.dataForm.inventoryOutInfos)
        const selectedIds = this.dataForm.inventoryOutInfos.map(item => item.id)
        const Goods = await this.$EnPickerGoods({
          // goodsApi: '/warehouse-entry/info/inventory',
          selectedIds: selectedIds,
          goodsApiParams: { warehouseId: this.dataForm.warehouseId, type: '2' }
        })
        if (!Goods.length) return
        const inventoryOutInfos = Goods.map(item => {
          item.updateNumber = 1
          item.sumPrice = item.createPrice * 1
          return item
        })
        this.dataForm.inventoryOutInfos = this.dataForm.inventoryOutInfos && this.dataForm.inventoryOutInfos.length ? this.dataForm.inventoryOutInfos.concat(inventoryOutInfos) : this.dataForm.inventoryOutInfos = inventoryOutInfos
      }
    },
    submitForm() {
      this.$refs['dataForm'].validate((valid) => {
        if (valid) {
          if (this.dataForm.inventoryOutInfos.length == 0) {
            this.$message.error('请选择商品/物料！')
            return
          } else {
            if (this.id) {
              updateBreakage(this.dataForm).then(() => {
                this.$notify({
                  title: '成功',
                  message: '更新成功',
                  type: 'success',
                  duration: 2000
                })
                this.roBack()
              })
            } else {
              createBreakage(this.dataForm).then(() => {
                this.$notify({
                  title: '成功',
                  message: '创建成功',
                  type: 'success',
                  duration: 2000
                })
                this.roBack()
              })
            }
          }
        }
      })
    },
    handleChange(row) {
      if (row.createPrice && row.updateNumber) {
        row.sumPrice = row.createPrice * row.updateNumber
      }
    },
    roBack() {
      this.$store.dispatch('delVisitedViews', this.$route).then((views) => {
        this.$router.push({ name: 'breakage' })
      })
    }
  }
}
</script>
<style>
/** 底部步骤 */
.footer {
  width: 100%;
  padding: 10px;
  bottom: 0px;
  text-align: center;
  z-index: 999;
}
.mx {
  display: flex;
  align-items: center;
  justify-content: space-between;
}
/** 表格中输入框样式 */
.tableFormItem {
  width: 100%;
  margin-bottom: 0;
}
</style>