|
|
@@ -10,269 +10,32 @@
|
|
|
active-text-color="#6366F1"
|
|
|
@select="handleMenuSelect"
|
|
|
>
|
|
|
- <!-- 规划师菜单 (vendorType=planner or role=teacher) -->
|
|
|
- <template v-if="isPlanner">
|
|
|
- <el-menu-item index="/teacher-dashboard">
|
|
|
- <i class="el-icon-s-data"></i>
|
|
|
- <span slot="title">工作台</span>
|
|
|
- </el-menu-item>
|
|
|
-
|
|
|
- <el-submenu index="service">
|
|
|
- <template slot="title">
|
|
|
- <i class="el-icon-s-home"></i>
|
|
|
- <span>服务管理</span>
|
|
|
- </template>
|
|
|
- <el-menu-item index="/teacher-families">
|
|
|
- <i class="el-icon-s-home"></i>
|
|
|
- <span>我的家庭</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/teacher-team">
|
|
|
- <i class="el-icon-s-custom"></i>
|
|
|
- <span>我的团队</span>
|
|
|
- </el-menu-item>
|
|
|
- </el-submenu>
|
|
|
-
|
|
|
- <el-submenu index="business">
|
|
|
- <template slot="title">
|
|
|
- <i class="el-icon-s-marketing"></i>
|
|
|
- <span>业务管理</span>
|
|
|
- </template>
|
|
|
- <el-menu-item index="/teacher-packages">
|
|
|
- <i class="el-icon-s-marketing"></i>
|
|
|
- <span>套餐管理</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/teacher-orders">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span>订单佣金</span>
|
|
|
- </el-menu-item>
|
|
|
- </el-submenu>
|
|
|
-
|
|
|
- <el-submenu index="assessment">
|
|
|
- <template slot="title">
|
|
|
- <i class="el-icon-edit"></i>
|
|
|
- <span>测评管理</span>
|
|
|
- </template>
|
|
|
- <el-menu-item index="/teacher-assessment">
|
|
|
- <i class="el-icon-edit"></i>
|
|
|
- <span>DAN测评</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/teacher-consult">
|
|
|
- <i class="el-icon-chat-dot-round"></i>
|
|
|
- <span>家长咨询</span>
|
|
|
- </el-menu-item>
|
|
|
- </el-submenu>
|
|
|
-
|
|
|
- <el-menu-item index="/teacher-messages">
|
|
|
- <i class="el-icon-chat-dot-round"></i>
|
|
|
- <span slot="title">消息中心</span>
|
|
|
- </el-menu-item>
|
|
|
- </template>
|
|
|
-
|
|
|
- <!-- 营养师菜单 -->
|
|
|
- <template v-else-if="isNutritionist">
|
|
|
- <el-menu-item index="/dashboard">
|
|
|
- <i class="el-icon-s-data"></i>
|
|
|
- <span slot="title">工作台</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-submenu index="task">
|
|
|
- <template slot="title">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span>任务管理</span>
|
|
|
- </template>
|
|
|
- <el-menu-item index="/tasks">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span>任务列表</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/task-templates">
|
|
|
- <i class="el-icon-document"></i>
|
|
|
- <span>任务模板</span>
|
|
|
- </el-menu-item>
|
|
|
- </el-submenu>
|
|
|
- </template>
|
|
|
-
|
|
|
- <!-- 活动管理员菜单 -->
|
|
|
- <template v-else-if="isActivityAdmin">
|
|
|
- <el-menu-item index="/dashboard">
|
|
|
- <i class="el-icon-s-data"></i>
|
|
|
- <span slot="title">工作台</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/activities">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span slot="title">活动管理</span>
|
|
|
- </el-menu-item>
|
|
|
- </template>
|
|
|
-
|
|
|
- <!-- 文章管理员菜单 -->
|
|
|
- <template v-else-if="isArticleAdmin">
|
|
|
- <el-menu-item index="/dashboard">
|
|
|
- <i class="el-icon-s-home"></i>
|
|
|
- <span slot="title">首页</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-submenu index="article">
|
|
|
- <template slot="title">
|
|
|
- <i class="el-icon-document"></i>
|
|
|
- <span>文章管理</span>
|
|
|
- </template>
|
|
|
- <el-menu-item index="/article-categories">
|
|
|
- <i class="el-icon-document"></i>
|
|
|
- <span>文章分类</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/article-manage">
|
|
|
- <i class="el-icon-document"></i>
|
|
|
- <span>文章列表</span>
|
|
|
- </el-menu-item>
|
|
|
- </el-submenu>
|
|
|
- </template>
|
|
|
-
|
|
|
- <!-- 服务商通用菜单 (vendorType=activity_provider/product_supplier, but not planner) -->
|
|
|
- <template v-else-if="isVendor">
|
|
|
- <el-menu-item index="/teacher-dashboard">
|
|
|
- <i class="el-icon-s-data"></i>
|
|
|
- <span slot="title">工作台</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/teacher-orders">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span slot="title">订单佣金</span>
|
|
|
- </el-menu-item>
|
|
|
- </template>
|
|
|
-
|
|
|
- <!-- 管理员菜单 -->
|
|
|
- <template v-else>
|
|
|
- <el-menu-item index="/dashboard">
|
|
|
- <i class="el-icon-s-home"></i>
|
|
|
- <span slot="title">首页</span>
|
|
|
- </el-menu-item>
|
|
|
-
|
|
|
- <el-submenu index="family">
|
|
|
- <template slot="title">
|
|
|
- <i class="el-icon-s-home"></i>
|
|
|
- <span>家庭管理</span>
|
|
|
- </template>
|
|
|
- <el-menu-item index="/families">
|
|
|
- <i class="el-icon-s-home"></i>
|
|
|
- <span>家庭列表</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/children">
|
|
|
- <i class="el-icon-s-custom"></i>
|
|
|
- <span>孩子管理</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/points">
|
|
|
- <i class="el-icon-s-money"></i>
|
|
|
- <span>积分管理</span>
|
|
|
- </el-menu-item>
|
|
|
- </el-submenu>
|
|
|
-
|
|
|
- <el-submenu index="task">
|
|
|
- <template slot="title">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span>任务管理</span>
|
|
|
- </template>
|
|
|
- <el-menu-item index="/tasks">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span>任务列表</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/task-templates">
|
|
|
- <i class="el-icon-document"></i>
|
|
|
- <span>任务模板</span>
|
|
|
- </el-menu-item>
|
|
|
- </el-submenu>
|
|
|
-
|
|
|
- <el-submenu index="reward">
|
|
|
+ <template v-for="item in menuItems">
|
|
|
+ <el-submenu v-if="item.children && hasPerm(item.perm)" :key="item.title" :index="item.title">
|
|
|
<template slot="title">
|
|
|
- <i class="el-icon-s-goods"></i>
|
|
|
- <span>奖励管理</span>
|
|
|
+ <i :class="item.icon"></i>
|
|
|
+ <span>{{ item.label || item.title }}</span>
|
|
|
</template>
|
|
|
- <el-menu-item index="/rewards">
|
|
|
- <i class="el-icon-s-goods"></i>
|
|
|
- <span>奖励列表</span>
|
|
|
+ <el-menu-item
|
|
|
+ v-for="child in item.children"
|
|
|
+ :key="child.path"
|
|
|
+ :index="child.path"
|
|
|
+ >
|
|
|
+ <i :class="child.icon"></i>
|
|
|
+ <span slot="title">{{ child.label }}</span>
|
|
|
</el-menu-item>
|
|
|
</el-submenu>
|
|
|
-
|
|
|
- <el-submenu index="system">
|
|
|
- <template slot="title">
|
|
|
- <i class="el-icon-s-tools"></i>
|
|
|
- <span>系统管理</span>
|
|
|
- </template>
|
|
|
- <el-menu-item index="/users">
|
|
|
- <i class="el-icon-user"></i>
|
|
|
- <span>用户管理</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/package-audit">
|
|
|
- <i class="el-icon-s-check"></i>
|
|
|
- <span>套餐审核</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/guide-audit">
|
|
|
- <i class="el-icon-s-check"></i>
|
|
|
- <span>规划师审核</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/operation-logs">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span>操作日志</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/vendor-review">
|
|
|
- <i class="el-icon-s-check"></i>
|
|
|
- <span slot="title">服务商审核</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/product-manage">
|
|
|
- <i class="el-icon-s-goods"></i>
|
|
|
- <span>商品管理</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/order-manage">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span>订单管理</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/danshop-category">
|
|
|
- <i class="el-icon-s-goods"></i>
|
|
|
- <span>DanShop分类</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/danshop-profit-rule">
|
|
|
- <i class="el-icon-s-marketing"></i>
|
|
|
- <span>分润规则</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/danshop-logistics">
|
|
|
- <i class="el-icon-s-order"></i>
|
|
|
- <span>物流管理</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/article-categories">
|
|
|
- <i class="el-icon-document"></i>
|
|
|
- <span>文章分类</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/article-manage">
|
|
|
- <i class="el-icon-document"></i>
|
|
|
- <span>文章管理</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/sys-config">
|
|
|
- <i class="el-icon-s-tools"></i>
|
|
|
- <span>系统配置</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/energy-sandbox">
|
|
|
- <i class="el-icon-data-line"></i>
|
|
|
- <span>五维能量</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/education-systems">
|
|
|
- <i class="el-icon-s-management"></i>
|
|
|
- <span>教育体系</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/zodiac-configs">
|
|
|
- <i class="el-icon-s-management"></i>
|
|
|
- <span>星座配置</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/bazi-configs">
|
|
|
- <i class="el-icon-s-management"></i>
|
|
|
- <span>八字配置</span>
|
|
|
- </el-menu-item>
|
|
|
- <el-menu-item index="/blood-type-configs">
|
|
|
- <i class="el-icon-s-management"></i>
|
|
|
- <span>血型配置</span>
|
|
|
- </el-menu-item>
|
|
|
- </el-submenu>
|
|
|
- </template>
|
|
|
+ <el-menu-item v-else-if="hasPerm(item.perm)" :key="item.path" :index="item.path">
|
|
|
+ <i :class="item.icon"></i>
|
|
|
+ <span slot="title">{{ item.label }}</span>
|
|
|
+ </el-menu-item>
|
|
|
+ </template>
|
|
|
</el-menu>
|
|
|
</el-aside>
|
|
|
<el-container>
|
|
|
<el-header>
|
|
|
<div class="header-right">
|
|
|
- <el-button v-if="isPlanner" type="text" class="invite-code-btn" @click="showInviteCode" icon="el-icon-share">
|
|
|
+ <el-button v-if="hasPerm('service:*')" type="text" class="invite-code-btn" @click="showInviteCode" icon="el-icon-share">
|
|
|
邀请码
|
|
|
</el-button>
|
|
|
<el-dropdown trigger="click" @command="handleProfileCommand">
|
|
|
@@ -365,10 +128,102 @@
|
|
|
import { getAdminInfo, changePassword } from '@/api/auth'
|
|
|
import { updateAdminInfo } from '@/api/admin'
|
|
|
import { getMyInviteCode } from '@/api/guide'
|
|
|
+import { getEffectivePermissions, hasPermission, getRoleLabel } from '@/utils/permissions'
|
|
|
|
|
|
export default {
|
|
|
data() {
|
|
|
return {
|
|
|
+ menuItems: [
|
|
|
+ // 全局通用
|
|
|
+ { path: '/dashboard', label: '首页', icon: 'el-icon-s-home', perm: 'dashboard' },
|
|
|
+
|
|
|
+ // admin 专属
|
|
|
+ { title: '家庭管理', icon: 'el-icon-s-home', perm: 'family:*',
|
|
|
+ children: [
|
|
|
+ { path: '/families', label: '家庭列表', icon: 'el-icon-s-home', perm: 'family:list' },
|
|
|
+ { path: '/children', label: '孩子管理', icon: 'el-icon-s-custom', perm: 'family:children' },
|
|
|
+ { path: '/points', label: '积分管理', icon: 'el-icon-s-money', perm: 'family:points' },
|
|
|
+ ]},
|
|
|
+ { title: '任务管理', icon: 'el-icon-s-order', perm: 'task:*',
|
|
|
+ children: [
|
|
|
+ { path: '/tasks', label: '任务列表', icon: 'el-icon-s-order', perm: 'task:list' },
|
|
|
+ { path: '/task-templates', label: '任务模板', icon: 'el-icon-document', perm: 'task:templates' },
|
|
|
+ ]},
|
|
|
+ { title: '奖励管理', icon: 'el-icon-s-goods', perm: 'reward:*',
|
|
|
+ children: [
|
|
|
+ { path: '/rewards', label: '奖励列表', icon: 'el-icon-s-goods', perm: 'reward:list' },
|
|
|
+ ]},
|
|
|
+
|
|
|
+ // teacher + nutritionist 共享
|
|
|
+ { title: '我的家庭', icon: 'el-icon-s-home', perm: 'service:family',
|
|
|
+ children: [
|
|
|
+ { path: '/my-families', label: '授权家庭', icon: 'el-icon-s-home', perm: 'service:family' },
|
|
|
+ ]},
|
|
|
+
|
|
|
+ // teacher 专属
|
|
|
+ { path: '/growth-records', label: '成长记录', icon: 'el-icon-document', perm: 'growth:records' },
|
|
|
+ { path: '/growth-plans', label: '成长计划', icon: 'el-icon-document', perm: 'growth:plans' },
|
|
|
+ { title: '服务管理', icon: 'el-icon-s-home', perm: 'service:*',
|
|
|
+ children: [
|
|
|
+ { path: '/teacher-families', label: '我的家庭', icon: 'el-icon-s-home', perm: 'service:families' },
|
|
|
+ { path: '/teacher-team', label: '我的团队', icon: 'el-icon-s-custom', perm: 'service:team' },
|
|
|
+ ]},
|
|
|
+ { title: '业务管理', icon: 'el-icon-s-marketing', perm: 'biz:*',
|
|
|
+ children: [
|
|
|
+ { path: '/teacher-packages', label: '套餐管理', icon: 'el-icon-s-marketing', perm: 'biz:packages' },
|
|
|
+ { path: '/teacher-orders', label: '订单佣金', icon: 'el-icon-s-order', perm: 'biz:orders' },
|
|
|
+ ]},
|
|
|
+ { title: '测评管理', icon: 'el-icon-edit', perm: 'assessment:*',
|
|
|
+ children: [
|
|
|
+ { path: '/teacher-assessment', label: 'DAN测评', icon: 'el-icon-edit', perm: 'assessment:dan' },
|
|
|
+ { path: '/teacher-consult', label: '家长咨询', icon: 'el-icon-chat-dot-round', perm: 'assessment:consult' },
|
|
|
+ ]},
|
|
|
+ { path: '/teacher-messages', label: '消息中心', icon: 'el-icon-chat-dot-round', perm: 'messages' },
|
|
|
+
|
|
|
+ // nutritionist 专属
|
|
|
+ { title: '健康档案', icon: 'el-icon-document', perm: 'health:*',
|
|
|
+ children: [
|
|
|
+ { path: '/health-reports', label: '健康报告', icon: 'el-icon-document', perm: 'health:reports' },
|
|
|
+ { path: '/health-indicators', label: '健康指标', icon: 'el-icon-data-line', perm: 'health:indicators' },
|
|
|
+ { path: '/health-checkins', label: '健康打卡', icon: 'el-icon-s-order', perm: 'health:checkins' },
|
|
|
+ ]},
|
|
|
+ { path: '/energy-sandbox', label: '五维能量', icon: 'el-icon-data-line', perm: 'energy' },
|
|
|
+
|
|
|
+ // article_manager 专属
|
|
|
+ { title: '文章管理', icon: 'el-icon-document', perm: 'articles:*',
|
|
|
+ children: [
|
|
|
+ { path: '/article-categories', label: '文章分类', icon: 'el-icon-document', perm: 'articles:categories' },
|
|
|
+ { path: '/article-manage', label: '文章管理', icon: 'el-icon-document', perm: 'articles:manage' },
|
|
|
+ ]},
|
|
|
+
|
|
|
+ // activity_manager 专属
|
|
|
+ { title: '活动管理', icon: 'el-icon-s-home', perm: 'activity:*',
|
|
|
+ children: [
|
|
|
+ { path: '/activities', label: '活动列表', icon: 'el-icon-s-home', perm: 'activity:list' },
|
|
|
+ { path: '/activity-review', label: '活动审核', icon: 'el-icon-s-check', perm: 'activity:review' },
|
|
|
+ ]},
|
|
|
+
|
|
|
+ // system 管理 (仅 admin)
|
|
|
+ { title: '系统管理', icon: 'el-icon-s-tools', perm: 'system:*',
|
|
|
+ children: [
|
|
|
+ { path: '/users', label: '用户管理', icon: 'el-icon-user', perm: 'system:users' },
|
|
|
+ { path: '/package-audit', label: '套餐审核', icon: 'el-icon-s-check', perm: 'system:audit' },
|
|
|
+ { path: '/guide-audit', label: '规划师审核', icon: 'el-icon-s-check', perm: 'system:audit' },
|
|
|
+ { path: '/vendor-review', label: '服务商审核', icon: 'el-icon-s-check', perm: 'system:audit' },
|
|
|
+ { path: '/operation-logs', label: '操作日志', icon: 'el-icon-s-order', perm: 'system:logs' },
|
|
|
+ { path: '/product-manage', label: '商品管理', icon: 'el-icon-s-goods', perm: 'system:products' },
|
|
|
+ { path: '/order-manage', label: '订单管理', icon: 'el-icon-s-order', perm: 'system:orders' },
|
|
|
+ { path: '/danshop-category', label: 'DanShop分类', icon: 'el-icon-s-goods', perm: 'system:danshop' },
|
|
|
+ { path: '/danshop-profit-rule', label: '分润规则', icon: 'el-icon-s-marketing', perm: 'system:danshop' },
|
|
|
+ { path: '/danshop-logistics', label: '物流管理', icon: 'el-icon-s-order', perm: 'system:danshop' },
|
|
|
+ { path: '/sys-config', label: '系统配置', icon: 'el-icon-s-tools', perm: 'system:config' },
|
|
|
+ { path: '/energy-sandbox', label: '五维能量', icon: 'el-icon-data-line', perm: 'system:energy' },
|
|
|
+ { path: '/education-systems', label: '教育体系', icon: 'el-icon-s-management', perm: 'system:education' },
|
|
|
+ { path: '/zodiac-configs', label: '星座配置', icon: 'el-icon-s-management', perm: 'system:config' },
|
|
|
+ { path: '/bazi-configs', label: '八字配置', icon: 'el-icon-s-management', perm: 'system:config' },
|
|
|
+ { path: '/blood-type-configs', label: '血型配置', icon: 'el-icon-s-management', perm: 'system:config' },
|
|
|
+ ]},
|
|
|
+ ],
|
|
|
profileDialogVisible: false,
|
|
|
passwordDialogVisible: false,
|
|
|
submitting: false,
|
|
|
@@ -421,54 +276,29 @@ export default {
|
|
|
vendorType() {
|
|
|
return localStorage.getItem('vendorType') || ''
|
|
|
},
|
|
|
- isAdmin() {
|
|
|
- return this.currentRole === 'admin'
|
|
|
- },
|
|
|
- isTeacher() {
|
|
|
- return this.currentRole === 'teacher'
|
|
|
- },
|
|
|
- isNutritionist() {
|
|
|
- return this.currentRole === 'nutritionist'
|
|
|
- },
|
|
|
- isActivityAdmin() {
|
|
|
- return this.currentRole === 'activity_admin'
|
|
|
- },
|
|
|
- isArticleAdmin() {
|
|
|
- return this.currentRole === 'article_admin'
|
|
|
+ effectivePerms() {
|
|
|
+ const rolesStr = localStorage.getItem('roles')
|
|
|
+ const roles = rolesStr ? JSON.parse(rolesStr) : [this.currentRole]
|
|
|
+ return getEffectivePermissions(roles)
|
|
|
},
|
|
|
- isVendor() {
|
|
|
- return !!this.vendorType
|
|
|
- },
|
|
|
- isPlanner() {
|
|
|
- return this.vendorType === 'planner' || this.currentRole === 'teacher'
|
|
|
- },
|
|
|
- displayRoleName() {
|
|
|
- if (this.isPlanner) {
|
|
|
- return '规划师'
|
|
|
- }
|
|
|
- if (this.isNutritionist) {
|
|
|
- return '营养师'
|
|
|
- }
|
|
|
- if (this.isActivityAdmin) {
|
|
|
- return '活动管理员'
|
|
|
- }
|
|
|
- if (this.isArticleAdmin) {
|
|
|
- return '文章管理员'
|
|
|
- }
|
|
|
- if (this.isVendor) {
|
|
|
- return '服务商'
|
|
|
- }
|
|
|
- return '管理员'
|
|
|
+ displayRoles() {
|
|
|
+ const rolesStr = localStorage.getItem('roles')
|
|
|
+ const roles = rolesStr ? JSON.parse(rolesStr) : [this.currentRole]
|
|
|
+ return roles.map(function(r) { return getRoleLabel(r) }).join(' / ')
|
|
|
+ }
|
|
|
},
|
|
|
displayUserLabel() {
|
|
|
const adminName = localStorage.getItem('adminName')
|
|
|
if (adminName) {
|
|
|
- return adminName
|
|
|
+ return adminName + ' (' + this.displayRoles + ')'
|
|
|
}
|
|
|
- return this.displayRoleName
|
|
|
+ return this.displayRoles
|
|
|
}
|
|
|
},
|
|
|
methods: {
|
|
|
+ hasPerm(required) {
|
|
|
+ return hasPermission(this.effectivePerms, required)
|
|
|
+ },
|
|
|
handleMenuSelect(index) {
|
|
|
if (index && index.startsWith('/')) {
|
|
|
this.$router.push(index)
|
|
|
@@ -583,6 +413,7 @@ export default {
|
|
|
}).then(() => {
|
|
|
localStorage.removeItem('token')
|
|
|
localStorage.removeItem('role')
|
|
|
+ localStorage.removeItem('roles')
|
|
|
localStorage.removeItem('adminId')
|
|
|
localStorage.removeItem('adminName')
|
|
|
this.$router.push('/login')
|