zhangzengfei
2022-08-22 f14f98a263141d2f8ec0079866a758cc7a1c38d1
src/Pool/TreeData.ts
@@ -9,9 +9,9 @@
  refreshGB28181Tree,
  updateCameraArea,
  getCameraBaseImage
} from '@/api/area'
} from "@/api/area"
import {getClusterDevList} from '@/api/clusterManage'
import { getClusterDevList } from "@/api/clusterManage"
export default class TreeDataPool {
  public openeds: Array<boolean>
@@ -32,7 +32,7 @@
  public readonly: boolean
  public gbReadonly: boolean
  public multiple: boolean
  public searchFrom: string = ''
  public searchFrom: string = ""
  public showTreeBox: boolean
  public selectedNodes: Array<string>
  public selectedNode: any
@@ -65,8 +65,13 @@
  public cameraNameForBaseImage: string
  public gb28181CameraBaseImage: string
  public baseImageLoading: boolean
  public activeNode: string
  public clusterId: string
  public devId: string
  // 记录摄像机所属的父节点名称
  public cameraParents: object
  constructor() {
    this.openeds = [true, true, false]
@@ -77,11 +82,11 @@
    this.treeDataPure = []
    this.gb28181DataPure = []
    this.clusterDataPure = []
    this.videoArr = ['']
    this.videoArr = [""]
    this.searchCamType = 0
    this.searchInput = ''
    this.activeVideoIndex = ''
    this.activeVideoId = ''
    this.searchInput = ""
    this.activeVideoIndex = ""
    this.activeVideoId = ""
    this.activeForceChoose = false
    this.showTreeBox = true
    this.readonly = true
@@ -89,15 +94,15 @@
    this.multiple = false
    this.selectedNodes = []
    this.selectedNode = {}
    this.treeType = ''
    this.treeType = ""
    this.foldNodeList = {}
    this.treeActiveName = 'camera'
    this.treeActiveName = "camera"
    this.searchLocalType = 0
    //1:暂停状态;2:等待状态;3:置灰
    this.btnStaus = '3'
    this.ctrlCameraId = ''
    this.ctrlCameraName = ''
    this.btnStaus = "3"
    this.ctrlCameraId = ""
    this.ctrlCameraName = ""
    this.zTree = false
    this.checkedTreeNode = []
    this.gb28181CheckedCount = 0
@@ -106,23 +111,10 @@
    this.cameraNameForBaseImage = ""
    this.gb28181CameraBaseImage = ""
    this.baseImageLoading = false
    this.activeNode = ""
    this.clusterId = ""
    this.devId = ""
    this.getId()
  }
 async getId(){
      //先拿集群id或设备id
    const res:any = await getClusterDevList()
    if(res.data.clusterList.length > 0) {
      this.clusterId = res.data.clusterList[0].cluster_id
    }
    else {
      this.devId = res.data.devList[0].devId
    }
    this.cameraParents = {}
  }
  setVideoArr(index: number, value: object, vue: any): void {
@@ -138,8 +130,9 @@
    }
    let _selected = this.selectedNodes
    function nodeFilter(node: any) {
      if (node.type === '4' && node.selected) {
      if (node.type === "4" && node.selected) {
        _selected.push(node.id)
        sessionStorage.setItem("cameraDevId", node.devId)
      }
      if (node.children) {
        node.children.forEach((n: any) => {
@@ -149,11 +142,11 @@
    }
    if (this.selectedNode.cameraType === 0) {
      //摄像机树
      if (this.treeActiveName == 'camera') {
      if (this.treeActiveName == "camera") {
        this.treeData.forEach((n: any) => {
          nodeFilter(n)
        })
      } else if (this.treeActiveName == 'cluster') {
      } else if (this.treeActiveName == "cluster") {
        //集群树
        this.clusterData.forEach((n: any) => {
          nodeFilter(n)
@@ -173,26 +166,17 @@
  }
  updateZTreeCheckNodes(checkedNodes) {
    let _this = this
    _this.selectedNodes = []
    if (!_this.multiple) {
      _this.selectedNodes = [checkedNodes.id]
    this.selectedNodes = []
    if (!this.multiple) {
      this.selectedNodes = [checkedNodes.id]
      return
    }
    function nodeFilter(node: any) {
      if (node.type === '4' && (node.selected || node.checked)) {
        _this.selectedNodes.push(node.id)
    checkedNodes.forEach((node) => {
      if (node.type === "4" && (node.selected || node.checked)) {
        sessionStorage.setItem("cameraDevId", node.devId)
        this.selectedNodes.push(node.id)
      }
      if (node.children) {
        node.children.forEach((n: any) => {
          nodeFilter(n)
        })
      }
    }
    checkedNodes.forEach((n: any) => {
      nodeFilter(n)
    })
  }
@@ -224,7 +208,7 @@
    return camera
  }
  getCameraInfoById(id) {
  getCameraInfoById(id: string) {
    let camera = null
    function nodeFilter(node: any) {
@@ -253,7 +237,7 @@
  }
  getParent(id: string, isGB: boolean): string {
    let parent = '0'
    let parent = "0"
    function nodeFilter(node: Array<any>): any {
      for (let i = 0; i < node.length; i++) {
@@ -288,11 +272,19 @@
    this.selectedNode = {}
  }
  reset() {
    this.treeData = []
    this.gb28181Data = []
    this.selectedNodes = []
    this.selectedNode = {}
  }
  cleanTree(tree) {
    if (tree === 'localTree') {
    if (tree === "localTree") {
      this.treeData = JSON.parse(JSON.stringify(this.treeDataPure))
    }
    if (tree === 'gb28182Tree') {
    if (tree === "gb28182Tree") {
      this.gb28181Data = JSON.parse(JSON.stringify(this.gb28181DataPure))
    }
  }
@@ -301,7 +293,7 @@
    if (!node) {
      return
    }
    node.forEach(n => {
    node.forEach((n) => {
      // vue-js-tree 默认展开,控制部分折叠. z-tree 默认折叠, 控制部分展开
      if (this.foldNodeList[n.id]) {
        if (this.zTree) {
@@ -320,22 +312,22 @@
    if (!node) {
      return
    }
    node.forEach(n => {
    node.forEach((n) => {
      if (n.children && n.children.length > 0) {
        this.setDropDisable(n.children)
      } else {
        if (n.type === '4') {
        if (n.type === "4") {
          n.dropDisabled = true
        }
      }
    })
  }
  sortTreeData(node) {
  sortTreeData(node, parentName = "") {
    if (!node) {
      return
    }
    node.sort(function (obj1: any, obj2: any) {
    node.sort(function(obj1: any, obj2: any) {
      var val1 = obj1.name
      var val2 = obj2.name
      if (val1 < val2) {
@@ -347,42 +339,65 @@
      }
    })
    node.forEach(n => {
    node.forEach((n) => {
      if (n.children && n.children.length > 0) {
        if (this.zTree) {
          n.open = true
        }
        this.sortTreeData(n.children)
        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
        }
      }
    })
  }
  async fetchLocalTree() {
    let params: any = {
      parentId:"",
      parentId: "",
      searchType: this.searchCamType,
      cameraName: this.searchInput,
      clusterId:this.clusterId,
      devId:this.devId
      cameraName: this.searchInput
      //isPlatform: 1
    }
    if (this.searchFrom == 'cluster') {
    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)
      }
    }
  }
@@ -403,12 +418,13 @@
  async fetchGbTree() {
    const rsp: any = await getGB28181CameraTree({
      parentId: "",
      searchType: this.searchCamType,
      cameraName: this.searchInput
    })
    if (rsp && rsp.success) {
      this.gb28181Data = rsp.data ? rsp.data : []
      this.gb28181Data = rsp.data.treeMenu ? rsp.data.treeMenu : []
      if (this.gb28181Data && this.gb28181Data.length > 0) {
        this.sortTreeData(this.gb28181Data)
      }
@@ -419,11 +435,12 @@
  }
  async fetchTreeData() {
    this.cameraParents = {}
    if (this.openeds[0]) {
      this.fetchLocalTree()
      await this.fetchLocalTree()
    }
    if (this.openeds[1]) {
      this.fetchGbTree()
      await this.fetchGbTree()
    }
  }
@@ -456,7 +473,7 @@
  }
  async refreshGB28181() {
    await refreshGB28181Tree()
    await refreshGB28181Tree({})
    // this.fetchGbTree()
  }
@@ -466,20 +483,20 @@
  getAllChildrenNodes(treeNode, arr) {
    for (var i = 0; i < treeNode.length; i++) {
      var sonList = treeNode[i].children;
      var sonList = treeNode[i].children
      if (!sonList) {
        if (treeNode[i].type == "camera") {
          arr.push(treeNode[i]);
          arr.push(treeNode[i])
          if (treeNode[i].checked) {
            this.gb28181CheckedCount += 1;
            this.gb28181CheckedCount += 1
          }
        }
      } else {
        this.getAllChildrenNodes(sonList, arr);
        this.getAllChildrenNodes(sonList, arr)
      }
    }
    return arr;
    return arr
  }
  countChildrenNodes(treeNode) {
    let arry = []
@@ -494,7 +511,10 @@
    if (update) {
      fn = refreshGB28181Tree
    }
    const rsp: any = await fn()
    const rsp: any = await fn({
      clusterId: this.clusterId,
      devId: this.devId
    })
    if (rsp && rsp.success) {
      this.selectedNode = {}
@@ -507,15 +527,14 @@
      this.setDropDisable(this.treeData)
      this.isFold(this.treeData)
      this.activeTreeData = this.treeData
      this.gb28181CheckedCount = 0;
      this.gb28181CheckedCount = 0
      this.gb28181ChildNodeCount = this.countChildrenNodes(this.treeData)
      this.activeTreeData = this.treeData
    }
  }
  removeNoCheckedNode(nodes: Array<any>) {
    for (let i = 0; i < nodes.length;) {
    for (let i = 0; i < nodes.length; ) {
      if (!nodes[i].checked) {
        nodes.splice(i, 1)
        continue
@@ -528,9 +547,31 @@
    }
  }
  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 => {
    nodes.forEach((n) => {
      if (n.type == "camera") {
        count++
      }
@@ -551,7 +592,11 @@
    this.cameraNameForBaseImage = node.name
    try {
      const rsp: any = await getCameraBaseImage({ id: node.id })
      const rsp: any = await getCameraBaseImage({
        id: node.id,
        clusterId: this.clusterId,
        devId: this.devId
      })
      if (rsp && rsp.data) {
        this.gb28181CameraBaseImage = rsp.data