import {
|
getLocalCameraTree,
|
getGB28181CameraTree,
|
getClusterTree,
|
addAreaTreeData,
|
delAreaTreeData,
|
updateAreaTreeData,
|
getGb28181Pool,
|
refreshGB28181Tree,
|
updateCameraArea,
|
getCameraBaseImage
|
} from "@/api/area"
|
|
import { getClusterDevList } from "@/api/clusterManage"
|
|
export default class TreeDataPool {
|
public openeds: Array<boolean>
|
public activeTreeData: Array<object>
|
|
public treeData: Array<object>
|
public clusterData: Array<object>
|
public gb28181Data: Array<object>
|
public treeDataPure: Array<object>
|
public gb28181DataPure: Array<object>
|
public clusterDataPure: Array<object>
|
public videoArr: Array<string | undefined | object>
|
public searchCamType: number
|
public searchInput: string
|
public activeVideoIndex: number | string
|
public activeVideoId: number | string
|
public activeForceChoose: boolean
|
public readonly: boolean
|
public gbReadonly: boolean
|
public multiple: boolean
|
public searchFrom: string = ""
|
public showTreeBox: boolean
|
public selectedNodes: Array<string>
|
public selectedNode: any
|
// 记录当前操作的树
|
public treeType: string
|
// 记录收起的节点
|
public foldNodeList: object
|
//记录左侧tab:activeName
|
public treeActiveName: string
|
//控制开始、暂停按钮显示状态
|
public btnStaus: string
|
//本地视频类型
|
public searchLocalType: number
|
//记录复制的摄像机id
|
public ctrlCameraId: string
|
//记录复制的摄像机name
|
public ctrlCameraName: string
|
|
// 是否使用ztree
|
public zTree: boolean
|
|
public checkedTreeNode: Array<object>
|
|
// 选中的摄像机个数
|
public gb28181CheckedCount: number
|
// 总摄像机个数
|
public gb28181ChildNodeCount: number
|
|
// 国标摄像机池的底图
|
public cameraNameForBaseImage: string
|
public gb28181CameraBaseImage: string
|
public baseImageLoading: boolean
|
|
public activeNode: string
|
public clusterId: string
|
public devId: string
|
|
// 记录摄像机所属的父节点名称
|
public cameraParents: object
|
// 记录所有的子节点
|
public childNodes: Array<object>
|
|
constructor() {
|
this.openeds = [true, true, false]
|
this.activeTreeData = []
|
this.treeData = []
|
this.gb28181Data = []
|
this.clusterData = []
|
this.treeDataPure = []
|
this.gb28181DataPure = []
|
this.clusterDataPure = []
|
this.videoArr = [""]
|
this.searchCamType = 0
|
this.searchInput = ""
|
this.activeVideoIndex = ""
|
this.activeVideoId = ""
|
this.activeForceChoose = false
|
this.showTreeBox = true
|
this.readonly = true
|
this.gbReadonly = true
|
this.multiple = false
|
this.selectedNodes = []
|
this.selectedNode = {}
|
this.treeType = ""
|
this.foldNodeList = {}
|
this.treeActiveName = "camera"
|
this.searchLocalType = 0
|
|
//1:暂停状态;2:等待状态;3:置灰
|
this.btnStaus = "3"
|
this.ctrlCameraId = ""
|
this.ctrlCameraName = ""
|
this.zTree = false
|
this.checkedTreeNode = []
|
this.gb28181CheckedCount = 0
|
this.gb28181ChildNodeCount = 0
|
|
this.cameraNameForBaseImage = ""
|
this.gb28181CameraBaseImage = ""
|
this.baseImageLoading = false
|
this.activeNode = ""
|
this.clusterId = ""
|
this.devId = ""
|
this.cameraParents = {}
|
this.childNodes = []
|
}
|
|
setVideoArr(index: number, value: object, vue: any): void {
|
vue.$set(this.videoArr, index, value)
|
this.activeForceChoose = false
|
}
|
|
updateSelectedNodes() {
|
this.selectedNodes = []
|
if (!this.multiple) {
|
this.selectedNodes = [this.selectedNode.id]
|
return
|
}
|
let _selected = this.selectedNodes
|
function nodeFilter(node: any) {
|
if (node.type === "4" && node.selected) {
|
_selected.push(node.id)
|
sessionStorage.setItem("cameraDevId", node.devId)
|
}
|
if (node.children) {
|
node.children.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
}
|
}
|
if (this.selectedNode.cameraType === 0) {
|
//摄像机树
|
if (this.treeActiveName == "camera") {
|
this.treeData.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
} else if (this.treeActiveName == "cluster") {
|
//集群树
|
this.clusterData.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
}
|
}
|
if (this.selectedNode.cameraType === 1) {
|
this.gb28181Data.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
}
|
// if (this.selectedNode.cameraType === -1) {
|
// this.clusterData.forEach((n: any) => {
|
// nodeFilter(n);
|
// });
|
// }
|
}
|
|
updateZTreeCheckNodes(checkedNodes) {
|
this.selectedNodes = []
|
if (!this.multiple) {
|
this.selectedNodes = [checkedNodes.id]
|
return
|
}
|
|
checkedNodes.forEach((node) => {
|
if (node.type === "4" && (node.selected || node.checked)) {
|
sessionStorage.setItem("cameraDevId", node.devId)
|
this.selectedNodes.push(node.id)
|
}
|
})
|
}
|
|
getCameraInfoByIp(ipaddr) {
|
let camera = null
|
|
function nodeFilter(node: any) {
|
if (node.rtsp && node.rtsp.indexOf(ipaddr) != -1) {
|
camera = node
|
return
|
}
|
if (node.children) {
|
node.children.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
}
|
}
|
|
this.treeData.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
|
if (!camera) {
|
this.gb28181Data.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
}
|
|
return camera
|
}
|
|
getCameraInfoById(id: string) {
|
let camera = null
|
|
function nodeFilter(node: any) {
|
if (node.id === id) {
|
camera = node
|
return
|
}
|
if (node.children) {
|
node.children.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
}
|
}
|
|
this.treeData.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
|
if (!camera) {
|
this.gb28181Data.forEach((n: any) => {
|
nodeFilter(n)
|
})
|
}
|
|
return camera
|
}
|
|
getParent(id: string, isGB: boolean): string {
|
let parent = "0"
|
|
function nodeFilter(node: Array<any>): any {
|
for (let i = 0; i < node.length; i++) {
|
if (node[i].id == id) {
|
return true
|
}
|
if (node[i].children && node[i].children.length > 0) {
|
if (nodeFilter(node[i].children)) {
|
parent = node[i].id
|
}
|
}
|
}
|
return false
|
}
|
|
if (isGB) {
|
nodeFilter(this.gb28181Data)
|
} else {
|
nodeFilter(this.treeData)
|
}
|
|
return parent
|
}
|
|
clean() {
|
this.treeData = JSON.parse(JSON.stringify(this.treeDataPure))
|
this.gb28181Data = JSON.parse(JSON.stringify(this.gb28181DataPure))
|
|
this.isFold(this.treeData)
|
this.isFold(this.gb28181Data)
|
this.selectedNodes = []
|
this.selectedNode = {}
|
}
|
|
reset() {
|
this.treeData = []
|
this.gb28181Data = []
|
|
this.selectedNodes = []
|
this.selectedNode = {}
|
}
|
|
cleanTree(tree) {
|
if (tree === "localTree") {
|
this.treeData = JSON.parse(JSON.stringify(this.treeDataPure))
|
}
|
if (tree === "gb28182Tree") {
|
this.gb28181Data = JSON.parse(JSON.stringify(this.gb28181DataPure))
|
}
|
}
|
|
isFold(node) {
|
if (!node) {
|
return
|
}
|
node.forEach((n) => {
|
// vue-js-tree 默认展开,控制部分折叠. z-tree 默认折叠, 控制部分展开
|
if (this.foldNodeList[n.id]) {
|
if (this.zTree) {
|
n.open = false
|
} else {
|
n.opened = false
|
}
|
}
|
if (n.children && n.children.length > 0) {
|
this.isFold(n.children)
|
}
|
})
|
}
|
|
setDropDisable(node) {
|
if (!node) {
|
return
|
}
|
node.forEach((n) => {
|
if (n.children && n.children.length > 0) {
|
this.setDropDisable(n.children)
|
} else {
|
if (n.type === "4") {
|
n.dropDisabled = true
|
}
|
}
|
})
|
}
|
|
sortTreeData(node, parentName = "") {
|
if (!node) {
|
return
|
}
|
node.sort(function(obj1: any, obj2: any) {
|
var val1 = obj1.name
|
var val2 = obj2.name
|
if (val1 < val2) {
|
return -1
|
} else if (val1 > val2) {
|
return 1
|
} else {
|
return 0
|
}
|
})
|
|
node.forEach((n) => {
|
if (n.children && n.children.length > 0) {
|
if (this.zTree) {
|
n.open = true
|
}
|
let pname = parentName === "" ? n.name : parentName + "/" + n.name
|
// console.log("pname", pname)
|
this.sortTreeData(n.children, pname)
|
} else {
|
if (n.type != "MENU") {
|
this.cameraParents[n.id] = parentName
|
this.childNodes.push(n)
|
}
|
}
|
})
|
}
|
|
async fetchLocalTree() {
|
let params: any = {
|
parentId: "",
|
searchType: this.searchCamType,
|
cameraName: this.searchInput
|
|
//isPlatform: 1
|
}
|
if (this.searchFrom == "cluster") {
|
params.isPlatform = 1
|
}
|
const rsp: any = await getLocalCameraTree(params)
|
|
if (rsp && rsp.success) {
|
this.treeData = rsp.data.treeMenu ? rsp.data.treeMenu : []
|
if (this.treeData && this.treeData.length > 0) {
|
this.sortTreeData(this.treeData)
|
// console.log("cameraParents", this.cameraParents)
|
}
|
|
// 设置禁止拖拽摄像机到摄像机节点
|
this.setDropDisable(this.treeData)
|
this.treeDataPure = JSON.parse(JSON.stringify(this.treeData))
|
this.isFold(this.treeData)
|
|
// 清理没有权限管理的摄像机, 后端修复后删除
|
let userInfo = JSON.parse(sessionStorage.getItem("userInfo"))
|
|
// 管理员权限
|
if (userInfo.username == "Administrator") {
|
return
|
}
|
|
let checkedCameras = userInfo.email
|
|
// basic 为子账户默认的空字段,表示可管理的摄像机目录为空
|
if (checkedCameras == "basic") {
|
this.treeData = []
|
} else {
|
let cameraIds = checkedCameras.split(",")
|
console.log("cameraIds", cameraIds)
|
this.removeNoAuthorizedNode(this.treeData, cameraIds)
|
}
|
}
|
}
|
|
async fetchClusterTree() {
|
const rsp: any = await getClusterTree({
|
searchType: this.searchCamType,
|
cameraName: this.searchInput
|
})
|
if (rsp && rsp.success) {
|
this.clusterData = rsp.data ? rsp.data : []
|
if (this.clusterData && this.clusterData.length > 0) {
|
this.sortTreeData(this.clusterData)
|
}
|
this.clusterDataPure = JSON.parse(JSON.stringify(this.clusterData))
|
this.isFold(this.clusterData)
|
}
|
}
|
|
async fetchGbTree() {
|
const rsp: any = await getGB28181CameraTree({
|
parentId: "",
|
searchType: this.searchCamType,
|
cameraName: this.searchInput
|
})
|
|
if (rsp && rsp.success) {
|
this.gb28181Data = rsp.data.treeMenu ? rsp.data.treeMenu : []
|
if (this.gb28181Data && this.gb28181Data.length > 0) {
|
this.sortTreeData(this.gb28181Data)
|
}
|
|
this.gb28181DataPure = JSON.parse(JSON.stringify(this.gb28181Data))
|
this.isFold(this.gb28181Data)
|
}
|
}
|
|
async fetchTreeData() {
|
this.cameraParents = {}
|
this.childNodes = []
|
|
if (this.openeds[0]) {
|
await this.fetchLocalTree()
|
}
|
if (this.openeds[1]) {
|
await this.fetchGbTree()
|
}
|
}
|
|
async add(name: string, parent: string) {
|
await addAreaTreeData({
|
name: name,
|
parentId: parent
|
})
|
|
this.fetchTreeData()
|
}
|
|
async del(id: string) {
|
await delAreaTreeData({
|
id: id
|
})
|
|
this.fetchTreeData()
|
}
|
|
async update(name: string, id: string, alias: string, isGb: boolean) {
|
await updateAreaTreeData({
|
id: id,
|
name: name,
|
parentId: this.getParent(id, isGb),
|
alias: alias
|
})
|
|
this.fetchTreeData()
|
}
|
|
async refreshGB28181() {
|
await refreshGB28181Tree({})
|
// this.fetchGbTree()
|
}
|
|
async dropNode(cameraId: string, areaId: string) {
|
await updateCameraArea({ cameraId: cameraId, areaId: areaId })
|
}
|
|
getAllChildrenNodes(treeNode, arr) {
|
for (var i = 0; i < treeNode.length; i++) {
|
var sonList = treeNode[i].children
|
if (!sonList) {
|
if (treeNode[i].type == "camera") {
|
arr.push(treeNode[i])
|
|
if (treeNode[i].checked) {
|
this.gb28181CheckedCount += 1
|
}
|
}
|
} else {
|
this.getAllChildrenNodes(sonList, arr)
|
}
|
}
|
return arr
|
}
|
countChildrenNodes(treeNode) {
|
let arry = []
|
|
this.getAllChildrenNodes(treeNode, arry)
|
|
return arry.length
|
}
|
|
async fetchVideosvrCameras(update: Boolean) {
|
let fn = getGb28181Pool
|
if (update) {
|
fn = refreshGB28181Tree
|
}
|
const rsp: any = await fn({
|
clusterId: this.clusterId,
|
devId: this.devId
|
})
|
|
if (rsp && rsp.success) {
|
this.selectedNode = {}
|
this.treeData = rsp.data ? rsp.data : []
|
if (this.treeData && this.treeData.length > 0) {
|
this.sortTreeData(this.treeData)
|
}
|
|
// 设置禁止拖拽摄像机到摄像机节点
|
this.setDropDisable(this.treeData)
|
this.isFold(this.treeData)
|
|
this.gb28181CheckedCount = 0
|
this.gb28181ChildNodeCount = this.countChildrenNodes(this.treeData)
|
this.activeTreeData = this.treeData
|
}
|
}
|
|
removeNoCheckedNode(nodes: Array<any>) {
|
for (let i = 0; i < nodes.length; ) {
|
if (!nodes[i].checked) {
|
nodes.splice(i, 1)
|
continue
|
}
|
|
if (nodes[i].children && nodes[i].children.length) {
|
this.removeNoCheckedNode(nodes[i].children)
|
}
|
i++
|
}
|
}
|
|
removeNoAuthorizedNode(nodes: Array<any>, authList: Array<any>) {
|
for (let i = 0; i < nodes.length; ) {
|
if (nodes[i].children && nodes[i].children.length) {
|
this.removeNoAuthorizedNode(nodes[i].children, authList)
|
}
|
|
if (nodes[i].type === "4") {
|
if (authList.indexOf(nodes[i].id) < 0) {
|
nodes.splice(i, 1)
|
continue
|
}
|
} else {
|
if (!nodes[i].children || !nodes[i].children.length) {
|
nodes.splice(i, 1)
|
continue
|
}
|
}
|
|
i++
|
}
|
}
|
|
countCheckedNodes(nodes: Array<any>) {
|
let count = 0
|
nodes.forEach((n) => {
|
if (n.type == "camera") {
|
count++
|
}
|
})
|
this.gb28181CheckedCount = count
|
}
|
|
newTreeByChecked(nodes: Array<object>) {
|
let newTree = JSON.parse(JSON.stringify(nodes))
|
this.removeNoCheckedNode(newTree)
|
|
return newTree
|
}
|
|
async showBaseImage(node: any) {
|
this.baseImageLoading = true
|
this.gb28181CameraBaseImage = ""
|
this.cameraNameForBaseImage = node.name
|
|
try {
|
const rsp: any = await getCameraBaseImage({
|
id: node.id,
|
clusterId: this.clusterId,
|
devId: this.devId
|
})
|
|
if (rsp && rsp.data) {
|
this.gb28181CameraBaseImage = rsp.data
|
}
|
} catch (error) {
|
console.log(error)
|
}
|
|
this.baseImageLoading = false
|
}
|
}
|