// 获取URL参数 function getUrlParameter(name) { name = name.replace(/[\[\]]/g, '\\$&'); const regex = new RegExp('[?&]' + name + '(=([^]*)|&|#|$)'); const results = regex.exec(window.location.href); if (!results) return null; if (!results[2]) return ''; return decodeURIComponent(results[2].replace(/\+/g, ' ')); } // 设置序列号 document.addEventListener('DOMContentLoaded', function() { const seriesNum = getUrlParameter('series'); if (seriesNum) { document.getElementById('seriesNum').textContent = seriesNum; } }); // 页面加载完成后执行 document.addEventListener('DOMContentLoaded', async function() { const seriesNum = getUrlParameter('series'); const instrumentNum = getUrlParameter('instrument'); const wellName = getUrlParameter('well'); const flag = getUrlParameter('flag'); const content = getUrlParameter('content'); console.log('wellName:', wellName); if (seriesNum) { document.getElementById('seriesNum').textContent = seriesNum; // 调用查询接口 const toolData = await fetchToolData(wellName ,seriesNum , instrumentNum ,flag ,content); if (toolData) { console.log('Received tool data:', toolData); } } }); // 查询仪器详细信息 async function fetchToolData(wellName, seriesNum, instrumentNum ,flag ,content) { console.log("wellName----------", wellName); console.log("seriesNum----------", seriesNum); console.log("instrumentNum----------", instrumentNum); try { // 添加 await 关键字 const response = await axios.post('/deescloud/getInstrumentMess', { opuser: localStorage.getItem("online_user"), opuser_uuid: localStorage.getItem("uuid"), series: seriesNum, instrument: instrumentNum, wellName: wellName, flag:flag, content : content }, { headers: { 'Content-Type': 'application/json' } }); // 检查响应状态 if (response.status !== 200) { throw new Error(`HTTP error! status: ${response.status}`); } //基本信息 renderInstrumentData(response.data); //上井情况 populateBasicInfo(response.data); console.log('响应结果:', response.data); return response.data; } catch (error) { console.error('获取仪器数据失败:', error); // 添加错误提示(可选) if (typeof this !== 'undefined' && this.$notify) { this.$notify.error({ title: '数据获取失败', message: '请检查网络或联系管理员', duration: 5000 }); } else { console.error('获取仪器数据失败,请稍后重试'); } return null; } } //基本信息 function renderInstrumentData(data) { if (!data) { console.error("无有效数据"); return; } // 1. 更新仪器名称(Series + Instrument) const instrumentName = `${data.series || ""} - ${data.instrument || ""}`; document.getElementById("seriesNum").textContent = instrumentName; // 2. 格式化出厂日期(去掉 "T00:00:00Z") const formattedTime = data.time ? data.time.split('T')[0] : ""; document.querySelector(".basic-info-table tbody tr:nth-child(1) td:nth-child(2)").textContent = formattedTime; // 3. 格式化入库日期 const formattedHouseDate = data.houseDate ? data.houseDate.split('T')[0] : ""; document.querySelector(".basic-info-table tbody tr:nth-child(1) td:nth-child(4)").textContent = formattedHouseDate; // 4. 更新累计工作时间(workTime) document.querySelector(".basic-info-table tbody tr:nth-child(2) td:nth-child(2)").textContent = `${data.workTime || "0"} 小时`; // 5. 更新当次工作时间(workTimes) document.querySelector(".basic-info-table tbody tr:nth-child(2) td:nth-child(4)").textContent = `${data.workTimes || "0"} 小时`; // 6. 更新固件版本号 document.querySelector(".basic-info-table tbody tr:nth-child(3) td:nth-child(2)").textContent = data.version || ""; } //上井情况汇总 function populateBasicInfo(data){ const tbody = document.getElementById('wellDataBody'); if (!tbody) return; // 清空现有内容 tbody.innerHTML = ''; // 遍历数据并创建表格行 // 井上仪器信息 data.data.forEach(item => { const row = document.createElement('tr'); // 井名 const wellNameCell = document.createElement('td'); wellNameCell.textContent = item.wellName || ''; // 入井工作情况 (使用sampleField) const sampleFieldCell = document.createElement('td'); sampleFieldCell.textContent = item.sampleField || ''; // 施工井段 (使用valueInterval) const valueIntervalCell = document.createElement('td'); valueIntervalCell.textContent = item.valueInterval || ''; // 最高工作温度 (使用globalMax1 + °C) const globalMax1Cell = document.createElement('td'); globalMax1Cell.textContent = item.globalMax1 ? item.globalMax1 + '°C' : ''; // 最高承压 (使用globalMax2 + MPa) const globalMax2Cell = document.createElement('td'); globalMax2Cell.textContent = item.globalMax2 ? item.globalMax2 + 'MPa' : ''; // 仪器工作情况 (使用content) const contentCell = document.createElement('td'); contentCell.textContent = item.content || ''; // 上井人 (使用personnelList) const personnelListCell = document.createElement('td'); personnelListCell.textContent = item.personnelList || ''; // 文件列(合并了操作和文件) const fileCell = document.createElement('td'); fileCell.className = 'file-column'; // 上传附件部分 const uploadDiv = document.createElement('div'); const uploadInput = document.createElement('input'); uploadInput.type = 'file'; uploadInput.id = 'upload-' + item.id; uploadInput.style.display = 'none'; uploadInput.setAttribute('data-id', item.id); const uploadButton = document.createElement('button'); uploadButton.textContent = '上传附件'; uploadButton.className = 'upload-button'; // 使用统一的按钮样式 uploadButton.onclick = function() { uploadInput.click(); }; uploadInput.onchange = function(e) { handleFileUpload(e, item); }; uploadDiv.appendChild(uploadInput); uploadDiv.appendChild(uploadButton); fileCell.appendChild(uploadDiv); // 文件列表部分 if (item.data && item.data.length > 0) { const fileListContainer = document.createElement('div'); fileListContainer.className = 'file-list-container'; fileListContainer.style.marginTop = '10px'; const fileListTitle = document.createElement('div'); fileListTitle.textContent = '已上传文件:'; fileListTitle.style.fontSize = '12px'; fileListTitle.style.color = '#666'; fileListTitle.style.marginBottom = '5px'; fileListTitle.style.fontWeight = 'bold'; const fileListDiv = document.createElement('div'); fileListDiv.className = 'file-list'; item.data.forEach(file => { const fileItemDiv = document.createElement('div'); fileItemDiv.className = 'file-item'; fileItemDiv.style.padding = '3px 0'; // 创建文件图标 const fileIcon = document.createElement('span'); fileIcon.className = 'file-icon'; fileIcon.innerHTML = '📄'; fileIcon.style.fontSize = '14px'; // 创建文件链接 const fileLink = document.createElement('a'); fileLink.href = 'javascript:void(0)'; fileLink.textContent = getFileNameFromPath(file.fileName); fileLink.onclick = function() { downloadFile(file.fileName.replace('./upload/', '')); }; fileLink.style.fontSize = '14px'; fileLink.style.textDecoration = 'none'; fileItemDiv.appendChild(fileIcon); fileItemDiv.appendChild(fileLink); fileListDiv.appendChild(fileItemDiv); }); fileListContainer.appendChild(fileListTitle); fileListContainer.appendChild(fileListDiv); fileCell.appendChild(fileListContainer); } // 添加单元格到行中 row.appendChild(wellNameCell); row.appendChild(sampleFieldCell); row.appendChild(valueIntervalCell); row.appendChild(globalMax1Cell); row.appendChild(globalMax2Cell); row.appendChild(contentCell); row.appendChild(personnelListCell); row.appendChild(fileCell); // 合并后的文件列 // 添加行到表格中 tbody.appendChild(row); }); } // 从文件路径中提取文件名 function getFileNameFromPath(filePath) { if (!filePath) return ''; return filePath.split('/').pop(); } //下载 //下载 function downloadFile(fileName) { fetch('/deescloud/download_ds_file?id=' + encodeURIComponent(fileName)) .then(response => { if (!response.ok) { throw new Error('网络响应异常: ' + response.status); } // 从URL中提取文件名,如果没有指定则使用传递的文件名 let filename = fileName ? fileName.split('/').pop() : 'downloaded_file'; // 尝试从Content-Disposition头获取文件名(如果后端设置了的话) const contentDisposition = response.headers.get('Content-Disposition'); if (contentDisposition) { const filenameMatch = contentDisposition.match(/filename="?(.+)"?/); if (filenameMatch && filenameMatch[1]) { filename = filenameMatch[1]; } } return response.blob().then(blob => ({ blob, filename })); }) .then(({ blob, filename }) => { // 创建下载链接 const url = window.URL.createObjectURL(blob); const link = document.createElement('a'); link.href = url; link.download = filename; link.style.display = 'none'; document.body.appendChild(link); link.click(); document.body.removeChild(link); window.URL.revokeObjectURL(url); }) .catch(error => { console.error('下载文件出错:', error); alert('文件下载失败: ' + error.message); }); } // 添加文件上传处理函数 function handleFileUpload(event, item) { const file = event.target.files[0]; if (!file) return; // 调试信息 - 打印整个item对象 console.log('上传数据项:', item); // 创建FormData对象 const formData = new FormData(); // 添加文件 formData.append('file', file); // 添加额外参数(与Element UI示例中:data="upload_param(scope.row)"一致) // 确保正确获取item中的id const id = item.id || ''; const wellName = item.wellName || ''; const opuser = localStorage.getItem("online_user") || ''; const instrument = item.instrument || ''; // 将参数添加到FormData中 formData.append('id', id); formData.append('wellName', wellName); formData.append('opuser', opuser); formData.append('type', "tool_detail"); // 显示上传中提示 const uploadButton = event.target.nextElementSibling; const originalText = uploadButton.textContent; uploadButton.textContent = '上传中...'; uploadButton.disabled = true; // 显示调试信息 console.log('发送的参数:', { id: id, wellName: wellName, opuser: opuser, instrument: instrument }); // 发送上传请求 fetch('/deescloud/upload', { method: 'POST', body: formData // 使用FormData,与Element UI的实现方式一致 }) .then(response => response.json()) .then(data => { console.log('上传成功:', data); // 调用成功回调函数(模拟Element UI的on-success) if (typeof upload_file_success === 'function') { upload_file_success(data, file, [data]); } // 局部刷新文件列表 refreshFileList(item.id, file); }) .catch(error => { console.error('上传失败:', error); // 调用错误回调函数(模拟Element UI的on-error) if (typeof upload_file_error === 'function') { upload_file_error(error, file, []); } alert('文件上传失败: ' + error.message); }) .finally(() => { // 恢复按钮状态 uploadButton.textContent = originalText; uploadButton.disabled = false; // 清空文件输入框 event.target.value = ''; }); } // 局部刷新文件列表 function refreshFileList(itemId, uploadedFile) { // 查找对应行的文件列表容器 const tbody = document.getElementById('wellDataBody'); if (!tbody) return; // 查找包含该itemId的行 const rows = tbody.querySelectorAll('tr'); for (let i = 0; i < rows.length; i++) { const row = rows[i]; const uploadInput = row.querySelector(`#upload-${itemId}`); if (uploadInput) { // 找到对应的文件单元格 const fileCell = row.cells[row.cells.length - 1]; // 最后一个单元格是文件列 if (fileCell) { // 查找或创建文件列表容器 let fileListContainer = fileCell.querySelector('.file-list-container'); if (!fileListContainer) { fileListContainer = document.createElement('div'); fileListContainer.className = 'file-list-container'; fileListContainer.style.marginTop = '10px'; const fileListTitle = document.createElement('div'); fileListTitle.textContent = '已上传文件:'; fileListTitle.style.fontSize = '12px'; fileListTitle.style.color = '#666'; fileListTitle.style.marginBottom = '5px'; fileListTitle.style.fontWeight = 'bold'; const fileListDiv = document.createElement('div'); fileListDiv.className = 'file-list'; fileListContainer.appendChild(fileListTitle); fileListContainer.appendChild(fileListDiv); fileCell.appendChild(fileListContainer); } // 获取文件列表div const fileListDiv = fileListContainer.querySelector('.file-list'); // 创建新文件项 const fileItemDiv = document.createElement('div'); fileItemDiv.className = 'file-item'; fileItemDiv.style.padding = '3px 0'; // 创建文件图标 const fileIcon = document.createElement('span'); fileIcon.className = 'file-icon'; fileIcon.innerHTML = '📄'; fileIcon.style.fontSize = '14px'; // 创建文件链接 const fileLink = document.createElement('a'); fileLink.href = 'javascript:void(0)'; fileLink.textContent = uploadedFile.name; // 由于刚上传的文件还没有ID,我们暂时使用文件名作为下载参数 fileLink.onclick = function() { console.log('下载文件:', uploadedFile.name); downloadFile(uploadedFile.name); }; fileLink.style.fontSize = '14px'; fileLink.style.textDecoration = 'none'; fileItemDiv.appendChild(fileIcon); fileItemDiv.appendChild(fileLink); fileListDiv.appendChild(fileItemDiv); } break; } } } // 模拟Element UI的on-success回调 function upload_file_success(response, file, fileList) { console.log('上传成功回调:', response); // 你可以在这里添加自定义的成功处理逻辑 } // 模拟Element UI的on-error回调 function upload_file_error(error, file, fileList) { console.log('上传失败回调:', error); // 你可以在这里添加自定义的错误处理逻辑 } async function fetchToolData(wellName, seriesNum, instrumentNum, flag, content) { console.log("wellName----------", wellName); console.log("seriesNum----------", seriesNum); console.log("instrumentNum----------", instrumentNum); try { // 添加 await 关键字 const response = await axios.post('/deescloud/getInstrumentMess', { opuser: localStorage.getItem("online_user"), opuser_uuid: localStorage.getItem("uuid"), series: seriesNum, instrument: instrumentNum, wellName: wellName, flag: flag, content: content }, { headers: { 'Content-Type': 'application/json' } }); // 检查响应状态 if (response.status !== 200) { throw new Error(`HTTP error! status: ${response.status}`); } //基本信息 renderInstrumentData(response.data); //上井情况 populateBasicInfo(response.data); //维保情况 populateMaintenanceInfo(response.data.data1); //部门信息 renderDeptInfo(response.data); // 调用新接口获取更多数据 // if (response.data && response.data.data && response.data.data.length > 0) { // const firstItem = response.data.data[0]; // await fetchLcmData(firstItem); // } return response.data; } catch (error) { console.error('获取仪器数据失败:', error); // 添加错误提示(可选) if (typeof this !== 'undefined' && this.$notify) { this.$notify.error({ title: '数据获取失败', message: '请检查网络或联系管理员', duration: 5000 }); } else { console.error('获取仪器数据失败,请稍后重试'); } return null; } } // 维保情况数据渲染 function populateMaintenanceInfo(data) { const tbody = document.getElementById('maintenanceDataBody'); if (!tbody) return; // 清空现有内容 tbody.innerHTML = ''; // 检查数据是否存在且为数组 if (!data || !Array.isArray(data)) { console.warn('No valid maintenance data found'); return; } // 如果没有维保数据 if (data.length === 0) { const emptyRow = document.createElement('tr'); const emptyCell = document.createElement('td'); emptyCell.colSpan = 4; emptyCell.textContent = '暂无维保记录'; emptyCell.style.textAlign = 'center'; emptyRow.appendChild(emptyCell); tbody.appendChild(emptyRow); return; } // 遍历数据并创建表格行 data.forEach(item => { const row = document.createElement('tr'); // 时间 (使用time字段) const timeCell = document.createElement('td'); timeCell.textContent = item.time ? item.time.split(' ')[0] : ''; // 只显示日期部分 // 等级 const locationCell = document.createElement('td'); locationCell.textContent = item.repair_level ? `${item.repair_level}` : ''; // 维保信息 (使用note字段,结合repair_level) const noteCell = document.createElement('td'); const levelText = item.repair_level ? `等级${item.repair_level}维保` : ''; const noteText = item.note || ''; noteCell.textContent = levelText && noteText ? `${levelText},${noteText}` : (levelText || noteText || ''); // 维保人 (使用applicanter字段) const applicantCell = document.createElement('td'); applicantCell.textContent = item.applicanter || ''; // 添加单元格到行中 row.appendChild(timeCell); row.appendChild(locationCell); row.appendChild(noteCell); row.appendChild(applicantCell); // 添加行到表格中 tbody.appendChild(row); }); } // 新增维保记录按钮点击处理函数 function addMaintenanceRecord() { // 获取URL中的参数 const seriesNum = getUrlParameter('series'); const instrumentNum = getUrlParameter('instrument'); const wellName = getUrlParameter('well'); // 创建模态框 const modal = document.createElement('div'); modal.id = 'maintenanceModal'; modal.style.cssText = ` display: block; position: fixed; z-index: 10000; left: 0; top: 0; width: 100%; height: 100%; background-color: rgba(0,0,0,0.5); `; modal.innerHTML = `