From 2fda34643bc22e25f6c569415da5f955c81536bf Mon Sep 17 00:00:00 2001
From: Houjie <714924425@qq.com>
Date: 星期二, 03 六月 2025 09:37:08 +0800
Subject: [PATCH] 设备详情通过ID过滤/设备详情增加上传附件

---
 pages/device/deviceDeils/deviceDeils.vue |  435 ++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 388 insertions(+), 47 deletions(-)

diff --git a/pages/device/deviceDeils/deviceDeils.vue b/pages/device/deviceDeils/deviceDeils.vue
index dd2793f..3c86bb0 100644
--- a/pages/device/deviceDeils/deviceDeils.vue
+++ b/pages/device/deviceDeils/deviceDeils.vue
@@ -9,44 +9,79 @@
 
 			<uni-forms ref="form" :modelValue="formData" validate-trigger="bind" err-show-type="undertext">
 				<uni-group top="1">
-					
-				<uni-forms-item  :label-width="100" required name="num" label="璁惧缂栧彿:">
-					<uni-easyinput v-model="formData.equipmentCode" :disabled="true" />
-				</uni-forms-item>
-				
-				<uni-forms-item :label-width="100" name="remark" label="璁惧鍚嶇О:">
-					<uni-easyinput v-model="formData.equipmentName" :disabled="true" />
-				</uni-forms-item>
-				<!-- <uni-forms-item :label-width="100" name="outNum" label="鍏抽敭璁惧鏍囪瘑:">
+
+					<uni-forms-item :label-width="100" required name="num" label="璁惧缂栧彿:">
+						<uni-easyinput v-model="formData.equipmentCode" :disabled="true" />
+					</uni-forms-item>
+
+					<uni-forms-item :label-width="100" name="remark" label="璁惧鍚嶇О:">
+						<uni-easyinput v-model="formData.equipmentName" :disabled="true" />
+					</uni-forms-item>
+					<!-- <uni-forms-item :label-width="100" name="outNum" label="鍏抽敭璁惧鏍囪瘑:">
 					<uni-easyinput v-model="formData.equipmentImportance" :disabled="true" />
 				</uni-forms-item> -->
