From fa4c7baec36d58b4bdca66159ece743b5a45a9c8 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期四, 11 六月 2026 10:15:45 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
app/utils/utils.js | 196 ++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 195 insertions(+), 1 deletions(-)
diff --git a/app/utils/utils.js b/app/utils/utils.js
index 3562b9e..962a9b5 100644
--- a/app/utils/utils.js
+++ b/app/utils/utils.js
@@ -46,4 +46,198 @@
});
})
return promise;
-}
\ No newline at end of file
+}
+
+const LOCATION_NOTICE_STORAGE_KEY = 'location_permission_notice_shown'
+const IMAGE_NOTICE_STORAGE_KEY = 'image_permission_notice_shown'
+
+const DEFAULT_LOCATION_NOTICE = {
+ title: '鑾峰彇浣嶇疆淇℃伅',
+ content: '涓轰簡缁欐偍鍒嗛厤闄勮繎鐨勮鍗曪紝骞惰绠楁帴閫佽揣鐨勭簿鍑嗚窛绂讳笌瀵艰埅璺嚎锛屾湰搴旂敤闇�瑕佽幏鍙栨偍鐨勪綅缃俊鎭��',
+ confirmText: '宸茬煡鏅�'
+}
+
+const DEFAULT_IMAGE_NOTICE = {
+ title: '鑾峰彇鐩告満鏉冮檺',
+ content: '涓轰簡鏀寔鎮ㄨ繘琛屽徃鏈鸿韩浠借璇侊紝浠ュ強鏂逛究鎮ㄥ湪鍙栭�佷欢鏃舵媿鐓х暀瀛樺嚟璇侊紝鏈簲鐢ㄩ渶瑕佽幏鍙栨偍鐨勭浉鏈轰笌鐩稿唽鏉冮檺銆�',
+ confirmText: '宸茬煡鏅�'
+}
+
+export function ensureLocationPermissionNotice(modalOptions = {}) {
+ const hasShown = uni.getStorageSync(LOCATION_NOTICE_STORAGE_KEY)
+ if (hasShown) {
+ return Promise.resolve(true)
+ }
+
+ const options = Object.assign({}, DEFAULT_LOCATION_NOTICE, modalOptions)
+
+ return new Promise((resolve) => {
+ uni.showModal({
+ title: options.title,
+ content: options.content,
+ confirmText: options.confirmText,
+ showCancel: false,
+ confirmColor: '#106efa',
+ success: (res) => {
+ if (res.confirm) {
+ uni.setStorageSync(LOCATION_NOTICE_STORAGE_KEY, true)
+ resolve(true)
+ return
+ }
+ resolve(false)
+ },
+ fail: () => {
+ resolve(false)
+ }
+ })
+ })
+}
+
+let hasEmittedLocationPermissionGranted = false
+
+export function getLocationWithNotice(locationOptions = {}, modalOptions = {}) {
+ return ensureLocationPermissionNotice(modalOptions).then((confirmed) => {
+ if (!confirmed) {
+ return Promise.reject({ errMsg: 'location permission notice canceled' })
+ }
+
+ return new Promise((resolve, reject) => {
+ uni.getLocation(Object.assign({}, locationOptions, {
+ success: (res) => {
+ if (!hasEmittedLocationPermissionGranted) {
+ hasEmittedLocationPermissionGranted = true
+ uni.$emit('locationPermissionGranted', res)
+ }
+ if (typeof locationOptions.success === 'function') {
+ locationOptions.success(res)
+ }
+ resolve(res)
+ },
+ fail: (err) => {
+ if (typeof locationOptions.fail === 'function') {
+ locationOptions.fail(err)
+ }
+ reject(err)
+ }
+ }))
+ })
+ })
+}
+
+export function ensureImagePermissionNotice(modalOptions = {}) {
+ const hasShown = uni.getStorageSync(IMAGE_NOTICE_STORAGE_KEY)
+ if (hasShown) {
+ return Promise.resolve(true)
+ }
+
+ const options = Object.assign({}, DEFAULT_IMAGE_NOTICE, modalOptions)
+
+ return new Promise((resolve) => {
+ uni.showModal({
+ title: options.title,
+ content: options.content,
+ confirmText: options.confirmText,
+ showCancel: false,
+ success: (res) => {
+ if (res.confirm) {
+ uni.setStorageSync(IMAGE_NOTICE_STORAGE_KEY, true)
+ resolve(true)
+ return
+ }
+ resolve(false)
+ },
+ fail: () => {
+ resolve(false)
+ }
+ })
+ })
+}
+
+export function chooseImageWithNotice(imageOptions = {}, modalOptions = {}) {
+ return ensureImagePermissionNotice(modalOptions).then((confirmed) => {
+ if (!confirmed) {
+ return Promise.reject({ errMsg: 'image permission notice canceled' })
+ }
+
+ return new Promise((resolve, reject) => {
+ uni.chooseImage(Object.assign({}, imageOptions, {
+ success: (res) => {
+ if (typeof imageOptions.success === 'function') {
+ imageOptions.success(res)
+ }
+ resolve(res)
+ },
+ fail: (err) => {
+ console.log('chooseImage fail', err)
+ const errMsg = (err && err.errMsg) || ''
+ const errCode = (err && err.errCode) || ''
+ if (errMsg && errMsg.includes('chooseImage:fail No Permission')) {
+ // const sourceType = imageOptions.sourceType || ['album', 'camera']
+
+ let toastTitle = ''
+
+ // 鎷嶇収鏉冮檺
+ // 鎷嶇収鏉冮檺
+ if (errCode === 11) {
+ toastTitle = '鐩告満鏉冮檺宸插叧闂紝璇峰墠寰�鎵嬫満銆愯缃�戜腑鎵嬪姩寮�鍚�'
+ }
+
+ // 鐩稿唽鏉冮檺
+ if (errCode === 12) {
+ toastTitle = '鐩稿唽鏉冮檺宸插叧闂紝璇峰墠寰�鎵嬫満銆愯缃�戜腑鎵嬪姩寮�鍚�'
+ }
+
+ // if (sourceType.length === 1) {
+ // if (sourceType[0] === 'album') {
+ // toastTitle = '鐩稿唽鏉冮檺宸插叧闂紝璇峰墠寰�鎵嬫満銆愯缃�戜腑鎵嬪姩寮�鍚�'
+ // } else if (sourceType[0] === 'camera') {
+ // toastTitle = '鐩告満鏉冮檺宸插叧闂紝璇峰墠寰�鎵嬫満銆愯缃�戜腑鎵嬪姩寮�鍚�'
+ // }
+ // } else {
+ // if (errMsg.includes('camera') || errMsg.includes('Camera')) {
+ // toastTitle = '鐩告満鏉冮檺宸插叧闂紝璇峰墠寰�鎵嬫満銆愯缃�戜腑鎵嬪姩寮�鍚�'
+ // } else if (errMsg.includes('album') || errMsg.includes('Album') || errMsg.includes('photo') || errMsg.includes('Photo')) {
+ // toastTitle = '鐩稿唽鏉冮檺宸插叧闂紝璇峰墠寰�鎵嬫満銆愯缃�戜腑鎵嬪姩寮�鍚�'
+ // }
+ // }
+
+ uni.showToast({
+ title: toastTitle,
+ icon: 'none',
+ duration: 3000
+ })
+ }
+ if (typeof imageOptions.fail === 'function') {
+ imageOptions.fail(err)
+ }
+ reject(err)
+ }
+ }))
+ })
+ })
+}
+
+export function checkLocationPermission() {
+ return new Promise((resolve) => {
+ if (typeof uni.getAppAuthorizeSetting === 'function') {
+ try {
+ const setting = uni.getAppAuthorizeSetting()
+ const locationAuthorized = setting.locationAuthorized
+ resolve(locationAuthorized === 'authorized' || locationAuthorized === 'authorizedAlways')
+ return
+ } catch (e) {
+ console.log('getAppAuthorizeSetting fail', e)
+ }
+ }
+
+ uni.getSetting({
+ success: (res) => {
+ const authSetting = res.authSetting || {}
+ resolve(!!authSetting['scope.userLocation'])
+ },
+ fail: () => {
+ resolve(false)
+ }
+ })
+ })
+}
--
Gitblit v1.9.3