yyb
2025-08-12 66a4579ac674f0f3958f2f365718c34e3bac49da
pages/wareHouse/nuclearScale/createwriteoffform.vue
@@ -2,117 +2,267 @@
   <!-- 核磅录入 -->
   <div class="page">
      <view class="packing-registration-bg" />
      <u-navbar title="核磅录入" :background="background" :border-bottom="false" :title-bold="true" title-color="#000"
         back-icon-color="#000" />
      <u-form :model="form" ref="uForm" :label-width="210" labelAlign="left" :rules="rules" :error-type="['toast']"
         class="uForm">
         <u-form-item label="产品类型:" :border-bottom="false" prop="productType">
            <u-radio-group v-model="form.productType" @change="handleProductTypeChange">
               <u-radio name="1">导体</u-radio>
               <u-radio name="2">铜杆</u-radio>
               <u-radio name="3">导体2.6</u-radio>
    <u-navbar
      title="核磅录入"
      :background="background"
      :border-bottom="false"
      :title-bold="true"
      title-color="#000"
      back-icon-color="#000"
    />
    <u-form
      :model="form"
      ref="uForm"
      :label-width="235"
      labelAlign="left"
      :rules="rules"
      :error-type="['toast']"
      class="uForm"
    >
      <u-form-item
        label="产品类型:"
        :border-bottom="false"
        prop="productType"
        style="font-size: small"
      >
        <u-radio-group
          v-model="form.productType"
          @change="handleProductTypeChange"
          style="font-size: small"
        >
          <u-radio name="DT01">导体</u-radio>
          <u-radio name="TG01">铜杆</u-radio>
          <u-radio name="DT02">导体2.6</u-radio>
            </u-radio-group>
         </u-form-item>
         <u-form-item label="替换二维码:" :border-bottom="false" prop="replace">
            <u-radio-group v-model="form.replace">
      <u-form-item
        label="替换二维码:"
        :border-bottom="false"
        prop="replace"
        style="font-size: small"
      >
        <u-radio-group v-model="form.replace" style="font-size: small">
               <u-radio name="1">是</u-radio>
               <u-radio name="0">否</u-radio>
            </u-radio-group>
         </u-form-item>
         <u-form-item label="车牌号:" :border-bottom="false" prop="licensePlate">
            <u-input v-model="form.licensePlate" type="select" placeholder="请输入车牌号" @click="lpn" />
      <u-form-item
        label="车牌号:"
        :border-bottom="false"
        prop="licensePlate"
        style="font-size: small"
      >
        <u-input
          v-model="form.licensePlate"
          type="select"
          placeholder="请输入车牌号"
          @click="lpn"
        />
         </u-form-item>
         <u-form-item label="客户名称1:" :border-bottom="false" prop="customerName1">
            <picker class="item-one item-two" style="width: 100%; text-align: right"
               @change="selClientChange($event, selClientList, 'customerName1')" :value="selClientIndex1"
               :range="selClientList" range-key="label">
      <u-form-item
        label="客户名称1:"
        :border-bottom="false"
        prop="customerName1"
        style="font-size: small"
      >
        <picker
          class="item-one item-two"
          style="width: 100%; text-align: right"
          @change="selClientChange($event, selClientList, 'customerName1')"
          :value="selClientIndex1"
          :range="selClientList"
          range-key="label"
        >
               <view>
                  <text :style="{
            <text
              :style="{
                color: selClientIndex1 == null ? '#a5abb4' : '#0c0c0c',
              }">{{
              }"
              >{{
                selClientIndex1 == null
                  ? "请选择"
                  : selClientList[selClientIndex1].label
              }}</text>
              }}</text
            >
               </view>
            </picker>
            <u-icon v-if="selClientIndex1 == null" name="arrow-right" color="#687792" size="28"></u-icon>
        <u-icon
          v-if="selClientIndex1 == null"
          name="arrow-right"
          color="#687792"
          size="28"
        ></u-icon>
         </u-form-item>
         <u-form-item label="发货通知单号1:" :border-bottom="false" prop="shippingNoticeNo1">
      <u-form-item
        label="发货通知单号1:"
        :border-bottom="false"
        prop="shippingNoticeNo1"
        style="font-size: small"
      :label-width="245"
      >
            <u-input v-model="form.shippingNoticeNo1" placeholder="" disabled />
         </u-form-item>
         <u-form-item label="客户名称2:" :border-bottom="false" prop="customerName2">
            <picker class="item-one item-two" style="width: 100%; text-align: right"
               @change="selClientChange($event, selClientList, 'customerName2')" :value="selClientIndex2"
               :range="selClientList" range-key="label">
      <u-form-item
        label="客户名称2:"
        :border-bottom="false"
        prop="customerName2"
        style="font-size: small"
      >
        <picker
          class="item-one item-two"
          style="width: 100%; text-align: right"
          @change="selClientChange($event, selClientList, 'customerName2')"
          :value="selClientIndex2"
          :range="selClientList"
          range-key="label"
        >
               <view>
                  <text :style="{
            <text
              :style="{
                color: selClientIndex2 == null ? '#a5abb4' : '#0c0c0c',
              }">{{
              }"
              >{{
                selClientIndex2 == null
                  ? "请选择"
                  : selClientList[selClientIndex2].label
              }}</text>
              }}</text
            >
               </view>
            </picker>
            <u-icon v-if="selClientIndex2 == null" name="arrow-right" color="#687792" size="28"></u-icon>
        <u-icon
          v-if="selClientIndex2 == null"
          name="arrow-right"
          color="#687792"
          size="28"
        ></u-icon>
         </u-form-item>
         <u-form-item label="发货通知单号2:" :border-bottom="false" prop="shippingNoticeNo2">
      <u-form-item
        label="发货通知单号2:"
        :border-bottom="false"
        prop="shippingNoticeNo2"
        style="font-size: small"
      :label-width="245"
      >
            <u-input v-model="form.shippingNoticeNo2" placeholder="" disabled />
         </u-form-item>
         <u-form-item label="生产车间:" :border-bottom="false" prop="workshop">
            <picker class="item-one item-two" style="width: 100%; text-align: right"
               @change="workshopChange($event, workshopList)" :value="workshopIndex" :range="workshopList"
               range-key="label" :disabled="!form.productType">
      <u-form-item
        label="生产车间:"
        :border-bottom="false"
        prop="workshop"
        style="font-size: small"
      >
        <picker
          class="item-one item-two"
          style="width: 100%; text-align: right"
          @change="workshopChange($event, workshopList)"
          :value="workshopIndex"
          :range="workshopList"
          range-key="label"
          :disabled="!form.productType"
        >
               <view>
                  <text :style="{ color: workshopIndex == null ? '#a5abb4' : '#0c0c0c' }">{{
            <text
              :style="{ color: workshopIndex == null ? '#a5abb4' : '#0c0c0c' }"
              >{{
                workshopIndex == null
                  ? "请选择"
                  : workshopList[workshopIndex].label
              }}</text>
              }}</text
            >
               </view>
            </picker>
            <u-icon v-if="workshopIndex == null" name="arrow-right" color="#687792" size="28"></u-icon>
        <u-icon
          v-if="workshopIndex == null"
          name="arrow-right"
          color="#687792"
          size="28"
        ></u-icon>
         </u-form-item>
         <u-form-item label="司磅员:" :border-bottom="false" prop="weighingOperator">
            <picker class="item-one item-two" style="width: 100%; text-align: right"
               @change="weighmanChange($event, weighmanList)" :value="weighmanIndex" :range="weighmanList"
               range-key="label">
      <u-form-item
        label="司磅员:"
        :border-bottom="false"
        prop="weighingOperator"
        style="font-size: small"
      >
        <picker
          class="item-one item-two"
          style="width: 100%; text-align: right"
          @change="weighmanChange($event, weighmanList)"
          :value="weighmanIndex"
          :range="weighmanList"
          range-key="label"
        >
               <view>
                  <text :style="{ color: weighmanIndex == null ? '#a5abb4' : '#0c0c0c' }">{{
            <text
              :style="{ color: weighmanIndex == null ? '#a5abb4' : '#0c0c0c' }"
              >{{
                weighmanIndex == null
                  ? "请选择"
                  : weighmanList[weighmanIndex].label
              }}</text>
              }}</text
            >
               </view>
            </picker>
            <u-icon v-if="weighmanIndex == null" name="arrow-right" color="#687792" size="28"></u-icon>
        <u-icon
          v-if="weighmanIndex == null"
          name="arrow-right"
          color="#687792"
          size="28"
        ></u-icon>
         </u-form-item>
         <u-form-item label="叉车工:" :border-bottom="false" prop="forkliftOperator">
            <u-input v-model="form.forkliftOperator" type="select" placeholder="请选择"
               @click="openForkliftDriverList" />
      <u-form-item
        label="叉车工:"
        :border-bottom="false"
        prop="forkliftOperator"
        style="font-size: small"
      >
        <u-input
          v-model="form.forkliftOperator"
          type="select"
          placeholder="请选择"
          @click="openForkliftDriverList"
        />
         </u-form-item>
      </u-form>
      <u-button type="primary" class="bottom-button1" @click="submit">创建</u-button>
    <u-button type="primary" class="bottom-button1" @click="submit"
      >创建</u-button
    >
      <!--车牌号 -->
      <modalBg ref="modalBg" :confirm="confirm">
         <u-field v-model="form.licensePlate" label="车牌号:" placeholder="请输入" :border-bottom="false">
      <u-field
        v-model="form.licensePlate"
        label="车牌号:"
        placeholder="请输入"
        :border-bottom="false"
      >
         </u-field>
      </modalBg>
      <!-- 叉车工 -->
      <u-modal v-model="showModal" title="" :show-cancel-button="true" :show-confirm-button="true"
         @confirm="confirmSelection" @cancel="cancel">
    <u-modal
      v-model="showModal"
      title=""
      :show-cancel-button="true"
      :show-confirm-button="true"
      @confirm="confirmSelection"
      @cancel="cancel"
    >
    <scroll-view scroll-y="true" style="height: 100%; transform: translateZ(0); -webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;"></scroll-view>
         <view class="popup-content">
            <view class="popup-header">
               <checkbox-group @change="checkboxChange">
                  <label class="checkbox-item" v-for="(item, index) in checkboxList" :key="index">
            <label
              class="checkbox-item"
              v-for="(item, index) in checkboxList"
              :key="index"
            >
                     <checkbox :value="item.value" :checked="item.checked" />
                     <text class="label">{{ item.label }}</text>
                  </label>
               </checkbox-group>
            </view>
         </view>
    <scroll-view/>
      </u-modal>
   </div>
