fix: полный production-фикс fix40 (layout, sidebar, journald, логирование)
This commit is contained in:
@@ -5,7 +5,7 @@ const appStore = useAppStore();
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-config-provider :locale="appStore.locale" :size="appStore.size">
|
||||
<el-config-provider :locale="appStore.locale">
|
||||
<router-view />
|
||||
</el-config-provider>
|
||||
</template>
|
||||
|
||||
@@ -1 +0,0 @@
|
||||
<svg width="128" height="128" xmlns="http://www.w3.org/2000/svg"><path d="M0 54.857h54.796v18.286H36.531V128H18.265V73.143H0V54.857zm127.857-36.571H91.935V128H72.456V18.286H36.534V0h91.326l-.003 18.286z"/></svg>
|
||||
|
Before Width: | Height: | Size: 211 B |
@@ -1,40 +0,0 @@
|
||||
<script setup lang="ts">
|
||||
import { useAppStore } from "@/store/modules/app";
|
||||
import { useI18n } from "vue-i18n";
|
||||
|
||||
const appStore = useAppStore();
|
||||
const { t } = useI18n();
|
||||
|
||||
const sizeOptions = ref([
|
||||
{ label: t("common.sizeDefault"), value: "default" },
|
||||
{ label: t("common.sizeLarge"), value: "large" },
|
||||
{ label: t("common.sizeSmall"), value: "small" },
|
||||
]);
|
||||
|
||||
function handleSizeChange(size: string) {
|
||||
appStore.changeSize(size);
|
||||
ElMessage.success(t("common.sizeChanged"));
|
||||
}
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-dropdown trigger="click" @command="handleSizeChange">
|
||||
<div>
|
||||
<svg-icon icon-class="size" />
|
||||
</div>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item
|
||||
v-for="item of sizeOptions"
|
||||
:key="item.value"
|
||||
:disabled="appStore.size == item.value"
|
||||
:command="item.value"
|
||||
>
|
||||
{{ item.label }}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</template>
|
||||
|
||||
|
||||
@@ -112,10 +112,6 @@ export default {
|
||||
resetTrafficConfirm: "Are you sure to reset peer traffic?",
|
||||
invalid: "Invalid value",
|
||||
switchLanguageSuccess: "Language switched successfully",
|
||||
sizeChanged: "Interface size changed",
|
||||
sizeDefault: "Default",
|
||||
sizeLarge: "Large",
|
||||
sizeSmall: "Small",
|
||||
logoutConfirm: "Are you sure you want to log out?",
|
||||
sessionExpired: "Current session has expired, please log in again",
|
||||
},
|
||||
|
||||
@@ -108,10 +108,6 @@ export default {
|
||||
resetTrafficConfirm: "Сбросить трафик для пира?",
|
||||
invalid: "Некорректное значение",
|
||||
switchLanguageSuccess: "Язык переключён",
|
||||
sizeChanged: "Размер интерфейса изменён",
|
||||
sizeDefault: "Обычный",
|
||||
sizeLarge: "Крупный",
|
||||
sizeSmall: "Компактный",
|
||||
logoutConfirm: "Выйти из системы?",
|
||||
sessionExpired: "Текущая сессия истекла, войдите снова",
|
||||
},
|
||||
|
||||
@@ -53,7 +53,7 @@ function logout() {
|
||||
<!-- Верхняя навигационная панель -->
|
||||
<div class="navbar">
|
||||
<!-- Хлебные крошки слева -->
|
||||
<div class="flex">
|
||||
<div class="navbar-left">
|
||||
<hamburger
|
||||
:is-active="appStore.sidebar.opened"
|
||||
@toggleClick="toggleSideBar"
|
||||
@@ -62,7 +62,7 @@ function logout() {
|
||||
</div>
|
||||
|
||||
<!-- Настройки навигации справа -->
|
||||
<div class="flex">
|
||||
<div class="navbar-actions">
|
||||
<!-- Настройки навигации, скрытые на узком экране -->
|
||||
<div class="setting-container" v-if="device !== 'mobile'">
|
||||
<!-- Полноэкранный режим -->
|
||||
@@ -71,30 +71,28 @@ function logout() {
|
||||
:icon-class="isFullscreen ? 'exit-fullscreen' : 'fullscreen'"
|
||||
/>
|
||||
</div>
|
||||
<!-- Размер интерфейса -->
|
||||
<el-tooltip content="Размер интерфейса" effect="dark" placement="bottom">
|
||||
<size-select class="setting-item" />
|
||||
</el-tooltip>
|
||||
<!-- Выбор языка -->
|
||||
<lang-select class="setting-item" />
|
||||
</div>
|
||||
|
||||
<!-- Аватар пользователя -->
|
||||
<el-dropdown trigger="click">
|
||||
<div class="avatar-container">
|
||||
<el-avatar :size="32" class="avatar-icon">
|
||||
<i-ep-user-filled />
|
||||
</el-avatar>
|
||||
<i-ep-caret-bottom class="w-3 h-3" />
|
||||
</div>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item @click="logout">
|
||||
{{ $t("navbar.logout") }}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
<div class="avatar-dropdown">
|
||||
<el-dropdown trigger="click">
|
||||
<div class="avatar-container">
|
||||
<el-avatar :size="32" class="avatar-icon">
|
||||
<i-ep-user-filled />
|
||||
</el-avatar>
|
||||
<i-ep-caret-bottom class="w-3 h-3" />
|
||||
</div>
|
||||
<template #dropdown>
|
||||
<el-dropdown-menu>
|
||||
<el-dropdown-item @click="logout">
|
||||
{{ $t("navbar.logout") }}
|
||||
</el-dropdown-item>
|
||||
</el-dropdown-menu>
|
||||
</template>
|
||||
</el-dropdown>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
@@ -108,17 +106,24 @@ function logout() {
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0 1px #0003;
|
||||
|
||||
.setting-container {
|
||||
.navbar-left,
|
||||
.navbar-actions,
|
||||
.setting-container,
|
||||
.avatar-dropdown {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.setting-container {
|
||||
.setting-item {
|
||||
display: inline-block;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
width: 30px;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
line-height: normal;
|
||||
color: #5a5e66;
|
||||
text-align: center;
|
||||
cursor: pointer;
|
||||
|
||||
&:hover {
|
||||
@@ -132,8 +137,8 @@ function logout() {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 6px;
|
||||
height: 36px;
|
||||
margin: 0 8px;
|
||||
height: 50px;
|
||||
margin: 0;
|
||||
padding: 0 8px;
|
||||
border-radius: 8px;
|
||||
cursor: pointer;
|
||||
|
||||
@@ -110,7 +110,7 @@ function handleOutsideClick() {
|
||||
}
|
||||
|
||||
.hideSidebar .fixed-header {
|
||||
width: calc(100% - 54px);
|
||||
width: calc(100% - #{$sideBarCollapsedWidth});
|
||||
}
|
||||
|
||||
.mobile .fixed-header {
|
||||
|
||||
@@ -34,11 +34,6 @@ interface DefaultSettings {
|
||||
*/
|
||||
theme: string;
|
||||
|
||||
/**
|
||||
* Размер интерфейса
|
||||
*/
|
||||
size: string;
|
||||
|
||||
/**
|
||||
* Язык
|
||||
*/
|
||||
@@ -60,7 +55,6 @@ const defaultSettings: DefaultSettings = {
|
||||
* light: Светлая тема
|
||||
*/
|
||||
theme: "dark",
|
||||
size: "default", // default |large |small
|
||||
language: "ru", // ru | en
|
||||
};
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import ru from "element-plus/es/locale/lang/ru";
|
||||
export const useAppStore = defineStore("app", () => {
|
||||
// state
|
||||
const device = useStorage("device", "desktop");
|
||||
const size = useStorage<any>("size", defaultSettings.size);
|
||||
const language = useStorage("language", defaultSettings.language);
|
||||
|
||||
const sidebarStatus = useStorage("sidebarStatus", "closed");
|
||||
@@ -52,9 +51,6 @@ export const useAppStore = defineStore("app", () => {
|
||||
device.value = val;
|
||||
}
|
||||
|
||||
function changeSize(val: string) {
|
||||
size.value = val;
|
||||
}
|
||||
/**
|
||||
* Переключение языка
|
||||
*
|
||||
@@ -69,9 +65,7 @@ export const useAppStore = defineStore("app", () => {
|
||||
sidebar,
|
||||
language,
|
||||
locale,
|
||||
size,
|
||||
toggleDevice,
|
||||
changeSize,
|
||||
changeLanguage,
|
||||
toggleSidebar,
|
||||
closeSideBar,
|
||||
|
||||
@@ -109,7 +109,7 @@
|
||||
|
||||
.hideSidebar {
|
||||
.sidebar-container {
|
||||
width: 54px !important;
|
||||
width: $sideBarCollapsedWidth !important;
|
||||
|
||||
.svg-icon {
|
||||
margin-right: 0;
|
||||
@@ -117,7 +117,26 @@
|
||||
}
|
||||
|
||||
.main-container {
|
||||
margin-left: 54px;
|
||||
margin-left: $sideBarCollapsedWidth;
|
||||
}
|
||||
|
||||
.sidebar-container .el-menu--collapse {
|
||||
width: $sideBarCollapsedWidth !important;
|
||||
}
|
||||
|
||||
.sidebar-container .el-menu--collapse > .el-menu-item,
|
||||
.sidebar-container .el-menu--collapse > .el-sub-menu > .el-sub-menu__title {
|
||||
justify-content: center;
|
||||
gap: 0;
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
.sidebar-container .el-menu--collapse .svg-icon {
|
||||
display: block;
|
||||
flex: 0 0 18px;
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.el-sub-menu {
|
||||
@@ -146,7 +165,7 @@
|
||||
}
|
||||
|
||||
.el-menu--collapse .el-menu .el-sub-menu {
|
||||
min-width: $sideBarWidth !important;
|
||||
min-width: $sideBarCollapsedWidth !important;
|
||||
}
|
||||
|
||||
// mobile responsive
|
||||
@@ -218,4 +237,3 @@
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -20,5 +20,6 @@ $subMenuActiveText: var(--subMenuActiveText);
|
||||
$subMenuHover: var(--subMenuHover);
|
||||
|
||||
$sideBarWidth: 210px;
|
||||
$sideBarCollapsedWidth: 54px;
|
||||
|
||||
|
||||
|
||||
-1
@@ -60,7 +60,6 @@ declare module '@vue/runtime-core' {
|
||||
RightPanel: typeof import('./../components/RightPanel/index.vue')['default']
|
||||
RouterLink: typeof import('vue-router')['RouterLink']
|
||||
RouterView: typeof import('vue-router')['RouterView']
|
||||
SizeSelect: typeof import('./../components/SizeSelect/index.vue')['default']
|
||||
SvgIcon: typeof import('./../components/SvgIcon/index.vue')['default']
|
||||
UnitSelect: typeof import('./../components/UnitSelect/index.vue')['default']
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user