<template>
  <div class="main-contain">
    <div class="position">
      <bread-crumb :crumbs="crumbs"></bread-crumb>
    </div>
    <div class="app-container ">
      <div style="justify-content: space-between;margin: 0px 0 12px 0;display: flex;align-items: center;">
        <div>
          <el-select v-model="type_name" style="width:140px;margin-right:10px;" placeholder="请选择"
          @change="changeTypeName">
            <el-option
              v-for="item in types"
              :key="item.id"
              :label="item.type_name"
              :value="item.id">
            </el-option>
          </el-select>
          <el-date-picker
            size="small"
            v-model="start_time"
            prefix-icon="el-icon-date"
            :editable="false"
            style="width: 196px;"
            type="date"
            placeholder="选择日期时间"
            align="right"
            format="yyyy-MM-dd"
            value-format="yyyy-MM-dd"
            @change="startTimeChange"
           ></el-date-picker>-
            <el-date-picker
              size="small"
              v-model="end_time"
              prefix-icon="el-icon-date"
              :editable="false"
              style="width: 196px;"
              type="date"
              placeholder="选择日期时间"
              align="right"
              format="yyyy-MM-dd"
              value-format="yyyy-MM-dd"
              @change="endTimeChange"
          ></el-date-picker>
          <el-input
            size="small"
            style="width: 200px;margin-left:10px;"
            class="filter-item"
            v-model.trim="keywords"
            placeholder="耗材名称"
          />
          <el-button
            size="small"
            class="filter-item"
            type="primary"
            icon="el-icon-search"
            @click="search"
            >搜索</el-button
          >
        </div>
        <div>
          <el-button size="small" type="primary" @click="exportList">导出</el-button>
          <el-button size="small" type="primary" @click="toPrint">打印</el-button>
        </div>
      </div>



       <el-table
        :row-style="{ color: '#303133' }"
        :header-cell-style="{
          backgroundColor: 'rgb(245, 247, 250)',
          color: '#606266'
        }"
        :data="tableList"
        :class="signAndWeighBoxPatients"
        border
        v-loading="WarehouseInfo.loading"
      >
        <el-table-column label="耗材类型" align="center">
          <template slot-scope="scope">
            <span>{{getGoodType(scope.row.good_type_id)}}</span>
         </template>
        </el-table-column>
        <el-table-column label="耗材名称" align="center">
          <template slot-scope="scope">
            {{ scope.row.good_name }}
          </template>
        </el-table-column>
        <el-table-column label="规格&单位" align="center">
            <template slot-scope="scope">
              <span>{{ scope.row.specification_name }} / {{scope.row.packing_unit}}</span>
            </template>
         </el-table-column>
        <el-table-column label="进货单价" align="center">
          <template slot-scope="scope">
             {{scope.row.buy_price}}
          </template>
        </el-table-column>
        <el-table-column label="生产商" align="center">
          <template slot-scope="scope">
           {{getManufacture(scope.row.manufacturer)}}
          </template>
        </el-table-column>
       <el-table-column label="入库数量" align="center">
         <template slot-scope="scope">
          
          <span v-if="getWareInfo(scope.row.xt_warehouse_info)>0">{{getWareInfo(scope.row.xt_warehouse_info)}}{{scope.row.packing_unit}}</span>
         </template>
       </el-table-column>
       <el-table-column label="出库数量" align="center">
         <template slot-scope="scope">
            {{getAutoCount(scope.row.id) + getOutCount(scope.row.id)}}
         </template>
       </el-table-column>

       <el-table-column label="剩余库存量" align="center">
         <template slot-scope="scope">
          <span v-if="getWareInfo(scope.row.xt_warehouse_info) > 0">{{getWareInfo(scope.row.xt_warehouse_info) - getAutoCount(scope.row.id) - getOutCount(scope.row.id) + getCancelCount(scope.row.id) }}</span> 
         </template>
       </el-table-column>
       <el-table-column label="操作" align="center" width="260px">
          <template slot-scope="scope">
              <el-button
                size="small"
                type="primary"
                @click="toClick(scope.row)"
              >库存流水
              </el-button>
              <el-button
                size="small"
                type="primary"
                @click="toClickOne(scope.row)"
              >批次
              </el-button>
          </template>
        </el-table-column>
      </el-table>
      <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :page-sizes="[10, 50, 100,200,500,1000]"
        :page-size="10"
        background
        align="right"
        style="margin-top:20px;"
        layout="total, sizes, prev, pager, next, jumper"
        :total="total"
      >
      </el-pagination>
    </div>
  </div>