</template>
@@ -136,49 +286,61 @@
            show: false,
            num: 1,
            form: {
               replace: '0',
               productType: '',
               licensePlate: '',
               customerName1: '',
               shippingNoticeNo1: '',
               customerName2: '',
               shippingNoticeNo2: '',
               workshop: '',
               weighingOperator: '',
               forkliftOperator: '',
        replace: "0",
        productType: "",
        licensePlate: "",
        customerName1: "",
        shippingNoticeNo1: "",
        customerName2: "",
        shippingNoticeNo2: "",
        workshop: "",
        weighingOperator: "",
        forkliftOperator: "",
            },
            rules: {
               productType: [{
        productType: [
          {
                  required: true,
                  message: "请选择产品类型",
                  trigger: ["change"],
               }, ],
               replace: [{
          },
        ],
        replace: [
          {
                  required: true,
                  message: "请选择是否替换二维码",
                  trigger: ["change", "blur"],
               }, ],
               licensePlate: [{
          },
        ],
        licensePlate: [
          {
                  required: true,
                  message: "请输入车牌号",
                  trigger: ["change", "blur"],
               }, ],
               workshop: [{
          },
        ],
        workshop: [
          {
                  required: true,
                  message: "请选择生产车间",
                  trigger: ["change"],
               }, ],
               weighingOperator: [{
          },
        ],
        weighingOperator: [
          {
                  required: true,
                  message: "请选择司磅员",
                  trigger: ["change"],
               }, ],
               forkliftOperator: [{
          },
        ],
        forkliftOperator: [
          {
                  type: "string",
                  required: true,
                  message: "请至少选择一个叉车工",
                  trigger: ["change"],
               }, ],
          },
        ],
            },
            // 客户名称
            selClientList: [],
