From 6ef9e5189ac1888b8c4c504d5c5d3f431807ff56 Mon Sep 17 00:00:00 2001
From: spring <2396852758@qq.com>
Date: 星期六, 15 三月 2025 11:57:40 +0800
Subject: [PATCH] 修改电路试验单位
---
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 + "¤t=" + 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