detail.vue 16.7 KB
Newer Older
1
<template>
dragondean@qq.com's avatar
dragondean@qq.com committed
2
  <div class="app-container" v-if="order">
3
    <el-card class="card">
4
      <div slot="header" class="card-title">
5
        {{$t('订单编号')}}{{order.orderNo}}
dragondean@qq.com's avatar
dragondean@qq.com committed
6
        <template v-if="order.tidanNo">- {{order.tidanNo}}</template>
7
      </div>
8
      <el-row :gutter="20">
dragondean@qq.com's avatar
dragondean@qq.com committed
9
        <el-col :span="8" v-if="order.consignorVO">
10 11
          <el-descriptions class="margin-top" border :title="$t('发货人')" :column="1" :labelStyle="{width:'150px'}">
            <el-descriptions-item :label="$t('发货人')">{{order.consignorVO.name}}</el-descriptions-item>
12 13 14
            <el-descriptions-item :label="$t('发货人电话')">
              {{order.consignorVO.countryCode}} {{order.consignorVO.phone}}
            </el-descriptions-item>
15 16
            <el-descriptions-item :label="$t('发货人邮箱')">{{order.consignorVO.email}}</el-descriptions-item>
            <el-descriptions-item :label="$t('发货人公司名称')">
17
              {{order.consignorVO.company}}
18 19 20
            </el-descriptions-item>
          </el-descriptions>
        </el-col>
dragondean@qq.com's avatar
dragondean@qq.com committed
21
        <el-col :span="16" v-if="order.consigneeVO">
22 23
          <el-descriptions class="margin-top" border :title="$t('收货人')" :column="2" :labelStyle="{width:'150px'}">
            <el-descriptions-item :label="$t('收货人')">{{order.consigneeVO.name}}</el-descriptions-item>
24 25 26
            <el-descriptions-item :label="$t('收货人电话')">
              {{order.consigneeVO.countryCode}} {{order.consigneeVO.phone}}
            </el-descriptions-item>
27 28
            <el-descriptions-item :label="$t('收货人邮箱')">{{order.consigneeVO.email}}</el-descriptions-item>
            <el-descriptions-item :label="$t('收货人公司名称')">
29
              {{order.consigneeVO.company}}
30
            </el-descriptions-item>
31
            <el-descriptions-item :label="$t('收货方式')">
dragondean@qq.com's avatar
dragondean@qq.com committed
32 33
              <dict-tag :type="DICT_TYPE.ECW_HARVEST_METHOD" :value="order.consigneeVO.harvestMethod" />
            </el-descriptions-item>
34
            <el-descriptions-item :label="$t('收货地区')">
dragondean@qq.com's avatar
dragondean@qq.com committed
35 36
              {{region}}
            </el-descriptions-item>
37
            <el-descriptions-item :label="$t('收货地址')">
dragondean@qq.com's avatar
dragondean@qq.com committed
38 39
              {{order.consigneeVO.address}}
            </el-descriptions-item>
