| | |
| | | <view class="divider-line"></view> |
| | | </view> |
| | | <view class="menu-grid-flat"> |
| | | <view class="menu-item-flat" v-for="(item, index) in uncategorizedMenus" :key="item.name" |
| | | <view class="menu-item-flat" v-for="(item, index) in uncategorizedMenus.filter(item => !excludeFromCategory.includes(item.name))" :key="item.name" |
| | | @click="navigateTo(item)" :style="{animationDelay: (index * 0.1) + 's'}"> |
| | | <view class="menu-card-flat" :class="'card-flat-' + item.color"> |
| | | <view class="card-flat-icon"> |
| | |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 退出登录按钮 - 始终显示在底部 --> |
| | | <view class="logout-section" v-if="logoutMenu"> |
| | | <view class="menu-item-flat" @click="navigateTo(logoutMenu)"> |
| | | <view class="menu-card-flat card-flat-grey"> |
| | | <view class="card-flat-icon"> |
| | | <uni-icons :type="getIconType(logoutMenu)" size="28" color="#ffffff"></uni-icons> |
| | | </view> |
| | | <view class="card-flat-info"> |
| | | <text class="card-flat-title">{{logoutMenu.title}}</text> |
| | | <text class="card-flat-desc">{{logoutMenu.name}}</text> |
| | | </view> |
| | | <view class="card-flat-arrow"> |
| | | <uni-icons type="right" size="16" color="rgba(255,255,255,0.6)"></uni-icons> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </template> |
| | | |
| | | <!-- 平铺模式:直接显示所有菜单 --> |
| | | <template v-else> |
| | | <view class="menu-grid-flat"> |
| | | <view class="menu-item-flat" v-for="(item, index) in elements" :key="item.name" |
| | | <view class="menu-item-flat" v-for="(item, index) in elements.filter(item => item.name !== 'logOut')" :key="item.name" |
| | | @click="navigateTo(item)" :style="{animationDelay: (index * 0.1) + 's'}"> |
| | | <view class="menu-card-flat" :class="'card-flat-' + item.color"> |
| | | <view class="card-flat-icon"> |
| | |
| | | <view class="card-flat-info"> |
| | | <text class="card-flat-title">{{item.title}}</text> |
| | | <text class="card-flat-desc">{{item.name}}</text> |
| | | </view> |
| | | <view class="card-flat-arrow"> |
| | | <uni-icons type="right" size="16" color="rgba(255,255,255,0.6)"></uni-icons> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | </view> |
| | | |
| | | <!-- 退出登录按钮 - 始终显示在底部 --> |
| | | <view class="logout-section" v-if="logoutMenu"> |
| | | <view class="menu-item-flat" @click="navigateTo(logoutMenu)"> |
| | | <view class="menu-card-flat card-flat-grey"> |
| | | <view class="card-flat-icon"> |
| | | <uni-icons :type="getIconType(logoutMenu)" size="28" color="#ffffff"></uni-icons> |
| | | </view> |
| | | <view class="card-flat-info"> |
| | | <text class="card-flat-title">{{logoutMenu.title}}</text> |
| | | <text class="card-flat-desc">{{logoutMenu.name}}</text> |
| | | </view> |
| | | <view class="card-flat-arrow"> |
| | | <uni-icons type="right" size="16" color="rgba(255,255,255,0.6)"></uni-icons> |
| | |
| | | }); |
| | | |
| | | return this.elements.filter(item => |
| | | !allCategorizedItems.has(item.name) || this.excludeFromCategory.includes(item.name) |
| | | (!allCategorizedItems.has(item.name) || this.excludeFromCategory.includes(item.name)) && item.name !== 'logOut' |
| | | ); |
| | | }, |
| | | // 退出登录菜单 |
| | | logoutMenu() { |
| | | return this.elements.find(item => item.name === 'logOut') || { |
| | | title: '退出登录', |
| | | name: 'logOut', |
| | | color: 'grey', |
| | | cuIcon: 'exit', |
| | | url: '/login/logOut' |
| | | }; |
| | | } |
| | | }, |
| | | onShow() { |
| | |
| | | .card-flat-yellow { background: linear-gradient(135deg, #fbbd08 0%, #f37b1d 100%); } |
| | | .card-flat-grey { background: linear-gradient(135deg, #8799a3 0%, #606266 100%); } |
| | | |
| | | /* 退出登录区域 */ |
| | | .logout-section { |
| | | margin-top: 40rpx; |
| | | padding-top: 20rpx; |
| | | border-top: 2rpx solid #e4e7ed; |
| | | } |
| | | |
| | | /* 底部 */ |
| | | .footer { |
| | | padding: 40rpx 0 60rpx; |