mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-13 09:28:14 +08:00
✨ 幻想真境剧诗适配-战绩页面 #113
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
<TurOverviewSub title="成就达成数" :text="data.achievementNumber" />
|
||||
<TurOverviewSub title="获得角色数" :text="data.avatarNumber" />
|
||||
<TurOverviewSub title="深境螺旋" :text="data.sprialAbyss" />
|
||||
<TurOverviewSub title="幻想真境剧诗" :text="data.combatRole" />
|
||||
<TurOverviewSub title="解锁传送点" :text="data.wayPoints" />
|
||||
<TurOverviewSub title="解锁秘境" :text="data.domainNumber" />
|
||||
<TurOverviewSub title="风神瞳" :text="data.anemoCulus" />
|
||||
|
||||
@@ -104,6 +104,8 @@ async function refresh(): Promise<void> {
|
||||
const res = await TGRequest.User.getRecord(cookie, user);
|
||||
if (!("retcode" in res)) {
|
||||
await TGLogger.Info(`[UserRecord][refresh][${user.gameUid}] 获取战绩数据成功`);
|
||||
await TGLogger.Info(`[UserRecord][refresh][${user.gameUid}]`, false);
|
||||
await TGLogger.Info(JSON.stringify(res), false);
|
||||
loadingTitle.value = "正在保存战绩数据";
|
||||
await TGSqlite.saveUserRecord(res, user.gameUid);
|
||||
await initUserRecordData();
|
||||
|
||||
@@ -11,16 +11,16 @@ import {
|
||||
AppAchievementSeriesData,
|
||||
AppNameCardsData,
|
||||
AppCharacterData,
|
||||
} from "../../../data";
|
||||
import { getBuildTime } from "../../../utils/TGBuild";
|
||||
} from "../../../data/index.js";
|
||||
import { getBuildTime } from "../../../utils/TGBuild.js";
|
||||
|
||||
import initTableSql from "./initTable";
|
||||
import initTableSql from "./initTable.js";
|
||||
import {
|
||||
insertAchievementData,
|
||||
insertAchievementSeriesData,
|
||||
insertNameCardData,
|
||||
insertCharacterData,
|
||||
} from "./insertData";
|
||||
} from "./insertData.js";
|
||||
|
||||
/**
|
||||
* @description 初始化应用表数据
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
* @since Beta v0.3.3
|
||||
*/
|
||||
|
||||
import { transCharacterData, transFloorData } from "../utils/transAbyssData";
|
||||
import { timeToSecond } from "../utils/transTime";
|
||||
import { transUserRecord } from "../utils/transUserRecord";
|
||||
import { transUserRoles } from "../utils/transUserRoles";
|
||||
import { transCharacterData, transFloorData } from "../utils/transAbyssData.js";
|
||||
import { timeToSecond } from "../utils/transTime.js";
|
||||
import { transUserRecord } from "../utils/transUserRecord.js";
|
||||
import { transUserRoles } from "../utils/transUserRoles.js";
|
||||
|
||||
/**
|
||||
* @description 插入成就数据
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* @since Beta v0.3.9
|
||||
*/
|
||||
|
||||
import { timeToSecond } from "./transTime";
|
||||
import { timeToSecond } from "./transTime.js";
|
||||
|
||||
/**
|
||||
* @description 将通过 api 获取到的深渊数据转换为数据库中的数据
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/**
|
||||
* @file plugins/Sqlite/utils/transUserRecord.ts
|
||||
* @description Sqlite 数据转换 用户战绩数据转换模块
|
||||
* @since Beta v0.4.3
|
||||
* @since Beta v0.4.10
|
||||
*/
|
||||
|
||||
/**
|
||||
@@ -79,11 +79,17 @@ function transAvatar(data: TGApp.Game.Record.Avatar[]): string {
|
||||
|
||||
/**
|
||||
* @description 将统计信息转换为数据库中的数据
|
||||
* @since Alpha v0.2.2
|
||||
* @since Beta v0.4.10
|
||||
* @param {TGApp.Game.Record.Stats} data 统计信息
|
||||
* @return {string} 转换后的统计信息
|
||||
*/
|
||||
function transStat(data: TGApp.Game.Record.Stats): string {
|
||||
let combatRole: string;
|
||||
if (!data.role_combat.is_unlock) {
|
||||
combatRole = "未解锁";
|
||||
} else {
|
||||
combatRole = `第 ${data.role_combat.max_round_id} 幕`;
|
||||
}
|
||||
const stats: TGApp.Sqlite.Record.Stats = {
|
||||
activeDays: data.active_day_number,
|
||||
achievementNumber: data.achievement_number,
|
||||
@@ -96,6 +102,7 @@ function transStat(data: TGApp.Game.Record.Stats): string {
|
||||
dendroCulus: data.dendroculus_number,
|
||||
hydroCulus: data.hydroculus_number,
|
||||
sprialAbyss: data.spiral_abyss,
|
||||
combatRole: combatRole,
|
||||
luxuriousChest: data.luxurious_chest_number,
|
||||
preciousChest: data.precious_chest_number,
|
||||
exquisiteChest: data.exquisite_chest_number,
|
||||
|
||||
31
src/types/Game/Record.d.ts
vendored
31
src/types/Game/Record.d.ts
vendored
@@ -1,12 +1,12 @@
|
||||
/**
|
||||
* @file types/Game/Record.d.ts
|
||||
* @description 原神战绩相关类型定义文件
|
||||
* @since Alpha v0.2.2
|
||||
* @since Beta v0.4.10
|
||||
*/
|
||||
|
||||
/**
|
||||
* @description 原神战绩相关类型定义命名空间
|
||||
* @since Alpha v0.2.2
|
||||
* @since Beta v0.4.10
|
||||
* @namespace TGApp.Game.Record
|
||||
* @memberof TGApp.Game
|
||||
*/
|
||||
@@ -47,11 +47,12 @@ declare namespace TGApp.Game.Record {
|
||||
/**
|
||||
* @description 角色信息类型
|
||||
* @interface Role
|
||||
* @since Alpha v0.2.0
|
||||
* @since Beta v0.4.10
|
||||
* @property {string} AvatarUrl - 角色头像 // 通常为 ""
|
||||
* @property {string} nickname - 角色昵称
|
||||
* @property {string} region - 区域
|
||||
* @property {number} level - 等级
|
||||
* @property {string} game_head_icon - 游戏头像
|
||||
* @return Role
|
||||
*/
|
||||
interface Role {
|
||||
@@ -59,6 +60,7 @@ declare namespace TGApp.Game.Record {
|
||||
nickname: string;
|
||||
region: string;
|
||||
level: number;
|
||||
game_head_icon: string;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -93,7 +95,7 @@ declare namespace TGApp.Game.Record {
|
||||
/**
|
||||
* @description 统计信息类型
|
||||
* @interface Stats
|
||||
* @since Alpha v0.2.2
|
||||
* @since Beta v0.4.10
|
||||
* @property {number} active_day_number - 活跃天数
|
||||
* @property {number} achievement_number - 成就数量
|
||||
* @property {number} anemoculus_number - 风神瞳数量
|
||||
@@ -110,6 +112,8 @@ declare namespace TGApp.Game.Record {
|
||||
* @property {number} magic_chest_number - 奇馈宝箱数量
|
||||
* @property {number} dendroculus_number - 草神瞳数量
|
||||
* @property {number} hydroculus_number - 水神瞳数量
|
||||
* @property {unknown} field_ext_map - 数据对应链接的map,用不到设为 unknown
|
||||
* @property {CombatStats} role_combat - 幻想真境剧诗数据
|
||||
* @return Stats
|
||||
*/
|
||||
interface Stats {
|
||||
@@ -129,6 +133,25 @@ declare namespace TGApp.Game.Record {
|
||||
magic_chest_number: number;
|
||||
dendroculus_number: number;
|
||||
hydroculus_number: number;
|
||||
field_ext_map: unknown;
|
||||
role_combat: CombatStats;
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 幻想真境剧诗数据类型
|
||||
* @interface CombatStats
|
||||
* @since Beta v0.4.10
|
||||
* @property {boolean} is_unlock - 是否解锁
|
||||
* @property {number} max_round_id - 最大报幕数
|
||||
* @property {boolean} has_data - 是否有数据
|
||||
* @property {boolean} has_detail_data - 是否有详细数据
|
||||
* @return CombatStats
|
||||
*/
|
||||
interface CombatStats {
|
||||
is_unlock: boolean;
|
||||
max_round_id: number;
|
||||
has_data: boolean;
|
||||
has_detail_data: boolean;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
8
src/types/Sqlite/Record.d.ts
vendored
8
src/types/Sqlite/Record.d.ts
vendored
@@ -1,12 +1,12 @@
|
||||
/**
|
||||
* @file types/Sqlite/Record.d.ts
|
||||
* @description Sqlite 原神战绩相关类型定义文件
|
||||
* @since Beta v0.4.3
|
||||
* @since Beta v0.4.10
|
||||
*/
|
||||
|
||||
/**
|
||||
* @description Sqlite 原神战绩相关类型定义命名空间
|
||||
* @since Beta v0.4.3
|
||||
* @since Beta v0.4.10
|
||||
* @namespace Record
|
||||
* @memberof TGApp.Sqlite
|
||||
*/
|
||||
@@ -78,7 +78,7 @@ declare namespace TGApp.Sqlite.Record {
|
||||
/**
|
||||
* @description 统计信息类型
|
||||
* @interface Stats
|
||||
* @since Alpha v0.2.2
|
||||
* @since Beta v0.4.10
|
||||
* @property {number} activeDays - 活跃天数
|
||||
* @property {number} achievementNumber - 成就达成数
|
||||
* @property {number} avatarNumber - 获得角色数
|
||||
@@ -90,6 +90,7 @@ declare namespace TGApp.Sqlite.Record {
|
||||
* @property {number} dendroCulus - 草神瞳数
|
||||
* @property {number} hydroCulus - 水神瞳数
|
||||
* @property {string} sprialAbyss - 深境螺旋信息
|
||||
* @property {string} combatRole - 幻想真境剧诗
|
||||
* @property {number} luxuriousChest - 华丽宝箱数
|
||||
* @property {number} preciousChest - 珍贵宝箱数
|
||||
* @property {number} exquisiteChest - 精致宝箱数
|
||||
@@ -109,6 +110,7 @@ declare namespace TGApp.Sqlite.Record {
|
||||
dendroCulus: number;
|
||||
hydroCulus: number;
|
||||
sprialAbyss: string;
|
||||
combatRole: string;
|
||||
luxuriousChest: number;
|
||||
preciousChest: number;
|
||||
exquisiteChest: number;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
/**
|
||||
* @file utils/TGShare.ts
|
||||
* @description 生成分享截图并保存到本地
|
||||
* @since Beta v0.4.4
|
||||
* @since Beta v0.4.10
|
||||
*/
|
||||
|
||||
import { dialog, fs, http, path } from "@tauri-apps/api";
|
||||
import type { Response } from "@tauri-apps/api/http";
|
||||
import html2canvas from "html2canvas";
|
||||
|
||||
import showConfirm from "../components/func/confirm.js";
|
||||
@@ -15,7 +16,7 @@ import { bytesToSize } from "./toolFunc.js";
|
||||
|
||||
/**
|
||||
* @description 保存图片-canvas
|
||||
* @since Beta v0.4.4
|
||||
* @since Beta v0.4.10
|
||||
* @param {Uint8Array} buffer - 图片数据
|
||||
* @param {string} filename - 文件名
|
||||
* @param {string} format - 文件格式
|
||||
@@ -27,54 +28,47 @@ export async function saveCanvasImg(
|
||||
format?: string,
|
||||
): Promise<void> {
|
||||
if (format === undefined) format = "png";
|
||||
await dialog
|
||||
.save({
|
||||
const res = await dialog.save({
|
||||
title: "保存图片",
|
||||
filters: [{ name: "图片", extensions: [format] }],
|
||||
defaultPath: `${await path.downloadDir()}${path.sep}${filename}.${format}`,
|
||||
})
|
||||
.then(async (res) => {
|
||||
if (res === null) return;
|
||||
await fs.writeBinaryFile({
|
||||
path: res,
|
||||
contents: buffer,
|
||||
});
|
||||
});
|
||||
if (res === null) {
|
||||
await TGLogger.Info(`[saveCanvasImg][${filename}] 未选择保存路径`);
|
||||
return;
|
||||
}
|
||||
await fs.writeBinaryFile({ path: res, contents: buffer });
|
||||
await TGLogger.Info(`[saveCanvasImg][${filename}] 已将图像保存到本地`);
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 将图片保存到本地
|
||||
* @since Alpha v0.2.0
|
||||
* @since Beta v0.4.10
|
||||
* @param {string} url - 图片链接
|
||||
* @returns {Promise<string>} 图片元素
|
||||
*/
|
||||
export async function saveImgLocal(url: string): Promise<string> {
|
||||
return await http
|
||||
.fetch<ArrayBuffer>(url, {
|
||||
const res: Response<Uint8Array> = await http.fetch(url, {
|
||||
method: "GET",
|
||||
responseType: http.ResponseType.Binary,
|
||||
})
|
||||
.then(async (res) => {
|
||||
});
|
||||
const buffer = new Uint8Array(res.data);
|
||||
const blob = new Blob([buffer], { type: "image/png" });
|
||||
return URL.createObjectURL(blob);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @description 返回图片 buffer
|
||||
* @since Beta v0.4.4
|
||||
* @since Beta v0.4.10
|
||||
* @param {string} url - 图片链接
|
||||
* @returns {Promise<Uint8Array>} 图片 buffer
|
||||
*/
|
||||
export async function getImageBuffer(url: string): Promise<Uint8Array> {
|
||||
return await http
|
||||
.fetch<ArrayBuffer>(url, {
|
||||
const res: Response<Uint8Array> = await http.fetch(url, {
|
||||
method: "GET",
|
||||
responseType: http.ResponseType.Binary,
|
||||
})
|
||||
.then((res) => new Uint8Array(res.data));
|
||||
});
|
||||
return new Uint8Array(res.data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,17 +1,18 @@
|
||||
/**
|
||||
* @file core/utils/getGameRecord.ts
|
||||
* @description 获取游戏数据的函数
|
||||
* @since Beta v0.3.8
|
||||
* @since Beta v0.4.10
|
||||
*/
|
||||
|
||||
import { http } from "@tauri-apps/api";
|
||||
import type { Response } from "@tauri-apps/api/http";
|
||||
|
||||
import TGApi from "../api/TGApi";
|
||||
import TGUtils from "../utils/TGUtils";
|
||||
import TGApi from "../api/TGApi.js";
|
||||
import TGUtils from "../utils/TGUtils.js";
|
||||
|
||||
/**
|
||||
* @description 获取用户游戏数据
|
||||
* @since Beta v0.3.8
|
||||
* @since Beta v0.4.10
|
||||
* @description 这边的 ck 可以是 cookie_token 和 account_id
|
||||
* @description 也可以是 ltoken 和 ltuid
|
||||
* @param {Record<string, string>} cookie cookie
|
||||
@@ -26,12 +27,8 @@ export async function getGameRecord(
|
||||
const params = { role_id: user.gameUid, server: user.region };
|
||||
const header = TGUtils.User.getHeader(cookie, "GET", params, "common");
|
||||
return await http
|
||||
.fetch<TGApp.Game.Record.Response | TGApp.BBS.Response.Base>(url, {
|
||||
method: "GET",
|
||||
headers: header,
|
||||
query: params,
|
||||
})
|
||||
.then((res) => {
|
||||
.fetch(url, { method: "GET", headers: header, query: params })
|
||||
.then((res: Response<TGApp.Game.Record.Response | TGApp.BBS.Response.Base>) => {
|
||||
if (res.data.retcode !== 0) {
|
||||
return <TGApp.BBS.Response.Base>res.data;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user