index.vue 27.7 KB
Newer Older
lanbaoming's avatar
lanbaoming committed
1 2 3 4 5 6
<!--备货-->
<template>
  <div class="app-container">
    <h2>{{ title }}-{{ order.orderNo }}</h2>
    <order-base-info :order="order" stocking></order-base-info>
    <div class="flex items-center">
lanbaoming's avatar
lanbaoming committed
7 8 9 10
      <div class="flex-1 page-title">{{ $t("货物信息") }}</div>
      <el-button type="primary" @click="showNewProductDialog = true">{{
        $t("添加新品名")
      }}</el-button>
lanbaoming's avatar
lanbaoming committed
11 12 13 14 15
    </div>
    <!--
    未入仓的不显示 https://zentao.test.jdshangmen.com/bug-view-5292.html
    -->
    <el-table
lanbaoming's avatar
lanbaoming committed
16 17 18 19 20 21
      v-if="
        order.orderItemVOList &&
        order.orderItemVOList.length > 0 &&
        orderItemList &&
        orderItemList.length > 0
      "
lanbaoming's avatar
lanbaoming committed
22 23
      :data="order.orderItemVOList || []"
      default-expand-all
lanbaoming's avatar
lanbaoming committed
24 25
      style="width: 100%"
    >
lanbaoming's avatar
lanbaoming committed
26 27 28
      <!--入仓记录-->
      <el-table-column type="expand">
        <template slot-scope="props">
lanbaoming's avatar
lanbaoming committed
29 30 31 32
          <div
            style="padding-left: 80px"
            v-if="orderWarehouseInList(props.row.orderItemId).length"
          >
lanbaoming's avatar
lanbaoming committed
33 34
            <el-table :data="orderWarehouseInList(props.row.orderItemId)">
              <el-table-column :label="$t('序号')" width="80px">
lanbaoming's avatar
lanbaoming committed
35 36
                <template slot-scope="{ row, column, $index }">
                  {{ $index + 1 }}
lanbaoming's avatar
lanbaoming committed
37 38
                </template>
              </el-table-column>
lanbaoming's avatar
lanbaoming committed
39 40 41 42 43
              <el-table-column
                prop="cartonsNum"
                :label="$t('箱数')"
                width="60px"
              ></el-table-column>
lanbaoming's avatar
lanbaoming committed
44
              <el-table-column prop="areaName" :label="$t('入仓类型')">
lanbaoming's avatar
lanbaoming committed
45 46 47 48 49
                <template v-slot="{ row }">
                  <dict-tag
                    :type="DICT_TYPE.WAREHOUSING_SPECIFICATION_TYPE"
                    :value="row.specificationType"
                  ></dict-tag>
lanbaoming's avatar
lanbaoming committed
50 51 52
                </template>
              </el-table-column>
              <el-table-column prop="areaName" :label="$t('包装类型')">
lanbaoming's avatar
lanbaoming committed
53 54 55 56 57
                <template v-slot="{ row }">
                  <dict-tag
                    :type="DICT_TYPE.ECW_PACKAGING_TYPE"
                    :value="row.unit"
                  ></dict-tag>
lanbaoming's avatar
lanbaoming committed
58 59
                </template>
              </el-table-column>
lanbaoming's avatar
lanbaoming committed
60 61 62 63 64 65 66 67
              <el-table-column
                prop="areaName"
                :label="$t('长') + '(cm)'"
                width="70px"
              >
                <template v-slot="{ row }">{{
                  row.boxGauge.split("*")[0]
                }}</template>
lanbaoming's avatar
lanbaoming committed
68
              </el-table-column>
lanbaoming's avatar
lanbaoming committed
69 70 71 72 73 74 75 76
              <el-table-column
                prop="areaName"
                :label="$t('宽') + '(cm)'"
                width="70px"
              >
                <template v-slot="{ row }">{{
                  row.boxGauge.split("*")[1]
                }}</template>
lanbaoming's avatar
lanbaoming committed
77
              </el-table-column>
lanbaoming's avatar
lanbaoming committed
78 79 80 81 82 83 84 85
              <el-table-column
                prop="areaName"
                :label="$t('高') + '(cm)'"
                width="70px"
              >
                <template v-slot="{ row }">{{
                  row.boxGauge.split("*")[2]
                }}</template>
lanbaoming's avatar
lanbaoming committed
86
              </el-table-column>
lanbaoming's avatar
lanbaoming committed
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
              <el-table-column
                prop="volume"
                :label="$t('体积') + '(m³)'"
              ></el-table-column>
              <el-table-column
                prop="weight"
                :label="$t('重量') + '(kg)'"
              ></el-table-column>
              <el-table-column
                prop="quantityAll"
                :label="$t('数量') + '(个)'"
              ></el-table-column>
              <el-table-column
                prop="expressNo"
                :label="$t('快递单号')"
              ></el-table-column>
lanbaoming's avatar
lanbaoming committed
103
              <el-table-column prop="createTime" :label="$t('首次入仓时间')">
lanbaoming's avatar
lanbaoming committed
104 105 106
                <template v-slot="{ row }">{{
                  parseTime(row.inTime)
                }}</template>
lanbaoming's avatar
lanbaoming committed
107 108
              </el-table-column>
              <el-table-column prop="areaName" :label="$t('储位')">
lanbaoming's avatar
lanbaoming committed
109 110
                <template v-slot="{ row }">
                  {{ row.orderLocationStr4Merge }}
