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

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

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

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

@ -1,12 +1,7 @@
<script setup lang="ts">
import { OrderState, orderStateList } from '@/services/constants'
import {
deleteMemberOrderAPI,
getMemberOrderByIdAPI,
getMemberOrderCancelByIdAPI,
getMemberOrderLogisticsByIdAPI,
getMemberOrderConsignmentByIdAPI,
putMemberOrderReceiptByIdAPI,
getOrderByIdAPI
} from '@/services/order'
import type { LogisticItem, OrderResult } from '@/types/order'
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 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('')
//
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) => {
orderStatus.value = options.status || 'PENDING'
// getMemberOrderByIdData()
// 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 = () => {
//

@ -2,7 +2,7 @@
import { OrderState } from '@/services/constants'
import { orderStateList } from '@/services/constants'
import { putMemberOrderReceiptByIdAPI } from '@/services/order'
import { deleteMemberOrderAPI } from '@/services/order'
import { cancleOrderAPI } from '@/services/order'
import { getMemberOrderAPI } from '@/services/order'
import { getPayMockAPI, getPayWxPayMiniPayAPI } from '@/services/pay'
import type { OrderItem } from '@/types/order'
@ -25,15 +25,16 @@ const queryParams: Required<OrderListParams> = {
status: props.orderState,
location: {
latitude: 31.163973,
longitude: 121.404032
longitude: 121.404032,
},
id: memberStore.profile?.id,
}
//
const orderList = ref<OrderItem[]>([])
//
const isLoading = ref(false)
//
const isFinish = ref(false)
const getMemberOrderData = async () => {
// 退
if (isLoading.value) return
@ -47,6 +48,12 @@ const getMemberOrderData = async () => {
const res = await getMemberOrderAPI(queryParams)
//
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)
//
@ -113,13 +120,13 @@ const onOrderConfirm = (id: string) => {
}
//
const onOrderDelete = (id: string) => {
const handleCancle = (id: string) => {
uni.showModal({
content: '你确定要删除该订单?',
content: '你确定要取消该订单?',
confirmColor: '#3775F6',
success: async (res) => {
if (res.confirm) {
await deleteMemberOrderAPI({ ids: [id] })
await cancleOrderAPI({ id })
//
const index = orderList.value.findIndex((v) => v.id === id)
orderList.value.splice(index, 1)
@ -127,9 +134,9 @@ const onOrderDelete = (id: string) => {
},
})
}
//
const isFinish = ref(false)
const handleDetail = (id) => {
uni.navigateTo({ url: `/pages/orderDetail/orderDetail?orderId=${id}` })
}
//
const isTriggered = ref(false)
//
@ -156,65 +163,17 @@ const onRefresherrefresh = async () => {
:refresher-triggered="isTriggered"
@refresherrefresh="onRefresherrefresh"
@scrolltolower="getMemberOrderData"
>
<view class="card" v-for="order in orderList" :key="order.id">
<!-- 订单信息 -->
<view class="status">
<text class="date">{{ order.createTime }}</text>
<!-- 订单状态文字 -->
<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 class="item" v-for="item in orderList" :key="item.id">
<view class="hd" @click="handleDetail(item.id)">
<view class="num">订单编号{{ item.orderNumber }}</view>
<view class="img"></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>
<!-- 底部提示文字 -->
@ -227,13 +186,36 @@ const onRefresherrefresh = async () => {
<style lang="scss">
//
.orders {
.card {
.item {
min-height: 100rpx;
padding: 20rpx;
margin: 20rpx 20rpx 0;
border-radius: 10rpx;
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 {
padding-bottom: 40rpx;
}

@ -136,6 +136,24 @@ export const getMemberOrderAPI = (data: OrderListParams) => {
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

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

Loading…
Cancel
Save