themeConfig.ts 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { generate } from '@ant-design/colors';
  2. export const primaryColor = '#1890ff';
  3. export const darkMode = 'light';
  4. type Fn = (...arg: any) => any;
  5. type GenerateTheme = 'default' | 'dark';
  6. export interface GenerateColorsParams {
  7. mixLighten?: Fn;
  8. mixDarken?: Fn;
  9. tinycolor?: any;
  10. color?: string;
  11. }
  12. export function generateAntColors(color: string, theme: GenerateTheme = 'default') {
  13. return generate(color, {
  14. theme,
  15. });
  16. }
  17. export function getThemeColors(color?: string) {
  18. const tc = color || primaryColor;
  19. const lightColors = generateAntColors(tc);
  20. const primary = lightColors[5];
  21. const modeColors = generateAntColors(primary, 'dark');
  22. return [...lightColors, ...modeColors];
  23. }
  24. /** hex转rgb */
  25. function hexToRgb(str) {
  26. const hxs = str.replace('#', '').match(/../g);
  27. for (let i = 0; i < 3; i++) hxs[i] = parseInt(hxs[i], 16);
  28. return hxs;
  29. }
  30. /** rgb转hex */
  31. function rgbToHex(a, b, c) {
  32. const hexs = [a.toString(16), b.toString(16), c.toString(16)];
  33. for (let i = 0; i < 3; i++) {
  34. if (hexs[i].length == 1) hexs[i] = `0${hexs[i]}`;
  35. }
  36. return `#${hexs.join('')}`;
  37. }
  38. /** 加深颜色值 */
  39. export function mixDarken(color, level) {
  40. const rgbc = hexToRgb(color);
  41. for (let i = 0; i < 3; i++) rgbc[i] = Math.floor(rgbc[i] * (1 - level));
  42. return rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
  43. }
  44. /** 变浅颜色值 */
  45. export function mixLighten(color, level) {
  46. const rgbc = hexToRgb(color);
  47. for (let i = 0; i < 3; i++) rgbc[i] = Math.floor((255 - rgbc[i]) * level + rgbc[i]);
  48. return rgbToHex(rgbc[0], rgbc[1], rgbc[2]);
  49. }
  50. // export function generateColors({ color = primaryColor, tinycolor }: GenerateColorsParams) {
  51. export function generateColors({ color = primaryColor }: GenerateColorsParams) {
  52. const arr = new Array(19).fill(0);
  53. const lightens = arr.map((_t, i) => {
  54. return mixLighten(color, i / 5);
  55. });
  56. const darkens = arr.map((_t, i) => {
  57. return mixDarken(color, i / 5);
  58. });
  59. // const alphaColors = arr.map((_t, i) => {
  60. // return tinycolor(color)
  61. // .setAlpha(i / 20)
  62. // .toRgbString();
  63. // });
  64. // const shortAlphaColors = alphaColors.map(item => item.replace(/\s/g, '').replace(/0\./g, '.'));
  65. // const tinycolorLightens = arr
  66. // .map((_t, i) => {
  67. // return tinycolor(color)
  68. // .lighten(i * 5)
  69. // .toHexString();
  70. // })
  71. // .filter(item => item !== '#ffffff');
  72. // const tinycolorDarkens = arr
  73. // .map((_t, i) => {
  74. // return tinycolor(color)
  75. // .darken(i * 5)
  76. // .toHexString();
  77. // })
  78. // .filter(item => item !== '#000000');
  79. return [
  80. ...lightens,
  81. ...darkens,
  82. // ...alphaColors,
  83. // ...shortAlphaColors,
  84. // ...tinycolorDarkens,
  85. // ...tinycolorLightens,
  86. ].filter(item => !item.includes('-'));
  87. }