transferWarehousing.vue 15.1 KB
Newer Older
1
<template>
dcy's avatar
dcy committed
2
  <div style="padding: 0 20px">
dcy's avatar
dcy committed
3
    <h1>{{type == 1 ? $t('调拨出仓') :$t('调拨到仓')}}</h1>
dcy's avatar
dcy committed
4
    <el-divider content-position="left">
dcy's avatar
dcy committed
5
      {{$t('订单信息')}}
dcy's avatar
dcy committed
6 7 8
    </el-divider>
    <ordeDetailsForm :details="orderDetails"></ordeDetailsForm>
    <el-divider content-position="left">
dcy's avatar
dcy committed
9
      {{$t('货物信息')}}
dcy's avatar
dcy committed
10
    </el-divider>
11
    <el-table :show-summary="true" :summary-method="totalFn" :data="orderItemVOList">
dcy's avatar
dcy committed
12 13
      <el-table-column width="80" type="index" :label="$t('序号')"></el-table-column>
      <el-table-column :label="$t('品名')">
dcy's avatar
dcy committed
14 15 16 17 18
        <template v-slot="{row}">
          <div>{{ row.prodTitleZh }}</div>
          <div>{{ row.prodTitleEn }}</div>
        </template>
      </el-table-column>
dcy's avatar
dcy committed
19
      <el-table-column :label="$t('填单货物属性')">
dcy's avatar
dcy committed
20
        <template v-slot="{row}">
21
        <div>{{$t('品牌')}}:无</div><div>{{$t('箱数')}}{{row.num}}</div><div>{{$t('体积')}}{{ row.volume }}</div><div>{{$t('重量')}}{{row.weight}}Kg</div>
dcy's avatar
dcy committed
22 23
        </template>
      </el-table-column>
dcy's avatar
dcy committed
24
      <el-table-column :label="$t('入库货物属性')">
dcy's avatar
dcy committed
25
        <template v-slot="{row}">
26
          <div v-for="(item,index) in row.orderWarehouseInBackItemDoList" :key="index">
27
            <div>{{$t('规格')}}{{item.boxGauge.split('*').map(item =>`${item}cm`).join('*')}}</div>
dcy's avatar
dcy committed
28
            <div>
29

dcy's avatar
dcy committed
30
              <div>{{$t('品牌')}}{{(brandList.find(item => item.id == row.brand) || {}).titleZh}}</div>
dcy's avatar
dcy committed
31 32 33
              <div>{{$t('箱数')}}{{item.cartonsNum}}</div>
              <div>{{$t('体积')}}{{item.volume}} CMB</div>
              <div>{{$t('重量')}}{{item.weight}}KG</div>
34 35
            </div>
          </div>
dcy's avatar
dcy committed
36 37
        </template>
      </el-table-column>
dcy's avatar
dcy committed
38
      <el-table-column :label="$t('最后操作时间')">
dcy's avatar
dcy committed
39
           <template v-slot="{row}">
40
             {{parseTime(row.updateTime)}}
dcy's avatar
dcy committed
41 42
           </template>
      </el-table-column>
dcy's avatar
dcy committed
43
      <el-table-column :label="$t('状态')">
dcy's avatar
dcy committed
44
        <template v-slot="{row}">
45
          {{calculationStatus(row.cartonsNumDiff)}}
dcy's avatar
dcy committed
46 47 48 49
        </template>
      </el-table-column>
    </el-table>
    <el-divider content-position="left" v-if="type == 2">
dcy's avatar
dcy committed
50
      {{$t('调仓明细')}}
dcy's avatar
dcy committed
51 52
    </el-divider>
    <el-table :data="warehouseList" v-if="type == 2">
53
      <el-table-column :label="$t('调仓编号')" type="index" ></el-table-column>
dcy's avatar
dcy committed
54 55 56 57
      <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('申请时间')">
dcy's avatar
dcy committed
58
        <template v-slot="{row}">
dcy's avatar
dcy committed
59
         {{parseTime(row.createTime)}}
dcy's avatar
dcy committed
60 61
        </template>
      </el-table-column>
dcy's avatar
dcy committed
62
      <el-table-column :label="$t('状态')">
dcy's avatar
dcy committed
63 64 65 66
        <template v-slot="{row}">
            {{STATUS[row.status]}}
        </template>
      </el-table-column>
67
      <el-table-column :label="$t('出仓影像')">
68
        <template v-slot="{row}">
