import Vue from 'vue'; const companyUserIsLogin = () => { try { const companyUser = uni.getStorageSync('companyUser'); return !!companyUser && companyUser !== ''; } catch (e) { return false; } }; // 针对 nvue (Weex) 环境下 Vuex 4 兼容性修复 // Vuex 4 依赖 Vue 3 的 effectScope, reactive, computed 等 API // 而 nvue (基于 Weex/Vue 2) 缺失这些 API try { // Polyfill global helpers if (Vue) { if (!Vue.prototype.$companyUserIsLogin) { Vue.prototype.$companyUserIsLogin = companyUserIsLogin; } if (!Vue.prototype.$isIos) { Vue.prototype.$isIos = function() { return uni.getSystemInfoSync().platform === 'ios'; }; } } // 1. effectScope if (Vue && !Vue.effectScope) { // console.log('Polyfilling effectScope for nvue...', new Date().getTime()); Vue.effectScope = function() { return { run: function(fn) { return fn ? fn() : undefined; }, stop: function() {} }; }; } // 2. computed // Vuex 4 使用 computed(() => ...) 创建 getter,返回一个 ref 对象 // 之前的 polyfill 直接执行 getter() 导致在 store 初始化完成前访问 state 报错 // 修复:返回一个包含 lazy value getter 的对象 if (Vue && !Vue.computed) { Vue.computed = function(getter) { return { get value() { return getter(); } }; }; } // 3. reactive // Vuex 4 使用 reactive(state) // Vue 2 可以使用 Vue.observable 替代 if (Vue && !Vue.reactive) { Vue.reactive = function(obj) { // Vue 2 observable 如果传入响应式对象会返回它本身 return Vue.observable(obj); }; } // 4. ref (Vuex 4 可能用到) // 简单模拟 ref,Vue 2 没有真正的 ref,这里返回一个响应式对象 wrapper if (Vue && !Vue.ref) { Vue.ref = function(val) { const wrapper = { value: val }; return Vue.observable(wrapper); }; } } catch (e) { console.error('Polyfill failed:', e); } export default {};