40 41 42 43 44
          </el-descriptions>
        </el-col>
      </el-row>
    </el-card>
    <el-card class="card">
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
      <el-descriptions border :title="$t('物流信息')" :column="2">
        <el-descriptions-item :label="$t('始发仓')">{{order.logisticsInfoDto.startTitleZh}}</el-descriptions-item>
        <el-descriptions-item :label="$t('目的仓')">{{order.logisticsInfoDto.destTitleZh}}</el-descriptions-item>
        <el-descriptions-item :label="$t('地址')" :span="2">{{order.logisticsInfoDto.startAddressZh}}</el-descriptions-item>
        <el-descriptions-item :label="$t('运输方式')" :span="2">
          <dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="order.transportId" />
        </el-descriptions-item>
        <el-descriptions-item :label="$t('出货渠道')" :span="2">{{channelName}}</el-descriptions-item>
      </el-descriptions>
    </el-card>
    
    <el-card class="card">
      <el-descriptions class="mr-10" border :title="$t('基础信息')" :column="2">
        <el-descriptions-item :label="$t('唛头')">{{order.marks}}</el-descriptions-item>
        <el-descriptions-item :label="$t('送货时间')">{{order.deliveryDate}}</el-descriptions-item>
        <el-descriptions-item :label="$t('是否控货')">
          <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="order.isCargoControl" />
        </el-descriptions-item>
        <el-descriptions-item :label="$t('填单信息')">
          {{order.costVO.totalNum}}{{$t('箱')}}
          {{order.costVO.totalWeight}}Kg
          {{order.costVO.totalVolume}}m³
          {{order.costVO.totalQuantity}}{{$t('个')}}
        </el-descriptions-item>
        <el-descriptions-item :label="$t('仓库实测')">
          {{order.sumNum}}{{$t('箱')}}
          {{order.sumWeight}}Kg
          {{order.sumVolume}}m³
          {{order.sumQuantity}}{{$t('个')}}
        </el-descriptions-item>
        <el-descriptions-item :label="$t('收款数据')">
          {{order.sumNum}}{{$t('箱')}}
          {{order.vweight}}Kg
          {{order.wvolume}}m³
          {{order.sumQuantity}}{{$t('个')}}
        </el-descriptions-item>
        <el-descriptions-item :label="$t('入仓类型')">
          <dict-tag :type="DICT_TYPE.ECW_WAREHOUSING_TYPE" :value="order.warehouseType" />
        </el-descriptions-item>
        <el-descriptions-item :label="$t('单证报关')">
          <dict-tag :type="DICT_TYPE.ECW_CUSTOMS_TYPE" :value="order.customsType" />
        </el-descriptions-item>
        <el-descriptions-item :label="$t('出单方式')">
          <dict-tag :type="DICT_TYPE.ECW_SUING_METHOD" :value="order.issuingMethod" />
        </el-descriptions-item>
        <el-descriptions-item :label="$t('代收货款')">
          <dict-tag :type="DICT_TYPE.INFRA_BOOLEAN_STRING" :value="order.isCollection" />
92
          <template v-if="order.isCollection == 1">({{order.collectionProxy}}{{currencyMap[order.collectionProxyCurrency]}})</template>
93 94
        </el-descriptions-item>
        <el-descriptions-item :label="$t('集运仓库')">
dragondean@qq.com's avatar
dragondean@qq.com committed
95 96 97
          {{order.isExternalWarehouse ? $t('外部仓') : $t('自有仓') }}
          <template v-for="(item, index) in order.externalWarehouseDtoList" >
            <div v-if="item.estLoadingTime || item.loadingAddress" :key="index">
98 99
              <!-- {{$t('装柜时间')}}{{item.estLoadingTime}} -->
              {{$t('装柜地址')}}{{item.loadingAddress}}
dragondean@qq.com's avatar
dragondean@qq.com committed
100 101 102
            </div>
          </template>

103 104
        </el-descriptions-item>
      </el-descriptions>
105 106
    </el-card>
    <el-card class="card">
ylpmty's avatar
ylpmty committed
107
      <el-tabs v-model="activeName">
108
        <el-tab-pane :label="$t('货物详情')" name="first">
109
          <el-table :data="order.orderItemVOList" border style="width: 100%">
110
            <el-table-column :label="$t('序号')" width="90px">
dragondean@qq.com's avatar
dragondean@qq.com committed
111 112
              <template slot-scope="scope">{{scope.$index + 1}}</template>
            </el-table-column>
113 114 115
            <el-table-column prop="prodTitleZh" :label="$t('中文品名')" />
            <el-table-column prop="prodTitleEn" :label="$t('英文品名')" />
            <el-table-column prop="brand" :label="$t('品牌')"  width="90px">
116
              <template slot-scope="{row}">
dragondean@qq.com's avatar
dragondean@qq.com committed
117
                <dict-tag :type="DICT_TYPE.ECW_IS_BRAND" :value="row.brandType" />
118 119
              </template>
            </el-table-column>
120
            <el-table-column prop="num" :label="$t('填单件数')"  width="90px"/>
121 122 123 124 125
            <el-table-column prop="sumNum" :label="$t('入仓件数')"  width="90px">
              <template slot-scope="{row}">
                {{row.warehouseInInfoVO ? row.warehouseInInfoVO.cartonsNum : 0}}
              </template>
            </el-table-column>
126
            <el-table-column prop="unit" :label="$t('单位')" width="90px">
127
              <template slot-scope="{row}">
128
                <dict-tag :type="DICT_TYPE.ECW_PACKAGING_TYPE" :value="row.unit" />
129 130 131
              </template>
            </el-table-column>

132 133
            <el-table-column prop="worth" :label="$t('货值')"  width="120px"/>
            <el-table-column prop="" :label="$t('材质')">
134 135 136 137
              <template slot-scope="{row}">
                <dict-tag :type="DICT_TYPE.ECW_PRODUCT_MATERIAL" :value="row.material" />
              </template>
            </el-table-column>
