<template>
  <div>

    <el-row :gutter="20">
      <el-col :span="10" :offset="0">
        <h5>未选经销商</h5>
        <el-divider
          direction="horizontal"
          content-position="left"
        />

        <el-table
          ref="multipleTable"
          :data="dataL"
          element-loading-text="Loading"
          border
          height="480px"
          fit
          highlight-current-row
          @select-all="handleSelectionAllChange"
          @selection-change="handleSelectionChange"
        >
          <el-table-column
            type="selection"
            width="55"
            :selectable="selectable"
            align="center"
          />
          <el-table-column
            prop="number"
            label="经销商编码"
            align="center"
          />
          <el-table-column
            prop="name"
            label="经销商名称"
            align="center"
          />
        </el-table>
        <!-- 分页 -->
        <div style="margin: 20px 0">
          <el-pagination
            :current-page="currentPages"
            :page-sizes="[10, 20, 30, 50]"
            :page-size="10"
            layout="total, sizes, prev, pager, next, jumper"
            :total="clistTotal"
            @size-change="handleSizeChanges"
            @current-change="handleCurrentChanges"
          />
        </div>
      </el-col>
      <el-col :span="4" class="middle_box" :offset="0">
        <el-col>
          <el-button
            size="small"
            :disabled="type == 2"
            @click="handleAllAdd"
          >全部添加</el-button></el-col>
        <el-col>
          <el-button
            size="small"
            :disabled="type == 2"
            @click="handleAdd"
          >增加</el-button></el-col>
        <el-col>
          <el-button
            size="small"
            :disabled="type == 1"
            @click="handleDelete"
          >删除</el-button></el-col>
        <el-col>
          <el-button
            size="small"
            :disabled="type == 1"
            @click="handleAllDelete"
          >全部删除</el-button></el-col>
      </el-col>
      <el-col :span="10" :offset="0">
        <h5>已选经销商</h5>
        <el-divider
          direction="horizontal"
          content-position="left"
        />

        <el-table
          v-loading="listLoading"
          :data="custoList"
          element-loading-text="Loading"
          border
          height="480px"
          fit
          highlight-current-row
          stripe
          @select-all="handleSelectionAllChange2"
          @selection-change="handleSelectionChange2"
        >
          <el-table-column type="selection" width="55" align="center" />
          <el-table-column
            prop="customerNumber"
            label="经销商编码"
            align="center"
          />
          <el-table-column
            prop="customerName"
            label="经销商名称"
            align="center"
          />
        </el-table>
      </el-col>
    </el-row>
    <div>
      <el-button
        v-if="$parent.isShow == 5"
        type="primary"
        size="default"
        @click="handleSave"
      >保存</el-button>
    </div>

  </div>
</template>

<script>
import {
  deleteCondition,
  deleteMaterialPolicy,
  getConditionList,
  getCrList,
  getCustomerList,
  getMaterialList,
  getPolicyDetail,
  toExamine,
  updatePolicy
} from '@/api/policy_list'
import EditCondition from './EditCondition'
import ImageUpload from '@/components/Common/image-upload.vue'

import { handleImport } from '@/utils/util'

import Minxin from '@/mixin'

