Files

91 lines
2.6 KiB
JavaScript
Raw Permalink Normal View History

2026-02-10 08:05:03 +08:00
import props from './props';
import { getInstance } from '../common/utils';
const defaultOptions = {
actions: [],
buttonLayout: props.buttonLayout.default,
cancelBtn: props.cancelBtn.default,
closeOnOverlayClick: props.closeOnOverlayClick.default,
confirmBtn: props.confirmBtn.value,
content: '',
preventScrollThrough: props.preventScrollThrough.default,
showOverlay: props.showOverlay.default,
title: '',
visible: props.visible.default,
};
export default {
alert(options) {
const { context, selector = '#t-dialog', ...otherOptions } = { ...options };
const instance = getInstance(context, selector);
if (!instance) return Promise.reject();
return new Promise((resolve) => {
const mergedOptions = {
...defaultOptions,
...instance.properties,
...otherOptions,
};
instance.setData({
cancelBtn: '',
...mergedOptions,
visible: true,
});
instance._onConfirm = resolve;
});
},
confirm(options) {
const { context, selector = '#t-dialog', ...otherOptions } = { ...options };
const instance = getInstance(context, selector);
if (!instance) return Promise.reject();
return new Promise((resolve, reject) => {
const mergedOptions = {
...defaultOptions,
...instance.properties,
...otherOptions,
};
instance.setData({
...mergedOptions,
visible: true,
});
instance._onConfirm = resolve;
instance._onCancel = reject;
});
},
close(options) {
const { context, selector = '#t-dialog' } = { ...options };
const instance = getInstance(context, selector);
if (instance) {
instance.close();
return Promise.resolve();
}
return Promise.reject();
},
action(options) {
const { context, selector = '#t-dialog', ...otherOptions } = { ...options };
const instance = getInstance(context, selector);
if (!instance) return Promise.reject();
const { buttonLayout = 'vertical', actions = instance.properties.actions } = options;
const maxLengthSuggestion = buttonLayout === 'vertical' ? 7 : 3;
if (!actions || (typeof actions === 'object' && (actions.length === 0 || actions.length > maxLengthSuggestion))) {
console.warn(`action 数量建议控制在1至${maxLengthSuggestion}`);
}
return new Promise((resolve) => {
const mergedOptions = {
...defaultOptions,
...instance.properties,
...otherOptions,
};
instance.setData({
...mergedOptions,
buttonLayout,
visible: true,
});
instance._onAction = resolve;
});
},
};