<template>
  <el-dialog
    v-dialog-drag
    title="快速出库"
    :visible.sync="visible"
    width="85%"
    :append-to-body="true"
    :close-on-click-modal="false"
    :before-close="closeDialog"
  >
    <el-form :model="form" :rules="rules" label-width="80px" ref="form">
      <el-row>
        <el-col :xs="12" :sm="6">
          <el-form-item label="提单号" prop="fMblno">
            <el-input
              v-model="form.fMblno"
              placeholder="请输入提单号"
              clearable
              @change="changeMblno"
              style="width: 100%"
            />
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="客户名称" prop="fCorpid">
            <el-select
              v-model="form.fCorpid"
              clearable
              filterable
              placeholder="请输入关键词"
              @change="changeCorp"
              style="width: 100%"
              :disabled="detailList.length > 0"
            >
              <el-option
                v-for="(item, index) in fMblnoOptions"
                :key="index.fId"
                :label="item.fName"
                :value="item.fId"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="出库日期" prop="fBsdate">
            <el-date-picker
              type="date"
              v-model="form.fBsdate"
              value-format="timestamp"
              format="yyyy-MM-dd"
              placeholder="请选择计划日期"
              style="width: 100%"
            ></el-date-picker>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="出库时间" prop="fBstime">
            <el-time-picker
              v-model="form.fBstime"
              :picker-options="{
                selectableRange: '00:00:00 - 23:59:59',
              }"
              :clearable="true"
              value-format="timestamp"
              placeholder="任意时间点"
              style="width: 100%"
            ></el-time-picker>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="仓库" prop="fWarehouseid">
            <el-select
              v-model="form.fWarehouseid"
              filterable
              placeholder="请选择"
              @change="changefWarehouseid"
              style="width: 100%"
              :disabled="detailList.length > 0"
            >
              <el-option
                v-for="(item, index) in warehouseOptions"
                :key="index.fId"
                :label="item.fName"
                :value="item.fId"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="品名" prop="fGoodsid">
            <el-select
              filterable
              v-model="form.fGoodsid"
              placeholder="请选择品名"
              @change="goodsChange"
              style="width: 100%"
              clearable
            >
              <el-option
                v-for="(item, index) in goodsOptions"
                :key="index.fId"
                :label="item.fName"
                :value="item.fId"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="品名属性" prop="fGoodsType">
            <el-select
              filterable
              v-model="form.fGoodsType"
              placeholder="请选择商品属性"
              style="width: 100%"
            >
              <el-option
                v-for="(item, index) in fStorageTypeOptions"
                :key="index.dictValue"
                :label="item.dictLabel"
                :value="item.dictValue"
              />
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="属性内容">
            <el-input
              v-model="form.fMarks"
              placeholder="请填写属性描述"
              clearable
              style="width: 100%"
            />
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="车号">
            <el-input
              placeholder="请输入车号"
              v-model="form.fTruckno"
              style="width: 100%"
            ></el-input>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="司机">
            <el-input
              placeholder="请输入司机姓名"
              v-model="form.fDriverName"
              style="width: 100%"
            ></el-input>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="电话">
            <el-input
              placeholder="请输入司机电话"
              v-model="form.fDriverTel"
              style="width: 100%"
            ></el-input>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="证件号">
            <el-input
              placeholder="请输入证件号"
              v-model="form.fDriverIdCar"
              style="width: 100%"
            ></el-input>
          </el-form-item>
        </el-col>
      </el-row>
    <div style="margin: 10px 0">
      <!--      列设置-->
      <el-dialog title="提示" :visible.sync="showSetting" width="700px" v-dialogDrag append-to-body>
        <template slot="title">
          <div class="avue-crud__dialog__header">
            <span class="el-dialog__title">
            <span
              style="display:inline-block;width:3px;height:20px;margin-right:5px; float: left;margin-top:2px"></span>
            </span>
          </div>
        </template>
        <div>配置排序列数据（拖动调整顺序）</div>
        <div style="margin-left: 17px">
          <el-checkbox
            v-model="allCheck"
            label="全选"
            @change="allChecked"
          ></el-checkbox>
        </div>
        <div style="padding: 4px; display: flex; justify-content: center">
          <draggable
            v-model="setRowList"
            group="site"
            animation="300"
            @start="onStart"
            @end="onEnd"
            handle=".indraggable"
          >
            <transition-group>
              <div
                v-for="item in setRowList"
                :key="item.surface"
                class="listStyle"
              >
                <div style="width: 500px" class="indraggable">
                  <div class="progress" :style="{ width: item.width + 'px' }">
                    <el-checkbox
                      :label="item.name"
                      v-model="item.checked"
                      :true-label="0"
                      :false-label="1"
                    >{{ item.name }}
                    </el-checkbox>
                  </div>
                </div>
                <el-input-number
                  v-model.number="item.width"
                  controls-position="right"
                  :min="1"
                  :max="500"
                  size="mini"
                ></el-input-number>
              </div>
            </transition-group>
          </draggable>
        </div>
        <span slot="footer" class="dialog-footer">
        <el-button @click="showSetting = false">取 消</el-button>
        <el-button @click="delRow" type="danger">重 置</el-button>
        <el-button type="primary" @click="save()">确 定</el-button>
      </span>
      </el-dialog>
      <div style="margin: 10px 10px">
        <el-button
          size="small"
          style="float:left;"
          type="primary"
          @click="addList"
          :disabled="disabled"
        >
          检索
        </el-button>
        <el-button
          size="small"
          style="float:left;"
          type="danger"
          :disabled="selection.length == 0"
          @click="batchDelete"
        >
          批量删除
        </el-button>
        <el-button
          icon="el-icon-setting"
          size="mini"
          circle
          @click="showSetting = !showSetting"
          style="float: right"
        ></el-button>
      </div>
      <el-table
        :data="detailList"
        tooltip-effect="dark"
        stripe
        ref="detailTable"
        @selection-change="handleSelection"
        show-summary
        :summary-method="getSummaries"
      >
        <el-table-column type="selection" width="50" align="center" fixed/>
        <el-table-column
          label="序号"
          type="index"
          width="50"
          fixed
          align="center"
        />
        <el-table-column
          v-for="(item, index) in getRowList"
          :key="index"
          :label="item.name"
          :width="item.width"
          :prop="item.label"
          align="center"
          :fixed="item.fixed"
          :show-overflow-tooltip="true"
          sortable
        >
          <template slot-scope="scope">
            <span v-if="item.label == 'fGoodsid'">
              {{scope.row.fGoodsids}}
            </span>
