From a1faa94fbf85553f22da934a1abc745d89dd8667 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期一, 19 十月 2026 17:23:49 +0800
Subject: [PATCH] fix: 取消设备核查/比对的身份限制与三张设备计划的审批功能

---
 src/views/CNAS/resourceDemand/device/component/equipmentMaintenancePlan.vue |  676 ++++++++++++++++++++++++++-----------------------------
 1 files changed, 317 insertions(+), 359 deletions(-)

diff --git a/src/views/CNAS/resourceDemand/device/component/equipmentMaintenancePlan.vue b/src/views/CNAS/resourceDemand/device/component/equipmentMaintenancePlan.vue
index bce0d25..0c19357 100644
--- a/src/views/CNAS/resourceDemand/device/component/equipmentMaintenancePlan.vue
+++ b/src/views/CNAS/resourceDemand/device/component/equipmentMaintenancePlan.vue
@@ -1,399 +1,332 @@
 <template>
+  <!--  璁惧淇濆吇璁″垝-->
   <div>
-    <div>
-      <div style="margin: 10px 0;text-align: right">
-        <el-button size="small" type="primary" @click="getYearTableDetailData">鍒锋柊</el-button>
-        <el-button size="small" type="primary" @click="handleForm('add')">鏂板</el-button>
+    <div style="margin: 10px 0 14px;">
+      <div class="plan-top">
+        <div class="plan-top-left">
+          <span class="title" style="margin-bottom: 0;">{{ planInfo.planName || (planYear + '骞村害璁惧淇濆吇璁″垝') }}</span>
+          <el-select v-model="planYear" size="small" style="width: 110px; margin-left: 16px;" @change="handleYearChange">
+            <el-option v-for="y in yearOptions" :key="y" :label="y" :value="y"></el-option>
+          </el-select>
+        </div>
+        <div>
+          <el-button size="small" type="primary" @click="loadPlan">鍒锋柊</el-button>
+          <el-button size="small" type="primary" :loading="outLoading" @click="handleDownOne">瀵煎嚭</el-button>
+        </div>
       </div>
-      <div>
-        <el-table ref="yearTable" v-loading="yearTableDetailDataLoading" :data="yearTableDetailData"
- border
-          height="calc(100vh - 18em)" style="width: 100% ;">
-          <!-- 琛ㄦ牸鍒� -->
-          <el-table-column align="center" header-align="center" label="搴忓彿" prop="prop" type="index"
-            width="70"></el-table-column>
-          <el-table-column label="骞翠唤" min-width="80" prop="planYear"></el-table-column>
-          <el-table-column label="缂栧埗浜�" min-width="120" prop="compiler"></el-table-column>
-          <el-table-column label="缂栧埗鏃堕棿" min-width="160" prop="datePreparation"></el-table-column>
-          <el-table-column label="瀹℃牳浜�" min-width="150" prop="audit"></el-table-column>
-          <el-table-column label="瀹℃牳鏃堕棿" min-width="180" prop="auditDate"></el-table-column>
-          <el-table-column label="瀹℃牳鐘舵��" min-width="180" prop="status">
-            <template #default="scope">
-              <el-tag v-if="scope.row.status === 1" type="success">閫� 杩�</el-tag>
-              <el-tag v-if="scope.row.status === 0" type="danger">涓嶉�氳繃</el-tag>
-            </template>
-          </el-table-column>
-          <!-- 鎿嶄綔鎸夐挳 -->
-          <el-table-column align="center" fixed="right" label="鎿嶄綔" min-width="260">
-            <template #default="scope">
-              <el-button :disabled="scope.row.status === 1" size="small" link type="primary"
-                @click="handleForm('edit', scope.row)">缂栬緫</el-button>
-              <el-button size="small" link type="primary" @click="handleForm('view', scope.row)">鏌ョ湅</el-button>
-              <el-button :disabled="scope.row.status === 1" size="small" link type="primary"
-                @click="tellApprove(scope.row.maintenancePlanId)">瀹℃牳閫氱煡</el-button>
-              <el-button :disabled="scope.row.status === 1 || userId != scope.row.auditId" size="small" link type="primary"
-                @click="handleForm('check', scope.row)">瀹℃牳</el-button>
-              <el-button size="small" link type="primary" @click="handleDownOne(scope.row.maintenancePlanId)">瀵煎嚭</el-button>
-              <el-button :disabled="scope.row.status === 1" size="small" link type="danger"
-                @click="deleteFun(scope.row.maintenancePlanId)">鍒犻櫎</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-        <el-pagination :current-page="1" :page-size="pagination1.size" :page-sizes="[10, 20, 30, 50, 100]"
-          :total="pagination1.total" layout="->,total, sizes, prev, pager, next, jumper" background
-          @size-change="handleSizeChange1" @current-change="handleCurrentChange1">
-        </el-pagination>
+      <div class="plan-info-bar">
+        <span>缂栧埗浜猴細{{ planInfo.compiler || '鈥�' }}</span>
+        <span>缂栧埗鏃ユ湡锛歿{ planInfo.datePreparationStr || '鈥�' }}</span>
+        <span v-if="planInfo.status === 1">瀹℃牳鐘舵�侊細<el-tag type="success">閫� 杩�</el-tag></span>
+        <span v-else-if="planInfo.status === 0">瀹℃牳鐘舵�侊細<el-tag type="danger">涓嶉�氳繃</el-tag></span>
+        <span v-if="planInfo.auditRemark">瀹℃牳淇℃伅锛歿{ planInfo.auditRemark }}</span>
+        <span v-if="isAudited && planInfo.audit">瀹℃牳浜猴細{{ planInfo.audit }}</span>
+        <span v-if="isAudited && planInfo.auditDateStr">瀹℃牳鏃堕棿锛歿{ planInfo.auditDateStr }}</span>
       </div>
     </div>
