| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | {{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: '{{ .base_path }}panel/',                        icon: 'dashboard',                        title: '{{ i18n "menu.dashboard"}}'                    },                    {                        key: '{{ .base_path }}panel/inbounds',                        icon: 'user',                        title: '{{ i18n "menu.inbounds"}}'                    },                    {                        key: '{{ .base_path }}panel/settings',                        icon: 'setting',                        title: '{{ i18n "menu.settings"}}'                    },                    {                        key: '{{ .base_path }}panel/xray',                        icon: 'tool',                        title: '{{ i18n "menu.xray"}}'                    },                    {                        key: '{{ .base_path }}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(key) :                     location.href = 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}}
 |