tav-ui
Version:
110 lines (107 loc) • 3.98 kB
JavaScript
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