<template>
  <div class="sellOutOrder pagePadding">
    <ex-table
      v-loading="loading"
      :table="table"
      :data="tableData"
      :columns="columns"
      :page="pageInfo"
      :size="size"
      @page-curr-change="handlePageChange"
      @page-size-change="handleSizeChange"
      @screen-reset="
        pageInfo.curr = 1;
        parmValue.page = 1;
        searchList();
      "
      @screen-submit="
        pageInfo.curr = 1;
        parmValue.page = 1;
        searchList();
      "
      @selection="selection_change"
    >
      <template #table-header="{}">
        <div style="width: 100%">
          <el-row style="padding: 0 0 0 80px">
            <el-col :span="4" style="width: 110px">
              <el-dropdown @command="handleClick($event)" :size="searchSize">
                <el-button :size="searchSize" style="width: 100px">
                  {{ sselect }}
                  <i class="el-icon-arrow-down el-icon--right" :size="searchSize"></i>
                </el-button>
                <el-dropdown-menu slot="dropdown">
                  <el-dropdown-item
                    style="width: 100px"
                    v-for="item in options"
                    :key="item"
                    :command="item"
                    >{{ item }}</el-dropdown-item
                  >
                </el-dropdown-menu>
              </el-dropdown>
            </el-col>
            <el-col :span="4" style="width: 290px">
              <period-date-picker
                :type="1"
                :start="timeOBJ.start"
                :end="timeOBJ.end"
                :width="'134px'"
                :size="searchSize"
                @timeReturned="handleTime"
              />
            </el-col>
            <el-col :span="4" style="width: 230px; padding: 0px 0 0 10px">
              <search-customer
                :value="customerCode"
                :size="searchSize"
                :placeholder="'客户公司名称'"
                :names="parmValue.supplierName"
                :is-detail="true"
                @searchChange="customerChange"
              />
            </el-col>
            <el-col :span="3" style="width: 66px; float: right">
              <el-button
                :size="searchSize"
                type="primary"
                style="float: right; margin-left: 5px"
                @click="searchList"
              >
                刷新
              </el-button>
            </el-col>
            <el-col :span="4" style="width: 66px; float: right">
              <el-button
                type="primary"
                style="margin-left: 30px"
                @click="download"
                :size="searchSize"
                class="fr"
              >
                导出
              </el-button>
            </el-col>
          </el-row>
          <el-row style="padding-top: 10px">
            <el-col :span="4" style="width: 150px">
              <el-select
                :size="searchSize"
                v-model="parmValue.status"
                filterable
                clearable
                placeholder="状态"
                style="width: 100%"
                @change="
                  pageInfo.curr = 1;
                  parmValue.page = 1;
                  searchList();
                "
              >
                <el-option
                  v-for="item in statusOptions"
                  :key="'status' + item.id"
                  :label="item.label"
                  :value="item.id"
                />
              </el-select>
            </el-col>
            <el-col :span="4" style="width: 500px; padding: 0 0 0 10px">
              <el-input
                clearable
                :size="searchSize"
                placeholder="关键字"
                v-model="s_input"
                maxlength="40"
                class="input-with-select"
              >
                <el-select
                  style="width: 140px"
                  v-model="select"
                  slot="prepend"
                  placeholder="关键字类型"
                  ><el-option label="销售订单编号" value="cgdNo" />
                  <!-- <el-option label="销售订单编号" value="orderCode" /> -->
                  <el-option label="发货申请单编号" value="outCode" />
                  <!-- <el-option label="供应商编号" value="supplierNo" /> -->
                  <el-option label="商品编号" value="good_code" />
                  <el-option label="商品名称" value="good_name" />
                  <el-option label="申请人部门" value="company_name" />
                  <el-option label="申请人" value="apply_name" />
                </el-select>
                <el-button
                  slot="append"
                  icon="el-icon-search"
                  @click="
                    pageInfo.curr = 1;
                    parmValue.page = 1;
                    handleValue();
                  "
                ></el-button>
              </el-input>
            </el-col>
            <el-col :span="4" style="width: 66px" class="fr">
              <el-button type="warning" class="fr" :size="searchSize" @click="restSearch">
                重置
              </el-button>
            </el-col>
          </el-row>
        </div>
      </template>
      <template #status="{ scope }">
        <el-tag
          :size="tablebtnSize"
          :type="scope.row.status == '0' ? 'warning' : ''"
          v-text="
            (statusOptions.find((item) => item.id == scope.row.status) || {}).label ||
            '--'
          "
        ></el-tag>
      </template>
      <template #order_type="{ scope }">
        <el-tag
          :size="tablebtnSize"
          v-text="
            (xs_order_type_options.find((item) => item.id == scope.row.order_type) || {})
              .label || '--'
          "
        ></el-tag>
      </template>
      <template #operation="{ scope }">
        <el-tooltip effect="dark" content="详情" placement="top">
          <i
            class="el-icon-view tb-icon"
            @click="getRouter('/sellOutOrder/sDetail', scope.row.outCode)"
          ></i>
        </el-tooltip>
      </template>
    </ex-table>
  </div>
