209 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
			
		
		
	
	
			209 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			Vue
		
	
	
	
	
	
| <template>
 | ||
|   <view class="pageBox">
 | ||
|     <!-- tab切换 -->
 | ||
|     <UniTab
 | ||
|       :tabBars="tabBars"
 | ||
|       ref="tab"
 | ||
|       @getTabIndex="getTabIndex"
 | ||
|       class="historyTab"
 | ||
|     ></UniTab>
 | ||
|     <!-- end -->
 | ||
|     <view class="homeSwiper historyboxTop">
 | ||
|       <view v-if="itemData.length > 0">
 | ||
|         <scroll-view scroll-y="true">
 | ||
|           <!-- 取件 -->
 | ||
|           <view v-if="tabIndex === 0"
 | ||
|             ><Pickup :itemData="itemData" @handleOpen="handleOpen"></Pickup
 | ||
|           ></view>
 | ||
|           <!-- end -->
 | ||
|           <!-- 派件 -->
 | ||
|           <view v-else
 | ||
|             ><Delivery :itemData="itemData" @handleOpen="handleOpen"></Delivery
 | ||
|           ></view>
 | ||
|           <!-- end -->
 | ||
|           <!-- 上拉 -->
 | ||
|           <ReachBottom ref="loadMore"></ReachBottom>
 | ||
|           <!-- end -->
 | ||
|         </scroll-view>
 | ||
|         <!-- 空页面 -->
 | ||
|       </view>
 | ||
|       <view v-else><EmptyPage :emptyData="emptyData"></EmptyPage></view>
 | ||
|       <!-- end -->
 | ||
|     </view>
 | ||
|     <!-- end -->
 | ||
|   </view>
 | ||
|   <!-- 提示窗 -->
 | ||
|   <UniPopup
 | ||
|     ref="popup"
 | ||
|     :tipInfo="tipInfo"
 | ||
|     @handleClick="handleClick"
 | ||
|   ></UniPopup>
 | ||
|   <!-- end -->
 | ||
| </template>
 | ||
| 
 | ||
| <script setup>
 | ||
| import { ref, reactive, onMounted, watch } from "vue";
 | ||
| import { onReachBottom } from "@dcloudio/uni-app";
 | ||
| import { useStore } from "vuex";
 | ||
| import { getTimeDate} from '@/utils/index.js';
 | ||
| // 基本数据
 | ||
| import { HistoryTabData } from "@/utils/commonData.js";
 | ||
| //接口
 | ||
| import { getDeliveryList, taskDelete } from "@/pages/api/index.js";
 | ||
| // tab切换
 | ||
| import UniTab from "@/components/uni-tab/index.vue";
 | ||
| // 弹层
 | ||
| import UniPopup from "@/components/uni-popup/index.vue";
 | ||
| // 下拉提示
 | ||
| import ReachBottom from "@/components/reach-bottom/index.vue";
 | ||
| //空页面
 | ||
| import EmptyPage from "@/components/uni-empty-page/index.vue";
 | ||
| // 取件
 | ||
| import Pickup from "./pickup.vue";
 | ||
| // 派件
 | ||
| import Delivery from "./delivery.vue";
 | ||
| 
 | ||
| // 获取父组件数据
 | ||
| const props = defineProps({
 | ||
|   // 筛选时间
 | ||
|   dateTime: {
 | ||
|     type: String,
 | ||
|     default: "",
 | ||
|   },
 | ||
| });
 | ||
| 
 | ||
| // ------定义变量------
 | ||
| const store = useStore(); //vuex获取、储存数据
 | ||
| const users = store.state.user;
 | ||
| const emit = defineEmits(""); //子组件向父组件事件传递
 | ||
| let popup = ref();
 | ||
| const tipInfo = ref("确认删除该订单吗?");
 | ||
| const tabBars = HistoryTabData;//tab标签数据
 | ||
| let taskId = ref(""); //任务id
 | ||
| let tabIndex = ref(0); //当前tab
 | ||
| const loadMore = ref(); //定义子组件的ref,可以调取子组件的值
 | ||
| let itemData = ref([]);//列表数据
 | ||
| let reload = ref(false); //是否加载
 | ||
| let pages = ref(0); //总页数
 | ||
| let pageNum = users.isFiltrate ? 1 : ref(1); //存放当前页
 | ||
| const emptyData = ref("暂无数据");
 | ||
| let isPullDown = ref(false); //是否下拉了
 | ||
| let page = reactive({
 | ||
|   latitude: users.loacation.latitude !== undefined ? users.loacation.latitude : 40.062595,
 | ||
| 	longitude: users.loacation.longitude !== undefined ? users.loacation.longitude : 116.372809,
 | ||
|   page: 1,
 | ||
|   pageSize: 10,
 | ||
|   taskType: 1,
 | ||
| });
 | ||
