diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index b2bdec2..fdf1fc8 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,5 +2,6 @@
+
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..7a73a41
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,2 @@
+{
+}
\ No newline at end of file
diff --git a/scripts/tool_detail-en.js b/scripts/tool_detail-en.js
new file mode 100644
index 0000000..6c307c9
--- /dev/null
+++ b/scripts/tool_detail-en.js
@@ -0,0 +1,1901 @@
+ // 获取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);
+ return response.data;
+ } catch (error) {
+ console.error('获取仪器数据失败:', error);
+
+ // 添加错误提示(可选)
+ if (typeof this !== 'undefined' && this.$notify) {
+ this.$notify.error({
+ title: 'Data acquisition failed',
+ message: 'Please check the network or contact the administrator',
+ 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 = '';
+
+ // 遍历数据并创建表格行
+ // 井上仪器信息
+ if (data.data && Array.isArray(data.data)) {
+ data.data.forEach(item => {
+ const row = document.createElement('tr');
+
+ // 井名
+ const wellNameCell = document.createElement('td');
+ wellNameCell.textContent = item.wellName || '';
+ wellNameCell.classList.add('table-cell-wrap', 'fixed-width-80');
+
+ // 入井工作情况 (使用sampleField)
+ const sampleFieldCell = document.createElement('td');
+ sampleFieldCell.textContent = item.sampleField || '';
+ sampleFieldCell.classList.add('table-cell-wrap', 'fixed-width-100');
+
+ // 施工井段 (使用valueInterval)
+ const valueIntervalCell = document.createElement('td');
+ valueIntervalCell.textContent = item.valueInterval || '';
+ valueIntervalCell.classList.add('table-cell-wrap', 'fixed-width-100');
+
+ // 最高工作温度 (使用globalMax1 + °C)
+ const globalMax1Cell = document.createElement('td');
+ globalMax1Cell.textContent = item.globalMax1 ? item.globalMax1 + '°C' : '';
+ globalMax1Cell.classList.add('table-cell-wrap', 'fixed-width-80');
+
+ // 最高承压 (使用globalMax2 + MPa)
+ const globalMax2Cell = document.createElement('td');
+ globalMax2Cell.textContent = item.globalMax2 ? item.globalMax2 + 'MPa' : '';
+ globalMax2Cell.classList.add('table-cell-wrap', 'fixed-width-80');
+
+ // 仪器工作情况 (使用content)
+ const contentCell = document.createElement('td');
+ contentCell.textContent = item.content || '';
+ contentCell.classList.add('table-cell-wrap', 'fixed-width-100');
+
+ // 上井人 (使用personnelList)
+ const personnelListCell = document.createElement('td');
+ personnelListCell.textContent = item.personnelList || '';
+ personnelListCell.classList.add('table-cell-wrap', 'fixed-width-80');
+
+ // 文件列(合并了操作和文件)
+ const fileCell = document.createElement('td');
+ fileCell.className = 'file-column';
+ fileCell.classList.add('fixed-width-160', 'table-cell-wrap');
+
+ // 上传附件部分
+ 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 = 'Upload';
+ 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 = 'Uploaded file:';
+ 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';
+
+ // 添加计数器,用于跟踪有效文件数量
+ let validFileCount = 0;
+
+ item.data.forEach(file => {
+ // 检查文件名是否为空
+ if (!file.fileName) {
+ return; // 跳过空文件名的文件
+ }
+
+ const fileItemDiv = document.createElement('div');
+ fileItemDiv.className = 'file-item';
+ fileItemDiv.style.padding = '3px 0';
+ fileItemDiv.style.display = 'flex';
+ fileItemDiv.style.alignItems = 'center';
+
+ // 创建删除图标
+ const deleteIcon = document.createElement('span');
+ deleteIcon.className = 'delete-icon';
+ deleteIcon.innerHTML = '×';
+ deleteIcon.style.color = 'red';
+ deleteIcon.style.fontSize = '18px';
+ deleteIcon.style.cursor = 'pointer';
+ deleteIcon.style.marginRight = '5px';
+ deleteIcon.title = 'delete file';
+
+ // 添加删除事件
+ deleteIcon.onclick = function() {
+ showConfirmDialog('Are you sure you want to delete this file?', () => {
+ deleteFile(file.realFileName,file.id, fileItemDiv);
+ });
+ };
+
+ // 创建文件图标
+ const fileIcon = document.createElement('span');
+ fileIcon.className = 'file-icon';
+ fileIcon.style.fontSize = '14px';
+ fileIcon.style.marginRight = '5px';
+
+ // 创建文件链接
+ const fileLink = document.createElement('a');
+ fileLink.href = 'javascript:void(0)';
+ fileLink.textContent = getFileNameFromPath(file.fileName);
+ fileLink.style.fontSize = '14px';
+ fileLink.onclick = function() {
+ downloadFile(file.realFileName.replace('./upload/', ''));
+ };
+
+ fileItemDiv.appendChild(deleteIcon);
+ fileItemDiv.appendChild(fileIcon);
+ fileItemDiv.appendChild(fileLink);
+ fileListDiv.appendChild(fileItemDiv);
+
+ // 增加有效文件计数
+ validFileCount++;
+ });
+
+ // 只有当存在有效文件时才显示文件列表
+ if (validFileCount > 0) {
+ fileListContainer.appendChild(fileListTitle);
+ fileListContainer.appendChild(fileListDiv);
+ fileCell.appendChild(fileListContainer);
+ }
+ }
+
+ // 链接列
+ const linkCell = document.createElement('td');
+ linkCell.classList.add('fixed-width-260', 'table-cell-wrap');
+
+ // 创建链接容器
+ const linkContainer = document.createElement('div');
+ linkContainer.className = 'link-container';
+
+ linkContainer.style.display = 'flex';
+ linkContainer.style.alignItems = 'center';
+
+ // 显示区域
+ const linkDisplay = document.createElement('div');
+ linkDisplay.className = 'link-display';
+ linkDisplay.style.flex = '1';
+ linkDisplay.style.padding = '6px 12px';
+ linkDisplay.style.minHeight = '20px';
+ linkDisplay.style.marginRight = '10px';
+ linkDisplay.textContent = item.link || 'No data';
+
+ // 编辑按钮
+ const editLinkButton = document.createElement('button');
+ editLinkButton.className = 'edit-link-btn';
+ editLinkButton.textContent = 'Editor';
+ editLinkButton.style.padding = '6px 12px';
+ editLinkButton.style.backgroundColor = '#409eff';
+ editLinkButton.style.border = '1px solid #409eff';
+ editLinkButton.style.borderRadius = '4px';
+ editLinkButton.style.color = 'white';
+ editLinkButton.style.fontSize = '14px';
+ editLinkButton.style.cursor = 'pointer';
+ editLinkButton.style.flexShrink = '0';
+
+ // 输入框(初始隐藏)
+ const linkInput = document.createElement('input');
+ linkInput.type = 'text';
+ linkInput.className = 'link-input';
+ linkInput.style.flex = '1';
+ linkInput.style.padding = '6px 12px';
+ linkInput.style.border = '1px solid #dcdfe6';
+ linkInput.style.borderRadius = '4px';
+ linkInput.style.fontSize = '14px';
+ linkInput.style.marginRight = '10px';
+ linkInput.style.minWidth = '150px';
+ linkInput.style.display = 'none';
+ linkInput.value = item.link || '';
+ linkInput.placeholder = 'Please enter the link information';
+
+ // 确认按钮(初始隐藏)
+ const confirmLinkButton = document.createElement('button');
+ confirmLinkButton.className = 'confirm-link-btn';
+ confirmLinkButton.textContent = 'Confirm';
+ confirmLinkButton.style.padding = '6px 12px';
+ confirmLinkButton.style.backgroundColor = '#67c23a';
+ confirmLinkButton.style.border = '1px solid #67c23a';
+ confirmLinkButton.style.borderRadius = '4px';
+ confirmLinkButton.style.color = 'white';
+ confirmLinkButton.style.fontSize = '14px';
+ confirmLinkButton.style.cursor = 'pointer';
+ confirmLinkButton.style.flexShrink = '0';
+ confirmLinkButton.style.display = 'none';
+
+ // 编辑按钮点击事件
+ editLinkButton.addEventListener('click', function() {
+ // 切换到编辑模式
+ linkDisplay.style.display = 'none';
+ linkInput.style.display = 'block';
+ editLinkButton.style.display = 'none';
+ confirmLinkButton.style.display = 'block';
+ linkInput.focus();
+ });
+
+ // 确认按钮点击事件
+ confirmLinkButton.addEventListener('click', async function() {
+ // 保存链接数据
+ try {
+ const response = await axios.post('/deescloud/saveLinkData', {
+ opuser: localStorage.getItem("online_user"),
+ opuser_uuid: localStorage.getItem("uuid"),
+ id: item.id,
+ link: linkInput.value,
+ wellName: getUrlParameter('well'),
+ series: getUrlParameter('series'),
+ instrument: getUrlParameter('instrument'),
+ type: "tool_detail_instrument"
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+
+ if (response.status === 200) {
+ // 更新显示
+ linkDisplay.textContent = linkInput.value || 'No data';
+
+ // 切换回显示模式
+ linkDisplay.style.display = 'block';
+ linkInput.style.display = 'none';
+ editLinkButton.style.display = 'block';
+ confirmLinkButton.style.display = 'none';
+
+ console.log('链接数据保存成功');
+ } else {
+ throw new Error('保存失败');
+ }
+ } catch (error) {
+ console.error('保存链接数据失败:', error);
+ }
+ });
+
+ // 回车键确认
+ linkInput.addEventListener('keypress', function(e) {
+ if (e.key === 'Enter') {
+ confirmLinkButton.click();
+ }
+ });
+
+ // 组装链接容器
+ linkContainer.appendChild(linkDisplay);
+ linkContainer.appendChild(linkInput);
+ linkContainer.appendChild(editLinkButton);
+ linkContainer.appendChild(confirmLinkButton);
+
+ // 添加到链接单元格
+ linkCell.appendChild(linkContainer);
+
+ // 添加单元格到行中
+ row.appendChild(wellNameCell);
+ row.appendChild(sampleFieldCell);
+ row.appendChild(valueIntervalCell);
+ row.appendChild(globalMax1Cell);
+ row.appendChild(globalMax2Cell);
+ row.appendChild(contentCell);
+ row.appendChild(personnelListCell);
+ row.appendChild(fileCell); // 合并后的文件列
+ row.appendChild(linkCell); // 链接列
+
+ // 添加行到表格中
+ 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);
+ });
+}
+
+// 删除文件函数
+function deleteFile(fileName, id, fileItemElement) {
+ // 调用删除接口
+ fetch('/deescloud/delete_ds_file', {
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: JSON.stringify({
+ fileName: fileName,
+ id: id
+ })
+ })
+ .then(response => response.json())
+ .then(data => {
+ // 删除成功,从页面移除该文件项
+ fileItemElement.remove();
+ console.log('文件删除成功');
+
+ // 检查是否还有其他文件项,如果没有则移除整个文件列表容器
+ const fileListContainer = fileItemElement.closest('.file-list-container');
+ const fileListDiv = fileListContainer.querySelector('.file-list');
+
+ // 如果文件列表为空,则移除整个容器
+ if (fileListDiv && fileListDiv.children.length === 0) {
+ fileListContainer.remove();
+ }
+ });
+}
+
+// 添加文件上传处理函数
+function handleMaintenanceFileUpload(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 = getUrlParameter('well') || '';
+ const opuser = localStorage.getItem("online_user") || '';
+ const instrument = getUrlParameter('instrument') || '';
+ const series = getUrlParameter('series') || '';
+
+ // 将参数添加到FormData中
+ formData.append('id', id);
+ formData.append('wellName', wellName);
+ formData.append('opuser', opuser);
+ formData.append('type', "tool_detail_repair");
+ formData.append('series', series);
+ formData.append('instrument', instrument);
+
+ // 显示上传中提示
+ const uploadButton = event.target.nextElementSibling;
+ const originalText = uploadButton.textContent;
+ uploadButton.textContent = 'Uploading...';
+ uploadButton.disabled = true;
+
+ // 显示调试信息
+ console.log('发送的参数:', {
+ id: id,
+ wellName: wellName,
+ opuser: opuser,
+ instrument: instrument,
+ series: series
+ });
+ // 发送上传请求
+ 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,data.realFileName);
+ })
+ .catch(error => {
+ console.error('上传失败:', error);
+ // 调用错误回调函数(模拟Element UI的on-error)
+ if (typeof upload_file_error === 'function') {
+ upload_file_error(error, file, []);
+ }
+ })
+ .finally(() => {
+ // 恢复按钮状态
+ uploadButton.textContent = originalText;
+ uploadButton.disabled = false;
+ // 清空文件输入框
+ event.target.value = '';
+ });
+}
+
+// 局部刷新文件列表
+function refreshMaintenanceFileList(itemId,id, uploadedFile , realFileName) {
+ // 查找对应行的文件列表容器
+ const tbody = document.getElementById('maintenanceDataBody');
+ 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-maintenance-${itemId}`);
+ if (uploadInput) {
+ // 找到对应的文件单元格
+ const fileCell = row.cells[row.cells.length - 2]; // 倒数第二列是文件列
+ 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 = 'Uploaded file:';
+ 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';
+ fileItemDiv.style.display = 'flex'; // 添加flex布局
+ fileItemDiv.style.alignItems = 'center'; // 垂直居中
+
+ // 创建删除图标(添加这部分)
+ const deleteIcon = document.createElement('span');
+ deleteIcon.className = 'delete-icon';
+ deleteIcon.innerHTML = '×';
+ deleteIcon.style.color = 'red';
+ deleteIcon.style.fontSize = '18px';
+ deleteIcon.style.cursor = 'pointer';
+ deleteIcon.style.marginRight = '5px';
+ deleteIcon.title = 'Delete file';
+
+ // 添加删除事件(添加这部分)
+ deleteIcon.onclick = function() {
+ showConfirmDialog('Are you sure you want to delete this file?', () => {
+ // 注意:这里可能需要根据实际情况调整参数
+ console.log('删除文件111111111111111:', id);
+ deleteFile(realFileName, id, fileItemDiv);
+ });
+ };
+
+ // 创建文件图标
+ const fileIcon = document.createElement('span');
+ fileIcon.className = 'file-icon';
+ fileIcon.style.fontSize = '14px';
+ fileIcon.style.marginRight = '5px'; // 添加右边距
+
+ // 创建文件链接
+ const fileLink = document.createElement('a');
+ fileLink.href = 'javascript:void(0)';
+ fileLink.textContent = uploadedFile.name;
+ fileLink.onclick = function() {
+ downloadFile(realFileName.replace('./upload/', ''));
+ };
+ fileLink.style.fontSize = '14px';
+ fileLink.style.textDecoration = 'none';
+ fileLink.style.flex = '1'; // 添加flex属性
+
+ // 按正确顺序添加元素
+ fileItemDiv.appendChild(deleteIcon); // 添加删除图标
+ fileItemDiv.appendChild(fileIcon);
+ fileItemDiv.appendChild(fileLink);
+ fileListDiv.appendChild(fileItemDiv);
+ }
+ break;
+ }
+ }
+}
+//仪器施工汇总上传文件
+function handleFileUpload(event, item) {
+ const fileInput = event.target;
+ const file = fileInput.files[0];
+
+ if (!file) {
+ console.log('未选择文件');
+ return;
+ }
+
+ // 创建FormData对象
+ const formData = new FormData();
+
+ // 添加文件
+ formData.append('file', file);
+
+ // 添加额外参数(与handleMaintenanceFileUpload函数中的一致)
+ const id = item.id || '';
+ const wellName = getUrlParameter('well') || '';
+ const opuser = localStorage.getItem("online_user") || '';
+ const instrument = getUrlParameter('instrument') || '';
+ const series = getUrlParameter('series') || '';
+
+ // 将参数添加到FormData中
+ formData.append('id', id);
+ formData.append('wellName', wellName);
+ formData.append('opuser', opuser);
+ formData.append('type', "tool_detail_instrument");
+ formData.append('series', series);
+ formData.append('instrument', instrument);
+
+ console.log('上传文件:333333333333333333333333333', {
+ id: id,
+ wellName: wellName,
+ opuser: opuser,
+ instrument: instrument,
+ series: series
+ });
+
+ // 使用fetch发送上传请求(与handleMaintenanceFileUpload函数中的一致)
+ fetch('/deescloud/upload', {
+ method: 'POST',
+ body: formData // 使用FormData,与维保记录上传方式一致
+ })
+ .then(response => response.json())
+ .then(data => {
+ console.log('文件上传成功:', data);
+ refreshFileList(item.id, file, data.data.realFileName.replace('./upload/', ''));
+ })
+ .catch(error => {
+ console.error('文件上传失败:', error);
+ // 可以在这里添加上传失败的处理逻辑
+ // 比如显示错误消息
+ })
+ .finally(() => {
+ // 清空文件输入框
+ fileInput.value = '';
+ });
+}
+
+// 局部刷新仪器施工汇总
+function refreshFileList(itemId, uploadedFile , realFileName) {
+ // 查找对应行的文件列表容器
+ 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 - 2]; // 倒数第二列是文件列
+ 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 = 'Uploaded file:';
+ 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';
+ fileItemDiv.style.display = 'flex'; // 添加flex布局
+ fileItemDiv.style.alignItems = 'center'; // 垂直居中
+
+ // 创建删除图标
+ const deleteIcon = document.createElement('span');
+ deleteIcon.className = 'delete-icon';
+ deleteIcon.innerHTML = '×';
+ deleteIcon.style.color = 'red';
+ deleteIcon.style.fontSize = '18px';
+ deleteIcon.style.cursor = 'pointer';
+ deleteIcon.style.marginRight = '5px';
+ deleteIcon.title = 'Delete file';
+
+ // 添加删除事件
+ deleteIcon.onclick = function() {
+ showConfirmDialog('确定要删除这个文件吗?', () => {
+ // 这里需要根据实际情况调整参数
+ deleteFile(uploadedFile.name, itemId, fileItemDiv);
+ });
+ };
+
+ // 创建文件图标
+ const fileIcon = document.createElement('span');
+ fileIcon.className = 'file-icon';
+ fileIcon.style.fontSize = '14px';
+ fileIcon.style.marginRight = '5px';
+
+ // 创建文件链接
+ const fileLink = document.createElement('a');
+ fileLink.href = 'javascript:void(0)';
+ fileLink.textContent = uploadedFile.name;
+ // 由于刚上传的文件还没有ID,我们暂时使用文件名作为下载参数
+ fileLink.onclick = function() {
+ console.log('下载文件:222222222222', realFileName);
+ downloadFile(realFileName);
+ };
+ fileLink.style.fontSize = '14px';
+ fileLink.style.textDecoration = 'none';
+ fileLink.style.flex = '1';
+
+ // 按正确顺序添加元素
+ fileItemDiv.appendChild(deleteIcon); // 删除图标
+ 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) {
+ 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: 'Data acquisition failed',
+ message: 'Please check the network or contact the administrator',
+ 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 = 6; // 更新为6列
+ emptyCell.textContent = 'No data';
+ 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] : ''; // 只显示日期部分
+ timeCell.classList.add('table-cell-wrap', 'fixed-width-80');
+
+ // 等级
+ const locationCell = document.createElement('td');
+ locationCell.textContent = item.repair_level ? `${item.repair_level}` : '';
+ locationCell.classList.add('table-cell-wrap', 'fixed-width-40');
+
+ // 维保信息 (仅使用note字段)
+ const noteCell = document.createElement('td');
+ noteCell.textContent = item.note || ''; // 如果没有note则留空
+ noteCell.classList.add('table-cell-wrap', 'fixed-width-180');
+
+ // 维保人 (使用applicanter字段)
+ const applicantCell = document.createElement('td');
+ applicantCell.textContent = item.applicanter || '';
+ applicantCell.classList.add('table-cell-wrap', 'fixed-width-80');
+
+ // 文件列
+ const fileCell = document.createElement('td');
+ fileCell.className = 'file-column';
+ fileCell.classList.add('fixed-width-160', 'table-cell-wrap');
+
+ // 上传附件部分
+ const uploadDiv = document.createElement('div');
+ const uploadInput = document.createElement('input');
+ uploadInput.type = 'file';
+ uploadInput.id = 'upload-maintenance-' + item.id;
+ uploadInput.style.display = 'none';
+ uploadInput.setAttribute('data-id', item.id);
+
+ const uploadButton = document.createElement('button');
+ uploadButton.textContent = 'Upload';
+ uploadButton.className = 'upload-button';
+ uploadButton.onclick = function() {
+ uploadInput.click();
+ };
+
+ uploadInput.onchange = function(e) {
+ handleMaintenanceFileUpload(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 = 'Uploaded file:';
+ 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';
+
+ // 添加计数器,用于统计实际显示的文件数量
+ let validFileCount = 0;
+
+ item.data.forEach(file => {
+ // 新增判断:只有当fileName存在时才创建DOM元素
+ if (file.fileName) {
+ validFileCount++; // 统计有效文件
+
+ const fileItemDiv = document.createElement('div');
+ fileItemDiv.className = 'file-item';
+ fileItemDiv.style.padding = '3px 0';
+ fileItemDiv.style.display = 'flex';
+ fileItemDiv.style.alignItems = 'center';
+
+ // 创建删除图标
+ const deleteIcon = document.createElement('span');
+ deleteIcon.className = 'delete-icon';
+ deleteIcon.innerHTML = '×';
+ deleteIcon.style.color = 'red';
+ deleteIcon.style.fontSize = '18px';
+ deleteIcon.style.cursor = 'pointer';
+ deleteIcon.style.marginRight = '5px';
+ deleteIcon.title = 'Delete';
+
+ // 添加删除事件
+ deleteIcon.onclick = function() {
+ showConfirmDialog('Are you sure you want to delete this file?', () => {
+ deleteFile(file.realFileName,file.id ,fileItemDiv);
+ });
+ };
+
+ // 创建文件图标
+ const fileIcon = document.createElement('span');
+ fileIcon.className = 'file-icon';
+ fileIcon.style.fontSize = '14px';
+ fileIcon.style.marginRight = '5px';
+
+ // 创建文件链接
+ const fileLink = document.createElement('a');
+ fileLink.href = 'javascript:void(0)';
+ fileLink.textContent = getFileNameFromPath(file.fileName);
+ fileLink.onclick = function() {
+ downloadFile(file.realFileName.replace('./upload/', ''));
+ };
+ fileLink.style.fontSize = '14px';
+ fileLink.style.textDecoration = 'none';
+ fileLink.style.flex = '1';
+
+ fileItemDiv.appendChild(deleteIcon);
+ fileItemDiv.appendChild(fileIcon);
+ fileItemDiv.appendChild(fileLink);
+ fileListDiv.appendChild(fileItemDiv);
+ }
+ });
+
+ // 只有当存在有效文件时才显示整个容器
+ if (validFileCount > 0) {
+ fileListContainer.appendChild(fileListTitle);
+ fileListContainer.appendChild(fileListDiv);
+ fileCell.appendChild(fileListContainer);
+ }
+ }
+
+ // 链接列
+ const linkCell = document.createElement('td');
+ linkCell.classList.add('fixed-width-260', 'table-cell-wrap');
+
+ // 创建链接容器
+ const linkContainer = document.createElement('div');
+ linkContainer.className = 'link-container';
+ linkContainer.style.display = 'flex';
+ linkContainer.style.alignItems = 'center';
+
+ // 显示区域
+ const linkDisplay = document.createElement('div');
+ linkDisplay.className = 'link-display';
+ linkDisplay.style.flex = '1';
+ linkDisplay.style.padding = '6px 12px';
+ linkDisplay.style.minHeight = '20px';
+ linkDisplay.style.marginRight = '10px';
+ linkDisplay.textContent = item.link || 'No data';
+
+ // 编辑按钮
+ const editLinkButton = document.createElement('button');
+ editLinkButton.className = 'edit-link-btn';
+ editLinkButton.textContent = 'redact';
+ editLinkButton.style.padding = '6px 12px';
+ editLinkButton.style.backgroundColor = '#409eff';
+ editLinkButton.style.border = '1px solid #409eff';
+ editLinkButton.style.borderRadius = '4px';
+ editLinkButton.style.color = 'white';
+ editLinkButton.style.fontSize = '14px';
+ editLinkButton.style.cursor = 'pointer';
+ editLinkButton.style.flexShrink = '0';
+
+ // 输入框(初始隐藏)
+ const linkInput = document.createElement('input');
+ linkInput.type = 'text';
+ linkInput.className = 'link-input';
+ linkInput.style.flex = '1';
+ linkInput.style.padding = '6px 12px';
+ linkInput.style.border = '1px solid #dcdfe6';
+ linkInput.style.borderRadius = '4px';
+ linkInput.style.fontSize = '14px';
+ linkInput.style.marginRight = '10px';
+ linkInput.style.minWidth = '150px';
+ linkInput.style.display = 'none';
+ linkInput.value = item.link || '';
+ linkInput.placeholder = 'Please enter the link information';
+
+ // 确认按钮(初始隐藏)
+ const confirmLinkButton = document.createElement('button');
+ confirmLinkButton.className = 'confirm-link-btn';
+ confirmLinkButton.textContent = 'Confirm';
+ confirmLinkButton.style.padding = '6px 12px';
+ confirmLinkButton.style.backgroundColor = '#67c23a';
+ confirmLinkButton.style.border = '1px solid #67c23a';
+ confirmLinkButton.style.borderRadius = '4px';
+ confirmLinkButton.style.color = 'white';
+ confirmLinkButton.style.fontSize = '14px';
+ confirmLinkButton.style.cursor = 'pointer';
+ confirmLinkButton.style.flexShrink = '0';
+ confirmLinkButton.style.display = 'none';
+
+ // 编辑按钮点击事件
+ editLinkButton.addEventListener('click', function() {
+ // 切换到编辑模式
+ linkDisplay.style.display = 'none';
+ linkInput.style.display = 'block';
+ editLinkButton.style.display = 'none';
+ confirmLinkButton.style.display = 'block';
+ linkInput.focus();
+ });
+
+ // 确认按钮点击事件
+ confirmLinkButton.addEventListener('click', async function() {
+ // 保存链接数据
+ try {
+ const response = await axios.post('/deescloud/saveLinkData', {
+ opuser: localStorage.getItem("online_user"),
+ opuser_uuid: localStorage.getItem("uuid"),
+ id: item.id,
+ link: linkInput.value,
+ wellName: getUrlParameter('well'),
+ series: getUrlParameter('series'),
+ instrument: getUrlParameter('instrument'),
+ type: "tool_detail_repair"
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+
+ if (response.status === 200) {
+ // 更新显示
+ linkDisplay.textContent = linkInput.value || 'No data';
+
+ // 切换回显示模式
+ linkDisplay.style.display = 'block';
+ linkInput.style.display = 'none';
+ editLinkButton.style.display = 'block';
+ confirmLinkButton.style.display = 'none';
+
+ } else {
+ throw new Error('Save failed');
+ }
+ } catch (error) {
+ console.error('保存链接数据失败:', error);
+ }
+ });
+
+ // 回车键确认
+ linkInput.addEventListener('keypress', function(e) {
+ if (e.key === 'Enter') {
+ confirmLinkButton.click();
+ }
+ });
+
+ // 组装链接容器
+ linkContainer.appendChild(linkDisplay);
+ linkContainer.appendChild(linkInput);
+ linkContainer.appendChild(editLinkButton);
+ linkContainer.appendChild(confirmLinkButton);
+
+ // 添加到链接单元格
+ linkCell.appendChild(linkContainer);
+
+ // 添加单元格到行中
+ row.appendChild(timeCell);
+ row.appendChild(locationCell);
+ row.appendChild(noteCell);
+ row.appendChild(applicantCell);
+ row.appendChild(fileCell);
+ row.appendChild(linkCell);
+
+ // 添加行到表格中
+ 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);
+ });
+}
+
+// 添加文件上传处理函数
+function handleMaintenanceFileUpload(event, item) {
+ const file = event.target.files[0];
+ if (!file) return;
+
+ // 调试信息 - 打印整个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 = getUrlParameter('well') || '';
+ const opuser = localStorage.getItem("online_user") || '';
+ const instrument = getUrlParameter('instrument') || '';
+ const series = getUrlParameter('series') || '';
+
+ // 将参数添加到FormData中
+ formData.append('id', id);
+ formData.append('wellName', wellName);
+ formData.append('opuser', opuser);
+ formData.append('type', "tool_detail_repair");
+ formData.append('series', series);
+ formData.append('instrument', instrument);
+
+ // 显示上传中提示
+ const uploadButton = event.target.nextElementSibling;
+ const originalText = uploadButton.textContent;
+ uploadButton.textContent = 'being uploaded...';
+ uploadButton.disabled = true;
+
+ // 显示调试信息
+ console.log('发送的参数:', {
+ id: id,
+ wellName: wellName,
+ opuser: opuser,
+ instrument: instrument,
+ series: series
+ });
+ // 发送上传请求
+ fetch('/deescloud/upload', {
+ method: 'POST',
+ body: formData // 使用FormData,与Element UI的实现方式一致
+ })
+ .then(response => response.json())
+ .then(data => {
+ // 调用成功回调函数(模拟Element UI的on-success)
+ if (typeof upload_file_success === 'function') {
+ upload_file_success(data, file, [data]);
+ }
+
+ // 局部刷新文件列表
+ refreshMaintenanceFileList(item.id,data.data.id, file,data.data.realFileName);
+ })
+ .catch(error => {
+ // 调用错误回调函数(模拟Element UI的on-error)
+ if (typeof upload_file_error === 'function') {
+ upload_file_error(error, file, []);
+ }
+ })
+ .finally(() => {
+ // 恢复按钮状态
+ uploadButton.textContent = originalText;
+ uploadButton.disabled = false;
+ // 清空文件输入框
+ event.target.value = '';
+ });
+}
+
+
+// 模拟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);
+ // 你可以在这里添加自定义的错误处理逻辑
+}
+
+// 新增维保记录按钮点击处理函数
+ 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 = `
+
+
+
Maintenance information
+
+
+
+
+
+
+
+
+
+
+ `;
+
+ // 添加模态框到页面
+ document.body.appendChild(modal);
+
+ // 添加事件监听器
+ document.getElementById('closeModal').addEventListener('click', closeModal);
+ document.getElementById('cancelBtn').addEventListener('click', closeModal);
+ document.getElementById('confirmBtn').addEventListener('click', submitMaintenanceRecord);
+
+ // 点击模态框外部关闭
+ modal.addEventListener('click', function(event) {
+ if (event.target === modal) {
+ closeModal();
+ }
+ });
+
+ // 阻止表单内部点击关闭模态框
+ const modalContent = modal.querySelector('div');
+ modalContent.addEventListener('click', function(event) {
+ event.stopPropagation();
+ });
+ }
+
+ // 关闭模态框函数
+ function closeModal() {
+ const modal = document.getElementById('maintenanceModal');
+ if (modal) {
+ document.body.removeChild(modal);
+ }
+ }
+
+ // 提交维保记录函数
+ function submitMaintenanceRecord() {
+ // 获取表单数据
+ const formData = {
+ series: document.getElementById('seriesInput').value,
+ instrument_id: document.getElementById('instrumentIdInput').value,
+ // repair_cnt: document.getElementById('repairCntInput').value,
+ repair_level: document.getElementById('repairLevelInput').value,
+ applicanter: document.getElementById('applicanterInput').value,
+ note: document.getElementById('noteInput').value,
+ time: new Date().toISOString().slice(0, 19).replace('T', ' '), // 当前时间
+ opuser: localStorage.getItem("online_user"),
+ opuser_uuid: localStorage.getItem("uuid")
+ };
+
+ axios.post('/deescloud/postLcm', {
+ opuser: localStorage.getItem("online_user"),
+ opuser_uuid: localStorage.getItem("uuid"),
+ oper_type: 1,
+ ...formData
+ })
+ .then(function (response) {
+ console.log('/deescloud/postLcm:', response.data);
+ // 检查返回结果
+ if (response.data.r === -1) {
+
+ alert('You are offline. Please login in again');
+
+ } else {
+ closeModal();
+ // 重新加载维保数据
+ location.reload();
+ }
+ })
+ .catch(function (error) {
+ console.error('提交失败:', error);
+ // 错误处理
+ alert('Submission failed. Please contact the administrator');
+
+ });
+ }
+
+
+
+ // 添加渲染部门信息的函数
+function renderDeptInfo(data) {
+ if (!data || !data.dept) {
+ console.warn("无部门信息");
+ return;
+ }
+ const deptContainer = document.getElementById("deptContainer");
+ if (deptContainer) {
+ deptContainer.textContent = data.dept;
+ }
+}
+
+
+// 页面加载完成后自动获取并渲染质检数据
+document.addEventListener('DOMContentLoaded', async function() {
+ // 存储每个字段的输入框状态
+ const inputStates = {
+ process_record: { visible: false, input: null },
+ process_inspection: { visible: false, input: null },
+ final_inspection: { visible: false, input: null }
+ };
+
+ // 初始化编辑按钮事件
+ document.getElementById('editProcessRecord').addEventListener('click', function() {
+ toggleEditInput(this, '生产过程记录', 'process_record', inputStates);
+ });
+
+ document.getElementById('editProcessInspection').addEventListener('click', function() {
+ toggleEditInput(this, '生产过程检验', 'process_inspection', inputStates);
+ });
+
+ document.getElementById('editFinalInspection').addEventListener('click', function() {
+ toggleEditInput(this, '成品检验记录', 'final_inspection', inputStates);
+ });
+
+ // 页面加载后立即获取并渲染质检数据
+ await loadAndRenderQualityData(inputStates);
+
+ // 将inputStates保存到全局,以便其他函数访问
+ window.inputStates = inputStates;
+});
+
+// 加载并渲染所有质检数据
+async function loadAndRenderQualityData(inputStates) {
+ try {
+ // 获取所有质检数据
+ const qualityData = await fetchAllQualityData();
+ // 渲染到对应的输入框
+ renderQualityData(qualityData, inputStates);
+ } catch (error) {
+ console.error('加载质检数据失败:', error);
+ }
+}
+
+// 获取所有质检数据
+async function fetchAllQualityData() {
+ try {
+ const seriesNum = getUrlParameter('series');
+ const instrumentNum = getUrlParameter('instrument');
+ const wellName = getUrlParameter('well');
+
+ const response = await axios.post('/deescloud/getQualityData', {
+ opuser: localStorage.getItem("online_user"),
+ opuser_uuid: localStorage.getItem("uuid"),
+ series: seriesNum,
+ instrument: instrumentNum,
+ wellName: wellName,
+ field: 'all' // 添加一个参数表示获取所有字段
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+
+ if (response.status === 200) {
+ return response.data;
+ } else {
+ throw new Error(`HTTP error! status: ${response.status}`);
+ }
+ } catch (error) {
+ console.error('获取质检数据失败:', error);
+ throw error;
+ }
+}
+
+
+// 确认并保存数据
+async function confirmAndSave(buttonElement, fieldKey, inputElement, inputStates) {
+ const state = inputStates[fieldKey];
+
+ try {
+ // 调用新增接口保存数据
+ await saveQualityData(fieldKey, inputElement.value);
+
+ // 更新显示区域的值
+ state.displayElement.textContent = inputElement.value;
+
+ // 恢复显示区域,移除输入框
+ state.displayElement.style.display = '';
+ state.input.remove();
+
+ // 恢复按钮为编辑状态
+ buttonElement.textContent = '编辑';
+ buttonElement.classList.remove('confirm-btn');
+
+ // 更新状态
+ state.visible = false;
+ } catch (error) {
+ console.error('保存失败:', error);
+ }
+}
+
+// 渲染质检数据到对应的输入框
+function renderQualityData(responseData) {
+ console.log('正在渲染数据到以下元素:', {
+ processRecordDisplay: document.getElementById('processRecordDisplay'),
+ processInspectionDisplay: document.getElementById('processInspectionDisplay'),
+ finalInspectionDisplay: document.getElementById('finalInspectionDisplay')
+});
+ if (!responseData?.data) return;
+ const { process_record, process_inspection, final_inspection } = responseData.data;
+
+ // 更新显示区域
+ const setDisplayValue = (id, value) => {
+ const element = document.getElementById(id);
+ if (element) element.textContent = value;
+ };
+
+ setDisplayValue('processRecordDisplay', process_record);
+ setDisplayValue('processInspectionDisplay', process_inspection);
+ setDisplayValue('finalInspectionDisplay', final_inspection);
+
+ // 如果输入框已创建,也更新它们的值(可选)
+ if (window.inputStates) {
+ const updateInputValue = (state, value) => {
+ if (state?.input) state.input.value = value || '';
+ };
+
+ updateInputValue(inputStates.process_record, process_record);
+ updateInputValue(inputStates.process_inspection, process_inspection);
+ updateInputValue(inputStates.final_inspection, final_inspection);
+ }
+}
+
+
+
+// 切换编辑输入框的显示/隐藏
+function toggleEditInput(buttonElement, fieldName, fieldKey, inputStates) {
+ const container = buttonElement.parentElement;
+ const state = inputStates[fieldKey];
+
+ if (state.visible) {
+ // 如果输入框已显示,执行保存操作
+ confirmAndSave(buttonElement, fieldKey, state.input, inputStates);
+ } else {
+ // 如果输入框未显示,创建并显示输入框
+ showEditInput(buttonElement, fieldName, fieldKey, inputStates);
+ }
+}
+
+// 显示编辑输入框
+function showEditInput(buttonElement, fieldName, fieldKey, inputStates) {
+ const container = buttonElement.closest('.quality-header');
+ const state = inputStates[fieldKey];
+ const displayElement = container.querySelector('.quality-display');
+ const currentValue = displayElement.textContent.trim();
+
+ // 如果输入框不存在,则创建
+ if (!state.input) {
+ // 创建输入框
+ const input = document.createElement('input');
+ input.type = 'text';
+ input.className = 'edit-input';
+ input.value = currentValue;
+ input.placeholder = `Please enter ${fieldName}`;
+
+ // 保存输入框引用
+ state.input = input;
+ state.container = container;
+ state.displayElement = displayElement;
+ }
+
+ // 隐藏显示区域,显示输入框
+ displayElement.style.display = 'none';
+ container.insertBefore(state.input, buttonElement);
+
+ // 更新状态
+ state.visible = true;
+
+ // 修改按钮为确认按钮
+ buttonElement.textContent = 'Confirm';
+ buttonElement.classList.add('confirm-btn');
+
+ // 聚焦到输入框
+ state.input.focus();
+
+ // 添加回车事件监听
+ state.input.addEventListener('keypress', function onEnter(event) {
+ if (event.key === 'Enter') {
+ confirmAndSave(buttonElement, fieldKey, state.input, inputStates);
+ }
+ });
+}
+
+
+// 新增质检记录数据
+async function saveQualityData(fieldKey, value) {
+ try {
+ const seriesNum = getUrlParameter('series');
+ const instrumentNum = getUrlParameter('instrument');
+ const wellName = getUrlParameter('well');
+
+ const response = await axios.post('/deescloud/addQualityData', {
+ opuser: localStorage.getItem("online_user"),
+ opuser_uuid: localStorage.getItem("uuid"),
+ series: seriesNum,
+ instrument: instrumentNum,
+ field: fieldKey,
+ value: value,
+ wellName:wellName
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+
+ if (response.status === 200) {
+ console.log('质检记录保存成功:', response.data);
+ return response.data;
+ } else {
+ throw new Error(`HTTP error! status: ${response.status}`);
+ }
+ } catch (error) {
+ console.error('质检记录保存失败:', error);
+ throw error;
+ }
+}
+
+// 查询质检记录数据
+async function fetchQualityData(fieldKey, inputElement) {
+ try {
+ const seriesNum = getUrlParameter('series');
+ const instrumentNum = getUrlParameter('instrument');
+ const WellName = getUrlParameter('well');
+
+ const response = await axios.post('/deescloud/getQualityData', {
+ opuser: localStorage.getItem("online_user"),
+ opuser_uuid: localStorage.getItem("uuid"),
+ series: seriesNum,
+ instrument: instrumentNum,
+ field: fieldKey,
+ WellName:WellName
+ }, {
+ headers: {
+ 'Content-Type': 'application/json'
+ }
+ });
+
+ if (response.status === 200) {
+ // 填充查询到的数据到输入框
+ inputElement.value = response.data.value || '';
+ return response.data;
+ } else {
+ throw new Error(`HTTP error! status: ${response.status}`);
+ }
+ } catch (error) {
+ console.error('质检记录查询失败:', error);
+ inputElement.placeholder = 'Data query failed';
+ throw error;
+ }
+}
+
+// 显示自定义确认对话框
+function showConfirmDialog(message, onConfirm) {
+ // 创建遮罩层
+ const overlay = document.createElement('div');
+ overlay.style.position = 'fixed';
+ overlay.style.top = '0';
+ overlay.style.left = '0';
+ overlay.style.width = '100%';
+ overlay.style.height = '100%';
+ overlay.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';
+ overlay.style.display = 'flex';
+ overlay.style.justifyContent = 'center';
+ overlay.style.alignItems = 'center';
+ overlay.style.zIndex = '10000';
+ overlay.style.opacity = '0';
+ overlay.style.transition = 'opacity 0.3s ease';
+
+ // 创建对话框
+ const dialog = document.createElement('div');
+ dialog.style.backgroundColor = 'white';
+ dialog.style.borderRadius = '8px';
+ dialog.style.boxShadow = '0 4px 20px rgba(0, 0, 0, 0.3)';
+ dialog.style.padding = '0';
+ dialog.style.minWidth = '320px';
+ dialog.style.maxWidth = '90%';
+ dialog.style.transform = 'scale(0.7)';
+ dialog.style.transition = 'transform 0.3s ease, opacity 0.3s ease';
+ dialog.style.opacity = '0';
+ dialog.style.fontFamily = '"Helvetica Neue", Helvetica, Arial, sans-serif';
+
+ // 对话框头部
+ const header = document.createElement('div');
+ header.style.padding = '20px 20px 10px';
+ header.style.fontSize = '20px';
+ header.style.fontWeight = '500';
+ header.style.color = '#333';
+ header.style.textAlign = 'center';
+ header.textContent = 'Confirm operation';
+
+ // 对话框内容
+ const content = document.createElement('div');
+ content.style.padding = '10px 20px 20px';
+ content.style.fontSize = '16px';
+ content.style.color = '#666';
+ content.style.textAlign = 'center';
+ content.textContent = message;
+
+ // 对话框底部按钮区域
+ const footer = document.createElement('div');
+ footer.style.display = 'flex';
+ footer.style.justifyContent = 'center';
+ footer.style.padding = '15px';
+ footer.style.gap = '15px';
+ footer.style.backgroundColor = '#f8f9fa';
+ footer.style.borderTop = '1px solid #eee';
+ footer.style.borderRadius = '0 0 8px 8px';
+
+ // 取消按钮
+ const cancelButton = document.createElement('button');
+ cancelButton.textContent = 'Cancel';
+ cancelButton.style.padding = '10px 20px';
+ cancelButton.style.backgroundColor = '#fff';
+ cancelButton.style.border = '1px solid #dcdfe6';
+ cancelButton.style.borderRadius = '4px';
+ cancelButton.style.color = '#606266';
+ cancelButton.style.fontSize = '14px';
+ cancelButton.style.cursor = 'pointer';
+ cancelButton.style.transition = 'all 0.3s';
+ cancelButton.style.minWidth = '80px';
+
+ // 确认按钮
+ const confirmButton = document.createElement('button');
+ confirmButton.textContent = 'Confirm';
+ confirmButton.style.padding = '10px 20px';
+ confirmButton.style.backgroundColor = '#409eff';
+ confirmButton.style.border = '1px solid #409eff';
+ confirmButton.style.borderRadius = '4px';
+ confirmButton.style.color = 'white';
+ confirmButton.style.fontSize = '14px';
+ confirmButton.style.cursor = 'pointer';
+ confirmButton.style.transition = 'all 0.3s';
+ confirmButton.style.minWidth = '80px';
+
+ // 按钮悬停效果
+ cancelButton.addEventListener('mouseenter', function() {
+ this.style.backgroundColor = '#f5f5f5';
+ });
+
+ cancelButton.addEventListener('mouseleave', function() {
+ this.style.backgroundColor = '#fff';
+ });
+
+ confirmButton.addEventListener('mouseenter', function() {
+ this.style.backgroundColor = '#66b1ff';
+ this.style.borderColor = '#66b1ff';
+ });
+
+ confirmButton.addEventListener('mouseleave', function() {
+ this.style.backgroundColor = '#409eff';
+ this.style.borderColor = '#409eff';
+ });
+
+ // 按钮事件
+ cancelButton.onclick = function() {
+ closeDialog();
+ };
+
+ confirmButton.onclick = function() {
+ closeDialog();
+ if (onConfirm) onConfirm();
+ };
+
+ // 关闭对话框函数
+ function closeDialog() {
+ dialog.style.transform = 'scale(0.7)';
+ dialog.style.opacity = '0';
+ overlay.style.opacity = '0';
+
+ setTimeout(() => {
+ if (overlay.parentNode) {
+ document.body.removeChild(overlay);
+ }
+ }, 300);
+ }
+
+ // ESC键关闭对话框
+ function handleEscKey(event) {
+ if (event.key === 'Escape') {
+ closeDialog();
+ document.removeEventListener('keydown', handleEscKey);
+ }
+ }
+
+ // 组装对话框
+ footer.appendChild(cancelButton);
+ footer.appendChild(confirmButton);
+
+ dialog.appendChild(header);
+ dialog.appendChild(content);
+ dialog.appendChild(footer);
+
+ overlay.appendChild(dialog);
+ document.body.appendChild(overlay);
+
+ // 点击遮罩层关闭对话框
+ overlay.onclick = function(event) {
+ if (event.target === overlay) {
+ closeDialog();
+ document.removeEventListener('keydown', handleEscKey);
+ }
+ };
+
+ // 添加ESC键监听
+ document.addEventListener('keydown', handleEscKey);
+
+ // 动画显示
+ setTimeout(() => {
+ overlay.style.opacity = '1';
+ dialog.style.transform = 'scale(1)';
+ dialog.style.opacity = '1';
+ }, 10);
+}
+
+// 设置序列号
+document.addEventListener('DOMContentLoaded', function() {
+ const seriesNum = getUrlParameter('series');
+ if (seriesNum) {
+ document.getElementById('seriesNum').textContent = seriesNum;
+ }
+
+ // 获取URL中的well参数并更新h1标题
+ const wellName = getUrlParameter('well');
+ if (wellName) {
+ document.querySelector('h1').textContent = wellName;
+ }
+});
\ No newline at end of file
diff --git a/scripts/tool_detail.js b/scripts/tool_detail.js
index 277992b..77bc0a9 100644
--- a/scripts/tool_detail.js
+++ b/scripts/tool_detail.js
@@ -1420,12 +1420,12 @@ function upload_file_error(error, file, fileList) {
}
// 提交维保记录函数
- function submitMaintenanceRecord() {
+ function submitMaintenanceRecord() {
// 获取表单数据
const formData = {
series: document.getElementById('seriesInput').value,
instrument_id: document.getElementById('instrumentIdInput').value,
- repair_cnt: document.getElementById('repairCntInput').value,
+ // repair_cnt: document.getElementById('repairCntInput').value,
repair_level: document.getElementById('repairLevelInput').value,
applicanter: document.getElementById('applicanterInput').value,
note: document.getElementById('noteInput').value,
@@ -1441,13 +1441,21 @@ function upload_file_error(error, file, fileList) {
...formData
})
.then(function (response) {
- console.log('提交成功:', response.data);
- closeModal();
- // 重新加载维保数据
- location.reload();
+ console.log('/deescloud/postLcm:', response.data);
+ // 检查返回结果
+ if (response.data.r === -1) {
+ alert('您处于离线状态,请重新登录');
+ } else {
+ closeModal();
+ location.reload();
+ }
})
.catch(function (error) {
console.error('提交失败:', error);
+ // 错误处理
+
+ alert('提交失败,请联系管理员');
+
});
}
diff --git a/scripts/tools-en.js b/scripts/tools-en.js
index c5babe7..64085d6 100644
--- a/scripts/tools-en.js
+++ b/scripts/tools-en.js
@@ -41,7 +41,7 @@
+ width="260">
@@ -49,7 +49,8 @@
Report Detail
Export
-
+
Export(Testing)
+
@@ -68,52 +69,119 @@
:total="recordTotal" style="background-color: #ECF5FF;">
+
+
+
+
+
+
+
+
Risk warning:
+
+
+
+
+
+
+
+
+
+ {{ item.series_num }} {{ item.instrument_id }} | Instrument Normal
+
+
+
+ {{ item.time }} | {{ item.series_num }} |
+
+
+
+
+
+ {{ item.err_level }} | {{ item.context }}
+
+
+
+
+ Details
+
+
+
+
+
+
+
+
+
+
The instruments in this well are working normally
+
+
+
+
+
+
+
+
+
-
-
-
-
Risk warning:
-
-
-
- {{item.time}}
- {{item.err_level}}:
- {{item.context}}
-
-
-
-
-
-
The instruments in this well are working normally.
-
-
-
-
+ //
+ //
+ //
+ //
Risk warning:
+ //
+ //
+ //
+ // {{item.time}}
+ // {{item.err_level}}:
+ // {{item.context}}
+ //
+ //
+ //
+ //
+ //
+ //
No instrument information has been uploaded to this well.
+ //
+ //
+ //
+ //
`,
data(){
// 获取当前屏幕的分辨率
- let screenW = window.screen.width;
+ let screenW = window.screen.width;
let screenH = window.innerHeight;
- console.log("screen width:",screenW);
- console.log("screen height:",screenH);
- return {
- tHeight:screenH-192,
+ console.log("screen width:", screenW);
+ console.log("screen height:", screenH);
+ return {
+ tHeight: screenH - 192,
tableData: Array(0),
- input:'',
+ input: '',
currentPage: 1,
- pagesize:50,
- recordTotal:0,
-
- pdf_visible:false,
- tool_warning_data:{},
- checked:false,
- }
+ pagesize: 50,
+ recordTotal: 0,
+ pdf_visible: false,
+ tool_warning_data: [],
+ checked: false,
+ currentWellName: '' // 新增:存储当前查看的井名
+ };
},
mounted() {
var _this = this;
@@ -151,14 +219,35 @@
var fileid = response.data.fileId;
var downUrl = 'file/'+fileid;
- downloadUrl(row.wellNameSource+"-Instrument status report.pdf",downUrl);
+ downloadUrl(row.wellNameSource+"_Instrument status report.pdf",downUrl);
})
.catch(function (error) {
console.log(error);
});
},
+
+ export_mess_pdf(row) {
+ var _this = this;
+ axios.post('deescloud/get_tool_mess_pdf_en', {
+ opuser: localStorage.getItem("online_user"),
+ opuser_uuid: localStorage.getItem("uuid"),
+ wellname: row.wellNameSource
+ })
+ .then(function (response) {
+ console.log(response.data);
+ var fileid = response.data.fileId;
+ var downUrl = 'file/' + fileid;
+ console.log("downUrl-----------",downUrl);
+ console.log("wellNameSource-----------",row.wellNameSource);
+ downloadUrl(row.wellNameSource + "_Instrument status report.pdf", downUrl);
+ })
+ .catch(function (error) {
+ console.log(error);
+ });
+ },
show_pdf(row){
let _this= this;
+ this.currentWellName = row.wellNameSource;
axios.post('/deescloud/get_tool_warning_en', {
opuser:localStorage.getItem("online_user"),
opuser_uuid:localStorage.getItem("uuid"),
@@ -255,6 +344,33 @@
});
},
+
+ // 新增:打开详情页方法
+ openDetail(item) {
+ // 使用当前井名和预警项ID构建详情页URL
+ const wellName = this.currentWellName; // 不要预先编码
+ // 使用预警ID或时间戳作为唯一标识
+
+ // 构建基础URL,参数留待URLSearchParams处理
+ const detailUrl = 'tool_detail-en.html';
+
+ // 使用URLSearchParams自动处理编码
+ const params = new URLSearchParams({
+ well: wellName,
+ id: item.opuser_uuid,
+ name : item.name,
+ series: item.series_num,
+ instrument: item.instrument_id,
+ flag:item.flag,
+ content: item.context || ''
+ });
+
+ // 完整URL
+ const fullUrl = `${detailUrl}?${params.toString()}`;
+
+ // 在新标签页打开详情页
+ window.open(fullUrl, '_blank');
+ }
}
}
diff --git a/scripts/tools.js b/scripts/tools.js
index ca1eea8..11a99b9 100644
--- a/scripts/tools.js
+++ b/scripts/tools.js
@@ -22,7 +22,7 @@ var toolscomponent = {
-
+
@@ -32,7 +32,7 @@ var toolscomponent = {
报告明细
导出
-
仪器报告导出
+
导出(测试中)
@@ -63,7 +63,6 @@ var toolscomponent = {
width="60%"
>
-
风险预警:
@@ -78,7 +77,7 @@ var toolscomponent = {
>
- {{ item.series_num }} {{ item.instrument_id }} | 仪器正常
+ {{ item.series_num }} - {{ item.instrument_id }} | 仪器正常
@@ -109,7 +108,7 @@ var toolscomponent = {
-
本口井仪器工作正常。
+
本口井未上传仪器信息
@@ -117,7 +116,6 @@ var toolscomponent = {
`,
data() {
- // 获取当前屏幕的分辨率
let screenW = window.screen.width;
let screenH = window.innerHeight;
console.log("screen width:", screenW);
@@ -171,7 +169,7 @@ var toolscomponent = {
var downUrl = 'file/' + fileid;
console.log("downUrl-----------",downUrl);
console.log("wellNameSource-----------",row.wellNameSource);
- downloadUrl(row.wellNameSource + "-仪器状态报告.pdf", downUrl);
+ downloadUrl(row.wellNameSource + "_仪器状态报告.pdf", downUrl);
})
.catch(function (error) {
console.log(error);
@@ -192,7 +190,7 @@ var toolscomponent = {
var downUrl = 'file/' + fileid;
console.log("downUrl-----------",downUrl);
console.log("wellNameSource-----------",row.wellNameSource);
- downloadUrl(row.wellNameSource + "-仪器报告.pdf", downUrl);
+ downloadUrl(row.wellNameSource + "_仪器报告.pdf", downUrl);
})
.catch(function (error) {
console.log(error);
diff --git a/tool_detail-en.html b/tool_detail-en.html
new file mode 100644
index 0000000..5476155
--- /dev/null
+++ b/tool_detail-en.html
@@ -0,0 +1,581 @@
+
+
+
+
+
+ Summary of Instrument Information
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Instrument Name:
+
+
+
Basic information
+
+
+
+
+ | Date of manufacture: |
+ |
+ Date of warehousing: |
+ |
+
+
+ | Working hours: |
+ |
+ This working hours: |
+ |
+
+
+ | Firmware version: |
+ |
+
+
+
+
+
+
+
Product Quality Inspection Record
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Summary of Instrument Construction
+
+
+
+ | Well name |
+ Well work situation |
+ well section |
+ Max temp |
+ Max pressure |
+ Status |
+ Persion |
+ File |
+ Url |
+
+
+
+
+
+
+
+
+
+
+
+
Maintenance and repair situation
+
+
+
+
+
+
+ | Time |
+ Level |
+ Maintenance info |
+ Maintenance person |
+ File |
+ Url |
+
+
+
+
+ | No data |
+
+
+
+
+
+
+
Internal components
+
+
No Data
+
+
+
+
+
The department to which the instrument belongs
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/tool_detail.html b/tool_detail.html
index 0bd17f7..98d3ade 100644
--- a/tool_detail.html
+++ b/tool_detail.html
@@ -54,6 +54,10 @@
border: 1px solid #e0e0e0;
border-radius: 5px;
}
+ .file-item a {
+ font-size: 14px;
+ text-decoration: none;
+ }
/* 基本信息无边框表格样式 */
.basic-info-table {
@@ -68,25 +72,21 @@
.basic-info-table td {
padding: 15px 20px;
text-align: left;
+ font-size: 1.1rem;
+ font-weight: 500;
+ color: #333;
}
.basic-info-table th {
background-color: transparent;
- font-weight: 600;
- color: #333;
}
- .basic-info-table td {
- font-size: 1.1rem;
- font-weight: 500;
- color: #222;
- }
-
/* 其他表格样式保持不变 */
.info-table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
+ table-layout: fixed;
}
.info-table th,
@@ -98,7 +98,7 @@
.info-table th {
background-color: #f5f7fa;
- font-weight: 600;
+ font-weight: 400;
color: #333;
}
@@ -108,6 +108,38 @@
color: #222;
}
+ /* 固定宽度列样式 */
+ .fixed-width-260 {
+ width: 260px;
+ }
+
+ .fixed-width-160 {
+ width: 160px;
+ }
+
+ .fixed-width-180 {
+ width: 180px;
+ }
+
+ .fixed-width-100 {
+ width: 100px;
+ }
+
+ .fixed-width-80 {
+ width: 80px;
+ }
+
+ .fixed-width-40 {
+ width: 40px;
+ }
+
+ /* 表格内容换行样式 */
+ .table-cell-wrap {
+ word-wrap: break-word;
+ word-break: break-all;
+ white-space: normal;
+ }
+
.info-row {
display: flex;
margin-bottom: 25px;
@@ -122,15 +154,14 @@
.info-label {
font-size: 1.1rem;
font-weight: 500;
- color: #555;
+ color: #333;
margin-bottom: 8px;
text-align: center;
}
.info-value {
- font-size: 1.4rem;
- font-weight: 600;
- color: #222;
+ font-size: 1.1rem;
+ color: #333;
padding: 8px 0;
text-align: center;
}
@@ -177,7 +208,7 @@
.component-name {
width: 150px;
- font-weight: 600;
+ font-weight: 400;
color: #444;
padding-right: 10px;
}
@@ -202,7 +233,10 @@
.quality-title {
font-size: 1.1rem;
color: #333;
- width: 120px;
+ font-weight: 500;
+ width: auto;
+ padding-right: 10px;
+ margin-left: 40px;
flex-shrink: 0;
}
@@ -321,7 +355,17 @@
border-color: #a0cfff;
cursor: not-allowed;
}
+ .fixed-width-40 {
+ width: 50px;
+ }
+ .fixed-width-80 {
+ width: 80px;
+ }
+
+ .fixed-width-180 {
+ width: 180px;
+ }
@media (max-width: 768px) {
.container {
padding: 20px;
@@ -358,14 +402,15 @@
+
-
+
仪器名称:
@@ -374,19 +419,19 @@
- | 出厂日期 |
+ 出厂日期: |
|
- 入库日期 |
+ 入库日期: |
|
- | 累计工作时间 |
+ 累计工作时间: |
|
- 当次工作时间 |
+ 当次累计工作时间: |
|
- | 固件版本号 |
+ 固件版本号: |
|
@@ -394,32 +439,32 @@
-
质检记录
+
产品质检记录
@@ -429,14 +474,15 @@
- | 井名 |
- 入井工作情况 |
- 施工井段 |
- 最高工作温度 |
- 最高承压 |
- 仪器工作情况 |
- 上井人 |
- 文件 |
+ 井名 |
+ 入井工作情况 |
+ 施工井段 |
+ 最高工作温度 |
+ 最高承压 |
+ 仪器工作情况 |
+ 上井人 |
+ 文件 |
+ 链接 |
@@ -447,28 +493,35 @@
-
维保情况
-
+
+
维保情况
+
- | 时间 |
- 等级 |
- 维保信息 |
- 维保人 |
+ 时间 |
+ 等级 |
+ 维保信息 |
+ 维保人 |
+ 文件 |
+ 链接 |
-
+
+ | 暂无数据 |
+
@@ -476,30 +529,18 @@
内部组件
-
-
伽马传感器:
-
编码 GH2025-001,序列号 SN-GM-0625A
-
-
-
-
温度传感器:
-
编码 TP2025-002,序列号 SN-TP-0521B
-
-
-
-
压力传感器:
-
编码 PS2025-003,序列号 SN-PS-0415C
-
+
暂无数据
+
-