232 lines
6.5 KiB
Vue
232 lines
6.5 KiB
Vue
|
<!-- 系统通知列表页 取件相关、签收提醒、快件取消 -->
|
|||
|
<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>
|