| watch(props, (newValue, oldValue) => {
 | ||
|   // 存储清空列表数据
 | ||
|   store.commit("user/setDeliveryData", []);
 | ||
|   getList(newValue.dateTime);
 | ||
| });
 | ||
| // 监听tab切换
 | ||
| watch(tabIndex, (newValue, oldValue) => {
 | ||
|   if (newValue === 0) {
 | ||
|     page.taskType = 1;
 | ||
|   } else {
 | ||
|     page.taskType = 2;
 | ||
|   }
 | ||
|   // 存储清空列表数据
 | ||
|   store.commit("user/setDeliveryData", []);
 | ||
|   // 根据不同的tab值切更新 取件数据
 | ||
|   getList(page.dateTime);
 | ||
| });
 | ||
| // ------生命周期------
 | ||
| onMounted(() => {
 | ||
|   if (users.tabIndex) {
 | ||
|     tabIndex.value = users.tabIndex;
 | ||
|   }
 | ||
| });
 | ||
| // 上下拉取
 | ||
| onReachBottom(() => {
 | ||
|   if (pageNum.value >= Number(pages.value)) {
 | ||
|     loadMore.value.status = "noMore";
 | ||
|     return false;
 | ||
|   } else {
 | ||
|     loadMore.value.status = "loading";
 | ||
|     let times = setTimeout(() => {
 | ||
|       pageNum.value++;
 | ||
|       getList(page.dateTime);
 | ||
|     }, 1000); //这里延时一秒在加载方法有个loading效果
 | ||
|   }
 | ||
| });
 | ||
| // ------定义方法------
 | ||
| // 获取数据
 | ||
| const getList = async (time) => {
 | ||
|   reload.value = true;
 | ||
|   //判断是否进行了距离、时间、超时任务筛选,如果是,当前页设为第一页,上拉的数值设为1,便于第二次上拉
 | ||
|   page = {
 | ||
|     ...page,
 | ||
|     dateTime: (getTimeDate(time)).veryDayDate,
 | ||
|     page: pageNum.value,
 | ||
|   };
 | ||
|   await getDeliveryList(page).then((res) => {
 | ||
|     if (res.code === 200) {
 | ||
|       if (res.data) {
 | ||
|         reload.value = false;
 | ||
|         if (users.deliveryData.length === 0) {
 | ||
|           itemData.value = [];
 | ||
|         }
 | ||
|         if (users.istabChange) {
 | ||
|           itemData.value = res.data.items;
 | ||
|           store.commit("user/setIstabChange", false);
 | ||
|         } else {
 | ||
|           itemData.value = itemData.value.concat(res.data.items);
 | ||
|         }
 | ||
|         pages.value = res.data.pages;
 | ||
|         // 存储列表数据
 | ||
|         store.commit("user/setDeliveryData", itemData.value);
 | ||
|         if (Number(res.data.pages) === pageNum.value) {
 | ||
|           loadMore.value.status = "noMore";
 | ||
|         }
 | ||
|       } else {
 | ||
|         itemData.value = [];
 | ||
|       }
 | ||
|     }
 | ||
|   });
 | ||
| };
 | ||
| 
 | ||
| // 获取tab切换当前的index
 | ||
| const getTabIndex = (index) => {
 | ||
|   store.commit("user/setTabIndex", 0);
 | ||
|   store.commit("user/setIstabChange", true);
 | ||
|   pageNum.value = 1;
 | ||
|   pages.value = 1;
 | ||
|   tabIndex.value = index;
 | ||
|   itemData.value = [];
 | ||
|   store.commit("user/setDeliveryData", []);
 | ||
| };
 | ||
| // 确认删除
 | ||
| const handleClick = async () => {
 | ||
|   await taskDelete(taskId.value).then((res) => {
 | ||
|     if (res.code === 200) {
 | ||
|       store.commit("user/setDeliveryData", []);
 | ||
|       getList(page.dateTime);
 | ||
|       isPullDown.value = true;
 | ||
|       return uni.showToast({
 | ||
|         title: "删除成功!",
 | ||
|         duration: 1000,
 | ||
|         icon: "none",
 | ||
|       });
 | ||
|     }
 | ||
|   });
 | ||
| };
 | ||
| // 删除弹层
 | ||
| const handleOpen = (id) => {
 | ||
|   popup.value.dialogOpen();
 | ||
|   taskId.value = id;
 | ||
| };
 | ||
| // 触发选项卡事件
 | ||
| const onChangeSwiperTab = (e) => {
 | ||
|   changeTab(e.detail.current);
 | ||
| };
 | ||
| //把数据、方法暴漏给父组件
 | ||
| defineExpose({
 | ||
|   getList,
 | ||
| });
 | ||
| </script>
 | 
