index.vue 27.9 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
            num:statistics.sumCartonsNumFinishedWarehouseIn,
            weight:statistics.sumWeightFinishedWarehouseIn,
            volume:statistics.sumVolumeFinishedWarehouseIn,
            quantity:statistics.sumQuantityAllFinishedWarehouseIn,
          })
        }}
      </el-form-item>-->
      <el-form-item :label="$t('入仓统计')" class="mb-0">
317 318 319 320
        <!---
        应后端要求与24-08-08更改取值字段
        https://czxy.cpolar.cn/task-view-175.html
        -->
lanbaoming's avatar
lanbaoming committed
321 322
        {{
          $t(`{num}箱 {weight}Kg {volume}m³ {quantity}个`, {
323 324 325 326
            num: order.sumCartonsNumFinishedWarehouseIn,
            weight:order.sumWeightFinishedWarehouseIn,
            volume:order.sumVolumeFinishedWarehouseIn,
            quantity:order.sumQuantityAllFinishedWarehouseIn,
lanbaoming's avatar
lanbaoming committed
327 328
          })
        }}
lanbaoming's avatar
lanbaoming committed
329 330
      </el-form-item>
      <el-form-item :label="$t('打包前统计')" class="mb-0">
lanbaoming's avatar
lanbaoming committed
331 332 333 334 335 336 337 338
        {{
          $t(`{num}箱 {weight}Kg {volume}m³ {quantity}个`, {
            num: statistics.sumCartonsNumPrevPacked,
            weight: statistics.sumWeightPrevPacked,
            volume: statistics.sumVolumePrevPacked,
            quantity: statistics.sumQuantityAllPrevPacked,
          })
        }}
lanbaoming's avatar
lanbaoming committed
339 340
      </el-form-item>
      <el-form-item :label="$t('打包后统计')" class="mb-0">
lanbaoming's avatar
lanbaoming committed
341 342 343 344 345 346 347 348
        {{
          $t(`{num}箱 {weight}Kg {volume}m³ {quantity}个`, {
            num: statistics.sumNum,
            weight: statistics.sumWeight,
            volume: statistics.sumVolume,
            quantity: statistics.sumQuantity,
          })
        }}
lanbaoming's avatar
lanbaoming committed
349 350
      </el-form-item>

lanbaoming's avatar
lanbaoming committed
351
      <el-card style="margin-top: 15px">
lanbaoming's avatar
lanbaoming committed
352
        <div slot="header" class="clearfix">
lanbaoming's avatar
lanbaoming committed
353
          <span style="font-size: 18px">{{ $t("入仓影像") }}</span>
lanbaoming's avatar
lanbaoming committed
354 355
        </div>
        <div>
lanbaoming's avatar
lanbaoming committed
356 357 358 359 360 361
          <image-and-video-upload
            :fileSize="50"
            :isShowTip="true"
            v-model="pictureUrls"
            readonly
          ></image-and-video-upload>
lanbaoming's avatar
lanbaoming committed
362 363
        </div>
      </el-card>
lanbaoming's avatar
lanbaoming committed
364 365 366 367 368 369 370 371 372 373
      <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
374 375 376
      </div>
    </el-form>

lanbaoming's avatar
lanbaoming committed
377 378 379 380 381 382 383 384 385 386 387 388
    <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
389
        <el-form-item :label="$t('异常类型')" prop="manualExceptionType">
lanbaoming's avatar
lanbaoming committed
390 391 392 393 394 395
          <dict-selector
            v-model="form.manualExceptionType"
            form-type="checkbox"
            :type="DICT_TYPE.STOCK_UP_EXCEPTION_TYPE"
            multiple
          ></dict-selector>
lanbaoming's avatar
lanbaoming committed
396 397 398
        </el-form-item>
        <el-form-item :label="$t('附件')">
          <!--<image-upload v-model="form.exceptionUrls"></image-upload>-->
lanbaoming's avatar
lanbaoming committed
399 400 401 402 403
          <image-and-video-upload
            :fileSize="50"
            :isShowTip="true"
            v-model="form.exceptionUrls"
          ></image-and-video-upload>
lanbaoming's avatar
lanbaoming committed
404 405 406 407 408 409
        </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
410 411 412 413
        <el-button type="primary" @click="handleException">{{
          $t("确认并完成打包")
        }}</el-button>
        <el-button @click="escapeBol = false">{{ $t("取消") }}</el-button>
