import { showAlert } from '@/utils/message.js' // 递归算法 export const initTree = (arr, parentId = '0', id) => { const tree = []; arr.filter(item => item.parentId === parentId).forEach(item => { const children = initTree(arr, item[id]); if (children.length > 0) { item.children = children; } tree.push(item); }); return tree; } // 安卓异步调用 export const requestAndroidPermissionAsync = (systemInfo, permissions) => { return new Promise((resolve, reject) => { // if (uni.getSystemInfoSync().platform !== 'android') { // resolve({ granted: true, nonSystem: true }) // return // } plus.android.requestPermissions(permissions, (result) => { showAlert("result=>" + JSON.stringify(result)) // const granted = Object.values(result.granted).every(Boolean); let granted = false; if (systemInfo.osVersion < 13) { granted = result.granted.length == 2 } else if (systemInfo.osVersion == 13) { granted = result.granted.length == 3 } else { granted = result.granted.length == 1 } resolve({ ...result, granted }) }, (error) => { reject(error) }) }) } // 安卓同步调用 export const requestAndroidPermission = (systemInfo) => { let granted = false; const Manifest = plus.android.importClass("android.Manifest"); const MainActivity = plus.android.runtimeMainActivity(); if (systemInfo.osVersion < 13) { // 安卓系统版本 let permissionStatus = MainActivity.checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE); let perStatus = 0; if (permissionStatus === 0) { perStatus++; } permissionStatus = MainActivity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE); if (permissionStatus === 0) { perStatus++; } if (perStatus == 2) { granted = true } else { granted = false //"当前文件保存权限被关闭,请到设置中开启才能继续后续操作" goPermission();//调用授权方法去授权 } } else if (systemInfo.osVersion == 13) { let permissionStatus = MainActivity.checkSelfPermission(Manifest.permission.READ_MEDIA_IMAGES); let perStatus = 0; if (permissionStatus === 0) { perStatus++; } permissionStatus = MainActivity.checkSelfPermission(Manifest.permission.READ_MEDIA_VIDEO); if (permissionStatus === 0) { perStatus++; } permissionStatus = MainActivity.checkSelfPermission(Manifest.permission.READ_MEDIA_AUDIO); if (permissionStatus === 0) { perStatus++; } if (perStatus == 3) { granted = true } else { granted = false //"当前文件保存权限被关闭,请到设置中开启才能继续后续操作" goPermission();//调用授权方法去授权 } } else { let permissionStatus = MainActivity.checkSelfPermission(Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED); let perStatus = 0; if (permissionStatus === 0) { perStatus++; } if (perStatus == 1) { granted = true } else { granted = false //"当前文件保存权限被关闭,请到设置中开启才能继续后续操作" goPermission();//调用授权方法去授权 } } return granted } // 弹窗跳授权页面 const goPermission = () => { uni.showModal({ title: '提示', content: "请进行设备授权", cancelText: '去授权', confirmText: '已授权', success: function (res) { if (res.confirm) { uni.reLaunch({ url: '/pages/loading/loading', }); } else if (res.cancel) { jumpAuthPermission(); } } }) } // 跳转授权按钮 const jumpAuthPermission=()=>{ var main = plus.android.runtimeMainActivity(); var Intent = plus.android.importClass('android.content.Intent'); var Uri = plus.android.importClass('android.net.Uri'); var pkg = main.getPackageName(); var intent = new Intent('android.settings.APPLICATION_DETAILS_SETTINGS'); intent.setData(Uri.parse('package:' + pkg)); main.startActivity(intent); setTimeout(()=>{ uni.reLaunch({ url: '/pages/loading/loading', }); },500) } // 跳转授权 const jumpAuthPermission2 = () => { let main = plus.android.runtimeMainActivity(); let Intent = plus.android.importClass('android.content.Intent'); let Uri = plus.android.importClass('android.net.Uri'); let Build = plus.android.importClass('android.os.Build'); let Settings = plus.android.importClass('android.provider.Settings'); let PackageManager = plus.android.importClass('android.content.pm.PackageManager'); let pkg = main.getPackageName(); let intent = new Intent(); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); try { showAlert(Build.VERSION.SDK_INT) // 尝试直接跳转到存储权限设置(Android 13+ 支持) if (Build.VERSION.SDK_INT >= 33) { // Android 13+ 尝试直接打开存储权限页面 intent.setAction(Settings.ACTION_MANAGE_APP_PERMISSIONS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, pkg); // 指定权限类型为存储(需要Android 13+支持) intent.putExtra(Settings.EXTRA_PERMISSION_NAME, "android.permission.READ_EXTERNAL_STORAGE"); } // Android 11-12 尝试直接跳转到权限列表 else if (Build.VERSION.SDK_INT >= 30) { intent.setAction(Settings.ACTION_MANAGE_APP_PERMISSIONS); intent.putExtra(Settings.EXTRA_APP_PACKAGE, pkg); } // Android 6.0-10 跳转到应用详情页(用户需手动点击权限) else if (Build.VERSION.SDK_INT >= 23) { intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); let uri = Uri.fromParts("package", pkg, null); intent.setData(uri); } // 低版本系统 else { intent.setAction(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS); } showAlert("main=>"+main) showAlert("intent=>"+intent) main.startActivity(intent); setTimeout(() => { uni.reLaunch({ url: '/pages/loading/loading', }); }, 1000) } catch (e) { showAlert(e) // 异常情况下降级处理 console.error("跳转存储权限页面失败,使用备用方案", e); let fallbackIntent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); fallbackIntent.setData(Uri.parse('package:' + pkg)); fallbackIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); main.startActivity(fallbackIntent); setTimeout(() => { uni.reLaunch({ url: '/pages/loading/loading', }); }, 1000) } }