diff --git a/.env b/.env index e5a31ef..e434bb8 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ SHOPRO_VERSION=v2.3.0 # 后端接口 - 正式环境(通过 process.env.NODE_ENV 非 development) -SHOPRO_BASE_URL = http://api.jnmall.zq-hightech.com +SHOPRO_BASE_URL = http://delivery-test.huichibao.com # 后端接口 - 测试环境(通过 process.env.NODE_ENV = development) # SHOPRO_DEV_BASE_URL = https://icepacker.52cfzy.com diff --git a/manifest.json b/manifest.json index 5395225..bede7af 100644 --- a/manifest.json +++ b/manifest.json @@ -1,261 +1,243 @@ { - "name": "云南江楠商城", - "appid": "__UNI__4E984D1", - "description": "基于 uni-app + Vue3 技术驱动的在线商城系统,内含诸多功能与丰富的活动,期待您的使用和反馈。", - "versionName": "2.1.0", - "versionCode": "183", - "transformPx": false, - "app-plus": { - "usingComponents": true, - "nvueCompiler": "uni-app", - "nvueStyleCompiler": "uni-app", - "compilerVersion": 3, - "nvueLaunchMode": "fast", - "splashscreen": { - "alwaysShowBeforeRender": true, - "waiting": true, - "autoclose": true, - "delay": 0 - }, - "safearea": { - "bottom": { - "offset": "none" - } - }, - "modules": { - "Payment": {}, - "Share": {}, - "VideoPlayer": {}, - "OAuth": {}, - "Maps": {}, - "Barcode": {}, - "Camera": {}, - "Geolocation": {} - }, - "distribute": { - "android": { - "permissions": [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "" - ], - "minSdkVersion": 21, - "schemes": "shopro" - }, - "ios": { - "urlschemewhitelist": [ - "baidumap", - "iosamap" - ], - "dSYMs": false, - "privacyDescription": { - "NSPhotoLibraryUsageDescription": "需要同意访问您的相册选取图片才能完善该条目", - "NSPhotoLibraryAddUsageDescription": "需要同意访问您的相册才能保存该图片", - "NSCameraUsageDescription": "需要同意访问您的摄像头拍摄照片才能完善该条目", - "NSUserTrackingUsageDescription": "开启追踪并不会获取您在其它站点的隐私信息,该行为仅用于标识设备,保障服务安全和提升浏览体验" + "name" : "惠吃宝骑手端", + "appid" : "__UNI__4E984D1", + "description" : "基于 uni-app + Vue3 技术驱动的在线商城系统,内含诸多功能与丰富的活动,期待您的使用和反馈。", + "versionName" : "2.1.0", + "versionCode" : "183", + "transformPx" : false, + "app-plus" : { + "usingComponents" : true, + "nvueCompiler" : "uni-app", + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "nvueLaunchMode" : "fast", + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 }, - "urltypes": "shopro", - "capabilities": { - "entitlements": { - "com.apple.developer.associated-domains": [ - "applinks:shopro.sheepjs.com" - ] - } + "safearea" : { + "bottom" : { + "offset" : "none" + } }, - "idfa": true - }, - "sdkConfigs": { - "speech": { - "ifly": {} + "modules" : { + "Payment" : {}, + "Share" : {}, + "VideoPlayer" : {}, + "OAuth" : {}, + "Maps" : {}, + "Barcode" : {}, + "Camera" : {}, + "Geolocation" : {} }, - "ad": {}, - "oauth": { - "apple": {}, - "weixin": { - "appid": "wxae7a0c156da9383b", - "UniversalLinks": "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/" - } - }, - "payment": { - "weixin": { - "__platform__": [ - "ios", - "android" - ], - "appid": "wxae7a0c156da9383b", - "UniversalLinks": "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/" - }, - "alipay": { - "__platform__": [ - "ios", - "android" - ] - } - }, - "share": { - "weixin": { - "appid": "wxae7a0c156da9383b", - "UniversalLinks": "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/" - } - }, - "maps": { - "amap": { - "name": "amapAvsftDYzi", - "appkey_ios": "2ead091d2fc2cdfec417d49aecf00c8b", - "appkey_android": "5a660b94974d7f3c62b257e8368893fa" - } - }, - "geolocation": { - "system": { - "__platform__": [ - "ios", - "android" - ] - } + "distribute" : { + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "minSdkVersion" : 21, + "schemes" : "shopro" + }, + "ios" : { + "urlschemewhitelist" : [ "baidumap", "iosamap" ], + "dSYMs" : false, + "privacyDescription" : { + "NSPhotoLibraryUsageDescription" : "需要同意访问您的相册选取图片才能完善该条目", + "NSPhotoLibraryAddUsageDescription" : "需要同意访问您的相册才能保存该图片", + "NSCameraUsageDescription" : "需要同意访问您的摄像头拍摄照片才能完善该条目", + "NSUserTrackingUsageDescription" : "开启追踪并不会获取您在其它站点的隐私信息,该行为仅用于标识设备,保障服务安全和提升浏览体验" + }, + "urltypes" : "shopro", + "capabilities" : { + "entitlements" : { + "com.apple.developer.associated-domains" : [ "applinks:shopro.sheepjs.com" ] + } + }, + "idfa" : true + }, + "sdkConfigs" : { + "speech" : { + "ifly" : {} + }, + "ad" : {}, + "oauth" : { + "apple" : {}, + "weixin" : { + "appid" : "wxae7a0c156da9383b", + "UniversalLinks" : "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/" + } + }, + "payment" : { + "weixin" : { + "__platform__" : [ "ios", "android" ], + "appid" : "wxae7a0c156da9383b", + "UniversalLinks" : "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/" + }, + "alipay" : { + "__platform__" : [ "ios", "android" ] + } + }, + "share" : { + "weixin" : { + "appid" : "wxae7a0c156da9383b", + "UniversalLinks" : "https://shopro.sheepjs.com/uni-universallinks/__UNI__082C0BA/" + } + }, + "maps" : { + "amap" : { + "name" : "amapAvsftDYzi", + "appkey_ios" : "2ead091d2fc2cdfec417d49aecf00c8b", + "appkey_android" : "5a660b94974d7f3c62b257e8368893fa" + } + }, + "geolocation" : { + "system" : { + "__platform__" : [ "ios", "android" ] + } + } + }, + "orientation" : [ "portrait-primary" ], + "splashscreen" : { + "androidStyle" : "common", + "iosStyle" : "common", + "useOriginalMsgbox" : true + }, + "icons" : { + "android" : { + "hdpi" : "", + "xhdpi" : "", + "xxhdpi" : "", + "xxxhdpi" : "" + }, + "ios" : { + "appstore" : "", + "ipad" : { + "app" : "", + "app@2x" : "", + "notification" : "", + "notification@2x" : "", + "proapp@2x" : "", + "settings" : "", + "settings@2x" : "", + "spotlight" : "", + "spotlight@2x" : "" + }, + "iphone" : { + "app@2x" : "", + "app@3x" : "", + "notification@2x" : "", + "notification@3x" : "", + "settings@2x" : "", + "settings@3x" : "", + "spotlight@2x" : "", + "spotlight@3x" : "" + } + } + } } - }, - "orientation": [ - "portrait-primary" - ], - "splashscreen": { - "androidStyle": "common", - "iosStyle": "common", - "useOriginalMsgbox": true - }, - "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" + }, + "quickapp" : {}, + "quickapp-native" : { + "icon" : "/static/logo.png", + "package" : "com.example.demo", + "features" : [ + { + "name" : "system.clipboard" + } + ] + }, + "quickapp-webview" : { + "icon" : "/static/logo.png", + "package" : "com.example.demo", + "minPlatformVersion" : 1070, + "versionName" : "1.0.0", + "versionCode" : 100 + }, + "mp-weixin" : { + "appid" : "wxfcfcbdebfb0d99ad", + "setting" : { + "urlCheck" : false, + "minified" : true, + "postcss" : false, + "es6" : false, + "mergeVirtualHostAttributes" : true }, - "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" - } + "optimization" : { + "subPackages" : true + }, + "plugins" : {}, + "lazyCodeLoading" : "requiredComponents", + "usingComponents" : {}, + "permission" : {}, + "requiredPrivateInfos" : [ "chooseAddress" ] + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true, + "mergeVirtualHostAttributes" : true + }, + "mp-jd" : { + "usingComponents" : true + }, + "h5" : { + "template" : "index.html", + "router" : { + "mode" : "history", + "base" : "/" + }, + "sdkConfigs" : { + "maps" : {} + }, + "async" : { + "timeout" : 20000 + }, + "title" : "惠吃宝骑手端", + "optimization" : { + "treeShaking" : { + "enable" : true + } } - } - } - }, - "quickapp": {}, - "quickapp-native": { - "icon": "/static/logo.png", - "package": "com.example.demo", - "features": [ - { - "name": "system.clipboard" - } - ] - }, - "quickapp-webview": { - "icon": "/static/logo.png", - "package": "com.example.demo", - "minPlatformVersion": 1070, - "versionName": "1.0.0", - "versionCode": 100 - }, - "mp-weixin": { - "appid": "wxfcfcbdebfb0d99ad", - "setting": { - "urlCheck": false, - "minified": true, - "postcss": false, - "es6": false, - "mergeVirtualHostAttributes": true }, - "optimization": { - "subPackages": true - }, - "plugins": {}, - "lazyCodeLoading": "requiredComponents", - "usingComponents": {}, - "permission": {}, - "requiredPrivateInfos": [ - "chooseAddress" - ] - }, - "mp-alipay": { - "usingComponents": true - }, - "mp-baidu": { - "usingComponents": true - }, - "mp-toutiao": { - "usingComponents": true, - "mergeVirtualHostAttributes": true - }, - "mp-jd": { - "usingComponents": true - }, - "h5": { - "template": "index.html", - "router": { - "mode": "history", - "base": "/" - }, - "sdkConfigs": { - "maps": {} - }, - "async": { - "timeout": 20000 - }, - "title": "惠吃宝骑手端", - "optimization": { - "treeShaking": { - "enable": true - } - } - }, - "vueVersion": "3", - "_spaceID": "192b4892-5452-4e1d-9f09-eee1ece40639", - "locale": "zh-Hans", - "fallbackLocale": "zh-Hans" -} \ No newline at end of file + "vueVersion" : "3", + "_spaceID" : "192b4892-5452-4e1d-9f09-eee1ece40639", + "locale" : "zh-Hans", + "fallbackLocale" : "zh-Hans" +} diff --git a/pages.json b/pages.json index a88045e..c3a25e9 100644 --- a/pages.json +++ b/pages.json @@ -233,8 +233,8 @@ }, { "pagePath": "pages/index/user", - "iconPath": "static/img/edit.png", - "selectedIconPath": "static/img/edit.png", + "iconPath": "static/img/account.png", + "selectedIconPath": "static/img/account-fill.png", "text": "个人中心" } ] diff --git a/pages/index/components/delivery-popup.vue b/pages/index/components/delivery-popup.vue new file mode 100644 index 0000000..83c5a87 --- /dev/null +++ b/pages/index/components/delivery-popup.vue @@ -0,0 +1,298 @@ + + + + + diff --git a/pages/index/components/order-code-popup.vue b/pages/index/components/order-code-popup.vue index 85fb0f8..f31fb87 100644 --- a/pages/index/components/order-code-popup.vue +++ b/pages/index/components/order-code-popup.vue @@ -10,7 +10,7 @@ - + @@ -23,7 +23,7 @@ 🏬 取货点店铺名称 - {{ pickupName }} + 取货店铺详细地址:{{ pickupName }} @@ -45,20 +45,22 @@ 交接备注: - {{ selectedRemarkText }} + {{ selectedRemarkText || '请选择交接备注' }} 凭证: - - - - - - + - + @@ -74,6 +76,10 @@ @@ -212,6 +389,7 @@ border: 1rpx solid #ddd; padding: 0 20rpx; border-radius: 6rpx; + font-size: 22rpx; } .search-btn { diff --git a/pages/index/index.vue b/pages/index/index.vue index 6d1dbe7..6650b8f 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -5,14 +5,16 @@ - @@ -61,14 +63,14 @@ {{ order.deliveryAddress }} 收货人:{{ order.receiverName }} {{ order.receiverPhone ? ('尾号' + (order.receiverPhone + '').slice(-4)) : ''}} - 导航 + 导航 - + 联系 @@ -77,15 +79,55 @@ 确认取餐 + + 送达交接点 + + + 确认送达顾客 + + + + + + 联系商家 + 拨打电话 + + + 联系顾客 + 拨打电话 + + + + + 批量操作 扫一扫取单 输入用户单编码 + + + + + + + + + @@ -95,13 +137,10 @@ import sheep from '@/sheep'; import { onShow } from '@dcloudio/uni-app'; import OrderCodePopup from './components/order-code-popup.vue'; import DeliveryOrderApi from '@/sheep/api/member/deliveryOrder'; +import DeliveryPopup from './components/delivery-popup.vue'; -// 驿站/骑手信息(从 store 获取或 mock) -const driverInfo = ref({ - isOnline: true, - nickName: '骑手张三', - avatar: '' -}); +//骑手信息 +const driverInfo = computed(() => sheep.$store('user').userInfo); const defaultAvatar = 'https://huichibao.oss-cn-guangzhou.aliyuncs.com/1/material/348b8223-8d03-46aa-8836-6757e8beebd2.png'; @@ -148,7 +187,7 @@ const filteredOrders = computed(() => orders.value); // 加载订单列表数据 async function loadOrders(isLoadMore = false) { if (loading.value) return; - + if (driverInfo.value.auditStatus != 2) return; loading.value = true; // 根据当前 tab 确定接口参数 status @@ -199,6 +238,10 @@ async function loadOrders(isLoadMore = false) { // 判断是否还有更多数据 noMore.value = orders.value.length >= pagination.value.total; } else { + // 清空列表,防止旧数据残留 + if (!isLoadMore) { + orders.value = []; + } sheep.$helper.toast(res.msg || '加载失败'); } } catch (error) { @@ -275,10 +318,66 @@ async function confirmPickup(orderId) { } } +// 催单弹框控制 +const showRemind = ref(false); +const currentOrder = ref(null); + +// 批量操作模态弹框控制 +const batchModalShow = ref(false); +const batchModalTitle = ref('当前送达交接点订单数'); +const batchModalContent = ref(''); +const hasDeliveryOrders = ref(false); + +// 批量送达异步操作弹框控制 +const batchLoadingModalShow = ref(false); +const batchLoadingModalTitle = ref('当前送达交接点订单数'); +const batchLoadingModalContent = ref(''); +const batchOrderCount = ref(0); + +// 确认送达顾客弹框控制 +const showDeliveryPopup = ref(false); +const currentOrderForDelivery = ref(null); + +function openRemindPopupWithOrder(order) { + currentOrder.value = order; + showRemind.value = true; +} + +function openRemindPopup() { + showRemind.value = true; +} + +function closeRemindPopup() { + showRemind.value = false; +} + +function callShopPhone(phone) { + //订单获取商家电话 + const orderPhone = currentOrder.value?.shopPhone || ''; + if (!orderPhone) { + sheep.$helper.toast('未找到商家电话'); + return; + } + callPhone(orderPhone); + closeRemindPopup(); +} + +function callCustomerPhone(phone) { + //从订单获取顾客电话 + const orderPhone = currentOrder.value?.receiverPhone || ''; + if (!orderPhone) { + sheep.$helper.toast('未找到顾客电话'); + return; + } + callPhone(orderPhone); + closeRemindPopup(); +} + // 拨打电话 function callPhone(phone) { + console.log("电话:", phone) if (!phone) { - sheep.$helper && sheep.$helper.toast && sheep.$helper.toast('未找到联系电话'); + sheep.$helper.toast('未找到联系电话'); return; } uni.makePhoneCall({ @@ -296,7 +395,13 @@ function openMap(lat, lng, name) { latitude: Number(lat), longitude: Number(lng), name: name || '', - scale: 18 + scale: 18, + success: function () { + console.log('success'); + }, + error: function (err) { + console.log("错误信息:", err); + } }); } @@ -321,6 +426,76 @@ function openManualInput() { orderPopupShow.value = true; } +// 打开批量操作弹框 +function openBatchOperation() { + // 筛选出配送中状态为待送达交接点(ddeliveryStatus=4)的订单 + const deliveryOrders = orders.value.filter(o => o.type === 'delivering' && o.deliveryStatus === 4); + hasDeliveryOrders.value = deliveryOrders.length > 0; + + if (hasDeliveryOrders.value) { + // 有待送达交接点的订单 + batchModalTitle.value = '当前送达交接点订单数'; + batchModalContent.value = `${deliveryOrders.length} 笔`; + batchModalShow.value = true; + } else { + // 没有待送达交接点的订单 + batchModalTitle.value = ''; + batchModalContent.value = '暂无待送达交接点的订单'; + batchModalShow.value = true; + } +} + +// 批量送达交接点确认 +function onBatchConfirm() { + // 筛选出配送中状态为待送达交接点的订单 + const deliveryOrders = orders.value.filter(o => o.type === 'delivering' && o.deliveryStatus === 4); + batchOrderCount.value = deliveryOrders.length; + + if (deliveryOrders.length > 0) { + // 关闭第一个弹框,打开异步操作弹框 + batchModalShow.value = false; + batchLoadingModalTitle.value = '当前送达交接点订单数'; + batchLoadingModalContent.value = `${deliveryOrders.length} 笔`; + batchLoadingModalShow.value = true; + } else { + // 没有订单,直接关闭 + batchModalShow.value = false; + } +} + +// 批量送达交接点异步确认(真正执行批量操作) +async function onBatchLoadingConfirm() { + // 筛选出配送中状态为待送达交接点的订单ID + const deliveryOrderIds = orders.value + .filter(o => o.type === 'delivering' && o.deliveryStatus === 4) + .map(o => o.id); + + if (deliveryOrderIds.length === 0) { + batchLoadingModalShow.value = false; + return; + } + + try { + // 调用批量送达交接点接口,ids 为逗号分隔的订单ID字符串 + const res = await DeliveryOrderApi.riderDeliveryHandoverBatch(deliveryOrderIds.join(',')); + + if (res.code === 0 && res.data === true) { + // 关闭异步弹框 + batchLoadingModalShow.value = false; + sheep.$helper.toast('批量送达交接点操作成功'); + // 刷新订单列表 + refreshOrders(); + } else { + batchLoadingModalShow.value = false; + sheep.$helper.toast(res.msg || '批量送达交接点失败'); + } + } catch (error) { + console.error('批量送达交接点异常:', error); + batchLoadingModalShow.value = false; + sheep.$helper.toast('批量送达交接点失败,请重试'); + } +} + function onConfirmCode(payload) { // payload 包含 code, result, remark, images // 这里简单展示提示,实际应调用后端或触发下一步逻辑 @@ -328,6 +503,41 @@ function onConfirmCode(payload) { sheep.$helper && sheep.$helper.toast && sheep.$helper.toast('交接已确认'); } +// 确认送达顾客 +async function handleDeliveryConfirm(imageUrl) { + console.log('送达照片URL:', imageUrl); + + if (!currentOrderForDelivery.value?.id) { + sheep.$helper.toast('订单信息异常'); + return; + } + + try { + const res = await DeliveryOrderApi.riderConfirmDelivery({ + deliveryOrderId: currentOrderForDelivery.value.id, + imageUrl: imageUrl + }); + + if (res.code === 0 && res.data === true) { + sheep.$helper.toast('已提交送达照片'); + showDeliveryPopup.value = false; + // 刷新订单列表 + refreshOrders(); + } else { + sheep.$helper.toast(res.msg || '提交失败'); + } + } catch (error) { + console.error('确认送达异常:', error); + sheep.$helper.toast('提交失败,请重试'); + } +} + +// 打开确认送达顾客弹框 +function openDeliveryPopup(order) { + currentOrderForDelivery.value = order; + showDeliveryPopup.value = true; +} + const headerStyle = ref({}); function setHeaderSafeArea() { @@ -577,4 +787,45 @@ onShow(() => { border-radius: 40rpx; border: 1rpx solid #ddd; } +.batch-operation { + background: #1e9fff; + color: #fff; + padding: 14rpx 20rpx; + border-radius: 40rpx; + font-weight: 500; +} + +/* 催单弹框样式 */ +.remind-popup { + padding: 20rpx 0; +} +.remind-row { + display: flex; + align-items: center; + justify-content: space-between; + padding: 20rpx; + background: #f6f6f6; + margin: 10rpx 16rpx; + border-radius: 8rpx; +} +.remind-title { + font-size: 28rpx; + font-weight: 700; + color: #333; +} +.remind-btn { + background: #1e9fff; + color: #fff; + padding: 10rpx 18rpx; + border-radius: 8rpx; + font-weight: 700; +} +.remind-cancel { + text-align: center; + padding: 18rpx 0 70rpx; + color: #666; + font-size: 26rpx; + background: #fff; + margin-top: 10rpx; +} diff --git a/pages/index/user.vue b/pages/index/user.vue index 21fc20e..682f268 100644 --- a/pages/index/user.vue +++ b/pages/index/user.vue @@ -33,7 +33,7 @@ 今日完成单量(单) - {{ todayOrders }} + {{ formatMoney(todayOrders) }} 订单统计 diff --git a/pages/order/detail.vue b/pages/order/detail.vue index d10c199..e89f57e 100644 --- a/pages/order/detail.vue +++ b/pages/order/detail.vue @@ -1,16 +1,14 @@ + + + @@ -111,11 +121,13 @@ onLoad } from '@dcloudio/uni-app'; import sheep from '@/sheep'; + import DeliveryOrderApi from '@/sheep/api/member/deliveryOrder'; + import DeliveryPopup from '@/pages/index/components/delivery-popup.vue'; const orderId = ref(null); const order = ref(null); const loading = ref(false); - const mapAvailable = ref(false); // 如果需要使用 map 组件,置为 true + const mapAvailable = ref(true); // 如果需要使用 map 组件,置为 true // 入口:从页面参数取 orderId,然后加载数据 onLoad((options = {}) => { @@ -126,51 +138,36 @@ async function fetchOrder() { loading.value = true; try { - // 优先尝试平台统一 request(项目内可能封装在 sheep.request 或 sheep.api) - if (sheep && typeof sheep.request === 'function') { - const res = await sheep.request({ - url: '/order/detail', - method: 'GET', - data: { - id: orderId.value - } - }); - // 根据封装不同,这里兼容 res.data 或 res - order.value = (res && res.data) ? res.data : res; - } else if (sheep && sheep.$api && sheep.$api.trade && typeof sheep.$api.trade.detail === 'function') { - const res = await sheep.$api.trade.detail({ - id: orderId.value - }); - order.value = res?.data || res; - } else { - // 回退 mock 数据,避免界面空白,开发时替换为真实接口 + // 使用 DeliveryOrderApi 获取配送单详情 + const res = await DeliveryOrderApi.getDetail(orderId.value); + // 根据封装不同,这里兼容 res.data 或 res + const resData = (res && res.data) ? res.data : res; + console.log("res数据:", res); + + if (resData) { + // 字段映射:将接口返回字段映射到页面使用字段 order.value = { - id: orderId.value || 1001, - shopName: '店铺名(示例)', - pickupAddress: '广东省广州市天河区学院站荷光路118-121号', - pickupLat: 23.1005, - pickupLng: 113.3301, - deliveryAddress: '广东省广州市天河区华景新城软件园区B栋西梯501', - deliveryLat: 23.105, - deliveryLng: 113.335, - receiverName: '张先生', - receiverPhone: '13900001234', - note: '依据餐量提供餐具', - items: [{ - name: '商品名称A', - spec: '规格1', - quantity: 2, - price: 23.89 - }, - { - name: '商品名称B', - spec: '规格2', - quantity: 1, - price: 45.00 - } - ] + ...resData, + // 店铺坐标 (取货点) + pickupLat: resData.shopLatitude, + pickupLng: resData.shopLongitude, + pickupAddress: resData.shopAddress, + // 收货地址 + deliveryLat: resData.receiverLatitude, + deliveryLng: resData.receiverLongitude, + deliveryAddress: resData.receiverAddress, + // 商品列表 + items: resData.orderItemDataList?.map(item => ({ + name: item.productName, + quantity: item.quantity, + price: parseFloat(item.unitPrice) || 0 + })) || [], + // 备注 + note: resData.orderRemark, + deliveryStatus: resData.deliveryStatus }; } + console.log("order.value数据:", order.value); } catch (e) { console.error('fetchOrder error', e); // 友好提示 @@ -240,6 +237,42 @@ showRemind.value = false; } + // 确认送达顾客弹框控制 + const showDeliveryPopup = ref(false); + + function openDeliveryPopup() { + showDeliveryPopup.value = true; + } + + // 确认送达顾客 + async function handleDeliveryConfirm(imageUrl) { + console.log('送达照片URL:', imageUrl); + + if (!orderId.value) { + sheep.$helper.toast('订单信息异常'); + return; + } + + try { + const res = await DeliveryOrderApi.riderConfirmDelivery({ + deliveryOrderId: orderId.value, + imageUrl: imageUrl + }); + + if (res.code === 0 && res.data === true) { + sheep.$helper.toast('已提交送达照片'); + showDeliveryPopup.value = false; + // 刷新订单状态 + fetchOrder(); + } else { + sheep.$helper.toast(res.msg || '提交失败'); + } + } catch (error) { + console.error('确认送达异常:', error); + sheep.$helper.toast('提交失败,请重试'); + } + } + function callShopPhone() { // 商家电话优先使用 order.shopPhone,否则尝试 fallback const phone = order.value?.shopPhone || order.value?.shopPhoneNumber || order.value?.receiverPhone || ''; @@ -261,29 +294,68 @@ closeRemindPopup(); } - function confirmArrive() { - // 确认到店:调用接口或本地改变状态 - if (!order.value) return; - // 示例:调用后端接口(兼容性判断) - (async () => { - try { - if (sheep && typeof sheep.request === 'function') { - await sheep.request({ - url: '/order/confirmArrive', - method: 'POST', - data: { - id: order.value.id - } - }); - } - sheep.$helper && sheep.$helper.toast && sheep.$helper.toast('已确认到店'); - // 可在此刷新订单状态 + // 确认到店 + async function confirmArrive() { + if (!order.value || !orderId.value) return; + + try { + uni.showLoading({ title: '提交中...' }); + const res = await DeliveryOrderApi.riderConfirmArrival(orderId.value); + uni.hideLoading(); + + if (res.code === 0 && res.data === true) { + sheep.$helper.toast('已确认到店'); + // 刷新订单状态 fetchOrder(); - } catch (e) { - console.error(e); - sheep.$helper && sheep.$helper.toast && sheep.$helper.toast('确认失败,请重试'); + } else { + sheep.$helper.toast(res.msg || '确认到店失败'); } - })(); + } catch (e) { + uni.hideLoading(); + console.error('confirmArrive error', e); + sheep.$helper.toast('确认失败,请重试'); + } + } + + // 确认取餐 + async function confirmPickup() { + if (!order.value || !orderId.value) return; + + try { + uni.showLoading({ title: '提交中...' }); + const res = await DeliveryOrderApi.riderConfirmPickup(orderId.value); + uni.hideLoading(); + + if (res.code === 0 && res.data === true) { + sheep.$helper.toast('已确认取餐'); + // 刷新订单状态 + fetchOrder(); + } else { + sheep.$helper.toast(res.msg || '确认取餐失败'); + } + } catch (e) { + uni.hideLoading(); + console.error('confirmPickup error', e); + sheep.$helper.toast('确认失败,请重试'); + } + } + + // 送达交接点 + async function deliveryHandover() { + if (!order.value || !orderId.value) return; + + try { + uni.showLoading({ title: '提交中...' }); + await DeliveryOrderApi.riderDeliveryHandover(orderId.value); + uni.hideLoading(); + sheep.$helper && sheep.$helper.toast && sheep.$helper.toast('已送达交接点'); + // 刷新订单状态 + fetchOrder(); + } catch (e) { + console.error('deliveryHandover error', e); + uni.hideLoading(); + sheep.$helper && sheep.$helper.toast && sheep.$helper.toast('提交失败,请重试'); + } } //跳转交接记录 @@ -329,7 +401,7 @@ } .map-area { - height: 360rpx; + height: 560rpx; background: #f3f3f3; position: relative; overflow: hidden; @@ -351,26 +423,32 @@ position: absolute; left: 20rpx; right: 20rpx; - bottom: 20rpx; + bottom: 45rpx; display: flex; justify-content: space-between; align-items: center; + flex-direction: row; } .eta { background: rgba(255, 255, 255, 0.95); - padding: 10rpx 14rpx; + padding: 0rpx 14rpx; border-radius: 20rpx; font-size: 24rpx; color: #333; + text-align: center; + // line-height: 32rpx; } .nav-btn { background: #fff; - padding: 10rpx 14rpx; + padding: 0rpx 20rpx; border-radius: 20rpx; color: #1e9fff; border: 1rpx solid #dbeeff; + font-size: 24rpx; + text-align: center; + // line-height: 32rpx; } .content { @@ -578,6 +656,10 @@ background: #1e9fff; } + .btn.handover { + background: #2ecc71; + } + .remind-popup { padding: 20rpx 0; } diff --git a/pages/order/handoverRecord.vue b/pages/order/handoverRecord.vue index 161ffd1..498f7c4 100644 --- a/pages/order/handoverRecord.vue +++ b/pages/order/handoverRecord.vue @@ -3,12 +3,12 @@ - + + 暂无交接记录 @@ -33,6 +46,7 @@ onLoad } from '@dcloudio/uni-app'; import sheep from '@/sheep'; + import DeliveryOrderApi from '@/sheep/api/member/deliveryOrder'; const records = ref([]); const orderId = ref(null); @@ -42,38 +56,51 @@ fetchRecords(); }); + function formatTime(timestamp) { + if (!timestamp) return ''; + const date = new Date(Number(timestamp)); + const year = date.getFullYear(); + const month = String(date.getMonth() + 1).padStart(2, '0'); + const day = String(date.getDate()).padStart(2, '0'); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + return `${year}-${month}-${day} ${hours}:${minutes}`; + } + async function fetchRecords() { try { - if (sheep && typeof sheep.request === 'function') { - const res = await sheep.request({ - url: '/order/transferRecords', - method: 'GET', - data: { - id: orderId.value + const res = await DeliveryOrderApi.getHandoverRecord(orderId.value); + if (res.code === 0 && res.data) { + console.log('交接记录原始数据:', res.data); + const rawRecords = res.data || []; + // 转换接口数据为页面所需格式 + const transformedRecords = rawRecords.map(item => { + // 根据 deliveryStatus 生成标题 + let title = '状态更新'; + switch (item.deliveryStatus) { + case 1: title = '待接单'; break; + case 2: title = '骑手待到店'; break; + case 3: title = '待取货'; break; + case 4: title = '待送达交接点'; break; + case 5: title = '送达交接点待分配'; break; + case 6: title = '待送达顾客'; break; + case 7: title = '已完成'; break; + case 0: title = '已取消'; break; + case -1: title = '配送异常'; break; } + + return { + title: title, + time: formatTime(item.createTime), + operator: item.deliverymanName ? `${item.deliverymanName} ${item.deliverymanPhoneLastFour ? ('尾号' + item.deliverymanPhoneLastFour) : ''}` : '系统', + note: '' // 接口暂无备注字段 + }; }); - records.value = (res && res.data) ? res.data.records || res.data : res.records || res; + console.log('交接记录转换后:', transformedRecords); + records.value = transformedRecords; } else { - // mock 数据 - records.value = [{ - title: '已接单', - time: '2026-01-15 10:02', - operator: '系统', - note: '订单自动接单' - }, - { - title: '到店取货', - time: '2026-01-15 10:12', - operator: '骑手 张三', - note: '已取货' - }, - { - title: '转单给同城骑手', - time: '2026-01-15 10:20', - operator: '客服 小李', - note: '因配送区域调整' - } - ]; + sheep.$helper.toast(res.msg || '获取交接记录失败'); + records.value = []; } } catch (e) { console.error('fetchRecords error', e); @@ -125,7 +152,7 @@ font-size: 26rpx; color: #999; display: block; - margin-top: 6rpx; + margin: 15rpx 0; } .step-content { diff --git a/pages/registered/accountInfo.vue b/pages/registered/accountInfo.vue index c0e1af9..1bb8e21 100644 --- a/pages/registered/accountInfo.vue +++ b/pages/registered/accountInfo.vue @@ -3,23 +3,26 @@ - + - - - - + + + + + + + + - + + @@ -40,8 +43,8 @@ - - {{ countdown > 0 ? countdown + 's' : '获取验证码' }} + + {{ smsBtnText }} @@ -61,163 +64,457 @@ - + + + + + + + 选择开户行 + + + + + + + + + + + + + + + + + {{ bankName }} + + + + + 未找到相关银行 + + + + + .code-row { + display: flex; + // gap: 12px; + align-items: center; + } + + .agree-row { + display: flex; + align-items: center; + padding: 20rpx 0; + gap: 12rpx; + color: #999; + } + + .checkbox { + width: 28rpx; + height: 28rpx; + border: 1px solid #ccc; + border-radius: 50%; + } + + .checkbox.checked { + background: #09aaff; + border-color: #09aaff; + } + + .agree-text { + font-size: 24rpx; + color: #999; + } + + .link { + color: #09aaff; + } + + .submit-row { + margin-top: 20px; + } + + /* 银行选择器样式 */ + .bank-selector { + display: flex; + align-items: center; + background: #fff; + // border: 1rpx solid #e6e6e6; + border: none; + border-radius: 6rpx; + padding: 0 12rpx; + } + + .bank-selector .uni-input { + flex: 1; + border: none; + padding: 0; + } + + .selector-arrow { + margin-left: 8rpx; + } + + /* 银行选择弹框样式 */ + .bank-popup { + max-height: 70vh; + display: flex; + flex-direction: column; + } + + .bank-popup-header { + display: flex; + align-items: center; + justify-content: space-between; + padding: 24rpx 30rpx; + border-bottom: 1rpx solid #f0f0f0; + } + + .bank-popup-title { + font-size: 32rpx; + font-weight: 600; + color: #333; + } + + .bank-popup-close { + padding: 10rpx; + margin-right: -10rpx; + } + + .bank-search-box { + padding: 20rpx 30rpx; + border-bottom: 1rpx solid #f0f0f0; + } + + .bank-search-input-wrap { + display: flex; + align-items: center; + background: #f5f5f5; + border-radius: 8rpx; + padding: 16rpx 20rpx; + gap: 12rpx; + } + + .bank-search-input { + flex: 1; + font-size: 28rpx; + background: transparent; + border: none; + outline: none; + } + + .bank-list { + max-height: 60vh; + padding: 0 20rpx; + } + + .bank-item { + display: flex; + align-items: center; + justify-content: space-between; + padding: 28rpx 20rpx; + border-bottom: 1rpx solid #f5f5f5; + } + + .bank-item-name { + font-size: 28rpx; + color: #333; + } + + .bank-empty { + padding: 60rpx 0; + text-align: center; + color: #999; + font-size: 28rpx; + } + \ No newline at end of file diff --git a/pages/registered/audit.vue b/pages/registered/audit.vue index 3555b6e..ee50e82 100644 --- a/pages/registered/audit.vue +++ b/pages/registered/audit.vue @@ -1,69 +1,108 @@ \ No newline at end of file diff --git a/pages/registered/bankList.json b/pages/registered/bankList.json new file mode 100644 index 0000000..dd9e47d --- /dev/null +++ b/pages/registered/bankList.json @@ -0,0 +1,202 @@ +{ + "ICBC": "中国工商银行", + "ABC": "中国农业银行", + "CCB": "中国建设银行", + "CMB": "招商银行", + "BOC": "中国银行", + "PSBC": "中国邮政储蓄银行", + "COMM": "交通银行", + "CITIC": "中信银行", + "CMBC": "中国民生银行", + "CEB": "中国光大银行", + "SHBANK": "上海银行", + "JSBANK": "江苏银行", + "JSRCU": "江苏省农村信用社联合社", + "ASCB": "鞍山银行", + "ARCU": "安徽省农村信用社", + "BJBANK": "北京银行", + "BJRCB": "北京农商行", + "BSB": "包商银行", + "BOHAIB": "渤海银行", + "BDCBANK": "保定银行", + "BOCFCB": "中银富登村镇银行", + "JKRFCZYH": "长春经开融丰村镇银行", + "CRCBANK": "重庆农村商业银行", + "CSRCB": "常熟农商银行", + "CDCB": "成都银行", + "CCQTGB": "重庆三峡银行", + "CSCB": "长沙银行", + "CQBANK": "重庆银行", + "LYRTCZYH": "长春绿园融泰村镇银行", + "BOCD": "承德银行", + "CCHRCZYH": "长春朝阳和润村镇银行", + "BOCZ": "沧州银行", + "BOCY": "朝阳银行", + "CABANK": "长安银行", + "CDRCB": "成都农商银行", + "DRCBCL": "东莞农村商业银行", + "HKBEA": "东亚银行", + "DLB": "大连银行", + "DYCCB": "东营银行", + "DZBANK": "德州银行", + "DLRCB": "大连农村商业银行", + "DYCB": "长城华西银行", + "BOD": "东莞银行", + "ORBANK": "鄂尔多斯银行", + "FXCB": "阜新银行", + "FDB": "富滇银行", + "FJNX": "福建省农村信用社联合社", + "FJHXBC": "福建海峡银行", + "FBBANK": "富邦华一银行", + "GDB": "广发银行", + "GDRCC": "广东省农村信用社联合社", + "GZRCU": "贵州省农村信用社联合社", + "NYBANK": "广东南粤银行", + "BGB": "广西北部湾银行", + "GRCB": "广州农村商业银行", + "GCB": "广州银行", + "GYCB": "贵阳银行", + "GSBANK": "甘肃银行", + "GHB": "广东华兴银行", + "GXRCU": "广西壮族自治区农村信用社联合社", + "GZB": "赣州银行", + "ZYCBANK": "贵州银行", + "GLBANK": "桂林银行", + "GSRCU": "甘肃省农村信用社", + "HXBANK": "华夏银行", + "BOHN": "海南省农村信用社", + "UBCHN": "海口联合农商银行", + "HURCB": "湖北省农信社", + "EGBANK": "恒丰银行", + "HANABANK": "韩亚银行", + "HSBANK": "徽商银行", + "HRXJB": "华融湘江银行", + "HBC": "湖北银行", + "HLDB": "葫芦岛银行", + "HSBK": "衡水市商业银行", + "BHB": "河北银行", + "HZCB": "杭州银行", + "HBRCU": "河北省农村信用社", + "HRBANK": "哈尔滨银行", + "QYBANK": "韩国企业银行", + "HNRCU": "河南省农村信用社", + "HNRCC": "湖南省农村信用社", + "HDBANK": "邯郸银行", + "HLJRCU": "黑龙江省农村信用社联合社", + "HKB": "汉口银行", + "HZCCB": "湖州银行", + "HSCZB": "湖商村镇银行", + "JXRCU": "江西省农村信用社", + "JSB": "晋商银行", + "JHBANK": "金华银行", + "BOJZ": "锦州银行", + "JZCBANK": "焦作中旅银行", + "JZBANK": "晋中银行", + "JLBANK": "吉林银行", + "JJBANK": "九江银行", + "NCB": "江西银行", + "JNBANK": "济宁银行", + "JINCHB": "晋城银行", + "CZRCB": "江南农村商业银行", + "JRCB": "江苏江阴农村商业银行", + "JXBANK": "嘉兴银行", + "CJCCB": "江苏长江商业银行", + "TCRCB": "江苏太仓农村商业银行", + "JLRCU": "吉林省农村信用社联合社", + "KLB": "昆仑银行", + "KSRB": "昆山农村商业银行", + "LSBANK": "莱商银行", + "LSBC": "临商银行", + "LANGFB": "廊坊银行", + "LHBANK": "漯河银行", + "LYCB": "辽阳银行", + "DAQINGB": "龙江银行", + "LSCCB": "乐山市商业银行", + "LNRCC": "辽宁省农村信用社", + "LZYH": "兰州银行", + "URB": "联合村镇银行", + "BOL": "洛阳银行", + "LZCCB": "柳州银行", + "LUZBANK": "泸州市商业银行", + "MYBANK": "绵阳市商业银行", + "KJCZYH": "梅县客家村镇银行", + "NXRCU": "宁夏黄河农村商业银行", + "H3CB": "内蒙古银行", + "CGNB": "四川天府银行", + "NXBANK": "宁夏银行", + "NMGNXS": "内蒙古农村信用社联合社", + "NBBANK": "宁波银行", + "NJCB": "南京银行", + "NBCBANK": "宁波通商银行", + "BNY": "南阳市商业银行", + "NHB": "南海农商银行", + "SPDB": "浦发银行", + "SPABANK": "平安银行", + "PZHCCB": "攀枝花市商业银行", + "BOP": "平顶山银行", + "QLBANK": "齐鲁银行", + "QDCCB": "青岛银行", + "QHRC": "青海省农村信用社", + "BOQZ": "泉州银行", + "BOQH": "青海银行", + "ZBCB": "齐商银行", + "QJCCB": "曲靖市商业银行", + "RZB": "日照银行", + "YDNSCZYH": "尧都农商银行村镇银行", + "SDEB": "顺德农商银行", + "SZSBK": "石嘴山银行", + "SJBANK": "盛京银行", + "SRCB": "深圳农村商业银行", + "SDRCU": "山东省农村信用社联合社", + "SXRCCU": "陕西省农信社", + "SXRCU": "山西省农村信用社", + "SHRCB": "上海农商银行", + "SNCCB": "遂宁银行", + "SCRCU": "四川省农村信用社联合社", + "SRBANK": "上饶银行", + "BOSZ": "苏州银行", + "SXCB": "绍兴银行", + "TJBHB": "天津滨海农村商业银行", + "TACCB": "泰安银行", + "TCCB": "天津银行", + "TZCB": "台州银行", + "TRCB": "天津农商银行", + "WHBANK": "乌海银行", + "KEB": "外换银行", + "WRCB": "无锡农村商业银行", + "BANKWF": "潍坊银行", + "WJRCB": "吴江农村商业银行", + "WZCB": "温州银行", + "ANTBANK": "网商银行", + "WHRCB": "武汉农村商业银行", + "URMQCCB": "乌鲁木齐银行", + "WHCCB": "威海市商业银行", + "CIB": "兴业银行", + "XMBANK": "厦门银行", + "XTB": "邢台银行", + "XJRCU": "新疆农村信用社", + "XIB": "厦门国际银行", + "XABANK": "西安银行", + "BOSH": "新韩银行", + "BOYK": "营口银行", + "WOORI": "友利银行", + "YZBANK": "银座村镇银行", + "YBCCB": "宜宾市商业银行", + "YTBANK": "烟台银行", + "YXCCB": "云南红塔银行", + "YKYHCCB": "营口沿海银行", + "NBYZ": "宁波鄞州农商行", + "YNRCC": "云南省农村信用社", + "RBOZ": "珠海华润银行", + "MTBANK": "浙江民泰商业银行", + "CZBANK": "浙商银行", + "ZZYH": "枣庄银行", + "ZRCBANK": "张家港农村商业银行", + "ZGCCB": "自贡银行", + "ZJNX": "浙江省农村信用社联合社", + "ZYB": "中原银行", + "CZCB": "浙江稠州商业银行", + "ZJKCCB": "张家口银行", + "ZJTLCB": "浙江泰隆商业银行", + "ZZBANK": "郑州银行" +} \ No newline at end of file diff --git a/pages/registered/registerRiders.vue b/pages/registered/registerRiders.vue index 75a7c66..f48a275 100644 --- a/pages/registered/registerRiders.vue +++ b/pages/registered/registerRiders.vue @@ -1,132 +1,129 @@ \ No newline at end of file diff --git a/pages/user/info.vue b/pages/user/info.vue index 01194ab..231f044 100644 --- a/pages/user/info.vue +++ b/pages/user/info.vue @@ -44,6 +44,7 @@ - + diff --git a/sheep/hooks/useModal.js b/sheep/hooks/useModal.js index 1037800..30fc020 100644 --- a/sheep/hooks/useModal.js +++ b/sheep/hooks/useModal.js @@ -62,12 +62,16 @@ export function closeMenuTools() { export function getSmsCode(event, mobile) { const modalStore = $store('modal'); const lastSendTimer = modalStore.lastTimer[event]; + // 如果场景未初始化,先初始化为0(表示可以发送) if (typeof lastSendTimer === 'undefined') { - $helper.toast('短信发送事件错误'); - return; + modalStore.$patch((state) => { + if (typeof state.lastTimer[event] === 'undefined') { + state.lastTimer[event] = 0; + } + }); } - const duration = dayjs().unix() - lastSendTimer; + const duration = dayjs().unix() - (modalStore.lastTimer[event] || 0); const canSend = duration >= 60; if (!canSend) { $helper.toast('请稍后再试'); @@ -82,6 +86,9 @@ export function getSmsCode(event, mobile) { // 发送验证码 + 更新上次发送验证码时间 let scene = -1; switch (event) { + case 'registerDelivery': + scene = 5; + break; case 'resetPassword': scene = 4; break; @@ -109,9 +116,9 @@ export function getSmsTimer(event, mobile = '') { const modalStore = $store('modal'); const lastSendTimer = modalStore.lastTimer[event]; + // 如果场景未初始化,返回"获取验证码" if (typeof lastSendTimer === 'undefined') { - $helper.toast('短信发送事件错误'); - return; + return '获取验证码'; } const duration = ref(dayjs().unix() - lastSendTimer - 60); diff --git a/sheep/store/user.js b/sheep/store/user.js index bad4656..f696be3 100644 --- a/sheep/store/user.js +++ b/sheep/store/user.js @@ -60,6 +60,18 @@ const user = defineStore({ }, 700) } this.userInfo = data; + if (!data.auditStatus) { + uni.reLaunch({ + url: '/pages/registered/registerRiders' + }) + return + } + if (data.auditStatus == 1 || data.auditStatus == 3) { + uni.reLaunch({ + url: '/pages/registered/audit' + }) + return + } return Promise.resolve(data); }, diff --git a/static/img/account-fill.png b/static/img/account-fill.png new file mode 100644 index 0000000..abbc83f Binary files /dev/null and b/static/img/account-fill.png differ diff --git a/static/img/account.png b/static/img/account.png new file mode 100644 index 0000000..c9f00d3 Binary files /dev/null and b/static/img/account.png differ diff --git a/项目发布/logo.png b/项目发布/logo.png new file mode 100644 index 0000000..7e2e1fd Binary files /dev/null and b/项目发布/logo.png differ diff --git a/项目发布/测试证书/证书信息.md b/项目发布/测试证书/证书信息.md new file mode 100644 index 0000000..42e643b --- /dev/null +++ b/项目发布/测试证书/证书信息.md @@ -0,0 +1,7 @@ +证书名称:测试惠吃宝骑手APP +证书别名:huichibaodeliveryapp +密钥库密码:huichibao +密钥密码:huichibao +MD5:BC:87:B9:EC:B4:BF:B7:AB:78:F3:C4:B1:91:66:A7:F7 +sha1:5B:89:DC:42:2F:68:66:0E:71:02:61:94:F6:B0:E0:24:D8:32:60:20 +sha256:B7:04:81:4A:5F:68:CD:58:7F:CD:B4:72:47:3F:DB:E6:FF:E7:C8:F7:5A:0A:22:52:5E:DA:6E:14:63:2C:B7:1E \ No newline at end of file