lanbaoming's avatar
lanbaoming committed
414 415 416
      </span>
    </el-dialog>

lanbaoming's avatar
lanbaoming committed
417 418 419 420 421
    <print-tag
      v-if="isShowPrintTag"
      :order-id="orderId"
      @close="isShowPrintTag = false"
    ></print-tag>
lanbaoming's avatar
lanbaoming committed
422 423 424 425 426 427 428 429
    <package
      :order="order"
      :order-item-a="packageOrderItem"
      :order-item-b="packageWarehouseItem"
      :title="packageTitle"
      v-if="!!packageOrderItem"
      @close="onPackageClose"
    ></package>
430

lanbaoming's avatar
lanbaoming committed
431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446
    <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
447 448 449 450
  </div>
</template>

<script>
lanbaoming's avatar
lanbaoming committed
451
import { getCurrencyList } from "@/api/ecw/currency";
lanbaoming's avatar
lanbaoming committed
452 453 454 455 456 457
import {
  finishPacked,
  finishStock,
  getOrder,
  getOrderWarehouseIn,
  getSpecialListByOrderId,
lanbaoming's avatar
lanbaoming committed
458 459
  noNeedPack,
  rollbackDelete,
lanbaoming's avatar
lanbaoming committed
460
  warehousePictureList,
lanbaoming's avatar
lanbaoming committed
461 462 463 464 465 466 467
  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
468
import imageUpload from "@/components/ImageUpload";
lanbaoming's avatar
lanbaoming committed
469 470 471
import { parseTime } from "@/utils/ruoyi";
import ImageAndVideoUpload from "@/components/ImageAndVideoUpload";
import Package from "./components/Package";
lanbaoming's avatar
lanbaoming committed
472
import Template from "@/views/cms/template/index.vue";
lanbaoming's avatar
lanbaoming committed
473
import { getProductAttrList } from "@/api/ecw/productAttr";
lanbaoming's avatar
lanbaoming committed
474 475
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
476
import { formatTime } from "../../../../utils";
lanbaoming's avatar
lanbaoming committed
477 478 479 480 481 482 483 484 485 486 487 488 489 490

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

  mounted() {
lanbaoming's avatar
lanbaoming committed
496 497
    if (this.$route.query.id) {
      this.orderId = parseInt(this.$route.query.id || undefined);
lanbaoming's avatar
lanbaoming committed
498

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

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

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

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

lanbaoming's avatar
lanbaoming committed
657 658 659 660 661 662 663 664
      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
665
        })
lanbaoming's avatar
lanbaoming committed
666 667 668
        .then(() => {
          this.printTag();
        });
lanbaoming's avatar
lanbaoming committed
669 670
    },
    // 显示打包弹层
lanbaoming's avatar
lanbaoming committed
671 672 673 674 675 676
    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
677 678
    },
    // 无需打包
lanbaoming's avatar
lanbaoming committed
679 680 681 682 683
    noNeedPack(row) {
      noNeedPack(row.orderItemId).then((res) => {
        this.$message.success(this.$t("操作成功"));
        this.getList();
      });
lanbaoming's avatar
lanbaoming committed
684
    },
lanbaoming's avatar
lanbaoming committed
685 686 687 688 689
    onPackageClose() {
      this.packageOrderItem = null;
      this.packageOrderItem = null;
      this.showNewProductDialog = false;
      this.getList();
lanbaoming's avatar
lanbaoming committed
690
    },
lanbaoming's avatar
lanbaoming committed
691 692 693 694 695
    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
696
      }
lanbaoming's avatar
lanbaoming committed
697
      this.curPictrues = wareItem.pictureUrls || [];
lanbaoming's avatar
lanbaoming committed
698 699
    },
    // 保存箱明细
lanbaoming's avatar
lanbaoming committed
700 701 702 703 704 705 706 707 708 709 710 711 712
    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
713
        // 去重
lanbaoming's avatar
lanbaoming committed
714
        pictures = Array.from(new Set(pictures));
lanbaoming's avatar
lanbaoming committed
715
      }
lanbaoming's avatar
lanbaoming committed
716 717 718 719 720 721 722 723 724 725
      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
726
          }
lanbaoming's avatar
lanbaoming committed
727
        });
