|
|
@@ -65,6 +65,68 @@ Vue.prototype.$axios = axios;
|
|
|
Vue.prototype.$api = api;
|
|
|
Vue.prototype.$echarts = echarts;
|
|
|
|
|
|
+//=======从pad App接收消息 start
|
|
|
+window.receiveAppMsg = function(payload) {
|
|
|
+ console.log('【网页收到壳消息】', payload)
|
|
|
+ if (!payload || !payload.type) return
|
|
|
+ switch (payload.type) {
|
|
|
+ case 'setToken':
|
|
|
+ window.__IS_PAD_APP__ = true;
|
|
|
+ window.__PAD_APP_TOKEN__ = payload.token;// 保存token到全局变量
|
|
|
+ const rootEl = document.querySelector('#app') // vue项目根容器
|
|
|
+ const cls = 'pad_container_layout';// pad容器样式
|
|
|
+ if (rootEl && !rootEl.classList.contains(cls)) {
|
|
|
+ rootEl.classList.add(cls)
|
|
|
+ }
|
|
|
+ // if (payload.token) {
|
|
|
+ // axios.defaults.headers.common['Authorization'] = `${payload.token}`
|
|
|
+ // }
|
|
|
+ // 触发自定义事件,通知登录页面token准备好了!
|
|
|
+ const tokenReadyEvent = new CustomEvent('padAppTokenReady', {
|
|
|
+ detail: { token: payload.token }
|
|
|
+ })
|
|
|
+ window.dispatchEvent(tokenReadyEvent)
|
|
|
+ break
|
|
|
+ case 'goPage':
|
|
|
+ router.push(payload.path)
|
|
|
+ break
|
|
|
+ case 'openHeaderDropdown':
|
|
|
+ // 通知 Header 组件打开用户下拉(el-dropdown)弹框
|
|
|
+ window.dispatchEvent(new CustomEvent('openHeaderDropdown'))
|
|
|
+ break
|
|
|
+ default:
|
|
|
+ console.log('未知消息类型', payload)
|
|
|
+ break
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+// H5 iframe监听壳消息
|
|
|
+window.addEventListener('message', function(e) {
|
|
|
+ // console.log('【收到壳消息】', JSON.stringify(e.data))
|
|
|
+ // ==========重点:APP‑PLUS环境直接退出,不要处理postMessage消息==========
|
|
|
+ // uni-app webview中,window.plus 存在代表是安卓/ios app环境
|
|
|
+ if(window.plus){
|
|
|
+ console.log("【APP环境,跳过postMessage消息】")
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 过滤webpack内部热更新消息
|
|
|
+ if (e.data?.type === 'webpackWarnings' || e.data?.type === 'webpackHotUpdate') {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ // 白名单,只允许这些域名发送消息
|
|
|
+ const baseUrl = process.env.VUE_APP_BASE;
|
|
|
+ const allowOrigin = [
|
|
|
+ 'http://localhost:8080',
|
|
|
+ 'http://192.168.1.18:8080',
|
|
|
+ baseUrl
|
|
|
+ ];
|
|
|
+ if (!allowOrigin.includes(e.origin)) return
|
|
|
+ const data = e.data;
|
|
|
+ if (!data || !data.type) return
|
|
|
+ window.receiveAppMsg(data)
|
|
|
+})
|
|
|
+//=======从pad App接收消息 end
|
|
|
+
|
|
|
new Vue({
|
|
|
el: "#app",
|
|
|
router,
|