</template>

<script>
import { uParseTime } from "@/utils/tools";
import BreadCrumb from "@/xt_pages/components/bread-crumb";
import {
  GetAllGoodInfo,
  GetAllGoodType,
  getAllStockQueryList,
  getAllStockList,
  getStockDrugCount
} from "@/api/stock";

export default {
  name: "stockIn",
  created() {
    var start_time =  window.sessionStorage.getItem('start_time')
    var end_time =  window.sessionStorage.getItem('end_time')
    console.log("start_time",start_time,end_time)
    if(start_time !=null){
      this.start_time = start_time
    }
    if(end_time!=null){
      this.end_time = end_time
    }
   
    window.sessionStorage.removeItem('start_time')
    window.sessionStorage.removeItem('end_time')
    var nowDate = new Date();
    var nowYear = nowDate.getFullYear();
    var nowMonth = nowDate.getMonth() + 1;
    var nowDay = nowDate.getDate();
    // this.end_time =
    //   nowYear +
    //   "-" +
    //   (nowMonth < 10 ? "0" + nowMonth : nowMonth) +
    //   "-" +
    //   (nowDay < 10 ? "0" + nowDay : nowDay);
    // nowDate.setMonth(nowDate.getMonth() - 1);
    // nowYear = nowDate.getFullYear();
    // nowMonth = nowDate.getMonth() + 1;
    // nowDay = nowDate.getDate();
    // this.start_time = nowYear +"-" +(nowMonth < 10 ? "0" + nowMonth : nowMonth) +"-" +(nowDay < 10 ? "0" + nowDay : nowDay);
    this.GetAllGoodInfo();
    this.GetAllGoodType();
    this.getlist()
    this.getStockDrugCount()
  },
  components: {
    BreadCrumb
  },
  data() {
    return {
      crumbs: [
        { path: false, name: "库存管理" },
        { path: "/stock/query", name: "库存查询" }
      ],
      keywords: "",
      total: 0,
      multipleSelection: [],
      signAndWeighBoxPatients: "sign-and-weigh-box-patients",
      start_time: "",
      end_time: "",
      page: 1,
      limit: 10,
      goodType: [],
      goodInfo: [],
      WarehouseInfo: {
        loading: false,
        warehouseInfoDate: []
      },
      options:[],
      value:"",
      type_name:0,
      types:[],
      tableList:[],
      manufacturerList:[],
      countList:[],
      outCountList:[],
      autoCountList:[],
      cancelCountList:[]
    };
  },
  methods: {
    GetAllStockQuery: function() {
      console.log(this.keywords);
      const Params = {
        page: this.page,
        limit: this.limit,
        keyword: this.keywords,
        start_time:this.start_time,
        end_time:this.end_time,
        type_name:this.type_name,
      };

      this.WarehouseInfo.loading = true;
      this.WarehouseInfo.warehouseInfoDate = [];
      getAllStockQueryList(Params).then(response => {
        if (response.data.state == 0) {
          this.WarehouseInfo.loading = false;
          this.$message.error(response.data.msg);
          return false;
        } else {
          this.WarehouseInfo.loading = false;
          this.total = response.data.data.total;
          for (let i = 0; i < response.data.data.list.length; i++) {
           this.WarehouseInfo.warehouseInfoDate.push( response.data.data.list[i]);
          }
        }
        console.log("数据源头",this.WarehouseInfo.warehouseInfoDate)

         for(let i=0;i<this.WarehouseInfo.warehouseInfoDate.length;i++){
            this.WarehouseInfo.warehouseInfoDate[i].type_name = this.WarehouseInfo.warehouseInfoDate[i].type.type_name

            this.WarehouseInfo.warehouseInfoDate[i].stockInCount = this.stockInCount(this.WarehouseInfo.warehouseInfoDate[i])

            this.WarehouseInfo.warehouseInfoDate[i].salesReturnCount = this.salesReturnCount(this.WarehouseInfo.warehouseInfoDate[i])

            this.WarehouseInfo.warehouseInfoDate[i].realCount = this.stockInCount(this.WarehouseInfo.warehouseInfoDate[i]) -  this.salesReturnCount(this.WarehouseInfo.warehouseInfoDate[i])

            this.WarehouseInfo.warehouseInfoDate[i].stockOutCount = this.stockOutCount(this.WarehouseInfo.warehouseInfoDate[i])

            this.WarehouseInfo.warehouseInfoDate[i].cancelStockCount = this.cancelStockCount(this.WarehouseInfo.warehouseInfoDate[i])

            this.WarehouseInfo.warehouseInfoDate[i].realOutCount =  this.stockOutCount(this.WarehouseInfo.warehouseInfoDate[i]) -  this.cancelStockCount(this.WarehouseInfo.warehouseInfoDate[i])

            this.WarehouseInfo.warehouseInfoDate[i].overplus = this.stockInCount(this.WarehouseInfo.warehouseInfoDate[i]) -this.salesReturnCount(this.WarehouseInfo.warehouseInfoDate[i]) - this.stockOutCount(this.WarehouseInfo.warehouseInfoDate[i]) + this.cancelStockCount(this.WarehouseInfo.warehouseInfoDate[i])

            if(this.WarehouseInfo.warehouseInfoDate[i].query_warehousing_info.length>0){
              this.WarehouseInfo.warehouseInfoDate[i].price = this.WarehouseInfo.warehouseInfoDate[i].query_warehousing_info[0].price
              this.WarehouseInfo.warehouseInfoDate[i].all_price = (this.stockInCount(this.WarehouseInfo.warehouseInfoDate[i]) * this.WarehouseInfo.warehouseInfoDate[i].query_warehousing_info[0].price).toFixed(2)
            }else{
             this.WarehouseInfo.warehouseInfoDate[i].price = ""
             this.WarehouseInfo.warehouseInfoDate[i].all_price = ""
            }


         }

       
      });
    },

    GetAllGoodType: function() {
      GetAllGoodType().then(response => {
        if (response.data.state == 0) {
          this.$message.error(response.data.msg);
          return false;
        } else {
           var obj = {
            id:0,
            type_name:'全部'
          }
          this.types.push(obj)
          for (let i = 0; i < response.data.data.goodType.length; i++) {
            this.goodType.push(response.data.data.goodType[i]);
            this.types.push(response.data.data.goodType[i])
          }

          console.log("商品类型",this.types)
        }
      });
    },
    GetAllGoodInfo: function() {
      GetAllGoodInfo().then(response => {
        if (response.data.state == 0) {
          this.$message.error(response.data.msg);
          return false;
        } else {
          for (let i = 0; i < response.data.data.goodInfo.length; i++) {
            this.goodInfo.push(response.data.data.goodInfo[i]);
          }
        }
      });
    },
    handleBack: function() {
      this.$router.go(-1);
    },
    handleSizeChange(val) {
      this.limit = val;

      this.getlist()
      this.getStockDrugCount()
      
    },
    handleCurrentChange(val) {
      this.page = val;
       this.getlist()
        this.getStockDrugCount()
    },
    calculate: function(val) {
      return Math.round(parseFloat(val) * 100) / 100;
    },
    startTimeChange: function(val) {
      window.sessionStorage.removeItem('start_time')
     
      var time = this.getTimestamp(val) - this.getTimestamp(this.end_time);
      console.log("ime2222",time)
      if (time > 0) {
        this.$message.error("开始时间不能大于结束时间");
        this.start_time = "";
      } else {
        this.start_time = val
         this.getlist()
         this.getStockDrugCount()

      }
    },
    endTimeChange: function(val) {
      window.sessionStorage.removeItem('end_time')
      var time = this.getTimestamp(val) - this.getTimestamp(this.start_time);
      console.log("ime2222",time)
      if (time < 0) {
        this.$message.error("结束时间不能小于开始时间");
        this.end_time = "";
      } else {
        this.end_time = val
         this.getlist()
         this.getStockDrugCount()
      }

    },
    stockInCount: function(row) {
      let total = 0;
      for (let i = 0; i < row.query_warehousing_info.length; i++) {
        total = total + row.query_warehousing_info[i].warehousing_count;
      }
      return total;
    },
    salesReturnCount: function(row) {
      let total = 0;
      for (let i = 0; i < row.query_sales_return_info.length; i++) {
        total = total + row.query_sales_return_info[i].count;
      }
      return total;
    },
    stockOutCount: function(row) {

      let total = 0;
      for (let i = 0; i < row.query_warehouseout_info.length; i++) {
        total = total + row.query_warehouseout_info[i].count;
      }
      return total;
    },
    cancelStockCount: function(row) {
      let total = 0;
      for (let i = 0; i < row.query_cancel_stock_info.length; i++) {
        total = total + row.query_cancel_stock_info[i].count;
      }
      return total;
    },
    showStockInDetailDialog: function(val) {},
    showSaleReturnDetailDialog: function() {},
    showStockOutDetailDialog: function() {},
    showCancelStockDetailDialog: function() {},
    search: function() {
      this.getlist()
      this.getStockDrugCount()
    },

    exportList(){
         import('@/vendor/Export2Excel').then(excel => {

         const tHeader = ['耗材类型', '耗材名称', '规格&单位','进货单价','生产商','入库数量','出库数量','库存剩余量']
         const filterVal = ['type_name', 'good_name', 'unit','buy_price','prodect_name','inCount','outCount','overplus']

       
         for(let i=0;i<this.tableList.length;i++){
           this.tableList[i].type_name = this.getGoodType(this.tableList[i].good_type_id)
           this.tableList[i].unit = this.tableList[i].specification_name + "/" + this.tableList[i].packing_unit
           this.tableList[i].prodect_name = this.getManufacture(this.tableList[i].manufacturer)
           this.tableList[i].inCount =  this.getWareInfo(this.tableList[i].xt_warehouse_info)
          this.tableList[i].outCount =  this.getAutoCount(this.tableList[i].id) + this.getOutCount(this.tableList[i].id)
          // this.tableList[i].outCount = this.getWareInfo(this.tableList[i].xt_warehouse_info) - this.getOverplus(this.tableList[i].xt_warehouse_info) - this.getCancelInfo(this.tableList[i].cancel_stock_info)
          // this.tableList[i].overplus = this.getOverplus(this.tableList[i].xt_warehouse_info)
          if(this.getWareInfo(this.tableList[i].xt_warehouse_info) > 0){
            this.tableList[i].overplus = this.getWareInfo(this.tableList[i].xt_warehouse_info) - this.getAutoCount(this.tableList[i].id) - this.getOutCount(this.tableList[i].id) + this.getCancelCount(this.tableList[i].id)
          }else{
             this.tableList[i].overplus = 0
          }
          
         }
         console.log("table",this.tableList)
         const data = this.formatJson(filterVal, this.tableList)
         excel.export_json_to_excel({
           header: tHeader,
           data,
           filename: '库存查询'
         })
          this.downloadLoading = false
        })
       },
       formatJson(filterVal, jsonData) {
        return jsonData.map(v => filterVal.map(j => v[j]));
      },
      changeTypeName(){
       this.getlist()
      },
      toPrint(){
        window.sessionStorage.setItem('start_time',this.start_time)
        window.sessionStorage.setItem('end_time',this.end_time)
        this.$router.push("/stock/stockprint?start_time="+this.start_time+"&end_time="+this.end_time+"&keyword="+this.keywords+"&type_name="+this.type_name+"&page="+this.page+"&limit="+this.limit)

      },

      getUnit(id){

        var name = ""
        for(let i=0;i<this.$store.getters.good_unit.length;i++){
           if(id == this.$store.getters.good_unit[i].id){
              name = this.$store.getters.good_unit[i].name
           }
        }
        return name
      },

      getTimestamp(time) {
      // 把时间日期转成时间戳
      return new Date(time).getTime() / 1000;
    },
    getGoodType(id){
      var name = ""
      for(let i=0;i<this.goodType.length;i++){
        if(id == this.goodType[i].id){
           name = this.goodType[i].type_name
        }
      }
      return name
    },
    getlist(){
      const params = {
        page: this.page,
        limit: this.limit,
        keywords: this.keywords,
        start_time:this.start_time,
        end_time:this.end_time,
        type:this.type_name,
      };
     console.log("params",params)
      getAllStockList(params).then(response=>{
         if(response.data.state == 1){
          var list = response.data.data.list
          console.log("list22222",list)
          this.tableList = list
          var total = response.data.data.total
          console.log("total",total)
          this.total = total
           var manufacturerList = response.data.data.manufacturerList
           this.manufacturerList = manufacturerList
         }
      })
    },
    getManufacture(id){
       var name = ""
       for(let i=0;i<this.manufacturerList.length;i++){
         if(id == this.manufacturerList[i].id){
           name = this.manufacturerList[i].manufacturer_name
         }
       }
       return name
    },
    toClick(val){
       var manufacturer_name = ""
       var specification_name = ""
       for(let i=0;i<this.manufacturerList.length;i++){
          if(val.manufacturer == this.manufacturerList[i].id){
            manufacturer_name = this.manufacturerList[i].manufacturer_name  
          }
       }
      specification_name = val.specification_name + "/" + val.packing_unit
      var overCount  = this.getOverplus(val.xt_warehouse_info)
      window.sessionStorage.setItem('start_time',this.start_time)
      window.sessionStorage.setItem('end_time',this.end_time)
      this.$router.push({path:"/stock/in/stockflow?id="+val.id+"&good_name="+val.good_name+"&manufacturer="+manufacturer_name+"&specification_name="+specification_name+"&packing_unit="+val.packing_unit+"&overCount="+overCount})
    },
    toClickOne(val){
       var manufacturer_name = ""
       var specification_name = ""
       for(let i=0;i<this.manufacturerList.length;i++){
          if(val.manufacturer == this.manufacturerList[i].id){
            manufacturer_name = this.manufacturerList[i].manufacturer_name  
          }
       }
      specification_name = val.specification_name + "/" + val.packing_unit
      var overCount  = this.getOverplus(val.xt_warehouse_info)
      window.sessionStorage.setItem('start_time',this.start_time)
      window.sessionStorage.setItem('end_time',this.end_time)
      this.$router.push({path:"/stock/in/stockbatchnumber?id="+val.id+"&good_name="+val.good_name+"&manufacturer="+manufacturer_name+"&specification_name="+specification_name+"&packing_unit="+val.packing_unit+"&overCount="+overCount})
    },
    getStockDrugCount(){
        var params ={
           keywords: this.$route.query.keywords,
           start_time:this.start_time,
           end_time:this.end_time,
        }
      getStockDrugCount(params).then(response=>{
         if(response.data.state == 1){
         
           var outlist = response.data.data.outList
           console.log("出库数量",outlist)
           this.outCountList = outlist
           var autoCount = response.data.data.autoCount
           console.log("autoCount",autoCount)
           this.autoCountList = autoCount
           var totalCount = response.data.data.totalCount
           console.log("totalcount",totalCount)
           this.cancelCountList = totalCount
         }
      })
    },
    getInCount(id){
      var count= 0
     for(let i=0;i<this.countList.length;i++){
      if(id == this.countList[i].good_id){
          count = this.countList[i].count
      }
     }
     return count
    },
    getOutCount(id){
      var count = 0
      for(let i=0;i<this.outCountList.length;i++){
         if(id == this.outCountList[i].good_id){
           count = this.outCountList[i].count
         }
      }
      return count
    },
   getAutoCount(id){
     var count= 0
     for(let i=0;i<this.autoCountList.length;i++){
       if(id == this.autoCountList[i].good_id){
         count = this.autoCountList[i].count
       }
     }
     return count
   },
   getCancelCount(id){
     var count = 0
     for(let i=0;i<this.cancelCountList.length;i++){
       if(id == this.cancelCountList[i].good_id){
          count = this.cancelCountList[i].count
       }
     }
     return count
   },
   getStockCount(id){
     var stock_count = 0
     for(let i=0;i<this.countList.length;i++){
       if(id == this.countList[i].good_id){
         stock_count = this.countList[i].stock_count
       }
     }
     return stock_count
   },
   getWareInfo(arr){
     var total = 0
     if(arr.length > 0){
       for(let i=0;i<arr.length;i++){
         total += parseInt(arr[i].warehousing_count)
       }
     }else{
       total = ""
     }
     return total
   },
   getOverplus(arr){
     var total = 0
     if(arr.length > 0){
      for(let i=0;i<arr.length;i++){
        total += arr[i].stock_count
      }
     }else{
       total = ""
     }
     return total
   },
   getCancelInfo(arr){
     var total = 0
     if(arr.length > 0){
      for(let i=0;i<arr.length;i++){
        total += arr[i].count
      }
     }else{
       total = ""
     }
     return total
   }
  }
};
</script>

<style rel="stylesheet/css" lang="scss" scoped>
.information {
  border: 1px #dcdfe6 solid;
  padding: 30px 20px 30px 20px;

  .border {
    border-bottom: 1px #dcdfe6 solid;
    margin: 0px 0 20px 0;
  }
}

.title {
  background: #409eff;
  height: 44px;
  line-height: 44px;
  padding: 0 0 0 10px;
  color: #fff;
  margin: 0 0 10px 0;
}

.edit_separater {
  border-top: 1px solid rgb(233, 233, 233);
  margin-top: 15px;
  margin-bottom: 15px;
}
</style>

<style>
.sign-and-weigh-box .sign-and-weigh-box-patients .cell {
  font-size: 12px;
}

.sign-and-weigh-box .sign-and-weigh-box-patients .current-row > td {
  background: #6fb5fa;
}

.count {
  color: #bd2c00;
}
.el-table td,
.el-table th.is-leaf,
.el-table--border,
.el-table--group {
  border-color: #d0d3da;
}
.el-table--border::after,
.el-table--group::after,
.el-table::before {
  background-color: #d0d3da;
}
</style>
