<template>
  <div class="pageBox">
    <div class="cardBox">
      <div class="searchBox">
        <div class="row">
          <span>商品名称：</span>
          <el-input v-model="filter.title" clearable @keyup.enter.native="handleSearch"></el-input>
        </div>
        <div class="row">
          <span>商品编码：</span>
          <el-input v-model="filter.external_sku_id" clearable @keyup.enter.native="handleSearch"></el-input>
        </div>
        <div class="row">
          <span>创建时间：</span>
          <el-date-picker
            v-model="addTime"
            type="datetimerange"
            range-separator="-"
            start-placeholder="开始时间"
            end-placeholder="结束时间"
            value-format="yyyy-MM-dd HH:mm:ss"
            style="width: 340px"
            @change="handleSearch()">
          </el-date-picker>
        </div>
        <div class="row">
          <el-button type="primary" icon="el-icon-search" @click="handleSearch">筛选</el-button>
        </div>
      </div>
    </div>
    <el-card>
      <div class="opaBox">
        <el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
        <el-button type="warning" icon="el-icon-upload2" @click="handleImport">导入</el-button>
      </div>
      <el-table v-loading="loading" :data="supplierList" style="width: 100%" border>
        <el-table-column prop="id" label="ID" width="80" align="center" />
        <el-table-column prop="goods_sku.name" label="商品名称" />
        <el-table-column prop="goods_sku.external_sku_id" label="商品编码" />
        <!-- <el-table-column prop="sku_id" label="skuID" /> -->
        <el-table-column prop="day" label="日期" />
        <el-table-column prop="inventory" label="盘点库存" />
        <el-table-column prop="inventory_time" label="盘点时间" />
      </el-table>
      <div class="page-pagination">
        <el-pagination
          @size-change="handleSizeChange"
          @current-change="handleCurrentChange"
          :current-page="page"
          :page-sizes="[10, 20, 50, 100]"
          :page-size="pageSize"
          layout="prev, pager, next, jumper, sizes, total"
          :total="total">
        </el-pagination>
      </div>
    </el-card>

    <el-dialog title="新增" :visible.sync="dialogVisible" width="500px">
      <div v-for="(item, index) in inventoryOrders" :key="index" class="bgBox">
        <div class="close" @click="delItem(index)"><i class="el-icon-delete-solid"></i></div>
        <el-form label-width="90px" label-position="right">
          <el-form-item label="商品名称：">
            <el-select v-model="item.external_sku_id" filterable remote reserve-keyword placeholder="商品名称" clearable
              :remote-method="remoteMethod" :loading="searchLoading">
              <el-option v-for="it in goodsList" :key="it.external_sku_id" :label="it.title" :value="it.external_sku_id">
              </el-option>
            </el-select>
          </el-form-item>
          <!-- <el-form-item label="商品编码：">
            <el-input v-model="item.external_sku_id" clearable></el-input>
          </el-form-item> -->
          <el-form-item label="盘点库存：">
            <el-input v-model="item.inventory" clearable></el-input>
          </el-form-item>
        </el-form>
      </div>
      <div class="btn" @click="addItem()"><i class="el-icon-plus"></i>添加记录</div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="dialogVisible = false">取 消</el-button>
        <el-button type="primary" @click="commitSupplier" :loading="commitloading">确 定</el-button>
      </span>
    </el-dialog>

    <el-dialog title="导入" :visible.sync="showImport" width="500px">
      <div style="text-align: center;">
        <el-upload class="upload-demo" drag action="" :limit="1" :multiple="false"
          accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel"
          :file-list="fileList" :auto-upload="false" :on-change="importFileChange" :on-remove="fileRemove">
          <i class="el-icon-upload"></i>
          <div class="el-upload__text">将文件拖到此处，或<em>点击上传</em></div>
        </el-upload>
      </div>
      <span slot="footer" class="dialog-footer">
        <el-button @click="showImport = false">取 消</el-button>
        <el-button type="primary" @click="commitUpload" :loading="commitloading">上 传</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import { getDailyStock, batchAddDailyStock } from "@/api/supplyChain"
import axios from "axios"
import { goodsSkusList } from "@/api/goods"
import dayjs from 'dayjs'

