UNPKG

yuang-framework-ui-pc

Version:

yuang-framework-ui-pc Library

205 lines (204 loc) 7.48 kB
"use strict"; const vue = require("vue"); const elementPlus = require("element-plus"); const icons = require("../../icons"); const core = require("../../utils/core"); const EleTooltip = require("../../ele-tooltip/index"); const props$1 = require("../../ele-tooltip/props"); const DropdownMenus = require("./dropdown-menus"); const props = require("../props"); const _sfc_main = vue.defineComponent({ name: "ProDropdown", components: { ElButton: elementPlus.ElButton, ElScrollbar: elementPlus.ElScrollbar, EleTooltip, DropdownMenus }, props: { ...props.dropdownProps, /** 当前选中菜单项 */ selected: Object }, emits: props.dropdownEmits, setup(props2, { emit }) { const tooltipRef = vue.ref(null); const tooltipProps = vue.computed(() => { const options = core.pick(props2, props$1.tooltipPropKeys); options.showAfter = props2.trigger === "hover" ? props2.showTimeout : 0; options.hideAfter = props2.trigger === "hover" ? props2.hideTimeout : 0; options.gpuAcceleration = props2.transition === "el-fade-in-linear"; const classes = ["ele-dropdown"]; if (props2.preventContextmenu) { classes.push("is-prevent-event"); } if (typeof props2.popperClass === "string" && props2.popperClass) { classes.push(props2.popperClass); } options.popperClass = classes.join(" "); options.isPopover = true; return options; }); const hasSubMenu = vue.computed( () => !!(props2.items && props2.items.some((d) => { var _a; return !!((_a = d.children) == null ? void 0 : _a.length); })) ); const hidePopper = () => { tooltipRef.value && tooltipRef.value.hide(); }; const updatePopper = () => { tooltipRef.value && tooltipRef.value.updatePopper(); }; const handleUpdateVisible = (visible) => { emit("update:visible", visible); emit("visibleChange", visible); }; const handlePopBeforeEnter = () => { emit("before-enter"); }; const handlePopBeforeLeave = () => { emit("before-leave"); }; const handlePopAfterEnter = () => { emit("after-enter"); }; const handlePopAfterLeave = () => { emit("after-leave"); }; const handleItemClick = (item) => { var _a; if (props2.hideOnClick && !((_a = item.children) == null ? void 0 : _a.length)) { hidePopper(); } emit("command", item.command); }; const handleBtnClick = (e) => { emit("click", e); }; const handleOpen = () => { if (props2.disabled) { return; } tooltipRef.value && tooltipRef.value.handleOpen(); }; const handleClose = () => { hidePopper(); }; const handleWrapperContext = (e) => { if (props2.preventContextmenu) { e.preventDefault(); } }; return { ArrowDown: icons.ArrowDown, tooltipRef, tooltipProps, hasSubMenu, hidePopper, updatePopper, handleUpdateVisible, handlePopBeforeEnter, handlePopBeforeLeave, handlePopAfterEnter, handlePopAfterLeave, handleItemClick, handleBtnClick, handleOpen, handleClose, handleWrapperContext }; } }); const _export_sfc = (sfc, props2) => { const target = sfc.__vccOpts || sfc; for (const [key, val] of props2) { target[key] = val; } return target; }; function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { const _component_ElButton = vue.resolveComponent("ElButton"); const _component_DropdownMenus = vue.resolveComponent("DropdownMenus"); const _component_ElScrollbar = vue.resolveComponent("ElScrollbar"); const _component_EleTooltip = vue.resolveComponent("EleTooltip"); return vue.openBlock(), vue.createBlock(_component_EleTooltip, vue.mergeProps({ tabindex: _ctx.tabindex }, _ctx.tooltipProps, { ref: "tooltipRef", "onUpdate:visible": _ctx.handleUpdateVisible, onBeforeShow: _ctx.handlePopBeforeEnter, onBeforeHide: _ctx.handlePopBeforeLeave, onShow: _ctx.handlePopAfterEnter, onHide: _ctx.handlePopAfterLeave }), { body: vue.withCtx(() => [ _ctx.hasSubMenu ? (vue.openBlock(), vue.createElementBlock("div", { key: 0, class: "ele-dropdown-wrapper", onContextmenu: _cache[0] || (_cache[0] = (...args) => _ctx.handleWrapperContext && _ctx.handleWrapperContext(...args)) }, [ _ctx.items && _ctx.items.length ? (vue.openBlock(), vue.createBlock(_component_DropdownMenus, { key: 0, role: _ctx.role, items: _ctx.items, selected: _ctx.modelValue, menuStyle: _ctx.menuStyle, iconProps: _ctx.iconProps, size: _ctx.size, onItemClick: _ctx.handleItemClick, onWrapperContext: _ctx.handleWrapperContext }, vue.createSlots({ _: 2 }, [ vue.renderList(Object.keys(_ctx.$slots).filter((k) => "default" !== k), (name) => { return { name, fn: vue.withCtx((slotProps) => [ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotProps || {}))) ]) }; }) ]), 1032, ["role", "items", "selected", "menuStyle", "iconProps", "size", "onItemClick", "onWrapperContext"])) : vue.createCommentVNode("", true) ], 32)) : (vue.openBlock(), vue.createBlock(_component_ElScrollbar, { key: 1, maxHeight: _ctx.maxHeight, class: "ele-dropdown-wrapper", onContextmenu: _ctx.handleWrapperContext }, { default: vue.withCtx(() => [ _ctx.items && _ctx.items.length ? (vue.openBlock(), vue.createBlock(_component_DropdownMenus, { key: 0, role: _ctx.role, items: _ctx.items, selected: _ctx.modelValue, menuStyle: _ctx.menuStyle, iconProps: _ctx.iconProps, size: _ctx.size, onItemClick: _ctx.handleItemClick, onWrapperContext: _ctx.handleWrapperContext }, vue.createSlots({ _: 2 }, [ vue.renderList(Object.keys(_ctx.$slots).filter((k) => "default" !== k), (name) => { return { name, fn: vue.withCtx((slotProps) => [ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotProps || {}))) ]) }; }) ]), 1032, ["role", "items", "selected", "menuStyle", "iconProps", "size", "onItemClick", "onWrapperContext"])) : vue.createCommentVNode("", true) ]), _: 3 }, 8, ["maxHeight", "onContextmenu"])) ]), default: vue.withCtx(() => [ _ctx.splitButton ? (vue.openBlock(), vue.createBlock(_component_ElButton, vue.mergeProps({ key: 0, type: _ctx.type, size: _ctx.size, disabled: _ctx.disabled, icon: _ctx.ArrowDown, class: "ele-dropdown-caret-button" }, _ctx.caretButtonProps || {}), null, 16, ["type", "size", "disabled", "icon"])) : vue.renderSlot(_ctx.$slots, "default", { key: 1, active: _ctx.modelValue, selected: _ctx.selected }) ]), _: 3 }, 16, ["tabindex", "onUpdate:visible", "onBeforeShow", "onBeforeHide", "onShow", "onHide"]); } const proDropdown = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]); module.exports = proDropdown;