From 952a20f1c005d80e9bf881287c40e6f4e4266a0b Mon Sep 17 00:00:00 2001
From: lxp <1928192722@qq.com>
Date: 星期三, 12 三月 2025 15:34:52 +0800
Subject: [PATCH] Merge branch 'dev' of http://114.132.189.42:9002/r/center-lims-before-ruoyi into dev

---
 src/views/CNAS/resourceDemand/device/component/maintenance.vue |  345 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 345 insertions(+), 0 deletions(-)

diff --git a/src/views/CNAS/resourceDemand/device/component/maintenance.vue b/src/views/CNAS/resourceDemand/device/component/maintenance.vue
new file mode 100644
index 0000000..c875750
--- /dev/null
+++ b/src/views/CNAS/resourceDemand/device/component/maintenance.vue
@@ -0,0 +1,345 @@
+<!-- 璁惧缁存姢 -->
+<template>
+  <div>
+    <div class="search">
+      <div class="search_thing">
+        <div class="search_label">娴佺▼缂栧彿锛�</div>
+        <div class="search_input"><el-input v-model="search.deviceNumber" clearable placeholder="璇疯緭鍏�" size="small"
+                                            @keyup.enter.native="getAllMessage(clickNodeVal.value)"></el-input></div>
+      </div>
+      <div class="search_thing" style="padding-left: 20px;">
+        <el-button size="small" @click="resetSearch">閲� 缃�</el-button>
+        <el-button size="small" type="primary" @click="getAllMessage(clickNodeVal.value)">鏌� 璇�</el-button>
+      </div>
+      <div class="btns">
+        <el-button size="small" type="primary" @click="dialogVisible = true; add()">娣诲姞缁存姢璁板綍</el-button>
+        <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">瀵煎嚭</el-button>
+      </div>
+    </div>
+    <div class="tables" style="margin-top: 16px;">
+      <el-table ref="table" :data="MaintainParam" height="calc(100vh - 20em)">
+        <el-table-column label="搴忓彿" type="index" width="120">
+          <template v-slot="scope">
+            <span>{{ (search.current - 1) * search.size + scope.$index + 1 }}</span>
+          </template>
+        </el-table-column>
+        <el-table-column label="娴佺▼缂栧彿" min-width="180" prop="deviceNumber" />
+        <el-table-column label="璁惧鍚嶇О" min-width="150" prop="deviceName" />
+        <el-table-column label="绠$悊缂栧彿" min-width="150" prop="managementNumber" />
+        <el-table-column label="缁存姢鍐呭" min-width="150" prop="content" />
+        <el-table-column label="缁存姢鏃堕棿" min-width="150" prop="date" />
+        <el-table-column label="鎻愪氦浜�" min-width="150" prop="name" />
+        <el-table-column label="鎻愪氦鏃ユ湡" min-width="150" prop="date">
+        </el-table-column>
+        <el-table-column fixed="right" label="鎿嶄綔" width="150">
+          <template slot-scope="scope">
+            <el-button size="small" type="text" @click="handleViewClick(scope.row)">鏌ョ湅</el-button>
+            <el-button size="small" type="text" @click="handleDeleteClick(scope.$index, scope.row)">鍒犻櫎</el-button>
+          </template>
+        </el-table-column>
+      </el-table>
+      <el-pagination :current-page="1" :page-size="search.size" :page-sizes="[10, 20, 30, 50, 100]"
+                     :total="search.total" layout="->,total, sizes, prev, pager, next, jumper" @size-change="handleSizeChange"
+                     @current-change="handleCurrentChange">
+      </el-pagination>
+    </div>
+    <!-- 鏂板缓缁存姢 -->
+    <el-dialog :close-on-click-modal="false" :close-on-press-escape="false" :visible.sync="dialogVisible"
+               title="娣诲姞缁存姢璁板綍"
+               top="5vh" width="60%">
+      <el-form ref="form" :model="formData" label-width="130px">
+        <el-row>
+          <el-col :span="24">
+            <el-form-item label="娴佺▼缂栧彿:" prop="deviceNumber">
+              <el-input v-model="formData.deviceNumber" clearable disabled size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="璁惧鍚嶇О:" prop="deviceName">
+              <el-input v-model="formData.deviceName" clearable disabled placeholder="璇疯緭鍏�" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item label="绠$悊缂栧彿:" prop="managementNumber">
+              <el-input v-model="formData.managementNumber" clearable disabled placeholder="璇疯緭鍏�"
+                        size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ョ淮鎶ゅ唴瀹�', trigger: 'blur' }]" label="缁存姢鍐呭:"
+                          prop="content">
+              <el-input v-model="formData.content" placeholder="璇疯緭鍏�" size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇烽�夋嫨缁存姢鏃堕棿', trigger: 'blur' }]" label="缁存姢鏃堕棿:" prop="date">
+              <el-date-picker v-model="formData.date" 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-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇烽�夋嫨缁存姢绫诲瀷', trigger: 'blur' }]" label="缁存姢绫诲瀷:"
+                          prop="maintenanceType">
+              <el-radio-group v-model="formData.maintenanceType" :disabled="!this.editMode">
+                <el-radio :label="0">浣跨敤鍓嶅悗缁存姢</el-radio>
+                <el-radio :label="1">璁″垝涓淮鎶�</el-radio>
+              </el-radio-group>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇烽�夋嫨涓嬫缁存姢鏃堕棿', trigger: 'blur' }]" label="涓嬫缁存姢鏃堕棿:"
+                          prop="nextDate">
+              <el-date-picker
+                  v-model="formData.nextDate"
+                  :picker-options="{ disabledDate: this.disabledDate }"
+                  format="yyyy-MM-dd"
+                  placeholder="閫夋嫨鏃ユ湡" size="small"
+                  style="width:90%"
+                  type="date"
+                  value-format="yyyy-MM-dd">
+              </el-date-picker>
+            </el-form-item>
+          </el-col>
+          <el-col :span="12">
+            <el-form-item :rules="[{ required: true, message: '璇疯緭鍏ョ淮鎶や汉', trigger: 'blur' }]" label="缁存姢浜�:" prop="name">
+              <el-input v-model="formData.name" clearable placeholder="璇疯緭鍏�" size="small"></el-input>
+            </el-form-item>
+          </el-col>
+          <el-col :span="24">
+            <el-form-item label="澶囨敞:">
+              <el-input v-model="formData.comments" placeholder="璇疯緭鍏�" size="small" type="textarea"></el-input>
+            </el-form-item>
+          </el-col>
+        </el-row>
+      </el-form>
+      <span slot="footer" class="dialog-footer">
+        <el-button v-if="editMode" @click="dialogVisible = false">鍙� 娑�</el-button>
+        <el-button v-if="editMode" type="primary" @click="addRecord">纭� 瀹�</el-button>
+      </span>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import {
+  exportMaintenanceRecord,
+  deleteDeviceMaintenance,
+  selectDeviceByCode,
+  addDeviceMaintenance,
+  getDeviceMaintenancePage, deviceMaintenanceExport,
+} from '@/api/cnas/resourceDemand/device.js'
+export default {
+  props: {
+    clickNodeVal: {
+      type: Object,
+      default: () => {
+        return {};
+      }
+    }
+  },
+  data() {
+    return {
+      search: {
+        size: 20,
+        current: 1,
+        total: 0,
+        deviceNumber: ''
+      },
+      editMode: false,
+      dialogVisible: false,
+      //琛ㄥ崟缁存姢鍐呭
+      formData: {},
+      //琛ㄥご鏄剧ず
+      MaintainParam: [],
+      outLoading: false
+    }
+  },
+  mounted() {
+    this.getAllMessage(this.clickNodeVal.value)
+  },
+  methods: {
+    //涓嬫缁存姢鏃ユ湡:绂佺敤鍦ㄧ淮鎶ゆ棩鏈熷墠鐨勬棩鏈�
+    disabledDate(time) {
+      let selectDate = this.formData.date
+      if (selectDate) {
+        let oldDate = new Date(selectDate)
+        return time <= oldDate.getTime()
+      }
+      return false
+    },
+    handleSizeChange(val) {
+      this.search.size = val
+      this.getAllMessage(this.clickNodeVal.value)
+    },
+    handleCurrentChange(val) {
+      this.search.current = val
+      this.getAllMessage(this.clickNodeVal.value)
+    },
+    //鎿嶄綔璇︽儏鏌ョ湅
+    handleViewClick(row) {
+      this.editMode = false;
+      this.dialogVisible = true;
+      this.formData = row;
+    },
+    // 瀵煎嚭
+    handleDownOne() {
+      this.outLoading = true
+      deviceMaintenanceExport({ deviceId: this.clickNodeVal.value }).then(res => {
+        this.outLoading = false
+        const blob = new Blob([res], { type: 'application/octet-stream' });
+        this.$download.saveAs(blob, '璁惧缁存姢.xlsx')
+      })
+    },
+    //鎿嶄綔璇︽儏鍒犻櫎
+    handleDeleteClick(index, row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        deleteDeviceMaintenance({ id: row.id }).then(res => {
+          this.getAllMessage(this.clickNodeVal.value)
+          this.$message({
+            type: 'success',
+            message: '鍒犻櫎鎴愬姛!'
+          });
+        })
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    //鐐瑰嚮鍚庡彲缂栬緫
+    add() {
+      selectDeviceByCode({ id: this.clickNodeVal.value }).then(res => {
+        this.formData.deviceName = res.data.deviceName
+        this.formData.managementNumber = res.data.managementNumber
+        this.$nextTick(() => {
+          this.$refs['form'].clearValidate()
+        })
+      });
+      this.editMode = true;
+    },
+    //娣诲姞缁存姢璁板綍
+    addRecord() {
+      this.$refs['form'].validate((valid) => {
+        if (valid) {
+          this.formData.deviceId = this.clickNodeVal.value;
+          addDeviceMaintenance(this.formData).then(res => {
+            if (res.code == 200) {
+              this.$message.success('娣诲姞鎴愬姛');
+              this.getAllMessage(this.clickNodeVal.value)
+              this.dialogVisible = false;
+              this.formData = {}; //娓呯┖琛ㄥ崟
+            }
+          })
+          // this.MaintainParam.push(this.formData)
+        }
+      })
+    },
+    resetSearch() {
+      this.search = {
+        size: 20,
+        current: 1,
+        total: 0,
+        deviceNumber: '',
+      }
+      this.getAllMessage(this.clickNodeVal.value);
+    },
+    //鑾峰彇琛ㄥ崟璁惧缁存姢淇℃伅
+    getAllMessage(deviceId) {
+      getDeviceMaintenancePage({
+        deviceId,
+        ...this.search
+      }).then(res => {
+        if (res.code == 200) {
+          this.MaintainParam = res.data.records
+          this.search.total = res.data.total
+        }
+      })
+    },
+  },
+  watch: {
+    // 鐩戝惉鐐瑰嚮el-tree鐨勬暟鎹紝杩涜鏁版嵁鍒锋柊
+    clickNodeVal(newVal) {
+      if (newVal.value) {
+        this.getAllMessage(newVal.value)
+      }
+    },
+    dialogVisible(newVal) {
+      if (newVal === false) {
+        this.formData = {}
+        this.$refs['form'].clearValidate()
+      }
+    }
+  }
+}
+</script>
+
+<style scoped>
+h4 {
+  font-weight: 400;
+  font-size: 16px;
+  display: flex;
+  justify-content: space-between;
+  margin: 10px 0;
+}
+
+h4 .line {
+  display: inline-block;
+  width: 3px;
+  height: 16px;
+  background: #3A7BFA;
+  margin-right: 4px;
+}
+
+.tables {
+  width: 100%;
+  height: calc(100vh - 17em);
+}
+
+.search {
+  background-color: #fff;
+  display: flex;
+  align-items: center;
+  position: relative;
+  margin-top: 10px;
+}
+
+.search_thing {
+  display: flex;
+  align-items: center;
+  height: 40px;
+}
+
+.search_label {
+  width: 80px;
+  font-size: 14px;
+  text-align: right;
+}
+
+.search_input {
+  width: 73%;
+}
+
+.btns {
+  position: absolute;
+  right: 0px;
+  top: 50%;
+  transform: translate(0, -50%);
+}
+
+.btns_thing {
+  position: absolute;
+  right: 230px;
+  top: 50%;
+  transform: translate(0, -50%);
+}
+
+.form .search_label {
+  width: 120px;
+}
+</style>

--
Gitblit v1.9.3