|
<template>
<div class="app-container">
<div class="filter-container" style="margin-bottom:20px">
<el-input style="width: 200px;" class="filter-item" placeholder="采集盒编号" v-model="listQuery.cdCode">
</el-input>
<el-input style="width: 200px;" class="filter-item" placeholder="传感器编号" v-model="listQuery.code">
</el-input>
<el-button v-waves class="filter-item" style="margin-left: 10px;" @click="handleFilter" type="primary" icon="el-icon-search">查找</el-button>
<el-button v-waves class="filter-item" style="margin-left: 10px;" @click="handleCreate" type="primary" icon="el-icon-edit">添加传感器</el-button>
</div>
<el-table :key='tableKey' :data="listG" v-loading="listLoading" border fit highlight-current-row
style="width: 100%;min-height:550px;">
<el-table-column width="150px" align="center" label="传感器编号" prop="code"></el-table-column>
<el-table-column width="150px" align="center" label="内部编号" prop="seq"></el-table-column>
<el-table-column width="150px" align="center" label="传感器所在主缆" prop="cableType"></el-table-column>
<el-table-column width="150px" align="center" label="传感器位置" prop="locType"></el-table-column>
<el-table-column min-width="150px" align="center" label="所属采集盒编号" prop="deviceName"></el-table-column>
<el-table-column min-width="200px" align="center" label="备注信息" prop="remark"></el-table-column>
<el-table-column align="center" label="操作" width="230" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button v-waves type="primary" size="mini" @click="handleUpdate(scope.row)">编辑</el-button>
<el-button v-waves size="mini" type="danger" @click="handleModifyStatus(scope.row,'deleted')">删除
</el-button>
</template>
</el-table-column>
</el-table>
<el-dialog title="传感器配置" ref="ruleForm" :visible.sync="dialogTableVisible" width="860px" @close='closed'>
<el-form :model="ruleForm2" :rules="rules2" ref="ruleForm2" class="form-main" label-position='right' status-icon>
<el-row>
<el-col :span="12">
<el-form-item label="采集盒编号" prop="device">
<el-autocomplete
v-model="ruleForm2.device"
:fetch-suggestions="querySearchAsync"
placeholder="请选择采集盒编号"
@select="handleSelect">
</el-autocomplete>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="传感器编号" prop="code">
<el-input placeholder="请输入传感器编号" v-model="ruleForm2.code"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="内部编号" prop="seq">
<el-input placeholder="请输入内部编号" v-model="ruleForm2.seq"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="传感器所在主缆" prop="cableType">
<el-select v-model="ruleForm2.cableType" placeholder="请选择主缆">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="传感器位置" prop="locType">
<el-select v-model="ruleForm2.locType" placeholder="请选择主缆传感器位置">
<el-option
v-for="item in options1"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24" >
<el-form-item label="备注" prop="remark">
<el-input type="textarea" maxlength=100 v-model="ruleForm2.remark" rows=4></el-input>
</el-form-item>
</el-col>
<el-col :span="24" class="el-btn-col">
<div class="el-btn-col-box">
<el-button v-waves type="primary" @click="submitForm('ruleForm2')">确认</el-button>
<el-button v-waves type="info" @click="resetForm('ruleForm2')">返回</el-button>
</div>
</el-col>
</el-row>
</el-form>
</el-dialog>
<div class="pagination-container" style="text-align:center;">
<el-pagination background @size-change="handleSizeChange" @current-change="handleCurrentChange" :current-page="listQuery.pageNo" :page-size="listQuery.pageSize" layout="prev, pager, next, jumper" :total="total">
</el-pagination>
</div>
</div>
</template>
<script>
import { addDevice, updateDevice, deleteDevice, pageQueryDevice, DeviceOfservice, checkDeviceCode, checkDeviceInternalCode } from '@/api/sensor'
import waves from '@/directive/waves'
import queryDict from '@/utils/queryDict'
import queryBase from '@/utils/queryBase'
export default {
name: 'complexTable',
directives: {
waves
},
data() {
var device = (rule, value, callback) => {
const that = this
setTimeout(function() {
if (that.ruleForm2.device === '' || that.ruleForm2.deviceId === '') {
callback(new Error('请选择采集盒编号'))
} else {
callback()
}
}, 300)
}
var seq = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入内部编号'))
} else {
if (!this.ruleForm2.deviceId) {
callback('请先选择采集盒编号')
return
}
if (this.edit) {
checkDeviceInternalCode({ seq: value, id: this.edit, deviceId: this.ruleForm2.deviceId, active: 1 }).then(response => {
if (response.data) {
callback(new Error('内部编号已存在,请重新输入'))
} else {
callback()
}
})
} else {
checkDeviceInternalCode({ seq: value, deviceId: this.ruleForm2.deviceId, active: 1 }).then(response => {
if (response.data) {
callback(new Error('内部编号已存在,请重新输入'))
} else {
callback()
}
})
}
}
}
var code = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入传感器编号'))
} else {
if (this.edit) {
checkDeviceCode({ code: value, id: this.edit, active: 1 }).then(response => {
if (response.data) {
callback(new Error('传感器编号已存在,请重新输入'))
} else {
callback()
}
})
} else {
checkDeviceCode({ code: value, active: 1 }).then(response => {
if (response.data) {
callback(new Error('传感器编号已存在,请重新输入'))
} else {
callback()
}
})
}
}
}
return {
cableMain: [],
addr: [],
options: [],
options1: [],
edit: '',
ruleForm2: {
code: '',
cableType: '01',
device: '',
seq: '',
deviceId: '',
locType: '01',
remark: ''
},
rules2: {
code: [
{ required: true, validator: code, trigger: 'blur' }
],
device: [
{ required: true, validator: device, trigger: 'blur' }
],
cableType: [
{ required: true, message: '请选择主缆', trigger: 'blur' }
],
locType: [
{ required: true, message: '请选择传感器位置', trigger: 'blur' }
],
seq: [
{ required: true, validator: seq, trigger: 'blur' }
]
},
timeout: null,
dialogTableVisible: false,
tableKey: 0,
listG: null,
total: null,
listLoading: true,
listQuery: {
cdCode: '',
code: '',
active: 1,
pageSize: 10,
pageNo: 1
}
}
},
filters: {
typeFilter(type) {
}
},
created() {
this.getDictoryData()
},
methods: {
getDictoryData() {
const that = this
queryDict.applyDict('ZLLX', function(dictData) { // 主缆
dictData.map(item => {
that.options.push({ value: item.code, label: item.caption })
that.cableMain[item.code] = item.caption
})
queryDict.applyDict('ZLWZ', function(dictData) { // 位置
dictData.map(item => {
that.options1.push({ value: item.code, label: item.caption })
that.addr[item.code] = item.caption
})
that.getList()
})
})
},
submitForm(formName) {
const that = this
this.$refs[formName].validate((valid) => {
if (valid) {
if (!this.edit) {
addDevice(this.ruleForm2).then(response => {
if (response.success) {
this.getList()
setTimeout(function() {
that.pop('已成功添加传感器')
}, 1000)
this.resetForm('ruleForm2')
this.dialogTableVisible = false
}
}).catch(error => {
console.log(error)
})
} else {
const par = this.ruleForm2
par.id = this.edit
updateDevice(par).then(response => {
if (response.success) {
setTimeout(function() {
that.pop('已成功更新传感器')
}, 1000)
this.resetForm('ruleForm2')
this.getList()
this.dialogTableVisible = false
this.edit = ''
this.ruleForm2 = {
code: '',
cableType: '',
device: '',
seq: '',
deviceId: '',
locType: '',
remark: ''
}
}
})
}
}
})
},
resetForm(formName) {
this.dialogTableVisible = false
this.$refs[formName].resetFields()
this.edit = ''
},
closed() {
this.$refs['ruleForm2'].resetFields()
this.edit = ''
},
getList() {
var that = this
this.listLoading = true
pageQueryDevice(that.listQuery).then(response => {
if (response.success) {
var $data = response.data.data
var hdata = { num: 1, data: $data }
for (let i = 0; i < $data.length; i++) {
hdata.num++
$data[i].cableType = that.cableMain[$data[i].cableType]
$data[i].locType = that.addr[$data[i].locType]
const str = $data[i]
queryBase.getDevice(str.deviceId, function(sc, value) {
if (sc) {
str.deviceName = value.code
hdata.num--
if (hdata.num === 0) {
that.listG = hdata.data
}
}
})
}
hdata.num--
if (hdata.num === 0) {
that.listG = hdata.data
}
that.total = response.data.total
setTimeout(() => {
that.listLoading = false
}, 1.5 * 1000)
}
})
},
handleFilter() {
this.listQuery.pageNo = 1
this.getList()
},
handleSizeChange(val) {
this.listQuery.pageSize = val
this.getList()
},
handleCurrentChange(val) {
this.listQuery.pageNo = val
this.getList()
},
handleModifyStatus(row, status) {
this.$confirm('确实要删除:传感器' + row.code + '吗?', '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
center: true
}).then(() => {
deleteDevice({ id: row.id }).then(response => {
if (response.success) {
this.getList()
this.pop('已成功删除该传感器')
}
})
}).catch(() => {
})
},
pop($par) {
this.$confirm($par, '提示', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'success',
showCancelButton: false,
center: true
}).then(() => {
}).catch(() => {
})
},
resetTemp(row) {
this.ruleForm2 = {
code: row.code,
cableType: row.cableType,
device: row.deviceName,
seq: row.seq,
deviceId: row.deviceId,
locType: row.locType,
remark: row.remark
}
this.edit = row.id
},
handleCreate() {
this.dialogTableVisible = true
},
handleUpdate(row) {
const that = this
setTimeout(function() {
that.resetTemp(row)
}, 500)
this.dialogTableVisible = true
},
querySearchAsync(queryString, cb) {
this.ruleForm2.deviceId = ''
clearTimeout(this.timeout)
this.timeout = setTimeout(() => {
DeviceOfservice({ code: this.ruleForm2.device, active: 1 }).then(response => {
const $info = response.data
if ($info.length) {
const $data = $info.map(item => {
return { 'value': item.code, 'id': item.id }
})
cb($data)
if ($info.length === 1 && this.ruleForm2.bridge === $info[0].code) {
this.ruleForm2.deviceId = $info[0].id
} else {
this.ruleForm2.deviceId = ''
}
} else {
cb([])
}
})
}, 3000 * Math.random())
},
handleSelect(item) {
this.ruleForm2.deviceId = item.id
this.ruleForm2.device = item.value
}
}
}
</script>
<style rel="stylesheet/scss" lang="scss" scoped>
.el-autocomplete{
display: block
}
.el-btn-col{
margin-top: 45px
}
.el-form-item{
margin: 0px 10px
}
.el-select{
width: 100%
}
.el-col{
margin-bottom: 15px
}
.el-form-item__label{
padding: 0px
}
</style>
|