<template>
  <div>
    <basic-container v-show="show" class="page-crad">
      <avue-crud ref="crud" :option="option" :data="dataList" v-model="form" :page.sync="page"
                 :search.sync="search" @search-change="searchChange" @current-change="currentChange"
                 @size-change="sizeChange" @refresh-change="refreshChange" @on-load="onLoad" :table-loading="loading"
                 @saveColumn="saveColumn" @resetColumn="resetColumn" :cell-style="cellStyle"
                 @search-criteria-switch="searchCriteriaSwitch">
        <template slot="menuLeft">
          <el-button type="primary" icon="el-icon-plus" size="small" @click.stop="newAdd()">创建单据
          </el-button>
        </template>
        <template slot-scope="{ row,index}" slot="menu">
          <el-button type="text" icon="el-icon-delete" size="small" :disabled="row.status>0"
                     @click.stop="rowDel(row, index)">删除
          </el-button>
        </template>
        <template slot-scope="{ row,index}" slot="purchaserId">
                    <span style="color: #409EFF;cursor: pointer" @click.stop="editOpen(row, 1)">{{ row.purchaser }}
                    </span>
        </template>
        <template slot="purchaserIdSearch">
          <crop-select v-model="search.purchaserId" corpType="KH" :refresh="false"></crop-select>
        </template>
        <template slot="stockTimeSearch">
          <el-date-picker v-model="search.stockTime" type="daterange" start-placeholder="开始日期"
                          end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd">
          </el-date-picker>
        </template>
        <template slot-scope="{ row,index}" slot="sysNo">
                    <span style="color: #409EFF;cursor: pointer" @click.stop="editOpen(row, 1)">{{ row.sysNo }}
                    </span>
        </template>
        <template slot-scope="{ row,index}" slot="corpId">
                    <span>{{ row.corpName }}
                    </span>
        </template>
      </avue-crud>
    </basic-container>
    <el-dialog title="盘点" :visible.sync="inStockVisible" width="70%" @close="close" append-to-body>
            <span>
                <avue-crud ref="crud2" v-model="form2" :data="itemData" :option="itemOption" :page.sync="page2"
                           :search.sync="search2" @search-change="searchChange2" @current-change="currentChange2"
                           @size-change="sizeChange2" @refresh-change="refreshChange2" @on-load="onLoad2"
                           :table-loading="loading2" :cell-style="cellStyle" @selection-change="selectionChange"
                           @search-criteria-switch="searchCriteriaSwitch2">
                    <template slot="purchaserIdSearch">
                        <crop-select v-model="search2.purchaserId" corpType="KH" :refresh="false"></crop-select>
                    </template>
                    <template slot="corpIdSearch">
                        <crop-select v-model="search2.corpId" corpType="GYS" :refresh="false"></crop-select>
                    </template>
                    <template slot-scope="{ row,index}" slot="purchaserId">
                        <span>{{ row.purchaser }}
                        </span>
                    </template>
                    <template slot-scope="{ row,index}" slot="corpId">
                        <span>{{ row.corpName }}
                        </span>
                    </template>
                    <template slot="stockTimeSearch">
                        <el-date-picker v-model="search2.stockTime" type="daterange" start-placeholder="开始日期"
                                        end-placeholder="结束日期" format="yyyy-MM-dd" value-format="yyyy-MM-dd">
                        </el-date-picker>
                    </template>
                </avue-crud>
            </span>
      <span slot="footer" class="dialog-footer">
                <el-button @click="inStockVisible= false">取 消</el-button>
                <el-button type="primary" @click="generate">生 成</el-button>
            </span>
    </el-dialog>
    <detail-page @goBack="goBack" :detailData="detailData" v-if="!show"></detail-page>
  </div>
</template>

<script>
import {getList, remove, getStoragetree} from "@/api/purchasingManagement/inStock";
import option from "./config/mainList.json";
import itemOption from "./config/mainList2.json";
import detailPage from "./detailsPage";
import _ from "lodash";

