@ovine/core
Version:
Build flexible admin system with json.
51 lines (50 loc) • 1.64 kB
JavaScript
import { theme as setAmisTheme, setDefaultTheme } from 'amis';
import { app } from "../app";
import { storage, message } from "../constants";
import { publish } from "../utils/message";
import { setStore, getStore } from "../utils/store";
export const dispatchLink = (theme, callback) => {
// 当开启 scss 编译时,才会每次热更新更新文件,主要用于主题调试
setDefaultTheme(theme);
if (window.IS_SCSS_UPDATE) {
require(`@generated/styles/themes/${theme}.css`);
if (callback) {
callback();
}
return;
}
$('head link[data-theme]').remove();
const linkAttr = {
rel: 'stylesheet',
type: 'text/css',
'data-theme': theme,
onLoad: callback,
href: require(`@generated/styles/themes/${theme}.css`),
};
$('<link/>', linkAttr).appendTo('head');
};
export const changeAppTheme = (theme) => {
const $body = $('body');
$body.removeClass('is-modalOpened').css('opacity', 0);
dispatchLink(theme, () => {
publish(message.appTheme, theme);
setStore(storage.appTheme, theme);
setTimeout(() => {
$body.css('opacity', 1);
}, 300);
});
};
export const initAppTheme = () => {
const theme = getStore(storage.appTheme) || 'cxd';
if (window.IS_SCSS_UPDATE) {
dispatchLink(theme);
}
// 非amis主题 都需要注册
Object.values(app.theme.getAllThemes())
.filter((item) => !/ang|cxd|antd|dark/.test(item.name))
.forEach((item) => {
setAmisTheme(item.name, {
classPrefix: item.ns,
});
});
};