dragondean@qq.com's avatar
dragondean@qq.com committed
138 139
            <el-table-column prop="volume" :label="$t('体积') + '(m³)'"  width="90px">
              <template slot-scope="{row}">
dragondean@qq.com's avatar
dragondean@qq.com committed
140
                {{order.inWarehouseState > 1 && row.warehouseInInfoVO ? row.warehouseInInfoVO.volume : row.volume}}
dragondean@qq.com's avatar
dragondean@qq.com committed
141 142 143 144
              </template>
            </el-table-column>
            <el-table-column prop="weight" :label="$t('重量') + '(kg)'"  width="90px">
              <template slot-scope="{row}">
dragondean@qq.com's avatar
dragondean@qq.com committed
145
                {{order.inWarehouseState > 1 && row.warehouseInInfoVO ? row.warehouseInInfoVO.weight : row.weight}}
dragondean@qq.com's avatar
dragondean@qq.com committed
146 147
              </template>
            </el-table-column>
dragondean@qq.com's avatar
dragondean@qq.com committed
148
            <el-table-column prop="warehouseInInfoVO.quantityAll" :label="$t('数量') + '(个)'"  width="90px"/>
149
            <el-table-column prop="" :label="$t('费用类型')">
dragondean@qq.com's avatar
dragondean@qq.com committed
150
              <template slot-scope="{row}">
151
                <dict-tag :type="DICT_TYPE.ECW_PAY_ADVANCE" :value="row.isPayAdvance" />
dragondean@qq.com's avatar
dragondean@qq.com committed
152 153
              </template>
            </el-table-column>
154
            <el-table-column prop="" :label="$t('成交单价')"  width="220px">
dragondean@qq.com's avatar
dragondean@qq.com committed
155
              <template slot-scope="{row}">
156

dragondean@qq.com's avatar
dragondean@qq.com committed
157
                <template v-if="row.charging ==1">
158
                  <template v-if="!row.seaFreight">未报价</template>
