fix(buyer): 修复登录过期异常及全局请求错误处理

This commit is contained in:
pikachu1995@126.com
2026-11-09 16:06:33 +08:00
parent b2981b3ad7
commit ecbb80e24a
11 changed files with 384 additions and 100 deletions

View File

@@ -200,7 +200,7 @@ function handleSubmit () { // 提交密码
Message.success('修改密码成功');
router.push('login');
}
}).catch(() => { loading.value = false; });
}).catch(() => { loading1.value = false; });
};
});
}

View File

@@ -137,6 +137,7 @@
</template>
<script setup>
import { catchHandledRequestError } from "@/utils/requestError";
import { computed, onMounted, reactive, ref } from "vue";
import { useRoute, useRouter } from "vue-router";
import { Message } from "@/utils/message";
@@ -230,6 +231,8 @@ function handleSubmit() {
params.content = "";
getDetail();
}
}).catch(catchHandledRequestError).finally(() => {
submitLoading.value = false;
});
}

View File

@@ -17,7 +17,9 @@
</div>
</template>
<!-- 列表 -->
<empty v-if="orderList.length === 0"/>
<el-skeleton v-if="spinShow" :rows="5" animated />
<el-empty v-else-if="queryFailed" description="加载失败,请重试"><el-button type="primary" @click="getList">重新加载</el-button></el-empty>
<empty v-else-if="orderList.length === 0" />
<div class="order-content" v-else>
<div class="order-cols">
<span>订单详情</span>
@@ -77,7 +79,7 @@
</div>
</div>
</div>
<el-skeleton size="large" fix v-if="spinShow"></el-skeleton>
</div>
<!-- 分页 -->
<div class="page-size">
@@ -134,6 +136,7 @@
</template>
<script setup>
import { catchHandledRequestError } from "@/utils/requestError";
import { nextTick, onMounted, reactive, ref } from "vue";
import { useRouter } from "vue-router";
import { Message, Modal } from "@/utils/message";
@@ -157,6 +160,8 @@ const params = reactive({ // 请求参数
order: 'desc'
});
const total = ref(0); // 订单总数
const queryFailed = ref(false); // 区分加载失败与暂无记录,支持重新查询
let listRequestVersion = 0; // 仅允许最后一次查询更新列表与加载状态
const spinShow = ref(false); // 加载状态
const companyList = ref([]); // 物流公司列表
const logisticsShow = ref(false); // 物流信息modal
@@ -230,14 +235,27 @@ function change(index) {
getList()
}
function getList() { // 获取售后列表
const version = ++listRequestVersion;
queryFailed.value = false;
spinShow.value = true;
let paramsData = JSON.parse(JSON.stringify(params))
afterSaleList(paramsData).then(res => {
spinShow.value = false
if (version !== listRequestVersion) return;
if (res.success) {
orderList.value = res.result.records;
total.value = res.result.total;
}
}).catch((error) => {
if (version !== listRequestVersion) {
catchHandledRequestError(error);
return;
}
queryFailed.value = true;
orderList.value = [];
total.value = 0;
catchHandledRequestError(error);
}).finally(() => {
if (version === listRequestVersion) spinShow.value = false;
});
}
function changePageNum(val) { // 修改页码

View File

@@ -21,7 +21,9 @@
</template>
<!-- 订单列表 -->
<empty v-if="orderList.length === 0" />
<el-skeleton v-if="spinShow" :rows="5" animated />
<el-empty v-else-if="queryFailed" description="加载失败,请重试"><el-button type="primary" @click="getList">重新加载</el-button></el-empty>
<empty v-else-if="orderList.length === 0" />
<div class="order-content" v-else>
<div class="order-cols">
<span>订单详情</span>
@@ -91,7 +93,7 @@
</div>
</div>
</div>
<el-skeleton size="large" fix v-if="spinShow"></el-skeleton>
</div>
<!-- 分页 -->
@@ -103,7 +105,9 @@
</UserCenterLayout>
<!-- 个人中心首页订单列表 -->
<empty v-if="homePage && orderList.length === 0" />
<el-skeleton v-if="homePage && spinShow" :rows="5" animated />
<el-empty v-else-if="homePage && queryFailed" description="加载失败,请重试"><el-button type="primary" @click="getList">重新加载</el-button></el-empty>
<empty v-else-if="homePage && orderList.length === 0" />
<div class="order-content" v-else-if="homePage">
<div class="order-cols">
<span>订单详情</span>
@@ -173,7 +177,7 @@
</div>
</div>
</div>
<el-skeleton size="large" fix v-if="spinShow"></el-skeleton>
</div>
<el-dialog v-model="cancelAvail" title="请选择取消订单原因">
<el-alert v-if="cancelIsPickup" title="此订单使用提货卡兑换,取消不退还提货权益,无法再次兑换。" type="warning" :closable="false" style="margin-bottom:16px" />
@@ -193,6 +197,7 @@
</template>
<script setup>
import { catchHandledRequestError } from "@/utils/requestError";
import { onMounted, reactive, ref, watch } from "vue";
import { useRoute, useRouter } from "vue-router";
import { Message, Modal } from "@/utils/message";
@@ -227,6 +232,8 @@ const cancelParams = reactive({ // 取消售后参数
const changeWay = ref(['全部', '待付款', '待发货', '待收货/使用']);
const activeOrderTab = ref(0);
const total = ref(0); // 数据总数
const queryFailed = ref(false); // 区分加载失败与暂无记录,支持重新查询
let listRequestVersion = 0; // 仅允许最后一次查询更新列表与加载状态
const spinShow = ref(false); // 加载状态
const cancelIsPickup = ref(false);
const cancelAvail = ref(false); // 取消订单modal控制
@@ -322,17 +329,30 @@ function delOrder (sn) { // 删除订单
});
}
function getList () {
const version = ++listRequestVersion;
queryFailed.value = false;
spinShow.value = true;
let _params = JSON.parse(JSON.stringify(params))
if (_params.orderStatus === 'ALL') {
delete _params.orderStatus
}
getOrderList(_params).then(res => {
spinShow.value = false
if (version !== listRequestVersion) return;
if (res.success) {
orderList.value = res.result.records;
total.value = res.result.total;
}
}).catch((error) => {
if (version !== listRequestVersion) {
catchHandledRequestError(error);
return;
}
queryFailed.value = true;
orderList.value = [];
total.value = 0;
catchHandledRequestError(error);
}).finally(() => {
if (version === listRequestVersion) spinShow.value = false;
});
}
function mapAfterSaleOrder (item) {

View File

@@ -5,7 +5,9 @@
<el-button class="del-btn" @click="clearAll" type="primary">删除全部</el-button>
</template>
<!-- 订单列表 -->
<empty v-if="list.length === 0" />
<el-skeleton v-if="spinShow" :rows="5" animated />
<el-empty v-else-if="queryFailed" description="加载失败,请重试"><el-button type="primary" @click="getList">重新加载</el-button></el-empty>
<empty v-else-if="list.length === 0" />
<ul class="track-list" v-else>
<li
v-for="(item, index) in list"
@@ -39,6 +41,7 @@
</template>
<script setup>
import { catchHandledRequestError } from "@/utils/requestError";
import { onMounted, reactive, ref } from "vue";
import { useRouter } from "vue-router";
import { Message, Modal } from "@/utils/message";
@@ -50,6 +53,8 @@ defineOptions({ name: "MyTrack" });
const router = useRouter();
const list = ref([]); // 我的足迹,商品列表
const queryFailed = ref(false); // 区分加载失败与暂无记录,支持重新查询
let listRequestVersion = 0; // 仅允许最后一次查询更新列表与加载状态
const spinShow = ref(false); // 控制loading是否加载
const params = reactive({
pageNumber: 1,
@@ -118,9 +123,11 @@ function changePageSize(val) {
function getList() {
// 获取足迹列表
const version = ++listRequestVersion;
queryFailed.value = false;
spinShow.value = true;
tracksList(params).then((res) => {
spinShow.value = false;
if (version !== listRequestVersion) return;
if (res.success && res.result.records.length) {
list.value = res.result.records.filter(item =>{
return item != null
@@ -129,6 +136,17 @@ function getList() {
} else {
list.value = [];
}
}).catch((error) => {
if (version !== listRequestVersion) {
catchHandledRequestError(error);
return;
}
queryFailed.value = true;
list.value = [];
total.value = 0;
catchHandledRequestError(error);
}).finally(() => {
if (version === listRequestVersion) spinShow.value = false;
});
}

View File

@@ -163,6 +163,7 @@ function getGoodsDetail() {
}
})
.catch(() => {
isLoading.value = false;
router.push("/");
});
}