【新增】订单详情:核销相关逻辑及组件
parent
196a1b2235
commit
44052b22c3
|
@ -45,9 +45,9 @@
|
||||||
</image>
|
</image>
|
||||||
<view class="ss-font-30">{{ formatOrderStatus(state.orderInfo) }}</view>
|
<view class="ss-font-30">{{ formatOrderStatus(state.orderInfo) }}</view>
|
||||||
</view>
|
</view>
|
||||||
<view class="ss-font-26 ss-m-x-20 ss-m-b-70">{{
|
<view class="ss-font-26 ss-m-x-20 ss-m-b-70">
|
||||||
formatOrderStatusDescription(state.orderInfo)
|
{{ formatOrderStatusDescription(state.orderInfo) }}
|
||||||
}}</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
<!-- 收货地址 -->
|
<!-- 收货地址 -->
|
||||||
|
@ -126,6 +126,9 @@
|
||||||
</view>
|
</view>
|
||||||
</view>
|
</view>
|
||||||
|
|
||||||
|
<!-- 自提核销 -->
|
||||||
|
<PickUpVerify :order-info="state.orderInfo" :systemStore="systemStore" ref="pickUpVerifyRef"></PickUpVerify>
|
||||||
|
|
||||||
<!-- 订单信息 -->
|
<!-- 订单信息 -->
|
||||||
<view class="notice-box">
|
<view class="notice-box">
|
||||||
<view class="notice-box__content">
|
<view class="notice-box__content">
|
||||||
|
@ -251,7 +254,7 @@
|
||||||
<script setup>
|
<script setup>
|
||||||
import sheep from '@/sheep';
|
import sheep from '@/sheep';
|
||||||
import { onLoad } from '@dcloudio/uni-app';
|
import { onLoad } from '@dcloudio/uni-app';
|
||||||
import { reactive } from 'vue';
|
import { reactive, ref } from 'vue';
|
||||||
import { isEmpty } from 'lodash';
|
import { isEmpty } from 'lodash';
|
||||||
import {
|
import {
|
||||||
fen2yuan,
|
fen2yuan,
|
||||||
|
@ -260,6 +263,8 @@
|
||||||
handleOrderButtons,
|
handleOrderButtons,
|
||||||
} from '@/sheep/hooks/useGoods';
|
} from '@/sheep/hooks/useGoods';
|
||||||
import OrderApi from '@/sheep/api/trade/order';
|
import OrderApi from '@/sheep/api/trade/order';
|
||||||
|
import DeliveryApi from '@/sheep/api/trade/delivery';
|
||||||
|
import PickUpVerify from '@/pages/order/pickUpVerify.vue';
|
||||||
|
|
||||||
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
|
const statusBarHeight = sheep.$platform.device.statusBarHeight * 2;
|
||||||
const headerBg = sheep.$url.css('/static/img/shop/order/order_bg.png');
|
const headerBg = sheep.$url.css('/static/img/shop/order/order_bg.png');
|
||||||
|
@ -270,6 +275,9 @@
|
||||||
comeinType: '', // 进入订单详情的来源类型
|
comeinType: '', // 进入订单详情的来源类型
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// ========== 门店自提(核销) ==========
|
||||||
|
const systemStore = ref({}); // 门店信息
|
||||||
|
|
||||||
// 复制
|
// 复制
|
||||||
const onCopy = () => {
|
const onCopy = () => {
|
||||||
sheep.$helper.copyText(state.orderInfo.no);
|
sheep.$helper.copyText(state.orderInfo.no);
|
||||||
|
@ -294,7 +302,7 @@
|
||||||
uni.showModal({
|
uni.showModal({
|
||||||
title: '提示',
|
title: '提示',
|
||||||
content: '确定要取消订单吗?',
|
content: '确定要取消订单吗?',
|
||||||
success: async function (res) {
|
success: async function(res) {
|
||||||
if (!res.confirm) {
|
if (!res.confirm) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -366,15 +374,18 @@
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// #endif
|
// #endif
|
||||||
|
|
||||||
// 评价
|
// 评价
|
||||||
function onComment(id) {
|
function onComment(id) {
|
||||||
sheep.$router.go('/pages/goods/comment/add', {
|
sheep.$router.go('/pages/goods/comment/add', {
|
||||||
id
|
id,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const pickUpVerifyRef = ref();
|
||||||
|
|
||||||
async function getOrderDetail(id) {
|
async function getOrderDetail(id) {
|
||||||
// 对详情数据进行适配
|
// 对详情数据进行适配
|
||||||
let res;
|
let res;
|
||||||
|
@ -389,6 +400,14 @@
|
||||||
if (res.code === 0) {
|
if (res.code === 0) {
|
||||||
state.orderInfo = res.data;
|
state.orderInfo = res.data;
|
||||||
handleOrderButtons(state.orderInfo);
|
handleOrderButtons(state.orderInfo);
|
||||||
|
// 配送方式:门店自提
|
||||||
|
if (res.data.pickUpStoreId) {
|
||||||
|
const { data } = await DeliveryApi.getDeliveryPickUpStore(res.data.pickUpStoreId);
|
||||||
|
systemStore.value = data || {};
|
||||||
|
}
|
||||||
|
if (state.orderInfo.deliveryType === 2 && state.orderInfo.payStatus) {
|
||||||
|
pickUpVerifyRef.value && pickUpVerifyRef.value.markCode(res.data.pickUpVerifyCode);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
sheep.$router.back();
|
sheep.$router.back();
|
||||||
}
|
}
|
||||||
|
@ -429,7 +448,7 @@
|
||||||
color: rgba(#fff, 0.9);
|
color: rgba(#fff, 0.9);
|
||||||
width: 100%;
|
width: 100%;
|
||||||
background: v-bind(headerBg) no-repeat,
|
background: v-bind(headerBg) no-repeat,
|
||||||
linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
|
linear-gradient(90deg, var(--ui-BG-Main), var(--ui-BG-Main-gradient));
|
||||||
background-size: 750rpx 100%;
|
background-size: 750rpx 100%;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,261 @@
|
||||||
|
<template>
|
||||||
|
<view class='order-details'>
|
||||||
|
<!-- 自提商品核销 -->
|
||||||
|
<view v-if="orderInfo.deliveryType === 2 && orderInfo.payStatus" class="writeOff borRadius14">
|
||||||
|
<view class="title">核销信息</view>
|
||||||
|
<view class="grayBg flex-center">
|
||||||
|
<view class="pictrue">
|
||||||
|
<image
|
||||||
|
v-if="!!painterImageUrl"
|
||||||
|
:src="painterImageUrl"
|
||||||
|
:style="{width: `${state.qrcodeSize}px`, height: `${state.qrcodeSize}px`}"
|
||||||
|
:show-menu-by-longpress="true"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view class="gear">
|
||||||
|
<image :src="sheep.$url.static('/static/images/writeOff.png', 'local')"></image>
|
||||||
|
</view>
|
||||||
|
<view class="num">{{ orderInfo.pickUpVerifyCode }}</view>
|
||||||
|
<view class="rules">
|
||||||
|
<!-- TODO puhui999: 需要后端放回 -->
|
||||||
|
<!-- <view class="item">-->
|
||||||
|
<!-- <view class="rulesTitle flex flex-wrap align-center">-->
|
||||||
|
<!-- 核销时间-->
|
||||||
|
<!-- </view>-->
|
||||||
|
<!-- <view class="info">-->
|
||||||
|
<!-- 每日:-->
|
||||||
|
<!-- <text class="time">2020-2-+52</text>-->
|
||||||
|
<!-- </view>-->
|
||||||
|
<!-- </view>-->
|
||||||
|
<view class="item">
|
||||||
|
<view class="rulesTitle flex flex-wrap align-center">
|
||||||
|
<text class="iconfont icon-shuoming1"></text>
|
||||||
|
使用说明
|
||||||
|
</view>
|
||||||
|
<view class="info">可将二维码出示给店员扫描或提供数字核销码</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<view v-if="orderInfo.deliveryType === 2" class="map flex flex-wrap align-center ss-row-between borRadius14">
|
||||||
|
<view>自提地址信息</view>
|
||||||
|
<view class="place cart-color flex flex-wrap flex-center" @tap="showMaoLocation">
|
||||||
|
查看位置
|
||||||
|
</view>
|
||||||
|
</view>
|
||||||
|
<!-- 海报画板:默认隐藏只用来生成海报。生成方式为主动调用 -->
|
||||||
|
<l-painter
|
||||||
|
v-if="showPainter"
|
||||||
|
isCanvasToTempFilePath
|
||||||
|
pathType="url"
|
||||||
|
@success="setPainterImageUrl"
|
||||||
|
hidden
|
||||||
|
ref="painterRef"
|
||||||
|
/>
|
||||||
|
</view>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import sheep from '@/sheep';
|
||||||
|
import { reactive, ref } from 'vue';
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
orderInfo: {
|
||||||
|
type: Object,
|
||||||
|
default() {},
|
||||||
|
},
|
||||||
|
systemStore:{
|
||||||
|
type: Object,
|
||||||
|
default() {},
|
||||||
|
}
|
||||||
|
});
|
||||||
|
const state = reactive({
|
||||||
|
qrcodeSize: 145
|
||||||
|
})
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 打开地图
|
||||||
|
*/
|
||||||
|
const showMaoLocation = () => {
|
||||||
|
console.log(props.systemStore);
|
||||||
|
if (!props.systemStore.latitude || !props.systemStore.longitude) {
|
||||||
|
sheep.$helper.toast('缺少经纬度信息无法查看地图!');
|
||||||
|
return
|
||||||
|
}
|
||||||
|
uni.openLocation({
|
||||||
|
latitude: props.systemStore.latitude,
|
||||||
|
longitude: props.systemStore.longitude,
|
||||||
|
scale: 8,
|
||||||
|
name: props.systemStore.name,
|
||||||
|
address: props.systemStore.areaName + props.systemStore.detailAddress,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* 拨打电话
|
||||||
|
*/
|
||||||
|
const makePhone = () => {
|
||||||
|
uni.makePhoneCall({
|
||||||
|
phoneNumber: props.systemStore.phone
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
const painterRef = ref(); // 海报画板
|
||||||
|
const painterImageUrl = ref(); // 海报 url
|
||||||
|
const showPainter = ref(true)
|
||||||
|
// 渲染海报
|
||||||
|
const renderPoster = async (poster) => {
|
||||||
|
await painterRef.value.render(poster);
|
||||||
|
};
|
||||||
|
// 获得生成的图片
|
||||||
|
const setPainterImageUrl = (path) => {
|
||||||
|
painterImageUrl.value = path;
|
||||||
|
showPainter.value = false
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* 生成核销二维码
|
||||||
|
*/
|
||||||
|
const markCode = (text) => {
|
||||||
|
renderPoster({
|
||||||
|
css: {
|
||||||
|
width: `${state.qrcodeSize}px`,
|
||||||
|
height: `${state.qrcodeSize}px`
|
||||||
|
},
|
||||||
|
views:[
|
||||||
|
{
|
||||||
|
type: 'qrcode',
|
||||||
|
text: text,
|
||||||
|
css: {
|
||||||
|
width: `${state.qrcodeSize}px`,
|
||||||
|
height: `${state.qrcodeSize}px`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
})
|
||||||
|
}
|
||||||
|
defineExpose({
|
||||||
|
markCode
|
||||||
|
})
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped lang="scss">
|
||||||
|
// TODO puhui999: 样式需要调整有 bug
|
||||||
|
.borRadius14 {
|
||||||
|
border-radius: 14rpx !important;
|
||||||
|
}
|
||||||
|
.cart-color {
|
||||||
|
color: #E93323 !important;
|
||||||
|
border: 1px solid #E93323 !important
|
||||||
|
}
|
||||||
|
.order-details{
|
||||||
|
border-radius: 10rpx;
|
||||||
|
margin: 0 20rpx 20rpx 20rpx;
|
||||||
|
}
|
||||||
|
.order-details .writeOff {
|
||||||
|
background-color: #fff;
|
||||||
|
margin-top: 15rpx;
|
||||||
|
padding-bottom: 50rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .title {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #282828;
|
||||||
|
height: 87rpx;
|
||||||
|
border-bottom: 1px solid #f0f0f0;
|
||||||
|
padding: 0 24rpx;
|
||||||
|
line-height: 87rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .grayBg {
|
||||||
|
background-color: #f2f5f7;
|
||||||
|
width: 590rpx;
|
||||||
|
height: 384rpx;
|
||||||
|
border-radius: 20rpx 20rpx 0 0;
|
||||||
|
margin: 50rpx auto 0 auto;
|
||||||
|
padding-top: 55rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .grayBg .pictrue {
|
||||||
|
width: 290rpx;
|
||||||
|
height: 290rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .grayBg .pictrue image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .gear {
|
||||||
|
width: 590rpx;
|
||||||
|
height: 30rpx;
|
||||||
|
margin: 0 auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .gear image {
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .num {
|
||||||
|
background-color: #f0c34c;
|
||||||
|
width: 590rpx;
|
||||||
|
height: 84rpx;
|
||||||
|
color: #282828;
|
||||||
|
font-size: 48rpx;
|
||||||
|
margin: 0 auto;
|
||||||
|
border-radius: 0 0 20rpx 20rpx;
|
||||||
|
text-align: center;
|
||||||
|
padding-top: 4rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .rules {
|
||||||
|
margin: 46rpx 30rpx 0 30rpx;
|
||||||
|
border-top: 1px solid #f0f0f0;
|
||||||
|
padding-top: 10rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .rules .item {
|
||||||
|
margin-top: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .rules .item .rulesTitle {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #282828;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .rules .item .rulesTitle .iconfont {
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #333;
|
||||||
|
margin-right: 8rpx;
|
||||||
|
margin-top: 5rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .rules .item .info {
|
||||||
|
font-size: 28rpx;
|
||||||
|
color: #999;
|
||||||
|
margin-top: 7rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .writeOff .rules .item .info .time {
|
||||||
|
margin-left: 20rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .map {
|
||||||
|
height: 86rpx;
|
||||||
|
font-size: 30rpx;
|
||||||
|
color: #282828;
|
||||||
|
line-height: 86rpx;
|
||||||
|
border-bottom: 1px solid #f0f0f0;
|
||||||
|
margin-top: 15rpx;
|
||||||
|
background-color: #fff;
|
||||||
|
padding: 0 24rpx;
|
||||||
|
}
|
||||||
|
|
||||||
|
.order-details .map .place {
|
||||||
|
font-size: 26rpx;
|
||||||
|
width: 176rpx;
|
||||||
|
height: 50rpx;
|
||||||
|
border-radius: 25rpx;
|
||||||
|
line-height: 50rpx;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -13,9 +13,19 @@ const DeliveryApi = {
|
||||||
return request({
|
return request({
|
||||||
url: `/trade/delivery/pick-up-store/list`,
|
url: `/trade/delivery/pick-up-store/list`,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
params
|
params,
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
|
// 获得自提门店
|
||||||
|
getDeliveryPickUpStore: (id) => {
|
||||||
|
return request({
|
||||||
|
url: `/trade/delivery/pick-up-store/get`,
|
||||||
|
method: 'GET',
|
||||||
|
params: {
|
||||||
|
id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export default DeliveryApi;
|
export default DeliveryApi;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
Loading…
Reference in New Issue