-    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" v-model="applicationForm"
-      title="璁惧淇濆吇璁″垝琛�" width="80%" @close="closeDialog">
-      <div style="display: flex;align-items: center;">
-        <el-button v-if="operationType === 'edit' || operationType === 'add'" size="small" type="primary" @click="addTableRow">娣诲姞</el-button>
-        <span style="width: 60px;margin-left: 10px">骞翠唤锛�</span>
-        <el-date-picker v-model="form.planYear" type="year" value-format="YYYY" clearable size="small" format="YYYY"
-          placeholder="閫夋嫨骞�" :disabled="operationType !== 'edit' && operationType !== 'add'">
-        </el-date-picker>
+    <div class="search">
+      <div>
+        <el-form :model="searchForm" ref="searchForm" size="small" :inline="true">
+          <el-form-item label="璁惧鍚嶇О" prop="deviceName">
+            <el-input v-model="searchForm.deviceName" clearable @keyup.enter="handleQuery"
+              size="small"></el-input>
+          </el-form-item>
+          <el-form-item label="璁惧缂栧彿" prop="deviceNumber">
+            <el-input v-model="searchForm.deviceNumber" @keyup.enter="handleQuery" clearable
+              size="small"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button type="primary" size="small" @click="handleQuery">鏌ヨ</el-button>
+            <el-button size="small" @click="reset">閲嶇疆</el-button>
+          </el-form-item>
+        </el-form>
       </div>
