You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
291 lines
12 KiB
291 lines
12 KiB
import {defineStore} from 'pinia';
|
|
import {ElMessageBox} from "element-plus";
|
|
import {useGlobalMessage} from "./useGlobalMessage";
|
|
|
|
const { showMessage } = useGlobalMessage();
|
|
|
|
function saveStateToLocalStorage(state) {
|
|
localStorage.setItem('filesStore', JSON.stringify(state));
|
|
}
|
|
|
|
function clearLocalStorage() {
|
|
localStorage.clear()
|
|
}
|
|
|
|
function loadStateFromLocalStorage() {
|
|
return JSON.parse(localStorage.getItem('filesStore'));
|
|
}
|
|
|
|
export const useFilesStore = defineStore('files', {
|
|
state: () => ({
|
|
fileList: [
|
|
{
|
|
"label": "Welcome",
|
|
"name": "1",
|
|
"type":"PVE",
|
|
"visible": true,
|
|
"groups": [
|
|
{
|
|
"shortDescription": "<h1>鬼灵歌姬</h1><h2><em>这是一个演示项目,用于测试显示6个式神的对齐效果</em></h2>",
|
|
"groupInfo": [
|
|
{
|
|
"avatar": "/assets/Shikigami/sp/372.png",
|
|
"name": "因幡辉夜姬",
|
|
"rarity": "SP"
|
|
},
|
|
{
|
|
"avatar": "/assets/Shikigami/ssr/356.png",
|
|
"name": "千姬",
|
|
"rarity": "SSR"
|
|
},
|
|
{
|
|
"avatar": "/assets/Shikigami/sp/554.png",
|
|
"name": "纺愿缘结神",
|
|
"rarity": "SP"
|
|
},
|
|
{
|
|
"avatar": "/assets/Shikigami/ssr/556.png",
|
|
"name": "天照",
|
|
"rarity": "SSR"
|
|
},
|
|
{
|
|
"avatar": "/assets/Shikigami/ssr/557.png",
|
|
"name": "伊邪那美",
|
|
"rarity": "SSR"
|
|
},
|
|
{
|
|
"avatar": "/assets/Shikigami/sp/367.png",
|
|
"name": "绘世花鸟卷",
|
|
"rarity": "SP"
|
|
}
|
|
],
|
|
"details": "<h2><strong>开局因幡普攻主怪后锁二</strong></h2>"
|
|
},
|
|
{
|
|
"shortDescription": "<h1>魂土15秒</h1><p><em>相同式神编辑不同属性</em></p>",
|
|
"groupInfo": [
|
|
{
|
|
"avatar": "/assets/Shikigami/ssr/364.png",
|
|
"name": "阿修罗",
|
|
"rarity": "SSR",
|
|
"properties": {
|
|
"edit": true,
|
|
"yuhun": {
|
|
"yuhunSetEffect": [
|
|
{
|
|
"name": "狂骨",
|
|
"shortName": "狂",
|
|
"type": "attack",
|
|
"avatar": "/assets/Yuhun/狂骨.png"
|
|
},
|
|
{
|
|
"name": "荒骷髅",
|
|
"shortName": "荒",
|
|
"type": "PVE",
|
|
"avatar": "/assets/Yuhun/荒骷髅.png"
|
|
}
|
|
],
|
|
"target": "1",
|
|
"property2": [
|
|
"Attack"
|
|
],
|
|
"property4": [
|
|
"Attack"
|
|
],
|
|
"property6": [
|
|
"Crit",
|
|
"CritDamage"
|
|
]
|
|
},
|
|
"levelRequired": "40",
|
|
"speed": "",
|
|
"skillRequiredMode": "all",
|
|
"skillRequired": [
|
|
"5",
|
|
"5",
|
|
"5"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"avatar": "/assets/Shikigami/ssr/364.png",
|
|
"name": "阿修罗",
|
|
"rarity": "SSR",
|
|
"properties": {
|
|
"edit": true,
|
|
"yuhun": {
|
|
"yuhunSetEffect": [
|
|
{
|
|
"name": "狂骨",
|
|
"shortName": "狂",
|
|
"type": "attack",
|
|
"avatar": "/assets/Yuhun/狂骨.png"
|
|
},
|
|
{
|
|
"name": "鬼灵歌伎",
|
|
"shortName": "歌伎",
|
|
"type": "PVE",
|
|
"avatar": "/assets/Yuhun/鬼灵歌伎.png"
|
|
}
|
|
],
|
|
"target": "0",
|
|
"property2": [
|
|
"Attack"
|
|
],
|
|
"property4": [
|
|
"Attack"
|
|
],
|
|
"property6": [
|
|
"Crit",
|
|
"CritDamage"
|
|
]
|
|
},
|
|
"levelRequired": "40",
|
|
"speed": "",
|
|
"skillRequiredMode": "all",
|
|
"skillRequired": [
|
|
"5",
|
|
"5",
|
|
"5"
|
|
]
|
|
}
|
|
},
|
|
{
|
|
"avatar": "/assets/Shikigami/ssr/370.png",
|
|
"name": "饭笥",
|
|
"rarity": "SSR"
|
|
},
|
|
{
|
|
"avatar": "/assets/Shikigami/ssr/369.png",
|
|
"name": "食灵",
|
|
"rarity": "SSR"
|
|
},
|
|
{
|
|
"avatar": "/assets/Shikigami/r/205.png",
|
|
"name": "座敷童子",
|
|
"rarity": "R"
|
|
}
|
|
],
|
|
"details": ""
|
|
}
|
|
]
|
|
},
|
|
{
|
|
"label": "Test",
|
|
"name": "2",
|
|
"visible": true,
|
|
"type":"PVE",
|
|
"groups": [
|
|
{
|
|
"shortDescription": "<h1>御魂·悲鸣</h1><p>这是一个演示项目,用于测试不同标签页的切换效果</p>",
|
|
"groupInfo": [
|
|
{},
|
|
{},
|
|
{},
|
|
{},
|
|
{}
|
|
],
|
|
"details": ""
|
|
},
|
|
{
|
|
"shortDescription": "",
|
|
"groupInfo": [
|
|
{},
|
|
{},
|
|
{},
|
|
{},
|
|
{}
|
|
],
|
|
"details": ""
|
|
}
|
|
]
|
|
}
|
|
],
|
|
activeFile: "1",
|
|
}),
|
|
getters: {
|
|
visibleFiles: (state) => state.fileList.filter(file => file.visible),
|
|
},
|
|
actions: {
|
|
initializeWithPrompt() {
|
|
const savedState = loadStateFromLocalStorage();
|
|
if (savedState) {
|
|
ElMessageBox.confirm(
|
|
'检测到有未保存的旧数据,是否恢复?',
|
|
'提示',
|
|
{
|
|
confirmButtonText: '恢复',
|
|
cancelButtonText: '不恢复',
|
|
type: 'warning',
|
|
}
|
|
).then(() => {
|
|
this.fileList = savedState.fileList || [];
|
|
this.activeFile = savedState.activeFile || "1";
|
|
showMessage('success', '数据已恢复');
|
|
}).catch(() => {
|
|
clearLocalStorage();
|
|
showMessage('info', '选择了不恢复旧数据');
|
|
});
|
|
}
|
|
},
|
|
setupAutoSave() {
|
|
setInterval(() => {
|
|
saveStateToLocalStorage(this.$state);
|
|
}, 30000); // 设置间隔时间为30秒
|
|
},
|
|
addFile(file) {
|
|
this.fileList.push({...file, visible: true});
|
|
this.activeFile = file.name;
|
|
},
|
|
setActiveFile(fileId: number) {
|
|
this.activeFile = fileId;
|
|
},
|
|
setVisible(fileId: number, visibility: boolean) {
|
|
const file = this.fileList.find(file => file.name === fileId);
|
|
if (file) {
|
|
file.visible = visibility;
|
|
}
|
|
},
|
|
closeTab(fileName: String) {
|
|
const file = this.fileList.find(file => file.name === fileName);
|
|
if (file) {
|
|
file.visible = false;
|
|
if (this.activeFile === fileName) {
|
|
const nextVisibleFile = this.visibleFiles[0];
|
|
this.activeFile = nextVisibleFile ? nextVisibleFile.name : -1;
|
|
}
|
|
}
|
|
},
|
|
async deleteFile(fileId: string) {
|
|
try {
|
|
if (this.fileList.length === 1) {
|
|
showMessage('warning', '无法删除');
|
|
return;
|
|
}
|
|
await ElMessageBox.confirm('确定要删除此文件吗?', '提示', {
|
|
confirmButtonText: '确定',
|
|
cancelButtonText: '取消',
|
|
type: 'warning',
|
|
});
|
|
|
|
const index = this.fileList.findIndex(file => file.name === fileId);
|
|
if (index > -1) {
|
|
this.fileList.splice(index, 1);
|
|
if (this.activeFile === fileId) {
|
|
const nextVisibleFile = this.visibleFiles[0];
|
|
this.activeFile = nextVisibleFile ? nextVisibleFile.name : "-1";
|
|
}
|
|
}
|
|
showMessage('success', '删除成功!');
|
|
} catch (error) {
|
|
showMessage('info', '已取消删除');
|
|
}
|
|
},
|
|
renameFile(fileId, newName) {
|
|
const file = this.fileList.find(file => file.name === fileId);
|
|
if (file) {
|
|
file.label = newName;
|
|
}
|
|
},
|
|
},
|
|
}); |