perf:axios新增是否请求完毕字段并修复骨架屏出现的时机

This commit is contained in:
Xwen
2023-12-27 12:48:51 +08:00
parent d86ee7a028
commit 21bce5ec23
3 changed files with 34 additions and 15 deletions

View File

@@ -17,6 +17,7 @@ const service = axios.create({
timeout: request_timeout, // 请求超时时间 timeout: request_timeout, // 请求超时时间
headers: { "Content-Type": "application/json" }, headers: { "Content-Type": "application/json" },
hideerror: false, //是否在底层显示错误信息 hideerror: false, //是否在底层显示错误信息
isFinish: false,
}); });
// 添加请求拦截器 // 添加请求拦截器
@@ -41,9 +42,12 @@ service.interceptors.request.use(
// 添加响应拦截器 // 添加响应拦截器
service.interceptors.response.use( service.interceptors.response.use(
(response) => { (response) => {
const { config } = response;
config.isFinish = true;
return Promise.resolve(response); return Promise.resolve(response);
}, },
(error) => { (error) => {
const { config } = error;
// 对响应错误做点什么 // 对响应错误做点什么
if (error.message.indexOf("timeout") != -1) { if (error.message.indexOf("timeout") != -1) {
ElMessage({ ElMessage({
@@ -86,6 +90,7 @@ service.interceptors.response.use(
} }
} }
} }
config.isFinish = true;
return Promise.reject(error.response); return Promise.reject(error.response);
} }
); );

View File

@@ -69,7 +69,7 @@
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
<el-divider v-show="topDiscussList.length > 0" /> <el-divider v-show="topDiscussList.length > 0" />
<template v-if="discussList.length > 0"> <template v-if="isDiscussFinished">
<div class="div-item" v-for="i in discussList"> <div class="div-item" v-for="i in discussList">
<DisscussCard :discuss="i" /> <DisscussCard :discuss="i" />
</div> </div>
@@ -121,6 +121,7 @@ const router = useRouter();
const activeName = ref("new"); const activeName = ref("new");
//主题内容 //主题内容
const discussList = ref([]); const discussList = ref([]);
const isDiscussFinished = ref(false);
//置顶主题内容 //置顶主题内容
const topDiscussList = ref([]); const topDiscussList = ref([]);
const total = ref(100); const total = ref(100);
@@ -158,6 +159,7 @@ const handleReset = () => {
//加载discuss //加载discuss
const loadDiscussList = async () => { const loadDiscussList = async () => {
const response = await getList(query); const response = await getList(query);
isDiscussFinished.value = response.config.isFinish;
discussList.value = response.data.items; discussList.value = response.data.items;
total.value = Number(response.data.totalCount); total.value = Number(response.data.totalCount);

View File

@@ -22,7 +22,7 @@
:isPublish="i.isDisableCreateDiscuss" :isPublish="i.isDisableCreateDiscuss"
/> />
</el-col> </el-col>
<template v-if="discussList.length > 0"> <template v-if="isDiscussFinished">
<el-col :span="24" v-for="i in discussList"> <el-col :span="24" v-for="i in discussList">
<DisscussCard :discuss="i" /> <DisscussCard :discuss="i" />
</el-col> </el-col>
@@ -30,7 +30,7 @@
<template v-else> <template v-else>
<Skeleton :isBorder="true" /> <Skeleton :isBorder="true" />
</template> </template>
<template v-if="allDiscussList.length > 0"> <template v-if="isAllDiscussFinished">
<el-col :span="24" v-for="i in allDiscussList"> <el-col :span="24" v-for="i in allDiscussList">
<DisscussCard :discuss="i" /> <DisscussCard :discuss="i" />
</el-col> </el-col>
@@ -77,7 +77,7 @@
</InfoCard> </InfoCard>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<template v-if="pointList.length > 0"> <template v-if="isPointFinished">
<InfoCard <InfoCard
:items="pointList" :items="pointList"
header="本月排行" header="本月排行"
@@ -97,7 +97,7 @@
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<template v-if="friendList.length > 0"> <template v-if="isFriendFinished">
<InfoCard <InfoCard
:items="friendList" :items="friendList"
header="推荐好友" header="推荐好友"
@@ -116,7 +116,7 @@
</template> </template>
</el-col> </el-col>
<el-col :span="24"> <el-col :span="24">
<template v-if="themeList.length > 0"> <template v-if="isThemeFinished">
<InfoCard <InfoCard
:items="themeList" :items="themeList"
header="推荐主题" header="推荐主题"
@@ -170,12 +170,17 @@ import Skeleton from "@/components/Skeleton/index.vue";
const plateList = ref([]); const plateList = ref([]);
const discussList = ref([]); const discussList = ref([]);
const isDiscussFinished = ref(false);
const bannerList = ref([]); const bannerList = ref([]);
const weekList = ref([]); const weekList = ref([]);
const pointList = ref([]); const pointList = ref([]);
const isPointFinished = ref(false);
const friendList = ref([]); const friendList = ref([]);
const isFriendFinished = ref(false);
const themeList = ref([]); const themeList = ref([]);
const isThemeFinished = ref([]);
const allDiscussList = ref([]); const allDiscussList = ref([]);
const isAllDiscussFinished = ref(false);
const items = [{ user: "用户1" }, { user: "用户2" }, { user: "用户3" }]; const items = [{ user: "用户1" }, { user: "用户2" }, { user: "用户3" }];
//主题查询参数 //主题查询参数
@@ -190,23 +195,30 @@ onMounted(async () => {
access(); access();
const { data: plateData } = await getList(); const { data: plateData } = await getList();
plateList.value = plateData.items; plateList.value = plateData.items;
const { data: discussData } = await getHomeDiscuss(); const { data: discussData, config: discussConfig } = await getHomeDiscuss();
discussList.value = discussData; discussList.value = discussData;
isDiscussFinished.value = discussConfig.isFinish;
const { data: bannerData } = await bannerGetList(); const { data: bannerData } = await bannerGetList();
bannerList.value = bannerData.items; bannerList.value = bannerData.items;
const { data: weekData } = await getWeek(); const { data: weekData } = await getWeek();
weekList.value = weekData; weekList.value = weekData;
const { data: pointData } = await getRankingPoints(); const { data: pointData, config: pointConfig } = await getRankingPoints();
pointList.value = pointData; pointList.value = pointData;
const { data: friendData } = await getRecommendedFriend(); isPointFinished.value = pointConfig.isFinish;
const { data: friendData, config: friendConfig } =
await getRecommendedFriend();
friendList.value = friendData; friendList.value = friendData;
const { data: themeData } = await getRecommendedTopic(); isFriendFinished.value = friendConfig.isFinish;
const { data: themeData, config: themeConfig } = await getRecommendedTopic();
themeList.value = themeData; themeList.value = themeData;
const { data: allDiscussData } = await getAllDiscussList({ isThemeFinished.value = themeConfig.isFinish;
Type: 0, const { data: allDiscussData, config: allDiscussConfig } =
skipCount: 1, await getAllDiscussList({
maxResultCount: 5, Type: 0,
}); skipCount: 1,
maxResultCount: 5,
});
isAllDiscussFinished.value = allDiscussConfig.isFinish;
allDiscussList.value = allDiscussData.items; allDiscussList.value = allDiscussData.items;
}); });