<template>
|
<GlobalWindow width="100%" title="设备详情" :withFooter="false" :visible.sync="visible" :confirm-working="isWorking" @close="close"
|
@confirm="confirm">
|
<div style="width: 100%; position: sticky; top: 0; left: 0; z-index: 999; background: #ffffff;">
|
<div class="tabs">
|
<div class="tab" :class="{ active: activeTabs === 0 }" @click="tabsClick(0)">设备信息</div>
|
<div class="tab" :class="{ active: activeTabs === 1 }" @click="tabsClick(1)">运维记录</div>
|
<div class="tab" :class="{ active: activeTabs === 2 }" @click="tabsClick(2)">巡检记录</div>
|
</div>
|
</div>
|
<div class="main" v-if="activeTabs === 0">
|
<div class="title">
|
<span>基础信息</span>
|
</div>
|
<div class="main_content">
|
<div class="list">
|
<div class="item">
|
<div class="la">设备编码</div>
|
<div class="val">{{ info.code }}</div>
|
</div>
|
<div class="item">
|
<div class="la">设备名称</div>
|
<div class="val">{{ info.name }}</div>
|
</div>
|
<div class="item">
|
<div class="la">设备型号</div>
|
<div class="val">{{ info.modelNo }}</div>
|
</div>
|
<div class="item">
|
<div class="la">设备分类</div>
|
<div class="val">{{ info.categoryName }}</div>
|
</div>
|
<div class="item">
|
<div class="la">设备管理员</div>
|
<div class="val">{{ info.realName || info.realname }}</div>
|
</div>
|
<div class="item">
|
<div class="la">所在位置</div>
|
<div class="val">{{ info.addr }}</div>
|
</div>
|
<div class="item">
|
<div class="la">所属项目</div>
|
<div class="val">{{ info.projectName }}</div>
|
</div>
|
<div class="item">
|
<div class="la">关联房源</div>
|
<div class="val">{{ info.buildingName }} / {{ info.floorName }} / {{info.roomName}}</div>
|
</div>
|
<div class="item">
|
<div class="la">购入时间</div>
|
<div class="val">{{ info.buyDate }}</div>
|
</div>
|
<div class="item">
|
<div class="la">设备状态</div>
|
<spa class="val" v-if="info.status == 0">正常</spa>
|
<spa class="val" v-if="info.status == 1">损坏</spa>
|
<spa class="val" v-if="info.status == 2">报废</spa>
|
</div>
|
<div class="item">
|
<div class="la">供应商</div>
|
<div class="val">{{ info.supplier }}</div>
|
</div>
|
<div class="item" v-if="info.content" style="width: 100%;">
|
<div class="la">运维内容</div>
|
<div class="val">{{ info.content }}</div>
|
</div>
|
<div v-if="info.fileFullUrl" class="item" style="width: 100%;">
|
<div class="la">照片</div>
|
<div class="val">
|
<el-image
|
style="width: 100px; height: 100px"
|
:src="info.fileFullUrl"
|
:preview-src-list="[info.fileFullUrl]">
|
</el-image>
|
</div>
|
</div>
|
<div class="item" style="width: 100%;">
|
<div class="la">附件</div>
|
<div class="val">
|
<el-table
|
:data="info.multifileList ? info.multifileList : []"
|
border
|
style="width: 100%">
|
<el-table-column
|
prop="name"
|
label="附件名称">
|
</el-table-column>
|
<el-table-column
|
prop="userName"
|
label="操作人">
|
</el-table-column>
|
<el-table-column
|
prop="createDate"
|
label="操作时间">
|
</el-table-column>
|
</el-table>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="title">
|
<span>供应商信息</span>
|
</div>
|
<div class="main_content">
|
<div class="list">
|
<div class="item">
|
<div class="la">供应商</div>
|
<div class="val">{{info.supplier}}</div>
|
</div>
|
<div class="item">
|
<div class="la">联系人</div>
|
<div class="val">{{info.supplierLinker}}</div>
|
</div>
|
<div class="item">
|
<div class="la">联系方式</div>
|
<div class="val">{{info.supplierPhone}}</div>
|
</div>
|
</div>
|
</div>
|
<div class="title">
|
<span>维保信息</span>
|
</div>
|
<div class="main_content">
|
<div class="list">
|
<div class="item">
|
<div class="la">维保负责人</div>
|
<div class="val">{{info.maintenanceUserName}}</div>
|
</div>
|
<div class="item">
|
<div class="la">维保到期日</div>
|
<div class="val">{{info.maintenanceOverDate}}</div>
|
</div>
|
<div class="item" style="width: 100%;">
|
<div class="la">维保说明</div>
|
<div class="val">{{info.maintenanceContent}}</div>
|
</div>
|
</div>
|
</div>
|
</div>
|
<div class="main" v-if="activeTabs === 1">
|
<el-table
|
:data="infoList"
|
border
|
style="width: 100%">
|
<el-table-column
|
prop="realName"
|
label="运维人员">
|
</el-table-column>
|
<el-table-column
|
label="设备状态">
|
<template slot-scope="{row}">
|
<span v-if="row.status === 0">正常</span>
|
<span v-if="row.status === 1">损坏</span>
|
<span v-if="row.status === 2">报废</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="remark"
|
label="运维备注">
|
</el-table-column>
|
<el-table-column
|
prop="dealDate"
|
label="运维时间">
|
</el-table-column>
|
<el-table-column
|
label="操作">
|
<template slot-scope="{row}">
|
<el-button type="text" @click="handleDetail(row)">查看详情</el-button>
|
</template>
|
</el-table-column>
|
</el-table>
|
<el-pagination
|
@size-change="handleSizeChange"
|
@current-change="handleCurrentChange"
|
:current-page="page"
|
:page-sizes="[10, 20, 30, 40]"
|
:page-size="pageSize"
|
layout="total, sizes, prev, pager, next, jumper"
|
:total="total">
|
</el-pagination>
|
</div>
|
<div class="main" v-if="activeTabs === 2">
|
<el-table
|
:data="infoList"
|
border
|
style="width: 100%">
|
<el-table-column
|
prop="schemeTitle"
|
label="计划名称">
|
</el-table-column>
|
<el-table-column
|
prop="taskCode"
|
label="任务编号">
|
</el-table-column>
|
<el-table-column
|
label="任务时间">
|
<template slot-scope="{row}">
|
{{row.startDate}} ~ {{row.endDate}}
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="realname"
|
label="巡检人">
|
</el-table-column>
|
<el-table-column
|
label="巡检结果">
|
<template slot-scope="{row}">
|
<span v-if="row.dealStatus === 0">正常</span>
|
<span v-if="row.dealStatus === 1">异常</span>
|
</template>
|
</el-table-column>
|
<el-table-column
|
label="巡检附件">
|
<template slot-scope="{row}">
|
<el-image
|
v-if="row.multifileList && row.multifileList.length > 0"
|
style="width: 100px; height: 100px"
|
:src="row.multifileList[0].fileurlFull"
|
:preview-src-list="[row.multifileList[0].fileurlFull]">
|
</el-image>
|
</template>
|
</el-table-column>
|
<el-table-column
|
prop="content"
|
label="巡检说明">
|
</el-table-column>
|
</el-table>
|
<el-pagination
|
@size-change="handleSizeChange"
|
@current-change="handleCurrentChange"
|
:current-page="page"
|
:page-sizes="[10, 20, 30, 40]"
|
:page-size="pageSize"
|
layout="total, sizes, prev, pager, next, jumper"
|
:total="total">
|
</el-pagination>
|
</div>
|
<Detail ref="DetailRef" />
|
</GlobalWindow>
|
</template>
|
|
<script>
|
import GlobalWindow from '@/components/common/GlobalWindow'
|
import BaseOpera from '@/components/base/BaseOpera'
|
import Detail from './maintainDetail'
|
import { detailById } from '@/api/Inspection/device.js'
|
import { fetchList } from '@/api/Inspection/deviceRecord.js'
|
import { getDetail } from '@/api/Inspection/ywPatrolTask.js'
|
export default {
|
components: {
|
GlobalWindow,
|
Detail
|
},
|
extends: BaseOpera,
|
data() {
|
return {
|
id: '',
|
visible: false,
|
info: {},
|
activeTabs: 0,
|
fileList: [],
|
|
infoList: [],
|
total: 0,
|
pageSize: 10,
|
page: 1
|
}
|
},
|
methods: {
|
handleSizeChange(e) {
|
this.pageSize = e
|
if (this.activeTabs === 1) {
|
this.getyunwei()
|
} else if (this.activeTabs === 2) {
|
this.getXunJian()
|
}
|
},
|
handleCurrentChange(e) {
|
this.page = e
|
if (this.activeTabs === 1) {
|
this.getyunwei()
|
} else if (this.activeTabs === 2) {
|
this.getXunJian()
|
}
|
},
|
getDetail() {
|
this.activeTabs = 0
|
const { id } = this
|
detailById(id).then(res => {
|
this.info = res
|
})
|
},
|
handleDetail(row) {
|
this.$refs.DetailRef.visible = true
|
this.$refs.DetailRef.getDetail(row.id)
|
},
|
close() {
|
this.visible = false
|
this.$emit('close')
|
},
|
tabsClick(val) {
|
this.activeTabs = val
|
this.pageSize = 10
|
this.page = 1
|
this.infoList = []
|
if (val === 1) {
|
this.getyunwei()
|
} else if (val === 2) {
|
this.getXunJian()
|
}
|
},
|
// 获取设备运维记录
|
getyunwei() {
|
fetchList({
|
capacity: this.pageSize,
|
page: this.page,
|
model: {
|
deviceId: this.id
|
}
|
}).then(res => {
|
this.infoList = res.records
|
this.total = res.total
|
})
|
},
|
// 巡检记录
|
getXunJian() {
|
getDetail({
|
capacity: this.pageSize,
|
page: this.page,
|
model: {
|
deviceId: this.id
|
}
|
}).then(res => {
|
this.infoList = res.records
|
this.total = res.total
|
})
|
}
|
}
|
}
|
</script>
|
|
<style lang="scss" scoped>
|
@import '@/assets/style/variables.scss';
|
.tabs {
|
border-bottom: 1px solid #DFE2E8;
|
display: flex;
|
.tab {
|
height: 58px;
|
line-height: 58px;
|
font-size: 16px;
|
color: #666666;
|
margin-right: 30px;
|
cursor: pointer;
|
}
|
|
.active {
|
font-weight: 500;
|
color: $primary-color;
|
border-bottom: 2px solid $primary-color;
|
}
|
}
|
.main {
|
padding-top: 20px;
|
|
.title {
|
font-weight: 500;
|
font-size: 18px;
|
color: $primary-color;
|
margin-bottom: 10px;
|
display: flex;
|
align-items: center;
|
|
.status {
|
padding: 0 6px;
|
height: 22px;
|
line-height: 22px;
|
border-radius: 2px;
|
border: 1px solid #00BA92;
|
color: #00BA92;
|
font-weight: 400;
|
font-size: 12px;
|
margin-left: 10px;
|
}
|
|
.primaryColor {
|
border: 1px solid $primary-color;
|
}
|
|
.gray {
|
color: gray;
|
border: 1px solid gray;
|
}
|
}
|
|
.list {
|
display: flex;
|
flex-wrap: wrap;
|
/* background: #F7F7F7; */
|
border-radius: 2px;
|
padding: 15px 20px;
|
margin-bottom: 16px;
|
width: 100%;
|
|
.item {
|
width: 33.3%;
|
margin-bottom: 14px;
|
|
.photo {
|
width: 92px;
|
height: 92px;
|
}
|
|
.la {
|
color: #7f7f7f;
|
margin-bottom: 6px;
|
}
|
}
|
|
.item2 {
|
width: 100%;
|
display: flex;
|
align-items: center;
|
}
|
|
.max {
|
width: 100%;
|
}
|
}
|
|
.main_content {
|
display: flex;
|
width: 100%;
|
}
|
}
|
|
.file_list {
|
display: flex;
|
flex-wrap: wrap;
|
|
.avatar-uploader {
|
width: 92px;
|
height: 92px;
|
display: flex;
|
justify-content: center;
|
align-items: center;
|
border: 1px dashed #d9d9d9;
|
}
|
|
.item {
|
width: 92px;
|
max-height: 92px;
|
margin-left: 10px;
|
position: relative;
|
border: 1px dashed #d9d9d9;
|
border-radius: 4px;
|
display: flex;
|
align-items: center;
|
justify-content: center;
|
|
.close {
|
font-size: 20px;
|
position: absolute;
|
right: -10px;
|
top: -10px;
|
z-index: 111;
|
color: red;
|
cursor: pointer;
|
}
|
|
.img {
|
width: 92px;
|
max-height: 92px;
|
}
|
}
|
}
|
</style>
|