快乐的昕的电脑
2025-10-24 9b4ce4eca59637f3abab92333b4b32b92013c696
components/machine.vue
@@ -1,58 +1,80 @@
<template>
   <view class="page">
      <!--调机送检-->
      <!-- 右上角刷新按钮 -->
      <view class="top-right">
         <button class="refresh-btn" @click="refresh">刷新</button>
      </view>
      <!-- 中间状态部分,上下结构 -->
      <!--<view class="middle-section">
      <view class="item" style="height: 100px;">
         <h4>说明:调机开始时间需要手动确认</h4>
      </view>
      <view class="item" v-if="!maStartTime">
         <button class="btn-blue" @click="setMaStartTime">调机开始(=换模完成)</button>
         <input class="txt-inp" v-model="maStartTime" placeholder="点击按钮带出时间" disabled="true" />
      </view>
      <view class="item" v-else>
         <button class="btn-disabled">调机开始(=换模完成)</button>
         <input class="txt-inp" v-model="maStartTime" placeholder="点击按钮带出时间" disabled="true" />
      </view>
      <view class="item" v-if="!maShoutTime">
         <button @click="stateCheck(1)" class="btn-blue">送检呼叫(点击按钮|清零机台面板数)</button>
         <input class="txt-inp" v-model="maShoutTime" placeholder="点击按钮带出时间" disabled="true" />
      </view>
      <view class="item" v-else>
         <button class="btn-disabled">送检呼叫(点击按钮|清零机台面板数)</button>
         <input class="txt-inp" v-model="maShoutTime" placeholder="点击按钮带出时间" disabled="true" />
      </view>
      <view class="item">
         <button class="btn-disabled">调机完成(=检验通过)</button>
         <input class="txt-inp" v-model="maEndTime" placeholder="首次首检确认通过写入" disabled="true" />
      </view>
   </view>-->
      <!-- 中间状态部分,上下结构 -->
      <!-- 中间状态部分,上下结构,包含调机流程的三个步骤 -->
      <view class="middle-section">
         <view class="item" style="height: 100px;">
            <h4>说明:调机开始时间需要手动确认</h4>
            <h4>
               说明:1.点击'调机开始'后再点击'保存生效' 2.点击'送检呼叫'后再点击'保存生效'<br />
               3.主界面首检合格后再点击'保存生效'<br />
               4.首检不合格再点击'保存生效'会清空送检时间
            </h4>
         </view>
         <view class="item">
            <button class="btn-blue" @click="setMaStartTime">调机开始(=换模完成)</button>
            <input class="txt-inp" v-model="maStartTime" placeholder="点击按钮带出时间" disabled="true" />
            <!-- 调机开始按钮,maStartTime有值时禁用 -->
            <button :class="maStartTime ? 'btn-disabled' : 'btn-blue'"
                  :disabled="!!maStartTime"
                  @click="handleMaStartTime">
               调机开始
            </button>
            <!-- 显示调机开始时间 -->
            <input class="txt-inp" v-model="maStartTime" placeholder="点击按钮带出调机时间" disabled="true" />
         </view>
         <view class="item">
            <button @click="stateCheck(1)" class="btn-blue">送检呼叫(点击按钮|清零机台面板数)</button>
            <input class="txt-inp" v-model="maShoutTime" placeholder="点击按钮带出时间" disabled="true" />
            <!-- 送检呼叫按钮,maShoutTime有值时禁用 -->
            <button :class="maShoutTime ? 'btn-disabled' : 'btn-blue'"
                  :disabled="!!maShoutTime"
                  @click="handleMaShoutTime">
               送检呼叫
            </button>
            <!-- 显示送检呼叫时间 -->
            <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" />
         </view>-->
         <view class="item">
            <button class="btn-disabled">调机完成(=检验通过)</button>
            <button class="btn-disabled" disabled>
               调机完成(=检验通过=开工)
            </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>
      <!-- 底部保存/取消按钮 -->
      <view class="bottom-section">
         <!-- 只有调机完成未填写时才可保存 -->
         <button class="save-btn" v-if="!maEndTime" @click="save">保存并生效</button>
         <!-- <button class="save-btn" @click="save">保存并生效</button> -->
         <!-- 已完成时保存按钮禁用 -->
         <button class="btn-disabled" v-else>保存并生效</button>
         <button class="cancel-btn" @click="cancel">取消</button>
      </view>
