From f0f22709fb7f9945e5bc246181e21fd0c282e694 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 04 六月 2026 15:51:29 +0800
Subject: [PATCH] 马铃薯app 1.客户往来、供应商往来查询展示修改 2.环境检测页面展示修改
---
src/pages/inspectionUpload/attachment.vue | 125 +-----------
src/pages/inspectionUpload/components/formDia.vue | 167 +++++-----------
src/pages/inspectionUpload/upload.vue | 251 ++++--------------------
src/pages/inspectionUpload/components/qrCodeFormDia.vue | 21 +-
4 files changed, 117 insertions(+), 447 deletions(-)
diff --git a/src/pages/inspectionUpload/attachment.vue b/src/pages/inspectionUpload/attachment.vue
index 058e0d6..6c077c1 100644
--- a/src/pages/inspectionUpload/attachment.vue
+++ b/src/pages/inspectionUpload/attachment.vue
@@ -5,29 +5,11 @@
@back="goBack" />
<!-- 椤甸潰鍐呭 -->
<view class="attachment-content">
- <!-- 鍒嗙被鏍囩椤� -->
- <view class="attachment-tabs">
- <view class="tab-item"
- :class="{ active: currentViewType === 'before' }"
- @click="switchViewType('before')">
- 鐢熶骇鍓� ({{ getAttachmentsByType(0).length }})
- </view>
- <view class="tab-item"
- :class="{ active: currentViewType === 'after' }"
- @click="switchViewType('after')">
- 鐢熶骇涓� ({{ getAttachmentsByType(1).length }})
- </view>
- <view class="tab-item"
- :class="{ active: currentViewType === 'issue' }"
- @click="switchViewType('issue')">
- 鐢熶骇鍚� ({{ getAttachmentsByType(2).length }})
- </view>
- </view>
- <!-- 褰撳墠鍒嗙被鐨勯檮浠跺垪琛� -->
+ <!-- 闄勪欢鍒楄〃 -->
<view class="attachment-list-container">
- <view v-if="getCurrentViewAttachments().length > 0"
+ <view v-if="attachmentList.length > 0"
class="attachment-list">
- <view v-for="(file, index) in getCurrentViewAttachments()"
+ <view v-for="(file, index) in attachmentList"
:key="index"
class="attachment-item"
@click="previewAttachment(file)">
@@ -52,7 +34,7 @@
</view>
<view v-else
class="attachment-empty">
- <text class="empty-text">璇ュ垎绫绘殏鏃犻檮浠�</text>
+ <text class="empty-text">鏆傛棤闄勪欢</text>
</view>
</view>
</view>
@@ -96,9 +78,6 @@
// 闄勪欢鍒楄〃
const attachmentList = ref([]);
- // 褰撳墠鏌ョ湅绫诲瀷
- const currentViewType = ref("before"); // 'before', 'after', 'issue'
-
// 瑙嗛棰勮鐩稿叧鐘舵��
const showVideoDialog = ref(false);
const currentVideoFile = ref(null);
@@ -122,46 +101,18 @@
}
});
- // 鍔犺浇闄勪欢鏁版嵁
+ // 鍔犺浇闄勪欢鏁版嵁锛堢粺涓�浣跨敤 commonFileListVO锛�
const loadAttachments = () => {
const task = taskInfo.value;
if (!task) return;
attachmentList.value = [];
- // 鍚庣鍙嶆樉瀛楁 (VO浼樺厛)
- const beforeList = Array.isArray(task?.commonFileListBeforeVO)
- ? task.commonFileListBeforeVO
- : Array.isArray(task?.commonFileListBefore)
- ? task.commonFileListBefore
- : [];
-
- const duringList = Array.isArray(task?.commonFileListVO)
+ const fileList = Array.isArray(task?.commonFileListVO)
? task.commonFileListVO
- : Array.isArray(task?.commonFileListAfter)
- ? task.commonFileListAfter
- : []; // 鍏煎鏃ч�昏緫鎴栧懡鍚嶄笉涓�鑷�
-
- const afterList = Array.isArray(task?.commonFileListAfterVO)
- ? task.commonFileListAfterVO
- : Array.isArray(task?.commonFileListIssue)
- ? task.commonFileListIssue
: [];
- // 濡傛灉 VO 閮芥病鏈夛紝灏濊瘯浠� commonFileList 杩囨护
- const allList = Array.isArray(task?.commonFileList)
- ? task.commonFileList
- : [];
-
- const finalBefore =
- beforeList.length > 0 ? beforeList : allList.filter(f => f?.type === 10);
- const finalDuring =
- duringList.length > 0 ? duringList : allList.filter(f => f?.type === 11);
- const finalAfter =
- afterList.length > 0 ? afterList : allList.filter(f => f?.type === 12);
-
- const mapToViewFile = (file, viewType) => {
- // 鍏煎 previewURL, previewUrl, url, downloadURL, downloadUrl
+ attachmentList.value = fileList.map(file => {
const rawUrl =
file?.previewURL ||
file?.previewUrl ||
@@ -173,20 +124,14 @@
return {
...file,
- type: viewType,
- name:
- file?.originalFilename || file?.bucketFilename || file?.name || "闄勪欢",
+ name: file?.originalFilename || file?.bucketFilename || file?.name || "闄勪欢",
bucketFilename: file?.bucketFilename || file?.name,
originalFilename: file?.originalFilename || file?.name,
url: u,
downloadUrl: u,
size: file?.byteSize || file?.size || 0,
};
- };
-
- attachmentList.value.push(...finalBefore.map(f => mapToViewFile(f, 0)));
- attachmentList.value.push(...finalDuring.map(f => mapToViewFile(f, 1)));
- attachmentList.value.push(...finalAfter.map(f => mapToViewFile(f, 2)));
+ });
};
// 灏嗗悗绔繑鍥炵殑鏂囦欢鍦板潃瑙勮寖鎴愬彲璁块棶URL
@@ -220,30 +165,6 @@
uni.navigateBack();
};
- // 鍒囨崲鏌ョ湅绫诲瀷
- const switchViewType = type => {
- currentViewType.value = type;
- };
-
- // 鏍规嵁type鑾峰彇瀵瑰簲鍒嗙被鐨勯檮浠�
- const getAttachmentsByType = typeValue => {
- return attachmentList.value.filter(file => file.type === typeValue) || [];
- };
-
- // 鑾峰彇褰撳墠鏌ョ湅绫诲瀷鐨勯檮浠�
- const getCurrentViewAttachments = () => {
- switch (currentViewType.value) {
- case "before":
- return getAttachmentsByType(0);
- case "after":
- return getAttachmentsByType(1);
- case "issue":
- return getAttachmentsByType(2);
- default:
- return [];
- }
- };
-
// 鍒ゆ柇鏄惁涓哄浘鐗囨枃浠�
const isImageFile = file => {
if (file.contentType && file.contentType.startsWith("image/")) {
@@ -259,7 +180,7 @@
// 棰勮闄勪欢
const previewAttachment = file => {
if (isImageFile(file)) {
- const imageUrls = getCurrentViewAttachments()
+ const imageUrls = attachmentList.value
.filter(f => isImageFile(f))
.map(f => f.url || f.downloadUrl);
@@ -309,32 +230,6 @@
.attachment-content {
padding: 15px;
- }
-
- /* 鏍囩椤垫牱寮� */
- .attachment-tabs {
- display: flex;
- background: #fff;
- border-radius: 12px;
- margin-bottom: 15px;
- padding: 4px;
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.05);
- }
-
- .tab-item {
- flex: 1;
- text-align: center;
- padding: 12px 8px;
- font-size: 14px;
- color: #666;
- border-radius: 8px;
- transition: all 0.3s ease;
- }
-
- .tab-item.active {
- background: #409eff;
- color: #fff;
- font-weight: 500;
}
/* 闄勪欢鍒楄〃鏍峰紡 */
diff --git a/src/pages/inspectionUpload/components/formDia.vue b/src/pages/inspectionUpload/components/formDia.vue
index 62bf40f..6ff1f12 100644
--- a/src/pages/inspectionUpload/components/formDia.vue
+++ b/src/pages/inspectionUpload/components/formDia.vue
@@ -1,7 +1,7 @@
<template>
- <u-popup
- v-model="dialogVisitable"
- mode="center"
+ <u-popup
+ v-model="dialogVisitable"
+ mode="center"
:round="10"
:closeable="true"
@close="cancel"
@@ -10,23 +10,23 @@
<view class="popup-header">
<text class="popup-title">宸℃璁板綍涓婁紶</text>
</view>
-
+
<view class="upload-container">
<!-- 寮傚父鐘舵�侀�夋嫨 -->
<view class="form-container">
<view class="title">宸℃鐘舵��</view>
<view class="exception-section">
<view class="exception-options">
- <view
- class="exception-option"
+ <view
+ class="exception-option"
:class="{ active: hasException === false }"
@click="setExceptionStatus(false)"
>
<u-icon name="checkmark-circle" size="20" color="#52c41a"></u-icon>
<text class="option-text">姝e父</text>
</view>
- <view
- class="exception-option"
+ <view
+ class="exception-option"
:class="{ active: hasException === true }"
@click="setExceptionStatus(true)"
>
@@ -48,54 +48,23 @@
:customStyle="{ padding: '10px', backgroundColor: '#f5f5f5' }"
/>
</view>
-
+
<!-- 涓婁紶鍖哄煙锛堜粎鍦ㄥ紓甯告椂鏄剧ず锛� -->
- <template v-if="hasException === true">
- <view class="form-container">
- <view class="title">鐢熶骇鍓�</view>
- <u-upload
- :fileList="beforeModelValue"
- @afterRead="afterRead"
- @delete="deleteFile"
- name="before"
- multiple
- :maxCount="10"
- :maxSize="5 * 1024 * 1024"
- accept="image/*"
- :previewFullImage="true"
- ></u-upload>
- </view>
-
- <view class="form-container">
- <view class="title">鐢熶骇鍚�</view>
- <u-upload
- :fileList="afterModelValue"
- @afterRead="afterRead"
- @delete="deleteFile"
- name="after"
- multiple
- :maxCount="10"
- :maxSize="5 * 1024 * 1024"
- accept="image/*"
- :previewFullImage="true"
- ></u-upload>
- </view>
-
- <view class="form-container">
- <view class="title">鐢熶骇闂</view>
- <u-upload
- :fileList="issueModelValue"
- @afterRead="afterRead"
- @delete="deleteFile"
- name="issue"
- multiple
- :maxCount="10"
- :maxSize="5 * 1024 * 1024"
- accept="image/*"
- :previewFullImage="true"
- ></u-upload>
- </view>
- </template>
+ <view class="form-container" v-if="hasException === true">
+ <view class="title">涓婁紶闄勪欢</view>
+ <text class="upload-count">宸蹭笂浼�: {{ fileList.length }}涓枃浠�</text>
+ <u-upload
+ :fileList="fileList"
+ @afterRead="afterRead"
+ @delete="deleteFile"
+ name="attachment"
+ multiple
+ :maxCount="30"
+ :maxSize="5 * 1024 * 1024"
+ accept="image/*"
+ :previewFullImage="true"
+ ></u-upload>
+ </view>
<!-- 姝e父鐘舵�佹彁绀� -->
<view class="form-container normal-tip" v-if="hasException === false">
@@ -103,7 +72,7 @@
<text class="tip-text">璁惧杩愯姝e父锛屾棤闇�涓婁紶鐓х墖</text>
</view>
</view>
-
+
<view class="popup-footer">
<u-button @click="cancel" :customStyle="{ marginRight: '10px' }">鍙栨秷</u-button>
<u-button type="primary" @click="submitForm">淇濆瓨</u-button>
@@ -121,9 +90,7 @@
const emit = defineEmits(['closeDia'])
const dialogVisitable = ref(false)
-const beforeModelValue = ref([])
-const afterModelValue = ref([])
-const issueModelValue = ref([])
+const fileList = ref([])
const infoData = ref(null)
// 寮傚父鐘舵�侊細null=鏈�夋嫨, false=姝e父, true=寮傚父
@@ -134,13 +101,13 @@
// 璁$畻涓婁紶URL
const uploadFileUrl = computed(() => {
let baseUrl = '';
-
+
if (process.env.VUE_APP_BASE_API) {
baseUrl = process.env.VUE_APP_BASE_API;
} else {
baseUrl = config.baseUrl;
}
-
+
return baseUrl + '/file/upload';
})
@@ -203,29 +170,12 @@
// 鏂囦欢涓婁紶澶勭悊
const afterRead = (event) => {
- const { name, file } = event
-
- // 鏍规嵁涓婁紶绫诲瀷璁剧疆涓嶅悓鐨則ype鍊�
- let typeValue = 10 // 榛樿鍊�
- if (name === 'before') {
- typeValue = 10 // 鐢熶骇鍓�
- } else if (name === 'after') {
- typeValue = 11 // 鐢熶骇涓�
- } else if (name === 'issue') {
- typeValue = 12 // 鐢熶骇鍚�
- }
-
+ const { file } = event
const files = Array.isArray(file) ? file : [file]
Promise.resolve().then(async () => {
for (const f of files) {
- const uploaded = await uploadSingleFile(f, typeValue)
- if (name === 'before') {
- beforeModelValue.value.push(uploaded)
- } else if (name === 'after') {
- afterModelValue.value.push(uploaded)
- } else if (name === 'issue') {
- issueModelValue.value.push(uploaded)
- }
+ const uploaded = await uploadSingleFile(f, 10)
+ fileList.value.push(uploaded)
}
uni.showToast({ title: '涓婁紶鎴愬姛', icon: 'success' })
}).catch((err) => {
@@ -236,15 +186,8 @@
// 鍒犻櫎鏂囦欢
const deleteFile = (event) => {
- const { name, index } = event
-
- if (name === 'before') {
- beforeModelValue.value.splice(index, 1)
- } else if (name === 'after') {
- afterModelValue.value.splice(index, 1)
- } else if (name === 'issue') {
- issueModelValue.value.splice(index, 1)
- }
+ const { index } = event
+ fileList.value.splice(index, 1)
}
// 璁剧疆寮傚父鐘舵��
@@ -266,8 +209,7 @@
// 濡傛灉鏄紓甯哥姸鎬侊紝妫�鏌ユ槸鍚︽湁涓婁紶鏂囦欢
if (hasException.value === true) {
- const totalFiles = beforeModelValue.value.length + afterModelValue.value.length + issueModelValue.value.length
- if (totalFiles === 0) {
+ if (fileList.value.length === 0) {
uni.showToast({
title: '璇蜂笂浼犲紓甯哥収鐗�',
icon: 'none'
@@ -284,28 +226,17 @@
}
}
- let arr = []
- if (beforeModelValue.value.length > 0) {
- arr.push(...beforeModelValue.value.map(item => ({ ...item, statusType: 0 })))
- }
- if (afterModelValue.value.length > 0) {
- arr.push(...afterModelValue.value.map(item => ({ ...item, statusType: 1 })))
- }
- if (issueModelValue.value.length > 0) {
- arr.push(...issueModelValue.value.map(item => ({ ...item, statusType: 2 })))
- }
-
// 鎻愪氦鏁版嵁
- infoData.value.storageBlobDTO = arr
+ infoData.value.commonFileListDTO = fileList.value
infoData.value.hasException = hasException.value
infoData.value.exceptionDescription = exceptionDescription.value
await submitInspectionRecord({ ...infoData.value })
-
+
uni.showToast({
title: '鎻愪氦鎴愬姛',
icon: 'success'
})
-
+
cancel()
} catch (error) {
console.error('鎻愪氦澶辫触:', error)
@@ -320,11 +251,9 @@
const openDialog = async (row) => {
infoData.value = row
dialogVisitable.value = true
-
+
// 娓呯┖涔嬪墠鐨勬暟鎹�
- beforeModelValue.value = []
- afterModelValue.value = []
- issueModelValue.value = []
+ fileList.value = []
hasException.value = null
exceptionDescription.value = ''
}
@@ -367,10 +296,18 @@
.form-container {
margin-bottom: 20px;
-
+
&:last-child {
margin-bottom: 0;
}
+}
+
+.upload-count {
+ display: block;
+ font-size: 12px;
+ color: #999;
+ margin-bottom: 8px;
+ padding-left: 10px;
}
.title {
@@ -381,7 +318,7 @@
padding-left: 10px;
position: relative;
margin: 6px 0 10px;
-
+
&::before {
content: "";
position: absolute;
@@ -423,12 +360,12 @@
cursor: pointer;
transition: all 0.3s;
background-color: #fff;
-
+
&.active {
border-color: #1890ff;
background-color: #e6f7ff;
}
-
+
&:active {
opacity: 0.8;
}
@@ -450,7 +387,7 @@
background-color: #f6ffed;
border: 1px dashed #b7eb8f;
border-radius: 8px;
-
+
.tip-text {
margin-top: 15px;
font-size: 14px;
diff --git a/src/pages/inspectionUpload/components/qrCodeFormDia.vue b/src/pages/inspectionUpload/components/qrCodeFormDia.vue
index bcf30ef..ccc0e4d 100644
--- a/src/pages/inspectionUpload/components/qrCodeFormDia.vue
+++ b/src/pages/inspectionUpload/components/qrCodeFormDia.vue
@@ -40,16 +40,15 @@
</u-input>
</u-form-item>
- <u-form-item label="闄勪欢" prop="storageBlobDTO" labelWidth="80">
+ <u-form-item label="闄勪欢" prop="commonFileListDTO" labelWidth="80">
<view class="upload-container">
<ImageUpload
- v-model="form.storageBlobDTO"
+ v-model="form.commonFileListDTO"
:limit="10"
:fileSize="50"
:fileType="['jpg', 'jpeg', 'png', 'mp4', 'mov']"
:maxVideoDuration="60"
- :statusType="0"
- @update:modelValue="handleStorageBlobUpdate"
+ @update:modelValue="handleFileListUpdate"
/>
</view>
</u-form-item>
@@ -116,7 +115,7 @@
scannerName: '',
scannerId: '',
scanTime: '',
- storageBlobDTO: [],
+ commonFileListDTO: [],
qrCode: {
id: ''
}
@@ -144,9 +143,9 @@
}
})
-// 澶勭悊storageBlobDTO鏁版嵁鏇存柊
-const handleStorageBlobUpdate = (value) => {
- form.storageBlobDTO = value || []
+// 澶勭悊commonFileListDTO鏁版嵁鏇存柊
+const handleFileListUpdate = (value) => {
+ form.commonFileListDTO = value || []
}
// 鑾峰彇褰撳墠浣嶇疆
@@ -259,7 +258,7 @@
form.deviceName = row.deviceName || ''
form.location = row.location || ''
form.qrCodeId = row.qrCodeId
- form.storageBlobDTO = []
+ form.commonFileListDTO = []
console.log('寮规琛ㄥ崟鏁版嵁:', form)
// 寮哄埗鏇存柊瑙嗗浘
@@ -308,8 +307,8 @@
scannerName: form.scannerName,
scannerId: form.scannerId,
scanTime: form.scanTime,
- storageBlobDTO: form.storageBlobDTO.map(file => ({
- id: file.id, // 娣诲姞id瀛楁
+ commonFileListDTO: form.commonFileListDTO.map(file => ({
+ id: file.id,
url: file.url,
bucketFilename: file.bucketFilename || file.name,
downloadUrl: file.downloadUrl || file.url,
diff --git a/src/pages/inspectionUpload/upload.vue b/src/pages/inspectionUpload/upload.vue
index 27ba41f..d29cd67 100644
--- a/src/pages/inspectionUpload/upload.vue
+++ b/src/pages/inspectionUpload/upload.vue
@@ -57,33 +57,16 @@
maxlength="500"
placeholder="璇锋弿杩板紓甯告儏鍐�..." />
</view>
- <!-- 鍒嗙被鏍囩椤碉紙浠呭湪寮傚父鏃舵樉绀猴級 -->
+ <!-- 涓婁紶鍖哄煙锛堜粎鍦ㄥ紓甯告椂鏄剧ず锛� -->
<view class="section-card"
v-if="hasException === true">
- <view class="upload-tabs">
- <view class="tab-item"
- :class="{ active: currentUploadType === 'before' }"
- @click="switchUploadType('before')">
- 鐢熶骇鍓�
- </view>
- <view class="tab-item"
- :class="{ active: currentUploadType === 'after' }"
- @click="switchUploadType('after')">
- 鐢熶骇涓�
- </view>
- <view class="tab-item"
- :class="{ active: currentUploadType === 'issue' }"
- @click="switchUploadType('issue')">
- 鐢熶骇鍚�
- </view>
- </view>
- <!-- 褰撳墠鍒嗙被鐨勪笂浼犲尯鍩� -->
+ <view class="section-title">涓婁紶闄勪欢</view>
<view class="upload-area">
<view class="upload-buttons">
<u-button type="primary"
@click="chooseMedia('image')"
:loading="uploading"
- :disabled="getCurrentFiles().length >= uploadConfig.limit"
+ :disabled="fileList.length >= uploadConfig.limit"
:customStyle="{ marginRight: '10px', flex: 1 }">
<u-icon name="camera"
size="18"
@@ -94,7 +77,7 @@
<u-button type="success"
@click="chooseMedia('video')"
:loading="uploading"
- :disabled="getCurrentFiles().length >= uploadConfig.limit"
+ :disabled="fileList.length >= uploadConfig.limit"
:customStyle="{ flex: 1 }">
<uni-icons type="videocam"
size="18"
@@ -110,10 +93,10 @@
:showText="true"
activeColor="#409eff"></u-line-progress>
</view>
- <!-- 褰撳墠鍒嗙被鐨勬枃浠跺垪琛� -->
- <view v-if="getCurrentFiles().length > 0"
+ <!-- 鏂囦欢鍒楄〃 -->
+ <view v-if="fileList.length > 0"
class="file-list">
- <view v-for="(file, index) in getCurrentFiles()"
+ <view v-for="(file, index) in fileList"
:key="index"
class="file-item">
<view class="file-preview-container">
@@ -129,7 +112,6 @@
style="margin-right: 5px"></uni-icons>
<text class="video-text">瑙嗛</text>
</view>
- <!-- 鍒犻櫎鎸夐挳 -->
<view class="delete-btn"
@click="removeFile(index)">
<u-icon name="close"
@@ -143,18 +125,13 @@
</view>
</view>
</view>
- <view v-if="getCurrentFiles().length === 0"
+ <view v-if="fileList.length === 0"
class="empty-state">
- <text>璇烽�夋嫨瑕佷笂浼犵殑{{ getUploadTypeText() }}鍥剧墖鎴栬棰�</text>
+ <text>璇烽�夋嫨瑕佷笂浼犵殑鍥剧墖鎴栬棰�</text>
</view>
</view>
- <!-- 缁熻淇℃伅 -->
<view class="upload-summary">
- <text class="summary-text">
- 鐢熶骇鍓�: {{ beforeModelValue.length }}涓枃浠� |
- 鐢熶骇涓�: {{ afterModelValue.length }}涓枃浠� |
- 鐢熶骇鍚�: {{ issueModelValue.length }}涓枃浠�
- </text>
+ <text class="summary-text">宸蹭笂浼�: {{ fileList.length }}涓枃浠�</text>
</view>
</view>
<!-- 姝e父鐘舵�佹彁绀� -->
@@ -197,13 +174,8 @@
const uploading = ref(false);
const uploadProgress = ref(0);
- // 涓変釜鍒嗙被鐨勪笂浼犵姸鎬�
- const beforeModelValue = ref([]); // 鐢熶骇鍓�
- const afterModelValue = ref([]); // 鐢熶骇涓�
- const issueModelValue = ref([]); // 鐢熶骇鍚�
-
- // 褰撳墠婵�娲荤殑涓婁紶绫诲瀷
- const currentUploadType = ref("before"); // 'before', 'after', 'issue'
+ // 缁熶竴鐨勬枃浠跺垪琛�
+ const fileList = ref([]);
// 寮傚父鐘舵��
const hasException = ref(null); // null: 鏈�夋嫨, true: 瀛樺湪寮傚父, false: 姝e父
@@ -232,73 +204,37 @@
const info = JSON.parse(decodeURIComponent(options.taskInfo));
taskInfo.value = info;
- // 鍥炴樉閫昏緫锛氫粠 taskInfo 涓仮澶嶅凡涓婁紶鐨勬枃浠�
- const mapFiles = list => {
- if (!list || !Array.isArray(list)) return [];
- return list.map(item => {
- // 澶勭悊 URL锛屽幓闄ゅ彲鑳界殑绌烘牸
- const finalUrl = (item.url || item.previewURL || "").trim();
- // 鑷姩鎺ㄦ柇鏂囦欢绫诲瀷
- let fileType = item.type;
- if (!fileType && item.contentType) {
- fileType = item.contentType.startsWith("video") ? "video" : "image";
- } else if (!fileType) {
- fileType = "image"; // 榛樿鍥剧墖
- }
+ // 鍥炴樉閫昏緫锛氫粠 commonFileListVO 鎭㈠宸蹭笂浼犵殑鏂囦欢
+ const fileVOList = Array.isArray(info.commonFileListVO) ? info.commonFileListVO : [];
+ fileList.value = fileVOList.map(item => {
+ const finalUrl = (item.url || item.previewURL || "").trim();
+ let fileType = item.type;
+ if (!fileType && item.contentType) {
+ fileType = item.contentType.startsWith("video") ? "video" : "image";
+ } else if (!fileType) {
+ fileType = "image";
+ }
+ return {
+ ...item,
+ url: finalUrl,
+ name: item.name || item.originalFilename,
+ tempId: item.tempId || item.id || item.tempFileId,
+ size: item.size || item.byteSize || 0,
+ type: fileType,
+ status: "success",
+ };
+ });
- return {
- ...item,
- url: finalUrl,
- name: item.name || item.originalFilename,
- tempId: item.tempId || item.id || item.tempFileId,
- size: item.size || item.byteSize || 0, // 鏄犲皠澶у皬瀛楁
- type: fileType,
- status: "success",
- };
- });
- };
-
- // 淇瀛楁鏄犲皠锛欱eforeVO(鐢熶骇鍓�), VO(鐢熶骇涓�), AfterVO(鐢熶骇鍚�)
- if (
- info.commonFileListBeforeVO &&
- Array.isArray(info.commonFileListBeforeVO)
- ) {
- beforeModelValue.value = mapFiles(info.commonFileListBeforeVO);
- }
- console.log(beforeModelValue.value, "beforeModelValue");
-
- if (info.commonFileListVO && Array.isArray(info.commonFileListVO)) {
- afterModelValue.value = mapFiles(info.commonFileListVO);
- }
- if (
- info.commonFileListAfterVO &&
- Array.isArray(info.commonFileListAfterVO)
- ) {
- issueModelValue.value = mapFiles(info.commonFileListAfterVO);
- }
-
- // 濡傛灉鏈夊紓甯告弿杩帮紝涔熸仮澶�
if (info.abnormalDescription) {
abnormalDescription.value = info.abnormalDescription;
}
- // 濡傛灉鏈夊紓甯哥姸鎬侊紝涔熸仮澶�
if (info.hasException !== undefined && info.hasException !== null) {
hasException.value = info.hasException;
- } else if (
- info.inspectionResult !== undefined &&
- info.inspectionResult !== null
- ) {
- // 0-寮傚父锛�1-姝e父
+ } else if (info.inspectionResult !== undefined && info.inspectionResult !== null) {
hasException.value = String(info.inspectionResult) === "0";
}
- // 鑷姩鍏滃簳锛氬鏋滃瓨鍦ㄥ凡涓婁紶鏂囦欢锛屽垯蹇呯劧鏄紓甯哥姸鎬侊紝纭繚 UI 姝e父鏄剧ず
- if (
- !hasException.value &&
- (beforeModelValue.value.length > 0 ||
- afterModelValue.value.length > 0 ||
- issueModelValue.value.length > 0)
- ) {
+ if (!hasException.value && fileList.value.length > 0) {
hasException.value = true;
}
} catch (e) {
@@ -310,39 +246,6 @@
// 杩斿洖涓婁竴椤�
const goBack = () => {
uni.navigateBack();
- };
-
- // 鍒囨崲涓婁紶绫诲瀷
- const switchUploadType = type => {
- currentUploadType.value = type;
- };
-
- // 鑾峰彇褰撳墠鍒嗙被鐨勬枃浠跺垪琛�
- const getCurrentFiles = () => {
- switch (currentUploadType.value) {
- case "before":
- return beforeModelValue.value || [];
- case "after":
- return afterModelValue.value || [];
- case "issue":
- return issueModelValue.value || [];
- default:
- return [];
- }
- };
-
- // 鑾峰彇涓婁紶绫诲瀷鏂囨湰
- const getUploadTypeText = () => {
- switch (currentUploadType.value) {
- case "before":
- return "鐢熶骇鍓�";
- case "after":
- return "鐢熶骇涓�";
- case "issue":
- return "鐢熶骇鍚�";
- default:
- return "";
- }
};
// 璁剧疆寮傚父鐘舵��
@@ -360,14 +263,8 @@
inspector: taskInfo.value?.inspector,
hasException: hasException.value,
inspectionResult: hasException.value ? 0 : 1, // 0-寮傚父锛�1-姝e父
- commonFileListBeforeDTO: beforeModelValue.value,
- commonFileListDTO: afterModelValue.value,
- commonFileListAfterDTO: issueModelValue.value,
- uploadedFiles: {
- before: beforeModelValue.value,
- after: afterModelValue.value,
- issue: issueModelValue.value,
- },
+ commonFileListDTO: fileList.value,
+ uploadedFiles: fileList.value,
};
uni.setStorageSync("repairTaskInfo", JSON.stringify(taskData));
@@ -398,11 +295,7 @@
// 濡傛灉鏄紓甯哥姸鎬侊紝妫�鏌ユ槸鍚︽湁涓婁紶鏂囦欢鍜屾弿杩�
if (hasException.value === true) {
- const totalFiles =
- beforeModelValue.value.length +
- afterModelValue.value.length +
- issueModelValue.value.length;
- if (totalFiles === 0) {
+ if (fileList.value.length === 0) {
uni.showToast({
title: "璇蜂笂浼犲紓甯哥収鐗�",
icon: "none",
@@ -425,17 +318,10 @@
mask: true,
});
- // 鎸夌収閫昏緫鍚堝苟鎵�鏈夊垎绫荤殑鏂囦欢鐢ㄤ簬鎻愬彇ID
- const allFiles = [
- ...beforeModelValue.value,
- ...afterModelValue.value,
- ...issueModelValue.value,
- ];
-
// 浼犵粰鍚庣鐨勪复鏃舵枃浠禝D鍒楄〃
let tempFileIds = [];
- if (allFiles.length > 0) {
- tempFileIds = allFiles
+ if (fileList.value.length > 0) {
+ tempFileIds = fileList.value
.map(item => item?.tempId ?? item?.tempFileId ?? item?.id)
.filter(v => v !== undefined && v !== null && v !== "");
}
@@ -443,9 +329,7 @@
// 鎻愪氦鏁版嵁
const submitData = {
...taskInfo.value,
- commonFileListBeforeDTO: beforeModelValue.value, // 鐢熶骇鍓�
- commonFileListDTO: afterModelValue.value, // 鐢熶骇涓�
- commonFileListAfterDTO: issueModelValue.value, // 鐢熶骇鍚�
+ commonFileListDTO: fileList.value,
hasException: hasException.value,
inspectionResult: hasException.value ? 0 : 1, // 0-寮傚父锛�1-姝e父
abnormalDescription: abnormalDescription.value,
@@ -498,7 +382,7 @@
// 鎷嶇収/鎷嶈棰�
const chooseMedia = type => {
- if (getCurrentFiles().length >= uploadConfig.limit) {
+ if (fileList.value.length >= uploadConfig.limit) {
uni.showToast({
title: `鏈�澶氬彧鑳介�夋嫨${uploadConfig.limit}涓枃浠禶,
icon: "none",
@@ -506,7 +390,7 @@
return;
}
- const remaining = uploadConfig.limit - getCurrentFiles().length;
+ const remaining = uploadConfig.limit - fileList.value.length;
// 浼樺厛浣跨敤 chooseMedia
if (typeof uni.chooseMedia === "function") {
@@ -612,7 +496,7 @@
Authorization: `Bearer ${token}`,
},
formData: {
- type: getTabType(),
+ type: 10,
},
success: res => {
try {
@@ -638,14 +522,7 @@
status: "success",
};
- // 鏍规嵁褰撳墠绫诲瀷娣诲姞鍒板搴旀暟缁�
- if (currentUploadType.value === "before") {
- beforeModelValue.value.push(uploadedFile);
- } else if (currentUploadType.value === "after") {
- afterModelValue.value.push(uploadedFile);
- } else if (currentUploadType.value === "issue") {
- issueModelValue.value.push(uploadedFile);
- }
+ fileList.value.push(uploadedFile);
uni.showToast({ title: "涓婁紶鎴愬姛", icon: "success" });
} else {
@@ -670,23 +547,9 @@
});
};
- // 鑾峰彇type鍊�
- const getTabType = () => {
- switch (currentUploadType.value) {
- case "before":
- return 10;
- case "after":
- return 11;
- case "issue":
- return 12;
- default:
- return 10;
- }
- };
-
// 鍒犻櫎鏂囦欢
const removeFile = index => {
- const files = getCurrentFiles();
+ const files = fileList.value;
files.splice(index, 1);
};
</script>
@@ -810,30 +673,6 @@
outline: none;
border-color: #409eff;
background: #fff;
- }
-
- /* 鍒嗙被鏍囩椤� */
- .upload-tabs {
- display: flex;
- gap: 10px;
- margin-bottom: 15px;
- }
-
- .tab-item {
- flex: 1;
- padding: 10px;
- text-align: center;
- background: #f5f5f5;
- border-radius: 6px;
- font-size: 13px;
- color: #666;
- cursor: pointer;
- transition: all 0.3s;
- }
-
- .tab-item.active {
- background: #409eff;
- color: #fff;
}
/* 涓婁紶鍖哄煙 */
--
Gitblit v1.9.3