dragondean@qq.com's avatar
dragondean@qq.com committed
159
                  <template v-else>{{$t('全包价')}} {{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}</template>
dragondean@qq.com's avatar
dragondean@qq.com committed
160
                </template>
161
                <template v-else-if="!row.seaFreight && !row.clearanceFreight">未报价</template>
dragondean@qq.com's avatar
dragondean@qq.com committed
162 163
                <template v-else>
                  <div>
dragondean@qq.com's avatar
dragondean@qq.com committed
164
                      {{$t('运费')}}{{row.oneSeaFreight}} {{currencyMap[row.seaFreightCurrency]}} / {{unitMap[row.seaFreightVolume]}}
dragondean@qq.com's avatar
dragondean@qq.com committed
165 166
                  </div>
                  <div>
dragondean@qq.com's avatar
dragondean@qq.com committed
167
                      {{$t('清关费')}}{{row.oneClearanceFreight}} {{currencyMap[row.clearanceFreightCurrency]}} / {{unitMap[row.clearanceFreightVolume]}}
dragondean@qq.com's avatar
dragondean@qq.com committed
168 169 170 171
                  </div>
                </template>
              </template>
            </el-table-column>
172 173
          </el-table>
        </el-tab-pane>
174
        <el-tab-pane :label="$t('订单动态')" name="second">
175
          <el-timeline v-if="order.orderTimeVOList && order.orderTimeVOList.length" :reverse="true">
dragondean@qq.com's avatar
dragondean@qq.com committed
176
            <el-timeline-item v-for="(activity, index) in order.orderTimeVOList" :key="index" :timestamp="activity.timestamp">
ylpmty's avatar
ylpmty committed
177
              {{ activity.titleZh }}
178 179
            </el-timeline-item>
          </el-timeline>
180
          <el-result v-else icon="info " :title="$t('暂无数据')" :subTitle="$t('暂无订单动态数据')" />
181
        </el-tab-pane>
182
        <el-tab-pane :label="$t('运单资料/提货单')" name="three">
dragondean@qq.com's avatar
dragondean@qq.com committed
183
          <!--inWarehouseState 1待入库,2多了,3少了,4到齐-->
184 185 186
          <el-button type="text" @click="showWarehouseReceipt=true" :disabled="order.inWarehouseState <= 1">{{$t('查看入仓单')}}</el-button>
          <el-button type="text" @click.native="showLadingBill=true" :disabled="!order.tidanNo">{{$t('查看提货单')}}</el-button>
          <el-button :disabled="!order.packingListUrl" type="text" @click="downloadPackingList">{{$t('装箱单')}}</el-button>
187
        </el-tab-pane>
188
        <el-tab-pane :label="$t('费用明细')" name="four">
189
          <el-table :data="feeList">
190 191
            <el-table-column :label="$t('订单号')" prop="orderNo"></el-table-column>
            <el-table-column :label="$t('运输方式')">
192 193
              <dict-tag :type="DICT_TYPE.ECW_TRANSPORT_TYPE" :value="order.transportId" />
            </el-table-column>
194
            <el-table-column :label="$t('出货渠道')">
195 196
              {{channelName}}
            </el-table-column>
197
            <el-table-column :label="$t('始发地')" prop="orderNo">
198 199
              {{departure.titleZh || '-'}}
            </el-table-column>
200
            <el-table-column :label="$t('目的地')">
201 202
              {{objective.titleZh || '-'}}
            </el-table-column>
203
            <el-table-column :label="$t('品名')" prop="titleZh"></el-table-column>
dragondean@qq.com's avatar
dragondean@qq.com committed
204 205 206 207 208
            <el-table-column :label="$t('箱数')" prop="num">
              <template slot-scope="{row}">
                {{row.num || '-'}}
              </template>
            </el-table-column>
209
            <el-table-column :label="$t('体积/重量')">
210
              <template slot-scope="{row}">
dragondean@qq.com's avatar
dragondean@qq.com committed
211
               {{row.volume || '-'}} / {{row.weight || '-'}}
212 213
              </template>
            </el-table-column>
214
            <el-table-column :label="$t('收款类型')">
215 216 217 218
              <template slot-scope="{row}">
                <dict-tag :type="DICT_TYPE.PAYMENT_TYPE" :value="row.collectionType" />
              </template>
            </el-table-column>
219
            <el-table-column :label="$t('收入类型')">
220 221 222 223
              <template slot-scope="{row}">
                <dict-tag :type="DICT_TYPE.FEE_TYPE" :value="row.feeType" />
              </template>
            </el-table-column>
dragondean@qq.com's avatar
dragondean@qq.com committed
224 225 226 227 228 229 230 231 232 233
            <el-table-column :label="$t('单价金额')" prop="unitPrice">
              <template slot-scope="{row}">
                {{row.unitPrice}}{{currencyMap[row.currencyId]}}
              </template>
            </el-table-column>
            <el-table-column :label="$t('总金额')" prop="totalAmount">
              <template slot-scope="{row}">
                {{row.totalAmount}}{{currencyMap[row.currencyId]}}
              </template>
            </el-table-column>
234
          </el-table>
dragondean@qq.com's avatar
dragondean@qq.com committed
235
        </el-tab-pane>
236 237 238
      </el-tabs>
    </el-card>

239
    <print-warehouse-receipt v-if="showWarehouseReceipt" :order-id="order.orderId" @close="showWarehouseReceipt=false" />
240
    <print-lading-bill v-if="showLadingBill" :order-id="order.orderId" :transport-type="order.transportId" @close="showLadingBill=false" />
241 242 243 244 245
  </div>
</template>

<script>
import { getOrder } from '@/api/ecw/order'
ylpmty's avatar
ylpmty committed
246
import { getDictDatas, DICT_TYPE } from '@/utils/dict';
247 248
import PrintWarehouseReceipt from './components/PrintWarehouseReceipt'
import PrintLadingBill from './components/PrintLadingBill'
dragondean@qq.com's avatar
dragondean@qq.com committed
249 250
import {getUnitList} from '@/api/ecw/unit'
import {getCurrencyList} from '@/api/ecw/currency'
251 252
import {getReceivableListByOrderId} from '@/api/ecw/receipt'
import { getChannel } from '@/api/ecw/channel';
dragondean@qq.com's avatar
dragondean@qq.com committed
253
import {listByIds} from '@/api/ecw/region'
dragondean@qq.com's avatar
dragondean@qq.com committed
254

255 256 257
export default {
  name: "detail",
  components: {
258
    PrintWarehouseReceipt, PrintLadingBill
ylpmty's avatar
ylpmty committed
259 260 261 262 263 264 265 266
  },
  filters: {
    customsTypeFilter(e, customsTypeList) {
      if (e) return customsTypeList.find(item => item.value == e).label
    },
    transportFilter(e, transportList) {
      if (e) return transportList.find(item => item.value == e).label
    }
267 268 269 270 271
  },
  data() {
    return {
      // 遮罩层
      loading: false,
dragondean@qq.com's avatar
dragondean@qq.com committed
272
      order: null,
273 274 275 276 277 278 279
      activeName: 'first',
      orderId: 17,
      tableData: [],
      queryParams: {
        pageNo: 1,
        pageSize: 10,
      },
dragondean@qq.com's avatar
dragondean@qq.com committed
280
      activities: [],
ylpmty's avatar
ylpmty committed
281 282
      customsTypeList: getDictDatas(DICT_TYPE.ECW_CUSTOMS_TYPE), //报关类型
      transportList: getDictDatas(DICT_TYPE.ECW_TRANSPORT_TYPE), //运输方式
283 284
      showWarehouseReceipt: false, // 是否显示打印入仓单
      showLadingBill: false, // 是否显示打印提单
dragondean@qq.com's avatar
dragondean@qq.com committed
285
      currencyList: [],
286 287
      unitList:[],
      feeList: [],
dragondean@qq.com's avatar
dragondean@qq.com committed
288 289
      channelName: '/',
      region: ''
dragondean@qq.com's avatar
dragondean@qq.com committed
290 291 292
    }
  },
  computed:{
dragondean@qq.com's avatar
dragondean@qq.com committed
293
    currencyMap(){
dragondean@qq.com's avatar
dragondean@qq.com committed
294 295 296 297 298 299 300 301 302 303 304 305 306
        let map = {}
        this.currencyList.forEach(item => {
            map[item.id] = item.titleZh
        })
        return map
    },
    unitMap(){
        let map = {}
        this.unitList.forEach(item => {
            map[item.id] = item.titleZh
        })
        return map
    },
307 308 309 310 311 312 313 314 315 316 317 318
    objective(){
      if(this.order && this.order.objectiveVO){
        return JSON.parse(this.order.objectiveVO.objective)
      }
      return {}
    },
    departure(){
      if(this.order && this.order.departureVO){
        return JSON.parse(this.order.departureVO.departure)
      }
      return {}
    }
dragondean@qq.com's avatar
dragondean@qq.com committed
319 320
  },
  watch:{
321 322
    activeName(val){
      if(!this.feeList.length && val == 'four'){
dragondean@qq.com's avatar
dragondean@qq.com committed
323 324
        this.loadFeeList()
      }
325 326 327
    },
    'order.channelId'(){
      this.getChannel()
dragondean@qq.com's avatar
dragondean@qq.com committed
328 329 330 331 332 333 334 335 336 337 338
    },
    'order.consigneeVO'(val){
      if(!val) return '-'
      listByIds({ids: [val.country, val.province, val.city].join(',')}).then(res => {
        console.log('listById', res)
        let region = ''
        res.data.forEach(item => {
          region += " " + item.titleZh
        })
        this.region = region
      })
ylpmty's avatar
ylpmty committed
339
    }
340 341 342 343
  },
  created() {
    if (this.$route.query.orderId) {
      this.orderId = this.$route.query.orderId
344
      this.getOrder();
345
    }
dragondean@qq.com's avatar
dragondean@qq.com committed
346 347 348

    getCurrencyList().then(res => this.currencyList = res.data)
    getUnitList().then(res => this.unitList = res.data)
349 350 351
  },
  methods: {
    /** 查询列表 */
352
    getOrder() {
353 354 355 356
      let that = this
      that.loading = true;
      // 执行查询
      getOrder(that.orderId).then(response => {
357
        that.order = response.data;
358 359
      });
    },
360
    getChannel(){
361
      if(!this.order || !this.order.channelId) return
362 363 364 365
      getChannel(this.order.channelId).then(res => {
        this.channelName = res.data.nameZh
      })
    },
dragondean@qq.com's avatar
dragondean@qq.com committed
366
    loadFeeList(){
367 368 369 370 371 372
      getReceivableListByOrderId({id: this.orderId}).then(res => {
        this.feeList = res.data
      })
    },
    downloadPackingList(){
      window.open(this.order.packingListUrl)
dragondean@qq.com's avatar
dragondean@qq.com committed
373
    }
374 375 376 377 378 379 380 381
  }
};
</script>

<style scoped>
.card {
  margin-bottom: 20px;
}
382 383 384 385
.card-title{
  font-size: 18px;
  font-weight: bold;
}
386 387 388 389 390 391 392 393 394 395

.el-dropdown-link {
  cursor: pointer;
  color: #409EFF;
}

.el-icon-arrow-down {
  font-size: 12px;
}
</style>