|
|
|
@ -94,82 +94,46 @@ |
|
|
|
|
|
|
|
<!-- 身份切换浮窗 --> |
|
|
|
<view class="role-float-btn" @click="showRoleModal"> |
|
|
|
<uv-icon name="person" size="24" color="#fff"></uv-icon> |
|
|
|
<uv-icon name="man" size="24" color="#fff"></uv-icon> |
|
|
|
</view> |
|
|
|
|
|
|
|
<!-- 身份切换弹窗 --> |
|
|
|
<uv-modal |
|
|
|
:show="showModal" |
|
|
|
@close="closeModal" |
|
|
|
@cancel="closeModal" |
|
|
|
@confirm="confirmRoleChange" |
|
|
|
title="选择身份" |
|
|
|
confirmText="确认" |
|
|
|
cancelText="取消"> |
|
|
|
<view class="role-modal-content"> |
|
|
|
<view class="role-tip">请选择您的身份类型:</view> |
|
|
|
<view class="role-list"> |
|
|
|
<view |
|
|
|
v-for="(role, index) in roleOptions" |
|
|
|
:key="index" |
|
|
|
:class="['role-item', selectedRole === role.value && 'active']" |
|
|
|
@click="selectRole(role.value)"> |
|
|
|
<view class="role-icon"> |
|
|
|
<uv-icon :name="getRoleIcon(role.value)" size="20" :color="selectedRole === role.value ? '#007AFF' : '#666'"></uv-icon> |
|
|
|
</view> |
|
|
|
<view class="role-info"> |
|
|
|
<view class="role-name">{{ role.label }}</view> |
|
|
|
<view class="role-desc">{{ getRoleDesc(role.value) }}</view> |
|
|
|
</view> |
|
|
|
<view class="role-check"> |
|
|
|
<uv-icon v-if="selectedRole === role.value" name="checkmark-circle" size="20" color="#007AFF"></uv-icon> |
|
|
|
<uv-icon v-else name="radio-button-off" size="20" color="#ccc"></uv-icon> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</uv-modal> |
|
|
|
<!-- 角色选择组件 --> |
|
|
|
<role-selector ref="roleSelector" @roleChanged="onRoleChanged"></role-selector> |
|
|
|
</view> |
|
|
|
</template> |
|
|
|
|
|
|
|
<script> |
|
|
|
import tabber from '@/components/base/tabbar.vue' |
|
|
|
import roleSelector from '@/components/config/roleSelector.vue' |
|
|
|
import { mapState, mapGetters, mapMutations } from 'vuex' |
|
|
|
|
|
|
|
export default { |
|
|
|
components: { |
|
|
|
tabber, |
|
|
|
}, |
|
|
|
tabber, |
|
|
|
roleSelector, |
|
|
|
}, |
|
|
|
data() { |
|
|
|
return { |
|
|
|
area: '长沙', |
|
|
|
isSticky: false, |
|
|
|
num1: '1000+', |
|
|
|
num2: '5000+', |
|
|
|
currentRole: '0', // 当前角色:0-用户/泵司,1-企业,2-员工,3-区域管理员 |
|
|
|
roleOptions: [ |
|
|
|
{ value: '0', label: '用户/泵司' }, |
|
|
|
{ value: '1', label: '企业用户' }, |
|
|
|
{ value: '2', label: '员工' }, |
|
|
|
{ value: '3', label: '区域管理员' } |
|
|
|
], |
|
|
|
notice: { |
|
|
|
content: '砼聚人平台全新上线,欢迎大家使用!' |
|
|
|
}, |
|
|
|
leftIcon: false, |
|
|
|
rightIcon: false, |
|
|
|
videoUrl: 'https://relief.oss-cn-hangzhou.aliyuncs.com/home.mp4', |
|
|
|
// 弹窗相关 |
|
|
|
showModal: false, |
|
|
|
selectedRole: '0' |
|
|
|
videoUrl: 'https://relief.oss-cn-hangzhou.aliyuncs.com/home.mp4' |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
currentRoleText() { |
|
|
|
const role = this.roleOptions.find(r => r.value === this.currentRole); |
|
|
|
return role ? role.label : '用户/泵司'; |
|
|
|
} |
|
|
|
...mapState(['role']), |
|
|
|
...mapGetters(['currentRoleText']) |
|
|
|
}, |
|
|
|
onShow() { |
|
|
|
this.loadData(); |
|
|
|
// 初始化角色 |
|
|
|
this.initRole(); |
|
|
|
// 监听滚动实现粘性导航 |
|
|
|
const intersectionObserver = uni.createIntersectionObserver(this); |
|
|
|
intersectionObserver.relativeToViewport({ top: 0 }).observe('.banner-div', (res) => { |
|
|
|
@ -180,11 +144,16 @@ |
|
|
|
} |
|
|
|
}); |
|
|
|
|
|
|
|
// 获取存储的地区信息和角色信息 |
|
|
|
// 获取存储的地区信息 |
|
|
|
this.area = uni.getStorageSync('area') || '长沙'; |
|
|
|
this.currentRole = uni.getStorageSync('role') || '0'; |
|
|
|
|
|
|
|
// 监听角色变更事件 |
|
|
|
uni.$on('roleChanged', (newRole) => { |
|
|
|
console.log('角色已变更为:', newRole); |
|
|
|
}); |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
...mapMutations(['initRole']), |
|
|
|
// 点击公告 |
|
|
|
clickNotify() { |
|
|
|
uni.navigateTo({ url: '/pages_order/base/notify' }); |
|
|
|
@ -211,71 +180,18 @@ |
|
|
|
}, |
|
|
|
// 显示角色选择器 |
|
|
|
showRoleSelector() { |
|
|
|
const itemList = this.roleOptions.map(role => role.label); |
|
|
|
uni.showActionSheet({ |
|
|
|
itemList: itemList, |
|
|
|
success: (res) => { |
|
|
|
const selectedRole = this.roleOptions[res.tapIndex]; |
|
|
|
this.switchRole(selectedRole.value); |
|
|
|
} |
|
|
|
}); |
|
|
|
}, |
|
|
|
// 切换角色 |
|
|
|
switchRole(roleValue) { |
|
|
|
this.currentRole = roleValue; |
|
|
|
uni.setStorageSync('role', roleValue); |
|
|
|
uni.showToast({ |
|
|
|
title: `已切换到${this.currentRoleText}`, |
|
|
|
icon: 'success' |
|
|
|
}); |
|
|
|
|
|
|
|
// 切换到订单页面以查看不同角色的内容 |
|
|
|
setTimeout(() => { |
|
|
|
uni.switchTab({ |
|
|
|
url: '/pages/index/order' |
|
|
|
}); |
|
|
|
}, 1000); |
|
|
|
this.$refs.roleSelector.open(); |
|
|
|
}, |
|
|
|
|
|
|
|
// 显示身份切换弹窗 |
|
|
|
showRoleModal() { |
|
|
|
this.selectedRole = this.currentRole; |
|
|
|
this.showModal = true; |
|
|
|
this.$refs.roleSelector.open(); |
|
|
|
}, |
|
|
|
// 关闭弹窗 |
|
|
|
closeModal() { |
|
|
|
this.showModal = false; |
|
|
|
}, |
|
|
|
// 选择角色 |
|
|
|
selectRole(roleValue) { |
|
|
|
this.selectedRole = roleValue; |
|
|
|
}, |
|
|
|
// 确认角色切换 |
|
|
|
confirmRoleChange() { |
|
|
|
if (this.selectedRole !== this.currentRole) { |
|
|
|
this.switchRole(this.selectedRole); |
|
|
|
} |
|
|
|
this.closeModal(); |
|
|
|
// 处理角色变更事件 |
|
|
|
onRoleChanged(newRole) { |
|
|
|
console.log('角色已变更为:', newRole); |
|
|
|
}, |
|
|
|
// 获取角色图标 |
|
|
|
getRoleIcon(roleValue) { |
|
|
|
switch(roleValue) { |
|
|
|
case '0': return 'person'; |
|
|
|
case '1': return 'business'; |
|
|
|
case '2': return 'people'; |
|
|
|
case '3': return 'settings'; |
|
|
|
default: return 'person'; |
|
|
|
} |
|
|
|
}, |
|
|
|
// 获取角色描述 |
|
|
|
getRoleDesc(roleValue) { |
|
|
|
switch(roleValue) { |
|
|
|
case '0': return '接单赚钱,自由工作'; |
|
|
|
case '1': return '发布订单,管理业务'; |
|
|
|
case '2': return '协助管理,处理订单'; |
|
|
|
case '3': return '区域管理,审核订单'; |
|
|
|
default: return ''; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
</script> |
|
|
|
@ -427,4 +343,27 @@ |
|
|
|
color: #333; |
|
|
|
margin-right: 8rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.role-float-btn { |
|
|
|
position: fixed; |
|
|
|
bottom: 200rpx; |
|
|
|
right: 30rpx; |
|
|
|
width: 100rpx; |
|
|
|
height: 100rpx; |
|
|
|
background: linear-gradient(135deg, #007AFF 0%, #0056CC 100%); |
|
|
|
border-radius: 50rpx; |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
justify-content: center; |
|
|
|
box-shadow: 0 8rpx 20rpx rgba(0, 122, 255, 0.3); |
|
|
|
z-index: 999; |
|
|
|
transition: all 0.3s ease; |
|
|
|
|
|
|
|
&:active { |
|
|
|
transform: scale(0.95); |
|
|
|
box-shadow: 0 4rpx 10rpx rgba(0, 122, 255, 0.2); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
</style> |