diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature.png b/src/assets/overview_images/icons/icon-temperature.png deleted file mode 100644 index 8c5755f..0000000 --- a/src/assets/overview_images/icons/icon-temperature.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature.png b/src/assets/overview_images/icons/icon-temperature.png deleted file mode 100644 index 8c5755f..0000000 --- a/src/assets/overview_images/icons/icon-temperature.png +++ /dev/null Binary files differ diff --git a/src/router/modules/fenceSys.js b/src/router/modules/fenceSys.js index abcd3ca..0d784b0 100644 --- a/src/router/modules/fenceSys.js +++ b/src/router/modules/fenceSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const fenceSysRouters = [ { path: '/fence', @@ -13,6 +14,54 @@ } }, { + path: '/fence/video', + component: Layout, + redirect: '/fence/video/monitor', + name: 'FenceVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/fence/video'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/video/monitor', + name: 'FenceVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/fence/video/monitor'], keepAlive: true } + }, + { + path: '/fence/video/history', + name: 'FenceVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/fence/video/history'], keepAlive: true } + } + ] + }, + { + path: '/fence/overview', + component: OverviewLayout, + redirect: '/fence/overview/device', + name: 'FenceOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/fence/overview'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/overview/device', + name: 'FenceOverviewDevice', + component: () => import('@/views/overview/fenceIndex'), + meta: { title: '周界总览', icon: '', permission: ['/fence/overview/device'], keepAlive: true } + } + ] + }, + { path: '/fence/alarm', component: Layout, redirect: '/fence/alarm', diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature.png b/src/assets/overview_images/icons/icon-temperature.png deleted file mode 100644 index 8c5755f..0000000 --- a/src/assets/overview_images/icons/icon-temperature.png +++ /dev/null Binary files differ diff --git a/src/router/modules/fenceSys.js b/src/router/modules/fenceSys.js index abcd3ca..0d784b0 100644 --- a/src/router/modules/fenceSys.js +++ b/src/router/modules/fenceSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const fenceSysRouters = [ { path: '/fence', @@ -13,6 +14,54 @@ } }, { + path: '/fence/video', + component: Layout, + redirect: '/fence/video/monitor', + name: 'FenceVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/fence/video'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/video/monitor', + name: 'FenceVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/fence/video/monitor'], keepAlive: true } + }, + { + path: '/fence/video/history', + name: 'FenceVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/fence/video/history'], keepAlive: true } + } + ] + }, + { + path: '/fence/overview', + component: OverviewLayout, + redirect: '/fence/overview/device', + name: 'FenceOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/fence/overview'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/overview/device', + name: 'FenceOverviewDevice', + component: () => import('@/views/overview/fenceIndex'), + meta: { title: '周界总览', icon: '', permission: ['/fence/overview/device'], keepAlive: true } + } + ] + }, + { path: '/fence/alarm', component: Layout, redirect: '/fence/alarm', diff --git a/src/router/modules/keySys.js b/src/router/modules/keySys.js index a8c93fa..f3a027b 100644 --- a/src/router/modules/keySys.js +++ b/src/router/modules/keySys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const keySysRouters = [ { path: '/key', @@ -13,6 +14,54 @@ } }, { + path: '/key/video', + component: Layout, + redirect: '/key/video/monitor', + name: 'KeyVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/key/video'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/video/monitor', + name: 'KeyVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/key/video/monitor'], keepAlive: true } + }, + { + path: '/key/video/history', + name: 'KeyVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/key/video/history'], keepAlive: true } + } + ] + }, + { + path: '/key/overview', + component: OverviewLayout, + redirect: '/key/overview/device', + name: 'KeyOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/key/overview'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/overview/device', + name: 'KeyOverviewDevice', + component: () => import('@/views/overview/keyIndex'), + meta: { title: '重点区域总览', icon: '', permission: ['/key/overview/device'], keepAlive: true } + } + ] + }, + { path: '/key/alarm', component: Layout, redirect: '/key/alarm/now', diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature.png b/src/assets/overview_images/icons/icon-temperature.png deleted file mode 100644 index 8c5755f..0000000 --- a/src/assets/overview_images/icons/icon-temperature.png +++ /dev/null Binary files differ diff --git a/src/router/modules/fenceSys.js b/src/router/modules/fenceSys.js index abcd3ca..0d784b0 100644 --- a/src/router/modules/fenceSys.js +++ b/src/router/modules/fenceSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const fenceSysRouters = [ { path: '/fence', @@ -13,6 +14,54 @@ } }, { + path: '/fence/video', + component: Layout, + redirect: '/fence/video/monitor', + name: 'FenceVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/fence/video'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/video/monitor', + name: 'FenceVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/fence/video/monitor'], keepAlive: true } + }, + { + path: '/fence/video/history', + name: 'FenceVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/fence/video/history'], keepAlive: true } + } + ] + }, + { + path: '/fence/overview', + component: OverviewLayout, + redirect: '/fence/overview/device', + name: 'FenceOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/fence/overview'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/overview/device', + name: 'FenceOverviewDevice', + component: () => import('@/views/overview/fenceIndex'), + meta: { title: '周界总览', icon: '', permission: ['/fence/overview/device'], keepAlive: true } + } + ] + }, + { path: '/fence/alarm', component: Layout, redirect: '/fence/alarm', diff --git a/src/router/modules/keySys.js b/src/router/modules/keySys.js index a8c93fa..f3a027b 100644 --- a/src/router/modules/keySys.js +++ b/src/router/modules/keySys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const keySysRouters = [ { path: '/key', @@ -13,6 +14,54 @@ } }, { + path: '/key/video', + component: Layout, + redirect: '/key/video/monitor', + name: 'KeyVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/key/video'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/video/monitor', + name: 'KeyVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/key/video/monitor'], keepAlive: true } + }, + { + path: '/key/video/history', + name: 'KeyVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/key/video/history'], keepAlive: true } + } + ] + }, + { + path: '/key/overview', + component: OverviewLayout, + redirect: '/key/overview/device', + name: 'KeyOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/key/overview'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/overview/device', + name: 'KeyOverviewDevice', + component: () => import('@/views/overview/keyIndex'), + meta: { title: '重点区域总览', icon: '', permission: ['/key/overview/device'], keepAlive: true } + } + ] + }, + { path: '/key/alarm', component: Layout, redirect: '/key/alarm/now', diff --git a/src/router/modules/regionSys.js b/src/router/modules/regionSys.js index 8b69cf0..9b4613a 100644 --- a/src/router/modules/regionSys.js +++ b/src/router/modules/regionSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const regionSysRouters = [ { path: '/region', @@ -13,6 +14,54 @@ } }, { + path: '/region/video', + component: Layout, + redirect: '/region/video/monitor', + name: 'RegionVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/region/video'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/video/monitor', + name: 'RegionVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/region/video/monitor'], keepAlive: true } + }, + { + path: '/region/video/history', + name: 'RegionVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/region/video/history'], keepAlive: true } + } + ] + }, + { + path: '/region/overview', + component: OverviewLayout, + redirect: '/region/overview/device', + name: 'RegionOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/region/overview'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/overview/device', + name: 'RegionOverviewDevice', + component: () => import('@/views/overview/regionIndex'), + meta: { title: '全域总览', icon: '', permission: ['/region/overview/device'], keepAlive: true } + } + ] + }, + { path: '/region/alarm', component: Layout, redirect: '/region/alarm', diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature.png b/src/assets/overview_images/icons/icon-temperature.png deleted file mode 100644 index 8c5755f..0000000 --- a/src/assets/overview_images/icons/icon-temperature.png +++ /dev/null Binary files differ diff --git a/src/router/modules/fenceSys.js b/src/router/modules/fenceSys.js index abcd3ca..0d784b0 100644 --- a/src/router/modules/fenceSys.js +++ b/src/router/modules/fenceSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const fenceSysRouters = [ { path: '/fence', @@ -13,6 +14,54 @@ } }, { + path: '/fence/video', + component: Layout, + redirect: '/fence/video/monitor', + name: 'FenceVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/fence/video'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/video/monitor', + name: 'FenceVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/fence/video/monitor'], keepAlive: true } + }, + { + path: '/fence/video/history', + name: 'FenceVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/fence/video/history'], keepAlive: true } + } + ] + }, + { + path: '/fence/overview', + component: OverviewLayout, + redirect: '/fence/overview/device', + name: 'FenceOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/fence/overview'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/overview/device', + name: 'FenceOverviewDevice', + component: () => import('@/views/overview/fenceIndex'), + meta: { title: '周界总览', icon: '', permission: ['/fence/overview/device'], keepAlive: true } + } + ] + }, + { path: '/fence/alarm', component: Layout, redirect: '/fence/alarm', diff --git a/src/router/modules/keySys.js b/src/router/modules/keySys.js index a8c93fa..f3a027b 100644 --- a/src/router/modules/keySys.js +++ b/src/router/modules/keySys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const keySysRouters = [ { path: '/key', @@ -13,6 +14,54 @@ } }, { + path: '/key/video', + component: Layout, + redirect: '/key/video/monitor', + name: 'KeyVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/key/video'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/video/monitor', + name: 'KeyVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/key/video/monitor'], keepAlive: true } + }, + { + path: '/key/video/history', + name: 'KeyVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/key/video/history'], keepAlive: true } + } + ] + }, + { + path: '/key/overview', + component: OverviewLayout, + redirect: '/key/overview/device', + name: 'KeyOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/key/overview'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/overview/device', + name: 'KeyOverviewDevice', + component: () => import('@/views/overview/keyIndex'), + meta: { title: '重点区域总览', icon: '', permission: ['/key/overview/device'], keepAlive: true } + } + ] + }, + { path: '/key/alarm', component: Layout, redirect: '/key/alarm/now', diff --git a/src/router/modules/regionSys.js b/src/router/modules/regionSys.js index 8b69cf0..9b4613a 100644 --- a/src/router/modules/regionSys.js +++ b/src/router/modules/regionSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const regionSysRouters = [ { path: '/region', @@ -13,6 +14,54 @@ } }, { + path: '/region/video', + component: Layout, + redirect: '/region/video/monitor', + name: 'RegionVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/region/video'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/video/monitor', + name: 'RegionVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/region/video/monitor'], keepAlive: true } + }, + { + path: '/region/video/history', + name: 'RegionVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/region/video/history'], keepAlive: true } + } + ] + }, + { + path: '/region/overview', + component: OverviewLayout, + redirect: '/region/overview/device', + name: 'RegionOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/region/overview'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/overview/device', + name: 'RegionOverviewDevice', + component: () => import('@/views/overview/regionIndex'), + meta: { title: '全域总览', icon: '', permission: ['/region/overview/device'], keepAlive: true } + } + ] + }, + { path: '/region/alarm', component: Layout, redirect: '/region/alarm', diff --git a/src/views/ctrl/overview.vue b/src/views/ctrl/overview.vue index d8d86d7..b06847f 100644 --- a/src/views/ctrl/overview.vue +++ b/src/views/ctrl/overview.vue @@ -97,33 +97,38 @@ - + 全部 - + + 摄像头 - + + 电子围栏 - + + 温湿度 - + + 烟感 - + + 声光报警 @@ -181,11 +186,6 @@ {{ dataForm.position }} - - - {{ dataForm.inOutName }} - - @@ -200,6 +200,12 @@ import tg_3_1 from '../../assets/overview_images/tg/mapOverviewTg-3-1.jpg' import tg_4_1 from '../../assets/overview_images/tg/mapOverviewTg-4-1.jpg' import tg_4_5 from '../../assets/overview_images/tg/mapOverviewTg-4-5.jpg' + +const cameraTypes = [4, 5, 8, 9, 10, 11] +const fenceTypes = [6, 7] +const smokingTypes = [2] +const temperatureTypes = [1] +const soundTypes = [12] export default { name: 'CtrlOverview', components: { DeviceDetail }, @@ -208,7 +214,8 @@ title: getProject().title, bgImageSrc: tg_main, devListParams: { - picture: '1' + picture: '1', + deviceTypes: [] }, dev: { alarm: 0, @@ -223,22 +230,22 @@ imgSize: { width: 2245, height: 1586 - }, + }, // 图片显示尺寸 winSize: { width: 1440, height: 789 }, // 屏幕窗口尺寸 halfLeft: 0, - footLeft: 0, - showFence: true, - showTemp: false, - showSmoking: false, - showSound: false, - showSubTabGuider: false, - showFloorThree: false, - showFloorFour: false, - showDevDetail: false, - alarmList: [], + footLeft: 0, // footer部分设备类型按钮偏移量 + showFence: true, // 是否显示电子围栏按钮 + showTemp: false, // 是否显示温湿度按钮 + showSmoking: false, // 是否显示烟感按钮 + showSound: false, // 是否显示声光报警按钮 + showSubTabGuider: false, // 是否显示二级菜单指引 + showFloorThree: false, // 是否显示三层 + showFloorFour: false, // 是否显示四层 + showDevDetail: false, // 是否显示设备详情 + alarmList: [], // 报警列表 alarmColumns: [ { text: '设备编号', @@ -256,9 +263,9 @@ align: 'center', width: 165 } - ], // 显示列 + ], // 报警列表显示列 tableShow: true, // 是否显示告警列表 - devList: [], + devList: [], // 设备列表(在地图上显示) dataForm: { id: '', // id name: '', // 设备名 @@ -270,9 +277,9 @@ position: '', // 安装位置 installDate: '', // 安装日期 inOutName: '' // 进出营 - }, // 表单 - isFence: false, - isDoor: false + }, // 设备详情表单 + isFence: false, // 是否电子围栏设备 + checkDevType: [true, false, false, false, false, false] // 选中设备类型 } }, mounted() { @@ -390,11 +397,35 @@ devTypes[i].className = 'dev-icon el-col el-col-24' } } + this.checkDevType = [false, false, false, false, false, false] // 添加选中的样式 - event.currentTarget.className += ' dev-type-selected' + if (typeof event === 'undefined') { + devTypes[0].className += ' dev-type-selected' + } else { + event.currentTarget.className += ' dev-type-selected' + } - console.log(event.currentTarget) + if (type === 'all') { + this.devListParams.deviceTypes = [] + this.checkDevType[0] = true + } else if (type === 'camera') { + this.devListParams.deviceTypes = cameraTypes.toString() + this.checkDevType[1] = true + } else if (type === 'fence') { + this.devListParams.deviceTypes = fenceTypes.toString() + this.checkDevType[2] = true + } else if (type === 'temperature') { + this.devListParams.deviceTypes = temperatureTypes.toString() + this.checkDevType[3] = true + } else if (type === 'smoking') { + this.devListParams.deviceTypes = smokingTypes.toString() + this.checkDevType[4] = true + } else if (type === 'sound') { + this.devListParams.deviceTypes = soundTypes.toString() + this.checkDevType[5] = true + } + this.fetchDeviceData() }, // 点击平面图一级按钮 selectMapTab(tab, event) { @@ -545,7 +576,7 @@ } } - this.fetchDeviceData() + this.selectDevByType('all') }, // 查询并显示设备详情 detailDev(dev, event) { @@ -569,11 +600,6 @@ if (dev.typeName.indexOf('电子围栏') >= 0) { this.isFence = true } - - // 营门设备有进出营门的标志位 - if (dev.areaId === '1') { - this.isDoor = true - } } else { this.$message.error(response.message) } @@ -684,7 +710,7 @@ @extend .point; } .point-fence { - background: url("../../assets/overview_images/icons/icon-fence.png"); + background: url("../../assets/overview_images/icons/icon-fence-unchecked.png"); background-size: contain; @extend .point; } @@ -915,44 +941,44 @@ color: #f58a88 !important; } + /*@media(max-width: 1440px) {*/ + /* .main-title {*/ + /* height: 68px;*/ + /* padding-top: 20px;*/ + /* background: url("../../assets/overview_images/title-background-1440.png");*/ + /* }*/ + /* .main-title span {*/ + /* font-size: 24px;*/ + /* }*/ + /* .main-title img {*/ + /* margin-right: 15px;*/ + /* width: 32px;*/ + /* height: 32px;*/ + /* }*/ + + /* .home-icon {*/ + /* left: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + /* .exit-icon {*/ + /* right: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .home-icon img, .exit-icon img {*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .dev-icon span {*/ + /* font-size: 12px;*/ + /* }*/ + /*}*/ + @media(max-width: 1440px) { .main-title { - height: 68px; - padding-top: 20px; - background: url("../../assets/overview_images/title-background-1440.png"); - } - .main-title span { - font-size: 24px; - } - .main-title img { - margin-right: 15px; - width: 32px; - height: 32px; - } - - .home-icon { - left: 18px; - width: 18px; - height: 18px; - } - .exit-icon { - right: 18px; - width: 18px; - height: 18px; - } - - .home-icon img, .exit-icon img { - width: 18px; - height: 18px; - } - - .dev-icon span { - font-size: 12px; - } - } - - @media(max-width: 1366px) { - .main-title { height: 65px; padding-top: 16px; background: url("../../assets/overview_images/title-background-1366.png"); diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature.png b/src/assets/overview_images/icons/icon-temperature.png deleted file mode 100644 index 8c5755f..0000000 --- a/src/assets/overview_images/icons/icon-temperature.png +++ /dev/null Binary files differ diff --git a/src/router/modules/fenceSys.js b/src/router/modules/fenceSys.js index abcd3ca..0d784b0 100644 --- a/src/router/modules/fenceSys.js +++ b/src/router/modules/fenceSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const fenceSysRouters = [ { path: '/fence', @@ -13,6 +14,54 @@ } }, { + path: '/fence/video', + component: Layout, + redirect: '/fence/video/monitor', + name: 'FenceVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/fence/video'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/video/monitor', + name: 'FenceVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/fence/video/monitor'], keepAlive: true } + }, + { + path: '/fence/video/history', + name: 'FenceVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/fence/video/history'], keepAlive: true } + } + ] + }, + { + path: '/fence/overview', + component: OverviewLayout, + redirect: '/fence/overview/device', + name: 'FenceOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/fence/overview'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/overview/device', + name: 'FenceOverviewDevice', + component: () => import('@/views/overview/fenceIndex'), + meta: { title: '周界总览', icon: '', permission: ['/fence/overview/device'], keepAlive: true } + } + ] + }, + { path: '/fence/alarm', component: Layout, redirect: '/fence/alarm', diff --git a/src/router/modules/keySys.js b/src/router/modules/keySys.js index a8c93fa..f3a027b 100644 --- a/src/router/modules/keySys.js +++ b/src/router/modules/keySys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const keySysRouters = [ { path: '/key', @@ -13,6 +14,54 @@ } }, { + path: '/key/video', + component: Layout, + redirect: '/key/video/monitor', + name: 'KeyVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/key/video'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/video/monitor', + name: 'KeyVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/key/video/monitor'], keepAlive: true } + }, + { + path: '/key/video/history', + name: 'KeyVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/key/video/history'], keepAlive: true } + } + ] + }, + { + path: '/key/overview', + component: OverviewLayout, + redirect: '/key/overview/device', + name: 'KeyOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/key/overview'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/overview/device', + name: 'KeyOverviewDevice', + component: () => import('@/views/overview/keyIndex'), + meta: { title: '重点区域总览', icon: '', permission: ['/key/overview/device'], keepAlive: true } + } + ] + }, + { path: '/key/alarm', component: Layout, redirect: '/key/alarm/now', diff --git a/src/router/modules/regionSys.js b/src/router/modules/regionSys.js index 8b69cf0..9b4613a 100644 --- a/src/router/modules/regionSys.js +++ b/src/router/modules/regionSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const regionSysRouters = [ { path: '/region', @@ -13,6 +14,54 @@ } }, { + path: '/region/video', + component: Layout, + redirect: '/region/video/monitor', + name: 'RegionVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/region/video'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/video/monitor', + name: 'RegionVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/region/video/monitor'], keepAlive: true } + }, + { + path: '/region/video/history', + name: 'RegionVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/region/video/history'], keepAlive: true } + } + ] + }, + { + path: '/region/overview', + component: OverviewLayout, + redirect: '/region/overview/device', + name: 'RegionOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/region/overview'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/overview/device', + name: 'RegionOverviewDevice', + component: () => import('@/views/overview/regionIndex'), + meta: { title: '全域总览', icon: '', permission: ['/region/overview/device'], keepAlive: true } + } + ] + }, + { path: '/region/alarm', component: Layout, redirect: '/region/alarm', diff --git a/src/views/ctrl/overview.vue b/src/views/ctrl/overview.vue index d8d86d7..b06847f 100644 --- a/src/views/ctrl/overview.vue +++ b/src/views/ctrl/overview.vue @@ -97,33 +97,38 @@ - + 全部 - + + 摄像头 - + + 电子围栏 - + + 温湿度 - + + 烟感 - + + 声光报警 @@ -181,11 +186,6 @@ {{ dataForm.position }} - - - {{ dataForm.inOutName }} - - @@ -200,6 +200,12 @@ import tg_3_1 from '../../assets/overview_images/tg/mapOverviewTg-3-1.jpg' import tg_4_1 from '../../assets/overview_images/tg/mapOverviewTg-4-1.jpg' import tg_4_5 from '../../assets/overview_images/tg/mapOverviewTg-4-5.jpg' + +const cameraTypes = [4, 5, 8, 9, 10, 11] +const fenceTypes = [6, 7] +const smokingTypes = [2] +const temperatureTypes = [1] +const soundTypes = [12] export default { name: 'CtrlOverview', components: { DeviceDetail }, @@ -208,7 +214,8 @@ title: getProject().title, bgImageSrc: tg_main, devListParams: { - picture: '1' + picture: '1', + deviceTypes: [] }, dev: { alarm: 0, @@ -223,22 +230,22 @@ imgSize: { width: 2245, height: 1586 - }, + }, // 图片显示尺寸 winSize: { width: 1440, height: 789 }, // 屏幕窗口尺寸 halfLeft: 0, - footLeft: 0, - showFence: true, - showTemp: false, - showSmoking: false, - showSound: false, - showSubTabGuider: false, - showFloorThree: false, - showFloorFour: false, - showDevDetail: false, - alarmList: [], + footLeft: 0, // footer部分设备类型按钮偏移量 + showFence: true, // 是否显示电子围栏按钮 + showTemp: false, // 是否显示温湿度按钮 + showSmoking: false, // 是否显示烟感按钮 + showSound: false, // 是否显示声光报警按钮 + showSubTabGuider: false, // 是否显示二级菜单指引 + showFloorThree: false, // 是否显示三层 + showFloorFour: false, // 是否显示四层 + showDevDetail: false, // 是否显示设备详情 + alarmList: [], // 报警列表 alarmColumns: [ { text: '设备编号', @@ -256,9 +263,9 @@ align: 'center', width: 165 } - ], // 显示列 + ], // 报警列表显示列 tableShow: true, // 是否显示告警列表 - devList: [], + devList: [], // 设备列表(在地图上显示) dataForm: { id: '', // id name: '', // 设备名 @@ -270,9 +277,9 @@ position: '', // 安装位置 installDate: '', // 安装日期 inOutName: '' // 进出营 - }, // 表单 - isFence: false, - isDoor: false + }, // 设备详情表单 + isFence: false, // 是否电子围栏设备 + checkDevType: [true, false, false, false, false, false] // 选中设备类型 } }, mounted() { @@ -390,11 +397,35 @@ devTypes[i].className = 'dev-icon el-col el-col-24' } } + this.checkDevType = [false, false, false, false, false, false] // 添加选中的样式 - event.currentTarget.className += ' dev-type-selected' + if (typeof event === 'undefined') { + devTypes[0].className += ' dev-type-selected' + } else { + event.currentTarget.className += ' dev-type-selected' + } - console.log(event.currentTarget) + if (type === 'all') { + this.devListParams.deviceTypes = [] + this.checkDevType[0] = true + } else if (type === 'camera') { + this.devListParams.deviceTypes = cameraTypes.toString() + this.checkDevType[1] = true + } else if (type === 'fence') { + this.devListParams.deviceTypes = fenceTypes.toString() + this.checkDevType[2] = true + } else if (type === 'temperature') { + this.devListParams.deviceTypes = temperatureTypes.toString() + this.checkDevType[3] = true + } else if (type === 'smoking') { + this.devListParams.deviceTypes = smokingTypes.toString() + this.checkDevType[4] = true + } else if (type === 'sound') { + this.devListParams.deviceTypes = soundTypes.toString() + this.checkDevType[5] = true + } + this.fetchDeviceData() }, // 点击平面图一级按钮 selectMapTab(tab, event) { @@ -545,7 +576,7 @@ } } - this.fetchDeviceData() + this.selectDevByType('all') }, // 查询并显示设备详情 detailDev(dev, event) { @@ -569,11 +600,6 @@ if (dev.typeName.indexOf('电子围栏') >= 0) { this.isFence = true } - - // 营门设备有进出营门的标志位 - if (dev.areaId === '1') { - this.isDoor = true - } } else { this.$message.error(response.message) } @@ -684,7 +710,7 @@ @extend .point; } .point-fence { - background: url("../../assets/overview_images/icons/icon-fence.png"); + background: url("../../assets/overview_images/icons/icon-fence-unchecked.png"); background-size: contain; @extend .point; } @@ -915,44 +941,44 @@ color: #f58a88 !important; } + /*@media(max-width: 1440px) {*/ + /* .main-title {*/ + /* height: 68px;*/ + /* padding-top: 20px;*/ + /* background: url("../../assets/overview_images/title-background-1440.png");*/ + /* }*/ + /* .main-title span {*/ + /* font-size: 24px;*/ + /* }*/ + /* .main-title img {*/ + /* margin-right: 15px;*/ + /* width: 32px;*/ + /* height: 32px;*/ + /* }*/ + + /* .home-icon {*/ + /* left: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + /* .exit-icon {*/ + /* right: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .home-icon img, .exit-icon img {*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .dev-icon span {*/ + /* font-size: 12px;*/ + /* }*/ + /*}*/ + @media(max-width: 1440px) { .main-title { - height: 68px; - padding-top: 20px; - background: url("../../assets/overview_images/title-background-1440.png"); - } - .main-title span { - font-size: 24px; - } - .main-title img { - margin-right: 15px; - width: 32px; - height: 32px; - } - - .home-icon { - left: 18px; - width: 18px; - height: 18px; - } - .exit-icon { - right: 18px; - width: 18px; - height: 18px; - } - - .home-icon img, .exit-icon img { - width: 18px; - height: 18px; - } - - .dev-icon span { - font-size: 12px; - } - } - - @media(max-width: 1366px) { - .main-title { height: 65px; padding-top: 16px; background: url("../../assets/overview_images/title-background-1366.png"); diff --git a/src/views/overview/doorIndex.vue b/src/views/overview/doorIndex.vue index 32902b4..03624bb 100644 --- a/src/views/overview/doorIndex.vue +++ b/src/views/overview/doorIndex.vue @@ -2,7 +2,6 @@
- {{ title }}
@@ -20,7 +19,7 @@
- +
@@ -69,6 +68,7 @@ :data="alarmList" class="alarm-list-table" border + stripe @row-click="alarmRowClick"> @@ -166,8 +151,10 @@ import { alarmListOverview } from '@/api/alarm' import DeviceDetail from '@/views/deviceManage/deviceDetail' import tg_main from '../../assets/overview_images/tg/mapOverviewTg.jpg' + +const cameraTypes = [4, 5, 8, 9, 10, 11] export default { - name: 'DoorOverviewDevice', + name: 'DoorOverview', components: { DeviceDetail }, data() { return { @@ -175,7 +162,8 @@ bgImageSrc: tg_main, devListParams: { picture: '1', - areaTypeId: 1 + areaTypeId: 1, + deviceTypes: [] }, dev: { alarm: 0, @@ -190,12 +178,15 @@ imgSize: { width: 2245, height: 1586 - }, + }, // 图片显示尺寸 winSize: { width: 1440, height: 789 }, // 屏幕窗口尺寸 - alarmList: [], + halfLeft: 0, + footLeft: 0, // footer部分设备类型按钮偏移量 + showDevDetail: false, // 是否显示设备详情 + alarmList: [], // 报警列表 alarmColumns: [ { text: '设备编号', @@ -210,11 +201,12 @@ { text: '报警时间', value: 'alarmTime', - align: 'center' + align: 'center', + width: 165 } - ], // 显示列 + ], // 报警列表显示列 tableShow: true, // 是否显示告警列表 - devList: [], + devList: [], // 设备列表(在地图上显示) dataForm: { id: '', // id name: '', // 设备名 @@ -226,42 +218,49 @@ position: '', // 安装位置 installDate: '', // 安装日期 inOutName: '' // 进出营 - }, // 表单 - isDoor: true + }, // 设备详情表单 + checkDevType: [true, false] // 选中设备类型 } }, - activated() { - this.fetchData() - this.fetchDeviceData() - this.fetchAlarmNowData() - }, mounted() { - // this.getBgImageSize() - // this.reDrawDevs() + this.initWindowSize() + + this.fetchData() + this.fetchAlarmNowData() const that = this window.onresize = function() { + that.initWindowSize() that.getBgImageSize() } }, methods: { - getBgImageSize() { - // 获取图片尺寸 - this.imgSize = { - width: this.$refs['bgImg'].width, - height: this.$refs['bgImg'].height - } + // 获取窗口大小 + initWindowSize() { // 获取窗体尺寸 this.winSize = { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight } - this.reDrawDevs() + // 设置footer部分居中显示 + if (this.winSize.width >= 1920) { + this.footLeft = (this.winSize.width - 2 * 210) / 2 + } else if (this.winSize.width >= 1366 && this.winSize.width < 1920) { + this.footLeft = (this.winSize.width - 2 * 155) / 2 + } }, + // 获取图像大小 + getBgImageSize() { + // 获取图片尺寸 + this.imgSize = { + width: this.$refs['bgImg'].width, + height: this.$refs['bgImg'].height + } + this.halfLeft = (this.winSize.width - this.imgSize.width) / 2 + }, + // 重新绘制设备点位 reDrawDevs() { - // this.getBgImageSize() - const halfLeft = (this.winSize.width - this.imgSize.width) / 2 // 调整球机的设备位置 @@ -269,16 +268,37 @@ this.devList.forEach(function(item) { const point = document.getElementById(item.id) - if (item.x !== '' && item.y !== '') { - point.style.position = 'absolute' - point.style.top = item.y * that.imgSize.height / that.imgSizeOriginal.height + 'px' - point.style.left = (item.x * that.imgSize.width / that.imgSizeOriginal.width + halfLeft) + 'px' - } else { - point.style.display = 'none' + if (point !== null) { + if (item.x !== '' && item.y !== '') { + point.style.position = 'absolute' + point.style.top = item.y * that.imgSize.height / that.imgSizeOriginal.height + 'px' + point.style.left = (item.x * that.imgSize.width / that.imgSizeOriginal.width + halfLeft) + 'px' + } else { + point.style.display = 'none' + } } }) }, - // 获取设备状态 + // 获取设备列表 + fetchDeviceData() { + overviewDeviceList(this.devListParams).then(response => { + if (response.code === 200) { + const that = this + this.devList = [] + response.data.forEach(dev => { + if (dev.x !== '' && dev.y !== '') { + that.devList.push(dev) + } + }) + } + }) + }, + // 平面图就绪时执行函数 + backgroundImageReady() { + this.getBgImageSize() + this.fetchDeviceData() + }, + // 获取设备状态统计值 fetchData() { overviewDeviceStatus({ areaTypeId: this.devListParams.areaTypeId }).then(response => { if (response.code === 200) { @@ -289,13 +309,7 @@ } }) }, - fetchDeviceData() { - overviewDeviceList(this.devListParams).then(response => { - if (response.code === 200) { - this.devList = response.data - } - }) - }, + // 获取报警列表 fetchAlarmNowData() { alarmListOverview({ areaTypeId: this.devListParams.areaTypeId }).then(response => { if (response.code === 200) { @@ -313,12 +327,36 @@ backToIndex() { this.$router.push('/door/alarm/now') }, - setClass(key) { - const classObj = {} - classObj['point'] = true - return classObj + // 选择设备类型 + selectDevByType(type, event) { + // 遍历所有的设备类型 + const devTypes = document.querySelectorAll('.dev-icon') + for (let i = 0; i < devTypes.length; i++) { + if (devTypes[i].className.indexOf('dev-type-selected') > -1) { + devTypes[i].className = 'dev-icon el-col el-col-24' + } + } + this.checkDevType = [false, false] + + // 添加选中的样式 + if (typeof event === 'undefined') { + devTypes[0].className += ' dev-type-selected' + } else { + event.currentTarget.className += ' dev-type-selected' + } + + if (type === 'all') { + this.devListParams.deviceTypes = [] + this.checkDevType[0] = true + } else if (type === 'camera') { + this.devListParams.deviceTypes = cameraTypes.toString() + this.checkDevType[1] = true + } + this.fetchDeviceData() }, - detailDev(dev) { + // 查询并显示设备详情 + detailDev(dev, event) { + this.resetDevDetail() getDetailDevice(dev.id).then(response => { if (response.code === 200) { this.dataForm = { @@ -337,9 +375,35 @@ this.$message.error(response.message) } }) + + // 弹窗显示设备详情 + const targetDev = event.currentTarget // 取到点击到的设备图标div + + this.showDevDetail = true + let top = parseInt(targetDev.style.top.substring(0, targetDev.style.top.length - 2)) + top = top + 100 + this.$refs['dev-detail-block'].style.position = 'absolute' + this.$refs['dev-detail-block'].style.top = top + 'px' + this.$refs['dev-detail-block'].style.left = targetDev.style.left }, + // 点击报警列表 alarmRowClick(dev, column, event) { + }, + // 清除设备详情 + resetDevDetail() { + this.dataForm = { + id: '', // id + name: '', // 设备名 + devcode: '', // 设备编号 + typeName: '', // 设备类型 + model: '', // 设备型号 + onlineStatusName: '', // 在线状态 + deviceStatusName: '', // 设备状态 + position: '', // 安装位置 + installDate: '', // 安装日期 + inOutName: '' // 进出营 + } } } } @@ -359,50 +423,68 @@ .main-title { height: 90px; text-align: center; - padding-top: 28px; + padding-top: 20px; background: url("../../assets/overview_images/title-background-1920.png"); } .main-title img { display: inline-block; margin-right: 15px; - width: 40px; - height: 40px; + width: 52px; + height: 32px; vertical-align: text-bottom; } .home-icon { - width: 28px; - height: 28px; + width: 26px; + height: 26px; position: fixed; - left: 32px; - top: 24px; + left: 20px; + top: 20px; } .exit-icon { - width: 28px; - height: 28px; + width: 26px; + height: 26px; position: fixed; - right: 32px; - top: 24px; + right: 20px; + top: 20px; } .home-icon img, .exit-icon img { - width: 28px; - height: 28px; + width: 26px; + height: 26px; } .main-title span { color: #FFFFFF; font-size: 32px; - /*font-weight: bold;*/ + font-weight: bold; font-family: 'Microsoft YaHei'; } .map-overview { - margin-top: 30px; - height: calc(90vh - 140px); + margin-top: 50px; + /*width: 1100px;*/ + height: calc(90vh - 200px); text-align: center; position: relative; } + .point { + width: 24px; + height: 24px; + position: relative; + display: inline-block; + cursor: pointer; + } + .point-camera { + background: url("../../assets/overview_images/icons/icon-camera-point.png"); + background-size: contain; + @extend .point; + } + .point-fence { + background: url("../../assets/overview_images/icons/icon-fence-unchecked.png"); + background-size: contain; + @extend .point; + } .statis-block { text-align: center; @@ -420,23 +502,27 @@ .dev-normal { background: url("../../assets/overview_images/normal.png"); background-size: contain; + color: #00ff0c; } .dev-alarm { background: url("../../assets/overview_images/alarm.png"); background-size: contain; + color: #ff0000; } .dev-offline { background: url("../../assets/overview_images/offline.png"); background-size: contain; + color: #fff000; } .dev-closed { background: url("../../assets/overview_images/closed.png"); background-size: contain; + color: #00fff6; } .dev-status-block { position: absolute; - top: 120px; + top: 100px; left: 20px; color: #ffffff; } @@ -444,21 +530,17 @@ .alarm-now-block { position: absolute; z-index: 500; - background-color: rgba(255, 234, 241,0.8); - top: 150px; + top: 300px; left: 20px; - width: 280px; + width: 480px; .map-alarm-div-header { line-height: 40px; - width: 504px; padding-left: 10px; + color: #00fff6; + font-size: 24px; .icon-right { - position: absolute; - right: 15px; - } - .icon-right:hover { - color: #409EFF; cursor: pointer; + margin-left: 20px; } } .el-scrollbar { @@ -476,18 +558,6 @@ .el-table { font-size: 12px; } - .el-table th { - /*background-color: rgba(255, 229, 230, 0.8);*/ - padding: 7px 0px; - } - .el-table td { - /*background-color: rgba(255, 234, 241, 0.8);*/ - padding: 5px 0px; - /*line-height: 1;*/ - } - .el-table td:hover { - /*background-color: rgba(255, 234, 241, 0.8);*/ - } .transition-box { margin-bottom: 10px; width: 200px; @@ -502,100 +572,184 @@ } } + .alarm-now-block /deep/ .el-table th { + background-color: #0757A0; + padding: 12px 0px; + font-size: 16px; + color: #00fff6; + font-weight: normal; + } + + .alarm-now-block /deep/ .el-table td { + /*background-color: #0757A0;*/ + padding: 10px 0px; + font-size: 15px; + color: #FFFFFF; + font-weight: normal; + } + + .alarm-now-block /deep/ .el-table__row td { + background-color: #023D83; + } + .alarm-now-block /deep/ .el-table__body tr:hover > td { + background-color: #0757A0; + } + .alarm-now-block /deep/ tr.el-table__row--striped td { + background-color: #0757A0; + } + .map-tab { position: absolute; - right: 30px; + right: 20px; top: 100px; - width: 100px; + width: 300px; button { margin: 5px 0px; } } + .tab-top { + position: relative; + width: 284px; + height: 24px; + background: url("../../assets/overview_images/tab-top-bg.png"); + } + .tab-bottom { + position: relative; + width: 284px; + height: 24px; + background: url("../../assets/overview_images/tab-bottom-bg.png"); + } + .map-index-button { + position: relative; + width: 284px; + height: 74px; + background: url("../../assets/overview_images/tab-index-unchecked.png"); + font-size: 32px; + line-height: 74px; + text-align: center; + color: #FFFFFF; + cursor: pointer; + } + .index-selected { + background: url("../../assets/overview_images/tab-index-checked.png"); + } + .sub-tab-guider { + width: 149px; + height: 50px; + background: url("../../assets/overview_images/sub-tab-guider.png"); + } + .sub-tab-border { + width: 204px; + height: 253px; + background: url("../../assets/overview_images/sub-tab-border.png"); + } + .sub-tab-content { + text-align: center; + color: #FFFFFF; + font-size: 28px; + cursor: pointer; + width: 200px; + } + .dev-detail-block { - position: absolute; - right: 30px; - top: 400px; - width: 300px; + /*position: absolute;*/ + /*right: 20px;*/ + /*bottom: 100px;*/ + width: 520px; + height: 335px; color: #00FFFF; - font-size: 12px; + font-size: 24px; font-family: "Microsoft YaHei"; + padding: 45px 60px; + line-height: 35px; + background: url("../../assets/overview_images/dev-info.png"); + .dev-detail-span { + margin-left: 20px; + } + .dev-detail-close::before { + content: "\2716"; + position: relative; + top: -20px; + right: -410px; + cursor: pointer; + } } .dev-footer { - position: fixed; - bottom: 50px; + position: absolute; + bottom: 25px; } .dev-icon { - width: calc(10vw - 5px); + width: 195px; + height: 105px; vertical-align: middle; - border: 1px solid #00ffff; - padding: 10px 5px !important; - margin-left: 5px; + line-height: 65px; + padding: 20px 30px !important; + margin-left: 15px; cursor: pointer; + background: url("../../assets/overview_images/dev-type-border-unchecked.png"); } + .dev-icon img { height: 40px; vertical-align:middle; } .dev-icon span { - font-size: 14px; + font-size: 20px; color: #00D2FF; - line-height: 40px; - height: 40px; + line-height: 65px; + height: 65px; vertical-align:middle; float: right; } - .point { - width: 16px; - height: 16px; - position: relative; - display: inline-block; - cursor: pointer; - background: url("../../assets/overview_images/icons/icon-camera.png"); - background-size: contain; + .dev-type-selected { + background: url("../../assets/overview_images/dev-type-border-checked.png"); } + .dev-type-selected span { + color: #f58a88 !important; + } + + /*@media(max-width: 1440px) {*/ + /* .main-title {*/ + /* height: 68px;*/ + /* padding-top: 20px;*/ + /* background: url("../../assets/overview_images/title-background-1440.png");*/ + /* }*/ + /* .main-title span {*/ + /* font-size: 24px;*/ + /* }*/ + /* .main-title img {*/ + /* margin-right: 15px;*/ + /* width: 32px;*/ + /* height: 32px;*/ + /* }*/ + + /* .home-icon {*/ + /* left: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + /* .exit-icon {*/ + /* right: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .home-icon img, .exit-icon img {*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .dev-icon span {*/ + /* font-size: 12px;*/ + /* }*/ + /*}*/ @media(max-width: 1440px) { .main-title { - height: 68px; - padding-top: 20px; - background: url("../../assets/overview_images/title-background-1440.png"); - } - .main-title span { - font-size: 24px; - } - .main-title img { - margin-right: 15px; - width: 32px; - height: 32px; - } - - .home-icon { - left: 18px; - width: 18px; - height: 18px; - } - .exit-icon { - right: 18px; - width: 18px; - height: 18px; - } - - .home-icon img, .exit-icon img { - width: 18px; - height: 18px; - } - - .dev-icon span { - font-size: 12px; - } - } - - @media(max-width: 1366px) { - .main-title { height: 65px; padding-top: 16px; background: url("../../assets/overview_images/title-background-1366.png"); @@ -625,9 +779,145 @@ height: 20px; } - .dev-icon span { + .map-overview { + margin-top: 35px; + height: calc(90vh - 150px); + } + + .point { + width: 16px; + height: 16px; + } + + .statis-block { + margin-top: 16px; + font-size: 36px; + } + .sub-title { + font-size: 24px; + } + .sub-data-block { + width: 90px; + height: 114px; + } + + .dev-normal { + background: url("../../assets/overview_images/normal-1366.png"); + } + .dev-alarm { + background: url("../../assets/overview_images/alarm-1366.png"); + } + .dev-offline { + background: url("../../assets/overview_images/offline-1366.png"); + } + .dev-closed { + background: url("../../assets/overview_images/closed-1366.png"); + } + + .dev-status-block { + top: 90px; + left: 16px; + } + + .alarm-now-block { + top: 220px; + left: 16px; + width: 360px; + .map-alarm-div-header { + line-height: 32px; + font-size: 20px; + } + } + + .alarm-now-block /deep/ .el-table th { + padding: 8px 0px; + font-size: 16px; + } + .alarm-now-block /deep/ .el-table td { + padding: 5px 0px; font-size: 12px; } + + .map-tab { + right: 16px; + top: 90px; + width: 215px; + button { + margin: 5px 0px; + } + } + .tab-top { + width: 213px; + height: 18px; + background: url("../../assets/overview_images/tab-top-bg-1366.png"); + } + .tab-bottom { + width: 213px; + height: 18px; + background: url("../../assets/overview_images/tab-bottom-bg-1366.png"); + } + .map-index-button { + width: 210px; + height: 56px; + background: url("../../assets/overview_images/tab-index-unchecked-1366.png"); + font-size: 24px; + line-height: 56px; + } + .index-selected { + background: url("../../assets/overview_images/tab-index-checked-1366.png"); + } + + .sub-tab-guider { + width: 110px; + height: 37px; + background: url("../../assets/overview_images/sub-tab-guider-1366.png"); + } + .sub-tab-border { + width: 150px; + height: 186px; + background: url("../../assets/overview_images/sub-tab-border-1366.png"); + } + .sub-tab-content { + font-size: 20px; + cursor: pointer; + width: 145px; + } + + .dev-detail-block { + width: 390px; + height: 251px; + font-size: 16px; + padding: 30px 40px; + line-height: 28px; + background: url("../../assets/overview_images/dev-info-1366.png"); + .dev-detail-close::before { + top: -12px; + right: -312px; + } + } + + .dev-footer { + bottom: 20px; + } + .dev-icon { + width: 140px; + height: 76px; + line-height: 56px; + padding: 10px 16px !important; + margin-left: 15px; + background: url("../../assets/overview_images/dev-type-border-unchecked-1366.png"); + } + .dev-icon img { + height: 32px; + } + .dev-icon span { + font-size: 16px; + line-height: 56px; + height: 56px; + } + .dev-type-selected { + background: url("../../assets/overview_images/dev-type-border-checked-1366.png"); + } } diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature.png b/src/assets/overview_images/icons/icon-temperature.png deleted file mode 100644 index 8c5755f..0000000 --- a/src/assets/overview_images/icons/icon-temperature.png +++ /dev/null Binary files differ diff --git a/src/router/modules/fenceSys.js b/src/router/modules/fenceSys.js index abcd3ca..0d784b0 100644 --- a/src/router/modules/fenceSys.js +++ b/src/router/modules/fenceSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const fenceSysRouters = [ { path: '/fence', @@ -13,6 +14,54 @@ } }, { + path: '/fence/video', + component: Layout, + redirect: '/fence/video/monitor', + name: 'FenceVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/fence/video'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/video/monitor', + name: 'FenceVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/fence/video/monitor'], keepAlive: true } + }, + { + path: '/fence/video/history', + name: 'FenceVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/fence/video/history'], keepAlive: true } + } + ] + }, + { + path: '/fence/overview', + component: OverviewLayout, + redirect: '/fence/overview/device', + name: 'FenceOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/fence/overview'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/overview/device', + name: 'FenceOverviewDevice', + component: () => import('@/views/overview/fenceIndex'), + meta: { title: '周界总览', icon: '', permission: ['/fence/overview/device'], keepAlive: true } + } + ] + }, + { path: '/fence/alarm', component: Layout, redirect: '/fence/alarm', diff --git a/src/router/modules/keySys.js b/src/router/modules/keySys.js index a8c93fa..f3a027b 100644 --- a/src/router/modules/keySys.js +++ b/src/router/modules/keySys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const keySysRouters = [ { path: '/key', @@ -13,6 +14,54 @@ } }, { + path: '/key/video', + component: Layout, + redirect: '/key/video/monitor', + name: 'KeyVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/key/video'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/video/monitor', + name: 'KeyVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/key/video/monitor'], keepAlive: true } + }, + { + path: '/key/video/history', + name: 'KeyVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/key/video/history'], keepAlive: true } + } + ] + }, + { + path: '/key/overview', + component: OverviewLayout, + redirect: '/key/overview/device', + name: 'KeyOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/key/overview'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/overview/device', + name: 'KeyOverviewDevice', + component: () => import('@/views/overview/keyIndex'), + meta: { title: '重点区域总览', icon: '', permission: ['/key/overview/device'], keepAlive: true } + } + ] + }, + { path: '/key/alarm', component: Layout, redirect: '/key/alarm/now', diff --git a/src/router/modules/regionSys.js b/src/router/modules/regionSys.js index 8b69cf0..9b4613a 100644 --- a/src/router/modules/regionSys.js +++ b/src/router/modules/regionSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const regionSysRouters = [ { path: '/region', @@ -13,6 +14,54 @@ } }, { + path: '/region/video', + component: Layout, + redirect: '/region/video/monitor', + name: 'RegionVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/region/video'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/video/monitor', + name: 'RegionVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/region/video/monitor'], keepAlive: true } + }, + { + path: '/region/video/history', + name: 'RegionVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/region/video/history'], keepAlive: true } + } + ] + }, + { + path: '/region/overview', + component: OverviewLayout, + redirect: '/region/overview/device', + name: 'RegionOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/region/overview'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/overview/device', + name: 'RegionOverviewDevice', + component: () => import('@/views/overview/regionIndex'), + meta: { title: '全域总览', icon: '', permission: ['/region/overview/device'], keepAlive: true } + } + ] + }, + { path: '/region/alarm', component: Layout, redirect: '/region/alarm', diff --git a/src/views/ctrl/overview.vue b/src/views/ctrl/overview.vue index d8d86d7..b06847f 100644 --- a/src/views/ctrl/overview.vue +++ b/src/views/ctrl/overview.vue @@ -97,33 +97,38 @@ - + 全部 - + + 摄像头 - + + 电子围栏 - + + 温湿度 - + + 烟感 - + + 声光报警 @@ -181,11 +186,6 @@ {{ dataForm.position }} - - - {{ dataForm.inOutName }} - -
@@ -200,6 +200,12 @@ import tg_3_1 from '../../assets/overview_images/tg/mapOverviewTg-3-1.jpg' import tg_4_1 from '../../assets/overview_images/tg/mapOverviewTg-4-1.jpg' import tg_4_5 from '../../assets/overview_images/tg/mapOverviewTg-4-5.jpg' + +const cameraTypes = [4, 5, 8, 9, 10, 11] +const fenceTypes = [6, 7] +const smokingTypes = [2] +const temperatureTypes = [1] +const soundTypes = [12] export default { name: 'CtrlOverview', components: { DeviceDetail }, @@ -208,7 +214,8 @@ title: getProject().title, bgImageSrc: tg_main, devListParams: { - picture: '1' + picture: '1', + deviceTypes: [] }, dev: { alarm: 0, @@ -223,22 +230,22 @@ imgSize: { width: 2245, height: 1586 - }, + }, // 图片显示尺寸 winSize: { width: 1440, height: 789 }, // 屏幕窗口尺寸 halfLeft: 0, - footLeft: 0, - showFence: true, - showTemp: false, - showSmoking: false, - showSound: false, - showSubTabGuider: false, - showFloorThree: false, - showFloorFour: false, - showDevDetail: false, - alarmList: [], + footLeft: 0, // footer部分设备类型按钮偏移量 + showFence: true, // 是否显示电子围栏按钮 + showTemp: false, // 是否显示温湿度按钮 + showSmoking: false, // 是否显示烟感按钮 + showSound: false, // 是否显示声光报警按钮 + showSubTabGuider: false, // 是否显示二级菜单指引 + showFloorThree: false, // 是否显示三层 + showFloorFour: false, // 是否显示四层 + showDevDetail: false, // 是否显示设备详情 + alarmList: [], // 报警列表 alarmColumns: [ { text: '设备编号', @@ -256,9 +263,9 @@ align: 'center', width: 165 } - ], // 显示列 + ], // 报警列表显示列 tableShow: true, // 是否显示告警列表 - devList: [], + devList: [], // 设备列表(在地图上显示) dataForm: { id: '', // id name: '', // 设备名 @@ -270,9 +277,9 @@ position: '', // 安装位置 installDate: '', // 安装日期 inOutName: '' // 进出营 - }, // 表单 - isFence: false, - isDoor: false + }, // 设备详情表单 + isFence: false, // 是否电子围栏设备 + checkDevType: [true, false, false, false, false, false] // 选中设备类型 } }, mounted() { @@ -390,11 +397,35 @@ devTypes[i].className = 'dev-icon el-col el-col-24' } } + this.checkDevType = [false, false, false, false, false, false] // 添加选中的样式 - event.currentTarget.className += ' dev-type-selected' + if (typeof event === 'undefined') { + devTypes[0].className += ' dev-type-selected' + } else { + event.currentTarget.className += ' dev-type-selected' + } - console.log(event.currentTarget) + if (type === 'all') { + this.devListParams.deviceTypes = [] + this.checkDevType[0] = true + } else if (type === 'camera') { + this.devListParams.deviceTypes = cameraTypes.toString() + this.checkDevType[1] = true + } else if (type === 'fence') { + this.devListParams.deviceTypes = fenceTypes.toString() + this.checkDevType[2] = true + } else if (type === 'temperature') { + this.devListParams.deviceTypes = temperatureTypes.toString() + this.checkDevType[3] = true + } else if (type === 'smoking') { + this.devListParams.deviceTypes = smokingTypes.toString() + this.checkDevType[4] = true + } else if (type === 'sound') { + this.devListParams.deviceTypes = soundTypes.toString() + this.checkDevType[5] = true + } + this.fetchDeviceData() }, // 点击平面图一级按钮 selectMapTab(tab, event) { @@ -545,7 +576,7 @@ } } - this.fetchDeviceData() + this.selectDevByType('all') }, // 查询并显示设备详情 detailDev(dev, event) { @@ -569,11 +600,6 @@ if (dev.typeName.indexOf('电子围栏') >= 0) { this.isFence = true } - - // 营门设备有进出营门的标志位 - if (dev.areaId === '1') { - this.isDoor = true - } } else { this.$message.error(response.message) } @@ -684,7 +710,7 @@ @extend .point; } .point-fence { - background: url("../../assets/overview_images/icons/icon-fence.png"); + background: url("../../assets/overview_images/icons/icon-fence-unchecked.png"); background-size: contain; @extend .point; } @@ -915,44 +941,44 @@ color: #f58a88 !important; } + /*@media(max-width: 1440px) {*/ + /* .main-title {*/ + /* height: 68px;*/ + /* padding-top: 20px;*/ + /* background: url("../../assets/overview_images/title-background-1440.png");*/ + /* }*/ + /* .main-title span {*/ + /* font-size: 24px;*/ + /* }*/ + /* .main-title img {*/ + /* margin-right: 15px;*/ + /* width: 32px;*/ + /* height: 32px;*/ + /* }*/ + + /* .home-icon {*/ + /* left: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + /* .exit-icon {*/ + /* right: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .home-icon img, .exit-icon img {*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .dev-icon span {*/ + /* font-size: 12px;*/ + /* }*/ + /*}*/ + @media(max-width: 1440px) { .main-title { - height: 68px; - padding-top: 20px; - background: url("../../assets/overview_images/title-background-1440.png"); - } - .main-title span { - font-size: 24px; - } - .main-title img { - margin-right: 15px; - width: 32px; - height: 32px; - } - - .home-icon { - left: 18px; - width: 18px; - height: 18px; - } - .exit-icon { - right: 18px; - width: 18px; - height: 18px; - } - - .home-icon img, .exit-icon img { - width: 18px; - height: 18px; - } - - .dev-icon span { - font-size: 12px; - } - } - - @media(max-width: 1366px) { - .main-title { height: 65px; padding-top: 16px; background: url("../../assets/overview_images/title-background-1366.png"); diff --git a/src/views/overview/doorIndex.vue b/src/views/overview/doorIndex.vue index 32902b4..03624bb 100644 --- a/src/views/overview/doorIndex.vue +++ b/src/views/overview/doorIndex.vue @@ -2,7 +2,6 @@
- {{ title }}
@@ -20,7 +19,7 @@
- +
@@ -69,6 +68,7 @@ :data="alarmList" class="alarm-list-table" border + stripe @row-click="alarmRowClick"> @@ -166,8 +151,10 @@ import { alarmListOverview } from '@/api/alarm' import DeviceDetail from '@/views/deviceManage/deviceDetail' import tg_main from '../../assets/overview_images/tg/mapOverviewTg.jpg' + +const cameraTypes = [4, 5, 8, 9, 10, 11] export default { - name: 'DoorOverviewDevice', + name: 'DoorOverview', components: { DeviceDetail }, data() { return { @@ -175,7 +162,8 @@ bgImageSrc: tg_main, devListParams: { picture: '1', - areaTypeId: 1 + areaTypeId: 1, + deviceTypes: [] }, dev: { alarm: 0, @@ -190,12 +178,15 @@ imgSize: { width: 2245, height: 1586 - }, + }, // 图片显示尺寸 winSize: { width: 1440, height: 789 }, // 屏幕窗口尺寸 - alarmList: [], + halfLeft: 0, + footLeft: 0, // footer部分设备类型按钮偏移量 + showDevDetail: false, // 是否显示设备详情 + alarmList: [], // 报警列表 alarmColumns: [ { text: '设备编号', @@ -210,11 +201,12 @@ { text: '报警时间', value: 'alarmTime', - align: 'center' + align: 'center', + width: 165 } - ], // 显示列 + ], // 报警列表显示列 tableShow: true, // 是否显示告警列表 - devList: [], + devList: [], // 设备列表(在地图上显示) dataForm: { id: '', // id name: '', // 设备名 @@ -226,42 +218,49 @@ position: '', // 安装位置 installDate: '', // 安装日期 inOutName: '' // 进出营 - }, // 表单 - isDoor: true + }, // 设备详情表单 + checkDevType: [true, false] // 选中设备类型 } }, - activated() { - this.fetchData() - this.fetchDeviceData() - this.fetchAlarmNowData() - }, mounted() { - // this.getBgImageSize() - // this.reDrawDevs() + this.initWindowSize() + + this.fetchData() + this.fetchAlarmNowData() const that = this window.onresize = function() { + that.initWindowSize() that.getBgImageSize() } }, methods: { - getBgImageSize() { - // 获取图片尺寸 - this.imgSize = { - width: this.$refs['bgImg'].width, - height: this.$refs['bgImg'].height - } + // 获取窗口大小 + initWindowSize() { // 获取窗体尺寸 this.winSize = { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight } - this.reDrawDevs() + // 设置footer部分居中显示 + if (this.winSize.width >= 1920) { + this.footLeft = (this.winSize.width - 2 * 210) / 2 + } else if (this.winSize.width >= 1366 && this.winSize.width < 1920) { + this.footLeft = (this.winSize.width - 2 * 155) / 2 + } }, + // 获取图像大小 + getBgImageSize() { + // 获取图片尺寸 + this.imgSize = { + width: this.$refs['bgImg'].width, + height: this.$refs['bgImg'].height + } + this.halfLeft = (this.winSize.width - this.imgSize.width) / 2 + }, + // 重新绘制设备点位 reDrawDevs() { - // this.getBgImageSize() - const halfLeft = (this.winSize.width - this.imgSize.width) / 2 // 调整球机的设备位置 @@ -269,16 +268,37 @@ this.devList.forEach(function(item) { const point = document.getElementById(item.id) - if (item.x !== '' && item.y !== '') { - point.style.position = 'absolute' - point.style.top = item.y * that.imgSize.height / that.imgSizeOriginal.height + 'px' - point.style.left = (item.x * that.imgSize.width / that.imgSizeOriginal.width + halfLeft) + 'px' - } else { - point.style.display = 'none' + if (point !== null) { + if (item.x !== '' && item.y !== '') { + point.style.position = 'absolute' + point.style.top = item.y * that.imgSize.height / that.imgSizeOriginal.height + 'px' + point.style.left = (item.x * that.imgSize.width / that.imgSizeOriginal.width + halfLeft) + 'px' + } else { + point.style.display = 'none' + } } }) }, - // 获取设备状态 + // 获取设备列表 + fetchDeviceData() { + overviewDeviceList(this.devListParams).then(response => { + if (response.code === 200) { + const that = this + this.devList = [] + response.data.forEach(dev => { + if (dev.x !== '' && dev.y !== '') { + that.devList.push(dev) + } + }) + } + }) + }, + // 平面图就绪时执行函数 + backgroundImageReady() { + this.getBgImageSize() + this.fetchDeviceData() + }, + // 获取设备状态统计值 fetchData() { overviewDeviceStatus({ areaTypeId: this.devListParams.areaTypeId }).then(response => { if (response.code === 200) { @@ -289,13 +309,7 @@ } }) }, - fetchDeviceData() { - overviewDeviceList(this.devListParams).then(response => { - if (response.code === 200) { - this.devList = response.data - } - }) - }, + // 获取报警列表 fetchAlarmNowData() { alarmListOverview({ areaTypeId: this.devListParams.areaTypeId }).then(response => { if (response.code === 200) { @@ -313,12 +327,36 @@ backToIndex() { this.$router.push('/door/alarm/now') }, - setClass(key) { - const classObj = {} - classObj['point'] = true - return classObj + // 选择设备类型 + selectDevByType(type, event) { + // 遍历所有的设备类型 + const devTypes = document.querySelectorAll('.dev-icon') + for (let i = 0; i < devTypes.length; i++) { + if (devTypes[i].className.indexOf('dev-type-selected') > -1) { + devTypes[i].className = 'dev-icon el-col el-col-24' + } + } + this.checkDevType = [false, false] + + // 添加选中的样式 + if (typeof event === 'undefined') { + devTypes[0].className += ' dev-type-selected' + } else { + event.currentTarget.className += ' dev-type-selected' + } + + if (type === 'all') { + this.devListParams.deviceTypes = [] + this.checkDevType[0] = true + } else if (type === 'camera') { + this.devListParams.deviceTypes = cameraTypes.toString() + this.checkDevType[1] = true + } + this.fetchDeviceData() }, - detailDev(dev) { + // 查询并显示设备详情 + detailDev(dev, event) { + this.resetDevDetail() getDetailDevice(dev.id).then(response => { if (response.code === 200) { this.dataForm = { @@ -337,9 +375,35 @@ this.$message.error(response.message) } }) + + // 弹窗显示设备详情 + const targetDev = event.currentTarget // 取到点击到的设备图标div + + this.showDevDetail = true + let top = parseInt(targetDev.style.top.substring(0, targetDev.style.top.length - 2)) + top = top + 100 + this.$refs['dev-detail-block'].style.position = 'absolute' + this.$refs['dev-detail-block'].style.top = top + 'px' + this.$refs['dev-detail-block'].style.left = targetDev.style.left }, + // 点击报警列表 alarmRowClick(dev, column, event) { + }, + // 清除设备详情 + resetDevDetail() { + this.dataForm = { + id: '', // id + name: '', // 设备名 + devcode: '', // 设备编号 + typeName: '', // 设备类型 + model: '', // 设备型号 + onlineStatusName: '', // 在线状态 + deviceStatusName: '', // 设备状态 + position: '', // 安装位置 + installDate: '', // 安装日期 + inOutName: '' // 进出营 + } } } } @@ -359,50 +423,68 @@ .main-title { height: 90px; text-align: center; - padding-top: 28px; + padding-top: 20px; background: url("../../assets/overview_images/title-background-1920.png"); } .main-title img { display: inline-block; margin-right: 15px; - width: 40px; - height: 40px; + width: 52px; + height: 32px; vertical-align: text-bottom; } .home-icon { - width: 28px; - height: 28px; + width: 26px; + height: 26px; position: fixed; - left: 32px; - top: 24px; + left: 20px; + top: 20px; } .exit-icon { - width: 28px; - height: 28px; + width: 26px; + height: 26px; position: fixed; - right: 32px; - top: 24px; + right: 20px; + top: 20px; } .home-icon img, .exit-icon img { - width: 28px; - height: 28px; + width: 26px; + height: 26px; } .main-title span { color: #FFFFFF; font-size: 32px; - /*font-weight: bold;*/ + font-weight: bold; font-family: 'Microsoft YaHei'; } .map-overview { - margin-top: 30px; - height: calc(90vh - 140px); + margin-top: 50px; + /*width: 1100px;*/ + height: calc(90vh - 200px); text-align: center; position: relative; } + .point { + width: 24px; + height: 24px; + position: relative; + display: inline-block; + cursor: pointer; + } + .point-camera { + background: url("../../assets/overview_images/icons/icon-camera-point.png"); + background-size: contain; + @extend .point; + } + .point-fence { + background: url("../../assets/overview_images/icons/icon-fence-unchecked.png"); + background-size: contain; + @extend .point; + } .statis-block { text-align: center; @@ -420,23 +502,27 @@ .dev-normal { background: url("../../assets/overview_images/normal.png"); background-size: contain; + color: #00ff0c; } .dev-alarm { background: url("../../assets/overview_images/alarm.png"); background-size: contain; + color: #ff0000; } .dev-offline { background: url("../../assets/overview_images/offline.png"); background-size: contain; + color: #fff000; } .dev-closed { background: url("../../assets/overview_images/closed.png"); background-size: contain; + color: #00fff6; } .dev-status-block { position: absolute; - top: 120px; + top: 100px; left: 20px; color: #ffffff; } @@ -444,21 +530,17 @@ .alarm-now-block { position: absolute; z-index: 500; - background-color: rgba(255, 234, 241,0.8); - top: 150px; + top: 300px; left: 20px; - width: 280px; + width: 480px; .map-alarm-div-header { line-height: 40px; - width: 504px; padding-left: 10px; + color: #00fff6; + font-size: 24px; .icon-right { - position: absolute; - right: 15px; - } - .icon-right:hover { - color: #409EFF; cursor: pointer; + margin-left: 20px; } } .el-scrollbar { @@ -476,18 +558,6 @@ .el-table { font-size: 12px; } - .el-table th { - /*background-color: rgba(255, 229, 230, 0.8);*/ - padding: 7px 0px; - } - .el-table td { - /*background-color: rgba(255, 234, 241, 0.8);*/ - padding: 5px 0px; - /*line-height: 1;*/ - } - .el-table td:hover { - /*background-color: rgba(255, 234, 241, 0.8);*/ - } .transition-box { margin-bottom: 10px; width: 200px; @@ -502,100 +572,184 @@ } } + .alarm-now-block /deep/ .el-table th { + background-color: #0757A0; + padding: 12px 0px; + font-size: 16px; + color: #00fff6; + font-weight: normal; + } + + .alarm-now-block /deep/ .el-table td { + /*background-color: #0757A0;*/ + padding: 10px 0px; + font-size: 15px; + color: #FFFFFF; + font-weight: normal; + } + + .alarm-now-block /deep/ .el-table__row td { + background-color: #023D83; + } + .alarm-now-block /deep/ .el-table__body tr:hover > td { + background-color: #0757A0; + } + .alarm-now-block /deep/ tr.el-table__row--striped td { + background-color: #0757A0; + } + .map-tab { position: absolute; - right: 30px; + right: 20px; top: 100px; - width: 100px; + width: 300px; button { margin: 5px 0px; } } + .tab-top { + position: relative; + width: 284px; + height: 24px; + background: url("../../assets/overview_images/tab-top-bg.png"); + } + .tab-bottom { + position: relative; + width: 284px; + height: 24px; + background: url("../../assets/overview_images/tab-bottom-bg.png"); + } + .map-index-button { + position: relative; + width: 284px; + height: 74px; + background: url("../../assets/overview_images/tab-index-unchecked.png"); + font-size: 32px; + line-height: 74px; + text-align: center; + color: #FFFFFF; + cursor: pointer; + } + .index-selected { + background: url("../../assets/overview_images/tab-index-checked.png"); + } + .sub-tab-guider { + width: 149px; + height: 50px; + background: url("../../assets/overview_images/sub-tab-guider.png"); + } + .sub-tab-border { + width: 204px; + height: 253px; + background: url("../../assets/overview_images/sub-tab-border.png"); + } + .sub-tab-content { + text-align: center; + color: #FFFFFF; + font-size: 28px; + cursor: pointer; + width: 200px; + } + .dev-detail-block { - position: absolute; - right: 30px; - top: 400px; - width: 300px; + /*position: absolute;*/ + /*right: 20px;*/ + /*bottom: 100px;*/ + width: 520px; + height: 335px; color: #00FFFF; - font-size: 12px; + font-size: 24px; font-family: "Microsoft YaHei"; + padding: 45px 60px; + line-height: 35px; + background: url("../../assets/overview_images/dev-info.png"); + .dev-detail-span { + margin-left: 20px; + } + .dev-detail-close::before { + content: "\2716"; + position: relative; + top: -20px; + right: -410px; + cursor: pointer; + } } .dev-footer { - position: fixed; - bottom: 50px; + position: absolute; + bottom: 25px; } .dev-icon { - width: calc(10vw - 5px); + width: 195px; + height: 105px; vertical-align: middle; - border: 1px solid #00ffff; - padding: 10px 5px !important; - margin-left: 5px; + line-height: 65px; + padding: 20px 30px !important; + margin-left: 15px; cursor: pointer; + background: url("../../assets/overview_images/dev-type-border-unchecked.png"); } + .dev-icon img { height: 40px; vertical-align:middle; } .dev-icon span { - font-size: 14px; + font-size: 20px; color: #00D2FF; - line-height: 40px; - height: 40px; + line-height: 65px; + height: 65px; vertical-align:middle; float: right; } - .point { - width: 16px; - height: 16px; - position: relative; - display: inline-block; - cursor: pointer; - background: url("../../assets/overview_images/icons/icon-camera.png"); - background-size: contain; + .dev-type-selected { + background: url("../../assets/overview_images/dev-type-border-checked.png"); } + .dev-type-selected span { + color: #f58a88 !important; + } + + /*@media(max-width: 1440px) {*/ + /* .main-title {*/ + /* height: 68px;*/ + /* padding-top: 20px;*/ + /* background: url("../../assets/overview_images/title-background-1440.png");*/ + /* }*/ + /* .main-title span {*/ + /* font-size: 24px;*/ + /* }*/ + /* .main-title img {*/ + /* margin-right: 15px;*/ + /* width: 32px;*/ + /* height: 32px;*/ + /* }*/ + + /* .home-icon {*/ + /* left: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + /* .exit-icon {*/ + /* right: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .home-icon img, .exit-icon img {*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .dev-icon span {*/ + /* font-size: 12px;*/ + /* }*/ + /*}*/ @media(max-width: 1440px) { .main-title { - height: 68px; - padding-top: 20px; - background: url("../../assets/overview_images/title-background-1440.png"); - } - .main-title span { - font-size: 24px; - } - .main-title img { - margin-right: 15px; - width: 32px; - height: 32px; - } - - .home-icon { - left: 18px; - width: 18px; - height: 18px; - } - .exit-icon { - right: 18px; - width: 18px; - height: 18px; - } - - .home-icon img, .exit-icon img { - width: 18px; - height: 18px; - } - - .dev-icon span { - font-size: 12px; - } - } - - @media(max-width: 1366px) { - .main-title { height: 65px; padding-top: 16px; background: url("../../assets/overview_images/title-background-1366.png"); @@ -625,9 +779,145 @@ height: 20px; } - .dev-icon span { + .map-overview { + margin-top: 35px; + height: calc(90vh - 150px); + } + + .point { + width: 16px; + height: 16px; + } + + .statis-block { + margin-top: 16px; + font-size: 36px; + } + .sub-title { + font-size: 24px; + } + .sub-data-block { + width: 90px; + height: 114px; + } + + .dev-normal { + background: url("../../assets/overview_images/normal-1366.png"); + } + .dev-alarm { + background: url("../../assets/overview_images/alarm-1366.png"); + } + .dev-offline { + background: url("../../assets/overview_images/offline-1366.png"); + } + .dev-closed { + background: url("../../assets/overview_images/closed-1366.png"); + } + + .dev-status-block { + top: 90px; + left: 16px; + } + + .alarm-now-block { + top: 220px; + left: 16px; + width: 360px; + .map-alarm-div-header { + line-height: 32px; + font-size: 20px; + } + } + + .alarm-now-block /deep/ .el-table th { + padding: 8px 0px; + font-size: 16px; + } + .alarm-now-block /deep/ .el-table td { + padding: 5px 0px; font-size: 12px; } + + .map-tab { + right: 16px; + top: 90px; + width: 215px; + button { + margin: 5px 0px; + } + } + .tab-top { + width: 213px; + height: 18px; + background: url("../../assets/overview_images/tab-top-bg-1366.png"); + } + .tab-bottom { + width: 213px; + height: 18px; + background: url("../../assets/overview_images/tab-bottom-bg-1366.png"); + } + .map-index-button { + width: 210px; + height: 56px; + background: url("../../assets/overview_images/tab-index-unchecked-1366.png"); + font-size: 24px; + line-height: 56px; + } + .index-selected { + background: url("../../assets/overview_images/tab-index-checked-1366.png"); + } + + .sub-tab-guider { + width: 110px; + height: 37px; + background: url("../../assets/overview_images/sub-tab-guider-1366.png"); + } + .sub-tab-border { + width: 150px; + height: 186px; + background: url("../../assets/overview_images/sub-tab-border-1366.png"); + } + .sub-tab-content { + font-size: 20px; + cursor: pointer; + width: 145px; + } + + .dev-detail-block { + width: 390px; + height: 251px; + font-size: 16px; + padding: 30px 40px; + line-height: 28px; + background: url("../../assets/overview_images/dev-info-1366.png"); + .dev-detail-close::before { + top: -12px; + right: -312px; + } + } + + .dev-footer { + bottom: 20px; + } + .dev-icon { + width: 140px; + height: 76px; + line-height: 56px; + padding: 10px 16px !important; + margin-left: 15px; + background: url("../../assets/overview_images/dev-type-border-unchecked-1366.png"); + } + .dev-icon img { + height: 32px; + } + .dev-icon span { + font-size: 16px; + line-height: 56px; + height: 56px; + } + .dev-type-selected { + background: url("../../assets/overview_images/dev-type-border-checked-1366.png"); + } } diff --git a/src/views/overview/fenceIndex.vue b/src/views/overview/fenceIndex.vue new file mode 100644 index 0000000..6a92ca8 --- /dev/null +++ b/src/views/overview/fenceIndex.vue @@ -0,0 +1,923 @@ + + + + + diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature.png b/src/assets/overview_images/icons/icon-temperature.png deleted file mode 100644 index 8c5755f..0000000 --- a/src/assets/overview_images/icons/icon-temperature.png +++ /dev/null Binary files differ diff --git a/src/router/modules/fenceSys.js b/src/router/modules/fenceSys.js index abcd3ca..0d784b0 100644 --- a/src/router/modules/fenceSys.js +++ b/src/router/modules/fenceSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const fenceSysRouters = [ { path: '/fence', @@ -13,6 +14,54 @@ } }, { + path: '/fence/video', + component: Layout, + redirect: '/fence/video/monitor', + name: 'FenceVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/fence/video'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/video/monitor', + name: 'FenceVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/fence/video/monitor'], keepAlive: true } + }, + { + path: '/fence/video/history', + name: 'FenceVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/fence/video/history'], keepAlive: true } + } + ] + }, + { + path: '/fence/overview', + component: OverviewLayout, + redirect: '/fence/overview/device', + name: 'FenceOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/fence/overview'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/overview/device', + name: 'FenceOverviewDevice', + component: () => import('@/views/overview/fenceIndex'), + meta: { title: '周界总览', icon: '', permission: ['/fence/overview/device'], keepAlive: true } + } + ] + }, + { path: '/fence/alarm', component: Layout, redirect: '/fence/alarm', diff --git a/src/router/modules/keySys.js b/src/router/modules/keySys.js index a8c93fa..f3a027b 100644 --- a/src/router/modules/keySys.js +++ b/src/router/modules/keySys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const keySysRouters = [ { path: '/key', @@ -13,6 +14,54 @@ } }, { + path: '/key/video', + component: Layout, + redirect: '/key/video/monitor', + name: 'KeyVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/key/video'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/video/monitor', + name: 'KeyVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/key/video/monitor'], keepAlive: true } + }, + { + path: '/key/video/history', + name: 'KeyVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/key/video/history'], keepAlive: true } + } + ] + }, + { + path: '/key/overview', + component: OverviewLayout, + redirect: '/key/overview/device', + name: 'KeyOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/key/overview'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/overview/device', + name: 'KeyOverviewDevice', + component: () => import('@/views/overview/keyIndex'), + meta: { title: '重点区域总览', icon: '', permission: ['/key/overview/device'], keepAlive: true } + } + ] + }, + { path: '/key/alarm', component: Layout, redirect: '/key/alarm/now', diff --git a/src/router/modules/regionSys.js b/src/router/modules/regionSys.js index 8b69cf0..9b4613a 100644 --- a/src/router/modules/regionSys.js +++ b/src/router/modules/regionSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const regionSysRouters = [ { path: '/region', @@ -13,6 +14,54 @@ } }, { + path: '/region/video', + component: Layout, + redirect: '/region/video/monitor', + name: 'RegionVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/region/video'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/video/monitor', + name: 'RegionVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/region/video/monitor'], keepAlive: true } + }, + { + path: '/region/video/history', + name: 'RegionVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/region/video/history'], keepAlive: true } + } + ] + }, + { + path: '/region/overview', + component: OverviewLayout, + redirect: '/region/overview/device', + name: 'RegionOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/region/overview'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/overview/device', + name: 'RegionOverviewDevice', + component: () => import('@/views/overview/regionIndex'), + meta: { title: '全域总览', icon: '', permission: ['/region/overview/device'], keepAlive: true } + } + ] + }, + { path: '/region/alarm', component: Layout, redirect: '/region/alarm', diff --git a/src/views/ctrl/overview.vue b/src/views/ctrl/overview.vue index d8d86d7..b06847f 100644 --- a/src/views/ctrl/overview.vue +++ b/src/views/ctrl/overview.vue @@ -97,33 +97,38 @@ - + 全部 - + + 摄像头 - + + 电子围栏 - + + 温湿度 - + + 烟感 - + + 声光报警 @@ -181,11 +186,6 @@ {{ dataForm.position }} - - - {{ dataForm.inOutName }} - -
@@ -200,6 +200,12 @@ import tg_3_1 from '../../assets/overview_images/tg/mapOverviewTg-3-1.jpg' import tg_4_1 from '../../assets/overview_images/tg/mapOverviewTg-4-1.jpg' import tg_4_5 from '../../assets/overview_images/tg/mapOverviewTg-4-5.jpg' + +const cameraTypes = [4, 5, 8, 9, 10, 11] +const fenceTypes = [6, 7] +const smokingTypes = [2] +const temperatureTypes = [1] +const soundTypes = [12] export default { name: 'CtrlOverview', components: { DeviceDetail }, @@ -208,7 +214,8 @@ title: getProject().title, bgImageSrc: tg_main, devListParams: { - picture: '1' + picture: '1', + deviceTypes: [] }, dev: { alarm: 0, @@ -223,22 +230,22 @@ imgSize: { width: 2245, height: 1586 - }, + }, // 图片显示尺寸 winSize: { width: 1440, height: 789 }, // 屏幕窗口尺寸 halfLeft: 0, - footLeft: 0, - showFence: true, - showTemp: false, - showSmoking: false, - showSound: false, - showSubTabGuider: false, - showFloorThree: false, - showFloorFour: false, - showDevDetail: false, - alarmList: [], + footLeft: 0, // footer部分设备类型按钮偏移量 + showFence: true, // 是否显示电子围栏按钮 + showTemp: false, // 是否显示温湿度按钮 + showSmoking: false, // 是否显示烟感按钮 + showSound: false, // 是否显示声光报警按钮 + showSubTabGuider: false, // 是否显示二级菜单指引 + showFloorThree: false, // 是否显示三层 + showFloorFour: false, // 是否显示四层 + showDevDetail: false, // 是否显示设备详情 + alarmList: [], // 报警列表 alarmColumns: [ { text: '设备编号', @@ -256,9 +263,9 @@ align: 'center', width: 165 } - ], // 显示列 + ], // 报警列表显示列 tableShow: true, // 是否显示告警列表 - devList: [], + devList: [], // 设备列表(在地图上显示) dataForm: { id: '', // id name: '', // 设备名 @@ -270,9 +277,9 @@ position: '', // 安装位置 installDate: '', // 安装日期 inOutName: '' // 进出营 - }, // 表单 - isFence: false, - isDoor: false + }, // 设备详情表单 + isFence: false, // 是否电子围栏设备 + checkDevType: [true, false, false, false, false, false] // 选中设备类型 } }, mounted() { @@ -390,11 +397,35 @@ devTypes[i].className = 'dev-icon el-col el-col-24' } } + this.checkDevType = [false, false, false, false, false, false] // 添加选中的样式 - event.currentTarget.className += ' dev-type-selected' + if (typeof event === 'undefined') { + devTypes[0].className += ' dev-type-selected' + } else { + event.currentTarget.className += ' dev-type-selected' + } - console.log(event.currentTarget) + if (type === 'all') { + this.devListParams.deviceTypes = [] + this.checkDevType[0] = true + } else if (type === 'camera') { + this.devListParams.deviceTypes = cameraTypes.toString() + this.checkDevType[1] = true + } else if (type === 'fence') { + this.devListParams.deviceTypes = fenceTypes.toString() + this.checkDevType[2] = true + } else if (type === 'temperature') { + this.devListParams.deviceTypes = temperatureTypes.toString() + this.checkDevType[3] = true + } else if (type === 'smoking') { + this.devListParams.deviceTypes = smokingTypes.toString() + this.checkDevType[4] = true + } else if (type === 'sound') { + this.devListParams.deviceTypes = soundTypes.toString() + this.checkDevType[5] = true + } + this.fetchDeviceData() }, // 点击平面图一级按钮 selectMapTab(tab, event) { @@ -545,7 +576,7 @@ } } - this.fetchDeviceData() + this.selectDevByType('all') }, // 查询并显示设备详情 detailDev(dev, event) { @@ -569,11 +600,6 @@ if (dev.typeName.indexOf('电子围栏') >= 0) { this.isFence = true } - - // 营门设备有进出营门的标志位 - if (dev.areaId === '1') { - this.isDoor = true - } } else { this.$message.error(response.message) } @@ -684,7 +710,7 @@ @extend .point; } .point-fence { - background: url("../../assets/overview_images/icons/icon-fence.png"); + background: url("../../assets/overview_images/icons/icon-fence-unchecked.png"); background-size: contain; @extend .point; } @@ -915,44 +941,44 @@ color: #f58a88 !important; } + /*@media(max-width: 1440px) {*/ + /* .main-title {*/ + /* height: 68px;*/ + /* padding-top: 20px;*/ + /* background: url("../../assets/overview_images/title-background-1440.png");*/ + /* }*/ + /* .main-title span {*/ + /* font-size: 24px;*/ + /* }*/ + /* .main-title img {*/ + /* margin-right: 15px;*/ + /* width: 32px;*/ + /* height: 32px;*/ + /* }*/ + + /* .home-icon {*/ + /* left: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + /* .exit-icon {*/ + /* right: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .home-icon img, .exit-icon img {*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .dev-icon span {*/ + /* font-size: 12px;*/ + /* }*/ + /*}*/ + @media(max-width: 1440px) { .main-title { - height: 68px; - padding-top: 20px; - background: url("../../assets/overview_images/title-background-1440.png"); - } - .main-title span { - font-size: 24px; - } - .main-title img { - margin-right: 15px; - width: 32px; - height: 32px; - } - - .home-icon { - left: 18px; - width: 18px; - height: 18px; - } - .exit-icon { - right: 18px; - width: 18px; - height: 18px; - } - - .home-icon img, .exit-icon img { - width: 18px; - height: 18px; - } - - .dev-icon span { - font-size: 12px; - } - } - - @media(max-width: 1366px) { - .main-title { height: 65px; padding-top: 16px; background: url("../../assets/overview_images/title-background-1366.png"); diff --git a/src/views/overview/doorIndex.vue b/src/views/overview/doorIndex.vue index 32902b4..03624bb 100644 --- a/src/views/overview/doorIndex.vue +++ b/src/views/overview/doorIndex.vue @@ -2,7 +2,6 @@
- {{ title }}
@@ -20,7 +19,7 @@
- +
@@ -69,6 +68,7 @@ :data="alarmList" class="alarm-list-table" border + stripe @row-click="alarmRowClick"> @@ -166,8 +151,10 @@ import { alarmListOverview } from '@/api/alarm' import DeviceDetail from '@/views/deviceManage/deviceDetail' import tg_main from '../../assets/overview_images/tg/mapOverviewTg.jpg' + +const cameraTypes = [4, 5, 8, 9, 10, 11] export default { - name: 'DoorOverviewDevice', + name: 'DoorOverview', components: { DeviceDetail }, data() { return { @@ -175,7 +162,8 @@ bgImageSrc: tg_main, devListParams: { picture: '1', - areaTypeId: 1 + areaTypeId: 1, + deviceTypes: [] }, dev: { alarm: 0, @@ -190,12 +178,15 @@ imgSize: { width: 2245, height: 1586 - }, + }, // 图片显示尺寸 winSize: { width: 1440, height: 789 }, // 屏幕窗口尺寸 - alarmList: [], + halfLeft: 0, + footLeft: 0, // footer部分设备类型按钮偏移量 + showDevDetail: false, // 是否显示设备详情 + alarmList: [], // 报警列表 alarmColumns: [ { text: '设备编号', @@ -210,11 +201,12 @@ { text: '报警时间', value: 'alarmTime', - align: 'center' + align: 'center', + width: 165 } - ], // 显示列 + ], // 报警列表显示列 tableShow: true, // 是否显示告警列表 - devList: [], + devList: [], // 设备列表(在地图上显示) dataForm: { id: '', // id name: '', // 设备名 @@ -226,42 +218,49 @@ position: '', // 安装位置 installDate: '', // 安装日期 inOutName: '' // 进出营 - }, // 表单 - isDoor: true + }, // 设备详情表单 + checkDevType: [true, false] // 选中设备类型 } }, - activated() { - this.fetchData() - this.fetchDeviceData() - this.fetchAlarmNowData() - }, mounted() { - // this.getBgImageSize() - // this.reDrawDevs() + this.initWindowSize() + + this.fetchData() + this.fetchAlarmNowData() const that = this window.onresize = function() { + that.initWindowSize() that.getBgImageSize() } }, methods: { - getBgImageSize() { - // 获取图片尺寸 - this.imgSize = { - width: this.$refs['bgImg'].width, - height: this.$refs['bgImg'].height - } + // 获取窗口大小 + initWindowSize() { // 获取窗体尺寸 this.winSize = { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight } - this.reDrawDevs() + // 设置footer部分居中显示 + if (this.winSize.width >= 1920) { + this.footLeft = (this.winSize.width - 2 * 210) / 2 + } else if (this.winSize.width >= 1366 && this.winSize.width < 1920) { + this.footLeft = (this.winSize.width - 2 * 155) / 2 + } }, + // 获取图像大小 + getBgImageSize() { + // 获取图片尺寸 + this.imgSize = { + width: this.$refs['bgImg'].width, + height: this.$refs['bgImg'].height + } + this.halfLeft = (this.winSize.width - this.imgSize.width) / 2 + }, + // 重新绘制设备点位 reDrawDevs() { - // this.getBgImageSize() - const halfLeft = (this.winSize.width - this.imgSize.width) / 2 // 调整球机的设备位置 @@ -269,16 +268,37 @@ this.devList.forEach(function(item) { const point = document.getElementById(item.id) - if (item.x !== '' && item.y !== '') { - point.style.position = 'absolute' - point.style.top = item.y * that.imgSize.height / that.imgSizeOriginal.height + 'px' - point.style.left = (item.x * that.imgSize.width / that.imgSizeOriginal.width + halfLeft) + 'px' - } else { - point.style.display = 'none' + if (point !== null) { + if (item.x !== '' && item.y !== '') { + point.style.position = 'absolute' + point.style.top = item.y * that.imgSize.height / that.imgSizeOriginal.height + 'px' + point.style.left = (item.x * that.imgSize.width / that.imgSizeOriginal.width + halfLeft) + 'px' + } else { + point.style.display = 'none' + } } }) }, - // 获取设备状态 + // 获取设备列表 + fetchDeviceData() { + overviewDeviceList(this.devListParams).then(response => { + if (response.code === 200) { + const that = this + this.devList = [] + response.data.forEach(dev => { + if (dev.x !== '' && dev.y !== '') { + that.devList.push(dev) + } + }) + } + }) + }, + // 平面图就绪时执行函数 + backgroundImageReady() { + this.getBgImageSize() + this.fetchDeviceData() + }, + // 获取设备状态统计值 fetchData() { overviewDeviceStatus({ areaTypeId: this.devListParams.areaTypeId }).then(response => { if (response.code === 200) { @@ -289,13 +309,7 @@ } }) }, - fetchDeviceData() { - overviewDeviceList(this.devListParams).then(response => { - if (response.code === 200) { - this.devList = response.data - } - }) - }, + // 获取报警列表 fetchAlarmNowData() { alarmListOverview({ areaTypeId: this.devListParams.areaTypeId }).then(response => { if (response.code === 200) { @@ -313,12 +327,36 @@ backToIndex() { this.$router.push('/door/alarm/now') }, - setClass(key) { - const classObj = {} - classObj['point'] = true - return classObj + // 选择设备类型 + selectDevByType(type, event) { + // 遍历所有的设备类型 + const devTypes = document.querySelectorAll('.dev-icon') + for (let i = 0; i < devTypes.length; i++) { + if (devTypes[i].className.indexOf('dev-type-selected') > -1) { + devTypes[i].className = 'dev-icon el-col el-col-24' + } + } + this.checkDevType = [false, false] + + // 添加选中的样式 + if (typeof event === 'undefined') { + devTypes[0].className += ' dev-type-selected' + } else { + event.currentTarget.className += ' dev-type-selected' + } + + if (type === 'all') { + this.devListParams.deviceTypes = [] + this.checkDevType[0] = true + } else if (type === 'camera') { + this.devListParams.deviceTypes = cameraTypes.toString() + this.checkDevType[1] = true + } + this.fetchDeviceData() }, - detailDev(dev) { + // 查询并显示设备详情 + detailDev(dev, event) { + this.resetDevDetail() getDetailDevice(dev.id).then(response => { if (response.code === 200) { this.dataForm = { @@ -337,9 +375,35 @@ this.$message.error(response.message) } }) + + // 弹窗显示设备详情 + const targetDev = event.currentTarget // 取到点击到的设备图标div + + this.showDevDetail = true + let top = parseInt(targetDev.style.top.substring(0, targetDev.style.top.length - 2)) + top = top + 100 + this.$refs['dev-detail-block'].style.position = 'absolute' + this.$refs['dev-detail-block'].style.top = top + 'px' + this.$refs['dev-detail-block'].style.left = targetDev.style.left }, + // 点击报警列表 alarmRowClick(dev, column, event) { + }, + // 清除设备详情 + resetDevDetail() { + this.dataForm = { + id: '', // id + name: '', // 设备名 + devcode: '', // 设备编号 + typeName: '', // 设备类型 + model: '', // 设备型号 + onlineStatusName: '', // 在线状态 + deviceStatusName: '', // 设备状态 + position: '', // 安装位置 + installDate: '', // 安装日期 + inOutName: '' // 进出营 + } } } } @@ -359,50 +423,68 @@ .main-title { height: 90px; text-align: center; - padding-top: 28px; + padding-top: 20px; background: url("../../assets/overview_images/title-background-1920.png"); } .main-title img { display: inline-block; margin-right: 15px; - width: 40px; - height: 40px; + width: 52px; + height: 32px; vertical-align: text-bottom; } .home-icon { - width: 28px; - height: 28px; + width: 26px; + height: 26px; position: fixed; - left: 32px; - top: 24px; + left: 20px; + top: 20px; } .exit-icon { - width: 28px; - height: 28px; + width: 26px; + height: 26px; position: fixed; - right: 32px; - top: 24px; + right: 20px; + top: 20px; } .home-icon img, .exit-icon img { - width: 28px; - height: 28px; + width: 26px; + height: 26px; } .main-title span { color: #FFFFFF; font-size: 32px; - /*font-weight: bold;*/ + font-weight: bold; font-family: 'Microsoft YaHei'; } .map-overview { - margin-top: 30px; - height: calc(90vh - 140px); + margin-top: 50px; + /*width: 1100px;*/ + height: calc(90vh - 200px); text-align: center; position: relative; } + .point { + width: 24px; + height: 24px; + position: relative; + display: inline-block; + cursor: pointer; + } + .point-camera { + background: url("../../assets/overview_images/icons/icon-camera-point.png"); + background-size: contain; + @extend .point; + } + .point-fence { + background: url("../../assets/overview_images/icons/icon-fence-unchecked.png"); + background-size: contain; + @extend .point; + } .statis-block { text-align: center; @@ -420,23 +502,27 @@ .dev-normal { background: url("../../assets/overview_images/normal.png"); background-size: contain; + color: #00ff0c; } .dev-alarm { background: url("../../assets/overview_images/alarm.png"); background-size: contain; + color: #ff0000; } .dev-offline { background: url("../../assets/overview_images/offline.png"); background-size: contain; + color: #fff000; } .dev-closed { background: url("../../assets/overview_images/closed.png"); background-size: contain; + color: #00fff6; } .dev-status-block { position: absolute; - top: 120px; + top: 100px; left: 20px; color: #ffffff; } @@ -444,21 +530,17 @@ .alarm-now-block { position: absolute; z-index: 500; - background-color: rgba(255, 234, 241,0.8); - top: 150px; + top: 300px; left: 20px; - width: 280px; + width: 480px; .map-alarm-div-header { line-height: 40px; - width: 504px; padding-left: 10px; + color: #00fff6; + font-size: 24px; .icon-right { - position: absolute; - right: 15px; - } - .icon-right:hover { - color: #409EFF; cursor: pointer; + margin-left: 20px; } } .el-scrollbar { @@ -476,18 +558,6 @@ .el-table { font-size: 12px; } - .el-table th { - /*background-color: rgba(255, 229, 230, 0.8);*/ - padding: 7px 0px; - } - .el-table td { - /*background-color: rgba(255, 234, 241, 0.8);*/ - padding: 5px 0px; - /*line-height: 1;*/ - } - .el-table td:hover { - /*background-color: rgba(255, 234, 241, 0.8);*/ - } .transition-box { margin-bottom: 10px; width: 200px; @@ -502,100 +572,184 @@ } } + .alarm-now-block /deep/ .el-table th { + background-color: #0757A0; + padding: 12px 0px; + font-size: 16px; + color: #00fff6; + font-weight: normal; + } + + .alarm-now-block /deep/ .el-table td { + /*background-color: #0757A0;*/ + padding: 10px 0px; + font-size: 15px; + color: #FFFFFF; + font-weight: normal; + } + + .alarm-now-block /deep/ .el-table__row td { + background-color: #023D83; + } + .alarm-now-block /deep/ .el-table__body tr:hover > td { + background-color: #0757A0; + } + .alarm-now-block /deep/ tr.el-table__row--striped td { + background-color: #0757A0; + } + .map-tab { position: absolute; - right: 30px; + right: 20px; top: 100px; - width: 100px; + width: 300px; button { margin: 5px 0px; } } + .tab-top { + position: relative; + width: 284px; + height: 24px; + background: url("../../assets/overview_images/tab-top-bg.png"); + } + .tab-bottom { + position: relative; + width: 284px; + height: 24px; + background: url("../../assets/overview_images/tab-bottom-bg.png"); + } + .map-index-button { + position: relative; + width: 284px; + height: 74px; + background: url("../../assets/overview_images/tab-index-unchecked.png"); + font-size: 32px; + line-height: 74px; + text-align: center; + color: #FFFFFF; + cursor: pointer; + } + .index-selected { + background: url("../../assets/overview_images/tab-index-checked.png"); + } + .sub-tab-guider { + width: 149px; + height: 50px; + background: url("../../assets/overview_images/sub-tab-guider.png"); + } + .sub-tab-border { + width: 204px; + height: 253px; + background: url("../../assets/overview_images/sub-tab-border.png"); + } + .sub-tab-content { + text-align: center; + color: #FFFFFF; + font-size: 28px; + cursor: pointer; + width: 200px; + } + .dev-detail-block { - position: absolute; - right: 30px; - top: 400px; - width: 300px; + /*position: absolute;*/ + /*right: 20px;*/ + /*bottom: 100px;*/ + width: 520px; + height: 335px; color: #00FFFF; - font-size: 12px; + font-size: 24px; font-family: "Microsoft YaHei"; + padding: 45px 60px; + line-height: 35px; + background: url("../../assets/overview_images/dev-info.png"); + .dev-detail-span { + margin-left: 20px; + } + .dev-detail-close::before { + content: "\2716"; + position: relative; + top: -20px; + right: -410px; + cursor: pointer; + } } .dev-footer { - position: fixed; - bottom: 50px; + position: absolute; + bottom: 25px; } .dev-icon { - width: calc(10vw - 5px); + width: 195px; + height: 105px; vertical-align: middle; - border: 1px solid #00ffff; - padding: 10px 5px !important; - margin-left: 5px; + line-height: 65px; + padding: 20px 30px !important; + margin-left: 15px; cursor: pointer; + background: url("../../assets/overview_images/dev-type-border-unchecked.png"); } + .dev-icon img { height: 40px; vertical-align:middle; } .dev-icon span { - font-size: 14px; + font-size: 20px; color: #00D2FF; - line-height: 40px; - height: 40px; + line-height: 65px; + height: 65px; vertical-align:middle; float: right; } - .point { - width: 16px; - height: 16px; - position: relative; - display: inline-block; - cursor: pointer; - background: url("../../assets/overview_images/icons/icon-camera.png"); - background-size: contain; + .dev-type-selected { + background: url("../../assets/overview_images/dev-type-border-checked.png"); } + .dev-type-selected span { + color: #f58a88 !important; + } + + /*@media(max-width: 1440px) {*/ + /* .main-title {*/ + /* height: 68px;*/ + /* padding-top: 20px;*/ + /* background: url("../../assets/overview_images/title-background-1440.png");*/ + /* }*/ + /* .main-title span {*/ + /* font-size: 24px;*/ + /* }*/ + /* .main-title img {*/ + /* margin-right: 15px;*/ + /* width: 32px;*/ + /* height: 32px;*/ + /* }*/ + + /* .home-icon {*/ + /* left: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + /* .exit-icon {*/ + /* right: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .home-icon img, .exit-icon img {*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .dev-icon span {*/ + /* font-size: 12px;*/ + /* }*/ + /*}*/ @media(max-width: 1440px) { .main-title { - height: 68px; - padding-top: 20px; - background: url("../../assets/overview_images/title-background-1440.png"); - } - .main-title span { - font-size: 24px; - } - .main-title img { - margin-right: 15px; - width: 32px; - height: 32px; - } - - .home-icon { - left: 18px; - width: 18px; - height: 18px; - } - .exit-icon { - right: 18px; - width: 18px; - height: 18px; - } - - .home-icon img, .exit-icon img { - width: 18px; - height: 18px; - } - - .dev-icon span { - font-size: 12px; - } - } - - @media(max-width: 1366px) { - .main-title { height: 65px; padding-top: 16px; background: url("../../assets/overview_images/title-background-1366.png"); @@ -625,9 +779,145 @@ height: 20px; } - .dev-icon span { + .map-overview { + margin-top: 35px; + height: calc(90vh - 150px); + } + + .point { + width: 16px; + height: 16px; + } + + .statis-block { + margin-top: 16px; + font-size: 36px; + } + .sub-title { + font-size: 24px; + } + .sub-data-block { + width: 90px; + height: 114px; + } + + .dev-normal { + background: url("../../assets/overview_images/normal-1366.png"); + } + .dev-alarm { + background: url("../../assets/overview_images/alarm-1366.png"); + } + .dev-offline { + background: url("../../assets/overview_images/offline-1366.png"); + } + .dev-closed { + background: url("../../assets/overview_images/closed-1366.png"); + } + + .dev-status-block { + top: 90px; + left: 16px; + } + + .alarm-now-block { + top: 220px; + left: 16px; + width: 360px; + .map-alarm-div-header { + line-height: 32px; + font-size: 20px; + } + } + + .alarm-now-block /deep/ .el-table th { + padding: 8px 0px; + font-size: 16px; + } + .alarm-now-block /deep/ .el-table td { + padding: 5px 0px; font-size: 12px; } + + .map-tab { + right: 16px; + top: 90px; + width: 215px; + button { + margin: 5px 0px; + } + } + .tab-top { + width: 213px; + height: 18px; + background: url("../../assets/overview_images/tab-top-bg-1366.png"); + } + .tab-bottom { + width: 213px; + height: 18px; + background: url("../../assets/overview_images/tab-bottom-bg-1366.png"); + } + .map-index-button { + width: 210px; + height: 56px; + background: url("../../assets/overview_images/tab-index-unchecked-1366.png"); + font-size: 24px; + line-height: 56px; + } + .index-selected { + background: url("../../assets/overview_images/tab-index-checked-1366.png"); + } + + .sub-tab-guider { + width: 110px; + height: 37px; + background: url("../../assets/overview_images/sub-tab-guider-1366.png"); + } + .sub-tab-border { + width: 150px; + height: 186px; + background: url("../../assets/overview_images/sub-tab-border-1366.png"); + } + .sub-tab-content { + font-size: 20px; + cursor: pointer; + width: 145px; + } + + .dev-detail-block { + width: 390px; + height: 251px; + font-size: 16px; + padding: 30px 40px; + line-height: 28px; + background: url("../../assets/overview_images/dev-info-1366.png"); + .dev-detail-close::before { + top: -12px; + right: -312px; + } + } + + .dev-footer { + bottom: 20px; + } + .dev-icon { + width: 140px; + height: 76px; + line-height: 56px; + padding: 10px 16px !important; + margin-left: 15px; + background: url("../../assets/overview_images/dev-type-border-unchecked-1366.png"); + } + .dev-icon img { + height: 32px; + } + .dev-icon span { + font-size: 16px; + line-height: 56px; + height: 56px; + } + .dev-type-selected { + background: url("../../assets/overview_images/dev-type-border-checked-1366.png"); + } } diff --git a/src/views/overview/fenceIndex.vue b/src/views/overview/fenceIndex.vue new file mode 100644 index 0000000..6a92ca8 --- /dev/null +++ b/src/views/overview/fenceIndex.vue @@ -0,0 +1,923 @@ + + + + + diff --git a/src/views/overview/keyIndex.vue b/src/views/overview/keyIndex.vue new file mode 100644 index 0000000..bf97bf5 --- /dev/null +++ b/src/views/overview/keyIndex.vue @@ -0,0 +1,1105 @@ + + + + + diff --git a/src/assets/overview_images/icons/icon-camera-checked.png b/src/assets/overview_images/icons/icon-camera-checked.png new file mode 100644 index 0000000..5d2d150 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera-unchecked.png b/src/assets/overview_images/icons/icon-camera-unchecked.png new file mode 100644 index 0000000..8b6d384 --- /dev/null +++ b/src/assets/overview_images/icons/icon-camera-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-camera.png b/src/assets/overview_images/icons/icon-camera.png deleted file mode 100644 index 8b6d384..0000000 --- a/src/assets/overview_images/icons/icon-camera.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-checked.png b/src/assets/overview_images/icons/icon-fence-checked.png new file mode 100644 index 0000000..f2074a9 --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence-unchecked.png b/src/assets/overview_images/icons/icon-fence-unchecked.png new file mode 100644 index 0000000..1c8b34d --- /dev/null +++ b/src/assets/overview_images/icons/icon-fence-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-fence.png b/src/assets/overview_images/icons/icon-fence.png deleted file mode 100644 index 1c8b34d..0000000 --- a/src/assets/overview_images/icons/icon-fence.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-checked.png b/src/assets/overview_images/icons/icon-smoking-checked.png new file mode 100644 index 0000000..2110112 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking-unchecked.png b/src/assets/overview_images/icons/icon-smoking-unchecked.png new file mode 100644 index 0000000..b671245 --- /dev/null +++ b/src/assets/overview_images/icons/icon-smoking-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-smoking.png b/src/assets/overview_images/icons/icon-smoking.png deleted file mode 100644 index b671245..0000000 --- a/src/assets/overview_images/icons/icon-smoking.png +++ /dev/null Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-checked.png b/src/assets/overview_images/icons/icon-temperature-checked.png new file mode 100644 index 0000000..aea5ce7 --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-checked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature-unchecked.png b/src/assets/overview_images/icons/icon-temperature-unchecked.png new file mode 100644 index 0000000..8c5755f --- /dev/null +++ b/src/assets/overview_images/icons/icon-temperature-unchecked.png Binary files differ diff --git a/src/assets/overview_images/icons/icon-temperature.png b/src/assets/overview_images/icons/icon-temperature.png deleted file mode 100644 index 8c5755f..0000000 --- a/src/assets/overview_images/icons/icon-temperature.png +++ /dev/null Binary files differ diff --git a/src/router/modules/fenceSys.js b/src/router/modules/fenceSys.js index abcd3ca..0d784b0 100644 --- a/src/router/modules/fenceSys.js +++ b/src/router/modules/fenceSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const fenceSysRouters = [ { path: '/fence', @@ -13,6 +14,54 @@ } }, { + path: '/fence/video', + component: Layout, + redirect: '/fence/video/monitor', + name: 'FenceVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/fence/video'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/video/monitor', + name: 'FenceVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/fence/video/monitor'], keepAlive: true } + }, + { + path: '/fence/video/history', + name: 'FenceVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/fence/video/history'], keepAlive: true } + } + ] + }, + { + path: '/fence/overview', + component: OverviewLayout, + redirect: '/fence/overview/device', + name: 'FenceOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/fence/overview'], // 权限名称 + sys: '/fence' + }, + children: [ + { + path: '/fence/overview/device', + name: 'FenceOverviewDevice', + component: () => import('@/views/overview/fenceIndex'), + meta: { title: '周界总览', icon: '', permission: ['/fence/overview/device'], keepAlive: true } + } + ] + }, + { path: '/fence/alarm', component: Layout, redirect: '/fence/alarm', diff --git a/src/router/modules/keySys.js b/src/router/modules/keySys.js index a8c93fa..f3a027b 100644 --- a/src/router/modules/keySys.js +++ b/src/router/modules/keySys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const keySysRouters = [ { path: '/key', @@ -13,6 +14,54 @@ } }, { + path: '/key/video', + component: Layout, + redirect: '/key/video/monitor', + name: 'KeyVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/key/video'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/video/monitor', + name: 'KeyVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/key/video/monitor'], keepAlive: true } + }, + { + path: '/key/video/history', + name: 'KeyVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/key/video/history'], keepAlive: true } + } + ] + }, + { + path: '/key/overview', + component: OverviewLayout, + redirect: '/key/overview/device', + name: 'KeyOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/key/overview'], // 权限名称 + sys: '/key' + }, + children: [ + { + path: '/key/overview/device', + name: 'KeyOverviewDevice', + component: () => import('@/views/overview/keyIndex'), + meta: { title: '重点区域总览', icon: '', permission: ['/key/overview/device'], keepAlive: true } + } + ] + }, + { path: '/key/alarm', component: Layout, redirect: '/key/alarm/now', diff --git a/src/router/modules/regionSys.js b/src/router/modules/regionSys.js index 8b69cf0..9b4613a 100644 --- a/src/router/modules/regionSys.js +++ b/src/router/modules/regionSys.js @@ -1,5 +1,6 @@ /* Layout */ import Layout from '../../views/layout/Layout' +import OverviewLayout from '../../views/layout/OverviewLayout' export const regionSysRouters = [ { path: '/region', @@ -13,6 +14,54 @@ } }, { + path: '/region/video', + component: Layout, + redirect: '/region/video/monitor', + name: 'RegionVideo', + alwaysShow: true, + meta: { + title: '视频管理', + icon: 'icon-video', // 图标 + permission: ['/region/video'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/video/monitor', + name: 'RegionVideoMonitor', + component: () => import('@/views/video/monitor'), + meta: { title: '实时视频', icon: '', permission: ['/region/video/monitor'], keepAlive: true } + }, + { + path: '/region/video/history', + name: 'RegionVideoHistory', + component: () => import('@/views/video/history'), + meta: { title: '历史视频', icon: '', permission: ['/region/video/history'], keepAlive: true } + } + ] + }, + { + path: '/region/overview', + component: OverviewLayout, + redirect: '/region/overview/device', + name: 'RegionOverview', + alwaysShow: true, + meta: { + title: '运行总览', + icon: '', // 图标 + permission: ['/region/overview'], // 权限名称 + sys: '/region' + }, + children: [ + { + path: '/region/overview/device', + name: 'RegionOverviewDevice', + component: () => import('@/views/overview/regionIndex'), + meta: { title: '全域总览', icon: '', permission: ['/region/overview/device'], keepAlive: true } + } + ] + }, + { path: '/region/alarm', component: Layout, redirect: '/region/alarm', diff --git a/src/views/ctrl/overview.vue b/src/views/ctrl/overview.vue index d8d86d7..b06847f 100644 --- a/src/views/ctrl/overview.vue +++ b/src/views/ctrl/overview.vue @@ -97,33 +97,38 @@ - + 全部 - + + 摄像头 - + + 电子围栏 - + + 温湿度 - + + 烟感 - + + 声光报警 @@ -181,11 +186,6 @@ {{ dataForm.position }} - - - {{ dataForm.inOutName }} - -
@@ -200,6 +200,12 @@ import tg_3_1 from '../../assets/overview_images/tg/mapOverviewTg-3-1.jpg' import tg_4_1 from '../../assets/overview_images/tg/mapOverviewTg-4-1.jpg' import tg_4_5 from '../../assets/overview_images/tg/mapOverviewTg-4-5.jpg' + +const cameraTypes = [4, 5, 8, 9, 10, 11] +const fenceTypes = [6, 7] +const smokingTypes = [2] +const temperatureTypes = [1] +const soundTypes = [12] export default { name: 'CtrlOverview', components: { DeviceDetail }, @@ -208,7 +214,8 @@ title: getProject().title, bgImageSrc: tg_main, devListParams: { - picture: '1' + picture: '1', + deviceTypes: [] }, dev: { alarm: 0, @@ -223,22 +230,22 @@ imgSize: { width: 2245, height: 1586 - }, + }, // 图片显示尺寸 winSize: { width: 1440, height: 789 }, // 屏幕窗口尺寸 halfLeft: 0, - footLeft: 0, - showFence: true, - showTemp: false, - showSmoking: false, - showSound: false, - showSubTabGuider: false, - showFloorThree: false, - showFloorFour: false, - showDevDetail: false, - alarmList: [], + footLeft: 0, // footer部分设备类型按钮偏移量 + showFence: true, // 是否显示电子围栏按钮 + showTemp: false, // 是否显示温湿度按钮 + showSmoking: false, // 是否显示烟感按钮 + showSound: false, // 是否显示声光报警按钮 + showSubTabGuider: false, // 是否显示二级菜单指引 + showFloorThree: false, // 是否显示三层 + showFloorFour: false, // 是否显示四层 + showDevDetail: false, // 是否显示设备详情 + alarmList: [], // 报警列表 alarmColumns: [ { text: '设备编号', @@ -256,9 +263,9 @@ align: 'center', width: 165 } - ], // 显示列 + ], // 报警列表显示列 tableShow: true, // 是否显示告警列表 - devList: [], + devList: [], // 设备列表(在地图上显示) dataForm: { id: '', // id name: '', // 设备名 @@ -270,9 +277,9 @@ position: '', // 安装位置 installDate: '', // 安装日期 inOutName: '' // 进出营 - }, // 表单 - isFence: false, - isDoor: false + }, // 设备详情表单 + isFence: false, // 是否电子围栏设备 + checkDevType: [true, false, false, false, false, false] // 选中设备类型 } }, mounted() { @@ -390,11 +397,35 @@ devTypes[i].className = 'dev-icon el-col el-col-24' } } + this.checkDevType = [false, false, false, false, false, false] // 添加选中的样式 - event.currentTarget.className += ' dev-type-selected' + if (typeof event === 'undefined') { + devTypes[0].className += ' dev-type-selected' + } else { + event.currentTarget.className += ' dev-type-selected' + } - console.log(event.currentTarget) + if (type === 'all') { + this.devListParams.deviceTypes = [] + this.checkDevType[0] = true + } else if (type === 'camera') { + this.devListParams.deviceTypes = cameraTypes.toString() + this.checkDevType[1] = true + } else if (type === 'fence') { + this.devListParams.deviceTypes = fenceTypes.toString() + this.checkDevType[2] = true + } else if (type === 'temperature') { + this.devListParams.deviceTypes = temperatureTypes.toString() + this.checkDevType[3] = true + } else if (type === 'smoking') { + this.devListParams.deviceTypes = smokingTypes.toString() + this.checkDevType[4] = true + } else if (type === 'sound') { + this.devListParams.deviceTypes = soundTypes.toString() + this.checkDevType[5] = true + } + this.fetchDeviceData() }, // 点击平面图一级按钮 selectMapTab(tab, event) { @@ -545,7 +576,7 @@ } } - this.fetchDeviceData() + this.selectDevByType('all') }, // 查询并显示设备详情 detailDev(dev, event) { @@ -569,11 +600,6 @@ if (dev.typeName.indexOf('电子围栏') >= 0) { this.isFence = true } - - // 营门设备有进出营门的标志位 - if (dev.areaId === '1') { - this.isDoor = true - } } else { this.$message.error(response.message) } @@ -684,7 +710,7 @@ @extend .point; } .point-fence { - background: url("../../assets/overview_images/icons/icon-fence.png"); + background: url("../../assets/overview_images/icons/icon-fence-unchecked.png"); background-size: contain; @extend .point; } @@ -915,44 +941,44 @@ color: #f58a88 !important; } + /*@media(max-width: 1440px) {*/ + /* .main-title {*/ + /* height: 68px;*/ + /* padding-top: 20px;*/ + /* background: url("../../assets/overview_images/title-background-1440.png");*/ + /* }*/ + /* .main-title span {*/ + /* font-size: 24px;*/ + /* }*/ + /* .main-title img {*/ + /* margin-right: 15px;*/ + /* width: 32px;*/ + /* height: 32px;*/ + /* }*/ + + /* .home-icon {*/ + /* left: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + /* .exit-icon {*/ + /* right: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .home-icon img, .exit-icon img {*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .dev-icon span {*/ + /* font-size: 12px;*/ + /* }*/ + /*}*/ + @media(max-width: 1440px) { .main-title { - height: 68px; - padding-top: 20px; - background: url("../../assets/overview_images/title-background-1440.png"); - } - .main-title span { - font-size: 24px; - } - .main-title img { - margin-right: 15px; - width: 32px; - height: 32px; - } - - .home-icon { - left: 18px; - width: 18px; - height: 18px; - } - .exit-icon { - right: 18px; - width: 18px; - height: 18px; - } - - .home-icon img, .exit-icon img { - width: 18px; - height: 18px; - } - - .dev-icon span { - font-size: 12px; - } - } - - @media(max-width: 1366px) { - .main-title { height: 65px; padding-top: 16px; background: url("../../assets/overview_images/title-background-1366.png"); diff --git a/src/views/overview/doorIndex.vue b/src/views/overview/doorIndex.vue index 32902b4..03624bb 100644 --- a/src/views/overview/doorIndex.vue +++ b/src/views/overview/doorIndex.vue @@ -2,7 +2,6 @@
- {{ title }}
@@ -20,7 +19,7 @@
- +
@@ -69,6 +68,7 @@ :data="alarmList" class="alarm-list-table" border + stripe @row-click="alarmRowClick"> @@ -166,8 +151,10 @@ import { alarmListOverview } from '@/api/alarm' import DeviceDetail from '@/views/deviceManage/deviceDetail' import tg_main from '../../assets/overview_images/tg/mapOverviewTg.jpg' + +const cameraTypes = [4, 5, 8, 9, 10, 11] export default { - name: 'DoorOverviewDevice', + name: 'DoorOverview', components: { DeviceDetail }, data() { return { @@ -175,7 +162,8 @@ bgImageSrc: tg_main, devListParams: { picture: '1', - areaTypeId: 1 + areaTypeId: 1, + deviceTypes: [] }, dev: { alarm: 0, @@ -190,12 +178,15 @@ imgSize: { width: 2245, height: 1586 - }, + }, // 图片显示尺寸 winSize: { width: 1440, height: 789 }, // 屏幕窗口尺寸 - alarmList: [], + halfLeft: 0, + footLeft: 0, // footer部分设备类型按钮偏移量 + showDevDetail: false, // 是否显示设备详情 + alarmList: [], // 报警列表 alarmColumns: [ { text: '设备编号', @@ -210,11 +201,12 @@ { text: '报警时间', value: 'alarmTime', - align: 'center' + align: 'center', + width: 165 } - ], // 显示列 + ], // 报警列表显示列 tableShow: true, // 是否显示告警列表 - devList: [], + devList: [], // 设备列表(在地图上显示) dataForm: { id: '', // id name: '', // 设备名 @@ -226,42 +218,49 @@ position: '', // 安装位置 installDate: '', // 安装日期 inOutName: '' // 进出营 - }, // 表单 - isDoor: true + }, // 设备详情表单 + checkDevType: [true, false] // 选中设备类型 } }, - activated() { - this.fetchData() - this.fetchDeviceData() - this.fetchAlarmNowData() - }, mounted() { - // this.getBgImageSize() - // this.reDrawDevs() + this.initWindowSize() + + this.fetchData() + this.fetchAlarmNowData() const that = this window.onresize = function() { + that.initWindowSize() that.getBgImageSize() } }, methods: { - getBgImageSize() { - // 获取图片尺寸 - this.imgSize = { - width: this.$refs['bgImg'].width, - height: this.$refs['bgImg'].height - } + // 获取窗口大小 + initWindowSize() { // 获取窗体尺寸 this.winSize = { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight } - this.reDrawDevs() + // 设置footer部分居中显示 + if (this.winSize.width >= 1920) { + this.footLeft = (this.winSize.width - 2 * 210) / 2 + } else if (this.winSize.width >= 1366 && this.winSize.width < 1920) { + this.footLeft = (this.winSize.width - 2 * 155) / 2 + } }, + // 获取图像大小 + getBgImageSize() { + // 获取图片尺寸 + this.imgSize = { + width: this.$refs['bgImg'].width, + height: this.$refs['bgImg'].height + } + this.halfLeft = (this.winSize.width - this.imgSize.width) / 2 + }, + // 重新绘制设备点位 reDrawDevs() { - // this.getBgImageSize() - const halfLeft = (this.winSize.width - this.imgSize.width) / 2 // 调整球机的设备位置 @@ -269,16 +268,37 @@ this.devList.forEach(function(item) { const point = document.getElementById(item.id) - if (item.x !== '' && item.y !== '') { - point.style.position = 'absolute' - point.style.top = item.y * that.imgSize.height / that.imgSizeOriginal.height + 'px' - point.style.left = (item.x * that.imgSize.width / that.imgSizeOriginal.width + halfLeft) + 'px' - } else { - point.style.display = 'none' + if (point !== null) { + if (item.x !== '' && item.y !== '') { + point.style.position = 'absolute' + point.style.top = item.y * that.imgSize.height / that.imgSizeOriginal.height + 'px' + point.style.left = (item.x * that.imgSize.width / that.imgSizeOriginal.width + halfLeft) + 'px' + } else { + point.style.display = 'none' + } } }) }, - // 获取设备状态 + // 获取设备列表 + fetchDeviceData() { + overviewDeviceList(this.devListParams).then(response => { + if (response.code === 200) { + const that = this + this.devList = [] + response.data.forEach(dev => { + if (dev.x !== '' && dev.y !== '') { + that.devList.push(dev) + } + }) + } + }) + }, + // 平面图就绪时执行函数 + backgroundImageReady() { + this.getBgImageSize() + this.fetchDeviceData() + }, + // 获取设备状态统计值 fetchData() { overviewDeviceStatus({ areaTypeId: this.devListParams.areaTypeId }).then(response => { if (response.code === 200) { @@ -289,13 +309,7 @@ } }) }, - fetchDeviceData() { - overviewDeviceList(this.devListParams).then(response => { - if (response.code === 200) { - this.devList = response.data - } - }) - }, + // 获取报警列表 fetchAlarmNowData() { alarmListOverview({ areaTypeId: this.devListParams.areaTypeId }).then(response => { if (response.code === 200) { @@ -313,12 +327,36 @@ backToIndex() { this.$router.push('/door/alarm/now') }, - setClass(key) { - const classObj = {} - classObj['point'] = true - return classObj + // 选择设备类型 + selectDevByType(type, event) { + // 遍历所有的设备类型 + const devTypes = document.querySelectorAll('.dev-icon') + for (let i = 0; i < devTypes.length; i++) { + if (devTypes[i].className.indexOf('dev-type-selected') > -1) { + devTypes[i].className = 'dev-icon el-col el-col-24' + } + } + this.checkDevType = [false, false] + + // 添加选中的样式 + if (typeof event === 'undefined') { + devTypes[0].className += ' dev-type-selected' + } else { + event.currentTarget.className += ' dev-type-selected' + } + + if (type === 'all') { + this.devListParams.deviceTypes = [] + this.checkDevType[0] = true + } else if (type === 'camera') { + this.devListParams.deviceTypes = cameraTypes.toString() + this.checkDevType[1] = true + } + this.fetchDeviceData() }, - detailDev(dev) { + // 查询并显示设备详情 + detailDev(dev, event) { + this.resetDevDetail() getDetailDevice(dev.id).then(response => { if (response.code === 200) { this.dataForm = { @@ -337,9 +375,35 @@ this.$message.error(response.message) } }) + + // 弹窗显示设备详情 + const targetDev = event.currentTarget // 取到点击到的设备图标div + + this.showDevDetail = true + let top = parseInt(targetDev.style.top.substring(0, targetDev.style.top.length - 2)) + top = top + 100 + this.$refs['dev-detail-block'].style.position = 'absolute' + this.$refs['dev-detail-block'].style.top = top + 'px' + this.$refs['dev-detail-block'].style.left = targetDev.style.left }, + // 点击报警列表 alarmRowClick(dev, column, event) { + }, + // 清除设备详情 + resetDevDetail() { + this.dataForm = { + id: '', // id + name: '', // 设备名 + devcode: '', // 设备编号 + typeName: '', // 设备类型 + model: '', // 设备型号 + onlineStatusName: '', // 在线状态 + deviceStatusName: '', // 设备状态 + position: '', // 安装位置 + installDate: '', // 安装日期 + inOutName: '' // 进出营 + } } } } @@ -359,50 +423,68 @@ .main-title { height: 90px; text-align: center; - padding-top: 28px; + padding-top: 20px; background: url("../../assets/overview_images/title-background-1920.png"); } .main-title img { display: inline-block; margin-right: 15px; - width: 40px; - height: 40px; + width: 52px; + height: 32px; vertical-align: text-bottom; } .home-icon { - width: 28px; - height: 28px; + width: 26px; + height: 26px; position: fixed; - left: 32px; - top: 24px; + left: 20px; + top: 20px; } .exit-icon { - width: 28px; - height: 28px; + width: 26px; + height: 26px; position: fixed; - right: 32px; - top: 24px; + right: 20px; + top: 20px; } .home-icon img, .exit-icon img { - width: 28px; - height: 28px; + width: 26px; + height: 26px; } .main-title span { color: #FFFFFF; font-size: 32px; - /*font-weight: bold;*/ + font-weight: bold; font-family: 'Microsoft YaHei'; } .map-overview { - margin-top: 30px; - height: calc(90vh - 140px); + margin-top: 50px; + /*width: 1100px;*/ + height: calc(90vh - 200px); text-align: center; position: relative; } + .point { + width: 24px; + height: 24px; + position: relative; + display: inline-block; + cursor: pointer; + } + .point-camera { + background: url("../../assets/overview_images/icons/icon-camera-point.png"); + background-size: contain; + @extend .point; + } + .point-fence { + background: url("../../assets/overview_images/icons/icon-fence-unchecked.png"); + background-size: contain; + @extend .point; + } .statis-block { text-align: center; @@ -420,23 +502,27 @@ .dev-normal { background: url("../../assets/overview_images/normal.png"); background-size: contain; + color: #00ff0c; } .dev-alarm { background: url("../../assets/overview_images/alarm.png"); background-size: contain; + color: #ff0000; } .dev-offline { background: url("../../assets/overview_images/offline.png"); background-size: contain; + color: #fff000; } .dev-closed { background: url("../../assets/overview_images/closed.png"); background-size: contain; + color: #00fff6; } .dev-status-block { position: absolute; - top: 120px; + top: 100px; left: 20px; color: #ffffff; } @@ -444,21 +530,17 @@ .alarm-now-block { position: absolute; z-index: 500; - background-color: rgba(255, 234, 241,0.8); - top: 150px; + top: 300px; left: 20px; - width: 280px; + width: 480px; .map-alarm-div-header { line-height: 40px; - width: 504px; padding-left: 10px; + color: #00fff6; + font-size: 24px; .icon-right { - position: absolute; - right: 15px; - } - .icon-right:hover { - color: #409EFF; cursor: pointer; + margin-left: 20px; } } .el-scrollbar { @@ -476,18 +558,6 @@ .el-table { font-size: 12px; } - .el-table th { - /*background-color: rgba(255, 229, 230, 0.8);*/ - padding: 7px 0px; - } - .el-table td { - /*background-color: rgba(255, 234, 241, 0.8);*/ - padding: 5px 0px; - /*line-height: 1;*/ - } - .el-table td:hover { - /*background-color: rgba(255, 234, 241, 0.8);*/ - } .transition-box { margin-bottom: 10px; width: 200px; @@ -502,100 +572,184 @@ } } + .alarm-now-block /deep/ .el-table th { + background-color: #0757A0; + padding: 12px 0px; + font-size: 16px; + color: #00fff6; + font-weight: normal; + } + + .alarm-now-block /deep/ .el-table td { + /*background-color: #0757A0;*/ + padding: 10px 0px; + font-size: 15px; + color: #FFFFFF; + font-weight: normal; + } + + .alarm-now-block /deep/ .el-table__row td { + background-color: #023D83; + } + .alarm-now-block /deep/ .el-table__body tr:hover > td { + background-color: #0757A0; + } + .alarm-now-block /deep/ tr.el-table__row--striped td { + background-color: #0757A0; + } + .map-tab { position: absolute; - right: 30px; + right: 20px; top: 100px; - width: 100px; + width: 300px; button { margin: 5px 0px; } } + .tab-top { + position: relative; + width: 284px; + height: 24px; + background: url("../../assets/overview_images/tab-top-bg.png"); + } + .tab-bottom { + position: relative; + width: 284px; + height: 24px; + background: url("../../assets/overview_images/tab-bottom-bg.png"); + } + .map-index-button { + position: relative; + width: 284px; + height: 74px; + background: url("../../assets/overview_images/tab-index-unchecked.png"); + font-size: 32px; + line-height: 74px; + text-align: center; + color: #FFFFFF; + cursor: pointer; + } + .index-selected { + background: url("../../assets/overview_images/tab-index-checked.png"); + } + .sub-tab-guider { + width: 149px; + height: 50px; + background: url("../../assets/overview_images/sub-tab-guider.png"); + } + .sub-tab-border { + width: 204px; + height: 253px; + background: url("../../assets/overview_images/sub-tab-border.png"); + } + .sub-tab-content { + text-align: center; + color: #FFFFFF; + font-size: 28px; + cursor: pointer; + width: 200px; + } + .dev-detail-block { - position: absolute; - right: 30px; - top: 400px; - width: 300px; + /*position: absolute;*/ + /*right: 20px;*/ + /*bottom: 100px;*/ + width: 520px; + height: 335px; color: #00FFFF; - font-size: 12px; + font-size: 24px; font-family: "Microsoft YaHei"; + padding: 45px 60px; + line-height: 35px; + background: url("../../assets/overview_images/dev-info.png"); + .dev-detail-span { + margin-left: 20px; + } + .dev-detail-close::before { + content: "\2716"; + position: relative; + top: -20px; + right: -410px; + cursor: pointer; + } } .dev-footer { - position: fixed; - bottom: 50px; + position: absolute; + bottom: 25px; } .dev-icon { - width: calc(10vw - 5px); + width: 195px; + height: 105px; vertical-align: middle; - border: 1px solid #00ffff; - padding: 10px 5px !important; - margin-left: 5px; + line-height: 65px; + padding: 20px 30px !important; + margin-left: 15px; cursor: pointer; + background: url("../../assets/overview_images/dev-type-border-unchecked.png"); } + .dev-icon img { height: 40px; vertical-align:middle; } .dev-icon span { - font-size: 14px; + font-size: 20px; color: #00D2FF; - line-height: 40px; - height: 40px; + line-height: 65px; + height: 65px; vertical-align:middle; float: right; } - .point { - width: 16px; - height: 16px; - position: relative; - display: inline-block; - cursor: pointer; - background: url("../../assets/overview_images/icons/icon-camera.png"); - background-size: contain; + .dev-type-selected { + background: url("../../assets/overview_images/dev-type-border-checked.png"); } + .dev-type-selected span { + color: #f58a88 !important; + } + + /*@media(max-width: 1440px) {*/ + /* .main-title {*/ + /* height: 68px;*/ + /* padding-top: 20px;*/ + /* background: url("../../assets/overview_images/title-background-1440.png");*/ + /* }*/ + /* .main-title span {*/ + /* font-size: 24px;*/ + /* }*/ + /* .main-title img {*/ + /* margin-right: 15px;*/ + /* width: 32px;*/ + /* height: 32px;*/ + /* }*/ + + /* .home-icon {*/ + /* left: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + /* .exit-icon {*/ + /* right: 18px;*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .home-icon img, .exit-icon img {*/ + /* width: 18px;*/ + /* height: 18px;*/ + /* }*/ + + /* .dev-icon span {*/ + /* font-size: 12px;*/ + /* }*/ + /*}*/ @media(max-width: 1440px) { .main-title { - height: 68px; - padding-top: 20px; - background: url("../../assets/overview_images/title-background-1440.png"); - } - .main-title span { - font-size: 24px; - } - .main-title img { - margin-right: 15px; - width: 32px; - height: 32px; - } - - .home-icon { - left: 18px; - width: 18px; - height: 18px; - } - .exit-icon { - right: 18px; - width: 18px; - height: 18px; - } - - .home-icon img, .exit-icon img { - width: 18px; - height: 18px; - } - - .dev-icon span { - font-size: 12px; - } - } - - @media(max-width: 1366px) { - .main-title { height: 65px; padding-top: 16px; background: url("../../assets/overview_images/title-background-1366.png"); @@ -625,9 +779,145 @@ height: 20px; } - .dev-icon span { + .map-overview { + margin-top: 35px; + height: calc(90vh - 150px); + } + + .point { + width: 16px; + height: 16px; + } + + .statis-block { + margin-top: 16px; + font-size: 36px; + } + .sub-title { + font-size: 24px; + } + .sub-data-block { + width: 90px; + height: 114px; + } + + .dev-normal { + background: url("../../assets/overview_images/normal-1366.png"); + } + .dev-alarm { + background: url("../../assets/overview_images/alarm-1366.png"); + } + .dev-offline { + background: url("../../assets/overview_images/offline-1366.png"); + } + .dev-closed { + background: url("../../assets/overview_images/closed-1366.png"); + } + + .dev-status-block { + top: 90px; + left: 16px; + } + + .alarm-now-block { + top: 220px; + left: 16px; + width: 360px; + .map-alarm-div-header { + line-height: 32px; + font-size: 20px; + } + } + + .alarm-now-block /deep/ .el-table th { + padding: 8px 0px; + font-size: 16px; + } + .alarm-now-block /deep/ .el-table td { + padding: 5px 0px; font-size: 12px; } + + .map-tab { + right: 16px; + top: 90px; + width: 215px; + button { + margin: 5px 0px; + } + } + .tab-top { + width: 213px; + height: 18px; + background: url("../../assets/overview_images/tab-top-bg-1366.png"); + } + .tab-bottom { + width: 213px; + height: 18px; + background: url("../../assets/overview_images/tab-bottom-bg-1366.png"); + } + .map-index-button { + width: 210px; + height: 56px; + background: url("../../assets/overview_images/tab-index-unchecked-1366.png"); + font-size: 24px; + line-height: 56px; + } + .index-selected { + background: url("../../assets/overview_images/tab-index-checked-1366.png"); + } + + .sub-tab-guider { + width: 110px; + height: 37px; + background: url("../../assets/overview_images/sub-tab-guider-1366.png"); + } + .sub-tab-border { + width: 150px; + height: 186px; + background: url("../../assets/overview_images/sub-tab-border-1366.png"); + } + .sub-tab-content { + font-size: 20px; + cursor: pointer; + width: 145px; + } + + .dev-detail-block { + width: 390px; + height: 251px; + font-size: 16px; + padding: 30px 40px; + line-height: 28px; + background: url("../../assets/overview_images/dev-info-1366.png"); + .dev-detail-close::before { + top: -12px; + right: -312px; + } + } + + .dev-footer { + bottom: 20px; + } + .dev-icon { + width: 140px; + height: 76px; + line-height: 56px; + padding: 10px 16px !important; + margin-left: 15px; + background: url("../../assets/overview_images/dev-type-border-unchecked-1366.png"); + } + .dev-icon img { + height: 32px; + } + .dev-icon span { + font-size: 16px; + line-height: 56px; + height: 56px; + } + .dev-type-selected { + background: url("../../assets/overview_images/dev-type-border-checked-1366.png"); + } } diff --git a/src/views/overview/fenceIndex.vue b/src/views/overview/fenceIndex.vue new file mode 100644 index 0000000..6a92ca8 --- /dev/null +++ b/src/views/overview/fenceIndex.vue @@ -0,0 +1,923 @@ + + + + + diff --git a/src/views/overview/keyIndex.vue b/src/views/overview/keyIndex.vue new file mode 100644 index 0000000..bf97bf5 --- /dev/null +++ b/src/views/overview/keyIndex.vue @@ -0,0 +1,1105 @@ + + + + + diff --git a/src/views/overview/regionIndex.vue b/src/views/overview/regionIndex.vue new file mode 100644 index 0000000..cdc6c5c --- /dev/null +++ b/src/views/overview/regionIndex.vue @@ -0,0 +1,923 @@ + + + + +