transferWarehousing.vue 14.3 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 67 68
        <template v-slot="{row}">
            {{STATUS[row.status]}}
        </template>
      </el-table-column>
    </el-table>
    <el-descriptions style="margin-top: 20px" :column="4" border>
dcy's avatar
dcy committed
69 70
      <el-descriptions-item :label="$t('集运仓库')">{{ warehouseDetails && warehouseDetails.warehouseOutName  ?  warehouseDetails.warehouseOutName : '' }}</el-descriptions-item>
      <el-descriptions-item :label="$t('储位')">
黄卓's avatar
黄卓 committed
71
        {{ ($refs.area ? $refs.area.selected : []).join(',') }}
dcy's avatar
dcy committed
72
      </el-descriptions-item>
dcy's avatar
dcy committed
73 74
      <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
75
      </el-descriptions-item>
dcy's avatar
dcy committed
76 77
      <el-descriptions-item :label="$t('调拨目标仓')">{{ warehouseDetails && warehouseDetails.warehouseInName ? warehouseDetails.warehouseInName : '' }}</el-descriptions-item>
      <el-descriptions-item :label="$t('物流公司')">
dcy's avatar
dcy committed
78
        <el-select :disabled="type == 2" v-model="params.logisticsCompany" >
dcy's avatar
dcy committed
79 80
          <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
81
      </el-descriptions-item>
dcy's avatar
dcy committed
82
      <el-descriptions-item :label="$t('物流单号')">
dcy's avatar
dcy committed
83
        <el-input :disabled="type == 2" v-model="params.logisticsNo"></el-input>
dcy's avatar
dcy committed
84
      </el-descriptions-item>
dcy's avatar
dcy committed
85
      <el-descriptions-item :label="$t('联系电话')">
dcy's avatar
dcy committed
86
        <el-input :disabled="type == 2" v-model="params.phone"></el-input>
dcy's avatar
dcy committed
87
      </el-descriptions-item>
dcy's avatar
dcy committed
88 89 90 91
      <el-descriptions-item>
        <template slot="label">
          <span style="color: red;font-size: 20px;margin-right: 5px;">*</span>{{$t('出仓日期')}}
        </template>
dcy's avatar
dcy committed
92
        <el-date-picker
dcy's avatar
dcy committed
93
          :disabled="type == 2"
dcy's avatar
dcy committed
94
          value-format="yyyy-MM-dd HH:mm:ss"
dcy's avatar
dcy committed
95 96
          v-model="params.deliveryDate"
          type="date"
dcy's avatar
dcy committed
97
          :placeholder="$t('选择日期')">
dcy's avatar
dcy committed
98 99
        </el-date-picker>
      </el-descriptions-item>
dcy's avatar
dcy committed
100
      <el-descriptions-item :label="$t('到仓日期')" v-if="type == 2">
dcy's avatar
dcy committed
101 102 103 104
        <el-date-picker
          value-format="yyyy-MM-dd HH:mm:ss"
          v-model="params.arrivalDate"
          type="date"
dcy's avatar
dcy committed
105
          :placeholder="$t('选择日期')">
dcy's avatar
dcy committed
106 107
        </el-date-picker>
      </el-descriptions-item>
dcy's avatar
dcy committed
108 109
    </el-descriptions>
    <el-divider content-position="left">
dcy's avatar
dcy committed
110
      {{$t('出仓影像')}}
dcy's avatar
dcy committed
111 112 113
    </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
114
      <el-form-item :label="$t('备注')">
dcy's avatar
dcy committed
115 116 117
        <el-input v-model="params.deliveryRemark" type="textarea"></el-input>
      </el-form-item>
    </el-form>
dcy's avatar
dcy committed
118
    <div style="margin-bottom: 30px; text-align: center;">
dcy's avatar
dcy committed
119 120 121 122 123
      <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
124
    </div>
黄卓's avatar
黄卓 committed
125
    <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
126
    <el-dialog :title="$t('订单转异')" center :visible.sync="escapeBol">
dcy's avatar
dcy committed
127
      <el-form label-position="top" label-width="200">
dcy's avatar
dcy committed
128
        <el-form-item :label="$t('原因类型')">
dcy's avatar
dcy committed
129 130
          <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
131
        <el-form-item required :label="$t('附件')">
dcy's avatar
dcy committed
132 133
          <image-upload v-model="params.exceptionUrls"></image-upload>
        </el-form-item>
dcy's avatar
dcy committed
134
        <el-form-item :label="$t('详细信息')">
dcy's avatar
dcy committed
135 136 137 138
          <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
139 140
        <el-button  type="primary" @click="submit2(false)">{{$t('确认并完成入仓')}}</el-button>
        <el-button @click="escapeBol = false">{{$t('取消')}}</el-button>
dcy's avatar
dcy committed
141 142
      </span>
    </el-dialog>
143 144 145 146 147
  </div>
</template>

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