69 70 71 72 73 74
          <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>
75 76
        </template>
      </el-table-column>
邓春圆's avatar
邓春圆 committed
77
      <el-table-column :label="$t('调拨出仓备注')" prop="deliveryRemark">
78
      </el-table-column>
邓春圆's avatar
邓春圆 committed
79
      <el-table-column :label="$t('调拨到仓备注')" prop="arrivalRemark">
80
      </el-table-column>
dcy's avatar
dcy committed
81 82
    </el-table>
    <el-descriptions style="margin-top: 20px" :column="4" border>
dcy's avatar
dcy committed
83 84
      <el-descriptions-item :label="$t('集运仓库')">{{ warehouseDetails && warehouseDetails.warehouseOutName  ?  warehouseDetails.warehouseOutName : '' }}</el-descriptions-item>
      <el-descriptions-item :label="$t('储位')">
黄卓's avatar
黄卓 committed
85
        {{ ($refs.area ? $refs.area.selected : []).join(',') }}
dcy's avatar
dcy committed
86
      </el-descriptions-item>
dcy's avatar
dcy committed
87 88
      <el-descriptions-item v-if="type == 2" :label="$t('选择储位')">
        <div @click="areaVisible = true" style="color: #0a84ff;cursor: pointer;">{{$t('选择储位')}}</div>
dcy's avatar
dcy committed
89
      </el-descriptions-item>
dcy's avatar
dcy committed
90 91
      <el-descriptions-item :label="$t('调拨目标仓')">{{ warehouseDetails && warehouseDetails.warehouseInName ? warehouseDetails.warehouseInName : '' }}</el-descriptions-item>
      <el-descriptions-item :label="$t('物流公司')">
dcy's avatar
dcy committed
92
        <el-select :disabled="type == 2" v-model="params.logisticsCompany" >
dcy's avatar
dcy committed
93 94
          <el-option v-for="(item,index) in expressList " :key="index"  :value="item.id" :label="item.companyZh"></el-option>
        </el-select>
dcy's avatar
dcy committed
95
      </el-descriptions-item>
dcy's avatar
dcy committed
96
      <el-descriptions-item :label="$t('物流单号')">
dcy's avatar
dcy committed
97
        <el-input :disabled="type == 2" v-model="params.logisticsNo"></el-input>
dcy's avatar
dcy committed
98
      </el-descriptions-item>
dcy's avatar
dcy committed
99
      <el-descriptions-item :label="$t('联系电话')">
dcy's avatar
dcy committed
100
        <el-input :disabled="type == 2" v-model="params.phone"></el-input>
dcy's avatar
dcy committed
101
      </el-descriptions-item>
dcy's avatar
dcy committed
102 103 104 105
      <el-descriptions-item>
        <template slot="label">
          <span style="color: red;font-size: 20px;margin-right: 5px;">*</span>{{$t('出仓日期')}}
        </template>
dcy's avatar
dcy committed
106
        <el-date-picker
dcy's avatar
dcy committed
107
          :disabled="type == 2"
dcy's avatar
dcy committed
108
          value-format="yyyy-MM-dd HH:mm:ss"
dcy's avatar
dcy committed
109 110
          v-model="params.deliveryDate"
          type="date"
dcy's avatar
dcy committed
111
          :placeholder="$t('选择日期')">
dcy's avatar
dcy committed
112 113
        </el-date-picker>
      </el-descriptions-item>
114 115 116 117
      <el-descriptions-item  v-if="type == 2">
        <template slot="label">
          <span style="color: red;font-size: 20px;margin-right: 5px;">*</span>{{$t('到仓日期')}}
        </template>
dcy's avatar
dcy committed
118 119 120 121
        <el-date-picker
          value-format="yyyy-MM-dd HH:mm:ss"
          v-model="params.arrivalDate"
          type="date"
dcy's avatar
dcy committed
122
          :placeholder="$t('选择日期')">
dcy's avatar
dcy committed
123 124
        </el-date-picker>
      </el-descriptions-item>
dcy's avatar
dcy committed
125 126
    </el-descriptions>
    <el-divider content-position="left">
dcy's avatar
dcy committed
127
      {{$t('出仓影像')}}
dcy's avatar
dcy committed
128 129 130
    </el-divider>
    <image-and-video-upload   :fileSize="50" :isShowTip="true" v-model="params.urls" ></image-and-video-upload>
    <el-form>
dcy's avatar
dcy committed
131
      <el-form-item :label="$t('备注')">