-      <div style="margin: 10px 0">
-        <el-table ref="yearTable" :data="deviceMaintenancePlanDetails" id="templateParamTable" row-key="deviceId"
- border
-          height="560px" style="width: 100% ;">
-          <el-table-column align="center" header-align="center" label="搴忓彿" type="index" width="60"></el-table-column>
-          <el-table-column label="璁惧鍚嶇О" min-width="170" prop="deviceName">
-            <template #default="scope">
-              <el-input v-model="scope.row.deviceName" :disabled="operationType !== 'edit' && operationType !== 'add'" clearable
-                size="small"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="璁惧缂栧彿" min-width="140" prop="deviceNumber">
-            <template #default="scope">
-              <el-input v-model="scope.row.deviceNumber" :disabled="operationType !== 'edit' && operationType !== 'add'" clearable
-                size="small"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="褰掑睘瀹為獙瀹�" min-width="120" prop="storagePoint">
-            <template #default="scope">
-              <el-input v-model="scope.row.storagePoint" :disabled="operationType !== 'edit' && operationType !== 'add'" clearable
-                size="small"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="淇濆吇鍏抽敭閮ㄤ綅" min-width="120" prop="maintenanceSite">
-            <template #default="scope">
-              <el-input v-model="scope.row.maintenanceSite" :disabled="operationType !== 'edit' && operationType !== 'add'" clearable size="small"
-                type="textarea"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="淇濆吇鍐呭" min-width="120" prop="maintenanceContent">
-            <template #default="scope">
-              <el-input v-model="scope.row.maintenanceContent" :disabled="operationType !== 'edit' && operationType !== 'add'" clearable
-                size="small" type="textarea"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="淇濆吇鍛ㄦ湡" min-width="90" prop="maintenanceIntervals">
-            <template #default="scope">
-              <el-input v-model="scope.row.maintenanceIntervals" :disabled="operationType !== 'edit' && operationType !== 'add'" clearable
-                size="small"></el-input>
-            </template>
-          </el-table-column>
-          <el-table-column label="鎿嶄綔" width="80" align="center" v-if="operationType === 'edit' || operationType === 'add'">
-            <template #default="scope">
-              <el-button link type="danger" @click="deleteRow(scope.$index)">鍒犻櫎</el-button>
-            </template>
-          </el-table-column>
-        </el-table>
-      </div>
-      <template #footer><span  class="dialog-footer">
-        <el-button @click="closeDialog">鍙� 娑�</el-button>
-        <el-button v-if="operationType === 'edit' || operationType === 'add'" :loading="submitFormLoading" type="primary" @click="submitForm">纭�
-          璁�</el-button>
-        <el-button v-if="operationType === 'check'" :loading="submitFormLoading" type="primary"
-          @click="checkStatus(0)">涓嶉�氳繃</el-button>
-        <el-button v-if="operationType === 'check'" :loading="submitFormLoading" type="primary"
-          @click="checkStatus(1)">閫�
-          杩�</el-button>
-      </span></template>
-    </el-dialog>
-    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" v-model="addEquipDia" title="娣诲姞璁惧"
-      width="50%">
-      <el-table ref="multipleTable" :data="equipOptions" tooltip-effect="dark" height="500" style="width: 100%"
- border
-        @selection-change="handleSelectionChange">
-        <el-table-column type="selection" width="55"></el-table-column>
-        <el-table-column label="璁惧鍚嶇О" prop="label" width="190"></el-table-column>
-        <el-table-column prop="value" label="璁惧缂栧彿" width="130"></el-table-column>
-        <el-table-column prop="managementNumber" label="褰掑睘瀹為獙瀹�"></el-table-column>
+    </div>
+    <div>
+      <el-table ref="yearTable" v-loading="tableLoading" :data="tableData" border
+        :row-class-name="tableRowClassName" :height="'calc(100vh - 29em)'" style="width: 100%;">
+        <el-table-column align="center" header-align="center" label="搴忓彿" prop="prop" type="index"
+          width="70"></el-table-column>
+        <el-table-column label="璁惧鍚嶇О鍙婂瀷鍙�" min-width="180" show-overflow-tooltip>
+          <template #default="scope">
+            {{ scope.row.deviceName }}{{ scope.row.specificationModel ? ' ' + scope.row.specificationModel : '' }}
+          </template>
+        </el-table-column>
+        <el-table-column label="璁惧缂栧彿" min-width="140" prop="deviceNumber"></el-table-column>
+        <el-table-column label="褰掑睘瀹為獙瀹�" min-width="120" prop="storagePoint"></el-table-column>
+        <el-table-column label="淇濆吇鍏抽敭閮ㄤ綅" min-width="150" prop="maintenanceSite" show-overflow-tooltip></el-table-column>
+        <el-table-column label="淇濆吇鍐呭" min-width="180" prop="maintenanceContent" show-overflow-tooltip></el-table-column>
+        <el-table-column label="淇濆吇鍛ㄦ湡" min-width="100" prop="maintenanceIntervals"></el-table-column>
+        <el-table-column label="璁″垝淇濆吇鏃堕棿" min-width="130" prop="maintenanceDate"
+          :formatter="formatDateCell"></el-table-column>
+        <el-table-column align="center" fixed="right" label="鎿嶄綔" min-width="160">
+          <template #default="scope">
+            <el-button size="small" link type="primary"
+              @click="handleForm('edit', scope.row)">缂栬緫</el-button>
+            <el-button size="small" link type="primary" @click="handleForm('view', scope.row)">鏌ョ湅</el-button>
+            <el-button size="small" link type="danger"
+              @click="deleteRow(scope.row)">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
       </el-table>
