schangxiang@126.com
2024-12-11 a27f35ea06c7b6bd9a6dc310c86c366e8052897b
LA24030_LuLiPackageLine_Pda/pages/takeMaterial/orderpiece/orderpiece.vue
@@ -1,524 +1,325 @@
<template>
  <view class="overflow" style="padding-bottom: 100px">
    <!-- 顶部 -->
  <view class="overflow" style="padding-bottom: 150rpx">
    <cu-custom bgColor="bg-white" :isBack="true">
      <block slot="backText"></block>
      <block slot="content">标准收货</block>
      <block slot="backText"> </block>
      <block slot="content">NG处理</block>
    </cu-custom>
    <!-- 遮挡层 -->
    <modal-code
      ref="resmodal"
      :rescode="rescode"
      :resmessage="resmessage"
      :showBtn="showBtn"
      @goYuKu="goYuKu"
    />
    <!-- 收货 -->
    <view class="" v-if="renameFocus">
      <u-form
        labelPosition="left"
        label-width="180rpx"
        :model="warehouse"
        ref="warehouseRef"
    <u-form
      labelPosition="left"
      label-width="180rpx"
      :model="warehouse"
      ref="warehouseRef"
    >
      <!-- <u-row
        class="border_bottom margin_top10rpx padding_left25rpx"
        style="background-color: #fff"
      >
        <u-row
          class="margin_top10rpx margin_bottom10rpx padding_left25rpx"
          style="background-color: #fff"
        >
          <u-col span="12">
            <u-form-item required label="物料跟踪码:" class="uFormItem">
              <u-input
                v-model.trim="warehouse.barcodeMy"
                placeholder="请录入或扫码"
                @focus="warehouse.barcodeMy = ''"
                class="width padding_left25rpx"
                :focus="true"
                @confirm="materialBlur(1)"
              >
              </u-input>
            </u-form-item>
          </u-col>
        </u-row>
      </u-form>
      <view style="margin-bottom: 180rpx" v-show="singlist.length > 0">
        <checkbox-group @change="checkboxChange">
          <view
            v-for="(item, eindex) in singlist"
            :key="eindex"
            class="margin_top10rpx"
        <u-col span="12">
          <u-form-item
            label="包装号:"
            prop="packageCode"
            required
            class="uFormItem"
          >
            <u-swipe-action
              :show="item.show"
              :index="eindex"
              @click="longpredel"
              @open="open"
              @close="close"
              :options="options"
            <u-input
              v-model.trim="warehouse.packageCode"
              @confirm="getContainerData(1)"
              placeholder="请录入或扫码"
              class="width"
              :focus="curFoucus"
            >
              <view
                class="fontSize32rpx background_fff padding10"
                :class="item.isYueku == '是' ? 'bg_item' : ''"
                style="width: 100vw"
              >
                <u-row>
                  <u-col span="12">
                    <label class="flex align-center">
                      <text
                        class="flex justify-center align-center circkle06"
                        >{{ eindex + 1 }}</text
                      >
                      <view
                        class="color_f18202 padding_left10rpx"
                        style="flex: 1; word-break: break-all"
                      >
                        {{ item.materialCode }}-{{ item.materialName }}
                      </view>
                    </label>
                  </u-col>
                </u-row>
                <u-row>
                  <u-col span="12">
                    <view class="padding_left25rpx" style="color: #808080">
                      ASN:{{ item.asnNo }}
                    </view>
                  </u-col>
                </u-row>
                <u-row>
                  <u-col span="12">
                    <view class="padding_left25rpx" style="color: #808080">
                      供应商批次:{{ item.supplierBatch }}
                    </view>
                  </u-col>
                </u-row>
                <u-row>
                  <u-col span="7">
                    <view class="padding_left25rpx" style="color: #808080">
                      最高库存数:{{ Number(item.maxImumqty).toFixed(3) }}
                    </view>
                  </u-col>
                  <u-col span="5">
                    <view class="" style="color: #808080">
                      库存数:{{ Number(item.stockQty).toFixed(3) }}
                    </view>
                  </u-col>
                </u-row>
                <u-row>
                  <u-col span="7">
                    <view class="padding_left25rpx" style="color: #808080">
                      行号:{{ item.asnLineNumber }}
                    </view>
                  </u-col>
                  <u-col span="5">
                    <view class="" style="color: #808080">
                      转换率:{{ item.translateRate }}
                    </view>
                  </u-col>
                </u-row>
                <u-row>
                  <u-col span="7">
                    <view class="padding_left25rpx" style="color: #808080">
                      采购单位:{{ item.poUnit }}
                    </view>
                  </u-col>
                  <u-col span="5">
                    <view class="" style="color: #808080">
                      库存单位:{{ item.materialUnit }}
                    </view>
                  </u-col>
                </u-row>
                <u-row>
                  <u-col span="7">
                    <view class="padding_left25rpx" style="color: #808080">
                      采购数量:{{ Number(item.poQuantity).toFixed(3) }}
                    </view>
                  </u-col>
                  <u-col span="5">
                    <view class="" style="color: #f18202">
                      收货数量:{{ Number(item.quantity).toFixed(3) }}
                    </view>
                  </u-col>
                </u-row>
              </view>
            </u-swipe-action>
          </view>
        </checkbox-group>
      </view>
      <u-popup
        v-model="detailshow"
        border-radius="14"
        @close="detailshow = false"
        mode="bottom"
            </u-input>
          </u-form-item>
        </u-col>
      </u-row> -->
      <u-row
        class="border_bottom margin_top10rpx padding_left25rpx"
        style="background-color: #fff"
      >
        <h2 class="text_align_center padding_bottom18 padding15">物料信息</h2>
        <!-- <view class="line flex justify-between">
          <text class="text-gray">打印张数</text>
          <text>
        <u-col span="12">
          <u-form-item label="部件条码:" class="uFormItem">
            <u-input
              v-model.trim="contLabel"
              placeholder="请输入打印张数"
              class="width"
              @focus="contLabel = ''"
              style="font-size: 36rpx; text-align: right"
              v-model="warehouse.upi"
              ref="materialRef"
              placeholder="请扫码录入"
              @focus="warehouse.upi = ''"
              @confirm="getContainerData"
              style="font-weight: bolder; margin-left: 15rpx"
              class="width padding_left25rpx"
            >
            </u-input>
          </text>
        </view> -->
        <!-- <view class="line flex justify-between">
          <text class="text-gray">打印收货数量</text>
          <text>
            <u-input
              v-model.trim="ermNum"
              placeholder="请输入打印收货数量"
              class="width"
              @focus="ermNum = ''"
              style="font-size: 36rpx; text-align: right"
            >
            </u-input>
          </text>
        </view> -->
        <view class="line flex justify-between">
          <text class="text-gray">物料编号</text>
          <text>{{ materlist.materialCode }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">物料名称</text>
          <text>{{ materlist.materialName }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">收货数量</text>
          <text>{{ materlist.quantity }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">库存单位</text>
          <text>{{ materlist.materialUnit }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">采购单位</text>
          <text>{{ materlist.poUnit }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">行号</text>
          <text>{{ materlist.asnLineNumber }}</text>
        </view>
        <!-- <view class="margin_top140rpx">
                <button-modal :subShow='true' garmenTitle='打印' @submit='init' @reset='rest' />
               <button-modal :cleaningShow='true' allTitle='蓝牙打印' cleaningTitle='斑马打印' @allsubmit="init(1)"
                  @submit='init(2)' />
            </view> -->
      </u-popup>
      <button-modal
        :empTytowerShow="true"
        cleaningTitle="重置"
        garmenTitle="下一步"
        @submit="next"
        @reset="resthandle"
      />
      <!-- <button-modal :issueShow='true' issueTitle="越库" subTitle='下一步' restTiltle='重置' @reset='rest'
            @submit='next' @issue="goYuKu"/> -->
    </view>
    <!-- 确认收货 -->
    <view class="" v-else>
      <u-tabs-swiper
        ref="tabs"
        :current="current"
        @change="tabsChange"
        bar-width="75"
        :list="lists"
        :is-scroll="false"
          </u-form-item>
        </u-col>
      </u-row>
    </u-form>
    <!-- 列表 -->
    <view class="margin_top10rpx">
      <u-swipe-action
        :show="item.show"
        :index="eindex"
        v-for="(item, eindex) in singlist"
        :key="eindex"
        :options="options"
        @click="longpress"
        @open="open"
        @close="close"
        class="margin_bottom10rpx"
        active-color="#f18202"
        inactive-color="#f18202"
      >
      </u-tabs-swiper>
      <scroll-view scroll-y="true" style="height: 45vh">
        <!-- <view class="margin_top10rpx overflow_auto" style="height:calc(100% - 20rpx)"> -->
        <view
          v-if="current == 0"
          v-for="(item, eindex) in lastlist"
          :key="eindex"
          style="background-color: #fff"
          class="padding10"
        >
          <u-row class="padding10">
            <u-col span="12" class="flex" style="align-items: flex-start">
              <view
                style="
                  background-color: #f18202;
                  color: #fff;
                  border-radius: 50%;
                  width: 20px;
                  height: 20px;
                  line-height: 20px;
                  text-align: center;
                "
              >
                {{ eindex + 1 }}
              </view>
              <view
                class="color_f18202 padding_left10rpx"
                style="flex: 1; word-break: break-all"
              >
                {{ item.materialCode }}-{{ item.materialName }}
              </view>
            </u-col>
          </u-row>
          <u-row>
            <u-col span="12" class="text06">
              <view class="padding_left25rpx"> 单号:{{ item.asnNo }} </view>
            </u-col>
          </u-row>
          <u-row>
            <u-col span="7" class="text06">
              <view class="padding_left25rpx">
                库存单位:{{ item.materialUnit }}
              </view>
            </u-col>
            <u-col span="5" class="text06">
              <view class="" style="color: #808080">
                采购单位:{{ item.poUnit }}
              </view>
            </u-col>
          </u-row>
          <u-row>
            <u-col span="7" class="text06">
              <view class="padding_left25rpx">
                转换率:{{ item.translateRate }}
              </view>
            </u-col>
            <u-col span="5" class="text06">
              采购数量:{{ Number(item.poQuantity).toFixed(3) }}
            </u-col>
          </u-row>
          <u-row class="">
            <u-col span="7" class="text06">
              <view class="padding_left25rpx">
              </view>
            </u-col>
            <u-col span="5" class="color_f18202">
              收货数量:{{ Number(item.quantity).toFixed(3) }}
            </u-col>
          </u-row>
        </view>
        <view
          v-if="current == 1"
          v-for="(item, eindex) in lacklist"
          :key="eindex"
          style="background-color: #fff; margin-top: 6rpx"
        >
          <u-row class="padding10">
            <u-col span="12" class="flex" style="align-items: flex-start">
              <view
                style="
                  background-color: #f18202;
                  color: #fff;
                  border-radius: 50%;
                  width: 20px;
                  height: 20px;
                  line-height: 20px;
                  text-align: center;
                "
              >
                {{ eindex + 1 }}
              </view>
              <view
                class="color_f18202 padding_left10rpx"
                style="flex: 1; word-break: break-all"
              >
                {{ item.wareMaterialCode }}
              </view>
            </u-col>
          </u-row>
          <u-row>
            <u-col span="8" class="text06"> 批次:{{ item.barNo }} </u-col>
            <u-col span="4" class="text06 text-right">
              采购数:{{ item.deliveryQuantity }}
            </u-col>
          </u-row>
          <u-row class="">
            <u-col span="4" class="text06">
              已收货数:{{ item.goodsQuantity }}
            </u-col>
            <u-col span="4" class="text06">
              本次收货数:{{ item.uncollectedQuantity }}
            </u-col>
          </u-row>
        </view>
      </scroll-view>
      <view class="fontSize32rpx">
        <!-- <u-row class="padding15 background_fff" style="margin-bottom: 6rpx">
          <u-col span="6" class="text-gray">
            采购数: {{ QuantityTotal }}
          </u-col>
          <u-col span="6" class="font_weight_bold" style="text-align: right">
            已收货数: {{ collectedTotal }}
          </u-col>
        </u-row> -->
        <u-row class="padding15 background_fff" style="margin-bottom: 6rpx">
          <u-col span="6" class="text-gray"> </u-col>
          <u-col
            span="6"
            class="font_weight_bold color_f18202"
            style="text-align: right"
          >
            本次收货数: {{ uncollectedTotal }}
            <!-- 缺料总数: {{ lackTotal }} -->
          </u-col>
        </u-row>
      </view>
        <view class="item u-border-bottom">
          <!-- 此层wrap在此为必写的,否则可能会出现标题定位错误 -->
          <view class="title-wrap">
            <view
              :class="item.checked ? 'bg_item' : ''"
              class="fontSize32rpx width margin_auto background_fff padding10 relative box_sizing transition"
            >
              <!-- 部件名称 upi、材料、尺寸,位置、板件状态 -->
              <u-row>
                <u-col span="12" class="flex align-center">
                  <!-- <u-checkbox v-model="item.checked" size="50rpx"></u-checkbox> -->
                  <view
                    class="flex justify-center align-center"
                    style="
                      background-color: #f18202;
                      color: #fff;
                      border-radius: 50vh;
                      width: 40rpx;
                      height: 40rpx;
                    "
                  >
                    {{ eindex + 1 }}
                  </view>
                  <text class="color_f18202 padding_left10rpx">
                    {{ item.upi }}
                  </text>
                </u-col>
              </u-row>
              <u-row>
                <u-col span="12">
                  <text class="color_80 padding_left25rpx">
                    部件名称: {{ item.detailName }}
                  </text>
                </u-col>
              </u-row>
              <u-row>
                <u-col span="12">
                  <text class="color_80 padding_left25rpx">
                    位置:{{ getAreaCodeEnumName(item.areaCode) }}
                  </text>
                </u-col>
              </u-row>
              <u-row>
                <u-col span="12">
                  <text class="color_80 padding_left25rpx">
                    材料:{{ item.info18 }}
                  </text>
                </u-col>
              </u-row>
      <!-- 批量图片上传 -->
      <view
        class="width fixed bottom140 margin_auto background_fff padding15 border_radius margin_bottom10rpx relative box_sizing transition boxImgWrap"
      >
        <view
          class="ImgListBox"
          v-for="(item, eindex) in fileListImgSrc"
          :key="eindex"
        >
          <image
            class="imgUp"
            :src="item.bendiSrc"
            mode=""
            @click="imgClick(eindex)"
          ></image>
          <u-icon
            @click="delimage(item.resSrc, eindex)"
            name="close-circle-fill"
            color="red"
            size="60"
            class="closeIcon"
          ></u-icon>
              <u-row>
                <u-col span="12">
                  <text class="color_80 padding_left25rpx">
                    <text class="color_80"> 尺寸:{{ item.info16 }} </text>
                  </text>
                </u-col>
              </u-row>
              <u-row>
                <u-col span="12">
                  <text class="color_80 padding_left25rpx">
                    板件状态:{{ getEnumName(item.upiStatus) }}
                  </text>
                </u-col>
              </u-row>
              <u-row>
                <u-col span="12">
                  <text class="color_80 padding_left25rpx">
                    <text class="color_80"> 次序:{{ item.shelf }} </text>
                  </text>
                </u-col>
              </u-row>
              <u-row>
                <u-col span="12">
                  <text class="color_80 padding_left25rpx">
                    <text class="color_80"> 生产单号:{{ item.info5 }} </text>
                  </text>
                </u-col>
              </u-row>
              <u-row>
                <u-col span="12">
                  <text class="color_80 padding_left25rpx">
                    <text class="color_80">
                      包装编号:{{ item.packageCode }}</text
                    >
                  </text>
                </u-col>
              </u-row>
              <u-row>
                <u-col span="12">
                  <text class="color_80 padding_left25rpx">
                    <text class="color_80"> 批次号:{{ item.planNo }}</text>
                  </text>
                </u-col>
              </u-row>
            </view>
          </view>
        </view>
        <view class="addImgBox">
          <u-icon name="plus" @click="upload" size="48"></u-icon>
          <text class="fontSize32rpx">选择图片</text>
        </view>
      </view>
      <button-modal
        :empTytowerShow="true"
        cleaningTitle="上一步"
        garmenTitle="收货完成"
        @submit="submit"
        @reset="reset(1)"
      />
      </u-swipe-action>
    </view>
    <u-action-sheet
      :list="wolist2"
      v-model="modalshow2"
      @click="confirm2"
    ></u-action-sheet>
    <!-- 添加批次 -->
    <modal-code :rescode="rescode" :resmessage="resmessage" ref="resmodal" />
    <u-popup
      v-model="detailshowPc"
      v-model="detailshow"
      border-radius="14"
      @close="detailshowPc = false"
      @close="detailshow = false"
      mode="bottom"
    >
      <h2 class="text_align_center padding_bottom18 padding15">物料批次信息</h2>
      <!-- <view class="line flex justify-between">
            <text class="text-gray">物料编号</text>
            <text>{{materlist.wareMaterialCode}}</text>
         </view>
         <view class="line flex justify-between">
            <text class="text-gray">物料名称</text>
            <text>{{materlist.name}}</text>
         </view> -->
      <view class="line flex justify-between">
        <text class="text-gray">批次</text>
        <text>
          <u-input
            v-model.trim="addBatch"
            placeholder="请输入批次"
            class="width"
            @focus="addBatch = ''"
            style="font-size: 36rpx; text-align: right"
          >
          </u-input>
        </text>
      </view>
      <view class="margin_top140rpx">
        <button-modal :subShow="true" garmenTitle="确认" @submit="submitPc" />
      </view>
      <h2 class="text_align_center padding_bottom18 padding15">信息</h2>
      <div style="height: 400px; overflow-y: auto; padding: 0 15rpx">
        <view class="line flex justify-between">
          <text class="text-gray">订单号</text>
          <text>{{ materlist.orderId }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">长</text>
          <text>{{ materlist.length }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">宽</text>
          <text>{{ materlist.width }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">厚</text>
          <text>{{ materlist.thk }}</text>
        </view>
        <!-- <view class="line flex justify-between">
          <text class="text-gray">行号</text>
          <text>{{ materlist.lineNumber }}</text>
        </view> -->
        <!-- <view class="line flex justify-between">
        <text class="text-gray">部件纹理</text>
        <text>{{ materlist.Matgrid }}</text>
      </view> -->
        <!-- <view class="line flex justify-between">
        <text class="text-gray">打孔设备编号</text>
        <text>{{ materlist.DRNum }}</text>
      </view> -->
        <!-- <view class="line flex justify-between">
          <text class="text-gray">锯切图号</text>
          <text>{{ materlist.materialIndex }}</text>
        </view> -->
        <view class="line flex justify-between">
          <text class="text-gray">包装X坐标</text>
          <text>{{ materlist.machineXCenter }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">包装Y坐标</text>
          <text>{{ materlist.machineYCenter }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">包装Z坐标</text>
          <text>{{ materlist.machineZCenter }}</text>
        </view>
        <!-- <view class="line flex justify-between">
          <text class="text-gray">转向角度</text>
          <text>{{ materlist.rotation }}</text>
        </view> -->
        <view class="line flex justify-between">
          <text class="text-gray">层数</text>
          <text>{{ materlist.sequence }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">销售合同单号</text>
          <text>{{ materlist.info4 }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">生产单号</text>
          <text>{{ materlist.info5 }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">第几包</text>
          <text>{{ materlist.info6 }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">经销店名称</text>
          <text>{{ materlist.info7 }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">产品名称</text>
          <text>{{ materlist.info8 }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">包装编码</text>
          <text>{{ materlist.info9 }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">客户名称</text>
          <text>{{ materlist.info10 }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">自提或发货</text>
          <text>{{ materlist.info11 }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">包装部件总数量</text>
          <text>{{ materlist.info12 }}</text>
        </view>
        <view class="line flex justify-between">
          <text class="text-gray">包装面积</text>
          <text>{{ materlist.info13 }}</text>
        </view>
        <!-- <view class="line flex justify-between">
          <text class="text-gray">部件名称</text>
          <text>{{ materlist.info14 }}</text>
        </view> -->
        <view class="line flex justify-between">
          <text class="text-gray">部件数量</text>
          <text>{{ materlist.info15 }}</text>
        </view>
        <!-- <view class="line flex justify-between">
          <text class="text-gray">部件尺寸</text>
          <text>{{ materlist.info16 }}</text>
        </view> -->
        <view class="line flex justify-between">
          <text class="text-gray">包装机械手旋转</text>
          <text>{{ materlist.info17 }}</text>
        </view>
      </div>
    </u-popup>
    <button-modal
      :issueShow="true"
      issueTitle="重置"
      subTitle="确认NG"
      restTiltle="取消NG"
      @reset="submit(2)"
      @submit="submit(1)"
      @issue="rest"
    />
  </view>
</template>
<script>
import ButtonModal from "../../../components/buttonModal.vue";
import ModalCode from "../../../components/ModalCode.vue";
import tkiBarcode from "@/components/tki-barcode/tki-barcode";
import bluet from "@/components/blue.vue";
import BluePrint from "@/pages/print/bluePrint.js";
import ButtonModal from "@/components/buttonModal.vue";
import ModalCode from "@/components/ModalCode.vue";
import {
  getMaterial,
  getPurchaseOrderDetail,
  addDelivery,
  getQhdOrderDetail,
  getSapSelect,
  addShouhuoJiaoYan,
} from "../../../api/takeMaterial/orderpiece.js";
import { pathToBase64, base64ToPath } from "image-tools";
import { addPrintRecord } from "../../../api/print.js";
import { getAttrValue } from "@/utils/tool.js";
import { translateapp, translateImg } from "@/utils/compress.js";
import { deletePicture } from "@/api/deliver.js";
import printComp from "@/mixins/printPoLabel.js";
import printBanma from "@/mixins/printBanma.js";
import mixCheckbox from "@/mixins/checkboxYueKu.js";
  WmsOperationTaskSetNG,
  WmsOperationTaskCancelNG,
  getBhbMaterialList,
  getenumDataList,
} from "@/api/putIn/artificial.js";
export default {
  mixins: [printComp, printBanma, mixCheckbox],
  data() {
    return {
      materialCode: "", //物料编号
      renameFocus: true,
      detailshow: false,
      rescode: 0,
      autoFoucs: true,
      resmessage: "",
      showBtn: 0,
      current: 0, //滑块默认值
      fileList: [],
      fileListImgSrc: [], //上传图片列表
      lastlist: [],
      overlist: [], //收货列表
      lacklist: [], //缺料列表
      image: "", //当前显示的图片地址
      action: this.$myHOST + "/api/sysFile/uploadFile",
      singlist: [], //物料详情
      lists: [
        {
          name: "收货(0)",
        },
        {
          name: "",
        },
      ],
      list: [],
      arr: [],
      materlist: {}, //物料详情数据
      operator: "",
      warehouse: {
        barcodeMy: "",
        PageSize: 10000,
        PageNo: 1,
        packageCode: "",
        upi: "",
      },
      warehouseRules: {
        barcodeMy: [
          {
            required: true,
            message: "条码不能为空",
            trigger: "blur",
          },
        ],
      },
      singlist: [  ], //详情列表
      ordersId: 0, //当前容器绑定的上架单
      rescode: 0,
      resmessage: "",
      options: [
        {
          text: "详情",
@@ -526,735 +327,187 @@
            backgroundColor: "#fc9f35",
          },
        },
        {
          text: "删除",
          style: {
            backgroundColor: "#fc4b4b",
          },
        },
      ],
      operator: "",
      QuantityTotal: 0, //送货总数
      collectedTotal: 0, //已收货数
      uncollectedTotal: 0, //收货总数
      lackTotal: 0, //缺货总数
      code: "",
      addForm: {
        //打印记录
        code: "",
        name: "",
        batchNo: "",
        specificationModel: "",
      },
      lotNo: "",
      contLabel: 1, //打印张数
      ermNum: "",
      detailshow: false,
      materlist: {},
      curFoucus: true,
      timer: null,
      printflag: false,
      sapLocate: "",
      modalshow2: false,
      wolist2: [],
      timerT: null,
      addBatch: "",
      detailshowPc: false,
      itemPcAddIndex: "",
      timerSm: null,
      detailableZb: false,
      detailable: false,
      gridFocus: false,
      gridable: true,
      kwbhAllowed: false,
      enumList: [],
      areaCodeEnum: [],
    };
  },
  components: {
    ButtonModal,
    ModalCode,
    tkiBarcode,
    bluet,
  },
  onLoad(option) {
    // 越库返回 查数据
    if (option.po) {
      this.warehouse.PurchaseNo = option.po;
      this.warehouse.asnNo = option.po;
      this.materialBlur();
    }
  created() {
    getenumDataList({
      EnumName: "UpiStatusEnum",
    }).then((res) => {
      this.enumList = res.result || [];
    });
    getenumDataList({
      EnumName: "AreaCodeEnum",
    }).then((res) => {
      this.areaCodeEnum = res.result || [];
    });
  },
  onReady() {
    this.$refs.warehouseRef.setRules(this.warehouseRules);
  },
  mounted() {
  onLoad() {
    this.operator = JSON.parse(uni.getStorageSync("userInfo")).name;
    // this.getVehicleType2() //SAP下拉
  },
  mounted() {},
  methods: {
    showDetail(item, eindex) {
      if (item.WareMaterialCode == "") {
        return;
      }
      item.childen = !item.childen;
      if (this.singlist[eindex].SortingOrderDetailsList.length > 0) {
        return;
      }
      getQhdOrderDetail({
        WareMaterialCode: item.wareMaterialCode,
        // 'orderType':this.orderType
      }).then((res) => {
        if (res.code == 200) {
          if (Array.isArray(res.data) && res.data.length >= 0) {
            if (res.data.length == 0) {
              uni.showToast({
                title: "暂无取货数据",
                icon: "none",
                duration: 2000,
              });
              return;
            }
            res.data.forEach((item) => {
              item.uncollectedQuantity = "";
              // return item;
            });
            this.singlist[eindex].SortingOrderDetailsList = res.data;
          }
        }
      });
    getEnumName(value) {
      const name = this.enumList.find((item) => item.value === value);
      return name ? name.name : "";
    },
    //获取print date print time
    getCurrentDate() {
      let date = new Date();
      let year = date.getFullYear(); //年
      let month = date.getMonth() + 1; //月
      month = month >= 10 ? month : "0" + month;
      let day = date.getDate(); //日
      day = day >= 10 ? day : "0" + day;
      let hour = date.getHours(); //时
      hour = hour >= 10 ? hour : "0" + hour;
      let min = date.getMinutes(); //分
      min = min >= 10 ? min : "0" + min;
      let second = date.getSeconds(); //秒
      second = second >= 10 ? second : "0" + second;
      return {
        date: `${day}.${month}.${year}`,
        time: `${hour}:${min}:${second}`,
        formate: `${year}/${month}/${day}`,
      };
    getAreaCodeEnumName(value) {
      const name = this.areaCodeEnum.find((item) => item.value === value);
      return name ? name.name : "";
    },
    //打印
    init(param) {
      const arr = ["wareMaterialCode", "barNo", "uncollectedQuantity"];
      const arrzw = ["物料编号", "批次", "实际收货数"];
      let isAllow = "";
      Object.keys(this.materlist).forEach((item) => {
        if (arr.includes(item)) {
          if (!this.materlist[item]) {
            isAllow = arr.indexOf(item);
            return;
          }
        }
      });
      if (isAllow != "") {
        this.detailshow = false;
        this.rescode = 400;
        this.resmessage = `${arrzw[isAllow]}为空,不能继续打印`;
        this.showBtn = 0;
        this.$refs.resmodal.show = true;
        return;
      }
      if (!this.contLabel || !this.ermNum) {
    //获取的信息
    getContainerData() {
      if (!this.warehouse.upi) {
        uni.showToast({
          title: "数量不能为空且大于0",
          icon: "none",
        });
        return;
      }
      if (param == 1) {
        this.printComp();
      } else {
        // 供应商编号 供应商名字
        if (this.materlist.supplier) {
          let arr = this.materlist.supplier.split(" ");
          this.materlist.supplier = arr[0];
          this.materlist.supplierName = arr[1];
        }
        console.log(this.materlist);
        this.printBanma();
      }
    },
    //物料查询
    materialBlur(param) {
      var pramCd = {};
      if (this.warehouse.barcodeMy && this.warehouse.barcodeMy.length > 0) {
        if (this.warehouse.barcodeMy.indexOf(",") != -1) {
          pramCd = {
            SN_1d: "",
            SN_2d: this.warehouse.barcodeMy
          };
        } else {
          pramCd = {
            SN_1d: this.warehouse.barcodeMy,
            SN_2d: "",
          };
        }
        console.log(pramCd)
        getPurchaseOrderDetail({
        ...pramCd,
      }).then((res) => {
        if (res.code == 200) {
          var arrList = res.result.items;
          if (arrList.length == 0) {
              this.resmessage = "暂无数据";
              this.rescode = 400;
              this.showBtn = 0;
              this.$refs.resmodal.show = true;
            }
          if (Array.isArray(arrList) && arrList.length >= 1) {
            arrList.forEach((item) => {
              item.uncollectedQuantity = "";
              item.key = item.id;
            });
              var stockQty = arrList[0].stockQty || 0;
              var allHe =  Number(arrList[0].quantity + stockQty).toFixed(3);
              //最高库存maxImumqty < 收货数quantity + 库存数stockQty
              if(arrList[0].maxImumqty && arrList[0].maxImumqty > 0 &&
              (arrList[0].maxImumqty < allHe)){
                var s1 = `物料${arrList[0].materialCode}当前库存${stockQty}和收货数${arrList[0].quantity}之和超出最高库存${arrList[0].maxImumqty},是否继续收货?`;
                  uni.showModal({
                    title: "提示",
                    content: s1,
                    showCancel: true,
                    cancelColor: "#333333",
                    success: (res) => {
                      if (res.confirm) {
                        arrList.forEach((item) => {
                          var arrNo = this.singlist.findIndex((v) => v.id == item.id);
                          if (arrNo == -1) {
                            this.singlist.unshift(item);
                          }
                        });
                      } else if (res.cancel) {
                      }
                    },
                  });
              }else{
                arrList.forEach((item) => {
                  var arrNo = this.singlist.findIndex((v) => v.id == item.id);
                  if (arrNo == -1) {
                    this.singlist.unshift(item);
                  }
                });
              }
          } else {
            this.resmessage = "暂无数据";
            this.rescode = 400;
            this.showBtn = 0;
            this.$refs.resmodal.show = true;
          }
        }
      });
      } else {
        uni.showToast({
          title: "请扫码",
          title: "请扫部件条码",
          icon: "none",
          duration: 2000,
        });
        return;
      }
    },
    //删除详情
    longpredel(index, eindex) {
      if (eindex == 1) {
        this.singlist.splice(index, 1);
      } else {
        this.materlist = this.singlist[index];
        this.detailshow = true;
      }
    },
    //卡片选中
    click(e) {
      e.cardNum = true;
      this.$forceUpdate();
      getBhbMaterialList({
        upi: this.warehouse.upi,
      }).then((res) => {
        const result = res.result;
        if (Array.isArray(result) && result.length == 0) {
          uni.showToast({
            title: "数据不存在",
            icon: "none",
            duration: 5000,
          });
          this.singlist = [];
          return;
        }
        this.singlist = res.result;
      });
    },
    // 如果打开一个的时候,不需要关闭其他,则无需实现本方法
    open(index) {
      // 先将正在被操作的swipeAction标记为打开状态,否则由于props的特性限制,
      // 原本为'false',再次设置为'false'会无效
      this.singlist[index].cardNum = true;
      this.singlist[index].show = true;
      this.singlist.map((val, idx) => {
        if (index != idx) this.singlist[idx].show = false;
      });
      this.$forceUpdate();
    },
    close(index) {
      this.singlist[index].show = false;
      this.singlist[index].cardNum = false;
      this.$forceUpdate();
    },
    // tabs通知swiper切换
    tabsChange(index) {
      this.current = index;
    },
    //改变收货数量
    changeNum(val) {
      val.cardNum = false;
      if (!val.uncollectedQuantity) {
        this.rescode = 400;
        this.resmessage = "收货数量不能为空且大于0";
        this.showBtn = 0;
        this.$refs.resmodal.show = true;
      }
      // val.uncollectedQuantity  = Number(val.uncollectedQuantity.toString().match(/^\d+(?:\.\d{0,2})?/)) //保留2位小数
      let num1 = Number(
        Number(val.deliveryQuantity) - Number(val.goodsQuantity)
      ).toFixed(3); //必须保留3位小数 -否则会造成剩余物料是小数的时候,无法收货
      if (Number(val.uncollectedQuantity).toFixed(3) > Number(num1)) {
        val.uncollectedQuantity = 0;
        this.rescode = 400;
        this.resmessage =
          "收货数" +
          val.uncollectedQuantity +
          "不能大于采购总数" +
          val.deliveryQuantity +
          "减已收货数" +
          val.goodsQuantity;
        this.showBtn = 0;
        this.$refs.resmodal.show = true;
      }
      if (val.uncollectedQuantity && val.uncollectedQuantity >= 0) {
        val.edit = true;
        this.$forceUpdate();
      }
    //物料详情
    longpress(index, eindex) {
      this.materlist = this.singlist[index];
      this.detailshow = true;
    },
    changeNumIn(val, valParent) {
      if (val.uncollectedQuantity === "" || val.uncollectedQuantity < 0) {
        this.rescode = 400;
        this.resmessage = "收货数量不能为空";
        this.showBtn = 0;
        this.$refs.resmodal.show = true;
      }
      val.uncollectedQuantity = Number(
        val.uncollectedQuantity.toString().match(/^\d+(?:\.\d{0,3})?/)
      ); //保留2位小数
      if (val.uncollectedQuantity > val.quantity) {
        val.uncollectedQuantity = 0;
        this.rescode = 400;
        this.resmessage = "不能大于缺料数";
        this.showBtn = 0;
        this.$refs.resmodal.show = true;
      }
      if (val.uncollectedQuantity > valParent.uncollectedQuantity) {
        val.uncollectedQuantity = 0;
        this.rescode = 400;
        this.resmessage = "不能大于收货数";
        this.showBtn = 0;
        this.$refs.resmodal.show = true;
      }
    },
    upload() {
      this.fileList = [];
      uni.chooseImage({
        sourceType: ["camera", "album"],
        sizeType: "original", //选择原图
        count: 1,
        success: (res) => {
          res.tempFilePaths.forEach((item, index) => {
            uni.showLoading({
              title: "上传中...",
            });
            translateapp(item, 80, (imgUrl) => {
              let fileData = [{ uri: imgUrl }];
              uni.uploadFile({
                url: this.action,
                files: fileData, //blob:
                fileType: "image",
                success: (res) => {
                  uni.hideLoading();
                  const resJson = JSON.parse(res.data);
                  if (resJson.code == 200) {
                    var jsonImg = resJson.result;
                    if (
                      jsonImg == null ||
                      jsonImg.url == null ||
                      jsonImg.url == ""
                    ) {
                      this.image = "";
                      this.fileList = [];
                      this.$u.toast("图片上传服务器失败");
                      return;
                    }
                    this.fileList.push(jsonImg.url);
                    this.fileListImgSrc.push({
                      resSrc: jsonImg.url,
                      bendiSrc: item,
                    });
                  } else {
                    this.$u.toast("图片上传失败");
                    this.fileList = [];
                    this.image = "";
                  }
                },
              });
            });
          });
        },
      });
    },
    // 删除图片
    delimage(filepath, index) {
      if (!filepath) {
        return;
      }
      deletePicture({
        id: filepath,
      }).then((res) => {
        if (res.code == 200) {
          this.fileListImgSrc.splice(index, 1);
          this.$u.toast("移除图片成功");
        } else {
          this.rescode = 400;
          this.resmessage = `删除图片失败`;
          this.$refs.resmodal.show = true;
        }
      });
    },
    //预览图片
    imgClick(index) {
      var urlsArr = [];
      this.fileListImgSrc.forEach((item) => {
        urlsArr.push(item.resSrc);
      });
      uni.previewImage({
        urls: urlsArr,
        current: urlsArr[index],
      });
    },
    //监听原生返回键
    onBackPress(e) {
      this.delimage();
    },
    //下一步
    next() {
      if (this.warehouse.asnNo == "") {
        uni.showToast({
          title: "请输入ASN单号!",
          icon: "none",
        });
        return;
      }
      this.singlist.forEach((item, index) => {
        item.uncollectedQuantity = item.quantity;
      });
      // // isBatchMge为true: 批次管理的物料 必须输入
      // let arrMge = this.singlist.filter((v)=>(v.isBatchMge == 1 && v.barNo==''|| v.isBatchMge == 1 && v.barNo==null)).filter((v2)=>(v2.uncollectedQuantity>0))
      // if(arrMge.length>0){
      //    uni.showToast({
      //       title: `${arrMge[0].wareMaterialCode}请填写空的批次`,
      //       icon:'none'
      //    })
      //    return
    //确认
    submit(type) {
      // const filterArr = this.singlist.filter((item) => item.checked);
      // if (filterArr.length <= 0) {
      //   this.rescode = 400;
      //   this.resmessage = "请选择解绑的物料!";
      //   this.$refs.resmodal.show = true;
      //   return;
      // }
      this.lastlist = this.singlist.filter((v) => v.uncollectedQuantity > 0);
      this.lacklist = this.singlist.reduce((curr, item) => {
        if (
          item.deliveryQuantity -
            item.uncollectedQuantity -
            item.goodsQuantity >
          0
        ) {
          curr.push(item);
        }
        return curr;
      }, []);
      let params2 = [];
      this.lastlist.forEach((item, index) => {
        params2.push({
          ...item,
          // id: item.id,
          // wareMaterialCode: item.wareMaterialCode,
          // uncollectedQuantity: item.uncollectedQuantity,
          // purchaseNo: this.warehouse.PurchaseNo,
          // asnNo: this.warehouse.asnNo,//到货单号
          // batchNo: item.barNo,
          // isCheck: item.isCheck,
          // isBatchMge: item.isBatchMge,
          // ebelp: item.ebelp,
          // sap_Location: item.sap_Location, //sap位置
        });
      });
      // 已收货数
      this.QuantityTotal = this.singlist.reduce((prev, next) => {
        let num = Number(prev) + Number(next.deliveryQuantity);
        return Number(num).toFixed(3);
      }, 0);
      this.collectedTotal = this.singlist.reduce((prev, next) => {
        let num = Number(prev) + Number(next.goodsQuantity);
        return Number(num).toFixed(3);
      }, 0);
      this.uncollectedTotal = this.singlist.reduce((prev, next) => {
        let num = Number(prev) + Number(next.uncollectedQuantity);
        return Number(num).toFixed(3);
      }, 0);
      this.lackTotal = this.singlist.reduce((prev, next) => {
        let num =
          Number(prev) +
          Number(next.deliveryQuantity) -
          Number(next.uncollectedQuantity) -
          Number(next.goodsQuantity);
        return Number(num).toFixed(3);
      }, 0);
      this.lists[0].name = `收货(${this.lastlist.length})`;
      // this.lists[1].name = `缺料(${this.lacklist.length})`
      this.lists[1].name = "";
      if (this.uncollectedTotal <= 0) {
        uni.showToast({
          title: "收货总数大于0",
          icon: "none",
          duration: 2000,
        });
      // const warehousOrderDetails = filterArr.reduce((curr, item) => {
      //   curr.push({
      //     ...item,
      //   });
      //   return curr;
      // }, []);
      var upi = this.singlist[0]?.upi || "";
      if (this.singlist.length != 1 || !upi) {
        this.rescode = 400;
        this.resmessage = "请扫正确的部件条码!";
        this.$refs.resmodal.show = true;
        return;
      }
      this.renameFocus = false;
      // addShouhuoJiaoYan(params2).then((res) => {
      //    if (res.code == 200) {
      //       if (res.data) {
      //          uni.showModal({
      //             title: '提示',
      //             content: `${res.data},确认下一步?`,
      //             showCancel: true,
      //             cancelColor: '#333333',
      //             success: (res => {
      //                if (res.confirm) {
      //                   this.renameFocus = false;
      //                } else if (res.cancel) {
      //                }
      //             })
      //          });
      //       } else {
      //          this.renameFocus = false
      //       }
      //    }
      // })
    },
    //确认收货
    submit() {
      if (this.uncollectedTotal <= 0) {
        uni.showToast({
          title: "收货总数大于0",
          icon: "none",
          duration: 2000,
        });
        return;
      }
      let params = [];
      //图片地址
      let idImg = [];
      if (this.fileListImgSrc && this.fileListImgSrc.length > 0) {
        this.fileListImgSrc.forEach((item) => {
          idImg.push(item.resSrc);
      const params = {
        Upi: upi,
        Reason: "",
      };
      if (type == 1) {
        uni.showModal({
          title: "NG处理",
          content: "是否确认NG处理?",
          showCancel: true,
          cancelColor: "#333333",
          success: (res) => {
            if (res.confirm) {
              WmsOperationTaskSetNG(params).then((res) => {
                this.rescode = 200;
                this.$refs.resmodal.show = true;
                this.resmessage = "NG处理成功";
                this.rest();
              });
            } else if (res.cancel) {
            }
          },
        });
      }
      this.lastlist.forEach((item, index) => {
        params.push({
          PDAReceivingActionType: 1, //标准收货
          OrderAsnDetailsId: item.id, //ASN单明细ID
          createdUserId: JSON.parse(uni.getStorageSync("userInfo")).id,
          createdUserName: JSON.parse(uni.getStorageSync("userInfo")).name,
          updatedUserId: JSON.parse(uni.getStorageSync("userInfo")).id,
          updatedUserName: JSON.parse(uni.getStorageSync("userInfo")).name,
          id: item.id,
          ...item,
          ImageIds: idImg.join(","), //图片地址
      if (type == 2) {
        uni.showModal({
          title: "取消NG处理",
          content: "是否确认取消NG处理?",
          showCancel: true,
          cancelColor: "#333333",
          success: (res) => {
            if (res.confirm) {
              WmsOperationTaskCancelNG(params).then((res) => {
                this.rescode = 200;
                this.$refs.resmodal.show = true;
                this.resmessage = "取消NG成功";
                this.rest();
              });
            } else if (res.cancel) {
            }
          },
        });
      });
      uni.showModal({
        title: "提示",
        content: "是否确认收货?",
        showCancel: true,
        cancelColor: "#333333",
        success: (res) => {
          if (res.confirm) {
            addDelivery(params).then((res) => {
              this.rescode = res.code;
              this.resmessage = res.message || "收货成功";
              this.$refs.resmodal.show = true;
              if (res.code == 200) {
                this.showBtn = 0;
                this.renameFocus = true;
                this.singlist = [];
                this.warehouse.barcodeMy = "";
                this.fileList = [];
                this.fileListImgSrc = [];
              } else {
                this.showBtn = 0;
              }
            });
          } else if (res.cancel) {
          }
        },
      });
      }
    },
     //清楚选中
     resthandle(parm) {
      uni.showModal({
        title: "提示",
        content: "是否确认重置?",
        showCancel: true,
        cancelColor: "#333333",
        success: (res) => {
          if (res.confirm) {
            this.rest();
          } else if (res.cancel) {
          }
        },
      });
    },
    //清楚选中
    rest(parm) {
      this.warehouse.barcodeMy = "";
      this.autoFoucs = true;
    rest() {
      this.warehouse.upi = "";
      this.singlist = [];
      this.asnNo = "";
      this.delimage();
    },
    reset(back) {
      if (back) {
        this.autoFoucs = false;
      }
      this.renameFocus = true;
    },
    //打印
    onPrint() {
      let _this = this;
      if (!uni.getStorageSync("deviceId")) {
        uni.showToast({
          title: "请连接打印机",
          icon: "error",
          duration: 2000,
        });
        return;
      }
      this.writeBLECharacteristicValue();
    },
    beforeDestroy() {
      // 销毁定时器
      if (this.timer) {
        clearTimeout(this.timer);
        this.timer = null;
      }
    },
    //类型聚焦事件
    containerFocus2() {
      uni.hideKeyboard();
      this.modalshow2 = true;
    },
    getVehicleType2() {
      getSapSelect().then((res) => {
        if (res.code == 200) {
          const dataT = res.data;
          if (dataT && dataT.length == 0) {
            this.wolist2 = [];
            return;
          }
          let dataDst = [];
          dataT.forEach((item) => {
            dataDst.push({
              text: item,
              id: item,
            });
          });
          this.wolist2 = dataDst;
          this.sapLocate = dataDst[0].id;
        }
      });
    },
    //类型选择
    confirm2(index) {
      // this.warehouse.containerCode = this.wolist2[index].text;
      // this.warehouse.containerCode = this.wolist2[index].id;
      console.log(this.wolist2[index].text);
      this.sapLocate = this.wolist2[index].text;
      this.singlist.forEach((item) => {
        item.sap_Location = this.wolist2[index].text;
      });
      console.log(this.singlist);
      this.$forceUpdate();
    },
    goYuKu() {
      this.$refs.resmodal.show = false;
      uni.navigateTo({
        url:
          "/pages/takeMaterial/orderpiece/poYueku?po=" +
          this.warehouse.PurchaseNo,
      });
      // uni.showModal({
      //    title: '提示',
      //    content: '是否确认越库?',
      //    showCancel: true,
      //    cancelColor: '#333333',
      //    success: (res => {
      //       if (res.confirm) {
      //          uni.navigateTo({
      //             url: '/pages/crossDock/crossDock?ids='+this.arrIds
      //          })
      //       } else if (res.cancel) {
      //       }
      //    })
      // });
    },
    // 添加批次
    addBath(index) {
      this.itemPcAddIndex = index;
      this.detailshowPc = true;
    },
    // 确认 添加批次
    submitPc() {
      if (!this.addBatch) {
        uni.showToast({
          title: "批次号不能为空!",
          icon: "none",
          duration: 2000,
        });
        return;
      }
      let itemNow = JSON.parse(
        JSON.stringify(this.singlist[this.itemPcAddIndex])
      );
      itemNow.barNo = this.addBatch;
      itemNow.uncollectedQuantity = 1;
      this.singlist.splice(this.itemPcAddIndex, 0, itemNow);
      this.detailshowPc = false;
    },
  },
};
</script>
<style lang="scss">
.title-wrap {
  margin-bottom: 15rpx;
  border-bottom: 1px solid #f18202;
  border-top: 1px solid #f18202;
  padding: 3px;
.content {
  height: 500rpx;
  overflow-y: scroll;
  width: 100%;
  padding: 15rpx;
  box-sizing: border-box;
  .content-item {
    padding: 15rpx;
    background-color: #fff;
    margin-bottom: 15rpx;
    border-radius: 8rpx;
    font-size: 32rpx;
  }
}
.bg_item {
  background: #ffebcd !important;
}
.qhd_wp {
  padding: 0 20rpx;
  border-top: 1px solid #f18202;
}
.detail_btn {
  text-align: right;
  padding: 10px;
}
</style>