dcy's avatar
dcy committed
132 133 134
        <el-input v-model="params.deliveryRemark" type="textarea"></el-input>
      </el-form-item>
    </el-form>
dcy's avatar
dcy committed
135
    <div style="margin-bottom: 30px; text-align: center;">
dcy's avatar
dcy committed
136 137 138 139 140
      <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>
dcy's avatar
dcy committed
141
    </div>
黄卓's avatar
黄卓 committed
142
    <warehouse-location ref="area" :visible.sync="areaVisible" v-model="params.orderLocationCreateReqVOList" :warehouse-id="warehouseDetails.warehouseInId" :order-id="Number(orderId)"></warehouse-location>
dcy's avatar
dcy committed
143
    <el-dialog :title="$t('订单转异')" center :visible.sync="escapeBol">
dcy's avatar
dcy committed
144
      <el-form label-position="top" label-width="200">
dcy's avatar
dcy committed
145
        <el-form-item :label="$t('原因类型')">
dcy's avatar
dcy committed
146 147
          <dict-selector v-model="params.manualExceptionType" form-type="checkbox" :type="DICT_TYPE.MANUAL_EXCEPTION_TYPE" multiple ></dict-selector>
        </el-form-item>
dcy's avatar
dcy committed
148
        <el-form-item required :label="$t('附件')">
dcy's avatar
dcy committed
149 150
          <image-upload v-model="params.exceptionUrls"></image-upload>
        </el-form-item>
dcy's avatar
dcy committed
151
        <el-form-item :label="$t('详细信息')">
dcy's avatar
dcy committed
152 153 154 155
          <el-input v-model="params.descZh" type="textarea"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
dcy's avatar
dcy committed
156 157
        <el-button  type="primary" @click="submit2(false)">{{$t('确认并完成入仓')}}</el-button>
        <el-button @click="escapeBol = false">{{$t('取消')}}</el-button>
dcy's avatar
dcy committed
158 159
      </span>
    </el-dialog>
160 161 162 163 164
  </div>
</template>

<script>
import ordeDetailsForm from "@/views/ecw/order/components/ordeDetailsForm";
dcy's avatar
dcy committed
165

