From d72cd427e6ca5d89edb900bcaf4486d2005f2e57 Mon Sep 17 00:00:00 2001 From: huliyong <2783385703@qq.com> Date: Mon, 9 Jun 2025 21:05:17 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86):=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E9=A1=B9=E7=9B=AE=E7=BB=84=E4=BB=B6=E5=8F=8A=E5=A4=9A?= =?UTF-8?q?=E9=A1=B9=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(用户管理): 显示角色标签并隐藏手机号 chore(环境配置): 切换默认环境至trial fix(地址认证): 增加接单范围验证和地区选择校验 feat(订单列表): 添加空状态显示 perf(我的订单): 优化请求处理防止重复加载 style(订单详情): 调整服务内容展示样式并添加宠物体型显示 --- components/order/ServiceItems.vue | 352 +++++++++++++++++++++ .../authentication/connectAddress/detail.vue | 20 +- otherPages/orderTakingManage/detail/index.vue | 103 +++++- pages/myOrdersManage/index.vue | 26 +- pages/orderTakingManage/components/list.vue | 48 ++- pages/userManage/index.vue | 4 +- utils/getUrl.js | 6 +- 7 files changed, 525 insertions(+), 34 deletions(-) create mode 100644 components/order/ServiceItems.vue diff --git a/components/order/ServiceItems.vue b/components/order/ServiceItems.vue new file mode 100644 index 0000000..27fb4f7 --- /dev/null +++ b/components/order/ServiceItems.vue @@ -0,0 +1,352 @@ + + + + + \ No newline at end of file diff --git a/otherPages/authentication/connectAddress/detail.vue b/otherPages/authentication/connectAddress/detail.vue index 1a16534..d95f6af 100644 --- a/otherPages/authentication/connectAddress/detail.vue +++ b/otherPages/authentication/connectAddress/detail.vue @@ -129,10 +129,8 @@ // latitude: eidtItem?.value?.latitude || null, // longitude: eidtItem?.value?.longitude || null // } - }); - onShow(() => { getDetail() - }) + }); const setAddress = (res) => { form.value.latitude = res.latitude @@ -164,14 +162,23 @@ const onSave = async () => { // 验证接单范围是否在3-15公里之间 - if (form.value.rangeNo < 3 || form.value.rangeNo > 15) { + if (isNaN(form.value.rangeNo - 1) || form.value.rangeNo < 3 || form.value.rangeNo > 15) { uni.showToast({ - title: '接单范围必须在3-15公里之间', + title: '接单范围必须是3-15公里之间的数字', icon: 'none' }) return } + //必须选择地区 + if (!form.value.area) { + uni.showToast({ + title: '请选择地区', + icon: 'none' + }) + return + } + let code = null; if (eidtItem?.value?.id) { let result = await udpateAddress({ @@ -208,7 +215,8 @@ address: eidtItem?.value?.address || null, status: eidtItem?.value?.status == 'true' || null, latitude: form.value.latitude || eidtItem?.value?.latitude || null, - longitude: form.value.latitude || eidtItem?.value?.longitude || null + longitude: form.value.latitude || eidtItem?.value?.longitude || null, + rangeNo: form.value.rangeNo || eidtItem?.value?.rangeNo || null } }) } diff --git a/otherPages/orderTakingManage/detail/index.vue b/otherPages/orderTakingManage/detail/index.vue index 7e38464..1e76c57 100644 --- a/otherPages/orderTakingManage/detail/index.vue +++ b/otherPages/orderTakingManage/detail/index.vue @@ -61,7 +61,7 @@ - + - + + --> + + + @@ -205,7 +208,7 @@ - {{ pet.breed }} + {{ pet.breed }}({{ pet.bodyType }}) @@ -273,6 +276,8 @@ useStore } from "vuex" + import ServiceItems from '@/components/order/ServiceItems.vue' + import dayjs from "dayjs"; import configPopup from '@/components/configPopup.vue' const configPopupRef = ref(null) @@ -291,6 +296,7 @@ const store = useStore(); const orderId = ref(null); const orderDetail = ref({}); + const serviceList = ref([]); const showConfirmOrder = ref(false); const showOrderSuccess = ref(false); const value = ref("45619491656") @@ -315,7 +321,7 @@ }, { title : '个人订单', - content : '订单为系统派发,请确认订单信息后再抢单', + content : '订单为个人订单,请确认订单信息后再接单', }, { title : '流失订单', @@ -386,6 +392,78 @@ }); if (response.code == 200 && response.data) { orderDetail.value = response.data; + + let data = response.data.order.h5OrderVO; + + //=====================服务项目以及费用的计算开始===================== + + let items = [] + + //1、找出有哪些日期 + let days = [...new Set(data.orderServiceList.map(item => item.serviceDate))] + + + days.forEach(day => { + + let price = 0; + + let itemsText = [] + + //2、找出每个日期对应的服务对象 + let dayItems = data.orderServiceList.filter(item => item.serviceDate === day) + + //3、找出每个服务对象对应的宠物 + let pets = data.petVOList.filter(item => dayItems.some(dayItem => dayItem.petId === item.id)) + + //深度拷贝pets + pets = JSON.parse(JSON.stringify(pets)) + + //4、将每个服务对象添加进对应的宠物 + pets.forEach(pet => { + pet.serviceList = dayItems.filter(item => item.petId === pet.id) + + let itemList = [] + + //5、将每个服务对象中添加对应的项目 + pet.serviceList.forEach(item => { + itemList.push(...(data.orderItemList.filter(n => n.orderServiceId == item.id))) + }) + + itemList.forEach(p => { + price += p.salePrice * p.quantity + + itemsText = [...new Set([...itemsText, p.productName])] + }) + + pet.itemList = itemList + }) + + //6、将每个宠物添加进items + items.push({ + price, + pets, + day, + itemsText, + }) + }) + + + //根据日期排序 + items = items.sort((a, b) => dayjs(a.day).valueOf() - dayjs(b.day).valueOf()) + + items.forEach(n => { + n.day = dayjs(n.day).format('MM-DD') + }) + + console.log(items); + + serviceList.value = items + + + //=====================服务项目以及费用的计算结束===================== + + + orderDetail.value.order.h5OrderVO.petVOList.forEach(pet => { pet.productNameText = getProductNameText(pet.id, orderDetail.value.order.h5OrderVO.orderItemList, @@ -445,9 +523,11 @@ } function getTextList(){ - return orderDetail.value.order?.h5OrderVO - .orderServiceList.map(item => - dayjs(item.serviceDate).format('MM-DD')) + // return orderDetail.value.order?.h5OrderVO + // .orderServiceList.map(item => + // dayjs(item.serviceDate).format('MM-DD')) + + return serviceList.value.map(n => n.day) } const toDetail = (id) => { @@ -527,6 +607,8 @@ .desc { color: #999999; + font-size: 28rpx; + margin-top: 20rpx; } } @@ -542,7 +624,8 @@ background: #FFBF60; color: white; width: 100%; - height: 60rpx; + font-size: 26rpx; + padding: 15rpx 20rpx; border-radius: 30rpx; } } diff --git a/pages/myOrdersManage/index.vue b/pages/myOrdersManage/index.vue index b607c57..c79b0a2 100644 --- a/pages/myOrdersManage/index.vue +++ b/pages/myOrdersManage/index.vue @@ -100,7 +100,12 @@ import { useStore } from "vuex" -import { getOrderServiceText, getProductNameText } from '@/utils/serviceTime.js' + import { getOrderServiceText, getProductNameText } from '@/utils/serviceTime.js' + + onLoad(() => { + requestId.value = 0; + activeIndex.value = 1; + }) onShow(() => { if (!getLoginStatus()) return; @@ -112,6 +117,7 @@ import { getOrderServiceText, getProductNameText } from '@/utils/serviceTime.js' const list = ref([]) const dateOrderList = ref([]) const loading = ref(false) // 添加loading状态 + const requestId = ref(0) // 添加请求序列号 const store = useStore(); const userInfo = computed(() => { @@ -154,6 +160,8 @@ import { getOrderServiceText, getProductNameText } from '@/utils/serviceTime.js' function getList() { loading.value = true; // 开始加载 + requestId.value++; // 递增请求序列号 + const currentRequestId = requestId.value; // 保存当前请求的ID let index = current.value; @@ -163,6 +171,11 @@ import { getOrderServiceText, getProductNameText } from '@/utils/serviceTime.js' userId: userInfo.value.userId }) .then(res => { + // 检查请求是否是最新的 + if (currentRequestId !== requestId.value) { + return; // 如果不是最新请求,忽略响应 + } + if (res.code == 200) { list.value = res.data.rows @@ -177,7 +190,8 @@ import { getOrderServiceText, getProductNameText } from '@/utils/serviceTime.js' } }) .finally(() => { - if(activeIndex.value == 1){ + // 只有最新请求才能关闭loading + if(activeIndex.value == 1 && currentRequestId === requestId.value){ loading.value = false; // 结束加载 } }) @@ -189,6 +203,11 @@ import { getOrderServiceText, getProductNameText } from '@/utils/serviceTime.js' masterId: userInfo.value.userId }) .then(res => { + // 检查请求是否是最新的 + if (currentRequestId !== requestId.value) { + return; // 如果不是最新请求,忽略响应 + } + if (res.code == 200) { dateOrderList.value = res.data // 更新标签数量显示 @@ -200,7 +219,8 @@ import { getOrderServiceText, getProductNameText } from '@/utils/serviceTime.js' } }) .finally(() => { - if(activeIndex.value == 2){ + // 只有最新请求才能关闭loading + if(activeIndex.value == 2 && currentRequestId === requestId.value){ loading.value = false; // 结束加载 } }) diff --git a/pages/orderTakingManage/components/list.vue b/pages/orderTakingManage/components/list.vue index 56032d8..8035911 100644 --- a/pages/orderTakingManage/components/list.vue +++ b/pages/orderTakingManage/components/list.vue @@ -1,15 +1,23 @@