mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-14 09:38:13 +08:00
🌱 草创深渊上传
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
128
src/plugins/Hutao/utils/transLocal.ts
Normal file
128
src/plugins/Hutao/utils/transLocal.ts
Normal 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;
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user