<template>
  <div style="padding: 0 20px">
    <h1>{{type == 1 ? $t('调拨出仓') :$t('调拨到仓')}}</h1>
    <el-divider content-position="left">
      {{$t('订单信息')}}
    </el-divider>
    <ordeDetailsForm :details="orderDetails"></ordeDetailsForm>
    <el-divider content-position="left">
      {{$t('货物信息')}}
    </el-divider>
    <el-table :show-summary="true" :summary-method="totalFn" :data="orderItemVOList">
      <el-table-column width="80" type="index" :label="$t('序号')"></el-table-column>
      <el-table-column :label="$t('品名')">
        <template v-slot="{row}">
          <div>{{ row.prodTitleZh }}</div>
          <div>{{ row.prodTitleEn }}</div>
        </template>
      </el-table-column>
      <el-table-column :label="$t('填单货物属性')">
        <template v-slot="{row}">
        <div>{{$t('品牌')}}：无</div><div>{{$t('箱数')}}：{{row.num}}</div><div>{{$t('体积')}}：{{ row.volume }}m³</div><div>{{$t('重量')}}：{{row.weight}}Kg</div>
        </template>
      </el-table-column>
      <el-table-column :label="$t('入库货物属性')">
        <template v-slot="{row}">
          <div v-for="(item,index) in row.orderWarehouseInBackItemDoList" :key="index">
            <div>{{$t('规格')}}：{{item.boxGauge.split('*').map(item =>`${item}cm`).join('*')}}</div>
            <div>

              <div>{{$t('品牌')}}：{{(brandList.find(item => item.id == row.brand) || {}).titleZh}}</div>
              <div>{{$t('箱数')}}：{{item.cartonsNum}}</div>
              <div>{{$t('体积')}}：{{item.volume}} CMB</div>
              <div>{{$t('重量')}}：{{item.weight}}KG</div>
            </div>
          </div>
        </template>
      </el-table-column>
      <el-table-column :label="$t('最后操作时间')">
           <template v-slot="{row}">
             {{parseTime(row.updateTime)}}
           </template>
      </el-table-column>
      <el-table-column :label="$t('状态')">
        <template v-slot="{row}">
          {{calculationStatus(row.cartonsNumDiff)}}
        </template>
      </el-table-column>
    </el-table>
    <el-divider content-position="left" v-if="type == 2">
      {{$t('调仓明细')}}
    </el-divider>
    <el-table :data="warehouseList" v-if="type == 2">
      <el-table-column :label="$t('调仓编号')" type="index" ></el-table-column>
      <el-table-column :label="$t('调出仓库')" prop="warehouseOutName" ></el-table-column>
      <el-table-column :label="$t('调入仓库')" prop="warehouseInName"></el-table-column>
      <el-table-column :label="$t('申请人')" prop="creatorName"></el-table-column>
      <el-table-column :label="$t('申请时间')">
        <template v-slot="{row}">
         {{parseTime(row.createTime)}}
        </template>
      </el-table-column>
      <el-table-column :label="$t('状态')">
        <template v-slot="{row}">
            {{STATUS[row.status]}}
        </template>
      </el-table-column>
      <el-table-column :label="$t('出仓影像')">
        <template v-slot="{row}">
          <warehouse-video-list :status="2" :item ="row"></warehouse-video-list>
        </template>
      </el-table-column>
      <el-table-column :label="$t('到仓影像')">
        <template v-slot="{row}">
          <warehouse-video-list :status="3" :item ="row"></warehouse-video-list>
        </template>
      </el-table-column>
      <el-table-column :label="$t('调拨出仓备注')" prop="deliveryRemark">
      </el-table-column>
      <el-table-column :label="$t('调拨到仓备注')" prop="arrivalRemark">
      </el-table-column>
    </el-table>
    <el-descriptions style="margin-top: 20px" :column="4" border>
      <el-descriptions-item :label="$t('集运仓库')">{{ warehouseDetails && warehouseDetails.warehouseOutName  ?  warehouseDetails.warehouseOutName : '' }}</el-descriptions-item>
      <el-descriptions-item :label="$t('储位')">
        {{ ($refs.area ? $refs.area.selected : []).join(',') }}
      </el-descriptions-item>
      <el-descriptions-item v-if="type == 2" :label="$t('选择储位')">
        <div @click="areaVisible = true" style="color: #0a84ff;cursor: pointer;">{{$t('选择储位')}}</div>
      </el-descriptions-item>
      <el-descriptions-item :label="$t('调拨目标仓')">{{ warehouseDetails && warehouseDetails.warehouseInName ? warehouseDetails.warehouseInName : '' }}</el-descriptions-item>
      <el-descriptions-item :label="$t('物流公司')">
        <el-select :disabled="type == 2" v-model="params.logisticsCompany" >
          <el-option v-for="(item,index) in expressList " :key="index"  :value="item.id" :label="item.companyZh"></el-option>
        </el-select>
      </el-descriptions-item>
      <el-descriptions-item :label="$t('物流单号')">
        <el-input :disabled="type == 2" v-model="params.logisticsNo"></el-input>
      </el-descriptions-item>
      <el-descriptions-item :label="$t('联系电话')">
        <el-input :disabled="type == 2" v-model="params.phone"></el-input>
      </el-descriptions-item>
      <el-descriptions-item>
        <template slot="label">
          <span style="color: red;font-size: 20px;margin-right: 5px;">*</span>{{$t('出仓日期')}}
        </template>
        <el-date-picker
          :disabled="type == 2"
          value-format="yyyy-MM-dd HH:mm:ss"
          v-model="params.deliveryDate"
          type="datetime"
          :placeholder="$t('选择日期')">
        </el-date-picker>
      </el-descriptions-item>
      <el-descriptions-item  v-if="type == 2">
        <template slot="label">
          <span style="color: red;font-size: 20px;margin-right: 5px;">*</span>{{$t('到仓日期')}}
        </template>
        <el-date-picker
          value-format="yyyy-MM-dd HH:mm:ss"
          v-model="params.arrivalDate"
          type="datetime"
          :placeholder="$t('选择日期')">
        </el-date-picker>
      </el-descriptions-item>
    </el-descriptions>
    <el-divider content-position="left">
      {{$t('出仓影像')}}
    </el-divider>
    <image-and-video-upload   :fileSize="50" :isShowTip="true" v-model="params.urls" ></image-and-video-upload>
    <el-form>
      <el-form-item :label="$t('备注')">
        <el-input v-model="params.deliveryRemark" type="textarea"></el-input>
      </el-form-item>
    </el-form>
    <div style="margin-bottom: 30px; text-align: center;">
      <el-button v-if="type == 1" @click="submit" size="medium">{{$t('确认出仓')}}</el-button>
      <el-button v-else @click="submit2(true)" size="medium" >{{$t('确认到仓')}}</el-button>
      <el-button v-if="type == 2" @click="escapeBol = true;">{{$t('转异')}}</el-button>
      <el-button v-if="type == 1" size="medium" @click="cancellationOfOrder">{{$t('取消调仓')}}</el-button>
      <el-button size="medium" @click="$tab.closeOpenPage({path:'/order/order'})">{{$t('返回')}}</el-button>
    </div>
    <warehouse-location ref="area" :visible.sync="areaVisible" v-model="params.orderLocationCreateReqVOList" :warehouse-id="Number(this.type) === 1 ? warehouseDetails.warehouseOutId  : warehouseDetails.warehouseInId" :order-id="Number(orderId)"></warehouse-location>
    <el-dialog :title="$t('订单转异')" center :visible.sync="escapeBol">
      <el-form ref="form2" :model="params" label-position="top" label-width="200">
        <el-form-item prop="manualExceptionType"  :rules="{ required:true,message:'至少选择一个转异原因'}" :label="$t('原因类型')">
          <dict-selector v-model="params.manualExceptionType" form-type="checkbox" :type="DICT_TYPE.MANUAL_EXCEPTION_TYPE" multiple ></dict-selector>
        </el-form-item>
        <el-form-item  :label="$t('附件')">
          <image-upload v-model="params.exceptionUrls"></image-upload>
        </el-form-item>
        <el-form-item :label="$t('详细信息')">
          <el-input v-model="params.descZh" type="textarea"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
        <el-button  type="primary" @click="submit2(false)">{{$t('确认并完成入仓')}}</el-button>
        <el-button @click="escapeBol = false">{{$t('取消')}}</el-button>
      </span>
    </el-dialog>
  </div>
