zhangzengfei
2021-12-21 8821d887a6acdd8882f339a50ad1893c1eed09eb
src/components/giantTree/index.vue
@@ -20,26 +20,14 @@
      @onShowPic="showCameraPic"
    />
    <div class="dialog-box-bg" v-show="showDialog" @click="hideDialogBox"></div>
    <div
      class="dialog-box"
      v-show="showDialog"
      :style="{ left: clientX + 'px', top: clientY + 'px' }"
    >
    <div class="dialog-box" v-show="showDialog" :style="{ left: clientX + 'px', top: clientY + 'px' }">
      <el-card :body-style="{ padding: '10px' }">
        <el-form
          :model="dialogForm"
          size="mini"
          :rules="rules"
          ref="dialogForm"
          label-width="70px"
        >
        <el-form :model="dialogForm" size="mini" :rules="rules" ref="dialogForm" label-width="70px">
          <el-form-item label="名称:" prop="name">
            <el-input v-model="dialogForm.text"></el-input>
          </el-form-item>
          <div class="text-center pb-2">
            <el-button size="mini" type="primary" @click="submitForm"
              >保存</el-button
            >
            <el-button size="mini" type="primary" @click="submitForm">保存</el-button>
            <el-button size="mini" @click="hideDialogBox">取消</el-button>
          </div>
        </el-form>
