table.vue 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. <template>
  2. <div @click.stop>
  3. <el-table
  4. :data="tableList"
  5. class="bug_tableHeader"
  6. :header-cell-style="{ color: '#4A4A4A', fontSize: '14px', fontWeight: '500' }"
  7. :cell-style="{ 'font-size':'14px','color':'rgba(102,102,102,1)' }"
  8. row-key="id"
  9. style="width: auto;"
  10. :size="size"
  11. :height="tableHeight"
  12. >
  13. <el-table-column
  14. v-for="(columnItem, columnIndex) in column"
  15. :key="columnIndex"
  16. :label="columnItem.label"
  17. :prop="columnItem.key"
  18. :min-width="columnItem.minWidth"
  19. :align="columnItem.align"
  20. show-overflow-tooltip
  21. >
  22. <!-- 自定义表头 -->
  23. <template slot="header">
  24. <div v-if="columnItem.tips">
  25. {{ columnItem.label }}
  26. <el-tooltip
  27. effect="dark"
  28. :content="columnItem.tips"
  29. placement="top"
  30. popper-class="cycleStatistic-tips">
  31. <i class="el-icon-info" />
  32. </el-tooltip>
  33. </div>
  34. <div v-else>
  35. {{ columnItem.label }}
  36. </div>
  37. </template>
  38. <!-- 自定义列内容 -->
  39. <template slot-scope="scope" style="text-align: center;">
  40. <!-- 缺陷等级 -->
  41. <div v-if="columnItem.type === 'level'">
  42. <div class="priorityTag" :style="{background: priorityColors[scope.row[columnItem.key][1]] || '#BDBDBD'}">
  43. {{ scope.row[columnItem.key] }}
  44. </div>
  45. </div>
  46. <!-- 2行 -->
  47. <div v-else-if="columnItem.type === 'topTitle'">
  48. <div class="drawer-id">{{ `${columnItem.topName} - ${scope.row[columnItem.topKey]}` }}</div>
  49. <div class="drawer-name ellipsis" @click.stop="columnItemChange(columnItem, scope.row)">{{ scope.row[columnItem.key] }}</div>
  50. </div>
  51. <!-- 链接点击跳转 -->
  52. <div v-else-if="columnItem.type === 'link'">
  53. <div class="drawer-name ellipsis" @click.stop="columnItemChange(columnItem, scope.row)">{{ scope.row[columnItem.key] }}</div>
  54. </div>
  55. <!-- 插槽 -->
  56. <div v-else-if="columnItem.type === 'slot'">
  57. <slot :name="columnItem.slotName" :scope="scope" />
  58. </div>
  59. <div v-else>
  60. {{ scope.row[columnItem.key] }}
  61. </div>
  62. </template>
  63. </el-table-column>
  64. </el-table>
  65. </div>
  66. </template>
  67. <script>
  68. export default {
  69. name: 'Table',
  70. props: {
  71. tableList: {
  72. type: Array,
  73. required: false,
  74. default: () => []
  75. },
  76. column: {
  77. type: Array,
  78. required: false,
  79. default: () => []
  80. },
  81. tableHeight: {
  82. type: String,
  83. required: false,
  84. default: () => '100%'
  85. },
  86. size: {
  87. type: String,
  88. required: false,
  89. default: () => ''
  90. }
  91. },
  92. data() {
  93. return {
  94. priorityColors: ['#F56C6C', '#FF8952', '#F5E300', '#7ED321', '#61D3B8', '#69B3FF', '#BDBDBD']
  95. }
  96. },
  97. methods: {
  98. columnItemChange(column, row) {
  99. this.$emit('change', { column, row })
  100. }
  101. }
  102. }
  103. </script>
  104. <style scoped lang='less'>
  105. .bug_tableHeader {
  106. padding: 0 20px;
  107. }
  108. .div_priority {
  109. color: #ffffff;
  110. padding: 0 12px;
  111. border-radius: 4px;
  112. margin-left: 4px;
  113. display: inline-block;
  114. text-align: center;
  115. line-height: 24px;
  116. font-size: 14px;
  117. margin-right: 30px;
  118. }
  119. .drawer-name:hover {
  120. color: #409eff;
  121. cursor: pointer;
  122. }
  123. .wrap {
  124. table-layout: fixed;
  125. word-wrap: break-all;
  126. word-break: normal;
  127. overflow: hidden;
  128. }
  129. .drawer-id {
  130. color: rgb(167, 174, 188);
  131. font-size: 10px;
  132. }
  133. /*tips*/
  134. /deep/ .cycleStatistic-tips {
  135. width: 500px;
  136. background: rgba(121, 132, 150, 0.8);
  137. color: #FFF;
  138. }
  139. .priorityTag {
  140. display: inline-block;
  141. text-align: center;
  142. font-size: 14px;
  143. color: #fff;
  144. border-radius: 4px;
  145. padding: 2px 10px;
  146. }
  147. .ellipsis {
  148. width: calc(100% - 5px);
  149. }
  150. </style>