620 lines
20 KiB
Vue
620 lines
20 KiB
Vue
<template>
|
|
<div class="app-container">
|
|
<div class="rightCont">
|
|
<el-form label-width="100px">
|
|
<el-row :gutter="24">
|
|
<el-col :span="5">
|
|
<el-form-item label="关键字:" >
|
|
<el-input v-model="form.VIDEONAME" style="width:206px" placeholder="输入视频名称或者摄像头编码"/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="所属相关方:" >
|
|
<el-select v-model="form.UNITS_ID" filterable clearable placeholder="请选择施工相关方">
|
|
<el-option v-for="item in unitsList" :key="item.UNITS_ID" :label="item.UNITS_NAME" :value="item.UNITS_ID" />
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="使用单位:" >
|
|
<el-input v-model="form.UNIT_USE" style="width:206px" placeholder="请输入内容"/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="4">
|
|
<el-form-item label="负责人:" >
|
|
<el-input v-model="form.UNITS_USER_ID" style="width:206px" placeholder="请输入内容"/>
|
|
</el-form-item>
|
|
</el-col>
|
|
<el-col :span="6">
|
|
<el-form-item label-width="50px">
|
|
<el-button v-waves class="filter-item" type="primary" icon="el-icon-search" @click="getQuery">
|
|
搜索
|
|
</el-button>
|
|
<el-button v-waves class="filter-item" type="success" icon="el-icon-refresh" @click="goKeyReset">
|
|
重置
|
|
</el-button>
|
|
</el-form-item>
|
|
</el-col>
|
|
</el-row>
|
|
</el-form>
|
|
<div>
|
|
<el-table
|
|
v-loading="listLoading"
|
|
ref="multipleTable"
|
|
:data="varList"
|
|
:row-key="getRowKey"
|
|
border
|
|
tooltip-effect="dark"
|
|
style="width: 100%">
|
|
<el-table-column :selectable="selectable" type="selection" reserve-selection width="55" align="center"/>
|
|
<el-table-column type="index" label="序号" width="55" align="center"/>
|
|
<el-table-column :formatter="getUnitName" prop="UNITS_ID" label="所属相关方"/>
|
|
<el-table-column prop="UNIT_USE" label="使用单位"/>
|
|
<el-table-column prop="MODEL" label="视频型号"/>
|
|
<el-table-column prop="VIDEONAME" label="视频名称"/>
|
|
<el-table-column prop="VIDEOURL" label="播放地址"/>
|
|
<el-table-column prop="CODE" label="摄像头编号"/>
|
|
<el-table-column prop="PERSON" label="负责人"/>
|
|
<el-table-column prop="PHONE" label="手机号"/>
|
|
<el-table-column prop="ITEM_COUNT" label="视频监控中使用数" width="auto" align="center">
|
|
<template slot-scope="{row}">
|
|
<span v-if="row.ITEM_COUNT != 0">
|
|
<a style="color: #1e9fff;text-decoration:underline" @click="clickItemCount(row)">{{ row.ITEM_COUNT }}</a>
|
|
</span>
|
|
<span v-else>{{ row.ITEM_COUNT }}</span>
|
|
</template>
|
|
</el-table-column>
|
|
<el-table-column prop="CORP_NAME" label="创建人单位"/>
|
|
<el-table-column prop="CREATOR_NAME" label="创建人"/>
|
|
<el-table-column label="操作" width="300px">
|
|
<template slot-scope="{row}">
|
|
<el-button type="success" icon="el-icon-caret-right" size="mini" @click="showVideo(row)">播放</el-button>
|
|
<el-button
|
|
type="primary"
|
|
icon="el-icon-edit"
|
|
size="mini"
|
|
@click="handleEdit(row)">修改
|
|
</el-button>
|
|
<el-button
|
|
:disabled="row.ITEM_COUNT != 0"
|
|
type="danger"
|
|
icon="el-icon-delete"
|
|
size="mini"
|
|
@click="handleBatchDel(row)">删除
|
|
</el-button>
|
|
</template>
|
|
</el-table-column>
|
|
</el-table>
|
|
<div class="page-btn-group">
|
|
<div>
|
|
<el-button type="primary" icon="el-icon-plus" @click="handleAdd">新增</el-button>
|
|
<el-button type="danger" icon="el-icon-delete" @click="handleBatchDel">批量删除</el-button>
|
|
</div>
|
|
<pagination
|
|
:total="total"
|
|
:page.sync="listQuery.page"
|
|
:limit.sync="listQuery.limit"
|
|
@pagination="getList()"/>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<el-dialog
|
|
:visible.sync="addForm.dialogVisible"
|
|
:title="addForm.dialogType === 'add' ? '新增' : '编辑'"
|
|
width="40%">
|
|
<el-form
|
|
ref="addForm"
|
|
:rules="addForm.rules"
|
|
:model="addForm.info"
|
|
label-position="right"
|
|
label-width="150px"
|
|
style="padding:10px 10px">
|
|
<el-row>
|
|
<el-form-item label="所属相关方:" prop="UNITS_ID">
|
|
<el-select v-model="addForm.info.UNITS_ID" filterable placeholder="请选择施工相关方" style="width: 100%;">
|
|
<el-option v-for="item in unitsList" :key="item.UNITS_ID" :label="item.UNITS_NAME" :value="item.UNITS_ID" />
|
|
</el-select>
|
|
</el-form-item>
|
|
</el-row>
|
|
<el-row>
|
|
<el-form-item label="使用单位:" prop="UNIT_USE">
|
|
<el-input v-model="addForm.info.UNIT_USE" style="width: 100%" placeholder="请输入内容"/>
|
|
</el-form-item>
|
|
</el-row>
|
|
<el-row>
|
|
<el-form-item label="规格型号:" prop="MODEL">
|
|
<el-input v-model="addForm.info.MODEL" style="width: 100%" placeholder="请输入内容"/>
|
|
</el-form-item>
|
|
</el-row>
|
|
<el-row>
|
|
<el-form-item label="视频名称:" prop="VIDEONAME">
|
|
<el-input v-model="addForm.info.VIDEONAME" style="width: 100%" placeholder="请输入内容"/>
|
|
</el-form-item>
|
|
</el-row>
|
|
<el-row>
|
|
<el-form-item label="播放路径:" prop="VIDEOURL">
|
|
<el-input v-model="addForm.info.VIDEOURL" style="width: 100%" placeholder="请输入内容"/>
|
|
</el-form-item>
|
|
</el-row>
|
|
<el-row>
|
|
<el-form-item label="摄像头编号:" prop="CODE">
|
|
<el-input v-model="addForm.info.CODE" style="width: 100%" placeholder="请输入内容"/>
|
|
</el-form-item>
|
|
</el-row>
|
|
<el-row>
|
|
<el-form-item label="负责人:" prop="PERSON">
|
|
<el-input v-model="addForm.info.PERSON" style="width: 100%" placeholder="请输入内容" />
|
|
</el-form-item>
|
|
</el-row>
|
|
<el-row>
|
|
<el-form-item label="联系电话:" prop="PHONE">
|
|
<el-input v-model="addForm.info.PHONE" style="width: 100%" placeholder="请输入内容" />
|
|
</el-form-item>
|
|
</el-row>
|
|
<el-row>
|
|
<el-form-item label="在线情况:" prop="REMAKE">
|
|
<el-input v-model="addForm.info.REMAKE" style="width: 100%" placeholder="请输入内容"/>
|
|
</el-form-item>
|
|
</el-row>
|
|
</el-form>
|
|
<div slot="footer" class="dialog-footer">
|
|
<el-button @click="addForm.dialogVisible = false">取 消</el-button>
|
|
<el-button type="primary" @click="confirm">提 交</el-button>
|
|
</div>
|
|
</el-dialog>
|
|
<el-drawer
|
|
:visible.sync="visible"
|
|
title="重点工程"
|
|
direction="rtl"
|
|
size="40%">
|
|
<el-table :data="gridData">
|
|
<el-table-column type="index" label="序号" width="50" align="center" />
|
|
<el-table-column prop="OUTSOURCED_NAME" label="重点工程名称" show-overflow-tooltip />
|
|
<el-table-column prop="UNITS_NAME" label="施工相关方" show-overflow-tooltip />
|
|
<!-- <el-table-column prop="INVOLVING_CORPS_NAME" label="辖区单位" show-overflow-tooltip />-->
|
|
<el-table-column prop="MANAGE_CORPS_NAME" label="监理单位" show-overflow-tooltip />
|
|
</el-table>
|
|
<pagination
|
|
:total="zdtotal"
|
|
:page.sync="zdlistQuery.page"
|
|
:limit.sync="zdlistQuery.limit"
|
|
@pagination="zdgetList()"/>
|
|
</el-drawer>
|
|
<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>
|
|
|
|
</div>
|
|
</template>
|
|
|
|
<script>
|
|
import Pagination from '@/components/Pagination'
|
|
import { requestFN } from '@/utils/request'
|
|
import waves from '@/directive/waves' // waves directive
|
|
import SelectTree from '@/components/SelectTree'
|
|
import TiandiMap from '../../../../components/TianMap/TiandiMap'
|
|
|
|
export default {
|
|
components: { Pagination, SelectTree, TiandiMap },
|
|
directives: { waves },
|
|
data() {
|
|
return {
|
|
// 播放
|
|
dialogVideo: false,
|
|
dialogVideoHLS: false,
|
|
dialogVideoBack: false,
|
|
dialogVideoAll: false,
|
|
VIDEOURL: '',
|
|
player: {},
|
|
//
|
|
dialogFormMap: false,
|
|
listLoading: true,
|
|
VIDEO_RESOURCES_ID: '',
|
|
add: false,
|
|
del: false,
|
|
edit: false,
|
|
timer: '',
|
|
form: {
|
|
VIDEONAME: '',
|
|
UNITS_USER_ID: '',
|
|
UNIT_USE: '',
|
|
UNITS_ID: ''
|
|
},
|
|
unitsList: [],
|
|
addForm: {
|
|
dialogType: 'add', // 增or改
|
|
dialogVisible: false,
|
|
rules: {
|
|
VIDEONAME: [{ required: true, message: '不可为空', trigger: 'blur' }],
|
|
UNITS_ID: [{ required: true, message: '不可为空', trigger: 'blur' }],
|
|
MODEL: [{ required: true, message: '不可为空', trigger: 'blur' }],
|
|
UNIT_USE: [{ required: true, message: '不可为空', trigger: 'blur' }],
|
|
PERSON: [{ required: true, message: '不可为空', trigger: 'blur' }],
|
|
PHONE: [{ required: true, message: '不可为空', trigger: 'blur' }],
|
|
VIDEOURL: [{ required: true, message: '不可为空', trigger: 'blur' }],
|
|
CODE: [{ required: true, message: '不可为空', trigger: 'blur' }]
|
|
},
|
|
info: {
|
|
VIDEO_RESOURCES_ID: '', // 主键
|
|
UNITS_ID: '', // 所属相关方
|
|
UNIT_USE: '', // 使用单位
|
|
MODEL: '', // 规格型号
|
|
VIDEONAME: '', // 视频名称
|
|
VIDEOURL: '', // 播放路径
|
|
CODE: '', // 摄像头编号
|
|
PHONE: '', // 手机号码
|
|
REMAKE: '', // 在线情况
|
|
PERSON: '' // 负责人
|
|
}
|
|
},
|
|
typeData: [],
|
|
stateData: [
|
|
{
|
|
NAME: '正常',
|
|
BIANMA: 0
|
|
}, {
|
|
NAME: '异常',
|
|
BIANMA: 1
|
|
}
|
|
],
|
|
varRegionList: [],
|
|
listQuery: {
|
|
page: 1,
|
|
limit: 10
|
|
},
|
|
zdlistQuery: {
|
|
page: 1,
|
|
limit: 10
|
|
},
|
|
ls: [],
|
|
unitsUserList: [],
|
|
dates: [],
|
|
total: 0,
|
|
zdtotal: 0,
|
|
// 树形菜单
|
|
filterText: '',
|
|
visible: false,
|
|
gridData: [],
|
|
varList: [],
|
|
pd: [],
|
|
defaultProps: {
|
|
value: 'id',
|
|
children: 'children',
|
|
label: 'name'
|
|
}
|
|
}
|
|
},
|
|
computed: {
|
|
|
|
},
|
|
watch: {
|
|
filterText(val) {
|
|
console.log(val)
|
|
this.$refs.tree.filter(val)
|
|
}
|
|
},
|
|
async created() {
|
|
await this.getUnitsList()
|
|
await this.getList()
|
|
},
|
|
beforeDestroy() {
|
|
console.log('定时器关闭')
|
|
clearInterval(this.timer)
|
|
},
|
|
methods: {
|
|
// 五分钟关闭视频播放页面定时任务
|
|
start() {
|
|
console.log('定时器开启')
|
|
this.timer = setInterval(this.closeVideoStart, (5 * 60 * 1000)) // 5分钟
|
|
},
|
|
over() {
|
|
// 定时器手动关闭
|
|
console.log('定时器自动关闭')
|
|
this.$message.warning('单次播放时长已到5分钟自动关闭')
|
|
clearInterval(this.timer)
|
|
},
|
|
closeVideoStart() {
|
|
this.dialogVideo = false
|
|
this.dialogVideoHLS = false
|
|
this.dialogVideoBack = false
|
|
this.dialogVideoAll = false
|
|
this.over()
|
|
},
|
|
changeSelUid(event) {
|
|
this.unitsUserList = []
|
|
this.form.UNITS_USER_ID = ''
|
|
if (event) {
|
|
// 查询相关方单位的负责人
|
|
this.getUnitUser(event)
|
|
}
|
|
},
|
|
getUnitUser(event) {
|
|
requestFN(
|
|
'/personnelmanagement/listAll',
|
|
{
|
|
UNITS_ID: event
|
|
}
|
|
).then((data) => {
|
|
this.unitsUserList = data.varList
|
|
this.$forceUpdate()
|
|
}).catch((e) => {
|
|
})
|
|
},
|
|
// 播放
|
|
handleBack() {
|
|
if (this.dialogVideoAll) {
|
|
for (let i = 0; i < this.playerList.length; i++) {
|
|
this.playerList[i].dispose()
|
|
}
|
|
this.dialogVideoAll = false
|
|
}
|
|
if (this.dialogVideoHLS) {
|
|
this.player.dispose()
|
|
this.dialogVideoHLS = false
|
|
}
|
|
},
|
|
back() {
|
|
console.log('手动关闭定时器')
|
|
clearInterval(this.timer)
|
|
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()
|
|
}
|
|
},
|
|
showVideo(row) {
|
|
this.$message.warning('单次播放最多五分钟')
|
|
this.start()
|
|
if (!row.PLATFORMVIDEOMANAGEMENT_ID) {
|
|
this.VIDEOURL = row.VIDEOURL
|
|
this.dialogVideo = true
|
|
} else {
|
|
requestFN(
|
|
'/platformvideomanagement/getHlsPath',
|
|
{
|
|
INDEXCODE: row.INDEXCODE
|
|
}
|
|
).then((res) => {
|
|
this.dialogVideoHLS = true
|
|
this.$nextTick(() => {
|
|
// eslint-disable-next-line no-undef
|
|
this.player = new Aliplayer({
|
|
'id': 'aLiVideoPlayer',
|
|
'source': res.data.url,
|
|
'width': '100%',
|
|
'height': '500px',
|
|
'autoplay': true,
|
|
'isLive': true,
|
|
'rePlay': false,
|
|
'playsinline': true,
|
|
'preload': true,
|
|
'controlBarVisibility': 'hover',
|
|
'useH5Prism': true
|
|
}, function(player) {
|
|
console.log('The player is created')
|
|
})
|
|
})
|
|
}).catch((e) => {
|
|
this.over()
|
|
this.listLoading = false
|
|
})
|
|
}
|
|
},
|
|
// 播放 end-------------
|
|
getUnitName(e) {
|
|
const unit = this.unitsList.filter(t => {
|
|
return t.UNITS_ID == e.UNITS_ID
|
|
})
|
|
if (unit.length > 0) {
|
|
return unit[0].UNITS_NAME
|
|
} else {
|
|
return ''
|
|
}
|
|
},
|
|
getUnitsList() {
|
|
requestFN(
|
|
'/units/listAll'
|
|
).then((data) => {
|
|
this.unitsList = data.varList
|
|
}).catch((e) => {
|
|
})
|
|
},
|
|
confirm() {
|
|
this.$refs.addForm.validate(valid => {
|
|
if (valid) {
|
|
requestFN(
|
|
'/videoResources/' + this.addForm.dialogType,
|
|
{
|
|
...this.addForm.info
|
|
}
|
|
).then((data) => {
|
|
this.$message.success('保存成功')
|
|
this.getList()
|
|
this.addForm.dialogVisible = false
|
|
}).catch((e) => {
|
|
})
|
|
} else {
|
|
return false
|
|
}
|
|
})
|
|
},
|
|
clickItemCount(row) {
|
|
this.VIDEO_RESOURCES_ID = row.VIDEO_RESOURCES_ID
|
|
this.zdgetList()
|
|
},
|
|
selectable(row, index) {
|
|
return row.ITEM_COUNT == 0
|
|
},
|
|
handleEdit(row) {
|
|
this.resetAddForm()
|
|
this.addForm.info.VIDEO_RESOURCES_ID = row.VIDEO_RESOURCES_ID
|
|
this.addForm.info.CODE = row.CODE
|
|
this.addForm.info.VIDEOURL = row.VIDEOURL
|
|
this.addForm.info.VIDEONAME = row.VIDEONAME
|
|
this.addForm.info.UNITS_ID = row.UNITS_ID
|
|
this.addForm.info.MODEL = row.MODEL
|
|
this.addForm.info.UNIT_USE = row.UNIT_USE
|
|
this.addForm.info.PHONE = row.PHONE
|
|
this.addForm.info.PERSON = row.PERSON
|
|
this.addForm.info.REMAKE = row.REMAKE
|
|
this.addForm.dialogType = 'edit'
|
|
this.addForm.dialogVisible = true
|
|
},
|
|
getRowKey(row) {
|
|
return row.VIDEO_RESOURCES_ID
|
|
},
|
|
// 批量删除
|
|
handleBatchDel(row) {
|
|
const DATA_IDS = []
|
|
if (row.VIDEO_RESOURCES_ID) {
|
|
DATA_IDS.push(row.VIDEO_RESOURCES_ID)
|
|
} else {
|
|
const _selectData = this.$refs.multipleTable.selection
|
|
if (_selectData == null || _selectData.length == 0) {
|
|
this.$message({
|
|
message: '请选中要删除的项...',
|
|
type: 'error'
|
|
})
|
|
return false
|
|
}
|
|
_selectData.forEach(item => {
|
|
DATA_IDS.push(item.VIDEO_RESOURCES_ID)
|
|
})
|
|
}
|
|
this.$confirm('确定要删除吗?', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning'
|
|
}).then(() => {
|
|
this.listLoading = true
|
|
requestFN(
|
|
'/videoResources/deleteAll',
|
|
{
|
|
DATA_IDS: DATA_IDS.join(',')
|
|
}
|
|
).then(() => {
|
|
this.$message({
|
|
message: '删除成功',
|
|
type: 'success'
|
|
})
|
|
this.listLoading = false
|
|
this.varList = []
|
|
this.listQuery.page = 1
|
|
this.$refs.multipleTable.clearSelection()
|
|
this.getList()
|
|
}).catch((e) => {
|
|
this.listLoading = false
|
|
this.$refs.multipleTable.clearSelection()
|
|
})
|
|
}).catch(() => {
|
|
})
|
|
},
|
|
// 添加
|
|
handleAdd() {
|
|
this.resetAddForm()
|
|
this.addForm.dialogType = 'add'
|
|
this.addForm.dialogVisible = true
|
|
},
|
|
resetAddForm() {
|
|
this.addForm.info = {
|
|
VIDEO_RESOURCES_ID: '', // 主键
|
|
UNITS_ID: '', // 所属相关方
|
|
MODEL: '', // 规格型号
|
|
UNIT_USE: '', // 使用单位
|
|
VIDEONAME: '', // 视频名称
|
|
VIDEOURL: '', // 播放路径
|
|
CODE: '', // 摄像头编号
|
|
REMAKE: '', // 在线情况
|
|
PHONE: '', // 手机号码
|
|
PERSON: '' // 负责人
|
|
}
|
|
},
|
|
// 搜索
|
|
getQuery() {
|
|
this.getList()
|
|
},
|
|
zdgetList() {
|
|
this.gridData = []
|
|
requestFN(
|
|
'/videoResources/getPageOutSourceBySid?showCount=' + this.zdlistQuery.limit + '¤tPage=' + this.zdlistQuery.page,
|
|
{
|
|
VIDEO_RESOURCES_ID: this.VIDEO_RESOURCES_ID
|
|
}
|
|
).then((data) => {
|
|
this.listLoading = false
|
|
this.gridData = data.varList
|
|
this.zdtotal = data.page.totalResult
|
|
if (!this.visible) {
|
|
this.visible = true
|
|
}
|
|
}).catch((e) => {
|
|
})
|
|
},
|
|
// 获取列表
|
|
getList() {
|
|
this.listLoading = true
|
|
this.varList = []
|
|
requestFN(
|
|
'/videoResources/list?showCount=' + this.listQuery.limit + '¤tPage=' + this.listQuery.page,
|
|
{
|
|
VIDEONAME: this.form.VIDEONAME,
|
|
PERSONNELMANAGEMENT_ID: this.form.UNITS_USER_ID,
|
|
UNIT_USE: this.form.UNIT_USE,
|
|
UNITS_ID: this.form.UNITS_ID
|
|
}
|
|
).then((data) => {
|
|
this.listLoading = false
|
|
this.varList = data.varList
|
|
this.total = data.page.totalResult
|
|
}).catch((e) => {
|
|
this.listLoading = false
|
|
})
|
|
},
|
|
goKeyReset() {
|
|
this.form.VIDEONAME = ''
|
|
this.form.UNITS_USER_ID = ''
|
|
this.form.UNIT_USE = ''
|
|
this.form.UNITS_ID = ''
|
|
this.getList()
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<style scoped>
|
|
.returnBtn {
|
|
float: right;
|
|
}
|
|
|
|
.app-container {
|
|
display: flex; /**/
|
|
align-items: baseline;
|
|
}
|
|
|
|
.rightCont {
|
|
width: 100%
|
|
}
|
|
|
|
#map {
|
|
width: 1000px;
|
|
height: 500px;
|
|
}
|
|
</style>
|