wtt
2026-03-30 c89544954db0254978c1fabcb175d622db28551c
main.js
@@ -1,8 +1,83 @@
// 导入i18n文件
import en from "./locale/en.json"
import ZhCN from "./locale/zh-Hans.json"
import {
    addMissingKeyToMap
} from "@/utils/i18n.js"
// 加载本地语言包
const messages = {
    "zh-Hans": ZhCN,
    en,
}
let i18nConfig = {
    locale: uni.getLocale(), // 获取已设置的语言
    messages,
    silentTranslationWarn: true,
    // missing: function(locale, key, vm, values){
    //   // 页面中含有语言包中不存在的字段,需同步到数据库中
    //     console.log("[i18n]: 页面中key为: ", key ,"的字段在翻译文件中不存在,同步到数据库...")
    //
    //   // 为降低同步的难度,APP中 对翻译模块的key 不采用数组的写法,统一使用 模块名.字段名的写法
    //   let [HMouldName, HFieldKey] = key.split('.')
    //
    //
    // }
}
// uniapp 全局请求拦截器
uni.addInterceptor('request', {
    invoke(args) {
        // 请求头带上 token
        let token = uni.getStorageSync('Token')
        if (token) {
            // 先初始化,防止 undefined 报错
            args.header = args.header || {}
            args.header.Authorization = `Bearer ${token}`
        }
    },
    success(res) {
        // 自动续期 token
        if (res.data && res.data.token) {
            uni.setStorageSync('Token', res.data.token)
        }
        // 401 自动跳登录
        if (res.statusCode === 401) {
            uni.removeStorageSync('Token')
            uni.showModal({
                title: '温馨提示',
                content: res.data.Message,
                showCancel:false,
                success: () => {
                    uni.reLaunch({
                        url: '/pages/index/login'
                    })
                }
            })
        }
         // 403 返回上一个页面
        if (res.statusCode === 403) {
            uni.showModal({
                title: '温馨提示',
                content: res.data.Message,
                showCancel:false,
                success: () => {
                    uni.navigateBack()
                }
            })
        }
    }
})
import App from './App'
import Printer from './plugins/printer'
Vue.use(Printer);
// 生产环境
 // Vue.prototype.serverUrl = "https://qqyapi.xinlinsoft.cn/qqy-api";
// Vue.prototype.serverUrl = "https://qqyapi.xinlinsoft.cn/qqy-api";
// 开发环境
// Vue.prototype.serverUrl = "http://47.96.97.237/API";
@@ -16,30 +91,58 @@
// #ifndef VUE3
import Vue from 'vue'
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)
const i18n = new VueI18n(i18nConfig)
// missing回调无法满足 加载线上包 后的检验功能,需重写$t函数
const originalT = Vue.prototype.$t
Vue.prototype.$t = function(key, ...args) {
    // 调用原始 $t 执行翻译
    const translated = originalT.call(this, key, args);
    if (translated == key) {
        // 翻译后的文本与传入的key相同,则表示翻译文本缺失 记录缺失的翻译文本
        let [moduleName, fieldCode] = key.split(".")
        addMissingKeyToMap(moduleName, fieldCode)
    }
    return translated
}
Vue.config.productionTip = false
App.mpType = 'app'
const app = new Vue({
    i18n,
    ...App
})
app.$mount()
export default i18n
// #endif
// #ifdef VUE3
import { createSSRApp } from 'vue'
import {
    createSSRApp
} from 'vue'
import {
    createI18n
} from 'vue-i18n' // v9.x
const i18n = createI18n(i18nConfig)
export function createApp() {
  const app = createSSRApp(App)
  return {
    app
  }
    const app = createSSRApp(App)
    app.use(i18n)
    return {
        app
    }
}
export default i18n
// #endif
// main.js uni.showToast 实现全局拦截设置默认提示时间为3.5秒
const originalShowToast = uni.showToast;
uni.showToast = (options) => {
  originalShowToast({
    duration: options.duration || 3500, // 默认2秒
    icon: options.icon || 'none',
   title: options.title || 'none',
    ...options
  });
    originalShowToast({
        duration: options.duration || 3500, // 默认2秒
        icon: options.icon || 'none',
        title: options.title || 'none',
        ...options
    });
};