Files
frontend-app/pages/mine_package/mild-shopping/mild-shopping.vue
T

144 lines
3.7 KiB
Vue
Raw Normal View History

2025-11-04 01:14:33 +08:00
<template>
2025-11-19 15:49:37 +08:00
<view class="mild-shopping">
<web-view
ref="webview"
:webview-styles="webviewStyles"
:src="webviewUrl"
@message="handlePostMessage"
@onPostMessage="handlePostMessage"
></web-view
></view>
2025-11-04 01:14:33 +08:00
</template>
<script>
import { TOKEN_NAME, USER_DATA, getStorageFun } from "@/utils/auth.js";
2025-11-19 15:49:37 +08:00
import { MILD_BASE_URL } from "@/utils/config.js";
2025-11-04 01:14:33 +08:00
// 全局变量
let wv; // 计划创建的webview
export default {
data() {
return {
webviewStyles: {
progress: {
color: "#333333",
},
},
wvNode: null,
2025-11-19 15:49:37 +08:00
webviewUrl: "",
// webviewUrl:'https://agent.o.tbmall.xin/',//中台测试
// webviewUrl:'https://agent.tbmall.xin',
2025-11-05 14:50:23 +08:00
// webviewUrl: "http://192.168.1.29:8004/",
2025-11-04 01:14:33 +08:00
};
},
onShow() {
// #ifdef APP-PLUS
2025-11-19 15:49:37 +08:00
this.webviewUrl = MILD_BASE_URL;
2025-11-04 01:14:33 +08:00
this.initWebview();
// #endif
},
methods: {
/**
* 初始化webview
*/
initWebview() {
const currentWebview = this.$scope.$getAppWebview();
setTimeout(() => {
wv = currentWebview.children()[0];
2025-11-19 15:49:37 +08:00
console.log(
2025-11-04 01:14:33 +08:00
"TOKEN_NAME-1",
getStorageFun(TOKEN_NAME),
2026-04-23 14:17:18 +08:00
getStorageFun(USER_DATA),
2025-11-04 01:14:33 +08:00
);
if (wv) {
// this.evalJSWithLog("onBridgeShowApp", {
// token: 'WnJyYmV5SmhiR2NpT2lKSVV6STFOaUo5LmV5SjFjMlZ5U1dRaU9qRTNNallzSW0xamFFbGtJam94TURBeUxDSnBjM01pT2lKb2MyMHRabkp2Ym5SbGJtUWlMQ0owSWpveE56WXlNVGczTURreE1qYzRmUS5Caml4VU8yS1ZoUHBmeHdjRDRPWE4tSmw5T1lBZnBlc3hCRUN6UUFzQUpzRkp2em4',
// userId: '1726',
// name: '陈俊兴',
// });
this.evalJSWithLog("onBridgeShowApp", {
token: getStorageFun(TOKEN_NAME),
userId: getStorageFun(USER_DATA).userId,
name: getStorageFun(USER_DATA).name,
});
}
}, 300);
// 支付成功,小程序跳回app
},
/**
* 处理来自webview的消息
*/
handlePostMessage(val) {
console.log("收到消息", val, val.detail.data);
const detail = val.detail.data[0];
const type = detail?.type;
console.log("收到消息-1", type);
// 使用策略模式处理不同类型消息
const handlers = {
/** 一键登录 **/
back: () => this.back(detail),
2026-04-23 14:17:18 +08:00
uniFunction: () => this.uniFunction(detail),
2025-11-04 01:14:33 +08:00
/** 默认 */
default: () => {
if (detail.userInfo) {
this.handleChatMessage(detail, type);
} else {
console.log("未知类型:", type);
}
},
};
(handlers[type] || handlers["default"])();
},
back() {
uni.switchTab({
url: "/pages/mine/mine",
});
},
2026-04-23 14:17:18 +08:00
// uni 方法
uniFunction({ name, params, success, fail, complete }) {
uni[name]({
...params,
success: (res) => {
if (success) {
this.evalJSWithLog(success, res);
}
},
fail: () => {
if (fail) {
this.evalJSWithLog(fail);
}
},
complete: () => {
if (complete) {
this.evalJSWithLog(complete);
}
},
});
},
/**
* 调用webview中的JS方法并记录日志
*/
evalJSWithLog(callBackName, data) {
if (!wv) return;
const params = JSON.stringify(data);
console.log(`调用 evalJS: ${callBackName}(${params})`);
wv.evalJS(`${callBackName}(${params})`);
},
2025-11-04 01:14:33 +08:00
},
};
</script>
<style lang="scss" scoped>
2025-11-19 15:49:37 +08:00
.mild-shopping {
2025-11-04 01:14:33 +08:00
padding-top: var(--status-bar-height);
}
</style>