|
|
|
@ -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, |
|
|
|
|