zhangzengfei
2020-10-27 e65c4102f0175d666746936381c3dee278358a72
添加apps.json代理,整理代码
21个文件已修改
3个文件已删除
1513 ■■■■ 已修改文件
public/apps.json 425 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/Pool/TreeData.ts 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/LeftNav.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/cardWindow.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/serfDiagram/index.vue 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/serfDiagram/indexC.vue 92 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/subComponents/FileUpload/btn.vue 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/subComponents/FileUpload/file.vue 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/subComponents/FileUpload/index.vue 23 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/components/treeMenu/index.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/ai/index/App.vue 56 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/cameraAccess/components/SystemInfo.vue 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/cameraAccess/components/scene/Editor.vue 121 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/desktop/index/App.vue 37 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/desktop/index/components/ToolsEntry.vue 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/desktop/index/store/modules/desktop.js 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/gb28181/index/App.vue 83 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/labelMark/components/RightSide.vue 159 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/labelTrack/index/App.vue 215 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/labelTrack/index/api.ts 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/labelTrack/index/main.ts 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/settings/components/BasicSetting.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/pages/settings/components/ClusterManagement.vue 59 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
vue.config.js 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
public/apps.json
@@ -1,171 +1,398 @@
{
  "code": "200",
  "success": true,
  "code": 200,
  "data": [
    {
      "id": "5",
      "name": "gb28181",
      "src": "../../images/app-mid/GB-config.png",
      "alt": "GB28181配置",
      "type": "2",
      "url": "/view/gb28181/",
      "title": "GB28181配置",
      "width": 600,
      "height": 670
    },
    {
      "id": "12",
      "name": "cameraVideo",
      "src": "../../images/app-mid/monitor.png",
      "alt": "实时监控",
      "id": "a9c4a1ad-0137-4137-acf3-fc293d6c295b",
      "name": "实时监控",
      "package": "cameraVideo",
      "type": "2",
      "url": "/view/cameraVideo/",
      "title": "实时监控",
      "width": 1328,
      "height": 690
      "height": 690,
      "iconBlob": "",
      "icon": "../../images/app-mid/monitor.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:01",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "9",
      "name": "algorithmManage",
      "src": "../../images/app-mid/algorithm-store.png",
      "alt": "应用中心",
      "id": "7dea48a4-8294-4914-85d8-c2bbd4caf553",
      "name": "应用中心",
      "package": "algorithmManage",
      "type": "2",
      "url": "/view/ai/",
      "title": "应用中心",
      "width": 1243,
      "height": 670
      "height": 670,
      "iconBlob": "",
      "icon": "../../images/app-mid/algorithm-store.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:02",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "1",
      "name": "cameraAccess",
      "src": "../../images/app-mid/camera-access.png",
      "alt": "camera-access",
      "id": "2224a376-5436-4323-ad65-c26d95efaa54",
      "name": "摄像机配置",
      "package": "cameraAccess",
      "type": "2",
      "url": "/view/cameraAccess/",
      "title": "摄像机配置",
      "width": 1200,
      "height": 670
      "height": 670,
      "iconBlob": "",
      "icon": "../../images/app-mid/camera-access.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:03",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "2",
      "name": "dataStack",
      "src": "../../images/app-mid/datastack-config.png",
      "alt": "datastack-config",
      "type": "2",
      "url": "/view/cameraAccess/?dataStack=1",
      "title": "数据栈配置",
      "width": 1200,
      "height": 670
    },
    {
      "id": "4",
      "name": "datapush",
      "src": "../../images/app-mid/data-push.png",
      "alt": "data-push",
      "id": "6404e04d-f01a-4a6f-9f6b-5d53a7fc9af3",
      "name": "数据推送",
      "package": "datapush",
      "type": "2",
      "url": "/view/datapush/",
      "title": "数据推送",
      "width": 1024,
      "height": 512
      "height": 512,
      "iconBlob": "",
      "icon": "../../images/app-mid/data-push.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:05",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "7",
      "name": "library",
      "src": "../../images/app-mid/library.png",
      "alt": "比对库管理",
      "type": "2",
      "url": "/view/library/",
      "title": "比对库管理",
      "width": 1200,
      "height": 670
    },
    {
      "id": "11",
      "name": "analysisPower",
      "src": "../../images/app-mid/hashrate-manage.png",
      "alt": "算力管理",
      "id": "d71e7870-016d-4f02-ab24-895a74c713c8",
      "name": "算力管理",
      "package": "analysisPower",
      "type": "2",
      "url": "/view/analysisPower/",
      "title": "算力管理",
      "width": 1200,
      "height": 670
      "height": 670,
      "iconBlob": "",
      "icon": "../../images/app-mid/hashrate-manage.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:07",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "13",
      "name": "search",
      "src": "../../images/app-mid/search.png",
      "alt": "统计查询",
      "id": "f45474ee-70cf-4ed2-8a06-c17429fbb70a",
      "name": "统计查询",
      "package": "search",
      "type": "2",
      "url": "/view/search/",
      "title": "统计查询",
      "width": 1344,
      "height": 675
      "height": 677,
      "iconBlob": "",
      "icon": "../../images/app-mid/search.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:08",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "15",
      "name": "syslog",
      "src": "../../images/app-mid/log-manage.png",
      "alt": "日志管理",
      "id": "850b5e86-dbcf-40f2-8511-745a4d06ec84",
      "name": "日志管理",
      "package": "syslog",
      "type": "2",
      "url": "/view/syslog/",
      "title": "日志管理",
      "width": 1200,
      "height": 600
      "height": 600,
      "iconBlob": "",
      "icon": "../../images/app-mid/log-manage.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:09",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "17",
      "name": "settings",
      "src": "../../images/app-mid/settings.png",
      "alt": "系统设置",
      "id": "5a5e0610-0a62-4de3-8021-2c6652c29ebf",
      "name": "系统设置",
      "package": "settings",
      "type": "2",
      "url": "/view/settings/",
      "title": "系统设置",
      "width": 1200,
      "height": 650
      "height": 650,
      "iconBlob": "",
      "icon": "../../images/app-mid/settings.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:10",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "18",
      "name": "vindicate",
      "src": "../../images/app-mid/vindicate.png",
      "alt": "系统维护",
      "id": "ee64fe23-7631-4ef9-9aca-ea09673693be",
      "name": "系统维护",
      "package": "vindicate",
      "type": "2",
      "url": "/view/vindicate/",
      "title": "系统维护",
      "width": 760,
      "height": 534
      "height": 534,
      "iconBlob": "",
      "icon": "../../images/app-mid/vindicate.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:11",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "19",
      "name": "heatCamera",
      "src": "../../images/app-mid/algorithm-manage.png",
      "alt": "热力图",
      "id": "1e51abbf-a4dd-4cf9-9eee-2149102d6d62",
      "name": "比对库管理",
      "package": "library",
      "type": "2",
      "url": "/view/heatCamera/",
      "title": "热力图",
      "width": 760,
      "height": 600
      "url": "/view/library/",
      "title": "比对库管理",
      "width": 1200,
      "height": 670,
      "iconBlob": "",
      "icon": "../../images/app-mid/library.png",
      "version": "1.0.0",
      "create_time": "2020-10-10 20:39:25",
      "create_by": "basic",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": true,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "20",
      "name": "areaManage",
      "src": "../../images/app-mid/device.png",
      "alt": "摄像机区域管理",
      "id": "aaf6875a-2e45-414a-affd-ae0a97420920",
      "name": "GB28181配置",
      "package": "gb28181",
      "type": "2",
      "url": "/view/gb28181/",
      "title": "GB28181配置",
      "width": 600,
      "height": 670,
      "iconBlob": "",
      "icon": "../../images/app-mid/GB-config.png",
      "version": "1.0.2",
      "create_time": "2020-10-24 21:47:23",
      "create_by": "basic",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": false,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "af412cbe-472e-4dbc-b962-b290483c9ea9",
      "name": "数据栈配置",
      "package": "dataStack",
      "type": "2",
      "url": "/view/cameraAccess/?dataStack=1",
      "title": "数据栈配置",
      "width": 1200,
      "height": 670,
      "iconBlob": "",
      "icon": "../../images/app-mid/datastack-config.png",
      "version": "1.0.1",
      "create_time": "2020-10-24 21:47:38",
      "create_by": "basic",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": false,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "c60621e5-1147-4f75-8e66-5b695d8d286d",
      "name": "摄像机区域管理",
      "package": "areaManage",
      "type": "2",
      "url": "/view/areaManage/",
      "title": "摄像机区域管理",
      "width": 1200,
      "height": 600
      "height": 600,
      "iconBlob": "",
      "icon": "../../images/app-mid/device.png",
      "version": "1.0.1",
      "create_time": "2020-10-24 21:59:24",
      "create_by": "basic",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": false,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "202",
      "name": "visual",
      "src": "../../images/app-mid/visual.png",
      "alt": "数据可视化",
      "id": "70c4eaea-a884-4a7f-a2d3-3d40aa5999bf",
      "name": "数据可视化",
      "package": "visual",
      "type": "1",
      "url": "/view/visual/",
      "title": "数据可视化",
      "width": 1200,
      "height": 600
      "height": 600,
      "iconBlob": "",
      "icon": "../../images/app-mid/visual.png",
      "version": "1.0.1",
      "create_time": "",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": false,
      "remoteVersion": "1.0.1",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "f45474ee-70cf-4e22-8a06-c17429fbb70a",
      "name": "热力图",
      "package": "heatCamera",
      "type": "2",
      "url": "/view/heatCamera/",
      "title": "热力图",
      "width": 1344,
      "height": 880,
      "iconBlob": "",
      "icon": "../../images/app-mid/algorithm-manage.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:08",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": false,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "f454741e-70cf-4e22-8a06-c17429fbb70c",
      "name": "统计查询(集群)",
      "package": "searchForCluster",
      "type": "2",
      "url": "/view/searchForCluster/",
      "title": "统计查询(集群)",
      "width": 1344,
      "height": 677,
      "iconBlob": "",
      "icon": "../../images/app-mid/search.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:08",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": false,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    },
    {
      "id": "fa5434ee-70cf-4e22-8a06-c17429fbb70b",
      "name": "相机标定",
      "package": "labelMark",
      "type": "2",
      "url": "/view/labelMark/",
      "title": "相机标定",
      "width": 1500,
      "height": 750,
      "iconBlob": "",
      "icon": "../../images/app-mid/360.png",
      "version": "1.0.0",
      "create_time": "2020-10-09 14:00:08",
      "create_by": "",
      "update_time": "",
      "update_by": "",
      "isDelete": 0,
      "isDefault": false,
      "remoteVersion": "",
      "installed": true,
      "isUpgrade": false,
      "progressMsg": ""
    }
  ]
  ],
  "msg": "请求处理成功",
  "success": true
}
src/Pool/TreeData.ts
@@ -296,13 +296,12 @@
  }
  async fetchLocalTree() {
    let params:any = {
    let params: any = {
      searchType: this.searchCamType,
      cameraName: this.searchInput,
      //isPlatform: 1
    };
    debugger
    if(this.searchFrom == 'cluster'){
    if (this.searchFrom == 'cluster') {
      params.isPlatform = 1
    }
    const rsp: any = await getLocalCameraTree(params);
@@ -320,15 +319,15 @@
    }
  }
  async fetchClusterTree (){
  async fetchClusterTree() {
    const rsp: any = await getClusterTree({
      searchType: this.searchCamType,
      cameraName: this.searchInput
    });
    if(rsp && rsp.success){
    if (rsp && rsp.success) {
      console.log(rsp.data);
      this.clusterData = rsp.data ? rsp.data : []
      if(this.clusterData && this.clusterData.length > 0){
      if (this.clusterData && this.clusterData.length > 0) {
        this.sortTreeData(this.clusterData)
      }
      this.clusterDataPure = JSON.parse(JSON.stringify(this.clusterData));
src/components/LeftNav.vue
@@ -468,7 +468,6 @@
      this.TreeDataPool.fetchClusterTree();
      findCluster().then(res => {
        if (res.success) {
          debugger
          this.clusterName = res.data.clusterName;
        }
src/components/cardWindow.vue
@@ -107,8 +107,6 @@
      }
    },
    async nextPage(dataInfo, index) {
      console.log(this)
      debugger
      let id = dataInfo[0].id
      let res = this.CardList.getBehindEle(id)
      if (res) {
src/components/serfDiagram/index.vue
@@ -33,7 +33,7 @@
    startX: Number,
    isShowHover: Boolean
  },
  data () {
  data() {
    return {
      nodeSize: 20,
      fontSize: 20,
@@ -47,7 +47,7 @@
    };
  },
  computed: {
    nodes () {
    nodes() {
      let n = new Array();
      this.members.forEach((v, i) => {
        n.push({
@@ -64,7 +64,7 @@
      return n;
    },
    links () {
    links() {
      let arr = new Array();
      let dup = new Array(); // Deduplicate to ensure that two nodes have only one line
      const count = this.members.length;
@@ -99,7 +99,7 @@
      return arr;
    },
    options () {
    options() {
      return {
        force: 3000,
        nodeSize: this.nodeSize,
@@ -118,11 +118,11 @@
      };
    }
  },
  created () {
  created() {
    this.reset();
  },
  methods: {
    nodeHover (event, node) {
    nodeHover(event, node) {
      console.log(node);
      node._opacity = 1;
      node._size = 28;
@@ -133,7 +133,7 @@
        this.toolTipStyle.left = node.x + "px";
        console.log(this.members[node.id]);
        let workName = '';
        switch(this.members[node.id].workType){
        switch (this.members[node.id].workType) {
          case '01':
            workName = '分析'
            break;
@@ -154,55 +154,44 @@
      }
    },
    nodeOut (event, node) {
    nodeOut(event, node) {
      node._opacity = node.opacity;
      node._size = node.size;
      this.toolTipStyle.display = "none";
    },
    dragStart (event) {
    dragStart(event) {
      if (event) {
        this.movement = event.timeStamp;
      }
    },
    nodeClick (event, node) {
      // if (this.nodeSelected[node.id]) {
      //   this.unSelectNode(node.id)
      //   // is not nodeSelected
      // } else {
      //   this.selectNode(node)
      // }
      // this.selectNodesLinks()
      // this.$set(this.nodes, node.index, node)
      console.log(event, node)
      debugger
    nodeClick(event, node) {
      if (event.timeStamp - this.movement < 200) {
        this.$emit("selected-node", event, this.members[node.id]);
      }
    },
    reset () {
    reset() {
      this.nodeSelected = {};
      this.linksSelected = {};
      (this.toolTipNode = ""), (this.toolTipAddr = ""), (this.movement = 0);
    },
    unSelectNode (nodeId) {
    unSelectNode(nodeId) {
      if (this.nodeSelected[nodeId]) {
        delete this.nodeSelected[nodeId];
      }
      this.selectNodesLinks();
    },
    unSelectLink (linkId) {
    unSelectLink(linkId) {
      if (this.linksSelected[linkId]) {
        delete this.linksSelected[linkId];
      }
    },
    selectNode (node) {
    selectNode(node) {
      this.nodeSelected[node.id] = node;
    },
    selectLink (link) {
    selectLink(link) {
      this.$set(this.linksSelected, link.id, link);
    },
    selectNodesLinks () {
    selectNodesLinks() {
      for (let link of this.links) {
        // node is nodeSelected
        if (this.nodeSelected[link.sid] || this.nodeSelected[link.tid]) {
@@ -297,7 +286,7 @@
  right: 50%;
  top: 100%;
  border: solid transparent;
  content: ' ';
  content: " ";
  height: 0;
  width: 0;
  position: absolute;
src/components/serfDiagram/indexC.vue
@@ -84,7 +84,7 @@
  computed: {
    //分类节点
    //云内云边节点
    memberNodes(){
    memberNodes() {
      let arr = [];
      let mockMembers = [
        {
@@ -103,7 +103,7 @@
          node_id: "DSVAD010120190623",
          node_ip: "192.168.20.10:30190",
          node_name: "开发测试20.10-1",
          role:'master'
          role: 'master'
        },
        {
          cluster_id: "b6132bfe-d3af-4710-ba89-436f614c2g",
@@ -112,7 +112,7 @@
          node_id: "DSVAD010120190624",
          node_ip: "192.168.20.10:30190",
          node_name: "测试20.10-1",
          role:'pc'
          role: 'pc'
        },
        {
          cluster_id: "b6132bfe-d3af-4710-ba89-436f614c2h",
@@ -121,17 +121,17 @@
          node_id: "DSVAD010120190625",
          node_ip: "192.168.20.10:30190",
          node_name: "测试20.101-1",
          role:'server'
          role: 'server'
        },
      ]
      //this.members.forEach(item=>{
      mockMembers.forEach(item=>{
        if(item.hardwareType=='03'){
      mockMembers.forEach(item => {
        if (item.hardwareType == '03') {
          arr.push({
            id:item.id,
            cluster_id:item.cluster_id,
            name:item.nodeName,
            id: item.id,
            cluster_id: item.cluster_id,
            name: item.nodeName,
            svgSym: RoleIcon[item.role],
            x: -10,
            y: -10,
@@ -142,11 +142,11 @@
                  ? "orange"
                  : ""
          });
        }else{
        } else {
          arr.push({
            id:item.id,
            cluster_id:item.cluster_id,
            name:item.nodeName,
            id: item.id,
            cluster_id: item.cluster_id,
            name: item.nodeName,
            svgSym: RoleIcon[item.role],
            _color:
              this.agent === item.nodeName
@@ -155,14 +155,14 @@
                  ? "orange"
                  : ""
          });
        }
        }
      });
      console.log('serf-mem',arr)
      console.log('serf-mem', arr)
      return arr;
    },
    //1.云内节点(对应X86)
    innerNodes(){
    innerNodes() {
      // return this.members.map(item=>{
      //   if(item.hardwareType == '01'||item.hardwareType == '02'){
      //     return {
@@ -179,12 +179,12 @@
      //   }
      // })
      let arr = [];
      this.members.forEach(item=>{
        if(item.hardwareType == '01'||item.hardwareType == '02'){
      this.members.forEach(item => {
        if (item.hardwareType == '01' || item.hardwareType == '02') {
          arr.push({
            id:item.id,
            cluster_id:item.cluster_id,
            name:item.nodeName,
            id: item.id,
            cluster_id: item.cluster_id,
            name: item.nodeName,
            svgSym: RoleIcon[item.role],
            _color:
              this.agent === item.nodeName
@@ -200,15 +200,14 @@
      return arr;
    },
    //2.边节点(现对应bit)
    outerNodes(){
    outerNodes() {
      let arr = [];
      this.members.forEach(item=>{
        debugger
        if(item.hardwareType == '03'){
      this.members.forEach(item => {
        if (item.hardwareType == '03') {
          arr.push({
            id:item.id,
            cluster_id:item.cluster_id,
            name:item.nodeName,
            id: item.id,
            cluster_id: item.cluster_id,
            name: item.nodeName,
            svgSym: RoleIcon[item.role],
            _color:
              this.agent === item.nodeName
@@ -277,7 +276,7 @@
      return arr;
    },
    options() {
      return {
        force: 3000,
@@ -293,20 +292,20 @@
      };
    }
  },
  watch:{
    searchNodes(n,o){
      console.log(n,o)
  watch: {
    searchNodes(n, o) {
      console.log(n, o)
    }
  },
  created() {
    this.reset();
  },
  mounted(){
    console.log('searchNodes',this.searchNodes)
  mounted() {
    console.log('searchNodes', this.searchNodes)
    console.log(this.members)
    console.log('innerNodes',this.innerNodes);
    console.log('outerNodes',this.outerNodes)
    console.log('innerNodes', this.innerNodes);
    console.log('outerNodes', this.outerNodes)
  },
  methods: {
    nodeHover(event, node) {
@@ -341,13 +340,12 @@
      // }
      // this.selectNodesLinks()
      // this.$set(this.nodes, node.index, node)
      console.log(event,node)
      console.log(event, node)
      console.log(this.members)
      console.log(this.members[node.id])
      if (event.timeStamp - this.movement < 200) {
        //this.$emit("selected-node", event, this.members[node.id]);
        debugger
        let someNode = this.members.find(one=>one.id == node.id)
        let someNode = this.members.find(one => one.id == node.id)
        this.$emit("selected-node", event, someNode);
      }
    },
@@ -486,14 +484,14 @@
  border-width: 6px;
  margin-top: -6px;
}
.clouds{
.clouds {
  height: 100%;
  margin:0;
  background:rgba(149, 221, 255, 0.322);
  margin: 0;
  background: rgba(149, 221, 255, 0.322);
}
.inner{
.inner {
  /* height:300px;
  margin: 50px auto; */
  background:rgba(152, 183, 251, 0.39);
  background: rgba(152, 183, 251, 0.39);
}
</style>
src/components/subComponents/FileUpload/btn.vue
@@ -28,11 +28,10 @@
      }
    }
  },
  watch:{
    attrs:{
      handler(n,o){
        debugger
        this.$nextTick(()=>{
  watch: {
    attrs: {
      handler(n, o) {
        this.$nextTick(() => {
          this.uploader.uploader.assignBrowse(this.$refs.btn, this.directory, this.single, n)
        })
      },
@@ -41,7 +40,7 @@
  },
  mounted() {
    this.$nextTick(() => {
      console.log('attrs',this.attrs)
      console.log('attrs', this.attrs)
      this.uploader.uploader.assignBrowse(this.$refs.btn, this.directory, this.single, this.attrs)
    })
  }
src/components/subComponents/FileUpload/file.vue
@@ -203,7 +203,6 @@
      this._actionCheck()
    },
    processResponse(message) {
      debugger
      let res = message
      try {
        res = JSON.parse(message)
@@ -238,16 +237,14 @@
      this.error = false
      this.isComplete = true
      this.isUploading = false
      console.log('rootFile, file, message',rootFile, file, message)
      debugger
      console.log('rootFile, file, message', rootFile, file, message)
    },
    _fileComplete() {
      this._fileSuccess()
    },
    _fileError(rootFile, file, message) {
      this._fileProgress()
      console.log('rootFile, file, message',rootFile, file, message)
      debugger
      console.log('rootFile, file, message', rootFile, file, message)
      this.processResponse(message)
      this.error = true
      this.isComplete = false
src/components/subComponents/FileUpload/index.vue
@@ -88,7 +88,7 @@
      // }
    }
  },
  data () {
  data() {
    return {
      fileName: "",
      fileMd5: "",
@@ -105,10 +105,10 @@
    }
  },
  computed: {
    uploader () {
    uploader() {
      return this.$refs.uploader.uploader;
    },
    options () {
    options() {
      return {
        target: this.url,
        testChunks: true,
@@ -119,14 +119,14 @@
    }
  },
  methods: {
    onFileAdded (file) {
    onFileAdded(file) {
      if (this.single) {
        this.uploader.fileList = this.uploader.fileList.slice([-1]);
        this.$emit("file-added")
      }
      this.computeMD5(file);
    },
    computeMD5 (file) {
    computeMD5(file) {
      let fileReader = new FileReader();
      let time = new Date().getTime();
      let blobSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;
@@ -155,13 +155,13 @@
        this.error(`文件${file.name}读取出错,请检查该文件`)
        file.cancel();
      };
      function loadNext () {
      function loadNext() {
        let start = currentChunk * chunkSize;
        let end = ((start + chunkSize) >= file.size) ? file.size : start + chunkSize;
        fileReader.readAsArrayBuffer(blobSlice.call(file.file, start, end));
      }
    },
    computeMD5Success (md5, file) {
    computeMD5Success(md5, file) {
      // 将自定义参数直接加载uploader实例的opts上
      // if (this.$route.path.indexOf("VideoManage") >= 0) {
      //   Object.assign(this.uploader.opts, {
@@ -184,18 +184,17 @@
      file.resume();
      this.statusText.paused = "暂停中";
    },
    onComplete () {
      debugger
    onComplete() {
      this.$emit("complete", { filename: this.fileName, identifier: this.fileMd5 });
    },
    fileComplete () {
    fileComplete() {
      // console.log('file complete', arguments)
    },
    closeHandle () {
    closeHandle() {
      this.$emit("close")
    }
  },
  mounted () {
  mounted() {
    this.$nextTick(() => {
      console.log(this.acptTypes)
      window.uploader = this.$refs.uploader.uploader
src/components/treeMenu/index.vue
@@ -334,8 +334,7 @@
      }
    },
    dropNode(node, item, draggedItem, e) {
      console.log('dropNode',node, item,draggedItem);
      debugger
      console.log('dropNode', node, item, draggedItem);
      this.TreeDataPool.dropNode(draggedItem.id, item.id)
    }
  }
src/pages/ai/index/App.vue
@@ -505,7 +505,7 @@
    //   });
    //   return arr;
    // },
    isAdmin () {
    isAdmin() {
      if (
        sessionStorage.getItem("userInfo") &&
        sessionStorage.getItem("userInfo") !== ""
@@ -517,7 +517,7 @@
      return false;
    },
  },
  data () {
  data() {
    return {
      sdkList: [],
      installedList: [],
@@ -568,7 +568,7 @@
      }
    }
  },
  mounted () {
  mounted() {
    // 获取所有应用
    this.getAllSdk();
    this.getAllApps();
@@ -577,11 +577,11 @@
    this.getUnActivedAppList();
  },
  methods: {
    isShow (authority) {
    isShow(authority) {
      return this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
    },
    //离线安装
    offlineInstall () {
    offlineInstall() {
      this.installDialogVisible = false;
      this.isInstall = true;
      //安装
@@ -611,7 +611,7 @@
        });
      })
    },
    downloadApp (app, action) {
    downloadApp(app, action) {
      if (action == 'upgrade') {
        app.upgradeLoading = true;
      } else {
@@ -654,7 +654,7 @@
      this.appUpgreading = true;
      this.startAutoFresh();
    },
    async getAllApps () {
    async getAllApps() {
      let iArry = []
      let sArry = []
@@ -680,7 +680,7 @@
      this.storeApps = sArry;
    },
    //卸载应用
    unLoad (app) {
    unLoad(app) {
      app.unloadLoading = true;
      let _this = this;
      removeApp({ appId: app.id }).then(res => {
@@ -707,7 +707,7 @@
    //   this.activeCode = '';
    //   this.activedSdkOrApp = this.newActInfo()
    // },
    actSdkOrApp (id, type = 'sdk') {
    actSdkOrApp(id, type = 'sdk') {
      this.actType = type;
      this.actId = id;
      this.actDrawerShow = true;
@@ -715,7 +715,7 @@
      this.activeCode = '';
      this.activedSdkOrApp = this.newActInfo()
    },
    newActInfo () {
    newActInfo() {
      return {
        activateCode: '',
        productName: '',
@@ -725,7 +725,7 @@
        devIds: ''
      }
    },
    getUnActivedList () {
    getUnActivedList() {
      getUnActivedSdk().then(res => {
        if (res.code == 200) {
          this.unActivedSDKList = res.data;
@@ -733,14 +733,14 @@
      })
    },
    getUnActivedAppList () {
    getUnActivedAppList() {
      getUnActivedApp().then(res => {
        if (res.code == 200) {
          this.unActivedAppList = res.data;
        }
      });
    },
    actived () {
    actived() {
      let _this = this;
      if (this.actType == 'sdk') {
        //激活算法
@@ -778,12 +778,12 @@
        });
      }
    },
    getCodeDetail () { },
    checkMyAlgorith () {
    getCodeDetail() { },
    checkMyAlgorith() {
      this.actDrawerShow = false;
      this.activeName = "myAlgorithm";
    },
    onFileUpload (file) {
    onFileUpload(file) {
      //this.patchUpdateStatus = `<span style="color:green">上传成功, 点击升级按钮开始安装</span>`;
      this.patchFile = { ...file };
      this.fileAdded = true;
@@ -794,7 +794,6 @@
        _this.installFile = file;
        if (res.success) {
          _this.installDialogVisible = true;
          debugger
          if (res.data.apps.length > 0) {
            _this.installAppPackage = {
              appId: res.data.apps[0].appId,
@@ -821,11 +820,11 @@
    },
    onFileAdded (f) {
    onFileAdded(f) {
      this.patchUpdateStatus = "";
    },
    async getAllSdk () {
    async getAllSdk() {
      let installedList = [];
      let unInstalledList = [];
      let res = await findAllSdk();
@@ -861,8 +860,7 @@
      this.notInstalledList = unInstalledList;
    },
    donwload (item) {
      debugger
    donwload(item) {
      item.upgradeLoading = true;
      //this.downloading = true;
      this.downloadItem = item.id;
@@ -891,14 +889,14 @@
      this.appUpgreading = true;
      this.startAutoFresh();
    },
    inputBlur (item) {
    inputBlur(item) {
      // console.log(item, '修改名称')
      this.$set(item, "isEdit", false);
    },
    handleTabClick () {
    handleTabClick() {
    },
    startAutoFresh () {
    startAutoFresh() {
      if (this.freshTimer) {
        clearTimeout(this.freshTimer)
      }
@@ -981,7 +979,7 @@
.src-title {
  //color: #bfbfbf;
  color: #bbcee8;
  font-family: 'PingFangSC-Semibold', 'PingFang SC Semibold', 'PingFang SC';
  font-family: "PingFangSC-Semibold", "PingFang SC Semibold", "PingFang SC";
  font-weight: 650;
  font-style: normal;
  height: 36px;
@@ -1006,7 +1004,7 @@
      position: absolute;
      top: 50%;
      left: 50%;
      background: url('/images/algo/green.gif');
      background: url("/images/algo/green.gif");
      overflow: hidden;
      transform: translate(-50%, -50%);
      .inner-bar {
@@ -1168,16 +1166,16 @@
        }
      }
      .drawer-content {
        font-family: 'PingFangSC-Regular';
        font-family: "PingFangSC-Regular";
        .el-step__title.is-process {
          border-color: #3d68e1 !important;
          color: #3d68e1 !important;
          font-family: Tahoma, Helvetica, Arial, '\5B8B\4F53', sans-serif;
          font-family: Tahoma, Helvetica, Arial, "\5B8B\4F53", sans-serif;
        }
        .el-step__head.is-process {
          border-color: #3d68e1 !important;
          color: #3d68e1 !important;
          font-family: Tahoma, Helvetica, Arial, '\5B8B\4F53', sans-serif;
          font-family: Tahoma, Helvetica, Arial, "\5B8B\4F53", sans-serif;
        }
        .el-input {
          width: 100%;
src/pages/cameraAccess/components/SystemInfo.vue
@@ -1,6 +1,6 @@
<template>
  <div :class="showClass">
    <div class="card-box" >
    <div class="card-box">
      <ul>
        <li style="max-width:30px;" v-if="ShowLocalVedio">
          <div class="total-box">
@@ -129,9 +129,8 @@
      this.$forceUpdate();
    }
  },
  mounted(){
    console.log('PollData.RealTimeValidCount',this.PollData.RealTimeValidCount)
    debugger;
  mounted() {
    console.log('PollData.RealTimeValidCount', this.PollData.RealTimeValidCount)
  }
}
</script>
src/pages/cameraAccess/components/scene/Editor.vue
@@ -32,10 +32,16 @@
                  placeholder="选关系"
                  @change="selConnection(sdkItem)"
                >
                  <el-option :value="item.value" :title="item.name" :label="item.name" v-for="item in sdkConnects" :key="item.id"></el-option>
                  <el-option
                    :value="item.value"
                    :title="item.name"
                    :label="item.name"
                    v-for="item in sdkConnects"
                    :key="item.id"
                  ></el-option>
                  <!-- <el-option value="&&" title="and/且" label="and/且"></el-option>
                  <el-option value="||" title="or/或" label="or/或"></el-option>
                  <el-option value="=>" title="—>/触发" label="—>/触发"></el-option> -->
                  <el-option value="=>" title="—>/触发" label="—>/触发"></el-option>-->
                </el-select>
                <el-checkbox
                  v-show="sdkItem.rule_with_pre == '=>' || sdkItem.rule_with_pre == '!=>'"
@@ -150,7 +156,7 @@
                      </div>
                      <div v-else>
                        <el-select
                          v-if="arg.type == 'option'"
                          v-if="arg.type == 'option'"
                          v-model="arg.sdk_arg_value"
                          :multiple="arg.config.isMulti"
                          collapse-tags
@@ -164,7 +170,7 @@
                            :title="one.name"
                          ></el-option>
                        </el-select>
                        <el-input
                          v-if="arg.type == 'value'"
                          v-model="arg.sdk_arg_value"
@@ -387,13 +393,12 @@
    sdkGroup: {
      handler(newV, oldV) {
        if (newV) {
          newV.forEach(sdk => {
            let rangeOne = sdk.defaultArg.find(
              arg => arg.operators[0].operator == 'range'
            )
            if (rangeOne) {
              debugger
              if (rangeOne.min.trim() && rangeOne.max.trim()) {
                rangeOne.sdk_arg_value = rangeOne.min + '|' + rangeOne.max
              } else {
@@ -510,10 +515,10 @@
    }
  },
  methods: {
    getSdkConnection(){
    getSdkConnection() {
      console.log(this.VideoManageData.Dictionary)
      this.sdkConnects = this.VideoManageData.Dictionary['RULECOMPUTEBETWEEN'].map(r => {
        return {
          name: r.name,
          value: r.value
@@ -521,7 +526,7 @@
      });
    },
    selConnection(sdkItem) {
    },
    addSdkItem() {
@@ -530,7 +535,7 @@
      itemTemp.polygonObj = JSON.parse(JSON.stringify(this.allPolygonData[0]))
      this.selectPolygonOption(itemTemp)
      this.sdkGroup.push(itemTemp)
    },
    delConfigItem(index) {
      // if(index != 0){
@@ -594,9 +599,9 @@
      }
      //默认选中第一个operator
      //if (copyArgTemp.operators.length == 1) {
        this.$set(copyArgTemp, 'operator', copyArgTemp.operators[0].operator)
      this.$set(copyArgTemp, 'operator', copyArgTemp.operators[0].operator)
      //}
      if (copyArgTemp.default_value) {
        this.$set(copyArgTemp, 'sdk_arg_value', copyArgTemp.default_value)
      }
@@ -623,7 +628,7 @@
      }
    },
    selOptionalArg(sdkItem, optArgItem) {
      let newSort = 0
      sdkItem.optNames.forEach(name => {
        if (name.name == optArgItem.name) {
@@ -642,7 +647,7 @@
      }
      //默认选中第一个operator
      //if (argObj.operators.length == 1) {
        this.$set(argObj, 'operator', argObj.operators[0].operator)
      this.$set(argObj, 'operator', argObj.operators[0].operator)
      //}
      //替换新的参数配置对象
      sdkItem.optArg.forEach((arg, index) => {
@@ -654,7 +659,7 @@
      console.log(argObj.valueOptions)
    },
    setOptArgValueOptions(optArg) {
      let alias = optArg.alias;
      console.log(this.VideoManageData.Dictionary[alias])
      optArg.valueOptions = this.VideoManageData.Dictionary[alias].map(r => {
@@ -665,7 +670,7 @@
      });
    },
    validateArgVal(sdkArgItem, e) {
      if (typeof (sdkArgItem.sdk_arg_value) == 'string' && sdkArgItem.sdk_arg_value == '') {
        this.$notify({
          type: 'warning',
@@ -685,7 +690,7 @@
        let res = sdkArgItem.range.match(reg)
        let min = Number(res[1]),
          max = Number(res[2])
        //判断非区间类
        if (sdkArgItem.sdk_arg_value && sdkArgItem.operator != 'range') {
@@ -819,7 +824,7 @@
      this.valideArgValue(rule)
    },
    selectPolygonOption(rule) {
      rule.polygon_id = rule.polygonObj.polygonId
        ? rule.polygonObj.polygonId
        : rule.polygon_id
@@ -830,7 +835,7 @@
    },
    //选择算法 resetArgs为true是添加为false是初始化编辑
    selectSDKOption(sdkItem, resetArgs) {
      //sdkItem.sdk_id = sdkItem.sdkObj.id;
      if (resetArgs) {
        sdkItem.argDef = JSON.parse(sdkItem.sdkObj.argDef)
@@ -846,13 +851,13 @@
            if (arg.operators[0].operator == 'range') {
              //区间值的处理
              //this.$set(arg, 'sdk_arg_value', arg.min+','+arg.max)
              //this.$set(arg, 'sdk_arg_value', arg.range.substring(1,arg.range.length-1));
            }
          }
          if(arg.type == 'option'){
          if (arg.type == 'option') {
            this.setOptArgValueOptions(arg)
          }
          if (arg.default_value) {
@@ -870,14 +875,14 @@
          sort: arg.sort,
          isSelected: false
        }))
        sdkItem.initAddOptional = sdkItem.optionalArg.length > 0 ? true : false
        sdkItem.optArg = []
      }
      //添加场景时,如果场景名称为空,就将选择的第一个算法名同步到场景名称
      if (this.sdkGroup[0] && resetArgs) {
        this.$emit('sdkNameChange', this.sdkGroup[0].sdkObj.sdk_name)
      }
@@ -909,7 +914,7 @@
    },
    //选择算法配置
    selOperator(rule) {
    },
    selectArgsOption(rule, resetArgValue) {
      // rule.operator_type = "";
@@ -1124,12 +1129,12 @@
      // }
    },
    editRule(ruleGroup) {
      this.sdkGroup = []
      this.group_id = ''
      ruleGroup.forEach(rule => {
        let tempObj = {}
        if (rule.group_id && rule.group_id != '') {
@@ -1167,7 +1172,7 @@
        sdkObj = this.TaskMange.list1.find(sdk => sdk.id == rule.sdk_id)
        argDef = JSON.parse(sdkObj.argDef)
        defaultArg = argDef.filter(arg => !arg.config.isOptional)
        optionalArg = argDef.filter(arg => arg.config.isOptional)
@@ -1179,8 +1184,8 @@
          })
          if (optItem) {
            //if (optItem.operators.length > 1) {
              optItem.operator = arg.operator
              //this.selOperator(optItem)
            optItem.operator = arg.operator
            //this.selOperator(optItem)
            //}
            //赋值
@@ -1195,30 +1200,29 @@
            if (optItem.type == 'option') {
              this.setOptArgValueOptions(optItem)
            }
            if(optItem.alias=="bForceSend"){
            if (optItem.alias == "bForceSend") {
            }
            //在push之前,需要判断是否配置了这个可选项  在sdk_set配置数组里,
            optArg.push(optItem)
          } else {
            defaultArg.forEach(d => {
              if (d.sort == arg.sort) {
                if (arg.sdk_arg_value.indexOf('|') > 0) {
                  debugger
                  //区间值
                  d.min = arg.sdk_arg_value.split('|')[0];
                  d.max = arg.sdk_arg_value.split('|')[1];
                  d.operator = 'range'
                //} else if(arg.sdk_arg_value.indexOf(',') > 0){
                } else if(arg.operator_type == 'option'){
                  //} else if(arg.sdk_arg_value.indexOf(',') > 0){
                } else if (arg.operator_type == 'option') {
                  //多选类型的值
                  d.sdk_arg_value = arg.sdk_arg_value.split(',');
                  this.setOptArgValueOptions(d)
                } else{
                } else {
                  d.sdk_arg_value = arg.sdk_arg_value
                }
                d.operator = arg.operator;
@@ -1260,7 +1264,7 @@
          tempObj.isAddable = false;
        }
        //this.selectSDKOption(tempObj, false)
        this.sdkGroup.push(tempObj)
        //设置算法
      })
@@ -1291,7 +1295,7 @@
        .catch(() => { })
    },
    submitRule() {
      let groupRule = { rules: [] }
      let group_text = ''
@@ -1312,36 +1316,35 @@
      } else {
        //校验必填项
        let undefinished = this.sdkGroup.some((sdk, index) => {
          //没有配置算法
          if (Object.keys(sdk.sdkObj).length == 0) {
            return sdk
          }
          //复制算法时检测区域不能为空
          if(!sdk.polygon_id){
          if (!sdk.polygon_id) {
            return sdk
          }
          debugger
          //多于两项算法时,算法关系不能为空
          if (sdk.rule_with_pre === '' && index != 0) {
            return sdk
          }
          //处理未展示的参数的值
          sdk.defaultArg.forEach(arg => {
            if(!arg.config.isShow){
            if (!arg.config.isShow) {
              arg.sdk_arg_value = arg.default_value
            }
          })
          //表单提交前校验:所有算法的参数值不能为空,(有range的,要在range范围内)失焦时校验
          let defaultArgFlag = sdk.defaultArg.find(arg => {
            if (arg.sdk_arg_value instanceof Array ) {
            if (arg.sdk_arg_value instanceof Array) {
              if (arg.sdk_arg_value.length == 0) {
                return arg
              }
            }else if(!arg.sdk_arg_value){
            } else if (!arg.sdk_arg_value) {
              return arg
            }
          });
@@ -1357,7 +1360,7 @@
            } else {
              //区间类参数值最小,最大值是否都设置
              if (arg.operator == 'range') {
                if (!arg.min.trim() && arg.max.trim()) {
                  return arg
                }
@@ -1398,9 +1401,9 @@
        }
        //校验若算法关系为触发,则算法名不能重
        let sameSdk = this.sdkGroup.some((sdk, index) => {
          if (sdk.index != 0 && (sdk.rule_with_pre == '=>'||sdk.rule_with_pre == '!=>')) {
          if (sdk.index != 0 && (sdk.rule_with_pre == '=>' || sdk.rule_with_pre == '!=>')) {
            if (sdk.sdkObj.id == this.sdkGroup[index - 1].sdkObj.id) {
              return sdk
            }
@@ -1441,7 +1444,7 @@
          let defaultArgDesc = '( '
          sdk.defaultArg.forEach(arg => {
            //不显示隐藏的参数配置
            if(!arg.config.isShow){
            if (!arg.config.isShow) {
              return
            }
            let val = '';
@@ -1465,19 +1468,19 @@
            }
            if (arg.operator == 'range') {
              let valRange = '';
              valRange = arg.sdk_arg_value.replace(',', '-');
              defaultArgDesc += `${arg.name}${arg.operators[0].name}${valRange}${arg.unit || ''}, `
            } else {
              defaultArgDesc += `${arg.name}${arg.operators[0].name}${
                arg.type=='option' ? val : arg.sdk_arg_value
                arg.type == 'option' ? val : arg.sdk_arg_value
                }${arg.unit || ''}, `
            }
          });
          ;
          defaultArgDesc = defaultArgDesc.substring(0, defaultArgDesc.length - 2);
          //defaultArgDesc = defaultArgDesc.substring(0,defaultArgDesc.length-3)+defaultArgDesc.substring(defaultArgDesc.length-1,defaultArgDesc.length);
          //defaultArgDesc = defaultArgDesc.substring(0,defaultArgDesc.length-1);
@@ -1519,7 +1522,7 @@
                val = res.name;
              }
            }
            let operatorSelected = arg.operators.find(opr => opr.operator == arg.operator)
@@ -1574,7 +1577,7 @@
              group_text.substring(0, group_text.length - 3) +
              group_text.substring(group_text.length - 2, group_text.length)
          }
        })
        console.log(group_text)
      }
src/pages/desktop/index/App.vue
@@ -27,13 +27,13 @@
  components: {
    Desktop, NotificationCenter, NoticeTip, Tools, ToolsEntry
  },
  data () {
  data() {
    return {
      buttonAuthority: sessionStorage.getItem('buttonAuthoritys') || []
    }
  },
  computed: {
    isAdmin () {
    isAdmin() {
      if (
        sessionStorage.getItem('userInfo') &&
        sessionStorage.getItem('userInfo') !== ''
@@ -46,7 +46,7 @@
      return false
    }
  },
  mounted () {
  mounted() {
    document.getElementById('app').style.backgroundImage = process.env.VUE_APP_MAIN_URL;
    this.showApps();
@@ -79,36 +79,13 @@
    });
  },
  methods: {
    showApps () {
    showApps() {
      let _that = this;
      getApps().then(rsp => {
        if (rsp && rsp.success) {
          _that.$store.state.desktop.docks = [];
          let installedApps = [];
          let testObj = {
            id: 'tjcxjq',
            create_by: 'test',
            create_time: '',
            height: 675,
            icon: '../../images/app-mid/search.png',
            installed: true,
            isDelete: 0,
            isUpgrade: false,
            title: '统计查询(集群)',
            name: '统计查询(集群)',
            remoteVersion: '',
            type: '2',
            update_by: '',
            update_time: '',
            url: "/view/searchForCluster/",
            version: '1.0.0',
            width: 1344,
            isDefault: false
          };
          console.log(rsp.data);
          rsp.data.push(testObj);
          rsp.data.forEach(function (item) {
            if (item.installed) {
@@ -157,7 +134,7 @@
    addWeather: function (weather) {
      this.$store.commit('desktop/addWeather', weather);
    },
    screenShot (dock) {
    screenShot(dock) {
      //找到当前的iframe
      let curIframe = Array.from(document.querySelectorAll('iframe')).find(iframe => iframe.src.indexOf(dock.url) >= 0);
      //保存当前应用快照
@@ -203,12 +180,12 @@
  width: 100%;
  height: 100%;
  background-size: 100% 100%;
  background-image: url('/images/desktop/background.png');
  background-image: url("/images/desktop/background.png");
  background-attachment: fixed;
}
.clearFix:after {
  content: '';
  content: "";
  display: block;
  height: 0;
  clear: both;
src/pages/desktop/index/components/ToolsEntry.vue
@@ -2,22 +2,17 @@
  <div class="tools-entry">
    <div class="entry-wrap">
      <div class="app-list clearFix">
        <div
          class="app"
          v-for="dock in stateDocks"
          :key="dock.id"
          @click="dockClick(dock)"
        >
        <div class="app" v-for="dock in stateDocks" :key="dock.id" @click="dockClick(dock)">
          <div class="wrap">
            <div class="app-icon" >
            <div class="app-icon">
              <img :src="dock.src" :alt="dock.alt" />
            </div>
            <div class="app-name" >{{dock.title}}</div>
            <div class="app-name">{{dock.title}}</div>
          </div>
        </div>
      </div>
      <div class="logo">
        <img :src="`${publicPath}images/desktop/desk-logo.png`" alt="">
        <img :src="`${publicPath}images/desktop/desk-logo.png`" alt />
      </div>
    </div>
  </div>
@@ -33,14 +28,13 @@
      localApps: []
    }
  },
  computed:{
    stateDocks(){
  computed: {
    stateDocks() {
      return this.$store.state.desktop.docks
    }
  },
  mounted() {
    window.addEventListener('message', e => {
      console.log('msg')
      if (e.data && e.data.msg) {
        let msg = e.data.msg;
        // token 不合法, 退出
@@ -51,20 +45,19 @@
        // 打开检索, toSearch?showType=findByPic&targetId=108ba0bc-b0a1-433d-8e1e-d5d2e712b53b&picSmUrl=192.168.20.10:6700/47628,7cc869f3a9c714&compType=1
        if (msg.indexOf("toSearch") >= 0) {
          console.log('msg,search')
          let params = msg.substring(7);
          this.addFrameByName("search", params)
        }
      }
    });
  },
  methods: {
    dockClick(dock) {
      if (dock.type === '1') {
        window.open(dock.url);
      } else if (dock.type === '2' && !dock.isOpen) {
        this.$store.dispatch('desktop/addFrame', {
          id: dock.id,
          icon: dock.src,
@@ -82,9 +75,9 @@
        });
        //打开应用后异步抓拍,之后的抓拍采用这张固定的
        //if(dock.name=='cameraVideo'||dock.name=='search'||dock.name=='library'||dock.name=='cameraAccess'||dock.name=='dataStack'){
          setTimeout(()=>{
            this.$parent.screenShot(dock);
          },1500)
        setTimeout(() => {
          this.$parent.screenShot(dock);
        }, 1500)
        //}
      } else if (dock.type === '2' && dock.isOpen) {
        this.$store.commit('desktop/resetMinFrame', dock.id);
@@ -102,7 +95,7 @@
      dockMask.style.width = dockItems.length * 60 + 40 + 'px';
    },
    addFrameByName(name, params) {
      let dock = null;
      this.$store.state.desktop.docks.forEach(app => {
        if (app.name === name) {
@@ -161,16 +154,16 @@
              margin-right: -3px;
            }
          }
          .el-loading-mask{
          .el-loading-mask {
            border-radius: 8px;
          }
          .el-loading-spinner{
          .el-loading-spinner {
            top: 20px;
          }
          .el-loading-spinner .path{
          .el-loading-spinner .path {
            stroke: #78adf7;
          }
          .el-loading-spinner .el-loading-text{
          .el-loading-spinner .el-loading-text {
            line-height: 1;
            margin-top: -30px;
            color: #78adf7;
@@ -190,11 +183,11 @@
        }
      }
    }
    .logo{
    .logo {
      text-align: right;
      padding-right: 50px;
      user-select: none;
      img{
      img {
        user-select: none;
        -webkit-user-drag: none;
      }
src/pages/desktop/index/store/modules/desktop.js
@@ -102,27 +102,27 @@
    dframe.height = curDframe.height;
    //根据分辨率动态调整(摄像机配置,数据栈配置,比对库管理,算力管理,实时监控)
    //获取原始宽高比
    let ratio = curDframe.width/curDframe.height;
    if(curDframe.name == 'cameraAccess' || curDframe.name == 'dataStack' || curDframe.name == 'library' || curDframe.name == 'analysisPower' || curDframe.name == 'cameraVideo'){
    let ratio = curDframe.width / curDframe.height;
    if (curDframe.name == 'cameraAccess' || curDframe.name == 'dataStack' || curDframe.name == 'library' || curDframe.name == 'analysisPower' || curDframe.name == 'cameraVideo') {
      //处理富余高度大于140的窗口
      if(window.screen.availHeight - curDframe.height > 140){
        dframe.height = (window.screen.availHeight - curDframe.height)/2 + curDframe.height - 50;
        dframe.width = dframe.height*ratio;
      if (window.screen.availHeight - curDframe.height > 140) {
        dframe.height = (window.screen.availHeight - curDframe.height) / 2 + curDframe.height - 50;
        dframe.width = dframe.height * ratio;
      }
    }
    //全部绝对居中
    dframe.leftOffset = (document.body.offsetWidth - dframe.width)/2;
    dframe.topOffset = (document.body.offsetHeight - dframe.height)/2;
    dframe.leftOffset = (document.body.offsetWidth - dframe.width) / 2;
    dframe.topOffset = (document.body.offsetHeight - dframe.height) / 2;
    state.framesOrder = order;
    state.framesOffset = offset;
    state.frames.push(dframe);
    return true;
  },
  shotscreen: (state, {id,src}) => {
  shotscreen: (state, { id, src }) => {
    let curFrame = state.frames.find(frame => frame.id == id);
    if(!curFrame.isShow){
    if (!curFrame.isShow) {
      return
    }
    let curDock = state.minDocks.find(one => one.id == id);
@@ -130,21 +130,20 @@
  },
  addMinDock: (state, dock) => {
    let ids = state.minDocks.map(item => item.id);
    if (ids.indexOf(dock.id) > -1) {
      //已经在mindock里
      let curFrame = state.frames.find(frame => frame.id == dock.id);
      curFrame.isShow = false;
      let minOne = state.minDocks.find(one => one.id == dock.id);
      minOne.highlight = false;
      debugger
      minOne.screenshot = dock.screenshot?dock.screenshot:minOne.screenshot;
      minOne.screenshot = dock.screenshot ? dock.screenshot : minOne.screenshot;
      //找到minDocks最近打开的状态isShow为true的dock置为高亮
      let minLen = state.minDocks.length;
      for(var i = minLen-1; i >= 0; i--){
        let temp =  state.frames.find(frame=>frame.id == state.minDocks[i].id);
        if(temp.isShow){
      for (var i = minLen - 1; i >= 0; i--) {
        let temp = state.frames.find(frame => frame.id == state.minDocks[i].id);
        if (temp.isShow) {
          state.minDocks[i].highlight = true;
          return;
        }
@@ -158,9 +157,9 @@
    //   }
    //   return false;
    // });
    state.minDocks.push(dock);
  },
  addMessageNotice: (state, msg) => {
    let ids = state.messageNotices.map(item => item.id);
@@ -190,7 +189,7 @@
      }
      return false;
    });
    state.docks.find(function (it) {
      if (it.id === item.id) {
        it.isOpen = false;
@@ -202,12 +201,12 @@
      state.safari.active = false;
    }
  },
  highlight(state){
  highlight(state) {
    //找到minDocks最近打开的状态isShow为true的dock置为高亮
    let minLen = state.minDocks.length;
    for(var i = minLen-1; i >= 0; i--){
      let temp =  state.frames.find(frame=>frame.id == state.minDocks[i].id);
      if(temp.isShow){
    for (var i = minLen - 1; i >= 0; i--) {
      let temp = state.frames.find(frame => frame.id == state.minDocks[i].id);
      if (temp.isShow) {
        state.minDocks[i].highlight = true;
        return;
      }
@@ -218,27 +217,27 @@
    state.safari.isShow = true;
  },
  refreshFrame: (state, item) => {
    state.frames.forEach(function (it) {
      if (it.id === item.id) {
        it.order = 1;
        state.minDocks.forEach((min,index)=>{
          if(min.id == it.id){
        state.minDocks.forEach((min, index) => {
          if (min.id == it.id) {
            min.highlight = true;
          }else{
          } else {
            min.highlight = false;
          }
        })
      } else {
        it.order = 0;
      }
    });
  },
  refreshTime: (state) => {
    state.currentDate = new Date();
@@ -247,13 +246,13 @@
    state.frames.find(function (it) {
      if (it.id === id) {
        it.isShow = true;
        return true;
      }
      return false;
    });
  },
  removeMessageById: (state, id) => {
    state.messageNotices.find(function (item, idx) {
src/pages/gb28181/index/App.vue
@@ -83,8 +83,7 @@
                style="position: absolute"
                v-show="gb28181.idType === 1"
                @click="newGBID"
                >生成ID</el-button
              >
              >生成ID</el-button>
            </el-form-item>
            <!-- <el-form-item label="国际服务器端口" prop="GbServerPort">
@@ -101,11 +100,7 @@
            </el-form-item>
            <el-form-item label="国标端口" prop="ServerPort">
              <el-input
                v-model.number="gb28181.GbServerPort"
                placeholder="请输入"
                size="small"
              ></el-input>
              <el-input v-model.number="gb28181.GbServerPort" placeholder="请输入" size="small"></el-input>
            </el-form-item>
            <el-form-item label="开启鉴权">
@@ -113,17 +108,11 @@
            </el-form-item>
            <el-form-item label="鉴权密码" v-show="gb28181.IsAuth">
              <el-input
                v-model="gb28181.Password"
                placeholder="请输入"
                size="small"
              ></el-input>
              <el-input v-model="gb28181.Password" placeholder="请输入" size="small"></el-input>
            </el-form-item>
            <el-form-item>
              <el-button type="primary" @click="submitGB28281" size="small"
                >保存</el-button
              >
              <el-button type="primary" @click="submitGB28281" size="small">保存</el-button>
            </el-form-item>
          </el-form>
        </el-menu-item-group>
@@ -142,37 +131,12 @@
              style="width: 100%; color:#000"
              :header-cell-style="{ background: '#f8f8f8', color: '#222222', height:'30px'  }"
            >
              <el-table-column
                type="index"
                label="序号"
                align="center"
                width="50"
              ></el-table-column>
              <el-table-column
                prop="name"
                label="名称"
                align="center"
              ></el-table-column>
              <el-table-column
                prop="id"
                label="ID"
                align="center"
              ></el-table-column>
              <el-table-column
                prop="ip"
                label="IP"
                align="center"
              ></el-table-column>
              <el-table-column
                prop="status"
                label="状态"
                align="center"
              ></el-table-column>
              <el-table-column
                prop="mark"
                label="备注"
                align="center"
              ></el-table-column>
              <el-table-column type="index" label="序号" align="center" width="50"></el-table-column>
              <el-table-column prop="name" label="名称" align="center"></el-table-column>
              <el-table-column prop="id" label="ID" align="center"></el-table-column>
              <el-table-column prop="ip" label="IP" align="center"></el-table-column>
              <el-table-column prop="status" label="状态" align="center"></el-table-column>
              <el-table-column prop="mark" label="备注" align="center"></el-table-column>
            </el-table>
          </div>
        </el-menu-item-group>
@@ -207,12 +171,12 @@
  name: 'Gb28181Setting',
  directives: {
    focus: {
      inserted: function(el) {
      inserted: function (el) {
        el.querySelector('input').focus()
      }
    }
  },
  data() {
    return {
      openeds: ['0'],
@@ -264,7 +228,7 @@
    }
  },
  mounted() {
    //this.$nextTick(()=>{
    this.initGB28181Conf()
    //})
@@ -328,18 +292,17 @@
        }
      })
    },
    menuOpen(){
    },
    menuClose(){
    },
    toOpenMenuList(e){
      debugger
      let t = e.clientY - this.$el.offsetTop+30;
      let l = e.clientX-this.$el.offsetLeft;
    menuOpen() {
      window.parent.postMessage({source:location.href.split('/')[location.href.split('/').length-1], trigger: 'contextmenu', menuT:t, menuL:l},"*");
    },
    menuClose() {
    },
    toOpenMenuList(e) {
      let t = e.clientY - this.$el.offsetTop + 30;
      let l = e.clientX - this.$el.offsetLeft;
      window.parent.postMessage({ source: location.href.split('/')[location.href.split('/').length - 1], trigger: 'contextmenu', menuT: t, menuL: l }, "*");
      return false;
    }
  }
src/pages/labelMark/components/RightSide.vue
@@ -12,37 +12,52 @@
      </div>
    </div>
    <div class="action-bar">
      <el-button class="drawboard-trigger" size="small" @click="isEdit=!isEdit" :icon="isEdit?'el-icon-lock':'el-icon-edit'">{{isEdit?'锁定':'编辑'}}</el-button>
      <el-button
        class="drawboard-trigger"
        size="small"
        @click="isEdit=!isEdit"
        :icon="isEdit?'el-icon-lock':'el-icon-edit'"
      >{{isEdit?'锁定':'编辑'}}</el-button>
    </div>
    <div class="drawboard">
      <div class="mask" :class="{'edit-status-mask':isEdit}" ref="editBoard" >
        <div class="label" @click="editLabel(item)" v-for="(item,index) in labels" :key="index" :style="{left:`${item.x}px`, top:`${item.y}px`, backgroundColor: colorPick, width: `${dotSize}px`, height: `${dotSize}px` }"></div>
      <div class="mask" :class="{'edit-status-mask':isEdit}" ref="editBoard">
        <div
          class="label"
          @click="editLabel(item)"
          v-for="(item,index) in labels"
          :key="index"
          :style="{left:`${item.x}px`, top:`${item.y}px`, backgroundColor: colorPick, width: `${dotSize}px`, height: `${dotSize}px` }"
        ></div>
      </div>
      <img :src="`/httpImage/${snapshot_url}`" alt />
      <div class="popBox" v-show="isShowPop" :style="`top:${curLabel.y + 22}px;left:${curLabel.x}px`">
      <div
        class="popBox"
        v-show="isShowPop"
        :style="`top:${curLabel.y + 22}px;left:${curLabel.x}px`"
      >
        <div class="title">标注信息</div>
        <div class="details">
          <div class="detail-item">
            <div class="left">
              <label for="">平面坐标X:</label>
              <label for>平面坐标X:</label>
              <span class="fix-width">{{curLabel.x}}</span>
              <i>px</i>
            </div>
            <span class="devide"></span>
            <div class="right">
              <label for="">实际坐标X:</label>
              <label for>实际坐标X:</label>
              <el-input type="text" size="mini" style="width:90px" v-model="curLabel.posX"></el-input>
            </div>
          </div>
          <div class="detail-item">
            <div class="left">
              <label for="">平面坐标Y:</label>
              <label for>平面坐标Y:</label>
              <span class="fix-width">{{curLabel.y}}</span>
              <i>px</i>
            </div>
            <span class="devide"></span>
            <div class="right">
              <label for="">实际坐标Y:</label>
              <label for>实际坐标Y:</label>
              <el-input type="text" size="mini" style="width:90px" v-model="curLabel.posY"></el-input>
            </div>
          </div>
@@ -54,7 +69,6 @@
        </div>
      </div>
    </div>
  </div>
</template>
@@ -62,7 +76,7 @@
import { getCamerasByServer } from '@/api/pollConfig'
import TreeDataPool from "@/Pool/TreeData";
export default {
  data () {
  data() {
    return {
      labels: [],
      colorPick: '#79f2fb',
@@ -71,97 +85,94 @@
      isShowPop: false,
      isNewLabel: false,
      curLabel: {
        id:'',
        posX:'',
        posY:'',
        x:'',
        y:''
        id: '',
        posX: '',
        posY: '',
        x: '',
        y: ''
      },
      baseUrl: '',
      snapshot_url: '',
      cameraData:[],
      cameraData: [],
    }
  },
  computed: {
  },
  mounted(){
  mounted() {
    this.getAllCameraData();
    setTimeout(()=>{
      let mockData = [{id:'a1',x:15, y:33, posX:150, posY:330},{id:'b2',x:56, y:87, posX:560, posY:870}];
    setTimeout(() => {
      let mockData = [{ id: 'a1', x: 15, y: 33, posX: 150, posY: 330 }, { id: 'b2', x: 56, y: 87, posX: 560, posY: 870 }];
      this.labels = mockData;
    },1000);
    }, 1000);
  },
  watch:{
    'TreeDataPool.selectedNode':{
      handler(n,o){
        debugger
        let curCamera = this.cameraData.find(item => item.id==n.id);
  watch: {
    'TreeDataPool.selectedNode': {
      handler(n, o) {
        let curCamera = this.cameraData.find(item => item.id == n.id);
        this.snapshot_url = curCamera.snapshot_url;
      },
      deep: true
    },
    isEdit(n,o){
      if(n){
        this.$refs['editBoard'].addEventListener('click',this.bindListen);
      }else{
        this.$refs['editBoard'].removeEventListener('click',this.bindListen);
    isEdit(n, o) {
      if (n) {
        this.$refs['editBoard'].addEventListener('click', this.bindListen);
      } else {
        this.$refs['editBoard'].removeEventListener('click', this.bindListen);
      }
    }
  },
  methods: {
    getAllCameraData(){
      getCamerasByServer().then(res=>{
        if(res.success){
          debugger
    getAllCameraData() {
      getCamerasByServer().then(res => {
        if (res.success) {
          this.cameraData = res.data;
        }
      }).catch(e=>{
      }).catch(e => {
        console.log(e)
      })
    },
    bindListen(e){
    bindListen(e) {
      this.newLabel(e);
    },
    newLabel(e){
    newLabel(e) {
      console.log('点击了画板')
      if(this.isShowPop) return;
      if (this.isShowPop) return;
      //获取鼠标相对于画板的定位
      console.log('获取当前定位信息');
      let target = {
        id:'',
        x:e.offsetX,
        y:e.offsetY,
        posX:'',
        posY:''
        id: '',
        x: e.offsetX,
        y: e.offsetY,
        posX: '',
        posY: ''
      };
      this.labels.push(target);
      this.curLabel = target;
      this.isShowPop = true;
      this.isNewLabel = true;
    },
    editLabel(label){
      debugger
      if(!this.isEdit) return;
    editLabel(label) {
      if (!this.isEdit) return;
      this.isShowPop = true;
      this.curLabel = JSON.parse(JSON.stringify(label));
    },
    cancle(){
    cancle() {
      this.isShowPop = false;
      //如果是未保存过的label直接删除(未保存的就是labels数组中最后一个)
      if(!this.curLabel.id){
      if (!this.curLabel.id) {
        this.labels.pop();
      }
    },
    deleteLabel(){
      if(this.curLabel.id){
    deleteLabel() {
      if (this.curLabel.id) {
        //请求后台删除
      }else{
      } else {
        this.labels.pop();
        this.isShowPop = false;
      }
    },
    submitInfo(){
    submitInfo() {
    }
  }
@@ -198,15 +209,15 @@
      }
    }
  }
  .action-bar{
  .action-bar {
    width: 960px;
    margin: auto;
    margin-bottom: 20px;
    text-align: right;
    .drawboard-trigger{
    .drawboard-trigger {
      background: transparent;
      color: #fff;
      border-color: rgba(255,255,255,.3);
      border-color: rgba(255, 255, 255, 0.3);
    }
  }
  .drawboard {
@@ -216,68 +227,68 @@
    position: relative;
    background: #fff;
    box-shadow: 3px 3px 3px 1px rgba(0, 0, 0, 0.1);
    .mask{
    .mask {
      position: absolute;
      background: transparent;
      width: 100%;
      height: 100%;
      overflow: hidden;
      &.edit-status-mask{
      &.edit-status-mask {
        background: rgba(20, 181, 255, 0.1);
      }
      .label{
      .label {
        position: absolute;
        z-index: 2;
        border-radius: 50%;
      }
    }
    img{
    img {
      width: 960px;
      height: 540px;
      background:#f0ffca;
      background: #f0ffca;
    }
    .popBox{
    .popBox {
      position: absolute;
      padding: 14px;
      border-radius: 3px;
      color: #fff;
      background: rgba(0,0,0,.7);
      .title{
      background: rgba(0, 0, 0, 0.7);
      .title {
        font-weight: bold;
        text-align: left;
        font-size: 15px;
      }
      .details{
        .detail-item{
      .details {
        .detail-item {
          display: flex;
          align-items: center;
          margin: 5px 0;
          label{
          label {
            color: #a9a9a9;
            width:65px;
            width: 65px;
            display: inline-block;
          }
          .left{
          .left {
            width: 110px;
            text-align: left;
            line-height: 28px;
            .fix-width{
            .fix-width {
              display: inline-block;
              width: 23px;
            }
          }
          .right{
          .right {
            width: 160px;
          }
          .devide{
          .devide {
            width: 10px;
            height: 1px;
            background: #a9a9a9;
            margin: 0 3px;
          }
        }
        .btns{
          margin-top: 10px;
        .btns {
          margin-top: 10px;
        }
      }
    }
src/pages/labelTrack/index/App.vue
File was deleted
src/pages/labelTrack/index/api.ts
File was deleted
src/pages/labelTrack/index/main.ts
File was deleted
src/pages/settings/components/BasicSetting.vue
@@ -684,7 +684,6 @@
      });
    },
    checkTimeZone(val) {
      debugger;
    },
    submitClock() {
src/pages/settings/components/ClusterManagement.vue
@@ -222,7 +222,7 @@
    ipInput,
    cloudNode
  },
  data () {
  data() {
    const checkPwd = (rule, value, callback) => {
      if (!value) {
        return callback(new Error("密码不能为空"));
@@ -306,7 +306,7 @@
      showJoinConfirm: false
    };
  },
  mounted () {
  mounted() {
    this.findCluster();
    let _this = this;
    this.intervalTimer = setInterval(() => {
@@ -314,20 +314,20 @@
    }, 30000);
    //this.getEsClusterNodes();
  },
  beforeDestroy () {
  beforeDestroy() {
    clearInterval(this.intervalTimer);
  },
  methods: {
    checkPsd (psd) {
    checkPsd(psd) {
      return psd.trim().length === 6
    },
    cleanValue () {
    cleanValue() {
      this.members = [];
    },
    sHandleClick (tab, event) {
    sHandleClick(tab, event) {
      console.log(tab, event);
    },
    submitForm (formName) {
    submitForm(formName) {
      this.$refs[formName].validate(valid => {
        if (valid) {
          //alert("submit!");
@@ -347,7 +347,7 @@
      });
    },
    saveForm (formName) {
    saveForm(formName) {
      this.$refs[formName].validate(valid => {
        if (valid) {
          alert("submit!");
@@ -367,7 +367,7 @@
      });
    },
    join (formName) {
    join(formName) {
      let _this = this;
      this.$refs[formName].validate(valid => {
        if (valid) {
@@ -403,7 +403,7 @@
        }
      });
    },
    async createCluster (json) {
    async createCluster(json) {
      let res = await createSerfCluster(json);
      console.log(res, "创建集群");
      this.$notify({
@@ -412,13 +412,13 @@
        type: res.success ? "success" : "error"
      });
    },
    async randomPwd () {
    async randomPwd() {
      let res = await randomPwd();
      if (res && res.success) {
        this.ruleForm.clusterpwd = res.data;
      }
    },
    async searchColony () {
    async searchColony() {
      this.isSearch = true;
      this.$refs["joinForm"].clearValidate();
      this.$refs["joinForm"].validateField('clusterpwd');
@@ -448,7 +448,7 @@
      }
      //});
    },
    async search (json) {
    async search(json) {
      let res = await search(json);
      if (res && res.success) {
        console.log(res, "搜索集群");
@@ -461,7 +461,7 @@
      }, 10 * 1000);
    },
    //搜索集群
    async getSearchNodes () {
    async getSearchNodes() {
      let res = await getSearchNodes();
      if (res && res.success) {
        let list = res.data.map(i => {
@@ -485,12 +485,12 @@
        });
      }
    },
    setSchedule () {
    setSchedule() {
      this.scheduleId = window.setInterval(() => {
        this.getSearchNodes();
      }, 1000);
    },
    async stopSearch () {
    async stopSearch() {
      if (!this.loading) {
        return true;
      }
@@ -515,7 +515,7 @@
        // },2000)
      })
    },
    async findCluster () {
    async findCluster() {
      let res = await findCluster();
      if (res && res.success) {
        if (res.data && res.data.clusterId) {
@@ -552,7 +552,7 @@
        }
      }
    },
    getVrrpInfo () {
    getVrrpInfo() {
      getVrrp().then(res => {
        if (res.success) {
          this.vrIpForm.virtual_ip = res.data.virtual_ip;
@@ -562,7 +562,7 @@
        console.log(e)
      })
    },
    async updateCluster () {
    async updateCluster() {
      if (this.ruleForm.clustername === "") {
        this.$message({
          type: "error",
@@ -582,7 +582,7 @@
        type: res.success ? "success" : "error"
      });
    },
    async joinCluster (json) {
    async joinCluster(json) {
      let res = await joinCluster(json);
      if (res.success) {
        this.members = []
@@ -593,7 +593,7 @@
        type: res.success ? "success" : "error"
      });
    },
    leave () {
    leave() {
      this.$confirm(`确定退出集群吗?`, {
        center: true,
        cancelButtonClass: "comfirm-class-cancle",
@@ -617,8 +617,8 @@
      }).catch(() => { });
    },
    joinNode (event, node) {
      console.log('join',node)
    joinNode(event, node) {
      console.log('join', node)
      let _this = this;
      this.currentCluster.cluster_id = node.cluster_id;
      if (this.activeName === "3") {
@@ -627,7 +627,6 @@
        return;
      }
      if (this.activeName === "2") {
        debugger
        if (_this.showJoinConfirm) return;
        this.$confirm("是否要加入节点 " + node.nodeName + "?", "加入集群", {
@@ -684,7 +683,7 @@
        // });
      }
    },
    generatePassword () {
    generatePassword() {
      var chars =
        "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
      var uuid = [];
@@ -696,7 +695,7 @@
      this.ruleForm.clusterpwd = uuid.join("");
    },
    async getEsClusterNodes () {
    async getEsClusterNodes() {
      let rsp = await getDevInfo();
      let hostIpAddr = "";
      if (rsp && rsp.success) {
@@ -722,7 +721,7 @@
        }
      }
    },
    createEsCluster () {
    createEsCluster() {
      createESNode().then(rsp => {
        if (rsp && rsp.success) {
          this.$message({
@@ -747,7 +746,7 @@
        });
      })
    },
    joinESCluster () {
    joinESCluster() {
      if (!this.esNodeIp.length) {
        this.$message({
          type: "error",
@@ -781,7 +780,7 @@
        });
      })
    },
    onIpBlur (ip) {
    onIpBlur(ip) {
      //this.vrIpForm.virtual_ip = ip;
      this.ruleForm.virtualIp = ip;
      console.log(this.ruleForm.virtualIp)
@@ -789,7 +788,7 @@
  },
  created () { }
  created() { }
};
</script>
vue.config.js
@@ -72,6 +72,14 @@
        // ws: true,
        changeOrigin: true,
      },
      "/data/api-v/app/findAllApp": {
        target: '/',
        target: 'http://localhost:8080/',
        changeOrigin: true,
        pathRewrite: {
          '^/data/api-v/app/findAllApp': 'apps.json'
        }
      },
      "/api-v": {
        target: 'http://192.168.20.10:8000',
        changeOrigin: true