export default {
  name: "instock",
  data() {
    return {
      itemOption: itemOption,
      search: {},
      search2: {},
      form: {},
      form2: {},
      option: {},
      dataList: [],
      itemData: [],
      page: {
        pageSize: 20,
        currentPage: 1,
        total: 0,
        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
      },
      page2: {
        pageSize: 20,
        currentPage: 1,
        total: 0,
        pageSizes: [10, 20, 30, 40, 50, 100, 200, 300, 400, 500]
      },
      show: true,
      detailData: {},
      loading: false,
      loading2: false,
      searchShow: true,
      inStockVisible: false,
      selectionList: [],
    };
  },
  components: {detailPage},
  async created() {
    this.option = await this.getColumnData(this.getColumnName(196), option);
    this.option.height = window.innerHeight - 210;
    this.itemOption.height = window.innerHeight - 410;

    this.getWorkDicts("financing_status").then(res => {
      this.findObject(this.itemOption.column, "status").dicData =
          res.data.data;
    });
    this.getWorkDicts("CMY_business_type").then(res => {
      this.findObject(this.itemOption.column, "businessType").dicData =
          res.data.data;
    });
    getStoragetree().then(res => {
      this.findObject(this.itemOption.column, "storageId").dicData =
          res.data.data;
    })
    this.getAllWorkDicts()
    if (this.$route.query.check && this.show) {
      this.editOpen({id: this.$route.query.check.srcBillId}, 1)
      this.show = false;
    }
  },
  activated() {
    setTimeout(() => {
      if (this.$route.query.check && this.show) {
        this.editOpen({id: this.$route.query.check.srcBillId}, 1)
        this.show = false;
      }
    }, 100);
  },
  methods: {
    getAllWorkDicts() {
      this.getWorkDicts("approval_status").then(res => {
        this.findObject(this.option.column, "status").dicData =
            res.data.data;
      });
      this.getWorkDicts("CMY_business_type").then(res => {
        this.findObject(this.option.column, "businessType").dicData =
            res.data.data;
      });
      getStoragetree().then(res => {
        this.findObject(this.option.column, "storageId").dicData =
            res.data.data;
      })
    },
    searchCriteriaSwitch(type) {
      if (type) {
        this.option.height = this.option.height - 191;
      } else {
        this.option.height = this.option.height + 191;
      }
      this.$refs.crud.getTableHeight();
    },
    searchCriteriaSwitch2(type) {
      if (type) {
        this.itemOption.height = this.itemOption.height - 191;
      } else {
        this.itemOption.height = this.itemOption.height + 191;
      }
      this.$refs.crud2.getTableHeight();
    },
    cellStyle() {
      return "padding:0;height:40px;";
    },
    rowDel(row, index, done) {
      this.$confirm("确定删除数据?", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
        type: "warning"
      }).then(() => {
        remove({id: row.id}).then(res => {
          this.$message({
            type: "success",
            message: "删除成功!"
          });
        })
            .finally(() => {
              this.onLoad(this.page, this.search);
            });

      });
    },
    selectionChange(list) {
      this.selectionList = list;
    },
    generate() {
      if (this.selectionList.length == 1) {
        this.detailData = {
          generateId: this.selectionList[0].id,
        }
        this.show = false
        this.inStockVisible = false
      } else {
        this.$message.error('请选择一条数据')
      }
    },
    editOpen(row, status) {
      this.detailData = {
        id: row.id,
        status: status
      };
      this.show = false;
    },
    //点击搜索按钮触发
    searchChange(params, done) {
      this.page.currentPage = 1;
      this.onLoad(this.page, params);
      done();
    },
    searchChange2(params, done) {
      this.page2.currentPage = 1;
      this.onLoad2(this.page, params);
      done();
    },
    currentChange(val) {
      this.page.currentPage = val;
    },
    currentChange2(val) {
      this.page2.currentPage = val;
    },
    sizeChange(val) {
      this.page.currentPage = 1;
      this.page.pageSize = val;
    },
    sizeChange2(val) {
      this.page2.currentPage = 1;
      this.page2.pageSize = val;
    },
    onLoad(page, params) {
      if (this.search.stockTime && this.search.stockTime.length > 0) {
        params = {
          ...params,
          createStartTime: this.search.stockTime[0] + ' ' + "00:00:00",
          createEndTime: this.search.stockTime[1] + ' ' + "23:59:59"
        };
      }
      let data = this.deepClone(Object.assign({}, params, this.search));
      delete data.stockTime;
      data.billType = "PD"
      this.loading = true;
      getList(page.currentPage, page.pageSize, data)
          .then(res => {
            this.dataList = res.data.data.records ? res.data.data.records : [];
            this.page.total = res.data.data.total;
          })
          .finally(() => {
            this.loading = false;
          });
    },
    onLoad2(page, params) {
      if (this.search2.stockTime && this.search2.stockTime.length > 0) {
        params = {
          ...params,
          createStartTime: this.search2.stockTime[0] + ' ' + "00:00:00",
          createEndTime: this.search2.stockTime[1] + ' ' + "23:59:59"
        };
      }
      let data = this.deepClone(Object.assign({}, params, this.search2));
      delete data.stockTime;
      data.billType = "RK"
      data.statuss = 5
      this.loading2 = true;
      data.pdStatus = 'PD'
      getList(page.currentPage, page.pageSize, data)
          .then(res => {
            this.itemData = res.data.data.records ? res.data.data.records : [];
            this.page2.total = res.data.data.total;
          })
          .finally(() => {
            this.loading2 = false;
          });
    },
    refreshChange() {
      this.onLoad(this.page, this.search);
    },
    refreshChange2() {
      this.onLoad2(this.page2, this.search2);
    },
    newAdd() {
      this.inStockVisible = true;
    },
    goBack() {
      if (this.$route.query.check) {
        this.$router.$avueRouter.closeTag(this.$route.fullPath);
        this.$router.push({
          path: "/InventoryManagement/inventory/index"
        });
      }
      this.detailData = this.$options.data().detailData;
      this.show = true;
      this.onLoad(this.page, this.search);
    },
    close() {
      this.$refs.crud2.refreshTable()
    },
    async saveColumn() {
      const inSave = await this.saveColumnData(
          this.getColumnName(196),
          this.option
      );
      if (inSave) {
        this.$nextTick(() => {
          this.$refs.crud.doLayout();
        });
        this.$message.success("保存成功");
        //关闭窗口
        this.$refs.crud.$refs.dialogColumn.columnBox = false;
      }
    },
    async resetColumn() {
      this.option = option;
      const inSave = await this.delColumnData(this.getColumnName(196), this.option);
      if (inSave) {
        this.$nextTick(() => {
          this.$refs.crud.doLayout();
        });
        this.getAllWorkDicts()
        this.$message.success("重置成功");
        this.$refs.crud.$refs.dialogColumn.columnBox = false;
      }
    }
  }
};
</script>

<style scoped>
::v-deep .select-component {
  display: flex;
}

.page-crad ::v-deep .basic-container__card {
  height: 94.2vh;
}

.itemTable ::v-deep .el-table {
  width: 738px;
}
</style>
