mirror of
				https://github.com/MHSanaei/3x-ui.git
				synced 2025-11-04 06:12:52 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			103 lines
		
	
	
		
			No EOL
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			No EOL
		
	
	
		
			3.7 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
{{define "component/sidebar/content"}}
 | 
						|
<template>
 | 
						|
    <div class="ant-sidebar">
 | 
						|
        <a-layout-sider :theme="themeSwitcher.currentTheme" collapsible :collapsed="collapsed"
 | 
						|
            @collapse="(isCollapsed, type) => collapseHandle(isCollapsed, type)" breakpoint="md">
 | 
						|
            <a-theme-switch></a-theme-switch>
 | 
						|
            <a-menu :theme="themeSwitcher.currentTheme" mode="inline" :selected-keys="activeTab"
 | 
						|
                @click="({key}) => openLink(key)">
 | 
						|
                <a-menu-item v-for="tab in tabs" :key="tab.key">
 | 
						|
                    <a-icon :type="tab.icon"></a-icon>
 | 
						|
                    <span v-text="tab.title"></span>
 | 
						|
                </a-menu-item>
 | 
						|
            </a-menu>
 | 
						|
        </a-layout-sider>
 | 
						|
        <a-drawer placement="left" :closable="false" @close="closeDrawer" :visible="visible"
 | 
						|
            :wrap-class-name="themeSwitcher.currentTheme" :wrap-style="{ padding: 0 }" :style="{ height: '100%' }">
 | 
						|
            <div class="drawer-handle" @click="toggleDrawer" slot="handle">
 | 
						|
                <a-icon :type="visible ? 'close' : 'menu-fold'"></a-icon>
 | 
						|
            </div>
 | 
						|
            <a-theme-switch></a-theme-switch>
 | 
						|
            <a-menu :theme="themeSwitcher.currentTheme" mode="inline" :selected-keys="activeTab"
 | 
						|
                @click="({key}) => openLink(key)">
 | 
						|
                <a-menu-item v-for="tab in tabs" :key="tab.key">
 | 
						|
                    <a-icon :type="tab.icon"></a-icon>
 | 
						|
                    <span v-text="tab.title"></span>
 | 
						|
                </a-menu-item>
 | 
						|
            </a-menu>
 | 
						|
        </a-drawer>
 | 
						|
    </div>
 | 
						|
</template>
 | 
						|
{{end}}
 | 
						|
 | 
						|
{{define "component/aSidebar"}}
 | 
						|
<style>
 | 
						|
    .ant-sidebar>.ant-layout-sider {
 | 
						|
        height: 100%;
 | 
						|
    }
 | 
						|
</style>
 | 
						|
 | 
						|
<script>
 | 
						|
    const SIDEBAR_COLLAPSED_KEY = "isSidebarCollapsed"
 | 
						|
 | 
						|
    Vue.component('a-sidebar', {
 | 
						|
        data() {
 | 
						|
            return {
 | 
						|
                tabs: [
 | 
						|
                    {
 | 
						|
                        key: 'panel/',
 | 
						|
                        icon: 'dashboard',
 | 
						|
                        title: '{{ i18n "menu.dashboard"}}'
 | 
						|
                    },
 | 
						|
                    {
 | 
						|
                        key: 'panel/inbounds',
 | 
						|
                        icon: 'user',
 | 
						|
                        title: '{{ i18n "menu.inbounds"}}'
 | 
						|
                    },
 | 
						|
                    {
 | 
						|
                        key: 'panel/settings',
 | 
						|
                        icon: 'setting',
 | 
						|
                        title: '{{ i18n "menu.settings"}}'
 | 
						|
                    },
 | 
						|
                    {
 | 
						|
                        key: 'panel/xray',
 | 
						|
                        icon: 'tool',
 | 
						|
                        title: '{{ i18n "menu.xray"}}'
 | 
						|
                    },
 | 
						|
                    {
 | 
						|
                        key: 'logout/',
 | 
						|
                        icon: 'logout',
 | 
						|
                        title: '{{ i18n "menu.logout"}}'
 | 
						|
                    },
 | 
						|
                ],
 | 
						|
                activeTab: [
 | 
						|
                    '{{ .request_uri }}'
 | 
						|
                ],
 | 
						|
                visible: false,
 | 
						|
                collapsed: JSON.parse(localStorage.getItem(SIDEBAR_COLLAPSED_KEY)),
 | 
						|
            }
 | 
						|
        },
 | 
						|
        methods: {
 | 
						|
            openLink(key) {
 | 
						|
                return key.startsWith('http') ? 
 | 
						|
                    window.open(`{{ .base_path }}${key}`) : 
 | 
						|
                    location.href = `{{ .base_path }}${key}`
 | 
						|
            },
 | 
						|
            closeDrawer() {
 | 
						|
                this.visible = false;
 | 
						|
            },
 | 
						|
            toggleDrawer() {
 | 
						|
                this.visible = !this.visible;
 | 
						|
            },
 | 
						|
            collapseHandle(collapsed, type) {
 | 
						|
                if (type === "clickTrigger") {
 | 
						|
                    localStorage.setItem(SIDEBAR_COLLAPSED_KEY, collapsed);
 | 
						|
 | 
						|
                    this.collapsed = JSON.parse(localStorage.getItem(SIDEBAR_COLLAPSED_KEY));
 | 
						|
                }
 | 
						|
            }
 | 
						|
        },
 | 
						|
        template: `{{template "component/sidebar/content"}}`,
 | 
						|
    });
 | 
						|
</script>
 | 
						|
{{end}} |