schangxiang@126.com
2024-12-10 143b8e2ec209a703c21c0f87709e90f0d752f016
LA24030_LuLiPackageLine_Pda/pages/untie/untie.vue
@@ -23,6 +23,7 @@
          >
            <u-input
              v-model.trim="warehouse.packageCode"
                @focus="warehouse.packageCode = ''"
              @confirm="getContainerData(1)"
              placeholder="请录入或扫码"
              class="width"
@@ -37,7 +38,7 @@
        style="background-color: #fff"
      >
        <u-col span="12">
          <u-form-item label="板件号:" class="uFormItem">
          <u-form-item label="部件条码:" class="uFormItem">
            <u-input
              v-model="warehouse.upi"
              ref="materialRef"
@@ -75,7 +76,7 @@
              <!-- 部件名称 upi、材料、尺寸,位置、板件状态 -->
              <u-row>
                <u-col span="12" class="flex align-center">
                  <u-checkbox v-model="item.checked" size="50rpx"></u-checkbox>
                  <!-- <u-checkbox v-model="item.checked" size="50rpx"></u-checkbox> -->
                  <view
                    class="flex justify-center align-center"
                    style="
@@ -116,7 +117,7 @@
              <u-row>
                <u-col span="8">
                  <text class="color_80 padding_left25rpx">
                    板件状态:{{ item.upiStatus }}
                    板件状态:{{ getEnumName(item.upiStatus) }}
                  </text>
                </u-col>
                <u-col span="4">
@@ -129,54 +130,12 @@
      </u-swipe-action>
    </view>
    <modal-code :rescode="rescode" :resmessage="resmessage" ref="resmodal" />
    <u-popup
      v-model="detailshow"
      border-radius="14"
      @close="detailshow = false"
      mode="bottom"
    >
      <!-- <view class="pop "> -->
      <h2 class="text_align_center padding_bottom18 padding15">物料信息</h2>
      <view class="line flex justify-between">
        <text class="text-gray">物料编号</text>
        <text>{{ this.materlist.materialCode }}</text>
      </view>
      <view class="line flex justify-between">
        <text class="text-gray">物料名称</text>
        <text>{{ this.materlist.materialName }}</text>
      </view>
      <view class="line flex justify-between">
        <text class="text-gray">物料小类</text>
        <text>{{ this.materlist.materialTypeName }}</text>
      </view>
      <view class="line flex justify-between">
        <text class="text-gray">批次</text>
        <text>{{ this.materlist.batchNo }}</text>
      </view>
      <view class="line flex justify-between">
        <text class="text-gray">物料规格</text>
        <text>{{ this.materlist.specificationModel }}</text>
      </view>
      <view class="line flex justify-between">
        <text class="text-gray">数量</text>
        <text>{{ this.materlist.unBindQuantity }}</text>
      </view>
      <!-- </view> -->
      <view class="margin_top140rpx">
        <button-modal
          :subShow="true"
          garmenTitle="打印"
          @submit="init"
          @reset="rest"
        />
      </view>
    </u-popup>
    <button-modal
      :empTytowerShow="true"
      cleaningTitle="重置"
      garmenTitle="物料解绑"
      @submit="submit"
      @reset="back"
      :subShow="true"
      garmenTitle="重置"
      @submit="rest"
      @reset="rest"
    />
  </view>
