布局显示配置
This commit is contained in:
parent
b01ce00641
commit
eb9f60ca0d
17
index.html
17
index.html
|
|
@ -16,11 +16,18 @@
|
||||||
enabled. Please enable it to continue.</strong>
|
enabled. Please enable it to continue.</strong>
|
||||||
</noscript>
|
</noscript>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var dark = window.localStorage.getItem('APP_DARK');
|
var dark = localStorage.getItem('APP_DARK');
|
||||||
if (dark) {
|
if (dark) {
|
||||||
document.documentElement.classList.add("dark")
|
if (dark == 'dark') {
|
||||||
}
|
document.documentElement.classList.add("dark")
|
||||||
var weak = window.localStorage.getItem('APP_WEAK');
|
}else if (dark == 'follow') {
|
||||||
|
var systemTheme = window.matchMedia('(prefers-color-scheme: dark)')
|
||||||
|
if (systemTheme.matches) {
|
||||||
|
document.documentElement.classList.add("dark")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var weak = localStorage.getItem('APP_WEAK');
|
||||||
if (weak) {
|
if (weak) {
|
||||||
document.documentElement.classList.add("weak")
|
document.documentElement.classList.add("weak")
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 448 B |
Binary file not shown.
|
After Width: | Height: | Size: 509 B |
Binary file not shown.
|
After Width: | Height: | Size: 416 B |
|
|
@ -0,0 +1,82 @@
|
||||||
|
<template>
|
||||||
|
<div class="pi-dialog" ref="piDialog">
|
||||||
|
<el-dialog ref="dialog" v-model="dialogVisible" :fullscreen="isFullscreen" v-bind="$attrs" :show-close="false">
|
||||||
|
<template #header>
|
||||||
|
<slot name="header">
|
||||||
|
<span class="el-dialog__title">{{ title }}</span>
|
||||||
|
</slot>
|
||||||
|
<div class="pi-dialog__headerbtn">
|
||||||
|
<button v-if="showFullscreen" aria-label="fullscreen" type="button" @click="setFullscreen">
|
||||||
|
<el-icon v-if="isFullscreen" class="el-dialog__close"><el-icon-bottom-left /></el-icon>
|
||||||
|
<el-icon v-else class="el-dialog__close"><el-icon-full-screen /></el-icon>
|
||||||
|
</button>
|
||||||
|
<button v-if="showClose" aria-label="close" type="button" @click="closeDialog">
|
||||||
|
<el-icon class="el-dialog__close"><el-icon-close /></el-icon>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div v-loading="loading">
|
||||||
|
<slot></slot>
|
||||||
|
</div>
|
||||||
|
<template #footer>
|
||||||
|
<slot name="footer"></slot>
|
||||||
|
</template>
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {ref, onMounted, watch} from "vue";
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
modelValue: { type: Boolean, default: false },
|
||||||
|
title: { type: String, default: "" },
|
||||||
|
showClose: { type: Boolean, default: true },
|
||||||
|
showFullscreen: { type: Boolean, default: true },
|
||||||
|
loading: { type: Boolean, default: false }
|
||||||
|
});
|
||||||
|
|
||||||
|
let dialogVisible = ref(false)
|
||||||
|
let isFullscreen = ref(false)
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
dialogVisible.value = props.modelValue.value
|
||||||
|
})
|
||||||
|
|
||||||
|
watch(() => props.modelValue, () => {
|
||||||
|
dialogVisible.value = props.modelValue
|
||||||
|
if(dialogVisible.value){
|
||||||
|
isFullscreen.value = false
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
//关闭
|
||||||
|
function closeDialog(){
|
||||||
|
dialogVisible.value = false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 恢复窗口
|
||||||
|
function setDefault(){
|
||||||
|
isFullscreen.value = !isFullscreen.value
|
||||||
|
}
|
||||||
|
|
||||||
|
// 全屏
|
||||||
|
function setFullscreen(){
|
||||||
|
isFullscreen.value = !isFullscreen.value
|
||||||
|
}
|
||||||
|
|
||||||
|
// 最小化
|
||||||
|
function setMinimize(){
|
||||||
|
isFullscreen.value = !isFullscreen.value
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped>
|
||||||
|
.pi-dialog__headerbtn {position: absolute;top: var(--el-dialog-padding-primary);right: var(--el-dialog-padding-primary);}
|
||||||
|
.pi-dialog__headerbtn button {padding: 0;background: transparent;border: none;outline: none;cursor: pointer;font-size: var(--el-message-close-size,16px);margin-left: 15px;color: var(--el-color-info);}
|
||||||
|
.pi-dialog__headerbtn button:hover .el-dialog__close {color: var(--el-color-primary);}
|
||||||
|
.pi-dialog:deep(.el-dialog).is-fullscreen {display: flex;flex-direction: column;top:0px !important;left:0px !important;}
|
||||||
|
.pi-dialog:deep(.el-dialog).is-fullscreen .el-dialog__header {}
|
||||||
|
.pi-dialog:deep(.el-dialog).is-fullscreen .el-dialog__body {flex:1;overflow: auto;}
|
||||||
|
.pi-dialog:deep(.el-dialog).is-fullscreen .el-dialog__footer {padding-bottom: 10px;border-top: 1px solid var(--el-border-color-base);}
|
||||||
|
</style>
|
||||||
|
|
@ -11,11 +11,13 @@ export default {
|
||||||
REQUEST_CACHE: false,
|
REQUEST_CACHE: false,
|
||||||
//语言
|
//语言
|
||||||
LANG: 'zh-cn',
|
LANG: 'zh-cn',
|
||||||
|
//主题风格 浅色:light | 深色:dark | 跟随系统:follow
|
||||||
|
DARK: 'light',
|
||||||
//TokenName
|
//TokenName
|
||||||
TOKEN_NAME: "Authorization",
|
TOKEN_NAME: "Authorization",
|
||||||
//Token前缀,注意最后有个空格,如不需要需设置空字符串
|
//Token前缀,注意最后有个空格,如不需要需设置空字符串
|
||||||
TOKEN_PREFIX: "Bearer ",
|
TOKEN_PREFIX: "Bearer ",
|
||||||
//布局 默认:default | 通栏:header | 经典:menu | 功能坞:dock
|
//布局 分栏:column | 通栏:header | 经典:menu | 功能坞:dock
|
||||||
//dock将关闭标签和面包屑栏
|
//dock将关闭标签和面包屑栏
|
||||||
APP_LAYOUT: 'header',
|
APP_LAYOUT: 'column',
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
<template>
|
||||||
|
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
|
||||||
|
</style>
|
||||||
|
|
@ -36,8 +36,6 @@ let menu = ref([])
|
||||||
let result = ref([])
|
let result = ref([])
|
||||||
let history = ref([])
|
let history = ref([])
|
||||||
|
|
||||||
console.log(searchText)
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
history.value = tools.data.get("SEARCH_HISTORY") || []
|
history.value = tools.data.get("SEARCH_HISTORY") || []
|
||||||
const menuTree = tools.data.get("MENU");
|
const menuTree = tools.data.get("MENU");
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
<template>
|
<template>
|
||||||
<el-form ref="form" label-width="120px" label-position="left" style="padding:0 20px;">
|
<el-form ref="form" label-width="120px" label-position="left" style="padding:0 20px;">
|
||||||
|
<el-divider>{{t('user.thememode')}}</el-divider>
|
||||||
|
<el-row class="pi-theme" :gutter="20">
|
||||||
|
<el-col :span="8"><el-image src="/images/light.png" class="pi-pic" :class="{'active': dark == 'light'}" @click="themeClick('light')"/><el-text type="info" class="pi-text">浅色</el-text></el-col>
|
||||||
|
<el-col :span="8"><el-image src="/images/dark.png" class="pi-pic" :class="{'active': dark == 'dark'}" @click="themeClick('dark')"/><el-text type="info" class="pi-text">深色</el-text></el-col>
|
||||||
|
<el-col :span="8"><el-image src="/images/follow.png" class="pi-pic" :class="{'active': dark == 'follow'}" @click="themeClick('follow')"/><el-text type="info" class="pi-text">跟随系统</el-text></el-col>
|
||||||
|
</el-row>
|
||||||
<el-divider></el-divider>
|
<el-divider></el-divider>
|
||||||
<el-form-item :label="t('user.nightmode')">
|
<el-form-item :label="t('user.language')">
|
||||||
<el-switch v-model="dark"></el-switch>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item :label="$t('user.language')">
|
|
||||||
<el-select v-model="lang">
|
<el-select v-model="lang">
|
||||||
<el-option label="简体中文" value="zh-cn"></el-option>
|
<el-option label="简体中文" value="zh-cn"></el-option>
|
||||||
<el-option label="English" value="en"></el-option>
|
<el-option label="English" value="en"></el-option>
|
||||||
|
|
@ -20,10 +23,11 @@
|
||||||
<el-divider></el-divider>
|
<el-divider></el-divider>
|
||||||
<el-form-item :label="t('system.layout')">
|
<el-form-item :label="t('system.layout')">
|
||||||
<el-select v-model="layout" :placeholder="t('system.pleaseSelect')">
|
<el-select v-model="layout" :placeholder="t('system.pleaseSelect')">
|
||||||
<el-option :label="t('system.default')" value="default"></el-option>
|
<el-option :label="t('system.multiColumn')" value="column"></el-option>
|
||||||
<el-option :label="t('system.fullWidth')" value="header"></el-option>
|
<el-option :label="t('system.fullWidth')" value="header"></el-option>
|
||||||
<el-option :label="t('system.classic')" value="menu"></el-option>
|
<el-option :label="t('system.classic')" value="menu"></el-option>
|
||||||
<el-option :label="t('system.dock')" value="dock"></el-option>
|
<el-option :label="t('system.dock')" value="dock"></el-option>
|
||||||
|
<el-option :label="t('system.float')" value="float"></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item :label="t('system.collapseMenu')">
|
<el-form-item :label="t('system.collapseMenu')">
|
||||||
|
|
@ -32,7 +36,6 @@
|
||||||
<el-form-item :label="t('system.showLabels')">
|
<el-form-item :label="t('system.showLabels')">
|
||||||
<el-switch v-model="layoutTags"></el-switch>
|
<el-switch v-model="layoutTags"></el-switch>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-divider></el-divider>
|
|
||||||
</el-form>
|
</el-form>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
@ -50,10 +53,10 @@ let layout = ref(tools.data.get('APP_LAYOUT') || store.state.global.layout);
|
||||||
let menuIsCollapse = ref(store.state.global.menuIsCollapse);
|
let menuIsCollapse = ref(store.state.global.menuIsCollapse);
|
||||||
let layoutTags = ref(store.state.global.layoutTags);
|
let layoutTags = ref(store.state.global.layoutTags);
|
||||||
let lang = ref(tools.data.get('APP_LANG') || config.LANG);
|
let lang = ref(tools.data.get('APP_LANG') || config.LANG);
|
||||||
let dark = ref(tools.data.get('APP_DARK') || false);
|
let dark = ref(localStorage.getItem('APP_DARK') || config.DARK,);
|
||||||
let colorList = ref(['#409EFF', '#009688', '#536dfe', '#ff5c93', '#c62f2f', '#fd726d']);
|
let colorList = ref(['#409EFF', '#009688', '#536dfe', '#ff5c93', '#c62f2f', '#fd726d']);
|
||||||
let colorPrimary = ref(tools.data.get('APP_COLOR') || '#409EFF');
|
let colorPrimary = ref(tools.data.get('APP_COLOR') || '#409EFF');
|
||||||
let weakMode = ref(tools.data.get('APP_WEAK') || false)
|
let weakMode = ref(localStorage.getItem('APP_WEAK') || false)
|
||||||
|
|
||||||
watch(layout, (val) => {
|
watch(layout, (val) => {
|
||||||
tools.data.set("APP_LAYOUT", val);
|
tools.data.set("APP_LAYOUT", val);
|
||||||
|
|
@ -68,23 +71,13 @@ watch(layoutTags, () => {
|
||||||
store.commit("TOGGLE_layoutTags")
|
store.commit("TOGGLE_layoutTags")
|
||||||
})
|
})
|
||||||
|
|
||||||
watch(dark, (val) => {
|
|
||||||
if (val) {
|
|
||||||
document.documentElement.classList.add("dark")
|
|
||||||
tools.data.set("APP_DARK", val)
|
|
||||||
} else {
|
|
||||||
document.documentElement.classList.remove("dark")
|
|
||||||
tools.data.remove("APP_DARK")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
watch(weakMode, (val) => {
|
watch(weakMode, (val) => {
|
||||||
if (val) {
|
if (val) {
|
||||||
document.documentElement.classList.add("weak")
|
document.documentElement.classList.add("weak")
|
||||||
tools.data.set("APP_WEAK", val)
|
localStorage.setItem("APP_WEAK", val)
|
||||||
} else {
|
} else {
|
||||||
document.documentElement.classList.remove("weak")
|
document.documentElement.classList.remove("weak")
|
||||||
tools.data.remove("APP_WEAK")
|
localStorage.removeItem("APP_WEAK")
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -107,7 +100,30 @@ watch(colorPrimary, (val) => {
|
||||||
}
|
}
|
||||||
tools.data.set("APP_COLOR", val);
|
tools.data.set("APP_COLOR", val);
|
||||||
})
|
})
|
||||||
|
|
||||||
|
function themeClick(val) {
|
||||||
|
if (val == 'dark') {
|
||||||
|
document.documentElement.classList.add("dark")
|
||||||
|
localStorage.setItem("APP_DARK", val)
|
||||||
|
} else if(val == 'light') {
|
||||||
|
document.documentElement.classList.remove("dark")
|
||||||
|
localStorage.setItem("APP_DARK", val)
|
||||||
|
} else {
|
||||||
|
const systemTheme = window.matchMedia('(prefers-color-scheme: dark)')
|
||||||
|
if (systemTheme.matches) {
|
||||||
|
document.documentElement.classList.add("dark")
|
||||||
|
}else {
|
||||||
|
document.documentElement.classList.remove("dark")
|
||||||
|
}
|
||||||
|
localStorage.setItem("APP_DARK", val)
|
||||||
|
}
|
||||||
|
dark.value = val
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped>
|
<style lang="scss" scoped>
|
||||||
|
.pi-theme {text-align: center;}
|
||||||
|
.pi-theme .pi-pic {cursor: pointer;margin-bottom: 6px;border-radius: 8px; box-shadow: 0 2px 8px #0003;}
|
||||||
|
.pi-theme .pi-pic.active {border: 2px solid var(--el-color-primary); cursor: pointer;}
|
||||||
|
.pi-theme .pi-text {margin-top: 6px; cursor: pointer;}
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -60,19 +60,12 @@
|
||||||
|
|
||||||
<!-- 经典布局 -->
|
<!-- 经典布局 -->
|
||||||
<template v-else-if="layout=='menu'">
|
<template v-else-if="layout=='menu'">
|
||||||
<header class="pi-header">
|
|
||||||
<div class="pi-header-left">
|
|
||||||
<div class="logo-bar">
|
|
||||||
<img class="logo" src="/images/logo.png">
|
|
||||||
<span>{{ config.APP_NAME }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="pi-header-right">
|
|
||||||
<userbar></userbar>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<section class="pi-wrapper">
|
<section class="pi-wrapper">
|
||||||
<div v-if="!ismobile" :class="menuIsCollapse?'pi-side isCollapse':'pi-side'">
|
<div v-if="!ismobile" :class="menuIsCollapse?'pi-side isCollapse':'pi-side'">
|
||||||
|
<div class="logo-bar">
|
||||||
|
<img class="logo" src="/images/logo.png">
|
||||||
|
<span class="title" v-if="!menuIsCollapse">{{ config.APP_NAME }}</span>
|
||||||
|
</div>
|
||||||
<div class="pi-side-scroll">
|
<div class="pi-side-scroll">
|
||||||
<el-scrollbar>
|
<el-scrollbar>
|
||||||
<el-menu :default-active="active" router :collapse="menuIsCollapse"
|
<el-menu :default-active="active" router :collapse="menuIsCollapse"
|
||||||
|
|
@ -90,7 +83,9 @@
|
||||||
</div>
|
</div>
|
||||||
<Side-m v-if="ismobile"></Side-m>
|
<Side-m v-if="ismobile"></Side-m>
|
||||||
<div class="pi-body el-container">
|
<div class="pi-body el-container">
|
||||||
<Topbar v-if="!ismobile"></Topbar>
|
<Topbar v-if="!ismobile">
|
||||||
|
<userbar></userbar>
|
||||||
|
</Topbar>
|
||||||
<Tags v-if="!ismobile && layoutTags"></Tags>
|
<Tags v-if="!ismobile && layoutTags"></Tags>
|
||||||
<div class="pi-main" id="pi-main">
|
<div class="pi-main" id="pi-main">
|
||||||
<router-view v-slot="{ Component }">
|
<router-view v-slot="{ Component }">
|
||||||
|
|
@ -106,26 +101,62 @@
|
||||||
|
|
||||||
<!-- 功能坞布局 -->
|
<!-- 功能坞布局 -->
|
||||||
<template v-else-if="layout=='dock'">
|
<template v-else-if="layout=='dock'">
|
||||||
<header class="pi-header">
|
<section class="pi-dock">
|
||||||
<div class="pi-header-left">
|
<header class="pi-header" :class="ismobile?'':'pi-pad'">
|
||||||
|
<div class="pi-header-left">
|
||||||
|
<div class="logo-bar">
|
||||||
|
<img class="logo" src="/images/logo.png">
|
||||||
|
<span>{{ config.APP_NAME }}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pi-header-right">
|
||||||
|
<div v-if="!ismobile" class="pi-header-menu">
|
||||||
|
<el-menu mode="horizontal" :default-active="active" router background-color="#222b45"
|
||||||
|
text-color="#fff" active-text-color="var(--el-color-primary)">
|
||||||
|
<NavMenu :navMenus="menu"></NavMenu>
|
||||||
|
</el-menu>
|
||||||
|
</div>
|
||||||
|
<Side-m v-if="ismobile"></Side-m>
|
||||||
|
<userbar></userbar>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<section class="pi-wrapper">
|
||||||
|
<div class="pi-body el-container">
|
||||||
|
<Tags v-if="!ismobile && layoutTags"></Tags>
|
||||||
|
<div class="pi-main" id="pi-main" :class="ismobile?'':'pi-pad'">
|
||||||
|
<router-view v-slot="{ Component }">
|
||||||
|
<keep-alive :include="store.state.keepAlive.keepLiveRoute">
|
||||||
|
<component :is="Component" :key="route.fullPath" v-if="store.state.keepAlive.routeShow"/>
|
||||||
|
</keep-alive>
|
||||||
|
</router-view>
|
||||||
|
<iframe-view></iframe-view>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<!-- 浮动布局 -->
|
||||||
|
<template v-else-if="layout=='float'">
|
||||||
|
<section class="pi-wrapper">
|
||||||
|
<div v-if="!ismobile" class="pi-side isCollapse">
|
||||||
<div class="logo-bar">
|
<div class="logo-bar">
|
||||||
<img class="logo" src="/images/logo.png">
|
<img class="logo" src="/images/logo.png">
|
||||||
<span>{{ config.APP_NAME }}</span>
|
</div>
|
||||||
|
<div class="pi-side-scroll">
|
||||||
|
<el-scrollbar>
|
||||||
|
<el-menu :default-active="active" router :collapse="true"
|
||||||
|
:unique-opened="false">
|
||||||
|
<NavMenu :navMenus="menu"></NavMenu>
|
||||||
|
</el-menu>
|
||||||
|
</el-scrollbar>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pi-header-right">
|
<Side-m v-if="ismobile"></Side-m>
|
||||||
<div v-if="!ismobile" class="pi-header-menu">
|
|
||||||
<el-menu mode="horizontal" :default-active="active" router background-color="#222b45"
|
|
||||||
text-color="#fff" active-text-color="var(--el-color-primary)">
|
|
||||||
<NavMenu :navMenus="menu"></NavMenu>
|
|
||||||
</el-menu>
|
|
||||||
</div>
|
|
||||||
<Side-m v-if="ismobile"></Side-m>
|
|
||||||
<userbar></userbar>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
<section class="pi-wrapper">
|
|
||||||
<div class="pi-body el-container">
|
<div class="pi-body el-container">
|
||||||
|
<Topbar v-if="!ismobile">
|
||||||
|
<userbar></userbar>
|
||||||
|
</Topbar>
|
||||||
<Tags v-if="!ismobile && layoutTags"></Tags>
|
<Tags v-if="!ismobile && layoutTags"></Tags>
|
||||||
<div class="pi-main" id="pi-main">
|
<div class="pi-main" id="pi-main">
|
||||||
<router-view v-slot="{ Component }">
|
<router-view v-slot="{ Component }">
|
||||||
|
|
@ -139,7 +170,7 @@
|
||||||
</section>
|
</section>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<!-- 默认布局 -->
|
<!-- 分栏布局 -->
|
||||||
<template v-else>
|
<template v-else>
|
||||||
<section class="pi-wrapper">
|
<section class="pi-wrapper">
|
||||||
<div v-if="!ismobile" class="pi-side-split">
|
<div v-if="!ismobile" class="pi-side-split">
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,17 @@ export default {
|
||||||
webTitle: 'Property Management System',
|
webTitle: 'Property Management System',
|
||||||
logout: 'Log out',
|
logout: 'Log out',
|
||||||
cancel: 'Cancel',
|
cancel: 'Cancel',
|
||||||
primaryColor: 'Primary Color',
|
primaryColor: 'Primary color',
|
||||||
weakMode: 'Weak Mode',
|
weakMode: 'Weak Mode',
|
||||||
layout: 'Layout',
|
layout: 'Layout',
|
||||||
pageLayout: 'Page Layout',
|
pageLayout: 'Page layout',
|
||||||
pleaseSelect: 'Please Select',
|
pleaseSelect: 'Please select',
|
||||||
default: 'Default',
|
default: 'Default',
|
||||||
fullWidth: 'Full-width',
|
fullWidth: 'Full width',
|
||||||
|
multiColumn: 'Multi column',
|
||||||
classic: 'Classic',
|
classic: 'Classic',
|
||||||
dock: 'Dock',
|
dock: 'Horizontal',
|
||||||
|
float: 'Float',
|
||||||
collapseMenu: 'Collapse Menu',
|
collapseMenu: 'Collapse Menu',
|
||||||
showLabels: 'Show Labels',
|
showLabels: 'Show Labels',
|
||||||
},
|
},
|
||||||
|
|
@ -35,6 +37,7 @@ export default {
|
||||||
dynamic: 'Dynamic',
|
dynamic: 'Dynamic',
|
||||||
info: 'User Info',
|
info: 'User Info',
|
||||||
settings: 'Settings',
|
settings: 'Settings',
|
||||||
|
thememode: 'Theme Mode',
|
||||||
nightmode: 'Night Mode',
|
nightmode: 'Night Mode',
|
||||||
nightmode_msg: 'Suitable for low light environment,The current night mode is beta',
|
nightmode_msg: 'Suitable for low light environment,The current night mode is beta',
|
||||||
language: 'Language',
|
language: 'Language',
|
||||||
|
|
|
||||||
|
|
@ -11,8 +11,10 @@ export default {
|
||||||
pleaseSelect: '请选择',
|
pleaseSelect: '请选择',
|
||||||
default: '默认',
|
default: '默认',
|
||||||
fullWidth: '通栏',
|
fullWidth: '通栏',
|
||||||
|
multiColumn: '分栏',
|
||||||
classic: '经典',
|
classic: '经典',
|
||||||
dock: '功能坞',
|
dock: '横向',
|
||||||
|
float: '浮动',
|
||||||
collapseMenu: '折叠菜单',
|
collapseMenu: '折叠菜单',
|
||||||
showLabels: '显示标签',
|
showLabels: '显示标签',
|
||||||
},
|
},
|
||||||
|
|
@ -35,6 +37,7 @@ export default {
|
||||||
dynamic: '近期动态',
|
dynamic: '近期动态',
|
||||||
info: '个人信息',
|
info: '个人信息',
|
||||||
settings: '设置',
|
settings: '设置',
|
||||||
|
thememode: '主题风格',
|
||||||
nightmode: '黑夜模式',
|
nightmode: '黑夜模式',
|
||||||
nightmode_msg: '适合光线较弱的环境,当前黑暗模式为beta版本',
|
nightmode_msg: '适合光线较弱的环境,当前黑暗模式为beta版本',
|
||||||
language: '语言',
|
language: '语言',
|
||||||
|
|
|
||||||
|
|
@ -9,8 +9,13 @@ import copy from './directives/copy'
|
||||||
import drag from './directives/drag'
|
import drag from './directives/drag'
|
||||||
import errorHandler from "@/utils/errorHandler";
|
import errorHandler from "@/utils/errorHandler";
|
||||||
|
|
||||||
|
import piDialog from "@/components/piDialog"
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
install(app: App) {
|
install(app: App) {
|
||||||
|
// 注册全局组件
|
||||||
|
app.component('piDialog', piDialog)
|
||||||
|
|
||||||
//注册全局指令
|
//注册全局指令
|
||||||
app.directive('auth', auth)
|
app.directive('auth', auth)
|
||||||
app.directive('role', role)
|
app.directive('role', role)
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,9 @@ a,button,input,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0);box-sizing: bo
|
||||||
/* 大布局样式 */
|
/* 大布局样式 */
|
||||||
.pi {display: flex;flex-flow: column;}
|
.pi {display: flex;flex-flow: column;}
|
||||||
.pi-wrapper {display: flex;flex:1;overflow: auto;}
|
.pi-wrapper {display: flex;flex:1;overflow: auto;}
|
||||||
|
.pi-wrapper .logo-bar {display: flex;align-items: center;height: 50px;justify-content: center;}
|
||||||
|
.pi-wrapper .logo-bar .logo {width: 35px;height: 35px;}
|
||||||
|
.pi-wrapper .logo-bar .title {margin-left: 10px;font-size: 14px;font-weight: bold;display: inline-block;vertical-align: middle;white-space: nowrap;}
|
||||||
|
|
||||||
/* 全局滚动条样式 */
|
/* 全局滚动条样式 */
|
||||||
.scrollable {-webkit-overflow-scrolling: touch;}
|
.scrollable {-webkit-overflow-scrolling: touch;}
|
||||||
|
|
@ -37,6 +40,11 @@ a,button,input,textarea{-webkit-tap-highlight-color:rgba(0,0,0,0);box-sizing: bo
|
||||||
.pi-header .user-bar .panel-item:hover {background: rgba(255, 255, 255, 0.1)!important;}
|
.pi-header .user-bar .panel-item:hover {background: rgba(255, 255, 255, 0.1)!important;}
|
||||||
.pi-header .user-bar .user label{color: #fff;}
|
.pi-header .user-bar .user label{color: #fff;}
|
||||||
|
|
||||||
|
.pi-dock .pi-header.pi-pad {padding: 0 80px}
|
||||||
|
.pi-dock .pi-wrapper .pi-body .pi-tags {padding: 0 15px;}
|
||||||
|
.pi-dock .pi-wrapper .pi-body .pi-tags ul {margin: 0 80px;}
|
||||||
|
.pi-dock .pi-wrapper .pi-body .pi-main.pi-pad{margin: 0 80px}
|
||||||
|
|
||||||
/* 左侧菜单 */
|
/* 左侧菜单 */
|
||||||
.pi-side-split {width:65px;flex-shrink:0;background: #222b45;display: flex;flex-flow: column;}
|
.pi-side-split {width:65px;flex-shrink:0;background: #222b45;display: flex;flex-flow: column;}
|
||||||
.pi-side-split-top {height: 49px;}
|
.pi-side-split-top {height: 49px;}
|
||||||
|
|
|
||||||
|
|
@ -1,11 +1,23 @@
|
||||||
<script setup lang="ts">
|
<template>
|
||||||
|
<div>
|
||||||
|
<el-button plain @click="showClick">点我</el-button>
|
||||||
|
<pi-dialog v-model="show" ref="dialog"></pi-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import {getCurrentInstance, ref} from "vue";
|
||||||
|
|
||||||
|
const {proxy} = getCurrentInstance()
|
||||||
|
|
||||||
|
let show = ref(false)
|
||||||
|
|
||||||
|
function showClick() {
|
||||||
|
show.value = true
|
||||||
|
}
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
|
||||||
|
|
||||||
</template>
|
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
|
|
||||||
</style>
|
</style>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="login_main">
|
<div class="login_main">
|
||||||
<div class="login_config">
|
<div class="login_config">
|
||||||
<el-button :icon="config.dark?'el-icon-sunny':'el-icon-moon'" circle type="info"
|
<el-button :icon="dark?'el-icon-sunny':'el-icon-moon'" circle type="info"
|
||||||
@click="configDark"></el-button>
|
@click="configDark"></el-button>
|
||||||
<el-dropdown trigger="click" placement="bottom-end" @command="configLang">
|
<el-dropdown trigger="click" placement="bottom-end" @command="configLang">
|
||||||
<el-button circle>
|
<el-button circle>
|
||||||
|
|
@ -21,8 +21,8 @@
|
||||||
</el-button>
|
</el-button>
|
||||||
<template #dropdown>
|
<template #dropdown>
|
||||||
<el-dropdown-menu>
|
<el-dropdown-menu>
|
||||||
<el-dropdown-item v-for="item in lang" :key="item.value" :command="item"
|
<el-dropdown-item v-for="item in langs" :key="item.value" :command="item"
|
||||||
:class="{'selected':config.lang==item.value}">{{ item.name }}
|
:class="{'selected':lang==item.value}">{{ item.name }}
|
||||||
</el-dropdown-item>
|
</el-dropdown-item>
|
||||||
</el-dropdown-menu>
|
</el-dropdown-menu>
|
||||||
</template>
|
</template>
|
||||||
|
|
@ -83,12 +83,10 @@ const {proxy} = getCurrentInstance();
|
||||||
const {t, locale} = useI18n()
|
const {t, locale} = useI18n()
|
||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
|
|
||||||
let config = ref({
|
let lang = ref(tools.data.get('APP_LANG') || sysConfig.LANG)
|
||||||
lang: tools.data.get('APP_LANG') || sysConfig.LANG,
|
let dark = ref(false)
|
||||||
dark: tools.data.get('APP_DARK') || false
|
|
||||||
})
|
|
||||||
|
|
||||||
const lang = ref([
|
const langs = ref([
|
||||||
{
|
{
|
||||||
name: '简体中文',
|
name: '简体中文',
|
||||||
value: 'zh-cn',
|
value: 'zh-cn',
|
||||||
|
|
@ -120,23 +118,24 @@ const rules = ref({
|
||||||
})
|
})
|
||||||
let isLogin = ref(false);
|
let isLogin = ref(false);
|
||||||
|
|
||||||
|
const darkConfig = localStorage.getItem('APP_DARK') || sysConfig.DARK
|
||||||
|
|
||||||
|
if (darkConfig == "dark") {
|
||||||
|
dark.value = true
|
||||||
|
}else if (darkConfig == 'follow') {
|
||||||
|
const systemTheme = window.matchMedia('(prefers-color-scheme: dark)')
|
||||||
|
if (systemTheme.matches) {
|
||||||
|
dark.value = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// mounted
|
// mounted
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
getCode()
|
getCode()
|
||||||
rememberMe()
|
rememberMe()
|
||||||
})
|
})
|
||||||
|
|
||||||
watch(() => config.value.dark, (val) => {
|
watch(lang, (val) => {
|
||||||
if (val) {
|
|
||||||
document.documentElement.classList.add("dark")
|
|
||||||
tools.data.set("APP_DARK", val)
|
|
||||||
} else {
|
|
||||||
document.documentElement.classList.remove("dark")
|
|
||||||
tools.data.remove("APP_DARK")
|
|
||||||
}
|
|
||||||
})
|
|
||||||
|
|
||||||
watch(() => config.value.lang, (val) => {
|
|
||||||
locale.value = val
|
locale.value = val
|
||||||
tools.data.set("APP_LANG", val)
|
tools.data.set("APP_LANG", val)
|
||||||
})
|
})
|
||||||
|
|
@ -201,10 +200,17 @@ async function getInfo() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function configDark() {
|
function configDark() {
|
||||||
config.value.dark = !config.value.dark
|
dark.value = !dark.value
|
||||||
|
if (dark.value) {
|
||||||
|
document.documentElement.classList.add("dark")
|
||||||
|
localStorage.setItem("APP_DARK", 'dark')
|
||||||
|
} else {
|
||||||
|
document.documentElement.classList.remove("dark")
|
||||||
|
localStorage.setItem("APP_DARK", 'light')
|
||||||
|
}
|
||||||
}
|
}
|
||||||
function configLang(command) {
|
function configLang(command) {
|
||||||
config.value.lang = command.value
|
lang.value = command.value
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue