更新
This commit is contained in:
parent
4b51e156bb
commit
a4d6b581d7
18
CHANGELOG.md
18
CHANGELOG.md
@ -4,6 +4,24 @@
|
||||
|
||||
# CHANGE
|
||||
|
||||
## 0.8.7
|
||||
|
||||
2023年04月10日
|
||||
|
||||
### 修改
|
||||
|
||||
- 修复脚本首次运行配置获取错误的问题
|
||||
- 修复"解决加载中"功能开启后无法加载插件图标的问题
|
||||
- 修复功能选项错误读取默认值的问题
|
||||
|
||||
## 0.8.6
|
||||
|
||||
2023年04月07日
|
||||
|
||||
### 修改
|
||||
|
||||
- 结构调整
|
||||
|
||||
## 0.8.5
|
||||
|
||||
2023年04月03日
|
||||
|
||||
File diff suppressed because one or more lines are too long
6
src/shims-vue.d.ts
vendored
6
src/shims-vue.d.ts
vendored
@ -1,11 +1,5 @@
|
||||
/* eslint-disable */
|
||||
declare module '*.vue' {
|
||||
import type { DefineComponent } from 'vue'
|
||||
const component: DefineComponent<{}, {}, any>
|
||||
export default component
|
||||
}
|
||||
declare module '*vue&type=script&lang.ts' {
|
||||
import type { DefineComponent } from 'vue'
|
||||
const component: DefineComponent<{}, {}, any>
|
||||
export default component
|
||||
}
|
||||
|
||||
@ -30,16 +30,14 @@ export default class App {
|
||||
// 初始化
|
||||
this.tornHelper.init();
|
||||
|
||||
// 插件设置默认值
|
||||
// WuhuConfig.setDefaults();
|
||||
|
||||
// 插件图标和设置菜单
|
||||
this.icon.init();
|
||||
|
||||
let tmp = () => {
|
||||
// 所有页面通用
|
||||
try {
|
||||
this.common.resolve(this.run);
|
||||
// this.common.resolve.apply(this.common, this.run);
|
||||
this.common.resolve(() => this.run());
|
||||
} catch (e) {
|
||||
}
|
||||
|
||||
|
||||
@ -1,17 +1,17 @@
|
||||
import Logger from "./Logger";
|
||||
import ClassName from "../container/ClassName";
|
||||
import { Injectable } from "../container/Injectable";
|
||||
import Global from "./Global";
|
||||
import CommonUtils from "./utils/CommonUtils";
|
||||
import LocalConfigWrapper from "./LocalConfigWrapper";
|
||||
import NNB from "./handler/NNB";
|
||||
import ItemPriceWatcherHandler from "./handler/ItemPriceWatcherHandler";
|
||||
import { createApp, InjectionKey } from "vue";
|
||||
import FloatMenu from "../../vue/FloatMenu.vue";
|
||||
import MenuItem, { MENU_ITEM_TYPE } from "../interface/MenuItem";
|
||||
import PopupWrapper, { PopupWrapperKey } from "./utils/PopupWrapper";
|
||||
import InfoUtils from "./utils/InfoUtils";
|
||||
|
||||
export const MenuItemListKey = Symbol() as InjectionKey<MenuItem[]>;
|
||||
export const GlobalKey = Symbol() as InjectionKey<Global>;
|
||||
// export const MenuItemListKey = Symbol() as InjectionKey<MenuItem[]>;
|
||||
// export const GlobalKey = Symbol() as InjectionKey<Global>;
|
||||
export const LoggerKey = Symbol() as InjectionKey<Logger>;
|
||||
|
||||
@ClassName("IconHelper")
|
||||
@ -21,11 +21,13 @@ export default class IconHelper {
|
||||
|
||||
constructor(
|
||||
private readonly logger: Logger,
|
||||
private readonly global: Global,
|
||||
// private readonly global: Global,
|
||||
private readonly commonUtils: CommonUtils,
|
||||
private readonly localConfigWrapper: LocalConfigWrapper,
|
||||
private readonly nnb: NNB,
|
||||
private readonly itemPriceWatcherHandler: ItemPriceWatcherHandler,
|
||||
private readonly popupWrapper: PopupWrapper,
|
||||
private readonly infoUtils: InfoUtils,
|
||||
) {
|
||||
this._element = document.createElement('div');
|
||||
}
|
||||
@ -39,9 +41,200 @@ export default class IconHelper {
|
||||
document.body.append(this._element);
|
||||
let app = createApp(FloatMenu);
|
||||
app.config.errorHandler = (err) => this.logger.error('vue错误', err);
|
||||
app.provide(MenuItemListKey, [{ domType: MENU_ITEM_TYPE.BUTTON, domId: '1', domText: '1111111' }]);
|
||||
app.provide(GlobalKey, this.global);
|
||||
// app.provide(menuItemList, this.items);
|
||||
// app.provide(GlobalKey, this.global);
|
||||
app.provide(LoggerKey, this.logger);
|
||||
app.provide(PopupWrapperKey, this.popupWrapper);
|
||||
app.mount(this._element);
|
||||
}
|
||||
|
||||
// get items(): MenuItem[] {
|
||||
// let rt: MenuItem[] = [];
|
||||
// let playerInfo = this.infoUtils.getPlayerInfo();
|
||||
//
|
||||
// // 欢迎 显示玩家id
|
||||
// if (playerInfo.userID !== 0) {
|
||||
// rt.push({
|
||||
// domType: MENU_ITEM_TYPE.PLAIN,
|
||||
// domHTML:
|
||||
// `<a href="/profiles.php?XID=${ playerInfo.userID }" target="_blank">${ playerInfo.playername }</a>[${ playerInfo.userID }]`,
|
||||
// });
|
||||
// }
|
||||
// // 节日
|
||||
// let festDateHtml = '<button>节日</button>: ';
|
||||
// {
|
||||
// // 节日字典
|
||||
// const festData = FEST.val;
|
||||
// const formatMMDD = (m, d) => {
|
||||
// const MM = m < 10 ? `0${ m }` : m.toString();
|
||||
// const DD = d < 10 ? `0${ d }` : d.toString();
|
||||
// return MM + DD;
|
||||
// };
|
||||
// const newDate = new Date();
|
||||
// const festKey = formatMMDD(newDate.getUTCMonth(), newDate.getUTCDate());
|
||||
// if (festData[festKey]) festDateHtml += `今天 - ${ festData[festKey]['name'] }(<button title="${ festData[festKey]['eff'] }">效果</button>)`;
|
||||
// else {
|
||||
// // 月日列表
|
||||
// let MMDDList = Object.keys(festData);
|
||||
// MMDDList.push(festKey);
|
||||
// // 下个节日的位置
|
||||
// const nextFestIndex = MMDDList.sort().indexOf(festKey) + 1;
|
||||
// // 下个节日obj
|
||||
// const nextFestDate = festData[MMDDList[nextFestIndex] || MMDDList[0]];
|
||||
// // 下个节日的时间
|
||||
// let next = new Date(
|
||||
// nextFestIndex !== MMDDList.length ? newDate.getUTCFullYear() : newDate.getUTCFullYear() + 1,
|
||||
// (MMDDList[nextFestIndex !== MMDDList.length ? nextFestIndex : 0] as any).slice(0, 2) | 0,
|
||||
// (MMDDList[nextFestIndex !== MMDDList.length ? nextFestIndex : 0] as any).slice(2) | 0,
|
||||
// 8
|
||||
// ).getTime();
|
||||
// // 剩余天数
|
||||
// const left = (next - newDate.getTime()) / 86400000 | 0;
|
||||
// festDateHtml += `${ left }天后 - ${ nextFestDate.name }(<button title="${ nextFestDate.eff }">效果</button>)`;
|
||||
// }
|
||||
// }
|
||||
// rt.push({
|
||||
// domType: MENU_ITEM_TYPE.PLAIN,
|
||||
// domHTML: festDateHtml,
|
||||
// });
|
||||
// // 活动
|
||||
// let eventObj: EventWrapper = {
|
||||
// onEv: false,
|
||||
// daysLeft: Infinity,
|
||||
// events: EVENTS.default,
|
||||
// };
|
||||
// rt.events = EVENTS.default;
|
||||
// eventObj.events.forEach((obj, index) => {
|
||||
// if (eventObj.onEv) return;
|
||||
// // 当前年份
|
||||
// const nowYear = date.getFullYear();
|
||||
// // 当前遍历的活动开始时间
|
||||
// const start = new Date(nowYear, obj.start[0], obj.start[1], obj.start[2]);
|
||||
// // 当前遍历的活动结束时间
|
||||
// const end = new Date(nowYear, obj.end[0], obj.end[1], obj.end[2]);
|
||||
// // 当前处于活动中
|
||||
// if (start < date && date < end) {
|
||||
// eventObj.onEv = true;
|
||||
// eventObj.daysLeft = (end.getTime() - date.getTime()) / 86400000 | 0;
|
||||
// eventObj.current = obj;
|
||||
// }
|
||||
// // 当前没有活动
|
||||
// else {
|
||||
// // 当前遍历的活动如果已经经过了,那么下次活动就是遍历的下一个活动对象,否则为当前活动。
|
||||
// // 如果本年度活动都经过了,那么下次活动是列表的第一个活动对象
|
||||
// const next = end < date ? eventObj.events[index + 1] || eventObj.events[0] : obj;
|
||||
// // 经过了最后一个活动所以下次活动开始时间是第二年
|
||||
// const start = new Date(next !== obj && index === eventObj.events.length - 1 ? nowYear + 1 : nowYear, next.start[0], next.start[1], next.start[2]);
|
||||
// const daysLeft = (start.getTime() - date.getTime()) / 86400000 | 0;
|
||||
// if (0 <= daysLeft && daysLeft < eventObj.daysLeft) {
|
||||
// eventObj.daysLeft = daysLeft;
|
||||
// eventObj.next = next;
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
// eventObj.html = '<button>活动</button>: ';
|
||||
// eventObj.onEv
|
||||
// ? eventObj.html += `${ eventObj.current.name }(<button title="${ eventObj.current.eff }">详情</button>) - 剩余${ eventObj.daysLeft }天`
|
||||
// : eventObj.html += `${ eventObj.daysLeft }天后 - ${ eventObj.next.name }(<button title="${ eventObj.next.eff }">详情</button>)`;
|
||||
// rt.push({
|
||||
// domType: 'plain',
|
||||
// domId: 'wh-trans-event-cont',
|
||||
// domHTML: eventObj.html,
|
||||
// });
|
||||
// // 一键起飞
|
||||
// rt.push({
|
||||
// domType: 'button',
|
||||
// domId: 'wh-quick-fly-btn',
|
||||
// domText: '✈️ 一键起飞',
|
||||
// clickFunc: () => Container.factory(QuickFlyBtnHandler).handle(),
|
||||
// });
|
||||
// // 飞花库存
|
||||
// rt.push({
|
||||
// domType: 'button',
|
||||
// domId: 'wh-foreign-stock-btn',
|
||||
// domText: '🌸 飞花库存',
|
||||
// clickFunc: () => Container.factory(TravelItem).clickHandler().then(),
|
||||
// });
|
||||
// // NPC LOOT
|
||||
// rt.push({
|
||||
// domType: 'button',
|
||||
// domId: 'wh-npc-loot-btn',
|
||||
// domText: '🔫 LOOT',
|
||||
// clickFunc: () => {
|
||||
// const insert = ZHONG_LOOT_HTML.replace('{{}}', performance.now().toString());
|
||||
// new Popup(insert, 'NPC LOOT');
|
||||
// },
|
||||
// tip: '显示5个可击杀NPC的开打时间',
|
||||
// });
|
||||
// // 查看NNB
|
||||
// rt.push({
|
||||
// domType: 'button',
|
||||
// domId: 'wh-nnb-info',
|
||||
// domText: '👮 查看NNB',
|
||||
// clickFunc: () => this.nnb.handle(),
|
||||
// });
|
||||
// // 常用链接
|
||||
// rt.push({
|
||||
// domType: 'button',
|
||||
// domId: 'wh-link-collection',
|
||||
// domText: '🔗 常用链接',
|
||||
// clickFunc: () => Container.factory(QuickLinksHandler).handle()
|
||||
// });
|
||||
// // 飞贼
|
||||
// // rt.push({
|
||||
// // domType: 'button',
|
||||
// // domId: 'wh-gs-btn',
|
||||
// // domText: '🐏 飞贼小助手',
|
||||
// // clickFunc: () => loadGS(CommonUtils.getScriptEngine()),
|
||||
// // tip: '加载从PC端移植的伞佬的油猴版飞贼小助手',
|
||||
// // });
|
||||
//
|
||||
// // 物品价格监视
|
||||
// rt.push({
|
||||
// domType: 'button',
|
||||
// domId: 'wh-price-watcher-btn',
|
||||
// domText: '💊 价格监视',
|
||||
// clickFunc: () => this.itemPriceWatcherHandler.handle()
|
||||
// });
|
||||
// // 全屏
|
||||
// if (!this.tornPDAUtils.isPDA()) rt.push({
|
||||
// domType: 'button', domId: '', domText: '🖥️ 进入全屏', clickFunc() {
|
||||
// document.documentElement.requestFullscreen().then();
|
||||
// }
|
||||
// });
|
||||
// // 传单助手
|
||||
// rt.push({
|
||||
// domType: 'button',
|
||||
// domId: '',
|
||||
// domText: '📜️ 传单助手',
|
||||
// clickFunc: adHelper
|
||||
// });
|
||||
// // 守望者
|
||||
// rt.push({
|
||||
// domType: 'button',
|
||||
// domId: '',
|
||||
// domText: '🛡️ 守望者',
|
||||
// clickFunc: function () {
|
||||
// safeKeeper();
|
||||
// },
|
||||
// });
|
||||
// // 寻找木桩
|
||||
// rt.push({
|
||||
// domType: 'button',
|
||||
// domId: '',
|
||||
// domText: '🌲 寻找木桩',
|
||||
// clickFunc() {
|
||||
// window.location.replace('https://www.torn.com/item.php?temp=4#xunzhaomuzhuang')
|
||||
// }
|
||||
// });
|
||||
// // 物品查价
|
||||
// rt.push(ItemPriceHandler);
|
||||
// // 更新历史
|
||||
// rt.push(ChangeLogHandler);
|
||||
// // 助手设置
|
||||
// rt.push(SettingsHandler);
|
||||
// // 测试
|
||||
// if (this.logger.debug()) rt.push(Test);
|
||||
// return rt;
|
||||
// }
|
||||
}
|
||||
|
||||
@ -44,9 +44,9 @@ export default class LocalConfigWrapper {
|
||||
private get Local(): Config {
|
||||
let config: Config;
|
||||
try {
|
||||
config = JSON.parse(localStorage.getItem('wh_trans_settings'))
|
||||
config = JSON.parse(localStorage.getItem('wh_trans_settings')) ?? defaultConfig;
|
||||
} catch (e) {
|
||||
this.logger.error('配置获取失败, 载入默认');
|
||||
this.logger.error('配置解析失败, 载入默认');
|
||||
config = defaultConfig;
|
||||
localStorage.setItem('wh_trans_settings', JSON.stringify(defaultConfig));
|
||||
}
|
||||
|
||||
@ -23,7 +23,7 @@ export default function EntryPoint(T: { main: () => void }) {
|
||||
ZhongIcon.ZhongNode.initTimer.innerHTML = `加载时间 ${ runTime }ms`;
|
||||
};
|
||||
const evHandler = () => {
|
||||
console.log('document.readyState: ' + document.readyState);
|
||||
// console.log('document.readyState: ' + document.readyState);
|
||||
if (!started && (document.readyState === 'complete' || document.readyState === 'interactive')) {
|
||||
document.removeEventListener('readystatechange', evHandler);
|
||||
started = !started;
|
||||
|
||||
@ -2,6 +2,7 @@ import ClassName from "../../container/ClassName";
|
||||
import { Injectable } from "../../container/Injectable";
|
||||
import Alert from "./Alert";
|
||||
import IWHNotify from "../../interface/IWHNotify";
|
||||
import { InjectionKey } from "vue";
|
||||
|
||||
@ClassName('MsgWrapper')
|
||||
@Injectable()
|
||||
@ -10,3 +11,5 @@ export default class MsgWrapper {
|
||||
return new Alert(msg, options);
|
||||
}
|
||||
}
|
||||
|
||||
export const MsgWrapperKey = Symbol('MsgWrapperKey') as InjectionKey<MsgWrapper>;
|
||||
|
||||
14
src/ts/class/utils/PopupWrapper.ts
Normal file
14
src/ts/class/utils/PopupWrapper.ts
Normal file
@ -0,0 +1,14 @@
|
||||
import ClassName from "../../container/ClassName";
|
||||
import { Injectable } from "../../container/Injectable";
|
||||
import Popup from "./Popup";
|
||||
import { InjectionKey } from "vue";
|
||||
|
||||
@ClassName('PopupWrapper')
|
||||
@Injectable()
|
||||
export default class PopupWrapper {
|
||||
public create(html: string, title: string, onClosing: () => unknown) {
|
||||
return new Popup(html, title, onClosing);
|
||||
}
|
||||
}
|
||||
|
||||
export const PopupWrapperKey = Symbol('PopupWrapperKey') as InjectionKey<PopupWrapper>;
|
||||
@ -13,4 +13,4 @@ export enum MENU_ITEM_TYPE {
|
||||
}
|
||||
|
||||
// export
|
||||
export const menuItemList = Symbol() as InjectionKey<MenuItem[]>;
|
||||
export const menuItemList = Symbol('menuItemList') as InjectionKey<MenuItem[]>;
|
||||
|
||||
@ -1,13 +1,29 @@
|
||||
<script lang="ts" setup>
|
||||
import { inject } from 'vue';
|
||||
import { LoggerKey, MenuItemListKey } from "../ts/class/IconHelper";
|
||||
import { inject, ref } from 'vue';
|
||||
import { LoggerKey } from "../ts/class/IconHelper";
|
||||
import globVars from "../ts/globVars";
|
||||
import Test from "./Test.vue";
|
||||
import PopupWindow from "./PopupWindow.vue";
|
||||
|
||||
const logger = inject(LoggerKey);
|
||||
const menuItemList = inject(MenuItemListKey);
|
||||
// const menuItemList = inject(MenuItemListKey);
|
||||
const menuItemList = [];
|
||||
const version = globVars.version;
|
||||
|
||||
const itemHandle = (id) => logger.info(id);
|
||||
const updateHandle = () => {
|
||||
|
||||
};
|
||||
const currentPopupContent = ref({
|
||||
has: false,
|
||||
title: null,
|
||||
content: null,
|
||||
});
|
||||
const menuClick = (id) => {
|
||||
currentPopupContent.value.has = true;
|
||||
currentPopupContent.value.title = 'test';
|
||||
currentPopupContent.value.content = Test;
|
||||
};
|
||||
</script>
|
||||
|
||||
<template>
|
||||
@ -18,10 +34,11 @@ const itemHandle = (id) => logger.info(id);
|
||||
<div class="main">
|
||||
<div><b>芜湖助手</b></div>
|
||||
<div id="itemList">
|
||||
<div v-for="item in menuItemList">
|
||||
<button v-if="item.domType === 'button'" @click="itemHandle(item.domId)">{{ item.domText }}</button>
|
||||
<div v-if="item.domType === 'plain'" v-html="item.domHTML"></div>
|
||||
</div>
|
||||
<!-- <div v-for="item in menuItemList">-->
|
||||
<!-- <button v-if="item.domType === 'button'" @click="itemHandle(item.domId)">{{ item.domText }}</button>-->
|
||||
<!-- <div v-if="item.domType === 'plain'" v-html="item.domHTML"></div>-->
|
||||
<!-- </div>-->
|
||||
<button @click="menuClick">菜单</button>
|
||||
</div>
|
||||
<div>
|
||||
<p>当前版本: {{ version }}
|
||||
@ -32,68 +49,15 @@ const itemHandle = (id) => logger.info(id);
|
||||
<div><p id="loadTime"></p></div>
|
||||
</div>
|
||||
</div>
|
||||
<PopupWindow v-if="currentPopupContent.has" title="{{ currentPopupContent.title }}">
|
||||
<component :is="currentPopupContent.content"/>
|
||||
</PopupWindow>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
// import "reflect-metadata";
|
||||
// import Global from "../ts/class/Global";
|
||||
// import { defineComponent, inject } from "vue";
|
||||
// import Logger from "../ts/class/Logger";
|
||||
// import MenuItem, { menuItemList } from "../ts/interface/MenuItem";
|
||||
// import { global, logger } from "../ts/class/IconHelper";
|
||||
// import { Component, Inject, Vue } from "vue-facing-decorator";
|
||||
//
|
||||
// // export default defineComponent({
|
||||
// // export default {
|
||||
// // // inject: ['_logger', '_global', '_menuItemList'],
|
||||
// // inject: {
|
||||
// // // _logger: {
|
||||
// // // from: logger,
|
||||
// // // default: {},
|
||||
// // // },
|
||||
// // // global: {
|
||||
// // // from: global,
|
||||
// // // },
|
||||
// // _menuItemList: {
|
||||
// // from: menuItemList,
|
||||
// // }
|
||||
// // },
|
||||
// // name: "FloatMenu",
|
||||
// // setup(props) {
|
||||
// // },
|
||||
// // data() {
|
||||
// // return {
|
||||
// // // @ts-ignore
|
||||
// // // logger: this._logger,
|
||||
// // // global: this._global as unknown as Global,
|
||||
// // // menuItemList: this.menuItemList,
|
||||
// // menuItemList: this._menuItemList,
|
||||
// // // version: this.inject.global.version,
|
||||
// // }
|
||||
// // },
|
||||
// // methods: {
|
||||
// // itemHandle(id: string) {
|
||||
// // // this.logger.info(id);
|
||||
// // }
|
||||
// // },
|
||||
// // mounted() {
|
||||
// // // @ts-ignore
|
||||
// // console.warn('123123123', this.menuItemList)
|
||||
// // console.warn('123123123', this._menuItemList)
|
||||
// // }
|
||||
// // }
|
||||
// @Component({})
|
||||
// export default class A extends Vue{
|
||||
// @Inject
|
||||
// readonly logger!:Logger;
|
||||
// @Inject
|
||||
// readonly menuItemList!:MenuItem[];
|
||||
// @Inject
|
||||
// readonly global!:Global;
|
||||
//
|
||||
// version = this.global.version;
|
||||
// }
|
||||
export default {};
|
||||
export default {
|
||||
name: 'FloatMenu',
|
||||
};
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
26
src/vue/PopupWindow.vue
Normal file
26
src/vue/PopupWindow.vue
Normal file
@ -0,0 +1,26 @@
|
||||
<script lang="ts" setup>
|
||||
defineProps(['title', 'html', 'temp']);
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div class="popup-container">
|
||||
<div class="border-round">
|
||||
<div class="title-black top-round">
|
||||
<p>{{ title || '芜湖助手' }}</p>
|
||||
</div>
|
||||
<div class="bottom-round cont-gray scroll-area scrollbar-transparent">
|
||||
<slot></slot>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script lang="ts">
|
||||
export default {
|
||||
name: "PopupWindow"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
13
src/vue/Test.vue
Normal file
13
src/vue/Test.vue
Normal file
@ -0,0 +1,13 @@
|
||||
<template>
|
||||
<p>1</p>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: "Test"
|
||||
}
|
||||
</script>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
Loading…
x
Reference in New Issue
Block a user