<template>
  <div id="demandSummary">
    <div v-if="isList">
      <el-card style="position: relative">
        <el-form class="search_area" label-width="100px" :size="size">
          <el-row :gutter="10">
            <el-col :span="1.5">
              <el-form-item label="行状态">
                <el-select
                  multiple
                  v-model="queryParams.rowStatus"
                  :size="size"
                  style="width: 200px"
                  clearable
                >
                  <el-option
                    v-for="dict in dict.type.sys_row_status"
                    :key="dict.value"
                    :label="dict.label"
                    :value="dict.value"
                  >
                  </el-option>
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="1.5">
              <el-form-item label="采购员">
                <el-select
                  clearable
                  :size="size"
                  v-model="queryParams.buyer"
                  @clear="cleanBuyer"
                  @focus="chooseRefer('CONTACTS_PARAM', true, '采购员')"
                  style="width: 200px"
                >
                  <el-option
                    v-for="item in personOptions"
                    :key="item.id"
                    :label="item.name"
                    :value="item.code"
                  />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="1.5">
              <el-form-item label="品类">
                <el-select
                  v-model="queryParams.materialClassifyFour"
                  :size="size"
                  multiple
                  collapse-tags
                  clearable
                  @focus="
                    chooseTreeRefer('MATERIALCLASSIFY_PARAM', false, '选择品类')
                  "
                  style="width: 200px"
                >
                  <el-option
                    v-for="item in classOptions"
                    :key="item.id"
                    :label="item.name"
                    :value="item.id"
                  />
                </el-select>
              </el-form-item>
            </el-col>
            <el-col :span="1.5">
              <el-form-item label="生产厂家">
                <el-input
                  v-model.trim="queryParams.manufacturer"
                  :size="size"
                  clearable
                  style="width: 200px"
                />
              </el-form-item>
            </el-col>
            <div style="position: absolute; top: 3px; right: 10px">
              <el-button type="primary" :size="size" @click="search"
                >搜索</el-button
              >
              <el-button :size="size" plain @click="reset">重置</el-button>
            </div>
          </el-row>

          <CollapseTransition>
            <div v-show="expanded">
              <el-row :gutter="10">
                <el-col :span="1.5">
                  <el-form-item label="预测分类">
                    <el-select
                      v-model="queryParams.forecastClassification"
                      :size="size"
                      style="width: 200px"
                      clearable
                    >
                      <el-option
                        v-for="dict in dict.type.predictive_classify"
                        :key="dict.value"
                        :label="dict.label"
                        :value="dict.label"
                      >
                      </el-option>
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="审核人">
                    <el-select
                      clearable
                      :size="size"
                      v-model="queryParams.puManagerAuditor"
                      @focus="chooseRefer('CONTACTS_PARAM', true, '审核人')"
                      style="width: 200px"
                    >
                      <el-option
                        v-for="item in auditOptions"
                        :key="item.id"
                        :label="item.name"
                        :value="item.code"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="注册人">
                    <el-input
                      v-model.trim="queryParams.registrant"
                      :size="size"
                      clearable
                      style="width: 200px"
                    />
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="业务类型">
                    <el-select
                      v-model="queryParams.businessType"
                      :size="size"
                      style="width: 200px"
                      clearable
                    >
                      <el-option
                        v-for="dict in dict.type.sys_business"
                        :key="dict.value"
                        :label="dict.label"
                        :value="dict.value"
                      >
                      </el-option>
                    </el-select>
                  </el-form-item>
                </el-col>
              </el-row>

              <el-row :gutter="10">
                <el-col :span="1.5">
                  <el-form-item label="单据来源">
                    <el-select
                      v-model="queryParams.billSource"
                      :size="size"
                      style="width: 200px"
                      clearable
                    >
                      <el-option
                        v-for="dict in dict.type.sys_bill_source"
                        :key="dict.value"
                        :label="dict.label"
                        :value="dict.value"
                      >
                      </el-option>
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="需求客户">
                    <el-select
                      clearable
                      :size="size"
                      v-model="queryParams.customer"
                      @focus="chooseRefer('CUSTOMER_PARAM', true, '需求客户')"
                      style="width: 200px"
                    >
                      <el-option
                        v-for="item in customerOptions"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="供应仓库">
                    <el-select
                      clearable
                      :size="size"
                      v-model="queryParams.lastWarehouse"
                      @focus="chooseRefer('WAREHOUSE_PARAM', true, '供应仓库')"
                      style="width: 200px"
                    >
                      <el-option
                        v-for="item in lastWarehouseOptions"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="供应库位">
                    <el-select
                      clearable
                      :size="size"
                      v-model="queryParams.lastAllocation"
                      @focus="
                        chooseRefer(
                          'ALLOCATION_PARAM',
                          true,
                          '供应库位',
                          queryParams.lastWarehouse
                        )
                      "
                      style="width: 200px"
                    >
                      <el-option
                        v-for="item in lastAllocationOptions"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
              </el-row>

              <el-row :gutter="10">
                <el-col :span="1.5">
                  <el-form-item label="物料编码">
                    <el-popover
                      placement="top-start"
                      width="500"
                      trigger="hover"
                      :title="'数量:' + queryParams.materialCodeList.length"
                      :content="queryParams.names"
                    >
                      <el-input
                        slot="reference"
                        clearable
                        :size="size"
                        v-model="queryParams.names"
                        @clear="clearMaterial"
                        style="width: 200px"
                        @paste.native="pasteMe($event)"
                      >
                        <el-button
                          :size="size"
                          slot="append"
                          @click="chooseMaterial"
                          >数量:{{
                            queryParams.materialCodeList.length
                          }}</el-button
                        >
                      </el-input>
                    </el-popover>
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="默认采购组织">
                    <el-select
                      clearable
                      :size="size"
                      v-model="queryParams.purchaseOrg"
                      @focus="chooseRefer('ORG_PARAM', true, '默认采购组织')"
                      style="width: 200px"
                    >
                      <el-option
                        v-for="item in orgOptions"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="需求日期">
                    <el-date-picker
                      v-model="queryParams.demandDateArray"
                      type="daterange"
                      value-format="yyyy-MM-dd"
                      range-separator="至"
                      start-placeholder="开始日期"
                      end-placeholder="结束日期"
                    >
                    </el-date-picker>
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="采购需求单号">
                    <el-input
                      v-model.trim="queryParams.code"
                      :size="size"
                      clearable
                      style="width: 200px"
                    />
                  </el-form-item>
                </el-col>
              </el-row>

              <el-row :gutter="10">
                <el-col :span="1.5">
                  <el-form-item label="审批结束日期">
                    <el-date-picker
                      v-model="queryParams.approverFinishTimeArray"
                      type="daterange"
                      value-format="yyyy-MM-dd"
                      range-separator="至"
                      start-placeholder="开始日期"
                      end-placeholder="结束日期"
                    >
                    </el-date-picker>
                  </el-form-item>
                </el-col>
                <el-col :span="1.5">
                  <el-form-item label="是否客户指定">
                    <el-select
                      clearable
                      v-model="queryParams.isCustomerSpecified"
                      :size="size"
                      style="width: 200px"
                    >
                      <el-option
                        v-for="item in dict.type.sys_yes_no"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                      >
                      </el-option>
                    </el-select>
                  </el-form-item>
                </el-col>

                <el-col :span="1.5">
                  <el-form-item label="是否紧急需求">
                    <el-select
                      clearable
                      v-model="queryParams.isUrgency"
                      :size="size"
                      style="width: 200px"
                    >
                      <el-option
                        v-for="item in dict.type.sys_yes_no"
                        :key="item.value"
                        :label="item.label"
                        :value="item.value"
                      >
                      </el-option>
                    </el-select>
                  </el-form-item>
                </el-col>

                <el-col :span="1.5">
                  <el-form-item label="补单供应商">
                    <el-select
                      clearable
                      :size="size"
                      v-model="queryParams.additionalSupplier"
                      @focus="chooseRefer('SUPPLIER_PARAM', true, '供应商')"
                      style="width: 200px"
                    >
                      <el-option
                        v-for="item in supplierOptions"
                        :key="item.id"
                        :label="item.name"
                        :value="item.id"
                      />
                    </el-select>
                  </el-form-item>
                </el-col>
              </el-row>

              <el-row :gutter="10">
                <el-col :span="1.5">
                  <el-form-item label="确认日期">
                    <el-date-picker
                      v-model="queryParams.processTimeArray"
                      type="daterange"
                      value-format="yyyy-MM-dd"
                      range-separator="至"
                      start-placeholder="开始日期"
                      end-placeholder="结束日期"
                    >
                    </el-date-picker>
                  </el-form-item>
                </el-col>
              </el-row>
            </div>
          </CollapseTransition>
        </el-form>
        <el-divider class="lines"
          ><i
            style="cursor: pointer"
            :class="expanded ? 'el-icon-arrow-up' : 'el-icon-arrow-down'"
            @click="drop"
          ></i
        ></el-divider>

        <div class="btn_grooup">
          <el-button type="primary" :size="size" @click="editList"
            >编辑</el-button
          >
          <el-button
            type="danger"
            :size="size"
            v-if="!lineDisable"
            @click="cancelEdit"
            >取消编辑</el-button
          >
          <el-button
            type="success"
            :size="size"
            v-if="!lineDisable"
            @click="saveList"
            >保存</el-button
          >
          <el-button
            type="primary"
            :size="size"
            v-if="lineDisable"
            @click="confirms"
            :disabled="ids.length == 0"
            >确认</el-button
          >
          <el-button
            :size="size"
            v-if="lineDisable"
            :disabled="ids.length == 0"
            @click="cancels"
            >取消</el-button
          >
          <!-- <el-button type="primary" :size="size" v-if="lineDisable" @click="cancelAudit">取消审批</el-button> -->
          <el-button
            :size="size"
            v-if="lineDisable"
            :disabled="ids.length == 0"
            @click="audits"
            >审核</el-button
          >
          <el-button
            :size="size"
            v-if="lineDisable"
            :disabled="ids.length == 0"
            @click="closeLine"
            >行关闭</el-button
          >

          <el-button
            :size="size"
            style="margin: 0 10px"
            v-if="lineDisable"
            @click="handleCommand"
          >
            导出
          </el-button>

          <!-- <el-button type="primary" :size="size">转请购</el-button> -->
        </div>
        <vxe-toolbar ref="xToolbar1" custom> </vxe-toolbar>

        <vxe-table
          id="toolbar_demo5"
          :custom-config="{ storage: true, checkMethod: checkColumnMethod }"
          @resizable-change="resizableChangeEvent"
          v-loading="loading"
          :data="tableList"
          :cell-style="{ borderColor: '#c0c0c0' }"
          :header-cell-style="{ borderColor: '#c0c0c0' }"
          class="exporttable"
          border
          show-summary
          show-footer
          :footer-method="getSummaries"
          highlight-current-row
          max-height="620"
          style="font-size: 12px"
          :cell-class-name="cellClassName"
          @checkbox-all="selectAllEvent"
          @checkbox-change="handleSelectionChange"
          @cell-dblclick="doubleClick"
          ref="table"
          :checkbox-config="{ trigger: 'row', highlight: true, range: true }"
          :column-config="{ resizable: true }"
          :sort-config="{ multiple: true, trigger: 'cell' }"
        >
          <vxe-column type="checkbox" width="50" />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="序号"
            type="seq"
            align="center"
            width="50px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="行状态"
            align="center"
            field="status"
            width="50px"
            :formatter="hangStatus"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="最终采购量"
            align="center"
            field="finalBuyQty"
            width="80px"
          >
            <template slot-scope="scope">
              <el-input
                :size="size"
                :disabled="scope.row.status !== '1' || lineDisable"
                v-model="scope.row.finalBuyQty"
                @change="jilu(scope.$rowIndex)"
              />
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="关闭数量"
            align="center"
            field="closeQty"
            width="50px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="人工调整数"
            align="center"
            field="artificialAdjust"
            width="50px"
          >
            <template slot-scope="scope">
              {{
                (scope.row.artificialAdjust =
                  scope.row.finalBuyQty - scope.row.suggestionPurchase)
              }}
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="一级品类"
            align="center"
            field="materialClassifyOneName"
            width="80"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="物料编码"
            align="center"
            field="materialCode"
            width="100px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="品名"
            align="center"
            field="materialName"
            width="100px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="规格"
            align="center"
            field="specification"
            width="100px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="单位"
            align="center"
            field="unit"
            width="50"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="生产厂家/代理人"
            align="center"
            field="manufacturer"
            width="100px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="需求单位数"
            align="center"
            field="demandNum"
            width="50px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="总最终净需求量"
            align="center"
            field="netDemandNum"
            width="80px"
          >
            <template slot-scope="scope">
              {{
                scope.row.netDemandNum
                  ? parseFloat(scope.row.netDemandNum).toFixed(2)
                  : "0.00"
              }}
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="近1月月均需求"
            align="center"
            field="evensalesforyear"
            width="50"
          >
            <template slot-scope="scope">
              {{
                scope.row.evensalesforyear
                  ? parseFloat(scope.row.evensalesforyear).toFixed(2)
                  : "0.00"
              }}
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="近3月月均需求"
            align="center"
            field="evensalesforthrmonth"
            width="50"
          >
            <template slot-scope="scope">
              {{
                scope.row.evensalesforthrmonth
                  ? parseFloat(scope.row.evensalesforthrmonth).toFixed(2)
                  : "0.00"
              }}
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="总月销量"
            align="center"
            field="totalMonthlySales"
            width="50"
          >
            <template slot-scope="scope">
              {{
                scope.row.totalMonthlySales
                  ? parseFloat(scope.row.totalMonthlySales).toFixed(2)
                  : "0.00"
              }}
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="需求可用周期"
            align="center"
            field="demandCycle"
            width="50px"
          >
            <template slot-scope="scope">
              {{
                scope.row.demandCycle
                  ? parseFloat(scope.row.demandCycle).toFixed(1)
                  : "-"
              }}
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="呆滞量"
            align="center"
            field="dullQut"
            width="50px"
          >
            <template slot-scope="scope">
              {{ parseFloat(scope.row.dullQut).toFixed(2) }}
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="采购周期"
            align="center"
            field="buyPeriod"
            width="50px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="中心公共库存"
            align="center"
            field="centralPublicStock"
            width="50"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="中心仓专属货位"
            align="center"
            field="centralWarehouse"
            width="50"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="各项目仓库存"
            align="center"
            field="eachWarehouseStock"
            width="50"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="电商仓库"
            align="center"
            field="commerceWarehouse"
            width="50"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="区域分仓公共库存"
            align="center"
            field="regionPublicStock"
            width="50"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="采购在途"
            align="center"
            field="buyTransit"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="借出在途"
            align="center"
            field="lendTransit"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="调拨在途"
            align="center"
            field="transferTransit"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="库存总计"
            align="center"
            field="stockTotal"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="最小包装量"
            align="center"
            field="minPackage"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="最小订货量"
            align="center"
            field="minOrder"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="最小批量"
            align="center"
            field="minBatch"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="修改原因"
            align="center"
            field="modifyReason"
            width="150px"
          >
            <template slot-scope="scope">
              <el-input
                :size="size"
                :disabled="
                  scope.row.status !== '1' ||
                  lineDisable ||
                  scope.row.artificialAdjust == '0'
                "
                v-model="scope.row.modifyReason"
                @change="jilu(scope.$rowIndex)"
              />
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="建议采购量"
            align="center"
            field="suggestionPurchase"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="二级品类"
            align="center"
            field="materialClassifyTwoName"
            width="120px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="三级品类"
            align="center"
            field="materialClassifyThreeName"
            width="120px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="四级品类"
            align="center"
            field="materialClassifyFourName"
            width="120px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="采购员"
            align="center"
            field="buyerName"
            width="150px"
          >
            <template slot-scope="scope">
              <el-input
                readonly
                :disabled="scope.row.status !== '1' || lineDisable"
                :size="size"
                v-model="scope.row.buyerName"
              >
                <el-button
                  :size="size"
                  :disabled="scope.row.status !== '1' || lineDisable"
                  slot="append"
                  icon="el-icon-more"
                  @click="
                    chooseSon(
                      scope.$rowIndex,
                      'CONTACTS_PARAM',
                      true,
                      '明细采购员'
                    )
                  "
                ></el-button>
              </el-input>
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="默认采购组织"
            align="center"
            field="purchaseOrgName"
            width="150px"
          >
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="有效期"
            align="center"
            field="validityPeriod"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="有效期单位"
            align="center"
            field="validityPeriodUnit"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="业务类型"
            align="center"
            field="businessType"
            :formatter="formatterBusinessType"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="安全库存量"
            align="center"
            field="safetyStock"
            width="80px"
          >
            <template slot-scope="scope">
              {{
                scope.row.safetyStock
                  ? parseFloat(scope.row.safetyStock).toFixed(2)
                  : "0.00"
              }}
            </template>
          </vxe-column>
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="单据来源"
            align="center"
            field="billSource"
            :formatter="formatterSource"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="注册人"
            align="center"
            field="registrant"
            width="120px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="总需与终采差异"
            align="center"
            field="buyDiscrepancy"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="集团预测分类"
            align="center"
            field="forecastClassification"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="中心仓占有量"
            align="center"
            field="centerBinPossession"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="中心仓可用量"
            align="center"
            field="centralWarehouseAvailable"
            width="80px"
          />
          <vxe-column
            show-header-overflow
            show-overflow
            sortable
            title="采购经理审核人"
            align="center"
            field="puManagerAuditor"
            width="120px"
          />
          <vxe-column title="操作" align="center" width="50">
            <template slot-scope="scope">
              <el-button type="text" :size="size" @click="check(scope.row)"
                >查看</el-button
              >
            </template>
          </vxe-column>
        </vxe-table>

        <pagination
          :total="total"
          :page.sync="queryParams.pageNum"
          :limit.sync="queryParams.pageSize"
          @pagination="getList(queryParams)"
          style="height: 32px; padding: 0 !important; flex: 1; overflow-x: auto"
        />
      </el-card>
    </div>

    <Add
      v-model="isList"
      v-if="!isList"
      :pageStu="page"
      :disable="disable"
      :row="rowDetail"
      :query="queryParams"
      @refresh="search"
    />

    <Refers ref="refer" @doSubmit="selectionsToInput" :single="true" />

    <TreeRefers ref="tree" @doSubmit="selectionsToInput2" :single="true" />

    <popDialog ref="materialRefer" @doSubmit="selectMaterial" :single="false" />
  </div>