-				<view class="text-gray margin-bottom-lg">鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�� 鍩烘湰淇℃伅 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺��</view>
-				<uni-forms-item  :label-width="100" name="taskCode" label="缁翠慨鐘舵��:">
-					<uni-easyinput :disabled="true" v-model="formData.repairStatus_dictText" />
-				</uni-forms-item>
-				<uni-forms-item :label-width="100" name="endLocation" label="淇濆吇鐘舵��:">
-					<uni-easyinput :disabled="true" v-model="formData.maintenanceStatus_dictText" />
-				
-				</uni-forms-item>
-				<uni-forms-item :label-width="100" name="endLocation" label="浣跨敤杞﹂棿:">
-					<uni-easyinput :disabled="true" v-model="formData.orgId_dictText" />
-				
-				</uni-forms-item>
-				
-				<uni-forms-item  :label-width="100" name="endLocation" label="瀹夎浣嶇疆:">
-					<uni-easyinput :disabled="true" v-model="formData.installationPosition" />
-				</uni-forms-item>
-				<uni-forms-item  :label-width="100" name="endLocation" label="鎶�鏈姸鎬�:">
-					<uni-easyinput :disabled="true" v-model="formData.technologyStatus_dictText" />
-				</uni-forms-item>
-				<uni-forms-item  :label-width="100" name="endLocation" label="璁惧绠$悊鍛�:">
-					<uni-easyinput :disabled="true" v-model="formData.equipmentManager_dictText" />
-				</uni-forms-item>
-				<uni-forms-item  :label-width="100" name="endLocation" label="鍑哄巶鏃ユ湡:">
-					<uni-easyinput :disabled="true" v-model="formData.leaveFactoryDate" />
-				</uni-forms-item>
+					<view class="text-gray margin-bottom-lg">鈥斺�斺�斺�斺�斺�斺�斺�斺�斺�� 鍩烘湰淇℃伅 鈥斺�斺�斺�斺�斺�斺�斺�斺�斺��</view>
+					<uni-forms-item :label-width="100" name="taskCode" label="缁翠慨鐘舵��:">
+						<uni-easyinput :disabled="true" v-model="formData.repairStatus_dictText" />
+					</uni-forms-item>
+					<uni-forms-item :label-width="100" name="endLocation" label="淇濆吇鐘舵��:">
+						<uni-easyinput :disabled="true" v-model="formData.maintenanceStatus_dictText" />
+
+					</uni-forms-item>
+					<uni-forms-item :label-width="100" name="endLocation" label="浣跨敤杞﹂棿:">
+						<uni-easyinput :disabled="true" v-model="formData.orgId_dictText" />
+
+					</uni-forms-item>
+
+					<uni-forms-item :label-width="100" name="endLocation" label="瀹夎浣嶇疆:">
+						<uni-easyinput :disabled="true" v-model="formData.installationPosition" />
+					</uni-forms-item>
+					<uni-forms-item :label-width="100" name="endLocation" label="鎶�鏈姸鎬�:">
+						<uni-easyinput :disabled="true" v-model="formData.technologyStatus_dictText" />
+					</uni-forms-item>
+					<uni-forms-item :label-width="100" name="endLocation" label="璁惧绠$悊鍛�:">
+						<uni-easyinput :disabled="true" v-model="formData.equipmentManager_dictText" />
+					</uni-forms-item>
+					<uni-forms-item :label-width="100" name="endLocation" label="鍑哄巶鏃ユ湡:">
+						<uni-easyinput :disabled="true" v-model="formData.leaveFactoryDate" />
+					</uni-forms-item>
+					<uni-forms-item :label-width="100" name="outNum" label="璁惧鏂囨。:">
+						<uni-file-picker v-model="fileLists" :extension="['.pdf']" @fail="uploadFail"
+							:list-styles="listStyles" :delIcon="del" :max-count="5" file-mediatype="all"
+							@downloadFile="downloadFile" @select="onFileSelect" @delete="onFileDelete">
+							<button size="mini" type="primary">鐐瑰嚮涓婁紶</button>
+						</uni-file-picker>
+					</uni-forms-item>
 				</uni-group>
 			</uni-forms>
+
+
+			<view class="file-list margin-sm">
+				<view class="file-item" v-for="(file, index) in this.selectedFiles" :key="index">
+					<view class="file-icon">
+						<!-- 鏂囦欢鍥炬爣 -->
+						<image src="/static/icon_file.png" style="height: 25px;  width: 25px; margin-right: 10px;"
+							mode='aspectFit' class="zai-logo "></image>
+
+					</view>
+					<view class="file-name">
+						<!-- 鏂囦欢鍚� -->
+						{{file.fileName}}
+					</view>
+					<view class="file-actions">
+						<!-- 涓嬭浇鎸夐挳 -->
+						<image v-show="showBtn" src="/static/icon_down.png" @click="downloadFile(file)"
+							style="height: 25px;  width: 25px; margin-right: 10px;"></image>
+						<!-- <button size="mini"  @click="downloadFile(file)">
+			        <view class="icon-download">涓嬭浇</view>
+			      </button> -->
+						<!-- 鍒犻櫎鎸夐挳 -->
+						<image v-show="showBtn" src="/static/icon_del.png" @click="deleteFile(index)"
+							style="height: 25px;  width: 25px;"></image>
+						</button>
+					</view>
+				</view>
+			</view>
 			<view class="flex  margin-bottom-xs">
 				<button class="flex-sub  cu-btn bg-blue margin-sm   lg" hover-class="is-hover"
 					@click="goReportRepair()">鎶ヤ慨</button>
@@ -63,17 +98,39 @@
 
 <script>
 	import MescrollMixin from "@/components/mescroll-uni/mescroll-mixins.js";
