| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <script>
- import { fetchPermissionList } from './util/QueryPermission.js';
- export default {
- onLaunch: function () {
- console.log(' APP onLaunch');
- // 全局隐私协议检查:首次启动时通过原生 uni.showModal 弹出
- if (!uni.getStorageSync('privacy_agreed')) {
- this.showPrivacyModal();
- } else {
- // 已同意过,直接执行初始化
- this.doAfterPrivacy();
- }
- },
- methods: {
- // 独立的隐私协议弹窗方法(避免递归调用 onLaunch)
- showPrivacyModal() {
- uni.showModal({
- title: '用户服务与隐私协议',
- content:
- '欢迎使用本应用!在您首次使用前,请认真阅读《用户服务与隐私协议》。我们将遵循"最小必要"原则,仅收集实现服务所必需的信息(微信昵称、头像、手机号、位置信息、设备信息等),不会主动向第三方共享您的个人信息。',
- confirmText: '同意并继续',
- cancelText: '不同意',
- success: (res) => {
- if (res.confirm) {
- // 用户同意,记录状态并执行初始化
- uni.setStorageSync('privacy_agreed', true);
- this.doAfterPrivacy();
- } else {
- // 用户不同意,二次确认
- uni.showModal({
- title: '提示',
- content: '您需要同意隐私协议才能使用本应用',
- confirmText: '再次查看完整协议',
- cancelText: '退出应用',
- success: (res2) => {
- if (res2.confirm) {
- // 跳转到完整协议页面
- uni.navigateTo({
- url: '/pages/login/agreement',
- });
- // 同时重新弹出摘要弹窗让用户做最终决定
- setTimeout(() => {
- this.showPrivacyModal();
- }, 500);
- } else {
- // 退出应用
- // #ifdef APP-PLUS
- plus.runtime.quit();
- // #endif
- }
- },
- });
- }
- },
- fail: () => {
- // 弹窗失败(如 App 启动早期),延迟重试
- setTimeout(() => {
- this.showPrivacyModal();
- }, 300);
- },
- });
- },
- // 隐私协议同意后才执行的初始化逻辑
- doAfterPrivacy() {
- // 已登录时提前拉取权限列表,保证"未经过首页"等特殊入口也能拿到权限数据(非阻塞)
- if (uni.getStorageSync('session_key')) {
- fetchPermissionList();
- }
- },
- },
- onShow: function () {
- console.log('App Show');
- },
- onHide: function () {
- console.log('App Hide');
- },
- };
- </script>
- <style lang="scss">
- @import './static/font/iconfont.css';
- @import './static/iconfont/iconfont.css';
- html {
- box-sizing: border-box;
- font-size: 28rpx !important;
- }
- .status_bar {
- height: 44px;
- width: 100%;
- background-color: #ffffff;
- position: fixed;
- top: 0;
- z-index: 99999;
- }
- </style>
|