| | |
| | | { |
| | | "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 |
| | | } |
| | |
| | | } |
| | | |
| | | 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); |
| | |
| | | } |
| | | } |
| | | |
| | | 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)); |
| | |
| | | this.TreeDataPool.fetchClusterTree(); |
| | | findCluster().then(res => { |
| | | if (res.success) { |
| | | debugger |
| | | this.clusterName = res.data.clusterName; |
| | | } |
| | | |
| | |
| | | } |
| | | }, |
| | | async nextPage(dataInfo, index) { |
| | | console.log(this) |
| | | debugger |
| | | let id = dataInfo[0].id |
| | | let res = this.CardList.getBehindEle(id) |
| | | if (res) { |
| | |
| | | startX: Number, |
| | | isShowHover: Boolean |
| | | }, |
| | | data () { |
| | | data() { |
| | | return { |
| | | nodeSize: 20, |
| | | fontSize: 20, |
| | |
| | | }; |
| | | }, |
| | | computed: { |
| | | nodes () { |
| | | nodes() { |
| | | let n = new Array(); |
| | | this.members.forEach((v, i) => { |
| | | n.push({ |
| | |
| | | |
| | | 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; |
| | |
| | | |
| | | return arr; |
| | | }, |
| | | options () { |
| | | options() { |
| | | return { |
| | | force: 3000, |
| | | nodeSize: this.nodeSize, |
| | |
| | | }; |
| | | } |
| | | }, |
| | | created () { |
| | | created() { |
| | | this.reset(); |
| | | }, |
| | | methods: { |
| | | nodeHover (event, node) { |
| | | nodeHover(event, node) { |
| | | console.log(node); |
| | | node._opacity = 1; |
| | | node._size = 28; |
| | |
| | | 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; |
| | |
| | | } |
| | | |
| | | }, |
| | | 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]) { |
| | |
| | | right: 50%; |
| | | top: 100%; |
| | | border: solid transparent; |
| | | content: ' '; |
| | | content: " "; |
| | | height: 0; |
| | | width: 0; |
| | | position: absolute; |
| | |
| | | computed: { |
| | | //分类节点 |
| | | //云内云边节点 |
| | | memberNodes(){ |
| | | memberNodes() { |
| | | let arr = []; |
| | | let mockMembers = [ |
| | | { |
| | |
| | | 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", |
| | |
| | | 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", |
| | |
| | | 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, |
| | |
| | | ? "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 |
| | |
| | | ? "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 { |
| | |
| | | // } |
| | | // }) |
| | | 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 |
| | |
| | | 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 |
| | |
| | | |
| | | return arr; |
| | | }, |
| | | |
| | | |
| | | options() { |
| | | return { |
| | | force: 3000, |
| | |
| | | }; |
| | | } |
| | | }, |
| | | 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) { |
| | |
| | | // } |
| | | // 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); |
| | | } |
| | | }, |
| | |
| | | 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> |
| | |
| | | } |
| | | } |
| | | }, |
| | | 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) |
| | | }) |
| | | }, |
| | |
| | | }, |
| | | 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) |
| | | }) |
| | | } |
| | |
| | | this._actionCheck() |
| | | }, |
| | | processResponse(message) { |
| | | debugger |
| | | let res = message |
| | | try { |
| | | res = JSON.parse(message) |
| | |
| | | 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 |
| | |
| | | // }
|
| | | }
|
| | | },
|
| | | data () {
|
| | | data() {
|
| | | return {
|
| | | fileName: "",
|
| | | fileMd5: "",
|
| | |
| | | }
|
| | | },
|
| | | computed: {
|
| | | uploader () {
|
| | | uploader() {
|
| | | return this.$refs.uploader.uploader;
|
| | | },
|
| | | options () {
|
| | | options() {
|
| | | return {
|
| | | target: this.url,
|
| | | testChunks: true,
|
| | |
| | | }
|
| | | },
|
| | | 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;
|
| | |
| | | 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, {
|
| | |
| | | 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
|
| | |
| | | } |
| | | }, |
| | | 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) |
| | | } |
| | | } |
| | |
| | | // });
|
| | | // return arr;
|
| | | // },
|
| | | isAdmin () {
|
| | | isAdmin() {
|
| | | if (
|
| | | sessionStorage.getItem("userInfo") &&
|
| | | sessionStorage.getItem("userInfo") !== ""
|
| | |
| | | return false;
|
| | | },
|
| | | },
|
| | | data () {
|
| | | data() {
|
| | | return {
|
| | | sdkList: [],
|
| | | installedList: [],
|
| | |
| | | }
|
| | | }
|
| | | },
|
| | | mounted () {
|
| | | mounted() {
|
| | | // 获取所有应用
|
| | | this.getAllSdk();
|
| | | this.getAllApps();
|
| | |
| | | this.getUnActivedAppList();
|
| | | },
|
| | | methods: {
|
| | | isShow (authority) {
|
| | | isShow(authority) {
|
| | | return this.isAdmin || this.buttonAuthority.indexOf("," + authority + ",") > -1
|
| | | },
|
| | | //离线安装
|
| | | offlineInstall () {
|
| | | offlineInstall() {
|
| | | this.installDialogVisible = false;
|
| | | this.isInstall = true;
|
| | | //安装
|
| | |
| | | });
|
| | | })
|
| | | },
|
| | | downloadApp (app, action) {
|
| | | downloadApp(app, action) {
|
| | | if (action == 'upgrade') {
|
| | | app.upgradeLoading = true;
|
| | | } else {
|
| | |
| | | this.appUpgreading = true;
|
| | | this.startAutoFresh();
|
| | | },
|
| | | async getAllApps () {
|
| | | async getAllApps() {
|
| | | let iArry = []
|
| | | let sArry = []
|
| | |
|
| | |
| | | this.storeApps = sArry;
|
| | | },
|
| | | //卸载应用
|
| | | unLoad (app) {
|
| | | unLoad(app) {
|
| | | app.unloadLoading = true;
|
| | | let _this = this;
|
| | | removeApp({ appId: app.id }).then(res => {
|
| | |
| | | // this.activeCode = '';
|
| | | // this.activedSdkOrApp = this.newActInfo()
|
| | | // },
|
| | | actSdkOrApp (id, type = 'sdk') {
|
| | | actSdkOrApp(id, type = 'sdk') {
|
| | | this.actType = type;
|
| | | this.actId = id;
|
| | | this.actDrawerShow = true;
|
| | |
| | | this.activeCode = '';
|
| | | this.activedSdkOrApp = this.newActInfo()
|
| | | },
|
| | | newActInfo () {
|
| | | newActInfo() {
|
| | | return {
|
| | | activateCode: '',
|
| | | productName: '',
|
| | |
| | | devIds: ''
|
| | | }
|
| | | },
|
| | | getUnActivedList () {
|
| | | getUnActivedList() {
|
| | | getUnActivedSdk().then(res => {
|
| | | if (res.code == 200) {
|
| | | this.unActivedSDKList = res.data;
|
| | |
| | | })
|
| | |
|
| | | },
|
| | | getUnActivedAppList () {
|
| | | getUnActivedAppList() {
|
| | | getUnActivedApp().then(res => {
|
| | | if (res.code == 200) {
|
| | | this.unActivedAppList = res.data;
|
| | | }
|
| | | });
|
| | | },
|
| | | actived () {
|
| | | actived() {
|
| | | let _this = this;
|
| | | if (this.actType == 'sdk') {
|
| | | //激活算法
|
| | |
| | | });
|
| | | }
|
| | | },
|
| | | 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;
|
| | |
| | | _this.installFile = file;
|
| | | if (res.success) {
|
| | | _this.installDialogVisible = true;
|
| | | debugger
|
| | | if (res.data.apps.length > 0) {
|
| | | _this.installAppPackage = {
|
| | | appId: res.data.apps[0].appId,
|
| | |
| | |
|
| | | },
|
| | |
|
| | | onFileAdded (f) {
|
| | | onFileAdded(f) {
|
| | | this.patchUpdateStatus = "";
|
| | | },
|
| | |
|
| | | async getAllSdk () {
|
| | | async getAllSdk() {
|
| | | let installedList = [];
|
| | | let unInstalledList = [];
|
| | | let res = await findAllSdk();
|
| | |
| | | this.notInstalledList = unInstalledList;
|
| | | },
|
| | |
|
| | | donwload (item) {
|
| | | debugger
|
| | | donwload(item) {
|
| | | item.upgradeLoading = true;
|
| | | //this.downloading = true;
|
| | | this.downloadItem = item.id;
|
| | |
| | | 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)
|
| | | }
|
| | |
| | | .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;
|
| | |
| | | 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 {
|
| | |
| | | }
|
| | | }
|
| | | .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%;
|
| | |
| | | <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"> |
| | |
| | | this.$forceUpdate(); |
| | | } |
| | | }, |
| | | mounted(){ |
| | | console.log('PollData.RealTimeValidCount',this.PollData.RealTimeValidCount) |
| | | debugger; |
| | | mounted() { |
| | | console.log('PollData.RealTimeValidCount', this.PollData.RealTimeValidCount) |
| | | } |
| | | } |
| | | </script> |
| | |
| | | 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 == '!=>'"
|
| | |
| | | </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
|
| | |
| | | :title="one.name"
|
| | | ></el-option>
|
| | | </el-select>
|
| | | |
| | |
|
| | | <el-input
|
| | | v-if="arg.type == 'value'"
|
| | | v-model="arg.sdk_arg_value"
|
| | |
| | | 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 {
|
| | |
| | | }
|
| | | },
|
| | | methods: {
|
| | | getSdkConnection(){
|
| | | getSdkConnection() {
|
| | | console.log(this.VideoManageData.Dictionary)
|
| | | this.sdkConnects = this.VideoManageData.Dictionary['RULECOMPUTEBETWEEN'].map(r => {
|
| | | |
| | |
|
| | | return {
|
| | | name: r.name,
|
| | | value: r.value
|
| | |
| | | });
|
| | | },
|
| | | selConnection(sdkItem) {
|
| | | |
| | |
|
| | |
|
| | | },
|
| | | addSdkItem() {
|
| | |
| | | itemTemp.polygonObj = JSON.parse(JSON.stringify(this.allPolygonData[0]))
|
| | | this.selectPolygonOption(itemTemp)
|
| | | this.sdkGroup.push(itemTemp)
|
| | | |
| | |
|
| | | },
|
| | | delConfigItem(index) {
|
| | | // if(index != 0){
|
| | |
| | | }
|
| | | //默认选中第一个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)
|
| | | }
|
| | |
| | | }
|
| | | },
|
| | | selOptionalArg(sdkItem, optArgItem) {
|
| | | |
| | |
|
| | | let newSort = 0
|
| | | sdkItem.optNames.forEach(name => {
|
| | | if (name.name == optArgItem.name) {
|
| | |
| | | }
|
| | | //默认选中第一个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) => {
|
| | |
| | | console.log(argObj.valueOptions)
|
| | | },
|
| | | setOptArgValueOptions(optArg) {
|
| | | |
| | |
|
| | | let alias = optArg.alias;
|
| | | console.log(this.VideoManageData.Dictionary[alias])
|
| | | optArg.valueOptions = this.VideoManageData.Dictionary[alias].map(r => {
|
| | |
| | | });
|
| | | },
|
| | | validateArgVal(sdkArgItem, e) {
|
| | | |
| | |
|
| | | if (typeof (sdkArgItem.sdk_arg_value) == 'string' && sdkArgItem.sdk_arg_value == '') {
|
| | | this.$notify({
|
| | | type: 'warning',
|
| | |
| | | let res = sdkArgItem.range.match(reg)
|
| | | let min = Number(res[1]),
|
| | | max = Number(res[2])
|
| | | |
| | |
|
| | |
|
| | | //判断非区间类
|
| | | if (sdkArgItem.sdk_arg_value && sdkArgItem.operator != 'range') {
|
| | |
| | | this.valideArgValue(rule)
|
| | | },
|
| | | selectPolygonOption(rule) {
|
| | | |
| | |
|
| | | rule.polygon_id = rule.polygonObj.polygonId
|
| | | ? rule.polygonObj.polygonId
|
| | | : rule.polygon_id
|
| | |
| | | },
|
| | | //选择算法 resetArgs为true是添加为false是初始化编辑
|
| | | selectSDKOption(sdkItem, resetArgs) {
|
| | | |
| | |
|
| | | //sdkItem.sdk_id = sdkItem.sdkObj.id;
|
| | | if (resetArgs) {
|
| | | sdkItem.argDef = JSON.parse(sdkItem.sdkObj.argDef)
|
| | |
| | |
|
| | | 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) {
|
| | |
| | | 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)
|
| | | }
|
| | |
|
| | |
| | | },
|
| | | //选择算法配置
|
| | | selOperator(rule) {
|
| | | |
| | |
|
| | | },
|
| | | selectArgsOption(rule, resetArgValue) {
|
| | | // rule.operator_type = "";
|
| | |
| | | // }
|
| | | },
|
| | | editRule(ruleGroup) {
|
| | | |
| | |
|
| | | this.sdkGroup = []
|
| | | this.group_id = ''
|
| | |
|
| | | ruleGroup.forEach(rule => {
|
| | | |
| | |
|
| | | let tempObj = {}
|
| | |
|
| | | if (rule.group_id && rule.group_id != '') {
|
| | |
| | | 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)
|
| | |
|
| | |
| | | })
|
| | | if (optItem) {
|
| | | //if (optItem.operators.length > 1) {
|
| | | optItem.operator = arg.operator
|
| | | //this.selOperator(optItem)
|
| | | optItem.operator = arg.operator
|
| | | //this.selOperator(optItem)
|
| | | //}
|
| | |
|
| | | //赋值
|
| | |
| | | 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;
|
| | |
| | | tempObj.isAddable = false;
|
| | | }
|
| | | //this.selectSDKOption(tempObj, false)
|
| | | |
| | |
|
| | | this.sdkGroup.push(tempObj)
|
| | | //设置算法
|
| | | })
|
| | |
| | | .catch(() => { })
|
| | | },
|
| | | submitRule() {
|
| | | |
| | |
|
| | | let groupRule = { rules: [] }
|
| | |
|
| | | let group_text = ''
|
| | |
| | | } 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
|
| | | }
|
| | | });
|
| | |
| | | } else {
|
| | | //区间类参数值最小,最大值是否都设置
|
| | | if (arg.operator == 'range') {
|
| | | |
| | |
|
| | | if (!arg.min.trim() && arg.max.trim()) {
|
| | | return arg
|
| | | }
|
| | |
| | | }
|
| | | //校验若算法关系为触发,则算法名不能重
|
| | | 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
|
| | | }
|
| | |
| | | let defaultArgDesc = '( '
|
| | | sdk.defaultArg.forEach(arg => {
|
| | | //不显示隐藏的参数配置
|
| | | if(!arg.config.isShow){
|
| | | if (!arg.config.isShow) {
|
| | | return
|
| | | }
|
| | | let val = '';
|
| | |
| | | }
|
| | | 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);
|
| | |
|
| | |
| | |
|
| | | val = res.name;
|
| | | }
|
| | | |
| | |
|
| | | }
|
| | |
|
| | | let operatorSelected = arg.operators.find(opr => opr.operator == arg.operator)
|
| | |
| | | group_text.substring(0, group_text.length - 3) +
|
| | | group_text.substring(group_text.length - 2, group_text.length)
|
| | | }
|
| | | |
| | |
|
| | | })
|
| | | console.log(group_text)
|
| | | }
|
| | |
| | | components: { |
| | | Desktop, NotificationCenter, NoticeTip, Tools, ToolsEntry |
| | | }, |
| | | data () { |
| | | data() { |
| | | return { |
| | | buttonAuthority: sessionStorage.getItem('buttonAuthoritys') || [] |
| | | } |
| | | }, |
| | | computed: { |
| | | isAdmin () { |
| | | isAdmin() { |
| | | if ( |
| | | sessionStorage.getItem('userInfo') && |
| | | sessionStorage.getItem('userInfo') !== '' |
| | |
| | | return false |
| | | } |
| | | }, |
| | | mounted () { |
| | | mounted() { |
| | | document.getElementById('app').style.backgroundImage = process.env.VUE_APP_MAIN_URL; |
| | | this.showApps(); |
| | | |
| | |
| | | }); |
| | | }, |
| | | 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) { |
| | |
| | | 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); |
| | | //保存当前应用快照 |
| | |
| | | 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; |
| | |
| | | <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>
|
| | |
| | | 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 不合法, 退出
|
| | |
| | |
|
| | | // 打开检索, 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,
|
| | |
| | | });
|
| | | //打开应用后异步抓拍,之后的抓拍采用这张固定的
|
| | | //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);
|
| | |
| | | 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) {
|
| | |
| | | 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;
|
| | |
| | | }
|
| | | }
|
| | | }
|
| | | .logo{
|
| | | .logo {
|
| | | text-align: right;
|
| | | padding-right: 50px;
|
| | | user-select: none;
|
| | | img{
|
| | | img {
|
| | | user-select: none;
|
| | | -webkit-user-drag: none;
|
| | | }
|
| | |
| | | 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); |
| | |
| | | }, |
| | | 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; |
| | | } |
| | |
| | | // } |
| | | // return false; |
| | | // }); |
| | | |
| | | |
| | | state.minDocks.push(dock); |
| | | |
| | | |
| | | }, |
| | | addMessageNotice: (state, msg) => { |
| | | let ids = state.messageNotices.map(item => item.id); |
| | |
| | | } |
| | | return false; |
| | | }); |
| | | |
| | | |
| | | state.docks.find(function (it) { |
| | | if (it.id === item.id) { |
| | | it.isOpen = false; |
| | |
| | | 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; |
| | | } |
| | |
| | | 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(); |
| | |
| | | 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) { |
| | |
| | | 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"> |
| | |
| | | </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="开启鉴权"> |
| | |
| | | </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> |
| | |
| | | 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> |
| | |
| | | name: 'Gb28181Setting', |
| | | directives: { |
| | | focus: { |
| | | inserted: function(el) { |
| | | inserted: function (el) { |
| | | el.querySelector('input').focus() |
| | | } |
| | | } |
| | | }, |
| | | |
| | | |
| | | data() { |
| | | return { |
| | | openeds: ['0'], |
| | |
| | | } |
| | | }, |
| | | mounted() { |
| | | |
| | | |
| | | //this.$nextTick(()=>{ |
| | | this.initGB28181Conf() |
| | | //}) |
| | |
| | | } |
| | | }) |
| | | }, |
| | | 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; |
| | | } |
| | | } |
| | |
| | | </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> |
| | |
| | | </div> |
| | | </div> |
| | | </div> |
| | | |
| | | </div> |
| | | </template> |
| | | |
| | |
| | | import { getCamerasByServer } from '@/api/pollConfig' |
| | | import TreeDataPool from "@/Pool/TreeData"; |
| | | export default { |
| | | data () { |
| | | data() { |
| | | return { |
| | | labels: [], |
| | | colorPick: '#79f2fb', |
| | |
| | | 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() { |
| | | |
| | | } |
| | | } |
| | |
| | | } |
| | | } |
| | | } |
| | | .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 { |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | |
| | | }); |
| | | }, |
| | | checkTimeZone(val) { |
| | | debugger; |
| | | |
| | | }, |
| | | submitClock() { |
| | |
| | | ipInput, |
| | | cloudNode |
| | | }, |
| | | data () { |
| | | data() { |
| | | const checkPwd = (rule, value, callback) => { |
| | | if (!value) { |
| | | return callback(new Error("密码不能为空")); |
| | |
| | | showJoinConfirm: false |
| | | }; |
| | | }, |
| | | mounted () { |
| | | mounted() { |
| | | this.findCluster(); |
| | | let _this = this; |
| | | this.intervalTimer = setInterval(() => { |
| | |
| | | }, 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!"); |
| | |
| | | }); |
| | | }, |
| | | |
| | | saveForm (formName) { |
| | | saveForm(formName) { |
| | | this.$refs[formName].validate(valid => { |
| | | if (valid) { |
| | | alert("submit!"); |
| | |
| | | }); |
| | | }, |
| | | |
| | | join (formName) { |
| | | join(formName) { |
| | | let _this = this; |
| | | this.$refs[formName].validate(valid => { |
| | | if (valid) { |
| | |
| | | } |
| | | }); |
| | | }, |
| | | async createCluster (json) { |
| | | async createCluster(json) { |
| | | let res = await createSerfCluster(json); |
| | | console.log(res, "创建集群"); |
| | | this.$notify({ |
| | |
| | | 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'); |
| | |
| | | } |
| | | //}); |
| | | }, |
| | | async search (json) { |
| | | async search(json) { |
| | | let res = await search(json); |
| | | if (res && res.success) { |
| | | console.log(res, "搜索集群"); |
| | |
| | | }, 10 * 1000); |
| | | }, |
| | | //搜索集群 |
| | | async getSearchNodes () { |
| | | async getSearchNodes() { |
| | | let res = await getSearchNodes(); |
| | | if (res && res.success) { |
| | | let list = res.data.map(i => { |
| | |
| | | }); |
| | | } |
| | | }, |
| | | setSchedule () { |
| | | setSchedule() { |
| | | this.scheduleId = window.setInterval(() => { |
| | | this.getSearchNodes(); |
| | | }, 1000); |
| | | }, |
| | | async stopSearch () { |
| | | async stopSearch() { |
| | | if (!this.loading) { |
| | | return true; |
| | | } |
| | |
| | | // },2000) |
| | | }) |
| | | }, |
| | | async findCluster () { |
| | | async findCluster() { |
| | | let res = await findCluster(); |
| | | if (res && res.success) { |
| | | if (res.data && res.data.clusterId) { |
| | |
| | | } |
| | | } |
| | | }, |
| | | getVrrpInfo () { |
| | | getVrrpInfo() { |
| | | getVrrp().then(res => { |
| | | if (res.success) { |
| | | this.vrIpForm.virtual_ip = res.data.virtual_ip; |
| | |
| | | console.log(e) |
| | | }) |
| | | }, |
| | | async updateCluster () { |
| | | async updateCluster() { |
| | | if (this.ruleForm.clustername === "") { |
| | | this.$message({ |
| | | type: "error", |
| | |
| | | type: res.success ? "success" : "error" |
| | | }); |
| | | }, |
| | | async joinCluster (json) { |
| | | async joinCluster(json) { |
| | | let res = await joinCluster(json); |
| | | if (res.success) { |
| | | this.members = [] |
| | |
| | | type: res.success ? "success" : "error" |
| | | }); |
| | | }, |
| | | leave () { |
| | | leave() { |
| | | this.$confirm(`确定退出集群吗?`, { |
| | | center: true, |
| | | cancelButtonClass: "comfirm-class-cancle", |
| | |
| | | }).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") { |
| | |
| | | return; |
| | | } |
| | | if (this.activeName === "2") { |
| | | debugger |
| | | if (_this.showJoinConfirm) return; |
| | | |
| | | this.$confirm("是否要加入节点 " + node.nodeName + "?", "加入集群", { |
| | |
| | | // }); |
| | | } |
| | | }, |
| | | generatePassword () { |
| | | generatePassword() { |
| | | var chars = |
| | | "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; |
| | | var uuid = []; |
| | |
| | | this.ruleForm.clusterpwd = uuid.join(""); |
| | | }, |
| | | |
| | | async getEsClusterNodes () { |
| | | async getEsClusterNodes() { |
| | | let rsp = await getDevInfo(); |
| | | let hostIpAddr = ""; |
| | | if (rsp && rsp.success) { |
| | |
| | | } |
| | | } |
| | | }, |
| | | createEsCluster () { |
| | | createEsCluster() { |
| | | createESNode().then(rsp => { |
| | | if (rsp && rsp.success) { |
| | | this.$message({ |
| | |
| | | }); |
| | | }) |
| | | }, |
| | | joinESCluster () { |
| | | joinESCluster() { |
| | | if (!this.esNodeIp.length) { |
| | | this.$message({ |
| | | type: "error", |
| | |
| | | }); |
| | | }) |
| | | }, |
| | | onIpBlur (ip) { |
| | | onIpBlur(ip) { |
| | | //this.vrIpForm.virtual_ip = ip; |
| | | this.ruleForm.virtualIp = ip; |
| | | console.log(this.ruleForm.virtualIp) |
| | |
| | | |
| | | }, |
| | | |
| | | created () { } |
| | | created() { } |
| | | |
| | | }; |
| | | </script> |
| | |
| | | // 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 |