+	import {
+		saveAs
+	} from 'file-saver'; // 寮曞叆 file-saver 搴�
 	export default {
 		mixins: [MescrollMixin], // 浣跨敤mixin
 		data() {
 			return {
+				showBtn: true,
+				listStyles: {
+					"borderStyle": {
+						"width": "0", // 杈规瀹藉害
+					},
+					"border": false, // 鏄惁鏄剧ず杈规
+					"dividline": false
+				},
+
+				del: true,
 				scrollLeft: 0,
 				searchValue: '',
-				formData: {},
 				NavBarColor: this.NavBarColor,
 				url: {
-					stallList: "/eam/equipment/queryById"
+					fileList: 'eam/equipmentAttachment/list',
+					stallList: "/eam/equipment/queryById",
+					upload: "/eam/sysFiles/batch_upload",
+					add: 'eam/equipmentAttachment/add',
+					downloadFile: 'eam/equipmentAttachment/downloadFile'
 				},
+				uploading: false, // 鏄惁姝e湪涓婁紶
+				selectedFiles: [],
+				formData: {
+					fileLists: []
+				},
+				fileLists: [],
 				id: '',
 				upOption: {
 					page: {
@@ -121,46 +178,268 @@
 		},
 		created() {
 			this.upCallback()
+			this.getFileList()
 		},
 		methods: {
-			goHome() {
-				uni.reLaunch({
-					url: '/pages/index/index'
+			downloadFile(item) {
+				uni.showModal({
+					title: '鎻愮ず',
+					content: '纭瑕佷笅杞藉悧',
+					cancelText: '鍙栨秷',
+					confirmText: '纭',
+					success: res => {
+						if (res.confirm) {
+							this.downFile(item)
+						}
+					}
 				})
+
+			},
+
+
+			downFile(item) {
+				this.$http.download(this.url.downloadFile, {
+					params: {
+						id: item.id
+					},
+					responseType: 'blob' // 纭繚鍝嶅簲绫诲瀷涓� blob
+				}).then(response => {
+					console.log('Response:', response); // 鏌ョ湅瀹屾暣鍝嶅簲缁撴瀯
+
+					// 鑾峰彇 tempFilePath锛圔lob URL锛�
+					const tempFilePath = response.tempFilePath;
+
+					if (!tempFilePath) {
+						uni.showToast({
+							title: '鏂囦欢涓嬭浇澶辫触',
+							icon: 'none'
+						});
+						return;
+					}
+
+					let fileName = item.fileName;
+
+					// 鍒涘缓 <a> 鏍囩骞惰Е鍙戜笅杞�
+					const link = document.createElement('a');
+					link.href = tempFilePath;
+					link.setAttribute('download', fileName);
+					link.style.display = 'none';
+
+					document.body.appendChild(link);
+					link.click();
+
+					// 娓呯悊璧勬簮
+					document.body.removeChild(link);
+
+				}).catch(err => {
+					console.error('Download error:', err);
+					uni.showToast({
+						title: '鏂囦欢涓嬭浇澶辫触',
+						icon: 'none'
+					});
+				});
+			},
+
+
+
+
+			// downFile(item) {
+			// 	this.$http.download(this.url.downloadFile, {
+			// 		params: {
+			// 			id:item.id
+			// 		},
+			// 	}).then(res => {
+			// 		      if (!res) {
+			// 		          this.$message.warning('鏂囦欢涓嬭浇澶辫触')
+			// 		          return
+			// 		        } else {
+			// 		          let fileName = item.fileName;
+			// 		          if (typeof window.navigator.msSaveBlob !== 'undefined') {
+			// 		            window.navigator.msSaveBlob(new Blob([res]), fileName);
+			// 		          } else {
+			// 		            let url = window.URL.createObjectURL(new Blob([res]));
+			// 		            let link = document.createElement('a');
+			// 		            link.style.display = 'none';
+			// 		            link.href = url;
+			// 		            link.setAttribute('download', fileName);
+			// 		            document.body.appendChild(link);
+			// 		            link.click()
+			// 		            document.body.removeChild(link) //涓嬭浇瀹屾垚绉婚櫎鍏冪礌
+			// 		            window.URL.revokeObjectURL(url) //閲婃斁鎺塨lob瀵硅薄
+			// 		          }
+			// 		        }
+			// 	}).catch((err) => {
+			// 		uni.showToast({
+			// 			title: '鑾峰彇鏂囦欢鍒楄〃澶辫触',
+			// 			icon: 'none'
+			// 		});
+			// 	});
+			// },
+
+
+			getFileList() {
+				this.$http.get(this.url.fileList, {
+					params: {
+						equipmentId: this.id,
+						pageNo: 1,
+						pageSize: 999,
+						column: 'createTime',
+						order: 'desc'
+					},
+				}).then(res => {
+					if (res.data.success) {
+						this.selectedFiles = res.data.result.records || [];
+
+					}
+				}).catch(() => {
+					uni.showToast({
+						title: '鑾峰彇鏂囦欢鍒楄〃澶辫触',
+						icon: 'none'
+					});
+				});
+			},
+			uploadFail(e) {
+				console.log('涓婁紶澶辫触锛�', e)
+			},
+
+
+
+			onFileSelect(e) {
+				const tempFilePaths = e.tempFilePaths;
+
+				uni.showLoading({
+					title: '涓婁紶涓�...'
+				});
+
+				const uploadPromises = tempFilePaths.map((filePath, index) => {
+					return new Promise((resolve, reject) => {
+						this.$http.upload(this.url.upload, {
+								filePath: filePath,
+								name: 'file'
+							})
+							.then(uploadRes => {
+								const serverFile = uploadRes.data.result[0];
+								console.log(serverFile);
+								// 鎻愬彇fileSuffix骞舵嫾鎺�
+								if (serverFile.fileSuffix && serverFile.fileName && !serverFile
+									.fileName.includes('.')) {
+									serverFile.fileName += '.' + serverFile.fileSuffix;
+								}
+								this.fileLists = [];
+								// 闃叉閲嶅娣诲姞锛堟牴鎹� id 鎴� fileName 鍒ゆ柇锛�
+								if (!this.fileLists.some(file => file.id === serverFile.id)) {
+									this.fileLists.push(serverFile);
+								}
+								resolve();
+							})
+							.catch(err => {
+								console.error(`鏂囦欢 ${index + 1} 涓婁紶澶辫触`, err);
+								uni.showToast({
+									title: `绗� ${index + 1} 涓枃浠朵笂浼犲け璐,
+									icon: 'none'
+								});
+								reject(err);
+							});
+					});
+				});
+
+				Promise.all(uploadPromises)
+					.then(() => {
+						uni.hideLoading();
+						uni.showToast({
+							title: '鍏ㄩ儴涓婁紶鎴愬姛锛屾鍦ㄦ彁浜�...'
+						});
+						this.submitFileList(); // 鑷姩鎻愪氦鎵�鏈夋枃浠�
+					})
+					.catch(() => {
+						uni.hideLoading();
+						uni.showToast({
+							title: '閮ㄥ垎涓婁紶澶辫触',
+							icon: 'none'
+						});
+					});
+			},
+			// 鏂囦欢鍒犻櫎鍥炶皟
+			onFileDelete(e) {
+				console.log('鍒犻櫎鏂囦欢:', e.index);
+			},
+
+			// 鍒犻櫎鍗曚釜鏂囦欢
+			deleteFile(index) {
+				this.fileLists.splice(index, 1);
+			},
+
+
+			submitFileList() {
+				if (!this.fileLists.length) {
+					uni.showToast({
+						title: '娌℃湁鍙彁浜ょ殑鏂囦欢',
+						icon: 'none'
+					});
+					return;
+				}
+				console.log(this.fileLists)
+				this.$http.post(this.url.add, {
+					equipmentId: this.id,
+					fileList: this.fileLists
+				}).then(res => {
+					if (res.data.success) {
+						uni.showToast({
+							title: '鎻愪氦鎴愬姛'
+						});
+						this.getFileList();
+					} else {
+						uni.showToast({
+							title: '鎻愪氦澶辫触',
+							icon: 'none'
+						});
+					}
+				}).catch(err => {
+					uni.showToast({
+						title: '鎻愪氦寮傚父',
+						icon: 'none'
+					});
+					console.error('鎻愪氦澶辫触:', err);
+				});
 			},
 			/**
 			 * 鎶ヤ慨
 			 */
 			goReportRepair() {
 				console.log('getSera 鏂规硶琚皟鐢�');
-				uni.navigateTo({
-					url: `/pages/reportRepair/reportRepair?equipmentId=${encodeURIComponent(this.id)}`,
+				uni.redirectTo({
+					url: `/pages/reportRepair/reportRepair?equipmentId=${encodeURIComponent(this.id)}`
 				});
 			},
 			/**
 			 * 鐐规
 			 */
 			goCheck() {
-				uni.navigateTo({
-					url: '/pages/checkList/checkList',
+				uni.redirectTo({
+					// url: '/pages/checkList/checkList',
+					url: `/pages/checkList/checkList?equipmentId=${encodeURIComponent(this.id)}`
 				});
 			},
 			/**
 			 * 鍛ㄤ繚
 			 */
 			goBaoZhou() {
-				uni.navigateTo({
-					url: '/pages/baoZhou/baoZhou',
+				uni.redirectTo({
+					// url: '/pages/baoZhou/baoZhou',
+					url: `/pages/baoZhou/baoZhou?equipmentId=${encodeURIComponent(this.id)}`
 				});
 			},
 			/**
 			 * 缁翠慨
 			 */
 			goMaintenance() {
-				uni.navigateTo({
-					url: '/pages/maintenanceReport/maintenanceReport',
+				uni.redirectTo({
+					// url: '/pages/maintenanceReport/maintenanceReport',
+					url: `/pages/maintenanceReport/maintenanceReport?equipmentId=${encodeURIComponent(this.id)}`
 				});
 			},
+
+
 			upCallback() {
 				this.$http.get(this.url.stallList, {
 					params: {
@@ -236,6 +515,25 @@
 </script>
 
 <style>
+	.file-list {
+		margin-top: 20px;
+	}
+
+	.file-item {
+		display: flex;
+		justify-content: space-between;
+		align-items: center;
+		padding: 10px;
+		border-bottom: 1px solid #eee;
+	}
+
+	.file-item text {
+		flex: 1;
+		overflow: hidden;
+		text-overflow: ellipsis;
+		white-space: nowrap;
+	}
+
 	.is-hover {
 		color: rgba(255, 255, 255, 0.6);
 		background-color: #55aaff;
@@ -256,4 +554,47 @@
 		margin-top: 85px;
 		height: auto;
 	}
+
+	.file-list {
+		display: flex;
+		flex-direction: column;
+		gap: 10px;
+	}
+
+	.file-item {
+		display: flex;
+		align-items: center;
+		padding: 10px;
+		border: 1px solid #ddd;
+		border-radius: 4px;
+	}
+
+	.file-icon img {
+		width: 32px;
+		height: 32px;
+		margin-right: 10px;
+	}
+
+	.file-name {
+		flex: 1;
+		font-size: 16px;
+	}
+
+	.file-actions button {
+		background: none;
+		border: none;
+		cursor: pointer;
+		margin-left: 10px;
+	}
+
+	.file-actions .icon-download,
+	.file-actions .icon-delete {
+		font-size: 18px;
+		color: #555;
+	}
+
+	.file-actions .icon-download:hover,
+	.file-actions .icon-delete:hover {
+		color: #007bff;
+	}
 </style>
\ No newline at end of file

--
Gitblit v1.9.3