mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-12 09:18:14 +08:00
feat(TGWindow): 精简代码,缓存可清除
This commit is contained in:
@@ -98,7 +98,7 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
// Node
|
||||
import { dialog, fs, window as TauriWindow } from "@tauri-apps/api";
|
||||
import { dialog, fs } from "@tauri-apps/api";
|
||||
import { onMounted, ref } from "vue";
|
||||
// Store
|
||||
import useAppStore from "../store/modules/app";
|
||||
@@ -115,6 +115,7 @@ import { Map } from "../interface/Base";
|
||||
import UIAF_Oper from "../plugins/UIAF";
|
||||
// Utils
|
||||
import TGMap from "../utils/TGMap";
|
||||
import { createTGWindow } from "../utils/TGWindow";
|
||||
|
||||
// Store
|
||||
const appStore = useAppStore();
|
||||
@@ -172,36 +173,7 @@ function selectSeries(index: number) {
|
||||
}
|
||||
// 打开图片
|
||||
function openImg() {
|
||||
// 获取窗口宽度
|
||||
const width = window.screen.width;
|
||||
// 获取窗口高度
|
||||
const height = window.screen.height;
|
||||
// 计算窗口位置
|
||||
const left = width / 2 - 480;
|
||||
const top = height / 2 - 360;
|
||||
if (TauriWindow.WebviewWindow.getByLabel("nameCard")) {
|
||||
new TauriWindow.WindowManager("nameCard").close().then(() => {
|
||||
new TauriWindow.WebviewWindow("nameCard", {
|
||||
height: 400,
|
||||
width: 840,
|
||||
x: left,
|
||||
y: top,
|
||||
resizable: false,
|
||||
url: getCardInfo.value.profile,
|
||||
title: getCardInfo.value.name,
|
||||
});
|
||||
});
|
||||
} else {
|
||||
new TauriWindow.WebviewWindow("nameCard", {
|
||||
height: 400,
|
||||
width: 840,
|
||||
x: left,
|
||||
y: top,
|
||||
resizable: false,
|
||||
url: getCardInfo.value.profile,
|
||||
title: getCardInfo.value.name,
|
||||
});
|
||||
}
|
||||
createTGWindow(getCardInfo.value.profile, "nameCard", getCardInfo.value.name, 840, 400, false);
|
||||
}
|
||||
// 获取标题
|
||||
async function getTitle() {
|
||||
|
||||
@@ -8,7 +8,10 @@
|
||||
<v-list-item-title>打开用户数据目录</v-list-item-title>
|
||||
</v-list-item>
|
||||
<v-list-item @click="deleteData" prepend-icon="mdi-delete">
|
||||
<v-list-item-title>删除本地数据</v-list-item-title>
|
||||
<v-list-item-title>删除用户数据</v-list-item-title>
|
||||
</v-list-item>
|
||||
<v-list-item @click="deleteTemp" prepend-icon="mdi-delete">
|
||||
<v-list-item-title>删除临时数据</v-list-item-title>
|
||||
</v-list-item>
|
||||
<v-list-item @click="setDefaultConfig" prepend-icon="mdi-cog">
|
||||
<v-list-item-title>恢复默认配置</v-list-item-title>
|
||||
@@ -73,6 +76,18 @@ async function deleteData() {
|
||||
});
|
||||
}
|
||||
}
|
||||
// 删除临时数据
|
||||
async function deleteTemp() {
|
||||
const res = await dialog.confirm("确定要删除临时数据吗?");
|
||||
if (res) {
|
||||
await fs.removeDir("tempData", {
|
||||
dir: BaseDirectory.AppLocalData,
|
||||
recursive: true,
|
||||
});
|
||||
await fs.createDir("tempData", { dir: BaseDirectory.AppLocalData });
|
||||
await dialog.message("临时数据已删除!");
|
||||
}
|
||||
}
|
||||
// 恢复默认配置
|
||||
async function setDefaultConfig() {
|
||||
const res = await dialog.confirm("确定要恢复默认配置吗?");
|
||||
|
||||
@@ -102,6 +102,7 @@
|
||||
<script lang="ts" setup>
|
||||
import { onMounted, ref } from "vue";
|
||||
import useDevStore from "../store/modules/dev";
|
||||
import useAppStore from "../store/modules/app";
|
||||
import {
|
||||
MysPostType,
|
||||
ResponseNewsList,
|
||||
@@ -109,11 +110,12 @@ import {
|
||||
EnumPostType,
|
||||
ResponsePost,
|
||||
} from "../interface/MysPost";
|
||||
// import { http,window as TauriWindow } from "@tauri-apps/api";
|
||||
import { http } from "@tauri-apps/api";
|
||||
import { http, fs } from "@tauri-apps/api";
|
||||
import { createTGWindow } from "../utils/TGWindow";
|
||||
|
||||
// Store
|
||||
const devStore = useDevStore();
|
||||
const appStore = useAppStore();
|
||||
|
||||
// 常量
|
||||
const MysNewsApi = "https://bbs-api.mihoyo.com/post/wapi/getNewsList?gids=2&type=";
|
||||
@@ -189,51 +191,26 @@ async function toPost(post_id: string) {
|
||||
postHtml.querySelectorAll("img").forEach(img => {
|
||||
img.style.width = "100%";
|
||||
});
|
||||
// 将 html 转为能够通过 window.open 打开的 url
|
||||
const postUrl = URL.createObjectURL(
|
||||
new Blob([postHtml.documentElement.outerHTML], { type: "text/html;charset=utf-8" })
|
||||
// 将 html 保存到 文件
|
||||
await fs.writeTextFile(
|
||||
`${appStore.dataPath.temp}\\${post.post_id}.html`,
|
||||
postHtml.documentElement.outerHTML
|
||||
);
|
||||
// 打开新窗口,窗口位置居中
|
||||
// 获取窗口宽度
|
||||
const width = window.screen.width;
|
||||
// 获取窗口高度
|
||||
const height = window.screen.height;
|
||||
// 计算窗口位置
|
||||
const left = width / 2 - 480;
|
||||
const top = height / 2 - 360;
|
||||
// 打开窗口
|
||||
window.open(postUrl, "_blank", `width=960,height=720,left=${left},top=${top}`);
|
||||
// new TauriWindow.WebviewWindow("blob", {
|
||||
// url: postUrl,
|
||||
// title: post.subject,
|
||||
// decorations: true,
|
||||
// width: 960,
|
||||
// x: left,
|
||||
// y: top,
|
||||
// height: 720,
|
||||
// resizable: false,
|
||||
// });
|
||||
const postUrl = `file:\\\\\\${appStore.dataPath.temp}\\${post.post_id}.html`;
|
||||
createTGWindow(postUrl, "MysPost", post.subject, 960, 720, false);
|
||||
}
|
||||
async function logPost(post_id: string) {
|
||||
const post = await getPost(post_id).then(res => {
|
||||
return res.data;
|
||||
});
|
||||
// 将 Json 内容写入 html
|
||||
const postHtml = new DOMParser().parseFromString(JSON.stringify(post), "text/html");
|
||||
// 将 html 转为能够通过 window.open 打开的 url
|
||||
const postUrl = URL.createObjectURL(
|
||||
new Blob([postHtml.documentElement.outerHTML], { type: "text/html;charset=utf-8" })
|
||||
// 将 json 保存到 文件
|
||||
await fs.writeTextFile(
|
||||
`${appStore.dataPath.temp}\\${post_id}_log.json`,
|
||||
JSON.stringify(post, null, 4)
|
||||
);
|
||||
// 打开新窗口,窗口位置居中
|
||||
// 获取窗口宽度
|
||||
const width = window.screen.width;
|
||||
// 获取窗口高度
|
||||
const height = window.screen.height;
|
||||
// 计算窗口位置
|
||||
const left = width / 2 - 480;
|
||||
const top = height / 2 - 360;
|
||||
const postUrl = `file:\\\\\\${appStore.dataPath.temp}\\${post_id}_log.json`;
|
||||
// 打开窗口
|
||||
window.open(postUrl, "_blank", `width=960,height=720,left=${left},top=${top}`);
|
||||
createTGWindow(postUrl, "MysPostLog", post_id, 960, 720, false);
|
||||
}
|
||||
async function getPost(post_id: string): Promise<ResponsePost> {
|
||||
return http
|
||||
|
||||
54
src/utils/TGWindow.ts
Normal file
54
src/utils/TGWindow.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
/**
|
||||
* @file utils TGWindow.ts
|
||||
* @description 用于创建TG窗口的工具
|
||||
* @author BTMuli<bt-muli@outlook.com>
|
||||
* @since Alpha
|
||||
*/
|
||||
|
||||
import { window as TauriWindow } from "@tauri-apps/api";
|
||||
/**
|
||||
* @description 创建TG窗口
|
||||
* @param {string} url 窗口地址
|
||||
* @param {string} label 窗口标签
|
||||
* @param {string} title 窗口标题
|
||||
* @param {number} width 窗口宽度
|
||||
* @param {number} height 窗口高度
|
||||
* @param {boolean} resizable 是否可调整大小
|
||||
* @returns {void}
|
||||
*/
|
||||
export function createTGWindow(
|
||||
url: string,
|
||||
label: string,
|
||||
title: string,
|
||||
width: number,
|
||||
height: number,
|
||||
resizable: boolean
|
||||
): void {
|
||||
// 计算窗口位置
|
||||
const left = (window.screen.width - width) / 2;
|
||||
const top = (window.screen.height - height) / 2;
|
||||
// 判断窗口是否存在
|
||||
if (TauriWindow.WebviewWindow.getByLabel(label)) {
|
||||
new TauriWindow.WindowManager(label).close().then(() => {
|
||||
new TauriWindow.WebviewWindow(label, {
|
||||
height: height,
|
||||
width: width,
|
||||
x: left,
|
||||
y: top,
|
||||
resizable: resizable,
|
||||
url: url,
|
||||
title: title,
|
||||
});
|
||||
});
|
||||
} else {
|
||||
new TauriWindow.WebviewWindow(label, {
|
||||
height: height,
|
||||
width: width,
|
||||
x: left,
|
||||
y: top,
|
||||
resizable: resizable,
|
||||
url: url,
|
||||
title: title,
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user