| ¶Ô±ÈÐÂÎļþ |
| | |
| | | <!-- 使ç¨è®°å½ --> |
| | | <template> |
| | | <div> |
| | | <div class="search"> |
| | | <div class="search_thing"> |
| | | <div class="search_label">æµç¨ç¼å·ï¼</div> |
| | | <el-input v-model="search.deviceNumber" clearable placeholder="请è¾å
¥" size="small" style="width: 70%;" |
| | | @keyup.enter.native="getTableList(clickNodeVal.value)"></el-input> |
| | | </div> |
| | | <div class="search_thing" style="padding-left: 30px;"> |
| | | <el-button size="small" @click="resetSearch">é ç½®</el-button> |
| | | <el-button size="small" type="primary" @click="getTableList(clickNodeVal.value)">æ¥ è¯¢</el-button> |
| | | </div> |
| | | <div class="btns"> |
| | | <el-button size="small" type="primary" @click="dialogVisible = true, openAdd()">æ° å»º</el-button> |
| | | <el-button :loading="outLoading" size="small" type="primary" @click="handleDown">导 åº</el-button> |
| | | </div> |
| | | </div> |
| | | <div class="tables" style="margin-top: 16px;"> |
| | | <el-table ref="Recordtable" :data="formParamList" 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="温度(°C)" min-width="120" prop="temperature" /> |
| | | <el-table-column label="湿度(%RH)" min-width="120" prop="humidity" /> |
| | | <el-table-column label="使ç¨å" min-width="120" prop="useBefore"> |
| | | <template v-slot="scope"> |
| | | {{ scope.row.useBefore === 1 ? 'æ£å¸¸' : '䏿£å¸¸' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="使ç¨å" min-width="120" prop="useAfter"> |
| | | <template v-slot="scope"> |
| | | {{ scope.row.useAfter === 1 ? 'æ£å¸¸' : '䏿£å¸¸' }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column label="å¼å¸¸æ
åµ" min-width="120" prop="abnormal" /> |
| | | <el-table-column label="使ç¨å¼å§æ¥æ" min-width="150" prop="useStartDate" /> |
| | | <el-table-column label="使ç¨ç»ææ¥æ" min-width="150" prop="useEndDate" /> |
| | | <el-table-column label="使ç¨äºº" min-width="120" prop="usePerson" /> |
| | | <el-table-column label="夿³¨" min-width="120" prop="remark" /> |
| | | <!-- æä½æé® --> |
| | | <el-table-column fixed="right" label="æä½" width="130"> |
| | | <template slot-scope="scope"> |
| | | <el-button size="small" type="text" @click="showDetailsDialog(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 :visible.sync="dialogVisible" title="仪å¨è®¾å¤ä½¿ç¨è®°å½è¡¨" top="5vh" width="55%"> |
| | | <el-form ref="form" :model="form" label-width="130px"> |
| | | <el-row> |
| | | <el-col :span="24"> |
| | | <el-form-item label="æ ·åç¼å·:"> |
| | | <el-input v-model="form.deviceNumber" disabled size="small" style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="设å¤åç§°:" required> |
| | | <el-input v-model="form.deviceName" :disabled="true" size="small" style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item label="管çç¼å·:" required> |
| | | <el-input v-model="form.managementNumber" :disabled="true" size="small" style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥æ¸©åº¦(°C)', trigger: 'blur' }]" label="温度(°C):" |
| | | prop="temperature"> |
| | | <el-input v-model="form.temperature" :disabled="isShow" size="small" style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥æ¹¿åº¦(%RH)', trigger: 'blur' }]" label="湿度(%RH):" |
| | | prop="humidity"> |
| | | <el-input v-model="form.humidity" :disabled="isShow" size="small" style="width: 100%;"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: 'è¯·éæ©ä½¿ç¨å', trigger: 'change' }]" label="使ç¨å:" |
| | | prop="useBefore"> |
| | | <el-radio-group v-model="form.useBefore" :disabled="isShow"> |
| | | <el-radio :label="1">æ£å¸¸</el-radio> |
| | | <el-radio :label="0">䏿£å¸¸</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: 'è¯·éæ©ä½¿ç¨å', trigger: 'change' }]" label="使ç¨å:" |
| | | prop="useAfter"> |
| | | <el-radio-group v-model="form.useAfter" :disabled="isShow"> |
| | | <el-radio :label="1">æ£å¸¸</el-radio> |
| | | <el-radio :label="0">䏿£å¸¸</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col v-if="form.useAfter === 0" :span="24"> |
| | | <el-form-item :rules="[{ required: form.useAfter === 0, message: '请è¾å
¥å¼å¸¸æ
åµ', trigger: 'blur' }]" label="å¼å¸¸æ
åµ:" |
| | | prop="abnormal"> |
| | | <el-input v-model="form.abnormal" :disabled="isShow" size="small" style="width: 100%;" |
| | | type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥ä½¿ç¨æ¥æ', trigger: 'blur' }]" label="ä½¿ç¨æ¥æ:" |
| | | prop="useDateList"> |
| | | |
| | | <el-date-picker |
| | | v-model="form.useDateList" |
| | | :disabled="isShow" |
| | | value-format="yyyy-MM-dd" |
| | | type="daterange" |
| | | range-separator="è³" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | end-placeholder="ç»ææ¥æ"> |
| | | </el-date-picker> |
| | | <!-- <el-date-picker |
| | | v-model="form.useDateList" :disabled="isShow" end-placeholder="ç»ææ¥æ" format="yyyy-MM-dd HH:mm:ss" |
| | | size="small" |
| | | start-placeholder="å¼å§æ¥æ" |
| | | style="width:100%" |
| | | type="datetimerange" |
| | | value-format="yyyy-MM-dd HH:mm:ss"> |
| | | </el-date-picker> --> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="12"> |
| | | <el-form-item :rules="[{ required: true, message: '请è¾å
¥ä½¿ç¨äºº', trigger: 'change' }]" label="使ç¨äºº:" |
| | | prop="usePerson"> |
| | | <el-input v-model="form.usePerson" :disabled="isShow" size="small" style="width:100%"></el-input> |
| | | <!-- <el-select v-model="form.usePerson" placeholder="è¯·éæ©" :disabled="isShow" size="small" style="width:100%"> |
| | | <el-option v-for="item in responsiblePersonList" :key="item.name" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> --> |
| | | </el-form-item> |
| | | </el-col> |
| | | <el-col :span="24"> |
| | | <el-form-item label="夿³¨:"> |
| | | <el-input v-model="form.remark" :disabled="isShow" type="textarea"></el-input> |
| | | </el-form-item> |
| | | </el-col> |
| | | </el-row> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button v-if="!isShow" @click="dialogVisible = false">å æ¶</el-button> |
| | | <el-button v-if="!isShow" type="primary" @click="saveRecord">ç¡® å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | <script> |
| | | import { |
| | | deviceRecordPage, |
| | | exportUseRecord, |
| | | selectDeviceByCode, |
| | | saveDeviceRecord, |
| | | updateDeviceRecord, |
| | | deleteDeviceRecord, |
| | | } from '@/api/cnas/resourceDemand/device.js' |
| | | import { selectUserCondition } from "@/api/system/user"; |
| | | export default { |
| | | props: { |
| | | clickNodeVal: { |
| | | type: Object, |
| | | default: () => { |
| | | return {}; |
| | | } |
| | | }, |
| | | // 夿æ¯å¦æ¯å¤é¨å离 |
| | | isMenuList: { |
| | | type: Number, |
| | | default: 0 |
| | | } |
| | | }, |
| | | data() { |
| | | return { |
| | | search: { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | sampleCode: '', |
| | | managementNumber: '' |
| | | }, |
| | | responsiblePersonList: {}, |
| | | isShow: false, |
| | | outLoading: false, |
| | | ratifyDialog: false, |
| | | exportDate: '', |
| | | userList: [], |
| | | form: { |
| | | // deviceId:'', |
| | | processNumber: '', |
| | | deviceName: '', |
| | | managementNumber: '', |
| | | //温度 |
| | | temperature: '', |
| | | //湿度 |
| | | humidity: '', |
| | | //使ç¨å |
| | | useBefore: 1, |
| | | //使ç¨å |
| | | useAfter: 1, |
| | | //å¼å¸¸æ
åµ |
| | | abnormal: '', |
| | | useDateList: [], |
| | | //ä½¿ç¨æ¥æ |
| | | useStartDate: null, |
| | | useEndDate: null, |
| | | //使ç¨äºº |
| | | usePerson: '', |
| | | usePersonId: '', |
| | | //夿³¨ |
| | | remark: '', |
| | | }, |
| | | dialogVisible: false, |
| | | operationType: '', |
| | | formParamList: [], |
| | | } |
| | | }, |
| | | mounted() { |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | methods: { |
| | | handleSizeChange(val) { |
| | | this.search.size = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | handleCurrentChange(val) { |
| | | this.search.current = val |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | resetSearch() { |
| | | this.search = { |
| | | size: 20, |
| | | current: 1, |
| | | total: 0, |
| | | sampleCode: '', |
| | | managementNumber: '' |
| | | } |
| | | this.getTableList(this.clickNodeVal.value); |
| | | }, |
| | | async getTableList(deviceId) { |
| | | if (deviceId === undefined) { |
| | | deviceId = '' |
| | | } |
| | | await deviceRecordPage({ |
| | | deviceId: deviceId, |
| | | ...this.search |
| | | }).then(res => { |
| | | if (res.code == 200) { |
| | | this.formParamList = res.data.records |
| | | this.search.total = res.data.total |
| | | } |
| | | }) |
| | | }, |
| | | // æå¼å¯¼åºå¼¹æ¡éæ©ç¼å¶äººãæ¹å人 |
| | | openHandleOut() { |
| | | this.ratifyDialog = true |
| | | }, |
| | | //å¯¼åº |
| | | handleDown() { |
| | | this.outLoading = true |
| | | exportUseRecord({ |
| | | deviceId: this.clickNodeVal.value, |
| | | exportDate: this.exportDate |
| | | }).then(res => { |
| | | this.outLoading = false |
| | | const blob = new Blob([res], { type: 'application/octet-stream' }); |
| | | this.$download.saveAs(blob, '设å¤ä½¿ç¨è®°å½.doc') |
| | | }) |
| | | }, |
| | | //æ°å»º |
| | | openAdd() { |
| | | this.operationType = 'add' |
| | | this.getUserList() |
| | | selectDeviceByCode({ id: this.clickNodeVal.value }).then(res => { |
| | | this.form.deviceName = res.data.deviceName |
| | | this.form.managementNumber = res.data.managementNumber |
| | | this.$nextTick(() => { |
| | | this.$refs['form'].clearValidate() |
| | | }) |
| | | }); |
| | | }, |
| | | usePersonName(value) { |
| | | const index = this.userList.findIndex(item => item.id === value) |
| | | if (index > -1) { |
| | | this.form.usePerson = this.userList[index].name |
| | | } |
| | | }, |
| | | //确认添å è®°å½ |
| | | saveRecord() { |
| | | this.$refs.form.validate((valid) => { |
| | | if (valid) { |
| | | this.form.useStartDate = this.form.useDateList[0] |
| | | this.form.useEndDate = this.form.useDateList[1] |
| | | this.form.deviceId = this.clickNodeVal.value |
| | | if (this.operationType === 'add') { |
| | | saveDeviceRecord(this.form).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('æ°å¢æå') |
| | | this.getTableList(this.clickNodeVal.value) |
| | | this.dialogVisible = false |
| | | } |
| | | }) |
| | | this.dialogVisible = false; |
| | | } else { |
| | | updateDeviceRecord(this.form).then(res => { |
| | | if (res.code == 200) { |
| | | this.$message.success('ä¿®æ¹æå') |
| | | this.getTableList(this.clickNodeVal.value) |
| | | this.dialogVisible = false |
| | | } |
| | | }) |
| | | this.dialogVisible = false; |
| | | } |
| | | } |
| | | }); |
| | | }, |
| | | //æ¥ç详æ
|
| | | showDetailsDialog(type, row) { |
| | | this.operationType = type; |
| | | console.log(row) |
| | | this.dialogVisible = true; |
| | | this.getUserList() |
| | | this.form = row; |
| | | let list = [] |
| | | if (row.useStartDate === null) { |
| | | row.useStartDate = '' |
| | | } |
| | | if (row.useEndDate === null) { |
| | | row.useEndDate = '' |
| | | } |
| | | list.push(row.useStartDate) |
| | | list.push(row.useEndDate) |
| | | this.$set(this.form, 'useDateList', list) |
| | | }, |
| | | handleDeleteClick(index, row) { |
| | | this.$confirm('æ¤æä½å°æ°¸ä¹
å é¤è¯¥æä»¶, æ¯å¦ç»§ç»?', 'æç¤º', { |
| | | confirmButtonText: 'ç¡®å®', |
| | | cancelButtonText: 'åæ¶', |
| | | type: 'warning' |
| | | }).then(() => { |
| | | deleteDeviceRecord({ id: row.id }).then(res => { |
| | | this.formParamList.splice(index, 1); |
| | | this.$message({ |
| | | type: 'success', |
| | | message: 'å 餿å!' |
| | | }); |
| | | }) |
| | | }).catch(() => { |
| | | this.$message({ |
| | | type: 'info', |
| | | message: '已忶å é¤' |
| | | }); |
| | | }); |
| | | }, |
| | | getUserList() { |
| | | selectUserCondition().then(res => { |
| | | this.userList = res.data |
| | | }) |
| | | }, |
| | | }, |
| | | watch: { |
| | | // çå¬ç¹å»el-treeçæ°æ®ï¼è¿è¡æ°æ®å·æ° |
| | | clickNodeVal(newVal) { |
| | | if (newVal.value) { |
| | | this.getTableList(newVal.value); |
| | | } |
| | | }, |
| | | dialogVisible(newVal) { |
| | | if (newVal === false) { |
| | | this.form = { |
| | | // deviceId:'', |
| | | sampleCode: '', |
| | | deviceName: '', |
| | | managementNumber: '', |
| | | //温度 |
| | | temperature: '', |
| | | //湿度 |
| | | humidity: '', |
| | | //使ç¨å |
| | | useBefore: 1, |
| | | //使ç¨å |
| | | useAfter: 1, |
| | | //å¼å¸¸æ
åµ |
| | | abnormal: '', |
| | | //ä½¿ç¨æ¥æ |
| | | useDateList: [], |
| | | //使ç¨äºº |
| | | usePersonId: '', |
| | | //夿³¨ |
| | | remark: '', |
| | | } |
| | | this.$refs.form.clearValidate() |
| | | } |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | |
| | | <style scoped> |
| | | .tables { |
| | | width: 100%; |
| | | height: calc(100vh - 15em); |
| | | } |
| | | |
| | | .el-from { |
| | | max-width: 400px; |
| | | margin: 0 auto; |
| | | } |
| | | |
| | | .form-row { |
| | | display: flex; |
| | | justify-content: space-between; |
| | | } |
| | | |
| | | .el-input { |
| | | width: calc(100% - 120px); |
| | | /* ç¡®ä¿è¾å
¥æ¡å®½åº¦ä¸è´ */ |
| | | } |
| | | |
| | | .form-row .el-form-item { |
| | | flex: 1; |
| | | /* æ¯ä¸ªè¡¨åé¡¹å æ®ç¸åæ¯ä¾çç©ºé´ */ |
| | | margin-right: 100px; |
| | | /* å¯éï¼ä¸ºå³ä¾§å
ç´ æ·»å é´è· */ |
| | | } |
| | | |
| | | /* ç§»é¤æåä¸ä¸ªå
ç´ çå³è¾¹è· */ |
| | | .form-row .el-form-item:last-child { |
| | | margin-right: 0; |
| | | |
| | | } |
| | | |
| | | .search { |
| | | background-color: #fff; |
| | | margin-top: 10px; |
| | | display: flex; |
| | | align-items: center; |
| | | position: relative; |
| | | } |
| | | |
| | | .search_thing { |
| | | display: flex; |
| | | align-items: center; |
| | | height: 40px; |
| | | |
| | | } |
| | | |
| | | .search_label { |
| | | width: 140px; |
| | | font-size: 14px; |
| | | text-align: right; |
| | | margin-right: 10px; |
| | | } |
| | | |
| | | .btns { |
| | | position: absolute; |
| | | right: 0px; |
| | | top: 50%; |
| | | transform: translate(0, -50%); |
| | | } |
| | | </style> |