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 + "¤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> -.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