lanbaoming's avatar
lanbaoming committed
111 112 113
                </template>
              </el-table-column>
              <el-table-column prop="areaName" :label="$t('影像')">
lanbaoming's avatar
lanbaoming committed
114 115 116 117
                <template v-slot="{ row }">
                  <el-button type="text" @click="showMedia(props.row)">{{
                    $t("查看")
                  }}</el-button>
lanbaoming's avatar
lanbaoming committed
118 119
                </template>
              </el-table-column>
lanbaoming's avatar
lanbaoming committed
120
              <!--添加箱明细 lanbm 2024-06-21 -->
lanbaoming's avatar
lanbaoming committed
121
              <el-table-column prop="areaName" width="220px">
lanbaoming's avatar
lanbaoming committed
122
                <template v-slot="{ row }">
lanbaoming's avatar
lanbaoming committed
123
                  <WarehouseRecordDetail
lanbaoming's avatar
lanbaoming committed
124 125 126 127 128 129
                    v-model="row.orderWarehouseInDetailsVOList"
                    @input="saveDetail(props.row, row.id)"
                    show-choose-order-item
                    :order-id="orderId"
                    :warehouse-in-id="row.id"
                    @close="clearAppendExpressNoAndPictures"
lanbaoming's avatar
lanbaoming committed
130
                  />
lanbaoming's avatar
lanbaoming committed
131 132 133 134 135 136 137 138 139 140 141 142 143 144
                  <el-button
                    class="pl-5 pr-5"
                    size="mini"
                    type="primary"
                    @click="package(props.row, $t('修改打包'))"
                    >{{ $t("修改") }}</el-button
                  >
                  <el-button
                    class="pl-5 pr-5"
                    size="mini"
                    type="danger"
                    @click="package(props.row, $t('修改打包'))"
                    >{{ $t("删除") }}</el-button
                  >
lanbaoming's avatar
lanbaoming committed
145 146 147 148 149 150 151
                </template>
              </el-table-column>
            </el-table>
          </div>
        </template>
      </el-table-column>

lanbaoming's avatar
lanbaoming committed
152
      <el-table-column type="index" width="50" :label="$t('序号')">
lanbaoming's avatar
lanbaoming committed
153
      </el-table-column>
lanbaoming's avatar
lanbaoming committed
154 155 156
      <el-table-column prop="prodTitleZh" :label="$t('品名')">
        <template v-slot="{ row }">
          {{ row.prodTitleZh }}<br />
lanbaoming's avatar
lanbaoming committed
157 158 159
          {{ row.prodTitleEn }}
        </template>
      </el-table-column>
lanbaoming's avatar
lanbaoming committed
160 161 162
      <el-table-column :label="$t('填单货物属性')">
        <template v-slot="{ row }">
          <span v-if="row.isWarehouseInAdd">{{ $t("非填单货物信息") }}</span>
lanbaoming's avatar
lanbaoming committed
163
          <template v-else>
lanbaoming's avatar
lanbaoming committed
164 165 166 167 168 169
            {{ $t("品牌") }}{{
              [$t("无牌"), $t("有牌"), $t("中性")][row.brandType]
            }}<br />
            {{ $t("箱数") }}{{ row.num }}<br />
            {{ $t("体积") }}{{ row.volume }}<br />
            {{ $t("重量") }}{{ row.weight }}Kg
lanbaoming's avatar
lanbaoming committed
170 171 172
          </template>
        </template>
      </el-table-column>
lanbaoming's avatar
lanbaoming committed
173 174
      <el-table-column :label="$t('入库货物属性')">
        <template v-slot="{ row }">
lanbaoming's avatar
lanbaoming committed
175
          <template v-if="row.warehouseInInfoVO">
lanbaoming's avatar
lanbaoming committed
176 177 178 179
            {{ $t("品牌") }}{{ row.brandName }}<br />
            {{ $t("箱数") }}{{ row.warehouseInInfoVO.cartonsNum }}<br />
            {{ $t("体积") }}{{ row.warehouseInInfoVO.volume }}<br />
            {{ $t("重量") }}{{ row.warehouseInInfoVO.weight }}Kg
lanbaoming's avatar
lanbaoming committed
180
          </template>
lanbaoming's avatar
lanbaoming committed
181
          <span v-else>{{ $t("暂无入仓信息") }}</span>
lanbaoming's avatar
lanbaoming committed
182 183 184 185
        </template>
      </el-table-column>
      <el-table-column
        prop="expressNo"
lanbaoming's avatar
lanbaoming committed
186 187 188 189 190 191 192
        v-slot="{ row }"
        :label="$t('快递单号')"
      >
        {{
          row.expressNo ||
          (row.warehouseInInfoVO ? row.warehouseInInfoVO.expressNo : "")
        }}
lanbaoming's avatar
lanbaoming committed
193
      </el-table-column>
lanbaoming's avatar
lanbaoming committed
194
      <el-table-column v-slot="{ row }" :label="$t('商品特性')">
lanbaoming's avatar
lanbaoming committed
195
        <template v-if="row.prodAttrIds">
lanbaoming's avatar
lanbaoming committed
196
          {{ showAttr(row.prodAttrIds) }}
lanbaoming's avatar
lanbaoming committed
197 198 199
        </template>
      </el-table-column>

lanbaoming's avatar
lanbaoming committed
200 201
      <el-table-column prop="createTime" :label="$t('最后操作时间')">
        <template v-slot="{ row }">
lanbaoming's avatar
lanbaoming committed
202 203 204
          {{ parseTime(row.updateTime) }}
        </template>
      </el-table-column>