<!--            <span v-else-if="item.label == 'fCntrno'">-->
<!--              <el-input-->
<!--                v-model="scope.row.fCntrno"-->
<!--                placeholder="请输入箱号"-->
<!--                clearable-->
<!--              ></el-input>-->
<!--            </span>-->
            <span v-else-if="item.label == 'fSealno'">
              <el-input
                v-model="scope.row.fSealno"
                placeholder="请输入封号"
                clearable
              ></el-input>
            </span>
            <span v-else-if="item.label == 'fBusinessType'">
              <el-select
                v-model="scope.row.fBusinessType"
                filterable
                disabled
                placeholder="请选择商品属性"
              >
                <el-option
                  v-for="(item, index) in fStorageTypeOptions"
                  :key="index.dictValue"
                  :label="item.dictLabel"
                  :value="item.dictValue"
                />
              </el-select>
            </span>
            <span v-else-if="item.label == 'fQty'">
              <el-input
                v-input-limit="0"
                @change="qtyChange(scope.row)"
                v-model="scope.row.fQty"
                placeholder="出库件数"
              />
            </span>
            <span v-else-if="item.label == 'fGrossweight'">
              <el-input
                v-input-limit="2"
                v-model="scope.row.fGrossweight"
                @change="changeOutStock(scope.row)"
                placeholder="出库毛重"
              />
            </span>
            <span v-else-if="item.label == 'fNetweight'">
              <el-input
                v-input-limit="2"
                v-model="scope.row.fNetweight"
                @change="changeOutStock(scope.row)"
                placeholder="出库净重"
              />
            </span>
            <span v-else-if="item.label == 'remark'">
              <el-input
                v-model="scope.row.remark"
                placeholder="备注"
              />
            </span>
            <span v-else>{{ scope.row[item.label] }}</span>
          </template>
        </el-table-column>
        <el-table-column
          header-align="center"
          align="center"
          label="操作"
          width="160px"
          fixed="right"
        >
          <template slot-scope="scope">
            <el-button
              type="text"
              @click.native.prevent="wDeleteRow(scope.$index, detailList)"
              size="small"
            >移除
            </el-button
            >
          </template>
        </el-table-column>
      </el-table>
    </div>
      <el-row>
        <el-col :span="24">
          <el-form-item label="备注">
            <el-input
              type="textarea"
              :autosize="{ minRows: 2, maxRows: 4}"
              placeholder="请输入备注"
              v-model="form.remark"
              style="width: 100%"
            >
            </el-input>
          </el-form-item>
        </el-col>
      </el-row>
    </el-form>

