9433cfb9创建于 2025年12月31日历史提交
<script lang="uts">
  //import '/static/iconfont/iconfont.js';
  // 开发阶段:引入在线 iconfont.js(补全 https: 协议!)
  import 'https://at.alicdn.com/t/c/font_3763815_bh7kkcissk.js';
  import { interceptors } from '@/utils/request.uts'
  import { resetUserState } from '@/store/user-store'
  import { state, setLifeCycleNum, checkSystemTheme, setNetless } from '@/store/index.uts'
  import checkHasLogin from '@/utils/checkLogin.uts'
  // #ifdef APP-ANDROID || APP-HARMONY
  let firstBackTime = 0
  // #endif
  export default {
    globalData: {
      str: 'default globalData str',
      num: 0,
      bool: false,
      obj: {
        str: 'default globalData obj str',
        num: 0,
        bool: false,
      } as UTSJSONObject,
      null: null as string | null,
      arr: [] as number[],
      mySet: new Set<string>(),
      myMap: new Map<string, any>(),
      func: () : string => {
        return 'globalData func'
      },
      launchOptions: {
        path: '',
      } as OnLaunchOptions,
      onShowOption: {
        path: ''
      } as OnShowOptions
    },
    onLaunch: function (res : OnLaunchOptions) {
	  checkHasLogin()
      this.globalData.launchOptions = res

      // 自动化测试
      setLifeCycleNum(state.lifeCycleNum + 1000)
      console.log('App Launch')

      // 页面性能分析
      // const performance = uni.getPerformance()
      // const observer1: PerformanceObserver = performance.createObserver(
      //   (entryList: PerformanceObserverEntryList) => {
      //     console.log('observer1:entryList.getEntries()' +JSON.stringify(entryList.getEntries()))
      //   }
      // )
      // observer1.observe({
      //   entryTypes: ['render', 'navigation'],
      // } as PerformanceObserverOptions)
      // 统计上报 - 应用启动
      // #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN || APP-HARMONY
      // uni.report({
      // 	name: 'uni-app-launch',
      // 	options: res,
      // 	success(res_data) {
      // 		console.log(res_data);
      // 	}, fail(err) {
      // 		console.log(err);
      // 	}
      // })
      // #endif
      // #ifdef APP
      if (process.env.NODE_ENV !== 'development') { //真机运行可以注释此条件
        uni.getPrivacySetting({
          success(res1){
             if(res1.needAuthorization){
               uni.openDialogPage({
                 url: '/pages/component/button/privacy',
               })
             }
          }
        })
      }
      // #endif
      // 获取系统主题
      checkSystemTheme();

    },
    onShow: function (res : OnShowOptions) {
	  // 添加响应拦截器(示例:处理token过期)
	  interceptors.useResponse!(
	    async (response) => {
	      // token过期逻辑
		  if(response.code === 60030){
			  resetUserState()
		  }
	      return response
	    },
	    async (error) => {
	      // 统一打印错误日志
	      console.error('请求异常:', error)
	      return Promise.reject(error)
	    }
	  )
	  
      this.globalData.onShowOption = res

      // 处理scheme或通用链接直达
      let url = this.getRedirectUrl(res.appScheme, res.appLink);
      if (null != url) {
        uni.navigateTo({
          url: url
        })
      }

      // 自动化测试
      setLifeCycleNum(state.lifeCycleNum + 100)
      console.log('App Show')

      // #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN || APP-HARMONY
      // 统计上报 - 应用显示
      // uni.report({
      // 	name: 'uni-app-show',
      // 	success(res_data) {
      // 		console.log(res_data);
      // 	}, fail(err) {
      // 		console.log(err);
      // 	}
      // })
      // #endif
    },
    onHide: function () {
      // 自动化测试
      setLifeCycleNum(state.lifeCycleNum - 100)
      console.log('App Hide')

      // #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN || APP-HARMONY
      // 统计上报 - 应用进入后台
      // uni.report({
      // 	name: 'uni-app-hide',
      // 	success(res) {
      // 		console.log(res);
      // 	}, fail(err) {
      // 		console.log(err);
      // 	}
      // })
      // #endif
    },
    // #ifdef APP-ANDROID || APP-HARMONY
    onLastPageBackPress: function () {
      // 自动化测试
      setLifeCycleNum(state.lifeCycleNum - 1000)
      console.log('App LastPageBackPress')
      if (firstBackTime == 0) {
        uni.showToast({
          title: '再按一次退出应用',
          position: 'bottom',
        })
        firstBackTime = Date.now()
        setTimeout(() => {
          firstBackTime = 0
        }, 2000)
      } else if (Date.now() - firstBackTime < 2000) {
        firstBackTime = Date.now()
        uni.exit()
      }
    },
    onExit() {
      console.log('App Exit')
    },
    // #endif
    onError(err : any) {
      console.log('App Error', err)
      setLifeCycleNum(state.lifeCycleNum + 100)
      // console.log('App onError', err)
      // #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN || APP-HARMONY
    	// 统计上报 - 应用发生错误
    	// uni.report({
    	// 	name: 'uni-app-error',
    	// 	options: err,
    	// 	success(res) {
    	// 		console.log(res);
    	// 	}, fail(err) {
    	// 		console.log(err);
    	// 	}
    	// })
      // #endif
    },
    methods: {
      increaseLifeCycleNum() {
        setLifeCycleNum(state.lifeCycleNum + 100)
        console.log('App increaseLifeCycleNum')
      },
      getRedirectUrl(scheme : string | null, ulink : string | null) : string | null {
        //解析scheme或universal link启动直达页面:
        //scheme格式:uniappx://redirect/pages/component/view/view?key=value  //其中redirect后为页面路径
        //universal link格式:https://uniappx.dcloud.net.cn/ulink/redirect.html?url=%2Fpages%2Fcomponent%2Fview%2Fview%3Fkey%3Dvalue  //通用链接路径需固定,?后面的url参数为直达页面路径,注意url字段值需做url编码(可使用encodeURIComponent方法)
        let url : string | null = null;
        if (null != scheme && scheme.length > 0) {
          const PATHPRE = 'redirect';
          let parts : string | null = null;
          let pos = scheme.search('//');
          if (pos > 0) {
            parts = scheme.substring(pos + 2);
          }
          if (null != parts && parts.startsWith(PATHPRE)) {
            url = parts.substring(PATHPRE.length);
          }
        } else if (null != ulink && ulink.length > 0) {
          const PATH = 'ulink/redirect.html';
          let parts = ulink.split('?');
          if (parts.length > 1 && parts[0].endsWith(PATH) && parts[1].length > 0) {
            parts[1].split('&').forEach((e) => {
              let params = e.split('=');
              if (params.length > 1 && params[0].length > 0 && params[1].length > 0) {
                if ('url' == params[0]) {
                  if (null == url) {
                    url = decodeURIComponent(params[1]);
                  }
                }
              }
            });
          }
        }
        return url;
      }
    }
  }
</script>

<style>
  /*每个页面公共css */
  @import "./common/uni.css";
  @import "./common/common.css";

  /* #ifdef WEB */
  .uni-top-window uni-tabbar .uni-tabbar {
    background-color: #fff !important;
  }
  /* #endif */
  /* #ifdef MP-WEIXIN */
  page {
    background-color: #efeff4;
  }
  /* #endif */
</style>