8b1d8b9a65c64a43eb0691ab6183718f7c0e4cfc9a69df15ebab1e514a3739fd595ade3c0cbab42bc5bbf4ab1e845bb4f69835859f1227cf39574eb193ff66 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import { defineComponent, useSlots, provide, computed, openBlock, createElementBlock, normalizeClass, unref, createElementVNode, renderSlot, createTextVNode, toDisplayString, createCommentVNode, Fragment, renderList, createBlock } from 'vue';
  2. import ElDescriptionsRow from './descriptions-row2.mjs';
  3. import { descriptionsKey } from './token.mjs';
  4. import { descriptionProps } from './description.mjs';
  5. import { COMPONENT_NAME } from './constants.mjs';
  6. import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
  7. import { useNamespace } from '../../../hooks/use-namespace/index.mjs';
  8. import { useFormSize } from '../../form/src/hooks/use-form-common-props.mjs';
  9. import { flattedChildren } from '../../../utils/vue/vnode.mjs';
  10. const __default__ = defineComponent({
  11. name: "ElDescriptions"
  12. });
  13. const _sfc_main = /* @__PURE__ */ defineComponent({
  14. ...__default__,
  15. props: descriptionProps,
  16. setup(__props) {
  17. const props = __props;
  18. const ns = useNamespace("descriptions");
  19. const descriptionsSize = useFormSize();
  20. const slots = useSlots();
  21. provide(descriptionsKey, props);
  22. const descriptionKls = computed(() => [ns.b(), ns.m(descriptionsSize.value)]);
  23. const filledNode = (node, span, count, isLast = false) => {
  24. if (!node.props) {
  25. node.props = {};
  26. }
  27. if (span > count) {
  28. node.props.span = count;
  29. }
  30. if (isLast) {
  31. node.props.span = span;
  32. }
  33. return node;
  34. };
  35. const getRows = () => {
  36. if (!slots.default)
  37. return [];
  38. const children = flattedChildren(slots.default()).filter((node) => {
  39. var _a;
  40. return ((_a = node == null ? void 0 : node.type) == null ? void 0 : _a.name) === COMPONENT_NAME;
  41. });
  42. const rows = [];
  43. let temp = [];
  44. let count = props.column;
  45. let totalSpan = 0;
  46. const rowspanTemp = [];
  47. children.forEach((node, index) => {
  48. var _a, _b, _c;
  49. const span = ((_a = node.props) == null ? void 0 : _a.span) || 1;
  50. const rowspan = ((_b = node.props) == null ? void 0 : _b.rowspan) || 1;
  51. const rowNo = rows.length;
  52. rowspanTemp[rowNo] || (rowspanTemp[rowNo] = 0);
  53. if (rowspan > 1) {
  54. for (let i = 1; i < rowspan; i++) {
  55. rowspanTemp[_c = rowNo + i] || (rowspanTemp[_c] = 0);
  56. rowspanTemp[rowNo + i]++;
  57. totalSpan++;
  58. }
  59. }
  60. if (rowspanTemp[rowNo] > 0) {
  61. count -= rowspanTemp[rowNo];
  62. rowspanTemp[rowNo] = 0;
  63. }
  64. if (index < children.length - 1) {
  65. totalSpan += span > count ? count : span;
  66. }
  67. if (index === children.length - 1) {
  68. const lastSpan = props.column - totalSpan % props.column;
  69. temp.push(filledNode(node, lastSpan, count, true));
  70. rows.push(temp);
  71. return;
  72. }
  73. if (span < count) {
  74. count -= span;
  75. temp.push(node);
  76. } else {
  77. temp.push(filledNode(node, span, count));
  78. rows.push(temp);
  79. count = props.column;
  80. temp = [];
  81. }
  82. });
  83. return rows;
  84. };
  85. return (_ctx, _cache) => {
  86. return openBlock(), createElementBlock("div", {
  87. class: normalizeClass(unref(descriptionKls))
  88. }, [
  89. _ctx.title || _ctx.extra || _ctx.$slots.title || _ctx.$slots.extra ? (openBlock(), createElementBlock("div", {
  90. key: 0,
  91. class: normalizeClass(unref(ns).e("header"))
  92. }, [
  93. createElementVNode("div", {
  94. class: normalizeClass(unref(ns).e("title"))
  95. }, [
  96. renderSlot(_ctx.$slots, "title", {}, () => [
  97. createTextVNode(toDisplayString(_ctx.title), 1)
  98. ])
  99. ], 2),
  100. createElementVNode("div", {
  101. class: normalizeClass(unref(ns).e("extra"))
  102. }, [
  103. renderSlot(_ctx.$slots, "extra", {}, () => [
  104. createTextVNode(toDisplayString(_ctx.extra), 1)
  105. ])
  106. ], 2)
  107. ], 2)) : createCommentVNode("v-if", true),
  108. createElementVNode("div", {
  109. class: normalizeClass(unref(ns).e("body"))
  110. }, [
  111. createElementVNode("table", {
  112. class: normalizeClass([unref(ns).e("table"), unref(ns).is("bordered", _ctx.border)])
  113. }, [
  114. createElementVNode("tbody", null, [
  115. (openBlock(true), createElementBlock(Fragment, null, renderList(getRows(), (row, _index) => {
  116. return openBlock(), createBlock(ElDescriptionsRow, {
  117. key: _index,
  118. row
  119. }, null, 8, ["row"]);
  120. }), 128))
  121. ])
  122. ], 2)
  123. ], 2)
  124. ], 2);
  125. };
  126. }
  127. });
  128. var Descriptions = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "description.vue"]]);
  129. export { Descriptions as default };
  130. //# sourceMappingURL=description2.mjs.map