mirror of
https://github.com/BTMuli/TeyvatGuide.git
synced 2025-12-12 09:18:14 +08:00
feat(file): 文件导入、解析、导出草创
This commit is contained in:
@@ -1,12 +1,125 @@
|
|||||||
<template>
|
<template>
|
||||||
<h1>成就</h1>
|
<!-- 顶部操作栏 -->
|
||||||
|
<v-app-bar app>
|
||||||
|
<template v-slot:prepend>
|
||||||
|
<!-- 标题 -->
|
||||||
|
<v-card-text class="text-h5">{{ title }}</v-card-text>
|
||||||
|
</template>
|
||||||
|
<template v-slot:append>
|
||||||
|
<!-- 导入按钮 -->
|
||||||
|
<v-btn @click="importJson" prepend-icon="mdi-import" class="bg-green-accent-2">
|
||||||
|
导入
|
||||||
|
</v-btn>
|
||||||
|
<!-- 导出按钮 -->
|
||||||
|
<v-btn @click="exportJson" prepend-icon="mdi-export" class="ms-2 bg-green-accent-2">
|
||||||
|
导出
|
||||||
|
</v-btn>
|
||||||
|
</template>
|
||||||
|
</v-app-bar>
|
||||||
|
<!-- 主体内容 -->
|
||||||
|
<!-- 侧边成就系列列表 -->
|
||||||
|
<v-layout>
|
||||||
|
<!-- 成就列表 -->
|
||||||
|
<!-- todo 样式 -->
|
||||||
|
<v-container fluid>
|
||||||
|
<v-card>
|
||||||
|
<v-card-title>成就列表</v-card-title>
|
||||||
|
<v-card-text>
|
||||||
|
<v-list>
|
||||||
|
<v-list-item v-for="item in achievementsTrans" :key="item.id">
|
||||||
|
<v-divider></v-divider>
|
||||||
|
<v-list-item-title>成就 ID:{{ item.id }}</v-list-item-title>
|
||||||
|
<v-list-item-subtitle
|
||||||
|
>成就完成时间: {{ item.time }}</v-list-item-subtitle
|
||||||
|
>
|
||||||
|
</v-list-item>
|
||||||
|
</v-list>
|
||||||
|
</v-card-text>
|
||||||
|
</v-card>
|
||||||
|
</v-container>
|
||||||
|
</v-layout>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { defineComponent } from "vue";
|
import { defineComponent } from "vue";
|
||||||
|
import { dialog, fs } from "@tauri-apps/api";
|
||||||
|
import { AchievementsType, UIAF_AchievementType } from "../interface/Achievements";
|
||||||
|
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: "Achievements",
|
name: "Achievements",
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
title: "成就",
|
||||||
|
achievementsRaw: {} as UIAF_AchievementType[],
|
||||||
|
achievementsTrans: {},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
// 导入
|
||||||
|
async importJson() {
|
||||||
|
// 文件选择对话框
|
||||||
|
const selectedJson = await dialog.open({
|
||||||
|
multiple: false,
|
||||||
|
filters: [
|
||||||
|
{
|
||||||
|
name: "JsonFile",
|
||||||
|
extensions: ["json"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
});
|
||||||
|
if (selectedJson !== null) {
|
||||||
|
// 读取文件
|
||||||
|
const fileData: string = await fs.readTextFile(<string>selectedJson, {});
|
||||||
|
await this.loadJson(fileData);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 解析数据
|
||||||
|
async loadJson(data: string) {
|
||||||
|
const fileJson: AchievementsType = JSON.parse(data);
|
||||||
|
try {
|
||||||
|
this.achievementsRaw = fileJson.list;
|
||||||
|
// 解析数据
|
||||||
|
this.achievementsTrans = this.transJson(this.achievementsRaw);
|
||||||
|
this.title = "成就 - " + this.achievementsRaw.length + " 个";
|
||||||
|
await dialog.message("导入成功");
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
await dialog.message("导入失败");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// 解析数据
|
||||||
|
transJson(data: UIAF_AchievementType[]) {
|
||||||
|
const dataTrans: any[] = [];
|
||||||
|
data.map(async item => {
|
||||||
|
dataTrans.push({
|
||||||
|
id: item.id,
|
||||||
|
time: new Date(Number(item.timestamp * 1000)).toLocaleString(),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return dataTrans;
|
||||||
|
},
|
||||||
|
// 导出
|
||||||
|
exportJson() {
|
||||||
|
dialog
|
||||||
|
.save({
|
||||||
|
filters: [
|
||||||
|
{
|
||||||
|
name: "JsonFile",
|
||||||
|
extensions: ["json"],
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
.then(res => {
|
||||||
|
if (res !== null) {
|
||||||
|
fs.writeTextFile(<string>res, JSON.stringify(this.achievementsRaw)).then(
|
||||||
|
() => {
|
||||||
|
dialog.message("导出成功");
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user