119 lines
2.4 KiB
JavaScript
119 lines
2.4 KiB
JavaScript
/**
|
|
* vConsole 调试工具管理
|
|
*
|
|
* 使用方式:
|
|
* 1. URL 参数:?vconsole=1 开启,?vconsole=0 关闭
|
|
* 2. localStorage:设置 'vconsole' 为 '1' 开启,'0' 关闭
|
|
* 3. 代码调用:import { showVConsole, hideVConsole, toggleVConsole } from '@/utils/vconsole'
|
|
*/
|
|
|
|
let vConsoleInstance = null;
|
|
|
|
// 检测是否为开发环境(兼容多种方式)
|
|
const isDev = process.env.NODE_ENV !== 'production';
|
|
|
|
/**
|
|
* 获取 vConsole 是否开启
|
|
*/
|
|
export function isVConsoleEnabled() {
|
|
if (!isDev) return false;
|
|
|
|
// 优先从 URL 参数获取
|
|
try {
|
|
const pages = getCurrentPages();
|
|
if (pages.length > 0) {
|
|
const currentPage = pages[pages.length - 1];
|
|
const options = currentPage.$page?.options || currentPage.options || {};
|
|
if (options.vconsole !== undefined) {
|
|
return options.vconsole === '1' || options.vconsole === 'true';
|
|
}
|
|
}
|
|
} catch (e) {
|
|
// ignore
|
|
}
|
|
|
|
// 其次从 localStorage 获取
|
|
try {
|
|
return uni.getStorageSync('vconsole') === '1';
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 开启 vConsole
|
|
*/
|
|
export function showVConsole() {
|
|
if (vConsoleInstance) return;
|
|
|
|
// 动态加载 vConsole
|
|
import('vconsole').then((module) => {
|
|
const VConsole = module.default || module;
|
|
vConsoleInstance = new VConsole({
|
|
theme: 'dark',
|
|
disableLogScrolling: false,
|
|
buttonSize: 48,
|
|
});
|
|
|
|
// 增强 vConsole 按钮样式,确保不被遮挡
|
|
setTimeout(() => {
|
|
const btn = document.querySelector('#__vconsole');
|
|
if (btn) {
|
|
btn.style.zIndex = '999999';
|
|
btn.style.position = 'fixed';
|
|
btn.style.bottom = '80px';
|
|
btn.style.right = '10px';
|
|
}
|
|
}, 500);
|
|
|
|
uni.setStorageSync('vconsole', '1');
|
|
}).catch((err) => {
|
|
console.error('[vConsole] 加载失败:', err);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* 关闭 vConsole
|
|
*/
|
|
export function hideVConsole() {
|
|
if (vConsoleInstance) {
|
|
vConsoleInstance.destroy();
|
|
vConsoleInstance = null;
|
|
}
|
|
try {
|
|
uni.setStorageSync('vconsole', '0');
|
|
} catch (e) {
|
|
// ignore
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 切换 vConsole 状态
|
|
*/
|
|
export function toggleVConsole() {
|
|
if (vConsoleInstance) {
|
|
hideVConsole();
|
|
} else {
|
|
showVConsole();
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 根据配置初始化 vConsole
|
|
*/
|
|
export function initVConsole() {
|
|
if (!isDev) return;
|
|
|
|
if (isVConsoleEnabled()) {
|
|
showVConsole();
|
|
}
|
|
}
|
|
|
|
export default {
|
|
isVConsoleEnabled,
|
|
showVConsole,
|
|
hideVConsole,
|
|
toggleVConsole,
|
|
initVConsole,
|
|
};
|