export default {
  name: 'Examine',
  components: {
    EditCondition,
    ImageUpload
  },
  mixins: [Minxin],
  data() {
    return {
      baseURL: '',
      dcurrentPage: 1,
      dpageSize: 10,
      dlistTotal: 0,
      currentPages: 1, // 当前页码
      pageSizes: 10, // 每页数量
      clistTotal: 0,
      input: '',
      remark: '',
      fileList: [],
      listLoading: false,
      imageUrl: '',
      dataList: [],
      examineStatus: 'OK',
      options: {},
      value: '',
      detail: {},
      srcList: [],
      screenForm: {
        code: '',
        createBy: '',
        endCreateTime: '',
        endTime1: '',
        endTime2: '',
        examineBy: '',
        remark: '',
        startCreateTime: '',
        startTime1: '',
        startTime2: '',
        status: '',
        title: '',
        type: ''
      },
      conditionList: [],
      custoList: [],
      isEdit: 1,
      cid: '',
      cpolicyId: '',
      dataL: [],
      clistTotal: 0,
      clistTotals: 0,
      type: 1,
      fileList: [],
      importFileList: [],
      leftData: [],
      rightData: [],
      typeOptions: [
        {
          value: 'PROVISION',
          label: '配提'
        },
        {
          value: 'LIMIT',
          label: '限量'
        }
      ]
    }
  },
  computed: {
    comTitle() {
      let title = '详情页'
      if (this.$parent.isShow == 5) {
        title = '编辑页'
      } else if (this.$parent.isShow == 8) {
        title = '审核页'
      } else {
        title = '详情页'
      }
      return title
    }
  },
  created() {},
  methods: {
    getList() {
      this.listLoading = true
      getPolicyDetail({ policyId: this.$parent.id }).then((res) => {
        this.detail = res.data
        this.srcList = [this.$imageUrl + this.detail.imgSrc]
        if (this.$parent.isShow == 5 && this.detail.imgSrc) {
          this.fileList = [
            {
              hover: '',
              url: this.detail.imgSrc
            }
          ]
        }
        this.handletwoList()
        // 获取条件政策
        this.getConditionList()
        this.getCond()
      })
    },

    getCrList() {
      const customerParams = {
        pageNum: this.currentPage,
        pageSize: this.pageSize,
        keyword: this.region == 1 || this.region == '' ? '' : this.keyword,
        region: this.region == 1 ? this.keyword : ''
      }
      // 获取经销商列表
      getCrList(customerParams).then((res) => {
        for (let j = 0; j < this.custoList.length; j++) {
          for (let i = 0; i < res.data.records.length; i++) {
            if (res.data.records[i].id == this.custoList[j].customerId) {
              res.data.records[i].disabled = true
            }
          }
        }
        this.dataL = res.data.records
        for (let k = 0; k < this.dataL.length; k++) {
          (this.dataL[k].customerId = this.dataL[k].id),
          (this.dataL[k].customerName = this.dataL[k].name),
          (this.dataL[k].customerNumber = this.dataL[k].number)
        }

        console.log(this.dataL, '获取经销商列表')
        this.clistTotal = res.data.total
      })
    },
    // 更改每页数量
    handleSizeChanges(val) {
      this.pageSizes = val
      this.currentPages = 1
      this.getCond()
    },
    // 更改当前页
    handleCurrentChanges(val) {
      this.currentPages = val
      this.getCond()
    },
    // 更改每页数量
    handleSizeChange2(val) {
      this.dpageSize = val
      this.dcurrentPage = 1
      this.handletwoList()
    },
    // 更改当前页
    handleCurrentChange2(val) {
      this.dcurrentPage = val
      this.handletwoList()
    },
    getCommonApi(row) {
      (this.isEdit = 2), (this.cid = row.id), (this.cpolicyId = row.policyId)
      console.log(
        this.cpolicyId,
        this.detail.code,
        this.cpolicyId == this.detail.code
      )
    },
    getCond() {
      this.listLoading = true
      const custoParams = {
        pageNum: this.currentPages,
        pageSize: this.pageSizes,
        policyId: this.detail.code
      }
      getCustomerList(custoParams).then((res) => {
        this.custoList = res.data.records
        this.clistTotals = res.data.total
        this.listLoading = false
        this.getCrList()
      })
    },
    handleSubmit() {
      toExamine({
        examineStatus: this.examineStatus,
        policyId: this.$parent.id,
        examineRemark: this.remark
      }).then((res) => {
        this.$successMsg('已提交审核')
        this.$parent.isShow = 1
        this.$parent.getList()
      })
    },
    // 获取货品信息
    handletwoList() {
      // this.searchForm.type
      const paramss = {
        pageNum: this.dcurrentPage,
        pageSize: this.dpageSize,
        policyId: this.detail.code,
        saleTypeCode: ''
      }
      getMaterialList(paramss)
        .then((result) => {
          this.dataList = result.data.records
          this.dlistTotal = result.data.total
          this.listLoading = false
        })
        .catch((err) => {
          console.error(err)
        })
    },
    // 导入
    async handleImport(param) {
      this.importLoading = true
      const file = param.file
      console.log(file, 123)
      const formData = new FormData()
      formData.append('file', file)
      formData.append('policyId', this.detail.code)
      // formData.append("mainId", this.detail.mainId);
      const result = await handleImport('/policy/material/import', formData)
      this.importLoading = false
      this.importFileList = []
      if (result.code == 200) {
        this.$alert(result.message, '导入成功', {
          confirmButtonText: '确定'
        })

        this.handletwoList()
      } else {
        this.$alert(result.message, '导入失败', {
          confirmButtonText: '确定'
        })
      }
    },
    handleCondition(id, index) {
      deleteCondition({ id }).then((res) => {
        // this.conditionList.splice(index, 1);
        // Object.assign(
        //   this.$children[9].$data,
        //   this.$children[9].$options.data()
        // );
        this.getConditionList()
        this.$successMsg('删除成功')
      })
    },
    getConditionList() {
      const condParams = {
        policyId: this.detail.code
      }
      getConditionList(condParams).then((res) => {
        this.conditionList = res.data
      })
    },
    // 删除
    hanleDelete(id) {
      const params = { policyMaterialId: id }
      deleteMaterialPolicy(params).then((res) => {
        this.$successMsg('删除成功')
        this.handletwoList()
      })
    },
    /**
     * 根据条件禁用行复选框
     * 函数返回值为false则禁用选择(反之亦然)
     * @param {Object} row - 行数据
     * @param {String} index - 索引值
     * @return Boolean
     */
    selectable: function(row, index) {
      // row.disabled == undefined 才能被选中
      if (row.disabled == undefined || row.disabled == false) {
        return true
      } else {
        return false
      }
      // 函数必须有返回值且是布尔值
      // 页面刷新后该函数会执行 N 次进行判断(N 为表格行数)
      // 如果没有返回值则默认返回false(全部无法选中)
    },
    handleSelectionAllChange(e) {
      this.leftData = e
      this.type = 1
    },
    handleSelectionChange(e) {
      this.leftData = e
      this.type = 1
    },
    handleSelectionAllChange2(e) {
      this.rightData = e
      this.type = 2
    },
    handleSelectionChange2(e) {
      this.rightData = e
      this.type = 2
    },
    handleLeft(e) {
      this.type = 1
    },
    handleRight(e) {
      this.type = 2
    },
    handleAllAdd() {
      if (this.type == 1 && this.leftData.length) {
        for (let i = 0; i < this.dataL.length; i++) {
          for (let j = 0; j < this.leftData.length; j++) {
            if (this.dataL[i].id == this.leftData[j].id) {
              this.dataL[i].disabled = true
            }
          }
        }
        this.custoList = [...this.custoList, ...this.leftData]
        this.$refs.multipleTable.clearSelection()
      } else {
        this.$errorMsg('请选择要添加的经销商')
      }
    },
    handleAllDelete() {
      if (this.type == 2 && this.rightData.length) {
        for (let i = 0; i < this.dataL.length; i++) {
          for (let j = 0; j < this.rightData.length; j++) {
            if (this.dataL[i].id == this.rightData[j].customerId) {
              this.$set(this.dataL[i], 'disabled', false)
            }
          }
        }
        const arr = this.resArr(this.custoList, this.rightData)
        this.custoList = arr
      } else {
        this.$errorMsg('请选择要删除的经销商')
      }
    },
    handleAdd() {
      if (this.type == 1 && this.leftData.length) {
        for (let i = 0; i < this.dataL.length; i++) {
          for (let j = 0; j < this.leftData.length; j++) {
            if (this.dataL[i].id == this.leftData[j].id) {
              this.dataL[i].disabled = true
            }
          }
        }
        this.custoList = [...this.custoList, ...this.leftData]
        this.leftData = []
        this.$refs.multipleTable.clearSelection()
      } else {
        this.$errorMsg('请选择要添加的经销商')
      }
    },
    handleDelete() {
      if (this.type == 2 && this.rightData.length) {
        for (let i = 0; i < this.dataL.length; i++) {
          for (let j = 0; j < this.rightData.length; j++) {
            if (this.dataL[i].id == this.rightData[j].customerId) {
              this.$set(this.dataL[i], 'disabled', false)
            }
          }
        }
        const arr = this.resArr(this.custoList, this.rightData)
        this.custoList = arr
      } else {
        this.$errorMsg('请选择要删除的经销商')
      }
    },
    // 去掉相同数据
    resArr(arr1, arr2) {
      return arr1.filter((v) => arr2.every((val) => val.id != v.id))
    },
    async handleSave() {
      if (this.custoList.length) {
        var arr = []
        this.custoList.forEach((el) => {
          arr.push({
            customerId: el.customerId,
            customerName: el.customerName,
            customerNumber: el.customerNumber,
            lastOrderTime: '',
            limitTakeNum: 0,
            policyId: this.detail.code,
            policyTitle: '',
            remark: ''
          })
        })

        const params = {
          ...this.detail,
          policyCustomers: arr,
          imgSrc: this.fileList.length ? this.fileList[0].url : ''
        }
        await updatePolicy(params)
        await this.getCond()
        this.$successMsg('编辑成功')
        this.fileList = []
        this.$parent.isShow = 1
      }
    }
  }
}
</script>

<style lang="scss" scoped>
.el-col {
  overflow: hidden;
}
.value{
  ::v-deep .el-input__prefix{
    display: none;
  }
}
.descriptions {
  // border: #EBEEF5;
  border: 1px solid #ebeef5;
  border-bottom: none;
  .el-row {
    height: 40px;
    line-height: 40px;
  }
  .el-col:nth-child(odd) {
    background-color: #ebeef5;
  }
  .el-col {
    padding: 0 15px;
    height: 100%;
    border-bottom: 1px solid #ebeef5;
  }
}
.el-divider--horizontal {
  margin: 20px 0;
}
.col {
  height: 100px;
}

.import-btn {
  margin-right: 10px;
  display: inline-block;
}
::v-deep .el-input__icon .el-icon-time{
  display: none;
}
.middle_box {
  margin-top: 80px;
  text-align: center;
  height: 430px;
  display: flex;
  flex-direction: column;
  align-content: center;
  justify-content: space-between;
  align-items: center;
}
.img-box {
  height: 150px;
  display: flex;
  align-items: center;
}
</style>
