<!--大众备件结算核对-->
<template>
  <div class="cr-body-content">
    <!--功能栏-->
    <!-- 搜索 -->
    <div style="float: left">
      <flexbox class="content-header">
        <JobSelectVerson
          :options="JobVersionList"
          style="width: 150px; margin-left: -10px"
          class="search-container"
          @value-change="JobVersionValue"
        ></JobSelectVerson>
        <el-button
          class="filter-item"
          size="mini"
          type="primary"
          icon="el-icon-plus"
          @click="handleCreate"
          >统计
        </el-button>
        <el-button
          class="filter-item"
          type="danger"
          icon="el-icon-delete"
          size="mini"
          @click="handleDelete()"
          >删除(支持批量)</el-button
        >
        <el-button
          class="filter-item"
          type="success"
          icon="el-icon-check"
          size="mini"
          @click="handleConfirm()"
          >已确认(支持批量)</el-button
        >
        <el-button
          class="filter-item"
          type="warning"
          icon="el-icon-edit"
          size="mini"
          v-loading="formLoading"
          @click="handleCreateBills()"
          >生成出库单(支持批量)</el-button
        >
        <!-- <el-button
          class="filter-item"
          size="mini"
          type="primary"
          icon="el-icon-plus"
          @click="handleCreateNoBill"
          >备件未结明细统计
        </el-button> -->
      </flexbox>
    </div>
    <!-- 刷新 -->
    <div style="float: right">
      <flexbox class="content-header">
        <el-tooltip
          class="item"
          effect="dark"
          content="手动刷新"
          placement="top"
        >
          <el-button
            size="mini"
            circle
            icon="el-icon-refresh"
            @click="refresh()"
          />
        </el-tooltip>

        <span style="margin-left: 10px; color: #ff5640; float: right"
          >说明:每间隔3分钟进行自动刷新!</span
        >
      </flexbox>
    </div>

    <!--主页面表格渲染-->
    <el-table
      ref="multipleTable"
      v-loading="listLoading"
      element-loading-text="拼命加载中..."
      element-loading-spinner="el-icon-loading"
      class="cr-table"
      :data="list"
      :height="tableHeight"
      :cell-style="cellStyle"
      size="small"
      stripe
      border
      highlight-current-row
      style="width: 100%"
      @row-click="handleRowClick"
      @selection-change="handleSelectionChange"
      @filter-change="filterChange"
      @cell-dblclick="dblhandleCurrentChange"
    >
      <el-table-column type="selection" width="44px"></el-table-column>
      <el-table-column
        v-for="(item, index) in getDefaultField"
        :key="index"
        :prop="item.prop"
        :label="item.label"
        :min-width="item.width"
        :formatter="fieldFormatter"
        sortable
        show-overflow-tooltip
        :gutter="0"
      >
        <template slot="header" slot-scope="scope">
          {{ scope.column.label }}
        </template>
      </el-table-column>

      <!-- 在线编辑说明 -->
      <el-table-column label="说明" width="400" align="center">
        <template slot-scope="scope">
          <el-input
            ref="inputRef"
            v-if="scope.row.isEditCell"
            v-model="scope.row.remark"
            class="el-input"
            v-focus
            @blur="cellBlur(scope.row, scope.column)"
          />
          <span v-else>{{ scope.row.remark }}</span>
          <el-button
            style="margin-left: 5px"
            v-if="scope.row.isEditCell"
            type="success"
            icon="el-icon-check"
            size="small"
            circle
            @click="submitName(scope.row)"
          ></el-button>
          <el-button
            v-show="scope.row.isEditCell"
            class="cancel-btn"
            size="mini"
            icon="el-icon-refresh"
            type="warning"
            @click.native.prevent="handleCancel(scope.row)"
          >
            cancel
          </el-button>
        </template>
      </el-table-column>
      <!-- 状态 -->
      <el-table-column
        prop="stateName"
        label="状态(单击箭头过滤)"
        width="165"
        column-key="stateName"
        align="center"
        :filters="[
          { text: '执行完成(任务成功)', value: 'Succeeded' },
          { text: '执行完成(任务失败)', value: 'Failed' },
          { text: '执行中', value: 'Processing' },
          { text: '等待执行', value: 'Scheduled' },
        ]"
        filter-placement="bottom-end"
        :filter-method="filterHandler"
      >
        <template slot-scope="scope">
          <el-tag
            v-for="(item, index) in stateNameCateMap"
            v-show="scope.row.stateName == item.value"
            :key="index"
            :type="item.cssName"
          >
            {{ item.label }}
          </el-tag>
        </template>
      </el-table-column>
      <!-- 操作 -->
      <el-table-column label="操作" align="center" width="250">
        <template slot-scope="scope">
          <div align="center">
            <!-- <el-button
              v-if="scope.row.actionName == '导出'"
              size="mini"
              type="text"
              @click="handleDownload(scope.row)"
              icon="el-icon-edit"
              >下载</el-button
            > -->
            <el-button
              v-if="
                scope.row.actionName == '导出' &&
                scope.row.stateName == 'Succeeded' &&
                scope.row.downFileName != ''
              "
              size="mini"
              type="text"
              @click="handleDownload(scope.row)"
              icon="el-icon-edit"
              >下载</el-button
            >
            <el-button
              v-if="
                scope.row.actionName == '导出' &&
                scope.row.error != '' &&
                scope.row.stateName == 'Succeeded'
              "
              size="mini"
              type="text"
              @click="handleDownload(scope.row)"
              icon="el-icon-edit"
              >检验失败,下载</el-button
            >
          </div>
        </template>
      </el-table-column>
    </el-table>

    <!-- 分页控件 style="margin-top: -25px;margin-bottom:-25px;float:right;"-->
    <div class="table-footer">
      <pagination
        v-show="totalCount > 0"
        :total="totalCount"
        :page.sync="page"
        :limit.sync="listQuery.MaxResultCount"
        @pagination="getList"
      />
    </div>

    <!--统计功能表单渲染-->
    <el-dialog
      :visible.sync="dialogFormVisible"
      :close-on-click-modal="false"
      :title="formTitle"
      append-to-body
      width="680px"
    >
      <el-form
        ref="formCount"
        :inline="true"
        :rules="rules"
        :model="formCount"
        size="mini"
      >
        <el-row>
          <el-col :md="4" :xs="24">
            <el-form-item label="选择版本" required />
          </el-col>
          <el-col :md="20" :xs="24" style="margin-left: -80px">
            <el-form-item prop="versionValue">
              <el-select
                v-model="formCount.versionValue"
                size="medium"
                clearable
                style="width: 188px; margin-right: 15px"
                placeholder="请选择"
              >
                <el-option
                  v-for="item in versionList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :md="4" :xs="24">
            <el-form-item label="采购订单号" />
          </el-col>
          <el-col :md="20" :xs="24" style="margin-left: -80px">
            <el-form-item prop="purchaseOrderNo">
              <el-input
                type="textarea"
                v-model="formCount.purchaseOrderNo"
                style="width: 450px"
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :md="4" :xs="24">
            <el-form-item label="订单日期:" />
          </el-col>
          <el-col :md="10" :xs="24" style="margin-left: -80px">
            <el-form-item>
              <el-date-picker
                v-model="startTime"
                type="datetime"
                size="small"
                :picker-options="pickerOptions0"
                @change="getdateValue"
                value-format="yyyy-MM-dd HH:mm:ss"
                default-time="00:00:00"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :md="10" :xs="24" style="margin-left: -40px">
            <el-form-item>
              <el-date-picker
                v-model="endTime"
                type="datetime"
                :picker-options="pickerOptions1"
                size="small"
                @change="getdateVal"
                value-format="yyyy-MM-dd HH:mm:ss"
                default-time="23:59:59"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>

        <el-row>
          <el-col :md="4" :xs="24">
            <el-form-item label="厂内零件号" />
          </el-col>
          <el-col :md="20" :xs="24" style="margin-left: -80px">
            <el-form-item prop="sapCode">
              <el-input
                v-model="formCount.sapCode"
                style="width: 450px"
                type="textarea"
                :rows="4"
                placeholder="多个厂内零件号,请以回车换行形式添加!"
              />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <!-- <el-button type="text" @click="dialogFormVisible = false"
          >取消</el-button
        > -->
        <el-button @click="resetForm('formCount')">重置</el-button>
        <el-button v-loading="formLoading" type="primary" @click="save"
          >确认</el-button
        >
      </div>
    </el-dialog>

    <!--统计-备件无条码报表-->
    <el-dialog
      :visible.sync="dialogFormNoBillVisible"
      :close-on-click-modal="false"
      :title="formTitle"
      append-to-body
      width="680px"
    >
      <el-form
        ref="formNoBill"
        :inline="true"
        :rules="rulesNoBill"
        :model="formNoBill"
        size="mini"
      >
        <el-row>
          <el-col :md="4" :xs="24">
            <el-form-item label="选择版本" required />
          </el-col>
          <el-col :md="20" :xs="24" style="margin-left: -80px">
            <el-form-item prop="versionValue">
              <el-select
                v-model="formNoBill.versionValue"
                size="medium"
                clearable
                style="width: 188px; margin-right: 15px"
                placeholder="请选择"
              >
                <el-option
                  v-for="item in versionList"
                  :key="item.value"
                  :label="item.label"
                  :value="item.value"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>

        <el-row>
          <el-col :md="4" :xs="24">
            <el-form-item label="查询日期:" />
          </el-col>
          <el-col :md="10" :xs="24" style="margin-left: -80px">
            <el-form-item>
              <el-date-picker
                v-model="startTimeNoBill"
                type="datetime"
                size="small"
                :picker-options="pickerOptions4"
                @change="getdateValue"
                value-format="yyyy-MM-dd HH:mm:ss"
                default-time="00:00:00"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>
          <el-col :md="10" :xs="24" style="margin-left: -40px">
            <el-form-item>
              <el-date-picker
                v-model="endTimeNoBill"
                type="datetime"
                :picker-options="pickerOptions5"
                size="small"
                @change="getdateVal"
                value-format="yyyy-MM-dd HH:mm:ss"
                default-time="23:59:59"
              >
              </el-date-picker>
            </el-form-item>
          </el-col>
        </el-row>

        <el-row>
          <!-- <el-col :md="4" :xs="24">
            <el-form-item label="客户零件号" />
          </el-col>
          <el-col :md="10" :xs="24" style="margin-left: -80px">
            <el-form-item prop="materialCode">
              <el-input
                v-model="formCount.materialCode"
                style="width: 170px"
                type="textarea"
                :rows="4"
                placeholder="多个客户零件号,请以回车换行形式添加!"
              />
            </el-form-item>
          </el-col> -->
          <el-col :md="4" :xs="24">
            <el-form-item label="厂内零件号" />
          </el-col>
          <el-col :md="10" :xs="24" style="margin-left: -80px">
            <el-form-item prop="sapCode">
              <el-input
                v-model="formNoBill.sapCode"
                style="width: 450px"
                type="textarea"
                :rows="4"
                placeholder="多个厂内零件号,请以回车换行形式添加!"
              />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <div slot="footer" class="dialog-footer">
        <el-button @click="resetNoBillForm('formNoBill')">重置</el-button>
        <el-button
          v-loading="formNoBillLoading"
          type="primary"
          @click="saveNoBill"
          >确认</el-button
        >
      </div>
    </el-dialog>
  </div>
