混凝土运输管理微信小程序、替班
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

128 lines
3.1 KiB

<template>
<view class="page">
<navbar :title="pageTitle" />
<view class="content">
<!-- 用户/泵司抢单大厅 -->
<user-hall v-if="Number(role) === 0" ref="us"></user-hall>
<!-- 企业订单管理 -->
<enterprise-hall v-if="Number(role) === 1" ref="eh"></enterprise-hall>
<!-- 员工订单大厅 -->
<staff-hall v-if="Number(role) === 2" ref="ss"></staff-hall>
<!-- 区域管理员订单 -->
<region-hall v-if="Number(role) === 3" ref="rh"></region-hall>
</view>
<tabber select="order" />
</view>
</template>
<script>
import navbar from '@/components/base/navbar.vue'
import tabber from '@/components/base/tabbar.vue'
import UserHall from '@/components/user/hall.vue'
import StaffHall from '@/components/staff/hall.vue'
import EnterpriseHall from '@/components/enterprise/hall.vue'
import RegionHall from '@/components/region/hall.vue'
import { mapState, mapGetters, mapMutations } from 'vuex'
export default {
components: {
navbar,
tabber,
UserHall,
StaffHall,
EnterpriseHall,
RegionHall
},
data() {
return {
}
},
computed: {
...mapState(['role']),
...mapGetters(['currentRoleText']),
pageTitle() {
const roleNum = Number(this.role);
if (roleNum === 0) {
return '抢单大厅';
} else if (roleNum === 1) {
return '企业订单';
} else if (roleNum === 2) {
return '员工订单';
} else if (roleNum === 3) {
return '区域订单';
} else {
return '订单';
}
}
},
onShow() {
// 初始化角色
this.initRole();
// 设置导航栏标题
uni.setNavigationBarTitle({ title: this.pageTitle });
// 监听角色变更事件
uni.$on('roleChanged', this.handleRoleChange);
// 刷新对应的组件数据
this.refreshCurrentComponent();
},
onHide() {
// 移除事件监听
uni.$off('roleChanged', this.handleRoleChange);
},
methods: {
...mapMutations(['initRole']),
// 处理角色变更
handleRoleChange(newRole) {
console.log('订单页面收到角色变更:', newRole);
// 更新导航栏标题
uni.setNavigationBarTitle({ title: this.pageTitle });
// 刷新对应组件
this.$nextTick(() => {
this.refreshCurrentComponent();
});
},
// 刷新当前角色对应的组件
refreshCurrentComponent() {
this.$nextTick(() => {
try {
const roleNum = Number(this.role);
if (roleNum === 0) {
this.$refs.us && this.$refs.us.loadPage && this.$refs.us.loadPage();
} else if (roleNum === 1) {
this.$refs.eh && this.$refs.eh.loadPage && this.$refs.eh.loadPage();
} else if (roleNum === 2) {
this.$refs.ss && this.$refs.ss.loadPage && this.$refs.ss.loadPage();
} else if (roleNum === 3) {
this.$refs.rh && this.$refs.rh.loadPage && this.$refs.rh.loadPage();
}
} catch (e) {
console.log('组件方法调用失败:', e);
}
});
}
}
}
</script>
<style scoped lang="scss">
.page {
display: flex;
flex-direction: column;
height: 100vh;
background-color: #f5f5f5;
}
.content {
flex: 1;
overflow: hidden;
padding-bottom: 120rpx; /* 为底部tabbar留出空间 */
}
</style>