@@ -192,9 +354,9 @@
            weighmanIndex: null,
            showModal: false,
            selectedItems: [],
            id1: '',
            id2: '',
            isSubmitting: false
      id1: "",
      id2: "",
      isSubmitting: false,
         };
      },
      onReady() {
@@ -216,24 +378,24 @@
      onShow() {
         // 重置表单数据
         this.form = {
            replace: '0',
            productType: '',
            licensePlate: '',
            customerName1: '',
            shippingNoticeNo1: '',
            customerName2: '',
            shippingNoticeNo2: '',
            workshop: '',
            weighingOperator: '',
            forkliftOperator: '',
      replace: "0",
      productType: "",
      licensePlate: "",
      customerName1: "",
      shippingNoticeNo1: "",
      customerName2: "",
      shippingNoticeNo2: "",
      workshop: "",
      weighingOperator: "",
      forkliftOperator: "",
         };
         this.selClientIndex1 = null;
         this.selClientIndex2 = null;
         this.workshopIndex = null;
         this.weighmanIndex = null;
         this.checkboxList = this.checkboxList.map(item => ({
    this.checkboxList = this.checkboxList.map((item) => ({
            ...item,
            checked: false
      checked: false,
         }));
         this.$refs.uForm && this.$refs.uForm.resetValidation();
      },
@@ -242,30 +404,32 @@
          * 获取客户列表
          */
         fetchClients() {
            this.$u.api.NuclearScaleEntry.selClient().then((res) => {
               console.log('客户名称', res)
      this.$u.api.NuclearScaleEntry.selClient()
        .then((res) => {
          console.log("客户名称", res);
               if (res.code === 0) {
                  res.data.forEach((i) => {
                     const obj = Object.assign({
                        label: i.customerName,
                        value: i.customerName,
                        shippingNoticeNo: i.shippingNoticeNo,
                        id: i.id
                id: i.id,
                     });
                     this.selClientList.push(obj);
                  });
               } else {
                  uni.showToast({
                     title: res.msg || '获取客户名称失败',
                     icon: 'none'
              title: res.msg || "获取客户名称失败",
              icon: "none",
                  });
               }
            }).catch(err => {
        })
        .catch((err) => {
               uni.showToast({
                  title: '网络错误,获取客户名称失败',
                  icon: 'none'
            title: "网络错误,获取客户名称失败",
            icon: "none",
               });
               console.error('获取客户名称错误:', err);
          console.error("获取客户名称错误:", err);
            });
         },
@@ -273,29 +437,32 @@
          * 获取车间列表
          */
         fetchWorkshops() {
            this.$u.api.dictData({
               dictType: 'workshop'
            }).then(res => {
      this.$u.api
        .dictData({
          dictType: "workshop",
        })
        .then((res) => {
               if (res.code === 0 && res.data.length > 0) {
                  res.data.forEach(i => {
            res.data.forEach((i) => {
                     const obj = Object.assign({
                        label: i.label,
                        value: i.value,
                     })
                     this.workshopList.push(obj)
                  })
              });
              this.workshopList.push(obj);
            });
               } else {
                  uni.showToast({
                     title: res.msg || '获取车间列表失败',
                     icon: 'none'
              title: res.msg || "获取车间列表失败",
              icon: "none",
                  });
               }
            }).catch(err => {
        })
        .catch((err) => {
               uni.showToast({
                  title: '网络错误,获取车间列表失败',
                  icon: 'none'
            title: "网络错误,获取车间列表失败",
            icon: "none",
               });
               console.error('获取车间列表错误:', err);
          console.error("获取车间列表错误:", err);
            });
         },
@@ -303,29 +470,32 @@
          * 获取叉车工列表
          */
         fetchForkliftOperators() {
            this.$u.api.dictData({
               dictType: 'forklift'
            }).then(res => {
      this.$u.api
        .dictData({
          dictType: "forklift",
        })
        .then((res) => {
               if (res.code === 0 && res.data.length > 0) {
                  res.data.forEach(i => {
            res.data.forEach((i) => {
                     const obj = Object.assign({
                        label: i.label,
                        value: i.label,
                     })
                     this.checkboxList.push(obj)
                  })
              });
              this.checkboxList.push(obj);
            });
               } else {
                  uni.showToast({
                     title: res.msg || '获取叉车工列表失败',
                     icon: 'none'
              title: res.msg || "获取叉车工列表失败",
              icon: "none",
                  });
               }
            }).catch(err => {
        })
        .catch((err) => {
               uni.showToast({
                  title: '网络错误,获取叉车工列表失败',
                  icon: 'none'
            title: "网络错误,获取叉车工列表失败",
            icon: "none",
               });
               console.error('获取叉车工列表错误:', err);
          console.error("获取叉车工列表错误:", err);
            });
         },
@@ -333,29 +503,32 @@
          * 获取司磅员列表
          */
         fetchWeighmen() {
            this.$u.api.dictData({
               dictType: 'weighing'
            }).then(res => {
      this.$u.api
        .dictData({
          dictType: "weighing",
        })
        .then((res) => {
               if (res.code === 0 && res.data.length > 0) {
                  res.data.forEach(i => {
            res.data.forEach((i) => {
                     const obj = Object.assign({
                        label: i.label,
                        value: i.label,
                     })
                     this.weighmanList.push(obj)
                  })
              });
              this.weighmanList.push(obj);
            });
               } else {
                  uni.showToast({
                     title: res.msg || '获取司磅员列表失败',
                     icon: 'none'
              title: res.msg || "获取司磅员列表失败",
              icon: "none",
                  });
               }
            }).catch(err => {
        })
        .catch((err) => {
               uni.showToast({
                  title: '网络错误,获取司磅员列表失败',
                  icon: 'none'
            title: "网络错误,获取司磅员列表失败",
            icon: "none",
               });
               console.error('获取司磅员列表错误:', err);
          console.error("获取司磅员列表错误:", err);
            });
         },
         // 复选框变化事件
@@ -375,7 +548,7 @@
            this.form.forkliftOperator = this.checkboxList
               .filter((item) => item.checked)
               .map((item) => item.label)
               .join(',');
        .join(",");
         },
         cancel() {},
         openForkliftDriverList() {
@@ -394,15 +567,15 @@
            // 检查是否选择了相同的客户
            if (code === "customerName1" && this.selClientIndex2 === selectedIndex) {
               uni.showToast({
                  title: '不能选择相同的客户',
                  icon: 'none'
          title: "不能选择相同的客户",
          icon: "none",
               });
               return;
            }
            if (code === "customerName2" && this.selClientIndex1 === selectedIndex) {
               uni.showToast({
                  title: '不能选择相同的客户',
                  icon: 'none'
          title: "不能选择相同的客户",
          icon: "none",
               });
               return;
            }
@@ -417,7 +590,7 @@
               this.selClientIndex1 = selectedIndex;
               this.form.customerName1 = selectedCustomer.label;
               this.form.shippingNoticeNo1 = selectedCustomer.shippingNoticeNo;
               this.id1 = selectedCustomer.id
        this.id1 = selectedCustomer.id;
            }
         },
         // 生产车间
@@ -430,24 +603,24 @@
            const productType = this.form.productType;
            const selectedWorkshop = storage[e.target.value];
            // 检查产品类型是否为铜杆(值为2)
            if (productType === '2') {
      // 检查产品类型是否为铜杆(值为TG01)
      if (productType === "TG01") {
               // 铜杆只能选择铜杆相关车间
               if (!selectedWorkshop.label.includes('铜杆')) {
        if (!selectedWorkshop.label.includes("铜杆")) {
                  uni.showModal({
                     title: "提示",
                     content: "铜杆产品只能选择铜杆相关车间",
                     showCancel: false
            showCancel: false,
                  });
                  return;
               }
            } else {
               // 导体产品不能选择铜杆车间
               if (selectedWorkshop.label.includes('铜杆')) {
        if (selectedWorkshop.label.includes("铜杆")) {
                  uni.showModal({
                     title: "提示",
                     content: "导体产品不能选择铜杆车间",
                     showCancel: false
            showCancel: false,
                  });
                  return;
               }
@@ -476,7 +649,7 @@
          */
         handleProductTypeChange() {
            this.workshopIndex = null;
            this.form.workshop = '';
      this.form.workshop = "";
         },
         // 提交按钮
         async submit() {
@@ -484,11 +657,11 @@
            try {
               // 统一表单验证
               if (!await this.validateForm()) return;
        if (!(await this.validateForm())) return;
               // 构建提交数据
               const submitData = this.buildSubmitData().customerList;
               console.log('提交的数据',submitData)
        console.log("提交的数据", submitData);
               this.isSubmitting = true;
               const res = await this.$u.api.NuclearScaleEntry.createMain(submitData);
@@ -497,29 +670,29 @@
                  uni.navigateBack();
               } else {
                  uni.showToast({
                     title: res.msg || '提交失败:业务处理错误',
                     icon: 'none'
            title: res.msg || "提交失败:业务处理错误",
            icon: "none",
                  });
                  console.error('业务错误:', res);
          console.error("业务错误:", res);
               }
            } catch (err) {
               if (err.type === 'validation') {
        if (err.type === "validation") {
                  uni.showToast({
                     title: err.message,
                     icon: 'none'
            icon: "none",
                  });
               } else if (err.message.includes('Network Error')) {
        } else if (err.message.includes("Network Error")) {
                  uni.showToast({
                     title: '网络连接错误,请检查网络后重试',
                     icon: 'none'
            title: "网络连接错误,请检查网络后重试",
            icon: "none",
                  });
               } else {
                  uni.showToast({
                     title: '系统错误,请稍后重试',
                     icon: 'none'
            title: "系统错误,请稍后重试",
            icon: "none",
                  });
               }
               console.error('提交表单错误:', err);
        console.error("提交表单错误:", err);
            } finally {
               this.isSubmitting = false;
            }
@@ -528,13 +701,13 @@
         // 统一表单验证
         async validateForm() {
            // 使用uView表单验证
            if (!await this.$refs.uForm.validate()) {
      if (!(await this.$refs.uForm.validate())) {
               return false;
            }
            // 客户名称验证
            if (!this.form.customerName1 || !this.form.customerName2) {
               throw { type: 'validation', message: '请先选择客户名称' };
        throw { type: "validation", message: "请先选择客户名称" };
            }
            return true;
@@ -559,7 +732,7 @@
            const customerList = [1, 2].map(createCustomerItem);
            return {
               customerList
        customerList,
            };
         },
      },
@@ -592,7 +765,7 @@
   .confirm-btn {
      color: #007aff;
      font-size: 28rpx;
  font-size: small;
   }
   /* 复选框样式 */
@@ -619,13 +792,13 @@
   }
   .item-one {
      font-size: 30rpx;
  font-size: small;
      color: #0c0c0c;
      margin-right: 6rpx;
   }
   .item-two {
      font-size: 30rpx;
  font-size: small;
      color: #a5abb4;
      margin-right: 6rpx;
   }