lanbaoming's avatar
lanbaoming committed
728 729 730 731 732 733
      }

      const data = {
        orderId: row.orderId,
        orderItemId: row.orderItemId,
        orderWarehouseInItemDtoList: orderWarehouseInItemDtoList,
lanbaoming's avatar
lanbaoming committed
734 735 736 737 738 739 740
        pictureUrls: pictures,
      };
      finishPacked(data).then((res) => {
        //lanbm 2024-06-15 调用列表加载函数
        this.getList();
        this.$message.success(this.$t("操作成功"));
      });
lanbaoming's avatar
lanbaoming committed
741 742
    },
    // 并箱
lanbaoming's avatar
lanbaoming committed
743 744 745 746 747 748 749 750 751 752 753 754
    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
755
        })
lanbaoming's avatar
lanbaoming committed
756 757 758 759
        .then((res) => {
          this.$message.success(this.$t("操作成功"));
          this.getList();
        });
lanbaoming's avatar
lanbaoming committed
760
    },
lanbaoming's avatar
lanbaoming committed
761 762
    printTag() {
      this.showPrintTagDialog = true;
lanbaoming's avatar
lanbaoming committed
763 764
    },
    // 箱明细关闭后清理快递单号和影像临时数据
lanbaoming's avatar
lanbaoming committed
765
    clearAppendExpressNoAndPictures() {
lanbaoming's avatar
lanbaoming committed
766
      setTimeout(() => {
lanbaoming's avatar
lanbaoming committed
767 768 769 770
        window.ChooseOrderProductsExpressNos = null;
        window.ChooseOrderProductsPictureUrls = null;
      }, 100);
    },
lanbaoming's avatar
lanbaoming committed
771 772 773 774 775 776 777 778 779 780 781 782 783 784 785
  },
  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
786 787 788 789 790 791
    wareItem() {
      return (orderItemId) => {
        return this.orderItemList.find(
          (item) => item.orderItemId == orderItemId
        );
      };
lanbaoming's avatar
lanbaoming committed
792 793
    },
    // 根据orderItemId获取入仓记录
lanbaoming's avatar
lanbaoming committed
794
    orderWarehouseInList() {
lanbaoming's avatar
lanbaoming committed
795
      return (orderItemId) => {
lanbaoming's avatar
lanbaoming committed
796 797
        return this.wareItem(orderItemId)?.orderWarehouseInBackItemDoList || [];
      };
lanbaoming's avatar
lanbaoming committed
798 799
    },
    // 获取打包状态
lanbaoming's avatar
lanbaoming committed
800 801 802 803
    wareItemPackStatus() {
      return (orderItemId) => {
        return this.wareItem(orderItemId)?.packStatus;
      };
lanbaoming's avatar
lanbaoming committed
804 805
    },
    title() {
lanbaoming's avatar
lanbaoming committed
806 807 808
      return this.$i18n.locale === "en_US"
        ? this.$route.meta.titleEn
        : this.$route.name;
lanbaoming's avatar
lanbaoming committed
809 810
    },
    orderSpecialNeedsDict() {
lanbaoming's avatar
lanbaoming committed
811
      return this.$store.state.dict.dictDatas.order_special_needs;
lanbaoming's avatar
lanbaoming committed
812
    },
lanbaoming's avatar
lanbaoming committed
813 814 815 816 817 818 819 820
    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
821
        }
lanbaoming's avatar
lanbaoming committed
822 823
      });
      return result;
lanbaoming's avatar
lanbaoming committed
824
    },
lanbaoming's avatar
lanbaoming committed
825 826
    warehouseId() {
      return this.order?.logisticsInfoDto?.startWarehouseId;
lanbaoming's avatar
lanbaoming committed
827 828
    },
    // 显示特性
lanbaoming's avatar
lanbaoming committed
829 830 831 832 833 834 835 836 837 838 839
    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
840 841
    },
    // 全部入仓记录的入仓影像
lanbaoming's avatar
lanbaoming committed
842 843 844 845 846 847 848 849 850 851
    pictureUrls() {
      let urls = [];
      this.orderItemList.forEach((item) => {
        console.log("pictureUrls", item.pictureUrls);
        urls = urls.concat(item.pictureUrls || []);
      });
      return urls;
    },
  },
};
lanbaoming's avatar
lanbaoming committed
852 853 854 855
</script>

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