| | |
| | | <template> |
| | | <view class="inspection-page"> |
| | | <!-- 顶部标题和机台信息 --> |
| | | <!--设备点检--> |
| | | <view class="header"> |
| | | <view class="title-row"> |
| | | <text class="page-title">设备点检表</text> |
| | |
| | | :loading="saving" |
| | | :disabled="saving || !machineNo" |
| | | @click="handleSave"> |
| | | 保存 |
| | | 提交 |
| | | </button> |
| | | <button class="btn-clear" |
| | | :disabled="saving" |
| | |
| | | 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 |
| | |
| | | } |
| | | |
| | | 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 |
| | |
| | | </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> |