|
|
@@ -1,42 +1,59 @@
|
|
|
import { message } from 'antd';
|
|
|
+import defaultSetting from '../defaultSetting';
|
|
|
|
|
|
-const defaultSetting = {
|
|
|
- collapse: false,
|
|
|
- silderTheme: 'dark',
|
|
|
- themeColor: '#1890FF',
|
|
|
- layout: 'sidemenu',
|
|
|
- grid: 'Fluid',
|
|
|
- fixedHeader: false,
|
|
|
- autoHideHeader: false,
|
|
|
- fixSiderbar: false,
|
|
|
- colorWeak: false,
|
|
|
-};
|
|
|
-
|
|
|
-const buildLessAndWeak = (themeColor, colorWeak) => {
|
|
|
+let lessNodesAppended;
|
|
|
+const buildSettings = (themeColor, colorWeak) => {
|
|
|
+ document.body.className = colorWeak ? 'colorWeak' : '';
|
|
|
// Determine if the component is remounted
|
|
|
- if (themeColor && themeColor !== '#1890FF' && themeColor !== window['antd_pro_less_color']) {
|
|
|
- window.less.refresh().then(() => {
|
|
|
- const hideMessage = message.loading('正在编译主题!', 0);
|
|
|
- setTimeout(() => {
|
|
|
- window.less
|
|
|
- .modifyVars({
|
|
|
- '@primary-color': themeColor,
|
|
|
- '@input-hover-border-color': themeColor,
|
|
|
- })
|
|
|
- .then(() => {
|
|
|
- window['antd_pro_less_color'] = themeColor;
|
|
|
- hideMessage();
|
|
|
- })
|
|
|
- .catch(() => {
|
|
|
- message.error(`Failed to update theme`);
|
|
|
- });
|
|
|
- }, 200);
|
|
|
- });
|
|
|
+ if (!themeColor || themeColor === '#1890FF' || themeColor === window['antd_pro_less_color']) {
|
|
|
+ return;
|
|
|
}
|
|
|
- if (colorWeak) {
|
|
|
- document.body.className = 'colorWeak';
|
|
|
+ const hideMessage = message.loading('正在编译主题!', 0);
|
|
|
+ if (!lessNodesAppended) {
|
|
|
+ console.log('append less nodes');
|
|
|
+ const lessStyleNode = document.createElement('link');
|
|
|
+ const lessConfigNode = document.createElement('script');
|
|
|
+ const lessScriptNode = document.createElement('script');
|
|
|
+ lessStyleNode.setAttribute('rel', 'stylesheet/less');
|
|
|
+ lessStyleNode.setAttribute('href', '/color.less');
|
|
|
+ lessConfigNode.innerHTML = `
|
|
|
+ window.less = {
|
|
|
+ async: true,
|
|
|
+ env: 'production',
|
|
|
+ javascriptEnabled: true
|
|
|
+ };
|
|
|
+ `;
|
|
|
+ lessScriptNode.src = 'https://gw.alipayobjects.com/os/lib/less.js/3.8.1/less.min.js';
|
|
|
+ lessScriptNode.async = true;
|
|
|
+ lessScriptNode.onload = () => {
|
|
|
+ buildIt();
|
|
|
+ lessScriptNode.onload = null;
|
|
|
+ };
|
|
|
+ document.head.appendChild(lessStyleNode);
|
|
|
+ document.head.appendChild(lessConfigNode);
|
|
|
+ document.head.appendChild(lessScriptNode);
|
|
|
+ lessNodesAppended = true;
|
|
|
} else {
|
|
|
- document.body.className = '';
|
|
|
+ buildIt();
|
|
|
+ }
|
|
|
+ function buildIt() {
|
|
|
+ if (!window.less) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ window.less
|
|
|
+ .modifyVars({
|
|
|
+ '@primary-color': themeColor,
|
|
|
+ '@input-hover-border-color': themeColor,
|
|
|
+ })
|
|
|
+ .then(() => {
|
|
|
+ console.log('start to compile');
|
|
|
+ window['antd_pro_less_color'] = themeColor;
|
|
|
+ hideMessage();
|
|
|
+ })
|
|
|
+ .catch(() => {
|
|
|
+ message.error(`Failed to update theme`);
|
|
|
+ hideMessage();
|
|
|
+ });
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -54,7 +71,7 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
const { themeColor, colorWeak } = setting;
|
|
|
- buildLessAndWeak(themeColor, colorWeak);
|
|
|
+ buildSettings(themeColor, colorWeak);
|
|
|
return {
|
|
|
...state,
|
|
|
...setting,
|
|
|
@@ -80,7 +97,7 @@ export default {
|
|
|
}
|
|
|
});
|
|
|
const { themeColor, colorWeak } = payload;
|
|
|
- buildLessAndWeak(themeColor, colorWeak);
|
|
|
+ buildSettings(themeColor, colorWeak);
|
|
|
window.history.replaceState(null, 'setting', urlParams.href);
|
|
|
return {
|
|
|
...state,
|