| | |
| | | <view class="section"> |
| | | <view class="section-header">检验结果</view> |
| | | <view class="section-body"> |
| | | <view class="info-grid"> |
| | | <view class="info-item"> |
| | | <view class="info-label">AC数</view> |
| | | <view class="info-value">{{formData.freQty ? formData.freQty - 1 : 0}}</view> |
| | | </view> |
| | | <view class="info-item"> |
| | | <view class="info-label">RE数</view> |
| | | <view class="info-value">{{formData.freQty || 0}}</view> |
| | | </view> |
| | | <view class="info-item"> |
| | | <view class="info-label">不合格数</view> |
| | | <view class="info-value">{{formData.unqualified || 0}}</view> |
| | | </view> |
| | | </view> |
| | | |
| | | <view v-if="formData.result != null" class="result-preview"> |
| | | <view class="info-label">预览结果</view> |
| | | <view class="info-value">{{formData.result}}</view> |
| | |
| | | <view class="section"> |
| | | <view class="section-header">检验结果录入</view> |
| | | <view class="section-body"> |
| | | <view class="inspection-hint"> |
| | | <view class="hint-text">没有最大值和最小值时填写0(未通过检验)或1(通过检验)</view> |
| | | </view> |
| | | |
| | | <!-- 不合格检验项目提示 --> |
| | | <view class="validation-hint" v-if="isUnqualifiedResult()"> |
| | | <!-- 验证提示 --> |
| | | <view v-if="isUnqualifiedResult()" class="validation-hint"> |
| | | <view class="validation-icon">⚠️</view> |
| | | <view class="validation-text"> |
| | | <view class="validation-title">检验项目不合格,必须完成以下操作:</view> |
| | | <view class="validation-requirements"> |
| | | <view class="requirement-item" :class="{ 'completed': hasImage(), 'required': !hasImage() }"> |
| | | <text class="requirement-icon">{{ hasImage() ? '✅' : '❌' }}</text> |
| | | <text class="requirement-text">上传图片</text> |
| | | <view class="requirement-item" :class="{ 'completed': hasImage() }"> |
| | | <view class="requirement-icon">{{ hasImage() ? '✅' : '❌' }}</view> |
| | | <view class="requirement-text">上传图片</view> |
| | | </view> |
| | | <view class="requirement-item" :class="{ 'completed': hasRemarks(), 'required': !hasRemarks() }"> |
| | | <text class="requirement-icon">{{ hasRemarks() ? '✅' : '❌' }}</text> |
| | | <text class="requirement-text">填写不良描述</text> |
| | | <view class="requirement-item" :class="{ 'completed': hasRemarks() }"> |
| | | <view class="requirement-icon">{{ hasRemarks() ? '✅' : '❌' }}</view> |
| | | <view class="requirement-text">填写不良描述</view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | |
| | | <view class="input-wrapper"> |
| | | <input v-if="tableData.length < formData.levelNum" |
| | | v-model="formData.fcheckResu" |
| | | type="number" |
| | | type="text" |
| | | class="result-input" |
| | | placeholder="请输入检验结果" |
| | | placeholder="没有最大值和最小值时填写0(未通过检验)或1(通过检验)" |
| | | placeholder-class="placeholder" /> |
| | | <button v-if="(tableData.length < formData.levelNum)" |
| | | class="btn primary-btn" |
| | | style="margin: 0px;background-color: #3498db;color:#ffffff ;" class="btn primary-btn" |
| | | @click="submit">保存结果</button> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 操作按钮 --> |
| | | <view class="action-buttons"> |
| | | <button class="btn upload-btn" @click="saveRemarks"> |
| | | <view class="btn-content"> |
| | | <uni-icons type="compose" size="16" color="#fff"></uni-icons> |
| | | <view class="btn-text">添加不合格描述</view> |
| | | </view> |
| | | </button> |
| | | <button class="btn attachment-btn" @click="viewAttachmentInfo"> |
| | | <view class="btn-content"> |
| | | <uni-icons type="folder" size="16" color="#fff"></uni-icons> |
| | | <view class="btn-text">查看检验项目</view> |
| | | </view> |
| | | </button> |
| | | <button class="action-btn success tablet-upload-btn" @click="uploadImage"> |
| | | <view class="btn-content"> |
| | | <view class="btn-icon">📷</view> |
| | | <view class="btn-text">拍照/上传图片</view> |
| | | </view> |
| | | </button> |
| | | </view> |
| | | |
| | | <!-- 图片预览 --> |
| | | <view v-if="isShowImg" class="section"> |
| | | <view class="section-header"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 操作按钮 --> |
| | | <view class="action-buttons"> |
| | | <button class="action-btn warning" @click="saveRemarks">添加不合格描述</button> |
| | | <button class="action-btn primary" @click="viewAttachmentInfo">查看检验项目</button> |
| | | <button class="action-btn success tablet-upload-btn" @click="uploadImage"> |
| | | <view class="btn-content"> |
| | | <view class="btn-icon">📷</view> |
| | | <view class="btn-text">拍照/上传图片</view> |
| | | </view> |
| | | </button> |
| | | </view> |
| | | |
| | | <!-- 修改检验结果弹出框 --> |
| | |
| | | } |
| | | } |
| | | |
| | | .inspection-hint { |
| | | background-color: #fff3cd; |
| | | padding: 10px; |
| | | border-radius: 4px; |
| | | margin-bottom: 15px; |
| | | } |
| | | |
| | | .hint-text { |
| | | font-size: 12px; |
| | | color: #856404; |
| | | } |
| | | |
| | | /* 验证提示样式 */ |
| | | .validation-hint { |
| | | background: linear-gradient(135deg, #ffe6e6 0%, #ffcccc 100%); |
| | |
| | | display: flex; |
| | | align-items: center; |
| | | gap: 8px; |
| | | padding: 6px 10px; |
| | | padding: 8px 12px; |
| | | background: rgba(255, 255, 255, 0.7); |
| | | border-radius: 6px; |
| | | border: 1px solid rgba(255, 107, 107, 0.3); |
| | | transition: all 0.3s ease; |
| | | } |
| | | |
| | | .requirement-item.completed { |
| | | background-color: #d4edda; |
| | | border: 1px solid #c3e6cb; |
| | | } |
| | | |
| | | .requirement-item.required { |
| | | background-color: #f8d7da; |
| | | border: 1px solid #f5c6cb; |
| | | background: rgba(46, 204, 113, 0.1); |
| | | border-color: rgba(46, 204, 113, 0.3); |
| | | } |
| | | |
| | | .requirement-icon { |
| | |
| | | |
| | | .requirement-text { |
| | | font-size: 13px; |
| | | font-weight: 500; |
| | | color: #2c3e50; |
| | | font-weight: 500; |
| | | } |
| | | |
| | | .requirement-item.completed .requirement-text { |
| | | color: #27ae60; |
| | | } |
| | | |
| | | .input-group { |
| | | margin: 16px 0; |
| | | } |
| | | |
| | | .input-wrapper { |
| | | display: flex; |
| | | gap: 12px; |
| | | .input-wrapper { |
| | | display: flex; |
| | | gap: 12px; |
| | | } |
| | | |
| | | .result-input { |
| | | flex: 1; |
| | | height: 45px; |
| | | padding: 0 12px; |
| | | border: 1px solid $border-color; |
| | | border-radius: 4px; |
| | | font-size: 14px; |
| | | } |
| | | } |
| | | .result-input { |
| | | flex: 1; |
| | | height: 45px; |
| | | padding: 0 12px; |
| | | border: 1px solid $border-color; |
| | | border-radius: 4px; |
| | | font-size: 14px; |
| | | } |
| | | |
| | | .btn { |
| | |
| | | } |
| | | |
| | | .action-buttons { |
| | | margin-top: 20px; |
| | | display: flex; |
| | | flex-direction: column; |
| | | gap: 10px; |
| | | justify-content: flex-end; |
| | | gap: 12px; |
| | | margin-bottom: 20px; |
| | | } |
| | | |
| | | .action-btn { |
| | | padding: 12px 20px; |
| | | border: none; |
| | | border-radius: 6px; |
| | | font-size: 14px; |
| | | font-weight: 500; |
| | | cursor: pointer; |
| | | transition: all 0.2s; |
| | | padding: 8px 20px; |
| | | border-radius: 4px; |
| | | |
| | | &.primary { |
| | | &.primary-btn { |
| | | background-color: $primary-color; |
| | | color: white; |
| | | color: #fff; |
| | | } |
| | | |
| | | &.secondary { |
| | | &.cancel-btn { |
| | | background-color: #95a5a6; |
| | | color: white; |
| | | } |
| | | |
| | | &.warning { |
| | | background-color: $warning-color; |
| | | color: white; |
| | | color: #fff; |
| | | } |
| | | |
| | | &.success { |
| | | background-color: $success-color; |
| | | color: white; |
| | | color: #fff; |
| | | } |
| | | } |
| | | |
| | | .btn { |
| | | padding: 8px 20px; |
| | | border-radius: 4px; |
| | | border: none; |
| | | font-size: 14px; |
| | | cursor: pointer; |
| | | transition: all 0.2s; |
| | | |
| | | &.upload-btn { |
| | | background-color: #909399; |
| | | color: #fff; |
| | | border: none; |
| | | border-radius: 8px; |
| | | padding: 12px 20px; |
| | | margin: 0; |
| | | font-size: 14px; |
| | | font-weight: 600; |
| | | min-height: 48px; |
| | | white-space: nowrap; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | gap: 8px; |
| | | cursor: pointer; |
| | | transition: all 0.3s ease; |
| | | box-shadow: 0 4px 12px rgba(144, 147, 153, 0.3); |
| | | } |
| | | |
| | | &.upload-btn:hover { |
| | | background-color: #7a7d82; |
| | | transform: translateY(-2px); |
| | | box-shadow: 0 6px 16px rgba(144, 147, 153, 0.4); |
| | | } |
| | | |
| | | &.attachment-btn { |
| | | background-color: #17a2b8; |
| | | color: #fff; |
| | | border: none; |
| | | border-radius: 8px; |
| | | padding: 12px 20px; |
| | | margin: 0; |
| | | font-size: 14px; |
| | | font-weight: 600; |
| | | min-height: 48px; |
| | | white-space: nowrap; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | gap: 8px; |
| | | cursor: pointer; |
| | | transition: all 0.3s ease; |
| | | box-shadow: 0 4px 12px rgba(23, 162, 184, 0.3); |
| | | } |
| | | |
| | | &.attachment-btn:hover { |
| | | background-color: #138496; |
| | | transform: translateY(-2px); |
| | | box-shadow: 0 6px 16px rgba(23, 162, 184, 0.4); |
| | | } |
| | | } |
| | | |
| | |
| | | |
| | | /* 平板上传按钮样式 */ |
| | | .tablet-upload-btn { |
| | | position: relative; |
| | | overflow: hidden; |
| | | background: linear-gradient(135deg, #2ecc71 0%, #27ae60 100%); |
| | | box-shadow: 0 4px 15px rgba(46, 204, 113, 0.3); |
| | | border: none; |
| | | border-radius: 8px; |
| | | padding: 12px 20px; |
| | | color: white; |
| | | font-weight: 600; |
| | | font-size: 14px; |
| | | cursor: pointer; |
| | | transition: all 0.3s ease; |
| | | box-shadow: 0 4px 12px rgba(46, 204, 113, 0.3); |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | min-height: 48px; |
| | | margin: 0; |
| | | } |
| | | |
| | | .tablet-upload-btn:hover { |
| | | background: linear-gradient(135deg, #27ae60 0%, #229954 100%); |
| | | transform: translateY(-2px); |
| | | box-shadow: 0 6px 20px rgba(46, 204, 113, 0.4); |
| | | } |
| | | |
| | | .tablet-upload-btn:active { |
| | | transform: translateY(0); |
| | | box-shadow: 0 2px 10px rgba(46, 204, 113, 0.3); |
| | | box-shadow: 0 6px 16px rgba(46, 204, 113, 0.4); |
| | | } |
| | | |
| | | .btn-content { |
| | | display: flex; |
| | | flex-direction: column; |
| | | align-items: center; |
| | | justify-content: center; |
| | | gap: 8px; |
| | | padding: 8px; |
| | | } |
| | | |
| | | .btn-icon { |
| | | font-size: 24px; |
| | | line-height: 1; |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .btn-text { |
| | | font-size: 14px; |
| | | font-weight: 600; |
| | | line-height: 1.2; |
| | | text-align: center; |
| | | } |
| | | |
| | | .overlay { |
| | |
| | | } |
| | | } |
| | | |
| | | /* 平板优化样式 */ |
| | | @media (min-width: 768px) and (max-width: 1024px) { |
| | | .action-buttons { |
| | | display: grid; |
| | | grid-template-columns: repeat(3, 1fr); |
| | | gap: 15px; |
| | | margin-bottom: 30px; |
| | | } |
| | | |
| | | .action-btn { |
| | | padding: 20px 16px; |
| | | font-size: 16px; |
| | | min-height: 80px; |
| | | display: flex; |
| | | align-items: center; |
| | | justify-content: center; |
| | | } |
| | | |
| | | .tablet-upload-btn { |
| | | min-height: 100px; |
| | | } |
| | | |
| | | .btn-content { |
| | | gap: 12px; |
| | | padding: 12px; |
| | | } |
| | | |
| | | .btn-icon { |
| | | font-size: 32px; |
| | | } |
| | | |
| | | .btn-text { |
| | | font-size: 16px; |
| | | } |
| | | |
| | | .info-grid { |
| | | grid-template-columns: repeat(2, 1fr); |
| | | gap: 20px; |
| | | } |
| | | |
| | | .section-body { |
| | | padding: 30px; |
| | | } |
| | | } |
| | | |
| | | /* 大屏平板优化 */ |
| | | @media (min-width: 1024px) { |
| | | .action-buttons { |
| | | display: grid; |
| | | grid-template-columns: repeat(3, 1fr); |
| | | gap: 20px; |
| | | margin-bottom: 40px; |
| | | } |
| | | |
| | | .action-btn { |
| | | padding: 25px 20px; |
| | | font-size: 18px; |
| | | min-height: 100px; |
| | | } |
| | | |
| | | .tablet-upload-btn { |
| | | min-height: 120px; |
| | | } |
| | | |
| | | .btn-content { |
| | | gap: 15px; |
| | | padding: 15px; |
| | | } |
| | | |
| | | .btn-icon { |
| | | font-size: 36px; |
| | | } |
| | | |
| | | .btn-text { |
| | | font-size: 18px; |
| | | } |
| | | |
| | | .info-grid { |
| | | grid-template-columns: repeat(3, 1fr); |
| | | gap: 25px; |
| | | } |
| | | |
| | | /* 响应式设计 */ |
| | | @media (min-width: 768px) { |
| | | .section-body { |
| | | padding: 40px; |
| | | } |