From 202e28381709ebb1a2947fcc1c55a302cd92ccf6 Mon Sep 17 00:00:00 2001 From: "@fawn-nine" <1271023382@qq.com> Date: Wed, 24 Jul 2024 11:38:03 +0800 Subject: [PATCH] =?UTF-8?q?ios=E4=BB=98=E6=AC=BE=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E8=B0=83=E6=95=B4=20=E5=BC=95=E5=85=A5=E7=94=B3=E8=AF=89?= =?UTF-8?q?=E5=8F=8D=E9=A6=88=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/baseUrl.js | 4 +- js_sdk/wa-permission/permission.js | 405 ++++++++++++++++++++++++++++ js_sdk/xb-copy/uni-copy.js | 42 +++ manifest.json | 8 +- pages.json | 7 + pages/bookShop/orderLCont.vue | 2 +- pages/bookShop/settlement.vue | 59 ++-- pages/peanut/mine.vue | 3 + pages/user/workOrder.vue | 417 +++++++++++++++++++++++++++++ 9 files changed, 909 insertions(+), 38 deletions(-) create mode 100644 js_sdk/wa-permission/permission.js create mode 100644 js_sdk/xb-copy/uni-copy.js create mode 100644 pages/user/workOrder.vue diff --git a/config/baseUrl.js b/config/baseUrl.js index 3355af6..548f755 100644 --- a/config/baseUrl.js +++ b/config/baseUrl.js @@ -5,8 +5,8 @@ if (process.env.NODE_ENV === 'development') { // baseUrl = "http://localhost:7001/"; // socketUrl = "ws://localhost:6001/"; // baseUrl = "https://twin-ui.com/demo/"; - // baseUrl = "https://testapi.nuttyreading.com/"; // 线上测试环境 - baseUrl = "https://api.nuttyreading.com/"; // 线上正式 + baseUrl = "https://testapi.nuttyreading.com/"; // 线上测试环境 + // baseUrl = "https://api.nuttyreading.com/"; // 线上正式 // baseUrl = "http://192.168.110.100:9200/pb/"; // 开发用电脑 // baseUrl = "http://59.110.212.44:9200/pb/"; // baseUrl = "http://192.168.110.100:9100/pb/"; // 开发用电脑 diff --git a/js_sdk/wa-permission/permission.js b/js_sdk/wa-permission/permission.js new file mode 100644 index 0000000..6ea8da4 --- /dev/null +++ b/js_sdk/wa-permission/permission.js @@ -0,0 +1,405 @@ +/** + * 本模块封装了Android、iOS的应用权限判断、打开应用权限设置界面、以及位置系统服务是否开启 + */ +var isIos +// #ifdef APP-PLUS +isIos = (plus.os.name == "iOS") +// #endif + +// 判断推送权限是否开启 +function judgeIosPermissionPush() { + var result = false; + var UIApplication = plus.ios.import("UIApplication"); + var app = UIApplication.sharedApplication(); + var enabledTypes = 0; + if (app.currentUserNotificationSettings) { + var settings = app.currentUserNotificationSettings(); + enabledTypes = settings.plusGetAttribute("types"); + console.log("enabledTypes1:" + enabledTypes); + if (enabledTypes == 0) { + console.log("推送权限没有开启"); + } else { + result = true; + console.log("已经开启推送功能!") + } + plus.ios.deleteObject(settings); + } else { + enabledTypes = app.enabledRemoteNotificationTypes(); + if (enabledTypes == 0) { + console.log("推送权限没有开启!"); + } else { + result = true; + console.log("已经开启推送功能!") + } + console.log("enabledTypes2:" + enabledTypes); + } + plus.ios.deleteObject(app); + plus.ios.deleteObject(UIApplication); + return result; +} + +// 判断定位权限是否开启 +function judgeIosPermissionLocation() { + var result = false; + var cllocationManger = plus.ios.import("CLLocationManager"); + var status = cllocationManger.authorizationStatus(); + result = (status != 2) + console.log("定位权限开启:" + result); + // 以下代码判断了手机设备的定位是否关闭,推荐另行使用方法 checkSystemEnableLocation + /* var enable = cllocationManger.locationServicesEnabled(); + var status = cllocationManger.authorizationStatus(); + console.log("enable:" + enable); + console.log("status:" + status); + if (enable && status != 2) { + result = true; + console.log("手机定位服务已开启且已授予定位权限"); + } else { + console.log("手机系统的定位没有打开或未给予定位权限"); + } */ + plus.ios.deleteObject(cllocationManger); + return result; +} + +// 判断麦克风权限是否开启 +function judgeIosPermissionRecord() { + var result = false; + var avaudiosession = plus.ios.import("AVAudioSession"); + var avaudio = avaudiosession.sharedInstance(); + var permissionStatus = avaudio.recordPermission(); + console.log("permissionStatus:" + permissionStatus); + if (permissionStatus == 1684369017 || permissionStatus == 1970168948) { + console.log("麦克风权限没有开启"); + } else { + result = true; + console.log("麦克风权限已经开启"); + } + plus.ios.deleteObject(avaudiosession); + return result; +} + +// 判断相机权限是否开启 +function judgeIosPermissionCamera() { + var result = false; + var AVCaptureDevice = plus.ios.import("AVCaptureDevice"); + var authStatus = AVCaptureDevice.authorizationStatusForMediaType('vide'); + console.log("authStatus:" + authStatus); + if (authStatus == 3) { + result = true; + console.log("相机权限已经开启"); + } else { + console.log("相机权限没有开启"); + } + plus.ios.deleteObject(AVCaptureDevice); + return result; +} + +// 判断相册权限是否开启 +function judgeIosPermissionPhotoLibrary() { + var result = false; + var PHPhotoLibrary = plus.ios.import("PHPhotoLibrary"); + var authStatus = PHPhotoLibrary.authorizationStatus(); + console.log("authStatus:" + authStatus); + if (authStatus == 3) { + result = true; + console.log("相册权限已经开启"); + } else { + console.log("相册权限没有开启"); + } + plus.ios.deleteObject(PHPhotoLibrary); + return result; +} + +// 判断通讯录权限是否开启 +function judgeIosPermissionContact() { + var result = false; + var CNContactStore = plus.ios.import("CNContactStore"); + var cnAuthStatus = CNContactStore.authorizationStatusForEntityType(0); + if (cnAuthStatus == 3) { + result = true; + console.log("通讯录权限已经开启"); + } else { + console.log("通讯录权限没有开启"); + } + plus.ios.deleteObject(CNContactStore); + return result; +} + +// 判断日历权限是否开启 +function judgeIosPermissionCalendar() { + var result = false; + var EKEventStore = plus.ios.import("EKEventStore"); + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(0); + if (ekAuthStatus == 3) { + result = true; + console.log("日历权限已经开启"); + } else { + console.log("日历权限没有开启"); + } + plus.ios.deleteObject(EKEventStore); + return result; +} + +// 判断备忘录权限是否开启 +function judgeIosPermissionMemo() { + var result = false; + var EKEventStore = plus.ios.import("EKEventStore"); + var ekAuthStatus = EKEventStore.authorizationStatusForEntityType(1); + if (ekAuthStatus == 3) { + result = true; + console.log("备忘录权限已经开启"); + } else { + console.log("备忘录权限没有开启"); + } + plus.ios.deleteObject(EKEventStore); + return result; +} + +// Android权限查询 +function requestAndroidPermission(permissionID) { + return new Promise((resolve, reject) => { + plus.android.requestPermissions( + permissionID.split(","), + // [permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装 + function(resultObj) { + var result = 0; + for (var i = 0; i < resultObj.granted.length; i++) { + var grantedPermission = resultObj.granted[i]; + console.log('已获取的权限:' + grantedPermission); + result = 1 + } + for (var i = 0; i < resultObj.deniedPresent.length; i++) { + var deniedPresentPermission = resultObj.deniedPresent[i]; + console.log('拒绝本次申请的权限:' + deniedPresentPermission); + result = 0 + } + for (var i = 0; i < resultObj.deniedAlways.length; i++) { + var deniedAlwaysPermission = resultObj.deniedAlways[i]; + console.log('永久拒绝申请的权限:' + deniedAlwaysPermission); + result = -1 + } + resolve(result); + // 若所需权限被拒绝,则打开APP设置界面,可以在APP设置界面打开相应权限 + // if (result != 1) { + // gotoAppPermissionSetting() + // } + }, + function(error) { + console.log('申请权限错误:' + error.code + " = " + error.message); + resolve({ + code: error.code, + message: error.message + }); + } + ); + }); +} + +// 使用一个方法,根据参数判断权限 +function judgeIosPermission(permissionID) { + if (permissionID == "location") { + return judgeIosPermissionLocation() + } else if (permissionID == "camera") { + return judgeIosPermissionCamera() + } else if (permissionID == "photoLibrary") { + return judgeIosPermissionPhotoLibrary() + } else if (permissionID == "record") { + return judgeIosPermissionRecord() + } else if (permissionID == "push") { + return judgeIosPermissionPush() + } else if (permissionID == "contact") { + return judgeIosPermissionContact() + } else if (permissionID == "calendar") { + return judgeIosPermissionCalendar() + } else if (permissionID == "memo") { + return judgeIosPermissionMemo() + } + return false; +} + +// 跳转到**应用**的权限页面 +function gotoAppPermissionSetting() { + if (isIos) { + var UIApplication = plus.ios.import("UIApplication"); + var application2 = UIApplication.sharedApplication(); + var NSURL2 = plus.ios.import("NSURL"); + // var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES"); + var setting2 = NSURL2.URLWithString("app-settings:"); + application2.openURL(setting2); + + plus.ios.deleteObject(setting2); + plus.ios.deleteObject(NSURL2); + plus.ios.deleteObject(application2); + } else { + // console.log(plus.device.vendor); + var Intent = plus.android.importClass("android.content.Intent"); + var Settings = plus.android.importClass("android.provider.Settings"); + var Uri = plus.android.importClass("android.net.Uri"); + var mainActivity = plus.android.runtimeMainActivity(); + var intent = new Intent(); + intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); + var uri = Uri.fromParts("package", mainActivity.getPackageName(), null); + intent.setData(uri); + mainActivity.startActivity(intent); + } +} + +// 检查系统的设备服务是否开启 +// var checkSystemEnableLocation = async function () { +function checkSystemEnableLocation() { + if (isIos) { + var result = false; + var cllocationManger = plus.ios.import("CLLocationManager"); + var result = cllocationManger.locationServicesEnabled(); + console.log("系统定位开启:" + result); + plus.ios.deleteObject(cllocationManger); + return result; + } else { + var context = plus.android.importClass("android.content.Context"); + var locationManager = plus.android.importClass("android.location.LocationManager"); + var main = plus.android.runtimeMainActivity(); + var mainSvr = main.getSystemService(context.LOCATION_SERVICE); + var result = mainSvr.isProviderEnabled(locationManager.GPS_PROVIDER); + console.log("系统定位开启:" + result); + return result + } +} + +let permissionMap = { + "android": { + "CAMERA_EXTERNAL_STORAGE": { + "name": "android.permission.READ_EXTERNAL_STORAGE,android.permission.WRITE_EXTERNAL_STORAGE,android.permission.CAMERA", + "title": "相机/相册权限说明", + "content": "便于您使用该功能上传您的照片/图片用于上传用户头像、留言上传图片、申诉反馈上传图片等场景中读取和写入相册和文件内容" + }, + "CAMERA": { + "name": "android.permission.CAMERA", + "title": "相机权限说明", + "content": "便于您使用该功能上传您的照片/图片用于上传用户头像、留言上传图片、申诉反馈上传图片等场景中拍摄图片" + }, + // "EXTERNAL_STORAGE": { + // "name": "android.permission.READ_EXTERNAL_STORAGE,android.permission.WRITE_EXTERNAL_STORAGE", + // "title": "相册权限说明", + // "content": "便于您使用该功能上传您的照片/图片/视频及用于上传工单故障、维修图片、扫码识别设备等信息、意见反馈上传图片、上传设备、客户、设备图片等场景中读取和写入相册和文件内容" + // }, + // "LOCATION": { + // "name": "android.location.LocationManager", + // "title": "定位权限说明", + // "content": "便于您使用该功能定位您当前的位置,并上报当前位置给服务器,来智能得按照当前位置给您分配距离您最近的工单信息等功能" + // }, + // "CALLPHONE": { + // "name": "android.permission.CALL_PHONE", + // "title": "拨打电话权限说明", + // "content": "便于您使用该功能能够快速和提交工单信息的客户进行联系并进行及时处理" + // }, + }, + "ios": {} +} + +let view = null; +let viewShow = false; + +function showViewDesc(permission) { + let plat = isIos ? "ios" : "android"; + view = new plus.nativeObj.View('per-modal', { + top: '0px', + left: '0px', + width: '100%', + backgroundColor: 'rgba(0,0,0,0.4)', + //opacity: '.9' + }) + view.drawRect({ + color: '#fff', + radius: '5px' + }, { + top: '170px', + left: '5%', + width: '90%', + height: "150px", + }) + view.drawText(permissionMap[plat][permission]["title"], { + top: '180px', + left: "8%", + height: "30px" + }, { + align: "left", + color: "#000", + }, { + onClick: function(e) { + console.log(e); + } + }) + view.drawText(permissionMap[plat][permission]["content"], { + top: '210px', + height: "80px", + left: "8%", + width: "84%" + }, { + whiteSpace: 'normal', + size: "14px", + align: "left", + color: "#656563" + }) + setTimeout(()=>{ + view.show() + },200) +} + +function premissionCheck(permission) { + return new Promise(async (resolve, reject) => { + let plat = isIos ? "ios" : "android"; + if (isIos) { // ios + // const camera = permission.judgeIosPermission("camera");//判断ios是否给予摄像头权限 + // //ios相册没权限,系统会自动弹出授权框 + // //let photoLibrary = permission.judgeIosPermission("photoLibrary");//判断ios是否给予相册权限 + // if(camera){ + // resolve(); + // }else{ + // reject('需要开启相机使用权限'); + // } + resolve(1) + } else { // android + let permission_arr = permissionMap[plat][permission]["name"].split(","); + + let flag = true; + for(let i = 0;i { + viewShow = false; + setTimeout(()=>{ + viewShow = true; + },120) + view.close(); + // if (res == -1) { + // uni.showModal({ + // title: '提示', + // content: '操作权限已被拒绝,请手动前往设置', + // confirmText: "立即设置", + // success: (res) => { + // if (res.confirm) { + // gotoAppPermissionSetting() + // } + // } + // }) + // } + resolve(res) + }) + } else { + resolve(1) + } + } + }) +} + +module.exports = { + judgeIosPermission: judgeIosPermission, + requestAndroidPermission: requestAndroidPermission, + checkSystemEnableLocation: checkSystemEnableLocation, + gotoAppPermissionSetting: gotoAppPermissionSetting, + premissionCheck: premissionCheck +} diff --git a/js_sdk/xb-copy/uni-copy.js b/js_sdk/xb-copy/uni-copy.js new file mode 100644 index 0000000..6ceb604 --- /dev/null +++ b/js_sdk/xb-copy/uni-copy.js @@ -0,0 +1,42 @@ +export default function uniCopy({content,success,error}) { + if(!content) return error('复制的内容不能为空 !') + content = typeof content === 'string' ? content : content.toString() // 复制内容,必须字符串,数字需要转换为字符串 + /** + * 小程序端 和 app端的复制逻辑 + */ + //#ifndef H5 + uni.setClipboardData({ + data: content, + success: function() { + success("复制成功~") + console.log('success'); + }, + fail:function(){ + success("复制失败~") + } + }); + //#endif + + /** + * H5端的复制逻辑 + */ + // #ifdef H5 + if (!document.queryCommandSupported('copy')) { //为了兼容有些浏览器 queryCommandSupported 的判断 + // 不支持 + error('浏览器不支持') + } + let textarea = document.createElement("textarea") + textarea.value = content + textarea.readOnly = "readOnly" + document.body.appendChild(textarea) + textarea.select() // 选择对象 + textarea.setSelectionRange(0, content.length) //核心 + let result = document.execCommand("copy") // 执行浏览器复制命令 + if(result){ + success("复制成功~") + }else{ + error("复制失败,请检查h5中调用该方法的方式,是不是用户点击的方式调用的,如果不是请改为用户点击的方式触发该方法,因为h5中安全性,不能js直接调用!") + } + textarea.remove() + // #endif +} diff --git a/manifest.json b/manifest.json index 5ad9622..d2f049d 100644 --- a/manifest.json +++ b/manifest.json @@ -12,8 +12,8 @@ "src" : "图片路径" } ], - "versionName" : "1.2.51", - "versionCode" : 1251, + "versionName" : "1.2.52", + "versionCode" : 1252, "app-plus" : { "compatible" : { "ignoreVersion" : true @@ -120,8 +120,8 @@ "urltypes" : "nuttyreading", "urlschemewhitelist" : "everhealth,medicine,zmzm", "privacyDescription" : { - "NSPhotoLibraryUsageDescription" : "为了给您提供修改头像的功能", - "NSCameraUsageDescription" : "为了给您提供修改头像的功能" + "NSPhotoLibraryUsageDescription" : "为了给您提供修改头像、申诉反馈的图片上传", + "NSCameraUsageDescription" : "为了给您提供修改头像、申诉反馈的图片上传" } }, "icons" : { diff --git a/pages.json b/pages.json index 00a5fe7..4659840 100644 --- a/pages.json +++ b/pages.json @@ -616,6 +616,13 @@ { "navigationBarTitleText" : "新闻播报webView" } + }, + { + "path": "pages/user/workOrder", + "style": { + "navigationBarTitleText": "申诉反馈", + "enablePullDownRefresh": true + } } // { // "path": "pages/agreement/yszcPage", diff --git a/pages/bookShop/orderLCont.vue b/pages/bookShop/orderLCont.vue index 6062111..10cc9f9 100644 --- a/pages/bookShop/orderLCont.vue +++ b/pages/bookShop/orderLCont.vue @@ -3,7 +3,7 @@ - + {{orderContet.consignee.consigneeName}} diff --git a/pages/bookShop/settlement.vue b/pages/bookShop/settlement.vue index 346e00c..2b842b9 100644 --- a/pages/bookShop/settlement.vue +++ b/pages/bookShop/settlement.vue @@ -72,26 +72,26 @@ - + - - {{item.title}} - {{userMes.peanutCoin}}天医币可用 - 去充值 - + + {{item.title}} + {{userMes.peanutCoin}}天医币可用 + 去充值 + - + @@ -244,7 +244,7 @@ isSend: '0', farePrice: 0, realPrice: 0, - payType: 1, + payType:null, nowClick: true, paylist: [{ title: '支付宝', @@ -267,26 +267,22 @@ // img: '../../static/icon/pay_2.png' // } ], - paylistIos: [{ - title: '支付宝', - id: 2, - img: '../../static/icon/pay_1.png' - }, - { - title: '微信', - id: 1, - img: '../../static/icon/pay_2.png' - }, + paylistIos: [ // { - // title: '天医币购买', - // id: 4, - // img: '../../static/icon/oder_chong.png' + // title: '支付宝', + // id: 2, + // img: '../../static/icon/pay_1.png' // }, // { - // title: 'ios内购', - // id: 3, + // title: '微信', + // id: 1, // img: '../../static/icon/pay_2.png' - // } + // }, + { + title: '天医币购买', + id: 4, + img: '../../static/icon/oder_chong.png' + } ], } }, @@ -299,7 +295,6 @@ this.shangIDNum = e.list } // this.getYunFei() - this.getData() this.getOS() }, @@ -315,11 +310,11 @@ } else if (this.typeId == 0) { this.getShangList(this.shangIDNum); - } + } // this.getUserAddress() }, computed: { - ...mapState(['userInfo']), + ...mapState(['userInfo']), }, components: { musicPlay @@ -332,8 +327,10 @@ // console.log(oprateOs) if (oprateOs == 'android') { this.isAndorid = true + this.payType = 1 } else { this.isAndorid = false + this.payType = 4 } }, // 充值天医币 diff --git a/pages/peanut/mine.vue b/pages/peanut/mine.vue index 61206e3..8c1f881 100644 --- a/pages/peanut/mine.vue +++ b/pages/peanut/mine.vue @@ -118,6 +118,9 @@ 关于我们 + + 问题反馈/申诉 + 退出登录 diff --git a/pages/user/workOrder.vue b/pages/user/workOrder.vue new file mode 100644 index 0000000..b0fc4d3 --- /dev/null +++ b/pages/user/workOrder.vue @@ -0,0 +1,417 @@ +