🌱 草创深渊上传

This commit is contained in:
BTMuli
2023-06-27 00:16:53 +08:00
parent 7fa5a279de
commit c1fcc022a9
4 changed files with 154 additions and 4 deletions

View File

@@ -14,6 +14,10 @@
<v-icon>mdi-refresh</v-icon> <v-icon>mdi-refresh</v-icon>
<span>刷新</span> <span>刷新</span>
</v-btn> </v-btn>
<v-btn class="ua-btn" variant="outlined" @click="uploadAbyss">
<v-icon>mdi-cloud-upload</v-icon>
<span>上传</span>
</v-btn>
</div> </div>
</v-tabs> </v-tabs>
<v-window v-model="userTab" class="ua-window"> <v-window v-model="userTab" class="ua-window">
@@ -73,6 +77,7 @@ import { useUserStore } from "../../store/modules/user";
import TGRequest from "../../web/request/TGRequest"; import TGRequest from "../../web/request/TGRequest";
import TGSqlite from "../../plugins/Sqlite"; import TGSqlite from "../../plugins/Sqlite";
import { generateShareImg } from "../../utils/TGShare"; import { generateShareImg } from "../../utils/TGShare";
import HutaoRequest from "../../plugins/Hutao";
// store // store
const userStore = useUserStore(); const userStore = useUserStore();
@@ -139,6 +144,12 @@ async function shareAbyss(): Promise<void> {
const fileName = `【深渊数据】${curAbyss.value.id}-${user.value.gameUid}`; const fileName = `【深渊数据】${curAbyss.value.id}-${user.value.gameUid}`;
await generateShareImg(fileName, abyssRef.value); await generateShareImg(fileName, abyssRef.value);
} }
function uploadAbyss(): void {
const abyssData = curAbyss.value;
const transAbyss = HutaoRequest.Abyss.utils.transData(abyssData);
console.log(transAbyss);
}
</script> </script>
<style lang="css" scoped> <style lang="css" scoped>
.ua-box { .ua-box {

View File

@@ -2,7 +2,7 @@
* @file plugins Hutao index.ts * @file plugins Hutao index.ts
* @description Hutao 插件入口 * @description Hutao 插件入口
* @author BTMuli <bt-muli@outlook.com> * @author BTMuli <bt-muli@outlook.com>
* @since Alpha v0.2.0 * @since Alpha v0.2.1
*/ */
import getAvatarCollect from "./request/getAvatarCollect"; import getAvatarCollect from "./request/getAvatarCollect";
@@ -14,6 +14,7 @@ import getTeamCollect from "./request/getTeamCollect";
import { checkUid, getUserData } from "./request/getUserData"; import { checkUid, getUserData } from "./request/getUserData";
import getWeaponCollect from "./request/getWeaponCollect"; import getWeaponCollect from "./request/getWeaponCollect";
import uploadData from "./request/uploadData"; import uploadData from "./request/uploadData";
import { transLocal } from "./utils/transLocal";
const HutaoRequest = { const HutaoRequest = {
Abyss: { Abyss: {
@@ -31,6 +32,9 @@ const HutaoRequest = {
}, },
getWeaponCollect, getWeaponCollect,
postData: uploadData, postData: uploadData,
utils: {
transData: transLocal,
},
}, },
}; };

View File

@@ -0,0 +1,128 @@
/**
* @file plugins Hutao utils transLocal.ts
* @description 将本地数据转为上传用的数据
* @author BTMuli <bt-muli@outlook.com>
* @since Alpha v0.2.1
*/
// utils
import TGSqlite from "../../Sqlite";
/**
* @description 将本地数据转为上传用的数据
* @since Alpha v0.2.1
* @param {TGApp.Sqlite.Abyss.SingleTable} data 本地数据
* @param {string} userName 用户名
* @returns {TGApp.Plugins.Hutao.AbyssRecordUpload} 上传用的数据
*/
export function transLocal(
data: TGApp.Sqlite.Abyss.SingleTable,
userName?: string,
): TGApp.Plugins.Hutao.AbyssRecordUpload {
return {
uid: data.uid,
identity: "Tauri.Genshin",
spiralAbyss: transAbyss(data),
avatars: transAvatars(data),
reservedUserName: userName || "",
};
}
/**
* @description 转换深渊数据
* @since Alpha v0.2.1
* @param {TGApp.Sqlite.Abyss.SingleTable} data 本地数据
* @returns {TGApp.Plugins.Hutao.AbyssRecord} 上传用的数据
*/
function transAbyss(data: TGApp.Sqlite.Abyss.SingleTable): TGApp.Plugins.Hutao.AbyssRecord {
const damage: TGApp.Sqlite.Abyss.Character = JSON.parse(data.damageRank)[0];
const takeDamage: TGApp.Sqlite.Abyss.Character = JSON.parse(data.takeDamageRank)[0];
return {
scheduleId: data.id,
totalBattleTimes: data.totalBattleTimes,
totalWinTimes: data.totalWinTimes,
damage: {
avatarId: damage.id,
value: damage.value,
},
takeDamage: {
avatarId: takeDamage.id,
value: takeDamage.value,
},
floors: JSON.parse(data.floors).map((floor: TGApp.Sqlite.Abyss.Floor) => transFloor(floor)),
};
}
/**
* @description 转换层数数据
* @since Alpha v0.2.1
* @param {TGApp.Sqlite.Abyss.Floor} data 本地数据
* @returns {TGApp.Plugins.Hutao.AbyssFloor} 上传用的数据
*/
function transFloor(data: TGApp.Sqlite.Abyss.Floor): TGApp.Plugins.Hutao.AbyssFloor {
return {
index: data.id,
star: data.winStar,
levels: data.levels.map((level) => transLevel(level)),
};
}
/**
* @description 转换层-关卡数据
* @since Alpha v0.2.1
* @param {TGApp.Sqlite.Abyss.Level} data 本地数据
* @returns {TGApp.Plugins.Hutao.AbyssLevel} 上传用的数据
*/
function transLevel(data: TGApp.Sqlite.Abyss.Level): TGApp.Plugins.Hutao.AbyssLevel {
const battles: Array<{ index: number; avatars: number[] }> = [];
battles.push({
index: 1,
avatars: data.upBattle.characters.map((character) => character.id),
});
battles.push({
index: 2,
avatars: data.downBattle.characters.map((character) => character.id),
});
return {
index: data.id,
star: data.winStar,
battles,
};
}
/**
* @description 转换角色数据
* @since Alpha v0.2.1
* @param {TGApp.Sqlite.Abyss.SingleTable} data 本地数据
* @returns {TGApp.Plugins.Hutao.AbyssAvatar[]} 上传用的数据
*/
function transAvatars(data: TGApp.Sqlite.Abyss.SingleTable): TGApp.Plugins.Hutao.AbyssAvatar[] {
const avatars: TGApp.Plugins.Hutao.AbyssAvatar[] = [];
const floors: TGApp.Sqlite.Abyss.Floor[] = JSON.parse(data.floors);
const avatarIdCollect = new Set<number>();
floors.map((floor) =>
floor.levels.map((level) => {
level.upBattle.characters.map((character) => avatarIdCollect.add(character.id));
level.downBattle.characters.map((character) => avatarIdCollect.add(character.id));
}),
);
Array.from(avatarIdCollect).map(async (avatarId) => {
const avatarGet: TGApp.Sqlite.Character.UserRole[] | false = await TGSqlite.getUserCharacter(
data.uid,
avatarId,
);
if (!avatarGet) return;
const avatar = avatarGet[0];
const weapon: TGApp.Sqlite.Character.RoleWeapon = JSON.parse(avatar.weapon);
const relics: TGApp.Sqlite.Character.RoleReliquary[] = JSON.parse(avatar.reliquary);
const relicSetCollect = new Set<string>();
relics.map((relic) => relicSetCollect.add(relic.set.id.toString()));
avatars.push({
avatarId,
weaponId: weapon.id,
reliquarySetIds: Array.from(relicSetCollect),
activedConstellationNumber: avatar.activeConstellation,
});
});
return avatars;
}

View File

@@ -435,13 +435,20 @@ class Sqlite {
/** /**
* @description 获取用户角色数据 * @description 获取用户角色数据
* @since Alpha v0.2.0 * @since Alpha v0.2.1
* @param {string} uid 用户 uid * @param {string} uid 用户 uid
* @param {number} id 角色 ID
* @returns {Promise<TGApp.Sqlite.Character.UserRole[]|false>} * @returns {Promise<TGApp.Sqlite.Character.UserRole[]|false>}
*/ */
public async getUserCharacter(uid: string): Promise<TGApp.Sqlite.Character.UserRole[] | false> { public async getUserCharacter(
uid: string,
id?: number,
): Promise<TGApp.Sqlite.Character.UserRole[] | false> {
const db = await Database.load(this.dbPath); const db = await Database.load(this.dbPath);
const sql = `SELECT * FROM UserCharacters WHERE uid = '${uid}'`; let sql = `SELECT * FROM UserCharacters WHERE uid = '${uid}'`;
if (id) {
sql = `SELECT * FROM UserCharacters WHERE uid = '${uid}' AND cid = ${id}`;
}
const res: TGApp.Sqlite.Character.UserRole[] = await db.select(sql); const res: TGApp.Sqlite.Character.UserRole[] = await db.select(sql);
await db.close(); await db.close();
if (res.length === 0) return false; if (res.length === 0) return false;