export default {
  data() {
    return {
      loading: false,
      page: 1,
      pageSize: 10,
      total: 0,
      supplierList: [],
      dialogVisible: false,
      inventoryOrders: [],
      commitloading: false,
      filter: {
        title: '',
        external_sku_id: ''
      },
      addTime: [],
      showImport: false,
      goodsList: [],
      searchLoading: false,
      fileList: []
    }
  },
  methods: {
    fetchList() {
      this.loading = true
      let params = {
        page: this.page,
        per_page: this.pageSize,
        ...this.filter,
        start_time: this.addTime ? this.addTime[0] : '',
        end_time: this.addTime ? this.addTime[1] : ''
      }
      getDailyStock(params).then((res) => {
        this.supplierList = res.data.data
        this.total = res.data.meta.total
        this.loading = false
      }).catch(() => {
        this.loading = false
      })
    },
    handleSizeChange(val) {
      this.page = 1
      this.pageSize = val
      this.fetchList()
    },
    handleCurrentChange(val) {
      this.page = val
      this.fetchList()
    },
    handleSearch() {
      this.page = 1
      this.fetchList()
    },
    // 新增供应商
    handleAdd() {
      this.inventoryOrders = [{
        external_sku_id: '',
        inventory: ''
      }]
      this.dialogVisible = true
    },
    delItem(i) {
      this.inventoryOrders.splice(i, 1)
    },
    addItem() {
      this.inventoryOrders.push({
        external_sku_id: '',
        inventory: ''
      })
    },
    commitSupplier() {
      this.commitloading = true
      batchAddDailyStock({inventoryOrders: this.inventoryOrders}).then((res) => {
        this.page = 1
        this.fetchList()
        this.$message({ type: "success", message: "新增成功!" })
        this.dialogVisible = false
        this.commitloading = false
      }).catch(() => {
        this.commitloading = false
      })
    },
    handleImport() {
      this.fileList = []
      this.showImport = true
    },
    importFileChange(file, fileList) {
      console.log(fileList)
      this.fileList = fileList
    },
    fileRemove() {
      this.fileList = []
    },
    commitUpload() {
      if(this.fileList.length) {
        this.commitloading = true
        const params = new FormData();
        params.append("inventoryFile", this.fileList[0].raw)
        let token = localStorage.getItem("token")
        axios.post("/api/supplier/daily_stock_record/inventory_import", params, {
          headers: {
            Authorization: `Bearer ${token}`
          }
        }).then((res) => {
          if (res.status === 200) {
            this.$message.success("导入成功")
            this.page = 1
            this.fetchList()
            this.commitloading = false
            this.showImport = false
          } else {
            this.commitloading = false
          }
        }).catch(() => {
          this.commitloading = false
        })
      } else {
        this.$message.error("请先上传文件")
      }
    },
    remoteMethod(query) {
      if (query !== '') {
        this.searchLoading = true
        setTimeout(() => {
          this.searchLoading = false
          goodsSkusList(query).then((res) => {
            this.goodsList = res.data.filter(item => {
              return item.title.toLowerCase().indexOf(query.toLowerCase()) > -1
            })
          })
        }, 200)
      } else {
        this.goodsList = []
      }
    }
  },
  mounted() {
    let start = dayjs().subtract(7, 'day').format('YYYY-MM-DD') + ' 00:00:00'
    let end = dayjs().format('YYYY-MM-DD hh:mm:ss')
    this.addTime = [start, end]
    this.fetchList()
  }
}
</script>

<style lang="scss" scoped>
  .searchBox{
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    white-space: nowrap;
    .row{
      font-size: 14px;
      margin-bottom: 20px;
      margin-right: 15px;
      display: flex;
      align-items: center;
    }
  }
  .opaBox{
    margin-bottom: 15px;
  }
  .bgBox{
    position: relative;
    border-radius: 5px;
    background-color: #f5f2f2;
    margin-bottom: 15px;
    padding: 15px 30px 1px 0;
    .close{
      color: #f00;
      position: absolute;
      right: 5px;
      top: 5px;
      font-size: 20px;
      cursor: pointer;
    }
  }
  .btn{
    display: flex;
    align-items: center;
    font-size: 14px;
    color: #409eff;
    cursor: pointer;
    width: fit-content;
  }
</style>
