diff --git a/src/components/userRecord/tur-overview-grid.vue b/src/components/userRecord/tur-overview-grid.vue
index d631ed48..6aa51a5a 100644
--- a/src/components/userRecord/tur-overview-grid.vue
+++ b/src/components/userRecord/tur-overview-grid.vue
@@ -5,6 +5,7 @@
+
diff --git a/src/pages/User/Record.vue b/src/pages/User/Record.vue
index e2128ebe..381fe12e 100644
--- a/src/pages/User/Record.vue
+++ b/src/pages/User/Record.vue
@@ -104,6 +104,8 @@ async function refresh(): Promise {
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();
diff --git a/src/plugins/Sqlite/sql/initData.ts b/src/plugins/Sqlite/sql/initData.ts
index b2b6e613..6d804571 100644
--- a/src/plugins/Sqlite/sql/initData.ts
+++ b/src/plugins/Sqlite/sql/initData.ts
@@ -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 初始化应用表数据
diff --git a/src/plugins/Sqlite/sql/insertData.ts b/src/plugins/Sqlite/sql/insertData.ts
index f7f8428d..5cfc408f 100644
--- a/src/plugins/Sqlite/sql/insertData.ts
+++ b/src/plugins/Sqlite/sql/insertData.ts
@@ -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 插入成就数据
diff --git a/src/plugins/Sqlite/utils/transAbyssData.ts b/src/plugins/Sqlite/utils/transAbyssData.ts
index a70dc0a6..4d183cbd 100644
--- a/src/plugins/Sqlite/utils/transAbyssData.ts
+++ b/src/plugins/Sqlite/utils/transAbyssData.ts
@@ -4,7 +4,7 @@
* @since Beta v0.3.9
*/
-import { timeToSecond } from "./transTime";
+import { timeToSecond } from "./transTime.js";
/**
* @description 将通过 api 获取到的深渊数据转换为数据库中的数据
diff --git a/src/plugins/Sqlite/utils/transUserRecord.ts b/src/plugins/Sqlite/utils/transUserRecord.ts
index 77d70e00..3986ded6 100644
--- a/src/plugins/Sqlite/utils/transUserRecord.ts
+++ b/src/plugins/Sqlite/utils/transUserRecord.ts
@@ -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,
diff --git a/src/types/Game/Record.d.ts b/src/types/Game/Record.d.ts
index 216b4882..f5241395 100644
--- a/src/types/Game/Record.d.ts
+++ b/src/types/Game/Record.d.ts
@@ -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;
}
/**
diff --git a/src/types/Sqlite/Record.d.ts b/src/types/Sqlite/Record.d.ts
index c71712b8..85c50ef4 100644
--- a/src/types/Sqlite/Record.d.ts
+++ b/src/types/Sqlite/Record.d.ts
@@ -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;
diff --git a/src/utils/TGShare.ts b/src/utils/TGShare.ts
index b0d65f59..3ac7be4a 100644
--- a/src/utils/TGShare.ts
+++ b/src/utils/TGShare.ts
@@ -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 {
if (format === undefined) format = "png";
- 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,
- });
- });
+ const res = await dialog.save({
+ title: "保存图片",
+ filters: [{ name: "图片", extensions: [format] }],
+ defaultPath: `${await path.downloadDir()}${path.sep}${filename}.${format}`,
+ });
+ 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} 图片元素
*/
export async function saveImgLocal(url: string): Promise {
- return 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);
- });
+ const res: Response = await http.fetch(url, {
+ method: "GET",
+ responseType: http.ResponseType.Binary,
+ });
+ 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} 图片 buffer
*/
export async function getImageBuffer(url: string): Promise {
- return await http
- .fetch(url, {
- method: "GET",
- responseType: http.ResponseType.Binary,
- })
- .then((res) => new Uint8Array(res.data));
+ const res: Response = await http.fetch(url, {
+ method: "GET",
+ responseType: http.ResponseType.Binary,
+ });
+ return new Uint8Array(res.data);
}
/**
diff --git a/src/web/request/getGameRecord.ts b/src/web/request/getGameRecord.ts
index 46739f4d..dcd3f143 100644
--- a/src/web/request/getGameRecord.ts
+++ b/src/web/request/getGameRecord.ts
@@ -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} 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(url, {
- method: "GET",
- headers: header,
- query: params,
- })
- .then((res) => {
+ .fetch(url, { method: "GET", headers: header, query: params })
+ .then((res: Response) => {
if (res.data.retcode !== 0) {
return res.data;
}