@@ -50,44 +38,44 @@
<script>
// import VJstree from "./jsTree";
import ZTree from "./zTree/ztree";
import ZTree from "./zTree/ztree"
export default {
  name: "GiantTreeMenu",
  components: {
    ZTree,
    ZTree
  },
  props: {
    app: {
      type: String,
      default: "Video",
      default: "Video"
    },
    node: {
      type: Array,
      type: Array
    },
    treeName: {
      type: String,
      default: "",
      default: ""
    },
    gb28181: {
      type: Boolean,
      default: false,
      default: false
    },
    height: {
      type: Number,
      default: 0,
      default: 0
    },
    setting: {
      type: Object,
      require: false,
      default: function () {
        return {};
      },
        return {}
      }
    },
    clickType: {
      type: String,
      default: "",
    },
      default: ""
    }
  },
  data() {
    return {
@@ -96,36 +84,36 @@
      clientX: 0,
      clientY: 0,
      dialogForm: {
        text: "",
        text: ""
      },
      rules: {
        text: [
          { required: true, message: "请输入节点名称", trigger: "change" },
          { min: 2, max: 10, message: "长度在2到10个字", trigger: "change" },
        ],
          { min: 2, max: 10, message: "长度在2到10个字", trigger: "change" }
        ]
      },
      curNodeTid: "",
    };
      curNodeTid: ""
    }
  },
  created() {
    // console.log(this.height, '树高度')
    this.TreeDataPool.zTree = true;
    this.TreeDataPool.zTree = true
    this.TreeDataPool.activeVideoIndex = sessionStorage.activeIndexVideo
      ? Number(sessionStorage.activeIndexVideo)
      : this.TreeDataPool.activeVideoIndex;
      : this.TreeDataPool.activeVideoIndex
  },
  watch: {
    "TreeDataPool.treeType": function (newValue) {
      if (newValue !== this.treeName) {
        this.TreeDataPool.cleanTree(this.treeName);
        this.TreeDataPool.cleanTree(this.treeName)
      }
    },
    }
  },
  methods: {
    handleCreated: function (ztreeObj) {
      let _this = this;
      this.ztreeObj = ztreeObj;
      let _this = this
      this.ztreeObj = ztreeObj
      // console.log("handleCreated")
      // onCreated 中操作ztreeObj对象展开第一个节点
      // ztreeObj.expandNode(ztreeObj.getNodes()[0], true);
@@ -133,120 +121,94 @@
      // 摄像机配置切换时, 设置选中状态
      if (this.TreeDataPool.selectedNode.id) {
        // 取消所有多选的节点,仅保留当前单选的节点
        this.TreeDataPool.selectedNodes = [this.TreeDataPool.selectedNode.id];
        this.curNodeTid = this.TreeDataPool.selectedNode.tId;
        this.TreeDataPool.selectedNodes = [this.TreeDataPool.selectedNode.id]
        this.curNodeTid = this.TreeDataPool.selectedNode.tId
        //摄像机信息更新信息后,如果节点位置有变tId就不准了,this.TreeDataPool.selectedNode此时还是旧的信息
        let ztreeNodes = ztreeObj.getNodes();
        let ztreeNodes = ztreeObj.getNodes()
        //var curNodeTid = '';
        _this.findTidByIdFromArr(ztreeNodes);
        this.TreeDataPool.selectedNode.tId = _this.curNodeTid;
        let node = this.ztreeObj.getNodeByTId(
          this.TreeDataPool.selectedNode.tId
        );
        _this.findTidByIdFromArr(ztreeNodes)
        this.TreeDataPool.selectedNode.tId = _this.curNodeTid
        let node = this.ztreeObj.getNodeByTId(this.TreeDataPool.selectedNode.tId)
        // 多选时, 选中单选单击的节点
        if (this.TreeDataPool.multiple) {
          this.ztreeObj.checkAllNodes(false);
          this.ztreeObj.checkNode(node, true, false, false);
          this.ztreeObj.checkAllNodes(false)
          this.ztreeObj.checkNode(node, true, false, false)
        }
        this.ztreeObj.selectNode(node, false, true);
        this.ztreeObj.selectNode(node, false, true)
      }
    },
    findTidByIdFromArr(arr) {
      let len = arr.length;
      let _this = this;
      let len = arr.length
      let _this = this
      for (var i = 0; i < len; i++) {
        if (arr[i].id == this.TreeDataPool.selectedNode.id) {
          _this.curNodeTid = arr[i].tId;
          break;
          _this.curNodeTid = arr[i].tId
          break
        }
        if (arr[i].children) {
          this.findTidByIdFromArr(arr[i].children);
          this.findTidByIdFromArr(arr[i].children)
        }
      }
    },
    onDblClick(evt, treeId, item) {
      if (item.type !== "4" || this.app !== "Camera") {
        return;
        return
      }
      // console.log('activeForceChoose', this.TreeDataPool.activeForceChoose)
      this.TreeDataPool.activeVideoId = item.id;
      let videoArr = this.TreeDataPool.videoArr;
      let nullVideoIndex = "";
      this.TreeDataPool.activeVideoId = item.id
      let videoArr = this.TreeDataPool.videoArr
      let nullVideoIndex = ""
      if (
        this.TreeDataPool.activeForceChoose &&
        this.TreeDataPool.activeVideoIndex !== "" &&
        this.TreeDataPool.activeVideoIndex <= videoArr.length - 1
      ) {
        this.TreeDataPool.setVideoArr(
          this.TreeDataPool.activeVideoIndex,
          undefined,
          this
        );
        this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, undefined, this)
        this.$nextTick(() => {
          this.TreeDataPool.setVideoArr(
            this.TreeDataPool.activeVideoIndex,
            item,
            this
          );
        });
        return;
          this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, item, this)
        })
        return
      }
      for (let i = 0; i < videoArr.length; i++) {
        // eslint-disable-next-line
        if (
          videoArr[i] === "" ||
          videoArr[i] === undefined ||
          videoArr[i] === null
        ) {
          nullVideoIndex = i;
          break;
        if (videoArr[i] === "" || videoArr[i] === undefined || videoArr[i] === null) {
          nullVideoIndex = i
          break
        } else {
          nullVideoIndex = "";
          nullVideoIndex = ""
        }
      }
      if (nullVideoIndex === "") {
        this.TreeDataPool.setVideoArr(
          this.TreeDataPool.activeVideoIndex,
          undefined,
          this
        );
        this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, undefined, this)
        this.$nextTick(() => {
          this.TreeDataPool.setVideoArr(
            this.TreeDataPool.activeVideoIndex,
            item,
            this
          );
        });
          this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, item, this)
        })
      } else {
        // this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, undefined, this);
        this.$nextTick(() => {
          this.TreeDataPool.setVideoArr(
            this.TreeDataPool.activeVideoIndex,
            item,
            this
          );
        });
        this.TreeDataPool.activeVideoIndex = nullVideoIndex;
          this.TreeDataPool.setVideoArr(this.TreeDataPool.activeVideoIndex, item, this)
        })
        this.TreeDataPool.activeVideoIndex = nullVideoIndex
      }
    },
    addCamera(node) {
      this.$emit("addDevice", node);
      this.$emit("addDevice", node)
    },
    importCameras(node) {
      this.$emit("import", node);
      this.$emit("import", node)
    },
    addNode(node) {
      this.dialogForm = {
        text: "",
        method: "add",
        node: node.id,
      };
      this.showDialogBox(event);
        node: node.id
      }
      this.showDialogBox(event)
    },
    editNode(node) {
      this.dialogForm = {
@@ -254,61 +216,61 @@
        method: "edit",
        node: node.id,
        alias: node.alias,
        gb28181: this.gb28181,
      };
      this.showDialogBox(event);
        gb28181: this.gb28181
      }
      this.showDialogBox(event)
    },
    delNode(node) {
      this.TreeDataPool.del(node.id);
      this.TreeDataPool.del(node.id)
    },
    submitForm() {
      // 提交新增或者编辑区域节点表单
      this.$refs.dialogForm.validate((valid) => {
        if (valid) {
          if (this.dialogForm.method == "add") {
            this.TreeDataPool.add(this.dialogForm.text, this.dialogForm.node);
            this.TreeDataPool.add(this.dialogForm.text, this.dialogForm.node)
          } else if (this.dialogForm.method == "edit") {
            this.TreeDataPool.update(
              this.dialogForm.text,
              this.dialogForm.node,
              this.gb28181 ? this.dialogForm.text : "",
              this.dialogForm.gb28181
            );
            )
          }
        } else {
          return false;
          return false
        }
      });
      this.hideDialogBox();
      })
      this.hideDialogBox()
    },
    hideDialogBox() {
      this.showDialog = false;
      this.dialogForm = { text: "" };
      this.showDialog = false
      this.dialogForm = { text: "" }
    },
    showDialogBox(event) {
      let { clientX = 0, offsetY = 0 } = event;
      let { clientX = 0, offsetY = 0 } = event
      // this.clientX = clientX - 120;
      this.clientX = 50;
      this.clientY = offsetY;
      this.showDialog = true;
      this.clientX = 50
      this.clientY = offsetY
      this.showDialog = true
    },
    itemClick(evt, treeId, treeNode) {
      if (this.clickType == "multiple") {
        evt.target.parentNode.parentNode.querySelector(".chk").click();
        return;
        evt.target.parentNode.parentNode.querySelector(".chk").click()
        return
      }
      this.TreeDataPool.selectedNode = treeNode;
      this.TreeDataPool.treeType = this.treeName;
      this.TreeDataPool.selectedNode = treeNode
      this.TreeDataPool.treeType = this.treeName
      // 多选
      if (this.TreeDataPool.multiple) {
        // 单击某一个节点文字时 取消所有勾选状态 然后选中自身
        this.ztreeObj.checkAllNodes(false);
        this.ztreeObj.checkNode(treeNode, true, false, false);
        this.ztreeObj.checkAllNodes(false)
        this.ztreeObj.checkNode(treeNode, true, false, false)
      }
      this.TreeDataPool.updateZTreeCheckNodes([treeNode]);
      this.TreeDataPool.updateZTreeCheckNodes([treeNode])
    },
    // itemClick(treeNode) {
    //   this.TreeDataPool.selectedNode = treeNode;
