BUG
快乐的昕的电脑
2025-10-31 418f4a9b326e054bf052d967e329a106e42b92e0
components/machine.vue
@@ -9,7 +9,13 @@
      <!-- 中间状态部分,上下结构,包含调机流程的三个步骤 -->
      <view class="middle-section">
         <view class="item" style="height: 100px;">
            <h4>说明:调机开始时间需要手动确认</h4>
            <h4>
               <!--说明:
               1.点击'调机开始'、'送检呼叫'后再点击'保存生效'<br />
               2.主界面首检合格后再点击'保存生效'<br />
               3.首检不合格再点击'保存生效'会清空送检时间<br />
               4.清空送检时间后点击‘检验不合格重新送检呼叫’再保存-->
            </h4>
         </view>
         <view class="item">
            <!-- 调机开始按钮,maStartTime有值时禁用 -->
@@ -19,7 +25,7 @@
               调机开始
            </button>
            <!-- 显示调机开始时间 -->
            <input class="txt-inp" v-model="maStartTime" placeholder="点击按钮带出时间" disabled="true" />
            <input class="txt-inp" v-model="maStartTime" placeholder="点击按钮带出调机时间" disabled="true" />
         </view>
         <view class="item">
            <!-- 送检呼叫按钮,maShoutTime有值时禁用 -->
@@ -29,17 +35,17 @@
               送检呼叫
            </button>
            <!-- 显示送检呼叫时间 -->
            <input class="txt-inp" v-model="maShoutTime" placeholder="点击按钮带出时间" disabled="true" />
            <input class="txt-inp" v-model="maShoutTime" placeholder="点击按钮带出送检时间" disabled="true" />
         </view>
         <!--<view class="item">-->
            <!-- 调机完成按钮,maEndTime有值时禁用 -->
            <!--<button :class="maEndTime ? 'btn-disabled' : 'btn-blue'"
                  :disabled="!!maEndTime"
                  @click="handleMaEndTime">
               调机完成(=检验通过)
            </button>-->
            <!-- 显示调机完成时间 -->
            <!--<input class="txt-inp" v-model="maEndTime" placeholder="首次首检确认通过写入" disabled="true" />
         <!-- 调机完成按钮,maEndTime有值时禁用 -->
         <!--<button :class="maEndTime ? 'btn-disabled' : 'btn-blue'"
               :disabled="!!maEndTime"
               @click="handleMaEndTime">
            调机完成(=检验通过)
         </button>-->
         <!-- 显示调机完成时间 -->
         <!--<input class="txt-inp" v-model="maEndTime" placeholder="首次首检确认通过写入" disabled="true" />
         </view>-->
         <view class="item">
            <button class="btn-disabled" disabled>
@@ -47,6 +53,23 @@
            </button>
            <input class="txt-inp" v-model="maEndTime" placeholder="首次首检确认通过写入" disabled="true" />
         </view>
         <!--启用该功能-->
         <!--新增:检验不合格送检呼叫 按钮(功能与送检呼叫一样,仅在特定 remark 下可以点击)-->
         <view class="item">
            <!--检验不合格送检呼叫按钮,仅在 remark 为指定文本 且 当前无送检时间 时可点击-->
            <button :class="canFailResend ? 'btn-blue' : 'btn-disabled'"
                  :disabled="!canFailResend"
                  @click="ReHandleMaShoutTime">
               检验不合格重新送检呼叫
            </button>
            <!--仍复用同一送检时间字段,避免重复状态-->
            <input class="txt-inp"
                  v-model="maShoutTime"
                  placeholder="首检不合格重新呼叫时点击按钮带出送检时间"
                  disabled="true" />
         </view>
      </view>
      <!-- 底部保存/取消按钮 -->
