♻️ 简化错误处理,迁移painterReq

This commit is contained in:
BTMuli
2026-04-12 21:14:31 +08:00
parent 587363ace4
commit c2ab1c550c
23 changed files with 336 additions and 212 deletions

View File

@@ -74,10 +74,7 @@ async function loadNav(): Promise<void> {
nav.value = resp.data.data.navigator;
if (loadCode.value) loadCode.value = false;
} catch (e) {
let errMsg = String(e);
if (TGHttps.isHttpErr(e)) {
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
}
const errMsg = TGHttps.getErrMsg(e);
showSnackbar.error(`加载组件数据失败: ${errMsg}`);
await TGLogger.Error(`[TGameNav][loadNav] 加载组件数据失败:${e}`);
}
@@ -113,10 +110,7 @@ async function tryGetCode(): Promise<void> {
loadCode.value = false;
} catch (e) {
loadCode.value = false;
let errMsg = String(e);
if (TGHttps.isHttpErr(e)) {
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
}
const errMsg = TGHttps.getErrMsg(e);
showSnackbar.error(`获取兑换码失败: ${errMsg}`);
await TGLogger.Error(`[TGameNav][tryGetCode] 获取兑换码失败:${e}`);
}

View File

@@ -104,10 +104,7 @@ async function loadImageBuffer(): Promise<void> {
try {
buffer.value = await TGHttps.buffer(imageUrl);
} catch (e) {
let errMsg = String(e);
if (TGHttps.isHttpErr(e)) {
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
}
const errMsg = TGHttps.getErrMsg(e);
showSnackbar.error(`获取图像Buffer失败${errMsg}`);
await TGLogger.Error(`[PaoBirthCard][loadImageBuffer] 获取图像Buffer失败${imageUrl}`);
await TGLogger.Error(`[PaoBirthCard][loadImageBuffer] ${e}`);

View File

@@ -53,6 +53,7 @@ import TGNotify from "@utils/TGNotify.js";
import { postDetailRateLimiter } from "@utils/rateLimiter.js";
import { storeToRefs } from "pinia";
import { ref, shallowRef, watch } from "vue";
import TGHttps from "@utils/TGHttps.js";
/** 用于渲染的任务项 */
type ParseMission = {
@@ -197,15 +198,38 @@ async function tryAuto(skip: boolean = false): Promise<void> {
if (likeFind) likeCnt = likeFind.process;
const viewFind = postFilter.find((i) => i.key === "view_post_0");
if (viewFind) viewCnt = viewFind.process;
// 获取帖子列表
await TGLogger.Script("[米游币任务]获取帖子列表");
const listResp = await painterReq.forum.recent(26, 2, 2, undefined, 20);
let listResp: TGApp.BBS.Forum.PostForumResp | undefined;
try {
listResp = await painterReq.forum.recent(26, 2, 2, undefined, 20);
if (listResp.retcode !== 0) {
showSnackbar.error(`[${listResp.retcode}] ${listResp.message}`);
await TGLogger.Script(`获取帖子列表失败: [${listResp.retcode}] ${listResp.message}`, "warn");
await TGLogger.ScriptSep("米游币任务", false);
loadScript.value = false;
loadMission.value = false;
return;
}
} catch (e) {
const errMsg = TGHttps.getErrMsg(e);
showSnackbar.error(`获取帖子列表失败:${errMsg}`);
await TGLogger.Script(`获取帖子列表失败`, "error");
await TGLogger.Error(`[tus-mission][tryAuto] ${e}`);
await TGLogger.ScriptSep("米游币任务", false);
loadScript.value = false;
loadMission.value = false;
return;
}
if (!listResp) return;
// 执行操作
const ckShare = {
stoken: props.acCur.cookie.stoken,
stuid: props.acCur.cookie.stuid,
mid: props.acCur.cookie.mid,
};
const ckPost = { ltoken: props.acCur.cookie.ltoken, ltuid: props.acCur.cookie.ltuid };
for (const post of listResp.list) {
for (const post of listResp.data.list) {
if (!isShare) {
await TGLogger.Script(`[米游币任务]正在分享帖子${post.post.post_id}`);
const shareResp = await apiHubReq.post.share(post.post.post_id, ckShare);
@@ -320,7 +344,6 @@ async function autoSign(ck: TGApp.App.Account.Cookie, skip: boolean, ch?: string
}
await TGLogger.Script("[米游币任务]正在执行打卡");
const ckSign = { stoken: ck.stoken, stuid: ck.stuid, mid: ck.mid };
await painterReq.forum.recent(26, 2, 1, undefined, 20, ckSign);
const resp = await apiHubReq.sign(ckSign, 2, ch);
console.log("打卡情况", resp);
if (resp.retcode !== 0) {

View File

@@ -61,10 +61,7 @@ onMounted(async () => {
const viewResp = await Bili.video.view(aid, bvid);
videoData.value = viewResp.data;
} catch (e) {
let errMsg = String(e);
if (TGHttps.isHttpErr(e)) {
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
}
const errMsg = TGHttps.getErrMsg(e);
showSnackbar.error(`获取视频信息失败: ${errMsg}`);
await TGLogger.Error(`[TpVideo][onMounted] 获取视频信息异常: ${url}`);
await TGLogger.Error(`[TpVideo][onMounted] ${e}`);

View File

@@ -161,10 +161,7 @@ async function loadCoverBuffer(): Promise<void> {
try {
coverBuffer.value = await TGHttps.buffer(props.data.insert.vod.cover);
} catch (e) {
let errMsg = String(e);
if (TGHttps.isHttpErr(e)) {
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
}
const errMsg = TGHttps.getErrMsg(e);
showSnackbar.error(`获取图像Buffer失败${errMsg}`);
await TGLogger.Error(
`[TpVod][loadCoverBuffer] 获取图像Buffer失败${props.data.insert.vod.cover}`,

View File

@@ -33,6 +33,8 @@ import useUserStore from "@store/user.js";
import { openUrl } from "@tauri-apps/plugin-opener";
import { storeToRefs } from "pinia";
import { ref, shallowRef, useTemplateRef, watch } from "vue";
import TGHttps from "@utils/TGHttps.js";
import TGLogger from "@utils/TGLogger.js";
const { cookie } = storeToRefs(useUserStore());
@@ -73,18 +75,34 @@ async function loadMore(refresh: boolean = false): Promise<void> {
return;
}
loading.value = true;
const resp = await painterReq.follow(cookie.value, offset.value);
if ("retcode" in resp) {
showSnackbar.warn(`[${resp.retcode}] ${resp.message}`);
// 获取关注帖子列表
let resp: TGApp.BBS.Post.FollowPostResp | undefined;
try {
resp = await painterReq.follow(cookie.value, offset.value);
if (resp.retcode !== 0) {
showSnackbar.warn(`[${resp.retcode}] ${resp.message}`);
await TGLogger.Warn(`[VpOverlayFollow][loadMore] [${resp.retcode}] ${resp.message}`);
loading.value = false;
return;
}
} catch (e) {
const errMsg = TGHttps.getErrMsg(e);
showSnackbar.error(`获取关注帖子失败,${errMsg}`);
await TGLogger.Error(`[VpOverlayFollow][loadMore] 获取关注帖子失败`);
await TGLogger.Error(`[VpOverlayFollow][loadMore] ${e}`);
loading.value = false;
return;
}
offset.value = resp.next_offset;
isLast.value = resp.is_last;
if (refresh) posts.value = resp.list;
else posts.value = posts.value.concat(resp.list);
if (!resp) {
loading.value = false;
return;
}
offset.value = resp.data.next_offset;
isLast.value = resp.data.is_last;
if (refresh) posts.value = resp.data.list;
else posts.value = posts.value.concat(resp.data.list);
loading.value = false;
showSnackbar.success(`成功加载${resp.list.length}条数据`);
showSnackbar.success(`成功加载${resp.data.list.length}条数据`);
if (refresh && listEl.value) {
listEl.value.scrollTo({ top: 0, behavior: "smooth" });
}

View File

@@ -404,10 +404,7 @@ async function loadImageBuffer(): Promise<void> {
try {
buffer.value = await TGHttps.buffer(oriLink.value);
} catch (e) {
let errMsg = String(e);
if (TGHttps.isHttpErr(e)) {
errMsg = e.status ? `[${e.status}] ${e.statusText}` : e.message;
}
const errMsg = TGHttps.getErrMsg(e);
showSnackbar.error(`获取图像Buffer失败${errMsg}`);
await TGLogger.Error(`[VpOverlayImage][loadImageBuffer] 获取图像Buffer失败${oriLink.value}`);
await TGLogger.Error(`[VpOverlayImage][loadImageBuffer] ${e}`);

View File

@@ -1,21 +1,21 @@
<template>
<TOverlay v-model="visible">
<div class="tpol-box" v-if="card">
<div v-if="card" class="tpol-box">
<div class="tpol-title">
<span>抽奖详情</span>
<span>{{ timeStatus }}</span>
</div>
<div class="tpol-info">
<TpAvatar @click="toUserProfile(card.creator.uid)" :data="card.creator" position="left" />
<TpAvatar :data="card.creator" position="left" @click="toUserProfile(card.creator.uid)" />
<div>参与方式{{ upWay }}</div>
<div>奖品详情</div>
<div v-for="reward in card.rewards" :key="reward.name" class="tpol-info-reward">
<v-icon size="12" color="var(--tgc-pink-1)">mdi-gift</v-icon>
<v-icon color="var(--tgc-pink-1)" size="12">mdi-gift</v-icon>
<span>{{ reward.name }}</span>
<span>{{ reward.goal }}</span>
</div>
</div>
<div class="tpol-title" v-if="timeStatus === '已开奖'">中奖详情</div>
<div v-if="timeStatus === '已开奖'" class="tpol-title">中奖详情</div>
<template v-if="timeStatus === '已开奖'">
<template v-for="reward in card.rewards" :key="reward.name">
<div class="vpol-reward-title">{{ reward.name }} {{ reward.win }}/{{ reward.goal }}</div>
@@ -24,8 +24,8 @@
v-for="user in reward.users"
:key="user.uid"
:data="user"
position="left"
class="tpolr-user"
position="left"
@click="onUserClick(user)"
/>
</div>
@@ -35,7 +35,7 @@
</div>
</TOverlay>
</template>
<script setup lang="ts">
<script lang="ts" setup>
import TOverlay from "@comp/app/t-overlay.vue";
import showSnackbar from "@comp/func/snackbar.js";
import TpAvatar from "@comp/viewPost/tp-avatar.vue";
@@ -45,6 +45,8 @@ import { openUrl } from "@tauri-apps/plugin-opener";
import { generateShareImg } from "@utils/TGShare.js";
import { stamp2LastTime } from "@utils/toolFunc.js";
import { onUnmounted, ref, shallowRef, watch } from "vue";
import TGHttps from "@utils/TGHttps.js";
import TGLogger from "@utils/TGLogger.js";
type TpoLotteryProps = { lottery: string | undefined };
type RenderCard = {
@@ -81,13 +83,25 @@ watch(
async function load(): Promise<void> {
if (!props.lottery) return;
if (card.value) return;
const resp = await painterReq.lottery(props.lottery);
if ("retcode" in resp) {
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
let resp: TGApp.BBS.Lottery.Resp | undefined;
try {
resp = await painterReq.lottery(props.lottery);
if (resp.retcode !== 0) {
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
await TGLogger.Warn(`[VpOverlayLottery][load] 获取抽奖数据异常`);
await TGLogger.Warn(`[VpOverlayLottery][load] [${resp.retcode}] ${resp.message}`);
return;
}
} catch (e) {
const errMsg = TGHttps.getErrMsg(e);
showSnackbar.error(`获取抽奖数据异常: ${errMsg}`);
await TGLogger.Error(`[VpOverlayLottery][load] 获取抽奖数据异常`);
await TGLogger.Error(`[VpOverlayLottery][load] ${e}`);
return;
}
jsonData.value = resp;
if (resp.status === "Settled") timeStatus.value = "已开奖";
if (!resp) return;
jsonData.value = resp.data.show_lottery;
if (resp.data.show_lottery.status === "Settled") timeStatus.value = "已开奖";
else {
if (timer !== undefined) {
clearInterval(timer);
@@ -95,7 +109,7 @@ async function load(): Promise<void> {
}
timer = setInterval(flushTimeStatus, 1000);
}
card.value = transLotteryCard(resp);
card.value = transLotteryCard(resp.data.show_lottery);
upWay.value = getUpWay(card.value?.upWay);
}