UNPKG

tav-ui

Version:
110 lines (107 loc) 3.98 kB
import { ref, useAttrs, shallowRef, computed, onBeforeMount, watch, inject, reactive, onMounted, onBeforeUnmount, provide, openBlock, createBlock, unref, renderSlot, normalizeProps, mergeProps, defineComponent } from 'vue'; import { Spin } from 'ant-design-vue'; import { DEFAULT_APIPARAMS, permissionsContextKey, permissionContextKey } from '../constants2.mjs'; import { useMergedProps } from '../hooks/use-props2.mjs'; import { normalizedPermissionQueryContent } from '../utils2.mjs'; import { DEFAULT_PERMISSIONQUERY_ID, DEFAULT_PERMISSIONQUERY_CLASSNAME } from './constants2.mjs'; import { permissionQueryProps, permissionQueryEmits } from './types2.mjs'; import _export_sfc from '../../../../../_virtual/plugin-vue_export-helper.mjs'; const __default__ = { name: "TaPermissionQuery" }; function setup(__props, { expose, emit: emits }) { const props = __props; const id = ref(DEFAULT_PERMISSIONQUERY_ID()); const type = ref(DEFAULT_PERMISSIONQUERY_CLASSNAME); const attrs = useAttrs(); const mergedProps = useMergedProps(props, "TaPermissionQuery", DEFAULT_APIPARAMS); const permissionContent = shallowRef(); const isUseApi = computed(() => mergedProps.value.apiParams && mergedProps.value.apiPermission); const loading = ref(false); async function reload() { try { const { data, success } = await mergedProps.value.apiPermission(mergedProps.value.apiParams); if (data && success) { const _data = normalizedPermissionQueryContent(data); permissionContent.value = _data; emits("apiSuccess", _data); return _data; } else { permissionContent.value = void 0; return void 0; } } catch (error) { console.warn("[tavui TaPermissionQuery] api has error", error); permissionContent.value = void 0; emits("apiError", error); return void 0; } } async function handlePermission() { if (mergedProps.value.disabled) return; if (isUseApi.value) { try { loading.value = true; await reload(); } catch (error) { console.warn("[tavui TaPermissionQuery] api has error", error); } finally { loading.value = false; } } else { if (mergedProps.value.permission) { permissionContent.value = normalizedPermissionQueryContent({ ...mergedProps.value.permission }); } } } onBeforeMount(async () => { if (props.immediate) { await handlePermission(); } }); watch(() => JSON.stringify(mergedProps.value.apiParams), async (curVal, preVal) => { if (curVal && curVal !== "{}" && curVal !== preVal) { if (props.immediate) { await handlePermission(); } } }); const permissionsContext = inject(permissionsContextKey, void 0); const context = reactive({ id, type, disabled: mergedProps.value.disabled, permission: permissionContent }); onMounted(() => { permissionsContext?.addPermission(context); }); onBeforeUnmount(() => { permissionsContext?.removePermission(context); }); provide(permissionContextKey, context); expose({ id, permissionContext: context, reload }); return (_ctx, _cache) => { return loading.value ? (openBlock(), createBlock(unref(Spin), { key: 0, size: "large", tip: "\u6B63\u5728\u52A0\u8F7D\u6743\u9650\uFF0C\u8BF7\u7A0D\u7B49 \u{1F47E}" })) : renderSlot(_ctx.$slots, "default", normalizeProps(mergeProps({ key: 1 }, { ...unref(mergedProps).value, ...unref(attrs), permission: unref(permissionContent) }))); }; } const _sfc_main = /* @__PURE__ */ defineComponent({ ...__default__, props: permissionQueryProps, emits: permissionQueryEmits, setup }); var PermissionQuery = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "/home/runner/work/tav-ui/tav-ui/packages/components/permission/src/PermissionQuery/index.vue"]]); export { PermissionQuery as default }; //# sourceMappingURL=index2.mjs.map