import html from "html"; import { defineAsyncComponent, reactive, watch } from "vue"; import { useRouter } from "vue-router"; export default { name: "menuItem", components: { SvgIcon: defineAsyncComponent(() => import("../components/icon/index.js")) }, template: html`<template v-if="!modelValue.meta.isHidden"> <el-sub-menu :index="modelValue.meta.path" v-if="modelValue.children&&modelValue.children.some(o=>!o.meta.isHidden)" > <template #title> <el-icon><svg-icon :name="modelValue.meta.icon??'folder'" /></el-icon> <span>{{modelValue.meta.title}}</span> </template> <menu-item v-for="item in modelValue.children" v-model="item" /> </el-sub-menu> <el-menu-item v-else-if="modelValue.meta.type==='page'" :index="modelValue.meta.isExternal?null:modelValue.meta.path" @click.native="click(modelValue)" > <el-icon><svg-icon :name="modelValue.meta.icon??file" /></el-icon> <template #title> <span>{{modelValue.meta.title}}</span> </template> </el-menu-item> </template>`, props: { modelValue: { typeof: Object, }, }, setup(props, context) { const router = useRouter(); const model = reactive(props.modelValue); watch( model, (value) => { context.emit("update:modelValue", value); }, { deep: true } ); // const click = (route) => { if (!route.meta.isExternal) { router.push(route.meta.path); } else { window.open(route.path); } }; // return { model, click, }; }, };