</template>
@@ -228,24 +187,32 @@
      gridFocus: false,
      gridable: true,
      kwbhAllowed: false,
     enumList: [],
    };
  },
  components: {
    ButtonModal,
    ModalCode,
  },
  created() {
   getenumDataList({
      EnumName: "UpiStatusEnum",
    }).then((res) => {
      this.enumList = res.result || [];
    });
  },
  onLoad() {
    this.operator = JSON.parse(uni.getStorageSync("userInfo")).name;
  },
  mounted() {
    getenumDataList({
      EnumName: "UpiStatusEnum",
    }).then((res) => {
      this.singlist = res.data.result || [];
    });
  },
  methods: {
   getEnumName(value) {
      const name = this.enumList.find((item) => item.value === value);
      return name? name.name : "";
    },
    // 如果打开一个的时候,不需要关闭其他,则无需实现本方法
    open(index) {
      // 先将正在被操作的swipeAction标记为打开状态,否则由于props的特性限制,
@@ -263,323 +230,12 @@
      this.materlist = this.singlist[index];
      this.detailshow = true;
    },
    //标签重新打印
    init() {
      const arr = ["materialCode", "unBindQuantity"];
      const arrzw = ["物料编号", "本次解绑数量"];
      let isAllow = "";
      Object.keys(this.materlist).forEach((item) => {
        if (arr.includes(item)) {
          if (!this.materlist[item]) {
            isAllow = arr.indexOf(item);
            // this.rescode = 400
            // this.resmessage = `${arrzw[isAllow]}为空,不能继续打印`
            // this.resmessage = `${item}为空,不能继续打印`
            // this.$refs.resmodal.show = true
            return;
          }
        }
      });
      if (isAllow != "") {
        this.detailshow = false;
        this.rescode = 400;
        this.resmessage = `${arrzw[isAllow]}为空,不能继续打印`;
        this.$refs.resmodal.show = true;
        return;
      }
      if (
        this.materlist.unBindQuantity <= 0 ||
        this.materlist.unBindQuantity > this.materlist.quantity
      ) {
        this.detailshow = false;
        this.rescode = 400;
        this.resmessage = `数量不符合规范,不能继续打印`;
        this.$refs.resmodal.show = true;
        return;
      }
      if (!this.materlist.specificationModel) {
        this.materlist.specificationModel = "";
      }
      let ptintContext = [
        {
          type: "text",
          x: 0,
          y: 0,
          text: "",
          size: 2,
          rotate: 0,
          bold: 0,
          underline: false,
          reverse: false,
        },
        {
          type: "text",
          x: 0,
          y: 0,
          text: "",
          size: 2,
          rotate: 0,
          bold: 0,
          underline: false,
          reverse: false,
        },
        {
          type: "text",
          x: 0,
          y: 0,
          text: "",
          size: 2,
          rotate: 0,
          bold: 0,
          underline: false,
          reverse: false,
        },
        /* 以上空数据,为防止丢包时打印不正常 */
        { type: "line", x1: 3, y1: 3, x2: 565, y2: 3, width: 2 },
        { type: "line", x1: 3, y1: 3, x2: 3, y2: 345, width: 2 },
        { type: "line", x1: 3, y1: 345, x2: 565, y2: 345, width: 2 },
        { type: "line", x1: 565, y1: 345, x2: 565, y2: 3, width: 2 },
        {
          type: "text",
          x: 80,
          y: 15,
          text: "牧野汽车装备(武汉)有限公司",
          size: 3,
          rotate: 0,
          bold: 1,
          underline: false,
          reverse: false,
        },
        { type: "line", x1: 3, y1: 60, x2: 565, y2: 60, width: 2 },
        {
          type: "text",
          x: 10,
          y: 75,
          text: `物料编号: ${this.materlist.materialCode}`,
          size: 2,
          rotate: 0,
          bold: 1,
          underline: false,
          reverse: false,
        },
        { type: "line", x1: 3, y1: 110, x2: 380, y2: 110, width: 2 },
        {
          type: "text",
          x: 10,
          y: 125,
          text: `物料名称: ${this.materlist.materialTypeName || ""}`,
          size: 2,
          rotate: 0,
          bold: 1,
          underline: false,
          reverse: false,
        },
        { type: "line", x1: 3, y1: 160, x2: 380, y2: 160, width: 2 },
        {
          type: "text",
          x: 10,
          y: 175,
          text: `批次: ${this.materlist.batchNo}`,
          size: 2,
          rotate: 0,
          bold: 1,
          underline: false,
          reverse: false,
        },
        { type: "line", x1: 3, y1: 210, x2: 565, y2: 210, width: 2 },
        { type: "line", x1: 380, y1: 60, x2: 380, y2: 210, width: 2 },
        {
          type: "qr",
          x: 410,
          y: 72,
          text: `PARTS NUMBER: ${this.materlist.materialCode},SAP: ${
            this.materlist.sap_Location || ""
          },BOXNUM: ${this.materlist.boxNo || ""},LOT NO: ${
            this.materlist.batchNo
          },QUANTITY: ${this.materlist.unBindQuantity}`,
          width: 3,
          level: 1,
        },
        {
          type: "text",
          x: 10,
          y: 225,
          text: `规格型号: ${
            this.materlist.specificationModel.length > 32
              ? this.materlist.specificationModel.substr(0, 32)
              : this.materlist.specificationModel
          }`,
          size: 2,
          rotate: 0,
          bold: 1,
          underline: false,
          reverse: false,
        },
        { type: "line", x1: 3, y1: 260, x2: 565, y2: 260, width: 2 },
        {
          type: "text",
          x: 120,
          y: 290,
          text: "MAKINO J(CHINA) CO.LTD",
          size: 3,
          rotate: 0,
          bold: 1,
          underline: false,
          reverse: false,
        },
      ];
      console.log(ptintContext);
      BluePrint.print(this.$store, ptintContext)
        .then(() => {
          // 关闭弹框 并恢复滑动块
          this.detailshow = false;
          this.addForm.code = this.materlist.materlist;
          this.addForm.name = this.materlist.materialName;
          this.addForm.batchNo = this.materlist.batchNo;
          this.addForm.specificationModel = this.materlist.specificationModel;
          addPrintRecord(this.addForm).then((res) => {
            console.log(res);
          });
          uni.showToast({
            title: "打印成功",
            duration: 2000,
          });
        })
        .catch((err) => {
          // uni.showToast({
          //    title:'打印失败',
          //    duration: 2000
          // })
        });
    rest() {
      this.warehouse.upi = "";
      this.warehouse.packageCode = "";
      this.singlist = [];
    },
    materialBlur() {
      clearTimeout(this.timerSm);
      this.timerSm = null;
      if (this.warehouse.materialCode == "") {
        return;
      }
      this.timer = setTimeout(() => {
        //多次触发bug 延迟bug
        //判断当前物料是否在盘点列表中
        const index = this.singlist.findIndex(
          (item) =>
            item.materialCode == this.warehouse.materialCode &&
            item.batchNo == lotNo
        );
        if (index > -1) {
          this.singlist[index].checked = 1;
          this.singlist.unshift(...this.singlist.splice(index, 1));
          return;
        } else {
          clearTimeout(this.timer);
          this.timer = null;
          this.containerBlur();
        }
      }, 100);
    },
    containerBlur() {
      if (
        this.warehouse.packageCode == "" ||
        this.warehouse.materialCode == ""
      ) {
        return;
      }
      getContainerMaterial(this.warehouse).then((res) => {
        if (res.data == null || res.data.length == 0) {
          this.rescode = 400;
          this.resmessage = "暂无数据";
          this.$refs.resmodal.show = true;
          return;
        }
        this.warehouse.dutyCycle = res.data[0].dutyCycle || 0;
        //给所有的材料一个未选中的状态
        res.data.map((item) => {
          (item.checked = true), (item.unBindQuantity = "");
        });
        this.singlist.unshift(...res.data);
        this.ordersId = res.data[0].ordersId;
      });
    },
    //解绑数量失焦事件
    changeNum(option) {
      //判断是否勾选,如果勾选了,就要对数量校验
      if (!option.checked) {
        return;
      }
      if (option.unBindQuantity == "") {
        this.rescode = 400;
        this.resmessage = "解绑数量不能为空";
        this.$refs.resmodal.show = true;
      }
      if (option.unBindQuantity <= 0) {
        this.rescode = 400;
        this.resmessage = "解绑数量必须大于0";
        this.$refs.resmodal.show = true;
      }
      if (option.unBindQuantity > option.quantity) {
        this.rescode = 400;
        this.resmessage = "解绑数量不能大于库存数量";
        this.$refs.resmodal.show = true;
      }
      if (this.detailable) {
        let filterHas = this.singlist.filter(
          (item) => item.unBindQuantity == Number(item.quantity)
        );
        if (filterHas.length > 0) {
          this.warehouse.exitNumber =
            this.warehouse.useNumber - filterHas.length;
        }
      }
    },
    //确认解绑
    submit() {
      const filterArr = this.singlist.filter((item) => item.checked);
      if (filterArr.length <= 0) {
        this.rescode = 400;
        this.resmessage = "请选择解绑的物料!";
        this.$refs.resmodal.show = true;
        return;
      }
      //判断选中的里面是否存在解绑的数量不符合规范的
      // const index = filterArr.findIndex(item => item.unBindQuantity == '' || item.unBindQuantity <= 0 || item.unBindQuantity > item.quantity)
      // if (index > -1) {
      //    this.rescode = 400
      //    this.resmessage = '解绑数量不符合要求'
      //    this.$refs.resmodal.show = true
      //    return
      // }
      const warehousOrderDetails = filterArr.reduce((curr, item) => {
        curr.push({
          ...item,
        });
        return curr;
      }, []);
      const params = {
        flag: 3, //3:物料解绑
        packageCode: this.warehouse.packageCode,
        orderDetails: warehousOrderDetails,
      };
      uni.showModal({
        title: "解绑",
        content: "是否确认解绑?",
        showCancel: true,
        cancelColor: "#333333",
        success: (res) => {
          if (res.confirm) {
            unbindOrder(params).then((res) => {
              this.rescode = 200;
              this.$refs.resmodal.show = true;
              this.resmessage = "解绑成功";
              this.back();
            });
          } else if (res.cancel) {
          }
        },
      });
    },
    rest() {},
    //检查容器栅格数
    checkGrid() {},
    //获取容器的信息
@@ -587,9 +243,9 @@
      if (param == 1) {
        this.warehouse.upi = "";
      }
      if (this.warehouse.packageCode == "") {
      if (!this.warehouse.packageCode) {
        uni.showToast({
          title: "请扫容器编号",
          title: "请扫包装号",
          icon: "none",
          duration: 2000,
        });
@@ -599,79 +255,20 @@
        packageCode: this.warehouse.packageCode,
        upi: this.warehouse.upi,
      }).then((res) => {
        // //debugger
        const result = res.result;
        if (Array.isArray(result) && result.length == 0) {
          uni.showToast({
            title: "数据不存在",
            title: "没有查到数据",
            icon: "none",
            duration: 2000,
          });
          this.singlist = [];
          return;
          // this.kwbhAllowed = true
        }
        //容器编号入口
        // if (param == 1) {
        // }
        if (res.result && res.result.length == 1) {
          res.result[0].checked = true;
        }
        this.singlist = res.result;
        //物料入口 根据id 判断物料是否存在
        // res.result.forEach(item => {
        //    let index = this.singlist.findIndex(v => v.upi == item.upi);
        //    if (index == -1) {
        //       this.singlist.unshift({
        //          ...item
        //       })
        //    }
        // });
        this.singlist = result;
      });
    },
    onlyUpdateDutyCycleClick() {
      this.$refs.warehouseRef.setRules(this.warehouseRules);
      this.$refs.warehouseRef.validate((valid) => {
        if (valid) {
          //请求参数
          let params = {
            warepackageCode: this.warehouse.packageCode,
            dutyCycle: this.warehouse.dutyCycle,
          };
          uni.showModal({
            title: "提示",
            content: "是否确认仅更新空间占比数据?",
            showCancel: true,
            cancelColor: "#333333",
            success: (res) => {
              if (res.confirm) {
                onlyUpdateDutyCycle(params).then((res) => {
                  this.warhouseTph = this.warehouse.packageCode;
                  this.rescode = res.code;
                  this.resmessage = res.message;
                  this.$refs.resmodal.show = true;
                  this.rest();
                });
              } else if (res.cancel) {
              }
            },
          });
        }
      });
    },
    gridBtnClick() {
      this.gridable = !this.gridable;
      if (!this.gridable) {
        this.$nextTick(() => {
          this.gridFocus = true;
        });
      } else {
        this.$nextTick(() => {
          this.gridFocus = false;
        });
      }
    },
    //全部取消
    back() {
      this.ordersId = 0;
@@ -680,12 +277,7 @@
      this.warehouse.packageCode = "";
    },
  },
  unmounted() {
    if (this.timer) {
      clearTimeout(this.timer);
      this.timer = null;
    }
  },
};
</script>
<style lang="scss">