@@ -63,75 +85,86 @@
<script>
   export default {
      props: {
         orderNo: String,
         orderId: Number,
         machineNo: String
         orderNo: String,    // 工单号
         orderId: Number,    // 工单ID
         machineNo: String   // 机台号
      },
      data() {
         return {
            maShoutTime: '',
            maStartTime: '',
            maEndTime: '',
            statusForm: {},
            flag: -1,
            maShoutTime: '',   // 送检呼叫时间
            maStartTime: '',   // 调机开始时间
            maEndTime: '',     // 调机完成时间
            statusForm: {},    // 工单状态表单数据(包含 remark 字段)
            flag: -1,          // 操作标记
            failedRemark: '首检不合格,送检时间已清空,请重新送检呼叫生成新的首检单' // 首检不合格后由后端返回的提示
         }
      },
      computed: {
         // 满足首检不合格重新呼叫条件且当前尚未重新生成送检时间 => 按钮可用
         canFailResend() {
            return this.statusForm &&
               this.statusForm.remark === this.failedRemark &&
               !this.maShoutTime;
         }
      },
      created() {
         // let machine = uni.getStorageSync('machine');
         // let orderId = uni.getStorageSync('orderId');
         // let orderNo = uni.getStorageSync('orderNo');
         // if (orderId) {
         //    this.orderId = orderId;
         // } else {
         //    if (!this.orderId) {
         //       this.orderId = uni.getStorageSync('id');
         //    }
         // }
         // if (orderNo) {
         //    this.orderNo = orderNo;
         // } else {
         //    if (!this.orderNo) {
         //       this.orderNo = uni.getStorageSync('daa001');
         //    }
         // }
         // if (machine) {
         //    this.machineNo = machine;
         // } else {
         //    if (!this.machineNo) {
         //       this.machineNo = uni.getStorageSync('machineNo');
         //    }
         // }
         // 组件创建时自动加载工单数据
         if (!this.orderId && !this.orderNo) {
            return;
         }
         this.findByOrderId();
      },
      methods: {
            setMaStartTime() {
                this.maStartTime = this.$getDate('yyyy-mm-dd hh24:mi:ss');
            },
         refresh() {
            this.findByOrderId(); // This will reload the data for the current order
         // 处理调机开始按钮点击
         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);
                }
            },
         // 处理调机完成按钮点击
         handleMaEndTime() {
            if (!this.maEndTime) {
               this.setMaEndTime();
            }
         },
         // 设置调机开始时间为当前时间
         setMaStartTime() {
            this.maStartTime = this.$getDate('yyyy-mm-dd hh24:mi:ss');
         },
         // 设置调机完成时间为当前时间
         setMaEndTime() {
            console.log('调机完成按钮被点击');
            this.maEndTime = this.$getDate('yyyy-mm-dd hh24:mi:ss');
         },
         // 刷新工单数据
         refresh() {
            this.findByOrderId();
         },
         // 保存并生效,将时间等信息提交到后端
         save() {
            if (!this.statusForm.id) {
               this.$showMessage("id为空,不允许推送");
               return;
            }
            this.$post({
               url: "/MesOrderSta/ChangeMachineTime",
               data: {
                        maStartTime: this.maStartTime, // 新增调机时间
                  maStartTime: this.maStartTime,
                  maShoutTime: this.maShoutTime,
                  maEndTime: this.maEndTime,
                  id: this.statusForm.id,
                  orderId: this.orderId,
                  machineNo: this.machineNo,
@@ -147,21 +180,34 @@
               }
            })
         },
         // 取消操作,恢复为上次保存的数据
         cancel() {
            this.maShoutTime = this.statusForm.maShoutTime;
            this.maStartTime = this.statusForm.maStartTime;
            this.maEndTime = this.statusForm.maEndTime;
         },
         stateCheck(item) {
         // 送检呼叫,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
                  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;
         },
         // 根据工单号/ID获取工单状态数据
         findByOrderId() {
            this.$post({
               url: "/MesOrderSta/FindByOrderNo",
@@ -181,7 +227,7 @@
</script>
<style scoped>
   /* 页面撑满窗体 */
   /* 页面整体布局 */
   .page {
      padding: 2vh;
      display: flex;
@@ -191,6 +237,7 @@
      height: 100%;
   }
   /* 右上角刷新按钮 */
   .top-right {
      position: absolute;
      top: 10px;
@@ -207,25 +254,21 @@
      border-radius: 5px;
   }
   label {
      margin-right: 1vw;
      font-size: 1.6vw;
      /* Larger font for labels */
   }
   input {
      padding: 1vh;
      font-size: 1.5vw;
      /* Larger font size for inputs */
      border: 1px solid #ccc;
      width: 100%;
      /* Full width for inputs */
      margin-top: 1vh;
      box-sizing: border-box;
   }
   /* 中间状态部分,上下布局 */
   /* 中间状态部分布局 */
   .middle-section {
      display: flex;
      flex-direction: column;
@@ -241,10 +284,8 @@
   button {
      width: 100%;
      /* Full-width buttons */
      padding: 1.5vh;
      font-size: 1.5vw;
      /* Larger font size for buttons */
      border: none;
      text-align: center;
   }
@@ -265,10 +306,9 @@
      font-size: 14px;
      border: 1px solid #ccc;
      width: 100%;
      /* 输入框撑满宽度 */
   }
   /* 底部保存/取消按钮 */
   /* 底部保存/取消按钮布局 */
   .bottom-section {
      display: flex;
      justify-content: space-between;
@@ -278,12 +318,10 @@
   .save-btn,
   .cancel-btn {
      width: 48%;
      /* Half-width buttons */
      padding: 1.5vh;
      background-color: #00A2E9;
      color: white;
      font-size: 1.6vw;
      /* Larger font size for save/cancel buttons */
      border: none;
      text-align: center;
   }
@@ -292,9 +330,7 @@
      height: 8vh;
      padding: 1vh;
      font-size: 1.5vw;
      /* Increased font size for input fields in middle section */
      width: 100%;
      /* Full width for middle section inputs */
      box-sizing: border-box;
   }
</style>