195 lines
4.4 KiB
JavaScript
195 lines
4.4 KiB
JavaScript
|
|
var iframeId = new URLSearchParams(window.location.search).get('id')||Math.random().toString(16).substring(4)
|
|
|
|
// 等待初始化完毕
|
|
document.addEventListener('UniAppJSBridgeReady', function(){
|
|
window.parent.postMessage({
|
|
action: 'onJSBridgeReady',
|
|
data: '',
|
|
iframeId: iframeId
|
|
}, '*');
|
|
uni.postMessage({
|
|
data: {
|
|
action: 'onJSBridgeReady'
|
|
}
|
|
})
|
|
})
|
|
// window.addEventListener('message', function(event) {
|
|
|
|
// // 根据消息内容执行相应的操作或调用函数
|
|
// if (typeof event.data === 'object' && event.data.action === 'callFunctionInIframe') {
|
|
// var data = event.data.data;
|
|
// myFunctionInIframe(data);
|
|
// }
|
|
// });
|
|
|
|
|
|
var qr = null
|
|
// 绘制二维码。
|
|
//https://github.com/soldair/node-qrcode?tab=readme-ov-file#createtext-options
|
|
function createQrcode(size, foreground, background, text, logo, logoSize, padding) {
|
|
// let width = window.frameElement.offsetWidth
|
|
// let height = window.frameElement.offsetHeight
|
|
var canvas = document.getElementById("qrcode")
|
|
// canvas.width=width
|
|
// canvas.height=height
|
|
// canvas.style.width=width+'px'
|
|
// canvas.style.height=height+'px'
|
|
canvas.style.display = "block"
|
|
let ctx = canvas.getContext("2d");
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
document.body.style.overflow = "hidden"
|
|
document.body.style.height = "100%"
|
|
size = size || 128;
|
|
padding = padding || 2
|
|
QRCode.toCanvas(canvas, text || 'xui', {
|
|
element: canvas,
|
|
width: size,
|
|
errorCorrectionLevel: 'H',
|
|
margin: padding,
|
|
color: {
|
|
dark: foreground || "black",
|
|
light: background || "white"
|
|
}
|
|
})
|
|
if (logo) {
|
|
let ctx = canvas.getContext("2d");
|
|
let img = new Image();
|
|
logoSize = logoSize || 50
|
|
img.width = logoSize + "px"
|
|
img.height = logoSize + "px"
|
|
img.src = logo
|
|
img.onload = function() {
|
|
let x = (size - logoSize) / 2
|
|
let y = x;
|
|
ctx.drawImage(img, x, y, logoSize, logoSize)
|
|
}
|
|
}
|
|
|
|
}
|
|
//获取二维码图片。
|
|
function QrcodeToDateUrl() {
|
|
if (qr) {
|
|
let imgdata = qr.toDataURL();
|
|
uni.postMessage({
|
|
data: {
|
|
action: 'img',
|
|
url: imgdata
|
|
}
|
|
})
|
|
} else {
|
|
uni.postMessage({
|
|
data: {
|
|
action: 'error',
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
|
|
var ect = null;
|
|
|
|
function getchart() {
|
|
if (ect) return ect;
|
|
let dom = document.getElementById('echart');
|
|
return echarts.init(dom);
|
|
}
|
|
|
|
function chart_setSize() {
|
|
let width = window.innerWidth
|
|
let height = window.innerHeight
|
|
let dom = document.getElementById('echart');
|
|
let domhtml = document.getElement
|
|
dom.style.width = width + 'px'
|
|
dom.style.height = height + 'px'
|
|
document.getElementsByTagName('html')[0].style = 'overflow:hidden'
|
|
}
|
|
|
|
// 解码 JSON 字符串(包括深层解码)
|
|
function decodeJSON(jsonString) {
|
|
// 如果输入不是字符串,直接返回
|
|
if (typeof jsonString !== 'string') {
|
|
return jsonString;
|
|
}
|
|
|
|
const obj = JSON.parse(jsonString,function(k,v){
|
|
// 处理常规函数定义,包括多行函数 "key": function(params) { ... }
|
|
var isFunctionStr =
|
|
// 常规函数
|
|
/^\s*function\s*\([^)]*\)\s*\{[\s\S]*\}\s*$/.test(v) ||
|
|
// 箭头函数 - 带花括号
|
|
/^\s*\([^)]*\)\s*=>\s*\{[\s\S]*\}\s*$/.test(v) ||
|
|
// 箭头函数 - 简写形式
|
|
/^\s*\([^)]*\)\s*=>\s*[^{\s][\s\S]*$/.test(v) ||
|
|
// 单参数箭头函数 - 无括号
|
|
/^\s*[a-zA-Z0-9_$]+\s*=>\s*[^{\s][\s\S]*$/.test(v) ||
|
|
// 单参数箭头函数 - 带花括号
|
|
/^\s*[a-zA-Z0-9_$]+\s*=>\s*\{[\s\S]*\}\s*$/.test(v);
|
|
|
|
|
|
if(typeof v === 'string' && isFunctionStr){
|
|
v = eval('('+v+')')
|
|
}
|
|
|
|
return v;
|
|
});
|
|
|
|
return obj;
|
|
}
|
|
|
|
|
|
function chart_setOption(optionStr) {
|
|
chart_setSize()
|
|
// 基于准备好的dom,初始化echarts实例
|
|
let chart = getchart();
|
|
if (!optionStr) return;
|
|
try {
|
|
|
|
let option = decodeJSON(optionStr)
|
|
|
|
chart.setOption(option)
|
|
} catch (error) {
|
|
alert(error)
|
|
}
|
|
}
|
|
|
|
function chart_call(funName, optionStr, eventsid) {
|
|
|
|
chart_setSize()
|
|
let filterevents = ["click"]
|
|
// 基于准备好的dom,初始化echarts实例
|
|
let chart = getchart();
|
|
|
|
if (filterevents.includes(funName)) {
|
|
|
|
chart['on'](funName, function(params) {
|
|
delete params.event
|
|
window.parent.postMessage({
|
|
action: funName,
|
|
eventId: eventsid,
|
|
data: JSON.stringify(params),
|
|
iframeId: iframeId
|
|
}, '*');
|
|
|
|
uni.postMessage({
|
|
data: {
|
|
action: funName,
|
|
eventId: eventsid,
|
|
data: JSON.stringify(params)
|
|
}
|
|
})
|
|
|
|
})
|
|
} else {
|
|
|
|
try {
|
|
let option = JSON.parse(optionStr)
|
|
chart[funName](option)
|
|
} catch (e) {
|
|
chart[funName]()
|
|
}
|
|
}
|
|
|
|
|
|
|
|
} |