From 91dec349aa88c58c587199d9601529d60824e1d0 Mon Sep 17 00:00:00 2001
From: zhangwencui <1064582902@qq.com>
Date: 星期四, 02 七月 2026 13:24:34 +0800
Subject: [PATCH] 生产订单对齐管理端新增两个字段展示
---
src/pages/equipmentManagement/upkeep/maintain.vue | 191 +++++++++++++++++++++--------------------------
1 files changed, 84 insertions(+), 107 deletions(-)
diff --git a/src/pages/equipmentManagement/upkeep/maintain.vue b/src/pages/equipmentManagement/upkeep/maintain.vue
index b11a585..3abfc58 100644
--- a/src/pages/equipmentManagement/upkeep/maintain.vue
+++ b/src/pages/equipmentManagement/upkeep/maintain.vue
@@ -79,7 +79,6 @@
@click="showSparePartPicker" />
</template>
</u-form-item>
-
<u-form-item v-if="selectedSpareParts.length"
label="棰嗙敤鏁伴噺"
border-bottom>
@@ -101,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">
@@ -236,10 +163,9 @@
import { ref, onMounted, reactive } from "vue";
import { onShow } from "@dcloudio/uni-app";
import PageHeader from "@/components/PageHeader.vue";
- import {
- addMaintenance,
- } from "@/api/equipmentManagement/upkeep";
- import { getSparePartsList } from "@/api/equipmentManagement/spareParts";
+ import CommonUpload from "@/components/CommonUpload.vue";
+ import { addMaintenance } from "@/api/equipmentManagement/upkeep";
+ import { getSparePartsList } from "@/api/equipmentManagement/repair";
import useUserStore from "@/store/modules/user";
import dayjs from "dayjs";
import { formatDateToYMD } from "@/utils/ruoyi";
@@ -278,7 +204,6 @@
const sparePartsQtyRaw = ref("");
// 鏂囦欢涓婁紶鐩稿叧
- const uploadFiles = ref([]);
const uploading = ref(false);
const uploadProgress = ref(0);
const number = ref(0);
@@ -319,6 +244,7 @@
maintenanceResult: undefined, // 淇濆吇缁撴灉
maintenanceActuallyTime: dayjs().format("YYYY-MM-DD HH:mm:ss"), // 瀹為檯淇濆吇鏃ユ湡锛堝彧鏄剧ず鏃ユ湡锛�
sparePartsIds: undefined, // 璁惧澶囦欢ID
+ storageBlobDTOs: [], // 淇濆吇闄勪欢
});
// 娓呴櫎琛ㄥ崟鏍¢獙鐘舵��
@@ -333,11 +259,12 @@
maintenanceResult: undefined,
maintenanceActuallyTime: dayjs().format("YYYY-MM-DD HH:mm:ss"),
sparePartsIds: [],
+ storageBlobDTOs: [],
};
maintenancestatusText.value = "";
selectedSpareParts.value = [];
tempSelectedSpareParts.value = [];
- Object.keys(sparePartQtyMap).forEach((k) => delete sparePartQtyMap[k]);
+ Object.keys(sparePartQtyMap).forEach(k => delete sparePartQtyMap[k]);
sparePartsQtyRaw.value = "";
};
@@ -377,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 = "璇蜂笂浼犱繚鍏荤収鐗�";
}
@@ -406,7 +337,9 @@
return;
}
// 棰嗙敤鏁伴噺鏍¢獙
- const spareIds = Array.isArray(form.value.sparePartsIds) ? form.value.sparePartsIds : [];
+ const spareIds = Array.isArray(form.value.sparePartsIds)
+ ? form.value.sparePartsIds
+ : [];
if (spareIds.length > 0) {
for (const partId of spareIds) {
const qty = Number(sparePartQtyMap?.[partId]);
@@ -415,11 +348,19 @@
loading.value = false;
return;
}
- const part = sparePartOptions.value.find((p) => String(p.id || p.value) === String(partId));
+ const part = sparePartOptions.value.find(
+ p => String(p.id || p.value) === String(partId)
+ );
const stock = part?.quantity;
- if (stock !== null && stock !== undefined && Number.isFinite(Number(stock))) {
+ if (
+ stock !== null &&
+ stock !== undefined &&
+ Number.isFinite(Number(stock))
+ ) {
if (qty > Number(stock)) {
- showToast(`澶囦欢銆�${part?.name || ""}銆嶉鐢ㄦ暟閲忎笉鑳借秴杩囧簱瀛橈紙${stock}锛塦);
+ showToast(
+ `澶囦欢銆�${part?.name || ""}銆嶉鐢ㄦ暟閲忎笉鑳借秴杩囧簱瀛橈紙${stock}锛塦
+ );
loading.value = false;
return;
}
@@ -429,10 +370,16 @@
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(",") : "",
- sparePartsUseList: spareIds.length ? spareIds.map((pid) => ({ id: pid, quantity: sparePartQtyMap?.[pid] ?? 1 })) : [],
+ sparePartsQty: spareIds.length
+ ? spareIds.map(pid => sparePartQtyMap?.[pid] ?? 1).join(",")
+ : "",
+ sparePartsUseList: spareIds.length
+ ? spareIds.map(pid => ({
+ id: pid,
+ quantity: sparePartQtyMap?.[pid] ?? 1,
+ }))
+ : [],
};
const { code } = await addMaintenance({ id: id, ...submitData });
@@ -512,10 +459,13 @@
// 鏄剧ず璁惧澶囦欢閫夋嫨鍣�
const showSparePartPicker = () => {
tempSelectedSpareParts.value = [...selectedSpareParts.value];
- tempSelectedSpareParts.value.forEach((p) => {
+ tempSelectedSpareParts.value.forEach(p => {
const pid = p?.id ?? p?.value;
if (pid !== null && pid !== undefined) {
- if (!Number.isFinite(Number(sparePartQtyMap[pid])) || Number(sparePartQtyMap[pid]) <= 0) {
+ if (
+ !Number.isFinite(Number(sparePartQtyMap[pid])) ||
+ Number(sparePartQtyMap[pid]) <= 0
+ ) {
sparePartQtyMap[pid] = 1;
}
}
@@ -541,7 +491,10 @@
delete sparePartQtyMap[itemId];
} else {
tempSelectedSpareParts.value.push(item);
- if (!Number.isFinite(Number(sparePartQtyMap[itemId])) || Number(sparePartQtyMap[itemId]) <= 0) {
+ if (
+ !Number.isFinite(Number(sparePartQtyMap[itemId])) ||
+ Number(sparePartQtyMap[itemId]) <= 0
+ ) {
sparePartQtyMap[itemId] = 1;
}
}
@@ -550,11 +503,16 @@
// 纭澶囦欢閫夋嫨
const confirmSparePartSelection = () => {
selectedSpareParts.value = [...tempSelectedSpareParts.value];
- form.value.sparePartsIds = selectedSpareParts.value.map(item => item.id || item.value);
- selectedSpareParts.value.forEach((p) => {
+ form.value.sparePartsIds = selectedSpareParts.value.map(
+ item => item.id || item.value
+ );
+ selectedSpareParts.value.forEach(p => {
const pid = p?.id ?? p?.value;
if (pid !== null && pid !== undefined) {
- if (!Number.isFinite(Number(sparePartQtyMap[pid])) || Number(sparePartQtyMap[pid]) <= 0) {
+ if (
+ !Number.isFinite(Number(sparePartQtyMap[pid])) ||
+ Number(sparePartQtyMap[pid]) <= 0
+ ) {
sparePartQtyMap[pid] = 1;
}
}
@@ -565,7 +523,9 @@
// 绉婚櫎宸查�夊浠�
const removeSparePart = index => {
const removed = selectedSpareParts.value.splice(index, 1)[0];
- form.value.sparePartsIds = selectedSpareParts.value.map(item => item.id || item.value);
+ form.value.sparePartsIds = selectedSpareParts.value.map(
+ item => item.id || item.value
+ );
const rid = removed?.id ?? removed?.value;
if (rid !== null && rid !== undefined) delete sparePartQtyMap[rid];
};
@@ -578,7 +538,7 @@
// 閲嶇疆閫夋嫨鐨勫浠�
selectedSpareParts.value = [];
// 閲嶇疆涓婁紶鐨勬枃浠�
- uploadFiles.value = [];
+ form.value.storageBlobDTOs = [];
uploading.value = false;
uploadProgress.value = 0;
maintenancestatusText.value = "";
@@ -628,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,
@@ -641,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,
@@ -671,7 +633,9 @@
const idArray =
typeof sparePartsIds.value === "string"
? sparePartsIds.value.split(",")
- : (Array.isArray(sparePartsIds.value) ? sparePartsIds.value : []);
+ : Array.isArray(sparePartsIds.value)
+ ? sparePartsIds.value
+ : [];
if (idArray.length > 0) {
selectedSpareParts.value = sparePartOptions.value
@@ -688,28 +652,41 @@
quantity: option.quantity,
}));
// 璁剧疆澶囦欢IDs锛堜繚鎸佹暟缁勶紝鎻愪氦鏃跺啀 join锛�
- form.value.sparePartsIds = idArray.map((v) => {
+ form.value.sparePartsIds = idArray.map(v => {
const n = Number(String(v).trim());
return Number.isFinite(n) ? n : String(v).trim();
});
// 鍥炴樉棰嗙敤鏁伴噺锛堣嫢鏈� sparePartsQty锛�
- if (typeof sparePartsQtyRaw.value === "string" && sparePartsQtyRaw.value.trim()) {
- const qtyArr = sparePartsQtyRaw.value.split(",").map((s) => Number(String(s).trim()));
+ if (
+ typeof sparePartsQtyRaw.value === "string" &&
+ sparePartsQtyRaw.value.trim()
+ ) {
+ const qtyArr = sparePartsQtyRaw.value
+ .split(",")
+ .map(s => Number(String(s).trim()));
selectedSpareParts.value.forEach((p, idx) => {
const pid = p?.id ?? p?.value;
const q = qtyArr[idx];
- if (pid !== null && pid !== undefined && Number.isFinite(q) && q > 0) {
+ if (
+ pid !== null &&
+ pid !== undefined &&
+ Number.isFinite(q) &&
+ q > 0
+ ) {
sparePartQtyMap[pid] = q;
}
});
}
// 榛樿鏁伴噺鍏滃簳
- selectedSpareParts.value.forEach((p) => {
+ selectedSpareParts.value.forEach(p => {
const pid = p?.id ?? p?.value;
if (pid !== null && pid !== undefined) {
- if (!Number.isFinite(Number(sparePartQtyMap[pid])) || Number(sparePartQtyMap[pid]) <= 0) {
+ if (
+ !Number.isFinite(Number(sparePartQtyMap[pid])) ||
+ Number(sparePartQtyMap[pid]) <= 0
+ ) {
sparePartQtyMap[pid] = 1;
}
}
--
Gitblit v1.9.3