|
<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.bcode">
</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="list" 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="devices"></el-table-column>
<el-table-column min-width="150px" align="center" label="所属桥梁" prop="bridgeName"></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="code">
<el-input placeholder="请输入服务器编号" v-model="ruleForm2.code"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="采集盒数量" prop="devices">
<el-input placeholder="请输入采集盒数量" v-model="ruleForm2.devices"></el-input>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="所属桥梁" prop="bridge">
<el-autocomplete
v-model="ruleForm2.bridge"
:fetch-suggestions="querySearchAsync"
placeholder="请选择所属桥梁"
@select="handleSelect">
</el-autocomplete>
</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="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/server'
import waves from '@/directive/waves'
import queryBase from '@/utils/queryBase'
export default {
name: 'complexTable',
directives: {
waves
},
data() {
var bridge = (rule, value, callback) => {
const that = this
setTimeout(function() {
if (that.ruleForm2.bridge === '' || that.ruleForm2.bridgeId === '') {
callback(new Error('请选择所属桥梁'))
} else {
callback()
}
}, 300)
}
var seq = (rule, value, callback) => {
if (value === '') {
callback(new Error('请输入内部编号'))
} else {
if (!this.ruleForm2.bridgeId) {
callback('请先选择所属桥梁')
return
}
if (this.edit) {
checkDeviceInternalCode({ seq: value, id: this.edit, bridgeId: this.ruleForm2.bridgeId, active: 1 }).then(response => {
if (response.data) {
callback(new Error('内部编号已存在,请重新输入'))
} else {
callback()
}
})
} else {
checkDeviceInternalCode({ seq: value, bridgeId: this.ruleForm2.bridgeId, 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 {
edit: '',
ruleForm2: {
code: '',
bridge: '',
seq: '',
bridgeId: '',
remark: '',
devices: ''
},
rules2: {
code: [
{ required: true, validator: code, trigger: 'blur' }
],
bridge: [
{ required: true, validator: bridge, trigger: 'blur' }
],
devices: [
{ required: true, message: '请输入采集盒数量', trigger: 'blur' }
],
seq: [
{ required: true, validator: seq, trigger: 'blur' }
]
},
timeout: null,
dialogTableVisible: false,
tableKey: 0,
list: null,
total: null,
listLoading: true,
listQuery: {
bcode: '',
code: '',
active: 1,
pageSize: 10,
pageNo: 1
}
}
},
filters: {
typeFilter(type) {
}
},
created() {
this.getList()
},
methods: {
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: '',
bridge: '',
seq: '',
bridgeId: '',
devices: '',
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(this.listQuery).then(response => {
if (response.success) {
const $data = response.data.data
var hdata = { num: 1, data: $data }
for (let i = 0; i < $data.length; i++) {
hdata.num++
const str = $data[i]
queryBase.getBridge(str.bridgeId, function(sc, value) {
if (sc) {
str.bridgeName = value.shortName
hdata.num--
if (hdata.num === 0) {
that.list = hdata.data
}
}
})
}
hdata.num--
if (hdata.num === 0) {
that.list = 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,
bridge: row.bridgeName,
seq: row.seq,
bridgeId: row.bridgeId,
devices: row.devices,
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.bridgeId = ''
clearTimeout(this.timeout)
this.timeout = setTimeout(() => {
DeviceOfservice({ key: this.ruleForm2.bridge, active: 1 }).then(response => {
const $info = response.data
if ($info.length) {
const $data = $info.map(item => {
return { 'value': item.shortName, 'id': item.id }
})
cb($data)
if ($info.length === 1 && this.ruleForm2.bridge === $info[0].shortName) {
this.ruleForm2.bridgeId = $info[0].id
} else {
this.ruleForm2.bridgeId = ''
}
} else {
cb([])
}
})
}, 3000 * Math.random())
},
handleSelect(item) {
this.ruleForm2.bridgeId = item.id
}
}
}
</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>
|