</template>
<script>
import mixinPage from "@/mixins/elPaginationHandle";
import resToken from "@/mixins/resToken";
import { mapGetters } from "vuex";
import urlConfig from "@/apis/url-config";
import asyncRequest from "@/apis/sellOutOrder";
import { columns } from "./columns";
import { xs_order_type_options } from "@/assets/js/statusList";
export default {
  name: "sellOutOrder",
  mixins: [mixinPage, resToken],

  computed: {
    ...mapGetters(["tablebtnSize", "searchSize", "size", "business_companyNo"]),
    maxNo() {
      return this.business_companyNo;
    },
  },
  watch: {
    maxNo(val, oldval) {
      this.restSearch();
      // console.log(val, oldval);
    },
  },
  data() {
    return {
      select: "cgdNo",
      s_input: "",
      customerCode: [], //客户公司code
      fileUrl: urlConfig.baseURL,
      options: ["申请时间", "发货时间"],
      sselect: "申请时间",
      changeList: [],
      sitem: null,
      statusOptions: [
        { id: "0", label: "待发货" },
        { id: "1", label: "待库管发货" },
        { id: "2", label: "已发货待收货" },
        { id: "3", label: "已收货" },
        { id: "4", label: "已全部退货" },
      ],
      loading: false,
      isDetail: false,
      timeOBJ: {
        start: "", //起始时间
        end: "", // 结束时间
      },
      modelId: 0,
      parmValue: {
        order_type: "",
        orderCode: "",
        apply_name: "", //申请人名称
        cgdNo: "",
        start: "",
        end: "",
        start_sendtime: "",
        end_sendtime: "",

        // supplierNo: "",
        companyNo: "",
        good_code: "",
        good_name: "",
        outCode: "",
        status: "",
        company_name: "", //申请人部门
        page: 1, // 页码
        size: 15, // 每页显示条数
      },
      // 表格 - 数据
      tableData: [],
      // 表格 - 参数
      table: {
        stripe: true,
        border: true,
        _defaultHeader_: ["setcol"],
      },
      // 表格 - 分页
      pageInfo: {
        size: 15,
        curr: 1,
        total: 0,
      },
      // 表格 - 列参数
      columns,
      xs_order_type_options,
    };
  },
  mounted() {
    const { back } = this.$route.query;
    if (back) {
      this.parmValue = JSON.parse(back);
      const { page, size } = this.parmValue;
      if (this.parmValue.companyNo.length > 0) {
        this.customerCode = [this.parmValue.companyNo];
      }
      this.pageInfo = {
        size: size,
        curr: page,
        total: 0,
      };
      //多选条件
      this.select = this.parmValue.select;
      // this.sselect = this.parmValue.sselect;
      this.s_input = this.parmValue.s_input;
    } else {
      this.select = "cgdNo";
      //  this.sselect = "创建时间"
    }
    this.searchList();
  },

  methods: {
    getRouter(toRouter, queryId) {
      if (toRouter && queryId) {
        let model = {
          id: queryId,
        };
        //有多选框的条件
        this.parmValue.select = this.select;
        this.parmValue.s_input = this.s_input;
        const routerModel = {
          options: JSON.parse(JSON.stringify(this.parmValue)),
          router: this.$route.path,
        };
        model.preModel = JSON.stringify(routerModel);
        this.routeGoto(toRouter, model);
      } else {
        this.$message.warning("暂未找到相关流程！");
      }
    },
    //选中触发函数
    selection_change(e) {
      const { list } = e;
      //选中的数组集合
      this.changeList = list.length > 0 ? JSON.parse(JSON.stringify(list)) : [];
    },
    //导出文件 （）
    async download() {
      if (this.loading) return;
      if (this.changeList.length <= 0) {
        this.$message.warning("请选择有效数据");
        return;
      }
      this.loading = true;
      const url = this.fileUrl + "abutment/exportsaleout",
        httpType = `aplication/zip`,
        excelName = "发货申请单.zip";
      let outCodes = [];
      this.changeList.forEach((item) => {
        outCodes.push(item.outCode);
      });
      const { code } = await this.pageHttpDownload(
        url,
        { outCodes },
        httpType,
        excelName
      );
      if (code === 0) {
        this.$message.success(`发货申请单导出成功！`);
      } else {
        this.$message.success(`发货申请单导出失败！`);
      }
      setTimeout(() => {
        this.loading = false;
      }, 500);
    },
    restSearch() {
      this.customerCode = [];
      this.select = "cgdNo";
      this.s_input = "";
      this.timeOBJ = {
        start: "", //起始时间
        end: "", // 结束时间
      };
      this.parmValue = {
        order_type: "",
        orderCode: "",
        apply_name: "", //申请人名称
        cgdNo: "",
        start: "",
        end: "",
        start_sendtime: "",
        end_sendtime: "",
        // supplierNo: "",
        companyNo: "",
        good_code: "",
        good_name: "",
        outCode: "",
        status: "",
        company_name: "", //申请人部门
        page: 1, // 页码
        size: 15, // 每页显示条数
      };
      // 表格 - 分页
      this.pageInfo = {
        size: 15,
        curr: 1,
        total: 0,
      };
      this.searchList();
    },

    // 列表搜索
    async searchList() {
      if (this.loading) return;
      if (
        (this.timeOBJ.start !== "" && this.timeOBJ.end === "") ||
        (this.timeOBJ.start === "" && this.timeOBJ.end !== "")
      ) {
        this.$message.warning("时间区间不完整！");
        return;
      }
      this.loading = true;
      let model = JSON.parse(JSON.stringify(this.parmValue));

      const res = await asyncRequest.list(model);
      const { code, data } = await this.useResHandle(res);
      if (code === 0) {
        const { list, count } = data ?? {};
        this.tableData = list ?? [];
        this.pageInfo.total = Number(count);
        this.tableData.forEach((v) => {
          v.good_class = "";
          if (v.can && v.can.length > 0) {
            v.can.forEach((x, i) => {
              v.good_class += i === 0 ? x.name : "/" + x.name;
            });
          }
        });
      } else {
        this.tableData = [];
        this.pageInfo.total = 0;
      }
      this.loading = false;
    },
    async handleClick(e) {
      this.sselect = e;
      this.parmValue.start = e === "申请时间" ? this.timeOBJ.start : "";
      this.parmValue.end = e === "申请时间" ? this.timeOBJ.end : "";
      this.parmValue.start_sendtime = e !== "发货时间" ? this.timeOBJ.start : "";
      this.parmValue.end_sendtime = e !== "发货时间" ? this.timeOBJ.end : "";
      if (
        !(
          (this.timeOBJ.start !== "" && this.timeOBJ.end === "") ||
          (this.timeOBJ.start === "" && this.timeOBJ.end !== "")
        )
      ) {
        this.parmValue.page = 1;
        this.pageInfo.curr = 1;
        await this.searchList();
      }
    },

    // 时间选择事件
    async handleTime(e) {
      this.timeOBJ.start = e?.startTime ?? "";
      this.timeOBJ.end = e?.endTime ?? "";
      await this.handleClick(this.sselect);
    },
    async customerChange(e) {
      const { code, label } = e ?? {};
      this.customerCode = code ? [code] : [];
      this.parmValue.supplierName = label ?? "";
      this.parmValue.companyNo = code ?? "";
      this.pageInfo.curr = 1;
      this.parmValue.page = 1;
      await this.searchList();
    },
    async handleValue() {
      this.parmValue.orderCode = this.select === "orderCode" ? this.s_input : "";
      this.parmValue.outCode = this.select === "outCode" ? this.s_input : "";
      // this.parmValue.supplierNo =
      //   this.select === "supplierNo" ? this.s_input : "";
      this.parmValue.good_code = this.select === "good_code" ? this.s_input : "";
      this.parmValue.good_name = this.select === "good_name" ? this.s_input : "";
      this.parmValue.apply_name = this.select === "apply_name" ? this.s_input : "";
      this.parmValue.cgdNo = this.select === "cgdNo" ? this.s_input : "";
      this.parmValue.company_name = this.select === "company_name" ? this.s_input : "";

      await this.searchList();
    },
  },
};
</script>
<style lang="scss" scoped>
.zxoutOrder {
}
</style>
