table.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <view class="table">
  3. <view class="tr">
  4. <view class="td" v-for="(label, index) of labels" :key="index">
  5. <text>{{label}}</text>
  6. </view>
  7. </view>
  8. <view class="tbody">
  9. <view class="tr" v-for="(item, index) of data" :key="index">
  10. <view class="td" v-for="(key, keyIndex) of keys" :key="keyIndex">
  11. <text>{{item[key]}}</text>
  12. </view>
  13. </view>
  14. </view>
  15. </view>
  16. </template>
  17. <script>
  18. export default {
  19. props: {
  20. data: {
  21. type: Array,
  22. required: true,
  23. },
  24. keys: {
  25. type: Array,
  26. required: true,
  27. },
  28. labels: {
  29. type: Array,
  30. required: true,
  31. },
  32. },
  33. }
  34. </script>
  35. <style lang="less" scoped>
  36. @borderLine: 1px solid #d8d8d8;
  37. .table {
  38. line-height: 32px;
  39. text-align: center;
  40. border-left: @borderLine;
  41. border-top: @borderLine;
  42. .tbody {
  43. height: calc(100% - 34px);;
  44. overflow-y: scroll;
  45. width: max-content;
  46. }
  47. .tr {
  48. display: flex;
  49. border-bottom: @borderLine;
  50. .td {
  51. width: 100px;
  52. display: flex;
  53. flex: none;
  54. justify-content: center;
  55. align-items: center;
  56. border-right: @borderLine;
  57. word-break: break-all;
  58. }
  59. }
  60. }
  61. </style>