Files
MrleeAdmin/app/layouts/components/mobile-drawer.vue
T
Mr.April d84d972e73 feat: 适配5.x后端,重构前端架构
主要变更:
1. 重构API目录结构,采用模块化设计,适配5.x后端接口规范
2. 优化布局组件,提升用户界面体验
3. 增强国际化支持,完善多语言配置
4. 新增权限控制功能,支持前端路由权限管理
5. 优化认证流程,支持JWT认证机制
6. 新增中间件和插件,提升系统扩展性
7. 优化状态管理,采用更清晰的模块化设计
8. 新增搜索框、广告等组件,丰富页面功能
9. 更改包管理工具从npm到pnpm,提升依赖管理效率
10. 完善配置系统,支持多环境配置

适配5.x后端特性:
- 采用新的API接口规范
- 支持JWT认证机制
- 适配后端权限控制体系
- 支持后端国际化接口
- 优化数据交互方式
2026-04-07 11:01:11 +08:00

122 lines
2.5 KiB
Vue

<template>
<el-drawer
class="ma-aside-drawer"
:append-to-body="true"
v-model="drawerVisible"
:with-header="false"
direction="ltr"
:size="'50%'"
>
<div class="drawer-header">
<Logo clickable show-text size="small" />
<div @click="closeDrawer" class="drawer-close">
<Icon icon="ant-design:close-outlined" color="var(--el-color-primary)" size="20" />
</div>
</div>
<!-- 移动端菜单 -->
<div class="mobile-menu-section">
<Menu :show-icon="true" mode="vertical" @menu-click="closeDrawer" />
</div>
<!-- 移动端-会员菜单 -->
<div class="mobile-menu-section">
<HeaderActions :show-icon="true" mode="vertical" @menu-click="closeDrawer" />
</div>
</el-drawer>
</template>
<script setup lang="ts">
import Menu from './menu.vue'
import Logo from './logo.vue'
import HeaderActions from './header-actions.vue'
import { Icon } from '~/components/icon'
interface Props {
modelValue: boolean
}
const props = defineProps<Props>()
const emit = defineEmits<{
'update:modelValue': [value: boolean]
languageChanged: [languageName: string]
loggedOut: []
}>()
const drawerVisible = computed({
get: () => props.modelValue,
set: (value) => emit('update:modelValue', value)
})
const closeDrawer = () => {
drawerVisible.value = false
}
</script>
<style scoped lang="scss">
.drawer-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 15px 20px;
background-color: var(--el-color-info-light-9);
border-bottom: 1px solid var(--el-border-color-light);
.drawer-close {
cursor: pointer;
padding: 8px;
border-radius: 4px;
&:hover {
background-color: var(--el-fill-color-light);
}
}
}
.mobile-menu-section {
flex: 1;
overflow-y: auto;
}
.mobile-actions {
padding: 20px;
border-top: 1px solid var(--el-border-color-light);
background-color: var(--el-fill-color-light);
}
.mobile-action-section {
margin-bottom: 20px;
&:last-child {
margin-bottom: 0;
}
}
.mobile-action-title {
display: flex;
align-items: center;
gap: 8px;
margin-bottom: 10px;
font-weight: 600;
padding: 10px 16px;
color: var(--el-text-color-primary);
}
.theme-toggle-mobile {
padding: 10px 10px;
}
// 暗黑模式适配
@at-root html.dark {
.drawer-header {
background-color: var(--el-bg-color-page);
}
.mobile-actions {
border-top-color: var(--el-border-color);
background-color: var(--el-fill-color-dark);
}
}
</style>