Files
MrleeAdmin/frontend/scanapp/main.js
T
2026-08-31 11:33:59 +08:00

95 lines
2.6 KiB
JavaScript

import App from './App'
import uViewPro from '@/uni_modules/uview-pro'
import { applyAppTheme, getAppThemeMode } from '@/utils/theme.js'
const appThemeMixin = {
data() {
return {
themeMode: getAppThemeMode()
}
},
created() {
this.__onScanappThemeChange = (themeMode) => {
this.themeMode = themeMode
}
uni.$on('scanapp-theme-change', this.__onScanappThemeChange)
},
onShow() {
this.themeMode = getAppThemeMode()
applyAppTheme(this.themeMode)
},
beforeDestroy() {
uni.$off('scanapp-theme-change', this.__onScanappThemeChange)
},
beforeUnmount() {
uni.$off('scanapp-theme-change', this.__onScanappThemeChange)
}
}
applyAppTheme(getAppThemeMode())
// Android 原生 uni.showModal 的按钮顺序与 H5 不一致:确认按钮在左、取消按钮在右。
// 仅交换显示文本并还原回调语义,避免逐个页面修改弹窗逻辑,也确保所有弹窗统一生效。
// #ifdef APP-PLUS
const installAndroidModalButtonOrderFix = () => {
if (uni.__scanappAndroidModalButtonOrderFixed) return
const systemInfo = uni.getSystemInfoSync ? uni.getSystemInfoSync() : {}
if (systemInfo.platform !== 'android' || typeof uni.showModal !== 'function') return
const nativeShowModal = uni.showModal
const normalizeResult = (result) => {
if (!result || typeof result !== 'object') return result
return {
...result,
confirm: Boolean(result.cancel),
cancel: Boolean(result.confirm)
}
}
uni.showModal = (options = {}) => {
if (options.showCancel === false) return nativeShowModal.call(uni, options)
const confirmText = options.confirmText || '确定'
const cancelText = options.cancelText || '取消'
const nativeOptions = {
...options,
confirmText: cancelText,
cancelText: confirmText,
success: (result) => options.success?.(normalizeResult(result)),
fail: (error) => options.fail?.(error),
complete: (result) => options.complete?.(normalizeResult(result))
}
delete nativeOptions.__scanappNormalized
const request = nativeShowModal.call(uni, nativeOptions)
return request && typeof request.then === 'function' ? request.then(normalizeResult) : request
}
uni.__scanappAndroidModalButtonOrderFixed = true
}
installAndroidModalButtonOrderFix()
// #endif
// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
Vue.mixin(appThemeMixin)
App.mpType = 'app'
const app = new Vue({
...App
})
app.$mount()
// #endif
// #ifdef VUE3
import {
createSSRApp
} from 'vue'
export function createApp() {
const app = createSSRApp(App)
app.mixin(appThemeMixin)
app.use(uViewPro)
return {
app
}
}
// #endif