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