diff --git a/src/pages/User/Abyss.vue b/src/pages/User/Abyss.vue index 165122a6..968be582 100644 --- a/src/pages/User/Abyss.vue +++ b/src/pages/User/Abyss.vue @@ -43,7 +43,7 @@ 分享 刷新 - 上传 + 导入 删除 @@ -107,16 +107,16 @@ import showLoading from "@comp/func/loading.js"; import showSnackbar from "@comp/func/snackbar.js"; import TuaDetail from "@comp/userAbyss/tua-detail.vue"; import TuaOverview from "@comp/userAbyss/tua-overview.vue"; -import Hutao from "@Hutao/index.js"; import recordReq from "@req/recordReq.js"; import TSUserAbyss from "@Sqlm/userAbyss.js"; -import TSUserAvatar from "@Sqlm/userAvatar.js"; import useUserStore from "@store/user.js"; import { getVersion } from "@tauri-apps/api/app"; +import { open } from "@tauri-apps/plugin-dialog"; +import { readTextFile } from "@tauri-apps/plugin-fs"; import TGLogger from "@utils/TGLogger.js"; import { generateShareImg } from "@utils/TGShare.js"; import { storeToRefs } from "pinia"; -import { computed, onMounted, ref, shallowRef, watch } from "vue"; +import { onMounted, ref, shallowRef, watch } from "vue"; import { useRouter } from "vue-router"; const router = useRouter(); @@ -126,7 +126,6 @@ const version = ref(); const uidCur = ref(); const uidList = shallowRef>(); const localAbyss = shallowRef([]); -const abyssIdList = computed>(() => localAbyss.value.map((abyss) => abyss.id)); onMounted(async () => { await showLoading.start("正在加载深渊数据"); @@ -148,9 +147,11 @@ watch(() => uidCur.value, loadAbyss); async function toCombat(): Promise { await router.push({ name: "真境剧诗" }); } + async function toChallenge(): Promise { await router.push({ name: "幽境危战" }); } + async function toWiki(): Promise { await router.push({ name: "深渊数据库" }); } @@ -262,62 +263,6 @@ async function shareAbyss(): Promise { await TGLogger.Info(`[UserAbyss][shareAbyss][${userTab.value}] 生成深渊数据分享图片成功`); } -async function uploadAbyss(): Promise { - await TGLogger.Info("[UserAbyss][uploadAbyss] 上传深渊数据"); - const abyssData = localAbyss.value.find((item) => item.id === Math.max(...abyssIdList.value)); - if (!abyssData) { - showSnackbar.warn("未找到深渊数据"); - await TGLogger.Warn("[UserAbyss][uploadAbyss] 未找到深渊数据"); - return; - } - const maxFloor = Number(abyssData.maxFloor.split("-")[0]); - if (isNaN(maxFloor) || maxFloor <= 9) { - showSnackbar.warn("尚未完成深渊,请完成深渊后重试!"); - await TGLogger.Warn(`[UserAbyss][uploadAbyss] 尚未完成深渊 ${abyssData.maxFloor}`); - return; - } - const startTime = new Date(abyssData.startTime).getTime(); - const endTime = new Date(abyssData.endTime).getTime(); - const nowTime = new Date().getTime(); - if (nowTime < startTime || nowTime > endTime) { - showSnackbar.warn("非最新深渊数据,请刷新深渊数据后重试!"); - await TGLogger.Warn("[UserAbyss][uploadAbyss] 非最新深渊数据"); - return; - } - try { - await showLoading.start(`正在上传${account.value.gameUid}的深渊数据`, `期数:${abyssData.id}`); - const transAbyss = Hutao.Abyss.utils.transData(abyssData); - if (hutaoEmail.value) transAbyss.ReservedUserName = hutaoEmail.value; - await showLoading.update("正在获取角色数据"); - const roles = await TSUserAvatar.getAvatars(Number(account.value.gameUid)); - if (!roles) { - await showLoading.end(); - showSnackbar.warn("未找到角色数据"); - return; - } - await showLoading.update("正在转换角色数据"); - transAbyss.Avatars = Hutao.Abyss.utils.transAvatars(roles); - await showLoading.update("正在上传深渊数据"); - const res = await Hutao.Abyss.upload(transAbyss); - if (res.retcode !== 0) { - showSnackbar.error(`[${res.retcode}]${res.message}`); - await TGLogger.Error("[UserAbyss][uploadAbyss] 上传深渊数据失败"); - await TGLogger.Error(`[UserAbyss][uploadAbyss] ${res.retcode} ${res.message}`); - return; - } - showSnackbar.success(res.message ?? "上传深渊数据成功"); - await TGLogger.Info("[UserAbyss][uploadAbyss] 上传深渊数据成功"); - await TGLogger.Info(`[${res.retcode}] ${res.message}`); - } catch (e) { - if (e instanceof Error) { - showSnackbar.error(e.message); - await TGLogger.Error("[UserAbyss][uploadAbyss] 上传深渊数据失败"); - await TGLogger.Error(`[UserAbyss][uploadAbyss] ${e.message}`); - } - } - await showLoading.end(); -} - async function deleteAbyss(): Promise { if (uidCur.value === undefined || uidCur.value === "") { showSnackbar.warn("未选择游戏UID"); @@ -337,6 +282,42 @@ async function deleteAbyss(): Promise { else uidCur.value = undefined; await loadAbyss(); } + +/** + * 尝试读取胡桃工具箱导出的深渊数据 + * @since Beta v0.8.6 + * @return {Promise} + */ +async function tryReadAbyss(): Promise { + const file = await open({ + multiple: false, + title: "选择胡桃工具箱导出的深渊数据文件", + filters: [{ name: "JSON 文件", extensions: ["json"] }], + directory: false, + }); + if (file === null) { + showSnackbar.cancel("已取消文件选择"); + return; + } + try { + await showLoading.start("正在导入深渊数据文件", file); + const fileData = JSON.parse(await readTextFile(file)); + if (!Array.isArray(fileData)) { + await showLoading.end(); + showSnackbar.warn("文件数据格式错误"); + return; + } + // TODO:数据结构 + for (const item of fileData) { + await showLoading.update(`Uid: ${item["Uid"]},ScheduleId: ${item["ScheduleId"]}`); + await TSUserAbyss.saveAbyss(item["Uid"], item["SpiralAbyss"]); + } + await showLoading.end(); + } catch (e) { + console.error(e); + await showLoading.end(); + } +}