<template>
  <div class="app-container">
    <el-form
      :model="queryParams"
      ref="queryForm"
      v-show="showSearch"
      label-width="70px"
      size="small"
    >
      <el-row>
        <el-col :xs="12" :sm="6">
          <el-form-item label="客户名称">
            <el-select
              v-model="queryParams.fCorpid"
              clearable
              filterable
              placeholder="请输入客户名称"
            >
              <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="仓库">
            <el-select v-model="queryParams.fWarehouseid" placeholder="请选择仓库库区" clearable filterable>
              <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="库管员">
            <el-select
              v-model="queryParams.fStorekeeper"
              filterable
              clearable
              placeholder="请选择库管员"
            >
              <el-option
                v-for="(item, index) in userOptions"
                :key="index.userName"
                :label="item.nickName"
                :value="item.userName"
              ></el-option>
            </el-select>
          </el-form-item>
        </el-col>
        <el-col :xs="12" :sm="6">
          <el-form-item label="截止日期">
            <el-date-picker
              v-model="queryParams.fBsdate"
              type="date"
              value-format="yyyy-MM-dd"
              clearable
              style="width: 230px"
              placeholder="选择日期"
            ></el-date-picker>
          </el-form-item>
        </el-col>
      </el-row>
      <!--      列设置-->
      <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>

      <el-row :gutter="10" style="padding-bottom: 10px">
        <el-col :span="1.5">
          <el-button
            type="warning"
            icon="el-icon-download"
            size="mini"
            @click="handleExport"
          >导出</el-button>
        </el-col>
        <div class="tabSetting">
          <div style="margin-right: 20px">
            <el-button
              type="cyan"
              icon="el-icon-search"
              size="mini"
              @click="handleQuery"
            >搜索</el-button
            >
            <el-button icon="el-icon-refresh" size="mini" @click="resetQuery"
            >重置</el-button
            >
            <right-toolbar
              :showSearch.sync="showSearch"
              @queryTable="getList"
            ></right-toolbar>
            <div style="margin: 0 12px;float: right">
              <el-button
                icon="el-icon-setting"
                size="mini"
                circle
                @click="showSetting = !showSetting"
              ></el-button>
            </div>
          </div>
        </div>
      </el-row>
    </el-form>

    <el-tabs v-model="activeName" @tab-click="tabsHandle">
      <el-tab-pane label="出库" name="outStock"></el-tab-pane>
      <el-tab-pane label="在库" name="inStock"></el-tab-pane>
    </el-tabs>
    <el-table
      ref="table"
      v-loading="loading"
      :data="dataList"
      show-summary
      :summary-method="getSum"
      :height="tableHeight"
      stripe
    >
      <el-table-column
        type="index"
        label="行号"
        align="center"
        fixed
      />
      <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
        v-if="item.show"
      >
        <template slot-scope="scope">
          <span v-if="item.label == 'fBsdate'">
            {{ scope.row.fBsdate | fBsdateFormat }}
          </span>
          <span v-else-if="item.label == 'fBilltype'">
            {{ scope.row.fBilltype | billTypeFormat(billTypeList) }}
          </span>
          <span v-else-if="item.label == 'fCorpid'">
            {{ scope.row.fCorpid | fMblnoFormat(fMblnoOptions) }}
          </span>
          <span v-else>{{ scope.row[item.label] }}</span>
        </template>
      </el-table-column>
    </el-table>
    <pagination
      v-show="total > 0"
      :total="total"
      :page.sync="queryParams.pageNum"
      :limit.sync="queryParams.pageSize"
      @pagination="getList"
    />
  </div>
</template>

<script>
import { listCorps } from "@/api/basicdata/corps";
import { listWarehousesss } from "@/api/basicdata/warehouse";
import { queryClerkRoleList } from "@/api/warehouseBusiness/warehouseInStock";
import { getList } from "@/api/warehouseBusiness/warehouseAnalysis";
import Cookies from "js-cookie";
import {addSet, resetModule, select} from '@/api/system/set';
import draggable from "vuedraggable";

