You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

674 lines
22 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.getFormatMessage = void 0;
require("antd/es/drawer/style");
var _drawer = _interopRequireDefault(require("antd/es/drawer"));
require("antd/es/button/style");
var _button = _interopRequireDefault(require("antd/es/button"));
require("antd/es/alert/style");
var _alert = _interopRequireDefault(require("antd/es/alert"));
require("antd/es/list/style");
var _list = _interopRequireDefault(require("antd/es/list"));
require("antd/es/switch/style");
var _switch = _interopRequireDefault(require("antd/es/switch"));
require("antd/es/divider/style");
var _divider = _interopRequireDefault(require("antd/es/divider"));
require("antd/es/message/style");
var _message2 = _interopRequireDefault(require("antd/es/message"));
require("./index.less");
var _icons = require("@ant-design/icons");
var _proUtils = require("@ant-design/pro-utils");
var _history = require("history");
var _qs = require("qs");
var _react = _interopRequireWildcard(require("react"));
var _reactCopyToClipboard = _interopRequireDefault(require("react-copy-to-clipboard"));
var _useMergedState5 = _interopRequireDefault(require("rc-util/lib/hooks/useMergedState"));
var _omit = _interopRequireDefault(require("omit.js"));
var _defaultSettings = _interopRequireDefault(require("../defaultSettings"));
var _BlockCheckbox = _interopRequireDefault(require("./BlockCheckbox"));
var _ThemeColor = _interopRequireDefault(require("./ThemeColor"));
var _locales = _interopRequireWildcard(require("../locales"));
var _utils = require("../utils/utils");
var _LayoutChange = _interopRequireWildcard(require("./LayoutChange"));
var _RegionalChange = _interopRequireDefault(require("./RegionalChange"));
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
var Body = function Body(_ref) {
var children = _ref.children,
prefixCls = _ref.prefixCls,
title = _ref.title;
return /*#__PURE__*/_react.default.createElement("div", {
style: {
marginBottom: 24
}
}, /*#__PURE__*/_react.default.createElement("h3", {
className: "".concat(prefixCls, "-drawer-title")
}, title), children);
};
var oldSetting = {};
var getDifferentSetting = function getDifferentSetting(state) {
var stateObj = {};
Object.keys(state).forEach(function (key) {
if (state[key] !== oldSetting[key] && key !== 'collapse') {
stateObj[key] = state[key];
}
if (key.includes('Render')) {
stateObj[key] = state[key] === 'false' || state[key] === false ? false : undefined;
}
});
delete stateObj.menu;
return stateObj;
};
var getFormatMessage = function getFormatMessage() {
var formatMessage = function formatMessage(_ref2) {
var id = _ref2.id,
defaultMessage = _ref2.defaultMessage;
var locales = (0, _locales.default)();
if (locales[id]) {
return locales[id];
}
if (defaultMessage) {
return defaultMessage;
}
return id;
};
return formatMessage;
};
exports.getFormatMessage = getFormatMessage;
var updateTheme = function updateTheme(dark, color) {
var hideMessageLoading = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var publicPath = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '/theme';
// ssr
if (typeof window === 'undefined' || !window.umi_plugin_ant_themeVar) {
return;
}
var formatMessage = getFormatMessage();
var hide = function hide() {
return null;
};
if (!hideMessageLoading) {
hide = _message2.default.loading(formatMessage({
id: 'app.setting.loading',
defaultMessage: '正在加载主题'
}));
}
var href = dark ? "".concat(publicPath, "/dark") : "".concat(publicPath, "/"); // 如果是 dark并且是 color=daybreak无需进行拼接
var colorFileName = dark && color ? "-".concat(encodeURIComponent(color)) : encodeURIComponent(color || '');
if (color === 'daybreak' && dark) {
colorFileName = '';
}
var dom = document.getElementById('theme-style'); // 如果这两个都是空
if (!href && !colorFileName) {
if (dom) {
dom.remove();
localStorage.removeItem('site-theme');
}
return;
}
var url = "".concat(href).concat(colorFileName || '', ".css");
if (dom) {
dom.onload = function () {
window.setTimeout(function () {
hide();
});
};
dom.href = url;
} else {
var style = document.createElement('link');
style.type = 'text/css';
style.rel = 'stylesheet';
style.id = 'theme-style';
style.onload = function () {
window.setTimeout(function () {
hide();
});
};
style.href = url;
if (document.body.append) {
document.body.append(style);
} else {
document.body.appendChild(style);
}
}
localStorage.setItem('site-theme', dark ? 'dark' : 'light');
};
var getThemeList = function getThemeList(settings) {
var formatMessage = getFormatMessage();
var list = window.umi_plugin_ant_themeVar || [];
var themeList = [{
key: 'light',
url: 'https://gw.alipayobjects.com/zos/antfincdn/NQ%24zoisaD2/jpRkZQMyYRryryPNtyIC.svg',
title: formatMessage({
id: 'app.setting.pagestyle.light'
})
}];
var darkColorList = [{
key: 'daybreak',
color: '#1890ff',
theme: 'dark'
}];
var lightColorList = [{
key: 'daybreak',
color: '#1890ff',
theme: 'dark'
}];
if (settings.layout !== 'mix') {
themeList.push({
key: 'dark',
url: 'https://gw.alipayobjects.com/zos/antfincdn/XwFOFbLkSM/LCkqqYNmvBEbokSDscrm.svg',
title: formatMessage({
id: 'app.setting.pagestyle.dark',
defaultMessage: ''
})
});
}
if (list.find(function (item) {
return item.theme === 'dark';
})) {
themeList.push({
key: 'realDark',
url: 'https://gw.alipayobjects.com/zos/antfincdn/hmKaLQvmY2/LCkqqYNmvBEbokSDscrm.svg',
title: formatMessage({
id: 'app.setting.pagestyle.dark',
defaultMessage: ''
})
});
} // insert theme color List
list.forEach(function (item) {
var color = (item.modifyVars || {})['@primary-color'];
if (item.theme === 'dark' && color) {
darkColorList.push(_objectSpread({
color: color
}, item));
}
if (!item.theme || item.theme === 'light') {
lightColorList.push(_objectSpread({
color: color
}, item));
}
});
return {
colorList: {
dark: darkColorList,
light: lightColorList
},
themeList: themeList
};
};
/**
* 初始化的时候需要做的工作
* @param param0
*/
var initState = function initState(settings, onSettingChange, publicPath) {
if (!(0, _proUtils.isBrowser)()) {
return;
}
var loadedStyle = false;
if (window.location.search) {
var params = (0, _qs.parse)(window.location.search.replace('?', ''));
var replaceSetting = {};
Object.keys(params).forEach(function (key) {
if (_defaultSettings.default[key] || _defaultSettings.default[key] === undefined) {
replaceSetting[key] = params[key];
if (key.includes('Render')) {
replaceSetting[key] = params[key] === 'false' ? false : undefined;
}
}
});
if (onSettingChange) {
onSettingChange(_objectSpread(_objectSpread({}, settings), replaceSetting));
} // 如果 url 中设置主题,进行一次加载。
if (oldSetting.navTheme !== params.navTheme && params.navTheme) {
updateTheme(settings.navTheme === 'realDark', params.primaryColor, true, publicPath);
loadedStyle = true;
}
}
if (loadedStyle) {
return;
} // 如果 url 中没有设置主题,并且 url 中的没有加载,进行一次加载。
if (_defaultSettings.default.navTheme !== settings.navTheme && settings.navTheme) {
updateTheme(settings.navTheme === 'realDark', settings.primaryColor, true, publicPath);
}
};
var getParamsFromUrl = function getParamsFromUrl(settings) {
if (!(0, _proUtils.isBrowser)()) {
return _defaultSettings.default;
} // 第一次进入与 浏览器参数同步一下
var params = {};
if (window.location.search) {
params = (0, _qs.parse)(window.location.search.replace('?', ''));
}
return _objectSpread(_objectSpread(_objectSpread({}, _defaultSettings.default), settings || {}), params);
};
var genCopySettingJson = function genCopySettingJson(settingState) {
return JSON.stringify((0, _omit.default)(_objectSpread(_objectSpread({}, settingState), {}, {
primaryColor: (0, _utils.genStringToTheme)(settingState.primaryColor)
}), ['colorWeak']), null, 2);
};
/**
* 可视化配置组件
* @param props
*/
var SettingDrawer = function SettingDrawer(props) {
var _props$settings = props.settings,
propsSettings = _props$settings === void 0 ? undefined : _props$settings,
_props$hideLoading = props.hideLoading,
hideLoading = _props$hideLoading === void 0 ? false : _props$hideLoading,
hideColors = props.hideColors,
hideHintAlert = props.hideHintAlert,
hideCopyButton = props.hideCopyButton,
getContainer = props.getContainer,
onSettingChange = props.onSettingChange,
_props$prefixCls = props.prefixCls,
prefixCls = _props$prefixCls === void 0 ? 'ant-pro' : _props$prefixCls;
var firstRender = (0, _react.useRef)(true);
var _useMergedState = (0, _useMergedState5.default)(false, {
value: props.collapse,
onChange: props.onCollapseChange
}),
_useMergedState2 = _slicedToArray(_useMergedState, 2),
show = _useMergedState2[0],
setShow = _useMergedState2[1];
var _useState = (0, _react.useState)((0, _locales.getLanguage)()),
_useState2 = _slicedToArray(_useState, 2),
language = _useState2[0],
setLanguage = _useState2[1];
var _useMergedState3 = (0, _useMergedState5.default)(function () {
return getParamsFromUrl(propsSettings);
}, {
value: propsSettings,
onChange: onSettingChange
}),
_useMergedState4 = _slicedToArray(_useMergedState3, 2),
settingState = _useMergedState4[0],
setSettingState = _useMergedState4[1];
var preStateRef = (0, _react.useRef)(settingState);
var _ref3 = settingState || {},
_ref3$navTheme = _ref3.navTheme,
navTheme = _ref3$navTheme === void 0 ? 'dark' : _ref3$navTheme,
_ref3$primaryColor = _ref3.primaryColor,
primaryColor = _ref3$primaryColor === void 0 ? 'daybreak' : _ref3$primaryColor,
_ref3$layout = _ref3.layout,
layout = _ref3$layout === void 0 ? 'sidemenu' : _ref3$layout,
colorWeak = _ref3.colorWeak;
(0, _react.useEffect)(function () {
// 语言修改,这个是和 locale 是配置起来的
var onLanguageChange = function onLanguageChange() {
if (language !== (0, _locales.getLanguage)()) {
setLanguage((0, _locales.getLanguage)());
}
}; // 记住默认的选择,方便做 diff然后保存到 url 参数中
oldSetting = _objectSpread(_objectSpread({}, _defaultSettings.default), propsSettings);
/**
* 如果不是浏览器 都没有必要做了
*/
if (!(0, _proUtils.isBrowser)()) {
return function () {
return null;
};
}
initState(settingState, setSettingState, props.publicPath);
window.addEventListener('languagechange', onLanguageChange, {
passive: true
});
return function () {
return window.removeEventListener('languagechange', onLanguageChange);
};
}, []);
/**
* 修改设置
* @param key
* @param value
* @param hideMessageLoading
*/
var changeSetting = function changeSetting(key, value, hideMessageLoading) {
var nextState = _objectSpread({}, preStateRef.current);
nextState[key] = value;
if (key === 'navTheme') {
updateTheme(value === 'realDark', undefined, hideMessageLoading, props.publicPath);
nextState.primaryColor = 'daybreak';
}
if (key === 'primaryColor') {
updateTheme(nextState.navTheme === 'realDark', value === 'daybreak' ? '' : value, hideMessageLoading, props.publicPath);
}
if (key === 'layout') {
nextState.contentWidth = value === 'top' ? 'Fixed' : 'Fluid';
}
if (key === 'layout' && value !== 'mix') {
nextState.splitMenus = false;
}
if (key === 'layout' && value === 'mix') {
nextState.navTheme = 'light';
}
if (key === 'colorWeak' && value === true) {
var dom = document.querySelector('body div');
if (!dom) {
return;
}
dom.dataset.prosettingdrawer = dom.style.filter;
dom.style.filter = 'invert(80%)';
}
if (key === 'colorWeak' && value === false) {
var _dom = document.querySelector('body div');
if (!_dom) {
return;
}
_dom.style.filter = _dom.dataset.prosettingdrawer || 'none';
delete _dom.dataset.prosettingdrawer;
}
preStateRef.current = nextState;
setSettingState(nextState);
};
var formatMessage = getFormatMessage();
var themeList = getThemeList(settingState);
(0, _react.useEffect)(function () {
/**
* 如果不是浏览器 都没有必要做了
*/
if (!(0, _proUtils.isBrowser)()) {
return;
}
if (firstRender.current) {
firstRender.current = false;
return;
}
var browserHistory = (0, _history.createBrowserHistory)();
var params = {};
if (window.location.search) {
params = (0, _qs.parse)(window.location.search.replace('?', ''));
}
var diffParams = getDifferentSetting(_objectSpread(_objectSpread({}, params), settingState));
if (Object.keys(settingState).length < 1) {
return;
}
browserHistory.replace({
search: (0, _qs.stringify)(diffParams)
});
}, [JSON.stringify(settingState)]);
var baseClassName = "".concat(prefixCls, "-setting");
return /*#__PURE__*/_react.default.createElement(_drawer.default, {
visible: show,
width: 300,
onClose: function onClose() {
return setShow(false);
},
placement: "right",
getContainer: getContainer,
handler: /*#__PURE__*/_react.default.createElement("div", {
className: "".concat(baseClassName, "-drawer-handle"),
onClick: function onClick() {
return setShow(!show);
}
}, show ? /*#__PURE__*/_react.default.createElement(_icons.CloseOutlined, {
style: {
color: '#fff',
fontSize: 20
}
}) : /*#__PURE__*/_react.default.createElement(_icons.SettingOutlined, {
style: {
color: '#fff',
fontSize: 20
}
})),
style: {
zIndex: 999
}
}, /*#__PURE__*/_react.default.createElement("div", {
className: "".concat(baseClassName, "-drawer-content")
}, /*#__PURE__*/_react.default.createElement(Body, {
title: formatMessage({
id: 'app.setting.pagestyle',
defaultMessage: 'Page style setting'
}),
prefixCls: baseClassName
}, /*#__PURE__*/_react.default.createElement(_BlockCheckbox.default, {
prefixCls: baseClassName,
list: themeList.themeList,
value: navTheme,
key: "navTheme",
onChange: function onChange(value) {
return changeSetting('navTheme', value, hideLoading);
}
})), /*#__PURE__*/_react.default.createElement(Body, {
title: formatMessage({
id: 'app.setting.themecolor',
defaultMessage: 'Theme color'
}),
prefixCls: baseClassName
}, /*#__PURE__*/_react.default.createElement(_ThemeColor.default, {
value: primaryColor,
colors: hideColors ? [] : themeList.colorList[navTheme === 'realDark' ? 'dark' : 'light'],
formatMessage: formatMessage,
onChange: function onChange(color) {
return changeSetting('primaryColor', color, hideLoading);
}
})), /*#__PURE__*/_react.default.createElement(_divider.default, null), /*#__PURE__*/_react.default.createElement(Body, {
prefixCls: baseClassName,
title: formatMessage({
id: 'app.setting.navigationmode'
})
}, /*#__PURE__*/_react.default.createElement(_BlockCheckbox.default, {
prefixCls: baseClassName,
value: layout,
key: "layout",
list: [{
key: 'side',
url: 'https://gw.alipayobjects.com/zos/antfincdn/XwFOFbLkSM/LCkqqYNmvBEbokSDscrm.svg',
title: formatMessage({
id: 'app.setting.sidemenu'
})
}, {
key: 'top',
url: 'https://gw.alipayobjects.com/zos/antfincdn/URETY8%24STp/KDNDBbriJhLwuqMoxcAr.svg',
title: formatMessage({
id: 'app.setting.topmenu'
})
}, {
key: 'mix',
url: 'https://gw.alipayobjects.com/zos/antfincdn/x8Ob%26B8cy8/LCkqqYNmvBEbokSDscrm.svg',
title: formatMessage({
id: 'app.setting.mixmenu'
})
}],
onChange: function onChange(value) {
return changeSetting('layout', value, hideLoading);
}
})), /*#__PURE__*/_react.default.createElement(_LayoutChange.default, {
settings: settingState,
changeSetting: changeSetting
}), /*#__PURE__*/_react.default.createElement(_divider.default, null), /*#__PURE__*/_react.default.createElement(Body, {
prefixCls: baseClassName,
title: formatMessage({
id: 'app.setting.regionalsettings'
})
}, /*#__PURE__*/_react.default.createElement(_RegionalChange.default, {
settings: settingState,
changeSetting: changeSetting
})), /*#__PURE__*/_react.default.createElement(_divider.default, null), /*#__PURE__*/_react.default.createElement(Body, {
prefixCls: baseClassName,
title: formatMessage({
id: 'app.setting.othersettings'
})
}, /*#__PURE__*/_react.default.createElement(_list.default, {
split: false,
renderItem: _LayoutChange.renderLayoutSettingItem,
dataSource: [{
title: formatMessage({
id: 'app.setting.weakmode'
}),
action: /*#__PURE__*/_react.default.createElement(_switch.default, {
size: "small",
checked: !!colorWeak,
onChange: function onChange(checked) {
return changeSetting('colorWeak', checked);
}
})
}]
})), hideHintAlert && hideCopyButton ? null : /*#__PURE__*/_react.default.createElement(_divider.default, null), hideHintAlert ? null : /*#__PURE__*/_react.default.createElement(_alert.default, {
type: "warning",
message: formatMessage({
id: 'app.setting.production.hint'
}),
icon: /*#__PURE__*/_react.default.createElement(_icons.NotificationOutlined, null),
showIcon: true,
style: {
marginBottom: 16
}
}), hideCopyButton ? null : /*#__PURE__*/_react.default.createElement(_reactCopyToClipboard.default, {
text: genCopySettingJson(settingState),
onCopy: function onCopy() {
return _message2.default.success(formatMessage({
id: 'app.setting.copyinfo'
}));
}
}, /*#__PURE__*/_react.default.createElement(_button.default, {
block: true
}, /*#__PURE__*/_react.default.createElement(_icons.CopyOutlined, null), " ", formatMessage({
id: 'app.setting.copy'
})))));
};
var _default = SettingDrawer;
exports.default = _default;