titles.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <template>
  2. <!-- 标题 -->
  3. <view v-show="!isSortType" :style="[titleWrapperStyle]">
  4. <view :style="[titleWrapStyle]">
  5. <view @click="goLink" class="title acea-row row-middle row-between" :style="[titleLocation]">
  6. <view :style="[titleStyle]">{{dataConfig.titleConfig.value}}</view>
  7. <view class="more" v-if="!dataConfig.buttonConfig.tabVal" :style="[moreStyle]">
  8. {{dataConfig.titleConfigRight.value}}
  9. <text class="iconfont icon-ic_rightarrow"></text>
  10. </view>
  11. </view>
  12. </view>
  13. </view>
  14. </template>
  15. <script>
  16. export default {
  17. name: 'titles',
  18. props: {
  19. dataConfig: {
  20. type: Object,
  21. default: () => {}
  22. },
  23. isSortType: {
  24. type: String | Number,
  25. default: 0
  26. }
  27. },
  28. computed: {
  29. titleWrapperStyle() {
  30. return {
  31. 'padding': `${this.dataConfig.topConfig.val * 2}rpx ${this.dataConfig.prConfig.val * 2}rpx ${this.dataConfig.bottomConfig.val * 2}rpx`,
  32. 'margin-top': `${this.dataConfig.mbConfig.val * 2}rpx`,
  33. 'background': this.dataConfig.bottomBgColor.color[0].item,
  34. };
  35. },
  36. titleWrapStyle() {
  37. let borderRadius = `${this.dataConfig.fillet.val * 2}rpx`;
  38. if (this.dataConfig.fillet.type) {
  39. borderRadius =
  40. `${this.dataConfig.fillet.valList[0].val * 2}rpx ${this.dataConfig.fillet.valList[1].val * 2}rpx ${this.dataConfig.fillet.valList[2].val * 2}rpx ${this.dataConfig.fillet.valList[3].val * 2}rpx`;
  41. }
  42. return {
  43. 'border-radius': borderRadius,
  44. 'background': `linear-gradient(90deg, ${this.dataConfig.titleColor.color[0].item} 0%, ${this.dataConfig.titleColor.color[1].item} 100%)`,
  45. };
  46. },
  47. titleStyle() {
  48. let style = {
  49. 'font-size': `${this.dataConfig.fontSize.val * 2}rpx`,
  50. 'color': this.dataConfig.themeColor.color[0].item,
  51. };
  52. switch (this.dataConfig.textStyle.tabVal) {
  53. case 1:
  54. style['font-style'] = 'italic';
  55. break;
  56. case 2:
  57. style['font-weight'] = 'bold';
  58. break;
  59. }
  60. return style;
  61. },
  62. titleLocation() {
  63. if(this.dataConfig.buttonConfig.tabVal){
  64. let style = {}
  65. switch (this.dataConfig.textPosition.tabVal) {
  66. case 1:
  67. style['justify-content'] = 'center';
  68. break;
  69. case 2:
  70. style['justify-content'] = 'flex-end';
  71. break;
  72. }
  73. return style;
  74. }
  75. },
  76. moreStyle() {
  77. return {
  78. 'font-size': `${this.dataConfig.buttonText.val * 2}rpx`,
  79. 'color': this.dataConfig.buttonColor.color[0].item,
  80. };
  81. },
  82. },
  83. methods: {
  84. goLink() {
  85. this.$util.JumpPath(this.dataConfig.linkConfig.value);
  86. }
  87. }
  88. }
  89. </script>
  90. <style lang="scss">
  91. .title {
  92. justify-content: space-between;
  93. padding: 26rpx 24rpx;
  94. border-radius: 16rpx 16rpx 0rpx 0rpx;
  95. font-weight: 500;
  96. font-size: 32rpx;
  97. line-height: 44rpx;
  98. color: #333333;
  99. .more {
  100. font-weight: 400;
  101. font-size: 24rpx;
  102. line-height: 34rpx;
  103. color: #999999;
  104. }
  105. .iconfont {
  106. font-size: 24rpx;
  107. }
  108. }
  109. </style>