Quasar - Multi submenu with hover

by ph822720355

HTML

<link href="https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900|Material+Icons" rel="stylesheet" type="text/css">
    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/quasar.min.css" rel="stylesheet" type="text/css">

 <script src="https://cdn.jsdelivr.net/npm/vue@^2.0.0/dist/vue.min.js"></script>
 <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/quasar.umd.min.js"></script>


    <div id="q-app" >
        <q-layout view="hHh lpR fFf" ref="main">
            <q-header elevated class="text-white header-backgroud-color" height-hint="98">
                <q-toolbar class="q-pa-sm">
                    <q-toolbar-title class="row items-end">
                        <div class="q-mx-xs">
                            <img src="" class="cust-h-60">
                        </div>

                        <!-- Main Level Start-->
                        <q-btn v-for="(main, index) in menuList" class="header-toolbar-title q-mx-xs" flat color="grey-1" :label="main.func"
                               @mouseover="mouseOverMenuEvt(main)" @mouseleave="mouseLeaveMenuEvt(main)">
                            <q-menu :ref="main.uuid" content-class="bg-grey-4 text-brown-7 header-nav-title" transition-show="jump-down" transition-hide="jump-up">
                                <q-list class="cust-min-w-100">

                                    <!-- Second Level Start -->
                                    <template v-for="(second, index) in main?.children">
                                        <q-item v-if="second?.children?.length > 0" clickable
                                                @mouseover="mouseOverMenuEvt(second)" @mouseleave="mouseLeaveMenuEvt(second)">
                                            <q-item-section>{{second?.func}}</q-item-section>
                                            <q-item-section side v-if="second?.children?.length > 0">
                                                <q-icon...

JavaScript

new Vue({
            el: '#q-app',
            data() {
                return {
                    rootNode: {}, // root node
                    firstNode: {}, // first node
                    mouseOverNode: {}, // current enter node
                    mouseLeaveNode: {}, // current leave node
                    
                    /****** MockDatas ******/
                    menuList: [
                        {
                            func: 'Main-Apple',
                            uuid: uuidv4('menu'),
                            level: 0,
                            children: [
                                {
                                    func: 'Second',
                                    uuid: uuidv4('menu'),
                                    level: 1,
                                    children: [
                                        {
                                            func: 'Third',
                                            uuid: uuidv4('menu'),
                                            level: 2,
                                            children: [
                                                {
                                                    func: 'Fourth',
                                                    uuid: uuidv4('menu'),
                                                    level: 3,
                                                },
                                                {
                                                    func: 'Fourth',
                                                    uuid: uuidv4('menu'),
                                                    level: 3,
                                                },
                                                {
                                                    func: 'Fourth',
                                                    uuid: uuidv4('menu'),
                                                    level: 3,
                ...