From d68ca564471d2c18026c152d20646bbd1e0d4890 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期二, 27 一月 2026 10:27:06 +0800
Subject: [PATCH] fix: 设备保养添加附件上传功能
---
src/views/equipmentManagement/upkeep/index.vue | 101 +++++++++++++++++++++++++++++++++
src/api/equipmentManagement/maintenanceTaskFile.js | 28 +++++++++
2 files changed, 128 insertions(+), 1 deletions(-)
diff --git a/src/api/equipmentManagement/maintenanceTaskFile.js b/src/api/equipmentManagement/maintenanceTaskFile.js
new file mode 100644
index 0000000..8373ae3
--- /dev/null
+++ b/src/api/equipmentManagement/maintenanceTaskFile.js
@@ -0,0 +1,28 @@
+import request from "@/utils/request";
+
+// 鏌ヨ淇濆吇浠诲姟闄勪欢鍒楄〃
+export function listMaintenanceTaskFiles(query) {
+ return request({
+ url: "/maintenanceTaskFile/listPage",
+ method: "get",
+ params: query,
+ });
+}
+
+// 鏂板淇濆吇浠诲姟闄勪欢
+export function addMaintenanceTaskFile(data) {
+ return request({
+ url: "/maintenanceTaskFile/add",
+ method: "post",
+ data,
+ });
+}
+
+// 鍒犻櫎淇濆吇浠诲姟闄勪欢
+export function delMaintenanceTaskFile(id) {
+ return request({
+ url: "/maintenanceTaskFile/del",
+ method: "delete",
+ data: Array.isArray(id) ? id : [id],
+ });
+}
diff --git a/src/views/equipmentManagement/upkeep/index.vue b/src/views/equipmentManagement/upkeep/index.vue
index 046c0fa..543e37b 100644
--- a/src/views/equipmentManagement/upkeep/index.vue
+++ b/src/views/equipmentManagement/upkeep/index.vue
@@ -203,6 +203,13 @@
>
鍒犻櫎
</el-button>
+ <el-button
+ type="primary"
+ link
+ @click="openFileDialog(row)"
+ >
+ 闄勪欢
+ </el-button>
</template>
</PIMTable>
</div>
@@ -211,6 +218,15 @@
<PlanModal ref="planModalRef" @ok="getTableData" />
<MaintenanceModal ref="maintainModalRef" @ok="getTableData" />
<FormDia ref="formDiaRef" @closeDia="getScheduledTableData" />
+ <FileListDialog
+ ref="fileListDialogRef"
+ v-model="fileDialogVisible"
+ :show-upload-button="true"
+ :show-delete-button="true"
+ :delete-method="handleAttachmentDelete"
+ :name-column-label="'闄勪欢鍚嶇О'"
+ :rulesRegulationsManagementId="currentMaintenanceTaskId"
+ @upload="handleAttachmentUpload" />
</div>
</template>
@@ -221,12 +237,18 @@
import PlanModal from './Form/PlanModal.vue'
import MaintenanceModal from './Form/MaintenanceModal.vue'
import FormDia from './Form/formDia.vue'
+import FileListDialog from '@/components/Dialog/FileListDialog.vue'
import {
getUpkeepPage,
delUpkeep,
deviceMaintenanceTaskList,
deviceMaintenanceTaskDel,
} from '@/api/equipmentManagement/upkeep'
+import {
+ listMaintenanceTaskFiles,
+ addMaintenanceTaskFile,
+ delMaintenanceTaskFile,
+} from '@/api/equipmentManagement/maintenanceTaskFile'
import dayjs from 'dayjs'
const { proxy } = getCurrentInstance()
@@ -240,6 +262,10 @@
const maintainModalRef = ref()
// 瀹氭椂浠诲姟寮圭獥鎺у埗鍣�
const formDiaRef = ref()
+// 闄勪欢寮圭獥
+const fileListDialogRef = ref(null)
+const fileDialogVisible = ref(false)
+const currentMaintenanceTaskId = ref(null)
// 浠诲姟璁板綍tab锛堝師璁惧淇濆吇椤甸潰锛夌浉鍏冲彉閲�
const filters = reactive({
@@ -385,7 +411,7 @@
dataType: "slot",
slot: "operation",
align: "center",
- width: "300px",
+ width: "350px",
},
])
@@ -571,6 +597,79 @@
getTableData()
}
+// 闄勪欢鐩稿叧鏂规硶
+// 鏌ヨ闄勪欢鍒楄〃
+const fetchMaintenanceTaskFiles = async (deviceMaintenanceId) => {
+ try {
+ const params = {
+ current: 1,
+ size: 100,
+ deviceMaintenanceId,
+ rulesRegulationsManagementId:deviceMaintenanceId
+ }
+ const res = await listMaintenanceTaskFiles(params)
+ const records = res?.data?.records || []
+ const mapped = records.map(item => ({
+ id: item.id,
+ name: item.fileName || item.name,
+ url: item.fileUrl || item.url,
+ raw: item,
+ }))
+ fileListDialogRef.value?.setList(mapped)
+ } catch (error) {
+ ElMessage.error('鑾峰彇闄勪欢鍒楄〃澶辫触')
+ }
+}
+
+// 鎵撳紑闄勪欢寮圭獥
+const openFileDialog = async (row) => {
+ currentMaintenanceTaskId.value = row.id
+ fileDialogVisible.value = true
+ await fetchMaintenanceTaskFiles(row.id)
+}
+
+// 鍒锋柊闄勪欢鍒楄〃
+const refreshFileList = async () => {
+ if (!currentMaintenanceTaskId.value) return
+ await fetchMaintenanceTaskFiles(currentMaintenanceTaskId.value)
+}
+
+// 涓婁紶闄勪欢
+const handleAttachmentUpload = async (filePayload) => {
+ if (!currentMaintenanceTaskId.value) return
+ try {
+ const payload = {
+ name: filePayload?.fileName || filePayload?.name,
+ url: filePayload?.fileUrl || filePayload?.url,
+ deviceMaintenanceId: currentMaintenanceTaskId.value,
+ }
+ await addMaintenanceTaskFile(payload)
+ ElMessage.success('鏂囦欢涓婁紶鎴愬姛')
+ await refreshFileList()
+ } catch (error) {
+ ElMessage.error('鏂囦欢涓婁紶澶辫触')
+ }
+}
+
+// 鍒犻櫎闄勪欢
+const handleAttachmentDelete = async (row) => {
+ if (!row?.id) return false
+ try {
+ await ElMessageBox.confirm('纭鍒犻櫎璇ラ檮浠讹紵', '鎻愮ず', { type: 'warning' })
+ } catch {
+ return false
+ }
+ try {
+ await delMaintenanceTaskFile(row.id)
+ ElMessage.success('鍒犻櫎鎴愬姛')
+ await refreshFileList()
+ return true
+ } catch (error) {
+ ElMessage.error('鍒犻櫎澶辫触')
+ return false
+ }
+}
+
onMounted(() => {
// 鏍规嵁榛樿婵�娲荤殑 Tab 璋冪敤瀵瑰簲鐨勬煡璇㈡帴鍙�
if (activeTab.value === 'scheduled') {
--
Gitblit v1.9.3