2023-03-14 13:44:11 +08:00

608 lines
19 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<!-- 设备管理 -->
<div class="devManage">
<el-form
:inline="true"
size="medium"
class="demo-form-inline whiteBlock"
style="padding: 15px 0 15px 18px"
>
<el-form-item style="margin: 0">
<!-- 新增设备 -->
<el-button type="primary" @click="addDevice">{{
$t('message.devManage.addDev')
}}</el-button>
</el-form-item>
</el-form>
<div style="height: 12px; background: #f3f5fd; width: 100%"></div>
<el-table
ref="multipleTable"
:data="devListData"
style="width: 100%"
class="tables"
>
<!-- 设备名称 设备编号 -->
<el-table-column
prop="devName"
:label="$t('message.devManage.devName')"
></el-table-column>
<el-table-column
prop="devSn"
:label="$t('message.devManage.devNo')"
></el-table-column>
<!-- 监控点位数 -->
<el-table-column
prop="pointNum"
:label="$t('message.devManage.montorLocation')"
></el-table-column>
<!-- 操作 -->
<el-table-column :label="$t('message.safeMangeCheck.operate')">
<template slot-scope="scope">
<div class="flex">
<div @click="editDevInfo(scope.row)" class="operationText">
<img
src="@/assets/images/icon-edit.png"
width="15px"
height="15px"
/>
<!-- 编辑 -->
<span>{{ $t('message.safeMangeCheck.edit') }}</span>
</div>
<div @click="deteleDev(scope.row)" class="operationText">
<img
src="@/assets/images/icon-delete.png"
width="15px"
height="15px"
/>
<!-- 删除 -->
<span>{{ $t('message.safeMangeCheck.delete') }}</span>
</div>
</div>
</template>
</el-table-column>
</el-table>
<el-pagination
class="pagerBox"
style="margin-top: 10px"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="page"
:page-size="pageSize"
layout="total, sizes, prev, pager, next"
:total="Number(total)"
background
></el-pagination>
<!-- 新增 编辑 弹窗 -->
<el-dialog
:modal-append-to-body="false"
:title="dialogTitle"
:close-on-click-modal="false"
:visible.sync="devFormDialog"
width="860px"
>
<div class="dialog_content" style="height: 600px">
<vue-scroll style="height: 88%">
<!-- 基本信息 -->
<div class="title">{{ '·' + $t('message.devManage.baseInfo') }}</div>
<el-form
size="small"
ref="devForm"
:model="devForm"
label-width="130px"
:inline="true"
class="devFormBox"
>
<el-row :gutter="24">
<el-col :span="12">
<!-- 设备ID -->
<el-form-item
prop="devSn"
:label="$t('message.devManage.deviceId')"
:rules="[
{
required: true,
message: $t('message.safeManage.placeholder'),
trigger: 'blur'
}
]"
>
<el-input
v-model="devForm.devSn"
style="width: 215px"
:placeholder="$t('message.safeManage.placeholder')"
:disabled="dialogType == 2"
></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<!-- 设备名称 -->
<el-form-item
prop="devName"
:label="$t('message.devManage.devName')"
:rules="[
{
required: true,
message: $t('message.safeManage.placeholder'),
trigger: 'blur'
}
]"
>
<el-input
v-model="devForm.devName"
style="width: 215px"
:placeholder="$t('message.safeManage.placeholder')"
></el-input>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<!-- 紧急报警推送人 -->
<el-form-item
prop="urgentAlarmPushWorkerId"
:label="$t('message.devManage.emergencyAlarmPusher')"
:rules="[
{
required: true,
message: $t('message.safeMangeCheck.pleaseChoose'),
trigger: 'blur'
}
]"
>
<el-select
v-model="devForm.urgentAlarmPushWorkerId"
:placeholder="$t('message.laborMange.pleaseChoose')"
@change="changeWorkerType"
multiple
collapse-tags
style="width: 100%"
>
<el-option
v-for="item in workerInfoList"
:key="item.workerId"
:label="item.workerName"
:value="item.workerId"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<!-- 重要报警推送人 -->
<el-form-item
prop="importantAlarmPushWorkerId"
:label="$t('message.devManage.imporentAlarmPusher')"
:rules="[
{
required: true,
message: $t('message.safeMangeCheck.pleaseChoose'),
trigger: 'blur'
}
]"
>
<el-select
multiple
collapse-tags
v-model="devForm.importantAlarmPushWorkerId"
:placeholder="$t('message.laborMange.pleaseChoose')"
@change="changeWorkerType"
style="width: 100%"
>
<el-option
v-for="item in workerInfoList"
:key="item.workerId"
:label="item.workerName"
:value="item.workerId"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="24">
<el-col :span="12">
<!-- 次要报警推送人 -->
<el-form-item
prop="secondaryAlarmPushWorkerId"
:label="$t('message.devManage.minorAlarmPusher')"
:rules="[
{
required: true,
message: $t('message.safeMangeCheck.pleaseChoose'),
trigger: 'blur'
}
]"
>
<el-select
multiple
collapse-tags
v-model="devForm.secondaryAlarmPushWorkerId"
:placeholder="$t('message.laborMange.pleaseChoose')"
@change="changeWorkerType"
style="width: 100%"
>
<el-option
v-for="item in workerInfoList"
:key="item.workerId"
:label="item.workerName"
:value="item.workerId"
></el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<!-- 提示报警推送人 -->
<el-form-item
prop="promptAlarmPushWorkerId"
:label="$t('message.devManage.tipAlarmPusher')"
:rules="[
{
required: true,
message: $t('message.safeMangeCheck.pleaseChoose'),
trigger: 'blur'
}
]"
>
<el-select
multiple
collapse-tags
v-model="devForm.promptAlarmPushWorkerId"
:placeholder="$t('message.laborMange.pleaseChoose')"
@change="changeWorkerType"
style="width: 100%"
>
<el-option
v-for="item in workerInfoList"
:key="item.workerId"
:label="item.workerName"
:value="item.workerId"
></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<!-- ·监测点信息 -->
<el-row class="title">{{
'·' + $t('message.devManage.montorInfo')
}}</el-row>
<el-row :gutter="24">
<el-col :span="12">
<!-- 监测点位数量 -->
<el-form-item
:label="$t('message.devManage.montorLocationNum')"
prop="teamId"
>
<el-select
v-model="devForm.pointNum"
:placeholder="$t('message.laborMange.pleaseChoose')"
@change="changePointsNumber"
style="width: 100%"
:disabled="dialogType == 2"
>
<el-option label="8" :value="8"></el-option>
<el-option label="16" :value="16"></el-option>
<el-option label="32" :value="32"></el-option>
<el-option label="64" :value="64"></el-option>
<el-option label="128" :value="128"></el-option>
<el-option label="256" :value="256"></el-option>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row
:gutter="24"
v-for="(item, index) in devForm.pointList"
:key="index"
>
<el-col :span="3">
<el-form-item prop="teamId">
{{ $t('message.devManage.serialNum') + ''
}}{{ item.pointNo }}
</el-form-item>
</el-col>
<el-col :span="11">
<!-- 监测点名称 -->
<el-form-item
:label="$t('message.devManage.montorName')"
prop="teamId"
>
<el-input
v-model="item.pointName"
style="width: 160px"
:placeholder="$t('message.safeManage.placeholder')"
/>
</el-form-item>
</el-col>
<el-col :span="10">
<!-- 温度报警阈值 -->
<el-form-item
:label="$t('message.devManage.temperatureAlarm')"
prop="teamId"
>
<el-input
v-model="item.temperatureThreshold"
style="width: 120px"
:placeholder="$t('message.safeManage.placeholder')"
/>
</el-form-item>
</el-col>
</el-row>
</el-form>
</vue-scroll>
<div class="dialog-footer">
<!-- 确认 取消 -->
<el-button
class="cancleBtn"
icon="el-icon-circle-close"
size="medium"
@click="cancleBtn('devForm')"
>{{ $t('message.safeMangeCheck.dialog.cancel') }}</el-button
>
<el-button
type="primary"
icon="el-icon-circle-check"
size="medium"
@click="submitForm('devForm')"
>{{ $t('message.safeMangeCheck.dialog.confirm') }}</el-button
>
</div>
</div>
</el-dialog>
</div>
</template>
<script>
import {
addConcreteMonitorDevApi,
getConcreteMonitorDevListApi,
getDevDetailApi,
editConcreteMonitorDevApi,
deleteConcreteMonitorDevApi
} from '@/assets/js/api/concreteMonitoring.js'
import { getProjectChilderSystemUserListApi } from '@/assets/js/api/configManage'
export default {
data() {
return {
projectSn: '',
page: 1,
pageSize: 10,
total: 0,
devListData: [],
devFormDialog: false,
dialogTitle: this.$t('message.devManage.addDev'),
dialogType: 1,
workerInfoList: [], //推送人员列表
devForm: {
devName: '',
devSn: '',
pointNum: 8,
pointList: [],
importantAlarmPushWorkerId: [],
promptAlarmPushWorkerId: [],
secondaryAlarmPushWorkerId: [],
urgentAlarmPushWorkerId: []
}
}
},
created() {
this.projectSn = this.$store.state.projectSn
this.getDevList()
},
methods: {
//获取设备列表
getDevList() {
let data = {
projectSn: this.projectSn,
pageNo: this.pageNo,
pageSize: this.pageSize
}
getConcreteMonitorDevListApi(data).then((res) => {
if (res.code == 200) {
this.devListData = res.result.records
this.total = res.result.total
}
})
},
//新增设备
addDevice() {
this.devFormDialog = true
this.dialogTitle = this.$t('message.devManage.addDev')
this.dialogType = 1
this.devForm.pointList = []
this.devForm = {
devName: '',
devSn: '',
pointNum: 8,
pointList: [],
importantAlarmPushWorkerId: [],
promptAlarmPushWorkerId: [],
secondaryAlarmPushWorkerId: [],
urgentAlarmPushWorkerId: []
}
//渲染点位
for (let i = 0; i < this.devForm.pointNum; i++) {
let obj = { pointName: '', pointNo: i + 1, temperatureThreshold: '' }
this.devForm.pointList.push(obj)
}
//获取通知人
this.getNotifierList()
},
//切换监控点数量
changePointsNumber(val) {
this.devForm.pointNum = val
this.devForm.pointList = []
for (let i = 0; i < val; i++) {
let obj = { pointName: '', pointNo: i + 1, temperatureThreshold: '' }
this.devForm.pointList.push(obj)
if (i == val - 1) {
this.$message.success({
// 切换点位数量成功
message: this.$t('message.devManage.numChangeSuccess')
})
}
}
},
//获取通知人员列表
getNotifierList() {
let data = {
projectSn: this.projectSn
}
getProjectChilderSystemUserListApi(data).then((res) => {
this.workerInfoList = res.result
})
},
//保存
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
let data = JSON.parse(JSON.stringify(this.devForm))
data.importantAlarmPushWorkerId =
data.importantAlarmPushWorkerId.join(',')
data.promptAlarmPushWorkerId = data.promptAlarmPushWorkerId.join(',')
data.secondaryAlarmPushWorkerId =
data.secondaryAlarmPushWorkerId.join(',')
data.urgentAlarmPushWorkerId = data.urgentAlarmPushWorkerId.join(',')
data.projectSn = this.projectSn
//新增
if (this.dialogType == 1) {
addConcreteMonitorDevApi(data).then((res) => {
if (res.code == 200) {
// 保存成功
this.$message.success(this.$t('message.devManage.saveSuccess'))
this.devFormDialog = false
this.$refs[formName].resetFields()
this.getDevList()
} else {
this.$message.success(res.message)
}
})
} else {
//编辑
editConcreteMonitorDevApi(data).then((res) => {
if (res.code == 200) {
this.$message.success(this.$t('message.devManage.editSuccess'))
this.devFormDialog = false
this.$refs[formName].resetFields()
this.getDevList()
} else {
this.$message.success(res.message)
}
})
}
} else {
return false
}
})
},
//取消按钮
cancleBtn(formName) {
this.$refs[formName].resetFields()
this.devFormDialog = false
},
//删除按钮
deteleDev(val) {
this.$confirm(
this.$t('message.devManage.tipText') + '?',
this.$t('message.devManage.tip'),
{
confirmButtonText: this.$t('message.safeMangeCheck.dialog.confirm'),
cancelButtonText: this.$t('message.safeMangeCheck.dialog.cancel'),
type: 'warning'
}
)
.then(() => {
let data = {
id: val.id
}
deleteConcreteMonitorDevApi(data).then((res) => {
if (res.code == 200) {
this.$message({
type: 'success',
message: this.$t('message.devManage.deleteSuccess') + '!'
})
this.getDevList()
} else {
this.$message.error(res.message)
}
})
})
.catch(() => {
this.$message({
type: 'info',
message: this.$t('message.devManage.cancelDeleteSuccess') + '!'
})
})
},
//编辑设备
editDevInfo(val) {
this.dialogTitle = this.$t('message.devManage.editDev')
this.dialogType = 2
this.getNotifierList()
this.getDevDetail(val.id)
this.devFormDialog = true
},
//获取单个设备详情
getDevDetail(id) {
let data = {
id
}
getDevDetailApi(data).then((res) => {
let val = res.result
this.devForm = {
devName: val.devName,
devSn: val.devSn,
pointNum: val.pointNum,
pointList: val.pointList,
importantAlarmPushWorkerId: val.importantAlarmPushWorkerId.split(','),
promptAlarmPushWorkerId: val.promptAlarmPushWorkerId.split(','),
secondaryAlarmPushWorkerId: val.secondaryAlarmPushWorkerId.split(','),
urgentAlarmPushWorkerId: val.urgentAlarmPushWorkerId.split(','),
id: id
}
})
},
//切换条数
handleSizeChange(e) {
this.pageSize = e
this.getDevList()
},
//切换分页
handleCurrentChange(e) {
this.page = e
this.getDevList()
},
changeWorkerType() {}
}
}
</script>
<style lang="less" scoped>
.flex {
display: flex;
align-items: center;
}
.title {
margin: 14px 0;
font-weight: 900;
}
.devManage {
background: #fff;
height: 100%;
width: 100%;
}
.operationText {
margin-right: 30px;
}
.devFormBox {
/deep/.el-select {
.el-input {
width: 215px;
}
}
}
</style>