index.vue 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. <template>
  2. <view class="u-flex extra-val" v-for="(extra,e) in getExtraList" :key="e" v-if="getExtraList.length">
  3. <view class="u-flex-col extra-child" v-if="extra.jnpfKey === 'table'">
  4. <view class="title" v-if="!extraObj[extra.value]?.length">{{extra.label}}</view>
  5. <view class="extra-child-item" v-for="(item,i) in extraObj[extra.value]" :key="i"
  6. v-if="extraObj[extra.value]?.length">
  7. <view class="u-flex-col extra-child-item-hd">
  8. <view class="title">{{extra.label}}</view>
  9. <view class="title">{{`(${i+1})`}}</view>
  10. </view>
  11. <view class="u-flex child" v-for="(child,c) in extra.children" :key="c">
  12. <view class="txt u-m-b-8">{{child.title}}</view>
  13. <view class="txt val u-line-1">
  14. {{extraObj[extra.value][i][child.dataIndex] }}
  15. </view>
  16. </view>
  17. </view>
  18. <view class="u-text-center" v-if="!extraObj[extra.value]?.length">
  19. 暂无数据
  20. </view>
  21. </view>
  22. <view class="u-flex extra" v-else>
  23. <view class="txt">{{extra.label}}</view>
  24. <view class="txt val u-line-1" v-if="extraObj">{{extraObj[extra.value]}}</view>
  25. </view>
  26. </view>
  27. </template>
  28. <script>
  29. export default {
  30. props: {
  31. extraOptions: {
  32. type: Array,
  33. default: () => []
  34. },
  35. extraObj: {
  36. type: Object,
  37. default: () => {}
  38. }
  39. },
  40. computed: {
  41. getExtraList() {
  42. const extraOptions = this.extraOptions.filter(o => !!o.value);
  43. let list = [];
  44. for (let i = 0; i < extraOptions.length; i++) {
  45. const e = extraOptions[i];
  46. if (!e.value.includes('-')) {
  47. list.push(e);
  48. } else {
  49. let value = e.value.split('-')[0];
  50. let childValue = e.value.split('-')[1];
  51. let label = e.label.split('-')[0];
  52. let childLabel = e.label.replace(label + '-', '');
  53. let newItem = {
  54. jnpfKey: 'table',
  55. value,
  56. label,
  57. title: label,
  58. dataIndex: value,
  59. children: [],
  60. tableName: value
  61. };
  62. e.dataIndex = childValue;
  63. e.title = childLabel;
  64. if (!list.some(o => o.value === value)) list.push(newItem);
  65. for (let i = 0; i < list.length; i++) {
  66. if (list[i].value === value) {
  67. list[i].children.push(e);
  68. break;
  69. }
  70. }
  71. }
  72. }
  73. return list;
  74. }
  75. }
  76. }
  77. </script>
  78. <style lang="scss">
  79. .extra-val {
  80. min-height: 58rpx;
  81. margin-bottom: 0.8rem;
  82. justify-content: space-between;
  83. &:last-child {
  84. margin-bottom: 0;
  85. }
  86. .extra-child {
  87. width: 100%;
  88. border: 1rpx solid #f0f2f6;
  89. border-radius: 8rpx 8rpx 0 0;
  90. margin-bottom: 20rpx;
  91. .title {
  92. padding-left: 10rpx;
  93. background-color: #f0f2f6;
  94. }
  95. .extra-child-item {
  96. .extra-child-item-hd {
  97. background-color: #f0f2f6;
  98. border-radius: 8rpx 8rpx 0 0;
  99. padding-left: 10rpx;
  100. .title {
  101. height: 58rpx;
  102. }
  103. }
  104. .child {
  105. justify-content: space-between;
  106. // padding-left: 10rpx;
  107. min-height: 58rpx;
  108. border-bottom: 2rpx solid #f0f2f6;
  109. padding: 14rpx;
  110. }
  111. }
  112. }
  113. .extra {
  114. width: 100%;
  115. justify-content: space-between;
  116. padding-left: 10rpx;
  117. min-height: 2.18rem;
  118. }
  119. .txt {
  120. width: 160rpx;
  121. line-height: 1.2rem;
  122. font-size: 28rpx;
  123. }
  124. .val {
  125. text-align: right;
  126. width: 300rpx;
  127. overflow: hidden;
  128. }
  129. }
  130. </style>