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 | 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