@@ -324,37 +286,37 @@
    //   this.TreeDataPool.updateZTreeCheckNodes([treeNode]);
    // },
    itemCheck(evt, treeId, treeNode) {
      this.TreeDataPool.selectedNode = treeNode;
      this.TreeDataPool.treeType = this.treeName;
      this.TreeDataPool.selectedNode = treeNode
      this.TreeDataPool.treeType = this.treeName
      // 多选
      // this.ztreeObj.checkNode(treeNode, true, false, false);
      let checkedNodes = this.ztreeObj.getCheckedNodes(true);
      this.TreeDataPool.updateZTreeCheckNodes(checkedNodes);
      let checkedNodes = this.ztreeObj.getCheckedNodes(true)
      this.TreeDataPool.updateZTreeCheckNodes(checkedNodes)
      // 实时统计选中个数
      this.TreeDataPool.countCheckedNodes(checkedNodes);
      this.TreeDataPool.countCheckedNodes(checkedNodes)
      // 保存一份数据
      this.TreeDataPool.activeTreeData = this.ztreeObj.getNodes();
      this.TreeDataPool.activeTreeData = this.ztreeObj.getNodes()
    },
    //展开
    itemExpand(e, id, node) {
      delete this.TreeDataPool.foldNodeList[node.id];
      delete this.TreeDataPool.foldNodeList[node.id]
    },
    // 折叠
    itemCollapse(e, id, node) {
      this.TreeDataPool.foldNodeList[node.id] = true;
      this.TreeDataPool.foldNodeList[node.id] = true
    },
    dropNode(node, item, draggedItem, e) {
      // console.log('dropNode', node, item, draggedItem);
      this.TreeDataPool.dropNode(draggedItem.id, item.id);
      this.TreeDataPool.dropNode(draggedItem.id, item.id)
    },
    showCameraPic(nodeId) {
      this.TreeDataPool.showBaseImage(nodeId);
    },
  },
};
      this.TreeDataPool.showBaseImage(nodeId)
    }
  }
}
</script>
<style lang="scss" scoped>
.dialog-box {