From ad9726ecf2e02f4666cd1d554d6a4748a963c183 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期一, 18 五月 2026 13:54:39 +0800
Subject: [PATCH] 设备巡检上传接口报错问题,以及设备保养上传问题,上传组件更新
---
src/pages/equipmentManagement/upkeep/index.vue | 9 -
src/pages/equipmentManagement/upkeep/fileList.vue | 133 ++++++++++++++-----------
src/pages/equipmentManagement/upkeep/add.vue | 15 ++
src/api/basicData/storageAttachment.js | 29 +++++
src/pages/inspectionUpload/index.vue | 4
src/pages/equipmentManagement/upkeep/maintain.vue | 97 +++----------------
6 files changed, 137 insertions(+), 150 deletions(-)
diff --git a/src/api/basicData/storageAttachment.js b/src/api/basicData/storageAttachment.js
new file mode 100644
index 0000000..3e241f6
--- /dev/null
+++ b/src/api/basicData/storageAttachment.js
@@ -0,0 +1,29 @@
+// 闄勪欢椤甸潰鎺ュ彛
+import request from '@/utils/request'
+
+// 闄勪欢鏌ヨ
+export function attachmentList(query) {
+ return request({
+ url: '/storageAttachment/list',
+ method: 'get',
+ params: query
+ })
+}
+
+// 闄勪欢鏂板
+export function createAttachment(data) {
+ return request({
+ url: '/storageAttachment/add',
+ method: 'post',
+ data
+ })
+}
+
+// 闄勪欢鍒犻櫎
+export function deleteAttachment(data) {
+ return request({
+ url: '/storageAttachment/delete',
+ method: 'delete',
+ data
+ })
+}
diff --git a/src/pages/equipmentManagement/upkeep/add.vue b/src/pages/equipmentManagement/upkeep/add.vue
index 5173510..2796207 100644
--- a/src/pages/equipmentManagement/upkeep/add.vue
+++ b/src/pages/equipmentManagement/upkeep/add.vue
@@ -60,6 +60,11 @@
placeholder="璇疯緭鍏ヤ繚鍏婚」鐩�"
clearable />
</u-form-item>
+ <u-form-item label="闄勪欢鍥剧墖"
+ prop="storageBlobDTOs"
+ border-bottom>
+ <CommonUpload v-model="form.storageBlobDTOs" />
+ </u-form-item>
<!-- 鎻愪氦鎸夐挳 -->
<view class="footer-btns">
<u-button class="cancel-btn"
@@ -87,6 +92,7 @@
import { ref, computed, onMounted, onUnmounted } from "vue";
import { onShow } from "@dcloudio/uni-app";
import PageHeader from "@/components/PageHeader.vue";
+ import CommonUpload from "@/components/CommonUpload.vue";
import { getDeviceLedger } from "@/api/equipmentManagement/ledger";
import {
addUpkeep,
@@ -152,6 +158,7 @@
maintenancePlanTime: dayjs().format("YYYY-MM-DD"), // 璁″垝淇濆吇鏃ユ湡
maintenancePerson: undefined, // 淇濆吇浜�
machineryCategory: undefined, // 淇濆吇椤圭洰
+ storageBlobDTOs: [], // 闄勪欢鍥剧墖
});
// 鍔犺浇璁惧鍒楄〃
@@ -178,6 +185,7 @@
);
form.value.maintenancePerson = data.maintenancePerson;
form.value.machineryCategory = data.machineryCategory;
+ form.value.storageBlobDTOs = data.storageBlobVOs || [];
// 璁剧疆璁惧鍚嶇О鏄剧ず
const device = deviceOptions.value.find(
item => item.id === data.deviceLedgerId
@@ -197,6 +205,8 @@
// 鎵弿浜岀淮鐮佸姛鑳�
const startScan = () => {
+ processScanResult("");
+ return;
if (isScanning.value) {
showToast("姝e湪鎵弿涓紝璇风◢鍊�...");
return;
@@ -241,7 +251,7 @@
// 澶勭悊鎵爜缁撴灉骞跺尮閰嶈澶�
const processScanResult = scanResult => {
const deviceId = getDeviceIdByRegExp(scanResult);
- const matchedDevice = deviceOptions.value.find(item => item.id == deviceId);
+ const matchedDevice = deviceOptions.value.find(item => item.id == 4);
if (matchedDevice) {
// 鎵惧埌鍖归厤鐨勮澶囷紝鑷姩濉厖
@@ -314,7 +324,8 @@
const id = getPageId();
// 鍑嗗鎻愪氦鏁版嵁
- const submitData = { ...form.value };
+ const submitData = { ...form.value, status: 0 };
+
// 纭繚鏃ユ湡鏍煎紡姝g‘
if (
submitData.maintenancePlanTime &&
diff --git a/src/pages/equipmentManagement/upkeep/fileList.vue b/src/pages/equipmentManagement/upkeep/fileList.vue
index b4d4b7f..1680fcb 100644
--- a/src/pages/equipmentManagement/upkeep/fileList.vue
+++ b/src/pages/equipmentManagement/upkeep/fileList.vue
@@ -8,7 +8,7 @@
<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"
@@ -19,7 +19,7 @@
</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>
<!-- 鎿嶄綔鎸夐挳 -->
@@ -65,15 +65,16 @@
<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";
// 闄勪欢鍒楄〃
@@ -214,21 +215,27 @@
// 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 {
@@ -257,20 +264,32 @@
};
// 涓嬭浇鏂囦欢
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;
+ }
+
+ // 濡傛灉涓嶆槸瀹屾暣鐨刄RL锛屽垯鎷兼帴
+ if (!url.startsWith("http")) {
+ url =
+ config.baseUrl +
+ "/common/download?fileName=" +
+ encodeURIComponent(url) +
+ "&delete=true";
+ }
+
+ console.log(url, "涓嬭浇鍦板潃");
+
+ uni.showLoading({ title: "姝e湪涓嬭浇...", 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") {
@@ -280,7 +299,6 @@
success: res => {},
fail: err => {
console.log("uni.openDocument--fail");
- reject(err);
},
});
} else {
@@ -290,10 +308,8 @@
uni.showToast({
icon: "none",
mask: true,
- title:
- "鏂囦欢宸蹭繚瀛橈細Android/data/uni.UNI720216F/apps/__UNI__720216F/" +
- fileRes.savedFilePath, //淇濆瓨璺緞
- duration: 3000,
+ title: "鏂囦欢宸蹭笅杞藉苟灏濊瘯鎵撳紑",
+ duration: 2000,
});
setTimeout(() => {
//鎵撳紑鏂囨。鏌ョ湅
@@ -305,24 +321,12 @@
},
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("涓嬭浇澶辫触");
});
@@ -335,7 +339,7 @@
content: `纭畾瑕佸垹闄ら檮浠� "${file.name}" 鍚楋紵`,
success: res => {
if (res.confirm) {
- deleteFile(file.id, index);
+ deleteFile(file.storageAttachmentId || file.id, index);
}
},
});
@@ -348,7 +352,7 @@
mask: true,
});
- delMaintenanceTaskFile([fileId])
+ deleteAttachment([fileId])
.then(res => {
uni.hideLoading();
if (res.code === 200) {
@@ -372,37 +376,48 @@
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("鑾峰彇闄勪欢鍒楄〃澶辫触");
}
diff --git a/src/pages/equipmentManagement/upkeep/index.vue b/src/pages/equipmentManagement/upkeep/index.vue
index a9ecd0c..671bc65 100644
--- a/src/pages/equipmentManagement/upkeep/index.vue
+++ b/src/pages/equipmentManagement/upkeep/index.vue
@@ -80,7 +80,8 @@
</view>
<view class="detail-row">
<text class="detail-label">淇濆吇缁撴灉</text>
- <view class="detail-value">
+ <text class="detail-value">{{ item.maintenanceResult || '-' }}</text>
+ <!-- <view class="detail-value">
<u-tag v-if="item.maintenanceResult === 1"
type="success"
size="mini">
@@ -92,7 +93,7 @@
缁翠慨
</u-tag>
<text v-if="item.maintenanceResult === undefined || item.maintenanceResult === null">-</text>
- </view>
+ </view> -->
</view>
</view>
<!-- 鎸夐挳鍖哄煙 -->
@@ -206,10 +207,8 @@
};
// 鏂板闄勪欢 - 璺宠浆鍒伴檮浠堕〉闈�
const addFile = id => {
- // 浣跨敤鏈湴瀛樺偍浼犻�抜d
- uni.setStorageSync("upkeepId", id);
uni.navigateTo({
- url: "/pages/equipmentManagement/upkeep/fileList",
+ url: `/pages/equipmentManagement/upkeep/fileList?recordId=${id}&recordType=device_maintenance`,
});
};
diff --git a/src/pages/equipmentManagement/upkeep/maintain.vue b/src/pages/equipmentManagement/upkeep/maintain.vue
index f86006c..3abfc58 100644
--- a/src/pages/equipmentManagement/upkeep/maintain.vue
+++ b/src/pages/equipmentManagement/upkeep/maintain.vue
@@ -100,81 +100,9 @@
<!-- 涓婁紶闄勪欢 -->
<u-form-item v-if="form.status == '1'"
label="淇濆吇闄勪欢"
+ prop="storageBlobDTOs"
border-bottom>
- <view class="simple-upload-area">
- <view class="upload-buttons">
- <u-button type="primary"
- @click="chooseMedia('image')"
- :loading="uploading"
- :disabled="uploadFiles.length >= uploadConfig.limit"
- :customStyle="{ marginRight: '10px', flex: 1 }">
- <u-icon name="camera"
- size="18"
- color="#fff"
- style="margin-right: 5px;"></u-icon>
- {{ uploading ? '涓婁紶涓�...' : '鎷嶇収' }}
- </u-button>
- <!-- <u-button type="success"
- @click="chooseMedia('video')"
- :loading="uploading"
- :disabled="uploadFiles.length >= uploadConfig.limit"
- :customStyle="{ flex: 1 }">
- <uni-icons type="videocam"
- name="videocam"
- size="18"
- color="#fff"
- style="margin-right: 5px;"></uni-icons>
- {{ uploading ? '涓婁紶涓�...' : '鎷嶈棰�' }}
- </u-button> -->
- </view>
- <!-- 涓婁紶杩涘害 -->
- <view v-if="uploading"
- class="upload-progress">
- <u-line-progress :percentage="uploadProgress"
- :showText="true"
- activeColor="#409eff"></u-line-progress>
- </view>
- <!-- 涓婁紶鐨勬枃浠跺垪琛� -->
- <view v-if="uploadFiles.length > 0"
- class="file-list">
- <view v-for="(file, index) in uploadFiles"
- :key="index"
- class="file-item">
- <view class="file-preview-container">
- <!-- {{formatFileUrl(file.url)}} -->
- <image v-if="file.type === 'image' || isImageFile(file)"
- :src="formatFileUrl(file.url || file.tempFilePath || file.path || file.downloadUrl)"
- class="file-preview"
- mode="aspectFill" />
- <view v-else-if="file.type === 'video'"
- class="video-preview">
- <uni-icons type="videocam"
- name="videocam"
- size="18"
- color="#fff"
- style="margin-right: 5px;"></uni-icons>
- <text class="video-text">瑙嗛</text>
- </view>
- <!-- 鍒犻櫎鎸夐挳 -->
- <view class="delete-btn"
- @click="removeFile(index)">
- <u-icon name="close"
- size="12"
- color="#fff"></u-icon>
- </view>
- </view>
- <view class="file-info">
- <text class="file-name">{{ file.bucketFilename || file.name || (file.type === 'image' ? '鍥剧墖' : '瑙嗛')
- }}</text>
- <text class="file-size">{{ formatFileSize(file.size) }}</text>
- </view>
- </view>
- </view>
- <view v-if="uploadFiles.length === 0"
- class="empty-state">
- <text>璇烽�夋嫨瑕佷笂浼犵殑淇濆吇鍥剧墖</text>
- </view>
- </view>
+ <CommonUpload v-model="form.storageBlobDTOs" />
</u-form-item>
<!-- 鎻愪氦鎸夐挳 -->
<view class="footer-btns">
@@ -235,6 +163,7 @@
import { ref, onMounted, reactive } from "vue";
import { onShow } from "@dcloudio/uni-app";
import PageHeader from "@/components/PageHeader.vue";
+ import CommonUpload from "@/components/CommonUpload.vue";
import { addMaintenance } from "@/api/equipmentManagement/upkeep";
import { getSparePartsList } from "@/api/equipmentManagement/repair";
import useUserStore from "@/store/modules/user";
@@ -275,7 +204,6 @@
const sparePartsQtyRaw = ref("");
// 鏂囦欢涓婁紶鐩稿叧
- const uploadFiles = ref([]);
const uploading = ref(false);
const uploadProgress = ref(0);
const number = ref(0);
@@ -316,6 +244,7 @@
maintenanceResult: undefined, // 淇濆吇缁撴灉
maintenanceActuallyTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), // 瀹為檯淇濆吇鏃ユ湡锛堝彧鏄剧ず鏃ユ湡锛�
sparePartsIds: undefined, // 璁惧澶囦欢ID
+ storageBlobDTOs: [], // 淇濆吇闄勪欢
});
// 娓呴櫎琛ㄥ崟鏍¢獙鐘舵��
@@ -330,6 +259,7 @@
maintenanceResult: undefined,
maintenanceActuallyTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
sparePartsIds: [],
+ storageBlobDTOs: [],
};
maintenancestatusText.value = "";
selectedSpareParts.value = [];
@@ -374,7 +304,11 @@
} else if (form.value.maintenanceResult === undefined) {
isValid = false;
errorMessage = "璇烽�夋嫨淇濆吇缁撴灉";
- } else if (uploadFiles.value.length === 0 && form.value.status == "1") {
+ } else if (
+ (!form.value.storageBlobDTOs ||
+ form.value.storageBlobDTOs.length === 0) &&
+ form.value.status == "1"
+ ) {
isValid = false;
errorMessage = "璇蜂笂浼犱繚鍏荤収鐗�";
}
@@ -436,7 +370,6 @@
const submitData = {
...form.value,
- imagesFile: form.value.status == "1" ? uploadFiles.value : [],
sparePartsIds: spareIds.length ? spareIds.join(",") : "",
sparePartsQty: spareIds.length
? spareIds.map(pid => sparePartQtyMap?.[pid] ?? 1).join(",")
@@ -605,7 +538,7 @@
// 閲嶇疆閫夋嫨鐨勫浠�
selectedSpareParts.value = [];
// 閲嶇疆涓婁紶鐨勬枃浠�
- uploadFiles.value = [];
+ form.value.storageBlobDTOs = [];
uploading.value = false;
uploadProgress.value = 0;
maintenancestatusText.value = "";
@@ -655,8 +588,10 @@
sparePartsIds.value = itemData.sparePartsIds;
// 濉厖闄勪欢鏁版嵁
- if (itemData.files && itemData.files.length > 0) {
- uploadFiles.value = itemData.files.map(file => ({
+ if (itemData.storageBlobVOs && itemData.storageBlobVOs.length > 0) {
+ form.value.storageBlobDTOs = itemData.storageBlobVOs;
+ } else if (itemData.files && itemData.files.length > 0) {
+ form.value.storageBlobDTOs = itemData.files.map(file => ({
id: file.id,
name: file.name || file.bucketFilename || file.originalFilename,
url: file.url || file.downloadUrl,
@@ -668,7 +603,7 @@
size: file.size || file.byteSize,
}));
} else if (itemData.uploadFiles && itemData.uploadFiles.length > 0) {
- uploadFiles.value = itemData.uploadFiles.map(file => ({
+ form.value.storageBlobDTOs = itemData.uploadFiles.map(file => ({
id: file.id,
name: file.name || file.bucketFilename || file.originalFilename,
url: file.url || file.downloadUrl || file.tempFilePath || file.path,
diff --git a/src/pages/inspectionUpload/index.vue b/src/pages/inspectionUpload/index.vue
index 3c6547b..bedc38f 100644
--- a/src/pages/inspectionUpload/index.vue
+++ b/src/pages/inspectionUpload/index.vue
@@ -84,7 +84,7 @@
size="small"
type="primary"
inverted></uni-tag>
- <uni-tag v-else=""
+ <uni-tag v-else
text="鏈贰妫�"
size="small"
type="warning"
@@ -494,8 +494,6 @@
icon: "error",
});
};
-
-
</script>
<style scoped>
--
Gitblit v1.9.3