<template>
  <div class="app-container">
    <el-form ref="form" :model="form" :rules="rules" label-width="150px">
      <products-selector v-model="form.productIdList" show-all @setall="isAllProduct=$event" class="mb-20" />

      <routers-selector v-model="selectedRoutes" />

      <el-card style="margin-bottom: 10px">
        <div slot="header" style="font-size:20px;">
          {{$t('价格设置')}}
          <span>
            <!-- <el-checkbox label="" @change="form.needPay=$event ? 1 : 0">{{$t('预付')}}</el-checkbox> -->
            <el-checkbox label="" @change="form.stepPrice=$event ? 1 : 0">{{$t('阶梯订单')}}</el-checkbox>
          </span>
        </div>
        <el-form-item :label="$t('预付')" prop="needPay" >
          <el-radio-group v-model="form.needPay">
            <el-radio :label="1">预付</el-radio>
            <el-radio :label="0">均可</el-radio>
          </el-radio-group>
        </el-form-item>
        <el-form-item :label="$t('单价模式')" prop="priceType">
          <dict-selector :type="DICT_TYPE.ECW_PRICE_TYPE" v-model="form.priceType" form-type="radio" />
        </el-form-item>
        <!--阶梯订单-->
        <template v-if="form.stepPrice==1" >
          <div v-for="(item, index) in priceStepList" :key="index">
            <div style="font-size:14px; margin:10px 0">
              {{$t('第{index}阶梯定价方案', {index: index+1})}}：
              <template v-if="index == priceStepList.length - 1">
                <el-link type="primary" @click.native="priceStepList.push({})">{{$t('添加区间')}}</el-link>
                <el-divider direction="vertical"></el-divider>
                <el-link type="danger" @click.native="priceStepList.splice(index, 1)">{{$t('删除')}}</el-link>
              </template>
            </div>
            <el-form-item :label="$t(`第{index}阶梯`, {index: index+1})">
              <el-input v-model="item.startNum" type="number" placeholder="" class="w100"></el-input>
              -
              <el-input v-model="item.endNum" type="number" placeholder="" class="w100"></el-input>
              /
              <selector v-model="form.weightUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2  class="w100" />
            </el-form-item>
            <el-form-item :label="$t('默认运费')" v-if="form.priceType != 1">
              <inputor default2="0" v-model.number="item.transportPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w100 mr10" />
              <selector v-model="item.transportPriceUnit" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2  class="w100" />
              / <selector v-model="item.transportVolumeUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2  class="w100" />
            </el-form-item>
            <el-form-item :label="$t('默认清关费')" v-if="form.priceType != 1">
              <inputor default2="0" v-model.number="item.clearancePrice" type="number" :placeholder="$t('整数或者两位小数')" class="w100 mr10" />
              <selector v-model="item.clearancePriceUnit" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2  class="w100" />
              / <selector v-model="item.clearanceVolumeUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2  class="w100" />
            </el-form-item>

            <el-form-item :label="$t('默认全包价')" v-if="form.priceType == 1">
              <inputor default2="0" v-model.number="item.allPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w100 mr10" />
              <selector v-model="item.allPriceUnit" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2  class="w100" />
              / <selector v-model="item.allVolumeUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2  class="w100" />
            </el-form-item>
          </div>
        </template>

        <template v-else>
          <el-form-item :label="$t('默认全包价')" v-if="form.priceType == 1">
            <inputor default2="0" v-model.number="form.allPrice" type="number" :placeholder="$t('整数或者两位小数')" class="w100 mr10" />
            <selector v-model="form.allPriceUnit" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2  class="w100" />
            / <selector v-model="form.allVolumeUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2  class="w100" />
          </el-form-item>
          <template v-else>
            <el-form-item :label="$t('默认运费')" prop="transportPrice">
              <el-row :gutter="20">
                <el-col :span="4">
                  <selector v-model="form.transportPriceUnit" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>
                <el-col :span="6">
                  <inputor default2="0" v-model.number="form.transportPrice" type="number" :placeholder="$t('整数或者两位小数')" />
                </el-col>
                <el-col :span="4">
                  / <selector v-model="form.transportVolumeUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>
              </el-row>
            </el-form-item>
            <el-form-item :label="$t('默认清关费')" prop="clearancePrice">
              <el-row :gutter="20">
                <el-col :span="4">
                  <selector v-model="form.clearancePriceUnit" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>

                <el-col :span="6">
                  <inputor default2="0" v-model.number="form.clearancePrice" type="number" :placeholder="$t('整数或者两位小数')" />
                </el-col>

                <el-col :span="4">
                  /
                  <selector v-model="form.clearanceVolumeUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>
              </el-row>
            </el-form-item>
          </template>


          <!--特需-->
          <template v-if="form.priceType==1">
            <el-form-item
              v-for="(special, specialIndex) in this.specialProducts"
              :label="getDictDataLabel(DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS, special.specialDictType) + $t('全包价')"
              :key="specialIndex + 'transport'">
              <el-row :gutter="20">
                <el-col :span="4">
                  <selector v-model="special.allPriceUnit" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>

                <el-col :span="6">
                  <inputor default2="0" v-model.number="special.allPrice" type="number" :placeholder="$t('整数或者两位小数')" />
                </el-col>

                <el-col :span="4">
                  / <selector v-model="special.allVolumeUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>
              </el-row>
            </el-form-item>
          </template>
          <template v-else v-for="(special, specialIndex) in this.specialProducts">
            <el-form-item
              :label="getDictDataLabel(DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS, special.specialDictType) + $t('运费')"
              :key="specialIndex + 'transport'">
              <el-row :gutter="20">
                <el-col :span="4">
                  <selector v-model="special.transportPriceUnit" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>

                <el-col :span="6">
                  <inputor default2="0" v-model.number="special.transportPrice" type="number" :placeholder="$t('整数或者两位小数')" />
                </el-col>

                <el-col :span="4">
                  / <selector v-model="special.transportVolumeUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>
              </el-row>
            </el-form-item>
            <el-form-item
              :label="getDictDataLabel(DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS, special.specialDictType) + $t('清关费')"
              :key="specialIndex + 'clearance'">
              <el-row :gutter="20">
                <el-col :span="4">
                  <selector v-model="special.clearancePriceUnit" :options="currencyList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>

                <el-col :span="6">
                  <inputor default2="0" v-model.number="special.clearancePrice" type="number" :placeholder="$t('整数或者两位小数')" />
                </el-col>

                <el-col :span="4">
                  / <selector v-model="special.clearanceVolumeUnit" :options="unitList" :label-field="$l('title')" value-field="id" defaultable2 class="w-100" />
                </el-col>
              </el-row>
            </el-form-item>
          </template>
        </template>

        <!-- <el-form-item label="是否预付" prop="advanceStatus">
          <dict-selector form-type="radio" :type="DICT_TYPE.ADVANCE_STATUS" v-model="form.advanceStatus" />
        </el-form-item> -->
        <el-form-item :label="$t('价格有效期')">
          <el-date-picker v-model="form.validateStartDate" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
          -
          <el-date-picker v-model="form.validateEndDate" value-format="yyyy-MM-dd HH:mm:ss"></el-date-picker>
        </el-form-item>
      </el-card>


      <el-card>
        <div slot="header" style="font-size:20px;">
          {{$t('基础信息')}}
        </div>

        <el-form-item :label="$t('是否预约入仓')" prop="needBook">
          <el-radio v-model.number="form.needBook" :label="1">{{$t('是')}}</el-radio>
          <el-radio v-model.number="form.needBook" :label="0">{{$t('否')}}</el-radio>
        </el-form-item>

        <el-form-item :label="$t('每日入仓上限')" prop="dayLimit" v-if="form.needBook == 1">
          <el-input v-model.number="form.dayLimit" type="number" class="w-100" />{{$t('立方米')}}
        </el-form-item>

        <el-form-item :label="$t('货柜位置')" prop="containerLocation">
          <dict-selector :type="DICT_TYPE.ECW_CONTAINER_LOCATION" v-model="form.containerLocation" />
        </el-form-item>

        <el-form-item :label="$t('订单方数上限')" prop="square">
          <el-input v-model.number="form.square" type="number" style="width:200px" />
        </el-form-item>
      </el-card>
    </el-form>

    <div style="margin: 20px 0">
      <el-button @click="submitForm" type="primary" :loading="loading">{{$t('确认提交')}}</el-button>
      <el-button type="default" @click="$router.back()">{{$t('返回上一页')}}</el-button>
    </div>
  </div>
