初次提交

This commit is contained in:
2025-06-30 10:17:15 +08:00
commit 5446088524
989 changed files with 365987 additions and 0 deletions

View File

@ -0,0 +1,764 @@
<template>
<section class="realtime-wrapper">
<el-form id="searchForm" :model="form">
<el-row :gutter="5" class="search-row">
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
<el-form-item :label="$t('alarm.type') + ':'" label-width="90px">
<el-select
v-model="form.type"
:placeholder="$t('alarm.placeSelectType')"
style="width: 100%"
filterable
@change="SelectType"
>
<el-option
v-for="item in TypeOptions"
:key="item.typeId"
:label="item.name"
:value="item.deviceType"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="12" :md="12" :lg="8" :xl="8">
<el-form-item :label="$t('surveillance.name') + ':'" label-width="90px">
<el-input
v-model="form.name"
maxlength="30"
:placeholder="$t('surveillance.placeholderInput')"
class="input-box"
/>
</el-form-item>
</el-col>
<el-col :xs="24" :sm="10" :md="10" :lg="4" :xl="4">
<el-button
type="primary"
icon="el-icon-search"
:loading="searchLoading"
@click="on_refresh"
>{{ $t('surveillance.query') }}</el-button>
</el-col>
<el-col :xs="24" :sm="14" :md="14" :lg="4" :xl="4" style="display: flex;justify-content: end;">
<el-button
type="primary"
icon="el-icon-refresh"
:loading="SyncLoading"
@click="handleSynchronous"
>{{ $t('alarm.synchronous') }}</el-button>
<!-- <el-button
type="primary"
icon="el-icon-plus"
:loading="addLoading"
@click="handleAdd"
>新增</el-button> -->
<el-upload
class="upload-demo"
:action="uploadUrl"
:headers="headers"
:show-file-list="false"
:file-list="fileList"
:on-success="handleOnSuccess"
:on-error="handleOnError"
/>
<!-- <el-button
type="primary"
:loading="exportLoading"
icon="el-icon-upload2"
class="reset-btn"
>导入</el-button>
</el-upload>
<el-button
type="primary"
:loading="uploadLoading"
class="reset-btn"
icon="el-icon-download"
@click="handleExport"
>导出</el-button> -->
<el-button
type="danger"
icon="el-icon-delete"
:loading="deleteLoading"
@click="handleDelete"
>{{ $t('alarm.delete') }}</el-button>
</el-col>
</el-row>
</el-form>
<div class="table-wrapper">
<el-table
ref="table_data"
v-loading="load_data"
header-align="center"
row-key="id"
:height="$setAutoTableHeight(46,searchHeight)"
:data="table_data"
style="width: 100%"
@selection-change="handleSelectionChange"
>
<el-table-column
type="selection"
width="55"
:reserve-selection="true"
/>
<el-table-column
prop="deviceName"
:label="$t('alarm.deviceName')"
show-overflow-tooltip
/>
<el-table-column prop="deviceType" :label="$t('alarm.deviceType')" />
<el-table-column prop="colName" :label="$t('alarm.cName')" />
<el-table-column prop="col" :label="$t('alarm.eName')" />
<el-table-column prop="info0" :label="$t('alarm.recMessage')" />
<el-table-column prop="info1" :label="$t('alarm.genMessage')" />
<el-table-column :label="$t('alarm.operation')" align="center" width="200">
<template slot-scope="scope">
<div class="table-column-btn">
<el-button
type="text"
size="mini"
icon="el-icon-edit"
@click="handleEdit(scope.row)"
>{{ $t('alarm.edit') }}</el-button>
</div>
</template>
</el-table-column>
</el-table>
<Pagingbar>
<div slot="page">
<el-pagination
:current-page="currentPage"
:page-size="pageSize"
:page-sizes="pageSizes"
layout="total, sizes, prev, pager, next, jumper"
:total="total"
@current-change="handleCurrentChange"
@size-change="handleSizeChange"
/>
</div>
</Pagingbar>
</div>
<el-dialog
:append-to-body="false"
:visible.sync="dialogVisible"
width="50%"
:title="dialogTitle"
center
@close="onCancel"
>
<el-row class="top-search">
<el-col :span="24" :offset="0">
<el-form
ref="formModel"
:model="formModel"
label-width="135px"
label-position="right"
>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item
v-if="dialogType === 'add'"
:label="$t('alarm.cName')"
prop="colName"
>
<el-input
v-model="formModel.colName"
:placeholder="$t('alarm.placeholderCName')"
class="input-with-select"
readonly
@focus="openTableDialog"
>
<el-button
slot="append"
icon="el-icon-search"
:loading="table_dialog_loading"
@click="openTableDialog"
/>
</el-input>
</el-form-item>
<el-form-item v-else :label="$t('alarm.cName')" prop="colName">
<el-input
v-model="formModel.colName"
:placeholder="$t('alarm.placeholderCName')"
class="input-with-select"
readonly
/>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('alarm.eName')" prop="col">
<el-input
v-model="formModel.col"
readonly
/></el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="12">
<el-form-item :label="$t('alarm.deviceTypeName')" prop="deviceType">
<el-input v-model="formModel.deviceType" readonly />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item :label="$t('alarm.type')" prop="sensType">
<el-input
v-model="sensType"
readonly
/>
</el-form-item>
</el-col>
</el-row>
<el-row :gutter="20">
<el-col :span="24">
<el-form-item label-width="195px" :label="$t('alarm.recMessage')" prop="info0">
<el-input
v-model="formModel.info0"
:disabled="formModel.sensType !== 1"
:placeholder="$t('alarm.placeholderRecMessage')"
maxlength="200"
/>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item label-width="195px" :label="$t('alarm.genMessage')" prop="info1">
<el-input
v-model="formModel.info1"
:disabled="formModel.sensType !== 1"
:placeholder="$t('alarm.placeholderGenMessage')"
maxlength="200"
/></el-form-item>
</el-col>
</el-row>
</el-form>
</el-col>
</el-row>
<div slot="footer" class="dialog-footer">
<el-button plain @click="onCancel"> {{ $t('alarm.cancel') }} </el-button>
<el-button type="primary" @click="handleTosubmit"> {{ $t('alarm.sure') }} </el-button>
</div>
</el-dialog>
<el-dialog
:append-to-body="false"
:visible.sync="tableDialog"
width="50%"
:title="$t('alarm.selectName')"
center
@close="onTableCancel"
>
<el-row>
<el-col class="tableCol" :span="12" style="color: #fff">
{{ $t('alarm.name') }}
<el-input
v-model="formModel.name"
maxlength="30"
:placeholder="$t('alarm.placeholderCName')"
style="width: 70%"
@blur="blurChangeTable"
/>
</el-col>
</el-row>
<el-table
ref="dialog_table_data"
:key="dialog_table_key"
v-loading="dialog_load_data"
header-align="center"
:height="$setTableHeight(300)"
row-key="id"
:data="dialog_table_data"
style="width: 100%"
@selection-change="handleDialogSelectionChange"
>
<el-table-column
:reserve-selection="true"
type="selection"
width="55"
/>
<el-table-column
prop="colName"
:label="$t('alarm.cName')"
show-overflow-tooltip
/>
<el-table-column prop="col" :label="$t('alarm.eName')" />
<el-table-column prop="deviceTypeName" :label="$t('alarm.deviceTypeName')" />
</el-table>
<Pagingbar>
<div slot="page">
<el-pagination
:current-page="col_currentPage"
:page-size="col_pageSize"
:page-sizes="col_pageSizes"
layout="total, sizes, prev, pager, next, jumper"
:total="col_total"
@current-change="col_handleCurrentChange"
@size-change="col_handleSizeChange"
/>
</div>
</Pagingbar>
<div slot="footer" class="dialog-footer">
<el-button plain @click="onTableCancel"> {{ $t('alarm.cancel') }} </el-button>
<el-button type="primary" @click="handleTableTosubmit">
{{ $t('alarm.sure') }}
</el-button>
</div>
</el-dialog>
</section>
</template>
<script>
import { getToken } from '@/utils/auth'
import { pageSize, pageSizes } from '@/config'
import Pagingbar from '@/components/Pagingbar'
import { handleDownExcel } from '@/utils'
import {
GetDeviceType,
SyncDeviceColDefine,
GetDeviceColDefinePage,
UpdataDeviceColDefine,
AddDeviceColDefine,
DelDeviceColDefine,
GetDeviceTypeCol
} from '@/api/alarm/alarm-definition'
export default {
components: { Pagingbar },
data() {
return {
form: {
type: null,
name: null
},
stationId: null,
searchLoading: false,
load_data: false,
dialog_load_data: false,
addLoading: false,
exportLoading: false,
uploadLoading: false,
deleteLoading: false,
table_data: [],
dialog_table_data: [],
TypeOptions: [],
uploadUrl:
process.env.VUE_APP_BASE_API + '/flow/deviceColDefine/importExcel',
headers: {
authorization: getToken(),
lang: sessionStorage.getItem('language') === 'en' ? 'en_US' : 'zh_CN'
},
paramsData: {},
fileList: [],
currentPage: 1,
col_currentPage: 1,
// 数据总条目
total: 0,
col_total: 0,
// 每页显示多少条数据
pageSize: pageSize,
col_pageSize: pageSize,
col_pageSizes: pageSizes,
pageSizes: pageSizes,
dialogVisible: false,
tableDialog: false,
dialogTitle: this.$t('alarm.addAlarmDefinition'),
dialogType: 'add',
formModel: {
colName: null,
col: null,
deviceType: null,
deviceName: null,
info0: null,
info1: null
},
table_dialog_loading: false,
delIdList: [],
selectDialogData: [],
dialog_table_key: 0,
SyncLoading: false
}
},
computed: {
stations: function() {
return this.$store.getters.stations || []
},
currentStation() {
return this.$store.getters.currentStation || undefined
},
sensType() {
if (this.formModel.sensType === 1) {
return this.$t('alarm.yx')
} else if (this.formModel.sensType === 2) {
return this.$t('alarm.yc')
} else {
return this.$t('alarm.yk')
}
// return this.formModel.sensType === 1 ? '遥信' : '遥测'
},
searchHeight() {
return this.$store.getters.searchHeight
}
},
watch: {
currentStation: {
async handler(val) {
if (val && val.id) {
this.stationId = val.id
this.form.type = null
this.table_data = []
this.form.name = ''
this.currentPage = 1
this.TypeOptions = []
this.total = 0
this.delIdList = []
this.col_currentPage = 1
this.GetDeviceType()
if (this.$refs.table_data) {
this.$nextTick(() => {
this.$refs.table_data.clearSelection()
})
}
}
},
deep: true,
immediate: true
}
},
created() {
},
methods: {
async GetDeviceType() {
const { data } = await GetDeviceType({ stationId: this.stationId })
this.TypeOptions = data
this.form.type = data[0].deviceType
this.get_table_data()
// this.GetDeviceTypeCol()
},
async GetDeviceTypeCol() {
const params = {
stationId: this.stationId,
deviceType: this.form.type,
name: this.formModel.name,
pageNum: this.col_currentPage,
pageSize: this.col_pageSize
}
this.dialog_load_data = true
try {
const res = await GetDeviceTypeCol(params)
this.dialog_table_data = res.data.list
this.col_total = res.data.totalRows
} catch (error) {
// console.log(error)
} finally {
this.dialog_load_data = false
}
},
blurChangeTable() {
// this.GetDeviceTypeCol()
},
// 查询
on_refresh() {
if (this.TypeOptions.length > 0) {
this.currentPage = 1
this.get_table_data()
this.delIdList = []
this.$refs.table_data.clearSelection()
} else {
return this.$message.error(this.$t('alarm.noDevice'))
}
// this.GetDeviceTypeCol()
},
async get_table_data() {
this.load_data = true
try {
const res = await GetDeviceColDefinePage({
deviceType: this.form.type,
pageNum: this.currentPage,
pageSize: this.pageSize,
name: this.form.name
})
this.table_data = res.data.list
this.total = res.data.totalRows
} catch (error) {
// console.log(error);
} finally {
this.load_data = false
}
},
// 编辑
handleEdit(row) {
this.dialogVisible = true
this.dialogTitle = this.$t('alarm.editAlarmDefinition')
this.dialogType = 'edit'
this.formModel = Object.assign({}, row)
},
// 选择类型
SelectType() {
// this.GetDeviceTypeCol()
},
// 同步
async handleSynchronous() {
if (this.TypeOptions.length) {
this.SyncLoading = true
try {
await SyncDeviceColDefine({
stationId: this.stationId,
deviceType: this.form.type
})
this.$notify({
title: this.$t('alarm.tip'),
message: this.$t('alarm.synchronousSuccess'),
type: 'success',
duration: 2000
})
} catch (error) {
// console.log(error)
} finally {
this.SyncLoading = false
this.get_table_data()
this.delIdList = []
this.$refs.table_data.clearSelection()
}
} else {
return this.$message.error(this.$t('alarm.noDevice'))
}
},
// 新增
handleAdd() {
this.dialogVisible = true
this.dialogType = 'add'
this.dialogTitle = this.$t('alarm.addAlarmDefinition')
},
// 选择表格数据
handleSelectionChange(val) {
this.delIdList = []
val.forEach((el) => {
this.delIdList.push(el.id)
})
},
// 选取弹出框表格数据
handleDialogSelectionChange(val) {
this.selectDialogData = val
if (val.length > 1) {
this.$refs.dialog_table_data.clearSelection()
this.$refs.dialog_table_data.toggleRowSelection(val.pop())
}
},
// 删除
handleDelete() {
if (this.delIdList.length) {
this.$confirm(this.$t('alarm.deleteAlarmDefinition'), this.$t('alarm.tip'), {
confirmButtonText: this.$t('alarm.sure'),
cancelButtonText: this.$t('alarm.cancel'),
type: 'warning',
showClose: false,
center: true
}).then(async() => {
this.deleteLoading = true
try {
await DelDeviceColDefine({ idList: this.delIdList })
this.$notify({
title: this.$t('alarm.tip'),
message: this.$t('alarm.deleteSuccess'),
type: 'success',
duration: 2000
})
} catch (error) {
// console.log(error)
} finally {
this.delIdList = []
this.deleteLoading = false
this.$refs.table_data.clearSelection()
this.get_table_data()
}
})
} else {
this.$notify({
title: this.$t('alarm.tip'),
message: this.$t('alarm.selectDeleteDefinition'),
type: 'warning',
duration: 2000
})
}
},
// 上传成功
handleOnSuccess(file, fileList) {
if (file.code === 200) {
this.$notify({
title: this.$t('alarm.importFileSuccess'),
message: file.msg,
type: 'success',
duration: 2000
})
this.getAllCurveTemp()
} else {
this.$notify({
title: this.$t('alarm.importFileError'),
message: file.msg,
type: 'error',
duration: 2000
})
}
},
// 上传失败
handleOnError(file, fileList) {
this.$notify({
title: this.$t('alarm.importFileError'),
message: file.msg,
type: 'error',
duration: 2000
})
},
// 导出
handleExport() {
const params = {
title: '告警定义模板'
}
handleDownExcel(
'/flow/deviceColDefine/exportTemplate',
params,
(callback) => {
console.log(callback)
}
)
},
handleSizeChange(val) {
this.currentPage = 1
this.pageSize = val
this.get_table_data()
},
// 页码选择
handleCurrentChange(val) {
this.currentPage = val
this.get_table_data()
},
col_handleCurrentChange(val) {
this.col_currentPage = val
// this.GetDeviceTypeCol()
},
col_handleSizeChange(val) {
this.col_currentPage = 1
this.col_pageSize = val
// this.GetDeviceTypeCol()
},
// 关闭新增编辑框
onCancel() {
this.dialogVisible = false
this.formModel = {
colName: null,
col: null,
deviceType: null,
deviceName: null,
info0: null,
info1: null,
name: null
}
// this.$refs.dialog_table_data.clearSelection()
this.col_currentPage = 1
},
// 关闭字段选择框
onTableCancel() {
this.tableDialog = false
},
// 新增确认
async handleTosubmit() {
const params = {
col: this.formModel.col,
colName: this.formModel.colName,
deviceName: this.formModel.deviceName,
deviceType: this.formModel.deviceType,
id: this.formModel.id,
info0: this.formModel.info0 ? this.formModel.info0 : '',
info1: this.formModel.info1 ? this.formModel.info1 : ''
}
if (this.dialogType === 'add') {
try {
await AddDeviceColDefine(params)
this.$notify({
title: this.$t('alarm.success'),
message: this.$t('alarm.addSuccess'),
type: 'success',
duration: 2000
})
} catch (error) {
// console.log(error);
} finally {
this.dialogVisible = false
this.get_table_data()
}
}
if (this.dialogType === 'edit') {
try {
await UpdataDeviceColDefine(params)
this.$notify({
title: this.$t('alarm.success'),
message: this.$t('alarm.editSuccess'),
type: 'success',
duration: 2000
})
} catch (error) {
// console.log(error);
} finally {
this.dialogVisible = false
this.get_table_data()
}
}
},
// 确认字段
handleTableTosubmit() {
this.tableDialog = false
this.formModel = this.selectDialogData[0]
// console.log(this.selectDialogData)
},
// 打开字段选择
openTableDialog() {
this.tableDialog = true
// this.GetDeviceTypeCol()
}
}
}
</script>
<style lang="scss" scoped>
.realtime-wrapper {
width: 100%;
height: 100%;
background:var(--table-bg);
padding: 10px;
box-shadow: inset 0px 2px 16px 0px rgba(0, 148, 255, 0.15);
display: flex;
flex-direction: column;
.upload-demo {
display: inline-block;
margin-left: 5px;
margin-right: 10px;
}
.tableCol {
display: flex;
align-items: center;
}
.table-wrapper{
flex: 1;
margin-top: 10px;
}
}
</style>