dcy's avatar
dcy committed
166
import {
dcy's avatar
dcy committed
167
  cancelAdjust,
dcy's avatar
dcy committed
168
  getAdjustInfo,
169
  getOrder, getOrderWarehouseIn, listByOrderId,
dcy's avatar
dcy committed
170
  orderWarehouseInGetAdjustInfo,
dcy's avatar
dcy committed
171
  orderWarehousePicturePage, warehouseAdjustArrived,
dcy's avatar
dcy committed
172 173 174 175 176
  warehouseAdjustSendOut
} from "@/api/ecw/order";
import Template from "@/views/cms/template";
import {DICT_TYPE} from '@/utils/dict';
import ImageAndVideoUpload from "@/components/ImageAndVideoUpload/index";
dcy's avatar
dcy committed
177
import {getSupplierPage} from "@/api/ecw/supplier";
dcy's avatar
dcy committed
178
import {getByWarehouseId} from "@/api/ecw/warehouseArea";
dcy's avatar
dcy committed
179
import {adjustLastWithStatus, warehouseApprovalCancel} from "@/api/ecw/batchSingleApplication";
黄卓's avatar
黄卓 committed
180
import warehouseLocation from "@/components/WarehouseAreaDialog";
dcy's avatar
dcy committed
181
import imageUpload from "@/components/ImageUpload";
182
import {getProductBrankPage} from "@/api/ecw/productBrank";
dcy's avatar
dcy committed
183
import {parseTime} from "@/utils/ruoyi";
184
import WarehouseVideoList from "@/views/ecw/order/components/warehouse-video-list.vue";
185 186
export default {
  name: "transferWarehousing",
dcy's avatar
dcy committed
187
  components: {
188
    WarehouseVideoList,
dcy's avatar
dcy committed
189 190 191
    ImageAndVideoUpload,
    Template,
    ordeDetailsForm,
dcy's avatar
dcy committed
192 193
    warehouseLocation,
    imageUpload
dcy's avatar
dcy committed
194 195 196 197 198 199 200
  },
  props: {
    orderId: [String, Number],
    type: [String],
  },
  data() {
    return {
dcy's avatar
dcy committed
201 202
      areaVisible:false,
      escapeBol:false,
dcy's avatar
dcy committed
203
      STATUS :{1:this.$t('申请中'), 2:this.$t('通过'), 3:this.$t('不通过'), 4:this.$t('已取消'), 5:this.$t('已出仓'),6:this.$t('已到仓')},
dcy's avatar
dcy committed
204 205 206 207 208 209 210 211
      orderDetails: {},
      DICT_TYPE,
      warehouseDetails: {},
      warehouseList:[],
      params: {
        deliveryDate: "",
        deliveryRemark: "",
        id: undefined,
dcy's avatar
dcy committed
212
        logisticsCompany:undefined,
dcy's avatar
dcy committed
213 214
        logisticsNo: "",
        phone: "",
dcy's avatar
dcy committed
215 216 217 218 219 220
        urls: [],
        arrivalDate:'',
        orderLocationCreateReqVOList:[],
        manualExceptionType:0,
        descZh:'',
        exceptionUrls:[]
dcy's avatar
dcy committed
221
      },
dcy's avatar
dcy committed
222
      warehouseInShi:0,
dcy's avatar
dcy committed
223 224
      expressList:[],
      storageSpaceList:[],
225
      applyStatus:{},
226 227
      orderItemVOList:[],
      brandList:[]
dcy's avatar
dcy committed
228

dcy's avatar
dcy committed
229 230
    }
  },
dcy's avatar
dcy committed
231 232 233 234 235 236 237 238 239 240 241 242 243 244 245
  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.logisticsNo,
        urls: this.params.urls,
      }
      },
    toWarehouseAbnormal(){
      return {
        arrivalDate: this.params.arrivalDate,
246
        arrivalRemark: this.params.deliveryRemark,
dcy's avatar
dcy committed
247 248
        descZh: this.params.descZh,
        id: this.params.id,
dcy's avatar
dcy committed
249
        manualExceptionType:this.params.manualExceptionType.join(','),
dcy's avatar
dcy committed
250 251 252
        orderLocationCreateReqVOList: this.params.orderLocationCreateReqVOList,
        urls: this.params.urls,
        exceptionUrls:this.params.exceptionUrls.split(','),
dcy's avatar
dcy committed
253

dcy's avatar
dcy committed
254 255 256 257 258
      }
    },
    toWarehouse(){
      return {
        arrivalDate: this.params.arrivalDate,
259
        arrivalRemark: this.params.deliveryRemark,
dcy's avatar
dcy committed
260 261 262 263
        id: this.params.id,
        urls: this.params.urls,

      }
264 265 266 267
    },
    calculationStatus(){
      return (val)=>{
        if(val > 0){
dcy's avatar
dcy committed
268
          return `${this.$t('多')}${val}${this.$t('箱')}`
269
        }else if(val < 0){
dcy's avatar
dcy committed
270
           return `${this.$t('少')}${Math.abs(val)}${this.$t('箱')}`
271
        }else {
dcy's avatar
dcy committed
272
          return this.$t('准确到齐')
273 274
        }
      }
dcy's avatar
dcy committed
275 276 277
    }
  },
  created() {
278 279 280
    getProductBrankPage({pageNo:1,pageSize:10000,}).then(r => {
        this.brandList = r.data.list
    })
dcy's avatar
dcy committed
281 282 283 284
    if(this.type == 1){
      adjustLastWithStatus({orderId:this.orderId,lang:0}).then(r =>{
        this.applyStatus = r.data})
    }
dcy's avatar
dcy committed
285 286 287
    getSupplierPage({ pageNo: 1, pageSize: 10000}).then(r => {
     this.expressList = r.data.list;
    })
dcy's avatar
dcy committed
288 289 290 291 292 293
    getOrder(this.orderId).then(r => {
      if (r.code === 0) {
        this.orderDetails = r.data;
      }
    })
    if(this.type == 2){
dcy's avatar
dcy committed
294 295
      getAdjustInfo({orderId:this.orderId,lang:0}).then(r => {
        this.warehouseList = r.data
dcy's avatar
dcy committed
296 297 298
      })
    }
    orderWarehouseInGetAdjustInfo({orderId: this.orderId, lang: 0}).then(r => {
dcy's avatar
dcy committed
299
      this.warehouseDetails = r.data[r.data.length - 1]
dcy's avatar
dcy committed
300 301
      listByOrderId({orderId:this.orderId}).then(res => {
        if(res.code === 0){
黄卓's avatar
黄卓 committed
302 303 304 305 306
          this.params.orderLocationCreateReqVOList = res.data

          // 等待仓库id和已选的储位后初始化储位信息
          this.$nextTick(() => {
            this.$refs.area.updateArea()
dcy's avatar
dcy committed
307 308
          })
        }
dcy's avatar
dcy committed
309
      })
dcy's avatar
dcy committed
310
      this.warehouseInShi = this.warehouseDetails.warehouseInShi || ''
311
      this.params.phone = this.warehouseDetails.phone || '';
dcy's avatar
dcy committed
312 313
      this.params.logisticsNo = this.warehouseDetails.logisticsNo;
      this.params.id = this.warehouseDetails.id;
dcy's avatar
dcy committed
314
      this.params.logisticsCompany = this.warehouseDetails.logisticsCompany ? parseInt(this.warehouseDetails.logisticsCompany) :undefined;
dcy's avatar
dcy committed
315 316 317
      if(this.type == 2){
        this.params.deliveryDate = parseTime(this.warehouseDetails.deliveryDate)
      }
邓春圆's avatar
邓春圆 committed
318 319 320 321 322
      // 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);
      //   }
      // })
dcy's avatar
dcy committed
323
    })
324 325 326 327 328
    getOrderWarehouseIn(this.orderId).then(r => {
      if(r.code === 0){
        this.orderItemVOList = r.data;
      }
    })
dcy's avatar
dcy committed
329 330 331
  },
  methods:{
    submit(){
dcy's avatar
dcy committed
332
      warehouseAdjustSendOut(this.exWarehouse).then(
dcy's avatar
dcy committed
333 334
        r => {
          if(r.code === 0){
335
            this.$message.success(this.$t('调拨出仓成功!'));
dcy's avatar
dcy committed
336
            this.$tab.closeOpenPage({path:'/order/order'})
dcy's avatar
dcy committed
337 338 339 340
          }
        }
      )
    },
dcy's avatar
dcy committed
341 342
    submit2(val){
      warehouseAdjustArrived(val ? this.toWarehouse : this.toWarehouseAbnormal).then(r => {
dcy's avatar
dcy committed
343
          if(r.code === 0){
344
            this.$message.success(this.$t('调拨到仓成功!'));
dcy's avatar
dcy committed
345
            this.$tab.closeOpenPage({path:'/order/order'})
dcy's avatar
dcy committed
346 347
          }
      })
348 349 350 351 352 353 354 355 356
    },
    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)