lanbaoming's avatar
lanbaoming committed
205
      <el-table-column prop="diffType" v-slot="{ row }" :label="$t('状态')">
lanbaoming's avatar
lanbaoming committed
206 207 208 209 210
        <dict-tag
          v-if="row.warehouseInInfoVO && row.warehouseInInfoVO.diffType"
          :type="DICT_TYPE.ORDER_WAREHOUSE_IN_STATUS"
          :value="row.warehouseInInfoVO.diffType"
          class="red"
lanbaoming's avatar
lanbaoming committed
211
          :class="{ green: row.warehouseInInfoVO.diffType === 4 }"
lanbaoming's avatar
lanbaoming committed
212
        />
lanbaoming's avatar
lanbaoming committed
213 214 215 216 217 218 219 220
        <span :class="{ red: row.itemStatus === 3 }" v-else>{{
          row.itemStatus === 3 ? $t("少了") + row.num + $t("箱") : $t("待入仓")
        }}</span>
        <span
          class="red"
          v-if="row.warehouseInInfoVO && row.warehouseInInfoVO.cartonsNumDiff"
          >{{ row.warehouseInInfoVO.cartonsNumDiff }}{{ $t("箱") }}</span
        >
lanbaoming's avatar
lanbaoming committed
221
      </el-table-column>
lanbaoming's avatar
lanbaoming committed
222 223 224 225 226 227
      <el-table-column prop="createTime" :label="$t('打包状态')" width="100">
        <template v-slot="{ row }">
          <dict-tag
            :type="DICT_TYPE.ORDER_ITEM_PACK_STATUS"
            :value="wareItemPackStatus(row.orderItemId)"
          />
lanbaoming's avatar
lanbaoming committed
228 229
        </template>
      </el-table-column>
lanbaoming's avatar
lanbaoming committed
230
      <el-table-column prop="address" :label="$t('操作')" width="250">
lanbaoming's avatar
lanbaoming committed
231 232 233 234
        <template v-slot="{ row, column, $index }">
          <!--没有入仓记录的不显示打包按钮 https://zentao.test.jdshangmen.com/bug-view-5389.html-->
          <el-button-group v-if="orderWarehouseInList(row.orderItemId).length">
            <template v-if="wareItemPackStatus(row.orderItemId) == 1">
lanbaoming's avatar
lanbaoming committed
235 236 237 238 239 240 241 242 243 244 245 246 247
              <el-button
                class="pl-5 pr-5"
                size="mini"
                type="warning"
                @click="noNeedPack(row)"
                >{{ $t("无需打包") }}</el-button
              >
              <el-button
                size="mini"
                type="primary"
                @click="package(row, $t('打包'))"
                >{{ $t("打包") }}</el-button
              >
lanbaoming's avatar
lanbaoming committed
248 249
            </template>

lanbaoming's avatar
lanbaoming committed
250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265
            <el-button
              class="pl-5 pr-5"
              v-else
              size="mini"
              type="primary"
              @click="package(row, $t('修改打包'))"
              >{{ $t("修改打包") }}</el-button
            >
            <el-tooltip
              :content="$t('请确认货物打包完成再并箱')"
              :value="true"
              manual
            >
              <el-button size="mini" type="danger" @click="rollback(row)">{{
                $t("并箱")
              }}</el-button>
lanbaoming's avatar
lanbaoming committed
266
            </el-tooltip>
lanbaoming's avatar
lanbaoming committed
267 268 269 270 271 272 273
            <el-button
              class="pl-5 pr-5"
              size="mini"
              type="info"
              @click="printTag"
              >{{ $t("打印标签") }}</el-button
            >
lanbaoming's avatar
lanbaoming committed
274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293
          </el-button-group>
        </template>
      </el-table-column>
    </el-table>

    <!--<h2 v-if="orderSpecialNeeds.length > 0">{{$t('特殊需求')}}</h2>-->
    <el-form ref="form" :model="form" label-width="200px">
      <!--<el-form-item :label="$i18n.locale === 'en_US' ? item.labelEn : item.label" v-for="(item, index) in orderSpecialNeeds" :key="item.value" style="width: 600px">
        <el-input v-model="form.orderSpecialNeedReceivableReqVoList[index].receivableMoney" :placeholder="$t('请输入') + ($i18n.locale === 'en_US' ? item.labelEn : item.label)">
          <el-select v-model="form.orderSpecialNeedReceivableReqVoList[index].receivableMoneyCurrency" :placeholder="$t('请选择')" slot="append" style="width: 100px">
            <el-option
              v-for="item in currencyList"
              :key="item.id"
              :label="$i18n.locale === 'en_US' ? item.titleEn : item.titleZh"
              :value="item.id">
            </el-option>
          </el-select>
        </el-input>
      </el-form-item>-->

lanbaoming's avatar
lanbaoming committed
294
      <h2>{{ $t("订单数据") }}</h2>
lanbaoming's avatar
lanbaoming committed
295
      <el-form-item :label="$t('下单统计')" class="mb-0">
lanbaoming's avatar
lanbaoming committed
296 297 298 299 300 301 302 303
        {{
          $t(`{num}箱 {weight}Kg {volume}m³ {quantity}个`, {
            num: statistics.sumNumInput,
            weight: statistics.sumWeightInput,
            volume: statistics.sumVolumeInput,
            quantity: statistics.sumQuantityInput,
          })
        }}
lanbaoming's avatar
lanbaoming committed
304
      </el-form-item>