-      <template #footer><span  class="dialog-footer">
-        <el-button @click="addEquipDia = false">鍙� 娑�</el-button>
-        <el-button v-if="operationType === 'edit' || operationType === 'add'" :loading="submitFormLoading" type="primary"
-          @click="changeMachineName">纭�
-          璁�</el-button>
-      </span></template>
-    </el-dialog>
-    <el-dialog v-model="notificationDia" title="鎻愪氦瀹℃牳" width="30%" @close="closeNotificationDia">
-      <span style="margin-top: 10px;display: inline-block">
-        璇烽�夋嫨瀹℃牳浜猴細
-        <el-select v-model="auditId" clearable filterable size="small" style="width: 90%;">
-          <el-option v-for="item in responsibleOptions" :key="item.id" :label="item.name" :value="item.id">
-          </el-option>
-        </el-select>
-      </span>
-      <template #footer><span  class="dialog-footer">
-        <el-button :loading="notificationLoading" @click="closeNotificationDia">鍙� 娑�</el-button>
-        <el-button :loading="notificationLoading" type="primary" @click="notification">鎻� 浜�</el-button>
+      <el-pagination :current-page="pagination1.current" :page-size="pagination1.size"
+        :page-sizes="[10, 20, 30, 50, 100]" background :total="pagination1.total"
+        layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange1"
+        @current-change="handleCurrentChange1">
+      </el-pagination>
+    </div>
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" v-model="dialogVisible"
+      title="璁惧淇濆吇璁″垝鏄庣粏" width="60%" @close="resetForm">
+      <el-form ref="modelForm" :model="form" :rules="rules" label-width="130px">
+        <el-row>
+          <el-col :span="12">
+            <el-form-item label="璁惧鍚嶇О锛�">
+              <el-input v-model="form.deviceName" disabled size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璁惧缂栧彿锛�">
+              <el-input v-model="form.deviceNumber" disabled size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="褰掑睘瀹為獙瀹わ細">
+              <el-input v-model="form.storagePoint" disabled size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="淇濆吇鍛ㄦ湡锛�">
+              <el-input v-model="form.maintenanceIntervals" :disabled="operationType === 'view'" clearable
+                size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="淇濆吇鍏抽敭閮ㄤ綅锛�">
+              <el-input v-model="form.maintenanceSite" :disabled="operationType === 'view'" clearable size="small"
+                type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="淇濆吇鍐呭锛�">
+              <el-input v-model="form.maintenanceContent" :disabled="operationType === 'view'" clearable size="small"
+                type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璁″垝淇濆吇鏃堕棿锛�" prop="maintenanceDate">
+              <el-date-picker v-model="form.maintenanceDate" :disabled="operationType === 'view'" clearable
+                format="YYYY-MM-DD" placeholder="閫夋嫨鏃ユ湡" size="small" style="width:100%" type="date"
+                value-format="YYYY-MM-DD"></el-date-picker>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <template #footer><span class="dialog-footer">
+        <el-button @click="resetForm">鍙� 娑�</el-button>
+        <el-button :loading="submitFormLoading" type="primary" @click="submitForm"
+          v-if="operationType !== 'view'">纭� 璁�</el-button>
       </span></template>
     </el-dialog>
   </div>
 </template>
 
 <script>
-import Sortable from "sortablejs";
 import {
   selectDeviceMaintenancePlanByPage,
-  submitReviewMaintenancePlanStatus,
-  getMaintenancePlanDetail,
-  addMaintenancePlan,
-  updateMaintenancePlan,
+  getMaintenancePlanByYear,
+  pageMaintenancePlanDetail,
+  updateMaintenancePlanDetail,
+  deleteMaintenancePlanDetail,
   exportDeviceMaintenancePlan,
-  deleteMaintenancePlan,
-  deviceScopeSearch,
 } from '@/api/cnas/resourceDemand/device.js'
