233 lines
6.5 KiB
Vue
233 lines
6.5 KiB
Vue
|
|
<template>
|
|||
|
|
<view class="test-page">
|
|||
|
|
<view class="header">
|
|||
|
|
<text class="title">TabBar用户类型切换测试</text>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="content">
|
|||
|
|
<view class="current-info">
|
|||
|
|
<text class="label">当前用户类型:</text>
|
|||
|
|
<text class="value">{{ getCurrentTypeLabel() }} ({{ currentUserType }})</text>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="type-switcher">
|
|||
|
|
<text class="section-title">切换用户类型:</text>
|
|||
|
|
<view class="buttons">
|
|||
|
|
<button
|
|||
|
|
v-for="(type, index) in userTypes"
|
|||
|
|
:key="index"
|
|||
|
|
:class="['btn', { active: currentUserType === type.value }]"
|
|||
|
|
@click="switchUserType(type.value)"
|
|||
|
|
>
|
|||
|
|
{{ type.label }}
|
|||
|
|
</button>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="tabbar-preview">
|
|||
|
|
<text class="section-title">TabBar预览:</text>
|
|||
|
|
<view class="tabbar-container">
|
|||
|
|
<view
|
|||
|
|
v-for="(item, index) in tabbarConfig"
|
|||
|
|
:key="index"
|
|||
|
|
class="tabbar-item"
|
|||
|
|
>
|
|||
|
|
<text class="tabbar-text">{{ item.text }}</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
|
|||
|
|
<view class="description">
|
|||
|
|
<text class="desc-title">功能说明:</text>
|
|||
|
|
<text class="desc-text">• 企业用户(userType=0):显示"发布岗位"导航</text>
|
|||
|
|
<text class="desc-text">• 求职者(userType=1):显示"招聘会"导航</text>
|
|||
|
|
<text class="desc-text">• 网格员(userType=2):显示"招聘会"导航</text>
|
|||
|
|
<text class="desc-text">• 政府人员(userType=3):显示"招聘会"导航</text>
|
|||
|
|
<text class="desc-text">• 切换用户类型后,底部导航栏会自动更新</text>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</view>
|
|||
|
|
</template>
|
|||
|
|
|
|||
|
|
<script setup>
|
|||
|
|
import { ref, computed } from 'vue';
|
|||
|
|
import { storeToRefs } from 'pinia';
|
|||
|
|
import useUserStore from '@/stores/useUserStore';
|
|||
|
|
|
|||
|
|
const { userInfo } = storeToRefs(useUserStore());
|
|||
|
|
|
|||
|
|
const userTypes = [
|
|||
|
|
{ value: 0, label: '企业用户' },
|
|||
|
|
{ value: 1, label: '求职者' },
|
|||
|
|
{ value: 2, label: '网格员' },
|
|||
|
|
{ value: 3, label: '政府人员' }
|
|||
|
|
];
|
|||
|
|
|
|||
|
|
const currentUserType = computed(() => userInfo.value?.isCompanyUser !== undefined ? userInfo.value.isCompanyUser : 1);
|
|||
|
|
|
|||
|
|
const switchUserType = (userType) => {
|
|||
|
|
console.log('切换用户类型:', userType);
|
|||
|
|
userInfo.value.isCompanyUser = userType;
|
|||
|
|
uni.setStorageSync('userInfo', userInfo.value);
|
|||
|
|
uni.showToast({
|
|||
|
|
title: `已切换到${getCurrentTypeLabel()}`,
|
|||
|
|
icon: 'success'
|
|||
|
|
});
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const getCurrentTypeLabel = () => {
|
|||
|
|
const type = userTypes.find(t => t.value === currentUserType.value);
|
|||
|
|
return type ? type.label : '未知';
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
const tabbarConfig = computed(() => {
|
|||
|
|
const baseItems = [
|
|||
|
|
{ text: '职位' },
|
|||
|
|
{ text: currentUserType.value === 0 ? '发布岗位' : '招聘会' },
|
|||
|
|
{ text: 'AI+' },
|
|||
|
|
{ text: '消息' },
|
|||
|
|
{ text: '我的' }
|
|||
|
|
];
|
|||
|
|
return baseItems;
|
|||
|
|
});
|
|||
|
|
</script>
|
|||
|
|
|
|||
|
|
<style lang="scss" scoped>
|
|||
|
|
.test-page {
|
|||
|
|
padding: 40rpx;
|
|||
|
|
background: #f5f5f5;
|
|||
|
|
min-height: 100vh;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.header {
|
|||
|
|
text-align: center;
|
|||
|
|
margin-bottom: 40rpx;
|
|||
|
|
|
|||
|
|
.title {
|
|||
|
|
font-size: 36rpx;
|
|||
|
|
font-weight: bold;
|
|||
|
|
color: #333;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.content {
|
|||
|
|
.current-info {
|
|||
|
|
background: #fff;
|
|||
|
|
padding: 30rpx;
|
|||
|
|
border-radius: 16rpx;
|
|||
|
|
margin-bottom: 30rpx;
|
|||
|
|
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
|
|||
|
|
|
|||
|
|
.label {
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
color: #666;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.value {
|
|||
|
|
font-size: 32rpx;
|
|||
|
|
font-weight: bold;
|
|||
|
|
color: #256BFA;
|
|||
|
|
margin-left: 10rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.type-switcher {
|
|||
|
|
background: #fff;
|
|||
|
|
padding: 30rpx;
|
|||
|
|
border-radius: 16rpx;
|
|||
|
|
margin-bottom: 30rpx;
|
|||
|
|
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
|
|||
|
|
|
|||
|
|
.section-title {
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
font-weight: bold;
|
|||
|
|
color: #333;
|
|||
|
|
margin-bottom: 20rpx;
|
|||
|
|
display: block;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.buttons {
|
|||
|
|
display: flex;
|
|||
|
|
flex-wrap: wrap;
|
|||
|
|
gap: 20rpx;
|
|||
|
|
|
|||
|
|
.btn {
|
|||
|
|
flex: 1;
|
|||
|
|
min-width: 140rpx;
|
|||
|
|
height: 80rpx;
|
|||
|
|
background: #f8f9fa;
|
|||
|
|
border: 2rpx solid #e9ecef;
|
|||
|
|
border-radius: 12rpx;
|
|||
|
|
font-size: 26rpx;
|
|||
|
|
color: #666;
|
|||
|
|
transition: all 0.3s ease;
|
|||
|
|
|
|||
|
|
&.active {
|
|||
|
|
background: #256BFA;
|
|||
|
|
border-color: #256BFA;
|
|||
|
|
color: #fff;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.tabbar-preview {
|
|||
|
|
background: #fff;
|
|||
|
|
padding: 30rpx;
|
|||
|
|
border-radius: 16rpx;
|
|||
|
|
margin-bottom: 30rpx;
|
|||
|
|
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
|
|||
|
|
|
|||
|
|
.section-title {
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
font-weight: bold;
|
|||
|
|
color: #333;
|
|||
|
|
margin-bottom: 20rpx;
|
|||
|
|
display: block;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.tabbar-container {
|
|||
|
|
display: flex;
|
|||
|
|
background: #f8f9fa;
|
|||
|
|
border-radius: 12rpx;
|
|||
|
|
padding: 20rpx;
|
|||
|
|
|
|||
|
|
.tabbar-item {
|
|||
|
|
flex: 1;
|
|||
|
|
text-align: center;
|
|||
|
|
padding: 20rpx 10rpx;
|
|||
|
|
|
|||
|
|
.tabbar-text {
|
|||
|
|
font-size: 24rpx;
|
|||
|
|
color: #666;
|
|||
|
|
font-weight: 500;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.description {
|
|||
|
|
background: #fff;
|
|||
|
|
padding: 30rpx;
|
|||
|
|
border-radius: 16rpx;
|
|||
|
|
box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);
|
|||
|
|
|
|||
|
|
.desc-title {
|
|||
|
|
font-size: 28rpx;
|
|||
|
|
font-weight: bold;
|
|||
|
|
color: #333;
|
|||
|
|
margin-bottom: 20rpx;
|
|||
|
|
display: block;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
.desc-text {
|
|||
|
|
font-size: 24rpx;
|
|||
|
|
color: #666;
|
|||
|
|
line-height: 1.6;
|
|||
|
|
display: block;
|
|||
|
|
margin-bottom: 10rpx;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
</style>
|