diff --git a/.env b/.env index 8ad3bfc8..3ac3302a 100644 --- a/.env +++ b/.env @@ -3,3 +3,4 @@ VUE_APP_API=/api/ VUE_APP_REPO=https://github.com/d2-projects/d2-admin VUE_APP_I18N_LOCALE=zh-chs VUE_APP_I18N_FALLBACK_LOCALE=en +VUE_APP_ELEMENT_COLOR=#409EFF diff --git a/package.json b/package.json index eb464fcf..95f3f592 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "countup.js": "^2.0.4", "dayjs": "^1.8.12", "echarts": "^4.2.1", - "element-ui": "^2.7.2", + "element-ui": "^2.9.1", "flex.css": "^1.1.7", "fuse.js": "^3.4.4", "github-markdown-css": "^3.0.1", @@ -72,6 +72,7 @@ "text-loader": "0.0.1", "uglifyjs-webpack-plugin": "^2.1.2", "vue-cli-plugin-i18n": "^0.6.0", - "vue-template-compiler": "^2.5.21" + "vue-template-compiler": "^2.5.21", + "webpack-theme-color-replacer": "^1.2.1" } } diff --git a/src/layout/header-aside/components/header-color/index.vue b/src/layout/header-aside/components/header-color/index.vue new file mode 100644 index 00000000..dfac4060 --- /dev/null +++ b/src/layout/header-aside/components/header-color/index.vue @@ -0,0 +1,41 @@ + + + diff --git a/src/layout/header-aside/layout.vue b/src/layout/header-aside/layout.vue index 641a5693..fecd75f0 100644 --- a/src/layout/header-aside/layout.vue +++ b/src/layout/header-aside/layout.vue @@ -32,6 +32,7 @@ + @@ -92,6 +93,7 @@ import d2HeaderSize from './components/header-size' import d2HeaderTheme from './components/header-theme' import d2HeaderUser from './components/header-user' import d2HeaderLog from './components/header-log' +import d2HeaderColor from './components/header-color' import { mapState, mapGetters, mapActions } from 'vuex' import mixinSearch from './mixins/search' export default { @@ -109,7 +111,8 @@ export default { d2HeaderSize, d2HeaderTheme, d2HeaderUser, - d2HeaderLog + d2HeaderLog, + d2HeaderColor }, data () { return { diff --git a/src/store/modules/d2admin/modules/account.js b/src/store/modules/d2admin/modules/account.js index 1ab37af5..fb089607 100644 --- a/src/store/modules/d2admin/modules/account.js +++ b/src/store/modules/d2admin/modules/account.js @@ -107,6 +107,7 @@ export default { await dispatch('d2admin/menu/asideCollapseLoad', null, { root: true }) // DB -> store 持久化数据加载全局尺寸 await dispatch('d2admin/size/load', null, { root: true }) + await dispatch('d2admin/color/load', null, { root: true }) // end resolve() }) diff --git a/src/store/modules/d2admin/modules/color.js b/src/store/modules/d2admin/modules/color.js new file mode 100644 index 00000000..85c35175 --- /dev/null +++ b/src/store/modules/d2admin/modules/color.js @@ -0,0 +1,46 @@ +export default { + namespaced: true, + state: { + // 颜色 + value: process.env.VUE_APP_ELEMENT_COLOR + }, + actions: { + /** + * @description 设置颜色 + * @param {Object} state vuex state + * @param {String} color 尺寸 + */ + set ({ state, dispatch }, color) { + return new Promise(async resolve => { + // store 赋值 + state.value = color + // 持久化 + await dispatch('d2admin/db/set', { + dbName: 'sys', + path: 'color.value', + value: state.value, + user: true + }, { root: true }) + // end + resolve() + }) + }, + /** + * @description 从持久化数据读取颜色设置 + * @param {Object} state vuex state + */ + load ({ state, dispatch }) { + return new Promise(async resolve => { + // store 赋值 + state.value = await dispatch('d2admin/db/get', { + dbName: 'sys', + path: 'color.value', + defaultValue: process.env.VUE_APP_ELEMENT_COLOR, + user: true + }, { root: true }) + // end + resolve() + }) + } + } +} diff --git a/src/views/system/login/page.vue.REMOVED.git-id b/src/views/system/login/page.vue.REMOVED.git-id index a8611aa2..32f30df5 100644 --- a/src/views/system/login/page.vue.REMOVED.git-id +++ b/src/views/system/login/page.vue.REMOVED.git-id @@ -1 +1 @@ -fa1ae9f9a7f3f62b11777f83150787d16a763359 \ No newline at end of file +9c9dbaa47996b7dceac7c165fed90e73e4da0237 \ No newline at end of file diff --git a/vue.config.js b/vue.config.js index cb5c5de8..cf540f99 100644 --- a/vue.config.js +++ b/vue.config.js @@ -1,6 +1,9 @@ const UglifyJsPlugin = require('uglifyjs-webpack-plugin') const VueFilenameInjector = require('./tools/vue-filename-injector') +const ThemeColorReplacer = require('webpack-theme-color-replacer') +const forElementUI = require('webpack-theme-color-replacer/forElementUI') + // 拼接路径 const resolve = dir => require('path').join(__dirname, dir) @@ -26,6 +29,17 @@ module.exports = { } } }, + configureWebpack: { + plugins: [ + new ThemeColorReplacer({ + fileName: 'css/theme-colors.[contenthash:8].css', + matchColors: [ + ...forElementUI.getElementUISeries(process.env.VUE_APP_ELEMENT_COLOR) // Element-ui主色系列 + ], + changeSelector: forElementUI.changeSelector + }) + ] + }, // 默认设置: https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-service/lib/config/base.js chainWebpack: config => { /** diff --git a/yarn.lock.REMOVED.git-id b/yarn.lock.REMOVED.git-id index c707f187..f7ddd3f3 100644 --- a/yarn.lock.REMOVED.git-id +++ b/yarn.lock.REMOVED.git-id @@ -1 +1 @@ -8a273c9068198d1dcc8d6b9738808332f76dabcb \ No newline at end of file +12deef00e0a1116ba0392a3851989164ee601528 \ No newline at end of file