From 377c0a70c094d024aeb0bb94f4b791c6d5530c1e Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期四, 06 八月 2026 10:21:55 +0800
Subject: [PATCH] 新疆_马铃薯 1.不合格管理添加拒收逻辑
---
src/views/equipmentManagement/upkeep/index.vue | 229 ++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 194 insertions(+), 35 deletions(-)
diff --git a/src/views/equipmentManagement/upkeep/index.vue b/src/views/equipmentManagement/upkeep/index.vue
index 3b771bf..a4647a2 100644
--- a/src/views/equipmentManagement/upkeep/index.vue
+++ b/src/views/equipmentManagement/upkeep/index.vue
@@ -15,10 +15,10 @@
@change="getScheduledTableData"
/>
</el-form-item>
- <el-form-item label="浠诲姟鐘舵��">
- <el-select v-model="scheduledFilters.status" placeholder="璇烽�夋嫨浠诲姟鐘舵��" clearable style="width: 200px">
- <el-option label="鍚敤" value="1" />
- <el-option label="鍋滅敤" value="0" />
+ <el-form-item label="鏄惁鍚敤">
+ <el-select v-model="scheduledFilters.isEnabled" placeholder="璇烽�夋嫨鏄惁鍚敤" clearable style="width: 200px">
+ <el-option label="鍚敤" :value="1" />
+ <el-option label="绂佺敤" :value="0" />
</el-select>
</el-form-item>
<el-form-item>
@@ -39,7 +39,7 @@
icon="Delete"
:disabled="scheduledMultipleList.length <= 0"
@click="delScheduledTaskByIds(scheduledMultipleList.map((item) => item.id))"
- >
+ v-hasPermi="['equipmentManagement:upkeep:remove']">
鎵归噺鍒犻櫎
</el-button>
</div>
@@ -57,9 +57,14 @@
@selection-change="handleScheduledSelectionChange"
@pagination="changeScheduledPage"
>
- <template #statusRef="{ row }">
- <el-tag v-if="row.status === 1" type="success">鍚敤</el-tag>
- <el-tag v-if="row.status === 0" type="danger">鍋滅敤</el-tag>
+ <template #isEnabledRef="{ row }">
+ <el-switch
+ v-model="row.isEnabled"
+ :active-value="1"
+ :inactive-value="0"
+ :loading="row.enableSwitchLoading"
+ :before-change="() => handleScheduledEnableBeforeChange(row)"
+ />
</template>
<template #operation="{ row }">
<el-button
@@ -73,7 +78,7 @@
type="danger"
link
@click="delScheduledTaskByIds(row.id)"
- >
+ v-hasPermi="['equipmentManagement:upkeep:remove']">
鍒犻櫎
</el-button>
</template>
@@ -144,7 +149,7 @@
icon="Delete"
:disabled="multipleList.length <= 0 || hasFinishedStatus"
@click="delRepairByIds(multipleList.map((item) => item.id))"
- >
+ v-hasPermi="['equipmentManagement:upkeep:remove']">
鎵归噺鍒犻櫎
</el-button>
</div>
@@ -163,44 +168,45 @@
@pagination="changePage"
>
<template #maintenanceResultRef="{ row }">
- <div>{{ row.maintenanceResult || '-' }}</div>
+ <div>{{ { "0": "缁翠慨", "1": "瀹屽ソ" }[row.maintenanceResult] || row.maintenanceResult || "-" }}</div>
</template>
<template #statusRef="{ row }">
<el-tag v-if="row.status === 2" type="danger">澶辫触</el-tag>
<el-tag v-if="row.status === 1" type="success">瀹岀粨</el-tag>
+ <el-tag v-if="row.status === 3" type="warning">寰呴獙鏀�</el-tag>
<el-tag v-if="row.status === 0" type="warning">寰呬繚鍏�</el-tag>
</template>
<template #operation="{ row }">
- <!-- 杩欎釜鍔熻兘璺熸柊澧炰繚鍏诲姛鑳戒竴妯′竴鏍凤紝鏈夊暐鎰忎箟锛� -->
- <!-- <el-button
- type="primary"
- text
- @click="addMaintain(row)"
- >
- 鏂板淇濆吇
- </el-button> -->
<el-button
type="primary"
link
- :disabled="row.status === 1"
+ :disabled="row.status === 1 || row.status === 3"
@click="editPlan(row.id)"
>
缂栬緫
</el-button>
<el-button
+ v-if="row.status === 0"
type="success"
link
- :disabled="row.status === 1"
@click="addMaintain(row)"
>
淇濆吇
+ </el-button>
+ <el-button
+ v-if="row.status === 3"
+ type="success"
+ link
+ @click="openAcceptanceDialog(row)"
+ >
+ 楠屾敹瀹℃壒
</el-button>
<el-button
type="danger"
link
:disabled="row.status === 1"
@click="delRepairByIds(row.id)"
- >
+ v-hasPermi="['equipmentManagement:upkeep:remove']">
鍒犻櫎
</el-button>
<el-button
@@ -217,28 +223,45 @@
</el-tabs>
<PlanModal ref="planModalRef" @ok="getTableData" />
<MaintenanceModal ref="maintainModalRef" @ok="getTableData" />
+ <AcceptanceModal ref="acceptanceModalRef" @ok="getTableData" />
<FormDia ref="formDiaRef" @closeDia="getScheduledTableData" />
- <FileList v-if="fileDialogVisible" v-model:visible="fileDialogVisible" :record-type="'device_maintenance'" :record-id="currentMaintenanceTaskId" />
+ <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>
<script setup>
-import {ref, onMounted, reactive, getCurrentInstance, nextTick, computed, defineAsyncComponent} from 'vue'
+import { ref, onMounted, reactive, getCurrentInstance, nextTick, computed } from 'vue'
import { Search } from '@element-plus/icons-vue'
import { ElMessage, ElMessageBox } from 'element-plus'
import PlanModal from './Form/PlanModal.vue'
import MaintenanceModal from './Form/MaintenanceModal.vue'
import FormDia from './Form/formDia.vue'
+import AcceptanceModal from './Form/AcceptanceModal.vue'
+import FileListDialog from '@/components/Dialog/FileListDialog.vue'
import {
getUpkeepPage,
delUpkeep,
deviceMaintenanceTaskList,
deviceMaintenanceTaskDel,
+ deviceMaintenanceTaskChangeEnable,
+ maintenanceAcceptance,
} from '@/api/equipmentManagement/upkeep'
+import {
+ listMaintenanceTaskFiles,
+ addMaintenanceTaskFile,
+ delMaintenanceTaskFile,
+} from '@/api/equipmentManagement/maintenanceTaskFile'
import dayjs from 'dayjs'
const { proxy } = getCurrentInstance()
-const FileList = defineAsyncComponent(() => import("@/components/Dialog/FileList.vue"));
// Tab鐩稿叧
const activeTab = ref('scheduled')
@@ -247,6 +270,8 @@
const planModalRef = ref()
// 淇濆吇寮圭獥鎺у埗鍣�
const maintainModalRef = ref()
+// 楠屾敹瀹℃壒寮圭獥鎺у埗鍣�
+const acceptanceModalRef = ref()
// 瀹氭椂浠诲姟寮圭獥鎺у埗鍣�
const formDiaRef = ref()
// 闄勪欢寮圭獥
@@ -273,7 +298,7 @@
// 瀹氭椂浠诲姟绠$悊tab鐩稿叧鍙橀噺
const scheduledFilters = reactive({
taskName: '',
- status: '',
+ isEnabled: undefined,
})
const scheduledDataList = ref([])
@@ -286,6 +311,10 @@
// 瀹氭椂浠诲姟绠$悊琛ㄦ牸鍒楅厤缃�
const scheduledColumns = ref([
+ {
+ label: "鎵�鍦ㄥ尯鍩�",
+ prop: "areaName",
+ },
{ prop: "taskName", label: "璁惧鍚嶇О"},
{
label: "瑙勬牸鍨嬪彿",
@@ -300,7 +329,8 @@
DAILY: "姣忔棩",
WEEKLY: "姣忓懆",
MONTHLY: "姣忔湀",
- QUARTERLY: "瀛e害"
+ QUARTERLY: "瀛e害",
+ YEARLY: "姣忓勾",
}[cell] || "")
},
{
@@ -326,6 +356,15 @@
},
{ prop: "registrant", label: "鐧昏浜�", minWidth: 100 },
{ prop: "registrationDate", label: "鐧昏鏃ユ湡", minWidth: 100 },
+ { prop: "maintenanceContent", label: "淇濆吇鍐呭", minWidth: 150, showOverflowTooltip: true },
+ {
+ label: "鏄惁鍚敤",
+ prop: "isEnabled",
+ dataType: "slot",
+ slot: "isEnabledRef",
+ align: "center",
+ width: "120px",
+ },
{
fixed: "right",
label: "鎿嶄綔",
@@ -338,6 +377,10 @@
// 浠诲姟璁板綍琛ㄦ牸鍒楅厤缃紙鍘熻澶囦繚鍏昏〃鏍煎垪锛�
const columns = ref([
+ {
+ label: "鎵�鍦ㄥ尯鍩�",
+ prop: "areaName",
+ },
{
label: "璁惧鍚嶇О",
align: "center",
@@ -359,11 +402,6 @@
align: "center",
prop: "createUserName",
},
- {
- label: "椤圭洰",
- align: "center",
- prop: "machineryCategory",
- },
// {
// label: "褰曞叆鏃ユ湡",
// align: "center",
@@ -390,12 +428,32 @@
dataType: "slot",
slot: "maintenanceResultRef",
},
+ { prop: "maintenanceContent", label: "淇濆吇鍐呭", minWidth: 150, showOverflowTooltip: true },
{
label: "鐘舵��",
align: "center",
prop: "status",
dataType: "slot",
slot: "statusRef",
+ },
+ {
+ label: "楠屾敹浜�",
+ align: "center",
+ prop: "acceptanceName",
+ formatData: (cell) => cell || "-",
+ },
+ {
+ label: "楠屾敹鏃堕棿",
+ align: "center",
+ prop: "acceptanceTime",
+ formatData: (cell) =>
+ cell ? dayjs(cell).format("YYYY-MM-DD HH:mm:ss") : "-",
+ },
+ {
+ label: "楠屾敹澶囨敞",
+ align: "center",
+ prop: "acceptanceRemark",
+ formatData: (cell) => cell || "-",
},
{
fixed: "right",
@@ -423,11 +481,16 @@
current: scheduledPagination.currentPage,
size: scheduledPagination.pageSize,
taskName: scheduledFilters.taskName || undefined,
- status: scheduledFilters.status || undefined,
+ isEnabled: scheduledFilters.isEnabled,
}
const { code, data } = await deviceMaintenanceTaskList(params)
if (code === 200) {
- scheduledDataList.value = data?.records || []
+ const records = data?.records || []
+ scheduledDataList.value = records.map((item) => ({
+ ...item,
+ isEnabled: Number(item.isEnabled ?? item.status ?? 1),
+ enableSwitchLoading: false,
+ }))
scheduledPagination.total = data?.total || 0
}
} catch (error) {
@@ -437,7 +500,7 @@
const resetScheduledFilters = () => {
scheduledFilters.taskName = ''
- scheduledFilters.status = ''
+ scheduledFilters.isEnabled = undefined
getScheduledTableData()
}
@@ -476,6 +539,30 @@
getScheduledTableData()
} catch (error) {
// 鐢ㄦ埛鍙栨秷鍒犻櫎
+ }
+}
+
+const handleScheduledEnableBeforeChange = async (row) => {
+ if (row.enableSwitchLoading) {
+ return false
+ }
+ const nextValue = Number(row.isEnabled) === 1 ? 0 : 1
+ row.enableSwitchLoading = true
+ try {
+ const res = await deviceMaintenanceTaskChangeEnable({
+ id: row.id,
+ isEnabled: nextValue,
+ })
+ if (res?.code !== 200) {
+ throw new Error(res?.msg || '鏇存柊澶辫触')
+ }
+ ElMessage.success('鍚敤鐘舵�佸凡鏇存柊')
+ return true
+ } catch (error) {
+ ElMessage.error(error?.message || '鍚敤鐘舵�佹洿鏂板け璐�')
+ return false
+ } finally {
+ row.enableSwitchLoading = false
}
}
@@ -589,10 +676,82 @@
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 openAcceptanceDialog = (row) => {
+ acceptanceModalRef.value.open(row.id, row)
+}
+
+// 鍒锋柊闄勪欢鍒楄〃
+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(() => {
--
Gitblit v1.9.3