Files
hb_pqs_web/src/views/Process-supervision/components/CycleDetection/table.vue
2025-01-09 19:02:44 +08:00

418 lines
14 KiB
Vue
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<el-form :inline="true" :model="ruleForm" class="demo-form-inline">
<el-form-item>
<Area @click="handleNodeClick" ref="area"></Area>
</el-form-item>
<el-form-item label=" 终端名称:">
<el-input v-model="ruleForm.name" clearable placeholder="请输入终端名称"></el-input>
</el-form-item>
<el-form-item label="生产厂家:">
<el-select
v-model="ruleForm.manufacture"
placeholder="请选择生产厂家"
multiple
collapse-tags
clearable
class="select"
>
<el-option
v-for="item in manufactorList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item label="检测结果:">
<el-select v-model="ruleForm.testResults" placeholder="请选择检测结果" clearable class="select">
<el-option
v-for="item in testResultsList"
:key="item.id"
:label="item.name"
:value="item.id"
></el-option>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" class="ml10" icon="el-icon-search" @click="Monitoring">查询</el-button>
<el-button type="primary" icon="el-icon-download" @click="exportEvent">导出</el-button>
</el-form-item>
<el-form-item>
<el-form-item>
<el-button @click="UploadDetection" type="primary" icon="el-icon-upload2">上传检测报告</el-button>
</el-form-item>
</el-form-item>
</el-form>
<vxe-table
:data="totalData"
:height="height"
border
:row-config="{ isCurrent: true, isHover: true }"
size="mini"
ref="Monitoringpoint"
style="width: 100%"
v-loading="isLoading"
header-cell-class-name="table_header"
@checkbox-change="handleSelectionChange"
>
<vxe-table-column align="center" type="checkbox" width="55"></vxe-table-column>
<vxe-table-column
v-for="(item, index) in tableHeaderMonitoring"
align="center"
:field="item.prop"
:title="item.label"
:min-width="item.width"
:key="index"
:formatter="formFilter"
:show-overflow="true"
></vxe-table-column>
<vxe-column title="操作" width="320" align="center">
<template #default="{ row }">
<el-button
type="primary"
size="mini"
@click="download(row, 0)"
icon="el-icon-download"
:disabled="row.originalReport == null"
>
下载原始数据报告
</el-button>
<el-button
type="primary"
size="mini"
@click="download(row, 1)"
icon="el-icon-download"
:disabled="row.inspectionReport == null"
>
下载检测报告
</el-button>
</template>
</vxe-column>
</vxe-table>
<el-pagination
background
align="right"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
:current-page="ruleForm.pageNum"
:page-sizes="[20, 30, 40, 50, 100]"
:page-size="ruleForm.pageSize"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
class="mt10"
></el-pagination>
<el-dialog
:close-on-click-modal="false"
:title="titles"
:visible.sync="showBatchUpload"
width="30%"
:before-close="handleClose"
>
<el-upload
multiple
action="#"
:http-request="TerminalUpload"
:limit="999"
accept="doc"
:before-remove="beforeRemove"
:before-upload="handleBeforeUpload"
:on-error="handleUploadError"
:file-list="fileList"
:headers="headers"
class="upload-file-uploader"
ref="upload"
>
<el-button @click="fileType = ['doc']" type="primary" icon="el-icon-upload2">选择文件</el-button>
<span :style="`color:#f58003`">  (*传入的检测报告文件格式(终端编号-检测报告(yyyy-MM-dd).docx))</span>
</el-upload>
<span slot="footer" class="dialog-footer">
<el-button @click="handleClose"> </el-button>
<el-button type="primary" @click="BatchUpload"> </el-button>
</span>
</el-dialog>
</div>
</template>
<script>
// import {deptTree} from '@/api/admin/dept'
import { getTerminalPage, importReport, reportDownload } from '@/api/Process-supervision/Terminaldetection/index.js'
import Area from '@/views/components/Area/Area.vue'
import { dicData } from '@/assets/commjs/dictypeData'
export default {
components: { Area },
data() {
return {
headers: {
Authorization: window.sessionStorage.getItem('cntoken')
}, // 设置上传的请求头部
vh: '',
title: '',
// 查询数据
titles: '',
ruleForm: {
name: '',
type: 1,
id: JSON.parse(window.sessionStorage.getItem('Info')).deptId,
manufacture: [],
testResults: '',
pageNum: 1,
pageSize: 20
},
total: 0,
height: null,
isLoading: false,
multipleSelection: [],
testResultsList: [
{
id: 0,
name: '未展开'
},
{
id: 1,
name: '已展开'
}
],
fileList: [],
fileType: [],
uploadType: '',
showBatchUpload: false,
manufactorList: [],
//台区台账表头
tableHeaderMonitoring: [
{ prop: 'id', label: '终端编号', width: 120 },
{ prop: 'name', label: '上产厂家', width: 180 },
{ prop: 'orgName', label: '安装位置', width: 150 },
{ prop: 'inspectionUnit', label: '送检单位', width: 150 },
{ prop: 'testResults', label: '检测结果', width: 120 },
{ prop: 'nextInspectionTime', label: '下次监测时间', width: 170 }
],
totalData: [],
monitorStateList: [], //监测点状态
monitorTypeList: [], //监测点类型
potentialTransFormerTypeList: [], //电压互感器类型
neutralGroundingModeList: [] //中性点接地方式
}
},
created() {
this.getclassificationData()
},
mounted() {
this.setHeight()
window.addEventListener('resize', this.setHeight)
this.Monitoring()
},
beforeDestroy() {
window.removeEventListener('resize', this.setHeight)
},
methods: {
setHeight() {
this.height = window.sessionStorage.getItem('appheight') - 217
},
//获取类型
getclassificationData() {
//监测点状态
this.monitorStateList = dicData('Line_State', [])
//监测点类型
this.monitorTypeList = dicData('Line_Type', [])
//电压互感器类型
this.potentialTransFormerTypeList = dicData('Voltage_Transformer', [])
//中性点接地方式
this.neutralGroundingModeList = dicData('Neutral_Point', [])
//监测点标签
this.resultList = dicData('Monitoring_Labels', [])
//生产厂家
//生产厂家
this.manufactorList = dicData('Dev_Manufacturers', [])
this.manufactorList.forEach(item => {
this.ruleForm.manufacture.push(item.id)
})
},
//查询用户用电信息
Monitoring() {
getTerminalPage(this.ruleForm).then(res => {
this.totalData = res.data.records
this.isLoading = false
})
},
// 数据过滤
formFilter(row, column) {
if (row.column.property == 'testResults') {
return row.row.testResults == 0 ? '未展开' : '已展开'
} else {
return row.row[row.column.property]
}
},
// 区域勾选
handleNodeClick(data) {
this.ruleForm.id = data.id
},
//数据上传
upload() {
if (this.multipleSelection.length == 0) {
this.$message({
showClose: true,
message: '请选择台账!!!',
type: 'warning'
})
return
}
this.$message({
showClose: true,
message: '上传成功!!!',
type: 'success'
})
},
// 重置
Reset() {
// 查询数据
this.ruleForm.searchValue = ''
},
//checkbox选择事件
handleSelectionChange(row) {
this.multipleSelection = row.records
},
//每页条数改变时触发 选择一页显示多少行
handleSizeChange(val) {
this.ruleForm.pageSize = val
this.Monitoring()
},
//当前页改变时触发 跳转其他页
handleCurrentChange(val) {
this.ruleForm.pageNum = val
this.Monitoring()
},
// 上传报告
TerminalUpload(params) {
this.fileList.push(params.file)
// form.append("files", params.file);
},
//导出
exportEvent() {
this.$refs.Monitoringpoint.exportData({
filename: 'export', // 文件名字
sheetName: 'Sheet1',
type: 'xlsx', //导出文件类型 xlsx 和 csv
useStyle: true,
data: this.totalData, // 数据源 // 过滤那个字段导出 //
columnFilterMethod: function (column, $columnIndex) {
return !(column.$columnIndex === 0 || column.$columnIndex === 7)
}
})
},
beforeRemove(file, fileList) {
this.fileList = fileList
},
// 上传前校检格式和大小
handleBeforeUpload(file) {
// 校检文件类型
if (this.fileType) {
let fileExtension = ''
if (file.name.lastIndexOf('.') > -1) {
fileExtension = file.name.slice(file.name.lastIndexOf('.') + 1)
}
const isTypeOk = this.fileType.some(type => {
if (file.type.indexOf(type) > -1) return true
return !!(fileExtension && fileExtension.indexOf(type) > -1)
})
if (!isTypeOk) {
this.$message.error(`文件格式不正确, 请上传${this.fileType.join('/')}格式文件!`)
return false
}
}
this.$message('正在上传文件,请稍候...')
this.number++
return true
},
// 上传检测报告
UploadDetection() {
this.fileType = ['doc']
this.titles = '上传检测报告__支持批量上传'
this.uploadType = 1
this.showBatchUpload = true
},
// 关闭上传弹框
handleClose() {
this.fileList = []
this.showBatchUpload = false
},
// 上传失败
handleUploadError(err) {
this.$message.error(err)
},
BatchUpload() {
let form = new FormData()
form.append('type', this.uploadType)
this.fileList.forEach(item => {
form.append('files', item)
})
importReport(form)
.then(res => {
if (res.type == 'application/json') {
this.$message({
message: '上传成功!',
type: 'success'
})
this.handleClose()
this.Monitoring()
} else {
this.$message({
message: '上传失败!',
type: 'error'
})
}
})
.catch(response => {
// console.log(response);
})
},
// 下载报告
download(row, type) {
reportDownload({
id: row.id,
type: type
}).then(res => {
let blob = new Blob([res], {
type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=UTF-8'
})
const url = window.URL.createObjectURL(blob)
const link = document.createElement('a') // 创建a标签
link.href = url
link.download = type == 1 ? row.inspectionName : row.originalName // 设置下载的文件名
document.body.appendChild(link)
link.click() //执行下载
document.bodyNaNpxoveChild(link)
})
}
}
}
</script>
<style lang="less" scoped>
@import url('../../../../styles/comStyle.less');
::v-deep .vxe-table .cell {
text-align: center;
}
::v-deep .el-tabs--border-card > .el-tabs__content {
padding: 0;
}
.pms {
margin-left: 10px;
}
.obtain {
margin-left: 1220px;
}
</style>