lanbaoming's avatar
lanbaoming committed
305
      <!--lanbm 2024-06-21 处理问题
lanbaoming's avatar
lanbaoming committed
306
      <el-form-item :label="$t('入仓统计')" class="mb-0">
lanbaoming's avatar
lanbaoming committed
307 308
        {{
          $t(`{num}箱 {weight}Kg {volume}m³ {quantity}个`, {
lanbaoming's avatar
lanbaoming committed
309 310 311 312 313 314 315 316 317 318 319 320 321 322
            num:statistics.sumCartonsNumFinishedWarehouseIn,
            weight:statistics.sumWeightFinishedWarehouseIn,
            volume:statistics.sumVolumeFinishedWarehouseIn,
            quantity:statistics.sumQuantityAllFinishedWarehouseIn,
          })
        }}
      </el-form-item>-->
      <el-form-item :label="$t('入仓统计')" class="mb-0">
        {{
          $t(`{num}箱 {weight}Kg {volume}m³ {quantity}个`, {
            num:form.sumNum,
            weight:form.sumWeight,
            volume:form.sumVolume,
            quantity:form.sumQuantity,
lanbaoming's avatar
lanbaoming committed
323 324
          })
        }}
lanbaoming's avatar
lanbaoming committed
325 326
      </el-form-item>
      <el-form-item :label="$t('打包前统计')" class="mb-0">
lanbaoming's avatar
lanbaoming committed
327 328 329 330 331 332 333 334
        {{
          $t(`{num}箱 {weight}Kg {volume}m³ {quantity}个`, {
            num: statistics.sumCartonsNumPrevPacked,
            weight: statistics.sumWeightPrevPacked,
            volume: statistics.sumVolumePrevPacked,
            quantity: statistics.sumQuantityAllPrevPacked,
          })
        }}
lanbaoming's avatar
lanbaoming committed
335 336
      </el-form-item>
      <el-form-item :label="$t('打包后统计')" class="mb-0">
lanbaoming's avatar
lanbaoming committed
337 338 339 340 341 342 343 344
        {{
          $t(`{num}箱 {weight}Kg {volume}m³ {quantity}个`, {
            num: statistics.sumNum,
            weight: statistics.sumWeight,
            volume: statistics.sumVolume,
            quantity: statistics.sumQuantity,
          })
        }}
lanbaoming's avatar
lanbaoming committed
345 346
      </el-form-item>

lanbaoming's avatar
lanbaoming committed
347
      <el-card style="margin-top: 15px">
lanbaoming's avatar
lanbaoming committed
348
        <div slot="header" class="clearfix">
lanbaoming's avatar
lanbaoming committed
349
          <span style="font-size: 18px">{{ $t("入仓影像") }}</span>
lanbaoming's avatar
lanbaoming committed
350 351
        </div>
        <div>
lanbaoming's avatar
lanbaoming committed
352 353 354 355 356 357
          <image-and-video-upload
            :fileSize="50"
            :isShowTip="true"
            v-model="pictureUrls"
            readonly
          ></image-and-video-upload>
lanbaoming's avatar
lanbaoming committed
358 359
        </div>
      </el-card>
lanbaoming's avatar
lanbaoming committed
360 361 362 363 364 365 366 367 368 369
      <div style="text-align: center; margin-top: 15px">
        <el-button @click="escapeBol = true" type="primary">{{
          $t("转异")
        }}</el-button>
        <el-button type="primary" @click="handleSubmit">{{
          $t("完成备货")
        }}</el-button>
        <el-button type="info" @click="printTag">{{
          $t("打印标签")
        }}</el-button>
lanbaoming's avatar
lanbaoming committed
370 371 372
      </div>
    </el-form>

lanbaoming's avatar
lanbaoming committed
373 374 375 376 377 378 379 380 381 382 383 384
    <el-dialog
      :title="order.orderNo + $t('订单转异')"
      center
      :visible.sync="escapeBol"
    >
      <el-form
        label-position="top"
        label-width="200"
        ref="exceptionForm"
        :model="form"
        :rules="exceptionRules"
      >
lanbaoming's avatar
lanbaoming committed
385
        <el-form-item :label="$t('异常类型')" prop="manualExceptionType">
lanbaoming's avatar
lanbaoming committed
386 387 388 389 390 391
          <dict-selector
            v-model="form.manualExceptionType"
            form-type="checkbox"
            :type="DICT_TYPE.STOCK_UP_EXCEPTION_TYPE"
            multiple
          ></dict-selector>
lanbaoming's avatar
lanbaoming committed
392 393 394
        </el-form-item>
        <el-form-item :label="$t('附件')">
          <!--<image-upload v-model="form.exceptionUrls"></image-upload>-->
lanbaoming's avatar
lanbaoming committed
395 396 397 398 399
          <image-and-video-upload
            :fileSize="50"
            :isShowTip="true"
            v-model="form.exceptionUrls"
          ></image-and-video-upload>
lanbaoming's avatar
lanbaoming committed
400 401 402 403 404 405
        </el-form-item>
        <el-form-item :label="$t('详细信息')">
          <el-input v-model="form.descZh" type="textarea"></el-input>
        </el-form-item>
      </el-form>
      <span slot="footer" class="dialog-footer">
lanbaoming's avatar
lanbaoming committed
406 407 408 409
        <el-button type="primary" @click="handleException">{{
          $t("确认并完成打包")
        }}</el-button>
        <el-button @click="escapeBol = false">{{ $t("取消") }}</el-button>
