200 lines
5.7 KiB
Vue
200 lines
5.7 KiB
Vue
<template>
|
||
<!-- 顶部Tabs栏(只在非客户管理页面显示) -->
|
||
<view class="fixed-tabs" v-if="value !== 3">
|
||
<uv-tabs :list="topTabs" :current="topTabValue" @click="clickTab"></uv-tabs>
|
||
</view>
|
||
|
||
<!-- 内容区域 -->
|
||
<view class="content-wrapper">
|
||
<!-- 客户管理(底部导航栏选中时显示) -->
|
||
<CustomerManagement v-if="value === 3" />
|
||
|
||
<!-- 其他内容(底部导航栏未选中客户管理时显示) -->
|
||
<template v-else>
|
||
<!-- 日程编辑 -->
|
||
<ScheduleEditor
|
||
v-if="topTabValue === 0"
|
||
ref="scheduleEditorRef"
|
||
:events="allEvents"
|
||
@date-change="handleDateChange"
|
||
/>
|
||
|
||
<!-- 内容看板 -->
|
||
<ContentDashboard v-if="topTabValue === 1" />
|
||
|
||
<!-- 待办事项 -->
|
||
<TodoList v-if="topTabValue === 2" />
|
||
|
||
<!-- 消息内容 -->
|
||
<MessageContent v-if="topTabValue === 3" />
|
||
</template>
|
||
</view>
|
||
|
||
<!-- 悬浮新建按钮(只在日程编辑页显示) -->
|
||
<FabPlus v-if="topTabValue === 0 && value !== 3" @click="handleAddClick" />
|
||
|
||
<!-- 新建日程弹窗(保留以备后用) -->
|
||
<AddEventModal :show="showAdd" @ok="addEvent" @cancel="showAdd = false" />
|
||
|
||
<!-- 底部导航 -->
|
||
<uv-tabbar :value="value" @change="index=>value = index">
|
||
<uv-tabbar-item text="首页" icon="home"></uv-tabbar-item>
|
||
<uv-tabbar-item text="工作台" icon="calendar"></uv-tabbar-item>
|
||
<uv-tabbar-item text="月度考核 " icon="integral"></uv-tabbar-item>
|
||
<uv-tabbar-item text="客户管理" icon="kefu-ermai" ></uv-tabbar-item>
|
||
<uv-tabbar-item text="我的" icon="account"></uv-tabbar-item>
|
||
</uv-tabbar>
|
||
|
||
</template>
|
||
|
||
<script setup>
|
||
import { ref, computed, watch, onMounted } from 'vue';
|
||
import { onShow } from '@dcloudio/uni-app';
|
||
import { useUserStore } from '@/store/user';
|
||
import { getUserInfo } from '@/common/api';
|
||
|
||
import FabPlus from '@/components/FabPlus.vue';
|
||
import AddEventModal from '@/components/AddEventModal.vue';
|
||
import ScheduleEditor from '@/components/ScheduleEditor.vue';
|
||
import ContentDashboard from '@/components/ContentDashboard.vue';
|
||
import TodoList from '@/components/TodoList.vue';
|
||
import MessageContent from '@/components/MessageContent.vue';
|
||
import CustomerManagement from '@/components/CustomerManagement.vue';
|
||
|
||
// 顶部tabs选项
|
||
const topTabs = [
|
||
{ name: '日程编辑', value: 0 },
|
||
{ name: '内容看板', value: 1 },
|
||
{ name: '待办事项', value: 2 },
|
||
{ name: '消息内容', value: 3 }
|
||
];
|
||
// 默认显示内容看板
|
||
const topTabValue = ref(1);
|
||
|
||
function clickTab(item) {
|
||
topTabValue.value = item.value;
|
||
console.log('切换tab:', item.name);
|
||
}
|
||
|
||
// 当前选择的日期,格式:YYYY-MM-DD(用于新建日程时传递日期)
|
||
const selectedDate = ref(new Date().toISOString().slice(0, 10));
|
||
|
||
// 示例日程
|
||
const today = new Date().toISOString().slice(0, 10);
|
||
// 获取明天的日期
|
||
const tomorrow = new Date();
|
||
tomorrow.setDate(tomorrow.getDate() + 1);
|
||
const tomorrowStr = tomorrow.toISOString().slice(0, 10);
|
||
// 获取昨天的日期
|
||
const yesterday = new Date();
|
||
yesterday.setDate(yesterday.getDate() - 1);
|
||
const yesterdayStr = yesterday.toISOString().slice(0, 10);
|
||
|
||
const allEvents = ref([
|
||
{id:1,title:'今天的日程1',startHour:10,startMin:30,color:'#e3fae6',date:today},
|
||
|
||
{id:5,title:'明天的日程2',startHour:10,startMin:30,color:'#fae1e1',date:tomorrowStr},
|
||
{id:6,title:'昨天的日程3',startHour:10,startMin:30,color:'#e3fae6',date:yesterdayStr},
|
||
]);
|
||
|
||
// 处理日期变化(从 ScheduleEditor 组件传来)
|
||
const handleDateChange = (dateStr) => {
|
||
selectedDate.value = dateStr;
|
||
console.log('通过日历组件更新选择日期:', selectedDate.value);
|
||
}
|
||
|
||
// 悬浮按钮/弹窗控制
|
||
const showAdd = ref(false);
|
||
|
||
// ScheduleEditor 组件引用
|
||
const scheduleEditorRef = ref(null);
|
||
|
||
// 处理添加按钮点击
|
||
const handleAddClick = () => {
|
||
// 从 ScheduleEditor 组件获取当前选择的日期
|
||
const currentDate = scheduleEditorRef.value?.selectedDate || selectedDate.value;
|
||
uni.navigateTo({
|
||
url: `/pages/event/add/index?date=${currentDate}`
|
||
});
|
||
};
|
||
|
||
|
||
// 添加日程
|
||
function addEvent(e) {
|
||
// e是{title, startHour, startMin, color, date等},如果没有date则使用selectedDate
|
||
allEvents.value.push({
|
||
...e,
|
||
date: e.date || selectedDate.value,
|
||
id: Date.now()
|
||
});
|
||
showAdd.value = false;
|
||
}
|
||
|
||
const value=ref(0);
|
||
|
||
// 页面加载时请求接口
|
||
onMounted(() => {
|
||
const userStore = useUserStore();
|
||
console.log('当前 token:', userStore.token);
|
||
|
||
// 请求用户信息接口
|
||
getUserInfo().then(res => {
|
||
console.log('getInfo 接口返回:', res);
|
||
}).catch(err => {
|
||
console.error('getInfo 接口请求失败:', err);
|
||
});
|
||
|
||
// 看板数据已由 ContentDashboard 组件自己加载,这里不再请求
|
||
});
|
||
|
||
// 页面显示时处理从新建日程页面返回的数据
|
||
onShow(() => {
|
||
// 从全局存储中读取新添加的日程数据
|
||
try {
|
||
const newEventData = uni.getStorageSync('newEventData');
|
||
if (newEventData) {
|
||
addEvent(newEventData);
|
||
// 清除存储的数据
|
||
uni.removeStorageSync('newEventData');
|
||
}
|
||
} catch (e) {
|
||
console.error('读取新日程数据失败:', e);
|
||
}
|
||
});
|
||
</script>
|
||
|
||
<style lang="scss" scoped>
|
||
|
||
.status_bar {
|
||
width: 100%;
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
z-index: 1000;
|
||
}
|
||
|
||
.fixed-tabs {
|
||
position: fixed;
|
||
top: 0;
|
||
left: 0;
|
||
right: 0;
|
||
width: 100%;
|
||
background: #fff;
|
||
z-index: 999;
|
||
box-shadow: 0 2rpx 8rpx rgba(0, 0, 0, 0.06);
|
||
}
|
||
|
||
.content-wrapper {
|
||
padding-top: 8rpx;
|
||
overflow: hidden;
|
||
margin-top: var(--status-bar-height, 0);
|
||
|
||
/* 客户管理页面不需要顶部 padding */
|
||
:deep(.customer-management) {
|
||
margin-top: 0;
|
||
padding-top: 0;
|
||
}
|
||
}
|
||
|
||
:deep(.bottom-tabbar) { z-index: 1000 !important; }
|
||
</style> |