</template>

<script>
// 用于物料参照框数据
import { getRefer } from "@/api/purchase/basic.js";
import {
  getSummaryList,
  auditSummary,
  cancelAudits,
  confirmSummary,
  cancelSummary,
  shutDownSummary,
  editSummaryList,
  exportList,
  exportItems,
} from "@/api/purchase/DemandSummary.js";
export default {
  name: "demandSummary",
  dicts: [
    "sys_yes_no",
    "sys_row_status",
    "predictive_classify",
    "sys_period_unit",
    "sys_business",
    "sys_bill_source",
  ],
  components: {
    Add: () => import("./add"),
    CollapseTransition: () => import("@/components/MyCollapse/collapse.vue"),
    Refers: () => import("@/components/Refers/refers.vue"),
    TreeRefers: () => import("@/components/Refers/treeRefer.vue"),
    popDialog: () => import("@/components/PopDialog/index.vue"),
  },
  data() {
    return {
      size: "mini",
      loading: true,
      hangStatus(row) {
        switch (row.row.status) {
          case "0":
            return "需补货";
          case "1":
            return "待计划确认";
          case "2":
            return "计划已确认";
          case "3":
            return "计划已审核";
          case "4":
            return "行关闭";
          case "5":
            return "总供应可满足";
        }
      },
      formatterBusinessType(row) {
        switch (row.row.businessType) {
          case "ZQBH":
            return "周期备货";
          case "FXXQ":
            return "分销需求";
          case "TSXQ":
            return "特殊采购需求";
          case "BDXQ":
            return "补单需求";
          case "JJXQ":
            return "紧急需求单";
          case "XPXQ":
            return "新品需求";
          case "HZBM":
            return "合作部门需求";
        }
      },
      formatterSource(row) {
        switch (row.row.billSource) {
          case "1":
            return "手工导入";
          case "2":
            return "按客户计算";
          case "3":
            return "按仓库计算";
          case "4":
            return "手工新增";
        }
      },
      expanded: false,
      // 页面配置
      isList: true,
      // 页面状态
      page: "",
      queryParams: {
        rowStatus: ["1"],
        buyer: "",
        buyerName: "",
        materialClassifyFour: [],
        manufacturer: "",
        forecastClassification: "",
        periodUnit: "",
        departmentName: "",
        puManagerAuditor: "",
        // zqgdh: '',
        code: "",
        registrant: "",
        businessType: "",
        billSource: "",
        customer: "",
        lastWarehouse: "",
        lastAllocation: "",
        materialCodeList: [],
        names: "",
        purchaseOrg: "",
        // demandDate: "",
        demandDateArray: [],
        // approverFinishTime: '',
        approverFinishTimeArray: [],
        processTimeArray: [],
        isCustomerSpecified: "",
        isUrgency: "",
        additionalSupplier: "",
        pageNum: 1,
        pageSize: 50,
      },
      personOptions: [],
      classOptions: [],
      deptOptions: [],
      auditOptions: [],
      customerOptions: [],
      lastWarehouseOptions: [],
      lastAllocationOptions: [],
      orgOptions: [],
      supplierOptions: [],
      referCondition: {
        type: "",
        isPage: true,
        title: "",
      },
      tableList: [],
      total: 0,
      rowDetail: {},
      disable: false,
      lineDisable: true,
      ids: [],
      allSelection: [],
      // 子表index
      tableIndex: null,
      // referConditionMx: {
      //   type: '',
      //   isPage: true,
      //   title: ''
      // }
      // 用于保存临时记录修改行的数组
      record: [],
    };
  },
  created() {
    this.$nextTick(() => {
      // 手动将表格和工具栏进行关联
      this.$refs.table.connect(this.$refs.xToolbar1);
      this.getList(this.queryParams);
    });
  },
  methods: {
    checkColumnMethod({ column }) {
      if (column.property === "role") {
        return false;
      }
      return true;
    },
    resizableChangeEvent() {
      const columns = this.$refs.table.getColumns();
      const customData = columns.map((column) => {
        return {
          width: column.renderWidth,
        };
      });
      // console.log(customData)
    },
    // 单元格标红
    cellClassName({ row, column, rowIndex, columnIndex }) {
      if (column.title == "需求可用周期" && Number(row.demandCycle) > 1.5) {
        return "success-row";
      }
    },
    // 指定列合计
    getSummaries(param) {
      const { columns, data } = param;
      const sums = [];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums.push("合计");
          return;
        }
        const values = data.map((item) => Number(item[column.property]));
        if (
          column.property === "demandNum" ||
          column.property === "netDemandNum" ||
          column.property === "artificialAdjust" ||
          column.property === "suggestBuyQty" ||
          column.property === "finalBuyQty"
        ) {
          sums[index] = values.reduce((prev, curr) => {
            const value = Number(curr);
            if (!isNaN(value)) {
              return prev + curr;
            } else {
              return prev;
            }
          }, 0);
          sums[index];
        }
      });
      return [sums];
    },
    // 搜索
    search() {
      this.getList(this.queryParams);
    },
    reset() {
      this.queryParams = {
        rowStatus: ["1"],
        buyer: "",
        buyerName: "",
        materialClassifyFour: [],
        manufacturer: "",
        forecastClassification: "",
        periodUnit: "",
        departmentName: "",
        puManagerAuditor: "",
        // zqgdh: '',
        code: "",
        registrant: "",
        businessType: "",
        billSource: "",
        customer: "",
        lastWarehouse: "",
        lastAllocation: "",
        materialCodeList: [],
        names: "",
        purchaseOrg: "",
        // demandDate: "",
        demandDateArray: [],
        // approverFinishTime: '',
        approverFinishTimeArray: [],
        processTimeArray: [],
        isCustomerSpecified: "",
        isUrgency: "",
        additionalSupplier: "",
        pageNum: 1,
        pageSize: 50,
      };
      this.getList(this.queryParams);
    },
    async getList(params) {
      try {
        this.loading = true;
        let { code, rows, total } = await getSummaryList(params);
        if (code == 200) {
          this.tableList = rows;
          this.total = total;
        }
      } catch (error) {
      } finally {
        this.loading = false;
      }
    },
    selectAllEvent({ checked }) {
      const selection = this.$refs.table.getCheckboxRecords();
      this.allSelection = selection;
      this.ids = selection.map((item) => item.demandItemId);
      console.log("选中数组", this.ids.join());
    },
    handleSelectionChange({ checked }) {
      const selection = this.$refs.table.getCheckboxRecords();
      this.allSelection = selection;
      this.ids = selection.map((item) => item.demandItemId);
      console.log("选中数组", this.ids.join());
    },
    handleCommand() {
      this.$modal.loading("正在导出数据，请稍后...");
      let param = this.queryParams;
      param.pageSize = this.total;
      exportItems(param).then((res) => {
        this.$modal.closeLoading();
        const blob = new Blob([res], {
          type: "application/vnd.ms-excel;charset=UTF-8",
        }); // 创建一个类文件对象：Blob对象表示一个不可变的、原始数据的类文件对象
        const downloadElement = document.createElement("a"); //创建a标签
        const href = window.URL.createObjectURL(blob); // 创建下载的链接
        // var temp = res.headers["content-disposition"];
        // var fileName = decodeURIComponent(temp.split("filename=")[1]); // 中文需要转码 (前端乱码）
        // var name = fileName.split(";")[0]; //切割成文件名
        downloadElement.href = href; //下载地址
        downloadElement.download =
          "采购需求处理导出" + this.parseTime(new Date().getTime()) + ".xlsx"; // 下载后文件名
        document.body.appendChild(downloadElement);
        downloadElement.click(); // 点击下载
        document.body.removeChild(downloadElement); // 下载完成移除元素
        window.URL.revokeObjectURL(href); // 释放blob对象
      });
    },
    check(row) {
      this.isList = false;
      this.page = "check";
      this.rowDetail = row;
      this.disable = true;
    },
    doubleClick({ row }) {
      this.isList = false;
      this.page = "check";
      this.rowDetail = row;
      this.disable = true;
    },
    // 表格选中数据
    rowSelect(row) {
      // console.log(row)
      this.$refs.table.toggleCheckboxRow(row.row);
    },
    drop() {
      this.expanded = !this.expanded;
    },
    editList() {
      this.lineDisable = false;
    },
    cancelEdit() {
      this.lineDisable = true;
      this.getList(this.queryParams);
    },
    saveList() {
      // 对记录的数据进行去重
      let newRecord = Array.from(new Set(this.record));
      let changeList = newRecord.map((i) => {
        return this.tableList[i];
      });
      editSummaryList(changeList).then((res) => {
        if (res.code === 200) {
          this.record = [];
          this.$modal.notifySuccess("保存成功");
          this.lineDisable = true;
          this.getList(this.queryParams);
        }
      });
    },
    confirms() {
      confirmSummary(this.allSelection).then((res) => {
        if (res.code === 200) {
          this.$modal.notifySuccess("确认成功");
          this.getList(this.queryParams);
        }
      });
    },
    cancels() {
      let param = this.ids.join();
      cancelSummary(param).then((res) => {
        if (res.code === 200) {
          this.$modal.notifySuccess("取消成功");
          this.getList(this.queryParams);
        }
      });
    },
    cancelAudit() {
      if (this.ids.length == 0) {
        this.$modal.notifyWarning("请选中至少一条数据");
      } else {
        let param = this.ids.join();
        cancelAudits(param).then((res) => {
          if (res.code === 200) {
            this.$modal.notifySuccess("审核成功");
            this.getList(this.queryParams);
          }
        });
      }
    },
    audits() {
      let param = this.ids.join();
      auditSummary(param)
        .then((res) => {
          if (res.code === 200) {
            this.$modal.notifySuccess("审核成功");
            this.getList(this.queryParams);
          }
        })
        .catch((err) => {
          this.getList(this.queryParams);
        });
    },
    // 行关闭
    closeitem() {
      let param = this.ids.join();
      shutDownSummary(param).then((res) => {
        if (res.code === 200) {
          this.$modal.notifySuccess("操作成功");
          this.getList(this.queryParams);
        }
      });
    },
    closeLine() {
      let item = this.allSelection.some((item) => {
        return item.demandNum >= 2;
      });
      if (item) {
        this.$modal
          .confirm("选中项有多个需求单位,是否确定关闭?")
          .then(function () {})
          .then(() => {
            this.closeitem();
          })
          .catch(() => {});
      } else {
        this.closeitem();
      }
    },
    // 搜索区参照选择
    chooseRefer(type, isPage, title, stordocId) {
      this.referCondition.type = type;
      this.referCondition.isPage = isPage;
      this.referCondition.title = title;
      this.referCondition.stordocId = stordocId;
      this.$refs.refer.init(this.referCondition);
    },
    selectionsToInput(selection) {
      if (this.referCondition.title == "采购员") {
        this.personOptions = selection;
        this.queryParams.buyer = selection[0].code;
        this.queryParams.buyerName = selection[0].name;
      }
      if (this.referCondition.title == "业务部门") {
        this.deptOptions = selection;
        this.queryParams.departmentName = selection[0].id;
      }
      if (this.referCondition.title == "审核人") {
        this.auditOptions = selection;
        this.queryParams.puManagerAuditor = selection[0].code;
      }
      if (this.referCondition.title == "需求客户") {
        this.customerOptions = selection;
        this.queryParams.customer = selection[0].id;
      }
      if (this.referCondition.title == "供应仓库") {
        this.lastWarehouseOptions = selection;
        this.queryParams.lastWarehouse = selection[0].id;
      }
      if (this.referCondition.title == "供应库位") {
        this.lastAllocationOptions = selection;
        this.queryParams.lastAllocation = selection[0].id;
      }
      if (this.referCondition.title == "默认采购组织") {
        this.orgOptions = selection;
        this.queryParams.purchaseOrg = selection[0].id;
      }
      if (this.referCondition.title == "明细采购员") {
        this.record.push(this.tableIndex);
        this.tableList[this.tableIndex].buyer = selection[0].code;
        this.tableList[this.tableIndex].buyerName = selection[0].name;
      }
      if (this.referCondition.type == "SUPPLIER_PARAM") {
        this.supplierOptions = selection;
        this.queryParams.additionalSupplier = selection[0].id;
      }
      // if (this.referCondition.title == '明细默认采购组织') {
      //   console.log('选择进了吗',this.tableList)
      //   this.tableList[this.tableIndex].purchaseOrg = selection[0].id
      //   this.tableList[this.tableIndex].purchaseOrgName = selection[0].name
      // }
    },
    // 搜索区树形选择
    chooseTreeRefer(type, isPage, title) {
      this.referCondition.type = type;
      this.referCondition.isPage = isPage;
      this.referCondition.title = title;
      this.$refs.tree.init(this.referCondition);
    },
    selectionsToInput2(selection) {
      this.classOptions = selection;
      this.queryParams.materialClassifyFour = selection.map((item) => {
        return item.id;
      });
    },
    // 搜索区物料编码
    chooseMaterial() {
      this.$refs.materialRefer.init();
    },
    selectMaterial(selection) {
      this.queryParams.materialCodeList = selection.map((item) => {
        return item.code;
      });
      this.queryParams.names = selection
        .map((item) => {
          return item.name;
        })
        .join("，");
    },
    // 清空物料搜索框
    clearMaterial() {
      this.queryParams.names = "";
      this.queryParams.materialCodeList = [];
    },
    // 粘贴来的数据
    async pasteMe(e) {
      this.$modal.loading("正在粘贴数据...");
      e.preventDefault(); //阻止默认粘贴事件
      let source = e.clipboardData.getData("Text");
      // 这里区分普通复制和在表格内复制，判断是否包含','
      // 没找到,就通过表格复制
      if (source.indexOf(",") === -1) {
        // 首先对源头进行解析
        let rows = source.split("\r\n"); // 拆成一个数组
        // 数组去除空字符串
        rows = rows.filter((item) => {
          return item && item.trim();
        });
        await getRefer({ type: "MATERIAL_PARAM", materialCodeList: rows })
          .then((res) => {
            this.$modal.closeLoading();
            if (res.code === 200) {
              let rowList = res.rows;
              this.queryParams.materialCodeList = rowList.map((item) => {
                return item.code;
              });
              this.queryParams.names = rowList
                .map((item) => {
                  return item.code;
                })
                .join(",");
            }
          })
          .catch((err) => {
            this.$modal.closeLoading();
          });
      } else {
        // 找到了,按,分割
        let codelist = source.split(",");
        // 数组去除空字符串
        codelist = codelist.filter((item) => {
          return item && item.trim();
        });
        this.queryParams.materialCodeList = codelist;
        this.queryParams.names = codelist.join(",");
        this.$modal.closeLoading();
      }
    },
    // 明细行选择业务部门参照带出业务部门数据
    chooseSon(index, type, isPage, title) {
      this.tableIndex = index;
      this.referCondition.type = type;
      this.referCondition.isPage = isPage;
      this.referCondition.title = title;
      this.$refs.refer.init(this.referCondition);
    },
    jilu(index) {
      this.record.push(index);
    },
    // 清空搜索区采购员
    cleanBuyer() {
      this.queryParams.buyer = "";
      this.queryParams.buyerName = "";
    },
  },
};
</script>

<style lang="scss" scoped>
#demandSummary {
  padding: 12px;
  box-sizing: border-box;
  overflow-y: scroll;
}
.btn_grooup {
  margin-bottom: 10px;
  display: flex;
  justify-content: flex-end;
}
.lines {
  margin-top: 0;
}
.hang {
  margin: auto;
}
.hang ::v-deep .el-form-item__content {
  margin-left: 0px !important;
}
::v-deep .vxe-body--row > td {
  border-right: none;
}
::v-deep .el-card .el-form-item {
  margin-bottom: 3px;
}
::v-deep .vxe-body--row .success-row {
  background-color: #ff8a8a !important;
}
</style>
