transStyle.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /**
  2. * 转换样式对象
  3. * @param style
  4. */
  5. export function transformStyle(style: Record<string, any>) {
  6. const styleObj: Record<string, any> = {};
  7. for (const key in style) {
  8. if (typeof style[key] === "object") {
  9. switch (key) {
  10. // 背景色对象
  11. case "background":
  12. if (style[key].type === "none") styleObj[key] = "none";
  13. if (style[key].type === "color") styleObj[key] = style[key].color;
  14. if (style[key].type === "image") {
  15. styleObj[
  16. key + "-image"
  17. ] = `url(${style[key].image}) no-repeat center center`;
  18. styleObj[key + "-size"] = style[key].fillType;
  19. }
  20. break;
  21. // 颜色对象
  22. case "border":
  23. if (style[key].type === "none") styleObj[key] = "none";
  24. else
  25. styleObj[
  26. key
  27. ] = `${style[key].width}px ${style[key].type} ${style[key].color}`;
  28. break;
  29. // 边框对象
  30. case "borderRadius":
  31. if (style[key].type === "all")
  32. styleObj[key] = `${style[key].value}${style[key].unit}`;
  33. else
  34. styleObj[
  35. key
  36. ] = `${style[key].topLeft}${style[key].unit} ${style[key].topRight}${style[key].unit} ${style[key].bottomLeft}${style[key].unit} ${style[key].bottomRight}${style[key].unit}`;
  37. break;
  38. // 阴影对象
  39. case "boxShadow":
  40. if (style[key].enabled) {
  41. styleObj[key] = `${style[key].offsetX}px ${style[key].offsetY}px ${
  42. style[key].blurRadius
  43. }px ${style[key].spreadRadius}px ${style[key].color} ${
  44. style[key].inset ? "inset" : ""
  45. }`;
  46. }
  47. break;
  48. // 毛玻璃对象
  49. case "backdropFilter":
  50. if (style[key].enabled) styleObj[key] = `blur(${style[key].blur}px)`;
  51. break;
  52. }
  53. } else if (typeof style[key] === "number") {
  54. styleObj[key] = style[key] + "px";
  55. } else if (typeof style[key] === "string") {
  56. styleObj[key] = style[key];
  57. }
  58. }
  59. return styleObj;
  60. }