更新
This commit is contained in:
parent
a29fa0d9c8
commit
55ff6e7a5a
@ -5,6 +5,14 @@
|
||||
|
||||
# CHANGE
|
||||
|
||||
## 1.0.4
|
||||
|
||||
2023年06月16日
|
||||
|
||||
### 添加
|
||||
|
||||
- 标签页管理功能
|
||||
|
||||
## 1.0.3
|
||||
|
||||
2023年06月16日
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "wuhu-torn-helper",
|
||||
"version": "1.0.3",
|
||||
"version": "1.0.4",
|
||||
"description": "芜湖助手",
|
||||
"scripts": {
|
||||
"release": "cross-env NODE_ENV=production rollup -c && node build.mjs",
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -1,9 +1,3 @@
|
||||
<script lang="ts">
|
||||
export default {
|
||||
name: "EventsViewer"
|
||||
}
|
||||
</script>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { inject, onMounted, Ref, ref } from "vue";
|
||||
import { LoggerKey } from "../ts/class/Logger";
|
||||
@ -35,8 +29,9 @@ const DateTimeFormatter = (ts: number) => {
|
||||
let date = new Date(ts);
|
||||
return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
|
||||
};
|
||||
|
||||
onMounted(async () => {
|
||||
const loadData = async () => {
|
||||
loading.value = true;
|
||||
events.value = [];
|
||||
let res;
|
||||
try {
|
||||
res = await (await doFetch()).json();
|
||||
@ -52,10 +47,14 @@ onMounted(async () => {
|
||||
} catch (e) {
|
||||
logger.error(e.stack);
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
onMounted(loadData);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<el-button @click="loadData">刷新</el-button>
|
||||
<el-divider/>
|
||||
<el-timeline v-if="!loading">
|
||||
<el-timeline-item v-for="ev in events" :color="ev.isNew?'#0bbd87':''"
|
||||
:timestamp="DateTimeFormatter(ev.time*1000)">
|
||||
@ -65,6 +64,4 @@ onMounted(async () => {
|
||||
<el-skeleton v-if="loading" :rows="10" animated/>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
<style scoped></style>
|
||||
@ -1,13 +1,35 @@
|
||||
<template>
|
||||
<el-config-provider :size="'default'" :z-index="1000000">
|
||||
<el-button circle class="wh-menu-button" style="z-index: 1000000;" @click="expanded = !expanded">
|
||||
<el-button-group class="wh-menu-button" style="z-index: 1000000;">
|
||||
<el-button circle @click="expanded = !expanded">
|
||||
<el-icon>
|
||||
<MoonNight/>
|
||||
</el-icon>
|
||||
</el-button>
|
||||
<el-dialog v-model="drawer" :destroy-on-close="true" :fullscreen="isMobilePhone" :lock-scroll="true"
|
||||
:title="drawerTitle" width="65%">
|
||||
<component :is="drawerContent"/>
|
||||
<el-button circle @click="showDrawer">
|
||||
<el-icon>
|
||||
<CopyDocument/>
|
||||
</el-icon>
|
||||
</el-button>
|
||||
</el-button-group>
|
||||
<el-dialog v-model="drawer" :destroy-on-close="false" :fullscreen="isMobilePhone" :lock-scroll="true"
|
||||
:title="drawerTitle" style="padding: 0"
|
||||
width="65%">
|
||||
<el-tabs
|
||||
v-model="editableTabsValue"
|
||||
closable type="card"
|
||||
@tab-remove="removeTab"
|
||||
@tab-click="tabClick"
|
||||
>
|
||||
<el-tab-pane
|
||||
v-for="item in editableTabs"
|
||||
:key="item.name"
|
||||
:label="item.title"
|
||||
:name="item.name"
|
||||
>
|
||||
<component :is="item.content"/>
|
||||
</el-tab-pane>
|
||||
</el-tabs>
|
||||
</el-dialog>
|
||||
<el-drawer v-model="expanded" :size="isMobilePhone ? '85%' : '30%'" direction="rtl">
|
||||
<template #header>
|
||||
@ -61,9 +83,9 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
|
||||
import { MoonNight } from "@element-plus/icons-vue";
|
||||
import { ElMessage, ElMessageBox } from "element-plus";
|
||||
import { Component, inject, onMounted, ref, shallowRef } from 'vue';
|
||||
import { CopyDocument, MoonNight } from "@element-plus/icons-vue";
|
||||
import { ElMessage, ElMessageBox, TabsPaneContext } from "element-plus";
|
||||
import { Component, inject, onMounted, ref, shallowRef, triggerRef } from 'vue';
|
||||
import { LoggerKey } from "../ts/class/Logger";
|
||||
import { QuickGymTrainKey } from "../ts/class/action/QuickGymTrain";
|
||||
import { QuickFlyBtnHandlerKey } from "../ts/class/handler/QuickFlyBtnHandler";
|
||||
@ -201,6 +223,9 @@ const drawerContent = shallowRef(null);
|
||||
const isMobilePhone = ref(false);
|
||||
const documentHeight = ref(0);
|
||||
const expanded = ref(false);
|
||||
// tabs
|
||||
const editableTabsValue = ref('');
|
||||
const editableTabs = shallowRef([]);
|
||||
|
||||
// fast travel
|
||||
const travelData = [
|
||||
@ -223,10 +248,62 @@ const menuClick = (menuItem: MenuItem) => {
|
||||
} else if (menuItem.template) {
|
||||
drawer.value = true;
|
||||
drawerTitle.value = menuItem.title;
|
||||
drawerContent.value = menuItem.template;
|
||||
// drawerContent.value = menuItem.template;
|
||||
addTab(menuItem);
|
||||
}
|
||||
};
|
||||
|
||||
const showDrawer = () => {
|
||||
if (editableTabs.value.length < 1) {
|
||||
ElMessage.warning('页面还没有打开任何功能标签');
|
||||
} else {
|
||||
drawer.value = true;
|
||||
}
|
||||
};
|
||||
|
||||
const addTab = (menuItem: MenuItem) => {
|
||||
for (let i = 0; i < editableTabs.value.length; i++) {
|
||||
if (editableTabs.value[i].name === menuItem.title) {
|
||||
editableTabsValue.value = menuItem.title;
|
||||
drawerTitle.value = menuItem.title;
|
||||
return;
|
||||
}
|
||||
}
|
||||
editableTabs.value.push({
|
||||
title: menuItem.title,
|
||||
name: menuItem.title,
|
||||
content: menuItem.template!,
|
||||
});
|
||||
triggerRef(editableTabs);
|
||||
editableTabsValue.value = menuItem.title;
|
||||
};
|
||||
|
||||
const removeTab = (targetName: string) => {
|
||||
const tabs = editableTabs.value
|
||||
let activeName = editableTabsValue.value
|
||||
if (activeName === targetName) {
|
||||
tabs.forEach((tab, index) => {
|
||||
if (tab.name === targetName) {
|
||||
const nextTab = tabs[index + 1] || tabs[index - 1]
|
||||
if (nextTab) {
|
||||
activeName = nextTab.name
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
editableTabsValue.value = activeName
|
||||
editableTabs.value = tabs.filter((tab) => tab.name !== targetName)
|
||||
|
||||
if (editableTabs.value.length < 1) {
|
||||
drawer.value = false;
|
||||
}
|
||||
};
|
||||
|
||||
const tabClick = (pane: TabsPaneContext) => {
|
||||
drawerTitle.value = <string>pane.paneName;
|
||||
}
|
||||
|
||||
const travelConfirm = (destIndex: number, typeIndex: number) => {
|
||||
const destName = travelData[destIndex].cName;
|
||||
const typeName = ['普通飞机', 'PI飞机', '股票飞机', '商务飞机(机票或内衣店)'][typeIndex];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user