727 lines
27 KiB
JavaScript
727 lines
27 KiB
JavaScript
if (typeof Promise !== "undefined" && !Promise.prototype.finally) {
|
||
Promise.prototype.finally = function(callback) {
|
||
const promise = this.constructor;
|
||
return this.then(
|
||
(value) => promise.resolve(callback()).then(() => value),
|
||
(reason) => promise.resolve(callback()).then(() => {
|
||
throw reason;
|
||
})
|
||
);
|
||
};
|
||
}
|
||
;
|
||
if (typeof uni !== "undefined" && uni && uni.requireGlobal) {
|
||
const global = uni.requireGlobal();
|
||
ArrayBuffer = global.ArrayBuffer;
|
||
Int8Array = global.Int8Array;
|
||
Uint8Array = global.Uint8Array;
|
||
Uint8ClampedArray = global.Uint8ClampedArray;
|
||
Int16Array = global.Int16Array;
|
||
Uint16Array = global.Uint16Array;
|
||
Int32Array = global.Int32Array;
|
||
Uint32Array = global.Uint32Array;
|
||
Float32Array = global.Float32Array;
|
||
Float64Array = global.Float64Array;
|
||
BigInt64Array = global.BigInt64Array;
|
||
BigUint64Array = global.BigUint64Array;
|
||
}
|
||
;
|
||
if (uni.restoreGlobal) {
|
||
uni.restoreGlobal(Vue, weex, plus, setTimeout, clearTimeout, setInterval, clearInterval);
|
||
}
|
||
(function(vue) {
|
||
"use strict";
|
||
function formatAppLog(type, filename, ...args) {
|
||
if (uni.__log__) {
|
||
uni.__log__(type, filename, ...args);
|
||
} else {
|
||
console[type].apply(console, [...args, filename]);
|
||
}
|
||
}
|
||
const config = {
|
||
// 目标网站配置
|
||
webConfig: {
|
||
// 主要目标网站URL(请替换为您的实际网站)
|
||
mainUrl: "https://kr-op.quwanzhi.com",
|
||
// // 备用网站URL(如果主网站无法访问)
|
||
fallbackUrl: "https://kr-op.quwanzhi.com",
|
||
// 测试页面URL(用于开发测试)
|
||
testUrl: "https://kr-op.quwanzhi.com",
|
||
// testUrl: "http://localhost:3000/test/postMessage",
|
||
// 是否启用HTTPS强制跳转
|
||
forceHttps: false,
|
||
// 是否允许跨域请求
|
||
allowCrossOrigin: true
|
||
},
|
||
// 应用配置
|
||
appConfig: {
|
||
// 应用名称
|
||
appName: "存客宝",
|
||
// 应用版本
|
||
version: "1.0.0",
|
||
// 是否启用超时检测
|
||
enableTimeout: false,
|
||
// 设为 false 禁用超时检测
|
||
// 加载超时时间(毫秒)- 设为0禁用超时检测
|
||
loadingTimeout: 3e4,
|
||
// 增加到30秒
|
||
// 是否启用调试模式
|
||
debug: true,
|
||
// 开发时设为 true,生产时设为 false
|
||
// 是否使用测试页面
|
||
useTestPage: true
|
||
// 开发时设为 true,生产时设为 false
|
||
},
|
||
// 通信配置
|
||
communication: {
|
||
// 消息类型定义
|
||
messageTypes: {
|
||
GET_USER_INFO: "getUserInfo",
|
||
GET_DEVICE_INFO: "getDeviceInfo",
|
||
NAVIGATE: "navigate",
|
||
SHARE: "share",
|
||
PAYMENT: "payment",
|
||
TOAST: "toast",
|
||
ALERT: "alert",
|
||
CONFIRM: "confirm"
|
||
},
|
||
// 允许的域名白名单
|
||
allowedDomains: ["kr-op.quwanzhi.com", "quwanzhi.com", "localhost"]
|
||
},
|
||
// 用户配置
|
||
userConfig: {
|
||
// 默认用户信息
|
||
defaultUser: {
|
||
id: "user123",
|
||
name: "测试用户",
|
||
avatar: "https://example.com/avatar.jpg",
|
||
phone: "13800138000",
|
||
email: "test@example.com"
|
||
}
|
||
}
|
||
};
|
||
const _export_sfc = (sfc, props) => {
|
||
const target = sfc.__vccOpts || sfc;
|
||
for (const [key, val] of props) {
|
||
target[key] = val;
|
||
}
|
||
return target;
|
||
};
|
||
const _sfc_main$1 = {
|
||
data() {
|
||
return {
|
||
config,
|
||
currentUrl: "",
|
||
// 初始化为空字符串
|
||
loading: false,
|
||
error: "",
|
||
loadingTimer: null,
|
||
messageQueue: []
|
||
};
|
||
},
|
||
onLoad() {
|
||
this.initApp();
|
||
},
|
||
onShow() {
|
||
this.resumeMessageQueue();
|
||
},
|
||
onHide() {
|
||
formatAppLog("log", "at pages/index/index.vue:51", "WebView页面隐藏");
|
||
},
|
||
onUnload() {
|
||
this.cleanup();
|
||
},
|
||
methods: {
|
||
// 获取初始URL
|
||
getInitialUrl() {
|
||
formatAppLog("log", "at pages/index/index.vue:60", "获取初始URL,config:", this.config);
|
||
if (this.config && this.config.appConfig && this.config.appConfig.useTestPage) {
|
||
return this.config.webConfig.testUrl;
|
||
}
|
||
return this.config.webConfig.mainUrl;
|
||
},
|
||
// 初始化应用
|
||
initApp() {
|
||
formatAppLog("log", "at pages/index/index.vue:69", "UniApp: 开始初始化应用");
|
||
this.currentUrl = this.getInitialUrl();
|
||
formatAppLog("log", "at pages/index/index.vue:72", "UniApp: 设置URL:", this.currentUrl);
|
||
this.setupLoadingTimeout();
|
||
this.initMessageHandler();
|
||
formatAppLog("log", "at pages/index/index.vue:78", "UniApp: 立即注入桥接代码");
|
||
this.injectBridgeCode();
|
||
},
|
||
// 设置加载超时
|
||
setupLoadingTimeout() {
|
||
if (this.loadingTimer) {
|
||
clearTimeout(this.loadingTimer);
|
||
}
|
||
if (!this.config.appConfig.enableTimeout) {
|
||
formatAppLog("log", "at pages/index/index.vue:91", "超时检测已禁用");
|
||
return;
|
||
}
|
||
if (this.config.appConfig.loadingTimeout > 0) {
|
||
formatAppLog("log", "at pages/index/index.vue:96", "设置加载超时:", this.config.appConfig.loadingTimeout + "ms");
|
||
this.loadingTimer = setTimeout(() => {
|
||
if (this.loading) {
|
||
formatAppLog("warn", "at pages/index/index.vue:99", "页面加载超时,当前状态:", this.loading);
|
||
this.handleTimeout();
|
||
}
|
||
}, this.config.appConfig.loadingTimeout);
|
||
}
|
||
},
|
||
// 处理加载超时
|
||
handleTimeout() {
|
||
formatAppLog("warn", "at pages/index/index.vue:108", "触发页面加载超时处理");
|
||
this.error = "页面加载超时,请检查网络连接";
|
||
this.loading = false;
|
||
if (this.loadingTimer) {
|
||
clearTimeout(this.loadingTimer);
|
||
this.loadingTimer = null;
|
||
}
|
||
},
|
||
// 初始化消息处理器
|
||
initMessageHandler() {
|
||
formatAppLog("log", "at pages/index/index.vue:120", "UniApp: 初始化消息处理器");
|
||
window.addEventListener("message", (event) => {
|
||
formatAppLog("log", "at pages/index/index.vue:123", "UniApp: 收到window.message事件:", event.data);
|
||
this.handleIframeMessage(event);
|
||
});
|
||
},
|
||
// 设置WebView桥接
|
||
setupWebViewBridge() {
|
||
this.injectBridgeCode();
|
||
},
|
||
// 注入桥接代码
|
||
injectBridgeCode() {
|
||
formatAppLog("log", "at pages/index/index.vue:136", "UniApp: 开始注入桥接代码");
|
||
const bridgeCode = `
|
||
// UniApp WebView 桥接代码
|
||
__f__('log','at pages/index/index.vue:140','开始注入UniApp桥接代码...');
|
||
|
||
// 检查是否已经存在桥接
|
||
if (window.uniAppBridge) {
|
||
__f__('log','at pages/index/index.vue:144','UniApp桥接已存在,跳过注入');
|
||
return;
|
||
}
|
||
|
||
window.uniAppBridge = {
|
||
// 发送消息到UniApp
|
||
postMessage: function(type, data) {
|
||
__f__('log','at pages/index/index.vue:151','UniApp桥接发送消息:', type, data);
|
||
window.parent.postMessage({
|
||
type: type,
|
||
data: data,
|
||
timestamp: Date.now()
|
||
}, '*');
|
||
},
|
||
|
||
// 获取用户信息
|
||
getUserInfo: function() {
|
||
__f__('log','at pages/index/index.vue:161','UniApp桥接: 请求用户信息');
|
||
this.postMessage('getUserInfo', {});
|
||
},
|
||
|
||
// 获取设备信息
|
||
getDeviceInfo: function() {
|
||
__f__('log','at pages/index/index.vue:167','UniApp桥接: 请求设备信息');
|
||
this.postMessage('getDeviceInfo', {});
|
||
},
|
||
|
||
// 显示Toast
|
||
showToast: function(message, duration = 2000) {
|
||
__f__('log','at pages/index/index.vue:173','UniApp桥接: 显示Toast', message, duration);
|
||
this.postMessage('toast', { message, duration });
|
||
},
|
||
|
||
// 显示Alert
|
||
showAlert: function(title, content) {
|
||
__f__('log','at pages/index/index.vue:179','UniApp桥接: 显示Alert', title, content);
|
||
this.postMessage('alert', { title, content });
|
||
},
|
||
|
||
// 显示Confirm
|
||
showConfirm: function(title, content) {
|
||
__f__('log','at pages/index/index.vue:185','UniApp桥接: 显示Confirm', title, content);
|
||
this.postMessage('confirm', { title, content });
|
||
},
|
||
|
||
// 分享
|
||
share: function(data) {
|
||
__f__('log','at pages/index/index.vue:191','UniApp桥接: 分享', data);
|
||
this.postMessage('share', data);
|
||
},
|
||
|
||
// 支付
|
||
payment: function(data) {
|
||
__f__('log','at pages/index/index.vue:197','UniApp桥接: 支付', data);
|
||
this.postMessage('payment', data);
|
||
},
|
||
|
||
// 页面导航
|
||
navigate: function(url) {
|
||
__f__('log','at pages/index/index.vue:203','UniApp桥接: 导航', url);
|
||
this.postMessage('navigate', { url });
|
||
},
|
||
|
||
// 自定义消息
|
||
sendCustomMessage: function(type, data) {
|
||
__f__('log','at pages/index/index.vue:209','UniApp桥接: 自定义消息', type, data);
|
||
this.postMessage(type, data);
|
||
},
|
||
|
||
// 页面准备就绪
|
||
notifyPageReady: function(data) {
|
||
__f__('log','at pages/index/index.vue:215','UniApp桥接: 页面准备就绪', data);
|
||
this.postMessage('pageReady', data);
|
||
}
|
||
};
|
||
|
||
// 监听来自UniApp的消息
|
||
window.addEventListener('message', function(event) {
|
||
__f__('log','at pages/index/index.vue:222','UniApp桥接收到消息:', event.data);
|
||
if (event.data && event.data.type) {
|
||
// 触发自定义事件
|
||
const customEvent = new CustomEvent('uniAppMessage', {
|
||
detail: event.data
|
||
});
|
||
window.dispatchEvent(customEvent);
|
||
}
|
||
});
|
||
|
||
__f__('log','at pages/index/index.vue:232','UniApp桥接代码注入成功');
|
||
|
||
// 通知UniApp页面已加载完成
|
||
window.parent.postMessage({
|
||
type: 'pageLoaded',
|
||
data: { url: window.location.href },
|
||
timestamp: Date.now()
|
||
}, '*');
|
||
`;
|
||
formatAppLog("log", "at pages/index/index.vue:243", "UniApp: 立即注入桥接代码");
|
||
this.evalJS(bridgeCode);
|
||
setTimeout(() => {
|
||
formatAppLog("log", "at pages/index/index.vue:248", "UniApp: 延迟500ms后再次注入");
|
||
this.evalJS(bridgeCode);
|
||
}, 500);
|
||
setTimeout(() => {
|
||
formatAppLog("log", "at pages/index/index.vue:254", "UniApp: 延迟1000ms后备用注入");
|
||
this.evalJS(bridgeCode);
|
||
}, 1e3);
|
||
},
|
||
// 执行JavaScript代码
|
||
evalJS(code) {
|
||
formatAppLog("log", "at pages/index/index.vue:261", "UniApp: 执行JavaScript代码");
|
||
formatAppLog("log", "at pages/index/index.vue:262", "UniApp: 当前平台:", uni.getSystemInfoSync().platform);
|
||
const webview = this.$refs.webview;
|
||
formatAppLog("log", "at pages/index/index.vue:265", "UniApp: webview引用:", webview);
|
||
if (webview && webview.evalJS) {
|
||
try {
|
||
webview.evalJS(code);
|
||
formatAppLog("log", "at pages/index/index.vue:272", "UniApp: JavaScript代码执行成功 (App环境)");
|
||
} catch (error) {
|
||
formatAppLog("error", "at pages/index/index.vue:274", "UniApp: JavaScript代码执行失败:", error);
|
||
}
|
||
} else {
|
||
formatAppLog("warn", "at pages/index/index.vue:277", "UniApp: webview或evalJS方法不存在 (App环境)");
|
||
this.tryAlternativeInjection(code);
|
||
}
|
||
},
|
||
// 备用注入方案
|
||
tryAlternativeInjection(code) {
|
||
formatAppLog("log", "at pages/index/index.vue:296", "UniApp: 尝试备用注入方案");
|
||
try {
|
||
window.postMessage({
|
||
type: "injectCode",
|
||
data: { code },
|
||
timestamp: Date.now()
|
||
}, "*");
|
||
formatAppLog("log", "at pages/index/index.vue:304", "UniApp: 备用方案1执行成功");
|
||
} catch (error) {
|
||
formatAppLog("error", "at pages/index/index.vue:306", "UniApp: 备用方案1失败:", error);
|
||
try {
|
||
const webview = this.$refs.webview;
|
||
if (webview && webview.postMessage) {
|
||
webview.postMessage({
|
||
type: "injectCode",
|
||
data: { code }
|
||
});
|
||
formatAppLog("log", "at pages/index/index.vue:316", "UniApp: 备用方案2执行成功");
|
||
} else {
|
||
formatAppLog("error", "at pages/index/index.vue:318", "UniApp: 备用方案2失败 - webview.postMessage不存在");
|
||
}
|
||
} catch (error2) {
|
||
formatAppLog("error", "at pages/index/index.vue:321", "UniApp: 备用方案2失败:", error2);
|
||
}
|
||
}
|
||
},
|
||
// 处理web-view组件的消息
|
||
handleMessage(event) {
|
||
formatAppLog("log", "at pages/index/index.vue:328", "收到web-view消息:", event.detail);
|
||
try {
|
||
const data = event.detail.data;
|
||
if (data && data.type) {
|
||
this.processMessage(data);
|
||
}
|
||
} catch (error) {
|
||
formatAppLog("error", "at pages/index/index.vue:335", "处理消息失败:", error);
|
||
}
|
||
},
|
||
// 处理iframe消息
|
||
handleIframeMessage(event) {
|
||
formatAppLog("log", "at pages/index/index.vue:341", "收到iframe消息:", event.data);
|
||
try {
|
||
if (event.data && event.data.type) {
|
||
if (event.data.type === "pageLoaded") {
|
||
formatAppLog("log", "at pages/index/index.vue:346", "收到页面加载完成消息:", event.data.data);
|
||
if (this.loadingTimer) {
|
||
clearTimeout(this.loadingTimer);
|
||
this.loadingTimer = null;
|
||
}
|
||
this.loading = false;
|
||
this.processMessageQueue();
|
||
return;
|
||
}
|
||
this.processMessage(event.data);
|
||
}
|
||
} catch (error) {
|
||
formatAppLog("error", "at pages/index/index.vue:361", "处理iframe消息失败:", error);
|
||
}
|
||
},
|
||
// 处理消息
|
||
processMessage(data) {
|
||
formatAppLog("log", "at pages/index/index.vue:367", "UniApp处理消息:", data.type, data);
|
||
switch (data.type) {
|
||
case this.config.communication.messageTypes.GET_USER_INFO:
|
||
formatAppLog("log", "at pages/index/index.vue:371", "UniApp: 处理获取用户信息请求");
|
||
this.sendUserInfo();
|
||
break;
|
||
case this.config.communication.messageTypes.GET_DEVICE_INFO:
|
||
formatAppLog("log", "at pages/index/index.vue:375", "UniApp: 处理获取设备信息请求");
|
||
this.sendDeviceInfo();
|
||
break;
|
||
case this.config.communication.messageTypes.NAVIGATE:
|
||
formatAppLog("log", "at pages/index/index.vue:379", "UniApp: 处理导航请求");
|
||
this.handleNavigation(data);
|
||
break;
|
||
case this.config.communication.messageTypes.SHARE:
|
||
formatAppLog("log", "at pages/index/index.vue:383", "UniApp: 处理分享请求");
|
||
this.handleShare(data);
|
||
break;
|
||
case this.config.communication.messageTypes.PAYMENT:
|
||
formatAppLog("log", "at pages/index/index.vue:387", "UniApp: 处理支付请求");
|
||
this.handlePayment(data);
|
||
break;
|
||
case this.config.communication.messageTypes.TOAST:
|
||
formatAppLog("log", "at pages/index/index.vue:391", "UniApp: 处理Toast请求");
|
||
this.handleToast(data);
|
||
break;
|
||
case this.config.communication.messageTypes.ALERT:
|
||
formatAppLog("log", "at pages/index/index.vue:395", "UniApp: 处理Alert请求");
|
||
this.handleAlert(data);
|
||
break;
|
||
case this.config.communication.messageTypes.CONFIRM:
|
||
formatAppLog("log", "at pages/index/index.vue:399", "UniApp: 处理Confirm请求");
|
||
this.handleConfirm(data);
|
||
break;
|
||
case "pageReady":
|
||
formatAppLog("log", "at pages/index/index.vue:403", "UniApp: 处理页面准备就绪消息");
|
||
break;
|
||
default:
|
||
formatAppLog("log", "at pages/index/index.vue:407", "UniApp: 未知消息类型:", data.type);
|
||
}
|
||
},
|
||
// 发送用户信息到iframe
|
||
sendUserInfo() {
|
||
formatAppLog("log", "at pages/index/index.vue:413", "UniApp: 发送用户信息");
|
||
const userInfo = {
|
||
type: "userInfo",
|
||
data: this.config.userConfig.defaultUser
|
||
};
|
||
this.sendMessageToIframe(userInfo);
|
||
},
|
||
// 发送设备信息到iframe
|
||
sendDeviceInfo() {
|
||
formatAppLog("log", "at pages/index/index.vue:423", "UniApp: 发送设备信息");
|
||
const systemInfo = uni.getSystemInfoSync();
|
||
const deviceInfo = {
|
||
type: "deviceInfo",
|
||
data: {
|
||
platform: systemInfo.platform,
|
||
model: systemInfo.model,
|
||
version: systemInfo.version,
|
||
appVersion: this.config.appConfig.version,
|
||
appName: this.config.appConfig.appName,
|
||
screenWidth: systemInfo.screenWidth,
|
||
screenHeight: systemInfo.screenHeight,
|
||
statusBarHeight: systemInfo.statusBarHeight
|
||
}
|
||
};
|
||
this.sendMessageToIframe(deviceInfo);
|
||
},
|
||
// 处理导航
|
||
handleNavigation(data) {
|
||
if (data.url) {
|
||
formatAppLog("log", "at pages/index/index.vue:444", "导航到:", data.url);
|
||
}
|
||
},
|
||
// 处理分享
|
||
handleShare(data) {
|
||
formatAppLog("log", "at pages/index/index.vue:451", "UniApp: 处理分享请求", data);
|
||
uni.share({
|
||
provider: "weixin",
|
||
scene: "WXSceneSession",
|
||
type: 0,
|
||
href: data.url || this.currentUrl,
|
||
title: data.title || this.config.appConfig.appName,
|
||
summary: data.summary || "分享内容",
|
||
success: (res) => {
|
||
formatAppLog("log", "at pages/index/index.vue:460", "UniApp: 分享成功:", res);
|
||
this.sendToIframe("shareResult", { success: true });
|
||
},
|
||
fail: (err) => {
|
||
formatAppLog("error", "at pages/index/index.vue:464", "UniApp: 分享失败:", err);
|
||
this.sendToIframe("shareResult", { success: false, error: err });
|
||
}
|
||
});
|
||
},
|
||
// 处理支付
|
||
handlePayment(data) {
|
||
formatAppLog("log", "at pages/index/index.vue:472", "UniApp: 处理支付请求", data);
|
||
setTimeout(() => {
|
||
this.sendToIframe("paymentResult", {
|
||
success: true,
|
||
orderId: data.orderId || "order123"
|
||
});
|
||
}, 1e3);
|
||
},
|
||
// 处理Toast
|
||
handleToast(data) {
|
||
formatAppLog("log", "at pages/index/index.vue:485", "UniApp: 处理Toast请求", data);
|
||
uni.showToast({
|
||
title: data.message,
|
||
icon: "none",
|
||
duration: data.duration || 2e3
|
||
});
|
||
},
|
||
// 处理Alert
|
||
handleAlert(data) {
|
||
formatAppLog("log", "at pages/index/index.vue:495", "UniApp: 处理Alert请求", data);
|
||
uni.showModal({
|
||
title: data.title || "提示",
|
||
content: data.content,
|
||
showCancel: false
|
||
});
|
||
},
|
||
// 处理Confirm
|
||
handleConfirm(data) {
|
||
formatAppLog("log", "at pages/index/index.vue:505", "UniApp: 处理Confirm请求", data);
|
||
uni.showModal({
|
||
title: data.title || "确认",
|
||
content: data.content,
|
||
success: (res) => {
|
||
formatAppLog("log", "at pages/index/index.vue:510", "UniApp: Confirm结果:", res);
|
||
this.sendToIframe("confirmResult", {
|
||
confirmed: res.confirm
|
||
});
|
||
}
|
||
});
|
||
},
|
||
// 发送消息到iframe
|
||
sendMessageToIframe(message) {
|
||
this.messageQueue.push(message);
|
||
this.processMessageQueue();
|
||
},
|
||
// 处理消息队列
|
||
processMessageQueue() {
|
||
formatAppLog("log", "at pages/index/index.vue:526", "UniApp: 处理消息队列, 队列长度:", this.messageQueue.length, "加载状态:", this.loading);
|
||
if (this.messageQueue.length > 0 && !this.loading) {
|
||
const message = this.messageQueue.shift();
|
||
formatAppLog("log", "at pages/index/index.vue:529", "UniApp: 发送消息到iframe:", message);
|
||
this.evalJS(`
|
||
window.postMessage(${JSON.stringify(message)}, '*');
|
||
`);
|
||
}
|
||
},
|
||
// 恢复消息队列处理
|
||
resumeMessageQueue() {
|
||
this.processMessageQueue();
|
||
},
|
||
// 向iframe发送消息的通用方法
|
||
sendToIframe(type, data) {
|
||
const message = {
|
||
type,
|
||
data,
|
||
timestamp: Date.now()
|
||
};
|
||
this.sendMessageToIframe(message);
|
||
},
|
||
// 处理加载状态
|
||
handleLoading(event) {
|
||
formatAppLog("log", "at pages/index/index.vue:553", "WebView加载状态变化:", event.detail);
|
||
const newLoadingState = event.detail.loading;
|
||
formatAppLog("log", "at pages/index/index.vue:555", "加载状态从", this.loading, "变为", newLoadingState);
|
||
this.loading = newLoadingState;
|
||
if (!this.loading) {
|
||
formatAppLog("log", "at pages/index/index.vue:561", "页面加载完成,清除超时定时器");
|
||
if (this.loadingTimer) {
|
||
clearTimeout(this.loadingTimer);
|
||
this.loadingTimer = null;
|
||
}
|
||
this.injectBridgeCode();
|
||
this.processMessageQueue();
|
||
} else {
|
||
formatAppLog("log", "at pages/index/index.vue:573", "页面开始加载,设置超时检测");
|
||
this.setupLoadingTimeout();
|
||
}
|
||
},
|
||
// 处理错误
|
||
handleError(event) {
|
||
formatAppLog("error", "at pages/index/index.vue:580", "WebView错误:", event.detail);
|
||
this.error = "页面加载失败,请检查网络连接";
|
||
this.loading = false;
|
||
clearTimeout(this.loadingTimer);
|
||
},
|
||
// 重新加载页面
|
||
reloadPage() {
|
||
this.error = "";
|
||
this.loading = true;
|
||
this.setupLoadingTimeout();
|
||
const webview = this.$refs.webview;
|
||
if (webview) {
|
||
webview.reload();
|
||
}
|
||
},
|
||
// 切换到备用地址
|
||
switchToFallback() {
|
||
this.currentUrl = this.config.webConfig.fallbackUrl;
|
||
this.reloadPage();
|
||
},
|
||
// 清除超时
|
||
clearTimeout() {
|
||
formatAppLog("log", "at pages/index/index.vue:606", "手动清除超时");
|
||
if (this.loadingTimer) {
|
||
clearTimeout(this.loadingTimer);
|
||
this.loadingTimer = null;
|
||
}
|
||
this.error = "";
|
||
this.loading = false;
|
||
formatAppLog("log", "at pages/index/index.vue:613", "超时已清除");
|
||
},
|
||
// 动态设置web-view高度
|
||
setWebViewHeight(height) {
|
||
formatAppLog("log", "at pages/index/index.vue:618", "设置web-view高度:", height);
|
||
if (this.$refs.webview) {
|
||
this.$refs.webview.$el.style.height = height + "px";
|
||
this.$refs.webview.$el.className = "webview custom-height";
|
||
this.$nextTick(() => {
|
||
this.$refs.webview.$el.style.setProperty("height", height + "px", "important");
|
||
});
|
||
}
|
||
},
|
||
// 设置web-view为全屏
|
||
setWebViewFullscreen() {
|
||
const fullHeight = uni.getSystemInfoSync().windowHeight;
|
||
formatAppLog("log", "at pages/index/index.vue:636", "设置web-view全屏,高度:", fullHeight);
|
||
this.setWebViewHeight(fullHeight);
|
||
},
|
||
// 设置web-view为部分高度
|
||
setWebViewPartialHeight(percentage = 0.8) {
|
||
const windowHeight = uni.getSystemInfoSync().windowHeight;
|
||
const partialHeight = windowHeight * percentage;
|
||
formatAppLog("log", "at pages/index/index.vue:644", "设置web-view部分高度:", partialHeight, "百分比:", percentage);
|
||
this.setWebViewHeight(partialHeight);
|
||
},
|
||
// 清理资源
|
||
cleanup() {
|
||
if (this.loadingTimer) {
|
||
clearTimeout(this.loadingTimer);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
|
||
return vue.openBlock(), vue.createElementBlock("view", { class: "container" }, [
|
||
vue.createCommentVNode(" 全屏web-view容器 "),
|
||
vue.createElementVNode("web-view", {
|
||
src: $data.currentUrl,
|
||
class: "webview",
|
||
ref: "webview",
|
||
onMessage: _cache[0] || (_cache[0] = (...args) => $options.handleMessage && $options.handleMessage(...args)),
|
||
onError: _cache[1] || (_cache[1] = (...args) => $options.handleError && $options.handleError(...args)),
|
||
onLoading: _cache[2] || (_cache[2] = (...args) => $options.handleLoading && $options.handleLoading(...args))
|
||
}, null, 40, ["src"]),
|
||
vue.createCommentVNode(" 加载状态 "),
|
||
$data.loading ? (vue.openBlock(), vue.createElementBlock("view", {
|
||
key: 0,
|
||
class: "loading-container"
|
||
}, [
|
||
vue.createElementVNode("view", { class: "loading-spinner" }),
|
||
vue.createElementVNode("text", { class: "loading-text" }, "加载中...")
|
||
])) : vue.createCommentVNode("v-if", true),
|
||
vue.createCommentVNode(" 错误状态 "),
|
||
$data.error ? (vue.openBlock(), vue.createElementBlock("view", {
|
||
key: 1,
|
||
class: "error-container"
|
||
}, [
|
||
vue.createElementVNode(
|
||
"text",
|
||
{ class: "error-text" },
|
||
vue.toDisplayString($data.error),
|
||
1
|
||
/* TEXT */
|
||
),
|
||
vue.createElementVNode("button", {
|
||
onClick: _cache[3] || (_cache[3] = (...args) => $options.reloadPage && $options.reloadPage(...args)),
|
||
class: "reload-btn"
|
||
}, "重新加载"),
|
||
vue.createElementVNode("button", {
|
||
onClick: _cache[4] || (_cache[4] = (...args) => $options.switchToFallback && $options.switchToFallback(...args)),
|
||
class: "fallback-btn"
|
||
}, "使用备用地址"),
|
||
vue.createElementVNode("button", {
|
||
onClick: _cache[5] || (_cache[5] = (...args) => $options.clearTimeout && $options.clearTimeout(...args)),
|
||
class: "clear-btn"
|
||
}, "清除超时")
|
||
])) : vue.createCommentVNode("v-if", true),
|
||
vue.createCommentVNode(" 调试信息(仅在调试模式下显示) "),
|
||
$data.config.appConfig.debug ? (vue.openBlock(), vue.createElementBlock("view", {
|
||
key: 2,
|
||
class: "debug-info"
|
||
}, [
|
||
vue.createElementVNode(
|
||
"text",
|
||
null,
|
||
"当前URL: " + vue.toDisplayString($data.currentUrl),
|
||
1
|
||
/* TEXT */
|
||
),
|
||
vue.createElementVNode(
|
||
"text",
|
||
null,
|
||
"加载状态: " + vue.toDisplayString($data.loading ? "加载中" : "已加载"),
|
||
1
|
||
/* TEXT */
|
||
)
|
||
])) : vue.createCommentVNode("v-if", true)
|
||
]);
|
||
}
|
||
const PagesIndexIndex = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "E:/Cunkebao/Cunkebao01/Appbuild/pages/index/index.vue"]]);
|
||
__definePage("pages/index/index", PagesIndexIndex);
|
||
const _sfc_main = {};
|
||
const App = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "E:/Cunkebao/Cunkebao01/Appbuild/App.vue"]]);
|
||
function createApp() {
|
||
const app = vue.createVueApp(App);
|
||
return {
|
||
app
|
||
};
|
||
}
|
||
const { app: __app__, Vuex: __Vuex__, Pinia: __Pinia__ } = createApp();
|
||
uni.Vuex = __Vuex__;
|
||
uni.Pinia = __Pinia__;
|
||
__app__.provide("__globalStyles", __uniConfig.styles);
|
||
__app__._component.mpType = "app";
|
||
__app__._component.render = () => {
|
||
};
|
||
__app__.mount("#app");
|
||
})(Vue);
|