| | |
| | | <view v-if="fileList.length > 0" |
| | | class="file-list"> |
| | | <view v-for="(file, index) in fileList" |
| | | :key="file.id || index" |
| | | :key="file.storageAttachmentId || file.id || index" |
| | | class="file-item"> |
| | | <!-- 文件图标 --> |
| | | <!-- <view class="file-icon" |
| | |
| | | </view> --> |
| | | <!-- 文件信息 --> |
| | | <view class="file-info"> |
| | | <text class="file-name">{{ file.name }}</text> |
| | | <text class="file-name">{{ file.originalFilename || file.name }}</text> |
| | | <!-- <text class="file-meta">{{ formatFileSize(file.fileSize) }} · {{ file.uploadTime || file.createTime }}</text> --> |
| | | </view> |
| | | <!-- 操作按钮 --> |
| | |
| | | |
| | | <script setup> |
| | | import { ref, onMounted } from "vue"; |
| | | import { onLoad } from "@dcloudio/uni-app"; |
| | | import PageHeader from "@/components/PageHeader.vue"; |
| | | import config from "@/config"; |
| | | import { getToken } from "@/utils/auth"; |
| | | // import { saveAs } from "file-saver"; |
| | | import { |
| | | listMaintenanceTaskFiles, |
| | | addMaintenanceTaskFile, |
| | | delMaintenanceTaskFile, |
| | | } from "@/api/equipmentManagement/upkeep"; |
| | | attachmentList, |
| | | createAttachment, |
| | | deleteAttachment, |
| | | } from "@/api/basicData/storageAttachment"; |
| | | import { blobValidate } from "@/utils/ruoyi"; |
| | | |
| | | // 附件列表 |
| | |
| | | // const fileType = fileName.split(".").pop(); |
| | | // 3. 构造保存文件信息的参数 |
| | | const saveData = { |
| | | name: fileName, |
| | | deviceMaintenanceId: upkeepId.value, |
| | | url: res.data.tempPath || "", |
| | | application: "file", |
| | | recordType: recordType.value, |
| | | recordId: upkeepId.value, |
| | | storageBlobDTOs: [ |
| | | { |
| | | name: fileName, |
| | | url: |
| | | res.data.url || |
| | | res.data.previewURL || |
| | | res.data.tempPath || |
| | | "", |
| | | ...res.data, |
| | | }, |
| | | ], |
| | | }; |
| | | console.log(saveData, "保存文件信息参数"); |
| | | // 4. 调用 addRuleFile 接口保存文件信息 |
| | | addMaintenanceTaskFile(saveData) |
| | | // 4. 调用 createAttachment 接口保存文件信息 |
| | | createAttachment(saveData) |
| | | .then(addRes => { |
| | | if (addRes.code === 200) { |
| | | // 5. 添加到文件列表 |
| | | const newFile = { |
| | | ...addRes.data, |
| | | uploadTime: new Date().toLocaleString(), |
| | | }; |
| | | // fileList.value.push(newFile); |
| | | // 5. 刷新列表 |
| | | getFileList(); |
| | | showToast("上传成功"); |
| | | } else { |
| | |
| | | }; |
| | | // 下载文件 |
| | | const downloadFile = file => { |
| | | var url = |
| | | config.baseUrl + |
| | | "/common/download?fileName=" + |
| | | encodeURIComponent(file.url) + |
| | | "&delete=true"; |
| | | console.log(url, "url"); |
| | | let url = file.downloadURL || file.previewURL || file.url; |
| | | |
| | | if (!url) { |
| | | showToast("文件地址无效"); |
| | | return; |
| | | } |
| | | |
| | | // 如果不是完整的URL,则拼接 |
| | | if (!url.startsWith("http")) { |
| | | url = |
| | | config.baseUrl + |
| | | "/common/download?fileName=" + |
| | | encodeURIComponent(url) + |
| | | "&delete=true"; |
| | | } |
| | | |
| | | console.log(url, "下载地址"); |
| | | |
| | | uni.showLoading({ title: "正在下载...", mask: true }); |
| | | uni |
| | | .downloadFile({ |
| | | url: url, |
| | | responseType: "blob", |
| | | header: { Authorization: "Bearer " + getToken() }, |
| | | }) |
| | | .then(res => { |
| | | uni.hideLoading(); |
| | | let osType = uni.getStorageSync("deviceInfo").osName; |
| | | let filePath = res.tempFilePath; |
| | | if (osType === "ios") { |
| | |
| | | success: res => {}, |
| | | fail: err => { |
| | | console.log("uni.openDocument--fail"); |
| | | reject(err); |
| | | }, |
| | | }); |
| | | } else { |
| | |
| | | uni.showToast({ |
| | | icon: "none", |
| | | mask: true, |
| | | title: |
| | | "文件已保存:Android/data/uni.UNI720216F/apps/__UNI__720216F/" + |
| | | fileRes.savedFilePath, //保存路径 |
| | | duration: 3000, |
| | | title: "文件已下载并尝试打开", |
| | | duration: 2000, |
| | | }); |
| | | setTimeout(() => { |
| | | //打开文档查看 |
| | |
| | | }, |
| | | fail: err => { |
| | | console.log("uni.save--fail"); |
| | | reject(err); |
| | | }, |
| | | }); |
| | | } |
| | | // const isBlob = blobValidate(res.data); |
| | | // if (isBlob) { |
| | | // const blob = new Blob([res.data], { type: "text/plain" }); |
| | | // const url = URL.createObjectURL(blob); |
| | | // const downloadLink = document.getElementById("downloadLink"); |
| | | // downloadLink.href = url; |
| | | // downloadLink.download = file.name; |
| | | // downloadLink.click(); |
| | | // showToast("下载成功"); |
| | | // } else { |
| | | // showToast("下载失败"); |
| | | // } |
| | | }) |
| | | .catch(err => { |
| | | uni.hideLoading(); |
| | | console.error("下载失败:", err); |
| | | showToast("下载失败"); |
| | | }); |
| | |
| | | content: `确定要删除附件 "${file.name}" 吗?`, |
| | | success: res => { |
| | | if (res.confirm) { |
| | | deleteFile(file.id, index); |
| | | deleteFile(file.storageAttachmentId || file.id, index); |
| | | } |
| | | }, |
| | | }); |
| | |
| | | mask: true, |
| | | }); |
| | | |
| | | delMaintenanceTaskFile([fileId]) |
| | | deleteAttachment([fileId]) |
| | | .then(res => { |
| | | uni.hideLoading(); |
| | | if (res.code === 200) { |
| | |
| | | icon: "none", |
| | | }); |
| | | }; |
| | | const rulesRegulationsManagementId = ref(""); |
| | | const upkeepId = ref(""); |
| | | const recordType = ref(""); |
| | | |
| | | // 页面加载时获取参数 |
| | | onLoad(options => { |
| | | if (options.recordId) { |
| | | upkeepId.value = options.recordId; |
| | | } else { |
| | | upkeepId.value = uni.getStorageSync("upkeepId"); |
| | | } |
| | | |
| | | if (options.recordType) { |
| | | recordType.value = options.recordType; |
| | | } else { |
| | | recordType.value = "device_maintenance"; // 默认兼容 |
| | | } |
| | | |
| | | getFileList(); |
| | | }); |
| | | |
| | | // 页面加载时 |
| | | onMounted(() => { |
| | | // 从 API 获取附件列表 |
| | | |
| | | // 从本地存储获取 rulesRegulationsManagementId |
| | | rulesRegulationsManagementId.value = uni.getStorageSync( |
| | | "rulesRegulationsManagement" |
| | | ); |
| | | upkeepId.value = uni.getStorageSync("upkeepId"); |
| | | getFileList(); |
| | | // getFileList(); // onLoad 中已经调用了 |
| | | }); |
| | | |
| | | // 获取附件列表 |
| | | const getFileList = () => { |
| | | if (!upkeepId.value) return; |
| | | |
| | | uni.showLoading({ |
| | | title: "加载中...", |
| | | mask: true, |
| | | }); |
| | | |
| | | listMaintenanceTaskFiles({ |
| | | current: 1, |
| | | size: 100, |
| | | deviceMaintenanceId: upkeepId.value, |
| | | rulesRegulationsManagementId: upkeepId.value, |
| | | attachmentList({ |
| | | recordType: recordType.value, |
| | | recordId: upkeepId.value, |
| | | }) |
| | | .then(res => { |
| | | uni.hideLoading(); |
| | | if (res.code === 200) { |
| | | fileList.value = res.data.records || []; |
| | | fileList.value = res.data || []; |
| | | } else { |
| | | showToast("获取附件列表失败"); |
| | | } |