master
王文杰 8 months ago
parent a3185fb0eb
commit 832a8ac4e0

@ -291,8 +291,10 @@ const bindPickerChange = (e, item) => {
</view> </view>
</view> </view>
<view class="category"> <view class="category" v-if="orderDetails.length">
<view class="category-title">回收品类</view> <view class="category-title">
回收品类<span class="desc">预估仅供参考以实际重量为准</span>
</view>
<view class="category-list"> <view class="category-list">
<view class="category-item" v-for="item in orderDetails" :key="item.id"> <view class="category-item" v-for="item in orderDetails" :key="item.id">
<view class="label"> {{ item.productName }}</view> <view class="label"> {{ item.productName }}</view>
@ -307,25 +309,6 @@ const bindPickerChange = (e, item) => {
</view> </view>
</view> </view>
</view> </view>
<!-- <view class="module lei">
<view class="module-title">回收品类</view>
</view> -->
<!-- <view class="weight">
<view class="weight-title"
>请选择预估重量<span class="desc">预估仅供参考以实际重量为准</span></view
>
<view class="weight-menu">
<view
class="item"
@click="handleWeightChange(index)"
:class="{ active: activeWeightKey == index }"
v-for="(item, index) in weightMenuList"
:key="item.id"
>{{ item.name }}</view
>
</view>
</view> -->
</view> </view>
<!-- uni-ui 弹出层 --> <!-- uni-ui 弹出层 -->
@ -389,12 +372,15 @@ page {
} }
.label { .label {
width: 100rpx; width: 100rpx;
font-size: 28rpx;
color: #898b94; color: #898b94;
margin: 0 16rpx 0 10rpx; margin: 0 16rpx 0 10rpx;
} }
.text { .text {
flex: 1; flex: 1;
-webkit-line-clamp: 1; -webkit-line-clamp: 1;
color: #898b94;
font-size: 24rpx;
} }
.arrow { .arrow {
&::after { &::after {
@ -415,6 +401,9 @@ page {
color: #3d3d3d; color: #3d3d3d;
font-size: 28rpx; font-size: 28rpx;
margin: 20rpx 0; margin: 20rpx 0;
.desc {
font-size: 20rpx;
}
} }
.category-list { .category-list {
display: flex; display: flex;

@ -22,17 +22,17 @@ const getMemberAddressData = async () => {
const dataList = [ const dataList = [
{ {
id: '1', id: '1',
name: '李 13824686868', name: '李聪聪 13824686868',
location: '北京市顺义区后沙峪地区安平北街6号院1', location: '北京市顺义区后沙峪地区安平北街6号院1',
}, },
{ {
id: '2', id: '2',
name: '李明2 13824686868', name: '康宁 13824686868',
location: '北京市顺义区后沙峪地区安平北街6号院2', location: '北京市顺义区后沙峪地区安平北街6号院2',
}, },
{ {
id: '3', id: '3',
name: '李明3 13824686868', name: '潘家阳 13824686868',
location: '北京市顺义区后沙峪地区安平北街6号院3', location: '北京市顺义区后沙峪地区安平北街6号院3',
}, },
] ]

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import type { BannerItem, CategoryItem } from '@/types/home' import type { BannerItem, CategoryItem } from '@/types/home'
import { onLoad } from '@dcloudio/uni-app' import { onLoad } from '@dcloudio/uni-app'
import { ref, reactive } from 'vue' import { computed, ref, reactive } from 'vue'
import { useMemberStore } from '@/stores' import { useMemberStore } from '@/stores'
import CustomNavbar from './components/CustomNavbar.vue' import CustomNavbar from './components/CustomNavbar.vue'
import CategoryPanel from './components/CategoryPanel.vue' import CategoryPanel from './components/CategoryPanel.vue'
@ -33,15 +33,20 @@ let siteList = reactive([])
// //
const longitude = ref(0) const longitude = ref(0)
const latitude = ref(0) const latitude = ref(0)
const isLogin = computed(() => {
const token = memberStore.profile?.token
const storage_token = uni.getStorageSync('storage_token')
return !!token || !!storage_token
})
// //
const isLoading = ref(false) const isLoading = ref(false)
// //
onLoad(async () => { onLoad(async () => {
isLoading.value = true isLoading.value = true
await Promise.all([getHomeCategory(), getHomeSite()]) await Promise.all([getHomeCategory(), getHomeSite()])
isLoading.value = false isLoading.value = false
if (memberStore.profile?.token) { if (isLogin.value) {
getSettingInfo() getSettingInfo()
} }
}) })

@ -1,12 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { OrderState, orderStateList } from '@/services/constants' import { OrderState, orderStateList } from '@/services/constants'
import { import {
deleteMemberOrderAPI, getOrderByIdAPI
getMemberOrderByIdAPI,
getMemberOrderCancelByIdAPI,
getMemberOrderLogisticsByIdAPI,
getMemberOrderConsignmentByIdAPI,
putMemberOrderReceiptByIdAPI,
} from '@/services/order' } from '@/services/order'
import type { LogisticItem, OrderResult } from '@/types/order' import type { LogisticItem, OrderResult } from '@/types/order'
import { onLoad, onReady } from '@dcloudio/uni-app' import { onLoad, onReady } from '@dcloudio/uni-app'
@ -17,72 +12,34 @@ import QQMapWX from '@/libs/qqmap-wx-jssdk1.2/qqmap-wx-jssdk.min.js'
// //
const { safeAreaInsets } = uni.getSystemInfoSync() const { safeAreaInsets } = uni.getSystemInfoSync()
// //
// const orderDetailPopup = ref<UniHelper.UniPopupInstance>()
// const orderConfirmPopup = ref<UniHelper.UniPopupInstance>()
// //
// const longitude = ref(0)
// const latitude = ref(0)
// //
// interface Props {
// id: string
// state: string,
// targetLongitude: string,
// targetLatitude: string,
// }
// const props = withDefaults(defineProps<Props>(), {
// id: '0',
// state: '0',
// targetLongitude: '121.197665',
// targetLatitude: '31.128418',
// })
const orderStatus = ref('') const orderStatus = ref('')
// //
onReady(() => { //
console.log(props) onLoad((options) => {
getMemberOrderByIdData(options.orderId)
}) })
//
// const order = ref<OrderResult>()
// const getMemberOrderByIdData = async () => {
// const res = await getMemberOrderByIdAPI(query.id)
// order.value = res.result
// if (
// [OrderState.DaiShouHuo, OrderState.DaiPingJia, OrderState.YiWanCheng].includes(
// order.value.orderState,
// )
// ) {
// getMemberOrderLogisticsByIdData()
// }
// }
// //
// const logisticList = ref<LogisticItem[]>([])
// const getMemberOrderLogisticsByIdData = async () => {
// const res = await getMemberOrderLogisticsByIdAPI(query.id)
// logisticList.value = res.result.list
// }
//
const order = ref<OrderResult>()
const getMemberOrderByIdData = async (orderId) => {
const params = {
id: orderId,
location: {
latitude: 31.163973,
longitude: 121.404032,
},
}
const res = await getOrderByIdAPI(params)
if (resizeBy.code == 200) {
order.value = res.data
}
}
onLoad((options) => { onLoad((options) => {
orderStatus.value = options.status || 'PENDING' orderStatus.value = options.status || 'PENDING'
// getMemberOrderByIdData() // getMemberOrderByIdData()
// buttonDriving() // buttonDriving()
}) })
//
// const onTimeup = () => {
// //
// order.value!.orderState = OrderState.YiQuXiao
// }
const phone = async () => {
uni
.makePhoneCall({
phoneNumber: '13601921745',
})
.catch((e) => {
// console.log(e) //catch(e){makePhoneCall:fail cancel}
})
}
// //
const handleCancleOrder = () => { const handleCancleOrder = () => {
// //

@ -2,7 +2,7 @@
import { OrderState } from '@/services/constants' import { OrderState } from '@/services/constants'
import { orderStateList } from '@/services/constants' import { orderStateList } from '@/services/constants'
import { putMemberOrderReceiptByIdAPI } from '@/services/order' import { putMemberOrderReceiptByIdAPI } from '@/services/order'
import { deleteMemberOrderAPI } from '@/services/order' import { cancleOrderAPI } from '@/services/order'
import { getMemberOrderAPI } from '@/services/order' import { getMemberOrderAPI } from '@/services/order'
import { getPayMockAPI, getPayWxPayMiniPayAPI } from '@/services/pay' import { getPayMockAPI, getPayWxPayMiniPayAPI } from '@/services/pay'
import type { OrderItem } from '@/types/order' import type { OrderItem } from '@/types/order'
@ -25,15 +25,16 @@ const queryParams: Required<OrderListParams> = {
status: props.orderState, status: props.orderState,
location: { location: {
latitude: 31.163973, latitude: 31.163973,
longitude: 121.404032 longitude: 121.404032,
}, },
id: memberStore.profile?.id,
} }
// //
const orderList = ref<OrderItem[]>([]) const orderList = ref<OrderItem[]>([])
// //
const isLoading = ref(false) const isLoading = ref(false)
//
const isFinish = ref(false)
const getMemberOrderData = async () => { const getMemberOrderData = async () => {
// 退 // 退
if (isLoading.value) return if (isLoading.value) return
@ -47,6 +48,12 @@ const getMemberOrderData = async () => {
const res = await getMemberOrderAPI(queryParams) const res = await getMemberOrderAPI(queryParams)
// //
isLoading.value = false isLoading.value = false
res.data.list.forEach((e) => {
const str = e.appointmentTimeStart.slice(0, 10)
const start = e.appointmentTimeStart.slice(11, 13)
const end = e.appointmentTimeEnd.slice(11, 13)
e.appointmentTime = str + ' ' + start + end
})
// //
orderList.value.push(...res.data.list) orderList.value.push(...res.data.list)
// //
@ -113,13 +120,13 @@ const onOrderConfirm = (id: string) => {
} }
// //
const onOrderDelete = (id: string) => { const handleCancle = (id: string) => {
uni.showModal({ uni.showModal({
content: '你确定要删除该订单?', content: '你确定要取消该订单?',
confirmColor: '#3775F6', confirmColor: '#3775F6',
success: async (res) => { success: async (res) => {
if (res.confirm) { if (res.confirm) {
await deleteMemberOrderAPI({ ids: [id] }) await cancleOrderAPI({ id })
// //
const index = orderList.value.findIndex((v) => v.id === id) const index = orderList.value.findIndex((v) => v.id === id)
orderList.value.splice(index, 1) orderList.value.splice(index, 1)
@ -127,9 +134,9 @@ const onOrderDelete = (id: string) => {
}, },
}) })
} }
const handleDetail = (id) => {
// uni.navigateTo({ url: `/pages/orderDetail/orderDetail?orderId=${id}` })
const isFinish = ref(false) }
// //
const isTriggered = ref(false) const isTriggered = ref(false)
// //
@ -156,65 +163,17 @@ const onRefresherrefresh = async () => {
:refresher-triggered="isTriggered" :refresher-triggered="isTriggered"
@refresherrefresh="onRefresherrefresh" @refresherrefresh="onRefresherrefresh"
@scrolltolower="getMemberOrderData" @scrolltolower="getMemberOrderData"
> >
<view class="card" v-for="order in orderList" :key="order.id"> <view class="item" v-for="item in orderList" :key="item.id">
<!-- 订单信息 --> <view class="hd" @click="handleDetail(item.id)">
<view class="status"> <view class="num">订单编号{{ item.orderNumber }}</view>
<text class="date">{{ order.createTime }}</text> <view class="img"></view>
<!-- 订单状态文字 -->
<text>{{ orderStateList[order.orderState].text }}</text>
<!-- 待评价/已完成/已取消 状态: 展示删除订单 -->
<text
v-if="order.orderState >= OrderState.DaiPingJia"
class="icon-delete"
@tap="onOrderDelete(order.id)"
></text>
</view>
<!-- 商品信息点击商品跳转到订单详情不是商品详情 -->
<navigator
v-for="item in order.skus"
:key="item.id"
class="goods"
:url="`/pagesOrder/detail/detail?id=${order.id}`"
hover-class="none"
>
<view class="cover">
<image class="image" mode="aspectFit" :src="item.image"></image>
</view>
<view class="meta">
<view class="name ellipsis">{{ item.name }}</view>
<view class="type">{{ item.attrsText }}</view>
</view>
</navigator>
<!-- 支付信息 -->
<view class="payment">
<text class="quantity">{{ order.totalNum }}件商品</text>
<text>实付</text>
<text class="amount"> <text class="symbol">¥</text>{{ order.payMoney }}</text>
</view>
<!-- 订单操作按钮 -->
<view class="action">
<!-- 待付款状态显示去支付按钮 -->
<template v-if="order.orderState === OrderState.DaiFuKuan">
<view class="button primary" @tap="onOrderPay(order.id)"></view>
</template>
<template v-else>
<navigator
class="button secondary"
:url="`/pagesOrder/create/create?orderId=${order.id}`"
hover-class="none"
>
再次购买
</navigator>
<!-- 待收货状态: 展示确认收货 -->
<view
v-if="order.orderState === OrderState.DaiShouHuo"
class="button primary"
@tap="onOrderConfirm(order.id)"
>
确认收货
</view> </view>
</template> <view class="md" @click="handleDetail(item.id)"></view>
<view class="foot">
<view class="time"> 预约时间 {{ item.appointmentTime }}</view>
<view class="cancle" @click="handleCancle(item.id)"></view>
</view> </view>
</view> </view>
<!-- 底部提示文字 --> <!-- 底部提示文字 -->
@ -227,13 +186,36 @@ const onRefresherrefresh = async () => {
<style lang="scss"> <style lang="scss">
// //
.orders { .orders {
.card { .item {
min-height: 100rpx; min-height: 100rpx;
padding: 20rpx; padding: 20rpx;
margin: 20rpx 20rpx 0; margin: 20rpx 20rpx 0;
border-radius: 10rpx; border-radius: 10rpx;
background-color: #fff; background-color: #fff;
.hd {
padding: 10rpx;
font-size: 28rpx;
}
.md {
padding: 10rpx;
min-height: 100rpx;
font-size: 28rpx;
border-top: 2rpx solid #F2F2F2;
border-bottom: 2rpx solid #F2F2F2;
}
.foot {
padding: 10rpx;
display: flex;
justify-content: space-between;
align-items: center;
font-size: 24rpx;
.cancle {
border: 2rpx solid #F2F2F2;
padding: 8rpx 20rpx;
color: #0D0D26;
border-radius: 40rpx;
}
}
&:last-child { &:last-child {
padding-bottom: 40rpx; padding-bottom: 40rpx;
} }

@ -136,6 +136,24 @@ export const getMemberOrderAPI = (data: OrderListParams) => {
data, data,
}) })
} }
// 订单详情
export const getOrderByIdAPI = (data: any) => {
return http<OrderListResult>({
method: 'POST',
url: `/recycle-order/info`,
data,
})
}
// 订单取消
export const cancleOrderAPI = (data: any) => {
return http<OrderListResult>({
method: 'POST',
url: `/recycle-order/cancel`,
data,
})
}
/** /**
* *
* @param data orderState * @param data orderState

@ -11,8 +11,8 @@
* 4. token * 4. token
*/ */
import { useMemberStore } from '@/stores' import { useMemberStore } from '@/stores'
const baseURL = 'http://192.168.0.166:8808/api' // const baseURL = 'http://192.168.0.166:8808/api'
// const baseURL = 'http://222.71.165.188:8808/api' const baseURL = 'http://222.71.165.188:8808/api'
// 添加拦截器 // 添加拦截器
const httpInterceptor = { const httpInterceptor = {
// 拦截前触发 // 拦截前触发

Loading…
Cancel
Save