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