aee14b5661bbbec99d40cfc6d7287bc0105c9d4fc9ddc1727ee68c6df8b6c3b54695dff69b08a337dfd5727d5c0a68572aefa7eb1e8f2aedc7ca7c701aea61 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. export default {
  2. name: 'ElDescriptionsRow',
  3. props: {
  4. row: {
  5. type: Array
  6. }
  7. },
  8. inject: ['elDescriptions'],
  9. render(h) {
  10. const { elDescriptions } = this;
  11. const row = (this.row || []).map(item => {
  12. return {
  13. ...item,
  14. label: item.slots.label || item.props.label,
  15. ...['labelClassName', 'contentClassName', 'labelStyle', 'contentStyle'].reduce((res, key) => {
  16. res[key] = item.props[key] || elDescriptions[key];
  17. return res;
  18. }, {})
  19. };
  20. });
  21. if (elDescriptions.direction === 'vertical') {
  22. return (
  23. <tbody>
  24. <tr class="el-descriptions-row">
  25. {
  26. row.map(item => {
  27. return (
  28. <th
  29. class={{
  30. 'el-descriptions-item__cell': true,
  31. 'el-descriptions-item__label': true,
  32. 'has-colon': elDescriptions.border ? false : elDescriptions.colon,
  33. 'is-bordered-label': elDescriptions.border,
  34. [item.labelClassName]: true
  35. }}
  36. style={item.labelStyle}
  37. colSpan={item.props.span}
  38. >{item.label}</th>
  39. );
  40. })
  41. }
  42. </tr>
  43. <tr class="el-descriptions-row">
  44. {
  45. row.map(item =>{
  46. return (
  47. <td
  48. class={['el-descriptions-item__cell', 'el-descriptions-item__content', item.contentClassName]}
  49. style={item.contentStyle}
  50. colSpan={item.props.span}
  51. >{item.slots.default}</td>
  52. );
  53. })
  54. }
  55. </tr>
  56. </tbody>
  57. );
  58. }
  59. if (elDescriptions.border) {
  60. return (
  61. <tbody>
  62. <tr class="el-descriptions-row">
  63. {
  64. row.map(item=> {
  65. return ([
  66. <th
  67. class={{
  68. 'el-descriptions-item__cell': true,
  69. 'el-descriptions-item__label': true,
  70. 'is-bordered-label': elDescriptions.border,
  71. [item.labelClassName]: true
  72. }}
  73. style={item.labelStyle}
  74. colSpan="1"
  75. >{item.label}</th>,
  76. <td
  77. class={['el-descriptions-item__cell', 'el-descriptions-item__content', item.contentClassName]}
  78. style={item.contentStyle}
  79. colSpan={item.props.span * 2 - 1}
  80. >{item.slots.default}</td>
  81. ]);
  82. })
  83. }
  84. </tr>
  85. </tbody>
  86. );
  87. }
  88. return (
  89. <tbody>
  90. <tr class="el-descriptions-row">
  91. {
  92. row.map(item=> {
  93. return (
  94. <td class="el-descriptions-item el-descriptions-item__cell" colSpan={item.props.span}>
  95. <div class="el-descriptions-item__container">
  96. <span
  97. class={{
  98. 'el-descriptions-item__label': true,
  99. 'has-colon': elDescriptions.colon,
  100. [item.labelClassName]: true
  101. }}
  102. style={item.labelStyle}
  103. >{item.label}</span>
  104. <span
  105. class={['el-descriptions-item__content', item.contentClassName]}
  106. style={item.contentStyle}
  107. >{item.slots.default}</span>
  108. </div>
  109. </td>);
  110. })
  111. }
  112. </tr>
  113. </tbody>
  114. );
  115. }
  116. };