From 23daffe0fb9755e311086a05f34eb22eff951d6c Mon Sep 17 00:00:00 2001 From: mixtan <424491071@qq.com> Date: Sat, 16 Aug 2025 13:36:26 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E4=BF=AE=E5=A4=8D=E5=8D=8E=E4=B8=BA?= =?UTF-8?q?=E6=89=8B=E6=9C=BA=E6=89=93=E7=94=B5=E8=AF=9D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.hbuilderx/launch.json | 6 +- java-mall-app-shop-admin/manifest.json | 330 +++++++++--------- .../pages/order/components/OrderItem.vue | 43 ++- .../order/components/retrunOrderItem.vue | 41 ++- java-mall-app-shop-admin/utils/callPhone.js | 90 +++++ 5 files changed, 311 insertions(+), 199 deletions(-) create mode 100644 java-mall-app-shop-admin/utils/callPhone.js diff --git a/java-mall-app-shop-admin/.hbuilderx/launch.json b/java-mall-app-shop-admin/.hbuilderx/launch.json index 131b491..1af9410 100644 --- a/java-mall-app-shop-admin/.hbuilderx/launch.json +++ b/java-mall-app-shop-admin/.hbuilderx/launch.json @@ -4,6 +4,9 @@ "version" : "0.0", "configurations" : [ { + "app" : { + "launchtype" : "local" + }, "app-plus" : { "launchtype" : "remote" }, @@ -20,7 +23,8 @@ "type" : "uniCloud" }, { - "playground" : "custom", + "customPlaygroundType" : "device", + "playground" : "standard", "type" : "uni-app:app-android" }, { diff --git a/java-mall-app-shop-admin/manifest.json b/java-mall-app-shop-admin/manifest.json index 46d6dad..09109f7 100644 --- a/java-mall-app-shop-admin/manifest.json +++ b/java-mall-app-shop-admin/manifest.json @@ -1,172 +1,174 @@ { - "name": "小发同城", - "appid": "__UNI__95F809F", - "package": "com.xiaofa.shopAdmin", - "description": "", - "versionName": "1.0.0", - "versionCode": 100, - "transformPx": false, - /* 5+App特有相关 */ - "app-plus": { - "usingComponents": true, - "nvueStyleCompiler": "uni-app", - "compilerVersion": 3, - "splashscreen": { - "alwaysShowBeforeRender": true, - "waiting": true, - "autoclose": true, - "delay": 0 - }, - /* 模块配置 */ - "modules": { - "Maps": {}, - "Camera": {}, - "Record": {}, - "VideoPlayer": {}, - "UIWebview": {}, - "Push": {} - }, - /* 应用发布信息 */ - "distribute": { - /* android打包配置 */ - "android": { - "targetSdkVersion": 30, - "minSdkVersion": 21, - "compileSdkVersion": 30, - "permissions": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "" - ] - }, - /* ios打包配置 */ - "ios": { - "privacyDescription": { - "NSPhotoLibraryAddUsageDescription": "此App会在上传头像图片服务中访问您的相机权限", - "NSPhotoLibraryUsageDescription": "此App会在上传头像图片服务中访问您的相机权限", - "NSCameraUsageDescription": "此App会在上传头像图片服务中访问您的相机权限", - "NSMicrophoneUsageDescription": "此APP会在使用声音识别服务中使用您的麦克风权限", - "NSLocationWhenInUseUsageDescription": "此App会在使用导航服务中使用您的定位权限", - "NSLocationAlwaysUsageDescription": "此App会在使用导航服务中使用您的定位权限", - "NSLocationAlwaysAndWhenInUseUsageDescription": "此App会在使用导航服务中使用您的定位权限" + "name" : "小发同城", + "appid" : "__UNI__95F809F", + "package" : "com.xiaofa.shopAdmin", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : 100, + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 }, - "dSYMs": false, - "UIBackgroundModes": "audio" - }, - /* SDK配置 */ - "sdkConfigs": { - "maps": {}, - "push": { - "unipush": { - "version": "2", - "offline": false, - "appid": "rQxaGAKl7t83KlTubAaKC3", - "appkey": "QSElTn6ttq5nmrIZtFhCT" - } - } - }, - "icons": { - "android": { - "hdpi": "unpackage/res/icons/72x72.png", - "xhdpi": "unpackage/res/icons/96x96.png", - "xxhdpi": "unpackage/res/icons/144x144.png", - "xxxhdpi": "unpackage/res/icons/192x192.png" + /* 模块配置 */ + "modules" : { + "Maps" : {}, + "Camera" : {}, + "Record" : {}, + "VideoPlayer" : {}, + "UIWebview" : {}, + "Push" : {} }, - "ios": { - "appstore": "unpackage/res/icons/1024x1024.png", - "ipad": { - "app": "unpackage/res/icons/76x76.png", - "app@2x": "unpackage/res/icons/152x152.png", - "notification": "unpackage/res/icons/20x20.png", - "notification@2x": "unpackage/res/icons/40x40.png", - "proapp@2x": "unpackage/res/icons/167x167.png", - "settings": "unpackage/res/icons/29x29.png", - "settings@2x": "unpackage/res/icons/58x58.png", - "spotlight": "unpackage/res/icons/40x40.png", - "spotlight@2x": "unpackage/res/icons/80x80.png" - }, - "iphone": { - "app@2x": "unpackage/res/icons/120x120.png", - "app@3x": "unpackage/res/icons/180x180.png", - "notification@2x": "unpackage/res/icons/40x40.png", - "notification@3x": "unpackage/res/icons/60x60.png", - "settings@2x": "unpackage/res/icons/58x58.png", - "settings@3x": "unpackage/res/icons/87x87.png", - "spotlight@2x": "unpackage/res/icons/80x80.png", - "spotlight@3x": "unpackage/res/icons/120x120.png" - } + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "targetSdkVersion" : 30, + "minSdkVersion" : 21, + "compileSdkVersion" : 30, + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : { + "privacyDescription" : { + "NSPhotoLibraryAddUsageDescription" : "此App会在上传头像图片服务中访问您的相机权限", + "NSPhotoLibraryUsageDescription" : "此App会在上传头像图片服务中访问您的相机权限", + "NSCameraUsageDescription" : "此App会在上传头像图片服务中访问您的相机权限", + "NSMicrophoneUsageDescription" : "此APP会在使用声音识别服务中使用您的麦克风权限", + "NSLocationWhenInUseUsageDescription" : "此App会在使用导航服务中使用您的定位权限", + "NSLocationAlwaysUsageDescription" : "此App会在使用导航服务中使用您的定位权限", + "NSLocationAlwaysAndWhenInUseUsageDescription" : "此App会在使用导航服务中使用您的定位权限" + }, + "dSYMs" : false, + "UIBackgroundModes" : "audio" + }, + /* SDK配置 */ + "sdkConfigs" : { + "maps" : {}, + "push" : { + "unipush" : { + "version" : "2", + "offline" : false, + "appid" : "rQxaGAKl7t83KlTubAaKC3", + "appkey" : "QSElTn6ttq5nmrIZtFhCT" + } + } + }, + "icons" : { + "android" : { + "hdpi" : "unpackage/res/icons/72x72.png", + "xhdpi" : "unpackage/res/icons/96x96.png", + "xxhdpi" : "unpackage/res/icons/144x144.png", + "xxxhdpi" : "unpackage/res/icons/192x192.png" + }, + "ios" : { + "appstore" : "unpackage/res/icons/1024x1024.png", + "ipad" : { + "app" : "unpackage/res/icons/76x76.png", + "app@2x" : "unpackage/res/icons/152x152.png", + "notification" : "unpackage/res/icons/20x20.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "proapp@2x" : "unpackage/res/icons/167x167.png", + "settings" : "unpackage/res/icons/29x29.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "spotlight" : "unpackage/res/icons/40x40.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png" + }, + "iphone" : { + "app@2x" : "unpackage/res/icons/120x120.png", + "app@3x" : "unpackage/res/icons/180x180.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "notification@3x" : "unpackage/res/icons/60x60.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "settings@3x" : "unpackage/res/icons/87x87.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png", + "spotlight@3x" : "unpackage/res/icons/120x120.png" + } + } + }, + "splashscreen" : { + "androidStyle" : "default", + "useOriginalMsgbox" : true + } + }, + "uniStatistics" : { + "enable" : true } - }, - "splashscreen": { - "androidStyle": "default", - "useOriginalMsgbox": true - } }, - "uniStatistics": { - "enable": true - } - }, - /* 快应用特有相关 */ - "quickapp": {}, - /* 小程序特有相关 */ - "mp-weixin": { - "appid": "", - "setting": { - "urlCheck": false + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true }, - "usingComponents": true - }, - "h5": { - // "devServer" : { - // "https" : true, - // "host" : "127.0.0.1", - // "port" : 8080, - // "disableHostCheck" : true, - // "proxy" : { - // "/place/v2/suggestion" : { - // "target" : "https://api.map.baidu.com", - // "changeOrigin" : true, - // "secure" : false - // }, - // "/admin/shop/shop-base-product-category/list" : { - // "target" : "https://mall.gpxscs.cn", - // "changeOrigin" : true - // } - // } - // }, - "title": "小发商城商家中心", - "template": "index.html", - "router": { - "mode": "history", - "base": "/mchapp/" - } - }, - "mp-alipay": { - "usingComponents": true - }, - "mp-baidu": { - "usingComponents": true - }, - "mp-toutiao": { - "usingComponents": true - }, - "uniStatistics": { - "enable": false, - "version": "2" - }, - "vueVersion": "2", - "fallbackLocale": "zh-Hans" + "h5" : { + // "devServer" : { + // "https" : true, + // "host" : "127.0.0.1", + // "port" : 8080, + // "disableHostCheck" : true, + // "proxy" : { + // "/place/v2/suggestion" : { + // "target" : "https://api.map.baidu.com", + // "changeOrigin" : true, + // "secure" : false + // }, + // "/admin/shop/shop-base-product-category/list" : { + // "target" : "https://mall.gpxscs.cn", + // "changeOrigin" : true + // } + // } + // }, + "title" : "小发商城商家中心", + "template" : "index.html", + "router" : { + "mode" : "history", + "base" : "/mchapp/" + } + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false, + "version" : "2" + }, + "vueVersion" : "2", + "fallbackLocale" : "zh-Hans" } /* 5+App特有相关 */ + diff --git a/java-mall-app-shop-admin/pages/order/components/OrderItem.vue b/java-mall-app-shop-admin/pages/order/components/OrderItem.vue index b6f0ad1..66fd700 100644 --- a/java-mall-app-shop-admin/pages/order/components/OrderItem.vue +++ b/java-mall-app-shop-admin/pages/order/components/OrderItem.vue @@ -465,6 +465,12 @@ import { GetInitiativeOrderRefund, GetOrderPicking, } from "@/api/order"; + +import { + makePhoneCall, +} from "@/utils/callPhone"; + + export default { props: { orderItem: { @@ -656,24 +662,27 @@ export default { ); }, makePhone(phone) { - // #ifdef H5 - uni.showToast({ - title: "H5环境不支持", - icon: "none", - }); - // #endif + console.log(makePhoneCall); + + makePhoneCall(phone) + // // #ifdef H5 + // uni.showToast({ + // title: "H5环境不支持", + // icon: "none", + // }); + // // #endif - // #ifdef APP-PLUS - uni.makePhoneCall({ - phoneNumber: phone, - success: function () { - console.log("拨打电话成功"); - }, - fail: function () { - console.log("拨打电话失败"); - }, - }); - // #endif + // // #ifdef APP-PLUS + // uni.makePhoneCall({ + // phoneNumber: phone, + // success: function () { + // console.log("拨打电话成功"); + // }, + // fail: function () { + // console.log("拨打电话失败"); + // }, + // }); + // // #endif }, copy(num, type) { uni.setClipboardData({ diff --git a/java-mall-app-shop-admin/pages/order/components/retrunOrderItem.vue b/java-mall-app-shop-admin/pages/order/components/retrunOrderItem.vue index b203ff1..e965d5a 100644 --- a/java-mall-app-shop-admin/pages/order/components/retrunOrderItem.vue +++ b/java-mall-app-shop-admin/pages/order/components/retrunOrderItem.vue @@ -280,6 +280,12 @@ import { } from "@/api/order"; import tuiRadio from "@/components/tui-radio/tui-radio.vue"; import tuiRadioGroup from "@/components/tui-radio-group/tui-radio-group.vue"; + +import { + makePhoneCall, +} from "@/utils/callPhone"; + + export default { props: { orderItem: { @@ -468,24 +474,25 @@ export default { this.returnOrderType = type; }, makePhone(phone) { - // #ifdef H5 - uni.showToast({ - title: "H5环境不支持", - icon: "none", - }); - // #endif + makePhoneCall(phone) + // // #ifdef H5 + // uni.showToast({ + // title: "H5环境不支持", + // icon: "none", + // }); + // // #endif - // #ifdef APP-PLUS - uni.makePhoneCall({ - phoneNumber: phone, - success: function () { - console.log("拨打电话成功"); - }, - fail: function () { - console.log("拨打电话失败"); - }, - }); - // #endif + // // #ifdef APP-PLUS + // uni.makePhoneCall({ + // phoneNumber: phone, + // success: function () { + // console.log("拨打电话成功"); + // }, + // fail: function () { + // console.log("拨打电话失败"); + // }, + // }); + // // #endif }, copy(num, type) { uni.setClipboardData({ diff --git a/java-mall-app-shop-admin/utils/callPhone.js b/java-mall-app-shop-admin/utils/callPhone.js new file mode 100644 index 0000000..591a476 --- /dev/null +++ b/java-mall-app-shop-admin/utils/callPhone.js @@ -0,0 +1,90 @@ +// 动态请求打电话权限(通用方法) +export function requestCallPermission() { + return new Promise((resolve, reject) => { + if (uni.getSystemInfoSync().platform !== 'android') { + // 非安卓设备直接返回(如iOS不需要此权限) + resolve(true); + return; + } + + plus.android.requestPermissions( + ["android.permission.CALL_PHONE"], + (result) => { + const granted = result.granted || []; + const deniedAlways = result.deniedAlways || []; + + if (granted.includes("android.permission.CALL_PHONE")) { + resolve(true); + } else if (deniedAlways.length > 0) { + // 永久拒绝,引导至设置页 + uni.showModal({ + title: "权限不足", + content: "请在设置中开启电话权限以使用拨号功能", + confirmText: "去设置", + success: (res) => { + if (res.confirm) { + plus.runtime.openURL("app-settings:"); + } + resolve(false); + } + }); + } else { + // 临时拒绝,提示用户 + uni.showToast({ title: "需要电话权限才能拨号", icon: "none" }); + resolve(false); + } + }, + (err) => { + console.error("权限请求失败:", err); + resolve(false); + } + ); + }); +} + +// 判断是否为华为设备 +export function isHuaweiDevice() { + return new Promise((resolve) => { + uni.getSystemInfo({ + success: (res) => { + const brand = (res.brand || '').toLowerCase(); + resolve(brand.includes('huawei')); + }, + fail: () => resolve(false) + }); + }); +} + +// 统一拨号入口(根据设备类型选择方式) +export async function makePhoneCall(phoneNumber) { + if (!phoneNumber) { + uni.showToast({ title: "请输入正确的手机号", icon: "none" }); + return; + } + + // 先请求权限 + const hasPermission = await requestCallPermission(); + if (!hasPermission) return; + + // 判断设备类型 + const isHuawei = await isHuaweiDevice(); + + try { + if (isHuawei) { + // 华为设备使用plus原生API,显示拨号界面(避免直接拨号失败) + plus.device.dial(phoneNumber, false); + } else { + // 其他设备使用uni标准API + uni.makePhoneCall({ + phoneNumber: phoneNumber, + fail: (err) => { + console.error("拨号失败:", err); + uni.showToast({ title: "拨号失败,请重试", icon: "none" }); + } + }); + } + } catch (err) { + console.error("拨号异常:", err); + uni.showToast({ title: "系统不支持该操作", icon: "none" }); + } +} \ No newline at end of file