-
-
+
+import MenuListItem from './MenuList/MenuListItem.vue'
+
+export default {
+ name: 'AppContainerMobileMenu',
+ components: {
+ MenuListItem
+ },
+ props: {
+ currentMenuItem: {
+ type: String,
+ default: ""
+ },
+ menuListWithIndex: {
+ type: Array,
+ default: () => []
+ },
+ toggleMobileMenu: {
+ type: Function,
+ required: true,
+ },
+ },
+ data() {
+ return {}
+ },
+ methods: {
+ randomkey() {
+ return Math.random().toString(36).slice(4)
+ },
+ }
+}
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/MenuList.vue b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList.vue
deleted file mode 100644
index f7afaa7..0000000
--- a/live_monitor_vue/src/components/4_frames/AppContainer/MenuList.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuList.vue b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuList.vue
new file mode 100644
index 0000000..9edf3bb
--- /dev/null
+++ b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuList.vue
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItem.vue b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItem.vue
new file mode 100644
index 0000000..0a0403e
--- /dev/null
+++ b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItem.vue
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItemCopy.vue b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItemCopy.vue
new file mode 100644
index 0000000..3d40909
--- /dev/null
+++ b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItemCopy.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItemGroup.vue b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItemGroup.vue
new file mode 100644
index 0000000..1c7b6d3
--- /dev/null
+++ b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItemGroup.vue
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItemImplementation.vue b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItemImplementation.vue
new file mode 100644
index 0000000..b228de7
--- /dev/null
+++ b/live_monitor_vue/src/components/4_frames/AppContainer/MenuList/MenuListItemImplementation.vue
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
diff --git a/live_monitor_vue/src/services/ServiceOfLayout.js b/live_monitor_vue/src/services/ServiceOfLayout.js
new file mode 100644
index 0000000..d0d609b
--- /dev/null
+++ b/live_monitor_vue/src/services/ServiceOfLayout.js
@@ -0,0 +1,43 @@
+class ServiceOfLayout {
+ constructor(store) {
+ this.store = store
+ }
+
+ getHeight() {
+ return this.store.getters['layout/height']
+ }
+ getWidth() {
+ return this.store.getters['layout/width']
+ }
+ getIsOpenMenu() {
+ return this.store.getters['layout/isOpenMenu']
+ }
+ getIsShowMenu() {
+ return this.store.getters['layout/isShowMenu']
+ }
+ getIsEnabledMenu() {
+ return this.store.getters['layout/isEnabledMenu']
+ }
+
+ setIsShowMenu(upd) {
+ this.store.dispatch('layout/setIsShowMenu', upd)
+ }
+
+ setIsMobileMenuOpened(upd) {
+ this.store.dispatch('layout/setIsMobileMenuOpened', upd)
+ }
+
+ setIsOpenMenu(upd) {
+ this.store.dispatch('layout/setIsOpenMenu', upd)
+ }
+
+ setIsEnabledMenu(upd) {
+ this.store.dispatch('layout/setIsEnabledMenu', upd)
+ }
+
+ toggleMenu() {
+ this.store.dispatch('layout/toggleMenu')
+ }
+}
+
+export default ServiceOfLayout
\ No newline at end of file
diff --git a/live_monitor_vue/src/store/modules/auth/index.js b/live_monitor_vue/src/store/modules/auth/index.js
index 4380596..abdca25 100644
--- a/live_monitor_vue/src/store/modules/auth/index.js
+++ b/live_monitor_vue/src/store/modules/auth/index.js
@@ -6,7 +6,7 @@ import axios from 'axios';
import {orisMenu} from './menuList'
const initState = {
- current_user: null,
+ currentUser: null,
errorMsg: null,
token: null,
inited: false,
@@ -17,7 +17,7 @@ const state = {
...initState
};
-const current_user = (token) => ({
+const setCurrentUser = (token) => ({
position: "",
first_name: "Сергей",
last_name: "Шлыков",
@@ -31,17 +31,17 @@ const getters = {
login: (state) => state.login,
password: (state) => state.password,
my_comp: (state) => state.my_comp,
- current_user: (state) => state.current_user,
+ currentUser: (state) => state.currentUser,
menuList: () => orisMenu,
};
const mutations = {
initAuth: (state, token) => {
- state.current_user = current_user(token)
+ state.currentUser = setCurrentUser(token)
state.token = token;
state.inited = true
},
- set_my_comp: (state, upd) => state.my_comp,
+ set_my_comp: (state) => state.my_comp,
};
diff --git a/live_monitor_vue/src/store/modules/auth/menuList.js b/live_monitor_vue/src/store/modules/auth/menuList.js
index aa2a815..17deb72 100644
--- a/live_monitor_vue/src/store/modules/auth/menuList.js
+++ b/live_monitor_vue/src/store/modules/auth/menuList.js
@@ -1,12 +1,11 @@
-
const orisMenu = [
{
type: "simple_link",
icon: "home",
show: "Главная",
link: "/",
- router: "main"
+ router: "machines"
},
{
type: "simple_link",
diff --git a/live_monitor_vue/src/store/modules/layout/helpers.js b/live_monitor_vue/src/store/modules/layout/helpers.js
new file mode 100644
index 0000000..e69de29
diff --git a/live_monitor_vue/src/store/modules/layout/index.js b/live_monitor_vue/src/store/modules/layout/index.js
index 1e3133c..29947d2 100644
--- a/live_monitor_vue/src/store/modules/layout/index.js
+++ b/live_monitor_vue/src/store/modules/layout/index.js
@@ -1,58 +1,94 @@
+import {initScreenListener, disableScreenListener} from "./stateHelpers.js";
+
+const initState = {
+ height: 0,
+ width: 0,
+ isOpenMenu: false,
+ isOpenedMobileMenu: false,
+ isEnabledMenu: true,
+ isShowMenu: true,
+ initedScreenListener: false,
+};
+
const state = {
- height: 0,
- width: 0,
- inited: false,
- isOpenMenu: false,
- mobile_menu_opened: false,
- show_menu: true,
- is_enabled_menu: true
+ ...initState
};
const getters = {
height: (state) => state.height,
width: (state) => state.width,
isOpenMenu: (state) => state.isOpenMenu,
- menuWidth: (state) => null,
- show_menu: (state) => state.show_menu,
- is_enabled_menu: (state) => state.is_enabled_menu,
+ isShowMenu: (state) => state.isShowMenu,
+ isOpenedMobileMenu: (state) => state.isOpenedMobileMenu,
+ isEnabledMenu: (state) => state.isEnabledMenu,
+ initedScreenListener: (state) => state.initedScreenListener,
};
const mutations = {
enableScreenListener: (state) => {
- state.height = window.innerHeight
- state.width = window.innerWidth
- const acc = !!state.inited
- if (!acc) {
- window.addEventListener("resize", (e) => {
- state.height= e.target.innerHeight
- state.width = e.target.innerWidth
- });
- state.inited = true
+ const inited = state.initedScreenListener
+ if (!inited) {
+ initScreenListener(state)
+ state.initedScreenListener = true
}
},
- toggle_menu: (state) => {
- state.show_menu = !state.show_menu
+ disableScreenListener: (state) => {
+ disableScreenListener(state)
},
- set_mobile_menu_opened: (state, upd) => {
- state.mobile_menu_opened = upd
+ toggleMenu: (state) => {
+ state.isShowMenu = !state.isShowMenu
},
- set_show_menu: (state, upd) => {
- state.show_menu = upd
+ saveIsMobileMenuOpened: (state, upd) => {
+ state.isOpenedMobileMenu = upd
+ },
+ saveIsShowMenu: (state, upd) => {
+ state.isShowMenu = upd
+ },
+ resetStore: (state) => {
+ for (let key in state) {
+ state[key] = initState[key]
+ }
+ },
+ saveIsEnabledMenu: (state, upd) => {
+ state.isEnabledMenu = upd
+ },
+ saveIsOpenMenu: (state, upd) => {
+ state.isOpenMenu = upd
},
};
const actions = {
- initScreenSizeRecalc: ({commit}) => {
+ initScreenSizeListener: ({commit}) => {
commit("enableScreenListener")
},
-
+ disableScreenListener: ({commit}) => {
+ commit("disableScreenListener")
+ },
+ resetStore: ({commit}) => {
+ commit("resetStore")
+ },
+ toggleMenu: ({commit}) => {
+ commit("toggleMenu")
+ },
+ setIsShowMenu: ({commit}, upd) => {
+ commit("saveIsShowMenu", upd)
+ },
+ setIsMobileMenuOpened: ({commit}, upd) => {
+ commit("saveIsMobileMenuOpened", upd)
+ },
+ setIsEnabledMenu: ({commit}, upd) => {
+ commit("saveIsEnabledMenu", upd)
+ },
+ setIsOpenMenu: ({commit}, upd) => {
+ commit("saveIsOpenMenu", upd)
+ },
};
export const store = {
- namespaced: true,
- state,
- getters,
- mutations,
- actions,
+ namespaced: true,
+ state,
+ getters,
+ mutations,
+ actions,
};
diff --git a/live_monitor_vue/src/store/modules/layout/menuList.js b/live_monitor_vue/src/store/modules/layout/menuList.js
index 1f5febd..e69de29 100644
--- a/live_monitor_vue/src/store/modules/layout/menuList.js
+++ b/live_monitor_vue/src/store/modules/layout/menuList.js
@@ -1,126 +0,0 @@
-const orisMenu = [
- {
- type: "simple_link",
- icon: "home",
- show: "Главная",
- link: "/",
- router: "main"
- },
- {
- type: "simple_link",
- icon: "book-marked",
- show: "Последние пакеты",
- link: "/html/last_packs",
- router: "last_packs"
- },
- {
- type: "simple_link",
- icon: "box",
- show: "Коммуникационный",
- link: "/html/controll_com_service",
- router: "comm"
- },
- {
- type: "simple_link",
- icon: "book-key",
- show: "Последние пакеты(по номеру)",
- link: "/html/last_packs_by_pack",
- router: "last_pack_number"
- },
- {
- type: "simple_link",
- icon: "beaker",
- show: "Топливо",
- link: "/html/live_fuel",
- router: "fuel"
- },
- {type: "simple_link", icon: "timer", show: "Крон", link: "/html/cron", router: "cron"},
- {
- type: "group",
- show: "Справочники",
- icon: "book",
- children: [
- {type: "simple_link", icon: "book-open", show: "ICCID", link: "/html/fetch_iccid"},
- {
- type: "simple_link",
- icon: "book-open",
- show: "Устройства",
- link: "/html/fetch_askr_devices"
- }
- ]
- },
- {
- type: "group",
- show: "Пакеты",
- icon: "cast",
- children:
- [
- {
- type: "simple_link",
- icon: "curly-braces",
- show: "Свободный поиск",
- link: "/html/free_packs"
- }
- ]
- },
- {type: "line"},
- {
- type: "group",
- show: "Логи",
- icon: "fingerprint",
- children: [
- {
- type: "simple_link",
- icon: "code",
- show: "Файлы логов",
- link: "/html/file_viewer/logs"
- },
- {
- type: "simple_link",
- icon: "code",
- show: "Файлы машин",
- link: "/html/file_viewer/machine_data"
- }
- ]
- },
- {type: "line"},
- {
- type: "group",
- show: "Работоспособность сервсисов",
- icon: "cloud-cog",
- children: [
- {
- type: "simple_link",
- icon: "cpu",
- show: "ДИАП",
- link: "/admin_panel/services/diap"
- },
- {type: "simple_link", icon: "table", show: "Сервисы", link: "/html/communications"},
- ]
- },
- {
- type: "group",
- show: "Админка",
- icon: "hand-metal",
- children: [
- {
- type: "simple_link",
- icon: "haze",
- show: "Сервис управления",
- link: "/admin_panel/auth_service"
- },
- {
- type: "simple_link",
- icon: "line-chart",
- show: "Анализ топлива",
- link: "/admin_panel/fuel_analyzer"
- },
- {type: "simple_link", icon: "newspaper", show: "Обновления", link: "/html/updates"},
- {type: "simple_link", icon: "boxes", show: "Пакеты", link: "/admin_panel/packs"}
- ]
- },
- {type: "line"},
- {type: "simple_link", icon: "newspaper", show: "Обновления", link: "/html/updates", router: "news"},
-]
-
-export {orisMenu}
diff --git a/live_monitor_vue/src/store/modules/layout/stateHelpers.js b/live_monitor_vue/src/store/modules/layout/stateHelpers.js
new file mode 100644
index 0000000..8ea4b88
--- /dev/null
+++ b/live_monitor_vue/src/store/modules/layout/stateHelpers.js
@@ -0,0 +1,19 @@
+const initScreenListener = (state) => {
+ state.height = window.innerHeight
+ state.width = window.innerWidth
+ window.addEventListener("resize", (e) => {
+ state.height= e.target.innerHeight
+ state.width = e.target.innerWidth
+ });
+ return "ok"
+}
+
+const disableScreenListener = (state) => {
+ window.removeEventListener("resize", () => {
+ state.height = null
+ state.width = null
+ });
+ return "ok"
+}
+
+export { initScreenListener, disableScreenListener }
\ No newline at end of file
diff --git a/live_monitor_vue/src/styles/components/3_mobile-menu.css b/live_monitor_vue/src/styles/components/3_mobile-menu.css
index 316b5e8..d43c70c 100644
--- a/live_monitor_vue/src/styles/components/3_mobile-menu.css
+++ b/live_monitor_vue/src/styles/components/3_mobile-menu.css
@@ -7,7 +7,7 @@
&.mobile-menu--active {
&:before {
content: "";
- @apply visible opacity-100;
+ @apply visible opacity-100 h-[110vh];
}
.scrollable {
@apply ml-0 overflow-y-auto;
diff --git a/live_monitor_vue/tests/components/1_atoms/Button.test.js b/live_monitor_vue/tests/components/1_atoms/Button.test.js
index c0ce23c..16543f2 100644
--- a/live_monitor_vue/tests/components/1_atoms/Button.test.js
+++ b/live_monitor_vue/tests/components/1_atoms/Button.test.js
@@ -1,10 +1,10 @@
import {test, describe, expect} from 'vitest'
import { mount} from '@vue/test-utils'
-import Button from '@atoms/VButton.vue';
+import VButton from '@atoms/VButton.vue';
-describe('Accordion', () => {
- test('Accordion mounted', () => {
- const wrapper = mount(Button)
+describe('VButton', () => {
+ test('VButton mounted', () => {
+ const wrapper = mount(VButton)
expect(wrapper.exists()).toBe(true)
})
})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainer.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainer.test.js
new file mode 100644
index 0000000..a4d214a
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainer.test.js
@@ -0,0 +1,27 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import AppContainer from '@frames/AppContainer/AppContainer.vue';
+import {createStore} from "vuex";
+import { store as layout } from '@/store/modules/layout';
+import { store as auth } from '@/store/modules/auth';
+
+describe('AppContainer', () => {
+ const store = createStore({
+ modules: {
+ layout,
+ auth
+ },
+ })
+
+ test('AppContainer mounted', () => {
+ const wrapper = shallowMount(AppContainer,
+ {
+ global: {
+ mocks: {
+ $store: store,
+ },
+ }}
+ )
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerBreadcrumbs.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerBreadcrumbs.test.js
new file mode 100644
index 0000000..e8a70a9
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerBreadcrumbs.test.js
@@ -0,0 +1,10 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import AppContainerBreadcrumbs from '@frames/AppContainer/AppContainerBreadcrumbs.vue';
+
+describe('AppContainerBreadcrumbs', () => {
+ test('AppContainerBreadcrumbs mounted', () => {
+ const wrapper = shallowMount(AppContainerBreadcrumbs)
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerHeader.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerHeader.test.js
new file mode 100644
index 0000000..a9bc963
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerHeader.test.js
@@ -0,0 +1,10 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import AppContainerHeader from '@frames/AppContainer/AppContainerHeader.vue';
+
+describe('AppContainerHeader', () => {
+ test('AppContainerHeader mounted', () => {
+ const wrapper = shallowMount(AppContainerHeader)
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerLeftPanel.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerLeftPanel.test.js
new file mode 100644
index 0000000..8cfda9e
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerLeftPanel.test.js
@@ -0,0 +1,16 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import AppContainerLeftPanel from '@frames/AppContainer/AppContainerLeftPanel.vue';
+import Router from "@router"
+
+describe('AppContainerLeftPanel', () => {
+ test('AppContainerLeftPanel mounted', () => {
+ const wrapper = shallowMount(AppContainerLeftPanel,
+ {
+ global: {
+ plugins: [Router]
+ }
+ })
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerMobileMenu.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerMobileMenu.test.js
new file mode 100644
index 0000000..30162db
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerMobileMenu.test.js
@@ -0,0 +1,15 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import AppContainerMobileMenu from '@frames/AppContainer/AppContainerMobileMenu.vue';
+
+describe('AppContainerMobileMenu', () => {
+ test('AppContainerMobileMenu mounted', () => {
+ const wrapper = shallowMount(AppContainerMobileMenu, {
+ props: {
+ isOpenedMobileMenu: false,
+ setIsMobileMenuOpened: () => {},
+ }
+ })
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerRightPanel.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerRightPanel.test.js
new file mode 100644
index 0000000..f6f3d20
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/AppContainerRightPanel.test.js
@@ -0,0 +1,20 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import AppContainerRightPanel from '@frames/AppContainer/AppContainerRightPanel.vue';
+import Router from "@router"
+
+describe('AppContainerRightPanel', () => {
+ test('AppContainerRightPanel mounted', () => {
+ const wrapper = shallowMount(AppContainerRightPanel, {
+ props: {
+ currentUser: {
+ id: 1,
+ }
+ },
+ global: {
+ plugins: [Router]
+ }
+ })
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuList.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuList.test.js
new file mode 100644
index 0000000..13ddd99
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuList.test.js
@@ -0,0 +1,15 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import MenuList from '@frames/AppContainer/MenuList/MenuList.vue';
+
+describe('MenuList', () => {
+
+ test('MenuList mounted', () => {
+ const wrapper = shallowMount(MenuList, {
+ props: {
+ routeName: ""
+ }
+ })
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItem.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItem.test.js
new file mode 100644
index 0000000..7cf997f
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItem.test.js
@@ -0,0 +1,11 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import MenuListItem from '@frames/AppContainer/MenuList/MenuListItem.vue';
+
+describe('MenuListItem', () => {
+
+ test('MenuListItem mounted', () => {
+ const wrapper = shallowMount(MenuListItem)
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItemCopy.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItemCopy.test.js
new file mode 100644
index 0000000..a4c02dd
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItemCopy.test.js
@@ -0,0 +1,10 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import MenuListItemCopy from '@frames/AppContainer/MenuList/MenuListItemCopy.vue';
+
+describe('MenuListItemCopy', () => {
+ test('MenuListItemCopy mounted', () => {
+ const wrapper = shallowMount(MenuListItemCopy)
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItemGroup.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItemGroup.test.js
new file mode 100644
index 0000000..1082976
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItemGroup.test.js
@@ -0,0 +1,10 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import MenuListItemGroup from '@frames/AppContainer/MenuList/MenuListItemGroup.vue';
+
+describe('MenuListItemGroup', () => {
+ test('MenuListItemGroup mounted', () => {
+ const wrapper = shallowMount(MenuListItemGroup)
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItemImplementation.test.js b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItemImplementation.test.js
new file mode 100644
index 0000000..911222a
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/AppContainer/MenuList/MenuListItemImplementation.test.js
@@ -0,0 +1,17 @@
+import {test, describe, expect, } from 'vitest'
+import { shallowMount} from '@vue/test-utils'
+import MenuListItemImplementation from '@frames/AppContainer/MenuList/MenuListItemImplementation.vue';
+import Router from "@router"
+
+describe('MenuListItemImplementation', () => {
+
+ test('MenuListItemImplementation mounted', () => {
+ const wrapper = shallowMount(MenuListItemImplementation,
+ {
+ global: {
+ plugins: [Router]
+ }
+ })
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/PacksContainer/PacksContainer.test.js b/live_monitor_vue/tests/components/4_frames/PacksContainer/PacksContainer.test.js
new file mode 100644
index 0000000..46bd4ef
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/PacksContainer/PacksContainer.test.js
@@ -0,0 +1,10 @@
+import {test, describe, expect} from 'vitest'
+import { mount} from '@vue/test-utils'
+import PacksContainer from '@frames/PacksContainer/PacksContainer.vue';
+
+describe('PacksContainer', () => {
+ test('PacksContainer mounted', () => {
+ const wrapper = mount(PacksContainer)
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/PacksContainer/PacksContainerBody.test.js b/live_monitor_vue/tests/components/4_frames/PacksContainer/PacksContainerBody.test.js
new file mode 100644
index 0000000..5ebc313
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/PacksContainer/PacksContainerBody.test.js
@@ -0,0 +1,10 @@
+import {test, describe, expect} from 'vitest'
+import { mount} from '@vue/test-utils'
+import PacksContainerBody from '@frames/PacksContainer/PacksContainerBody.vue';
+
+describe('PacksContainerBody', () => {
+ test('PacksContainerBody mounted', () => {
+ const wrapper = mount(PacksContainerBody)
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/components/4_frames/PacksContainer/PacksContainerControl.test.js b/live_monitor_vue/tests/components/4_frames/PacksContainer/PacksContainerControl.test.js
new file mode 100644
index 0000000..3bdba87
--- /dev/null
+++ b/live_monitor_vue/tests/components/4_frames/PacksContainer/PacksContainerControl.test.js
@@ -0,0 +1,10 @@
+import {test, describe, expect} from 'vitest'
+import { mount} from '@vue/test-utils'
+import PacksContainerControl from '@frames/PacksContainer//PacksContainerControl.vue';
+
+describe('PacksContainerControl', () => {
+ test('PacksContainerControl mounted', () => {
+ const wrapper = mount(PacksContainerControl)
+ expect(wrapper.exists()).toBe(true)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/services/ServiceOfLayout.test.js b/live_monitor_vue/tests/services/ServiceOfLayout.test.js
new file mode 100644
index 0000000..32089c9
--- /dev/null
+++ b/live_monitor_vue/tests/services/ServiceOfLayout.test.js
@@ -0,0 +1,51 @@
+import {expect, describe, test, beforeEach} from 'vitest'
+import ServiceOfLayout from "@services/ServiceOfLayout.js"
+import { createStore } from "vuex"
+import { store as layout } from '@/store/modules/layout';
+
+describe('test ServiceOfLayout', () => {
+ const store = createStore({
+ modules: {
+ layout
+ }
+ })
+
+ beforeEach(() => {
+ store.dispatch('layout/resetStore')
+ })
+
+ const serviceOfLayout = new ServiceOfLayout(store)
+
+ test('test ServiceOfLayout exist', async () => {
+ expect(serviceOfLayout).toBeTruthy()
+ expect(serviceOfLayout.getHeight()).toBe(0)
+ expect(serviceOfLayout.getWidth()).toBe(0)
+ expect(serviceOfLayout.getIsOpenMenu()).toBe(false)
+ expect(serviceOfLayout.getIsEnabledMenu()).toBe(true)
+ expect(serviceOfLayout.getIsShowMenu()).toBe(true)
+ })
+
+ test('test toggleMenu', async () => {
+ serviceOfLayout.toggleMenu()
+ const result = store.getters['layout/isShowMenu']
+ expect(result).toBe(false)
+ })
+
+ test('setIsShowMenu', async () => {
+ serviceOfLayout.setIsShowMenu(false)
+ const result = serviceOfLayout.getIsShowMenu()
+ expect(result).toBe(false)
+ })
+
+ test('setIsOpenMenu', async () => {
+ serviceOfLayout.setIsOpenMenu(true)
+ const result = serviceOfLayout.getIsOpenMenu()
+ expect(result).toBe(true)
+ })
+
+ test('setIsEnabledMenu', async () => {
+ serviceOfLayout.setIsEnabledMenu(false)
+ const result = serviceOfLayout.getIsEnabledMenu()
+ expect(result).toBe(false)
+ })
+})
\ No newline at end of file
diff --git a/live_monitor_vue/tests/store/layout.test.js b/live_monitor_vue/tests/store/layout.test.js
new file mode 100644
index 0000000..7809be5
--- /dev/null
+++ b/live_monitor_vue/tests/store/layout.test.js
@@ -0,0 +1,53 @@
+import {expect, describe, test, beforeEach} from 'vitest'
+import { createStore } from "vuex"
+import { store as layout } from '@/store/modules/layout';
+
+describe('test of layout store', () => {
+ const store = createStore({
+ modules: {
+ layout
+ }
+ })
+
+ beforeEach(() => {
+ store.dispatch('layout/resetStore')
+ })
+
+ test('test layout store exist', async () => {
+ expect(store).toBeTruthy()
+ expect(store.getters['layout/isOpenedMobileMenu']).toBe(false)
+ expect(store.getters['layout/isEnabledMenu']).toBe(true)
+ })
+
+ test('test toggleMenu', () => {
+ store.dispatch('layout/toggleMenu')
+ const result = store.getters['layout/isShowMenu']
+ expect(result).toBe(false)
+ })
+
+ test('test setIsShowMenu', () => {
+ store.dispatch('layout/setIsShowMenu', false)
+ const result = store.getters['layout/isShowMenu']
+ expect(result).toBe(false)
+ })
+
+ test('test setIsMobileMenuOpened', () => {
+ store.dispatch('layout/setIsMobileMenuOpened', true)
+ const result = store.getters['layout/isOpenedMobileMenu']
+ expect(result).toBe(true)
+ })
+
+ test('test resetStore', () => {
+ store.dispatch('layout/resetStore')
+ const result = store.getters['layout/isShowMenu']
+ expect(result).toBe(true)
+ })
+
+ test('test initScreenSizeListener', () => {
+ store.dispatch('layout/initScreenSizeListener')
+ const result = store.getters['layout/initedScreenListener']
+ expect(result).toBe(true)
+ })
+
+
+})
\ No newline at end of file
+
+
+
+
+
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/RightPanel.vue b/live_monitor_vue/src/components/4_frames/AppContainer/AppContainerRightPanel.vue
similarity index 79%
rename from live_monitor_vue/src/components/4_frames/AppContainer/RightPanel.vue
rename to live_monitor_vue/src/components/4_frames/AppContainer/AppContainerRightPanel.vue
index 7979c4f..b885d00 100644
--- a/live_monitor_vue/src/components/4_frames/AppContainer/RightPanel.vue
+++ b/live_monitor_vue/src/components/4_frames/AppContainer/AppContainerRightPanel.vue
@@ -1,24 +1,30 @@
-
-
-
-
-
+
+ -
+
-
-
-
- {{ menu_item.show }}
-
- -
- ""
-
-
-
-
-
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/MenuItemCopy.vue b/live_monitor_vue/src/components/4_frames/AppContainer/MenuItemCopy.vue
deleted file mode 100644
index d000108..0000000
--- a/live_monitor_vue/src/components/4_frames/AppContainer/MenuItemCopy.vue
+++ /dev/null
@@ -1,93 +0,0 @@
-
-
-
-
-
-
-
-
-
- {{ menu_item.show }}
-
- -
- ""
-
-
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/MenuItemGroup.vue b/live_monitor_vue/src/components/4_frames/AppContainer/MenuItemGroup.vue
deleted file mode 100644
index e44855c..0000000
--- a/live_monitor_vue/src/components/4_frames/AppContainer/MenuItemGroup.vue
+++ /dev/null
@@ -1,80 +0,0 @@
-
-
-
-
-
-
- {{ menu_item.show }}
-
-
-
- -
-
-
+ {{ menuItem.show }}
+
+
+
+ -
+
+
+
+
+
+ {{ menuItem.show }}
+
+ +
+ ""
+
+
+
diff --git a/live_monitor_vue/src/components/4_frames/AppContainer/MobileMenu.vue b/live_monitor_vue/src/components/4_frames/AppContainer/MobileMenu.vue
deleted file mode 100644
index 7d2b03e..0000000
--- a/live_monitor_vue/src/components/4_frames/AppContainer/MobileMenu.vue
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
-
-
-
-
-
diff --git a/live_monitor_vue/src/components/4_frames/PacksContainer/PacksContainer.vue b/live_monitor_vue/src/components/4_frames/PacksContainer/PacksContainer.vue
new file mode 100644
index 0000000..c72d513
--- /dev/null
+++ b/live_monitor_vue/src/components/4_frames/PacksContainer/PacksContainer.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
-
-
-
-
- -
-
-
+
+
+
diff --git a/live_monitor_vue/src/components/4_frames/PacksContainer/PacksContainerBody.vue b/live_monitor_vue/src/components/4_frames/PacksContainer/PacksContainerBody.vue
new file mode 100644
index 0000000..f02a88e
--- /dev/null
+++ b/live_monitor_vue/src/components/4_frames/PacksContainer/PacksContainerBody.vue
@@ -0,0 +1,14 @@
+
+
+
+
+
+ ComponentTemplate
+
+
diff --git a/live_monitor_vue/src/components/4_frames/PacksContainer/PacksContainerControl.vue b/live_monitor_vue/src/components/4_frames/PacksContainer/PacksContainerControl.vue
new file mode 100644
index 0000000..b794018
--- /dev/null
+++ b/live_monitor_vue/src/components/4_frames/PacksContainer/PacksContainerControl.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
diff --git a/live_monitor_vue/src/components/5_pages/LastPacks/index.vue b/live_monitor_vue/src/components/5_pages/LastPacks/index.vue
index 2e8a1ea..ea26ae8 100644
--- a/live_monitor_vue/src/components/5_pages/LastPacks/index.vue
+++ b/live_monitor_vue/src/components/5_pages/LastPacks/index.vue
@@ -1,3 +1,64 @@
+
+