xiaoxian521
3 years ago
11 changed files with 197 additions and 20 deletions
-
2package.json
-
62pnpm-lock.yaml
-
23src/layout/components/setting/index.vue
-
2src/router/index.ts
-
2src/router/types.ts
-
6src/router/utils.ts
-
25src/store/modules/epTheme.ts
-
15src/store/modules/multiTags.ts
-
7src/store/modules/permission.ts
-
2src/store/modules/types.ts
-
71src/utils/theme/index.ts
@ -29,6 +29,7 @@ specifiers: |
|||||
axios: ^0.21.1 |
axios: ^0.21.1 |
||||
babel-plugin-transform-remove-console: 6.9.4 |
babel-plugin-transform-remove-console: 6.9.4 |
||||
cross-env: 7.0.3 |
cross-env: 7.0.3 |
||||
|
css-color-function: ^1.3.3 |
||||
dayjs: ^1.10.7 |
dayjs: ^1.10.7 |
||||
element-plus: 1.2.0-beta.6 |
element-plus: 1.2.0-beta.6 |
||||
element-resize-detector: ^1.2.3 |
element-resize-detector: ^1.2.3 |
||||
@ -53,6 +54,7 @@ specifiers: |
|||||
remixicon: ^2.5.0 |
remixicon: ^2.5.0 |
||||
resize-observer-polyfill: ^1.5.1 |
resize-observer-polyfill: ^1.5.1 |
||||
responsive-storage: ^1.0.11 |
responsive-storage: ^1.0.11 |
||||
|
rgb-hex: ^4.0.0 |
||||
rimraf: 3.0.2 |
rimraf: 3.0.2 |
||||
sass: ^1.45.0 |
sass: ^1.45.0 |
||||
sass-loader: ^12.3.0 |
sass-loader: ^12.3.0 |
||||
@ -82,6 +84,7 @@ dependencies: |
|||||
"@vueuse/motion": 2.0.0-[email protected] |
"@vueuse/motion": 2.0.0-[email protected] |
||||
animate.css: 4.1.1 |
animate.css: 4.1.1 |
||||
axios: 0.21.4 |
axios: 0.21.4 |
||||
|
css-color-function: 1.3.3 |
||||
dayjs: 1.10.7 |
dayjs: 1.10.7 |
||||
element-plus: 1.2.0-[email protected] |
element-plus: 1.2.0-[email protected] |
||||
element-resize-detector: 1.2.3 |
element-resize-detector: 1.2.3 |
||||
@ -97,6 +100,7 @@ dependencies: |
|||||
remixicon: 2.5.0 |
remixicon: 2.5.0 |
||||
resize-observer-polyfill: 1.5.1 |
resize-observer-polyfill: 1.5.1 |
||||
responsive-storage: 1.0[email protected] |
responsive-storage: 1.0[email protected] |
||||
|
rgb-hex: 4.0.0 |
||||
vue: 3.2.24 |
vue: 3.2.24 |
||||
vue-i18n: 9.2.0-[email protected] |
vue-i18n: 9.2.0-[email protected] |
||||
vue-router: 4.0[email protected] |
vue-router: 4.0[email protected] |
||||
@ -1867,6 +1871,10 @@ packages: |
|||||
} |
} |
||||
dev: true |
dev: true |
||||
|
|
||||
|
/balanced-match/0.1.0: |
||||
|
resolution: { integrity: sha1-tQS9BYabOSWd0MXvw12EMXbczEo= } |
||||
|
dev: false |
||||
|
|
||||
/balanced-match/1.0.2: |
/balanced-match/1.0.2: |
||||
resolution: |
resolution: |
||||
{ |
{ |
||||
@ -2192,6 +2200,11 @@ packages: |
|||||
is-regexp: 2.1.0 |
is-regexp: 2.1.0 |
||||
dev: true |
dev: true |
||||
|
|
||||
|
/clone/1.0.4: |
||||
|
resolution: { integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4= } |
||||
|
engines: { node: ">=0.8" } |
||||
|
dev: false |
||||
|
|
||||
/clone/2.1.2: |
/clone/2.1.2: |
||||
resolution: { integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= } |
resolution: { integrity: sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= } |
||||
engines: { node: ">=0.8" } |
engines: { node: ">=0.8" } |
||||
@ -2204,7 +2217,6 @@ packages: |
|||||
} |
} |
||||
dependencies: |
dependencies: |
||||
color-name: 1.1.3 |
color-name: 1.1.3 |
||||
dev: true |
|
||||
|
|
||||
/color-convert/2.0.1: |
/color-convert/2.0.1: |
||||
resolution: |
resolution: |
||||
@ -2218,14 +2230,18 @@ packages: |
|||||
|
|
||||
/color-name/1.1.3: |
/color-name/1.1.3: |
||||
resolution: { integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= } |
resolution: { integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= } |
||||
dev: true |
|
||||
|
|
||||
/color-name/1.1.4: |
/color-name/1.1.4: |
||||
resolution: |
resolution: |
||||
{ |
{ |
||||
integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== |
integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== |
||||
} |
} |
||||
dev: true |
|
||||
|
|
||||
|
/color-string/0.3.0: |
||||
|
resolution: { integrity: sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE= } |
||||
|
dependencies: |
||||
|
color-name: 1.1.4 |
||||
|
dev: false |
||||
|
|
||||
/color-string/1.9.0: |
/color-string/1.9.0: |
||||
resolution: |
resolution: |
||||
@ -2237,6 +2253,14 @@ packages: |
|||||
simple-swizzle: 0.2.2 |
simple-swizzle: 0.2.2 |
||||
dev: true |
dev: true |
||||
|
|
||||
|
/color/0.11.4: |
||||
|
resolution: { integrity: sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q= } |
||||
|
dependencies: |
||||
|
clone: 1.0.4 |
||||
|
color-convert: 1.9.3 |
||||
|
color-string: 0.3.0 |
||||
|
dev: false |
||||
|
|
||||
/color/4.1.0: |
/color/4.1.0: |
||||
resolution: |
resolution: |
||||
{ |
{ |
||||
@ -2422,6 +2446,15 @@ packages: |
|||||
which: 2.0.2 |
which: 2.0.2 |
||||
dev: true |
dev: true |
||||
|
|
||||
|
/css-color-function/1.3.3: |
||||
|
resolution: { integrity: sha1-jtJMLAIFBzM5+voAS8jBQfzLKC4= } |
||||
|
dependencies: |
||||
|
balanced-match: 0.1.0 |
||||
|
color: 0.11.4 |
||||
|
debug: 3.2.7 |
||||
|
rgb: 0.1.0 |
||||
|
dev: false |
||||
|
|
||||
/css-declaration-sorter/[email protected]: |
/css-declaration-sorter/[email protected]: |
||||
resolution: |
resolution: |
||||
{ |
{ |
||||
@ -2602,6 +2635,15 @@ packages: |
|||||
ms: 2.0.0 |
ms: 2.0.0 |
||||
dev: true |
dev: true |
||||
|
|
||||
|
/debug/3.2.7: |
||||
|
resolution: |
||||
|
{ |
||||
|
integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== |
||||
|
} |
||||
|
dependencies: |
||||
|
ms: 2.1.2 |
||||
|
dev: false |
||||
|
|
||||
/debug/4.3.2: |
/debug/4.3.2: |
||||
resolution: |
resolution: |
||||
{ |
{ |
||||
@ -4731,7 +4773,6 @@ packages: |
|||||
{ |
{ |
||||
integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== |
integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== |
||||
} |
} |
||||
dev: true |
|
||||
|
|
||||
/multimatch/4.0.0: |
/multimatch/4.0.0: |
||||
resolution: |
resolution: |
||||
@ -6016,6 +6057,19 @@ packages: |
|||||
engines: { iojs: ">=1.0.0", node: ">=0.10.0" } |
engines: { iojs: ">=1.0.0", node: ">=0.10.0" } |
||||
dev: true |
dev: true |
||||
|
|
||||
|
/rgb-hex/4.0.0: |
||||
|
resolution: |
||||
|
{ |
||||
|
integrity: sha512-Eg2ev5CiMBnQ9Gpflmqbwbso0CCdISqtVIow7OpYSLN1ULUv2jTB9YieS1DSSn/17AD7KkPWDPzSFzI4GSuu/Q== |
||||
|
} |
||||
|
engines: { node: ">=12" } |
||||
|
dev: false |
||||
|
|
||||
|
/rgb/0.1.0: |
||||
|
resolution: { integrity: sha1-vieykej+/+rBvZlylyG/pA/AN7U= } |
||||
|
hasBin: true |
||||
|
dev: false |
||||
|
|
||||
/rimraf/3.0.2: |
/rimraf/3.0.2: |
||||
resolution: |
resolution: |
||||
{ |
{ |
||||
|
@ -0,0 +1,25 @@ |
|||||
|
import { store } from "/@/store"; |
||||
|
import { defineStore } from "pinia"; |
||||
|
import { storageLocal } from "/@/utils/storage"; |
||||
|
|
||||
|
export const useEpThemeStore = defineStore({ |
||||
|
id: "pure-epTheme", |
||||
|
state: () => ({ |
||||
|
epThemeColor: storageLocal.getItem("epThemeColor") || "#409EFF" |
||||
|
}), |
||||
|
getters: { |
||||
|
getEpThemeColor() { |
||||
|
return this.epThemeColor; |
||||
|
} |
||||
|
}, |
||||
|
actions: { |
||||
|
setEpThemeColor(newColor) { |
||||
|
this.epThemeColor = newColor; |
||||
|
storageLocal.setItem("epThemeColor", newColor); |
||||
|
} |
||||
|
} |
||||
|
}); |
||||
|
|
||||
|
export function useEpThemeStoreHook() { |
||||
|
return useEpThemeStore(store); |
||||
|
} |
@ -0,0 +1,71 @@ |
|||||
|
import rgbHex from "rgb-hex"; |
||||
|
import color from "css-color-function"; |
||||
|
import epCss from "element-plus/dist/index.css"; |
||||
|
|
||||
|
const formula = { |
||||
|
"shade-1": "color(primary shade(10%))", |
||||
|
"light-1": "color(primary tint(10%))", |
||||
|
"light-2": "color(primary tint(20%))", |
||||
|
"light-3": "color(primary tint(30%))", |
||||
|
"light-4": "color(primary tint(40%))", |
||||
|
"light-5": "color(primary tint(50%))", |
||||
|
"light-6": "color(primary tint(60%))", |
||||
|
"light-7": "color(primary tint(70%))", |
||||
|
"light-8": "color(primary tint(80%))", |
||||
|
"light-9": "color(primary tint(90%))" |
||||
|
}; |
||||
|
|
||||
|
export const writeNewStyle = newStyle => { |
||||
|
const style = window.document.createElement("style"); |
||||
|
style.innerText = newStyle; |
||||
|
window.document.head.appendChild(style); |
||||
|
}; |
||||
|
|
||||
|
export const createNewStyle = primaryStyle => { |
||||
|
const colors = createColors(primaryStyle); |
||||
|
let cssText = getOriginStyle(); |
||||
|
Object.keys(colors).forEach(key => { |
||||
|
cssText = cssText.replace( |
||||
|
new RegExp("(:|\\s+)" + key, "g"), |
||||
|
"$1" + colors[key] |
||||
|
); |
||||
|
}); |
||||
|
return cssText; |
||||
|
}; |
||||
|
|
||||
|
export const createColors = primary => { |
||||
|
if (!primary) return; |
||||
|
const colors = { |
||||
|
primary |
||||
|
}; |
||||
|
Object.keys(formula).forEach(key => { |
||||
|
const value = formula[key].replace(/primary/, primary); |
||||
|
colors[key] = "#" + rgbHex(color.convert(value)); |
||||
|
}); |
||||
|
return colors; |
||||
|
}; |
||||
|
|
||||
|
export const getOriginStyle = () => { |
||||
|
return getStyleTemplate(epCss); |
||||
|
}; |
||||
|
|
||||
|
const getStyleTemplate = data => { |
||||
|
const colorMap = { |
||||
|
"#3a8ee6": "shade-1", |
||||
|
"#409eff": "primary", |
||||
|
"#53a8ff": "light-1", |
||||
|
"#66b1ff": "light-2", |
||||
|
"#79bbff": "light-3", |
||||
|
"#8cc5ff": "light-4", |
||||
|
"#a0cfff": "light-5", |
||||
|
"#b3d8ff": "light-6", |
||||
|
"#c6e2ff": "light-7", |
||||
|
"#d9ecff": "light-8", |
||||
|
"#ecf5ff": "light-9" |
||||
|
}; |
||||
|
Object.keys(colorMap).forEach(key => { |
||||
|
const value = colorMap[key]; |
||||
|
data = data.replace(new RegExp(key, "ig"), value); |
||||
|
}); |
||||
|
return data; |
||||
|
}; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue