12345678910111213141516171819202122232425262728293031323334353637383940414243444546 |
- // 1. 用于解决keep-alive需要name的问题,动态生成随机name供keep-alive使用
- // 2. 用于解决transition动画内部结点只能为根元素的问题,单文件可写多结点
- import { defineComponent, h, createVNode, ref, nextTick } from 'vue'
- import reload from './reload.vue'
- import NProgress from '@/utils/system/nprogress'
- export function createNameComponent(component) {
- return () => {
- return new Promise((res) => {
- component().then((comm) => {
- const name = (comm.default.name || 'vueAdminBox') + '$' + Date.now();
- const tempComm = defineComponent({
- name,
- setup() {
- const isReload = ref(false);
- let timeOut = null;
- const handleReload = () => {
- isReload.value = true;
- timeOut && clearTimeout(timeOut);
- NProgress.start();
- timeOut = setTimeout(() => {
- nextTick(() => {
- NProgress.done();
- isReload.value = false;
- });
- }, 260);
- };
- return {
- isReload,
- handleReload
- };
- },
- render: function () {
- if (this.isReload) {
- return h('div', { class: 'el-main-box' }, [h(reload)]);
- } else {
- return h('div', { class: 'el-main-box' }, [createVNode(comm.default)]);
- }
- }
- });
- res(tempComm);
- });
- });
- };
- }
|