commonWrapper.vue 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <template>
  2. <view :style="[bottomBgColor]">
  3. <view :style="[boxStyle]">
  4. <slot></slot>
  5. </view>
  6. </view>
  7. </template>
  8. <script>
  9. export default {
  10. name: "commonWrapper",
  11. props: {
  12. config: {
  13. type: Object,
  14. default: () => ({}),
  15. },
  16. },
  17. computed: {
  18. boxStyle() {
  19. const config = this.config || {};
  20. const marginConfig = config.marginConfig || {
  21. val: 0,
  22. valList: [
  23. {
  24. val: 0,
  25. },
  26. {
  27. val: 0,
  28. },
  29. {
  30. val: 0,
  31. },
  32. {
  33. val: 0,
  34. },
  35. ],
  36. };
  37. const paddingConfig = config.paddingConfig || {
  38. val: 0,
  39. valList: [
  40. {
  41. val: 0,
  42. },
  43. {
  44. val: 0,
  45. },
  46. {
  47. val: 0,
  48. },
  49. {
  50. val: 0,
  51. },
  52. ],
  53. };
  54. const componentBgConfig = config.componentBgConfig;
  55. const borderConfig = config.borderConfig;
  56. const shadowConfig = config.shadowConfig;
  57. const fillet = config.fillet;
  58. const zIndexConfig = config.zIndexConfig;
  59. let style = {
  60. overflow: "hidden",
  61. };
  62. // Margin
  63. if (!marginConfig.isAll) {
  64. style["margin"] = `${marginConfig.val * 2}rpx`;
  65. } else {
  66. style["margin-top"] = `${marginConfig.valList[0].val * 2}rpx`;
  67. style["margin-bottom"] = `${marginConfig.valList[2].val * 2}rpx`;
  68. style["margin-left"] = `${marginConfig.valList[3].val * 2}rpx`;
  69. style["margin-right"] = `${marginConfig.valList[1].val * 2}rpx`;
  70. }
  71. // Padding
  72. if (!paddingConfig.isAll) {
  73. style["padding"] = `${paddingConfig.val * 2}rpx`;
  74. } else {
  75. style["padding-top"] = `${paddingConfig.valList[0].val * 2}rpx`;
  76. style["padding-bottom"] = `${paddingConfig.valList[2].val * 2}rpx`;
  77. style["padding-left"] = `${paddingConfig.valList[3].val * 2}rpx`;
  78. style["padding-right"] = `${paddingConfig.valList[1].val * 2}rpx`;
  79. }
  80. // Background
  81. if (componentBgConfig) {
  82. if (componentBgConfig.tabVal === 0) {
  83. // Color
  84. const colorConfig = componentBgConfig.colorConfig;
  85. const colorDirection = componentBgConfig.colorDirection;
  86. if (colorConfig && colorConfig.color) {
  87. const colors = colorConfig.color.map((c) => c.item);
  88. if (colors.length > 1) {
  89. let deg = "90deg";
  90. if (colorDirection) {
  91. switch (colorDirection.tabVal) {
  92. case 0:
  93. deg = "90deg";
  94. break;
  95. case 1:
  96. deg = "180deg";
  97. break;
  98. case 2:
  99. deg = "135deg";
  100. break;
  101. case 3:
  102. deg = "200deg";
  103. break;
  104. }
  105. }
  106. style.background = `linear-gradient(${deg}, ${colors[0]} 0%, ${colors[1]} 100%)`;
  107. } else {
  108. style.background = colors[0];
  109. }
  110. }
  111. } else if (componentBgConfig.tabVal === 1) {
  112. // Image
  113. const imageConfig =
  114. componentBgConfig.imageConfig || componentBgConfig.imgConfig;
  115. if (imageConfig && imageConfig.url) {
  116. style["background-image"] = `url(${imageConfig.url})`;
  117. style["background-repeat"] = "no-repeat";
  118. style["background-size"] = "cover";
  119. style["background-position"] = "center";
  120. }
  121. }
  122. }
  123. // Border
  124. if (borderConfig && borderConfig.tabVal) {
  125. const color = borderConfig.colorConfig
  126. ? borderConfig.colorConfig.color[0].item
  127. : "#000";
  128. const width = borderConfig.widthConfig
  129. ? borderConfig.widthConfig.val
  130. : 1;
  131. // Style: solid, dashed, dotted
  132. let borderStyle = "solid";
  133. if (borderConfig.styleConfig) {
  134. const styleVal = borderConfig.styleConfig.tabVal;
  135. if (styleVal === 1) borderStyle = "dashed";
  136. if (styleVal === 2) borderStyle = "dotted";
  137. }
  138. style["border"] = `${width * 2}rpx ${borderStyle} ${color}`;
  139. }
  140. // Shadow
  141. if (shadowConfig && shadowConfig.tabVal) {
  142. const x = shadowConfig.xConfig ? shadowConfig.xConfig.val : 0;
  143. const y = shadowConfig.yConfig ? shadowConfig.yConfig.val : 0;
  144. const blur = shadowConfig.blurConfig ? shadowConfig.blurConfig.val : 0;
  145. const spread = shadowConfig.spreadConfig
  146. ? shadowConfig.spreadConfig.val
  147. : 0;
  148. const color = shadowConfig.colorConfig
  149. ? shadowConfig.colorConfig.color[0].item
  150. : "#000";
  151. style["box-shadow"] = `${x * 2}rpx ${y * 2}rpx ${blur * 2}rpx ${
  152. spread * 2
  153. }rpx ${color}`;
  154. }
  155. // Radius (Fillet)
  156. if (fillet) {
  157. if (fillet.type) {
  158. // 4 corners
  159. const valList = fillet.valList;
  160. style["border-radius"] = `${valList[0].val * 2}rpx ${
  161. valList[1].val * 2
  162. }rpx ${valList[3].val * 2}rpx ${valList[2].val * 2}rpx`;
  163. } else {
  164. style["border-radius"] = `${fillet.val * 2}rpx`;
  165. }
  166. }
  167. // Z-Index
  168. if (zIndexConfig) {
  169. style["z-index"] = zIndexConfig.val;
  170. // style["position"] = "relative";
  171. }
  172. return style;
  173. },
  174. bottomBgColor() {
  175. const config = this.config || {};
  176. let style = {
  177. overflow: "hidden",
  178. };
  179. if (config.bottomBgColor) {
  180. style.background = config.bottomBgColor.color
  181. ? config.bottomBgColor.color[0].item
  182. : "";
  183. }
  184. return style;
  185. },
  186. },
  187. };
  188. </script>
  189. <style scoped></style>