From efad6058c9c9ee6ba754dc9cc61c8d744cd199b8 Mon Sep 17 00:00:00 2001
From: licp <lichunping@guanfang.com.cn>
Date: 星期一, 06 一月 2025 10:30:31 +0800
Subject: [PATCH] 完成设备模块搬迁

---
 src/components/do/a6-device/maintenance.vue |  494 ++++++++++++++++++++++++++++++++++--------------------
 1 files changed, 309 insertions(+), 185 deletions(-)

diff --git a/src/components/do/a6-device/maintenance.vue b/src/components/do/a6-device/maintenance.vue
index 2f3b5ac..51e37f6 100644
--- a/src/components/do/a6-device/maintenance.vue
+++ b/src/components/do/a6-device/maintenance.vue
@@ -1,214 +1,329 @@
+<!-- 璁惧缁存姢 -->
 <template>
   <div>
     <div class="search">
       <div class="search_thing">
-        <div class="search_label">鍏抽敭瀛楋細</div>
-        <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-            v-model="value" @keyup.enter.native="refreshTable()"></el-input></div>
+        <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" type="primary" @click="refreshTable()">鏌� 璇�</el-button>
+        <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">鏂板缓</el-button>
-        <el-button size="small" type="primary">瀵煎嚭</el-button>
+        <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: 16px;">
-      <ValueTable ref="ValueTable"
-				:url="$api.auxiliaryWorkingHoursDay.selectAuxiliaryWorkingHoursDay"
-				:delUrl="$api.auxiliaryWorkingHoursDay.deleteAuxiliaryWorkingHoursDay" :componentData="componentData" :key="upIndex"/>
+    <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
-      title="浠櫒璁惧缁存姢璁板綍琛�"
-      :visible.sync="dialogVisible"
-      width="30%"
-      style="max-height: 80vh;margin-top: 10vh;"
-      :close-on-click-modal="false"
-      :close-on-press-escape="false">
-      <div class="form">
-        <div class="search_thing">
-          <div class="search_label">璁惧缂栧彿锛�</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-              v-model="value"></el-input></div>
-        </div>
-        <div class="search_thing">
-          <div class="search_label">璁惧鍚嶇О锛�</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-              v-model="value"></el-input></div>
-        </div>
-        <div class="search_thing">
-          <div class="search_label">缁熶竴缂栧彿锛�</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-              v-model="value"></el-input></div>
-        </div>
-        <div class="search_thing" style="margin: 10px 0;">
-          <div class="search_label">缁存姢鍐呭锛�</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-              v-model="value" type="textarea"
-              :rows="2"></el-input></div>
-        </div>
-        <div class="search_thing">
-          <div class="search_label">缁存姢鏃堕棿锛�</div>
-          <div class="search_input">
-            <el-date-picker style="width:100%" v-model="value" type="date"
-              format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
-            </el-date-picker>
-          </div>
-        </div>
-        <div class="search_thing">
-          <div class="search_label">缁存姢绫诲瀷锛�</div>
-          <div class="search_input">
-            <el-radio-group v-model="value">
-              <el-radio :label="0">浣跨敤鍓嶅悗缁存姢</el-radio>
-              <el-radio :label="1">璁″垝涓淮鎶�</el-radio>
-            </el-radio-group>
-          </div>
-        </div>
-        <div class="search_thing">
-          <div class="search_label">涓嬫缁存姢鏃堕棿锛�</div>
-          <div class="search_input">
-            <el-date-picker style="width:100%" v-model="value" type="date"
-              format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" size="small" placeholder="閫夋嫨鏃ユ湡">
-            </el-date-picker>
-          </div>
-        </div>
-        <div class="search_thing">
-          <div class="search_label">缁存姢浜猴細</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-              v-model="value"></el-input></div>
-        </div>
-        <div class="search_thing" style="margin: 10px 0;">
-          <div class="search_label">澶囨敞锛�</div>
-          <div class="search_input"><el-input size="small" placeholder="璇疯緭鍏�" clearable
-              v-model="value" type="textarea"
-              :rows="2"></el-input></div>
-        </div>
-      </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 @click="dialogVisible = false">鍙� 娑�</el-button>
-        <el-button type="primary" @click="dialogVisible = false">纭� 瀹�</el-button>
+        <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 ValueTable from '../../tool/value-table.vue'
 export default {
-  components: {
-    ValueTable
-  },
-  data(){
-    return {
-      value:'',
-      componentData: {
-        entity: {
-          week: null,
-          weekDay: null,
-          dateTime: null,
-          name:null,
-          orderBy: {
-            field: 'id',
-            order: 'desc'
-          }
-        },
-        isIndex: true,
-        showSelect: false,
-        select: false,
-        do: [{
-          id: 'handleLook',
-          font: '鏌ョ湅',
-          type: 'text',
-          method: 'handleLook'
-        },{
-          id: 'delete',
-          font: '鍒犻櫎',
-          type: 'text',
-          method: 'doDiy',
-          disabFun: (row, index) => {
-            return row.state === '宸插鏍�' || row.state === '宸叉壒鍑�'
-          }
-        }],
-        tagField: {
-          shift:{
-            select:[]
-          },
-          state:{
-            select:[
-              {
-                label:'宸叉彁浜�',
-                value:'宸叉彁浜�',
-                type:'primary'
-              },
-              {
-                label:'宸插鏍�',
-                value:'宸插鏍�',
-                type:'warning'
-              },
-              {
-                label:'宸叉壒鍑�',
-                value:'宸叉壒鍑�',
-                type:'success'
-              },
-            ]
-          },
-          weekDay:{
-            select:[]
-          }
-        },
-        linkEvent: {},
-        selectField: {
-          shift:{
-            select:[]
-          },
-          state:{
-            select:[
-              {
-                label:'宸叉彁浜�',
-                value:'宸叉彁浜�',
-                type:'primary'
-              },
-              {
-                label:'宸插鏍�',
-                value:'宸插鏍�',
-                type:'warning'
-              },
-              {
-                label:'宸叉壒鍑�',
-                value:'宸叉壒鍑�',
-                type:'success'
-              },
-            ]
-          },
-          weekDay:{
-            select:[]
-          }
-        },
-        requiredAdd: [],
-        requiredUp: []
-			},
-      upIndex:0,
-      dialogVisible:true
+  props: {
+    clickNodeVal: {
+      type: Object,
+      default: () => {
+        return {};
+      }
     }
   },
-  methods:{
-    refreshTable(){}
+  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>
-.tables{
-  width: calc(100vw - 390px);
-  height: calc(100vh - 230px);
+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;
-  height: 40px;
   display: flex;
   align-items: center;
   position: relative;
+  margin-top: 10px;
 }
 
 .search_thing {
@@ -218,21 +333,30 @@
 }
 
 .search_label {
-  width: 70px;
+  width: 80px;
   font-size: 14px;
   text-align: right;
 }
 
 .search_input {
-  width: calc(100% - 120px);
+  width: 73%;
 }
-.btns{
+
+.btns {
   position: absolute;
-  right: 40px;
+  right: 0px;
   top: 50%;
-  transform: translate(0,-50%);
+  transform: translate(0, -50%);
 }
-.form .search_label{
+
+.btns_thing {
+  position: absolute;
+  right: 230px;
+  top: 50%;
+  transform: translate(0, -50%);
+}
+
+.form .search_label {
   width: 120px;
 }
 </style>

--
Gitblit v1.9.3