357 358 359 360 361
        i.orderWarehouseInBackItemDoList.forEach(m => {
          Wvolume += Number(m.volume || 0)
          Wnum += Number(m.cartonsNum || 0)
          Wweight += Number(m.weight || 0)
        })
362
       })
dcy's avatar
dcy committed
363 364
      let text = `${this.$t('下单统计')}:${num}${this.$t('箱')} ${volume}m³ ${weight}Kg`
      let text2 =` ${this.$t('入仓统计')}:${Wnum}${this.$t('箱')} ${Wvolume}m³ ${Wweight}Kg`
Marcus's avatar
Marcus committed
365
      return [this.$t('合计:'),text,text2]
dcy's avatar
dcy committed
366 367
    },
    cancellationOfOrder(){
dcy's avatar
dcy committed
368 369 370
      this.$prompt(this.$t('请输入取消调仓原因'), this.$t('提示'), {
        confirmButtonText: this.$t('确定'),
        cancelButtonText: this.$t('取消'),
dcy's avatar
dcy committed
371
      }).then(({ value }) => {
dcy's avatar
dcy committed
372 373 374 375 376 377 378 379
        cancelAdjust({
          orderId: this.orderId,
          reason: value,
        }).then(r => {
          console.log(r,'r');
          if(r.code === 0){
            this.$message({
              type: 'info',
dcy's avatar
dcy committed
380
              message: this.$t('取消调仓成功')
dcy's avatar
dcy committed
381
            });
dcy's avatar
dcy committed
382 383 384 385 386
            this.$tab.closeOpenPage({path:'/order/order'})
          }
        })
      }).catch(() => {
      });
dcy's avatar
dcy committed
387
    },
388
  },
dcy's avatar
dcy committed
389
  watch:{
黄卓's avatar
黄卓 committed
390 391
    'params.orderLocationCreateReqVOList'(vo, vn){
      console.log(vo, vn)
dcy's avatar
dcy committed
392 393
    }
  }
394 395 396 397 398 399
}
</script>

<style scoped>

</style>