♻️ 方法提取

This commit is contained in:
BTMuli
2025-12-22 16:15:23 +08:00
parent 06ff32d47d
commit a2ff92d00a
6 changed files with 50 additions and 46 deletions

View File

@@ -31,12 +31,13 @@ import { openUrl } from "@tauri-apps/plugin-opener";
import { getBuildTime } from "@utils/TGBuild.js";
import TGLogger from "@utils/TGLogger.js";
import { getWindowSize, resizeWindow } from "@utils/TGWindow.js";
import { isRunInAdmin } from "@utils/toolFunc.js";
import { storeToRefs } from "pinia";
import { computed, onMounted, onUnmounted, ref } from "vue";
import { computed, nextTick, onMounted, onUnmounted, ref } from "vue";
import { useRouter } from "vue-router";
const router = useRouter();
const { theme, needResize, deviceInfo, isLogin, userDir, buildTime, closeToTray } =
const { theme, needResize, deviceInfo, isLogin, userDir, buildTime, closeToTray, isInAdmin } =
storeToRefs(useAppStore());
const { uid, briefInfo, account, cookie } = storeToRefs(useUserStore());
@@ -61,6 +62,8 @@ onMounted(async () => {
dpListener = await event.listen<string>("active_deep_link", handleDpListen);
yaeListener = await event.listen<TGApp.Plugins.Yae.RsEvent>("yae_read", handleYaeListen);
closeListener = await event.listen("main-window-close-requested", handleWindowClose);
await nextTick();
if (isInAdmin.value) await win.setTitle(`${title} - AdminMode`);
}
if (needResize.value !== "false") await resizeWindow();
document.documentElement.className = theme.value;
@@ -225,6 +228,7 @@ async function handleResizeListen(event: Event<string>): Promise<void> {
async function listenOnInit(): Promise<void> {
console.info("[App][listenOnInit] 监听初始化事件!");
await event.listen<void>("initApp", async () => {
await checkIsAdmin();
await checkAppLoad();
await checkDeviceFp();
try {
@@ -238,6 +242,10 @@ async function listenOnInit(): Promise<void> {
});
}
async function checkIsAdmin(): Promise<void> {
isInAdmin.value = await isRunInAdmin();
}
async function checkAppLoad(): Promise<void> {
let checkDB = false;
try {

View File

@@ -303,7 +303,7 @@ import { computed, onMounted, onUnmounted, ref } from "vue";
import ToSwitchAc from "./to-switchAc.vue";
const { sidebar, theme, isLogin, recentNewsType, gameDir } = storeToRefs(useAppStore());
const { sidebar, theme, isLogin, recentNewsType, gameDir, isInAdmin } = storeToRefs(useAppStore());
const { uid, briefInfo, cookie, account } = storeToRefs(useUserStore());
let themeListener: UnlistenFn | null = null;
// @ts-expect-error The import.meta meta-property is not allowed in files which will build into CommonJS output.
@@ -669,14 +669,6 @@ async function tryLaunchGame(): Promise<void> {
showSnackbar.warn("未检测到原神本体应用!");
return;
}
let isAdmin = false;
try {
isAdmin = await invoke<boolean>("is_in_admin");
} catch (err) {
showSnackbar.error(`检测管理员权限失败:${err}`);
await TGLogger.Error(`[pageAchi][toYae]检测管理员权限失败:${err}`);
return;
}
const resp = await passportReq.authTicket(account.value, cookie.value);
if (typeof resp !== "string") {
showSnackbar.error(`[${resp.retcode}] ${resp.message}`);
@@ -686,7 +678,7 @@ async function tryLaunchGame(): Promise<void> {
await TGLogger.Error(`[sidebar][tryLaunchGame] resp: ${JSON.stringify(resp)}`);
return;
}
if (!isAdmin) {
if (!isInAdmin.value) {
showSnackbar.success(`成功获取ticket:${resp},正在启动应用...`);
const cmd = Command.create("exec-sh", [`&"${gamePath}" login_auth_ticket=${resp}`], {
cwd: gameDir.value,

View File

@@ -31,18 +31,18 @@
</template>
<template #extension>
<div class="top-extension">
<v-btn class="top-btn" prepend-icon="mdi-import" variant="elevated" @click="importJson()"
>导入</v-btn
>
<v-btn class="top-btn" prepend-icon="mdi-export" variantelevated @click="exportJson()"
>导出</v-btn
>
<v-btn class="top-btn" prepend-icon="mdi-plus" variant="elevated" @click="createUid()"
>新建存档</v-btn
>
<v-btn class="top-btn" prepend-icon="mdi-delete" variant="elevated" @click="deleteUid()"
>删除存档</v-btn
>
<v-btn class="top-btn" prepend-icon="mdi-import" variant="elevated" @click="importJson()">
导入
</v-btn>
<v-btn class="top-btn" prepend-icon="mdi-export" variantelevated @click="exportJson()">
导出
</v-btn>
<v-btn class="top-btn" prepend-icon="mdi-plus" variant="elevated" @click="createUid()">
新建存档
</v-btn>
<v-btn class="top-btn" prepend-icon="mdi-delete" variant="elevated" @click="deleteUid()">
删除存档
</v-btn>
<div class="top-switch" @click="switchHideFin">
<v-icon v-if="hideFin" color="var(--tgc-od-green)">
mdi-checkbox-marked-circle-outline
@@ -114,7 +114,7 @@ const seriesList = AppAchievementSeriesData.sort((a, b) => a.order - b.order).ma
const route = useRoute();
const router = useRouter();
const { gameDir } = storeToRefs(useAppStore());
const { gameDir, isInAdmin } = storeToRefs(useAppStore());
let achiListener: UnlistenFn | null = null;
@@ -318,16 +318,7 @@ async function toYae(): Promise<void> {
showSnackbar.warn("未检测到原神本体应用!");
return;
}
// 判断是否是管理员权限
let isAdmin = false;
try {
isAdmin = await invoke<boolean>("is_in_admin");
} catch (err) {
showSnackbar.error(`检测管理员权限失败:${err}`);
await TGLogger.Error(`[pageAchi][toYae]检测管理员权限失败:${err}`);
return;
}
if (!isAdmin) {
if (!isInAdmin.value) {
const check = await showDialog.check("是否以管理员模式重启?", "该功能需要管理员权限才能使用");
if (!check) {
showSnackbar.cancel("已取消以管理员模式重启");

View File

@@ -130,7 +130,7 @@ export type MaterialInfo = {
info: TGApp.App.Material.WikiItem;
};
const { gameDir } = storeToRefs(useAppStore());
const { gameDir, isInAdmin } = storeToRefs(useAppStore());
const curUid = ref<number>(0);
const selectType = ref<string | null>(null);
@@ -271,16 +271,7 @@ async function tryCallYae(): Promise<void> {
showSnackbar.warn("未检测到原神本体应用!");
return;
}
// 判断是否是管理员权限
let isAdmin = false;
try {
isAdmin = await invoke<boolean>("is_in_admin");
} catch (err) {
showSnackbar.error(`检测管理员权限失败:${err}`);
await TGLogger.Error(`[pageAchi][toYae]检测管理员权限失败:${err}`);
return;
}
if (!isAdmin) {
if (!isInAdmin.value) {
const check = await showDialog.check("是否以管理员模式重启?", "该功能需要管理员权限才能使用");
if (!check) {
showSnackbar.cancel("已取消以管理员模式重启");

View File

@@ -65,6 +65,8 @@ const useAppStore = defineStore(
const cancelLike = ref<boolean>(true);
/* 关闭窗口时最小化到托盘 */
const closeToTray = ref<boolean>(false);
/** 是否是管理员模式 */
const isInAdmin = ref<boolean>(false);
/**
* 初始化应用状态
@@ -147,6 +149,7 @@ const useAppStore = defineStore(
init,
changeTheme,
getImageUrl,
isInAdmin,
};
},
{

View File

@@ -3,9 +3,12 @@
* @since Beta v0.9.0
*/
import showSnackbar from "@comp/func/snackbar.js";
import { AvatarExtResTypeEnum, AvatarExtTypeEnum } from "@enum/bbs.js";
import { path } from "@tauri-apps/api";
import { invoke } from "@tauri-apps/api/core";
import { type } from "@tauri-apps/plugin-os";
import TGLogger from "@utils/TGLogger.js";
import { v4 } from "uuid";
import { AppCharacterData, AppWeaponData } from "@/data/index.js";
@@ -318,3 +321,19 @@ export function getUserAvatar(
// TODO: 处理其他类型头像
return user.avatar_url;
}
/**
* 判断是否是管理员模式
* @since Beta v0.9.1
*/
export async function isRunInAdmin(): Promise<boolean> {
let isAdmin = false;
try {
isAdmin = await invoke<boolean>("is_in_admin");
} catch (err) {
showSnackbar.error(`检测管理员权限失败:${err}`);
await TGLogger.Error(`[pageAchi][toYae]检测管理员权限失败:${err}`);
return false;
}
return isAdmin;
}