import { CSSProperties, Ref } from 'vue'; import { ButtonProps as ElButtonProps, DialogProps as ElDialogProps, FormItemProps as ElFormItemProps, FormProps as ElFormProps } from 'element-plus'; import { Arrayable, FormItemType, Merge, SlotType, Writable } from '../../utils'; import { ButtonProps } from '../button/type'; import { DialogProps, ResizeEventParam } from '../dialog/type'; import { FormItemProps, FormProps } from '../form/type'; export type DialogPayload = { ok: boolean; result?: any; form?: FormOptions['model']; formAttrs?: FormOptions; dialogAttrs?: DialogOptions; }; export interface DialogOptions extends Omit>, 'modelValue'>, DialogProps { class?: Arrayable>; style?: CSSProperties; onResize?: (type: ResizeEventParam) => void; onOpen?: () => void; onOpened?: () => void; onClose?: () => void; onClosed?: () => void; onOpenAutoFocus?: () => void; onClosedAutoFocus?: () => void; } export interface FormOptions extends Omit>, 'size'>, FormProps { } export interface FormItemOptions extends Omit>, 'size'>, FormItemProps { type?: FormItemType; attrs?: any; render?: (formItem: FormItemOptions, formData: any, form: FormOptions) => RenderType; value?: any; options?: { label: string; value: any; disabled?: boolean; }[]; noFormItemWrap?: boolean; } export type DialogSlots = { header?: (params: DialogServiceSlotsParams) => SlotType; default?: (params: DialogServiceSlotsParams) => SlotType; footer?: (params: DialogServiceSlotsParams) => SlotType; footerLeft?: (params: DialogServiceSlotsParams) => SlotType; }; export type RenderType = SlotType; export interface DialogServiceOptions extends DialogOptions { id?: string; attrs?: DialogOptions; slots?: DialogSlots; formAttrs?: FormOptions; formItems?: FormItemOptions[]; penetratePointer?: boolean; showDefaultFooter?: boolean; showCancelButton?: boolean; showConfirmButton?: boolean; confirmButtonText?: string; cancelButtonText?: string; confirmButtonProps?: DialogButtonConfig; cancelButtonProps?: DialogButtonConfig; confirm?: (close: () => void, payload: DialogPayload) => void | Promise; cancel?: (dialogAttrs: DialogOptions, formAttrs: FormOptions | undefined, formItems: FormItemOptions[] | undefined) => Promise | void; } type DialogButtonConfig = Merge> & { style?: CSSProperties; class?: Arrayable>; }; export type CommonOption = { label: string; value: any; }; export type DialogServiceSlotsParams = { ref: Ref; dialogAttrs: DialogOptions; formAttrs: FormOptions | undefined; formItems: FormItemOptions[] | undefined; confirm: ((payload: any) => void) | null; cancel: (() => void) | null; close: () => void; }; export {};