qa-regulatory-gwj-vue/src/views/alarm/alarmVideo/components/alarmInfoList.vue

598 lines
20 KiB
Vue

<template>
<div class="app-container">
<div>
<el-button icon="el-icon-arrow-left" @click="goBack"></el-button>
</div>
<el-form label-width="100px">
<el-row>
<el-col :span="8">
<el-form-item label="报警值">
<el-input v-model="KEYWORDS" placeholder="请输入报警值"/>
</el-form-item>
</el-col>
<el-col :span="8">
<el-form-item label-width="10px">
<el-button v-waves type="primary" icon="el-icon-search" @click="getQuery">
</el-button>
<el-button type="success" icon="el-icon-view" size="mini" @click="getReset">
</el-button>
</el-form-item>
</el-col>
</el-row>
</el-form>
<el-table
v-loading="listLoading"
ref="multipleTable"
:row-key="getRowKey"
:data="varList"
:header-cell-style="{
'font-weight': 'bold',
'color': '#000'
}"
tooltip-effect="dark"
border
fit
highlight-current-row
>
<el-table-column
:reserve-selection="true"
type="selection"
width="55"
align="center"/>
<el-table-column type="index" label="序号" width="50" align="center" />
<el-table-column prop="SOURCE_NAME" label="报警源名称" align="center"/>
<el-table-column prop="SOURCE_VALUE" label="报警值" align="center"/>
<el-table-column prop="ALARM_PEOPLE_NAME" label="报警处理人" align="center"/>
<el-table-column prop="ALARM_AREA" label="报警区域" align="center"/>
<el-table-column prop="ALARM_TIME" label="报警时间" align="center"/>
<el-table-column prop="IS_ALARM" label="是否报警信息" align="center">
<template slot-scope="{row}">
{{ row.IS_ALARM === '0' || row.IS_ALARM == null ? '未核定' : row.IS_ALARM === '1'? '是' : '否' }}
</template>
</el-table-column>
<el-table-column prop="VIDEO_COUNT" label="视频数" align="center"/>
<el-table-column label="操作" align="center" width="300">
<template slot-scope="{row}">
<el-button type="success" icon="el-icon-search" size="mini" @click="viewNearbyCameras(row)">查看附近摄像头</el-button>
</template>
</el-table-column>
</el-table>
<div class="page-btn-group">
<div/>
<pagination :total="total" :page.sync="listQuery.page" :limit.sync="listQuery.limit" @pagination="getList" />
</div>
<el-dialog :visible.sync="dialogFormMap" title="定位" width="1050px" class="dy-dialog">
<div id="map" />
<div slot="footer" class="dialog-footer">
<span>经度:</span>
<el-input v-model="addForm.info.LONGITUDE" style="width: 200px" placeholder="请输入内容" disabled />
<span>纬度:</span>
<el-input v-model="addForm.info.LATITUDE" style="width: 200px" placeholder="请输入内容" disabled />
<el-button @click="dialogFormMap = false">取 消</el-button>
<el-button type="primary" @click="setPosition()">确 定</el-button>
</div>
</el-dialog>
<el-dialog :visible.sync="addForm.dialogVisible" :title="addForm.dialogType==='add'?'新增':'编辑'" width="500px">
<el-form ref="addForm" :model="addForm.info" :rules="addForm.rules" label-width="110px">
<el-form-item label="是否报警信息:" prop="IS_ALARM">
<el-select v-model="addForm.info.IS_ALARM" placeholder="请选择">
<el-option
v-for="item in typeList"
:key="item.value"
:label="item.name"
:value="item.value"/>
</el-select>
</el-form-item>
<div v-if="addForm.info.IS_ALARM === '2'">
<el-form-item label="原因:" prop="REASON">
<el-input v-model="addForm.info.REASON" style="width:206px" placeholder="请输入原因"/>
</el-form-item>
</div>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button @click="back">取 消</el-button>
<el-button type="primary" @click="confirm">确 定</el-button>
</div>
</el-dialog>
<el-dialog v-if="dialogVideo" :visible.sync="dialogVideo" :show-close="false" title="视频2" width="600px">
<iframe :src="VIDEOURL" width="100%" height="380" allowfullscreen allow="autoplay; fullscreen;microphone" style="position: relative;border:none"/>
<div slot="footer" class="dialog-footer">
<el-button @click="back">取 消</el-button>
</div>
</el-dialog>
<el-dialog v-if="dialogVideoHLS" :visible.sync="dialogVideoHLS" :before-close="handleBack" :show-close="false" title="视频" width="600px">
<div id="aLiVideoPlayer" class="prism-player"/>
<div slot="footer" class="dialog-footer">
<el-button @click="back">取 消</el-button>
</div>
</el-dialog>
<el-dialog v-if="dialogVideoAll" :visible.sync="dialogVideoAll" :before-close="handleBack" title="视频" width="1200px">
<!-- <iframe src="http://192.168.192.121:10800/?menu=no/#/screen" width="100%" height="500px" allowfullscreen allow="autoplay; fullscreen" style="position: relative;border:none"/>-->
<div style="display: flex;flex-wrap: wrap;justify-content: space-between">
<div v-for="(video,index) in videoList" :key="index" style="margin-bottom: 10px;width: 45%">
<div v-if="video.HLSVIDEOURL" :id="'aLiVideoPlayer'+index" class="prism-player"/>
</div>
</div>
<div slot="footer" class="dialog-footer">
<el-button @click="back"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import Pagination from '@/components/Pagination' // 通过 el-pagination二次打包
import { requestFN } from '@/utils/request'
import waves from '@/directive/waves' // waves directive
import TiandiMap from '../../../../components/TianMap/TiandiMap'
import SelectTree from '@/components/SelectTree'
export default {
components: { Pagination, TiandiMap, SelectTree },
directives: { waves },
data() {
return {
map: null,
marker: null,
BMap: '',
clientHeight: 500,
inputLocation: '',
msg: 'add',
config: config,
listLoading: true,
dialogForm: false,
dialogImageUrl: '',
dialogVisible: false,
dialogSelect: false,
add: '',
del: '',
edit: '',
dialogFormMap: false,
listQuery: {
page: 1,
limit: 20
},
total: 0,
typeList: [{ name: '是', value: '1' }, { name: '否', value: '2' }],
KEYWORDS: '',
dates: [],
varList: [],
LATITUDE: '',
LONGITUDE: '',
zoom: 10,
rules: {
VIDEONAME: [{ required: true, message: '视频名称不能为空', trigger: 'blur' }],
CODE: [{ required: true, message: '摄像头编号不能为空', trigger: 'blur' }]
},
dialogVideo: false,
dialogVideoHLS: false,
dialogVideoBack: false,
dialogVideoAll: false,
treeDataInspectDept: [],
defaultProps: {
value: 'id',
children: 'nodes',
label: 'name'
},
INSPECTOR_List: [],
RESPONSIBLE_USER_List: [{ NAME: JSON.parse(sessionStorage.getItem('user')).NAME, USER_ID: JSON.parse(sessionStorage.getItem('user')).USER_ID }], // 隐患责任人
addForm: {
dialogType: 'add', // 增or改
dialogVisible: false,
rules: {
LONGITUDE: [{ required: true, message: '不可为空', trigger: 'blur' }],
LATITUDE: [{ required: true, message: '不可为空', trigger: 'blur' }],
RECIPIENT: [{ required: true, message: '不可为空', trigger: 'blur' }],
TYPE: [{ required: true, message: '不可为空', trigger: 'blur' }]
},
info: {
ALARMINFORMATION_ID: '',
ALARMDEVICEMAINTENANCE_ID: '',
ALARM_TIME: '',
ALARM_AREA: '',
LONGITUDE: '',
LATITUDE: '',
IS_ALARM: '',
REASON: ''
}
}
}
},
created() {
this.getList()
this.getDict()
this.hasButton()
},
methods: {
clearAddform() {
console.log(66666)
this.addForm.info.ALARM_TIME = ''
},
// 获取人员列表
getInspectorList(DEPARTMENT_ID, i) {
if (DEPARTMENT_ID) {
requestFN(
'/user/listAllManageAndCorp',
{
CURRENT_INSPECTED_DEPARTMENT_ID: this.CURRENT_INSPECTED_DEPARTMENT_ID,
DEPARTMENT_ID: DEPARTMENT_ID,
NOMAIN: '1'
}
).then((data) => {
this.INSPECTOR_List[i] = data.userList
this.$forceUpdate()
}).catch((e) => {
})
}
},
updateInspecteDept(id, i, item) {
// 获取人员列表
if (id) {
requestFN(
'/user/listAllManageAndCorp',
{
DEPARTMENT_ID: id
}
).then((data) => {
this.INSPECTOR_List[i] = data.userList
this.$forceUpdate()
}).catch((e) => {
})
}
this.addForm.info.inspectorList[i].INSPECTION_USER_ID = ''
this.addForm.info.inspectorList[i].USER_SIDE = ''
this.getInspectorList(DEPARTMENT_ID, i)
},
// 删除接受报警人
delInspectorRow(row, index) {
if (this.validStr(row.INSPECTION_DEPARTMENT_ID) || this.validStr(row.INSPECTION_USER_ID)) {
this.$confirm('确定要移除第' + (index + 1) + '个接受报警人吗?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.addForm.info.inspectorList.splice(index, 1)
this.INSPECTOR_List.splice(index, 1)
}).catch(() => {
})
} else {
this.addForm.info.inspectorList.splice(index, 1)
this.INSPECTOR_List.splice(index, 1)
}
},
addInspector() {
console.log(this.addForm.info.inspectorList)
this.addForm.info.inspectorList.push({ INSPECTION_INSPECTOR_ID: '', INSPECTION_DEPARTMENT_ID: '', INSPECTION_USER_ID: '', USER_SIDE: '' })
this.INSPECTOR_List.push([])
},
/* 改为从接受报警人中选取 */
changeHiddenUserList(item, data) {
item.USER_SIDE = data.USER_SIDE
for (let i = 0; i < this.addForm.info.inspectorList.length; i++) {
this.INSPECTOR_List[i].forEach(item => {
if (this.addForm.info.inspectorList[i].INSPECTION_USER_ID === item.USER_ID) {
const index = this.RESPONSIBLE_USER_List.findIndex(vector => vector.USER_ID === item.USER_ID)
if (index < 0) {
this.RESPONSIBLE_USER_List.push(item)
}
}
})
}
},
// 搜索
getReset() {
this.KEYWORDS = ''
this.listQuery = {
page: 1,
limit: 20
}
this.total = 0
this.getQuery()
},
/**
* 初始化天地图对象
*/
initTDT() {
return new Promise((resolve, reject) => {
if (window.T) {
console.log('天地图初始化成功...')
resolve(window.T)
reject('error')
}
}).then(T => {
window.T = T
})
},
/**
* 初始化地图
* @param {*} lng 经度
* @param {*} lat 纬度
* @param {*} zoom 缩放比例(1~18)
*/
initMap(lng, lat, zoom) {
this.initTDT().then((T) => {
const imageURL = 'http://t0.tianditu.gov.cn/img_w/wmts?' + 'SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&LAYER=img&STYLE=default&TILEMATRIXSET=w&FORMAT=tiles' + '&TILEMATRIX={z}&TILEROW={y}&TILECOL={x}&tk=e8a16137fd226a62a23cc7ba5c9c78ce'
// 创建自定义图层对象
this.lay = new window.T.TileLayer(imageURL, { minZoom: 1, maxZoom: 18 })
// 初始化地图对象
this.map = new window.T.Map('map')
this.initCenter(lng, lat, zoom)
})
},
initCenter(lng, lat, zoom) {
// 设置显示地图的中心点和级别
if (!this.addForm.info.LONGITUDE && !this.addForm.info.LATITUDE) {
this.map.centerAndZoom(new window.T.LngLat(119.58, 39.94), zoom)
this.marker && this.map.removeOverLay(this.marker)
} else {
this.map.centerAndZoom(new window.T.LngLat(lng, lat), zoom)
this.marker && this.map.removeOverLay(this.marker)
this.addForm.info.LONGITUDE = lng
this.addForm.info.LATITUDE = lat
this.marker = new window.T.Marker(new window.T.LngLat(lng, lat))
// 向地图上添加标注
this.map.addOverLay(this.marker)
}
// 创建卫星和路网的混合视图
this.map.setMapType(window.TMAP_HYBRID_MAP)
// 允许鼠标滚轮缩放地图
this.map.enableScrollWheelZoom()
// 允许鼠标移动地图
this.map.enableInertia()
// 向地图上添加标注
this.map.addEventListener('click', this.MapClick)
},
MapClick(event) {
this.marker && this.map.removeOverLay(this.marker)
this.addForm.info.LONGITUDE = event.lnglat.getLng()
this.addForm.info.LATITUDE = event.lnglat.getLat()
this.marker = new window.T.Marker(new window.T.LngLat(event.lnglat.getLng(), event.lnglat.getLat()))
// 向地图上添加标注
this.map.addOverLay(this.marker)
},
handleMap(row) {
this.dialogFormMap = true
this.$nextTick(() => {
if (!this.map) this.initMap(this.addForm.info.LONGITUDE, this.addForm.info.LATITUDE, 16)
else this.initCenter(this.addForm.info.LONGITUDE, this.addForm.info.LATITUDE, 16)
})
},
getRowKey(row) {
return row.ALARMINFORMATION_ID
},
goBack() {
this.$parent.activeName = 'list'
},
// 搜索
getQuery() {
this.$refs.multipleTable.clearSelection()
this.getList()
},
setPosition() {
this.addForm.info.LONGTITUDEANDLATITUDE = this.addForm.info.LONGITUDE + '--' + this.addForm.info.LATITUDE
this.dialogFormMap = false
},
// 获取列表
getList() {
this.listLoading = true
requestFN(
'/alarmInformation/list?showCount=' + this.listQuery.limit + '&currentPage=' + this.listQuery.page,
{
KEYWORDS: this.KEYWORDS,
ALARMDEVICEMAINTENANCE_ID: this.$parent.ALARMDEVICEMAINTENANCE_ID
}
).then((data) => {
this.listLoading = false
this.varList = data.varList
this.total = data.page.totalResult
}).catch((e) => {
this.listLoading = false
})
},
// 添加
handleAdd() {
this.resetAddForm()
this.addForm.dialogType = 'add'
this.addForm.dialogVisible = true
},
viewNearbyCameras(row) {
this.$parent.activeName = 'videoList'
this.$parent.ALARMINFORMATION_ID = row.ALARMINFORMATION_ID
this.$parent.LONGITUDE = row.LONGITUDE
this.$parent.LATITUDE = row.LATITUDE
},
resetAddForm() {
this.ALARMDEVICEMAINTENANCE_ID = ''
this.addForm.info = {
ALARMDEVICEMAINTENANCE_ID: '',
inspectorList: [{ INSPECTION_INSPECTOR_ID: '', INSPECTION_DEPARTMENT_ID: '', INSPECTION_USER_ID: '', USER_SIDE: '' }], // 接受报警人
INDICATORSOURCE: '',
ALARMTHRESHOLD: '',
RECIPIENT: '',
TYPE: '',
LATITUDE: '',
LONGITUDE: ''
}
this.addForm.dialogType = ''
},
confirm() {
this.$refs.addForm.validate(valid => {
if (valid) {
requestFN(
'/alarmInformation/' + this.addForm.dialogType,
{
...this.addForm.info
}
).then((data) => {
this.$message.success('保存成功')
this.getList()
this.addForm.dialogVisible = false
}).catch((e) => {
})
} else {
return false
}
})
},
handleDelete(id) {
this.$confirm('确定要删除吗?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.listLoading = true
requestFN(
'/alarmInformation/delete',
{
ALARMINFORMATION_ID: id
}
).then((data) => {
if (data.result === 'success') {
this.$message({
message: '删除成功',
type: 'success'
})
} else {
this.$message.error(data.msg)
}
this.listLoading = false
this.varList = []
this.listQuery.page = 1
this.getList()
}).catch((e) => {
this.listLoading = false
})
}).catch(() => {
})
},
batchDel() {
const _selectData = this.$refs.multipleTable.selection
if (_selectData == null || _selectData.length == 0) {
this.$message({
message: '请选中要删除的项...',
type: 'error'
})
return false
}
const ids = _selectData.map((item, index) => {
return item.GATEVIDEO_ID
}).join(',')
this.$confirm('确定要删除选中的数据吗?', {
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning'
}).then(() => {
this.listLoading = true
requestFN(
'/gateVideo/deleteAll',
{
DATA_IDS: ids
}
).then(() => {
this.listLoading = false
this.varList = []
this.listQuery.page = 1
this.$refs.multipleTable.clearSelection()
this.getList()
}).catch((e) => {
this.listLoading = false
})
}).catch(() => {
})
},
goKeyReset() {
this.KEYWORDS = ''
this.getList()
},
back() {
if (this.addForm.dialogVisible) this.addForm.dialogVisible = false
if (this.dialogVideo) this.dialogVideo = false
if (this.dialogVideoBack) this.dialogVideoBack = false
if (this.dialogVideoAll) {
this.dialogVideoAll = false
for (let i = 0; i < this.playerList.length; i++) {
this.playerList[i].dispose()
}
}
if (this.dialogForm) this.dialogForm = false
if (this.dialogVideoHLS) {
this.dialogVideoHLS = false
this.player.dispose()
}
},
// 获取数据字典数据
getDict: function() {
requestFN(
'/dictionaries/getLevels',
{
DICTIONARIES_ID: '60e6481d96e44a5390ff5c347c4d1ffe' // 检查类型
}
).then((data) => {
this.INSPECTION_TYPE_List = data.list
}).catch((e) => {
})
requestFN(
'/corpDepartment/listTreeCorpDept',
{}
).then((data) => {
this.treeData = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes')
}).catch((e) => {
})
requestFN(
'/corpDepartment/listTreeManageAndCorp',
{}
).then((data) => {
this.treeDataInspectDept = this.listTransTree(JSON.parse(data.zTreeNodes), 'id', 'pId', 'nodes')
}).catch((e) => {
})
},
// 判断按钮权限,用于是否显示按钮
hasButton: function() {
var keys = 'aiboxManager:add,aiboxManager:del,aiboxManager:edit'
requestFN(
'/head/hasButton',
{
keys: keys
}
).then((data) => {
this.add = data.aiboxManagerfhadminadd // 新增权限
this.del = data.aiboxManagerfhadmindel // 删除权限
this.edit = data.aiboxManagerfhadminedit // 修改权限
}).catch((e) => {
this.listLoading = false
})
}
}
}
</script>
<style>
.ui-foot-xuan {
width: 100%;
margin-top: 10px;
position: inherit;
height: 60px;
line-height: 60px;
background-color: #f1f1f1;
text-align: center;
}
#map{
width: 1000px;
height: 500px;
}
</style>