95 lines
2.6 KiB
JavaScript
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
|