<template>
|
<div class="sub-account" v-if="!isShowAdd">
|
<div class="search">
|
<div class="left">
|
<div class="id">
|
设备名称/IP/编码
|
<el-input v-model="inputText" placeholder="请输入" clearable></el-input>
|
</div>
|
</div>
|
|
<div class="right">
|
<div class="button searchBtn" @click="fetchDevicesList(1)">搜索</div>
|
<!-- <div class="button resetBtn" @click="reset">重置</div> -->
|
</div>
|
</div>
|
<div class="btns">
|
<div class="button add" @click="addDevice">
|
<span class="iconfont"></span>
|
<span>添加设备</span>
|
</div>
|
</div>
|
|
<div class="table-area">
|
<el-table
|
id="multipleTable"
|
ref="multipleTable"
|
:data="dataList"
|
:fit="true"
|
:default-sort="{ prop: 'devCode', order: 'ascending' }"
|
>
|
<el-table-column prop="devName" label="设备名称" show-overflow-tooltip></el-table-column>
|
<!-- <el-table-column prop="devId" label="设备ID" show-overflow-tooltip></el-table-column> -->
|
<el-table-column prop="devIp" label="设备IP" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="devCode" label="设备编码" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="companyCode" label="企业编码" show-overflow-tooltip></el-table-column>
|
<el-table-column prop="state" label="状态" show-overflow-tooltip>
|
<template slot-scope="scope">
|
<div v-if="scope.row.state == 0" class="status">离线</div>
|
<div v-else class="status green">在线</div>
|
</template>
|
</el-table-column>
|
|
<el-table-column label="操作" align="center" width="100px">
|
<template slot-scope="scope">
|
<span class="iconfont option" @click="editUser(scope.row)">编辑</span>
|
<span class="iconfont option" style="color:red" @click="delUser(scope.row)">删除</span>
|
</template>
|
</el-table-column>
|
</el-table>
|
<div>
|
<el-pagination
|
@current-change="refrash"
|
@size-change="handleSizeChange"
|
:current-page="page"
|
:page-size="size"
|
layout="total, sizes, prev, pager, next, jumper"
|
:page-sizes="[5, 10, 15, 20, 25]"
|
:total="total"
|
background
|
></el-pagination>
|
</div>
|
</div>
|
</div>
|
<div class="sub-account" v-else-if="isShowAdd">
|
<!-- <div class="add-title" @click="isShowAdd = false">
|
<span class="iconfont"></span>
|
<span>子账户管理</span>
|
</div> -->
|
<div class="head-name" style="margin-bottom:20px">编辑设备</div>
|
<el-form
|
:model="ruleForm"
|
:rules="rules"
|
:label-position="'left'"
|
ref="ruleForm"
|
label-width="100px"
|
class="add-ruleForm"
|
>
|
<el-form-item label="设备名称" prop="devName">
|
<el-input v-model="ruleForm.devName" placeholder="请输入设备名称" style="width: 350px"></el-input>
|
</el-form-item>
|
<el-form-item label="设备ID" prop="devId">
|
<el-input v-model="ruleForm.devId" placeholder="请输入设备ID" style="width: 350px"></el-input>
|
</el-form-item>
|
<el-form-item label="设备IP" prop="devIp">
|
<el-input v-model="ruleForm.devIp" placeholder="请输入设备IP" style="width: 350px"></el-input>
|
</el-form-item>
|
<el-form-item label="设备编码" prop="devCode">
|
<el-input v-model="ruleForm.devCode" placeholder="请输入设备编码" style="width: 350px"></el-input>
|
</el-form-item>
|
<el-form-item label="企业编码" prop="companyCode">
|
<el-input v-model="ruleForm.companyCode" placeholder="请输入企业编码" style="width: 350px"></el-input>
|
</el-form-item>
|
</el-form>
|
<div class="right">
|
<div class="button searchBtn" @click="saveUser">保存</div>
|
<div class="button resetBtn" @click="resetUser">重置</div>
|
<div class="button resetBtn" style="margin-left:20px" @click="goback">返回</div>
|
</div>
|
</div>
|
</template>
|
|
<script>
|
import { getDevicesList, devicesCreate, devicesUpdate, devicesDelete } from "@/api/report"
|
|
export default {
|
data() {
|
return {
|
query: {},
|
inputText: "", //输入框内容
|
isShowAdd: false, //是否展示新增弹窗
|
dataList: [],
|
tip: 1,
|
ruleForm: {
|
//y
|
devName: "",
|
devId: "",
|
devIp: "",
|
devCode: "",
|
companyCode: "",
|
|
id: "",
|
createdAt: "",
|
state: "",
|
updatedAt: ""
|
},
|
rules: {
|
devName: [{ required: true, message: "请输入设备名称", trigger: "blur" }],
|
devId: [{ required: true, message: "请输入设备ID", trigger: "blur" }],
|
devIp: [{ required: true, message: "请输入设备IP", trigger: "blur" }],
|
devCode: [{ required: true, message: "请输入设备编码", trigger: "blur" }],
|
companyCode: [{ required: true, message: "请输入企业编码", trigger: "blur" }]
|
},
|
page: 1,
|
size: 10, //分页相关
|
total: 0 //总数,
|
}
|
},
|
async created() {
|
let query = { pageIndex: this.page, pageSize: this.size, keyword: this.inputText }
|
this.query = query
|
let res = await getDevicesList(query)
|
this.dataList = res.data
|
this.total = res.total
|
},
|
mounted() {},
|
methods: {
|
async fetchDevicesList(val) {
|
if (val === 1) {
|
let query = { pageIndex: this.page, pageSize: this.size, keyword: this.inputText }
|
this.query = query
|
let res = await getDevicesList(query)
|
this.dataList = res.data
|
this.total = res.total
|
} else {
|
let res = await getDevicesList(this.query)
|
this.dataList = res.data
|
this.total = res.total
|
}
|
},
|
delUser(row) {
|
console.log(row, "row")
|
this.$confirm("确认要删除设备吗, 是否继续?", "提示", {
|
confirmButtonText: "确定",
|
cancelButtonText: "取消",
|
type: "warning"
|
}).then(async () => {
|
let rsp = await devicesDelete({ id: row.id })
|
if (rsp && rsp.success) {
|
this.$message({
|
type: "success",
|
message: "删除成功!"
|
})
|
}
|
this.fetchDevicesList()
|
})
|
},
|
//分页功能
|
handleSizeChange(size) {
|
this.size = size
|
this.fetchDevicesList()
|
},
|
//分页功能
|
refrash(page) {
|
this.page = page
|
this.fetchDevicesList()
|
},
|
|
addDevice() {
|
this.isShowAdd = true
|
this.tip = 1
|
this.resetUser()
|
}, //y
|
resetUser() {
|
//devName , devId , devIp, devCode, companyCode
|
this.ruleForm = {
|
devName: "",
|
devId: "",
|
devIp: "",
|
devCode: "",
|
companyCode: ""
|
}
|
},
|
saveUser() {
|
this.$refs["ruleForm"].validate((valid) => {
|
if (valid) {
|
if (this.tip === 1) {
|
let params = {
|
devName: this.ruleForm.devName,
|
devId: this.ruleForm.devId,
|
devIp: this.ruleForm.devIp,
|
devCode: this.ruleForm.devCode,
|
companyCode: this.ruleForm.companyCode
|
}
|
// console.log(params, "params")
|
devicesCreate(params).then((res) => {
|
// console.log(res, "res")
|
if (res && res.success) {
|
// Notification({
|
// title: "成功",
|
// showClose: true,
|
// message: res.data,
|
// type: "success"
|
// })
|
this.$message({
|
type: "success",
|
message: res.data
|
})
|
this.goback()
|
this.fetchDevicesList()
|
}
|
})
|
} else if (this.tip === 2) {
|
let params = {
|
devName: this.ruleForm.devName,
|
devId: this.ruleForm.devId,
|
devIp: this.ruleForm.devIp,
|
devCode: this.ruleForm.devCode,
|
companyCode: this.ruleForm.companyCode,
|
id: this.ruleForm.id,
|
createdAt: this.ruleForm.createdAt,
|
state: this.ruleForm.state,
|
updatedAt: this.ruleForm.updatedAt
|
}
|
devicesUpdate(params).then((res) => {
|
console.log(res, "res")
|
if (res && res.success) {
|
this.$message({
|
type: "success",
|
message: res.msg
|
})
|
this.goback()
|
this.fetchDevicesList()
|
}
|
})
|
}
|
} else {
|
return false
|
}
|
})
|
},
|
goback() {
|
this.isShowAdd = false
|
},
|
editUser(row) {
|
this.tip = 2
|
this.isShowAdd = true
|
this.ruleForm.devName = row.devName
|
this.ruleForm.devId = row.devId
|
this.ruleForm.devIp = row.devIp
|
this.ruleForm.devCode = row.devCode
|
this.ruleForm.companyCode = row.companyCode
|
this.ruleForm.id = row.id
|
this.ruleForm.createdAt = row.createdAt
|
this.ruleForm.state = row.state
|
this.ruleForm.updatedAt = row.updatedAt
|
}
|
}
|
}
|
</script>
|
|
<style scoped lang="scss">
|
.sub-account {
|
padding: 20px;
|
.head-name {
|
font-weight: 700;
|
font-size: 16px;
|
line-height: 22px;
|
color: #3d3d3d;
|
border-left: 4px solid #0065ff;
|
padding-left: 10px;
|
}
|
.add-title {
|
font-weight: 700;
|
font-size: 16px;
|
cursor: pointer;
|
line-height: 22px;
|
color: #3d3d3d;
|
margin-bottom: 30px;
|
.iconfont {
|
margin-right: 10px;
|
}
|
}
|
.add-ruleForm::v-deep {
|
.el-input__inner {
|
color: #3d3d3d;
|
border-radius: 4px;
|
border-color: #c0c5cc;
|
height: 32px;
|
line-height: 32px;
|
border-color: #c0c5cc;
|
}
|
.user-tree {
|
.el-form-item__label:before {
|
content: "*";
|
color: #f52323;
|
margin-right: 4px;
|
}
|
.el-form-item__content {
|
display: flex;
|
.tree-box {
|
.t {
|
height: 32px;
|
background: #f0f5fa;
|
border-radius: 3px 3px 0px 0px;
|
line-height: 32px;
|
text-align: center;
|
border-bottom: 1px solid #c0c5cc;
|
}
|
width: 336px;
|
height: 480px;
|
border: 1px solid #c0c5cc;
|
margin-right: 20px;
|
box-sizing: border-box;
|
}
|
}
|
}
|
}
|
.searchBtn {
|
width: 50px;
|
height: 25px;
|
line-height: 25px;
|
font-size: 14px;
|
text-align: center;
|
color: #fff;
|
background: #0065ff;
|
margin-right: 20px;
|
}
|
.right {
|
display: flex;
|
}
|
.resetBtn {
|
width: 50px;
|
height: 25px;
|
line-height: 25px;
|
font-size: 14px;
|
text-align: center;
|
color: #0065ff;
|
box-sizing: border-box;
|
border: 1px solid #0065ff;
|
}
|
.search {
|
display: flex;
|
font-size: 14px;
|
border-bottom: 1px solid #e9ebee;
|
margin-top: 30px;
|
padding-bottom: 20px;
|
.left,
|
.right,
|
.id,
|
.time,
|
.cluster {
|
display: flex;
|
align-items: center;
|
.el-select {
|
width: auto;
|
}
|
}
|
|
.id .el-input ::v-deep {
|
width: 200px;
|
}
|
|
.cluster::v-deep .el-input {
|
width: 300px;
|
|
margin-left: 10px;
|
margin-right: 20px;
|
.el-input__icon {
|
line-height: 32px;
|
}
|
input {
|
border-radius: 0;
|
|
&::-webkit-input-placeholder {
|
color: #999;
|
}
|
|
&:focus {
|
border-color: #0065ff;
|
}
|
}
|
}
|
|
.el-input ::v-deep {
|
width: 200px;
|
margin-left: 10px;
|
margin-right: 20px;
|
height: 32px;
|
line-height: 32px;
|
input {
|
border-radius: 0;
|
height: 32px;
|
line-height: 32px;
|
&::-webkit-input-placeholder {
|
color: #999;
|
}
|
|
&:focus {
|
border-color: #0065ff;
|
}
|
}
|
}
|
|
.el-date-editor {
|
width: 318px;
|
height: 40px;
|
margin-left: 10px;
|
margin-right: 20px;
|
border-radius: 0;
|
|
&::-webkit-input-placeholder {
|
color: #999;
|
}
|
|
&.is-active {
|
border-color: #0065ff;
|
}
|
}
|
}
|
|
.btns {
|
display: flex;
|
margin: 20px 0;
|
text-align: center;
|
.add {
|
margin-right: 20px;
|
width: 126px;
|
height: 32px;
|
background: #0065ff;
|
color: #fff;
|
span {
|
margin-right: 5px;
|
line-height: 32px;
|
font-size: 14px;
|
}
|
}
|
|
.export {
|
width: 126px;
|
height: 32px;
|
border: 1px solid #0065ff;
|
color: #0065ff;
|
box-sizing: border-box;
|
span {
|
margin-right: 5px;
|
line-height: 32px;
|
font-size: 14px;
|
}
|
}
|
}
|
|
.el-table ::v-deep {
|
background-color: rgb(233, 235, 238);
|
padding: 1px;
|
|
&::after {
|
display: none;
|
}
|
|
td.index .cell {
|
padding-left: 16px;
|
padding-right: 4px;
|
}
|
|
.has-gutter tr th {
|
background: #f0f3f5;
|
font-size: 16px;
|
color: #3d3d3d;
|
font-weight: 700;
|
}
|
|
td .cell {
|
color: #3d3d3d;
|
}
|
|
tr:hover > td.el-table__cell {
|
background-color: #fff;
|
}
|
|
.el-table__row--striped .el-table__cell {
|
background-color: #f0f5fa !important;
|
}
|
tr:hover > td.el-table__cell {
|
background-color: #fff;
|
}
|
|
.el-table__row--striped .el-table__cell {
|
background-color: #f0f5fa !important;
|
}
|
|
.status {
|
color: #ff4b33;
|
|
&.green {
|
color: #36b24a;
|
}
|
}
|
|
.option {
|
margin-right: 10px;
|
font-size: 14px;
|
color: rgb(0, 101, 255);
|
cursor: pointer;
|
}
|
}
|
|
.el-pagination ::v-deep {
|
margin-top: 30px;
|
text-align: center;
|
height: 24px;
|
.el-pagination__sizes {
|
margin-right: 0;
|
}
|
|
button {
|
margin: 0;
|
background-color: #fff;
|
border: 1px solid #c0c5cc;
|
border-radius: 2px;
|
}
|
|
.number {
|
background-color: #fff;
|
|
&:not(.disabled):hover {
|
color: #0065ff;
|
}
|
|
&:not(.disabled).active {
|
background-color: #0065ff;
|
color: #fff;
|
}
|
}
|
|
.el-input .el-input__inner {
|
padding-left: 0;
|
|
&:hover,
|
&:focus {
|
border-color: #0065ff;
|
}
|
}
|
}
|
|
.el-select ::v-deep {
|
.el-select__tags-text {
|
color: #3d3d3d;
|
}
|
}
|
}
|
</style>
|
|
<style>
|
.el-date-table td.start-date span,
|
.el-date-table td.end-date span {
|
background-color: #0065ff;
|
}
|
|
.el-button--text span {
|
color: #0065ff;
|
}
|
|
.el-button.is-plain:hover,
|
.el-button.is-plain:focus {
|
color: #0065ff;
|
border-color: #0065ff;
|
}
|
</style>
|