From 237f95b05e0f122ee9ec7beaf82ba366a8b220ed Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期六, 15 二月 2025 14:50:59 +0800
Subject: [PATCH] 修改设备模块bug

---
 src/components/do/a6-device/maintenance.vue |  353 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 351 insertions(+), 2 deletions(-)

diff --git a/src/components/do/a6-device/maintenance.vue b/src/components/do/a6-device/maintenance.vue
index 8a8a962..51e37f6 100644
--- a/src/components/do/a6-device/maintenance.vue
+++ b/src/components/do/a6-device/maintenance.vue
@@ -1,13 +1,362 @@
+<!-- 璁惧缁存姢 -->
 <template>
-  <div>璁惧缁存姢</div>
+  <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: 30px;">
+        <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="handleDownOne">瀵煎嚭</el-button>
+      </div>
+    </div>
+    <div class="tables" style="margin-top: 10px;">
+      <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="110">
+          <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: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="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>
 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
+      this.$axios.get(this.$api.deviceCheck.exportMaintenanceRecord + '?deviceId=' + this.clickNodeVal.value, {
+        responseType: "blob"
+      }).then(res => {
+        this.outLoading = false
+        const blob = new Blob([res], { type: 'application/octet-stream' });
+        //灏咮lob 瀵硅薄杞崲鎴愬瓧绗︿覆
+        let reader = new FileReader();
+        reader.readAsText(blob, 'utf-8');
+        reader.onload = () => {
+          try {
+            let result = JSON.parse(reader.result);
+            if (result.message) {
+              this.$message.error(result.message);
+            } else {
+              const url = URL.createObjectURL(blob);
+              const link = document.createElement('a');
+              link.href = url;
+              link.download = '璁惧缁存姢淇濆吇璁板綍.doc';
+              link.click();
+              this.$message.success('瀵煎嚭鎴愬姛')
+            }
+          } catch (err) {
+            console.log(err);
+            const url = URL.createObjectURL(blob);
+            const link = document.createElement('a');
+            link.href = url;
+            link.download = '璁惧缁存姢淇濆吇璁板綍.doc';
+            link.click();
+            this.$message.success('瀵煎嚭鎴愬姛')
+          }
+        }
+      })
+    },
+    //鎿嶄綔璇︽儏鍒犻櫎
+    handleDeleteClick(index, row) {
+      this.$confirm('姝ゆ搷浣滃皢姘镐箙鍒犻櫎璇ユ枃浠�, 鏄惁缁х画?', '鎻愮ず', {
+        confirmButtonText: '纭畾',
+        cancelButtonText: '鍙栨秷',
+        type: 'warning'
+      }).then(() => {
+        this.$axios.delete(this.$api.deviceCheck.deviceMaintenanceDelete + '/' + row.id).then(res => {
+        })
+        this.MaintainParam.splice(index, 1);
+        this.$message({
+          type: 'success',
+          message: '鍒犻櫎鎴愬姛!'
+        });
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '宸插彇娑堝垹闄�'
+        });
+      });
+    },
+    //鐐瑰嚮鍚庡彲缂栬緫
+    add() {
+      this.$axios.get(this.$api.deviceScope.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;
+          this.$axios.post(this.$api.deviceCheck.deviceMaintainAdd, this.formData).then(res => {
+            if (res.code == 200) {
+              this.$message.success('娣诲姞鎴愬姛');
+              this.getAllMessage(this.clickNodeVal.value)
+            }
+          })
+          this.MaintainParam.push(this.formData)
+          this.dialogVisible = false;
+          this.formData = {}; //娓呯┖琛ㄥ崟
+        }
+      })
+    },
+    resetSearch() {
+      this.search = {
+        size: 20,
+        current: 1,
+        total: 0,
+        deviceNumber: '',
+      }
+      this.getAllMessage(this.clickNodeVal.value);
+    },
+    //鑾峰彇琛ㄥ崟璁惧缁存姢淇℃伅
+    getAllMessage(deviceId) {
+      this.$axios.get(this.$api.deviceCheck.getDeviceMaintenancePage + "?deviceId=" + deviceId + "&size=" + this.search.size + "&current=" + this.search.current + "&deviceNumber=" + this.search.deviceNumber).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