UNPKG

yuang-framework-ui-pc

Version:

yuang-framework-ui-pc Library

190 lines (189 loc) 7.11 kB
import { defineComponent, ref, computed, resolveComponent, openBlock, createElementBlock, normalizeClass, Fragment, renderList, createBlock, normalizeStyle, withCtx, renderSlot, createCommentVNode, mergeProps, createVNode, createElementVNode, toDisplayString } from "vue"; import { ElAvatar } from "element-plus"; import EleTooltip from "../ele-tooltip/index"; import { avatarGroupProps, avatarGroupEmits } from "./props"; const _sfc_main = defineComponent({ name: "EleAvatarGroup", components: { ElAvatar, EleTooltip }, props: avatarGroupProps, emits: avatarGroupEmits, setup(props, { emit }) { const tooltipContent = ref(""); const virtualRef = ref(); const overflowVisible = ref(false); const commonStyle = computed(() => { if (props.size == null || typeof props.size === "string") { const obj = { large: "-12px", default: "-10px", small: "-8px" }; return { marginLeft: props.size ? obj[props.size] : "-10px" }; } if (typeof props.size === "number" && props.size >= 0) { return { marginLeft: `${-Math.round(props.size / 3)}px` }; } return {}; }); const isOverflow = computed(() => { return props.maxCount != null && props.maxCount > 0 && props.data != null && props.data.length > props.maxCount; }); const avatarData = computed(() => { if (props.data == null) { return []; } return isOverflow.value ? props.data.slice(0, props.maxCount) : props.data; }); const overflowCount = computed(() => { if (!isOverflow.value || !props.data || props.maxCount == null) { return 0; } return props.data.length - props.maxCount; }); const overflowData = computed(() => { if (props.data == null || !isOverflow.value) { return []; } return props.data.slice(props.maxCount); }); const handleItemHover = (item, e) => { if (props.tooltip && item.label) { virtualRef.value = e.currentTarget; tooltipContent.value = item.label; } }; const handleItemClick = (item) => { emit("itemClick", item); }; const handleMoreClick = () => { emit("moreClick"); }; const handleError = (option) => { emit("error", option); }; return { tooltipContent, virtualRef, overflowVisible, commonStyle, isOverflow, avatarData, overflowCount, overflowData, handleItemHover, handleItemClick, handleMoreClick, handleError }; } }); const _export_sfc = (sfc, props) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props) { target[key] = val; } return target; }; const _hoisted_1 = { class: "ele-avatar-more-inner" }; const _hoisted_2 = { key: 0, class: "ele-popover-body ele-avatar-group" }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_ElAvatar = resolveComponent("ElAvatar"); const _component_EleTooltip = resolveComponent("EleTooltip"); return openBlock(), createElementBlock("div", { class: normalizeClass(["ele-avatar-group", { "is-hover-open": _ctx.hoverOpen }]) }, [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.avatarData, (item, index2) => { return openBlock(), createBlock(_component_ElAvatar, { key: item.key ?? index2 + "-" + (item.value || item.label), size: _ctx.size, shape: _ctx.shape, src: item.value, style: normalizeStyle([_ctx.commonStyle, _ctx.itemStyle, _ctx.avatarStyle]), onClick: ($event) => _ctx.handleItemClick(item), onError: (e) => _ctx.handleError({ item, e }), onMouseover: (e) => _ctx.handleItemHover(item, e) }, { default: withCtx(() => [ _ctx.$slots.item ? renderSlot(_ctx.$slots, "item", { key: 0, item }) : createCommentVNode("", true) ]), _: 2 }, 1032, ["size", "shape", "src", "style", "onClick", "onError", "onMouseover"]); }), 128)), _ctx.isOverflow ? (openBlock(), createBlock(_component_EleTooltip, mergeProps({ key: 0, effect: "light", isPopover: true, gpuAcceleration: true, placement: "top", popperClass: "ele-avatar-popover", offset: 6 }, _ctx.overflowPopoverProps || {}, { disabled: !_ctx.overflowPopover, visible: _ctx.overflowVisible, "onUpdate:visible": _cache[0] || (_cache[0] = ($event) => _ctx.overflowVisible = $event) }), { body: withCtx(() => [ _ctx.overflowPopover ? (openBlock(), createElementBlock("div", _hoisted_2, [ renderSlot(_ctx.$slots, "overflow", { overflowData: _ctx.overflowData }, () => [ (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.overflowData, (item, index2) => { return openBlock(), createBlock(_component_ElAvatar, { key: item.key ?? index2 + "-" + (item.value || item.label), size: _ctx.size, shape: _ctx.shape, src: item.value, style: normalizeStyle([_ctx.commonStyle, _ctx.itemStyle, _ctx.avatarStyle]), onClick: ($event) => _ctx.handleItemClick(item), onError: (e) => _ctx.handleError({ item, e }), onMouseover: (e) => _ctx.handleItemHover(item, e) }, { default: withCtx(() => [ _ctx.$slots.item ? renderSlot(_ctx.$slots, "item", { key: 0, item }) : createCommentVNode("", true) ]), _: 2 }, 1032, ["size", "shape", "src", "style", "onClick", "onError", "onMouseover"]); }), 128)) ]) ])) : createCommentVNode("", true) ]), default: withCtx(() => [ createVNode(_component_ElAvatar, { size: _ctx.size, shape: _ctx.shape, style: normalizeStyle([_ctx.commonStyle, _ctx.itemStyle, _ctx.moreStyle]), class: "ele-avatar-more", onClick: _ctx.handleMoreClick }, { default: withCtx(() => [ createElementVNode("span", _hoisted_1, [ renderSlot(_ctx.$slots, "more", { overflowCount: _ctx.overflowCount, overflowData: _ctx.overflowData }, () => [ createElementVNode("span", null, "+" + toDisplayString(_ctx.overflowCount), 1) ]) ]) ]), _: 3 }, 8, ["size", "shape", "style", "onClick"]) ]), _: 3 }, 16, ["disabled", "visible"])) : createCommentVNode("", true), createVNode(_component_EleTooltip, mergeProps({ placement: "top", offset: 6 }, _ctx.tooltipProps || {}, { content: _ctx.tooltipContent, virtualRef: _ctx.virtualRef, virtualTriggering: true }), null, 16, ["content", "virtualRef"]) ], 2); } const index = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); export { index as default };