</template>

<script>
import ordeDetailsForm from "@/views/ecw/order/components/ordeDetailsForm";

import {
  cancelAdjust,
  getAdjustInfo,
  getOrder, getOrderWarehouseIn, listByOrderId,
  orderWarehouseInGetAdjustInfo,
  orderWarehousePicturePage, warehouseAdjustArrived,
  warehouseAdjustSendOut
} from "@/api/ecw/order";
import Template from "@/views/cms/template";
import {DICT_TYPE} from '@/utils/dict';
import ImageAndVideoUpload from "@/components/ImageAndVideoUpload/index";
import {getSupplierPage} from "@/api/ecw/supplier";
import {getByWarehouseId} from "@/api/ecw/warehouseArea";
import {adjustLastWithStatus, warehouseApprovalCancel} from "@/api/ecw/batchSingleApplication";
import warehouseLocation from "@/components/WarehouseAreaDialog";
import imageUpload from "@/components/ImageUpload";
import {getProductBrankPage} from "@/api/ecw/productBrank";
import {parseTime} from "@/utils/ruoyi";
import WarehouseVideoList from "@/views/ecw/order/components/warehouse-video-list.vue";
export default {
  name: "transferWarehousing",
  components: {
    WarehouseVideoList,
    ImageAndVideoUpload,
    Template,
    ordeDetailsForm,
    warehouseLocation,
    imageUpload
  },
  props: {
    orderId: [String, Number],
    type: [String],
  },
  data() {
    return {
      areaVisible:false,
      escapeBol:false,
      STATUS :{1:this.$t('申请中'), 2:this.$t('通过'), 3:this.$t('不通过'), 4:this.$t('已取消'), 5:this.$t('已出仓'),6:this.$t('已到仓')},
      orderDetails: {},
      DICT_TYPE,
      warehouseDetails: {},
      warehouseList:[],
      params: {
        deliveryDate: "",
        deliveryRemark: "",
        id: undefined,
        logisticsCompany:undefined,
        logisticsNo: "",
        phone: "",
        urls: [],
        arrivalDate:'',
        orderLocationCreateReqVOList:[],
        manualExceptionType:0,
        descZh:'',
        exceptionUrls:[]
      },
      warehouseInShi:0,
      expressList:[],
      storageSpaceList:[],
      applyStatus:{},
      orderItemVOList:[],
      brandList:[]

    }
  },
  computed:{
    exWarehouse(){
      return {
        deliveryDate: this.params.deliveryDate,
        deliveryRemark: this.params.deliveryRemark,
        id: this.params.id,
        logisticsCompany: this.params.logisticsCompany,
        logisticsNo:this.params.logisticsNo,
        phone: this.params.phone,
        urls: this.params.urls,
      }
      },
    toWarehouseAbnormal(){
     let exceptionUrls =  this.params.exceptionUrls
      return {
        arrivalDate: this.params.arrivalDate,
        arrivalRemark: this.params.deliveryRemark,
        descZh: this.params.descZh,
        id: this.params.id,
        manualExceptionType:this.params.manualExceptionType.join(','),
        orderLocationCreateReqVOList: this.params.orderLocationCreateReqVOList,
        urls: this.params.urls,
        exceptionUrls:exceptionUrls.length ? exceptionUrls.split(',') :[],
      }
    },
    toWarehouse(){
      return {
        arrivalDate: this.params.arrivalDate,
        arrivalRemark: this.params.deliveryRemark,
        id: this.params.id,
        urls: this.params.urls,
        orderLocationCreateReqVOList: this.params.orderLocationCreateReqVOList,

      }
    },
    calculationStatus(){
      return (val)=>{
        if(val > 0){
          return `${this.$t('多')}${val}${this.$t('箱')}`
        }else if(val < 0){
           return `${this.$t('少')}${Math.abs(val)}${this.$t('箱')}`
        }else {
          return this.$t('准确到齐')
        }
      }
    }
  },
  created() {
    //获得品牌
    getProductBrankPage({pageNo:1,pageSize:10000,}).then(r => {
        this.brandList = r.data.list
    })
    if(this.type == 1){
      // 查参调仓记录
      adjustLastWithStatus({orderId:this.orderId,lang:0}).then(r =>{
        this.applyStatus = r.data})
    }
    // 获取供应商
    getSupplierPage({ pageNo: 1, pageSize: 10000}).then(r => {
     this.expressList = r.data.list;
    })
    // 获得订单
    getOrder(this.orderId).then(r => {
      if (r.code === 0) {
        this.orderDetails = r.data;
      }
    })
    if(this.type == 2){
      // 调仓-明细-后台使用
      getAdjustInfo({orderId:this.orderId,lang:0}).then(r => {
        this.warehouseList = r.data
      })
    }
    // 获取调仓明细
    orderWarehouseInGetAdjustInfo({orderId: this.orderId, lang: 0}).then(r => {
      this.warehouseDetails = r.data[r.data.length - 1]
      listByOrderId({orderId:this.orderId}).then(res => {
        if(res.code === 0 && Number(this.type) === 1){
          this.params.orderLocationCreateReqVOList = res.data
        }
        // 等待仓库id和已选的储位后初始化储位信息
        this.$nextTick(() => {
          this.$refs.area.updateArea()
        })
      })
      this.warehouseInShi = this.warehouseDetails.warehouseInShi || ''
      this.params.phone = this.warehouseDetails.phone || '';
      this.params.logisticsNo = this.warehouseDetails.logisticsNo;
      this.params.id = this.warehouseDetails.id;
      this.params.logisticsCompany = this.warehouseDetails.logisticsCompany ? parseInt(this.warehouseDetails.logisticsCompany) :undefined;
      if(this.type == 2){
        this.params.deliveryDate = parseTime(this.warehouseDetails.deliveryDate)
      }
      // orderWarehousePicturePage({rows:100,bizId:this.params.id,type:this.type == 1 ? 2 : 3 }).then(r => {
      //   if(r.code === 0){
      //     this.params.urls = r.data.list.map(e => e.url);
      //   }
      // })
    })
    getOrderWarehouseIn(this.orderId).then(r => {
      if(r.code === 0){
        this.orderItemVOList = r.data;
      }
    })
  },
  methods:{
    submit(){
      warehouseAdjustSendOut(this.exWarehouse).then(
        r => {
          if(r.code === 0){
            this.$message.success(this.$t('调拨出仓成功！'));
            this.$tab.closeOpenPage({path:'/order/order'})
          }
        }
      )
    },
    submit2(val){
      if(val){
        warehouseAdjustArrived(val ? this.toWarehouse : this.toWarehouseAbnormal).then(r => {
          if(r.code === 0){
            this.$message.success(this.$t('调拨到仓成功！'));
            this.$tab.closeOpenPage({path:'/order/order'})
          }
        })
      }else {
        this.$refs.form2.validate( validate => {
          if(validate){
            warehouseAdjustArrived(val ? this.toWarehouse : this.toWarehouseAbnormal).then(r => {
              if(r.code === 0){
                this.$message.success(this.$t('调拨到仓成功！'));
                this.$tab.closeOpenPage({path:'/order/order'})
              }
            })
          }
        })
      }
    },
    totalFn({ columns, data }){
      //  体积，数量，重量 W:入仓
      let volume = 0,num = 0,weight = 0;
      let Wvolume = 0 ,Wnum = 0,Wweight = 0;
       data.forEach(i => {
         volume += Number(i.volume)
         num += Number(i.num)
         weight += Number(i.weight)
        i.orderWarehouseInBackItemDoList.forEach(m => {
          Wvolume += Number(m.volume || 0)
          Wnum += Number(m.cartonsNum || 0)
          Wweight += Number(m.weight || 0)
        })
       })
      let text = `${this.$t('下单统计')}：${num}${this.$t('箱')} ${volume.toFixed(2)}m³ ${weight.toFixed(2)}Kg`
      let text2 =` ${this.$t('入仓统计')}：${Wnum}${this.$t('箱')} ${Wvolume.toFixed(2)}m³ ${Wweight.toFixed(2)}Kg`
      return [this.$t('合计：'),text,text2]
    },
    cancellationOfOrder(){
      this.$prompt(this.$t('请输入取消调仓原因'), this.$t('提示'), {
        confirmButtonText: this.$t('确定'),
        cancelButtonText: this.$t('取消'),
      }).then(({ value }) => {
        cancelAdjust({
          orderId: this.orderId,
          reason: value,
        }).then(r => {
          console.log(r,'r');
          if(r.code === 0){
            this.$message({
              type: 'info',
              message: this.$t('取消调仓成功')
            });
            this.$tab.closeOpenPage({path:'/order/order'})
          }
        })
      }).catch(() => {
      });
    },
  },
  watch:{
    'params.orderLocationCreateReqVOList'(vo, vn){
      console.log(vo, vn)
    }
  }
}
</script>

<style scoped>

</style>
