You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.1 KiB
41 lines
1.1 KiB
import { createLoading } from '/@/components/Loading'; |
|
import type { Directive, App } from 'vue'; |
|
|
|
const loadingDirective: Directive = { |
|
mounted(el, binding) { |
|
const tip = el.getAttribute('loading-tip'); |
|
const background = el.getAttribute('loading-background'); |
|
const size = el.getAttribute('loading-size'); |
|
const fullscreen = !!binding.modifiers.fullscreen; |
|
const instance = createLoading( |
|
{ |
|
tip, |
|
background, |
|
size: size || 'large', |
|
loading: !!binding.value, |
|
absolute: !fullscreen, |
|
}, |
|
fullscreen ? document.body : el |
|
); |
|
el.instance = instance; |
|
}, |
|
updated(el, binding) { |
|
const instance = el.instance; |
|
if (!instance) return; |
|
instance.setTip(el.getAttribute('loading-tip')); |
|
if (binding.oldValue !== binding.value) { |
|
if (binding.oldValue !== binding.value) { |
|
instance.setLoading?.(binding.value && !instance.loading); |
|
} |
|
} |
|
}, |
|
unmounted(el) { |
|
el?.instance?.close(); |
|
}, |
|
}; |
|
|
|
export function setupLoadingDirective(app: App) { |
|
app.directive('loading', loadingDirective); |
|
} |
|
|
|
export default loadingDirective;
|
|
|