网站管理
This commit is contained in:
parent
bf1e08a63c
commit
ff4f7ab6b1
@ -2,6 +2,7 @@
|
|||||||
export default {
|
export default {
|
||||||
router: {
|
router: {
|
||||||
home: 'home',
|
home: 'home',
|
||||||
|
website: 'website',
|
||||||
system: 'system',
|
system: 'system',
|
||||||
systemMenu: 'systemMenu',
|
systemMenu: 'systemMenu',
|
||||||
systemRole: 'systemRole',
|
systemRole: 'systemRole',
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
export default {
|
export default {
|
||||||
router: {
|
router: {
|
||||||
home: '首页',
|
home: '首页',
|
||||||
|
website: '网站设置',
|
||||||
system: '系统设置',
|
system: '系统设置',
|
||||||
systemMenu: '菜单管理',
|
systemMenu: '菜单管理',
|
||||||
systemRole: '角色管理',
|
systemRole: '角色管理',
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
export default {
|
export default {
|
||||||
router: {
|
router: {
|
||||||
home: '首頁',
|
home: '首頁',
|
||||||
|
website: '網站設置',
|
||||||
system: '系統設置',
|
system: '系統設置',
|
||||||
systemMenu: '選單管理',
|
systemMenu: '選單管理',
|
||||||
systemRole: '角色管理',
|
systemRole: '角色管理',
|
||||||
|
@ -62,6 +62,21 @@ export const dynamicRoutes: Array<RouteRecordRaw> = [
|
|||||||
icon: 'iconfont icon-shouye',
|
icon: 'iconfont icon-shouye',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: '/website',
|
||||||
|
name: 'website',
|
||||||
|
component: () => import('/@/views/website/index.vue'),
|
||||||
|
meta: {
|
||||||
|
title: 'message.router.website',
|
||||||
|
isLink: '',
|
||||||
|
isHide: false,
|
||||||
|
isKeepAlive: true,
|
||||||
|
isAffix: true,
|
||||||
|
isIframe: false,
|
||||||
|
roles: ['admin', 'common'],
|
||||||
|
icon: 'iconfont icon-shouye',
|
||||||
|
},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: '/system',
|
path: '/system',
|
||||||
name: 'system',
|
name: 'system',
|
||||||
|
887
src/views/website/index.vue
Normal file
887
src/views/website/index.vue
Normal file
@ -0,0 +1,887 @@
|
|||||||
|
<template>
|
||||||
|
<div class="layout-pd">
|
||||||
|
<el-card shadow="hover">
|
||||||
|
<!-- 全局主题 -->
|
||||||
|
<el-divider content-position="left">{{ $t('message.layout.oneTitle') }}</el-divider>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">primary</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-color-picker v-model="getThemeConfig.primary" size="default" @change="onColorPickerChange"> </el-color-picker>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsDark') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isIsDark" size="small" @change="onAddDarkChange"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 顶栏设置 -->
|
||||||
|
<el-divider content-position="left">{{ $t('message.layout.twoTopTitle') }}</el-divider>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoTopBar') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-color-picker v-model="getThemeConfig.topBar" size="default" @change="onBgColorPickerChange('topBar')"> </el-color-picker>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoTopBarColor') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-color-picker v-model="getThemeConfig.topBarColor" size="default" @change="onBgColorPickerChange('topBarColor')"> </el-color-picker>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoIsTopBarColorGradual') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isTopBarColorGradual" size="small" @change="onTopBarGradualChange"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 菜单设置 -->
|
||||||
|
<el-divider content-position="left">{{ $t('message.layout.twoMenuTitle') }}</el-divider>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoMenuBar') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-color-picker v-model="getThemeConfig.menuBar" size="default" @change="onBgColorPickerChange('menuBar')"> </el-color-picker>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoMenuBarColor') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-color-picker v-model="getThemeConfig.menuBarColor" size="default" @change="onBgColorPickerChange('menuBarColor')"> </el-color-picker>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoMenuBarActiveColor') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-color-picker
|
||||||
|
v-model="getThemeConfig.menuBarActiveColor"
|
||||||
|
size="default"
|
||||||
|
show-alpha
|
||||||
|
@change="onBgColorPickerChange('menuBarActiveColor')"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoIsMenuBarColorGradual') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isMenuBarColorGradual" size="small" @change="onMenuBarGradualChange"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 分栏设置 -->
|
||||||
|
<el-divider content-position="left" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">{{
|
||||||
|
$t('message.layout.twoColumnsTitle')}}</el-divider>
|
||||||
|
<el-row :gutter="20" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoColumnsMenuBar') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-color-picker
|
||||||
|
v-model="getThemeConfig.columnsMenuBar"
|
||||||
|
size="default"
|
||||||
|
@change="onBgColorPickerChange('columnsMenuBar')"
|
||||||
|
:disabled="getThemeConfig.layout !== 'columns'"
|
||||||
|
>
|
||||||
|
</el-color-picker>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoColumnsMenuBarColor') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-color-picker
|
||||||
|
v-model="getThemeConfig.columnsMenuBarColor"
|
||||||
|
size="default"
|
||||||
|
@change="onBgColorPickerChange('columnsMenuBarColor')"
|
||||||
|
:disabled="getThemeConfig.layout !== 'columns'"
|
||||||
|
>
|
||||||
|
</el-color-picker>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoIsColumnsMenuBarColorGradual') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch
|
||||||
|
v-model="getThemeConfig.isColumnsMenuBarColorGradual"
|
||||||
|
size="small"
|
||||||
|
@change="onColumnsMenuBarGradualChange"
|
||||||
|
:disabled="getThemeConfig.layout !== 'columns'"
|
||||||
|
></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.twoIsColumnsMenuHoverPreload') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch
|
||||||
|
v-model="getThemeConfig.isColumnsMenuHoverPreload"
|
||||||
|
size="small"
|
||||||
|
@change="onColumnsMenuHoverPreloadChange"
|
||||||
|
:disabled="getThemeConfig.layout !== 'columns'"
|
||||||
|
></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 界面设置 -->
|
||||||
|
<el-divider content-position="left">{{ $t('message.layout.threeTitle') }}</el-divider>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsCollapse') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch
|
||||||
|
v-model="getThemeConfig.isCollapse"
|
||||||
|
:disabled="getThemeConfig.layout === 'transverse'"
|
||||||
|
size="small"
|
||||||
|
@change="onThemeConfigChange"
|
||||||
|
></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsUniqueOpened') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch
|
||||||
|
v-model="getThemeConfig.isUniqueOpened"
|
||||||
|
:disabled="getThemeConfig.layout === 'transverse'"
|
||||||
|
size="small"
|
||||||
|
@change="setLocalThemeConfig"
|
||||||
|
></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsFixedHeader') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isFixedHeader" size="small" @change="onIsFixedHeaderChange"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsClassicSplitMenu') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch
|
||||||
|
v-model="getThemeConfig.isClassicSplitMenu"
|
||||||
|
:disabled="getThemeConfig.layout !== 'classic'"
|
||||||
|
size="small"
|
||||||
|
@change="onClassicSplitMenuChange"
|
||||||
|
>
|
||||||
|
</el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeIsLockScreen') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isLockScreen" size="small" @change="setLocalThemeConfig"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.threeLockScreenTime') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-input-number
|
||||||
|
v-model="getThemeConfig.lockScreenTime"
|
||||||
|
controls-position="right"
|
||||||
|
:min="1"
|
||||||
|
:max="9999"
|
||||||
|
@change="setLocalThemeConfig"
|
||||||
|
size="default"
|
||||||
|
style="width: 90px"
|
||||||
|
>
|
||||||
|
</el-input-number>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 界面显示 -->
|
||||||
|
<el-divider content-position="left">{{ $t('message.layout.fourTitle') }}</el-divider>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsShowLogo') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isShowLogo" size="small" @change="onIsShowLogoChange"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex" :style="{ opacity: getThemeConfig.layout === 'classic' || getThemeConfig.layout === 'transverse' ? 0.5 : 1 }">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsBreadcrumb') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch
|
||||||
|
v-model="getThemeConfig.isBreadcrumb"
|
||||||
|
:disabled="getThemeConfig.layout === 'classic' || getThemeConfig.layout === 'transverse'"
|
||||||
|
size="small"
|
||||||
|
@change="onIsBreadcrumbChange"
|
||||||
|
></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsBreadcrumbIcon') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isBreadcrumbIcon" size="small" @change="setLocalThemeConfig"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsTagsview') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isTagsview" size="small" @change="setLocalThemeConfig"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsTagsviewIcon') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isTagsviewIcon" size="small" @change="setLocalThemeConfig"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsCacheTagsView') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isCacheTagsView" size="small" @change="setLocalThemeConfig"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex" :style="{ opacity: state.isMobile ? 0.5 : 1 }">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsSortableTagsView') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch
|
||||||
|
v-model="getThemeConfig.isSortableTagsView"
|
||||||
|
:disabled="state.isMobile ? true : false"
|
||||||
|
size="small"
|
||||||
|
@change="onSortableTagsViewChange"
|
||||||
|
></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsShareTagsView') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isShareTagsView" size="small" @change="onShareTagsViewChange"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsFooter') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isFooter" size="small" @change="setLocalThemeConfig"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsGrayscale') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isGrayscale" size="small" @change="onAddFilterChange('grayscale')"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsInvert') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isInvert" size="small" @change="onAddFilterChange('invert')"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourIsWartermark') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-switch v-model="getThemeConfig.isWartermark" size="small" @change="onWartermarkChange"></el-switch>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fourWartermarkText') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-input v-model="getThemeConfig.wartermarkText" size="default" style="width: 90px" @input="onWartermarkTextInput"></el-input>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.logoTitle') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-input v-model="getThemeConfig.globalTitle" size="default" style="width: 90px" @input="onWartermarkTitleInput"></el-input>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.footTitle') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-input v-model="getThemeConfig.globalFootTitleMsg" size="default" style="width: 90px" @input="onWartermarkFootTitleInput"></el-input>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.footTip') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-input v-model="getThemeConfig.globalFootTipMsg" size="default" style="width: 90px" @input="onWartermarkFootTipInput"></el-input>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.logoSetting') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-upload ref="uploadRef" action="#" :limit="1" :auto-upload="false" @change="onWartermarkLogoUpload" :on-preview="handlePreview"
|
||||||
|
:file-list="getThemeConfig.logoMini?[{name:getThemeConfig.globalTitle,url:getThemeConfig.logoMini}]:[]" accept='image/*' :on-remove="handleRemove">
|
||||||
|
<template #default>
|
||||||
|
<el-button v-if="!getThemeConfig.logoMini" class="logo-picture" type="text">上传文件</el-button>
|
||||||
|
</template>
|
||||||
|
</el-upload>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 其它设置 -->
|
||||||
|
<el-divider content-position="left">{{ $t('message.layout.fiveTitle') }}</el-divider>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveTagsStyle') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-select v-model="getThemeConfig.tagsStyle" placeholder="请选择" size="default" style="width: 90px" @change="setLocalThemeConfig">
|
||||||
|
<el-option label="风格1" value="tags-style-one"></el-option>
|
||||||
|
<el-option label="风格4" value="tags-style-four"></el-option>
|
||||||
|
<el-option label="风格5" value="tags-style-five"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveAnimation') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-select v-model="getThemeConfig.animation" placeholder="请选择" size="default" style="width: 90px" @change="setLocalThemeConfig">
|
||||||
|
<el-option label="slide-right" value="slide-right"></el-option>
|
||||||
|
<el-option label="slide-left" value="slide-left"></el-option>
|
||||||
|
<el-option label="opacitys" value="opacitys"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveColumnsAsideStyle') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-select
|
||||||
|
v-model="getThemeConfig.columnsAsideStyle"
|
||||||
|
placeholder="请选择"
|
||||||
|
size="default"
|
||||||
|
style="width: 90px"
|
||||||
|
:disabled="getThemeConfig.layout !== 'columns' ? true : false"
|
||||||
|
@change="setLocalThemeConfig"
|
||||||
|
>
|
||||||
|
<el-option label="圆角" value="columns-round"></el-option>
|
||||||
|
<el-option label="卡片" value="columns-card"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col :xs="8" :sm="6" :md="4" :lg="3" :xl="1" class="layout-breadcrumb-seting-bar-flex" :style="{ opacity: getThemeConfig.layout !== 'columns' ? 0.5 : 1 }">
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.fiveColumnsAsideLayout') }}</div>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-value">
|
||||||
|
<el-select
|
||||||
|
v-model="getThemeConfig.columnsAsideLayout"
|
||||||
|
placeholder="请选择"
|
||||||
|
size="default"
|
||||||
|
style="width: 90px"
|
||||||
|
:disabled="getThemeConfig.layout !== 'columns' ? true : false"
|
||||||
|
@change="setLocalThemeConfig"
|
||||||
|
>
|
||||||
|
<el-option label="水平" value="columns-horizontal"></el-option>
|
||||||
|
<el-option label="垂直" value="columns-vertical"></el-option>
|
||||||
|
</el-select>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<!-- 布局切换 -->
|
||||||
|
<el-divider content-position="left">{{ $t('message.layout.sixTitle') }}</el-divider>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col>
|
||||||
|
<div class="layout-breadcrumb-seting-bar-flex-label">{{ $t('message.layout.sixTitle') }}</div>
|
||||||
|
</el-col>
|
||||||
|
<el-col class="layout-drawer-content-flex">
|
||||||
|
<!-- defaults 布局 -->
|
||||||
|
<div class="layout-drawer-content-item layout-breadcrumb-seting-bar-flex" @click="onSetLayout('defaults')">
|
||||||
|
<section class="el-container el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'defaults' }">
|
||||||
|
<aside class="el-aside" style="width: 20px"></aside>
|
||||||
|
<section class="el-container is-vertical">
|
||||||
|
<header class="el-header" style="height: 10px"></header>
|
||||||
|
<main class="el-main"></main>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<div class="layout-tips-warp" :class="{ 'layout-tips-warp-active': getThemeConfig.layout === 'defaults' }">
|
||||||
|
<div class="layout-tips-box">
|
||||||
|
<p class="layout-tips-txt">{{ $t('message.layout.sixDefaults') }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- classic 布局 -->
|
||||||
|
<div class="layout-drawer-content-item layout-breadcrumb-seting-bar-flex" @click="onSetLayout('classic')">
|
||||||
|
<section class="el-container is-vertical el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'classic' }">
|
||||||
|
<header class="el-header" style="height: 10px"></header>
|
||||||
|
<section class="el-container">
|
||||||
|
<aside class="el-aside" style="width: 20px"></aside>
|
||||||
|
<section class="el-container is-vertical">
|
||||||
|
<main class="el-main"></main>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<div class="layout-tips-warp" :class="{ 'layout-tips-warp-active': getThemeConfig.layout === 'classic' }">
|
||||||
|
<div class="layout-tips-box">
|
||||||
|
<p class="layout-tips-txt">{{ $t('message.layout.sixClassic') }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- transverse 布局 -->
|
||||||
|
<div class="layout-drawer-content-item layout-breadcrumb-seting-bar-flex" @click="onSetLayout('transverse')">
|
||||||
|
<section class="el-container is-vertical el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'transverse' }">
|
||||||
|
<header class="el-header" style="height: 10px"></header>
|
||||||
|
<section class="el-container">
|
||||||
|
<section class="el-container is-vertical">
|
||||||
|
<main class="el-main"></main>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<div class="layout-tips-warp" :class="{ 'layout-tips-warp-active': getThemeConfig.layout === 'transverse' }">
|
||||||
|
<div class="layout-tips-box">
|
||||||
|
<p class="layout-tips-txt">{{ $t('message.layout.sixTransverse') }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<!-- columns 布局 -->
|
||||||
|
<div class="layout-drawer-content-item layout-breadcrumb-seting-bar-flex" @click="onSetLayout('columns')">
|
||||||
|
<section class="el-container el-circular" :class="{ 'drawer-layout-active': getThemeConfig.layout === 'columns' }">
|
||||||
|
<aside class="el-aside-dark" style="width: 10px"></aside>
|
||||||
|
<aside class="el-aside" style="width: 20px"></aside>
|
||||||
|
<section class="el-container is-vertical">
|
||||||
|
<header class="el-header" style="height: 10px"></header>
|
||||||
|
<main class="el-main"></main>
|
||||||
|
</section>
|
||||||
|
</section>
|
||||||
|
<div class="layout-tips-warp" :class="{ 'layout-tips-warp-active': getThemeConfig.layout === 'columns' }">
|
||||||
|
<div class="layout-tips-box">
|
||||||
|
<p class="layout-tips-txt">{{ $t('message.layout.sixColumns') }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<div class="copy-config">
|
||||||
|
<el-button size="default" class="copy-config-btn" type="primary" ref="copyConfigBtnRef" @click="onCopyConfigClick">
|
||||||
|
<el-icon class="mr5">
|
||||||
|
<ele-CopyDocument />
|
||||||
|
</el-icon>
|
||||||
|
{{ $t('message.layout.copyText') }}
|
||||||
|
</el-button>
|
||||||
|
<el-button size="default" class="copy-config-btn-reset" type="info" @click="onResetConfigClick">
|
||||||
|
<el-icon class="mr5">
|
||||||
|
<ele-RefreshRight />
|
||||||
|
</el-icon>
|
||||||
|
{{ $t('message.layout.resetText') }}
|
||||||
|
</el-button>
|
||||||
|
</div>
|
||||||
|
</el-row>
|
||||||
|
</el-card>
|
||||||
|
<el-dialog v-model="dialogVisible">
|
||||||
|
<img w-full :src="getThemeConfig.logoMini" alt="预览logo" />
|
||||||
|
</el-dialog>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup lang="ts" name="website">
|
||||||
|
import { nextTick, onUnmounted, onMounted, computed, reactive, ref } from 'vue';
|
||||||
|
import { ElMessage, UploadFile, UploadFiles, UploadProps } from 'element-plus';
|
||||||
|
import { useI18n } from 'vue-i18n';
|
||||||
|
import { storeToRefs } from 'pinia';
|
||||||
|
import { useThemeConfig } from '/@/stores/themeConfig';
|
||||||
|
import { useChangeColor } from '/@/utils/theme';
|
||||||
|
import { verifyAndSpace } from '/@/utils/toolsValidate';
|
||||||
|
import { Local } from '/@/utils/storage';
|
||||||
|
import Watermark from '/@/utils/watermark';
|
||||||
|
import commonFunction from '/@/utils/commonFunction';
|
||||||
|
import other from '/@/utils/other';
|
||||||
|
import mittBus from '/@/utils/mitt';
|
||||||
|
import { articleApi } from '/@/api/article';
|
||||||
|
import logoMini from '/@/assets/logo-mini.svg';
|
||||||
|
|
||||||
|
const state = reactive({
|
||||||
|
isMobile: false,
|
||||||
|
})
|
||||||
|
|
||||||
|
// 定义变量内容
|
||||||
|
const storesThemeConfig = useThemeConfig();
|
||||||
|
const { themeConfig } = storeToRefs(storesThemeConfig);
|
||||||
|
const { getLightColor, getDarkColor } = useChangeColor();
|
||||||
|
const { copyText } = commonFunction();
|
||||||
|
// 引入 api 请求接口
|
||||||
|
const artApi = articleApi();
|
||||||
|
|
||||||
|
// 获取布局配置信息
|
||||||
|
const getThemeConfig = computed(() => {
|
||||||
|
return themeConfig.value;
|
||||||
|
});
|
||||||
|
|
||||||
|
// 1、全局主题
|
||||||
|
const onColorPickerChange = () => {
|
||||||
|
if (!getThemeConfig.value.primary) return ElMessage.warning('全局主题 primary 颜色值不能为空');
|
||||||
|
// 颜色加深
|
||||||
|
document.documentElement.style.setProperty('--el-color-primary-dark-2', `${getDarkColor(getThemeConfig.value.primary, 0.1)}`);
|
||||||
|
document.documentElement.style.setProperty('--el-color-primary', getThemeConfig.value.primary);
|
||||||
|
// 颜色变浅
|
||||||
|
for (let i = 1; i <= 9; i++) {
|
||||||
|
document.documentElement.style.setProperty(`--el-color-primary-light-${i}`, `${getLightColor(getThemeConfig.value.primary, i / 10)}`);
|
||||||
|
}
|
||||||
|
setDispatchThemeConfig();
|
||||||
|
};
|
||||||
|
// 2、菜单 / 顶栏
|
||||||
|
const onBgColorPickerChange = (bg: string) => {
|
||||||
|
document.documentElement.style.setProperty(`--next-bg-${bg}`, themeConfig.value[bg]);
|
||||||
|
if (bg === 'menuBar') {
|
||||||
|
document.documentElement.style.setProperty(`--next-bg-menuBar-light-1`, getLightColor(getThemeConfig.value.menuBar, 0.05));
|
||||||
|
}
|
||||||
|
onTopBarGradualChange();
|
||||||
|
onMenuBarGradualChange();
|
||||||
|
onColumnsMenuBarGradualChange();
|
||||||
|
setDispatchThemeConfig();
|
||||||
|
};
|
||||||
|
// 2、菜单 / 顶栏 --> 顶栏背景渐变
|
||||||
|
const onTopBarGradualChange = () => {
|
||||||
|
setGraduaFun('.layout-navbars-breadcrumb-index', getThemeConfig.value.isTopBarColorGradual, getThemeConfig.value.topBar);
|
||||||
|
};
|
||||||
|
// 2、菜单 / 顶栏 --> 菜单背景渐变
|
||||||
|
const onMenuBarGradualChange = () => {
|
||||||
|
setGraduaFun('.layout-container .el-aside', getThemeConfig.value.isMenuBarColorGradual, getThemeConfig.value.menuBar);
|
||||||
|
};
|
||||||
|
// 2、菜单 / 顶栏 --> 分栏菜单背景渐变
|
||||||
|
const onColumnsMenuBarGradualChange = () => {
|
||||||
|
setGraduaFun('.layout-container .layout-columns-aside', getThemeConfig.value.isColumnsMenuBarColorGradual, getThemeConfig.value.columnsMenuBar);
|
||||||
|
};
|
||||||
|
// 2、菜单 / 顶栏 --> 背景渐变函数
|
||||||
|
const setGraduaFun = (el: string, bool: boolean, color: string) => {
|
||||||
|
nextTick(() => {
|
||||||
|
setTimeout(() => {
|
||||||
|
let els = document.querySelector(el);
|
||||||
|
if (!els) return false;
|
||||||
|
document.documentElement.style.setProperty('--el-menu-bg-color', document.documentElement.style.getPropertyValue('--next-bg-menuBar'));
|
||||||
|
if (bool) els.setAttribute('style', `background:linear-gradient(to bottom , ${color}, ${getLightColor(color, 0.5)})`);
|
||||||
|
else els.setAttribute('style', ``);
|
||||||
|
setLocalThemeConfig();
|
||||||
|
}, 300);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 2、分栏设置 ->
|
||||||
|
const onColumnsMenuHoverPreloadChange = () => {
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 3、界面设置 --> 菜单水平折叠
|
||||||
|
const onThemeConfigChange = () => {
|
||||||
|
setDispatchThemeConfig();
|
||||||
|
};
|
||||||
|
// 3、界面设置 --> 固定 Header
|
||||||
|
const onIsFixedHeaderChange = () => {
|
||||||
|
getThemeConfig.value.isFixedHeaderChange = getThemeConfig.value.isFixedHeader ? false : true;
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 3、界面设置 --> 经典布局分割菜单
|
||||||
|
const onClassicSplitMenuChange = () => {
|
||||||
|
getThemeConfig.value.isBreadcrumb = false;
|
||||||
|
setLocalThemeConfig();
|
||||||
|
mittBus.emit('getBreadcrumbIndexSetFilterRoutes');
|
||||||
|
};
|
||||||
|
// 4、界面显示 --> 侧边栏 Logo
|
||||||
|
const onIsShowLogoChange = () => {
|
||||||
|
getThemeConfig.value.isShowLogoChange = getThemeConfig.value.isShowLogo ? false : true;
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 4、界面显示 --> 面包屑 Breadcrumb
|
||||||
|
const onIsBreadcrumbChange = () => {
|
||||||
|
if (getThemeConfig.value.layout === 'classic') {
|
||||||
|
getThemeConfig.value.isClassicSplitMenu = false;
|
||||||
|
}
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 4、界面显示 --> 开启 TagsView 拖拽
|
||||||
|
const onSortableTagsViewChange = () => {
|
||||||
|
mittBus.emit('openOrCloseSortable');
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 4、界面显示 --> 开启 TagsView 共用
|
||||||
|
const onShareTagsViewChange = () => {
|
||||||
|
mittBus.emit('openShareTagsView');
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 4、界面显示 --> 灰色模式/色弱模式
|
||||||
|
const onAddFilterChange = (attr: string) => {
|
||||||
|
if (attr === 'grayscale') {
|
||||||
|
if (getThemeConfig.value.isGrayscale) getThemeConfig.value.isInvert = false;
|
||||||
|
} else {
|
||||||
|
if (getThemeConfig.value.isInvert) getThemeConfig.value.isGrayscale = false;
|
||||||
|
}
|
||||||
|
const cssAttr =
|
||||||
|
attr === 'grayscale' ? `grayscale(${getThemeConfig.value.isGrayscale ? 1 : 0})` : `invert(${getThemeConfig.value.isInvert ? '80%' : '0%'})`;
|
||||||
|
const appEle = document.body;
|
||||||
|
appEle.setAttribute('style', `filter: ${cssAttr}`);
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 4、界面显示 --> 深色模式
|
||||||
|
const onAddDarkChange = () => {
|
||||||
|
const body = document.documentElement as HTMLElement;
|
||||||
|
if (getThemeConfig.value.isIsDark) body.setAttribute('data-theme', 'dark');
|
||||||
|
else body.setAttribute('data-theme', '');
|
||||||
|
};
|
||||||
|
// 4、界面显示 --> 开启水印
|
||||||
|
const onWartermarkChange = () => {
|
||||||
|
getThemeConfig.value.isWartermark ? Watermark.set(getThemeConfig.value.wartermarkText) : Watermark.del();
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 4、界面显示 --> 水印文案
|
||||||
|
const onWartermarkTextInput = (val: string) => {
|
||||||
|
getThemeConfig.value.wartermarkText = verifyAndSpace(val);
|
||||||
|
if (getThemeConfig.value.wartermarkText === '') return false;
|
||||||
|
if (getThemeConfig.value.isWartermark) Watermark.set(getThemeConfig.value.wartermarkText);
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 5、界面显示 --> logo标题
|
||||||
|
const onWartermarkTitleInput = (val: string) => {
|
||||||
|
getThemeConfig.value.globalTitle = verifyAndSpace(val);
|
||||||
|
if (getThemeConfig.value.globalTitle === '') return false;
|
||||||
|
if (getThemeConfig.value.isWartermark) Watermark.set(getThemeConfig.value.globalTitle);
|
||||||
|
other.useTitle();
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 6、界面显示 --> 页脚tip
|
||||||
|
const onWartermarkFootTitleInput = (val: string) => {
|
||||||
|
getThemeConfig.value.globalFootTitleMsg = verifyAndSpace(val);
|
||||||
|
if (getThemeConfig.value.globalFootTitleMsg === '') return false;
|
||||||
|
if (getThemeConfig.value.isWartermark) Watermark.set(getThemeConfig.value.globalFootTitleMsg);
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 7、界面显示 --> 页脚版权
|
||||||
|
const onWartermarkFootTipInput = (val: string) => {
|
||||||
|
getThemeConfig.value.globalFootTipMsg = verifyAndSpace(val);
|
||||||
|
if (getThemeConfig.value.globalFootTipMsg === '') return false;
|
||||||
|
if (getThemeConfig.value.isWartermark) Watermark.set(getThemeConfig.value.globalFootTipMsg);
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
const uploadRef = ref();
|
||||||
|
const dialogVisible = ref(false);
|
||||||
|
const handlePreview: UploadProps['onPreview'] = (uploadFile) =>{
|
||||||
|
dialogVisible.value = true;
|
||||||
|
};
|
||||||
|
const handleRemove: UploadProps['onRemove'] = (file, uploadFiles) => {
|
||||||
|
// onWartermarkLogoMiniInput('/src/assets/logo-mini.svg');
|
||||||
|
onWartermarkLogoMiniInput('');
|
||||||
|
uploadRef.value.clearFiles();
|
||||||
|
}
|
||||||
|
// 封面基本路径
|
||||||
|
const viteUrl = import.meta.env.VITE_API_URL;
|
||||||
|
// 8、界面显示 --> logo设置
|
||||||
|
const onWartermarkLogoMiniInput = (val: string) => {
|
||||||
|
getThemeConfig.value.logoMini = verifyAndSpace(val);
|
||||||
|
// if (getThemeConfig.value.logoMini === '') return false;
|
||||||
|
if (getThemeConfig.value.isWartermark) Watermark.set(getThemeConfig.value.logoMini);
|
||||||
|
// 设置网站图标
|
||||||
|
let link: any = document.querySelector("link[rel*='icon']") || document.createElement("link");
|
||||||
|
link.type = "image/x-icon";
|
||||||
|
link.rel = "shortcut icon";
|
||||||
|
link.href = themeConfig.value.logoMini||logoMini;
|
||||||
|
document.getElementsByTagName("head")[0].appendChild(link);
|
||||||
|
setLocalThemeConfig();
|
||||||
|
};
|
||||||
|
// 8、界面显示 --> logo上传
|
||||||
|
const onWartermarkLogoUpload = async (uploadFile: UploadFile, uploadFiles: UploadFiles) => {
|
||||||
|
if(uploadFile.raw?.type.includes('image')){
|
||||||
|
const file:any = uploadFile.raw;
|
||||||
|
const formdata = new FormData();
|
||||||
|
formdata.append('file', file);
|
||||||
|
let res = await artApi.uploadFile(formdata);
|
||||||
|
if(res?.success&&res?.data){
|
||||||
|
onWartermarkLogoMiniInput(encodeURI(viteUrl+res.data.path));
|
||||||
|
}else{
|
||||||
|
ElMessage.error('logo上传失败!');
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
ElMessage.error('请上传图片文件!');
|
||||||
|
uploadRef.value.clearFiles();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 9、布局切换
|
||||||
|
const onSetLayout = (layout: string) => {
|
||||||
|
Local.set('oldLayout', layout);
|
||||||
|
if (getThemeConfig.value.layout === layout) return false;
|
||||||
|
if (layout === 'transverse') getThemeConfig.value.isCollapse = false;
|
||||||
|
getThemeConfig.value.layout = layout;
|
||||||
|
getThemeConfig.value.isDrawer = false;
|
||||||
|
initLayoutChangeFun();
|
||||||
|
};
|
||||||
|
// 设置布局切换函数
|
||||||
|
const initLayoutChangeFun = () => {
|
||||||
|
onBgColorPickerChange('menuBar');
|
||||||
|
onBgColorPickerChange('menuBarColor');
|
||||||
|
onBgColorPickerChange('menuBarActiveColor');
|
||||||
|
onBgColorPickerChange('topBar');
|
||||||
|
onBgColorPickerChange('topBarColor');
|
||||||
|
onBgColorPickerChange('columnsMenuBar');
|
||||||
|
onBgColorPickerChange('columnsMenuBarColor');
|
||||||
|
};
|
||||||
|
// 触发 store 布局配置更新
|
||||||
|
const setDispatchThemeConfig = () => {
|
||||||
|
setLocalThemeConfig();
|
||||||
|
setLocalThemeConfigStyle();
|
||||||
|
};
|
||||||
|
// 存储布局配置
|
||||||
|
const setLocalThemeConfig = () => {
|
||||||
|
Local.remove('themeConfig');
|
||||||
|
Local.set('themeConfig', getThemeConfig.value);
|
||||||
|
};
|
||||||
|
// 存储布局配置全局主题样式(html根标签)
|
||||||
|
const setLocalThemeConfigStyle = () => {
|
||||||
|
Local.set('themeConfigStyle', document.documentElement.style.cssText);
|
||||||
|
};
|
||||||
|
// 一键复制配置
|
||||||
|
const onCopyConfigClick = () => {
|
||||||
|
let copyThemeConfig = Local.get('themeConfig');
|
||||||
|
copyThemeConfig.isDrawer = false;
|
||||||
|
copyText(JSON.stringify(copyThemeConfig)).then(() => {
|
||||||
|
getThemeConfig.value.isDrawer = false;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
// 一键恢复默认
|
||||||
|
const onResetConfigClick = () => {
|
||||||
|
Local.clear();
|
||||||
|
window.location.reload();
|
||||||
|
// @ts-ignore
|
||||||
|
Local.set('version', __NEXT_VERSION__);
|
||||||
|
};
|
||||||
|
onMounted(() => {
|
||||||
|
})
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
.layout-breadcrumb-seting-bar-flex {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin-bottom: 5px;
|
||||||
|
padding: 5px;
|
||||||
|
margin-right: 20px;
|
||||||
|
transition: 0.5s;
|
||||||
|
&:hover{
|
||||||
|
box-shadow: 21px 7px 16px 0px rgba(100, 100, 111, 0.2);
|
||||||
|
}
|
||||||
|
&-label {
|
||||||
|
flex: 1;
|
||||||
|
color: var(--el-text-color-primary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.logo-picture{
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 12px 15px 0;
|
||||||
|
}
|
||||||
|
.layout-breadcrumb-seting-bar-flex-label{
|
||||||
|
// text-wrap: nowrap;
|
||||||
|
}
|
||||||
|
.layout-drawer-content-flex {
|
||||||
|
overflow: hidden;
|
||||||
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
align-content: flex-start;
|
||||||
|
margin: 0 -5px;
|
||||||
|
.layout-drawer-content-item {
|
||||||
|
width: 120px;
|
||||||
|
height: 70px;
|
||||||
|
cursor: pointer;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
position: relative;
|
||||||
|
padding: 5px;
|
||||||
|
.el-container {
|
||||||
|
height: 100%;
|
||||||
|
.el-aside-dark {
|
||||||
|
background-color: var(--next-color-seting-header);
|
||||||
|
}
|
||||||
|
.el-aside {
|
||||||
|
background-color: var(--next-color-seting-aside);
|
||||||
|
}
|
||||||
|
.el-header {
|
||||||
|
background-color: var(--next-color-seting-header);
|
||||||
|
}
|
||||||
|
.el-main {
|
||||||
|
background-color: var(--next-color-seting-main);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.el-circular {
|
||||||
|
border-radius: 2px;
|
||||||
|
overflow: hidden;
|
||||||
|
border: 1px solid transparent;
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
}
|
||||||
|
.drawer-layout-active {
|
||||||
|
border: 1px solid;
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
}
|
||||||
|
.layout-tips-warp,
|
||||||
|
.layout-tips-warp-active {
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
position: absolute;
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
border: 1px solid;
|
||||||
|
border-color: var(--el-color-primary-light-5);
|
||||||
|
border-radius: 100%;
|
||||||
|
padding: 4px;
|
||||||
|
.layout-tips-box {
|
||||||
|
transition: inherit;
|
||||||
|
width: 30px;
|
||||||
|
height: 30px;
|
||||||
|
z-index: 9;
|
||||||
|
border: 1px solid;
|
||||||
|
border-color: var(--el-color-primary-light-5);
|
||||||
|
border-radius: 100%;
|
||||||
|
.layout-tips-txt {
|
||||||
|
transition: inherit;
|
||||||
|
position: relative;
|
||||||
|
top: 5px;
|
||||||
|
font-size: 12px;
|
||||||
|
line-height: 1;
|
||||||
|
letter-spacing: 2px;
|
||||||
|
white-space: nowrap;
|
||||||
|
color: var(--el-color-primary-light-5);
|
||||||
|
text-align: center;
|
||||||
|
transform: rotate(30deg);
|
||||||
|
left: -1px;
|
||||||
|
background-color: var(--next-color-seting-main);
|
||||||
|
width: 32px;
|
||||||
|
height: 17px;
|
||||||
|
line-height: 17px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.layout-tips-warp-active {
|
||||||
|
border: 1px solid;
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
.layout-tips-box {
|
||||||
|
border: 1px solid;
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
.layout-tips-txt {
|
||||||
|
color: var(--el-color-primary) !important;
|
||||||
|
background-color: var(--next-color-seting-main) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
&:hover {
|
||||||
|
.el-circular {
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
border: 1px solid;
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
}
|
||||||
|
.layout-tips-warp {
|
||||||
|
transition: all 0.3s ease-in-out;
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
.layout-tips-box {
|
||||||
|
transition: inherit;
|
||||||
|
border-color: var(--el-color-primary);
|
||||||
|
.layout-tips-txt {
|
||||||
|
transition: inherit;
|
||||||
|
color: var(--el-color-primary) !important;
|
||||||
|
background-color: var(--next-color-seting-main) !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.copy-config {
|
||||||
|
margin: 10px 0;
|
||||||
|
display: flex;
|
||||||
|
width: 100%;
|
||||||
|
justify-content: flex-end;
|
||||||
|
.copy-config-btn {
|
||||||
|
// width: 100%;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
.copy-config-btn-reset {
|
||||||
|
// width: 100%;
|
||||||
|
margin: 10px 10px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
:deep(.el-upload-list__item){
|
||||||
|
margin-top: -20px;
|
||||||
|
width: 100px;
|
||||||
|
}
|
||||||
|
</style>
|
Loading…
Reference in New Issue
Block a user