lanbaoming's avatar
lanbaoming committed
410 411 412
      </span>
    </el-dialog>

lanbaoming's avatar
lanbaoming committed
413 414 415 416 417
    <print-tag
      v-if="isShowPrintTag"
      :order-id="orderId"
      @close="isShowPrintTag = false"
    ></print-tag>
lanbaoming's avatar
lanbaoming committed
418 419 420 421 422 423 424 425
    <package
      :order="order"
      :order-item-a="packageOrderItem"
      :order-item-b="packageWarehouseItem"
      :title="packageTitle"
      v-if="!!packageOrderItem"
      @close="onPackageClose"
    ></package>
lanbaoming's avatar
lanbaoming committed
426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442
    
    <new-product
      :order="order"
      v-if="showNewProductDialog"
      @close="onPackageClose"
    ></new-product>
    <media-dialog
      v-if="curPictrues"
      :value="curPictrues"
      @close="curPictrues = null"
    ></media-dialog>
    <print-tag
      v-if="showPrintTagDialog"
      :order-id="orderId"
      @close="showPrintTagDialog = false"
      :warehouse-in-num="order.sumNum"
    />
lanbaoming's avatar
lanbaoming committed
443 444 445 446
  </div>
</template>

<script>
lanbaoming's avatar
lanbaoming committed
447
import { getCurrencyList } from "@/api/ecw/currency";
lanbaoming's avatar
lanbaoming committed
448 449 450 451 452 453
import {
  finishPacked,
  finishStock,
  getOrder,
  getOrderWarehouseIn,
  getSpecialListByOrderId,
lanbaoming's avatar
lanbaoming committed
454 455
  noNeedPack,
  rollbackDelete,
lanbaoming's avatar
lanbaoming committed
456
  warehousePictureList,
lanbaoming's avatar
lanbaoming committed
457 458 459 460 461 462 463
  getPackStatistics,
} from "@/api/ecw/order";
import orderBaseInfo from "@/components/OrderBaseInfo";
import WarehouseAreaDialog from "@/components/WarehouseAreaDialog";
import { DICT_TYPE } from "@/utils/dict";
import PrintTag from "@/views/ecw/order/components/PrintTag";
import PrintWarehouseReceipt from "@/views/ecw/order/components/PrintWarehouseReceipt";
lanbaoming's avatar
lanbaoming committed
464
import imageUpload from "@/components/ImageUpload";
lanbaoming's avatar
lanbaoming committed
465 466 467
import { parseTime } from "@/utils/ruoyi";
import ImageAndVideoUpload from "@/components/ImageAndVideoUpload";
import Package from "./components/Package";
lanbaoming's avatar
lanbaoming committed
468
import Template from "@/views/cms/template/index.vue";
lanbaoming's avatar
lanbaoming committed
469
import { getProductAttrList } from "@/api/ecw/productAttr";
lanbaoming's avatar
lanbaoming committed
470 471
import MediaDialog from "@/views/ecw/order/stocking/components/MediaDialog.vue";
import WarehouseRecordDetail from "@/views/ecw/order/warehousing/components/WarehouseRecordDetail.vue";
lanbaoming's avatar
lanbaoming committed
472
import { formatTime } from "../../../../utils";
lanbaoming's avatar
lanbaoming committed
473 474 475 476 477 478 479 480 481 482 483 484 485 486