-import { selectUserCondition } from "@/api/business/inspectionTask";
-import { mapGetters } from "@/utils/store-compat";
+import { formatDateOnly } from './dateFormat'
+import { saveBlobOrShowError } from '@/utils/saveBlob'
 export default {
   name: "equipment-maintenance-plan",
-  // import 寮曞叆鐨勭粍浠堕渶瑕佹敞鍏ュ埌瀵硅薄涓墠鑳戒娇鐢�
-  components: {},
   props: {
     clickNodeVal: {
       type: Object,
       default: () => {
+        return {};
       }
     }
   },
   data() {
-    // 杩欓噷瀛樻斁鏁版嵁
     return {
+      planYear: '',
+      yearOptions: [],
+      planInfo: {},
+      searchForm: {
+        deviceName: '',
+        deviceNumber: '',
+      },
+      tableData: [],
+      tableLoading: false,
       pagination1: {
         size: 10,
         current: 1,
         total: 0,
       },
-      yearTableDetailDataLoading: false,
-      yearTableDetailData: [],
-      deviceMaintenancePlanDetails: [],
-      selectionRows: [],
-      deviceIds: [],
-      applicationForm: false,
-      submitFormLoading: false,
+      dialogVisible: false,
       operationType: '',
-      equipOptions: [],
-      form: {
-        planYear: '',
-        deviceMaintenancePlanDetails: []
+      form: {},
+      rules: {
+        maintenanceDate: [{ required: true, message: '璇烽�夋嫨璁″垝淇濆吇鏃堕棿', trigger: 'change' }],
       },
-      addEquipDia: false,
-      responsibleOptions: [],
-      notificationDia: false,
-      notificationLoading: false,
-      auditId: '',
-      maintenancePlanId: ''
+      submitFormLoading: false,
+      outLoading: false,
     }
   },
   mounted() {
-    this.getYearTableDetailData()
+    this.loadYearOptions()
   },
-  // 鏂规硶闆嗗悎
   methods: {
-    // 鏌ヨ
-    getYearTableDetailData() {
-      this.yearTableDetailDataLoading = true
-      selectDeviceMaintenancePlanByPage({
-        current: this.pagination1.current,
-        size: this.pagination1.size,
-      }).then(res => {
-        if (res.code == 200) {
-          this.yearTableDetailData = res.data.records
-          this.pagination1.total = res.data.total
+    // 骞翠唤涓嬫媺閫夐」锛氬凡鏈夎鍒掑勾浠� + 褰撳墠骞翠唤
+    loadYearOptions() {
+      const currentYear = String(new Date().getFullYear())
+      const finish = (years) => {
+        if (years.indexOf(currentYear) === -1) {
+          years.push(currentYear)
         }
-        this.yearTableDetailDataLoading = false
-      }).catch(err => {
-        this.yearTableDetailDataLoading = false
+        this.yearOptions = [...new Set(years)].sort((a, b) => b.localeCompare(a))
+        this.planYear = currentYear
+        this.loadPlan()
+      }
+      selectDeviceMaintenancePlanByPage({
+        current: 1,
+        size: 99,
+      }).then(res => {
+        let years = []
+        if (res.code == 200) {
+          years = (res.data.records || []).map(r => r.planYear).filter(Boolean)
+        }
+        finish(years)
+      }).catch(() => {
+        finish([])
       })
     },
-    // 鎵撳紑鎻愪氦鎵瑰噯寮规
-    tellApprove(maintenancePlanId) {
-      this.getUserList()
-      this.notificationDia = true
-      this.maintenancePlanId = maintenancePlanId
+    // 鍒囨崲骞翠唤
+    handleYearChange() {
+      this.pagination1.current = 1
+      this.loadPlan()
     },
-    // 鍏抽棴鎻愪氦鎵瑰噯寮规
-    closeNotificationDia() {
-      this.notificationDia = false
-      this.auditId = ''
+    // 鏌ヨ骞翠唤璁″垝锛堜笉瀛樺湪鑷姩鍒涘缓骞惰ˉ鍏ㄥ埌鐐规槑缁嗭級锛岄殢鍚庡埛鏂版槑缁�
+    loadPlan() {
+      getMaintenancePlanByYear({ planYear: this.planYear }).then(res => {
+        if (res.code == 200) {
+          this.planInfo = res.data || {}
+        }
+        this.getTableList()
+      }).catch(() => {
+        this.planInfo = {}
+        this.tableData = []
+        this.pagination1.total = 0
+        this.tableLoading = false
+      })
     },
-    // 鎻愪氦鎵瑰噯閫氱煡
-    notification() {
-      if (!this.auditId) {
-        this.$message.warning('璇烽�夋嫨瀹℃牳浜�')
+    // 鏌ヨ鏉′欢鍙樺寲鍚庝粠绗竴椤靛紑濮嬫煡
+    handleQuery() {
+      this.pagination1.current = 1
+      this.getTableList()
+    },
+    // 鏄庣粏-鏌ヨ
+    getTableList() {
+      if (!this.planInfo.maintenancePlanId) {
         return
       }
-      this.notificationLoading = true
-      submitReviewMaintenancePlanStatus({
-        auditId: this.auditId,
-        maintenancePlanId: this.maintenancePlanId,
+      this.tableLoading = true
+      pageMaintenancePlanDetail({
+        current: this.pagination1.current,
+        size: this.pagination1.size,
+        planId: this.planInfo.maintenancePlanId,
+        deviceName: this.searchForm.deviceName,
+        deviceNumber: this.searchForm.deviceNumber,
       }).then(res => {
-        this.notificationLoading = false
         if (res.code == 200) {
-          this.closeNotificationDia()
-          this.getYearTableDetailData()
+          this.tableData = res.data.records
+          this.pagination1.total = res.data.total
         }
-      }).catch(err => {
-        this.notificationLoading = false
+        this.tableLoading = false
+      }).catch(() => {
+        this.tableLoading = false
       })
     },
-    // 鎵撳紑鏂板鍜岀紪杈戝脊妗�
-    handleForm(type, row) {
-      this.operationType = type
-      this.applicationForm = true
-      this.form = {
-        planYear: '',
-        deviceMaintenancePlanDetails: [],
+    // 鍒扮偣闇�淇濆吇鐨勮鏍囩孩
+    formatDateCell(row, column, cellValue) {
+      return formatDateOnly(cellValue)
+    },
+    tableRowClassName({ row }) {
+      return row.redFlag === 1 ? 'red-row' : ''
+    },
+    reset() {
+      this.searchForm = {
+        deviceName: '',
+        deviceNumber: '',
       }
-      this.deviceMaintenancePlanDetails = []
-      if (row) {
-        this.maintenancePlanId = row.maintenancePlanId
-        getMaintenancePlanDetail({ maintenancePlanId: this.maintenancePlanId }).then(res => {
-          if (res.code === 200) {
-            this.form = res.data
-            this.deviceMaintenancePlanDetails = this.form.deviceMaintenancePlanDetails
-          }
-        }).catch(error => {
-          console.error(error)
-        })
-      }
-      this.getEquipOptions()
-    },
-    // 娣诲姞璁惧
-    addTableRow() {
-      this.addEquipDia = true
-      this.getEquipOptions()
-    },
-    handleSelectionChange(selection) {
-      this.selectionRows = selection
-    },
-    // 璧嬪�间华鍣ㄧ紪鍙�
-    changeMachineName() {
-      this.deviceMaintenancePlanDetails = []
-      this.selectionRows.map(val => {
-        this.deviceMaintenancePlanDetails.push({ deviceId: val.id, deviceName: val.label, deviceNumber: val.value, storagePoint: val.storagePoint })
-      })
-      this.addEquipDia = false
-      this.rowDrop()
-    },
-    rowDrop() {
-      const that = this
-      const tbody = document.querySelector(
-        '#templateParamTable .el-table__body-wrapper tbody'
-      )
-      if (!this.sortTable) {
-        this.sortTable = Sortable.create(tbody, {
-          animation: 200, //鍔ㄧ敾鏃堕暱
-          handle: ".el-table__row", //鍙嫋鎷藉尯鍩焎lass
-          //鎷栨嫿涓簨浠�
-          onMove: ({ dragged, related }) => {
-            const oldRow = that.deviceMaintenancePlanDetails[dragged.rowIndex] //鏃т綅缃暟鎹�
-            const newRow = that.deviceMaintenancePlanDetails[related.rowIndex] //琚嫋鎷界殑鏂版暟鎹�
-          },
-          //鎷栨嫿缁撴潫浜嬩欢
-          onEnd: evt => {
-            const curRow = that.deviceMaintenancePlanDetails.splice(evt.oldIndex, 1)[0];
-            that.deviceMaintenancePlanDetails.splice(evt.newIndex, 0, curRow);
-          }
-        })
-      }
-    },
-    // 鍒犻櫎琛ㄦ牸琛�
-    deleteRow(index) {
-      this.deviceMaintenancePlanDetails.splice(index, 1)
-    },
-    // 鎻愪氦鏂板鍜屼慨鏀�
-    submitForm() {
-      this.form.deviceMaintenancePlanDetails = this.HaveJson(this.deviceMaintenancePlanDetails)
-      this.submitFormLoading = true
-      if (this.operationType === 'add') {
-        addMaintenancePlan(this.form).then(res => {
-          if (res.code == 200) {
-            this.$message.success('鏂板鎴愬姛')
-            this.applicationForm = false
-            this.getYearTableDetailData()
-          }
-          this.submitFormLoading = false
-        }).catch(err => {
-          this.submitFormLoading = false
-        })
-      } else {
-        updateMaintenancePlan(this.form).then(res => {
-          if (res.code == 200) {
-            this.$message.success('淇敼鎴愬姛')
-            this.applicationForm = false
-            this.getYearTableDetailData()
-          }
-          this.submitFormLoading = false
-        }).catch(err => {
-          this.submitFormLoading = false
-        })
-      }
-    },
-    // 鎻愪氦瀹℃牳
-    checkStatus(status) {
-      const params = {
-        status: status,
-        maintenancePlanId: this.maintenancePlanId
-      }
-      addMaintenancePlan(params).then(res => {
-        if (res.code == 200) {
-          this.$message.success('瀹℃牳鎴愬姛')
-          this.applicationForm = false
-          this.getYearTableDetailData()
-        }
-        this.submitFormLoading = false
-      }).catch(err => {
-        this.submitFormLoading = false
-      })
-    },
-    closeDialog() {
-      this.applicationForm = false
-      this.getYearTableDetailData()
+      this.pagination1.current = 1
+      this.getTableList()
     },
     // 鍒嗛〉
     handleSizeChange1(val) {
       this.pagination1.size = val
-      this.getYearTableDetailData()
+      this.getTableList()
     },
     // 鍒嗛〉
     handleCurrentChange1(val) {
       this.pagination1.current = val
-      this.getYearTableDetailData()
+      this.getTableList()
     },
-    handleDownOne(id) {
-      this.outLoading = true
-      exportDeviceMaintenancePlan({ maintenancePlanId: id }).then(res => {
-        this.outLoading = false
-        const blob = new Blob([res], { type: 'application/octet-stream' });
-        this.$download.saveAs(blob, '璁惧缁存姢淇濆吇璁板綍.doc')
+    // 鎵撳紑鏄庣粏寮规
+    handleForm(type, row) {
+      this.operationType = type
+      this.form = this.HaveJson(row)
+      this.dialogVisible = true
+      this.$nextTick(() => {
+        if (this.$refs.modelForm) {
+          this.$refs.modelForm.clearValidate()
+        }
       })
     },
-    // 鍒犻櫎
-    deleteFun(id) {
-      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+    // 鎻愪氦琛ㄥ崟锛堝彧鍥炰紶鏄庣粏琛ㄥ瓧娈碉級
+    submitForm() {
+      this.$refs.modelForm.validate(valid => {
+        if (valid) {
+          this.submitFormLoading = true
+          const payload = {
+            maintenancePlanDetailId: this.form.maintenancePlanDetailId,
+            maintenancePlanId: this.form.maintenancePlanId,
+            deviceId: this.form.deviceId,
+            maintenanceSite: this.form.maintenanceSite,
+            maintenanceContent: this.form.maintenanceContent,
+            maintenanceIntervals: this.form.maintenanceIntervals,
+            maintenanceDate: this.form.maintenanceDate,
+          }
+          updateMaintenancePlanDetail(payload).then(res => {
+            if (res.code == 200) {
+              this.$message.success('淇敼鎴愬姛')
+              this.dialogVisible = false
+              this.getTableList()
+            }
+            this.submitFormLoading = false
+          }).catch(() => {
+            this.submitFormLoading = false
+          })
+        }
+      })
+    },
+    resetForm() {
+      this.dialogVisible = false
+    },
+    // 鏄庣粏-鍒犻櫎
+    deleteRow(row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ潯鏄庣粏, 鏄惁缁х画?', '鎻愮ず', {
         confirmButtonText: '纭畾',
         cancelButtonText: '鍙栨秷',
         type: 'warning'
       }).then(() => {
-        deleteMaintenancePlan({ maintenancePlanId: id }).then(res => {
+        deleteMaintenancePlanDetail({ maintenancePlanDetailId: row.maintenancePlanDetailId }).then(() => {
           this.$message.success('鍒犻櫎鎴愬姛锛�');
-          this.getYearTableDetailData();
+          this.getTableList()
         });
       }).catch(() => {
         this.$message({
@@ -402,54 +335,79 @@
         });
       });
     },
-    // 鑾峰彇鎵�鏈夎澶�
-    getEquipOptions() {
-      this.equipOptions = []
-      deviceScopeSearch({ status: 0 }).then(res => {
-        if (res.code === 200 && res.data) {
-          this.equipOptions = res.data.map(m => {
-            m.value = m.managementNumber
-            m.label = m.deviceName
-            return m
-          })
-        }
-      }).catch(error => {
-        console.error(error)
+    // 瀵煎嚭
+    handleDownOne() {
+      this.outLoading = true
+      exportDeviceMaintenancePlan({ maintenancePlanId: this.planInfo.maintenancePlanId }).then(res => {
+        this.outLoading = false
+        saveBlobOrShowError(res, '璁惧淇濆吇璁″垝琛�.docx', 'application/msword')
+      }).catch(() => {
+        this.outLoading = false
       })
-    },
-    // 鑾峰彇璐熻矗浜轰俊鎭帴鍙�
-    getUserList() {
-      selectUserCondition().then(res => {
-        if (res.code == 200) {
-          this.responsibleOptions = res.data
-        }
-      });
     }
   },
-  watch: {
-    // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
-    clickNodeVal(newVal) {
-      if (newVal.value) {
-        this.getYearTableDetailData();
-      }
-    },
-  },
   computed: {
-    ...mapGetters(["userId"]),
+    // 鏄惁宸插畬鎴愬鏍革紙閫氳繃/涓嶉�氳繃锛�
+    isAudited() {
+      return this.planInfo.status === 0 || this.planInfo.status === 1;
+    },
   },
 }
 </script>
 
 <style scoped>
 .title {
+  position: relative;
+  font-size: 16px;
+  color: var(--lims-text);
+  font-weight: 400;
+  padding-left: 10px;
+  margin-bottom: 10px;
+}
+
+.title::before {
+  position: absolute;
+  left: 0;
+  top: 4px;
+  content: '';
+  width: 4px;
+  height: 16px;
+  background-color: var(--el-color-primary);
+  border-radius: 2px;
+}
+
+.plan-top {
   display: flex;
+  align-items: center;
   justify-content: space-between;
+  flex-wrap: wrap;
+}
+
+.plan-top-left {
+  display: flex;
   align-items: center;
 }
 
-.title-search {
+.plan-info-bar {
   display: flex;
   align-items: center;
-  margin: 10px 0;
+  flex-wrap: wrap;
+  gap: 32px;
+  background: #f5f7fa;
+  border-radius: 4px;
+  padding: 10px 16px;
+  margin-top: 14px;
+  font-size: 14px;
+  color: #606266;
+}
+
+.search {
+  display: flex;
+  justify-content: space-between;
+  margin-bottom: 10px;
+}
+
+:deep(.red-row td) {
+  background: #ffcccc !important;
 }
 </style>

--
Gitblit v1.9.3