<script>
import {DICT_TYPE, getDictDatas} from "@/utils/dict";
import PackagingType from "@/views/ecw/channel/componrnts/packaging-type.vue";
import {getChannelList} from "@/api/ecw/channel";
import AirFreightRouteTemplate from "@/views/ecw/offer/components/airFreightRouteTemplate.vue";
import {createWarehouseLineChannelPackaging, getAirLineChannelPackagingList} from "@/api/ecw/customerContacts";

export default {
  name: "channel-route",
  components: {AirFreightRouteTemplate, PackagingType},
  mounted() {
    getChannelList({lineId: this.lineId}).then((res) => (this.channelList = res.data));
    this.getRouteDetails(this.lineId, (value) => {
      this.form.channelList = this.setChannelData(value)
    })
  },

  data() {
    return {
      form: {
        "lineId": 0,
        channelList: [{
          "channelIds": "",
          "packagingCreateReqVOList": [
            {
              "airWeightLimit": 0,
              "packagingTypes": "",
              "priceStepClearanceCreateReqVOList": []
            }
          ]
        }],
      },
      channelList: [],
      dialogVisible: false,
    }
  },
  computed: {
    DICT_TYPE() {
      return DICT_TYPE
    },
    deletePackagingTypes() {
      let a = []
      this.form.channelList.forEach(item => {
        item.packagingCreateReqVOList.forEach(i => {
          a.push(...i.packagingTypes)
        })
      })
      return a
    },
    channelIdBlackList() {
      let arr = []
      this.form.channelList.forEach(i => {
        arr.push(...i.channelIds)
      })
      return arr
    },
    // 线路id
    lineId() {
      return Number(this.$route.query.id);
    }
  },
  methods: {
    deleteFn(index) {
      this.form.channelPackagingList.splice(index, 1)
    },
    getDictDatas,
    //添加包装类型
    addPackaging(index) {
      let p = {
        airWeightLimit: '',
        packagingTypes: [],
        priceStepClearanceCreateReqVOList: [],
      }
      let arr = this.form.channelList[index].packagingCreateReqVOList
      arr.push(p)
      this.$set(this.form.channelList[index], 'packagingCreateReqVOList', arr);
    },
    newChannelsAdd(index) {
      this.form.channelList.splice(index + 1, 0, {
        "channelIds": "",
        "packagingCreateReqVOList": [
          {
            "airWeightLimit": 0,
            "packagingTypes": "",
            "priceStepClearanceCreateReqVOList": []
          }
        ]
      },)
    },
    channelsDelete(index) {
      this.form.channelList.splice(index, 1)
    },
    deletePackag(index, indexx) {
      let arr = this.form.channelList;
      arr[index].packagingCreateReqVOList.splice(indexx, 1);
      this.form.channelList = arr;
    },
    getRouteDetails(id, callback = () => {
    }) {
      getAirLineChannelPackagingList(id).then((r) => {
        callback(r.data)
      })
    },
    setChannelData(list = []) {
      let arr = []
      list.forEach((i, index) => {
        if (index === 0) {
          arr.push({channelIds: i.channelIds, packagingCreateReqVOList: [i]})
        } else {
          if (i.channelIds === list[index - 1].channelIds) {
            arr[arr.length - 1].packagingCreateReqVOList.push(i)
          } else {
            arr.push({channelIds: i.channelIds, packagingCreateReqVOList: [i]})
          }
        }
      })
      arr.forEach(i => {
        i.channelIds = i.channelIds ? i.channelIds.split(',') : []
        i.packagingCreateReqVOList.forEach(item => {
          item.packagingTypes = item.packagingTypes ? item.packagingTypes.split(',') : [];
          item.priceStepClearanceCreateReqVOList = item.lineChannelPriceStepClearanceBackVOList || [];
          item.lineChannelPriceStepClearanceBackVOList = null;
          item.priceStepClearanceCreateReqVOList.forEach(itemm => {
            itemm.clearancePriceUnit = item.clearancePriceUnit
            itemm.clearanceVolumeUnit = item.clearanceVolumeUnit
          })
        })
      })
      if (arr.length === 0) {
        return [{
          "channelIds": "",
          "packagingCreateReqVOList": [
            {
              "airWeightLimit": 0,
              "packagingTypes": "",
              "priceStepClearanceCreateReqVOList": []
            }
          ]
        }]
      }
      return arr;

    },
    getChannelDate(value) {
      let obj = Object.assign({}, value)
      let arr = []
      obj.channelList.forEach(i => {
        i.packagingCreateReqVOList.forEach(item => {
          item.channelIds = i.channelIds.join(',');
          let p = {
            "airWeightLimit": item.airWeightLimit,
            "channelIds": item.channelIds,
            "clearancePriceUnit": item.priceStepClearanceCreateReqVOList[0].clearancePriceUnit,
            "clearanceVolumeUnit": item.priceStepClearanceCreateReqVOList[0].clearanceVolumeUnit,
            "lineId": this.lineId,
            "packagingTypes": item.packagingTypes.join(','),
            priceStepClearanceCreateReqVOList: this.getPriceStepClearanceCreateReqVOList(item.priceStepClearanceCreateReqVOList)
          }
          arr.push(p)
        })
      })
      return {
        lineId: this.lineId,
        packagingCreateReqVOList: arr,
      }
    },
    getPriceStepClearanceCreateReqVOList(list) {
      let arr = []
      list.forEach(i => {
        arr.push({
          "clearancePrice": i.clearancePrice,
          "endNum": i.endNum,
          "startNum": i.startNum
        })
      })
      return arr
    },
    submit() {
      if (!this.validation()) return
      createWarehouseLineChannelPackaging(this.getChannelDate(this.form)).then(r => {
        this.$message.success('保存成功');
        this.$router.back()
      })
    },
    copy(value) {
      this.getRouteDetails(value.id, (value) => {
        this.form.channelList = this.setChannelData(value)
        this.$message.success('复制成功。')
      })
    },
    validation() {
      let flag = true
      try {
        this.form.channelList.forEach((item, index) => {
          if (!item.channelIds.length) {
            throw `渠道${index + 1}没有选择航道`;
          }
          item.packagingCreateReqVOList.forEach((itemm, indexx) => {
            if (!itemm.packagingTypes.length) {
              throw `渠道${index + 1}-包装类型${indexx + 1}，没有选择包装类型。`;
            }
            if (!(itemm.airWeightLimit > 0)) {
              throw `渠道${index + 1}-包装类型${indexx + 1}，没有输入空运订单重量上限。`;

            }
            let check = (indexxx) => {
              return `渠道${index + 1}-包装类型${indexx + 1}- 第${indexxx + 1}价格输入有问题。`

            }
            itemm.priceStepClearanceCreateReqVOList.forEach((itemmm, indexxx) => {
              if (!itemmm.clearancePrice || itemmm.clearancePrice === '') {
                throw check(indexxx);
              }
              if (!itemmm.clearancePriceUnit || itemmm.clearancePriceUnit === '') {

                throw check(indexxx);
              }
              if (!itemmm.clearanceVolumeUnit || itemmm.clearanceVolumeUnit === '') {
                throw check(indexxx);
              }
              if (isNaN(itemmm.endNum) || itemmm.endNum === '') {
                throw check(indexxx);
              }
              if (isNaN(itemmm.startNum) || itemmm.startNum === '') {
                throw check(indexxx);
              }
              // if (!itemmm.weightUnit || itemmm.weightUnit === '') {
              //   throw check(indexxx);
              // }
            })
          })
        })
      } catch (e) {
        flag = false
        console.log(e.Error, 'eee')
        this.$message.warning(e);
      }
      return flag
    }
  }
}
</script>