</template>
<script>
import RoutersSelector from '@/components/RoutersSelector'
import { createProductPrice, updateProductPrice, batchUpdateProductPrice, deleteProductPrice, getProductPrice, getProductPriceList, getProductPricePage, exportProductPriceExcel } from "@/api/ecw/productPrice";
import { getProductType, getProductTypeList } from '@/api/ecw/productType'
import { getCurrencyList } from '@/api/ecw/currency';
import { getUnitList } from '@/api/ecw/unit';
import ProductsSelector from '@/components/ProductsSelector'
import { arrryToKeyedObjectBy } from '@/utils/index'
import Selector from '@/components/Selector'
import Inputor from '@/components/Inputor'
import { parseTime } from '@/utils/ruoyi'

export default {
  components: { RoutersSelector, ProductsSelector, Selector, Inputor },
  data() {
    return {
      checkList: [],
      selectedRoutes: [], // 勾选的路线渠道
      form: {
        // stepPrice: 0,
        // advanceStatus: 0,
        // needBook: 0,
        // dayLimit: 10000
      },
      isAllProduct: false, // 是否全部商品
      specialProducts: [],
      priceStepList: [{},{}], // 阶梯价格
      // specialList:[], // 特殊需求,默认四个
      rules: {
        /* typeId: [{ required: true, message: "产品类型不能为空", trigger: "blur" }],
        titleZh: [{ required: true, message: "产品名称不能为空", trigger: "blur" }],
        titleEn: [{ required: true, message: "英文名称不能为空", trigger: "blur" }], */
        /* transportPrice: [{ required: true, message: this.$t("海运费不能为空"), trigger: "blur" }],
        clearancePrice: [{ required: true, message: this.$t("清关费不能为空"), trigger: "blur" }], */
        /* advanceStatus: [{ required: true, message: this.$t("是否预付不能为空"), trigger: "blur" }], */
        //containerLocation: [{ required: true, message: "货柜位置不能为空", trigger: "blur" }],
        //square: [{ required: true, message: "方数不能为空", trigger: "blur" }],
        // zhongLinjie:[{ required: true, message: "默认重货标准不能为空", trigger: "blur" }],
        // paoLinjie:[{ required: true, message: "默认泡货标准不能为空", trigger: "blur" }],
        // needBook: [{ required: true, message: "预约入仓不能为空", trigger: "blur" }],
      },
      product: null,
      /* productType: null, */
      currencyList: [],
      unitList: [],
      productTypeList: [],
      productDisabled: true,
      lineList: [], //路线数组
      loading: false
    }
  },
  computed: {

  },
  watch: {
    checkList() { //选择路线
      if (this.checkList.length > 0) {
        this.form.lineChannelList = this.checkList.map(item => {
          return { lineId: item, shippingChannelId: 0 }
        })
      } else {
        this.form.lineChannelList = []
      }
    },
    product() {
      this.$set(this.form, 'productType', this.product.typeId)
      /* getProductType(this.product.typeId).then(res => {
        this.productType = res.data
      }) */
    },
    form(val) {
      if (!val) return
      // 特殊需求回显
      if (val.specialList) {
        let keyed = arrryToKeyedObjectBy(val.specialList, 'specialDictType')
        this.specialProducts.map((item, index) => {
          if (keyed[item.specialDictType]) {
            for (let field in item) {
              if (keyed[item.specialDictType][field]) {
                item[field] = keyed[item.specialDictType][field]
              }
            }
          }
        })
      }
    },
    'form.transportVolumeUnit'(val){
      this.specialProducts.forEach(item => {
        item.transportVolumeUnit = val
      })
    },
    'form.clearanceVolumeUnit'(val){
      this.specialProducts.forEach(item => {
        item.clearanceVolumeUnit = val
      })
    },
    'form.allVolumeUnit'(val){
      this.specialProducts.forEach(item => {
        item.allVolumeUnit = val
      })
    },
    selectedRoutes(routers) {
      let transportIds = []
      routers.forEach(item => {
        item.shippingChannelId = item.channelId
        transportIds.push(+item.transportId)
      })

      // 如果只选择了空运（3），则默认体积单位改成千克
      transportIds = new Set(transportIds)
      console.log(transportIds)
      window.transportIds = transportIds
      if(transportIds.size == 1 && transportIds.has(3)){
        this.setDefaultVolumeUnit(6)
      }else this.setDefaultVolumeUnit(7)
    },
    'form.needBook'(val){
      if(val) this.$set(this.form, 'dayLimit', 10000)
      else delete this.form.dayLimit
    }
  },
  async created() {

      /* this.productDisabled = false

      // 获取类型列表
      getProductTypeList().then(res => this.productTypeList = res.data) */

      /* if (this.$route.query.product_type) {
        this.$set(this.form, 'productType', +this.$route.query.product_type)
      }
      if (this.$route.query.product_id) {
        this.$set(this.form, 'productId', +this.$route.query.product_id)
      }
 */
    // 默认今天起，两年有效
    /* this.form.validateStartDate = parseTime(Date.now())
    this.form.validateEndDate = parseTime(Date.now() + 86400*365*2*1000) */

    // 默认费用单位
    //this.setDefaultVolumeUnit(7)

    getCurrencyList().then(res => this.currencyList = res.data)
    getUnitList().then(res => this.unitList = res.data)

    this.getDictDatas(this.DICT_TYPE.ECW_SPECIAL_REQ_FOR_LINE_PRODUCTS).forEach(item => {
      this.specialProducts.push({
        "clearancePrice": null,
        "clearancePriceUnit": null,
        "clearanceVolumeUnit": null,
        "specialDictType": item.value,
        "transportPrice": null,
        "transportPriceUnit": null,
        "transportVolumeUnit": null,
      })
    })
  },
  methods: {
    setDefaultVolumeUnit(unit){
      this.$set(this.form, 'transportVolumeUnit', unit)
      this.$set(this.form, 'clearanceVolumeUnit', unit)
      this.$set(this.form, 'allVolumeUnit', unit)
    },
    submitForm() {
      this.$refs["form"].validate(valid => {
        if (!valid) {
          return;
        }

        // 只有新增的时候做判断
        if (!this.$route.query.ids && (!this.selectedRoutes || !this.selectedRoutes.length)) {
          this.$message.error(this.$t('请选择线路'));
          return;
        }
        if(!this.isAllProduct && (!this.form.productIdList || !this.form.productIdList.length)){
          return this.$message.error('请选择商品')
        }
        let data = Object.assign({}, this.form, {
          // lineChannelList: this.selectedRoutes,
          specialList: this.specialProducts,
          isAllProduct: this.isAllProduct ? 1:0
        })
        if(this.form.stepPrice == 1){
          data.priceStepList = this.priceStepList
        }

        data.lineChannelList = this.selectedRoutes

        if(data.lineChannelList.length < 1){
          return this.$message.error(this.$t('请选择需要修改的路线'))
        }
        this.loading = true
        batchUpdateProductPrice(data).then(response => {
          this.$modal.msgSuccess(this.$t("修改成功"));
          this.$router.replace('/lineProject/product-price?' + (new URLSearchParams(this.$route.query)).toString())
        })
        .finally(res => this.loading = false)
      });
    },
  }
}
</script>
<style scoped>
.w100{
  width: 100px;
}
.mr10{
  margin-right: 10px;
}
</style>