</template>

<script>
import Pagination from "@/components/Pagination"; // secondary package based on el-pagination
import permission from "@/directive/permission/index.js";
import { downloadFile } from "@/utils/crmindex.js";
import CRMTableHead from "../../components/CRMTableHead";
import moment from "moment";
import JobSelectVerson from "@/components/CreateCom/Job-Select.vue";

export default {
  name: "SparePartReport",
  components: { Pagination, CRMTableHead, JobSelectVerson },
  directives: { permission },

  data() {
    return {
      crmType: "backJob",
      rules: {
        versionValue: [
          { required: true, message: "必须输入!", trigger: "change" },
        ],
      },
      rulesNoBill: {
        versionValue: [
          { required: true, message: "必须输入!", trigger: "change" },
        ],
      },
      pickerOptionsCp5: {
        disabledDate: (time) => {
          let now = new Date();
          let monthEndDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
          let timeEnd = Date.parse(monthEndDate);
          if (timeEnd) {
            return (
              time.getTime() > time.getTime() > timeEnd - 8.64e7 ||
              time.getTime() > timeEnd + 60 * 60 * 24 * 1000
            ); //能选上最后一天
          }
        },
      },
      pickerOptions0: {
        disabledDate: (time) => {
          //if (this.endTime != "") {
          //return  time.getTime() >= new Date(this.endTime).getTime();
          return time.getTime() > new Date(this.endTime).getTime();
          //}
        },
      },
      pickerOptions1: {
        disabledDate: (time) => {
          //return time.getTime() <= new Date(this.startTime).getTime() || time.getTime() > Date.now();
          return time.getTime() <= new Date(this.startTime).getTime();
        },
      },

      pickerOptions2: {
        disabledDate: (time) => {
          //if (this.endTime != "") {
          return time.getTime() > new Date(this.cp5endTime).getTime();
          //}
        },
      },
      pickerOptions3: {
        disabledDate: (time) => {
          return time.getTime() <= new Date(this.cp5startTime).getTime();
        },
      },

      pickerOptions4: {
        disabledDate: (time) => {
          //if (this.endTime != "") {
          return time.getTime() > new Date(this.endTimeNoBill).getTime();
          //}
        },
      },
      pickerOptions5: {
        disabledDate: (time) => {
          return time.getTime() <= new Date(this.startTimeNoBill).getTime();
        },
      },
      startTime: "",
      endTime: "",
      startTimeNoBill: "",
      endTimeNoBill: "",
      pickerOptionsCp7: {
        disabledDate: (time) => {
          let now = new Date();
          let monthEndDate = new Date(now.getFullYear(), now.getMonth() + 1, 0);
          let timeEnd = Date.parse(monthEndDate);
          if (timeEnd) {
            return (
              time.getTime() > time.getTime() > timeEnd - 8.64e7 ||
              time.getTime() > timeEnd + 60 * 60 * 24 * 1000
            ); //能选上最后一天
          }
        },
      },
      datetime5: [],
      JobVersionList: [],
      datetime7: [],
      checkedCities: [0],
      selectValue: "",
      selectNameValue: "",
      radio: "0", //结算状态:0未结 1部分结算
      versionList: [],
      materialGroupList: [],
      getmaterialGroupValue: "",
      // 是否显示详细弹出层
      openView: false,
      versionValue: "",
      materialGroupValue: "",
      formTitle: "",
      timer: null, //定时器名称
      //当前位置
      activeIndex: 1,
      //默认显示基本信息
      activeName: "first",
      //步骤条步数
      stepList: [
        {
          title: "等待执行",
          icon: "el-icon-sort",
        },
        {
          title: "执行中",
          icon: "el-icon-refresh",
        },
        {
          title: "执行完成",
          icon: "el-icon-check",
        },
      ],
      customerInfos: "",
      searchContent: "", // 输入内容
      form: {},
      formNoBill: {},
      formCount: {
        startTime: "",
        endTime: "",
        cp5startTime: "",
        cp5endTime: "",
        // name: "未结算对比",
        // settledate: "",
        // materialCode: "",
        // sapMaterialCode: "",
        // chassisNumber: "",
        // kennCode: "",
        version: undefined,
      },
      cp5startTime: "",
      cp5endTime: "",
      list: null,
      totalCount: 0,
      listLoading: true,
      formLoading: false,
      formNoBillLoading: false,
      // 高级搜索
      filterObj: {
        type: Object,
        default: () => {
          return {};
        },
      },
      listExportQuery: {
        version: "",
        purchaseOrderNo: undefined,
        begin: undefined,
        end: undefined,
        sapCode: undefined,
      },
      listNoBillExportQuery: {
        version: "",
        sapCode: undefined,
      },
      listQuery: {
        taskId: "",
        name: "",
      },
      listBillQuery: {
        version: "",
        guids: [],
      },
      page: 1,
      dialogFormVisible: false,
      dialogFormNoBillVisible: false,
      multipleSelection: [],
      tableHeight: document.documentElement.clientHeight - 260,
      isEdit: false,
      menuCateMap: [
        { label: "导出", value: "导出", cssName: "warning" },
        { label: "消息", value: "消息", cssName: "info" },
      ],
      stateNameCateMap: [
        { label: "执行完成(任务成功)", value: "Succeeded", cssName: "success" },
        { label: "执行中...", value: "Processing", cssName: "primary" },
        { label: "执行完成(任务失败)", value: "Failed", cssName: "danger" },
        { label: "等待执行", value: "Scheduled", cssName: "primary" },
      ],
    };
  },
  mounted() {
    var self = this;
    window.onresize = function () {
      var offsetHei = document.documentElement.clientHeight;
      self.tableHeight = offsetHei - 190;
    };
    this.timer = setInterval(() => {
      this.listQuery.taskId = "";
      this.listQuery.stateName = "";
      setTimeout(this.getList, 0);
    }, 1000 * 180); //30秒刷新一次页面
    // 通过$once来监听定时器,在beforeDestroy钩子可以被清除。
    this.$once("hook:beforeDestroy", () => {
      clearInterval(timer);
    });
    //this.disabledDateCp5();
  },
  created() {
    this.getAllVersionList();
    this.getMaterialGroup();
    this.getList();
    this.getJobVersionInfo();
    // this.getCurrentMonthFirst();
    // this.getCurrentMonthLast();
  },
  beforeDestroy() {
    clearInterval(this.timer);
    this.timer = null;
  },
  computed: {
    /* 主表头 */
    getDefaultField() {
      var tempsTabs = [];
      tempsTabs.push({
        label: "版本号",
        prop: "type",
        width: 120,
      });
      tempsTabs.push({
        label: "单据流水号",
        prop: "taskId",
        width: 140,
      });
      // tempsTabs.push({
      //   label: "模块名称",
      //   prop: "name",
      //   width: 170,
      // });
      tempsTabs.push({
        label: "创建人",
        prop: "email",
        width: 110,
      });
      tempsTabs.push({
        label: "创建时间",
        prop: "createdAt",
        width: 150,
      });

      tempsTabs.push({
        label: "审批状态",
        prop: "fileName",
        width: 350,
      });
      return tempsTabs;
    },
  },
  methods: {
    dblhandleCurrentChange(row, column, cell, event) {
      if (column.label === "说明") {
        row.isEditCell = true;
        this.$set(row, "isEditCell", true);
        this.$nextTick(() => {
          //自动获取焦点 element组件autofocus失效
          //this.$refs.inputRef.focus();
          this.$refs["inputRef"].focus();
        });
      }
      this.list = this.list.filter((item) => {
        return item;
      });
    },
    // 可以编辑框失去焦点
    cellBlur(row, column) {
      row.isEditCell = false;
      this.$set(row, "isEditCell", false);
    },
    // 在线编辑中提交
    submitName(row) {
      let getguid = row.id;
      let getremark = row.remark;
      this.$axios
        .gets("/api/settleaccount/Job/updateRemark", {
          p_id: getguid,
          remark: getremark,
        })
        .then((response) => {
          if (response == true) {
            this.$notify({
              title: "成功",
              message: "更新成功",
              type: "success",
              duration: 2000,
            });
            this.getList();
          }
        })
        .catch(() => {
          this.listLoading = false;
        });
    },
    // 取消
    handleCancel(row) {
      row.isEditCell = false;
      //row.stockQty = row.originalstockQty;
      this.$set(row, "isEditCell", false);
      // this.$message({
      //   message: "取消后,恢复当前原值!",
      //   type: "warning",
      // });
      this.getList();
    },
    //cp5
    getdateValueCp5(val) {
      this.cp5startTime = val;
      //this.getbalanceIndexData();
    },
    getdateValCp5(val) {
      this.cp5endTime = val;
    },
    handleSelectionChange(val) {
      this.multipleSelection = val;
    },
    //批量删除
    handleDelete(row) {
      this.isEdit = false;
      if (this.multipleSelection.length == 0) {
        this.$message({
          message: "至少选择一行!",
          type: "warning",
        });
        return;
      } else {
        var getbillNum = "";
        //判断已经生成出库单的不能执行删除操作
        this.multipleSelection.forEach((element) => {
          let state = element.fileName;
          if (state != "" && state != "已确认") {
            this.isEdit = true;
            getbillNum += state + ",";
          }
        });
      }
      if (this.isEdit == true) {
        this.$message({
          message:
            "已经生成出库单的不能删除!单号:" +
            getbillNum.substr(0, getbillNum.length - 1),
          type: "warning",
        });
        return;
      } else {
        var params = [];
        let myalert = ""; //声明变量,其变量必须在此声明后使用
        if (row) {
          //单行
          params.push(row.id);
          myalert = row.name;
        } else {
          //多选
          this.multipleSelection.forEach((element) => {
            let id = element.id;
            params.push(id);
          });
          myalert = "选中项";
        }
        this.$confirm("是否删除" + myalert + "?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        })
          .then(() => {
            this.$axios
              .posts("/api/settleaccount/Job/delete", params)
              .then((response) => {
                const index = this.list.indexOf(row);
                this.$notify({
                  title: "成功",
                  message: "删除成功",
                  type: "success",
                  duration: 2000,
                });
                this.getList();
              });
          })
          .catch(() => {
            this.$message({
              type: "info",
              message: "已取消操作",
            });
          });
      }
    },
    //已确认
    handleConfirm(row) {
      this.isEdit = false;
      if (this.multipleSelection.length == 0) {
        this.$message({
          message: "至少选择一行!",
          type: "warning",
        });
        return;
      } else {
        var getbillNum = "";
        var getTaskState = "";
        //判断已经生成出库单的不能再生成出库操作
        this.multipleSelection.forEach((element) => {
          let state = element.fileName;
          if (state != "" && state != "已确认") {
            this.isEdit = true;
            getbillNum += state + ",";
          } else if (element.stateName != "Succeeded") {
            this.isTaskSuccess = true;
            getTaskState += element.taskId;
          }
        });
      }
      //任务不成功的不能单击确认
      if (this.isTaskSuccess == true) {
        this.$message({
          message:
            "有未成功的任务,不能单击确认!:" +
            getTaskState.substr(0, getTaskState.length - 1),
          type: "warning",
        });
        return;
      }
      if (this.isEdit == true) {
        this.$message({
          message:
            "已经生成出库单的不能再确认!单号:" +
            getbillNum.substr(0, getbillNum.length - 1),
          type: "warning",
        });
        return;
      } else {
        var params = [];
        let myalert = ""; //声明变量,其变量必须在此声明后使用
        if (row) {
          //单行
          params.push(row.id);
          myalert = row.name;
        } else {
          //多选
          this.multipleSelection.forEach((element) => {
            let id = element.id;
            params.push(id);
          });
          myalert = "选中项";
        }
        this.$confirm("是否确认" + myalert + "?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        })
          .then(() => {
            this.$axios
              .posts(
                "/api/settleaccount/wmsSharePartoutput/WmsSharePartOutPutAudit",
                params
              )
              .then((response) => {
                const index = this.list.indexOf(row);
                this.$notify({
                  title: "成功",
                  message: "操作成功",
                  type: "success",
                  duration: 2000,
                });
                this.getList();
              });
          })
          .catch(() => {
            this.$message({
              type: "info",
              message: "已取消操作",
            });
          });
      }
    },
    //出库单
    handleCreateBills(row) {
      this.isEdit = false;
      if (this.multipleSelection.length == 0) {
        this.$message({
          message: "至少选择一行!",
          type: "warning",
        });
        return;
      } else {
        var getbillNum = "";
        var getTaskState = "";
        //判断已经生成出库单的不能再生成出库操作
        this.multipleSelection.forEach((element) => {
          let state = element.fileName;
          if (state != "" && state != "已确认") {
            this.isEdit = true;
            getbillNum += state + ",";
          } else if (element.stateName != "Succeeded") {
            this.isTaskSuccess = true;
            getTaskState += element.taskId;
          }
        });
      }
      //任务不成功的不能单击确认
      if (this.isTaskSuccess == true) {
        this.$message({
          message:
            "有未成功的任务,不能单击确认!:" +
            getTaskState.substr(0, getTaskState.length - 1),
          type: "warning",
        });
        return;
      }
      if (this.isEdit == true) {
        this.$message({
          message:
            "已经生成出库单的不能再重新生成!单号:" +
            getbillNum.substr(0, getbillNum.length - 1),
          type: "warning",
        });
        return;
      } else {
        var params = [];
        let myalert = ""; //声明变量,其变量必须在此声明后使用
        if (row) {
          //单行
          params.push(row.id);
          myalert = row.name;
        } else {
          //多选
          this.multipleSelection.forEach((element) => {
            let id = element.id;
            params.push(id);
          });
          myalert = "选中项";
        }
        this.listBillQuery.guids = params;
        this.listBillQuery.version = this.JobversionValue;
        console.log(
          "大众备件出库单条件:" + JSON.stringify(this.listBillQuery)
        );
        this.$confirm("是否确认出库" + myalert + "?", "提示", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        })
          .then(() => {
            this.formLoading = true;
            this.$axios
              .posts(
                "/api/settleaccount/wmsSharePartoutput/WmsSharePartOutPut",
                this.listBillQuery
              )
              .then((response) => {
                const index = this.list.indexOf(row);
                this.$notify({
                  title: "成功",
                  message: "生成成功",
                  type: "success",
                  duration: 2000,
                });

                this.getList();
                this.formLoading = false;
              })
              .catch(() => {
                this.formLoading = false;
              });
          })
          .catch(() => {
            this.$message({
              type: "info",
              message: "已取消操作",
            });
          });
      }
    },
    //版本下拉列表选择项
    JobVersionValue(params) {
      //版本下拉选择
      this.JobversionValue = params.value;
      this.getList();
    },
    getJobVersionInfo() {
      //取版本列表信息
      //this.listLoading = true;
      this.listQuery.SkipCount = (this.page - 1) * 1000;
      this.$axios
        .posts("/api/settleaccount/Job/versionlist", this.listQuery)
        .then((response) => {
          this.JobVersionList = [];
          response.forEach((element) => {
            let options = {};
            options.value = element;
            options.label = element;
            this.JobVersionList.push(options);
          });
          if (JSON.stringify(this.JobVersionList) != "[]") {
            //因版本下拉有默认值,所以详表要自动绑定子表数据
            this.JobversionValue = this.JobVersionList[0].value;
            this.JobversionValueVerson = this.JobVersionList[0].label;
            this.getList();
          }
        })
        .catch(() => {
          //this.listLoading = false;
        });
    },
    getdateValue(val) {
      this.startTime = val;
    },
    getdateVal(val) {
      this.endTime = val;
    },

    getCurrentMonthFirst() {
      var date = new Date();
      date.setDate(1);
      var month = parseInt(date.getMonth() + 1);
      var day = date.getDate();
      if (month < 10) month = "0" + month;
      if (day < 10) day = "0" + day;
      this.startTime = date.getFullYear() + "-" + month + "-" + day;
    },
    getCurrentMonthLast() {
      var date = new Date();
      var year = date.getFullYear();
      var month = date.getMonth() + 1;
      month = month < 10 ? "0" + month : month;
      var day = new Date(year, month, 0);
      this.endTime = year + "-" + month + "-" + day.getDate();
    },
    handleCheckedCitiesChange(value) {
      alert(value);
    },

    getAllVersionList() {
      this.$axios
        .posts("/api/settleaccount/CentralizedControl/openlist")
        .then((response) => {
          this.versionList = [];
          response.forEach((element) => {
            let options = {};
            options.value = element.version;
            options.label = element.version;
            this.versionList.push(options);
          });
        })
        .catch(() => {
          this.listLoading = false;
        });
    },
    getMaterialGroup() {
      this.$axios
        .posts("/api/settleaccount/CodeSetting/list", {
          project: "物料组",
          maxResultCount: 1000,
          skipCount: 0,
          sorting: "value ascending",
        })
        .then((response) => {
          this.materialGroupList = [];
          response.items.forEach((element) => {
            let options = {};
            options.value = element.description;
            options.label = element.value;
            this.materialGroupList.push(options);
          });
        })
        .catch(() => {
          this.listLoading = false;
        });
    },
    /* 重置 */
    resetForm(formName) {
      this.formCount = {};
      this.datetime5 = [];
      this.startTime = "";
      this.endTime = "";
      this.cp5startTime = "";
      this.cp5endTime = "";
    },
    resetNoBillForm(formName) {
      this.formNoBill = {};
      this.startTimeNoBill = "";
      this.endTimeNoBill = "";
    },
    save() {
      this.$refs.formCount.validate((valid) => {
        if (valid) {
          this.formLoading = true;
          this.listExportQuery.version = this.formCount.versionValue; //版本
          if (this.formCount.purchaseOrderNo != "") {
            this.listExportQuery.purchaseOrderNo =
              this.formCount.purchaseOrderNo; //采购订单号
          }
          if (this.formCount.sapCode != "") {
            this.listExportQuery.sapCode = this.formCount.sapCode; //厂内物料号
          }
          //订单日期起止
          this.listExportQuery.begin = this.startTime
            ? this.startTime
            : undefined;
          this.listExportQuery.end = this.endTime ? this.endTime : undefined;
          console.log(
            "大众备件结算核对-导出条件:" + JSON.stringify(this.listExportQuery)
          );
          this.$axios
            .gets(
              "/api/settleaccount/ReportMakeService/SettleSparePartExport",
              this.listExportQuery
            )
            .then((res) => {
              let taskid = res;
              if (Number.isInteger(taskid)) {
                this.$notify({
                  title: "成功",
                  message: "任务生成成功!任务号:" + taskid,
                  type: "success",
                  duration: 2000,
                });
              }
              this.getList();
              this.formLoading = false;
              this.dialogFormVisible = false;
            })
            .catch(() => {
              this.formLoading = false;
              this.dialogFormVisible = false;
            });
        }
      });
    },
    //备件
    saveNoBill() {
      this.$refs.formNoBill.validate((valid) => {
        if (valid) {
          this.formNoBillLoading = true;
          this.listNoBillExportQuery.version = this.formNoBill.versionValue; //版本
          // if (this.formCount.materialCode != "") {
          //   this.listExportQuery.materialCode = this.formCount.materialCode; //物料号
          // }
          if (this.formNoBill.sapCode != "") {
            this.listNoBillExportQuery.sapCode = this.formNoBill.sapCode; //厂内物料号
          }
          this.listNoBillExportQuery.begin = this.startTimeNoBill
            ? this.startTimeNoBill
            : undefined;
          this.listNoBillExportQuery.end = this.endTimeNoBill
            ? this.endTimeNoBill
            : undefined;

          console.log(
            "大众备件未结明细-导出条件:" +
              JSON.stringify(this.listNoBillExportQuery)
          );
          this.$axios
            .gets(
              "/api/settleaccount/ReportMakeService/SharePartUnSettledExport",
              this.listExportQuery
            )
            .then((res) => {
              let taskid = res;
              if (Number.isInteger(taskid)) {
                this.$notify({
                  title: "成功",
                  message: "任务生成成功!任务号:" + taskid,
                  type: "success",
                  duration: 2000,
                });
              }
              this.getList();
              this.formNoBillLoading = false;
              this.dialogFormNoBillVisible = false;
            })
            .catch(() => {
              this.formNoBillLoading = false;
              this.dialogFormNoBillVisible = false;
            });
        }
      });
    },
    handleCreate() {
      // this.$nextTick(() => {
      //   this.$refs["formCount"].resetFields();
      // });
      if (this.$refs["formCount"] !== undefined) {
        this.$refs["formCount"].resetFields();
      }
      this.formTitle = "报表统计";
      this.isEdit = false;
      this.formCount = {};
      this.datetime5 = [];
      this.startTime = "";
      this.endTime = "";
      this.cp5startTime = "";
      this.cp5endTime = "";
      this.dialogFormVisible = true;
    },
    //无条码备件明细统计
    handleCreateNoBill() {
      if (this.$refs["formNoBill"] !== undefined) {
        this.$refs["formNoBill"].resetFields();
      }
      this.formTitle = "备件明细报表统计";
      this.isEdit = false;
      this.formNoBill = {};
      this.startTimeNoBill = "";
      this.endTimeNoBill = "";
      this.dialogFormNoBillVisible = true;
    },
    filterHandler(value, row, column) {
      const property = column["property"];
      return row[property] === value;
    },
    /* 任务详细信息 */
    handleView(row) {
      this.listQuery.taskId = row.taskId;
      this.$axios
        .posts("/api/settleaccount/Job/list", this.listQuery)
        .then((response) => {
          this.form = response[0];
          switch (response[0].stateName) {
            case "Succeeded":
            case "Failed":
              this.activeIndex = 3;
              break;
            case "Processing":
              this.activeIndex = 2;
              break;
            case "Enqueued":
              this.activeIndex = 1;
              break;
          }
          this.openView = true;
        });
    },
    /*  刷新  */
    refresh() {
      this.list = [];
      this.listQuery.taskId = "";
      this.listQuery.name = "";
      this.getList();
    },
    // 监听筛选项的变化
    filterChange(filterObj) {
      console.log(filterObj.actionName);
      if (filterObj.actionName.length > 0) {
        console.log("点击筛选");
      } else {
        console.log("点击重置");
      }
    },
    /* 导出类型的文件 */
    downloadErrData(param) {
      this.listLoading = true;
      let fileNameOfProject = param;
      this.$axios
        .BolbGets(
          "/api/settleaccount/getblobfile/download/" + fileNameOfProject
        )
        .then((response) => {
          if (fileNameOfProject.indexOf("_") != -1) {
            let downName =
              fileNameOfProject.slice(0, fileNameOfProject.lastIndexOf("_")) +
              fileNameOfProject.slice(fileNameOfProject.lastIndexOf("."));
            downloadFile(response, downName);
            this.$notify({
              title: "成功",
              message: "数据-导出中...",
              type: "success",
              duration: 2000,
            });
          } else {
            downloadFile(response, fileNameOfProject);
            this.$notify({
              title: "成功",
              message: "数据-导出中...",
              type: "success",
              duration: 2000,
            });
          }
          this.listLoading = false;
        })
        .catch((error) => {
          this.listLoading = false;
        });
    },
    /* 刷新列表 */
    handleHandle(data) {
      if (data.type !== "edit") {
        this.getList();
      }
    },
    /* 格式化字段 */
    fieldFormatter(row, column) {
      if (column.property === "stateName") {
        return {
          Succeeded: "执行完成(成功)",
          Processing: "执行中...",
          Failed: "执行完成(失败)",
          Enqueued: "等待执行",
        }[row[column.property]];
      }
      if (column.property == "createdAt") {
        var date = row[column.property];
        if (date == undefined) {
          return "";
        }
        return moment(date).format("YYYY-MM-DD HH:mm:ss");
      }
      return row[column.property] || "--";
    },
    handleDownload(row) {
      if (row.stateName == "Succeeded") {
        this.downloadErrData(row.downFileName);
      } else if (row.stateName == "Failed") {
        this.downloadErrData(row.error);
      }
    },
    getList() {
      this.listLoading = true;
      //导入界面中超链接过来的参数
      this.listQuery.name = "大众备件结算输出";
      this.listQuery.type = this.JobversionValue;
      this.$axios
        .posts("/api/settleaccount/Job/list", this.listQuery)
        .then((response) => {
          this.list = response;
          //动态加一个是否编辑的标识
          this.list.forEach((element) => {
            element["isEditCell"] = false;
          });
          setTimeout(() => {
            //大数据量加载时
            this.listLoading = false;
          }, 500);
        })
        .catch(() => {
          this.listLoading = false;
        });
    },
    // fetchData(id) {
    //   //循环动态,取客户名称
    //   this.$axios
    //     .gets("/api/settleaccount/MaterialRelationship/" + id)
    //     .then((response) => {
    //       this.form = response;
    //     });
    // },
    resetQuery() {},
    cellStyle({ row, column, rowIndex, columnIndex }) {
      var item = this.list[rowIndex];
      if (column.property === "fileName") {
        if (item.fileName === "已确认") {
          return { color: "#13CE66", cursor: "pointer", fontWeight: 700 };
        } else {
          return { color: "#FFBA00", cursor: "pointer", fontWeight: 800 };
        }
      }
      return { textAlign: "left" };
      //}
    },
    headerRowStyle({ row, column, rowIndex, columnIndex }) {
      if (column.property === "stateName") {
        return { textAlign: "center" };
      }
      return { textAlign: "center" };
    },
    handleRowClick(row, column, event) {
      this.$refs.multipleTable.clearSelection();
      this.$refs.multipleTable.toggleRowSelection(row);
    },
  },
};
</script>


<style lang="scss" scoped>
@import "../../styles/crmtable.scss";
@import "../../styles/steps.scss";

/deep/ .el-checkbox input:focus {
  outline: none !important;
  border-color: gray;
  border: 0px;
  box-shadow: none !important;
}
</style>