68 lines
1.4 KiB
Vue
68 lines
1.4 KiB
Vue
<!-- component标签可以变换组件 -->
|
||
<template>
|
||
<component :is="asyncComponent" :formData="formData" :history="history" :activeKey="activeKey" v-if="asyncComponent"
|
||
@getStampSuc="getStampSuccess"></component>
|
||
</template>
|
||
<script setup lang="ts">
|
||
import { ref, reactive, onMounted, computed, watch, nextTick } from 'vue';
|
||
const compName = ref('');
|
||
const asyncComponent = ref(null);
|
||
const modules = import.meta.glob('/src/pages-bpm/**/*.vue');
|
||
|
||
|
||
defineOptions({
|
||
name: 'DynamicLink',
|
||
options: {
|
||
styleIsolation: 'shared',
|
||
},
|
||
})
|
||
const props = defineProps({
|
||
path: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
history: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
activeKey: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
formData: {
|
||
type: Object,
|
||
default: () => { },
|
||
}
|
||
|
||
})
|
||
// 监听 option 变化
|
||
watch(() => props.path, (newVal) => {
|
||
if (newVal) compName.value = newVal;
|
||
//动态加载页面
|
||
const comp = modules[`/src/pages-bpm/${compName.value}.vue`]
|
||
comp().then((myModule) => {
|
||
asyncComponent.value = myModule.default
|
||
}).catch(() => {
|
||
|
||
})
|
||
}, {
|
||
deep: true,
|
||
// #ifdef MP-WEIXIN
|
||
immediate: true
|
||
// #endif
|
||
});
|
||
|
||
|
||
const getStampSuccess = (val) => {
|
||
// this.$emit('getStampSuc', val)
|
||
// //在<component>标签动态组件使用vuex,没有保存成功。
|
||
// //所以先传出来再试一下
|
||
// this.$store.commit("cache/setEsignTags", {
|
||
// esignTag: val
|
||
// });
|
||
}
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
|
||
</style> |