快乐的昕的电脑
2025-12-03 0c8f85d16c97a8fd4ba381dce13ea9f0b051e6c1
components/EquipmentInspection.vue
@@ -1,6 +1,7 @@
<template>
   <view class="inspection-page">
      <!-- 顶部标题和机台信息 -->
       <!--设备点检-->
      <view class="header">
         <view class="title-row">
            <text class="page-title">设备点检表</text>
@@ -70,7 +71,7 @@
               :loading="saving"
               :disabled="saving || !machineNo"
               @click="handleSave">
            保存
            提交
         </button>
         <button class="btn-clear"
               :disabled="saving"
@@ -160,14 +161,34 @@
               date: this.currentDate
            }, { mock: true, showLoading: true })
            if (record && record.dailyChecks) {
               this.dailyChecks = record.dailyChecks
            // 验证并设置日常点检数据
            if (record && Array.isArray(record.dailyChecks) && record.dailyChecks.length === 6) {
               // 确保每个子数组都是有效的数组
               const isValid = record.dailyChecks.every(arr => Array.isArray(arr) && arr.length === 31)
               if (isValid) {
                  // 使用 $set 确保 Vue 能够检测到嵌套数组的变化
                  this.$set(this, 'dailyChecks', record.dailyChecks.map(arr => [...arr]))
               } else {
                  console.warn('日常点检数据格式不正确,使用默认值')
                  this.$set(this, 'dailyChecks', this.dailyItems.map(() => Array(31).fill(false)))
               }
            } else {
               this.initChecks()
               this.$set(this, 'dailyChecks', this.dailyItems.map(() => Array(31).fill(false)))
            }
            if (record && record.monthlyChecks) {
               this.monthlyChecks = record.monthlyChecks
            // 验证并设置月度点检数据
            if (record && Array.isArray(record.monthlyChecks) && record.monthlyChecks.length === 2) {
               // 确保每个子数组都是有效的数组
               const isValid = record.monthlyChecks.every(arr => Array.isArray(arr) && arr.length === 31)
               if (isValid) {
                  // 使用 $set 确保 Vue 能够检测到嵌套数组的变化
                  this.$set(this, 'monthlyChecks', record.monthlyChecks.map(arr => [...arr]))
               } else {
                  console.warn('月度点检数据格式不正确,使用默认值')
                  this.$set(this, 'monthlyChecks', this.monthlyItems.map(() => Array(31).fill(false)))
               }
            } else {
               this.$set(this, 'monthlyChecks', this.monthlyItems.map(() => Array(31).fill(false)))
            }
            this.dirty = false
@@ -186,8 +207,20 @@
         }
         if (type === 'daily') {
            // 安全检查:确保数组和索引有效
            if (!Array.isArray(this.dailyChecks) || !Array.isArray(this.dailyChecks[itemIdx])) {
               console.error('日常点检数据结构异常,重新初始化')
               this.initChecks()
               return
            }
            this.$set(this.dailyChecks[itemIdx], dayIdx, !this.dailyChecks[itemIdx][dayIdx])
         } else {
            // 安全检查:确保数组和索引有效
            if (!Array.isArray(this.monthlyChecks) || !Array.isArray(this.monthlyChecks[itemIdx])) {
               console.error('月度点检数据结构异常,重新初始化')
               this.initChecks()
               return
            }
            this.$set(this.monthlyChecks[itemIdx], dayIdx, !this.monthlyChecks[itemIdx][dayIdx])
         }
         this.dirty = true
@@ -231,263 +264,270 @@
</script>
<style scoped>
.inspection-page {
   display: flex;
   flex-direction: column;
   padding: 10px;
   font-size: 14px;
   color: #333;
   background: #f5f5f5;
   height: 100%;
   overflow: hidden;
}
    .inspection-page {
        display: flex;
        flex-direction: column;
        padding: 10px;
        font-size: 18px; /* 原14px,整体提升 */
        color: #333;
        background: #f5f5f5;
        height: 100%;
        overflow: hidden;
    }
.header {
   background: #fff;
   border-radius: 8px;
   padding: 12px 16px;
   margin-bottom: 10px;
   box-shadow: 0 1px 4px rgba(0,0,0,0.1);
}
    .header {
        background: #fff;
        border-radius: 8px;
        padding: 12px 16px;
        margin-bottom: 10px;
        box-shadow: 0 1px 4px rgba(0,0,0,0.1);
    }
.title-row {
   text-align: center;
   margin-bottom: 8px;
}
    .title-row {
        text-align: center;
        margin-bottom: 8px;
    }
.page-title {
   font-size: 20px;
   font-weight: bold;
   color: #333;
}
    .page-title {
        font-size: 28px; /* 原20px */
        font-weight: bold;
        color: #333;
    }
.info-row {
   display: flex;
   justify-content: space-between;
   align-items: center;
   gap: 20px;
}
    .info-row {
        display: flex;
        justify-content: flex-start;
        align-items: center;
        gap: 60px;
    }
.info-item {
   display: flex;
   align-items: center;
   gap: 8px;
}
    .info-item {
        display: flex;
        align-items: center;
        gap: 8px;
    }
.info-label {
   font-size: 14px;
   color: #666;
}
    .info-label {
        font-size: 18px; /* 原14px */
        color: #666;
    }
.info-value {
   font-size: 14px;
   font-weight: 600;
   color: #333;
}
    .info-value {
        font-size: 18px; /* 原14px */
        font-weight: 600;
        color: #333;
    }
.date-picker {
   padding: 4px 12px;
   background: #f0f0f0;
   border-radius: 4px;
   font-size: 14px;
   cursor: pointer;
   min-width: 100px;
   text-align: center;
}
    .date-picker {
        padding: 4px 12px;
        background: #f0f0f0;
        border-radius: 4px;
        font-size: 18px; /* 原14px */
        cursor: pointer;
        min-width: 100px;
        text-align: center;
    }
.table-container {
   flex: 1;
   overflow: auto;
   background: #fff;
   border-radius: 8px;
   padding: 8px;
   box-shadow: 0 1px 4px rgba(0,0,0,0.1);
}
    .table-container {
        flex: 1;
        overflow: auto;
        background: #fff;
        border-radius: 8px;
        padding: 8px;
        box-shadow: 0 1px 4px rgba(0,0,0,0.1);
    }
.inspection-table {
   width: 100%;
   border-collapse: collapse;
   font-size: 12px;
   min-width: 1400px;
}
    .inspection-table {
        width: 100%;
        border-collapse: collapse;
        font-size: 16px; /* 原12px */
        min-width: 1400px;
    }
.inspection-table th,
.inspection-table td {
   border: 1px solid #666;
   padding: 4px 6px;
   text-align: center;
   white-space: nowrap;
}
        .inspection-table th,
        .inspection-table td {
            border: 1px solid #666;
            padding: 6px 10px; /* 原4px 6px */
            text-align: center;
            white-space: nowrap;
        }
.inspection-table thead {
   background: #e8e8e8;
   position: sticky;
   top: 0;
   z-index: 10;
}
        .inspection-table thead {
            background: #e8e8e8;
            position: sticky;
            top: 0;
            z-index: 10;
        }
.inspection-table th {
   font-weight: bold;
   font-size: 13px;
   background: #e8e8e8;
}
        .inspection-table th {
            font-weight: bold;
            font-size: 18px; /* 原13px */
            background: #e8e8e8;
        }
.col-category {
   min-width: 80px;
   width: 80px;
}
    .col-category {
        min-width: 80px;
        width: 80px;
    }
.col-item {
   min-width: 180px;
   width: 180px;
   text-align: left;
}
    .col-item {
        min-width: 180px;
        width: 180px;
        text-align: left;
    }
.col-cycle {
   min-width: 50px;
   width: 50px;
}
    .col-cycle {
        min-width: 50px;
        width: 50px;
    }
.col-days {
   background: #d0d0d0;
}
    .col-days {
        background: #d0d0d0;
    }
.day-header {
   width: 30px;
   min-width: 30px;
   font-size: 11px;
   padding: 2px;
}
    .day-header {
        width: 36px; /* 原30px */
        min-width: 36px;
        font-size: 15px; /* 原11px */
        padding: 4px;
    }
.category-cell {
   background: #f5f5f5;
   font-weight: bold;
   vertical-align: middle;
}
    .category-cell {
        background: #f5f5f5;
        font-weight: bold;
        vertical-align: middle;
    }
.item-cell {
   text-align: left;
   padding-left: 8px;
   font-size: 12px;
}
    .item-cell {
        text-align: left;
        padding-left: 12px; /* 原8px */
        font-size: 16px; /* 原12px */
    }
.cycle-cell {
   font-size: 16px;
   color: #333;
}
    .cycle-cell {
        font-size: 20px; /* 原16px */
        color: #333;
    }
.check-cell {
   width: 30px;
   min-width: 30px;
   height: 28px;
   cursor: pointer;
   background: #fff;
   transition: background 0.2s;
   font-size: 18px;
   color: #0faeff;
}
    .check-cell {
        width: 36px; /* 原30px */
        min-width: 36px;
        height: 32px; /* 原28px */
        cursor: pointer;
        background: #fff;
        transition: background 0.2s;
        font-size: 22px; /* 原18px */
        color: #0faeff;
    }
.check-cell:hover {
   background: #f0f8ff;
}
        .check-cell:hover {
            background: #f0f8ff;
        }
.check-cell.checked {
   background: #e6f7ff;
}
        .check-cell.checked {
            background: #e6f7ff;
        }
.actions {
   display: flex;
   justify-content: center;
   gap: 16px;
   margin-top: 10px;
   padding: 10px 0;
}
    .actions {
        display: flex;
        justify-content: center;
        gap: 24px; /* 原16px */
        margin-top: 10px;
        padding: 10px 0;
    }
.btn-save,
.btn-clear {
   min-width: 120px;
   padding: 10px 24px;
   font-size: 16px;
   border-radius: 6px;
   border: none;
   cursor: pointer;
   transition: all 0.2s;
}
    .btn-save,
    .btn-clear {
        min-width: 140px; /* 原120px */
        padding: 14px 32px; /* 原10px 24px */
        font-size: 20px; /* 原16px */
        border-radius: 6px;
        border: none;
        cursor: pointer;
        transition: all 0.2s;
    }
.btn-save {
   background: #00a2e9;
   color: #fff;
}
    .btn-save {
        background: #00a2e9;
        color: #fff;
    }
.btn-save:hover {
   background: #0086c0;
}
        .btn-save:hover {
            background: #0086c0;
        }
.btn-save:disabled {
   background: #ccc;
   cursor: not-allowed;
}
        .btn-save:disabled {
            background: #ccc;
            cursor: not-allowed;
        }
.btn-clear {
   background: #fff;
   color: #333;
   border: 1px solid #d0d0d0;
}
    .btn-clear {
        background: #fff;
        color: #333;
        border: 1px solid #d0d0d0;
    }
.btn-clear:hover {
   background: #f5f5f5;
}
        .btn-clear:hover {
            background: #f5f5f5;
        }
/* 针对1280*717屏幕优化 */
@media screen and (max-width: 1280px) and (max-height: 800px) {
   .inspection-page {
      padding: 6px;
   }
    /* 针对1280*717屏幕优化 */
    @media screen and (max-width: 1280px) and (max-height: 800px) {
        .inspection-page {
            padding: 6px;
            font-size: 15px;
        }
   .header {
      padding: 8px 12px;
      margin-bottom: 6px;
   }
        .header {
            padding: 8px 12px;
            margin-bottom: 6px;
        }
   .page-title {
      font-size: 18px;
   }
        .page-title {
            font-size: 22px;
        }
   .inspection-table {
      font-size: 11px;
   }
        .info-label,
        .info-value,
        .date-picker {
            font-size: 15px;
        }
   .inspection-table th {
      font-size: 12px;
      padding: 3px 4px;
   }
        .inspection-table {
            font-size: 13px;
        }
   .inspection-table td {
      padding: 3px 4px;
   }
            .inspection-table th {
                font-size: 15px;
                padding: 4px 6px;
            }
   .day-header {
      width: 26px;
      min-width: 26px;
      font-size: 10px;
   }
            .inspection-table td {
                padding: 4px 6px;
            }
   .check-cell {
      width: 26px;
      min-width: 26px;
      height: 24px;
      font-size: 16px;
   }
        .day-header {
            width: 28px;
            min-width: 28px;
            font-size: 12px;
        }
   .item-cell {
      font-size: 11px;
   }
        .check-cell {
            width: 28px;
            min-width: 28px;
            height: 24px;
            font-size: 16px;
        }
   .btn-save,
   .btn-clear {
      min-width: 100px;
      padding: 8px 20px;
      font-size: 14px;
   }
}
        .item-cell {
            font-size: 13px;
        }
        .btn-save,
        .btn-clear {
            min-width: 110px;
            padding: 10px 20px;
            font-size: 16px;
        }
    }
</style>