yhui-yuanhuan
Version:
A Component Library for Vue 3 based on element-plus
149 lines (146 loc) • 5.53 kB
JavaScript
import { defineComponent, ref, openBlock, createBlock, unref, mergeProps, withCtx, createElementVNode, toDisplayString, createVNode, createCommentVNode, createElementBlock, Fragment, createTextVNode, renderSlot } from 'vue';
import { ElDialog, ElIcon, ElButton } from 'element-plus';
import { FullScreen } from '@element-plus/icons-vue';
import _export_sfc from '../../../_virtual/plugin-vue_export-helper.mjs';
const __default__ = defineComponent({
name: "YhDialog"
});
const _sfc_main = /* @__PURE__ */ defineComponent({
...__default__,
props: {
dialogProps: null,
from: { default: "other" },
modelValue: { type: Boolean },
showPublish: { type: Boolean },
showFullScreen: { type: Boolean },
title: { default: "" }
},
emits: ["update:modelValue", "confirm"],
setup(__props, { emit }) {
const props = __props;
const isFullscreen = ref(false);
const isFetching = ref(false);
const done = (isClose = true) => {
isFetching.value = false;
if (isClose) {
emit("update:modelValue", false);
}
};
const confirm = async (type) => {
isFetching.value = true;
if (type === "cancel") {
done();
}
emit("confirm", {
type,
from: props.from || "other",
done
});
};
return (_ctx, _cache) => {
return openBlock(), createBlock(unref(ElDialog), mergeProps({
class: "yh-dialog",
width: "600",
draggable: "",
fullscreen: isFullscreen.value,
"close-on-click-modal": false,
"close-on-press-escape": false,
"align-center": ""
}, __props.dialogProps, {
"model-value": __props.modelValue,
"onUpdate:modalValue": ($event) => emit("update:modelValue", $event),
onClose: ($event) => emit("update:modelValue", false)
}), {
header: withCtx(() => [
createElementVNode("div", { class: "dialog-header" }, [
createElementVNode("span", null, toDisplayString(__props.title), 1),
__props.showFullScreen ? (openBlock(), createBlock(unref(ElIcon), {
key: 0,
class: "fullscreen",
onClick: ($event) => isFullscreen.value = !isFullscreen.value
}, {
default: withCtx(() => [
createVNode(unref(FullScreen))
]),
_: 1
}, 8, ["onClick"])) : createCommentVNode("v-if", true)
])
]),
footer: withCtx(() => [
createElementVNode("div", { class: "dialog-footer" }, [
["edit", "new"].includes(__props.from) && !__props.showPublish ? (openBlock(), createElementBlock(Fragment, { key: 0 }, [
createVNode(unref(ElButton), {
type: "default",
disabled: isFetching.value,
onClick: ($event) => confirm("cancel")
}, {
default: withCtx(() => [
createTextVNode("\u53D6\u6D88")
]),
_: 1
}, 8, ["disabled", "onClick"]),
createVNode(unref(ElButton), {
type: "primary",
loading: isFetching.value,
onClick: ($event) => confirm("ok")
}, {
default: withCtx(() => [
createTextVNode("\u786E\u5B9A")
]),
_: 1
}, 8, ["loading", "onClick"])
], 64)) : ["edit", "new"].includes(__props.from) && __props.showPublish ? (openBlock(), createElementBlock(Fragment, { key: 1 }, [
createVNode(unref(ElButton), {
type: "default",
disabled: isFetching.value,
onClick: ($event) => confirm("cancel")
}, {
default: withCtx(() => [
createTextVNode("\u53D6\u6D88")
]),
_: 1
}, 8, ["disabled", "onClick"]),
createVNode(unref(ElButton), {
type: "primary",
loading: isFetching.value,
onClick: ($event) => confirm("ok")
}, {
default: withCtx(() => [
createTextVNode("\u4FDD\u5B58")
]),
_: 1
}, 8, ["loading", "onClick"]),
createVNode(unref(ElButton), {
type: "primary",
loading: isFetching.value,
onClick: ($event) => confirm("publish")
}, {
default: withCtx(() => [
createTextVNode("\u53D1\u5E03")
]),
_: 1
}, 8, ["loading", "onClick"])
], 64)) : __props.from === "view" ? (openBlock(), createBlock(unref(ElButton), {
key: 2,
type: "default",
disabled: isFetching.value,
onClick: ($event) => confirm("cancel")
}, {
default: withCtx(() => [
createTextVNode("\u5173\u95ED")
]),
_: 1
}, 8, ["disabled", "onClick"])) : createCommentVNode("v-if", true)
])
]),
default: withCtx(() => [
renderSlot(_ctx.$slots, "default")
]),
_: 3
}, 16, ["fullscreen", "model-value", "onUpdate:modalValue", "onClose"]);
};
}
});
var Dialog = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "dialog.vue"]]);
export { Dialog as default };
//# sourceMappingURL=dialog.mjs.map