更新
This commit is contained in:
parent
55ff6e7a5a
commit
8146b165f9
@ -5,6 +5,15 @@
|
|||||||
|
|
||||||
# CHANGE
|
# CHANGE
|
||||||
|
|
||||||
|
## 1.0.5
|
||||||
|
|
||||||
|
2023年06月19日
|
||||||
|
|
||||||
|
### 修改
|
||||||
|
|
||||||
|
- 移除原菜单
|
||||||
|
- 调整了新菜单的样式、部分逻辑
|
||||||
|
|
||||||
## 1.0.4
|
## 1.0.4
|
||||||
|
|
||||||
2023年06月16日
|
2023年06月16日
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "wuhu-torn-helper",
|
"name": "wuhu-torn-helper",
|
||||||
"version": "1.0.4",
|
"version": "1.0.5",
|
||||||
"description": "芜湖助手",
|
"description": "芜湖助手",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"release": "cross-env NODE_ENV=production rollup -c && node build.mjs",
|
"release": "cross-env NODE_ENV=production rollup -c && node build.mjs",
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@ -282,3 +282,7 @@ div#wh-popup::after {
|
|||||||
.non-selection {
|
.non-selection {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.el-overlay {
|
||||||
|
backdrop-filter: blur(20px);
|
||||||
|
}
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import WuhuBase from "./class/WuhuBase";
|
import WuhuBase from "./class/WuhuBase";
|
||||||
import WuHuTornHelper from "./class/WuhuTornHelper";
|
import WuHuTornHelper from "./class/WuhuTornHelper";
|
||||||
import ZhongIcon from "./class/ZhongIcon";
|
|
||||||
import { Common } from "./class/Common";
|
import { Common } from "./class/Common";
|
||||||
import UrlRouter from "./class/UrlRouter";
|
import UrlRouter from "./class/UrlRouter";
|
||||||
import translateMain from "./func/translate/translateMain";
|
import translateMain from "./func/translate/translateMain";
|
||||||
@ -13,7 +12,7 @@ import { Injectable } from "./container/Injectable";
|
|||||||
@Injectable()
|
@Injectable()
|
||||||
export default class App {
|
export default class App {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly icon: ZhongIcon,
|
// private readonly icon: ZhongIcon,
|
||||||
private readonly wuhuBase: WuhuBase,
|
private readonly wuhuBase: WuhuBase,
|
||||||
private readonly tornHelper: WuHuTornHelper,
|
private readonly tornHelper: WuHuTornHelper,
|
||||||
private readonly common: Common,
|
private readonly common: Common,
|
||||||
@ -31,7 +30,7 @@ export default class App {
|
|||||||
this.tornHelper.init();
|
this.tornHelper.init();
|
||||||
|
|
||||||
// 插件图标和设置菜单
|
// 插件图标和设置菜单
|
||||||
this.icon.init();
|
// this.icon.init();
|
||||||
|
|
||||||
let tmp = () => {
|
let tmp = () => {
|
||||||
// 所有页面通用
|
// 所有页面通用
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import AttackHelper from "./action/AttackHelper";
|
|||||||
import SidebarHelper from "./action/SidebarHelper";
|
import SidebarHelper from "./action/SidebarHelper";
|
||||||
import CommonUtils from "./utils/CommonUtils";
|
import CommonUtils from "./utils/CommonUtils";
|
||||||
import FetchUtils from "./utils/FetchUtils";
|
import FetchUtils from "./utils/FetchUtils";
|
||||||
import ZhongIcon from "./ZhongIcon";
|
|
||||||
import FetchEventCallback from "./action/FetchEventCallback";
|
import FetchEventCallback from "./action/FetchEventCallback";
|
||||||
import globVars from "../globVars";
|
import globVars from "../globVars";
|
||||||
import TranslateNew from "./action/TranslateNew";
|
import TranslateNew from "./action/TranslateNew";
|
||||||
@ -35,7 +34,7 @@ export class Common {
|
|||||||
private readonly tornPDAUtils: TornPDAUtils,
|
private readonly tornPDAUtils: TornPDAUtils,
|
||||||
private readonly logger: Logger,
|
private readonly logger: Logger,
|
||||||
private readonly buyBeerHelper: BuyBeerHelper,
|
private readonly buyBeerHelper: BuyBeerHelper,
|
||||||
private readonly icon: ZhongIcon,
|
// private readonly icon: ZhongIcon,
|
||||||
private readonly fetchUtils: FetchUtils,
|
private readonly fetchUtils: FetchUtils,
|
||||||
private readonly moduleLoader: ModuleLoader,
|
private readonly moduleLoader: ModuleLoader,
|
||||||
private readonly msgWrapper: MsgWrapper,
|
private readonly msgWrapper: MsgWrapper,
|
||||||
@ -132,7 +131,7 @@ export class Common {
|
|||||||
this.logger.info("现金变动提醒", mutations);
|
this.logger.info("现金变动提醒", mutations);
|
||||||
mutations.forEach(item => {
|
mutations.forEach(item => {
|
||||||
if (item.attributeName === 'data-money') {
|
if (item.attributeName === 'data-money') {
|
||||||
this.icon.updateCashView(userMoney.innerText);
|
// this.icon.updateCashView(userMoney.innerText);
|
||||||
this.msgWrapper.create(
|
this.msgWrapper.create(
|
||||||
'现金变动 ' + item.oldValue + ' ➡️ ' + userMoney.innerText,
|
'现金变动 ' + item.oldValue + ' ➡️ ' + userMoney.innerText,
|
||||||
{ sysNotify: true }
|
{ sysNotify: true }
|
||||||
|
|||||||
@ -10,7 +10,7 @@ import Logger from "../Logger";
|
|||||||
|
|
||||||
@ClassName('ChangeLogHandler')
|
@ClassName('ChangeLogHandler')
|
||||||
@Injectable()
|
@Injectable()
|
||||||
class ChangeLogHandler extends Provider {
|
export class ChangeLogHandler extends Provider {
|
||||||
constructor(
|
constructor(
|
||||||
private readonly mdUtils: MDUtils,
|
private readonly mdUtils: MDUtils,
|
||||||
private readonly logger: Logger,
|
private readonly logger: Logger,
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import "reflect-metadata";
|
import "reflect-metadata";
|
||||||
import ZhongIcon from "../ZhongIcon";
|
|
||||||
import { Container } from "../../container/Container";
|
import { Container } from "../../container/Container";
|
||||||
import Logger from "../Logger";
|
import Logger from "../Logger";
|
||||||
|
import globVars from "../../globVars";
|
||||||
|
|
||||||
export default function EntryPoint(T: { main: () => void }) {
|
export default function EntryPoint(T: { main: () => void }) {
|
||||||
if (window.WHTRANS) {
|
if (window.WHTRANS) {
|
||||||
@ -20,9 +20,10 @@ export default function EntryPoint(T: { main: () => void }) {
|
|||||||
logger.error('[Starter]加载出错信息: ' + e.stack || e.message);
|
logger.error('[Starter]加载出错信息: ' + e.stack || e.message);
|
||||||
}
|
}
|
||||||
let runTime: number = (performance.now() - started) | 0;
|
let runTime: number = (performance.now() - started) | 0;
|
||||||
|
globVars.loadTime = runTime;
|
||||||
logger.info(`芜湖脚本完成加载, 耗时${ runTime }ms`);
|
logger.info(`芜湖脚本完成加载, 耗时${ runTime }ms`);
|
||||||
if (ZhongIcon.ZhongNode && ZhongIcon.ZhongNode.initTimer)
|
// if (ZhongIcon.ZhongNode && ZhongIcon.ZhongNode.initTimer)
|
||||||
ZhongIcon.ZhongNode.initTimer.innerHTML = `加载时间 ${ runTime }ms`;
|
// ZhongIcon.ZhongNode.initTimer.innerHTML = `加载时间 ${ runTime }ms`;
|
||||||
};
|
};
|
||||||
const evHandler = () => {
|
const evHandler = () => {
|
||||||
// console.log('document.readyState: ' + document.readyState);
|
// console.log('document.readyState: ' + document.readyState);
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import ZhongIcon from "../ZhongIcon";
|
|
||||||
import ClassName from "../../container/ClassName";
|
import ClassName from "../../container/ClassName";
|
||||||
import { Injectable } from "../../container/Injectable";
|
import { Injectable } from "../../container/Injectable";
|
||||||
import Logger from "../Logger";
|
import Logger from "../Logger";
|
||||||
|
import globVars from "../../globVars";
|
||||||
|
|
||||||
@ClassName('ActionButtonUtils')
|
@ClassName('ActionButtonUtils')
|
||||||
@Injectable()
|
@Injectable()
|
||||||
@ -16,6 +16,10 @@ export default class ActionButtonUtils {
|
|||||||
public add(txt: string, func: (ev: Event) => void = () => null): void {
|
public add(txt: string, func: (ev: Event) => void = () => null): void {
|
||||||
if (!this.hasAdded) this.handle(txt, func);
|
if (!this.hasAdded) this.handle(txt, func);
|
||||||
else this.logger.warn('ActionButton已存在');
|
else this.logger.warn('ActionButton已存在');
|
||||||
|
globVars.actionList.push({
|
||||||
|
txt,
|
||||||
|
func
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private handle(txt, func): void {
|
private handle(txt, func): void {
|
||||||
@ -25,7 +29,7 @@ export default class ActionButtonUtils {
|
|||||||
btn.style.color = '#4CAF50';
|
btn.style.color = '#4CAF50';
|
||||||
btn.innerHTML = txt;
|
btn.innerHTML = txt;
|
||||||
btn.addEventListener('click', func);
|
btn.addEventListener('click', func);
|
||||||
ZhongIcon.ZhongNode.querySelector('button').after(btn);
|
// ZhongIcon.ZhongNode.querySelector('button').after(btn);
|
||||||
this.hasAdded = true;
|
this.hasAdded = true;
|
||||||
this.logger.info('ActionButton已添加', { txt, func, btn });
|
this.logger.info('ActionButton已添加', { txt, func, btn });
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,7 +1,10 @@
|
|||||||
import Popup from "../../class/utils/Popup";
|
import Popup from "../../class/utils/Popup";
|
||||||
|
import { Container } from "../../container/Container";
|
||||||
|
import Logger from "../../class/Logger";
|
||||||
|
|
||||||
// 传单助手
|
// 传单助手
|
||||||
export default function adHelper() {
|
export default function adHelper() {
|
||||||
|
Container.factory(Logger).error('adHelper')
|
||||||
let popup = new Popup('', '传单助手').getElement();
|
let popup = new Popup('', '传单助手').getElement();
|
||||||
document.querySelector('#chatRoot').classList.remove('wh-hide');
|
document.querySelector('#chatRoot').classList.remove('wh-hide');
|
||||||
let info = document.createElement('p');
|
let info = document.createElement('p');
|
||||||
|
|||||||
33
src/ts/func/utils/useItem.ts
Normal file
33
src/ts/func/utils/useItem.ts
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
|
||||||
|
const useItem = (itemId: string) => {
|
||||||
|
fetch(window.addRFC("https://www.torn.com/item.php"), {
|
||||||
|
"headers": {
|
||||||
|
"accept": "*/*",
|
||||||
|
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
|
||||||
|
"sec-ch-ua-mobile": "?0",
|
||||||
|
"sec-fetch-dest": "empty",
|
||||||
|
"sec-fetch-mode": "cors",
|
||||||
|
"sec-fetch-site": "same-origin",
|
||||||
|
"x-requested-with": "XMLHttpRequest"
|
||||||
|
},
|
||||||
|
"referrer": "https://www.torn.com/item.php",
|
||||||
|
"referrerPolicy": "strict-origin-when-cross-origin",
|
||||||
|
"body": `step=useItem&id=${ itemId }&itemID=${ itemId }`,
|
||||||
|
"method": "POST",
|
||||||
|
"mode": "cors",
|
||||||
|
"credentials": "include"
|
||||||
|
})
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(res => ElMessage({
|
||||||
|
message: res.text,
|
||||||
|
type: res.success ? 'success' : 'error',
|
||||||
|
dangerouslyUseHTMLString: true
|
||||||
|
}))
|
||||||
|
.catch(e => ElMessage({
|
||||||
|
message: e.toString,
|
||||||
|
type: 'error'
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
|
export default useItem;
|
||||||
@ -1,22 +1,14 @@
|
|||||||
import Popup from "./class/utils/Popup";
|
import Popup from "./class/utils/Popup";
|
||||||
|
|
||||||
// export default {
|
|
||||||
// // 监听到的fetch数据
|
|
||||||
// WH_NET_LOG: [],
|
|
||||||
// map: {},
|
|
||||||
// responseHandlers: [],
|
|
||||||
// version: '$$WUHU_DEV_VERSION$$',
|
|
||||||
// } as IGlobVars;
|
|
||||||
//
|
|
||||||
// interface IGlobVars {
|
|
||||||
// WH_NET_LOG: unknown[],
|
|
||||||
// map: { [key: string]: unknown },
|
|
||||||
// responseHandlers: ((url: string, responseBody: { json: unknown, text: string, isModified: boolean }, opt: { method: string, requestBody: unknown }) => void)[],
|
|
||||||
// version: string,
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
type ResponseHandlers = ((url: string, responseBody: {
|
||||||
type ResponseHandlers = ((url: string, responseBody: { json: unknown, text: string, isModified: boolean }, opt: { method: string, requestBody: unknown }) => void)[];
|
json: unknown,
|
||||||
|
text: string,
|
||||||
|
isModified: boolean
|
||||||
|
}, opt: {
|
||||||
|
method: string,
|
||||||
|
requestBody: unknown
|
||||||
|
}) => void)[];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通用全局参数
|
* 通用全局参数
|
||||||
@ -28,6 +20,11 @@ class GlobVars {
|
|||||||
responseHandlers: ResponseHandlers = [];
|
responseHandlers: ResponseHandlers = [];
|
||||||
version = '$$WUHU_DEV_VERSION$$';
|
version = '$$WUHU_DEV_VERSION$$';
|
||||||
popup_node: MyHTMLElement | Popup = null;
|
popup_node: MyHTMLElement | Popup = null;
|
||||||
|
actionList: {
|
||||||
|
txt: string,
|
||||||
|
func: (ev: Event) => void
|
||||||
|
}[] = [];
|
||||||
|
loadTime: number = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default new GlobVars();
|
export default new GlobVars();
|
||||||
|
|||||||
@ -6,37 +6,47 @@
|
|||||||
<MoonNight/>
|
<MoonNight/>
|
||||||
</el-icon>
|
</el-icon>
|
||||||
</el-button>
|
</el-button>
|
||||||
<el-button circle @click="showDrawer">
|
<el-button v-for="item in _globVars.actionList" @click="item.func">{{ item.txt }}</el-button>
|
||||||
|
<el-button v-if="editableTabs.length > 0" circle @click="showDrawer">
|
||||||
|
<el-badge :value="editableTabs.length" type="primary">
|
||||||
<el-icon>
|
<el-icon>
|
||||||
<CopyDocument/>
|
<CopyDocument/>
|
||||||
</el-icon>
|
</el-icon>
|
||||||
|
</el-badge>
|
||||||
</el-button>
|
</el-button>
|
||||||
</el-button-group>
|
</el-button-group>
|
||||||
<el-dialog v-model="drawer" :destroy-on-close="false" :fullscreen="isMobilePhone" :lock-scroll="true"
|
<el-dialog v-model="drawer" :destroy-on-close="false" :fullscreen="isMobilePhone" :lock-scroll="true"
|
||||||
:title="drawerTitle" style="padding: 0"
|
:title="editableTabsValue" width="65%">
|
||||||
width="65%">
|
<el-tabs v-model="editableTabsValue" closable type="card" @tab-remove="removeTab">
|
||||||
<el-tabs
|
<el-tab-pane v-for="item in editableTabs" :key="item.name" :label="item.title" :name="item.name">
|
||||||
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"/>
|
<component :is="item.content"/>
|
||||||
</el-tab-pane>
|
</el-tab-pane>
|
||||||
</el-tabs>
|
</el-tabs>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
<el-drawer v-model="expanded" :size="isMobilePhone ? '85%' : '30%'" direction="rtl">
|
<el-drawer v-model="expanded" :show-close="false" :size="isMobilePhone ? '85%' : '30%'" direction="rtl">
|
||||||
<template #header>
|
<template #header="{ close, titleId, titleClass }">
|
||||||
<p>便捷菜单</p>
|
<div :id="titleId" :class="titleClass">
|
||||||
<el-button link>芜湖助手 {{ globVars.version.startsWith('$') ? 'dev' : 'v' + globVars.version }}</el-button>
|
<el-tooltip content="更新?" placement="bottom-start">
|
||||||
|
<el-button link @click="menuClick({ title: '更新', template: UpdateDate })">芜湖助手</el-button>
|
||||||
|
</el-tooltip>
|
||||||
|
<el-row>
|
||||||
|
<el-tag size="small" type="info">{{
|
||||||
|
globVars.version.startsWith('$') ? 'dev' : 'v' + globVars.version
|
||||||
|
}}
|
||||||
|
</el-tag>
|
||||||
|
</el-row>
|
||||||
|
<el-row v-if="_globVars.loadTime">
|
||||||
|
<el-text size="small">{{ _globVars.loadTime }}ms</el-text>
|
||||||
|
</el-row>
|
||||||
|
</div>
|
||||||
|
<el-button type="danger" @click="close">
|
||||||
|
<el-icon>
|
||||||
|
<CircleCloseFilled/>
|
||||||
|
</el-icon>
|
||||||
|
关闭
|
||||||
|
</el-button>
|
||||||
</template>
|
</template>
|
||||||
<el-menu :unique-opened="true" class="el-menu-vertical-demo">
|
<el-menu :unique-opened="true">
|
||||||
<el-sub-menu index="1">
|
<el-sub-menu index="1">
|
||||||
<template #title>
|
<template #title>
|
||||||
<el-icon>✈️</el-icon>
|
<el-icon>✈️</el-icon>
|
||||||
@ -76,6 +86,16 @@
|
|||||||
<el-icon>{{ item.title.slice(0, 2) }}</el-icon>
|
<el-icon>{{ item.title.slice(0, 2) }}</el-icon>
|
||||||
<span>{{ item.title.slice(2, item.title.length) }}</span>
|
<span>{{ item.title.slice(2, item.title.length) }}</span>
|
||||||
</el-menu-item>
|
</el-menu-item>
|
||||||
|
<el-sub-menu :index="2 + menuItemList.length + 1 + ''">
|
||||||
|
<template #title>
|
||||||
|
<el-icon>🪓</el-icon>
|
||||||
|
<span>老功能</span>
|
||||||
|
</template>
|
||||||
|
<el-menu-item :index="(2 + menuItemList.length + 1) + '-' + 1" @click="_adHelper">📜️ 传单助手</el-menu-item>
|
||||||
|
<el-menu-item :index="(2 + menuItemList.length + 1) + '-' + 2" @click="_safeKeeper">🛡️ 守望者</el-menu-item>
|
||||||
|
<el-menu-item :index="(2 + menuItemList.length + 1) + '-' + 3" @click="MUZHUANG">🌲 寻找木桩</el-menu-item>
|
||||||
|
<el-menu-item :index="(2 + menuItemList.length + 1) + '-' + 4" @click="_setting">⚙️ 助手设置</el-menu-item>
|
||||||
|
</el-sub-menu>
|
||||||
</el-menu>
|
</el-menu>
|
||||||
</el-drawer>
|
</el-drawer>
|
||||||
</el-config-provider>
|
</el-config-provider>
|
||||||
@ -83,59 +103,35 @@
|
|||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
|
|
||||||
import { CopyDocument, MoonNight } from "@element-plus/icons-vue";
|
import { CircleCloseFilled, CopyDocument, MoonNight } from "@element-plus/icons-vue";
|
||||||
import { ElMessage, ElMessageBox, TabsPaneContext } from "element-plus";
|
import { ElMessage, ElMessageBox } from "element-plus";
|
||||||
import { Component, inject, onMounted, ref, shallowRef, triggerRef } from 'vue';
|
import { Component, inject, onMounted, ref, shallowRef, triggerRef } from 'vue';
|
||||||
import { LoggerKey } from "../ts/class/Logger";
|
import { LoggerKey } from "../ts/class/Logger";
|
||||||
import { QuickGymTrainKey } from "../ts/class/action/QuickGymTrain";
|
import { QuickGymTrainKey } from "../ts/class/action/QuickGymTrain";
|
||||||
|
import { ChangeLogHandler } from "../ts/class/handler/ChangeLogHandler";
|
||||||
import { QuickFlyBtnHandlerKey } from "../ts/class/handler/QuickFlyBtnHandler";
|
import { QuickFlyBtnHandlerKey } from "../ts/class/handler/QuickFlyBtnHandler";
|
||||||
|
import SettingsHandler from "../ts/class/handler/SettingsHandler";
|
||||||
import { BATTLE_STAT } from "../ts/class/utils/NetHighLvlWrapper";
|
import { BATTLE_STAT } from "../ts/class/utils/NetHighLvlWrapper";
|
||||||
|
import { Container } from "../ts/container/Container";
|
||||||
|
import adHelper from "../ts/func/module/adHelper";
|
||||||
|
import safeKeeper from "../ts/func/module/safeKeeper";
|
||||||
|
import useItem from "../ts/func/utils/useItem";
|
||||||
|
import globVars from "../ts/globVars";
|
||||||
import AutoLoginForm from "./AutoLoginForm.vue";
|
import AutoLoginForm from "./AutoLoginForm.vue";
|
||||||
import CityUItems from "./CityUItems.vue";
|
import CityUItems from "./CityUItems.vue";
|
||||||
import Config from "./Config.vue";
|
import CompanyWithdraw from "./CompanyWithdraw.vue";
|
||||||
import EventsViewer from "./EventsViewer.vue";
|
import EventsViewer from "./EventsViewer.vue";
|
||||||
import ForeignStock from "./ForeignStock.vue";
|
import ForeignStock from "./ForeignStock.vue";
|
||||||
import MarketHelper from "./MarketHelper.vue";
|
import MarketHelper from "./MarketHelper.vue";
|
||||||
import PTMarketView from "./PTMarketView.vue";
|
import PTMarketView from "./PTMarketView.vue";
|
||||||
import QuickCrime from "./QuickCrime.vue";
|
import QuickCrime from "./QuickCrime.vue";
|
||||||
|
import UpdateDate from "./UpdateScript.vue";
|
||||||
import VirusProgramming from "./VirusProgramming.vue";
|
import VirusProgramming from "./VirusProgramming.vue";
|
||||||
import CompanyWithdraw from "./CompanyWithdraw.vue";
|
|
||||||
import globVars from "../ts/globVars";
|
|
||||||
|
|
||||||
const logger = inject(LoggerKey);
|
const logger = inject(LoggerKey);
|
||||||
const quickGymTrain = inject(QuickGymTrainKey);
|
const quickGymTrain = inject(QuickGymTrainKey);
|
||||||
const quickFlyBtnHandler = inject(QuickFlyBtnHandlerKey);
|
const quickFlyBtnHandler = inject(QuickFlyBtnHandlerKey);
|
||||||
|
|
||||||
const useItem = (itemId: string) => {
|
|
||||||
fetch(window.addRFC("https://www.torn.com/item.php"), {
|
|
||||||
"headers": {
|
|
||||||
"accept": "*/*",
|
|
||||||
"content-type": "application/x-www-form-urlencoded;charset=UTF-8",
|
|
||||||
"sec-ch-ua-mobile": "?0",
|
|
||||||
"sec-fetch-dest": "empty",
|
|
||||||
"sec-fetch-mode": "cors",
|
|
||||||
"sec-fetch-site": "same-origin",
|
|
||||||
"x-requested-with": "XMLHttpRequest"
|
|
||||||
},
|
|
||||||
"referrer": "https://www.torn.com/item.php",
|
|
||||||
"referrerPolicy": "strict-origin-when-cross-origin",
|
|
||||||
"body": `step=useItem&id=${ itemId }&itemID=${ itemId }`,
|
|
||||||
"method": "POST",
|
|
||||||
"mode": "cors",
|
|
||||||
"credentials": "include"
|
|
||||||
})
|
|
||||||
.then(res => res.json())
|
|
||||||
.then(res => ElMessage({
|
|
||||||
message: res.text,
|
|
||||||
type: res.success ? 'success' : 'error',
|
|
||||||
dangerouslyUseHTMLString: true
|
|
||||||
}))
|
|
||||||
.catch(e => ElMessage({
|
|
||||||
message: e.toString,
|
|
||||||
type: 'error'
|
|
||||||
}));
|
|
||||||
};
|
|
||||||
|
|
||||||
type MenuItem = { title: string, template?: Component, handler?: Function };
|
type MenuItem = { title: string, template?: Component, handler?: Function };
|
||||||
const menuItemList: MenuItem[] = [
|
const menuItemList: MenuItem[] = [
|
||||||
{
|
{
|
||||||
@ -213,16 +209,23 @@ const menuItemList: MenuItem[] = [
|
|||||||
handler: () => bazaarControl.method(),
|
handler: () => bazaarControl.method(),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: '⚙️ 插件配置',
|
title: '🚀 更新历史',
|
||||||
template: Config,
|
handler: () => {
|
||||||
|
expanded.value = false
|
||||||
|
Container.factory(ChangeLogHandler).show()
|
||||||
},
|
},
|
||||||
|
},
|
||||||
|
// {
|
||||||
|
// title: '⚙️ 插件配置',
|
||||||
|
// template: Config,
|
||||||
|
// },
|
||||||
];
|
];
|
||||||
const drawer = ref(false);
|
const drawer = ref(false);
|
||||||
const drawerTitle = ref('');
|
|
||||||
const drawerContent = shallowRef(null);
|
|
||||||
const isMobilePhone = ref(false);
|
const isMobilePhone = ref(false);
|
||||||
const documentHeight = ref(0);
|
const documentHeight = ref(0);
|
||||||
const expanded = ref(false);
|
const expanded = ref(false);
|
||||||
|
const _globVars = ref(globVars);
|
||||||
|
logger.info({ _globVars })
|
||||||
// tabs
|
// tabs
|
||||||
const editableTabsValue = ref('');
|
const editableTabsValue = ref('');
|
||||||
const editableTabs = shallowRef([]);
|
const editableTabs = shallowRef([]);
|
||||||
@ -242,12 +245,26 @@ const travelData = [
|
|||||||
{ cName: "南非", index: 10 },
|
{ cName: "南非", index: 10 },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
const MUZHUANG = () => window.location.replace('https://www.torn.com/item.php?temp=4#xunzhaomuzhuang');
|
||||||
|
const _adHelper = () => {
|
||||||
|
expanded.value = false;
|
||||||
|
adHelper();
|
||||||
|
}
|
||||||
|
const _safeKeeper = () => {
|
||||||
|
expanded.value = false;
|
||||||
|
safeKeeper();
|
||||||
|
}
|
||||||
|
const _setting = () => {
|
||||||
|
expanded.value = false;
|
||||||
|
SettingsHandler.clickFunc();
|
||||||
|
}
|
||||||
|
|
||||||
const menuClick = (menuItem: MenuItem) => {
|
const menuClick = (menuItem: MenuItem) => {
|
||||||
if (menuItem.handler) {
|
if (menuItem.handler) {
|
||||||
menuItem.handler();
|
menuItem.handler();
|
||||||
} else if (menuItem.template) {
|
} else if (menuItem.template) {
|
||||||
drawer.value = true;
|
drawer.value = true;
|
||||||
drawerTitle.value = menuItem.title;
|
// drawerTitle.value = menuItem.title;
|
||||||
// drawerContent.value = menuItem.template;
|
// drawerContent.value = menuItem.template;
|
||||||
addTab(menuItem);
|
addTab(menuItem);
|
||||||
}
|
}
|
||||||
@ -255,17 +272,18 @@ const menuClick = (menuItem: MenuItem) => {
|
|||||||
|
|
||||||
const showDrawer = () => {
|
const showDrawer = () => {
|
||||||
if (editableTabs.value.length < 1) {
|
if (editableTabs.value.length < 1) {
|
||||||
ElMessage.warning('页面还没有打开任何功能标签');
|
logger.error('页面还没有打开任何功能标签');
|
||||||
} else {
|
throw new Error('页面还没有打开任何功能标签');
|
||||||
drawer.value = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drawer.value = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
const addTab = (menuItem: MenuItem) => {
|
const addTab = (menuItem: MenuItem) => {
|
||||||
for (let i = 0; i < editableTabs.value.length; i++) {
|
for (let i = 0; i < editableTabs.value.length; i++) {
|
||||||
if (editableTabs.value[i].name === menuItem.title) {
|
if (editableTabs.value[i].name === menuItem.title) {
|
||||||
editableTabsValue.value = menuItem.title;
|
editableTabsValue.value = menuItem.title;
|
||||||
drawerTitle.value = menuItem.title;
|
// drawerTitle.value = menuItem.title;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -281,6 +299,10 @@ const addTab = (menuItem: MenuItem) => {
|
|||||||
const removeTab = (targetName: string) => {
|
const removeTab = (targetName: string) => {
|
||||||
const tabs = editableTabs.value
|
const tabs = editableTabs.value
|
||||||
let activeName = editableTabsValue.value
|
let activeName = editableTabsValue.value
|
||||||
|
logger.info({
|
||||||
|
activeName,
|
||||||
|
targetName
|
||||||
|
})
|
||||||
if (activeName === targetName) {
|
if (activeName === targetName) {
|
||||||
tabs.forEach((tab, index) => {
|
tabs.forEach((tab, index) => {
|
||||||
if (tab.name === targetName) {
|
if (tab.name === targetName) {
|
||||||
@ -294,15 +316,19 @@ const removeTab = (targetName: string) => {
|
|||||||
|
|
||||||
editableTabsValue.value = activeName
|
editableTabsValue.value = activeName
|
||||||
editableTabs.value = tabs.filter((tab) => tab.name !== targetName)
|
editableTabs.value = tabs.filter((tab) => tab.name !== targetName)
|
||||||
|
logger.info({
|
||||||
|
activeName,
|
||||||
|
targetName
|
||||||
|
})
|
||||||
|
|
||||||
if (editableTabs.value.length < 1) {
|
if (editableTabs.value.length < 1) {
|
||||||
drawer.value = false;
|
drawer.value = false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const tabClick = (pane: TabsPaneContext) => {
|
// const tabClick = (pane: TabsPaneContext) => {
|
||||||
drawerTitle.value = <string>pane.paneName;
|
// drawerTitle.value = <string>pane.paneName;
|
||||||
}
|
// }
|
||||||
|
|
||||||
const travelConfirm = (destIndex: number, typeIndex: number) => {
|
const travelConfirm = (destIndex: number, typeIndex: number) => {
|
||||||
const destName = travelData[destIndex].cName;
|
const destName = travelData[destIndex].cName;
|
||||||
|
|||||||
@ -5,12 +5,6 @@
|
|||||||
<el-skeleton v-if="loading" :rows="3" animated/>
|
<el-skeleton v-if="loading" :rows="3" animated/>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
export default {
|
|
||||||
name: "QuickCrime"
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
|
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import { inject, ref } from 'vue';
|
import { inject, ref } from 'vue';
|
||||||
import { ElMessage } from "element-plus";
|
import { ElMessage } from "element-plus";
|
||||||
@ -44,6 +38,16 @@ const doCrime = async (nerve, crime: "hackbank" | "warehouse") => {
|
|||||||
logger.error(e.stack);
|
logger.error(e.stack);
|
||||||
results.value = e.message;
|
results.value = e.message;
|
||||||
}
|
}
|
||||||
|
let err;
|
||||||
|
try {
|
||||||
|
err = JSON.parse(results.value).error;
|
||||||
|
} catch (e) {
|
||||||
|
}
|
||||||
|
if (err) {
|
||||||
|
results.value = '出错了';
|
||||||
|
ElMessage.error('错误: ' + err);
|
||||||
|
logger.error(err);
|
||||||
|
}
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
83
src/vue/UpdateScript.vue
Normal file
83
src/vue/UpdateScript.vue
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
|
||||||
|
import { ElMessage } from "element-plus";
|
||||||
|
import { inject, ref } from "vue";
|
||||||
|
import { LoggerKey } from "../ts/class/Logger";
|
||||||
|
import CommonUtils from "../ts/class/utils/CommonUtils";
|
||||||
|
|
||||||
|
const logger = inject(LoggerKey)
|
||||||
|
|
||||||
|
const loading = ref(false)
|
||||||
|
const now = performance.now()
|
||||||
|
|
||||||
|
const loadAndCopy = async () => {
|
||||||
|
loading.value = true
|
||||||
|
let latest: string
|
||||||
|
try {
|
||||||
|
latest = await CommonUtils.COFetch(`https://jjins.github.io/fyfuzhi/release.min.user.js?${ performance.now() }`)
|
||||||
|
} catch (e) {
|
||||||
|
logger.error(e.stack)
|
||||||
|
ElMessage.error(e.message)
|
||||||
|
loading.value = false
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
|
||||||
|
if (navigator.clipboard) {
|
||||||
|
await navigator.clipboard.writeText(latest)
|
||||||
|
ElMessage.success('脚本已复制,请前往粘贴')
|
||||||
|
} else {
|
||||||
|
ElMessage.error('浏览器不支持复制指令')
|
||||||
|
}
|
||||||
|
loading.value = false
|
||||||
|
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<el-space direction="vertical" style="width: 100%">
|
||||||
|
<el-row>
|
||||||
|
<el-text>最新版本:
|
||||||
|
<el-image :src="'https://jjins.github.io/t2i/version.png?' + now" alt="latest"
|
||||||
|
style="width: 80px;height: 16px"/>
|
||||||
|
</el-text>
|
||||||
|
</el-row>
|
||||||
|
<el-row>
|
||||||
|
<el-text size="large">电脑</el-text>
|
||||||
|
</el-row>
|
||||||
|
<el-text>浏览器运行油猴等用户脚本扩展
|
||||||
|
<el-image alt="tm.png" src="//jjins.github.io/tm.png"/>
|
||||||
|
<el-image alt="vm.png"
|
||||||
|
src="//jjins.github.io/vm.png"/>
|
||||||
|
时可以使用链接安装(自动更新):
|
||||||
|
<el-link
|
||||||
|
href="//gitlab.com/JJins/wuhu-torn-helper/-/raw/dev/release.min.user.js" target="_blank"
|
||||||
|
type="primary">点此安装
|
||||||
|
</el-link>
|
||||||
|
。
|
||||||
|
</el-text>
|
||||||
|
<el-divider/>
|
||||||
|
<el-col>
|
||||||
|
<el-text size="large">手机</el-text>
|
||||||
|
</el-col>
|
||||||
|
<el-text>安卓 (如 KIWI) 等可以用油猴脚本的浏览器也可以点上面的链接安装⬆️</el-text>
|
||||||
|
<el-text>Torn PDA app 或 Alook 用户可打开
|
||||||
|
<el-link href="//jjins.github.io/fyfuzhi/" target="_blank"
|
||||||
|
type="primary">此页面
|
||||||
|
</el-link>
|
||||||
|
快捷复制粘贴。
|
||||||
|
</el-text>
|
||||||
|
<el-text>注:Torn PDA 中,Injection time 请选择 Start 达到最好效果。</el-text>
|
||||||
|
<el-divider/>
|
||||||
|
<el-col>
|
||||||
|
<el-text size="large">直接复制</el-text>
|
||||||
|
</el-col>
|
||||||
|
<el-text>加载脚本后复制粘贴到用户脚本处。</el-text>
|
||||||
|
<el-button :loading="loading" @click="loadAndCopy">加载</el-button>
|
||||||
|
</el-space>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.el-image {
|
||||||
|
width: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
Loading…
x
Reference in New Issue
Block a user