export default {
  name: "Stocking",
  components: {
    WarehouseRecordDetail,
    MediaDialog,
    Template,
    orderBaseInfo,
    WarehouseAreaDialog,
    PrintTag,
    PrintWarehouseReceipt,
    imageUpload,
    ImageAndVideoUpload,
    Package,
lanbaoming's avatar
lanbaoming committed
487 488
    NewProduct: () =>
      import("@/views/ecw/order/stocking/components/NewProduct.vue"),
lanbaoming's avatar
lanbaoming committed
489 490 491
  },

  mounted() {
lanbaoming's avatar
lanbaoming committed
492 493
    if (this.$route.query.id) {
      this.orderId = parseInt(this.$route.query.id || undefined);
lanbaoming's avatar
lanbaoming committed
494

lanbaoming's avatar
lanbaoming committed
495 496 497 498
      getSpecialListByOrderId(this.orderId).then(
        (r) => (this.specialList = r.data)
      );
      this.getList();
lanbaoming's avatar
lanbaoming committed
499
    }
lanbaoming's avatar
lanbaoming committed
500 501
    getCurrencyList().then((res) => (this.currencyList = res.data));
    getProductAttrList().then((res) => (this.productAttrList = res.data));
lanbaoming's avatar
lanbaoming committed
502 503 504 505 506 507 508 509 510 511
  },

  data() {
    return {
      parseTime,
      DICT_TYPE,
      areaVisible: false,
      finishVisible: false,
      warehousingVisible: false,
      form: {
lanbaoming's avatar
lanbaoming committed
512 513 514 515 516
        exceptionUrls: [],
        descZh: "",
        manualExceptionType: [],
        sumVolume: "",
        sumWeight: "",
lanbaoming's avatar
lanbaoming committed
517 518
        sumNum:"",//入仓件数 lanbm 2024-06-21 add
        sumQuantity:"",//入仓数量
lanbaoming's avatar
lanbaoming committed
519
      },
lanbaoming's avatar
lanbaoming committed
520
      currencyList: [],
lanbaoming's avatar
lanbaoming committed
521 522 523 524 525 526 527
      order: {},
      orderId: undefined,
      orderItemList: [],
      specialList: [],
      warehousing: undefined,
      isShowPrintTag: false,
      isShowPrint: false,
lanbaoming's avatar
lanbaoming committed
528
      escapeBol: false,
lanbaoming's avatar
lanbaoming committed
529 530

      label: {
lanbaoming's avatar
lanbaoming committed
531 532
        orderId: 0,
        orderLabelDtoList: [
lanbaoming's avatar
lanbaoming committed
533
          {
lanbaoming's avatar
lanbaoming committed
534 535 536 537
            end: 0,
            start: 0,
          },
        ],
lanbaoming's avatar
lanbaoming committed
538 539 540
      },
      exceptionRules: {
        manualExceptionType: [
lanbaoming's avatar
lanbaoming committed
541
          { required: true, message: "请勾选原因类型", trigger: "change" },
lanbaoming's avatar
lanbaoming committed
542 543 544
          {
            validator: (rule, value, callback) => {
              if (value.length <= 0) {
lanbaoming's avatar
lanbaoming committed
545
                callback(new Error("请勾选原因类型"));
lanbaoming's avatar
lanbaoming committed
546
              }
lanbaoming's avatar
lanbaoming committed
547 548 549 550 551
              callback();
            },
            trigger: "change",
          },
        ],
lanbaoming's avatar
lanbaoming committed
552 553 554 555 556 557 558 559 560 561 562 563 564 565 566
      },
      // 打包弹层的标题
      packageTitle: null,
      // 当前打包的订单商品项
      packageOrderItem: null,
      // 打包商品的入仓商品项
      packageWarehouseItem: null,
      productAttrList: [],
      // 当前查看的影像
      curPictrues: null,
      // 是否显示添加新品弹窗
      showNewProductDialog: false,
      // 是否显示打印标签弹层
      showPrintTagDialog: false,
      // 统计数据
lanbaoming's avatar
lanbaoming committed
567 568
      statistics: {},
    };
lanbaoming's avatar
lanbaoming committed
569 570 571 572 573
  },

  methods: {
    formatTime,
    getStatistics() {
lanbaoming's avatar
lanbaoming committed
574 575 576 577
      console.log("获取统计数据");
      getPackStatistics(this.orderId).then((res) => {
        this.statistics = res.data;
      });
lanbaoming's avatar
lanbaoming committed
578
    },
lanbaoming's avatar
lanbaoming committed
579 580 581 582 583
    getOrderItemList() {
      this.orderItemList = [];
      return getOrderWarehouseIn(this.orderId).then(
        (r) => (this.orderItemList = r.data)
      );
lanbaoming's avatar
lanbaoming committed
584
    },
lanbaoming's avatar
lanbaoming committed
585 586 587 588
    getList() {
      this.getOrder();
      this.getOrderItemList();
      this.getStatistics();
lanbaoming's avatar
lanbaoming committed
589
    },
lanbaoming's avatar
lanbaoming committed
590
    getWarehousePictureList() {
lanbaoming's avatar
lanbaoming committed
591 592
      return warehousePictureList({
        bizId: this.order.orderId,
lanbaoming's avatar
lanbaoming committed
593 594 595 596
        type: 1,
      }).then((r) => {
        this.form.urls = r.data.map((i) => i.url);
      });
lanbaoming's avatar
lanbaoming committed
597
    },
lanbaoming's avatar
lanbaoming committed
598
    include() {
lanbaoming's avatar
lanbaoming committed
599
      return (state, arr) => {
lanbaoming's avatar
lanbaoming committed
600 601
        return arr.indexOf(state) > -1;
      };
lanbaoming's avatar
lanbaoming committed
602
    },
lanbaoming's avatar
lanbaoming committed
603
    exclude() {
lanbaoming's avatar
lanbaoming committed
604
      return (state, arr) => {
lanbaoming's avatar
lanbaoming committed
605 606
        return arr.indexOf(state) == -1;
      };
lanbaoming's avatar
lanbaoming committed
607
    },
lanbaoming's avatar
lanbaoming committed
608 609 610 611 612 613 614 615
    getOrder() {
      return getOrder(this.orderId)
        .then((r) => {
          // 获取渠道可出特性文案用户订单基础信息显示
          r.data.channelAttrName = this.showAttr(r.data.channelAttrId);
          this.order = r.data;
          this.form.sumVolume = this.order.sumVolume;
          this.form.sumWeight = this.order.sumWeight;
lanbaoming's avatar
lanbaoming committed
616 617
          this.form.sumNum=this.order.sumNum;
          this.form.sumQuantity=this.order.sumQuantity;
lanbaoming's avatar
lanbaoming committed
618 619 620 621 622
        })
        .then(() => {
          // this.getLabelByOrder()
          this.getWarehousePictureList();
        });
lanbaoming's avatar
lanbaoming committed
623 624 625 626 627
    },
    // 提交转异
    handleException() {
      this.$refs.exceptionForm.validate((valid) => {
        if (valid) {
lanbaoming's avatar
lanbaoming committed
628
          this.handleSubmit();
lanbaoming's avatar
lanbaoming committed
629
        } else {
lanbaoming's avatar
lanbaoming committed
630
          this.$message.warning("请勾选原因类型");
lanbaoming's avatar
lanbaoming committed
631
        }
lanbaoming's avatar
lanbaoming committed
632
      });
lanbaoming's avatar
lanbaoming committed
633 634 635
    },
    // 完成备货
    async handleSubmit() {
lanbaoming's avatar
lanbaoming committed
636 637
      let unpackProds = [];
      this.orderItemList.forEach((item) => {
lanbaoming's avatar
lanbaoming committed
638
        // 有入仓记录且未打包
lanbaoming's avatar
lanbaoming committed
639 640 641 642 643
        if (
          item.orderWarehouseInBackItemDoList.length &&
          item.packStatus == 1
        ) {
          unpackProds.push(this.$l(item, "prodTitle"));
lanbaoming's avatar
lanbaoming committed
644
        }
lanbaoming's avatar
lanbaoming committed
645 646 647 648 649 650
      });
      if (unpackProds.length) {
        return this.$alert(
          `商品${unpackProds.join(",")}未完成打包,无法完成备货`,
          this.$t("提示")
        );
lanbaoming's avatar
lanbaoming committed
651 652
      }

lanbaoming's avatar
lanbaoming committed
653 654 655 656 657 658 659 660
      let form = { ...this.form };
      form.orderId = this.orderId;
      form.manualExceptionType = form.manualExceptionType.join(",");
      finishStock(form)
        .then((res) => {
          return this.$confirm("备货成功,是否需要打印标签").catch(() => {
            this.$tab.closePage();
          });
lanbaoming's avatar
lanbaoming committed
661
        })
lanbaoming's avatar
lanbaoming committed
662 663 664
        .then(() => {
          this.printTag();
        });
lanbaoming's avatar
lanbaoming committed
665 666
    },
    // 显示打包弹层
lanbaoming's avatar
lanbaoming committed
667 668 669 670 671 672
    package(row, title = null) {
      this.packageOrderItem = row;
      this.packageWarehouseItem = this.orderItemList.find(
        (item) => item.orderItemId === row.orderItemId
      );
      this.packageTitle = title || this.$t("打包");
lanbaoming's avatar
lanbaoming committed
673 674
    },
    // 无需打包
lanbaoming's avatar
lanbaoming committed
675 676 677 678 679
    noNeedPack(row) {
      noNeedPack(row.orderItemId).then((res) => {
        this.$message.success(this.$t("操作成功"));
        this.getList();
      });
lanbaoming's avatar
lanbaoming committed
680
    },
lanbaoming's avatar
lanbaoming committed
681 682 683 684 685
    onPackageClose() {
      this.packageOrderItem = null;
      this.packageOrderItem = null;
      this.showNewProductDialog = false;
      this.getList();
lanbaoming's avatar
lanbaoming committed
686
    },
lanbaoming's avatar
lanbaoming committed
687 688 689 690 691
    showMedia(orderItem) {
      console.log("查看影像", orderItem);
      const wareItem = this.wareItem(orderItem.orderItemId);
      if (!wareItem.pictureUrls) {
        return this.$message.info(this.$t("暂无影像"));
lanbaoming's avatar
lanbaoming committed
692
      }
lanbaoming's avatar
lanbaoming committed
693
      this.curPictrues = wareItem.pictureUrls || [];
lanbaoming's avatar
lanbaoming committed
694 695
    },
    // 保存箱明细
lanbaoming's avatar
lanbaoming committed
696 697 698 699 700 701 702 703 704 705 706 707 708
    saveDetail(row, warehouseInId) {
      //lanbm 2024-06-15 添加注释
      //alert(warehouseInId);
      const wareItem = this.wareItem(row.orderItemId);
      const orderWarehouseInItemDtoList =
        wareItem.orderWarehouseInBackItemDoList;
      orderWarehouseInItemDtoList.map((item) => {
        item.orderLocationCreateReqVOList = item.orderLocationBackVOList || [];
        return item;
      });
      let pictures = wareItem.pictureUrls || [];
      if (window.ChooseOrderProductsPictureUrls?.length) {
        pictures.push(...window.ChooseOrderProductsPictureUrls);
lanbaoming's avatar
lanbaoming committed
709
        // 去重
lanbaoming's avatar
lanbaoming committed
710
        pictures = Array.from(new Set(pictures));
lanbaoming's avatar
lanbaoming committed
711
      }
lanbaoming's avatar
lanbaoming committed
712 713 714 715 716 717 718 719 720 721
      if (window.ChooseOrderProductsExpressNos?.length) {
        const warehouseInItem = orderWarehouseInItemDtoList.find(
          (item) => item.id === warehouseInId
        );
        if (!warehouseInItem.expressNo) warehouseInItem.expressNo = "";
        window.ChooseOrderProductsExpressNos?.forEach((item) => {
          if (warehouseInItem.expressNo.indexOf(item) === -1) {
            if (warehouseInItem.expressNo?.length)
              warehouseInItem.expressNo += ",";
            warehouseInItem.expressNo += item;
lanbaoming's avatar
lanbaoming committed
722
          }
lanbaoming's avatar
lanbaoming committed
723
        });
lanbaoming's avatar
lanbaoming committed
724 725 726 727 728 729
      }

      const data = {
        orderId: row.orderId,
        orderItemId: row.orderItemId,
        orderWarehouseInItemDtoList: orderWarehouseInItemDtoList,
lanbaoming's avatar
lanbaoming committed
730 731 732 733 734 735 736
        pictureUrls: pictures,
      };
      finishPacked(data).then((res) => {
        //lanbm 2024-06-15 调用列表加载函数
        this.getList();
        this.$message.success(this.$t("操作成功"));
      });
lanbaoming's avatar
lanbaoming committed
737 738
    },
    // 并箱
lanbaoming's avatar
lanbaoming committed
739 740 741 742 743 744 745 746 747 748 749 750
    async rollback(orderItem) {
      this.$confirm(
        this.$l(orderItem, "prodTitle") +
          this.$t("并箱后不可恢复,是否确认并箱?"),
        this.$t("提示")
      )
        .then(() => {
          return rollbackDelete({
            orderId: this.orderId,
            orderItemId: orderItem.orderItemId,
            isPackagingRollback: true,
          });
lanbaoming's avatar
lanbaoming committed
751
        })
lanbaoming's avatar
lanbaoming committed
752 753 754 755
        .then((res) => {
          this.$message.success(this.$t("操作成功"));
          this.getList();
        });
lanbaoming's avatar
lanbaoming committed
756
    },
lanbaoming's avatar
lanbaoming committed
757 758
    printTag() {
      this.showPrintTagDialog = true;
lanbaoming's avatar
lanbaoming committed
759 760
    },
    // 箱明细关闭后清理快递单号和影像临时数据
lanbaoming's avatar
lanbaoming committed
761
    clearAppendExpressNoAndPictures() {
lanbaoming's avatar
lanbaoming committed
762
      setTimeout(() => {
lanbaoming's avatar
lanbaoming committed
763 764 765 766
        window.ChooseOrderProductsExpressNos = null;
        window.ChooseOrderProductsPictureUrls = null;
      }, 100);
    },
lanbaoming's avatar
lanbaoming committed
767 768 769 770 771 772 773 774 775 776 777 778 779 780 781
  },
  watch: {
    /*orderSpecialNeeds(val){
      val.forEach(e => {
        this.form.orderSpecialNeedReceivableReqVoList.push({
          "id": e.id,
          "receivableMoney": e.transFee || '',
          "receivableMoneyCurrency": e.transCurrency || 3
        })
      })
    }*/
  },

  computed: {
    // 根据orderItemId获取入仓item
lanbaoming's avatar
lanbaoming committed
782 783 784 785 786 787
    wareItem() {
      return (orderItemId) => {
        return this.orderItemList.find(
          (item) => item.orderItemId == orderItemId
        );
      };
lanbaoming's avatar
lanbaoming committed
788 789
    },
    // 根据orderItemId获取入仓记录
lanbaoming's avatar
lanbaoming committed
790
    orderWarehouseInList() {
lanbaoming's avatar
lanbaoming committed
791
      return (orderItemId) => {
lanbaoming's avatar
lanbaoming committed
792 793
        return this.wareItem(orderItemId)?.orderWarehouseInBackItemDoList || [];
      };
lanbaoming's avatar
lanbaoming committed
794 795
    },
    // 获取打包状态
lanbaoming's avatar
lanbaoming committed
796 797 798 799
    wareItemPackStatus() {
      return (orderItemId) => {
        return this.wareItem(orderItemId)?.packStatus;
      };
lanbaoming's avatar
lanbaoming committed
800 801
    },
    title() {
lanbaoming's avatar
lanbaoming committed
802 803 804
      return this.$i18n.locale === "en_US"
        ? this.$route.meta.titleEn
        : this.$route.name;
lanbaoming's avatar
lanbaoming committed
805 806
    },
    orderSpecialNeedsDict() {
lanbaoming's avatar
lanbaoming committed
807
      return this.$store.state.dict.dictDatas.order_special_needs;
lanbaoming's avatar
lanbaoming committed
808
    },
lanbaoming's avatar
lanbaoming committed
809 810 811 812 813 814 815 816
    orderSpecialNeeds() {
      const result = [];
      this.specialList.forEach((e) => {
        const t = this.orderSpecialNeedsDict.find(
          (f) => f.value === e.advanceType
        );
        if (t) {
          result.push({ ...e, label: t.label, labelEn: t.labelEn });
lanbaoming's avatar
lanbaoming committed
817
        }
lanbaoming's avatar
lanbaoming committed
818 819
      });
      return result;
lanbaoming's avatar
lanbaoming committed
820
    },
lanbaoming's avatar
lanbaoming committed
821 822
    warehouseId() {
      return this.order?.logisticsInfoDto?.startWarehouseId;
lanbaoming's avatar
lanbaoming committed
823 824
    },
    // 显示特性
lanbaoming's avatar
lanbaoming committed
825 826 827 828 829 830 831 832 833 834 835
    showAttr() {
      return (attrIds) => {
        if (!attrIds) return "";
        let attrArr = attrIds.split(",").map((item) => +item);
        let arr = [];
        this.productAttrList.forEach((item) => {
          if (attrArr.indexOf(item.id) > -1)
            arr.push(this.$l(item, "attrName"));
        });
        return arr.join(",");
      };
lanbaoming's avatar
lanbaoming committed
836 837
    },
    // 全部入仓记录的入仓影像
lanbaoming's avatar
lanbaoming committed
838 839 840 841 842 843 844 845 846 847
    pictureUrls() {
      let urls = [];
      this.orderItemList.forEach((item) => {
        console.log("pictureUrls", item.pictureUrls);
        urls = urls.concat(item.pictureUrls || []);
      });
      return urls;
    },
  },
};
lanbaoming's avatar
lanbaoming committed
848 849 850 851
</script>

<style scoped lang="scss">
@import "src/assets/styles/element-variables";
lanbaoming's avatar
lanbaoming committed
852
.red {
lanbaoming's avatar
lanbaoming committed
853 854
  color: $--color-danger;
}
lanbaoming's avatar
lanbaoming committed
855
.green {
lanbaoming's avatar
lanbaoming committed
856 857 858
  color: $--color-success;
}
</style>