export default {
  name: "index",
  components: {
    draggable
  },
  data() {
    return {
      loading: false,
      queryParams: {
        pageNum: 1,
        pageSize: 10,
      },
      total: 0,
      dataList: [],
      tableHeight: '300',
      // 显示搜索条件
      showSearch: true,
      fMblnoOptions: [], //客户
      warehouseOptions: [], //仓库
      userOptions: [],
      billTypeList: [],
      activeName: 'outStock',
      disabledName: 'outStock',

      // 设置列开关
      showSetting: false,
      setRowList: [],
      getRowList: [],
      //自定义列宽
      allCheck: false,
      drag: false,
      tableDate:[
        {
          surface: "1",
          label: "fBilltype",
          name: "业务类型",
          checked: 0,
          width: 150,
          show: true,
        },
        {
          surface: "2",
          label: "fCorpid",
          name: "客户名称",
          checked: 0,
          width: 150,
          show: true,
        },
        {
          surface: "3",
          label: "fMblno",
          name: "提单号",
          checked: 0,
          width: 150,
          show: true,
        },
        {
          surface: "4",
          label: "fQty",
          name: "件数",
          checked: 0,
          width: 80,
          show: true,
        },
        {
          surface: "5",
          label: "fGrossweight",
          name: "毛重",
          checked: 0,
          width: 120,
          show: true,
        },
        {
          surface: "6",
          label: "fWarehouseInformation",
          name: "仓库",
          checked: 0,
          width: 150,
          show: true,
        },
        {
          surface: "7",
          label: "fOriginalbilldate",
          name: "入库日期",
          checked: 0,
          width: 150,
          show: true,
        },
        {
          surface: "8",
          label: "fBsdate",
          name: "出库日期",
          checked: 0,
          width: 150,
          show: true,
        },
        {
          surface: "9",
          label: "fStorekeeper",
          name: "仓管员",
          checked: 0,
          width: 150,
          show: true,
        },
        {
          surface: "10",
          label: "createBy",
          name: "制单人",
          checked: 0,
          width: 150,
          show: true,
        },
        {
          surface: "11",
          label: "createTime",
          name: "制单日期",
          checked: 0,
          width: 150,
          show: true,
        },
      ],
    }
  },
  created() {
    this.setRowList = this.tableDate;
    this.getRowList = this.tableDate;
    this.getDicts("data_billtype_type").then((response) => {
      this.billTypeList = response.data;
    });
    listCorps({ type: 1 }).then((response) => {
      this.fMblnoOptions = response.rows;
    });
    listWarehousesss({fStatus: 0, delFlag: 0}).then((response) => {
      this.warehouseOptions = response.rows;
    });
    queryClerkRoleList().then((response) => {
      this.userOptions = response.data;
    });
    this.getList();
  },
  mounted() {
    this.$nextTick(() => {
      // 监听浏览器高度变化，改变表格高度
      window.onresize = () => {
        this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 85
      }
    })
  },
  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;
      }
    },
    billTypeFormat(row, billTypeList) {
      let type;
      billTypeList.map((e) => {
        if (row == e.dictValue) {
          type = e.dictLabel;
        }
      });
      return type;
    },
    fMblnoFormat(row, fMblnoOptions) {
      let name;
      fMblnoOptions.map((e) => {
        if (row == e.fId) {
          name = e.fName;
        }
      });
      return name;
    },
  },
  methods: {
    getList() {
      const data = {
        type: 2, // 1入 2出
        ...this.queryParams
      }
      if (this.activeName == 'outStock') {
        data.type = 2;
      } else {
        data.type = 1;
      }
      this.loading = true
      getList(data).then(res => {
        this.dataList = res.rows
        this.total = res.total;
      }).finally(() => {
        this.loading = false
      })
      setTimeout(() => {
        this.tableHeight = window.innerHeight - this.$refs.table.$el.offsetTop - 85
      }, 300)
    },
    // 搜索
    handleQuery() {
      this.queryParams.pageNum = 1;
      this.queryParams.pageSize = 10;
      this.getList();
    },
    /** 重置按钮操作 */
    resetQuery() {
      this.queryParams = {
        pageNum: 1,
        pageSize: 10,
      }
      this.resetForm("queryForm");
      this.handleQuery();
    },
    //导出
    handleExport() {},
    //合计
    getSum(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 === "fQty") {
          values = data.map((item) => Number(item["fQty"]));
        }
        if (
          column.property === "fGrossweight" ||
          column.property === "fQty"
        ) {
          sums[index] = values.reduce((prev, curr) => {
            const value = Number(curr);
            if (!isNaN(value)) {
              return prev + curr;
            } else {
              return prev;
            }
          }, 0);
          if (column.property === "fGrossweight") {
            sums[index] = (sums[index] / 1000).toFixed(4) + "(吨)";
          }
          if (column.property === "fQty") {
            // sums[index] = sums[index].toFixed(2);
            sums[index] = sums[index];
          }
        }
      });
      return sums;
    },
    tabsHandle(data) {
      if (this.disabledName == data.name) return
      this.disabledName = data.name
      this.tableDate.forEach(item => {
        if (this.activeName == 'inStock') {
          if (item.label == 'fBsdate') {
            item.show = false
          }
        } else {
          item.show = true
        }
      })
      this.getList()
      this.$nextTick(() => {
        this.$refs.table.doLayout()
      })
    },


    //列设置全选
    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">
/deep/ .el-tabs .el-tabs__content {
  overflow-x: visible !important;
}
</style>