@@ -73,8 +96,17 @@
            maShoutTime: '',   // 送检呼叫时间
            maStartTime: '',   // 调机开始时间
            maEndTime: '',     // 调机完成时间
            statusForm: {},    // 工单状态表单数据
            statusForm: {},    // 工单状态表单数据(包含 remark 字段)
            flag: -1,          // 操作标记
            failedRemark: '首检不合格,送检时间已清空,请重新送检呼叫生成新的首检单' // 首检不合格后由后端返回的提示
         }
      },
      computed: {
         // 满足首检不合格重新呼叫条件且当前尚未重新生成送检时间 => 按钮可用
         canFailResend() {
            return this.statusForm &&
               this.statusForm.remark === this.failedRemark &&
               !this.maShoutTime;
         }
      },
      created() {
@@ -89,12 +121,19 @@
         handleMaStartTime() {
            if (!this.maStartTime) {
               this.setMaStartTime();
               this.flag = -1; // 调机开始按钮按下时回传的flag=-1
            }
         },
         // 处理送检呼叫按钮点击
         // 处理送检呼叫按钮点击(不含首检不合格重呼叫)
         handleMaShoutTime() {
            if (!this.maShoutTime) {
               this.stateCheck(1);
            }
         },
         // 首检不合格重呼叫:flag = 2
         ReHandleMaShoutTime() {
            if (!this.maShoutTime && this.canFailResend) {
               this.stateCheck(2);
            }
         },
         // 处理调机完成按钮点击
@@ -112,17 +151,18 @@
            console.log('调机完成按钮被点击');
            this.maEndTime = this.$getDate('yyyy-mm-dd hh24:mi:ss');
         },
         // 刷新工单数据
         // 刷新工单数据(局部刷新当前组件)
         refresh() {
            this.findByOrderId();
         },
         // 保存并生效,将时间等信息提交到后端
         // 变更:返回 Promise;成功后局部刷新(调用 findByOrderId)而不是整页 reload
         save() {
            if (!this.statusForm.id) {
               this.$showMessage("id为空,不允许推送");
               return;
               return Promise.resolve();
            }
            this.$post({
            return this.$post({
               url: "/MesOrderSta/ChangeMachineTime",
               data: {
                  maStartTime: this.maStartTime,
@@ -134,14 +174,22 @@
                  flag: this.flag
               }
            }).then(res => {
               if (res.data.tbBillList) {
               if (res && res.data && res.data.tbBillList) {
                  this.$showMessage("呼叫成功");
                  // 局部刷新:重新拉取当前工单状态并更新当前组件数据
                  this.findByOrderId();
                  // 如果需要在保存后关闭对话框或返回上一级,可在这里处理
               } else {
                  this.$showMessage("呼叫失败");
                  this.cancel();
               }
            })
               return res;
            }).catch(err => {
               // 保持友好的错误提示并将错误抛出以便外部链式处理
               console.error('保存失败:', err);
               this.$showMessage("保存时发生错误");
               throw err;
            });
         },
         // 取消操作,恢复为上次保存的数据
         cancel() {
@@ -150,16 +198,22 @@
            this.maEndTime = this.statusForm.maEndTime;
         },
         // 送检呼叫,item=1时设置送检呼叫时间
         // 送检呼叫与重新送检呼叫以及调机开始对应的 flag 值
         // flag 说明:-1 = 调机开始;1 = 首次送检呼叫;2 = 不合格重新送检呼叫
         stateCheck(item) {
            switch (item) {
               case 0:
                  break;
               case 1:
               case 1:// 首次送检呼叫
                  this.maShoutTime = this.$getDate('yyyy-mm-dd hh24:mi:ss');
                  this.flag = -1; // 送检呼叫有值后,flag始终为-1
                        this.refresh(); // 刷新界面
                  //this.flag = -1; // 送检呼叫有值后,flag始终为-1
                  break;
               case 2:
               case 2:// 检验不合格重新送检呼叫
                  this.maShoutTime = this.$getDate('yyyy-mm-dd hh24:mi:ss');
                  //this.flag = -1; // 送检呼叫有值后,flag始终为-1
                  break;
               default:
                  // 其它值不处理
                  break;
            }
            this.flag = item;
@@ -179,7 +233,17 @@
               this.maEndTime = res.data.tbBillList.maEndTime;
            })
         }
      }
      },
      mounted() {
         // 页面加载时,启动定时器,每隔5分钟自动保存(当前示例使用 30s,可改回 5 分钟)
         this.autoSaveTimer = setInterval(() => {
            this.save(); // 直接调用已有的保存方法(save 已返回 Promise)
         }, 1 * 30 * 1000); // 30秒
      },
      beforeDestroy() {
         // 页面卸载时清理定时器
         clearInterval(this.autoSaveTimer);
      },
   };
</script>