<!--    打印-->
    <el-dialog
      append-to-body
      :close-on-click-modal="false"
      :modal="false"
      :visible.sync="printVisible"
    >
      <div id="print_ckd">
        <div style="text-align: center;font-size: 24px;margin-bottom: 5px;">{{ company }}出库单</div>
        <div class="print_table" style="display: flex">
          <table border="0" cellspacing="0" cellpadding="0" style="width: 100%; line-height: 30px">
            <tr>
              <td>公司名称</td>
              <td colspan="3" v-for="item in fMblnoOptions" v-if="item.fId == form.fCorpid">{{ item.fName }}</td>
              <td>出库日期</td>
              <td colspan="3">{{ form.fBsdate | fBsdateFormat }}</td>
            </tr>
            <tr>
              <td style="width: 15%">货物名称</td>
              <td>提单号</td>
              <td>箱号</td>
              <td>件数</td>
              <td>计量单位(吨)</td>
              <td>封号</td>
              <td>库位</td>
              <td>备注</td>
            </tr>
            <tr v-for="(item, index) in detailList" :key="index">
              <td v-for="row in goodsOptions" v-if="row.fId == item.fGoodsid">{{ row.fName }}</td>
              <td>{{ item.fMblno }}</td>
              <td>{{ item.fCntrno }}</td>
              <td>{{ item.fQty }}</td>
              <td>{{ (item.fGrossweight / 1000).toFixed(4) }}</td>
              <td>{{ item.fSealno }}</td>
              <td>{{ item.fWarehouseInformation }}</td>
              <td>{{ item.remark }}</td>
            </tr>
            <tr>
              <td>车号</td>
              <td colspan="2">{{ form.fTruckno }}</td>
              <td colspan="2">身份证号</td>
              <td colspan="3">{{ form.fDriverIdCar }}</td>
            </tr>
            <tr>
              <td>地址</td>
              <td colspan="7">{{ stockaddr }}</td>
            </tr>
            <tr>
              <td colspan="8">
                雨/雪天装货司机自愿装车，出现货物水湿与仓库无关！数量准确无误，货物包装完好！
              </td>
            </tr>
          </table>
        </div>
      </div>

      <span slot="footer" class="dialog-footer">
        <el-button
          type="primary"
          @click="
            addprint('ckd');
            printVisible = false;
          "
        >打印
        </el-button>
        <el-button @click="printVisible = false">取消</el-button>
      </span>
    </el-dialog>
    <span slot="footer" class="dialog-footer">
      <el-button type="warning" @click="openPrint" :disabled="detailList.length == 0">打印</el-button>
      <el-button type="primary" @click="handleConfirm" :disabled="detailList.length == 0">确认出库</el-button>
      <el-button @click="closeDialog">取消</el-button>
    </span>
  </el-dialog>
</template>

<script>
import Cookies from "js-cookie";
import draggable from "vuedraggable";
import {listCorps} from "@/api/basicdata/corps";
import {
  treeselect,
  listWarehousesss,
} from "@/api/basicdata/warehouse";
import {listGoods} from "@/api/basicdata/goods";
import {queryUserVal} from "@/api/system/user";
import {listWhgenleg} from "@/api/reportManagement/whgenleg";
import {addSet, resetModule, select} from '@/api/system/set';
import {changeSelect,fastOutStock} from "@/api/warehouseBusiness/fastOutStock";
import print from "print-js";