<template>
  <div style="padding: 20px">
    <div style="margin-bottom: 15px">
      <span>路线：{{ $route.query.startWarehouseTitle }}到{{ $route.query.destWarehouseTitle }}</span>
      <span style="margin-left: 30px;">运输方式：空运专线</span>
    </div>
    <el-card style="margin-bottom: 10px" v-for="(itemOuter,index) in form.channelList" :key="index">
      <template #header>
        <el-row :gutter="20" type="flex" align="middle">
          <el-col :span="1">渠道{{ index + 1 }}
          </el-col>
          <el-col :span="3">
            <el-select multiple v-model="itemOuter.channelIds">
              <el-option
                :disabled="channelIdBlackList.includes(item.channelId.toString()) && (!itemOuter.channelIds.includes(item.channelId.toString()))"
                v-for="item in channelList" :value="item.channelId.toString()" :key="item.channelId"
                :label="$l(item, 'name')"></el-option>
            </el-select>
          </el-col>
          <el-col :span="3">
            <el-button size="mini" type="primary" @click="newChannelsAdd(index)">新增渠道</el-button>
          </el-col>
          <el-col :span="3">
            <el-button size="mini" type="danger" :disabled="form.channelList.length === 1" @click="channelsDelete(index)">
              删除当前渠道
            </el-button>
          </el-col>
          <el-col :span="3">
            <air-freight-route-template :lineId="lineId" @copy="copy">
              <el-button size="mini" v-if="index === 0" type="text">选择渠道包装模板</el-button>
            </air-freight-route-template>
          </el-col>
        </el-row>
      </template>
      <div style="display: flex;justify-content: space-between;">
        <h1>
          <span style="color: red;font-size: 14px;font-weight: 700;">*</span>
          渠道包装列表
        </h1>
        <div>
          <el-button type="primary" @click="addPackaging(index)">添加包装类型</el-button>
        </div>
      </div>
      <el-row :gutter="20" v-for="(itemm, indexx) in itemOuter.packagingCreateReqVOList"
              style="margin-bottom: 50px; border-bottom: 1px solid #cccccc" :key="indexx">
        <el-col :span="2">包装类型{{ indexx + 1 }}：</el-col>
        <el-col :span="5">
          <el-select multiple v-model="itemm.packagingTypes">
            <el-option
              :disabled="deletePackagingTypes.includes(item.value) && (!itemm.packagingTypes.includes(item.value))"
              v-for="item in getDictDatas(DICT_TYPE.ECW_PACKAGING_TYPE)" :value="item.value" :key="item.value"
              :label="$l(item, 'label')"></el-option>
          </el-select>
        </el-col>
        <el-col :span="16">
          <!--          v-if="itemOuter.packagingCreateReqVOList[indexx].length"-->
          <packaging-type key-arr="priceStepClearanceCreateReqVOList"
                          v-model="itemOuter.packagingCreateReqVOList[indexx]">
            <el-button @click="deletePackag(index,indexx)" :disabled="itemOuter.packagingCreateReqVOList.length === 1"
                       type="danger">删除包装类型{{ indexx + 1 }}
            </el-button>
          </packaging-type>
        </el-col>
      </el-row>
    </el-card>
    <div class="footer">
      <el-button type="primary" @click="submit">保存</el-button>
    </div>
  </div>
</template>

<style scoped lang="scss">
.footer {
  position: fixed;
  bottom: 20px;
}
</style>
