sl-express/project-wl-kuaidiyuan-uniapp-vue3/pages/news/system.vue

232 lines
6.5 KiB
Vue
Raw Normal View History

2023-09-04 16:40:17 +08:00
<!-- 系统通知列表页 取件相关签收提醒快件取消 -->
<template>
<!-- 自定义头部 -->
<view class="navHead">
<UniNav
:title="title"
@goBack="goBack"
@handleAll="handleAll"
:rithtText="rithtText"
></UniNav>
</view>
<!-- end -->
<!-- 列表 -->
<view class="pageBox newBox">
<scroll-view
scroll-y="true"
:style="{ height: scrollH + 'px' }"
v-if="itemData.length > 0"
>
<view class="systemList">
<view class="boxBg item" v-for="(item, index) in itemData" :key="index">
<view class="tit" :class="item.isRead === 0 ? 'active' : ''">
<icon></icon>
<text v-if="title === '取件相关'">您有一个新的取件订单</text>
<text v-else-if="title === '派件相关'">您有一个新的派件订单</text>
<text v-else-if="title === '签收提醒'">您有一个派件已签收</text>
<text v-else>您有一个快件已取消</text>
</view>
<view class="address">{{ item.content }}</view>
<view class="time">
<text>{{ taskTimeFormat(item.created) }}</text>
<button class="uni-btn redBtn" @click="handleDetail(item)">
查看详情
</button>
</view>
</view>
</view>
<ReachBottom ref="loadMore"></ReachBottom>
</scroll-view>
<view v-else><EmptyPage :emptyData="emptyData"></EmptyPage></view>
</view>
<!-- end -->
</template>
<script setup>
import { ref, reactive, onMounted } from "vue";
import { onReachBottom } from "@dcloudio/uni-app";
import { taskTimeFormat } from "@/utils/index.js";
import { useStore } from "vuex";
// 接口 api
import { getMessagesList, msgRead, msgAllRead } from "@/pages/api/news.js";
// 导入组件
// 导航组件
import UniNav from "@/components/uni-nav/index.vue";
//空页面
import EmptyPage from "@/components/uni-empty-page/index.vue";
// 下拉提示
import ReachBottom from "@/components/reach-bottom/index.vue";
// ------定义变量------
const store = useStore(); //vuex获取、储存数据
const users = store.state.user;
const pages = getCurrentPages(); //获取加载的页面获取当前页面路由信息uniapp 做安卓不支持 vue-router
const currentPage = pages[pages.length - 1].$page.options; //获取当前页面的对象
const title = currentPage.title; //nav标题
const type = currentPage.type; //当前派件类型
const loadMore = ref(); //定义子组件的ref,可以调取子组件的值
const emptyData = ref("暂无消息");
const rithtText = ref("全部已读");
let pageNumber = ref(1);
let totals = ref(0); //总页数
let pageNum = ref(1); //存放当前页
let page = reactive({
contentType: type,
page: 1,
pageSize: 10,
});
let reload = ref(false);
let scrollH = ref(null); //滚动高度
let isReadAll = ref(false); //是否已全读
let itemData = ref([]);
let ids = ref([]);
// 上下拉取
onReachBottom(() => {
if (pageNum.value >= Number(totals.value)) {
loadMore.value.status = "noMore";
return false;
} else {
loadMore.value.status = "loading";
let times = setTimeout(() => {
pageNum.value++;
getList();
}, 1000); //这里延时一秒在加载方法有个loading效果
}
});
// ------生命周期------
onMounted(() => {
// // 调用接口
getList();
// 获取屏幕信息
uni.getSystemInfo({
success: (res) => {
scrollH.value = res.windowHeight - uni.upx2px();
},
});
});
//
// ------定义方法------
// 获取列表
const getList = async () => {
reload.value = true;
page = {
...page,
page: pageNum.value,
};
await getMessagesList(page).then((res) => {
if (res.code === 200) {
if (res.data) {
reload.value = false;
itemData.value = itemData.value.concat(res.data.items);
itemData.value.map((val) => {
if (val.isRead === 0) {
ids.value.push(val.id);
}
});
totals.value = res.data.pages;
// 存储列表数据
if (Number(res.data.pages) === pageNum.value) {
loadMore.value.status = "noMore";
}
} else {
itemData.value = [];
}
}
});
};
// 进入详情,标记已读
const handleDetail = async (item) => {
// 把任务id用vuex的方法存储方便其他页面调用
store.commit("user/setTaskId", item.relevantId);
store.commit("user/setTabIndex", 0);
ids.value = [];
ids.value.push(item.id);
// 进入详情前先调用已读信息接口
await msgRead(item.id).then((res) => {});
if (title === "取件相关") {
// 方便从详情跳回列表页
store.commit("user/setNewType", 301);
if (item.status === 1) {
uni.navigateTo({
url: "/pages/details/index",
});
} else {
uni.navigateTo({
url: "/pages/details/waybill",
});
store.commit("user/setIsNew", true);
}
} else if (title === "派件相关") {
if (item.status === 2) {
store.commit("user/setTaskStatus", 5);
store.commit("user/setIsNew", true);
} else {
store.commit("user/setTaskStatus", 4);
}
store.commit("user/setNewType", 304);
uni.navigateTo({
url: "/pages/details/waybill",
});
} else if (title === "签收提醒") {
store.commit("user/setTaskStatus", 5);
store.commit("user/setNewType", 302);
uni.navigateTo({
url: "/pages/details/waybill",
});
store.commit("user/setIsNew", true);
} else {
store.commit("user/setTaskStatus", null);
store.commit("user/setNewType", 303);
uni.navigateTo({
url: "/pages/details/waybill",
});
}
};
// 全部已读
const handleAll = async () => {
let contentType = null;
if (title === "取件相关") {
contentType = 301;
} else if (title === "派件相关") {
contentType = 304;
} else if (title === "签收提醒") {
contentType = 302;
} else {
contentType = 303;
}
await msgAllRead(contentType)
.then((res) => {
itemData.value = [];
pageNum.value = 1;
getList();
})
.catch((err) => {
isReadAll.value = true;
return uni.showToast({
title: err.msg,
duration: 1000,
icon: "none",
});
});
};
// 返回上一页
const goBack = () => {
store.commit("user/setTabIndex", 1);
if (users.taskStatus === -1) {
uni.redirectTo({
url: "/pages/index/index",
});
} else {
uni.redirectTo({
url: "/pages/news/index",
});
}
store.commit("user/setTaskStatus", 0);
};
</script>
<style src="./index.scss" lang="scss" scoped></style>