import { ModalName } from '@/common/constants/modalName'; import { inject, provide, ref, SetupContext, watchEffect } from 'vue'; /** * 控制关闭弹窗 * @param modelName 相对应的弹窗组件名 * @param context 上次ui上下文,用于关闭弹窗时候需要刷新数据 * @returns */ export function closeModal(modelName: keyof ModalName, context?: SetupContext) { // 控制弹窗 flag const visible = ref(false); const show = inject(modelName, ref(false)) watchEffect(() => { visible.value = show.value }) /** * 取消弹窗 */ function cancel() { visible.value = false; show.value = false } // 组件关闭弹窗需要刷新列表数据 function refresh() { context?.emit('refresh') cancel() } return { visible, cancel, refresh } } /** * 控制打开弹窗 * @param modelName 相对应的弹窗组件名 * @returns openAction 打开弹窗方法 */ export function openModal(modelName: keyof ModalName, data?: any) { const name = ref(false) provide(modelName, name); /** * 打开弹窗 * @param value 弹窗名 */ function openAction() { console.log('弹窗组件名', modelName); name.value = true; } return { openAction } } export type { ModalName }; type emitFn = 'cancel' | 'update' export function _closeModal(context: SetupContext) { const visible = ref(true); /** * 关闭弹窗 * @param isRefresh 是否需要刷新页面: tur => 刷新;false => 不刷新 */ function cancel(isRefresh = false) { visible.value = false; context.emit('cancel', isRefresh) } return { visible, cancel } }