index.vue
5.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
<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 {onMounted, reactive, ref, 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>