perf: 修改主题设置方式

This commit is contained in:
ibuler 2024-05-08 16:24:16 +08:00
parent ef7db30658
commit f843dde3d6
22 changed files with 83 additions and 102 deletions

View File

@ -34,7 +34,7 @@
.el-pagination__total, .el-pagination__total,
.el-pagination__sizes, .el-pagination__sizes,
.el-pager { .el-pager {
color: var(--el-icon-color); color: var(--color-icon-primary);
} }
} }
@ -48,7 +48,7 @@
.el-pagination.is-background .el-pager li { .el-pagination.is-background .el-pager li {
margin: 0 5px; margin: 0 5px;
background-color: #fff; background-color: #fff;
color: var(--el-icon-color); color: var(--color-icon-primary);
min-width: 28px; min-width: 28px;
border-radius: 2px; border-radius: 2px;
border: 1px solid #DCDFE6; border: 1px solid #DCDFE6;
@ -237,7 +237,7 @@ td .el-button.el-button--mini {
.el-tag.el-tag--info .el-tag__close { .el-tag.el-tag--info .el-tag__close {
display: inline-block; display: inline-block;
margin-top: 3px; margin-top: 3px;
color: var(--el-text-color); color: var(--color-text-primary);
background-color: inherit; background-color: inherit;
} }
@ -293,7 +293,7 @@ td .el-button.el-button--mini {
} }
.el-textarea__inner { .el-textarea__inner {
color: var(--el-text-color); color: var(--color-text-primary);
} }
.el-pagination.is-background .number { .el-pagination.is-background .number {
@ -437,7 +437,7 @@ td .el-button.el-button--mini {
} }
.el-dialog .el-dialog__header .el-dialog__title { .el-dialog .el-dialog__header .el-dialog__title {
color: var(--el-text-color); color: var(--color-text-primary);
} }
.el-dialog .el-dialog__body { .el-dialog .el-dialog__body {
@ -449,12 +449,12 @@ td .el-button.el-button--mini {
.el-dialog .el-dialog__body .el-transfer-panel .el-transfer-panel__body .el-input__inner, .el-dialog .el-dialog__body .el-transfer-panel .el-transfer-panel__body .el-input__inner,
.el-dialog .el-dialog__body .el-transfer-panel .el-transfer-panel__header .el-checkbox__label, .el-dialog .el-dialog__body .el-transfer-panel .el-transfer-panel__header .el-checkbox__label,
.el-dialog .el-dialog__body .el-transfer-panel .el-transfer-panel__body .el-checkbox-group .el-checkbox.el-transfer-panel__item { .el-dialog .el-dialog__body .el-transfer-panel .el-transfer-panel__body .el-checkbox-group .el-checkbox.el-transfer-panel__item {
color: var(--el-text-color); color: var(--color-text-primary);
} }
.el-dialog .el-dialog__body .opera .el-button.is-disabled, .el-dialog .el-dialog__body .opera .el-button.is-disabled,
.el-dialog .el-dialog__body .el-transfer-panel .vip-footer .el-button.is-disabled { .el-dialog .el-dialog__body .el-transfer-panel .vip-footer .el-button.is-disabled {
color: var(--el-input-border-color); color: var(--color-input-border);
} }
.el-dialog .el-dialog__body .opera .el-button.is-disabled.el-button--primary { .el-dialog .el-dialog__body .opera .el-button.is-disabled.el-button--primary {

View File

@ -6,7 +6,6 @@
<script> <script>
import { mapState } from 'vuex' import { mapState } from 'vuex'
import { useCommonColor } from '@/styles/commonColor'
export default { export default {
name: 'App', name: 'App',
@ -14,9 +13,6 @@ export default {
...mapState({ ...mapState({
isRouterAlive: state => state.common.isRouterAlive isRouterAlive: state => state.common.isRouterAlive
}) })
},
beforeMount() {
useCommonColor()
} }
} }
</script> </script>

View File

@ -88,7 +88,7 @@ export default {
>>> .el-form-item__label { >>> .el-form-item__label {
padding-right: 8%; padding-right: 8%;
overflow: hidden; overflow: hidden;
color: var(--el-icon-color); color: var(--color-icon-primary);
span { span {
display: inline-block; display: inline-block;
@ -97,7 +97,7 @@ export default {
} }
::v-deep .el-form-item__content { ::v-deep .el-form-item__content {
color: var(--el-text-color); color: var(--color-text-primary);
font-size: 13px; font-size: 13px;
line-height: 40px; line-height: 40px;
} }

View File

@ -198,7 +198,7 @@ export default {
} }
.el-button.el-button--default { .el-button.el-button--default {
color: var(--el-text-color); color: var(--color-text-primary);
} }
} }
@ -209,7 +209,7 @@ export default {
.more-action.el-button--default { .more-action.el-button--default {
::v-deep .el-icon-arrow-down.el-icon--right { ::v-deep .el-icon-arrow-down.el-icon--right {
color: var(--el-icon-color) !important; color: var(--color-icon-primary) !important;
} }
} }
@ -261,7 +261,7 @@ export default {
&.el-dropdown-menu__item--divided { &.el-dropdown-menu__item--divided {
margin-top: 0; margin-top: 0;
border-top: none; border-top: none;
color: var(--el-text-color); color: var(--color-text-primary);
cursor: auto; cursor: auto;
font-size: 12px; font-size: 12px;
line-height: 30px; line-height: 30px;
@ -274,7 +274,7 @@ export default {
} }
.dropdown-item { .dropdown-item {
color: var(--el-icon-color); color: var(--color-icon-primary);
.pre-icon { .pre-icon {
width: 17px; width: 17px;
@ -296,11 +296,11 @@ export default {
} }
.el-dropdown-menu__item { .el-dropdown-menu__item {
color: var(--el-icon-color); color: var(--color-icon-primary);
&:not(.is-disabled):hover { &:not(.is-disabled):hover {
color: var(--el-text-color); color: var(--color-text-primary);
background-color: var(--el-disabled-background-color); background-color: var(--color-disabled-background);
} }
} }

View File

@ -158,9 +158,13 @@ export default {
.el-form { .el-form {
margin-right: 80px; margin-right: 80px;
::v-deep .el-input-group__prepend {
border-radius: 0;
}
::v-deep .form-group-header { ::v-deep .form-group-header {
margin-left: 50px; margin-left: 50px;
color: var(--el-text-color); color: var(--color-text-primary);
} }
::v-deep .el-form-item { ::v-deep .el-form-item {
@ -173,10 +177,10 @@ export default {
.el-form-item__label { .el-form-item__label {
padding: 0 30px 0 0; padding: 0 30px 0 0;
line-height: 32px; line-height: 32px;
color: var(--el-text-color); color: var(--color-text-primary);
i { i {
color: var(--el-icon-color); color: var(--color-icon-primary);
} }
} }
@ -186,8 +190,8 @@ export default {
// //
.el-input.is-disabled .el-input__inner { .el-input.is-disabled .el-input__inner {
color: var(--el-icon-color) !important; color: var(--color-icon-primary) !important;
background-color: var(--el-disabled-background-color); background-color: var(--color-disabled-background);
} }
// //
@ -207,18 +211,18 @@ export default {
.el-input__inner { .el-input__inner {
border-radius: 0; border-radius: 0;
color: var(--el-text-color); color: var(--color-text-primary);
} }
.el-input-group__append { .el-input-group__append {
border: 1px solid var(--el-input-border-color); border: 1px solid var(--color-input-border);
border-left: 0 !important; border-left: 0 !important;
} }
} }
// //
.el-input .el-input__inner { .el-input .el-input__inner {
color: var(--el-text-color); color: var(--color-text-primary);
} }
// //
@ -236,7 +240,7 @@ export default {
// item // item
.el-input .el-input__inner { .el-input .el-input__inner {
color: var(--el-text-color); color: var(--color-text-primary);
} }
} }
@ -247,14 +251,14 @@ export default {
.el-data-table .el-table { .el-data-table .el-table {
margin: 5px 0; margin: 5px 0;
border-radius: 4px; border-radius: 4px;
border: 1px solid var(--el-input-border-color); border: 1px solid var(--color-input-border);
} }
.help-block { .help-block {
display: block; display: block;
margin-top: 2px; margin-top: 2px;
margin-bottom: 5px; margin-bottom: 5px;
color: var(--el-form-tip-text-color); color: var(--color-help-text);
font-size: 12px; font-size: 12px;
line-height: 18px; line-height: 18px;
word-break: keep-all; word-break: keep-all;

View File

@ -94,11 +94,11 @@ export default {
::v-deep .el-range-separator, ::v-deep .el-range-separator,
::v-deep .el-input__icon { ::v-deep .el-input__icon {
line-height: 26px; line-height: 26px;
color: var(--el-icon-color) !important; color: var(--color-icon-primary) !important;
} }
::v-deep .el-range-input { ::v-deep .el-range-input {
color: var(--el-text-color) !important; color: var(--color-text-primary) !important;
} }
::v-deep .el-range-input { ::v-deep .el-range-input {

View File

@ -36,7 +36,7 @@ export default {
} }
</script> </script>
<style scoped lang='scss'> <style lang='scss' scoped>
.ibox { .ibox {
/*height: 100%;*/ /*height: 100%;*/
clear: both; clear: both;
@ -83,6 +83,6 @@ export default {
.ibox >>> .el-card__body { .ibox >>> .el-card__body {
padding: 15px 30px 20px 30px; padding: 15px 30px 20px 30px;
color: var(--el-icon-color); color: var(--color-icon-primary);
} }
</style> </style>

View File

@ -151,7 +151,7 @@ export default {
<style lang='scss' scoped> <style lang='scss' scoped>
.label-search { .label-search {
margin-right: 10px; margin-right: 10px;
border: 1px solid var(--el-disabled-background-color); border: 1px solid var(--color-disabled-background);
border-radius: 3px; border-radius: 3px;
::v-deep .el-button.label-button { ::v-deep .el-button.label-button {
@ -170,7 +170,7 @@ export default {
} }
.el-input__suffix { .el-input__suffix {
color: var(--el-icon-color) !important; ; color: var(--color-icon-primary) !important; ;
} }
} }
@ -180,7 +180,7 @@ export default {
overflow: hidden; overflow: hidden;
.el-tag.el-tag--info { .el-tag.el-tag--info {
color: var(--el-text-color) !important; color: var(--color-text-primary) !important;
} }
.el-cascader__search-input { .el-cascader__search-input {
@ -190,7 +190,7 @@ export default {
} }
::v-deep .svg-icon { ::v-deep .svg-icon {
color: var(--el-icon-color) !important; color: var(--color-icon-primary) !important;
} }
} }
</style> </style>

View File

@ -137,7 +137,7 @@ export default {
} }
</script> </script>
<style scoped lang="scss"> <style lang="scss" scoped>
.right-side-actions.right-side-item { .right-side-actions.right-side-item {
display: flex; display: flex;
align-items: center; align-items: center;
@ -150,7 +150,7 @@ export default {
border: none; border: none;
padding: 5px; padding: 5px;
font-size: 14px; font-size: 14px;
color: var(--el-icon-color); color: var(--color-icon-primary);
background-color: transparent; background-color: transparent;
&:hover { &:hover {

View File

@ -352,7 +352,7 @@ export default {
align-items: center; align-items: center;
min-width: 198px; min-width: 198px;
//height: 30px; //height: 30px;
border: 1px solid var(--el-disabled-background-color); border: 1px solid var(--color-disabled-background);
border-radius: 4px; border-radius: 4px;
background-color: #fff; background-color: #fff;
box-sizing: border-box; box-sizing: border-box;
@ -368,7 +368,7 @@ export default {
} }
::v-deep .el-input__suffix { ::v-deep .el-input__suffix {
color: var(--el-icon-color) !important; color: var(--color-icon-primary) !important;
.el-input__suffix-inner { .el-input__suffix-inner {
line-height: 30px; line-height: 30px;
@ -404,7 +404,7 @@ export default {
i { i {
line-height: 30px; line-height: 30px;
font-weight: 500; font-weight: 500;
color: var(--el-icon-color); color: var(--color-icon-primary);
} }
} }

View File

@ -24,7 +24,7 @@ export default {
.el-card__body { .el-card__body {
padding-top: 30px; padding-top: 30px;
padding-bottom: 30px; padding-bottom: 60px;
} }
} }
</style> </style>

View File

@ -66,9 +66,9 @@ export default {
.page-heading-left, .page-heading-left,
h2 { h2 {
font-size: 16px; font-size: 16px;
font-weight: 500; font-weight: 600;
line-height: 32px; line-height: 2;
color: var(--el-text-color); color: var(--color-text-primary);
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
text-overflow: ellipsis; text-overflow: ellipsis;

View File

@ -1,13 +0,0 @@
const commonColor = {
'--el-text-color': '#1F2329',
'--el-icon-color': '#646A73',
'--el-input-border-color': '#BBBFC4',
'--el-disabled-background-color': '#dcdee2',
'--el-form-tip-text-color': '#8F959E'
}
export const useCommonColor = () => {
for (const [key, value] of Object.entries(commonColor)) {
document.documentElement.style.setProperty(key, value)
}
}

View File

@ -1,22 +1,3 @@
:root {
--color-primary: #1ab394;
--color-success: #2793d7;
--color-info: #1c84c6;
--color-warning: #f8ac59;
--color-danger: #ed5565;
--color-link: #1c84c6;
--color-text: #1F2329;
--color-text-2: #646a73;
--color-text-3: #8f959e;
--color-text-4: #bbbfc4;
--banner-bg: #148f76;
--submenu-bg: #ffffff;
--menu-bg: #ffffff;
--menu-text: #646A73;
--menu-text-active: #1ab394;
--menu-hover: #ffffff;
}
:export { :export {
--color-primary: #1ab394; --color-primary: #1ab394;
--color-success: #2793d7; --color-success: #2793d7;
@ -24,6 +5,11 @@
--color-warning: #f8ac59; --color-warning: #f8ac59;
--color-danger: #ed5565; --color-danger: #ed5565;
--color-link: #1c84c6; --color-link: #1c84c6;
--color-text-primary: #292827;
--color-icon-primary: #605e5c;
--color-input-border: #BBBFC4;
--color-disabled-background: #dcdee2;
--color-help-text: #8F959E;
--banner-bg: #148f76; --banner-bg: #148f76;
--submenu-bg: #ffffff; --submenu-bg: #ffffff;
--menu-bg: #ffffff; --menu-bg: #ffffff;

View File

@ -35,7 +35,7 @@ body {
height: calc(100% - 50px); height: calc(100% - 50px);
overflow: hidden; overflow: hidden;
-moz-osx-font-smoothing: grayscale; -moz-osx-font-smoothing: grayscale;
color: var(--el-text-color); color: var(--color-text-primary);
font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif; font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 13px; font-size: 13px;
line-height: 1.428; line-height: 1.428;
@ -233,11 +233,11 @@ input[type=file] {
.el-timeline .el-timeline-item { .el-timeline .el-timeline-item {
.el-timeline-item__wrapper { .el-timeline-item__wrapper {
.el-timeline-item__content { .el-timeline-item__content {
color: var(--el-text-color); color: var(--color-text-primary);
} }
.el-timeline-item__timestamp.is-bottom { .el-timeline-item__timestamp.is-bottom {
color: var(--el-form-tip-text-color); color: var(--color-help-text);
} }
} }
} }
@ -249,7 +249,7 @@ input[type=file] {
font-size: 13px; font-size: 13px;
line-height: 1.5; line-height: 1.5;
border-right: none; border-right: none;
color: var(--el-text-color); color: var(--color-text-primary);
} }
th { th {
@ -283,7 +283,7 @@ input[type=file] {
// 表头 // 表头
.el-table__header thead > tr > th { .el-table__header thead > tr > th {
.cell { .cell {
color: var(--el-icon-color); color: var(--color-text-primary);
overflow: hidden; overflow: hidden;
text-overflow: ellipsis; text-overflow: ellipsis;
white-space: nowrap; white-space: nowrap;
@ -319,7 +319,7 @@ input[type=file] {
width: auto !important; width: auto !important;
.el-tooltip > span { .el-tooltip > span {
color: var(--el-text-color); color: var(--color-text-primary);
} }
.label-container .label-formatter-col div { .label-container .label-formatter-col div {
@ -391,17 +391,17 @@ input[type=file] {
} }
.el-cascader__dropdown .el-cascader-panel .el-cascader-menu { .el-cascader__dropdown .el-cascader-panel .el-cascader-menu {
color: var(--el-text-color) !important; color: var(--color-text-primary) !important;
} }
.el-card .el-card__header { .el-card .el-card__header {
color: var(--el-text-color); color: var(--color-text-primary);
} }
.el-alert { .el-alert {
.el-alert__description, .el-alert__description,
.el-alert__title{ .el-alert__title{
color: var(--el-text-color) !important; color: var(--color-text-primary) !important;
} }
} }

View File

@ -70,6 +70,13 @@ export function mix(color_1, color_2, weight) {
return color return color
} }
export function setRootColors() {
const themeColors = defaultThemeConfig || {}
for (const [key, value] of Object.entries(themeColors)) {
document.documentElement.style.setProperty(key, value)
}
}
export function changeMenuColor(themeColors) { export function changeMenuColor(themeColors) {
const elementStyle = document.documentElement.style const elementStyle = document.documentElement.style
const colors = Object.keys(themeColors).length > 0 ? themeColors : defaultThemeConfig const colors = Object.keys(themeColors).length > 0 ? themeColors : defaultThemeConfig
@ -80,12 +87,11 @@ export function changeMenuColor(themeColors) {
// 后端不用返回 --menu-hover // 后端不用返回 --menu-hover
const menuActiveTextColor = colors['--menu-text-active'] const menuActiveTextColor = colors['--menu-text-active']
if (menuActiveTextColor) { if (menuActiveTextColor) {
const menuHover = mix(white, menuActiveTextColor.replace(/#/g, ''), 90) colors['--menu-hover'] = mix(white, menuActiveTextColor.replace(/#/g, ''), 90)
colors['--menu-hover'] = menuHover
} }
const lights = [15, 40, 60, 80] const lights = [15, 40, 60, 80]
const darks = [15, 30, 40, 60] const darken = [15, 30, 40, 60]
for (const key in colors) { for (const key in colors) {
const currentColor = colors[key] const currentColor = colors[key]
@ -96,7 +102,7 @@ export function changeMenuColor(themeColors) {
const color = mix(white, currentColor.replace(/#/g, ''), light) const color = mix(white, currentColor.replace(/#/g, ''), light)
elementStyle.setProperty(key + '-light' + '-' + i, color) elementStyle.setProperty(key + '-light' + '-' + i, color)
} }
for (const [i, dark] of darks.entries()) { for (const [i, dark] of darken.entries()) {
const color = mix(black, currentColor.replace(/#/g, ''), dark) const color = mix(black, currentColor.replace(/#/g, ''), dark)
elementStyle.setProperty(key + '-dark' + '-' + i, color) elementStyle.setProperty(key + '-dark' + '-' + i, color)
} }

View File

@ -1,4 +1,4 @@
import { changeMenuColor, generateColors, mix } from './color' import { changeMenuColor, generateColors, mix, setRootColors } from './color'
import axios from 'axios' import axios from 'axios'
import formula from './formula.json' import formula from './formula.json'
@ -74,6 +74,7 @@ export function changeThemeColors(themeColors) {
resolve() resolve()
} }
}).then(() => { }).then(() => {
setRootColors()
changeMenuColor(themeColors) changeMenuColor(themeColors)
changeElementColor(themeColors) changeElementColor(themeColors)
}) })
@ -92,3 +93,4 @@ export function replaceStyleColors(data) {
return data return data
} }

View File

@ -60,7 +60,7 @@ export default {
.title, .title,
.num{ .num{
color: var(--el-text-color); color: var(--color-text-primary);
} }
.title { .title {
@ -76,7 +76,7 @@ export default {
.sub, .sub,
.add { .add {
color: var(--el-icon-color); color: var(--color-icon-primary);
} }
.sub { .sub {

View File

@ -38,7 +38,7 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.summary-header { .summary-header {
color: var(--el-icon-color); color: var(--color-icon-primary);
.title { .title {
font-style: normal; font-style: normal;
@ -56,7 +56,7 @@ export default {
font-weight: 500; font-weight: 500;
font-size: 24px; font-size: 24px;
line-height: 40px; line-height: 40px;
color: var(--el-text-color); color: var(--color-text-primary);
} }
.disabled-link { .disabled-link {

View File

@ -73,7 +73,7 @@ export default {
padding: 4px 0; padding: 4px 0;
.el-radio-button__inner { .el-radio-button__inner {
color: var(--el-text-color); color: var(--color-text-primary);
background-color: #FFF; background-color: #FFF;
border-radius: 4px; border-radius: 4px;
box-shadow: 0 1px 2px rgba(31 35 41 / 12%) !important; box-shadow: 0 1px 2px rgba(31 35 41 / 12%) !important;

View File

@ -139,11 +139,11 @@ export default {
.el-steps { .el-steps {
.el-step__main .el-step__title { .el-step__main .el-step__title {
color: var(--el-text-color); color: var(--color-text-primary);
} }
.el-step__main .el-step__description { .el-step__main .el-step__description {
color: var(--el-form-tip-text-color); color: var(--color-help-text);
} }
} }
</style> </style>

View File

@ -92,7 +92,7 @@ li {
text-overflow: ellipsis; text-overflow: ellipsis;
.title { .title {
color: var(--el-text-color); color: var(--color-text-primary);
} }
} }
} }