| | |
| | | <view class="task-list"> |
| | | <view v-for="(item, index) in taskTableData" |
| | | :key="index" |
| | | class="task-item"> |
| | | class="task-item" |
| | | :class="{ 'uninspected': item.fileStatus == 1 }"> |
| | | <view class="task-header"> |
| | | <view class="task-info"> |
| | | <text class="task-name">{{ item.taskName }}</text> |
| | |
| | | <view class="task-actions"> |
| | | <u-button type="primary" |
| | | size="small" |
| | | @click.stop="startScanForTask(item)" |
| | | v-if="item.fileStatus!=2" |
| | | @click.stop="startScanForTask1(item)" |
| | | :customStyle="{ |
| | | borderRadius: '15px', |
| | | height: '30px', |
| | |
| | | <view class="task-details"> |
| | | <view class="detail-item"> |
| | | <text class="detail-label">任务ID</text> |
| | | <text class="detail-value">{{ item.taskId || item.id }}</text> |
| | | <text class="detail-value">{{ item.id }}</text> |
| | | </view> |
| | | <view class="detail-item"> |
| | | <text class="detail-label">备注</text> |
| | |
| | | type="success" |
| | | inverted></uni-tag> |
| | | <uni-tag v-else-if="item.fileStatus==1" |
| | | text="巡检中" |
| | | text="超期" |
| | | size="small" |
| | | type="primary" |
| | | type="error" |
| | | inverted></uni-tag> |
| | | <uni-tag v-else="" |
| | | <uni-tag v-else |
| | | text="未巡检" |
| | | size="small" |
| | | type="warning" |
| | |
| | | </view> |
| | | <view class="upload-popup-body"> |
| | | <!-- 分类标签页 --> |
| | | <view class="upload-tabs"> |
| | | <!-- <view class="upload-tabs"> |
| | | <view class="tab-item" |
| | | :class="{ active: currentUploadType === 'before' }" |
| | | @click="switchUploadType('before')"> |
| | |
| | | @click="switchUploadType('issue')"> |
| | | 生产后 |
| | | </view> |
| | | </view> |
| | | </view> --> |
| | | <!-- 异常状态选择 --> |
| | | <view class="exception-section"> |
| | | <text class="section-title">是否存在异常?</text> |
| | |
| | | <text>请选择要上传的{{ getUploadTypeText() }}图片或视频</text> |
| | | </view> |
| | | <!-- 统计信息 --> |
| | | <view class="upload-summary"> |
| | | <!-- <view class="upload-summary"> |
| | | <text class="summary-text"> |
| | | 生产前: {{ beforeModelValue.length }}个文件 | |
| | | 生产中: {{ afterModelValue.length }}个文件 | |
| | | 生产后: {{ issueModelValue.length }}个文件 |
| | | </text> |
| | | </view> |
| | | </view> --> |
| | | </view> |
| | | </view> |
| | | <view class="upload-popup-footer"> |
| | |
| | | </view> |
| | | <view class="attachment-popup-body"> |
| | | <!-- 分类标签页 --> |
| | | <view class="attachment-tabs"> |
| | | <!-- <view class="attachment-tabs"> |
| | | <view class="tab-item" |
| | | :class="{ active: currentViewType === 'before' }" |
| | | @click="switchViewType('before')"> |
| | |
| | | @click="switchViewType('issue')"> |
| | | 生产后 ({{ getAttachmentsByType(2).length }}) |
| | | </view> |
| | | </view> |
| | | </view> --> |
| | | <!-- 当前分类的附件列表 --> |
| | | <view class="attachment-content"> |
| | | <view v-if="getCurrentViewAttachments().length > 0" |
| | |
| | | |
| | | // 计算上传URL |
| | | const uploadFileUrl = computed(() => { |
| | | const baseUrl = "http://114.132.189.42:9030"; |
| | | const baseUrl = "http://192.168.1.35:8888"; |
| | | |
| | | return baseUrl + uploadConfig.action; |
| | | }); |
| | |
| | | }; |
| | | |
| | | const getFileStatus = record => { |
| | | let _beforeProduction = |
| | | record.beforeProduction && record.beforeProduction.length; |
| | | let _afterProduction = |
| | | record.afterProduction && record.afterProduction.length; |
| | | let _productionIssues = |
| | | record.productionIssues && record.productionIssues.length; |
| | | if (_beforeProduction && _afterProduction && _productionIssues) { |
| | | // let _beforeProduction = |
| | | // record.beforeProduction && record.beforeProduction.length; |
| | | // let _afterProduction = |
| | | // record.afterProduction && record.afterProduction.length; |
| | | // let _productionIssues = |
| | | // record.productionIssues && record.productionIssues.length; |
| | | // if (_beforeProduction && _afterProduction && _productionIssues) { |
| | | // return 2; |
| | | // } else if (_beforeProduction || _afterProduction || _productionIssues) { |
| | | // return 1; |
| | | // } else { |
| | | // return 0; |
| | | // } |
| | | // let _beforeProduction = |
| | | // record.beforeProduction && record.beforeProduction.length; |
| | | if (record.takePhone) { |
| | | if (record.commonFileListBefore && record.commonFileListBefore.length) { |
| | | return 2; |
| | | } |
| | | if (record.frequencyType == "DAILY") { |
| | | if (Number(record.inspectionDeadline) && record.createTime) { |
| | | // 计算时间差(小时) |
| | | const now = new Date().getTime(); |
| | | const createTime = new Date(record.createTime).getTime(); |
| | | const hoursDiff = (now - createTime) / (1000 * 60 * 60); |
| | | if (hoursDiff > Number(record.inspectionDeadline)) { |
| | | return 1; |
| | | } |
| | | } |
| | | } else { |
| | | if (Number(record.inspectionDeadline) && record.createTime) { |
| | | // 计算时间差(天) |
| | | const now = new Date().getTime(); |
| | | const createTime = new Date(record.createTime).getTime(); |
| | | const daysDiff = (now - createTime) / (1000 * 60 * 60 * 24); |
| | | if (daysDiff > Number(record.inspectionDeadline)) { |
| | | return 1; |
| | | } |
| | | } |
| | | } |
| | | return 0; |
| | | } else if (record.inspectionSubmitted) { |
| | | return 2; |
| | | } else if (_beforeProduction || _afterProduction || _productionIssues) { |
| | | return 1; |
| | | } else { |
| | | if (record.frequencyType == "DAILY") { |
| | | if (Number(record.inspectionDeadline) && record.createTime) { |
| | | // 计算时间差(小时) |
| | | const now = new Date().getTime(); |
| | | const createTime = new Date(record.createTime).getTime(); |
| | | const hoursDiff = (now - createTime) / (1000 * 60 * 60); |
| | | if (hoursDiff > Number(record.inspectionDeadline)) { |
| | | return 1; |
| | | } |
| | | } |
| | | } else { |
| | | if (Number(record.inspectionDeadline) && record.createTime) { |
| | | // 计算时间差(天) |
| | | const now = new Date().getTime(); |
| | | const createTime = new Date(record.createTime).getTime(); |
| | | const daysDiff = (now - createTime) / (1000 * 60 * 60 * 24); |
| | | if (daysDiff > Number(record.inspectionDeadline)) { |
| | | return 1; |
| | | } |
| | | } |
| | | } |
| | | return 0; |
| | | } |
| | | }; |
| | |
| | | return; |
| | | } |
| | | |
| | | const currentTaskId = |
| | | currentScanningTask.value?.taskId || currentScanningTask.value?.id; |
| | | const currentTaskId = currentScanningTask.value?.id; |
| | | if (!currentTaskId) { |
| | | uni.showToast({ title: "任务信息缺失", icon: "error" }); |
| | | return; |
| | |
| | | if (task) { |
| | | infoData.value = { |
| | | ...task, |
| | | taskId: task.taskId || task.id, |
| | | storageBlobDTO: [], // 初始化文件列表 |
| | | }; |
| | | } |
| | |
| | | // 显示上传弹窗 |
| | | showUploadDialog.value = true; |
| | | }; |
| | | const startScanForTask1 = async task => { |
| | | currentScanningTask.value = task; |
| | | if (task) { |
| | | infoData.value = { |
| | | ...task, |
| | | storageBlobDTO: [], // 初始化文件列表 |
| | | }; |
| | | } |
| | | |
| | | // 设置上传状态类型(可以根据任务类型设置不同的状态) |
| | | uploadStatusType.value = 0; // 默认状态 |
| | | |
| | | // 清空之前的文件 |
| | | uploadFiles.value = []; |
| | | showUploadDialog.value = true; |
| | | }; |
| | | // 关闭上传弹窗 |
| | | const closeUploadDialog = () => { |
| | | showUploadDialog.value = false; |
| | |
| | | try { |
| | | // 存储当前任务信息到本地存储,供报修页面使用 |
| | | const taskInfo = { |
| | | taskId: infoData.value?.taskId || infoData.value?.id, |
| | | id: infoData.value?.id, |
| | | taskName: infoData.value?.taskName, |
| | | inspectionLocation: infoData.value?.inspectionLocation, |
| | | inspector: infoData.value?.inspector, |
| | |
| | | beforeModelValue.value.length + |
| | | afterModelValue.value.length + |
| | | issueModelValue.value.length; |
| | | if (totalFiles === 0) { |
| | | uni.showToast({ |
| | | title: "请先上传文件", |
| | | icon: "none", |
| | | }); |
| | | return; |
| | | if (currentScanningTask.value.takePhone) { |
| | | if (totalFiles === 0) { |
| | | uni.showToast({ |
| | | title: "请先上传文件", |
| | | icon: "none", |
| | | }); |
| | | return; |
| | | } |
| | | } |
| | | |
| | | // 显示提交中的加载提示 |
| | |
| | | // 添加异常状态信息 |
| | | infoData.value.hasException = hasException.value; |
| | | infoData.value.tempFileIds = tempFileIds; |
| | | const result = await uploadInspectionTask({ ...infoData.value }); |
| | | const result = await uploadInspectionTask({ |
| | | ...infoData.value, |
| | | inspectionSubmitted: true, |
| | | }); |
| | | |
| | | // 检查提交结果 |
| | | if (result && (result.code === 200 || result.success)) { |
| | |
| | | }; |
| | | |
| | | // 文件访问基础域(后端要求前缀) |
| | | const filePreviewBase = "http://114.132.189.42:9098"; |
| | | const filePreviewBase = "http://192.168.1.35:8888"; |
| | | |
| | | // 将后端返回的文件地址规范成可访问URL |
| | | // 兼容场景: |
| | |
| | | count: Math.min(remaining, 1), |
| | | mediaType: [type || "image"], |
| | | sizeType: ["compressed", "original"], |
| | | sourceType: ["camera"], |
| | | sourceType: currentScanningTask.value?.takeAlbum |
| | | ? ["camera", "album"] |
| | | : ["camera"], // 是否允许相册上传 |
| | | success: res => { |
| | | try { |
| | | const files = res?.tempFiles || []; |
| | |
| | | createTime: Date.now(), |
| | | uid: Date.now() + Math.random() + idx, |
| | | }; |
| | | |
| | | console.log("chooseMedia 成功获取文件:", file); |
| | | handleBeforeUpload(file); |
| | | }); |
| | | } catch (e) { |
| | |
| | | uni.chooseImage({ |
| | | count: 1, |
| | | sizeType: ["compressed", "original"], |
| | | sourceType: ["camera"], |
| | | sourceType: ["camera", "album"], |
| | | success: res => { |
| | | const tempFilePath = res?.tempFilePaths?.[0]; |
| | | const tempFile = res?.tempFiles?.[0] || {}; |
| | |
| | | count: 1, |
| | | mediaType: ["image", "video"], |
| | | sizeType: ["compressed", "original"], |
| | | sourceType: ["camera"], |
| | | sourceType: ["camera", "album"], |
| | | success: res => { |
| | | try { |
| | | if (!res.tempFiles || res.tempFiles.length === 0) { |
| | |
| | | transition: all 0.3s ease; |
| | | } |
| | | |
| | | .task-item.uninspected { |
| | | border: 1px solid #f56c6cb3; |
| | | background-color: #fef2f2; |
| | | } |
| | | |
| | | .task-item.uninspected .task-name, |
| | | .task-item.uninspected .task-location, |
| | | .task-item.uninspected .detail-value { |
| | | color: #000000; |
| | | } |
| | | |
| | | .task-header { |
| | | display: flex; |
| | | justify-content: space-between; |