export default {
  name: "fastOutStock",
  props: {},
  components: {
    draggable,
  },
  data() {
    return {
      disabled: false,
      visible: false,
      printVisible: false,
      company: '',
      form: {},
      detailList: [],
      fMblnoOptions: [],
      // 仓库
      warehouseOptions: [],
      // 品名
      goodsOptions: [],
      // 品名属性
      fStorageTypeOptions: [],
      fWarehouseidOptions: [],
      rules: {
        fCorpid: [{required: true, message: " ", trigger: "blur"}],
        fBsdate: [{required: true, message: " ", trigger: "blur"}],
        fWarehouseid: [{required: true, message: " ", trigger: "blur"}],
        fTruckno: [{required: true, message: " ", trigger: "blur"}],
      },
      selection:[],

      // 设置列开关
      showSetting: false,
      setRowList: [],
      getRowList: [],
      tableDate: [
        {
          surface: "1",
          label: "fMblno",
          name: "提单号",
          checked: 0,
          width: 100,
        },
        {
          surface: "2",
          label: "fCntrno",
          name: "箱号",
          checked: 0,
          width: 100,
        },
        {
          surface: "3",
          label: "fSealno",
          name: "封号",
          checked: 0,
          width: 100,
        },
        {
          surface: "4",
          label: "fGoodsid",
          name: "品名",
          checked: 0,
          width: 150,
        },
        {
          surface: "5",
          label: "fBusinessType",
          name: "货物属性",
          checked: 0,
          width: 100,
        },
        {
          surface: "6",
          label: "fMarks",
          name: "属性详情",
          checked: 0,
          width: 100,
        },
        {
          surface: "7",
          label: "fWarehouseInformation",
          name: "库区",
          checked: 0,
          width: 150,
        },
        {
          surface: "8",
          label: "fPlanqty",
          name: "结余库存",
          checked: 0,
          width: 100,
        },
        {
          surface: "9",
          label: "fPlangrossweight",
          name: "结余毛重(kg)",
          checked: 0,
          width: 120,
        },
        {
          surface: "10",
          label: "fPlannetweight",
          name: "结余净重(kg)",
          checked: 0,
          width: 120,
        },
        {
          surface: "11",
          label: "fQty",
          name: "件数",
          checked: 0,
          width: 100,
        },
        {
          surface: "12",
          label: "fGrossweight",
          name: "毛重(kg)",
          checked: 0,
          width: 120,
        },
        {
          surface: "13",
          label: "fNetweight",
          name: "净重(kg)",
          checked: 0,
          width: 120,
        },
        {
          surface: "14",
          label: "remark",
          name: "备注",
          checked: 0,
          width: 100,
        },
      ],
      // 库位的地址
      stockaddr: '',
      balance: 0,
      //自定义列宽
      allCheck: false,
      drag: false,
    }
  },
  created() {
    this.setRowList = this.tableDate;
    this.getRowList = this.tableDate;
    listCorps({type: 1}).then((response) => {
      this.fMblnoOptions = response.rows;
    });
    listWarehousesss({fStatus: 0, delFlag: 0}).then((response) => {
      this.warehouseOptions = response.rows;
    });
    listGoods({fStatus: 0, delFlag: 0}).then((response) => {
      this.goodsOptions = response.rows;
    });
    this.getDicts("storage_type").then((response) => {
      this.fStorageTypeOptions = response.data;
      localStorage.setItem("fStorageTypeList", JSON.stringify(response.data));
    });
    this.getRow()
  },
  filters: {
    fBsdateFormat(row) {
      if (row) {
        const dateMat = new Date(row);
        const year = dateMat.getFullYear();
        const month = dateMat.getMonth() + 1;
        const day = dateMat.getDate();
        const timeFormat = year + "-" + month + "-" + day;
        return timeFormat;
      }
    },
  },
  methods: {
    // 打开
    init() {
      this.queryUser();
      this.company = Cookies.get("companyName")
      this.visible = true;
    },
    // 关闭弹窗
    closeDialog() {
      this.visible = false;
      this.form = {}
      this.detailList = []
      this.$refs.form.clearValidate();
      this.$emit("closeDialog")
    },
    //获取登陆人
    queryUser() {
      queryUserVal().then((response) => {
        if (response.user !== null) {
          this.userVal = response.user;
          this.$set(this.form, "fDeptid", this.userVal.deptId);
          this.$set(this.form, "createBy", this.userVal.userName);
          this.$set(this.form, "fStorekeeper", this.userVal.nickName);
          this.$set(this.form, "fIfdamage", "1");
          this.$set(this.form, "fIfweigh", "1");
          this.$set(this.form, "fTrademodeid", "1");
          this.$set(this.form, "createTime", Date.parse(new Date()));
          this.$set(this.form, "fBstime", Date.parse(new Date()));
          this.$set(this.form, "fFeetUnit", "2");
          this.$set(this.form, "fFeetunit", 2);
          this.$set(this.form, "fBusinessType", "5");
        }
        if (response.dept !== null) {
          this.deptOptions = [];
          this.deptOptions.push(response.dept);
        }
      });
    },
    handleSelection(list) {
      this.selection = list
    },
    // 打开打印窗口
    openPrint() {
      this.balance = 0;
      for (let item in this.detailList) {
        if (!this.detailList[item].fCntrno) {
          return this.$message.error('第' + (Number(item) + 1) + '行箱号不能为空')
        }
        if (this.detailList[item].fPlanqty < this.detailList[item].fQty) {
          return this.$message.error("第" + (Number(item) + 1) + "行出库件数超出结余件数!");
        }
        this.balance = this.detailList[item].fPlanqty
        console.log(this.detailList[item])
        for (let item1 in this.detailList) {
          if (this.detailList[item].fSrcid == this.detailList[item1].fSrcid) {
            this.balance = Number(this.balance) - Number(this.detailList[item].fQty)
            if (this.balance < 0) {
              return this.$message.error("第" + (Number(item1) + 1) + "行出库件数超出结余件数!");
            }
          }
        }
      }
      this.warehouseOptions.map((e) => {
        if (e.fId == this.form.fWarehouseid) {
          this.stockaddr = e.fAddr;
        }
      });
      this.allfQty = 0;
      this.detailList.forEach(item => {
        this.allfQty += Number(item.fQty)
      })
      this.printVisible = true;
    },
    handleConfirm(){
      this.$refs["form"].validate(vaild => {
        if (vaild) {
          if (!this.form.fTruckno) return this.$message.error('车号不能为空')
          let fPlanqty = 0;
          let fPlannetweight = 0;
          let fPlangrossweight = 0;
          this.detailList.forEach(item => {
            this.$set(item, 'fBsdate', this.form.fBsdate)
            this.$set(item, 'fOriginalbillno', item.fMblno)
            this.$set(item, 'fIsPass', 'T')
            this.$set(item, 'fStltypeid', '1')
            this.$set(item, 'fTruckno', this.form.fTruckno)
            fPlanqty += Number(item.fQty)
            fPlannetweight += Number(item.fNetweight)
            fPlangrossweight += Number(item.fGrossweight)
            delete item.deleteId
          })
          this.$set(this.form, 'fStltypeid', '1')
          this.$set(this.form, 'fPlanqty', fPlanqty)
          this.$set(this.form, 'fPlannetweight', fPlannetweight)
          this.$set(this.form, 'fPlangrossweight', fPlangrossweight)
          this.$set(this.form, 'fQty', fPlanqty)
          this.$set(this.form, 'fNetweight', fPlannetweight)
          this.$set(this.form, 'fGrossweight', fPlangrossweight)
          this.$set(this.form, 'fChargedate', this.form.fBsdate)
          let fProductName = []
          this.detailList.map((e) => {
            this.goodsOptions.map((item) => {
              if (e.fGoodsid == item.fId) {
                fProductName.push(item.fName);
              }
            });
          });
          fProductName = [...new Set(fProductName)];
          // this.form.fProductName = fProductName.join(",");
          this.$set(this.form, 'fProductName', fProductName.join(","))
          let fMarks = []
          this.detailList.map((e) => {
            fMarks.push(e.fMarks);
          });
          fMarks = [...new Set(fMarks)];
          // this.form.fMarks = fMarks.join(",");
          this.$set(this.form, 'fMarks', fMarks.join(","))
          let data = {warehousebillsitemsList: this.detailList}
          data = Object.assign({}, data, this.form)
          fastOutStock(data).then(res => {
            this.$message.success('出库成功')
            this.closeDialog()
          })
        }
      })
    },
    addList() {
      this.$refs["form"].validate(valid => {
        if (valid) {
          this.getDetailsList()
        }
      })
    },
    // 查询库存总账
    getDetailsList() {
      // this.detailList = []
      this.disabled = true
      let queryParams = {
        fMblno: this.form.fMblno,
        fCorpid: this.form.fCorpid,
        fWarehouseid: this.form.fWarehouseid,
        fTrademodeid: this.form.fTrademodeid
      }
      listWhgenleg(queryParams).then((response) => {
        response.rows.map((e) => {
          e.fQtyblc2 = e.fQtyblc;
          e.fGrossweightblc2 = e.fGrossweightblc;
          e.fNetweightblc2 = e.fNetweightblc;
        });
        // this.detailList = response.rows;
        let arr = [];
        response.rows.map(e => {
          let index = this.detailList.findIndex(item => {
            return item.fSrcid === e.fId
          })
          if (index == -1) {
            arr.push({
              fId: null,
              fBsdate: this.form.fBsdate,
              fMblno: e.fMblno,
              fGoodsid: e.fGoodsid,
              fCntrtype: null,
              fPlanqty: e.fQtyblc,
              fPlannetweight: e.fNetweightblc,
              fPlangrossweight: e.fGrossweightblc,
              fWarehouseLocationids: e.fWarehouseLocationids,
              fGoodsids: e.fGoodsids,
              fBillingway: e.fBillingway,
              fChargedate: e.fChargedate,
              fMarks: e.fMarks,
              fOriginalbilldate: e.fOriginalbilldate,
              fOriginalbillno: e.fOriginalbillno,
              fPackagespecs: e.fPackagespecs,
              fGrossweight: e.fGrossweightblc2,
              fNetweight: e.fNetweightblc2,
              fQty: e.fQtyblc2,
              fCntqty: 1,
              fBillstatus: 10,
              fWarehouselocid: e.fWarehouseLocationid,
              fWarehouselocids: e.fWarehouseLocationids,
              fCntrno: e.fCntrno,
              fGoodsval: null,
              fTruckno: response.rows.fTruckno,
              remark: null,
              fIsPass: "T",
              fDriverName: response.rows.fDriverName,
              fDriverTel: response.rows.fDriverTel,
              fDriverIdCar: response.rows.fDriverIdCar,
              fBusinessType: e.fBusinessType ? e.fBusinessType.toString() : null,
              fWarehouseInformation: e.fWarehouseids,
              fSrcid: e.fId,
              fSrcBsdate: e.fBsdate,
              deleteId: e.fId,
            })
          }
        })
        this.detailList = this.detailList.concat(arr)
        console.log(this.detailList)
        this.disabled = false
      });
    },
    // 修改毛重净重
    changeOutStock(row) {
      this.$refs['detailTable'].clearSelection()
      let fNetweight = 0;
      let fGrossweight = 0;
      if (row.fNetweight) {
        fNetweight = row.fNetweight;
      }
      if (row.fGrossweight) {
        fGrossweight = row.fGrossweight;
      }
      if (row.fPlannetweight < fNetweight) {
        this.$message({message: "出库净重超出结余净重", type: "warning"});
        return false;
      }
      if (row.fPlangrossweight < fGrossweight) {
        this.$message({message: "出库毛重超出结余毛重", type: "warning"});
        return false;
      }
    },
    // 出库件数的计算
    qtyChange(row) {
      if (row.fPlanqty < row.fQty) {
        this.$message.error("出库件数超出结余件数!");
        this.$set(row, "fQty", 0);
        this.$set(row, "fNetweight", 0);
        this.$set(row, "fGrossweight", 0);
        return false;
      }
      if (row.fQtyblc2 > row.fQtyblc) {
        this.$message.error("出库件数超出结余件数!");
        this.$set(row, "fQtyblc2", 0);
        this.$set(row, "fGrossweightblc2", 0);
        this.$set(row, "fNetweightblc2", 0);
        return false;
      }
      this.$set(
        row,
        "fNetweight",
        parseFloat(
          (Number(row.fPlannetweight) / Number(row.fPlanqty)) * Number(row.fQty)
        ).toFixed(2)
      );
      this.$set(
        row,
        "fGrossweight",
        parseFloat(
          (Number(row.fPlangrossweight) / Number(row.fPlanqty)) *
          Number(row.fQty)
        ).toFixed(2)
      );
      this.$set(
        row,
        "fNetweightblc2",
        parseFloat(
          (Number(row.fNetweightblc) / Number(row.fQtyblc)) *
          Number(row.fQtyblc2)
        ).toFixed(2)
      );
      this.$set(
        row,
        "fGrossweightblc2",
        parseFloat(
          (Number(row.fGrossweightblc) / Number(row.fQtyblc)) *
          Number(row.fQtyblc2)
        ).toFixed(2)
      );
    },
    // 明细删除
    wDeleteRow(index, rows) {
      rows.splice(index, 1);
    },
    // 批量删除
    batchDelete() {
      this.$confirm('是否确认删除选中数据','提示',{
        confirmButtonText: '确定',
        cancelButtonText: '取消',
        type: 'warning'
      }).then(() => {
        this.selection.forEach(item => {
          console.log(item.deleteId)
          let index = this.detailList.findIndex(item1 => {
            return item1.deleteId == item.deleteId
          })
          this.detailList.splice(index,1)
        })
        this.$message({
          type: 'success',
          message: '删除成功!'
        });
      }).catch(() => {
        this.$message({
          type: 'info',
          message: '已取消删除'
        });
      });
    },
    changeMblno() {
      if (this.detailList.length == 0) {
        this.$set(this.form, "fCorpid", '')
        this.$set(this.form, "fWarehouseid", '')
        this.$set(this.form, "fGoodsid", '')
        if (this.form.fMblno) {
          let data = {
            type: 'mblno',
            fMblno: this.form.fMblno
          }
          changeSelect(data).then(res => {
            this.fMblnoOptions = res.data.corpsList
            this.warehouseOptions = res.data.warehouseList
            this.goodsOptions = res.data.whgenlegVOList
            if (this.fMblnoOptions.length > 0) {
              this.form.fCorpid = this.fMblnoOptions[0].fId
              let data1 = {
                type: 'corp',
                fMblno: this.form.fMblno,
                corpId: this.form.fCorpid
              }
              changeSelect(data1).then(res => {
                this.warehouseOptions = res.data.warehouseList
                this.goodsOptions = res.data.whgenlegVOList
                if (this.warehouseOptions.length > 0) {
                  this.form.fWarehouseid = this.warehouseOptions[0].fId
                  let data2 = {
                    type: 'warehouse',
                    fMblno: this.form.fMblno,
                    corpId: this.form.fCorpid,
                    warehouseId: this.form.fWarehouseid
                  }
                  changeSelect(data2).then(res => {
                    this.goodsOptions = res.data.goodsVOList
                    if (this.goodsOptions.length > 0) {
                      this.form.fGoodsid = this.goodsOptions[0].fId
                    }
                  })
                }
              })
            }
          })
        }else {
          listCorps({ type: 1 }).then((response) => {
            this.fMblnoOptions = response.rows
          })
          listWarehousesss({ fStatus: 0, delFlag: 0 }).then((response) => {
            this.warehouseOptions = response.rows;
          })
          listGoods({fStatus: 0, delFlag: 0}).then((response) => {
            this.goodsOptions = response.rows;
          });
        }
      }
    },
    changeCorp() {
      if (this.form.fMblno && this.form.fCorpid) {
        this.$set(this.form, "fWarehouseid", '')
        this.$set(this.form, "fGoodsid", '')
        let data = {
          type: 'corp',
          fMblno: this.form.fMblno,
          corpId: this.form.fCorpid
        }
        changeSelect(data).then(res => {
          this.warehouseOptions = res.data.warehouseList
          this.goodsOptions = res.data.whgenlegVOList
          if (this.warehouseOptions.length > 0) {
            this.form.fWarehouseid = this.warehouseOptions[0].fId
            let data1 = {
              type: 'warehouse',
              fMblno: this.form.fMblno,
              corpId: this.form.fCorpid,
              warehouseId: this.form.fWarehouseid
            }
            changeSelect(data1).then(res => {
              this.goodsOptions = res.data.goodsVOList
              if (this.goodsOptions.length > 0) {
                this.form.fGoodsid = this.goodsOptions[0].fId
              }
            })
          }
        })
      } else if (this.form.fMblno && !this.form.fCorpid) {
        this.$set(this.form, "fWarehouseid", '')
        this.$set(this.form, "fGoodsid", '')
        this.warehouseOptions = []
        this.goodsOptions = []
      }
    },
    changefWarehouseid() {
      if (this.form.fMblno && this.form.fCorpid && this.form.fWarehouseid) {
        this.$set(this.form, "fGoodsid", '')
        let data = {
          type: 'warehouse',
          fMblno: this.form.fMblno,
          corpId: this.form.fCorpid,
          warehouseId: this.form.fWarehouseid
        }
        changeSelect(data).then(res => {
          this.goodsOptions = res.data.goodsVOList
          if (this.goodsOptions.length > 0) {
            this.form.fGoodsid = this.goodsOptions[0].fId
          }
        })
      } else if (this.form.fMblno && !this.form.fWarehouseid) {
        this.$set(this.form, "fGoodsid", '')
        this.goodsOptions = []
      }
      treeselect(this.form.fWarehouseid).then((response) => {
        this.fWarehouseidOptions = response.data;
      });
    },
    goodsChange(data) {
    },
    addprint(status) {
      const style =
        "@page {  } " +
        "@media print { .print-div{ padding:8px;background-color:#cccccc;} .print-title{display:flex;justify-content: center;font-size:24px} .print_form{font-size:12px} .print_table table {border-right: 1px solid #000;border-bottom: 1px solid #000;font-size:12px} .print_table table td {border-left: 1px solid #000;border-top: 1px solid #000;padding:2px;vertical-align:middle;text-align: center;}";
      if (status == 'ckd') {
        print({
          printable: "print_ckd",
          type: "html",
          style: style, // 亦可使用引入的外部css;
          scanStyles: false,
        });
      }
    },
    // 合计
    getSummaries(param) {
      const {columns, data} = param;
      const sums = [];
      var values = [];
      columns.forEach((column, index) => {
        if (index === 0) {
          sums[index] = "";
          return;
        }
        if (column.property === "fGrossweight") {
          values = data.map((item) => Number(item["fGrossweight"]));
        }
        if (column.property === "fNetweight") {
          values = data.map((item) => Number(item["fNetweight"]));
        }
        if (column.property === "fQty") {
          values = data.map((item) => Number(item["fQty"]));
        }
        if (column.property === "fCntqty") {
          values = data.map((item) => Number(item["fCntqty"]));
        }
        if (
          column.property === "fGrossweight" ||
          column.property === "fNetweight" ||
          column.property === "fQty" ||
          column.property === "fCntqty"
        ) {
          sums[index] = values.reduce((prev, curr) => {
            const value = Number(curr);
            if (!isNaN(value)) {
              if (column.property === "fGrossweight") {
                this.fGrossweight = prev + curr;
              }
              if (column.property === "fNetweight") {
                this.fNetweight = prev + curr;
              }
              if (column.property === "fQty") {
                this.fQty = prev + curr;
                this.sumMum = prev + curr;
              }
              if (column.property === "fCntqty") {
                this.fCntqty = prev + curr;
              }
              return prev + curr;
            } else {
              return prev;
            }
          }, 0);
          if (column.property === "fGrossweight") {
            sums[index] = (sums[index] / 1000).toFixed(4) + "吨";
          } else if (column.property === "fNetweight") {
            sums[index] = (sums[index] / 1000).toFixed(4) + "吨";
          } else {
            // sums[index] = sums[index].toFixed(2);
            sums[index] = sums[index]
          }
        }
      });
      this.sums = sums;
      return sums;
    },

    //列设置全选
    allChecked() {
      if (this.allCheck == true) {
        this.setRowList.map((e) => {
          return (e.checked = 0);
        });
      } else {
        this.setRowList.map((e) => {
          return (e.checked = 1);
        });
      }
    },
    //开始拖拽事件
    onStart() {
      this.drag = true;
    },
    //拖拽结束事件
    onEnd() {
      this.drag = false;
    },
    //重置列表
    delRow() {
      this.data = {
        tableName: "快速出库明细",
        userId: Cookies.get("userName"),
      };
      resetModule(this.data).then((res) => {
        if (res.code == 200) {
          this.showSetting = false;
          this.setRowList = this.tableDate;
          console.log(this.setRowList)
          this.getRowList = this.tableDate;
        }
      });
    },
    //保存列设置
    save() {
      this.showSetting = false;
      this.data = {
        tableName: "快速出库明细",
        userId: Cookies.get("userName"),
        sysTableSetList: this.setRowList,
      };
      addSet(this.data).then((res) => {
        this.getRowList = this.setRowList.filter((e) => e.checked == 0);
      });
    },
    //查询列数据
    getRow() {
      let that = this;
      this.data = {
        tableName: "快速出库明细",
        userId: Cookies.get("userName"),
      };
      select(this.data).then((res) => {
        if (res.data.length != 0) {
          this.getRowList = res.data.filter((e) => e.checked == 0);
          this.setRowList = res.data;
          this.setRowList = this.setRowList.reduce((res, item) => {
            res.push({
              surface: item.surface,
              label: item.label,
              name: item.name,
              checked: item.checked,
              width: item.width,
              fixed: item.fixed,
            });
            return res;
          }, []);
        }
      });
    },
  },
}
</script>

<style scoped lang="scss">
.print-div {
  color: #000;
}
.print_table {
  table {
    border-right: 1px solid #000;
    border-bottom: 1px solid #000;
    font-size: 12px;
    margin-bottom: 5px;
  }

  table td {
    border-left: 1px solid #000;
    border-top: 1px solid #000;
    vertical-align: middle;
    padding: 2px;
    text-align: center;
  }
}

.print_form {
  font-size: 12px;
}
</style>
