@whitesev/utils 2.0.0 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.amd.js.map +1 -1
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.iife.js.map +1 -1
- package/dist/index.system.js.map +1 -1
- package/dist/index.umd.js.map +1 -1
- package/package.json +5 -3
- package/src/AjaxHookerType.ts +155 -0
- package/src/ColorConversion.ts +130 -0
- package/src/Dictionary.ts +161 -0
- package/src/Event.ts +189 -0
- package/src/GBKEncoder.ts +121 -0
- package/src/Hooks.ts +87 -0
- package/src/Httpx.ts +2524 -0
- package/src/LockFunction.ts +67 -0
- package/src/Log.ts +285 -0
- package/src/Progress.ts +149 -0
- package/src/TryCatch.ts +107 -0
- package/src/Utils.ts +4937 -0
- package/src/UtilsCommon.ts +20 -0
- package/src/UtilsCore.ts +47 -0
- package/src/UtilsGMCookie.ts +262 -0
- package/src/UtilsGMMenu.ts +532 -0
- package/src/VueObject.ts +128 -0
- package/src/ajaxHooker/ajaxHooker.js +566 -0
- package/src/indexedDB.ts +427 -0
|
@@ -0,0 +1,532 @@
|
|
|
1
|
+
import { Utils } from "./Utils";
|
|
2
|
+
import { UtilsCore } from "./UtilsCore";
|
|
3
|
+
|
|
4
|
+
declare interface UtilsGMMenuClickCallBackData {
|
|
5
|
+
/** 菜单键名 */
|
|
6
|
+
key: string;
|
|
7
|
+
/** 是否启用 */
|
|
8
|
+
enable: boolean;
|
|
9
|
+
/** 点击前的enable值 */
|
|
10
|
+
oldEnable: boolean;
|
|
11
|
+
/** 触发的事件 */
|
|
12
|
+
event: MouseEvent | KeyboardEvent;
|
|
13
|
+
/** 将enable值写入本地的回调,设置参数false就不保存到本地 */
|
|
14
|
+
storeValue(enable: boolean): void;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
declare interface UtilsGMMenuOption {
|
|
18
|
+
/** 菜单的本地键key,不可重复,会覆盖 */
|
|
19
|
+
key: string;
|
|
20
|
+
/** 菜单的文本 */
|
|
21
|
+
text: string;
|
|
22
|
+
/** (可选)菜单的开启状态,默认为false */
|
|
23
|
+
enable?: boolean;
|
|
24
|
+
/** (可选)使用条件:TamperMonkey版本>5.0,如果id和已注册的菜单id相同,可修改当前已注册菜单的options */
|
|
25
|
+
id?: number;
|
|
26
|
+
/** (可选)An optional access key. Please see the description below. Either options or accessKey can be specified. */
|
|
27
|
+
accessKey?: string;
|
|
28
|
+
/** (可选)自动关闭菜单,可不设置 */
|
|
29
|
+
autoClose?: boolean;
|
|
30
|
+
/** 使用条件:TamperMonkey版本>5.0,使用菜单项的鼠标悬浮上的工具提示*/
|
|
31
|
+
title?: string;
|
|
32
|
+
/** (可选)点击菜单后自动刷新网页,默认为true */
|
|
33
|
+
autoReload?: boolean;
|
|
34
|
+
/** 菜单的显示文本,未设置的话则自动根据enable在前面加上图标 */
|
|
35
|
+
showText(text: string, enable: boolean): string;
|
|
36
|
+
/** 点击菜单的回调 */
|
|
37
|
+
callback(data: UtilsGMMenuClickCallBackData): void;
|
|
38
|
+
/** 是否允许菜单进行存储值,默认true允许 */
|
|
39
|
+
isStoreValue?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
declare interface UtilsGMMenuHandledOption extends UtilsGMMenuOption {
|
|
43
|
+
/**
|
|
44
|
+
* 删除该菜单
|
|
45
|
+
*/
|
|
46
|
+
deleteMenu(): void;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
declare interface UtilsGMMenuOptionData {
|
|
50
|
+
/**
|
|
51
|
+
* 菜单id
|
|
52
|
+
*/
|
|
53
|
+
id?: number;
|
|
54
|
+
/**
|
|
55
|
+
* 菜单配置
|
|
56
|
+
*/
|
|
57
|
+
data: UtilsGMMenuOption;
|
|
58
|
+
/**
|
|
59
|
+
* 处理后的菜单配置
|
|
60
|
+
* 对autoReload进行处理,如果未赋值,按默认的true赋值
|
|
61
|
+
* 对isStoreValue进行处理,如果未赋值,按默认的true赋值
|
|
62
|
+
* 新增一个deleteMenu
|
|
63
|
+
*/
|
|
64
|
+
handleData: UtilsGMMenuHandledOption;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
declare interface UtilsGMMenuConstructorOptions {
|
|
68
|
+
/** (可选)配置*/
|
|
69
|
+
data?: UtilsGMMenuOption[];
|
|
70
|
+
/** (可选)全局菜单点击菜单后自动刷新网页,默认为true */
|
|
71
|
+
autoReload?: boolean;
|
|
72
|
+
/** 油猴函数 @grant GM_getValue */
|
|
73
|
+
GM_getValue: any;
|
|
74
|
+
/** 油猴函数 @grant GM_setValue */
|
|
75
|
+
GM_setValue: any;
|
|
76
|
+
/** 油猴函数 @grant GM_registerMenuCommand */
|
|
77
|
+
GM_registerMenuCommand: any;
|
|
78
|
+
/** 油猴函数 @grant GM_unregisterMenuCommand */
|
|
79
|
+
GM_unregisterMenuCommand: any;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
class GMMenu {
|
|
83
|
+
private GM_Api = {
|
|
84
|
+
/**
|
|
85
|
+
* 获取存储的数据
|
|
86
|
+
*/
|
|
87
|
+
getValue: null as any,
|
|
88
|
+
/**
|
|
89
|
+
* 设置数据到存储
|
|
90
|
+
*/
|
|
91
|
+
setValue: null as any,
|
|
92
|
+
/**
|
|
93
|
+
* 注册菜单
|
|
94
|
+
*/
|
|
95
|
+
registerMenuCommand: null as any,
|
|
96
|
+
/**
|
|
97
|
+
* 卸载菜单
|
|
98
|
+
*/
|
|
99
|
+
unregisterMenuCommand: null as any,
|
|
100
|
+
};
|
|
101
|
+
private MenuHandle = {
|
|
102
|
+
context: this,
|
|
103
|
+
$data: {
|
|
104
|
+
/**
|
|
105
|
+
* 菜单数据
|
|
106
|
+
*/
|
|
107
|
+
data: <UtilsGMMenuOptionData[]>[],
|
|
108
|
+
/**
|
|
109
|
+
* 本地存储的键名
|
|
110
|
+
*/
|
|
111
|
+
key: "GM_Menu_Local_Map",
|
|
112
|
+
},
|
|
113
|
+
$default: {
|
|
114
|
+
/** 自动刷新网页,默认为true */
|
|
115
|
+
autoReload: true,
|
|
116
|
+
/**
|
|
117
|
+
* 菜单isStoreValue的默认值
|
|
118
|
+
*/
|
|
119
|
+
isStoreValue: true,
|
|
120
|
+
},
|
|
121
|
+
$emoji: {
|
|
122
|
+
/**
|
|
123
|
+
* 菜单enable为true的emoji
|
|
124
|
+
*/
|
|
125
|
+
success: "✅",
|
|
126
|
+
/**
|
|
127
|
+
* 菜单enable为false的emoji
|
|
128
|
+
*/
|
|
129
|
+
error: "❌",
|
|
130
|
+
},
|
|
131
|
+
/**
|
|
132
|
+
* 初始化数据
|
|
133
|
+
*/
|
|
134
|
+
init() {
|
|
135
|
+
for (let index = 0; index < this.$data.data.length; index++) {
|
|
136
|
+
let menuOption = this.$data.data[index]["data"];
|
|
137
|
+
menuOption.enable = Boolean(
|
|
138
|
+
this.getLocalMenuData(menuOption.key, menuOption.enable as boolean)
|
|
139
|
+
);
|
|
140
|
+
if (typeof menuOption.showText !== "function") {
|
|
141
|
+
menuOption.showText = (menuText, menuEnable) => {
|
|
142
|
+
if (menuEnable) {
|
|
143
|
+
return this.$emoji.success + " " + menuText;
|
|
144
|
+
} else {
|
|
145
|
+
return this.$emoji.error + " " + menuText;
|
|
146
|
+
}
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
/**
|
|
152
|
+
* 注册油猴菜单
|
|
153
|
+
* @param menuOptions 如果存在,使用它
|
|
154
|
+
*/
|
|
155
|
+
register(menuOptions?: UtilsGMMenuOptionData[]) {
|
|
156
|
+
let that = this;
|
|
157
|
+
if (menuOptions == null) {
|
|
158
|
+
throw new TypeError("register菜单数据不能为空");
|
|
159
|
+
}
|
|
160
|
+
if (!Array.isArray(menuOptions)) {
|
|
161
|
+
menuOptions = [menuOptions];
|
|
162
|
+
}
|
|
163
|
+
for (let index = 0; index < menuOptions.length; index++) {
|
|
164
|
+
let cloneMenuOptionData = Utils.deepClone(menuOptions[index].data);
|
|
165
|
+
const { showText, clickCallBack } = this.handleMenuData(
|
|
166
|
+
cloneMenuOptionData as Required<UtilsGMMenuOption>
|
|
167
|
+
);
|
|
168
|
+
let menuId = that.context.GM_Api.registerMenuCommand(
|
|
169
|
+
showText,
|
|
170
|
+
clickCallBack
|
|
171
|
+
);
|
|
172
|
+
menuOptions[index].id = menuId;
|
|
173
|
+
(cloneMenuOptionData as any).deleteMenu = function () {
|
|
174
|
+
that.context.GM_Api.unregisterMenuCommand(menuId);
|
|
175
|
+
};
|
|
176
|
+
Reflect.deleteProperty(menuOptions[index], "handleData");
|
|
177
|
+
(menuOptions[index] as any).handleData = cloneMenuOptionData;
|
|
178
|
+
}
|
|
179
|
+
},
|
|
180
|
+
/**
|
|
181
|
+
* 获取本地存储菜单键值
|
|
182
|
+
* @param {string} key 键
|
|
183
|
+
*/
|
|
184
|
+
getLocalMenuData(key: string, defaultValue: boolean): boolean {
|
|
185
|
+
let localData = this.context.GM_Api.getValue(this.$data.key, {});
|
|
186
|
+
if (key in localData) {
|
|
187
|
+
return (localData as any)[key];
|
|
188
|
+
} else {
|
|
189
|
+
return defaultValue;
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
/**
|
|
193
|
+
* 设置本地存储菜单键值
|
|
194
|
+
* @param key 键
|
|
195
|
+
* @param value 值
|
|
196
|
+
*/
|
|
197
|
+
setLocalMenuData(key: string, value: boolean) {
|
|
198
|
+
let localData = this.context.GM_Api.getValue(this.$data.key, {});
|
|
199
|
+
(localData as any)[key] = value;
|
|
200
|
+
this.context.GM_Api.setValue(this.$data.key, localData);
|
|
201
|
+
},
|
|
202
|
+
/**
|
|
203
|
+
* 处理初始化配置
|
|
204
|
+
* @param menuOption
|
|
205
|
+
*/
|
|
206
|
+
handleInitDetail(menuOption: Required<UtilsGMMenuOption>) {
|
|
207
|
+
menuOption.enable = Boolean(
|
|
208
|
+
this.getLocalMenuData(menuOption.key, menuOption.enable)
|
|
209
|
+
);
|
|
210
|
+
if (typeof menuOption.showText !== "function") {
|
|
211
|
+
menuOption.showText = (menuText, menuEnable) => {
|
|
212
|
+
if (menuEnable) {
|
|
213
|
+
return this.$emoji.success + " " + menuText;
|
|
214
|
+
} else {
|
|
215
|
+
return this.$emoji.error + " " + menuText;
|
|
216
|
+
}
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
return menuOption;
|
|
220
|
+
},
|
|
221
|
+
/**
|
|
222
|
+
* 对菜单数据进行处理
|
|
223
|
+
* @param menuOption
|
|
224
|
+
*/
|
|
225
|
+
handleMenuData(menuOption: Required<UtilsGMMenuOption>) {
|
|
226
|
+
let that = this;
|
|
227
|
+
let menuLocalDataItemKey = menuOption.key;
|
|
228
|
+
/* 菜单默认开启的状态 */
|
|
229
|
+
let defaultEnable = Boolean(
|
|
230
|
+
this.getLocalMenuData(menuLocalDataItemKey, menuOption.enable)
|
|
231
|
+
);
|
|
232
|
+
/** 油猴菜单上显示的文本 */
|
|
233
|
+
let showText = menuOption.showText(menuOption.text, defaultEnable);
|
|
234
|
+
// @ts-ignore
|
|
235
|
+
const GMMenuOptions = {
|
|
236
|
+
/**
|
|
237
|
+
* 菜单的id
|
|
238
|
+
*/
|
|
239
|
+
id: menuOption.id,
|
|
240
|
+
/**
|
|
241
|
+
* 点击菜单项后是否应关闭弹出菜单
|
|
242
|
+
*/
|
|
243
|
+
autoClose: menuOption.autoClose,
|
|
244
|
+
/**
|
|
245
|
+
* 菜单项的可选访问键
|
|
246
|
+
*/
|
|
247
|
+
accessKey: menuOption.accessKey,
|
|
248
|
+
/**
|
|
249
|
+
* 菜单项的鼠标悬浮上的工具提示
|
|
250
|
+
*/
|
|
251
|
+
title: menuOption.title,
|
|
252
|
+
};
|
|
253
|
+
/* 点击菜单后触发callback后的网页是否刷新 */
|
|
254
|
+
menuOption.autoReload =
|
|
255
|
+
typeof menuOption.autoReload !== "boolean"
|
|
256
|
+
? this.$default.autoReload
|
|
257
|
+
: menuOption.autoReload;
|
|
258
|
+
/* 点击菜单后触发callback后的网页是否存储值 */
|
|
259
|
+
menuOption.isStoreValue =
|
|
260
|
+
typeof menuOption.isStoreValue !== "boolean"
|
|
261
|
+
? this.$default.isStoreValue
|
|
262
|
+
: menuOption.isStoreValue;
|
|
263
|
+
/**
|
|
264
|
+
* 用户点击菜单后的回调函数
|
|
265
|
+
* @param event
|
|
266
|
+
*/
|
|
267
|
+
function clickCallBack(event: MouseEvent | PointerEvent) {
|
|
268
|
+
let localEnable = Boolean(
|
|
269
|
+
that.getLocalMenuData(menuLocalDataItemKey, defaultEnable)
|
|
270
|
+
);
|
|
271
|
+
if (menuOption.isStoreValue) {
|
|
272
|
+
that.setLocalMenuData(menuLocalDataItemKey, !localEnable);
|
|
273
|
+
}
|
|
274
|
+
if (typeof menuOption.callback === "function") {
|
|
275
|
+
menuOption.callback({
|
|
276
|
+
key: menuLocalDataItemKey,
|
|
277
|
+
enable: !localEnable,
|
|
278
|
+
oldEnable: localEnable,
|
|
279
|
+
event: event,
|
|
280
|
+
storeValue(value) {
|
|
281
|
+
that.setLocalMenuData(menuLocalDataItemKey, value);
|
|
282
|
+
},
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
/* 不刷新网页就刷新菜单 */
|
|
286
|
+
if (menuOption.autoReload) {
|
|
287
|
+
UtilsCore.window.location.reload();
|
|
288
|
+
} else {
|
|
289
|
+
that.context.update();
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return {
|
|
294
|
+
showText,
|
|
295
|
+
clickCallBack,
|
|
296
|
+
};
|
|
297
|
+
},
|
|
298
|
+
/**
|
|
299
|
+
* 获取目标菜单配置数据
|
|
300
|
+
* @param menuKey 菜单-键key
|
|
301
|
+
*/
|
|
302
|
+
getMenuData(menuKey: string) {
|
|
303
|
+
return this.$data.data.find((item) => item.data.key === menuKey);
|
|
304
|
+
},
|
|
305
|
+
/**
|
|
306
|
+
* 获取目标菜单配置
|
|
307
|
+
* @param menuKey 菜单-键key
|
|
308
|
+
*/
|
|
309
|
+
getMenuOption(menuKey: string) {
|
|
310
|
+
return this.$data.data.find((item) => item.data.key === menuKey)?.data;
|
|
311
|
+
},
|
|
312
|
+
/**
|
|
313
|
+
* 获取目标菜单处理后的配置
|
|
314
|
+
* @param menuKey 菜单-键key
|
|
315
|
+
*/
|
|
316
|
+
getMenuHandledOption(menuKey: string) {
|
|
317
|
+
return this.$data.data.find((item) => item!.handleData!.key === menuKey)
|
|
318
|
+
?.handleData;
|
|
319
|
+
},
|
|
320
|
+
};
|
|
321
|
+
constructor(details: UtilsGMMenuConstructorOptions) {
|
|
322
|
+
this.GM_Api.getValue = details.GM_getValue;
|
|
323
|
+
this.GM_Api.setValue = details.GM_setValue;
|
|
324
|
+
this.GM_Api.registerMenuCommand = details.GM_registerMenuCommand;
|
|
325
|
+
this.GM_Api.unregisterMenuCommand = details.GM_unregisterMenuCommand;
|
|
326
|
+
this.MenuHandle.$default.autoReload =
|
|
327
|
+
typeof details.autoReload === "boolean" ? details.autoReload : true;
|
|
328
|
+
for (const keyName of Object.keys(this.GM_Api)) {
|
|
329
|
+
if (typeof (this.GM_Api as any)[keyName] !== "function") {
|
|
330
|
+
throw new Error(
|
|
331
|
+
`Utils.GM_Menu 请在脚本开头加上 @grant ${keyName},且传入该对象`
|
|
332
|
+
);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
this.add(details?.data || []);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* 新增菜单数据
|
|
339
|
+
* @param paramData
|
|
340
|
+
*/
|
|
341
|
+
add(paramData: UtilsGMMenuOption[] | UtilsGMMenuOption) {
|
|
342
|
+
if (Array.isArray(paramData)) {
|
|
343
|
+
for (const _paramData of paramData) {
|
|
344
|
+
// @ts-ignore
|
|
345
|
+
this.MenuHandle.$data.data.push({
|
|
346
|
+
data: _paramData,
|
|
347
|
+
id: void 0,
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
} else {
|
|
351
|
+
// @ts-ignore
|
|
352
|
+
this.MenuHandle.$data.data.push({
|
|
353
|
+
data: paramData,
|
|
354
|
+
id: void 0,
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
this.update();
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* 更新菜单数据
|
|
361
|
+
* @param options 数据
|
|
362
|
+
*/
|
|
363
|
+
update(options?: UtilsGMMenuOption[] | UtilsGMMenuOption) {
|
|
364
|
+
let optionsList: UtilsGMMenuOption[] = [];
|
|
365
|
+
if (Array.isArray(options)) {
|
|
366
|
+
optionsList = [...optionsList, ...options];
|
|
367
|
+
} else if (options != null) {
|
|
368
|
+
optionsList = [...optionsList, options];
|
|
369
|
+
}
|
|
370
|
+
optionsList.forEach((item) => {
|
|
371
|
+
let targetMenu = this.MenuHandle.getMenuOption(item.key);
|
|
372
|
+
if (targetMenu) {
|
|
373
|
+
Object.assign(targetMenu, item);
|
|
374
|
+
}
|
|
375
|
+
});
|
|
376
|
+
this.MenuHandle.$data.data.forEach((value) => {
|
|
377
|
+
if (value.handleData) {
|
|
378
|
+
value.handleData.deleteMenu();
|
|
379
|
+
}
|
|
380
|
+
});
|
|
381
|
+
this.MenuHandle.init();
|
|
382
|
+
this.MenuHandle.register(this.MenuHandle.$data.data);
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* 卸载菜单
|
|
386
|
+
* @param menuId 已注册的菜单id
|
|
387
|
+
*/
|
|
388
|
+
delete(menuId: number) {
|
|
389
|
+
this.GM_Api.unregisterMenuCommand(menuId);
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* 根据键值获取enable值
|
|
393
|
+
* @param menuKey 菜单-键key
|
|
394
|
+
*/
|
|
395
|
+
get(menuKey: string): boolean {
|
|
396
|
+
return this.getEnable(menuKey);
|
|
397
|
+
}
|
|
398
|
+
/**
|
|
399
|
+
* 根据键值获取enable值
|
|
400
|
+
* @param menuKey 菜单-键key
|
|
401
|
+
*/
|
|
402
|
+
getEnable(menuKey: string): boolean {
|
|
403
|
+
return this.MenuHandle.getMenuHandledOption(menuKey)!.enable as boolean;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* 根据键值获取text值
|
|
407
|
+
* @param menuKey 菜单-键key
|
|
408
|
+
*/
|
|
409
|
+
getText(menuKey: string): string {
|
|
410
|
+
return this.MenuHandle.getMenuHandledOption(menuKey)!.text;
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* 根据键值获取showText函数的值
|
|
414
|
+
* @param menuKey 菜单-键key
|
|
415
|
+
*/
|
|
416
|
+
getShowTextValue(menuKey: string): string {
|
|
417
|
+
return this.MenuHandle.getMenuHandledOption(menuKey)!.showText(
|
|
418
|
+
this.getText(menuKey),
|
|
419
|
+
this.get(menuKey)
|
|
420
|
+
);
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* 获取当前已注册菜单的id
|
|
424
|
+
* @param menuKey
|
|
425
|
+
*/
|
|
426
|
+
getMenuId(menuKey: string): number | undefined | null {
|
|
427
|
+
let result = null;
|
|
428
|
+
for (let index = 0; index < this.MenuHandle.$data.data.length; index++) {
|
|
429
|
+
const optionData = this.MenuHandle.$data.data[index];
|
|
430
|
+
if (optionData!.handleData!.key === menuKey) {
|
|
431
|
+
result = optionData.id;
|
|
432
|
+
break;
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
return result;
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* 根据键值获取accessKey值
|
|
439
|
+
* @param menuKey 菜单-键key
|
|
440
|
+
*/
|
|
441
|
+
getAccessKey(menuKey: string): string | undefined {
|
|
442
|
+
return this.MenuHandle.getMenuHandledOption(menuKey)?.accessKey;
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* 根据键值获取autoClose值
|
|
446
|
+
* @param menuKey 菜单-键key
|
|
447
|
+
*/
|
|
448
|
+
getAutoClose(menuKey: string): boolean | undefined {
|
|
449
|
+
return this.MenuHandle.getMenuHandledOption(menuKey)?.autoClose;
|
|
450
|
+
}
|
|
451
|
+
/**
|
|
452
|
+
* 根据键值获取autoReload值
|
|
453
|
+
* @param menuKey 菜单-键key
|
|
454
|
+
*/
|
|
455
|
+
getAutoReload(menuKey: string): boolean | undefined {
|
|
456
|
+
return this.MenuHandle.getMenuHandledOption(menuKey)?.autoReload;
|
|
457
|
+
}
|
|
458
|
+
/**
|
|
459
|
+
* 根据键值获取callback函数
|
|
460
|
+
* @param menuKey 菜单-键key
|
|
461
|
+
*/
|
|
462
|
+
getCallBack(menuKey: string): Function | undefined {
|
|
463
|
+
return this.MenuHandle.getMenuHandledOption(menuKey)?.callback;
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* 获取当enable为true时默认显示在菜单中前面的emoji图标
|
|
467
|
+
*/
|
|
468
|
+
getEnableTrueEmoji() {
|
|
469
|
+
return this.MenuHandle.$emoji.success;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* 获取当enable为false时默认显示在菜单中前面的emoji图标
|
|
473
|
+
*/
|
|
474
|
+
getEnableFalseEmoji() {
|
|
475
|
+
return this.MenuHandle.$emoji.error;
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* 获取本地存储的菜单外部的键名
|
|
479
|
+
* @param keyName
|
|
480
|
+
*/
|
|
481
|
+
getLocalStorageKeyName() {
|
|
482
|
+
return this.MenuHandle.$data.key;
|
|
483
|
+
}
|
|
484
|
+
/**
|
|
485
|
+
* 设置菜单的值
|
|
486
|
+
* @param menuKey 菜单-键key
|
|
487
|
+
* @param value 需要设置的值
|
|
488
|
+
*/
|
|
489
|
+
setValue(menuKey: string, value: any) {
|
|
490
|
+
this.MenuHandle.setLocalMenuData(menuKey, value);
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* 设置菜单的值
|
|
494
|
+
* @param menuKey 菜单-键key
|
|
495
|
+
* @param value 需要设置的值
|
|
496
|
+
*/
|
|
497
|
+
setEnable(menuKey: string, value: boolean) {
|
|
498
|
+
this.setValue(menuKey, Boolean(value));
|
|
499
|
+
}
|
|
500
|
+
/**
|
|
501
|
+
* 设置当enable为true时默认显示在菜单中前面的emoji图标
|
|
502
|
+
* @param emojiString
|
|
503
|
+
*/
|
|
504
|
+
setEnableTrueEmoji(emojiString: string) {
|
|
505
|
+
if (typeof emojiString !== "string") {
|
|
506
|
+
throw new Error("参数emojiString必须是string类型");
|
|
507
|
+
}
|
|
508
|
+
this.MenuHandle.$emoji.success = emojiString;
|
|
509
|
+
}
|
|
510
|
+
/**
|
|
511
|
+
* 设置当enable为false时默认显示在菜单中前面的emoji图标
|
|
512
|
+
* @param emojiString
|
|
513
|
+
*/
|
|
514
|
+
setEnableFalseEmoji(emojiString: string) {
|
|
515
|
+
if (typeof emojiString !== "string") {
|
|
516
|
+
throw new Error("参数emojiString必须是string类型");
|
|
517
|
+
}
|
|
518
|
+
this.MenuHandle.$emoji.error = emojiString;
|
|
519
|
+
}
|
|
520
|
+
/**
|
|
521
|
+
* 设置本地存储的菜单外部的键名
|
|
522
|
+
* @param keyName
|
|
523
|
+
*/
|
|
524
|
+
setLocalStorageKeyName(keyName: string) {
|
|
525
|
+
if (typeof keyName !== "string") {
|
|
526
|
+
throw new Error("参数keyName必须是string类型");
|
|
527
|
+
}
|
|
528
|
+
this.MenuHandle.$data.key = keyName;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
export { GMMenu };
|
package/src/VueObject.ts
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import type { AnyObject } from "./Utils";
|
|
2
|
+
|
|
3
|
+
export declare interface Vue2Object extends AnyObject {
|
|
4
|
+
$attrs: AnyObject;
|
|
5
|
+
$children: Vue2Object[];
|
|
6
|
+
$createElement: (...args: any[]) => any;
|
|
7
|
+
$el: HTMLElement;
|
|
8
|
+
$listeners: AnyObject;
|
|
9
|
+
$options: AnyObject;
|
|
10
|
+
$parent: Vue2Object;
|
|
11
|
+
$refs: AnyObject;
|
|
12
|
+
$root: Vue2Object;
|
|
13
|
+
$scopedSlots: AnyObject;
|
|
14
|
+
$slots: AnyObject;
|
|
15
|
+
$store: AnyObject;
|
|
16
|
+
$vnode: AnyObject;
|
|
17
|
+
|
|
18
|
+
_data: AnyObject;
|
|
19
|
+
_directInactive: boolean;
|
|
20
|
+
_events: AnyObject;
|
|
21
|
+
_hasHookEvent: boolean;
|
|
22
|
+
_isBeingDestroyed: boolean;
|
|
23
|
+
_isDestroyed: boolean;
|
|
24
|
+
_isMounted: boolean;
|
|
25
|
+
_isVue: boolean;
|
|
26
|
+
|
|
27
|
+
$data: AnyObject;
|
|
28
|
+
$isServer: boolean;
|
|
29
|
+
$props: AnyObject;
|
|
30
|
+
$route: AnyObject & {
|
|
31
|
+
fullPath: string;
|
|
32
|
+
hash: string;
|
|
33
|
+
matched: AnyObject[];
|
|
34
|
+
meta: AnyObject;
|
|
35
|
+
name: string;
|
|
36
|
+
params: AnyObject;
|
|
37
|
+
path: string;
|
|
38
|
+
query: AnyObject;
|
|
39
|
+
};
|
|
40
|
+
$router: AnyObject & {
|
|
41
|
+
afterHooks: Function[];
|
|
42
|
+
app: Vue2Object;
|
|
43
|
+
apps: Vue2Object[];
|
|
44
|
+
beforeHooks: Function[];
|
|
45
|
+
fallback: boolean;
|
|
46
|
+
history: AnyObject & {
|
|
47
|
+
base: string;
|
|
48
|
+
current: AnyObject;
|
|
49
|
+
listeners: AnyObject[];
|
|
50
|
+
router: Vue2Object["$router"];
|
|
51
|
+
/**
|
|
52
|
+
*
|
|
53
|
+
* @param delta 访问的距离。如果 delta < 0 则后退相应数量的记录,如果 > 0 则前进。
|
|
54
|
+
* @param triggerListeners 是否应该触发连接到该历史的监听器
|
|
55
|
+
* @returns
|
|
56
|
+
*/
|
|
57
|
+
go: (delta: number, triggerListeners?: boolean) => void;
|
|
58
|
+
/**
|
|
59
|
+
*
|
|
60
|
+
* @param to 要设置的地址
|
|
61
|
+
* @param data 可选的 HistoryState 以关联该导航记录
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
push: (to: string, data?: AnyObject) => void;
|
|
65
|
+
/**
|
|
66
|
+
*
|
|
67
|
+
* @param to 要设置的地址
|
|
68
|
+
* @param data 可选的 HistoryState 以关联该导航记录
|
|
69
|
+
* @returns
|
|
70
|
+
*/
|
|
71
|
+
replace: (to: string, data?: AnyObject) => void;
|
|
72
|
+
};
|
|
73
|
+
matcher: AnyObject & {
|
|
74
|
+
addRoute: (...args: any[]) => any;
|
|
75
|
+
addRoutes: (...args: any[]) => any;
|
|
76
|
+
getRoutes: () => any;
|
|
77
|
+
match: (...args: any[]) => any;
|
|
78
|
+
};
|
|
79
|
+
mode: string;
|
|
80
|
+
resolveHooks: ((...args: any[]) => any)[];
|
|
81
|
+
currentRoute: AnyObject;
|
|
82
|
+
beforeEach: (
|
|
83
|
+
callback:
|
|
84
|
+
| ((
|
|
85
|
+
/** 即将要进入的目标 路由对象 */
|
|
86
|
+
to: Vue2Object["$route"],
|
|
87
|
+
/** 当前导航正要离开的路由 */
|
|
88
|
+
from: Vue2Object["$route"],
|
|
89
|
+
/**
|
|
90
|
+
*
|
|
91
|
+
* + next(): 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。
|
|
92
|
+
* + next(false): 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。
|
|
93
|
+
* + next('/') 或者 next({ path: '/' }): 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: true、name: 'home' 之类的选项以及任何用在 router-link 的 to prop 或 router.push 中的选项。
|
|
94
|
+
* + next(error): (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 router.onError() 注册过的回调。
|
|
95
|
+
*/
|
|
96
|
+
next: Function
|
|
97
|
+
) => void)
|
|
98
|
+
/** 移除上一个添加的监听 */
|
|
99
|
+
| (() => void)
|
|
100
|
+
) => void;
|
|
101
|
+
|
|
102
|
+
afterEach: (
|
|
103
|
+
callback:
|
|
104
|
+
| ((
|
|
105
|
+
/** 即将要进入的目标 路由对象 */
|
|
106
|
+
to: Vue2Object["$route"],
|
|
107
|
+
/** 当前导航正要离开的路由 */
|
|
108
|
+
from: Vue2Object["$route"]
|
|
109
|
+
) => void)
|
|
110
|
+
/** 移除上一个添加的监听 */
|
|
111
|
+
| (() => void)
|
|
112
|
+
) => void;
|
|
113
|
+
};
|
|
114
|
+
$ssrContext: AnyObject;
|
|
115
|
+
|
|
116
|
+
$watch: (
|
|
117
|
+
key: string | string[] | (() => any),
|
|
118
|
+
handler: (this: any, newVal: any, oldVal: any) => void,
|
|
119
|
+
options?: {
|
|
120
|
+
immediate?: boolean;
|
|
121
|
+
deep?: boolean;
|
|
122
|
+
}
|
|
123
|
+
) => void;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
export declare interface HTMLVue2DivElement extends HTMLDivElement {
|
|
127
|
+
__vue__: Vue2Object;
|
|
128
|
+
}
|