table.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. <template>
  2. <el-table size="mini" :data="datas" class="table" @selection-change="handleSelectionChange" @row-dblclick="$emit('oper', { event: 'dblclick', data: $event })" border>
  3. <el-table-column v-if="selection" type="selection" width="55"></el-table-column>
  4. <el-table-column v-for="(item, index) in meta" :key="index" :prop="item.name" :label="item.title" :width="item.width || ''" show-overflow-tooltip></el-table-column>
  5. <el-table-column label="操作" v-if="readonly">
  6. <template slot-scope="scope">
  7. <el-button size="mini" type="text" v-for="(item, index) in operation" :key="index" @click="$emit('oper', { event: item.name, data: scope.row})">
  8. <i v-if="item.icons" :class="item.icons"></i>
  9. {{ item.title }}
  10. </el-button>
  11. </template>
  12. </el-table-column>
  13. </el-table>
  14. </template>
  15. <script>
  16. export default {
  17. components: {},
  18. props: {
  19. data: { type: Array, defalut: [] },
  20. meta: Array,
  21. operation: Array,
  22. selection: Boolean,
  23. readonly: Boolean
  24. },
  25. computed: {
  26. datas () {
  27. const formatter = this.meta.filter(p => p.formatter)
  28. const data = [...this.data]
  29. formatter.filter(i => {
  30. data.map(p => {
  31. const dict = this.$dict(i.name) || []
  32. const item = dict.filter(z => p[i.name] === z.value)
  33. if (item.length > 0) {
  34. p[i.name] = item[0].title
  35. }
  36. })
  37. })
  38. return data
  39. }
  40. },
  41. data () {
  42. return {}
  43. },
  44. methods: {
  45. handleSelectionChange (val) {
  46. this.$emit('selection', val)
  47. }
  48. },
  49. mounted () {}
  50. }
  51. </script>
  52. <style lang="less" scoped>
  53. .table {
  54. width: 98%;
  55. margin: 0 auto;
  56. max-height: 60vh;
  57. overflow-y: auto;
  58. }
  59. </style>