️ emits 真好用x

This commit is contained in:
目棃
2024-01-27 19:54:00 +08:00
parent 65063424db
commit a30d8e3a28
5 changed files with 118 additions and 38 deletions

View File

@@ -21,12 +21,19 @@ import { onMounted, ref } from "vue";
import TGSqlite from "../../plugins/Sqlite"; import TGSqlite from "../../plugins/Sqlite";
import { useAppStore } from "../../store/modules/app"; import { useAppStore } from "../../store/modules/app";
import { useUserStore } from "../../store/modules/user"; import { useUserStore } from "../../store/modules/user";
import TGLogger from "../../utils/TGLogger";
import { getDeviceFp } from "../../web/request/getDeviceFp"; import { getDeviceFp } from "../../web/request/getDeviceFp";
import TGRequest from "../../web/request/TGRequest"; import TGRequest from "../../web/request/TGRequest";
import showConfirm from "../func/confirm"; import showConfirm from "../func/confirm";
import showSnackbar from "../func/snackbar"; import showSnackbar from "../func/snackbar";
import ToGameLogin from "../overlay/to-gameLogin.vue"; import ToGameLogin from "../overlay/to-gameLogin.vue";
interface TcUserBadgeEmits {
(e: "loadOuter", v: TGApp.Component.Loading.EmitParams): void;
}
const emits = defineEmits<TcUserBadgeEmits>();
const appStore = useAppStore(); const appStore = useAppStore();
const userStore = storeToRefs(useUserStore()); const userStore = storeToRefs(useUserStore());
@@ -45,10 +52,10 @@ onMounted(() => {
} }
}); });
// todo 完善 log
async function refreshUser() { async function refreshUser() {
const ck = userStore.cookie.value; const ck = userStore.cookie.value;
if (ck === undefined || JSON.stringify(ck) === "{}") { if (ck === undefined || JSON.stringify(ck) === "{}") {
await TGLogger.Error("[tc-userBadge][refreshUser] cookie 不存在");
showSnackbar({ showSnackbar({
color: "error", color: "error",
text: "扫码登录后才能刷新用户信息!", text: "扫码登录后才能刷新用户信息!",
@@ -57,61 +64,75 @@ async function refreshUser() {
return; return;
} }
loading.value = true; loading.value = true;
emits("loadOuter", { show: true, title: "正在刷新用户信息" });
const deviceInfo = appStore.deviceInfo; const deviceInfo = appStore.deviceInfo;
if (deviceInfo.device_fp === "00000000000") { if (deviceInfo.device_fp === "00000000000") {
appStore.deviceInfo = await getDeviceFp(appStore.deviceInfo); appStore.deviceInfo = await getDeviceFp(appStore.deviceInfo);
await TGLogger.Warn("[tc-userBadge][refreshUser] 刷新设备信息");
} }
let failCount = 0; let failCount = 0;
emits("loadOuter", { show: true, title: "正在验证 LToken" });
const verifyLTokenRes = await TGRequest.User.byLToken.verify(ck.ltoken, ck.ltuid); const verifyLTokenRes = await TGRequest.User.byLToken.verify(ck.ltoken, ck.ltuid);
if (typeof verifyLTokenRes === "string") { if (typeof verifyLTokenRes === "string") {
showSnackbar({ emits("loadOuter", { show: true, title: "正在验证 LToken", text: "验证 LToken 成功!" });
color: "success", await TGLogger.Info("[tc-userBadge][refreshUser] 验证 LToken 成功");
text: "验证 LToken 成功!",
});
} else { } else {
showSnackbar({ emits("loadOuter", {
color: "warn", show: true,
text: "验证 LToken 失败!即将重新获取 LToken", title: "正在验证 LToken",
text: "验证 LToken 失败!即将重新获取",
}); });
await TGLogger.Warn("[tc-userBadge][refreshUser] 验证 LToken 失败");
await TGLogger.Warn(
`[tc-userBadge][refreshUser] ${verifyLTokenRes.retcode}: ${verifyLTokenRes.message}`,
);
const ltokenRes = await TGRequest.User.bySToken.getLToken(ck.mid, ck.stoken); const ltokenRes = await TGRequest.User.bySToken.getLToken(ck.mid, ck.stoken);
if (typeof ltokenRes === "string") { if (typeof ltokenRes === "string") {
ck.ltoken = ltokenRes; ck.ltoken = ltokenRes;
showSnackbar({ emits("loadOuter", { show: true, title: "正在验证 LToken", text: "获取 LToken 成功!" });
color: "success", await TGLogger.Info("[tc-userBadge][refreshUser] 获取 LToken 成功");
text: "获取 LToken 成功!",
});
} else { } else {
showSnackbar({ emits("loadOuter", { show: true, title: "正在验证 LToken", text: "获取 LToken 失败!" });
color: "error", await TGLogger.Error("[tc-userBadge][refreshUser] 获取 LToken 失败");
text: "获取 LToken 失败!", await TGLogger.Error(
}); `[tc-userBadge][refreshUser] ${ltokenRes.retcode}: ${ltokenRes.message}`,
);
failCount++; failCount++;
} }
} }
emits("loadOuter", { show: true, title: "正在获取 CookieToken" });
const cookieTokenRes = await TGRequest.User.bySToken.getCookieToken(ck.mid, ck.stoken); const cookieTokenRes = await TGRequest.User.bySToken.getCookieToken(ck.mid, ck.stoken);
if (typeof cookieTokenRes === "string") { if (typeof cookieTokenRes === "string") {
ck.cookie_token = cookieTokenRes; ck.cookie_token = cookieTokenRes;
showSnackbar({ emits("loadOuter", {
color: "success", show: true,
title: "正在获取 CookieToken",
text: "获取 CookieToken 成功!", text: "获取 CookieToken 成功!",
}); });
await TGLogger.Info("[tc-userBadge][refreshUser] 获取 CookieToken 成功");
} else { } else {
showSnackbar({ emits("loadOuter", {
color: "error", show: true,
title: "正在获取 CookieToken",
text: "获取 CookieToken 失败!", text: "获取 CookieToken 失败!",
}); });
await TGLogger.Error("[tc-userBadge][refreshUser] 获取 CookieToken 失败");
await TGLogger.Error(
`[tc-userBadge][refreshUser] ${cookieTokenRes.retcode}: ${cookieTokenRes.message}`,
);
failCount++; failCount++;
} }
userStore.cookie.value = ck; userStore.cookie.value = ck;
await TGSqlite.saveAppData("cookie", JSON.stringify(ck)); await TGSqlite.saveAppData("cookie", JSON.stringify(ck));
emits("loadOuter", { show: true, title: "正在获取用户信息" });
const infoRes = await TGRequest.User.byCookie.getUserInfo(ck.cookie_token, ck.account_id); const infoRes = await TGRequest.User.byCookie.getUserInfo(ck.cookie_token, ck.account_id);
if ("retcode" in infoRes) { if ("retcode" in infoRes) {
showSnackbar({ emits("loadOuter", { show: true, title: "正在获取用户信息", text: "获取用户信息失败!" });
color: "error", await TGLogger.Error("[tc-userBadge][refreshUser] 获取用户信息失败");
text: "获取用户信息失败!", await TGLogger.Error(`[tc-userBadge][refreshUser] ${infoRes.retcode}: ${infoRes.message}`);
});
failCount++; failCount++;
} else { } else {
emits("loadOuter", { show: true, title: "正在获取用户信息", text: "获取用户信息成功!" });
const briefInfo: TGApp.App.Account.BriefInfo = { const briefInfo: TGApp.App.Account.BriefInfo = {
nickname: infoRes.nickname, nickname: infoRes.nickname,
uid: infoRes.uid, uid: infoRes.uid,
@@ -120,25 +141,22 @@ async function refreshUser() {
}; };
userStore.briefInfo.value = briefInfo; userStore.briefInfo.value = briefInfo;
await TGSqlite.saveAppData("userInfo", JSON.stringify(briefInfo)); await TGSqlite.saveAppData("userInfo", JSON.stringify(briefInfo));
showSnackbar({ await TGLogger.Info("[tc-userBadge][refreshUser] 获取用户信息成功");
color: "success",
text: "获取用户信息成功!",
});
} }
emits("loadOuter", { show: true, title: "正在获取账号信息" });
const accountRes = await TGRequest.User.byCookie.getAccounts(ck.cookie_token, ck.account_id); const accountRes = await TGRequest.User.byCookie.getAccounts(ck.cookie_token, ck.account_id);
if (Array.isArray(accountRes)) { if (Array.isArray(accountRes)) {
showSnackbar({ emits("loadOuter", { show: true, title: "正在获取账号信息", text: "获取账号信息成功!" });
color: "success", await TGLogger.Info("[tc-userBadge][refreshUser] 获取账号信息成功");
text: "获取账号信息成功!",
});
await TGSqlite.saveAccount(accountRes); await TGSqlite.saveAccount(accountRes);
const curAccount = await TGSqlite.getCurAccount(); const curAccount = await TGSqlite.getCurAccount();
if (curAccount) userStore.account.value = curAccount; if (curAccount) userStore.account.value = curAccount;
} else { } else {
showSnackbar({ emits("loadOuter", { show: true, title: "正在获取账号信息", text: "获取账号信息失败!" });
color: "error", await TGLogger.Error("[tc-userBadge][refreshUser] 获取账号信息失败");
text: "获取账号信息失败!", await TGLogger.Error(
}); `[tc-userBadge][refreshUser] ${accountRes.retcode}: ${accountRes.message}`,
);
failCount++; failCount++;
} }
loading.value = false; loading.value = false;
@@ -152,6 +170,7 @@ async function refreshUser() {
appStore.isLogin = true; appStore.isLogin = true;
} }
loading.value = false; loading.value = false;
emits("loadOuter", { show: false });
} }
async function confirmRefreshUser(): Promise<void> { async function confirmRefreshUser(): Promise<void> {

View File

@@ -140,6 +140,8 @@ const btnText = [
interface TCalendarEmits { interface TCalendarEmits {
(e: "success"): void; (e: "success"): void;
(e: "loadOuter", v: TGApp.Component.Loading.EmitParams): void;
} }
const emits = defineEmits<TCalendarEmits>(); const emits = defineEmits<TCalendarEmits>();
@@ -198,10 +200,12 @@ function getContents(day: number): void {
} }
async function share(): Promise<void> { async function share(): Promise<void> {
emits("loadOuter", { show: true, text: "正在生成图片..." });
const div = <HTMLElement>document.querySelector(".calendar-box"); const div = <HTMLElement>document.querySelector(".calendar-box");
const showType = switchType.value === "avatar" ? "角色" : "武器"; const showType = switchType.value === "avatar" ? "角色" : "武器";
const title = `【今日素材】${showType}${btnNow.value}`; const title = `【今日素材】${showType}${btnNow.value}`;
await generateShareImg(title, div); await generateShareImg(title, div);
emits("loadOuter", { show: false });
} }
// 前往留影叙佳期 // 前往留影叙佳期

View File

@@ -46,7 +46,7 @@
</div> </div>
<div class="config-right"> <div class="config-right">
<TcAppBadge /> <TcAppBadge />
<TcUserBadge /> <TcUserBadge @loadOuter="loadHandle" />
</div> </div>
</template> </template>
@@ -412,6 +412,17 @@ function submitDevMode(): void {
? showSnackbar({ text: "已关闭 dev 模式!" }) ? showSnackbar({ text: "已关闭 dev 模式!" })
: showSnackbar({ text: "已开启 dev 模式!" }); : showSnackbar({ text: "已开启 dev 模式!" });
} }
// 通过子组件的事件来控制 loading
function loadHandle(params: TGApp.Component.Loading.EmitParams): void {
loading.value = params.show;
if (params.title) {
loadingTitle.value = params.title;
}
if (params.text) {
loadingSub.value = params.text;
}
}
</script> </script>
<style lang="css" scoped> <style lang="css" scoped>
.config-box { .config-box {

View File

@@ -12,7 +12,13 @@
/> />
<v-btn class="select-btn" @click="submitHome">确定</v-btn> <v-btn class="select-btn" @click="submitHome">确定</v-btn>
</div> </div>
<component :is="item" v-for="item in components" :key="item" @success="loadEnd(item)" /> <component
:is="item"
v-for="item in components"
:key="item"
@success="loadEnd(item)"
@loadOuter="handleLoad"
/>
</div> </div>
</template> </template>
@@ -100,6 +106,18 @@ async function loadEnd(item: any): Promise<void> {
} }
} }
function handleLoad(params: TGApp.Component.Loading.EmitParams): void {
loading.value = params.show;
if (params.title) {
loadingTitle.value = params.title;
}
if (params.text) {
loadingSubtitle.value = params.text;
} else {
loadingSubtitle.value = "";
}
}
onUnmounted(() => { onUnmounted(() => {
components.value = []; components.value = [];
}); });

28
src/types/Component/Loading.d.ts vendored Normal file
View File

@@ -0,0 +1,28 @@
/**
* @file types/Component/Loading.d.ts
* @description Component Loading 类型声明文件
* @since Beta v0.4.2
*/
/**
* @description Loading 命名空间
* @namespace TGApp.Component.Loading
* @since Beta v0.4.2
* @memberof TGApp.Component
*/
declare namespace TGApp.Component.Loading {
/**
* @description Loading 参数-用于Emits
* @since Beta v0.4.2
* @interface EmitParams
* @property {boolean} show 显示
* @property {string} title 标题
* @property {string} text 副标题
* @return EmitParams
*/
interface EmitParams {
show: boolean;
title?: string;
text?: string;
}
}