系统布局配置支持动态标题开关
This commit is contained in:
		| @@ -1,3 +1,6 @@ | |||||||
|  | # 页面标题 | ||||||
|  | VUE_APP_TITLE = 若依管理系统 | ||||||
|  |  | ||||||
| # 开发环境配置 | # 开发环境配置 | ||||||
| ENV = 'development' | ENV = 'development' | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,3 +1,6 @@ | |||||||
|  | # 页面标题 | ||||||
|  | VUE_APP_TITLE = 若依管理系统 | ||||||
|  |  | ||||||
| # 生产环境配置 | # 生产环境配置 | ||||||
| ENV = 'production' | ENV = 'production' | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,3 +1,6 @@ | |||||||
|  | # 页面标题 | ||||||
|  | VUE_APP_TITLE = 若依管理系统 | ||||||
|  |  | ||||||
| NODE_ENV = production | NODE_ENV = production | ||||||
|  |  | ||||||
| # 测试环境配置 | # 测试环境配置 | ||||||
|   | |||||||
| @@ -55,6 +55,7 @@ | |||||||
|     "vue": "2.6.12", |     "vue": "2.6.12", | ||||||
|     "vue-count-to": "1.0.13", |     "vue-count-to": "1.0.13", | ||||||
|     "vue-cropper": "0.5.5", |     "vue-cropper": "0.5.5", | ||||||
|  |     "vue-meta": "^2.4.0", | ||||||
|     "vue-router": "3.4.9", |     "vue-router": "3.4.9", | ||||||
|     "vuedraggable": "2.24.3", |     "vuedraggable": "2.24.3", | ||||||
|     "vuex": "3.6.0" |     "vuex": "3.6.0" | ||||||
|   | |||||||
| @@ -6,6 +6,14 @@ | |||||||
|  |  | ||||||
| <script> | <script> | ||||||
| export default  { | export default  { | ||||||
|   name:  'App' |   name:  'App', | ||||||
|  |     metaInfo() { | ||||||
|  |         return { | ||||||
|  |             title: this.$store.state.settings.dynamicTitle && this.$store.state.settings.title, | ||||||
|  |             titleTemplate: title => { | ||||||
|  |                 return title ? `${title} - ${process.env.VUE_APP_TITLE}` : process.env.VUE_APP_TITLE | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
| } | } | ||||||
| </script> | </script> | ||||||
|   | |||||||
| @@ -62,6 +62,11 @@ | |||||||
|         <el-switch v-model="sidebarLogo" class="drawer-switch" /> |         <el-switch v-model="sidebarLogo" class="drawer-switch" /> | ||||||
|       </div> |       </div> | ||||||
|  |  | ||||||
|  |       <div class="drawer-item"> | ||||||
|  |         <span>动态标题</span> | ||||||
|  |         <el-switch v-model="dynamicTitle" class="drawer-switch" /> | ||||||
|  |       </div> | ||||||
|  |  | ||||||
|       <el-divider/> |       <el-divider/> | ||||||
|  |  | ||||||
|       <el-button size="small" type="primary" plain icon="el-icon-document-add" @click="saveSetting">保存配置</el-button> |       <el-button size="small" type="primary" plain icon="el-icon-document-add" @click="saveSetting">保存配置</el-button> | ||||||
| @@ -129,6 +134,17 @@ export default { | |||||||
|         }) |         }) | ||||||
|       } |       } | ||||||
|     }, |     }, | ||||||
|  |     dynamicTitle: { | ||||||
|  |       get() { | ||||||
|  |         return this.$store.state.settings.dynamicTitle | ||||||
|  |       }, | ||||||
|  |       set(val) { | ||||||
|  |         this.$store.dispatch('settings/changeSetting', { | ||||||
|  |           key: 'dynamicTitle', | ||||||
|  |           value: val | ||||||
|  |         }) | ||||||
|  |       } | ||||||
|  |     }, | ||||||
|   }, |   }, | ||||||
|   methods: { |   methods: { | ||||||
|     themeChange(val) { |     themeChange(val) { | ||||||
| @@ -160,6 +176,7 @@ export default { | |||||||
|             "tagsView":${this.tagsView}, |             "tagsView":${this.tagsView}, | ||||||
|             "fixedHeader":${this.fixedHeader}, |             "fixedHeader":${this.fixedHeader}, | ||||||
|             "sidebarLogo":${this.sidebarLogo}, |             "sidebarLogo":${this.sidebarLogo}, | ||||||
|  |             "dynamicTitle":${this.dynamicTitle}, | ||||||
|             "sideTheme":"${this.sideTheme}", |             "sideTheme":"${this.sideTheme}", | ||||||
|             "theme":"${this.theme}" |             "theme":"${this.theme}" | ||||||
|           }` |           }` | ||||||
|   | |||||||
| @@ -20,6 +20,8 @@ import { parseTime, resetForm, addDateRange, selectDictLabel, selectDictLabels, | |||||||
| import Pagination from "@/components/Pagination"; | import Pagination from "@/components/Pagination"; | ||||||
| // 自定义表格工具扩展 | // 自定义表格工具扩展 | ||||||
| import RightToolbar from "@/components/RightToolbar" | import RightToolbar from "@/components/RightToolbar" | ||||||
|  | // 头部标签插件 | ||||||
|  | import VueMeta from 'vue-meta' | ||||||
|  |  | ||||||
| // 全局方法挂载 | // 全局方法挂载 | ||||||
| Vue.prototype.getDicts = getDicts | Vue.prototype.getDicts = getDicts | ||||||
| @@ -49,6 +51,7 @@ Vue.component('Pagination', Pagination) | |||||||
| Vue.component('RightToolbar', RightToolbar) | Vue.component('RightToolbar', RightToolbar) | ||||||
|  |  | ||||||
| Vue.use(permission) | Vue.use(permission) | ||||||
|  | Vue.use(VueMeta) | ||||||
|  |  | ||||||
| /** | /** | ||||||
|  * If you don't want to use mock-server |  * If you don't want to use mock-server | ||||||
|   | |||||||
| @@ -12,6 +12,7 @@ const whiteList = ['/login', '/auth-redirect', '/bind', '/register'] | |||||||
| router.beforeEach((to, from, next) => { | router.beforeEach((to, from, next) => { | ||||||
|   NProgress.start() |   NProgress.start() | ||||||
|   if (getToken()) { |   if (getToken()) { | ||||||
|  |     to.meta.title && store.dispatch('settings/setTitle', to.meta.title) | ||||||
|     /* has token*/ |     /* has token*/ | ||||||
|     if (to.path === '/login') { |     if (to.path === '/login') { | ||||||
|       next({ path: '/' }) |       next({ path: '/' }) | ||||||
|   | |||||||
| @@ -1,6 +1,4 @@ | |||||||
| module.exports = { | module.exports = { | ||||||
|   title: '若依管理系统', |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * 侧边栏主题 深色主题theme-dark,浅色主题theme-light |    * 侧边栏主题 深色主题theme-dark,浅色主题theme-light | ||||||
|    */ |    */ | ||||||
| @@ -31,6 +29,11 @@ module.exports = { | |||||||
|    */ |    */ | ||||||
|   sidebarLogo: true, |   sidebarLogo: true, | ||||||
|  |  | ||||||
|  |   /** | ||||||
|  |    * 是否显示动态标题 | ||||||
|  |    */ | ||||||
|  |   dynamicTitle: false, | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * @type {string | array} 'production' | ['production', 'development'] |    * @type {string | array} 'production' | ['production', 'development'] | ||||||
|    * @description Need show err logs component. |    * @description Need show err logs component. | ||||||
|   | |||||||
| @@ -1,17 +1,19 @@ | |||||||
| import variables from '@/assets/styles/element-variables.scss' | import variables from '@/assets/styles/element-variables.scss' | ||||||
| import defaultSettings from '@/settings' | import defaultSettings from '@/settings' | ||||||
|  |  | ||||||
| const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo } = defaultSettings | const { sideTheme, showSettings, topNav, tagsView, fixedHeader, sidebarLogo, dynamicTitle } = defaultSettings | ||||||
|  |  | ||||||
| const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' | const storageSetting = JSON.parse(localStorage.getItem('layout-setting')) || '' | ||||||
| const state = { | const state = { | ||||||
|  |   title: '', | ||||||
|   theme: storageSetting.theme || variables.theme, |   theme: storageSetting.theme || variables.theme, | ||||||
|   sideTheme: storageSetting.sideTheme || sideTheme, |   sideTheme: storageSetting.sideTheme || sideTheme, | ||||||
|   showSettings: showSettings, |   showSettings: showSettings, | ||||||
|   topNav:  storageSetting.topNav === undefined ? topNav : storageSetting.topNav, |   topNav:  storageSetting.topNav === undefined ? topNav : storageSetting.topNav, | ||||||
|   tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, |   tagsView: storageSetting.tagsView === undefined ? tagsView : storageSetting.tagsView, | ||||||
|   fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, |   fixedHeader: storageSetting.fixedHeader === undefined ? fixedHeader : storageSetting.fixedHeader, | ||||||
|   sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo |   sidebarLogo: storageSetting.sidebarLogo === undefined ? sidebarLogo : storageSetting.sidebarLogo, | ||||||
|  |   dynamicTitle: storageSetting.dynamicTitle === undefined ? dynamicTitle : storageSetting.dynamicTitle | ||||||
| } | } | ||||||
| const mutations = { | const mutations = { | ||||||
|   CHANGE_SETTING: (state, { key, value }) => { |   CHANGE_SETTING: (state, { key, value }) => { | ||||||
| @@ -22,8 +24,13 @@ const mutations = { | |||||||
| } | } | ||||||
|  |  | ||||||
| const actions = { | const actions = { | ||||||
|  |   // 修改布局设置 | ||||||
|   changeSetting({ commit }, data) { |   changeSetting({ commit }, data) { | ||||||
|     commit('CHANGE_SETTING', data) |     commit('CHANGE_SETTING', data) | ||||||
|  |   }, | ||||||
|  |   // 设置网页标题 | ||||||
|  |   setTitle({ commit }, title) { | ||||||
|  |     state.title = title | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,12 +1,11 @@ | |||||||
| 'use strict' | 'use strict' | ||||||
| const path = require('path') | const path = require('path') | ||||||
| const defaultSettings = require('./src/settings.js') |  | ||||||
|  |  | ||||||
| function resolve(dir) { | function resolve(dir) { | ||||||
|   return path.join(__dirname, dir) |   return path.join(__dirname, dir) | ||||||
| } | } | ||||||
|  |  | ||||||
| const name = defaultSettings.title || '若依管理系统' // 标题 | const name = process.env.VUE_APP_TITLE || '若依管理系统' // 网页标题 | ||||||
|  |  | ||||||
| const port = process.env.port || process.env.npm_config_port || 80 // 端口 | const port = process.env.port || process.env.npm_config_port || 80 // 端口 | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user