dcy's avatar
dcy committed
149
import {
dcy's avatar
dcy committed
150
  cancelAdjust,
dcy's avatar
dcy committed
151
  getAdjustInfo,
152
  getOrder, getOrderWarehouseIn, listByOrderId,
dcy's avatar
dcy committed
153
  orderWarehouseInGetAdjustInfo,
dcy's avatar
dcy committed
154
  orderWarehousePicturePage, warehouseAdjustArrived,
dcy's avatar
dcy committed
155 156 157 158 159
  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
160
import {getSupplierPage} from "@/api/ecw/supplier";
dcy's avatar
dcy committed
161
import {getByWarehouseId} from "@/api/ecw/warehouseArea";
dcy's avatar
dcy committed
162
import {adjustLastWithStatus, warehouseApprovalCancel} from "@/api/ecw/batchSingleApplication";
黄卓's avatar
黄卓 committed
163
import warehouseLocation from "@/components/WarehouseAreaDialog";
dcy's avatar
dcy committed
164
import imageUpload from "@/components/ImageUpload";
165
import {getProductBrankPage} from "@/api/ecw/productBrank";
dcy's avatar
dcy committed
166
import {parseTime} from "@/utils/ruoyi";
167 168
export default {
  name: "transferWarehousing",
dcy's avatar
dcy committed
169 170 171 172
  components: {
    ImageAndVideoUpload,
    Template,
    ordeDetailsForm,
dcy's avatar
dcy committed
173 174
    warehouseLocation,
    imageUpload
dcy's avatar
dcy committed
175 176 177 178 179 180 181
  },
  props: {
    orderId: [String, Number],
    type: [String],
  },
  data() {
    return {
dcy's avatar
dcy committed
182 183
      areaVisible:false,
      escapeBol:false,
dcy's avatar
dcy committed
184
      STATUS :{1:this.$t('申请中'), 2:this.$t('通过'), 3:this.$t('不通过'), 4:this.$t('已取消'), 5:this.$t('已出仓'),6:this.$t('已到仓')},
dcy's avatar
dcy committed
185 186 187 188 189 190 191 192
      orderDetails: {},
      DICT_TYPE,
      warehouseDetails: {},
      warehouseList:[],
      params: {
        deliveryDate: "",
        deliveryRemark: "",
        id: undefined,
dcy's avatar
dcy committed
193
        logisticsCompany:undefined,
dcy's avatar
dcy committed
194 195
        logisticsNo: "",
        phone: "",
dcy's avatar
dcy committed
196 197 198 199 200 201
        urls: [],
        arrivalDate:'',
        orderLocationCreateReqVOList:[],
        manualExceptionType:0,
        descZh:'',
        exceptionUrls:[]
dcy's avatar
dcy committed
202
      },
dcy's avatar
dcy committed
203
      warehouseInShi:0,
dcy's avatar
dcy committed
204 205
      expressList:[],
      storageSpaceList:[],
206
      applyStatus:{},
207 208
      orderItemVOList:[],
      brandList:[]
dcy's avatar
dcy committed
209

dcy's avatar
dcy committed
210 211
    }
  },
dcy's avatar
dcy committed
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
  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,
        arrivalRemark: this.params.arrivalRemark,
        descZh: this.params.descZh,
        id: this.params.id,
dcy's avatar
dcy committed
230
        manualExceptionType:this.params.manualExceptionType.join(','),
dcy's avatar
dcy committed
231 232 233
        orderLocationCreateReqVOList: this.params.orderLocationCreateReqVOList,
        urls: this.params.urls,
        exceptionUrls:this.params.exceptionUrls.split(','),
dcy's avatar
dcy committed
234

dcy's avatar
dcy committed
235 236 237 238 239 240 241 242 243 244
      }
    },
    toWarehouse(){
      return {
        arrivalDate: this.params.arrivalDate,
        arrivalRemark: this.params.arrivalRemark,
        id: this.params.id,
        urls: this.params.urls,

      }
245 246 247 248
    },
    calculationStatus(){
      return (val)=>{
        if(val > 0){
dcy's avatar
dcy committed
249
          return `${this.$t('多')}${val}${this.$t('箱')}`
250
        }else if(val < 0){
dcy's avatar
dcy committed
251
           return `${this.$t('少')}${Math.abs(val)}${this.$t('箱')}`
252
        }else {
dcy's avatar
dcy committed
253
          return this.$t('准确到齐')
254 255
        }
      }
dcy's avatar
dcy committed
256 257 258
    }
  },
  created() {
259 260 261
    getProductBrankPage({pageNo:1,pageSize:10000,}).then(r => {
        this.brandList = r.data.list
    })
dcy's avatar
dcy committed
262 263 264 265
    if(this.type == 1){
      adjustLastWithStatus({orderId:this.orderId,lang:0}).then(r =>{
        this.applyStatus = r.data})
    }
dcy's avatar
dcy committed
266 267 268
    getSupplierPage({ pageNo: 1, pageSize: 10000}).then(r => {
     this.expressList = r.data.list;
    })
dcy's avatar
dcy committed
269 270 271 272 273 274
    getOrder(this.orderId).then(r => {
      if (r.code === 0) {
        this.orderDetails = r.data;
      }
    })
    if(this.type == 2){
dcy's avatar
dcy committed
275 276
      getAdjustInfo({orderId:this.orderId,lang:0}).then(r => {
        this.warehouseList = r.data
dcy's avatar
dcy committed
277 278 279
      })
    }
    orderWarehouseInGetAdjustInfo({orderId: this.orderId, lang: 0}).then(r => {
dcy's avatar
dcy committed
280
      this.warehouseDetails = r.data[r.data.length - 1]
dcy's avatar
dcy committed
281 282
      listByOrderId({orderId:this.orderId}).then(res => {
        if(res.code === 0){
黄卓's avatar
黄卓 committed
283 284 285 286 287
          this.params.orderLocationCreateReqVOList = res.data

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

<style scoped>

</style>