Ver código fonte

自动结单过滤已存在MIS工单、故障信息快速检索

HD_wangm 3 meses atrás
pai
commit
a339cdb4c1

+ 72 - 32
ygtx-gxt/src/main/java/com/ygtx/gxt/task/OrderAutoFinalizeTask.java

@@ -86,25 +86,30 @@ public class OrderAutoFinalizeTask {
             if (misInfoList != null && misInfoList.size() == 1) {
                 GxtMisInfo mis = misInfoList.get(0);
                 if (mis.getWorkPermitNum() != null && !mis.getWorkPermitNum().isEmpty()) {
-                    // 查询工作负责人和工作组成员信息
-                    GxtWorkOrderPerson workOrderPerson = new GxtWorkOrderPerson();
-                    workOrderPerson.setMisNo(mis.getMisNo());
-                    personList = misInfoMapper.selectGxtWorkOrderPersonList(workOrderPerson);
+                    // 检查该MIS工单是否已在维修工单或维保工单中存在
+                    boolean misExistsInOrders = checkMisExistsInOrders(mis.getMisNo());
                     
-                    if (personList != null && !personList.isEmpty()) {
-                        boolean hasLeader = false;
-                        boolean hasMembers = false;
+                    if (!misExistsInOrders) {
+                        // 查询工作负责人和工作组成员信息
+                        GxtWorkOrderPerson workOrderPerson = new GxtWorkOrderPerson();
+                        workOrderPerson.setMisNo(mis.getMisNo());
+                        personList = misInfoMapper.selectGxtWorkOrderPersonList(workOrderPerson);
                         
-                        for (GxtWorkOrderPerson person : personList) {
-                            if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
-                                hasLeader = true;
-                            } else {
-                                hasMembers = true;
+                        if (personList != null && !personList.isEmpty()) {
+                            boolean hasLeader = false;
+                            boolean hasMembers = false;
+                            
+                            for (GxtWorkOrderPerson person : personList) {
+                                if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
+                                    hasLeader = true;
+                                } else {
+                                    hasMembers = true;
+                                }
+                            }
+                            
+                            if (hasLeader && hasMembers) {
+                                validMisInfo = mis;
                             }
-                        }
-                        
-                        if (hasLeader && hasMembers) {
-                            validMisInfo = mis;
                         }
                     }
                 }
@@ -236,25 +241,30 @@ public class OrderAutoFinalizeTask {
             if (misInfoList != null && misInfoList.size() == 1) {
                 GxtMisInfo mis = misInfoList.get(0);
                 if (mis.getWorkPermitNum() != null && !mis.getWorkPermitNum().isEmpty()) {
-                    // 查询工作负责人和工作组成员信息
-                    GxtWorkOrderPerson workOrderPerson = new GxtWorkOrderPerson();
-                    workOrderPerson.setMisNo(mis.getMisNo());
-                    personList = misInfoMapper.selectGxtWorkOrderPersonList(workOrderPerson);
+                    // 检查该MIS工单是否已在维修工单或维保工单中存在
+                    boolean misExistsInOrders = checkMisExistsInOrders(mis.getMisNo());
                     
-                    if (personList != null && !personList.isEmpty()) {
-                        boolean hasLeader = false;
-                        boolean hasMembers = false;
+                    if (!misExistsInOrders) {
+                        // 查询工作负责人和工作组成员信息
+                        GxtWorkOrderPerson workOrderPerson = new GxtWorkOrderPerson();
+                        workOrderPerson.setMisNo(mis.getMisNo());
+                        personList = misInfoMapper.selectGxtWorkOrderPersonList(workOrderPerson);
                         
-                        for (GxtWorkOrderPerson person : personList) {
-                            if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
-                                hasLeader = true;
-                            } else {
-                                hasMembers = true;
+                        if (personList != null && !personList.isEmpty()) {
+                            boolean hasLeader = false;
+                            boolean hasMembers = false;
+                            
+                            for (GxtWorkOrderPerson person : personList) {
+                                if (person.getIsLeader() != null && 1 == person.getIsLeader()) {
+                                    hasLeader = true;
+                                } else {
+                                    hasMembers = true;
+                                }
+                            }
+                            
+                            if (hasLeader && hasMembers) {
+                                validMisInfo = mis;
                             }
-                        }
-                        
-                        if (hasLeader && hasMembers) {
-                            validMisInfo = mis;
                         }
                     }
                 }
@@ -360,4 +370,34 @@ public class OrderAutoFinalizeTask {
             }
         }
     }
+    
+    /**
+     * 检查MIS工单是否已在维修工单或维保工单中存在
+     * @param misNo MIS工单编号
+     * @return 如果MIS工单已存在返回true,否则返回false
+     */
+    private boolean checkMisExistsInOrders(String misNo) {
+        // 检查维修工单中是否已存在该MIS工单号(排除当前工单)
+        GxtRepairOrder repairOrderCriteria = new GxtRepairOrder();
+        repairOrderCriteria.setMisOrderNo(misNo);
+        List<GxtRepairOrder> existingRepairOrders = gxtRepairOrderMapper.selectGxtRepairOrderList(repairOrderCriteria);
+        
+        // 如果查询到结果,且存在非排除ID的记录,则返回true
+        if (existingRepairOrders != null && !existingRepairOrders.isEmpty()) {
+            return true;
+        }
+        
+        // 检查维保工单中是否已存在该MIS工单号(排除当前工单)
+        GxtWorkOrder workOrderCriteria = new GxtWorkOrder();
+        workOrderCriteria.setMisNo(misNo);
+        List<GxtWorkOrder> existingWorkOrders = gxtWorkOrderMapper.selectGxtWorkOrderList(workOrderCriteria);
+        
+        // 如果查询到结果,且存在非排除ID的记录,则返回true
+        if (existingWorkOrders != null && !existingWorkOrders.isEmpty()) {
+            return true;
+        }
+        
+        // 如果都没有找到符合条件的记录,则返回false
+        return false;
+    }
 }

+ 8 - 2
ygtx-ui/src/components/repairOrder/view.vue

@@ -37,6 +37,12 @@
                 <el-col :span="24">
                   <el-form-item label="故障代码">{{ formData.faultCode || '-' }}</el-form-item>
                 </el-col>
+                <el-col :span="24">
+                  <el-form-item label="故障条纹">{{ formData.faultBarcode || '-' }}</el-form-item>
+                </el-col>
+<!--                <el-col :span="24">-->
+<!--                  <el-form-item label="故障描述">{{ formData.faultDesc || '-' }}</el-form-item>-->
+<!--                </el-col>-->
               </el-row>
             </el-form>
           </div>
@@ -160,8 +166,8 @@
     <el-form label-position="top">
       <el-row>
         <el-col :span="24">
-          <el-form-item label="故障信息">
-            <div class="content-text">{{ formData.faultBarcode || '-' }}</div>
+          <el-form-item label="故障描述">
+            <div class="content-text">{{ formData.faultDesc || '-' }}</div>
           </el-form-item>
         </el-col>
         <el-col :span="24">

+ 2 - 2
ygtx-ui/src/views/gxt/gxtOrder/index.vue

@@ -2338,12 +2338,12 @@ function handleFinishSuccess() {
   getList()
 }
 
-// 用于传递给退回组件的提交方法
+// 用于传递给挂起组件的提交方法
 async function submitSuspendFromParent(data) {
   await suspendWorkOrder(data.id, data)
 }
 
-// 在提交退回成功后的回调函数
+// 在提交挂起成功后的回调函数
 function handleSuspendSuccess() {
   suspendDialogVisible.value = false
   getList()

+ 379 - 15
ygtx-ui/src/views/gxt/repairOrder/index.vue

@@ -336,7 +336,7 @@
               v-hasPermi="['gxt:repairOrder:finalize']"
           ><i class="fa fa-check"></i>结单</el-button>
           <el-button
-              v-if="scope.row.workOrderStatus === 'to_finish' && (scope.row.teamLeaderId == userStore.id || userStore.roles.includes('admin'))"
+              v-if="scope.row.workOrderStatus === 'to_finish'"
               type="primary"
               link
               @click="handleReset(scope.row)"
@@ -463,24 +463,110 @@
             <el-form-item label="故障代码" prop="faultCode">
               <el-input
                   v-model="form.faultCode"
-                  placeholder="请输入故障代码"
+                  placeholder="请输入故障代码或点击选择"
                   maxlength="20"
                   show-word-limit
+                  clearable
+                  @focus="handleFaultCodeInputFocus"
+                  @blur="handleFaultCodeInputBlur"
+                  @input="handleFaultCodeInput"
+                  @clear="handleFaultCodeClear"
               />
+              <!-- 故障代码快速检索下拉框 -->
+              <div class="quick-select-dropdown" v-show="showFaultCodeQuickSelect && quickFaultInfoList.length > 0">
+                <div
+                    v-for="item in quickFaultInfoList"
+                    :key="item.id"
+                    class="quick-select-item"
+                    @click="handleFaultCodeQuickSelect(item)">
+                  <span class="user-name">{{ item.faultCode }}</span>
+                  <span class="user-name">{{ item.faultBarcode }} | {{ item.faultDescription }}</span>
+                </div>
+              </div>
+              <div class="quick-select-dropdown no-data" v-show="showFaultCodeQuickSelect && quickFaultInfoList.length === 0 && form.faultCode && !faultInfoLoading">
+                <div>未找到匹配的故障代码</div>
+              </div>
+              <div class="quick-select-dropdown no-data" v-show="showFaultCodeQuickSelect && faultInfoLoading">
+                <div>
+                  <i class="el-icon-loading"></i>
+                  搜索中...
+                </div>
+              </div>
             </el-form-item>
           </el-col>
         </el-row>
         <el-row>
           <el-col :span="24">
-            <el-form-item label="故障信息" prop="faultBarcode">
+            <el-form-item label="故障条纹" prop="faultBarcode">
               <el-input
                   v-model="form.faultBarcode"
+                  placeholder="请输入故障条纹或点击选择"
+                  show-word-limit
+                  clearable
+                  @focus="handleFaultBarcodeInputFocus"
+                  @blur="handleFaultBarcodeInputBlur"
+                  @input="handleFaultBarcodeInput"
+                  @clear="handleFaultBarcodeClear"
+              />
+              <!-- 故障条纹快速检索下拉框 -->
+              <div class="quick-select-dropdown" v-show="showFaultBarcodeQuickSelect && quickFaultBarcodeList.length > 0">
+                <div
+                    v-for="item in quickFaultBarcodeList"
+                    :key="item.id"
+                    class="quick-select-item"
+                    @click="handleFaultBarcodeQuickSelect(item)">
+                  <span class="user-name">{{ item.faultBarcode }}</span>
+                  <span class="user-name">{{ item.faultCode }} | {{ item.faultDescription }}</span>
+                </div>
+              </div>
+              <div class="quick-select-dropdown no-data" v-show="showFaultBarcodeQuickSelect && quickFaultBarcodeList.length === 0 && form.faultBarcode && !faultBarcodeLoading">
+                <div>未找到匹配的故障条纹</div>
+              </div>
+              <div class="quick-select-dropdown no-data" v-show="showFaultBarcodeQuickSelect && faultBarcodeLoading">
+                <div>
+                  <i class="el-icon-loading"></i>
+                  搜索中...
+                </div>
+              </div>
+            </el-form-item>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="故障描述" prop="faultDesc">
+              <el-input
+                  v-model="form.faultDesc"
                   type="textarea"
-                  placeholder="请输入故障信息"
+                  placeholder="请输入故障描述或点击选择"
                   maxlength="100"
                   show-word-limit
                   :rows="3"
+                  clearable
+                  @focus="handleFaultDescInputFocus"
+                  @blur="handleFaultDescInputBlur"
+                  @input="handleFaultDescInput"
+                  @clear="handleFaultDescClear"
               />
+              <!-- 故障描述快速检索下拉框 -->
+              <div class="quick-select-dropdown" v-show="showFaultDescQuickSelect && quickFaultDescList.length > 0">
+                <div
+                    v-for="item in quickFaultDescList"
+                    :key="item.id"
+                    class="quick-select-item"
+                    @click="handleFaultDescQuickSelect(item)">
+                  <span class="user-name">{{ item.faultDescription }}</span>
+                  <span class="user-name">{{ item.faultCode }} | {{ item.faultBarcode }}</span>
+                </div>
+              </div>
+              <div class="quick-select-dropdown no-data" v-show="showFaultDescQuickSelect && quickFaultDescList.length === 0 && form.faultDesc && !faultDescLoading">
+                <div>未找到匹配的故障描述</div>
+              </div>
+              <div class="quick-select-dropdown no-data" v-show="showFaultDescQuickSelect && faultDescLoading">
+                <div>
+                  <i class="el-icon-loading"></i>
+                  搜索中...
+                </div>
+              </div>
             </el-form-item>
           </el-col>
         </el-row>
@@ -561,11 +647,11 @@
             <el-form-item label="故障代码"><el-input v-model="assignForm.faultCode" disabled /></el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="故障信息">
+            <el-form-item label="故障条纹">
               <el-input
                 v-model="assignForm.faultBarcode"
                 type="textarea"
-                placeholder="请输入故障信息"
+                placeholder="请输入故障条纹"
                 maxlength="100"
                 show-word-limit
                 :rows="3"
@@ -681,11 +767,11 @@
             <el-form-item label="故障代码"><el-input v-model="acceptForm.faultCode" disabled /></el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="故障信息">
+            <el-form-item label="故障条纹">
               <el-input
                   v-model="acceptForm.faultBarcode"
                   type="textarea"
-                  placeholder="请输入故障信息"
+                  placeholder="请输入故障条纹"
                   maxlength="100"
                   show-word-limit
                   :rows="3"
@@ -830,11 +916,11 @@
             <el-form-item label="故障代码"><el-input v-model="ratingForm.faultCode" disabled /> </el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="故障信息">
+            <el-form-item label="故障条纹">
               <el-input
                 v-model="ratingForm.faultBarcode"
                 type="textarea"
-                placeholder="请输入故障信息"
+                placeholder="请输入故障条纹"
                 maxlength="100"
                 show-word-limit
                 :rows="3"
@@ -1068,11 +1154,11 @@
             <el-form-item label="故障代码"><el-input v-model="invalidateForm.faultCode" disabled /></el-form-item>
           </el-col>
           <el-col :span="24">
-            <el-form-item label="故障信息">
+            <el-form-item label="故障条纹">
               <el-input
                 v-model="invalidateForm.faultBarcode"
                 type="textarea"
-                placeholder="请输入故障信息"
+                placeholder="请输入故障条纹"
                 maxlength="100"
                 show-word-limit
                 :rows="3"
@@ -1351,6 +1437,21 @@ const teamLeaderSearchTimer = ref(null)
 const allUserList = ref([]) // 存储所有设备数据用于快速检索
 const lastLoadedCenterId = ref(null) // Track last loaded maintenance center ID
 
+// 故障代码快速检索相关响应式数据
+const showFaultCodeQuickSelect = ref(false)
+const showFaultBarcodeQuickSelect = ref(false)
+const showFaultDescQuickSelect = ref(false)
+const quickFaultInfoList = ref([])
+const quickFaultBarcodeList = ref([])
+const quickFaultDescList = ref([])
+const faultInfoLoading = ref(false)
+const faultBarcodeLoading = ref(false)
+const faultDescLoading = ref(false)
+const faultInfoSearchTimer = ref(null)
+const faultBarcodeSearchTimer = ref(null)
+const faultDescSearchTimer = ref(null)
+const allFaultInfoList = ref([]) // 存储所有故障数据用于快速检索
+
 const forceKey = ref(0)
 
 const userStore = useUserStore();
@@ -1626,6 +1727,252 @@ const handleMisNoInput = (value) => {
   }, 500)
 }
 
+/** 加载所有故障信息列表 */
+const loadAllFaultInfoList = async () => {
+  try {
+    // 构建查询参数,包含风机编号和场站信息
+    const queryParams = {
+      pageNum: 1,
+      pageSize: 1000, // 获取所有故障代码
+      isActive: 0
+    };
+
+    // 如果表单中有风机编号和场站信息,则添加到查询参数中
+    if (form.value.pcsDeviceName) {
+      queryParams.model = form.value.model;
+    }
+    if (form.value.pcsStationName) {
+      queryParams.station = form.value.pcsStationName;
+    }
+
+    // 加载故障代码数据
+    const response = await listFaultCodes(queryParams);
+    allFaultInfoList.value = response.rows || [];
+  } catch (error) {
+    console.error('加载故障信息列表失败:', error);
+    allFaultInfoList.value = [];
+  }
+}
+
+// 故障代码快速检索方法
+/** 故障代码输入框获取焦点 */
+const handleFaultCodeInputFocus = async () => {
+  showFaultCodeQuickSelect.value = true;
+
+  // 加载所有故障信息
+  await loadAllFaultInfoList();
+
+  // 如果已有输入内容,立即搜索
+  if (form.value.faultCode && form.value.faultCode.trim()) {
+    handleFaultCodeInput(form.value.faultCode);
+  } else {
+    // 如果没有输入内容,显示所有故障信息
+    quickFaultInfoList.value = allFaultInfoList.value;
+  }
+};
+
+/** 故障代码输入框失去焦点 */
+const handleFaultCodeInputBlur = () => {
+  // 延迟隐藏下拉框,确保点击选项能触发
+  setTimeout(() => {
+    showFaultCodeQuickSelect.value = false;
+  }, 200);
+};
+
+/** 故障代码输入事件 - 实时搜索 */
+const handleFaultCodeInput = (value) => {
+  const searchText = value.trim();
+
+  if (!searchText) {
+    quickFaultInfoList.value = [];
+    showFaultCodeQuickSelect.value = false;
+    return;
+  }
+
+  showFaultCodeQuickSelect.value = true;
+
+  // 清除之前的定时器
+  if (faultInfoSearchTimer.value) {
+    clearTimeout(faultInfoSearchTimer.value);
+  }
+
+  // 过滤故障信息列表
+  const lowerKeyword = searchText.toLowerCase();
+  quickFaultInfoList.value = allFaultInfoList.value.filter(item =>
+    (item.faultCode && item.faultCode.toLowerCase().includes(lowerKeyword)) ||
+    (item.faultBarcode && item.faultBarcode.toLowerCase().includes(lowerKeyword)) ||
+    (item.faultDescription && item.faultDescription.toLowerCase().includes(lowerKeyword))
+  );
+
+  // 设置新的定时器,防抖处理(500ms)
+  faultInfoSearchTimer.value = setTimeout(() => {
+    // 由于我们已经在上面过滤了,这里不需要额外的API调用
+  }, 500);
+};
+
+/** 快速选择故障代码 */
+const handleFaultCodeQuickSelect = (item) => {
+  form.value.faultCode = item.faultCode;
+  form.value.faultBarcode = item.faultBarcode;
+  form.value.faultDesc = item.faultDescription;
+  showFaultCodeQuickSelect.value = false;
+};
+
+/** 清空故障代码 */
+const handleFaultCodeClear = () => {
+  form.value.faultCode = '';
+  form.value.faultBarcode = '';
+  form.value.faultDesc = '';
+  quickFaultInfoList.value = [];
+  showFaultCodeQuickSelect.value = false;
+};
+
+// 故障条纹快速检索方法
+/** 故障条纹输入框获取焦点 */
+const handleFaultBarcodeInputFocus = async () => {
+  showFaultBarcodeQuickSelect.value = true;
+
+  // 加载所有故障信息
+  await loadAllFaultInfoList();
+
+  // 如果已有输入内容,立即搜索
+  if (form.value.faultBarcode && form.value.faultBarcode.trim()) {
+    handleFaultBarcodeInput(form.value.faultBarcode);
+  } else {
+    // 如果没有输入内容,显示所有故障信息
+    quickFaultBarcodeList.value = allFaultInfoList.value;
+  }
+};
+
+/** 故障条纹输入框失去焦点 */
+const handleFaultBarcodeInputBlur = () => {
+  // 延迟隐藏下拉框,确保点击选项能触发
+  setTimeout(() => {
+    showFaultBarcodeQuickSelect.value = false;
+  }, 200);
+};
+
+/** 故障条纹输入事件 - 实时搜索 */
+const handleFaultBarcodeInput = (value) => {
+  const searchText = value.trim();
+
+  if (!searchText) {
+    quickFaultBarcodeList.value = [];
+    showFaultBarcodeQuickSelect.value = false;
+    return;
+  }
+
+  showFaultBarcodeQuickSelect.value = true;
+
+  // 清除之前的定时器
+  if (faultBarcodeSearchTimer.value) {
+    clearTimeout(faultBarcodeSearchTimer.value);
+  }
+
+  // 过滤故障信息列表
+  const lowerKeyword = searchText.toLowerCase();
+  quickFaultBarcodeList.value = allFaultInfoList.value.filter(item =>
+    (item.faultCode && item.faultCode.toLowerCase().includes(lowerKeyword)) ||
+    (item.faultBarcode && item.faultBarcode.toLowerCase().includes(lowerKeyword)) ||
+    (item.faultDescription && item.faultDescription.toLowerCase().includes(lowerKeyword))
+  );
+
+  // 设置新的定时器,防抖处理(500ms)
+  faultBarcodeSearchTimer.value = setTimeout(() => {
+    // 由于我们已经在上面过滤了,这里不需要额外的API调用
+  }, 500);
+};
+
+/** 快速选择故障条纹 */
+const handleFaultBarcodeQuickSelect = (item) => {
+  form.value.faultCode = item.faultCode;
+  form.value.faultBarcode = item.faultBarcode;
+  form.value.faultDesc = item.faultDescription;
+  showFaultBarcodeQuickSelect.value = false;
+};
+
+/** 清空故障条纹 */
+const handleFaultBarcodeClear = () => {
+  form.value.faultCode = '';
+  form.value.faultBarcode = '';
+  form.value.faultDesc = '';
+  quickFaultBarcodeList.value = [];
+  showFaultBarcodeQuickSelect.value = false;
+};
+
+// 故障描述快速检索方法
+/** 故障描述输入框获取焦点 */
+const handleFaultDescInputFocus = async () => {
+  showFaultDescQuickSelect.value = true;
+
+  // 加载所有故障信息
+  await loadAllFaultInfoList();
+
+  // 如果已有输入内容,立即搜索
+  if (form.value.faultDesc && form.value.faultDesc.trim()) {
+    handleFaultDescInput(form.value.faultDesc);
+  } else {
+    // 如果没有输入内容,显示所有故障信息
+    quickFaultDescList.value = allFaultInfoList.value;
+  }
+};
+
+/** 故障描述输入框失去焦点 */
+const handleFaultDescInputBlur = () => {
+  // 延迟隐藏下拉框,确保点击选项能触发
+  setTimeout(() => {
+    showFaultDescQuickSelect.value = false;
+  }, 200);
+};
+
+/** 故障描述输入事件 - 实时搜索 */
+const handleFaultDescInput = (value) => {
+  const searchText = value.trim();
+
+  if (!searchText) {
+    quickFaultDescList.value = [];
+    showFaultDescQuickSelect.value = false;
+    return;
+  }
+
+  showFaultDescQuickSelect.value = true;
+
+  // 清除之前的定时器
+  if (faultDescSearchTimer.value) {
+    clearTimeout(faultDescSearchTimer.value);
+  }
+
+  // 过滤故障信息列表
+  const lowerKeyword = searchText.toLowerCase();
+  quickFaultDescList.value = allFaultInfoList.value.filter(item =>
+    (item.faultCode && item.faultCode.toLowerCase().includes(lowerKeyword)) ||
+    (item.faultBarcode && item.faultBarcode.toLowerCase().includes(lowerKeyword)) ||
+    (item.faultDescription && item.faultDescription.toLowerCase().includes(lowerKeyword))
+  );
+
+  // 设置新的定时器,防抖处理(500ms)
+  faultDescSearchTimer.value = setTimeout(() => {
+    // 由于我们已经在上面过滤了,这里不需要额外的API调用
+  }, 500);
+};
+
+/** 快速选择故障描述 */
+const handleFaultDescQuickSelect = (item) => {
+  form.value.faultCode = item.faultCode;
+  form.value.faultBarcode = item.faultBarcode;
+  form.value.faultDesc = item.faultDescription;
+  showFaultDescQuickSelect.value = false;
+};
+
+/** 清空故障描述 */
+const handleFaultDescClear = () => {
+  form.value.faultCode = '';
+  form.value.faultBarcode = '';
+  form.value.faultDesc = '';
+  quickFaultDescList.value = [];
+  showFaultDescQuickSelect.value = false;
+};
+
 /** 搜索MIS工单列表 */
 const searchMisNoList = async (keyword) => {
   if (!keyword) {
@@ -1760,7 +2107,10 @@ const rules = ref({
      { required: true, message: "请选择优先级", trigger: "change" }
    ],*/
   faultBarcode: [
-    { required: true, message: "故障信息不能为空", trigger: "change" }
+    { required: true, message: "故障条纹不能为空", trigger: "change" }
+  ],
+  faultCode: [
+    { required: true, message: "故障代码不能为空", trigger: "change" }
   ],
 })
 
@@ -2103,6 +2453,20 @@ onMounted(() => {
   window.addEventListener('resize', handleResize)
 })
 
+// 监听风机编号和场站变化,自动刷新故障信息列表
+// 监听风机编号变化,清空故障相关字段
+watch(() => form.value.pcsDeviceName, (newDeviceName, oldDeviceName) => {
+  if (newDeviceName !== oldDeviceName) {
+    // 清空故障相关字段,因为新设备可能需要选择不同的故障信息
+    form.value.faultCode = '';
+    form.value.faultBarcode = '';
+    form.value.faultDesc = '';
+
+    // 同时清空故障信息列表,以便下次获取焦点时使用新的设备信息重新加载
+    allFaultInfoList.value = [];
+  }
+}, { immediate: false });
+
 // 监听路由变化,当从其他路由跳转到当前路由时重新解析参数
 const route = useRoute();
 watch(() => route.query, (newQuery, oldQuery) => {
@@ -2494,10 +2858,10 @@ function confirmExport() {
 /** 故障代码变化处理 */
 function handleFaultCodeChange(value) {
   if (value === '无') {
-    // 当选择"无"时,故障信息设置为"-"并允许手动输入
+    // 当选择"无"时,故障条纹设置为"-"并允许手动输入
     form.value.faultBarcode = "-";
   } else {
-    // 当选择具体的故障代码时,自动填充故障信息并设为只读
+    // 当选择具体的故障代码时,自动填充故障条纹并设为只读
     const selectedFaultCode = faultCodeOptions.value.find(item => item.faultCode === value);
     if (selectedFaultCode) {
       form.value.faultBarcode = selectedFaultCode.faultBarcode || "";