完善接口
This commit is contained in:
42
src/api/order.ts
Normal file
42
src/api/order.ts
Normal file
@ -0,0 +1,42 @@
|
||||
import { http } from '@/http/alova'
|
||||
import type { IOrderListResult, IOrderDetailsResult } from '@/api/types/order'
|
||||
|
||||
/**
|
||||
* 获取订单列表
|
||||
*/
|
||||
export interface ITeaSpecialistOrderListParams {
|
||||
page: number
|
||||
size: number
|
||||
order_status: string
|
||||
search: string
|
||||
}
|
||||
|
||||
export function getTeaSpecialistOrderList(data: ITeaSpecialistOrderListParams) {
|
||||
return http.Post<IOrderListResult>('/api/order/orderList',
|
||||
data
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取订单详情
|
||||
*/
|
||||
export interface ITeaSpecialistOrderDetailsParams {
|
||||
id: number
|
||||
}
|
||||
export function getTeaSpecialistOrderDetails(data: ITeaSpecialistOrderDetailsParams) {
|
||||
return http.Post<IOrderDetailsResult>('/api/order/orderDetails',
|
||||
data
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消订单
|
||||
*/
|
||||
export interface ICancelTeaSpecialistOrderParams {
|
||||
id: number
|
||||
}
|
||||
export function cancelTeaSpecialistOrder(data: ICancelTeaSpecialistOrderParams) {
|
||||
return http.Post('/api/order/cancelOrder',
|
||||
data
|
||||
)
|
||||
}
|
||||
101
src/api/tea.ts
101
src/api/tea.ts
@ -1,5 +1,12 @@
|
||||
import { http } from '@/http/alova'
|
||||
import type { ITeaSpecialistDetailsResult, ITeaSpecialistFuture7DaysResult, ITeaTypeListResult, ICollectTeaSpecialistResult } from '@/api/types/tea'
|
||||
import type {
|
||||
ITeaSpecialistDetailsResult,
|
||||
ITeaSpecialistFuture7DaysResult,
|
||||
ITeaTypeListResult,
|
||||
ICollectTeaSpecialistResult,
|
||||
ICreateTeaSpecialistOrderResult,
|
||||
ITeaSpecialistOrderDetailsResult,
|
||||
ITeaSpecialistPrepayResult } from '@/api/types/tea'
|
||||
|
||||
/**
|
||||
* 获取茶艺师详情
|
||||
@ -44,7 +51,6 @@ export function getTeaSpecialistRewardAmounts() {
|
||||
/**
|
||||
* 获取门店地址
|
||||
*/
|
||||
|
||||
export interface ITeaHouseListParams {
|
||||
page: number
|
||||
size: number
|
||||
@ -84,3 +90,94 @@ export interface IGetCollectTeaSpecialistParams {
|
||||
export function getCollect(data: IGetCollectTeaSpecialistParams) {
|
||||
return http.Post<ICollectTeaSpecialistResult>('/api/Teamaster/teamasterCollectList', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 茶艺师邀约
|
||||
*/
|
||||
export interface ITeaSpecialistInviteParams {
|
||||
id: number
|
||||
}
|
||||
|
||||
export function teaSpecialistInvite(data: ITeaSpecialistInviteParams) {
|
||||
return http.Post('/api/Teamaster/invitation', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建预约茶艺师订单
|
||||
*/
|
||||
export interface ICreateTeaSpecialistOrderParams {
|
||||
teamaster_id: number
|
||||
address_id: number
|
||||
start_time: number
|
||||
end_time: number
|
||||
nums: number
|
||||
tea_id: string
|
||||
service_type: number
|
||||
store_id: number
|
||||
latitude: number
|
||||
longitude: number
|
||||
remark: string
|
||||
coupon_id: number
|
||||
hours: number
|
||||
}
|
||||
|
||||
export function createTeaSpecialistOrder(data: ICreateTeaSpecialistOrderParams) {
|
||||
return http.Post<ICreateTeaSpecialistOrderResult>('/api/order/submitOrder', data)
|
||||
}
|
||||
|
||||
/***
|
||||
* 获取订单详情
|
||||
*/
|
||||
export interface IGetTeaSpecialistOrderDetailsParams {
|
||||
id: number
|
||||
}
|
||||
|
||||
export function getTeaSpecialistOrderDetails(data: IGetTeaSpecialistOrderDetailsParams) {
|
||||
return http.Post<ITeaSpecialistOrderDetailsResult>('/api/order/orderDetails', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 预支付
|
||||
*/
|
||||
export interface ITeaSpecialistPrepayParams {
|
||||
order_id: number
|
||||
from: string
|
||||
pay_way: number
|
||||
order_source: number
|
||||
}
|
||||
|
||||
export function teaSpecialistPrepay(data: ITeaSpecialistPrepayParams) {
|
||||
return http.Post<ITeaSpecialistPrepayResult>('/api/pay/prepay', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付接口
|
||||
*/
|
||||
export interface ITeaSpecialistPayParams {
|
||||
id: number
|
||||
}
|
||||
|
||||
export function teaSpecialistPay(data: ITeaSpecialistPayParams) {
|
||||
return http.Post('/api/pay/yuePay', data)
|
||||
}
|
||||
|
||||
/**
|
||||
* 团体预约
|
||||
*/
|
||||
export interface ITeaSpecialistGroupReserveParams {
|
||||
numbers: string
|
||||
other_require: string
|
||||
res_time: string
|
||||
contact: string
|
||||
phone: string
|
||||
code: string
|
||||
province: string
|
||||
city: string
|
||||
district: string
|
||||
address: string
|
||||
content: string
|
||||
}
|
||||
|
||||
export function teaSpecialistGroupReserve(data: ITeaSpecialistGroupReserveParams) {
|
||||
return http.Post('/api/Teamaster/groupReservation', data)
|
||||
}
|
||||
17
src/api/types/order.ts
Normal file
17
src/api/types/order.ts
Normal file
@ -0,0 +1,17 @@
|
||||
/**
|
||||
* 订单列表返回数据
|
||||
*/
|
||||
export interface IOrderListResult {
|
||||
count: number
|
||||
list: Array<any>
|
||||
more: number
|
||||
page: string
|
||||
size: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情返回数据
|
||||
*/
|
||||
export interface IOrderDetailsResult {
|
||||
details: any
|
||||
}
|
||||
@ -9,6 +9,7 @@ export interface ITeaSpecialistDetailsResult {
|
||||
* 茶艺师详情字段
|
||||
*/
|
||||
export interface ITeaSpecialistDetailsFields {
|
||||
id: 0,
|
||||
name: string
|
||||
star: number
|
||||
image: string
|
||||
@ -27,6 +28,7 @@ export interface ITeaSpecialistDetailsFields {
|
||||
price: number
|
||||
fare_price: number
|
||||
collect: number
|
||||
up_status: number
|
||||
}
|
||||
|
||||
/**
|
||||
@ -78,4 +80,34 @@ export interface ICollectTeaSpecialistResult {
|
||||
more: Number
|
||||
page: string
|
||||
size: string
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建订单返回id
|
||||
*/
|
||||
export interface ICreateTeaSpecialistOrderResult {
|
||||
id: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 订单详情返回结果
|
||||
*/
|
||||
export interface ITeaSpecialistOrderDetailsResult {
|
||||
details: {
|
||||
order_amount: string
|
||||
order_sn: string
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 预支付返回结果
|
||||
*/
|
||||
export interface ITeaSpecialistPrepayResult {
|
||||
pay_id: number
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付返回结果
|
||||
*/
|
||||
export interface ITeaSpecialistPayResult {
|
||||
}
|
||||
@ -91,9 +91,9 @@
|
||||
couponType.value = args.type
|
||||
}
|
||||
|
||||
if (args.id && args.time) {
|
||||
if (args.id && args.numbers) {
|
||||
// 获取到茶艺师ID和预定了几个小时
|
||||
Coupons.handleInit(args.id, args.time)
|
||||
Coupons.handleInit(args.id, args.numbers)
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
<view v-for="item in teaList" :key="item.id"
|
||||
class="h-110rpx rounded-16rpx flex flex-col items-center justify-center text-28rpx leading-40rpx"
|
||||
:class="selectedRenewTea.includes(item.id) ? 'bg-[#4C9F44] text-[#fff]' : 'bg-[#F7F7F7] text-[#606266]'"
|
||||
@click="orderDetail.handleToggleRenewTea(item.id)">
|
||||
@click="OrderDetail.handleToggleRenewTea(item.id)">
|
||||
<view>{{item.title}}</view>
|
||||
<view>{{item.price}}</view>
|
||||
</view>
|
||||
@ -116,7 +116,7 @@
|
||||
|
||||
<view class="mt-54rpx text-32rpx leading-44rpx flex items-center justify-center leading-80rpx text-center">
|
||||
<view class="w-240rpx h-80rpx bg-[#F6F7F8] rounded-8rpx text-[#303133] mr-30rpx" @click="showRefundRule = false">取消</view>
|
||||
<view class="w-240rpx h-80rpx bg-[#4C9F44] rounded-8rpx text-[#fff]" @click="orderDetail.handleConfirmRefund">确定退款</view>
|
||||
<view class="w-240rpx h-80rpx bg-[#4C9F44] rounded-8rpx text-[#fff]" @click="OrderDetail.handleConfirmRefund">确定退款</view>
|
||||
</view>
|
||||
</view>
|
||||
</wd-popup>
|
||||
@ -206,54 +206,53 @@
|
||||
</view>
|
||||
</wd-popup>
|
||||
|
||||
<!-- 平台团购直营店 -->
|
||||
<view>
|
||||
<navbar :title="title" custom-class='!bg-[#F6F7F8]'></navbar>
|
||||
<navbar :title="title" custom-class='!bg-[#F6F7F8]' :leftArrow="false"></navbar>
|
||||
</view>
|
||||
|
||||
<view class="text-[#909399] text-26rpx leading-36rpx mb-40rpx">
|
||||
<view class="ml-80rpx" v-if="orderStatus === OrderStatus.Consuming || orderStatus === OrderStatus.Reserved || orderStatus === OrderStatus.Serving">使用过程中有任何问题,请联系客服</view>
|
||||
<view class="flex items-center justify-center" v-if="orderStatus === OrderStatus.Pending">
|
||||
<view class="ml-80rpx" v-if="orderStatus == TeaSpecialistOrderStatus.Serving || orderStatus == TeaSpecialistOrderStatus.Pay">使用过程中有任何问题,请联系客服</view>
|
||||
<view class="flex items-center justify-center" v-if="orderStatus == TeaSpecialistOrderStatus.Pending">
|
||||
<view class="flex items-center mr-6rpx">
|
||||
<wd-img width="36rpx" height="36rpx" :src="`${OSS}icon/icon_time.png`"/>
|
||||
</view>
|
||||
<view class="flex items-center text-26rpx leading-36rpx text-[#909399]">
|
||||
<view>还剩</view>
|
||||
<view class="mx-6rpx">
|
||||
<wd-count-down :time="time" custom-class="!text-[#FF5951]" />
|
||||
<wd-count-down :time="order.time1" custom-class="!text-[#FF5951]" />
|
||||
</view>
|
||||
<view>订单自动取消</view>
|
||||
</view>
|
||||
</view>
|
||||
<view class="ml-80rpx" v-if="orderStatus === OrderStatus.Finished">品一口香茗,让生活慢下来,从一杯好茶开始</view>
|
||||
<view class="ml-80rpx" v-if="orderStatus === OrderStatus.Confirm">您的服务已经结束,请及时确认订单</view>
|
||||
<view class="ml-80rpx" v-if="orderStatus == TeaSpecialistOrderStatus.Finished">感谢您的选择,期待再续茶香!</view>
|
||||
<view class="ml-80rpx" v-if="orderStatus == TeaSpecialistOrderStatus.Confirm">您的服务已经结束,请及时确认订单</view>
|
||||
</view>
|
||||
|
||||
<!-- 信息模块 -->
|
||||
<view class="mx-30rpx coupon-bg" >
|
||||
<view class="flex items-center px-30rpx pt-30rpx pb-40rpx">
|
||||
<view class="mr-30rpx">
|
||||
<wd-img width="190rpx" height="190rpx" :src="`${OSS}images/home/home_image5.png`" mode="scaleToFill"></wd-img>
|
||||
<wd-img width="190rpx" height="190rpx" :src="order.teamaster.image" mode="scaleToFill"></wd-img>
|
||||
</view>
|
||||
<view class="flex-1">
|
||||
<view class="flex justify-between items-center">
|
||||
<view class="font-bold text-30rpx leading-42rpx text-[#303133] mr-10rpx line-1 w-300rpx">
|
||||
茶艺师名称
|
||||
{{ order.teamaster.name }}
|
||||
<wd-icon name="chevron-right" size="32rpx"></wd-icon>
|
||||
</view>
|
||||
<view class="text-26rpx leading-36rpx text-[#909399]">¥324</view>
|
||||
<view class="text-26rpx leading-36rpx text-[#909399]">¥{{ order.order_amount }}</view>
|
||||
</view>
|
||||
<view class="flex justify-between items-center text-26rpx leading-36rpx text-[#909399] mt-18rpx">
|
||||
<view>¥108/小时</view>
|
||||
<view>x3</view>
|
||||
<view>¥{{ order.teamaster.price }}/小时</view>
|
||||
<view>x{{ order.hours }}</view>
|
||||
</view>
|
||||
<view class="flex justify-between items-center text-26rpx leading-36rpx text-[#909399] mt-18rpx">
|
||||
<view>车马费(¥3.00元/公里)</view>
|
||||
<view>x3</view>
|
||||
<view>车马费(¥{{ order.fare_price }}元/公里)</view>
|
||||
<view>¥{{ order.fare_distance_price }}/小时</view>
|
||||
</view>
|
||||
<view class="text-[#606266] text-right mt-26rpx" v-if="orderStatus !== OrderStatus.Pending">
|
||||
<view class="text-[#606266] text-right mt-26rpx" v-if="orderStatus !== TeaSpecialistOrderStatus.Pending">
|
||||
<text class="text-24rpx leading-34rpx mr-12rpx">实付</text>
|
||||
<text class="tetx-32rpx leading-36rpx">¥29.32</text>
|
||||
<text class="tetx-32rpx leading-36rpx">¥{{ order.order_amount }}</text>
|
||||
<wd-icon name="chevron-right" size="32rpx"></wd-icon>
|
||||
</view>
|
||||
</view>
|
||||
@ -262,11 +261,11 @@
|
||||
<view class="mt-28rpx pb-28rpx">
|
||||
<view class="text-30rpx leading-42rpx text-[#303133] px-30rpx">预约信息</view>
|
||||
<view class="font-500 text-26rpx leading-48rpx text-[#606266] mt-20rpx">
|
||||
<view class="mb-20rpx px-30rpx">预约时间:2025-03-18 09:00-12:00</view>
|
||||
<view class="mb-20rpx px-30rpx">预约时间:{{ order.start_time }} - {{ order.end_time }}</view>
|
||||
<view class="flex justify-between items-center pl-30rpx">
|
||||
<view>预约时长:3小时</view>
|
||||
<view
|
||||
v-if="orderStatus === OrderStatus.Reserved || orderStatus === OrderStatus.Consuming"
|
||||
v-if="orderStatus == TeaSpecialistOrderStatus.Reserved || orderStatus == TeaSpecialistOrderStatus.Consuming"
|
||||
class="bg-[#4C9F44] rounded-[100rpx_0rpx_0rpx_100rpx] font-bold text-28rpx leading-40rpx text-[#fff] w-170rpx h-56rpx flex justify-center items-center"
|
||||
@click="showRenewPopup = true">一键续订</view>
|
||||
</view>
|
||||
@ -275,7 +274,7 @@
|
||||
</view>
|
||||
|
||||
<!-- 地图显示 -->
|
||||
<view class="mx-30rpx mt-20rpx bg-white rounded-16rpx" v-if="orderStatus === OrderStatus.Serving || orderStatus === OrderStatus.Reserved">
|
||||
<view class="mx-30rpx mt-20rpx bg-white rounded-16rpx" v-if="orderStatus == TeaSpecialistOrderStatus.Serving || orderStatus == TeaSpecialistOrderStatus.Reserved">
|
||||
<view class="px-30rpx"> 地图显示</view>
|
||||
<view class="px-30rpx flex justify-between items-center">
|
||||
<view class="font-500 text-24rpx text-[#909399] leading-42rpx">信息没有更新,想问问茶艺师到哪里了?</view>
|
||||
@ -298,14 +297,14 @@
|
||||
<view>
|
||||
<view class="text-28rpx leading-40rpx flex items-center mt-22rpx">
|
||||
<view class="text-[#606266] mr-54rpx">服务方式</view>
|
||||
<view class="text-[#303133]">到店服务</view>
|
||||
<view class="text-[#303133]">{{ order.service_type }}</view>
|
||||
</view>
|
||||
<view class="text-28rpx leading-40rpx flex items-center mt-22rpx" v-if="orderStatus !== OrderStatus.Pending">
|
||||
<view class="text-28rpx leading-40rpx flex items-center mt-22rpx" v-if="orderStatus !== TeaSpecialistOrderStatus.Pending">
|
||||
<view class="text-[#606266] mr-54rpx">服务门店</view>
|
||||
<view class="text-[#303133] line-1 w-300rpx">茶馆名称茶馆名称茶馆名称茶馆名称茶馆名称茶馆名称茶馆名称</view>
|
||||
<view class="text-[#303133] line-1 w-300rpx">{{ order.store_address }}</view>
|
||||
</view>
|
||||
<view class="text-28rpx leading-40rpx flex items-center mt-22rpx">
|
||||
<view class="text-[#606266] mr-54rpx"> {{ orderStatus === OrderStatus.Serving ? '门店地址' : '服务地址' }}</view>
|
||||
<view class="text-[#606266] mr-54rpx"> {{ orderStatus === TeaSpecialistOrderStatus.Serving ? '门店地址' : '服务地址' }}</view>
|
||||
<view class="text-[#303133]">青浦区仓桥路478号</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -313,7 +312,7 @@
|
||||
<view class="text-center mr-20rpx" >
|
||||
<wd-img width="64rpx" height="64rpx" :src="`${OSS}icon/icon_nav.png`"/>
|
||||
</view>
|
||||
<view class="text-center" v-if="orderStatus === OrderStatus.Serving">
|
||||
<view class="text-center" v-if="orderStatus === TeaSpecialistOrderStatus.Serving">
|
||||
<wd-img width="64rpx" height="64rpx" :src="`${OSS}icon/icon_phone.png`"/>
|
||||
</view>
|
||||
</view>
|
||||
@ -322,7 +321,7 @@
|
||||
</view>
|
||||
|
||||
<!-- 支付方式 -->
|
||||
<view class="bg-white rounded-16rpx px-30rpx py-34rpx mx-30rpx mt-20rpx" v-if="orderStatus === OrderStatus.Pending">
|
||||
<view class="bg-white rounded-16rpx px-30rpx py-34rpx mx-30rpx mt-20rpx" v-if="orderStatus == TeaSpecialistOrderStatus.Pending">
|
||||
<wd-radio-group v-model="pay" shape="dot" checked-color="#4C9F44">
|
||||
<block v-for="(item, index) in PayList" :key="index">
|
||||
<view
|
||||
@ -336,7 +335,7 @@
|
||||
</view>
|
||||
<view class="flex items-center">
|
||||
<wd-radio :value="item.value">
|
||||
<view class="text-[#303133] text-26rpx leading-36rpx mr-20rpx" v-if="item.type !== PayCategory.WeChatPay">可用202.22</view>
|
||||
<view class="text-[#303133] text-26rpx leading-36rpx mr-20rpx" v-if="item.type != PayCategory.WeChatPay">可用202.22</view>
|
||||
</wd-radio>
|
||||
</view>
|
||||
</view>
|
||||
@ -350,22 +349,22 @@
|
||||
<view class="text-28rpx leading-40rpx text-[#606266] flex items-center justify-between mt-22rpx">
|
||||
<view>订单编号</view>
|
||||
<view>
|
||||
<text>7327328627526903</text>
|
||||
<text>{{ order.order_sn }}</text>
|
||||
<wd-divider vertical />
|
||||
<text class="text-[#4C9F44]">复制</text>
|
||||
<text class="text-[#4C9F44]" @click="OrderDetail.handleCopy(order.order_sn)">复制</text>
|
||||
</view>
|
||||
</view>
|
||||
<view class="text-28rpx leading-40rpx text-[#606266] flex items-center justify-between mt-22rpx" v-if="orderStatus !== OrderStatus.Pending">
|
||||
<view class="text-28rpx leading-40rpx text-[#606266] flex items-center justify-between mt-22rpx" v-if="orderStatus != TeaSpecialistOrderStatus.Pending">
|
||||
<view>交易方式</view>
|
||||
<view>微信支付</view>
|
||||
<view>{{ PayValueText[order.pay_way] }}</view>
|
||||
</view>
|
||||
<view class="text-28rpx leading-40rpx text-[#606266] flex items-center justify-between mt-22rpx">
|
||||
<view>创建时间</view>
|
||||
<view>2019-05-16 12:20:26</view>
|
||||
<view>{{ order.dtime }}</view>
|
||||
</view>
|
||||
<view class="text-28rpx leading-40rpx text-[#606266] flex items-center justify-between mt-22rpx" v-if="orderStatus !== OrderStatus.Pending">
|
||||
<view class="text-28rpx leading-40rpx text-[#606266] flex items-center justify-between mt-22rpx" v-if="orderStatus != TeaSpecialistOrderStatus.Pending">
|
||||
<view>付款时间</view>
|
||||
<view>2019-05-16 13:20:26</view>
|
||||
<view>{{ order.update_dtime }}</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -373,15 +372,15 @@
|
||||
<view class="w-full fixed bottom-0 left-0 right-0 bg-white h-152rpx">
|
||||
<view class="mt-34rpx">
|
||||
<!-- 预约单、服务中 -->
|
||||
<view class="text-32rpx leading-44rpx flex items-center justify-center leading-90rpx text-center" v-if="orderStatus === OrderStatus.Serving || orderStatus === OrderStatus.Confirm">
|
||||
<view class="w-330rpx h-90rpx bg-[#F6F7F8] rounded-8rpx text-[#303133] mr-30rpx" @click="orderDetail.handleAgainReeserve">再次预定</view>
|
||||
<view class="w-330rpx h-90rpx bg-[#4C9F44] rounded-8rpx text-[#fff]" @click="orderDetail.handleConfirmOrder">确认订单</view>
|
||||
<view class="text-32rpx leading-44rpx flex items-center justify-center leading-90rpx text-center" v-if="orderStatus === TeaSpecialistOrderStatus.Serving || orderStatus == TeaSpecialistOrderStatus.Confirm">
|
||||
<view class="w-330rpx h-90rpx bg-[#F6F7F8] rounded-8rpx text-[#303133] mr-30rpx" @click="OrderDetail.handleAgainReeserve">再次预定</view>
|
||||
<view class="w-330rpx h-90rpx bg-[#4C9F44] rounded-8rpx text-[#fff]" @click="OrderDetail.handleConfirmOrder">确认订单</view>
|
||||
</view>
|
||||
|
||||
<!-- 待付款 -->
|
||||
<view class="flex items-center justify-between mx-58rpx mt-34rpx" v-if="orderStatus === OrderStatus.Pending">
|
||||
<view class="flex items-center justify-between mx-58rpx mt-34rpx" v-if="orderStatus == TeaSpecialistOrderStatus.Pending">
|
||||
<view class="flex items-center">
|
||||
<view class="text-28rpx leading-40rpx text-[#606266] mr-16rpx" @click="orderDetail.handleCancelOrder">取消</view>
|
||||
<view class="text-28rpx leading-40rpx text-[#606266] mr-16rpx" @click="OrderDetail.handleCancelOrder">取消</view>
|
||||
<view class="flex items-center">
|
||||
<view class="mr-16rpx mt-[-8rpx]">
|
||||
<price-format color="#FF5951" :first-size="40" :second-size="40" :subscript-size="28" :price="23.02"></price-format>
|
||||
@ -396,14 +395,14 @@
|
||||
</view>
|
||||
|
||||
<!-- 已预约 -->
|
||||
<view class="text-32rpx leading-44rpx flex items-center justify-center leading-90rpx text-center" v-if="orderStatus === OrderStatus.Reserved">
|
||||
<view class="text-32rpx leading-44rpx flex items-center justify-center leading-90rpx text-center" v-if="orderStatus == TeaSpecialistOrderStatus.Reserved">
|
||||
<view class="w-330rpx h-90rpx bg-[#F6F7F8] rounded-8rpx text-[#303133] mr-30rpx" @click="showRefundRule = true">申请退款</view>
|
||||
<view class="w-330rpx h-90rpx bg-[#F6F7F8] rounded-8rpx text-[#303133]" @click="orderDetail.handleService">联系客服</view>
|
||||
<view class="w-330rpx h-90rpx bg-[#F6F7F8] rounded-8rpx text-[#303133]" @click="OrderDetail.handleService">联系客服</view>
|
||||
</view>
|
||||
|
||||
<!-- 交易完成 -->
|
||||
<view class="text-32rpx leading-44rpx flex items-center justify-center leading-90rpx text-center mt-34rpx"
|
||||
v-if="orderStatus === OrderStatus.Finished || orderStatus === OrderStatus.Cancelled">
|
||||
v-if="orderStatus == TeaSpecialistOrderStatus.Finished || orderStatus == TeaSpecialistOrderStatus.Cancelled">
|
||||
<view class="w-630rpx h-90rpx bg-[#4C9F44] rounded-8rpx text-[#fff]">再次预定</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -413,15 +412,16 @@
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { OrderStatusTitle, OrderStatus, OrderSource } from '@/utils/order'
|
||||
import {toast} from '@/utils/toast'
|
||||
import { OrderStatusTitle, OrderStatus, OrderSource, TeaSpecialistOrderStatusTextValue, TeaSpecialistOrderStatus } from '@/utils/order'
|
||||
import { getTeaSpecialistOrderDetails } from '@/api/order'
|
||||
import { toast } from '@/utils/toast'
|
||||
import { useMessage } from 'wot-design-uni'
|
||||
import { PayList, PayCategory, PayValue } from '@/utils/pay'
|
||||
import { PayList, PayCategory, PayValue, PayValueText } from '@/utils/pay'
|
||||
|
||||
const OSS = inject('OSS')
|
||||
|
||||
const title = ref<string>('')
|
||||
const orderStatus = ref<string>('') // 订单状态:待使用、退款等
|
||||
const orderStatus = ref<number>(0) // 订单状态:待使用、退款等
|
||||
const showRefundRule = ref<boolean>(false) // 退款规则弹窗
|
||||
|
||||
// 订单倒计时取消
|
||||
@ -470,17 +470,29 @@
|
||||
{id: 5, title: '红茶(3泡)', price: '¥128.00'},
|
||||
]
|
||||
const selectedRenewTea = ref<Array<any>>([]) // 选择的续订时间
|
||||
|
||||
|
||||
const showRenewSuccessPopup = ref<boolean>(false)
|
||||
/** 结束 **/
|
||||
|
||||
onLoad((args) => {
|
||||
title.value = OrderStatusTitle[OrderSource.TeaSpecialist][args.orderStatus] || '订单详情'
|
||||
orderStatus.value = args.orderStatus
|
||||
// 订单ID
|
||||
const orderId = ref<number>(0)
|
||||
const order = ref<any>({})
|
||||
|
||||
onLoad(async (args) => {
|
||||
orderId.value = args.orderId
|
||||
// 获取订单详情
|
||||
OrderDetail.handleInit()
|
||||
|
||||
})
|
||||
|
||||
const orderDetail = {
|
||||
const OrderDetail = {
|
||||
// 获取订单详情
|
||||
handleInit: async () => {
|
||||
const res = await getTeaSpecialistOrderDetails({id: orderId.value})
|
||||
const data = res.details
|
||||
order.value = data
|
||||
title.value = TeaSpecialistOrderStatusTextValue[data.order_status].title || '订单详情'
|
||||
orderStatus.value = data.order_status
|
||||
},
|
||||
|
||||
// 确认订单
|
||||
handleConfirmOrder: () => {
|
||||
message.confirm({
|
||||
@ -547,6 +559,16 @@
|
||||
handleService: () => {
|
||||
|
||||
},
|
||||
|
||||
|
||||
handleCopy: (text: string) => {
|
||||
uni.setClipboardData({
|
||||
data: text,
|
||||
success: () => {
|
||||
toast.info('复制成功')
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
|
||||
@ -8,25 +8,22 @@
|
||||
<template>
|
||||
<view class="">
|
||||
<view class="order-list sticky top-0 left-0 z-50 bg-[#F6F7F8] pb-10rpx">
|
||||
<wd-navbar safeAreaInsetTop custom-class='!bg-[#F6F7F8]' :bordered="false" placeholder @click-left="orderList.handleBack">
|
||||
<wd-navbar safeAreaInsetTop custom-class='!bg-[#F6F7F8]' :bordered="false" placeholder :leftArrow="false">
|
||||
<template #left>
|
||||
<view class="h-48rpx flex items-center">
|
||||
<view class="mt-4rpx">
|
||||
<wd-icon name="thin-arrow-left" size="30rpx"></wd-icon>
|
||||
</view>
|
||||
<view class="search-box">
|
||||
<wd-search v-model="keywords" hide-cancel placeholder-left light placeholder="搜索茶室订单"></wd-search>
|
||||
<view class="h-48rpx flex items-center w-[100%]">
|
||||
<view class="search-box w-[100%]">
|
||||
<wd-search v-model="keywords" placeholder-left light placeholder="搜索茶室订单"></wd-search>
|
||||
</view>
|
||||
</view>
|
||||
</template>
|
||||
</wd-navbar>
|
||||
<view class="tabs">
|
||||
<wd-tabs v-model="tab" swipeable slidable="always" :lazy="false" @click="orderList.handleChangeTabs">
|
||||
<wd-tab title="全部" name="all"></wd-tab>
|
||||
<wd-tab title="待付款" :name="OrderStatus.Pending"></wd-tab>
|
||||
<wd-tab title="预约单" :name="OrderStatus.Reserved"></wd-tab>
|
||||
<wd-tab title="待确认" :name="OrderStatus.Confirm"></wd-tab>
|
||||
<wd-tab title="已完结" :name="OrderStatus.Finished"></wd-tab>
|
||||
<wd-tab title="全部" :name="TeaSpecialistOrderStatusText.All"></wd-tab>
|
||||
<wd-tab title="待付款" :name="TeaSpecialistOrderStatusText.Pending"></wd-tab>
|
||||
<wd-tab title="预约单" :name="TeaSpecialistOrderStatusText.Pay"></wd-tab>
|
||||
<wd-tab title="待确认" :name="TeaSpecialistOrderStatusText.Confirm"></wd-tab>
|
||||
<wd-tab title="已完结" :name="TeaSpecialistOrderStatusText.Finished"></wd-tab>
|
||||
</wd-tabs>
|
||||
</view>
|
||||
</view>
|
||||
@ -34,37 +31,37 @@
|
||||
<view class="tabs mt-18rpx mx-30rpx">
|
||||
<!-- 这里可以尝试下不重新刷新获取列表 -->
|
||||
<!-- 全部 -->
|
||||
<mescroll-body ref="mescrollItem0" @init="mescrollInit" @down="downCallback" @up="orderList.upCallback" v-if="tab === 'all'">
|
||||
<view class="mb-20rpx" v-for="(item, index) in 10" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order-status="OrderStatus.Pending"></combo-card>
|
||||
<mescroll-body ref="mescrollItem0" @init="mescrollInit" @down="downCallback" @up="orderList.upCallback" :down="downOption" :up="upOption" v-if="tab === 'all'">
|
||||
<view class="mb-20rpx" v-for="(item, index) in list" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order="item"></combo-card>
|
||||
</view>
|
||||
</mescroll-body>
|
||||
|
||||
<!-- 待付款 -->
|
||||
<mescroll-body ref="mescrollItem1" @init="mescrollInit" @down="downCallback" @up="orderList.upCallback" v-if="tab === OrderStatus.Pending">
|
||||
<view class="mb-20rpx" v-for="(item, index) in 10" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order-status="OrderStatus.Pending"></combo-card>
|
||||
<mescroll-body ref="mescrollItem1" @init="mescrollInit" @down="downCallback" @up="orderList.upCallback" :down="downOption" :up="upOption" v-if="tab === OrderStatus.Pending">
|
||||
<view class="mb-20rpx" v-for="(item, index) in list" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order="item"></combo-card>
|
||||
</view>
|
||||
</mescroll-body>
|
||||
|
||||
<!-- 预约单 -->
|
||||
<mescroll-body ref="mescrollItem2" @init="mescrollInit" @down="downCallback" @up="orderList.upCallback" v-if="tab === OrderStatus.Reserved">
|
||||
<view class="mb-20rpx" v-for="(item, index) in 10" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order-status="OrderStatus.Pending"></combo-card>
|
||||
<mescroll-body ref="mescrollItem2" @init="mescrollInit" @down="downCallback" @up="orderList.upCallback" :down="downOption" :up="upOption" v-if="tab === OrderStatus.Reserved">
|
||||
<view class="mb-20rpx" v-for="(item, index) in list" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order="item"></combo-card>
|
||||
</view>
|
||||
</mescroll-body>
|
||||
|
||||
<!-- 待确认 -->
|
||||
<mescroll-body ref="mescrollItem2" @init="mescrollInit" @down="downCallback" @up="orderList.upCallback" v-if="tab === OrderStatus.Confirm">
|
||||
<view class="mb-20rpx" v-for="(item, index) in 10" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order-status="OrderStatus.Pending"></combo-card>
|
||||
<mescroll-body ref="mescrollItem2" @init="mescrollInit" @down="downCallback" @up="orderList.upCallback" :down="downOption" :up="upOption" v-if="tab === OrderStatus.Confirm">
|
||||
<view class="mb-20rpx" v-for="(item, index) in list" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order="item"></combo-card>
|
||||
</view>
|
||||
</mescroll-body>
|
||||
|
||||
<!-- 已完结 -->
|
||||
<mescroll-body ref="mescrollItem3" @init="mescrollInit" @down="downCallback" @up="orderList.upCallback" v-if="tab === OrderStatus.Finished">
|
||||
<view class="mb-20rpx" v-for="(item, index) in 10" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order-status="OrderStatus.Pending"></combo-card>
|
||||
<view class="mb-20rpx" v-for="(item, index) in list" :key="index">
|
||||
<combo-card :type="OrderSource.TeaSpecialist" :order="item"></combo-card>
|
||||
</view>
|
||||
</mescroll-body>
|
||||
</view>
|
||||
@ -74,18 +71,26 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { OrderSource, OrderStatus } from '@/utils/order'
|
||||
import { getTeaSpecialistOrderList } from '@/api/order'
|
||||
import ComboCard from '@/components/order/ComboCard.vue'
|
||||
import { onPageScroll, onReachBottom } from '@dcloudio/uni-app'
|
||||
import useMescroll from "@/uni_modules/mescroll-uni/hooks/useMescroll.js"
|
||||
import { TeaSpecialistOrderStatusText, TeaSpecialistOrderStatusValue } from '@/utils/order'
|
||||
|
||||
/* mescroll */
|
||||
const { mescrollInit, downCallback, getMescroll } = useMescroll(onPageScroll, onReachBottom) // 调用mescroll的hook
|
||||
|
||||
// 店铺类型
|
||||
|
||||
// 搜索
|
||||
const downOption = {
|
||||
auto: true
|
||||
}
|
||||
const upOption = {
|
||||
auto: true,
|
||||
textNoMore: '~ 已经到底啦 ~', //无更多数据的提示
|
||||
}
|
||||
const list = ref<Array<any>>([]) // 茶艺师列表
|
||||
const keywords = ref<string>('')
|
||||
const orderStatus = ref<string>('')
|
||||
|
||||
|
||||
// tab
|
||||
const tab = ref<string>('all')
|
||||
|
||||
@ -99,50 +104,36 @@
|
||||
const orderList = {
|
||||
// 上拉加载的回调: 其中num:当前页 从1开始, size:每页数据条数,默认10
|
||||
upCallback: (mescroll) => {
|
||||
// 需要留一下数据为空的时候显示的空数据图标内容
|
||||
// list({
|
||||
// page: mescroll.num,
|
||||
// size: mescroll.size
|
||||
// }).then((res: { list: Array<any>, totalPages: Number }) => {
|
||||
// const curPageData = res.list || [] // 当前页数据
|
||||
// if(mescroll.num == 1) goods.value = []; // 第一页需手动制空列表
|
||||
// goods.value = goods.value.concat(curPageData); //追加新数据
|
||||
const filter = {
|
||||
page: mescroll.num,
|
||||
size: mescroll.size,
|
||||
order_status: orderStatus.value,
|
||||
search: keywords.value
|
||||
}
|
||||
console.log('filter:', filter)
|
||||
|
||||
// console.log("🚀 ~ goods:", goods)
|
||||
|
||||
// mescroll.endByPage(curPageData.length, res.totalPages); //必传参数(当前页的数据个数, 总页数)
|
||||
|
||||
// }).catch(() => {
|
||||
// mescroll.endErr(); // 请求失败, 结束加载
|
||||
// })
|
||||
// apiGoods(mescroll.num, mescroll.size).then(res=>{
|
||||
// const curPageData = res.list || [] // 当前页数据
|
||||
// if(mescroll.num == 1) goods.value = []; // 第一页需手动制空列表
|
||||
// goods.value = goods.value.concat(curPageData); //追加新数据
|
||||
// //联网成功的回调,隐藏下拉刷新和上拉加载的状态;
|
||||
// //mescroll会根据传的参数,自动判断列表如果无任何数据,则提示空;列表无下一页数据,则提示无更多数据;
|
||||
|
||||
// //方法一(推荐): 后台接口有返回列表的总页数 totalPage
|
||||
// //mescroll.endByPage(curPageData.length, totalPage); //必传参数(当前页的数据个数, 总页数)
|
||||
|
||||
// //方法二(推荐): 后台接口有返回列表的总数据量 totalSize
|
||||
// //mescroll.endBySize(curPageData.length, totalSize); //必传参数(当前页的数据个数, 总数据量)
|
||||
|
||||
// //方法三(推荐): 您有其他方式知道是否有下一页 hasNext
|
||||
// //mescroll.endSuccess(curPageData.length, hasNext); //必传参数(当前页的数据个数, 是否有下一页true/false)
|
||||
|
||||
// //方法四 (不推荐),会存在一个小问题:比如列表共有20条数据,每页加载10条,共2页.如果只根据当前页的数据个数判断,则需翻到第三页才会知道无更多数据.
|
||||
// mescroll.endSuccess(curPageData.length); // 请求成功, 结束加载
|
||||
// }).catch(()=>{
|
||||
mescroll.endErr(); // 请求失败, 结束加载
|
||||
// })
|
||||
getTeaSpecialistOrderList(filter).then((res) => {
|
||||
const curPageData = res.list || [] // 当前页数据
|
||||
if(mescroll.num == 1) list.value = [] // 第一页需手动制空列表
|
||||
list.value = list.value.concat(curPageData) //追加新数据
|
||||
mescroll.endSuccess(curPageData.length, Boolean(res.more))
|
||||
}).catch(() => {
|
||||
mescroll.endErr() // 请求失败, 结束加载
|
||||
})
|
||||
},
|
||||
|
||||
// 切换tab
|
||||
handleChangeTabs: (e: {index: number, name: string}) => {
|
||||
tab.value = e.name
|
||||
if (e.name === TeaSpecialistOrderStatusText.Pending) {
|
||||
orderStatus.value = '0'
|
||||
} else {
|
||||
orderStatus.value = TeaSpecialistOrderStatusValue[e.name] || ''
|
||||
}
|
||||
|
||||
// 切换tab时,重置当前的mescroll
|
||||
// getMescroll().resetUpScroll();
|
||||
list.value = []
|
||||
getMescroll().resetUpScroll();
|
||||
},
|
||||
|
||||
// 返回上一页
|
||||
@ -159,6 +150,14 @@
|
||||
background-color: $cz-page-background;
|
||||
}
|
||||
|
||||
.order-list {
|
||||
:deep() {
|
||||
.wd-navbar__left {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.tabs {
|
||||
:deep() {
|
||||
.wd-tabs,
|
||||
|
||||
@ -23,7 +23,7 @@
|
||||
: selectedTime.includes(item2.start_time)
|
||||
? 'bg-[#F1F8F0] text-[#4C9F44]' // 选中高亮
|
||||
: 'bg-[#F7F7F7] text-[#303133]', // 可选高亮
|
||||
]" @click="item2.disabled == 1 && bookingTime.handleSelectTime(item2.start_time)">
|
||||
]" @click="item2.disabled == 1 && bookingTime.handleSelectTime(item2.start_time, item2.timestamp)">
|
||||
{{ item2.start_time }}
|
||||
</view>
|
||||
</view>
|
||||
@ -79,48 +79,31 @@
|
||||
|
||||
// 初始化时间
|
||||
onMounted(() => {
|
||||
bookingTime.handleInitTime()
|
||||
// bookingTime.handleInitTime()
|
||||
})
|
||||
|
||||
/** 日期相关 **/
|
||||
const timeList = [
|
||||
{ time: '09:00', disabled: true },
|
||||
{ time: '09:30', disabled: false },
|
||||
{ time: '10:00', disabled: false },
|
||||
{ time: '10:30', disabled: false },
|
||||
{ time: '11:00', disabled: false },
|
||||
{ time: '11:30', disabled: false },
|
||||
]
|
||||
const weekMap = ['周日', '周一', '周二', '周三', '周四', '周五', '周六']
|
||||
|
||||
const days = ref<string[]>([])
|
||||
const selectedDay = ref<number>(0)
|
||||
const selectedTime = ref<string[]>([])
|
||||
const selectedTimeStamp = ref<number[]>([])
|
||||
const countSelectedTime = ref<number>(0)
|
||||
|
||||
const bookingTime = {
|
||||
// 初始化时间逻辑
|
||||
handleInitTime: () => {
|
||||
const today = new Date()
|
||||
const result: string[] = []
|
||||
for (let i = 0; i < 7; i++) {
|
||||
const d = new Date(today)
|
||||
d.setDate(today.getDate() + i)
|
||||
const month = d.getMonth() + 1
|
||||
const date = d.getDate()
|
||||
const week = weekMap[d.getDay()]
|
||||
result.push(`${month}/${date}${week}`)
|
||||
}
|
||||
days.value = result
|
||||
console.log("🚀 ~ days.value:", days.value)
|
||||
},
|
||||
|
||||
// 选择的时间高亮显示
|
||||
handleSelectTime: (time: string) => {
|
||||
handleSelectTime: (time: string, timestamp: number) => {
|
||||
const idx = selectedTime.value.indexOf(time)
|
||||
if (idx > -1) {
|
||||
selectedTime.value.splice(idx, 1) // 取消选中
|
||||
selectedTimeStamp.value.splice(idx, 1)
|
||||
} else {
|
||||
selectedTime.value.push(time) // 选中
|
||||
selectedTimeStamp.value.push(timestamp)
|
||||
}
|
||||
|
||||
// 计算时长
|
||||
@ -142,7 +125,8 @@
|
||||
|
||||
const data = [
|
||||
selectedDay.value,
|
||||
selectedTime.value
|
||||
selectedTime.value,
|
||||
selectedTimeStamp.value.sort(),
|
||||
]
|
||||
emit('selectedTime', data)
|
||||
showPopup.value = false
|
||||
@ -151,12 +135,14 @@
|
||||
// 切换时间tab的时候把之前选中的时间重置
|
||||
handleChangeTimeTab: () => {
|
||||
selectedTime.value = []
|
||||
selectedTimeStamp.value = []
|
||||
countSelectedTime.value = 0
|
||||
},
|
||||
|
||||
// 重置选择的时间
|
||||
resetSelectedTime: () => {
|
||||
selectedTime.value = []
|
||||
selectedTimeStamp.value = []
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@ -145,54 +145,63 @@
|
||||
<view v-if="type === OrderSource.TeaSpecialist" class="bg-white rounded-10rpx p-28rpx">
|
||||
<view class="flex items-center">
|
||||
<view class="mr-28rpx">
|
||||
<wd-img width="200rpx" height="200rpx" :src="`${OSS}images/home/home_image5.png`"></wd-img>
|
||||
<wd-img width="200rpx" height="200rpx" :src="order.image"></wd-img>
|
||||
</view>
|
||||
<view class="flex-1" @click="comboCard.handleToOrderDetail">
|
||||
<view class="flex items-center relative">
|
||||
<view class="w-400rpx flex items-center">
|
||||
<view class="font-bold text-[#303133] text-30rpx leading-42rpx mr-14rpx">茶艺师</view>
|
||||
<view class="w-160rpx h-40rpx relative mr-44rpx">
|
||||
<view class="absolute left-0 top-0 h-36rpx flex items-start">
|
||||
<wd-img :src="`${OSS}icon/icon_gold_medal.png`" width="36rpx" height="36rpx"></wd-img>
|
||||
</view>
|
||||
<view class="bg-[#F0F6EF] text-[#006C2D] font-400 text-22rpx leading-32rpx rounded-4rpx text-center w-150rpx ml-18rpx pb-4rpx">金牌茶艺师</view>
|
||||
<view class="font-bold text-[#303133] text-30rpx leading-42rpx mr-14rpx">{{ order.name }}</view>
|
||||
<view class="">
|
||||
<tea-specialist-level :level="TeaSpecialistLevelValue[order.teamasterLevel[0].level_name]"></tea-specialist-level>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="font-400 text-28rpx leading-20rpx text-[#4C9F44] flex items-center absolute top-6rpx right-0">
|
||||
<text v-if="orderStatus === OrderStatus.Consuming">消费中</text>
|
||||
<text v-if="orderStatus === OrderStatus.Reserved">已预约</text>
|
||||
<text v-if="orderStatus === OrderStatus.Serving">服务中</text>
|
||||
<text v-if="orderStatus === OrderStatus.Finished" class="text-[#606266]">完成</text>
|
||||
<text v-if="orderStatus === OrderStatus.Pending" class="text-[#FF5951]" >待付款</text>
|
||||
<text v-if="orderStatus === OrderStatus.Cancelled" class="text-[#C9C9C9]" >订单取消</text>
|
||||
<text v-if="order.order_status === TeaSpecialistOrderStatus.Pending" class="text-[#FF5951]" >待付款</text>
|
||||
<text v-if="order.order_status === TeaSpecialistOrderStatus.Pay">已预约</text>
|
||||
<text v-if="order.order_status === TeaSpecialistOrderStatus.Serving">服务中</text>
|
||||
<text v-if="order.order_status === TeaSpecialistOrderStatus.Confirm" class="text-[#F29747]">待确认</text>
|
||||
<text v-if="order.order_status === TeaSpecialistOrderStatus.Finished" class="text-[#606266]">完成</text>
|
||||
<text v-if="order.order_status === TeaSpecialistOrderStatus.Cancelled" class="text-[#C9C9C9]" >订单取消</text>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="flex items-center">
|
||||
<template v-for="(label, labelIndex) in order.teamasterlabel" :key="labelIndex">
|
||||
<!-- 上门服务 -->
|
||||
<view class="mr-12rpx" v-if="label.id == 1">
|
||||
<wd-tag color="#40AE36" bg-color="#40AE36" plain custom-class="!rounded-4rpx">{{ label.label_name }}</wd-tag>
|
||||
</view>
|
||||
|
||||
<!-- 到点服务 -->
|
||||
<view class="mr-12rpx" v-if="label.id == 2">
|
||||
<wd-tag color="#F55726" bg-color="#F55726" plain custom-class="!rounded-4rpx">{{ label.label_name }}</wd-tag>
|
||||
</view>
|
||||
</template>
|
||||
|
||||
<view class="mr-12rpx">
|
||||
<wd-tag color="#40AE36" bg-color="#40AE36" plain custom-class="!rounded-4rpx">上门服务</wd-tag>
|
||||
<wd-tag color="#818CA9" bg-color="#F3F3F3">{{ order.both }}</wd-tag>
|
||||
</view>
|
||||
<view>
|
||||
<wd-tag color="#F55726" bg-color="#F55726" plain>到点服务</wd-tag>
|
||||
<view class="flex items-center mt-8rpx">
|
||||
<wd-img :src="order.sex == 1 ? `${OSS}icon/icon_man.png` : `${OSS}icon/icon_woman.png`" width="28rpx" height="28rpx"></wd-img>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="font-400 text-[#606266] text-26rpx leading-36rpx mt-42rpx">
|
||||
预约时间:03/18 08:00-12:00
|
||||
预约时间:{{ order.start_time }} - {{ order.end_time }}
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
<!-- 操作按钮 -->
|
||||
<view>
|
||||
<view v-if="orderStatus === OrderStatus.Finished || orderStatus === OrderStatus.Cancelled"
|
||||
<view v-if="order.order_status === TeaSpecialistOrderStatus.Finished || order.order_status === TeaSpecialistOrderStatus.Cancelled"
|
||||
class="flex items-center text-28rpx mt-28rpx justify-end"
|
||||
@click="comboCard.handleDeleteOrder(OrderSource.TeaSpecialist)">
|
||||
<view class="w-178rpx h-70rpx rounded-8rpx border-[2rpx] border-[#9CA3AF] text-[#303133] flex items-center justify-center">
|
||||
删除订单
|
||||
</view>
|
||||
</view>
|
||||
<view v-if="orderStatus === OrderStatus.Pending"
|
||||
<view v-if="order.order_status === TeaSpecialistOrderStatus.Pending"
|
||||
class="flex items-center text-28rpx mt-28rpx justify-end">
|
||||
<view class="w-178rpx h-70rpx rounded-8rpx border-[2rpx] border-[#9CA3AF] text-[#303133] mr-28rpx flex items-center justify-center"
|
||||
@click="comboCard.handleCancelOrder(OrderSource.TeaSpecialist)">
|
||||
@ -213,6 +222,9 @@
|
||||
import { OrderSource, OrderStatus } from '@/utils/order'
|
||||
import { useMessage } from 'wot-design-uni'
|
||||
import { toast } from '@/utils/toast'
|
||||
import { TeaSpecialistOrderStatus, TeaSpecialistOrderStatusText } from '@/utils/order'
|
||||
import {TeaSpecialistLevelValue} from '@/utils/teaSpecialist'
|
||||
import { router } from '@/utils/tools'
|
||||
|
||||
/**
|
||||
* ComboCard 套餐卡片组件
|
||||
@ -236,6 +248,11 @@
|
||||
orderStatus: {
|
||||
type: String,
|
||||
default: OrderStatus.ToUse
|
||||
},
|
||||
|
||||
order: {
|
||||
type: Object,
|
||||
default: {}
|
||||
}
|
||||
})
|
||||
|
||||
@ -336,30 +353,8 @@
|
||||
handleToOrderDetail: () => {
|
||||
// TODO 这里要对不同类型的订单进行区分跳转一个是直营的一个市加盟的
|
||||
switch (props.type) {
|
||||
case OrderSource.Direct:
|
||||
uni.navigateTo({
|
||||
url: `/bundle/order/platform/direct-order-detail?orderStatus=${props.orderStatus}`
|
||||
})
|
||||
break;
|
||||
case OrderSource.Franchise:
|
||||
uni.navigateTo({
|
||||
url: `/bundle/order/platform/franchise-order-detail?orderStatus=${props.orderStatus}`
|
||||
})
|
||||
break;
|
||||
case OrderSource.DouYin:
|
||||
uni.navigateTo({
|
||||
url: `/bundle/order/douyin/douyin-order-detail?orderStatus=${props.orderStatus}`
|
||||
})
|
||||
break;
|
||||
case OrderSource.TeaRoom:
|
||||
uni.navigateTo({
|
||||
url: `/bundle/order/tea-room/order-detail?orderStatus=${props.orderStatus}`
|
||||
})
|
||||
break;
|
||||
case OrderSource.TeaSpecialist:
|
||||
uni.navigateTo({
|
||||
url: `/bundle/order/tea-specialist/order-detail?orderStatus=${props.orderStatus}`
|
||||
})
|
||||
router.navigateTo(`/bundle/order/tea-specialist/order-detail?orderId=${props.order.id}`)
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
13
src/hooks/useOrder.ts
Normal file
13
src/hooks/useOrder.ts
Normal file
@ -0,0 +1,13 @@
|
||||
import { router } from '@/utils/tools'
|
||||
import { toast } from '@/utils/toast'
|
||||
import { cancelTeaSpecialistOrder } from '@/api/order'
|
||||
|
||||
// 取消订单
|
||||
export async function handleCancelOrder(id: number) {
|
||||
try {
|
||||
const response = await cancelTeaSpecialistOrder({ id })
|
||||
} catch (error) {
|
||||
router.navigateBack()
|
||||
throw error
|
||||
}
|
||||
}
|
||||
@ -27,7 +27,7 @@ export const getUrlCode = (): { [key: string]: string | undefined } => {
|
||||
*/
|
||||
export async function snsapiBaseAuthorize() {
|
||||
// TODO 测试代码
|
||||
wxSnsapiBaseLogin({code: '011haFFa1oJbzK04a8Ha1qQHey0haFFJ'}).then((res: IUserInfoVo) => {
|
||||
wxSnsapiBaseLogin({code: '0417vVGa1MfYBK0binIa1xEQQB37vVGV'}).then((res: IUserInfoVo) => {
|
||||
console.log("登录成功 ~ snsapiBaseAuthorize ~ res:", res)
|
||||
// 映射 IUserLogin 到 IUserInfoVo
|
||||
useUserStore().setUserInfo(res)
|
||||
|
||||
@ -16,7 +16,7 @@
|
||||
<view class="mt-56rpx text-center">
|
||||
<view class="text-28rpx leading-40rpx text-#606266">顾客打赏-{{ info.name }}</view>
|
||||
<view class="mt-24rpx">
|
||||
<price-format color="#303133" :first-size="44" :second-size="44" :subscript-size="28" :price="tipMoney"></price-format>
|
||||
<price-format color="#303133" :first-size="44" :second-size="44" :subscript-size="28" :price="money"></price-format>
|
||||
</view>
|
||||
<view class="mt-12rpx flex items-center justify-center">
|
||||
<view class="text-24rpx leading-34rpx text-#606266">
|
||||
@ -42,21 +42,27 @@
|
||||
|
||||
<script lang="ts" setup>
|
||||
import Pay from '@/components/Pay.vue'
|
||||
import { getTeaSpecialistDetails } from '@/api/tea'
|
||||
import { getTeaSpecialistDetails, getTeaSpecialistOrderDetails, teaSpecialistPrepay, teaSpecialistPay } from '@/api/tea'
|
||||
import { ITeaSpecialistDetailsFields } from '@/api/types/tea'
|
||||
import { toast } from '@/utils/toast'
|
||||
import { router } from '@/utils/tools'
|
||||
import { payTipTeaSpecialist } from '@/api/pay'
|
||||
import { useUserStore } from '@/store'
|
||||
import type {IUserInfoVo } from '@/api/types/login'
|
||||
|
||||
// 用户信息
|
||||
const userInfo = ref<IUserInfoVo>(null)
|
||||
|
||||
// 支付倒计时取消
|
||||
const time = ref<number>(30 * 60 * 60 * 1000)
|
||||
|
||||
// 打赏金额
|
||||
const tipMoney = ref<number>(0)
|
||||
// 支付金额
|
||||
const money = ref<number>(0)
|
||||
|
||||
// 茶艺师详情
|
||||
const id = ref<number>(0)
|
||||
const info = reactive<ITeaSpecialistDetailsFields>({
|
||||
id: 0,
|
||||
name: '',
|
||||
star: 0,
|
||||
image: '',
|
||||
@ -68,27 +74,34 @@
|
||||
teamasterLevel: [],
|
||||
price: 0,
|
||||
fare_price: 0,
|
||||
collect: 0
|
||||
collect: 0,
|
||||
up_status: 0
|
||||
})
|
||||
|
||||
// 支付方式
|
||||
const pay = ref<number>(0)
|
||||
|
||||
// 订单
|
||||
const orderId = ref<number>(0)
|
||||
const order = ref<{}>(null)
|
||||
const result = ref<string>('')
|
||||
const from = ref<string>('')
|
||||
|
||||
onLoad(async (args) => {
|
||||
if (args.id && args.lat && args.lng && args.user_id && args.money) {
|
||||
id.value = Number(args.id)
|
||||
tipMoney.value = Number(args.money)
|
||||
const userStore = useUserStore()
|
||||
userInfo.value = userStore.userInfo
|
||||
|
||||
// 获取茶艺师详情
|
||||
const res = await getTeaSpecialistDetails({
|
||||
id: args.id,
|
||||
latitude: args.lat,
|
||||
longitude: args.lng,
|
||||
user_id: args.user_id
|
||||
})
|
||||
// 将返回的数据合并到 reactive 对象中
|
||||
Object.assign(info, res.teamaster || {})
|
||||
from.value = args.from || ''
|
||||
|
||||
if (args.from == 'tip' && args.teaSpecialistId && args.money) {
|
||||
// 这边处理打赏金额
|
||||
id.value = Number(args.teaSpecialistId)
|
||||
money.value = Number(args.money)
|
||||
Cashier.handleGetTeaSpecialistDetails(id.value, Number(userInfo.value.id))
|
||||
} else if (args.from == 'order' && args.teaSpecialistId && args.orderId) {
|
||||
// 获取订单详情
|
||||
orderId.value = Number(args.orderId)
|
||||
Cashier.handleGetOrderDetails()
|
||||
} else {
|
||||
toast.info('参数错误')
|
||||
return
|
||||
@ -97,22 +110,84 @@
|
||||
console.log('页面加载')
|
||||
})
|
||||
|
||||
onUnload(() => {
|
||||
switch(result.value) {
|
||||
case 'success':
|
||||
uni.$emit('payment', { result: true, orderId: orderId.value })
|
||||
break;
|
||||
case 'fail':
|
||||
default: uni.$emit('payment', { result: false, orderId: orderId.value })
|
||||
}
|
||||
})
|
||||
|
||||
const Cashier = {
|
||||
// 获取茶艺师详情
|
||||
handleGetTeaSpecialistDetails: async (id: number, user_id: number) => {
|
||||
const res = await getTeaSpecialistDetails({
|
||||
id,
|
||||
latitude: uni.getStorageSync('latitude'),
|
||||
longitude: uni.getStorageSync('longitude'),
|
||||
user_id
|
||||
})
|
||||
// 将返回的数据合并到 reactive 对象中
|
||||
Object.assign(info, res.teamaster || {})
|
||||
},
|
||||
|
||||
// 获取订单详情
|
||||
handleGetOrderDetails: async () => {
|
||||
// 获取订单详情接口
|
||||
const res = await getTeaSpecialistOrderDetails({id: orderId.value})
|
||||
order.value = res
|
||||
money.value = Number(res.details.order_amount)
|
||||
},
|
||||
|
||||
// 获取支付方式
|
||||
handleGetPayValue: (value: number) => {
|
||||
pay.value = value
|
||||
},
|
||||
|
||||
// 去支付
|
||||
handleToPay: () => {
|
||||
payTipTeaSpecialist({
|
||||
id: id.value,
|
||||
tip_price: tipMoney.value,
|
||||
pay_type: pay.value
|
||||
}).then(res => {
|
||||
router.navigateTo('/pages/notice/reserve?type=tipSuccess')
|
||||
console.log("🚀 ~ res:", res)
|
||||
})
|
||||
handleToPay: async () => {
|
||||
console.log("🚀 ~ pay.value :", pay.value )
|
||||
if (pay.value == null || pay.value == undefined) {
|
||||
toast.info('请选择支付方式')
|
||||
return
|
||||
}
|
||||
|
||||
if (from.value == 'tip') {
|
||||
payTipTeaSpecialist({
|
||||
id: id.value,
|
||||
tip_price: money.value,
|
||||
pay_type: pay.value
|
||||
}).then(res => {
|
||||
router.navigateTo('/pages/notice/reserve?type=tipSuccess')
|
||||
console.log("🚀 ~ res:", res)
|
||||
})
|
||||
} else if (from.value == 'order') {
|
||||
try {
|
||||
// 预支付
|
||||
const res1 = await teaSpecialistPrepay({
|
||||
order_id: orderId.value,
|
||||
from: 'balance',
|
||||
pay_way: pay.value,
|
||||
order_source: 2 //订单来源:1-小程序;2-h5;3app
|
||||
})
|
||||
|
||||
// 支付
|
||||
const res2 = await teaSpecialistPay({
|
||||
id: res1.pay_id
|
||||
})
|
||||
result.value = 'success'
|
||||
} catch (error) {
|
||||
result.value = 'fail'
|
||||
}
|
||||
|
||||
setTimeout(() => {
|
||||
uni.navigateBack({delta: 1})
|
||||
}, 500);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
@ -283,7 +283,7 @@
|
||||
<script lang="ts" setup>
|
||||
import TeaSpecialistLevel from '@/components/TeaSpecialistLevel.vue'
|
||||
import { useMessage } from 'wot-design-uni'
|
||||
import { getTeaSpecialistDetails, collectTeaSpecialist, getTeaSpecialistRewardAmounts } from '@/api/tea'
|
||||
import { getTeaSpecialistDetails, collectTeaSpecialist, getTeaSpecialistRewardAmounts, teaSpecialistInvite } from '@/api/tea'
|
||||
import { ITeaSpecialistDetailsFields } from '@/api/types/tea'
|
||||
import type { ITeaSpecialistRewardAmountsResult } from '@/api/types/tea'
|
||||
import { toast } from '@/utils/toast'
|
||||
@ -310,6 +310,7 @@
|
||||
// 茶艺师
|
||||
const id = ref<number>(0)
|
||||
const info = reactive<ITeaSpecialistDetailsFields>({
|
||||
id: 0,
|
||||
name: '',
|
||||
star: 0,
|
||||
image: '',
|
||||
@ -321,7 +322,8 @@
|
||||
teamasterLevel: [],
|
||||
price: 0,
|
||||
fare_price: 0,
|
||||
collect: 0
|
||||
collect: 0,
|
||||
up_status: 0
|
||||
})
|
||||
const latitude = ref<number>(0) // 纬度
|
||||
const longitude = ref<number>(0) // 经度
|
||||
@ -370,6 +372,11 @@
|
||||
Object.assign(info, res.teamaster || {})
|
||||
rate.value = info.star
|
||||
|
||||
// 茶艺师是否上线
|
||||
// if (info.up_status == 0) {
|
||||
// isReserve.value = true
|
||||
// }
|
||||
|
||||
if (info.teamasterlabel) {
|
||||
info.teamasterlabel.map(item => {
|
||||
if (item.label_name == '90后茶艺师') {
|
||||
@ -417,15 +424,15 @@
|
||||
handleReserve: () => {
|
||||
message.alert({
|
||||
title: '邀约茶艺师',
|
||||
msg: '尊敬的客户我们即将向[茶艺师姓名]发出服务邀约,请过十分钟后刷新页面,谢谢您的支持!',
|
||||
msg: `尊敬的客户我们即将向[${info.name}]发出服务邀约,请过十分钟后刷新页面,谢谢您的支持!`,
|
||||
confirmButtonText: '好的',
|
||||
confirmButtonProps: {
|
||||
customClass: '!bg-[#4C9F44] !text-[#fff] !text-32rpx !leading-44rpx !rounded-8rpx',
|
||||
}
|
||||
}).then((res) => {
|
||||
// 点击确认按钮回调事件
|
||||
}).catch(() => {
|
||||
// 点击取消按钮回调事件
|
||||
}).then(async res => {
|
||||
await teaSpecialistInvite({
|
||||
id: info.id,
|
||||
})
|
||||
})
|
||||
},
|
||||
|
||||
@ -441,7 +448,7 @@
|
||||
isOtherTip.value = true
|
||||
} else {
|
||||
showTipTeaSpecialistPopup.value = false
|
||||
router.navigateTo(`/pages/cashier/cashier?id=${id.value}&lat=${latitude.value}&lng=${longitude.value}&user_id=${userInfo.value.id}&money=${item.tip_price}`)
|
||||
router.navigateTo(`/pages/cashier/cashier?id=${id.value}&lat=${latitude.value}&lng=${longitude.value}&money=${item.tip_price}`)
|
||||
}
|
||||
},
|
||||
|
||||
@ -452,7 +459,7 @@
|
||||
return
|
||||
}
|
||||
showTipTeaSpecialistPopup.value = false
|
||||
router.navigateTo(`/pages/cashier/cashier?id=${id.value}&lat=${latitude.value}&lng=${longitude.value}&user_id=${userInfo.value.id}&money=${tipMoney.value}`)
|
||||
router.navigateTo(`/pages/cashier/cashier?from=tip&teaSpecialistId=${id.value}&money=${tipMoney.value}`)
|
||||
},
|
||||
|
||||
// 预约茶艺师
|
||||
|
||||
@ -179,10 +179,10 @@
|
||||
}
|
||||
const latitude = ref<number>(import.meta.env.VITE_DEFAULT_LATITUDE) // 纬度
|
||||
const longitude = ref<number>(import.meta.env.VITE_DEFAULT_LONGITUDE) // 经度
|
||||
// 存储经纬度
|
||||
uni.setStorageSync('latitude', latitude.value)
|
||||
uni.setStorageSync('longitude', longitude.value)
|
||||
|
||||
// 经纬度缓存过期处理(1小时)
|
||||
const LOCATION_EXPIRE_KEY = 'location_expire_time'
|
||||
const LOCATION_EXPIRE_MS = 60 * 60 * 1000 // 1小时
|
||||
const defaultCity = ref<string>(import.meta.env.VITE_DEFAULT_ADDRESS) // 默认城市
|
||||
const list = ref<Array<any>>([]) // 茶艺师列表
|
||||
const teaSpecialistName = ref<string>('') // 茶艺师名称
|
||||
@ -190,18 +190,8 @@
|
||||
const cityValue = ref<string>('')
|
||||
|
||||
onLoad(async () => {
|
||||
|
||||
// 授权获取地址
|
||||
await wxGetLocation((res) => {
|
||||
latitude.value = res.latitude
|
||||
longitude.value = res.longitude
|
||||
|
||||
// 授权后存储经纬度
|
||||
uni.setStorageSync('latitude', latitude.value)
|
||||
uni.setStorageSync('longitude', longitude.value)
|
||||
|
||||
Index.handleSearch()
|
||||
})
|
||||
// 检查缓存是否过期,超时则重新授权
|
||||
await Index.handleEnsureLocationAuth()
|
||||
|
||||
// 获取城市列表
|
||||
getCity({latitude: latitude.value, longitude: longitude.value}).then((res: any) => {
|
||||
@ -213,8 +203,8 @@
|
||||
})
|
||||
})
|
||||
// getDecorate({id: 1}).then((res: any) => {
|
||||
// const data = JSON.parse(res.data)
|
||||
// console.log('装修数据:', data)
|
||||
// const data = JSON.parse(res.data)
|
||||
// console.log('装修数据:', data)
|
||||
// })
|
||||
|
||||
// 等待授权完成后再加载数据
|
||||
@ -224,6 +214,52 @@
|
||||
})
|
||||
|
||||
const Index = {
|
||||
// 设置经纬度缓存
|
||||
handleSetLocationCache: (lat: number, lng: number) => {
|
||||
uni.setStorageSync('latitude', lat)
|
||||
uni.setStorageSync('longitude', lng)
|
||||
uni.setStorageSync(LOCATION_EXPIRE_KEY, Date.now() + LOCATION_EXPIRE_MS)
|
||||
},
|
||||
|
||||
// 检查经纬度缓存是否过期
|
||||
handleCheckLocationCache: () => {
|
||||
const expire = uni.getStorageSync(LOCATION_EXPIRE_KEY)
|
||||
if (expire && Date.now() > expire) {
|
||||
uni.removeStorageSync('latitude')
|
||||
uni.removeStorageSync('longitude')
|
||||
uni.removeStorageSync(LOCATION_EXPIRE_KEY)
|
||||
return false
|
||||
}
|
||||
return true
|
||||
},
|
||||
|
||||
// 初始化经纬度
|
||||
handleEnsureLocationAuth: async () => {
|
||||
if (!Index.handleCheckLocationCache()) {
|
||||
// 超时,重新获取授权
|
||||
await wxGetLocation((res) => {
|
||||
latitude.value = res.latitude
|
||||
longitude.value = res.longitude
|
||||
Index.handleSetLocationCache(latitude.value, longitude.value)
|
||||
Index.handleSearch()
|
||||
})
|
||||
} else {
|
||||
const lat = uni.getStorageSync('latitude')
|
||||
const lng = uni.getStorageSync('longitude')
|
||||
if (lat && lng) {
|
||||
latitude.value = lat
|
||||
longitude.value = lng
|
||||
} else {
|
||||
await wxGetLocation((res) => {
|
||||
latitude.value = res.latitude
|
||||
longitude.value = res.longitude
|
||||
Index.handleSetLocationCache(latitude.value, longitude.value)
|
||||
Index.handleSearch()
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
// 选择城市
|
||||
handleSelectCity: (e: any) => {
|
||||
cityValue.value = e.value
|
||||
|
||||
@ -66,7 +66,7 @@
|
||||
<wd-img width="100%" height="100%" :src="`${OSS}images/my/my_image3.png`" mode="aspectFill"></wd-img>
|
||||
</view>
|
||||
<view class="text-[#303133] absolute bottom-12rpx left-24rpx text-center">
|
||||
<view class="text-30rpx leading-36rpx fon-bold">{{ isLogin ? '¥2106.3623' : '- -' }}</view>
|
||||
<view class="text-30rpx leading-36rpx fon-bold">{{ isLogin ? user.user_money : '- -' }}</view>
|
||||
<view class="text-20rpx leading-28rpx ml-10rpx">平台余额</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -190,6 +190,7 @@
|
||||
|
||||
// 登录信息相关
|
||||
const userInfo = ref<any>(null)
|
||||
const user = ref<any>(null)
|
||||
const isLogin = ref<boolean>(false)
|
||||
const isVip = ref<boolean>(true)
|
||||
|
||||
@ -220,8 +221,10 @@
|
||||
userInfo.value = userStore.userInfo
|
||||
isLogin.value = true
|
||||
|
||||
const user = getUserInfo()
|
||||
console.log("🚀 ~ user:", user)
|
||||
// 获取用户详情信息接口
|
||||
getUserInfo().then(res => {
|
||||
user.value = res
|
||||
})
|
||||
|
||||
} else if (code && !userStore.userInfo.token) {
|
||||
// 这里是微信授权之后跳转回到本页面获取到code但是没有登录状态的话需要进行登录操作
|
||||
|
||||
@ -10,7 +10,7 @@
|
||||
<template>
|
||||
<view class="pb-70rpx">
|
||||
<view class="">
|
||||
<navbar title="加盟合作" custom-class='!bg-[#F6F7F8]'></navbar>
|
||||
<navbar title="预订团体茶艺师" custom-class='!bg-[#F6F7F8]' :leftArrow="false"></navbar>
|
||||
</view>
|
||||
|
||||
<view class="mx-30rpx mt-38rpx">
|
||||
@ -25,14 +25,7 @@
|
||||
</view>
|
||||
|
||||
<view class="flex items-center">
|
||||
<wd-input placeholder="请填写预约人数" no-border></wd-input>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="flex items-center mt-46rpx" v-if="form.settleIn === 2">
|
||||
<view class="text-32rpx leading-44rpx text-#303133 mr-66rpx">门店名称</view>
|
||||
<view class="flex-1">
|
||||
<wd-input no-border placeholder="请填写门店名称" custom-class="!bg-[#F6F7F8] !rounded-16rpx !px-28rpx !py-20rpx"></wd-input>
|
||||
<wd-input placeholder="请填写预约人数" no-border v-model='form.numbers'></wd-input>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -48,7 +41,7 @@
|
||||
|
||||
<view>
|
||||
<wd-checkbox-group v-model="requirementValue" inline shape="square" checked-color="#4C9F44">
|
||||
<wd-checkbox custom-class="!mr-40rpx" :modelValue="item.value" v-for="(item, index) in requirement" :key="index">{{ item.label }}</wd-checkbox>
|
||||
<wd-checkbox custom-class="!mr-40rpx" :modelValue="item.label" v-for="(item, index) in requirement" :key="index">{{ item.label }}</wd-checkbox>
|
||||
</wd-checkbox-group>
|
||||
</view>
|
||||
</view>
|
||||
@ -81,14 +74,14 @@
|
||||
<view>
|
||||
<view class="text-26rpx leading-32rpx text-#606266">联系人</view>
|
||||
<view class="mt-20rpx border-b border-b-solid border-b-[#F6F7F8] pb-20rpx">
|
||||
<wd-input no-border placeholder="请填写联系人" ></wd-input>
|
||||
<wd-input no-border placeholder="请填写联系人" v-model="form.contact"></wd-input>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<view class="mt-22rpx">
|
||||
<view class="text-26rpx leading-32rpx text-#606266">手机号</view>
|
||||
<view class="mt-20rpx border-b border-b-solid border-b-[#F6F7F8] pb-20rpx">
|
||||
<wd-input no-border placeholder="请填写手机号"></wd-input>
|
||||
<wd-input no-border placeholder="请填写手机号" v-model="form.phone"></wd-input>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -121,19 +114,19 @@
|
||||
<view class="mt-22rpx">
|
||||
<view class="text-26rpx leading-32rpx text-#606266">详细地址</view>
|
||||
<view class="mt-20rpx pb-20rpx">
|
||||
<wd-input no-border placeholder="请输入小区/写字楼"></wd-input>
|
||||
<wd-input no-border placeholder="请输入小区/写字楼" v-model="form.address"></wd-input>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
<!-- 留言建议 -->
|
||||
<!-- 订单信息 -->
|
||||
<view class="bg-white rounded-16rpx px-30rpx py-32rpx mt-20rpx">
|
||||
<view class="text-32rpx leading-44rpx text-#303133 mb-32rpx flex items-center">
|
||||
留言建议
|
||||
订单信息<text class="text-26rpx leading-36rpx text-[#909399] ml-20rpx">(选填)</text>
|
||||
</view>
|
||||
<view class="">
|
||||
<wd-textarea placeholder="有想说的可以在这里写哦!" v-model="form.message" custom-class='!rounded-18rpx !border-2rpx !border-[#EFF0EF] !bg-[#F8F9FA]' custom-textarea-class='!bg-[#F8F9FA]' />
|
||||
<wd-textarea placeholder="有想说的可以在这里写哦!" v-model="form.content" custom-class='!rounded-18rpx !border-2rpx !border-[#EFF0EF] !bg-[#F8F9FA]' custom-textarea-class='!bg-[#F8F9FA]' />
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
@ -147,6 +140,8 @@
|
||||
<script lang="ts" setup>
|
||||
import { useColPickerData } from '@/hooks/useColPickerData'
|
||||
import {toast} from '@/utils/toast'
|
||||
import {ITeaSpecialistGroupReserveParams, teaSpecialistGroupReserve} from '@/api/tea'
|
||||
import { router } from '@/utils/tools'
|
||||
|
||||
const OSS = inject('OSS')
|
||||
|
||||
@ -182,8 +177,8 @@
|
||||
resolve(
|
||||
areaData.map((item) => {
|
||||
return {
|
||||
value: item.value,
|
||||
label: item.text
|
||||
value: item.value,
|
||||
label: item.text
|
||||
}
|
||||
})
|
||||
)
|
||||
@ -191,6 +186,7 @@
|
||||
finish()
|
||||
}
|
||||
}
|
||||
const address = ref<string[]>([])
|
||||
|
||||
// 上传文件
|
||||
const fileList = ref<any[]>([])
|
||||
@ -202,14 +198,18 @@
|
||||
const countDown = ref<any>(null) // 倒计时组件
|
||||
|
||||
// 表单
|
||||
const form = reactive<{
|
||||
settleIn: number,
|
||||
code: string,
|
||||
message: string
|
||||
}>({
|
||||
settleIn: 1,
|
||||
const form = reactive<ITeaSpecialistGroupReserveParams>({
|
||||
numbers: '',
|
||||
other_require: '',
|
||||
res_time: '',
|
||||
contact: '',
|
||||
phone: '',
|
||||
code: '',
|
||||
message: ''
|
||||
province: '',
|
||||
city: '',
|
||||
district: '',
|
||||
address: '',
|
||||
content: '',
|
||||
})
|
||||
|
||||
const GroupTeaSpecialist = {
|
||||
@ -234,8 +234,10 @@
|
||||
},
|
||||
|
||||
// 确认选择地址
|
||||
handleConfirmAddress: (selected) => {
|
||||
console.log("🚀 ~ selected:", selected)
|
||||
handleConfirmAddress: (items) => {
|
||||
form.province = items.selectedItems[0]?.label || ''
|
||||
form.city = items.selectedItems[1]?.label || ''
|
||||
form.district = items.selectedItems[2]?.label || ''
|
||||
},
|
||||
|
||||
// 日期过滤
|
||||
@ -243,7 +245,6 @@
|
||||
if (type === 'year') {
|
||||
const currentYear = new Date().getFullYear()
|
||||
return values.filter((year) => year == currentYear)
|
||||
|
||||
}
|
||||
return values
|
||||
},
|
||||
@ -258,11 +259,62 @@
|
||||
},
|
||||
|
||||
// 提交订单
|
||||
handleSubmitOrder: () => {
|
||||
// 这里还需要多日期进行校验
|
||||
uni.navigateTo({
|
||||
url: '/pages/notice/reserve?type=groupTeaSpecialist'
|
||||
})
|
||||
handleSubmitOrder: async() => {
|
||||
const require = requirementValue.value.join(',')
|
||||
|
||||
// 日期格式化为 yyyy-MM-dd
|
||||
const d = new Date(timeValue.value)
|
||||
const year = d.getFullYear()
|
||||
const month = (d.getMonth() + 1).toString().padStart(2, '0')
|
||||
const day = d.getDate().toString().padStart(2, '0')
|
||||
const time = `${year}-${month}-${day}`
|
||||
|
||||
form.other_require = require
|
||||
form.res_time = time
|
||||
|
||||
if (form.numbers.trim() === '') {
|
||||
toast.info('请填写预约人数')
|
||||
return
|
||||
}
|
||||
|
||||
if (form.res_time.trim() === '') {
|
||||
toast.info('请选择预定日期')
|
||||
return
|
||||
}
|
||||
|
||||
if (form.contact.trim() === '') {
|
||||
toast.info('请填写联系人')
|
||||
return
|
||||
}
|
||||
|
||||
if (form.phone.trim() === '') {
|
||||
toast.info('请填写手机号')
|
||||
return
|
||||
}
|
||||
|
||||
if (form.code.trim() === '') {
|
||||
toast.info('请填写验证码')
|
||||
return
|
||||
}
|
||||
|
||||
if (form.province.trim() === '' || form.city.trim() === '' || form.district.trim() === '') {
|
||||
toast.info('请选择省市区')
|
||||
return
|
||||
}
|
||||
|
||||
if (form.address.trim() === '') {
|
||||
toast.info('请填写详细地址')
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
await teaSpecialistGroupReserve(form)
|
||||
setTimeout(() => {
|
||||
router.navigateTo('/pages/notice/reserve?type=groupTeaSpecialist')
|
||||
}, 800)
|
||||
} catch (error) {}
|
||||
|
||||
console.log("🚀 ~ form:", form)
|
||||
},
|
||||
|
||||
checkedData: (date: number) => {
|
||||
@ -272,12 +324,14 @@
|
||||
d.setHours(0, 0, 0, 0)
|
||||
if (d < today) {
|
||||
toast.info("请选择大于今天的日期")
|
||||
timeValue.value = Date.now()
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
}
|
||||
console.log("🚀 ~ value:", value)
|
||||
</script>
|
||||
|
||||
<style lang="scss">
|
||||
|
||||
@ -77,35 +77,6 @@
|
||||
</view>
|
||||
</wd-popup>
|
||||
|
||||
<!-- 支付 -->
|
||||
<wd-popup v-model="showPayPopup" lock-scroll custom-style="border-radius: 32rpx 32rpx 0rpx 0rpx;" @close="showPayPopup = false" position="bottom">
|
||||
<view class='bg-[#FBFBFB] py-40rpx realtive'>
|
||||
<view class="absolute top-18rpx right-30rpx" @click="showPayPopup = false">
|
||||
<wd-img width="60rpx" height='60rpx' :src="`${OSS}icon/icon_close.png`"></wd-img>
|
||||
</view>
|
||||
<view class="text-36rpx text-[#121212] leading-50rpx text-center">支付</view>
|
||||
<view class="mx-30rpx bg-white rounded-16rpx px-30rpx pt-40rpx mt-40rpx pb-30rpx">
|
||||
<wd-radio-group v-model="pay" shape="dot" checked-color="#4C9F44">
|
||||
<view class="pay" v-for="(item, index) in PayList" :key="index" @click="pay = item.id">
|
||||
<view class="flex justify-between items-center" v-if="pay == item.value" >
|
||||
<view class="flex items-center">
|
||||
<wd-img width="50rpx" height="50rpx" :src="item.icon"></wd-img>
|
||||
<view class="ml-20rpx text-30rpx text-[#303133] leading-42rpx">{{ item.name }}</view>
|
||||
</view>
|
||||
<view class="flex items-center">
|
||||
<wd-radio :value="item.value">
|
||||
<view class="text-[#303133] text-26rpx leading-36rpx mr-20rpx">可用202.22</view>
|
||||
</wd-radio>
|
||||
</view>
|
||||
</view>
|
||||
</view>
|
||||
</wd-radio-group>
|
||||
</view>
|
||||
|
||||
<view class='bg-[#4C9F44] text-[#fff] rounded-8rpx h-90rpx leading-90rpx mx-60rpx box-border text-center mt-170rpx' @click="TeaRoom.handlePay">确定付款</view>
|
||||
</view>
|
||||
</wd-popup>
|
||||
|
||||
<!-- 茶艺服务 -->
|
||||
<wd-popup v-model="showTeaServicePopup" lock-scroll custom-style="border-radius: 32rpx 32rpx 0rpx 0rpx;" position="bottom">
|
||||
<view class="relative">
|
||||
@ -217,14 +188,10 @@
|
||||
<view class="mt-20rpx bg-white px-30rpx py-34rpx">
|
||||
<view class="flex items-center justify-between">
|
||||
<view class="font-bold text-32rpx leading-44rpx">服务方式</view>
|
||||
<view>
|
||||
<wd-radio-group v-model="serviceTypeValue" shape="dot" checked-color="#4C9F44" inline>
|
||||
<block v-for="(item, index) in serviceType" :key="index">
|
||||
<wd-radio :value="item.type">
|
||||
<view class="text-[#303133] text-26rpx leading-36rpx mt-4rpx">{{item.name}}</view>
|
||||
</wd-radio>
|
||||
</block>
|
||||
</wd-radio-group>
|
||||
<view class="bg-[#F0F6EF] h-60rpx rounded-20rpx flex items-center justify-between py-14rpx px-30rpx relative w-304rpx font-400 text-26rpx text-[#333]">
|
||||
<view class="absolute left-30rpx top-1/2 -translate-y-1/2 z-2" :class="serviceTypeValue == 1 ? 'text-[#fff]' : ''" @click="TeaRoom.handleChooseService(1)">到店服务</view>
|
||||
<view class="absolute right-30rpx top-1/2 -translate-y-1/2 z-2" :class="serviceTypeValue == 2 ? 'text-[#fff]' : ''" @click="TeaRoom.handleChooseService(2)">上门服务</view>
|
||||
<view class="swiper-service"></view>
|
||||
</view>
|
||||
</view>
|
||||
|
||||
@ -330,9 +297,9 @@
|
||||
</view>
|
||||
|
||||
<!-- 支付方式 -->
|
||||
<view class="bg-white py-26rpx px-30rpx mt-20rpx">
|
||||
<pay hide-store-balance></pay>
|
||||
</view>
|
||||
<!-- <view class="bg-white py-26rpx px-30rpx mt-20rpx">
|
||||
<pay hide-store-balance @pay="TeaRoom.handleGetPayValue"></pay>
|
||||
</view> -->
|
||||
|
||||
<view class="fixed left-0 right-0 bottom-0 z-2 bg-[#fff]"
|
||||
:style="{ height: '140rpx' }">
|
||||
@ -366,7 +333,7 @@
|
||||
import {ReserveServiceCategory} from '@/utils/order'
|
||||
import { PayList, PayCategory, PayValue } from '@/utils/pay'
|
||||
import Pay from '@/components/Pay.vue'
|
||||
import { getTeaSpecialistDetails, getNext7Days, getTeaTypeList } from '@/api/tea'
|
||||
import { getTeaSpecialistDetails, getNext7Days, getTeaTypeList, createTeaSpecialistOrder } from '@/api/tea'
|
||||
import type { ITeaSpecialistDetailsFields, ITeaSpecialistFuture7DaysResult, ITeaTypeListResult } from '@/api/types/tea'
|
||||
import { TeaSpecialistLevelValue } from '@/utils/teaSpecialist'
|
||||
import type { IUserAddressListResult } from '@/api/types/user'
|
||||
@ -391,6 +358,7 @@
|
||||
minimum_time: 0,
|
||||
time: []
|
||||
})
|
||||
const reserveTime = ref<Array<any>>([])
|
||||
|
||||
// 上门服务选择的地址
|
||||
const address = ref<IUserAddressListResult>({
|
||||
@ -428,18 +396,18 @@
|
||||
const orderRemarks = ref<string>('')
|
||||
|
||||
// 支付方式
|
||||
const pay = ref<number>(1)
|
||||
const pay = ref<number>(0)
|
||||
|
||||
const html: string = '<p>这里是富文本内容,需要后台传递</p>'
|
||||
const isGroupBuying: boolean = false // 是否是团购套餐
|
||||
|
||||
// 费用明细相关
|
||||
const showCostPopup = ref<boolean>(false) // 费用明细popup
|
||||
const showPayPopup = ref<boolean>(false) // 支付popup
|
||||
|
||||
// 茶艺师
|
||||
const teaSpecialistId = ref<number>(0)
|
||||
const info = reactive<ITeaSpecialistDetailsFields>({
|
||||
id: 0,
|
||||
name: '',
|
||||
star: 0,
|
||||
image: '',
|
||||
@ -451,7 +419,8 @@
|
||||
teamasterLevel: [],
|
||||
price: 0,
|
||||
fare_price: 0,
|
||||
collect: 0
|
||||
collect: 0,
|
||||
up_status: 0
|
||||
})
|
||||
const is90 = ref<boolean>(false)
|
||||
|
||||
@ -463,7 +432,9 @@
|
||||
service: {
|
||||
total: 0,
|
||||
unitPrice: 0,
|
||||
num: 0
|
||||
num: 0,
|
||||
startTime: 0,
|
||||
endTime: 0
|
||||
},
|
||||
travel: {
|
||||
total: 0,
|
||||
@ -481,15 +452,7 @@
|
||||
total: 0
|
||||
})
|
||||
|
||||
// 提交的数据
|
||||
const reserveTime = ref<Array<any>>([])
|
||||
|
||||
onLoad(async (args) => {
|
||||
if (args.type == ReserveServiceCategory.GroupBuying) {
|
||||
// TODO 如果是团购套餐则直接微信支付?
|
||||
pay.value = 3
|
||||
}
|
||||
|
||||
if (args.id) {
|
||||
teaSpecialistId.value = Number(args.id)
|
||||
|
||||
@ -531,17 +494,22 @@
|
||||
console.log("🚀 ~ teaList.value:", teaList.value)
|
||||
},
|
||||
|
||||
// 选择服务方式
|
||||
handleChooseService: (type: number) => {
|
||||
serviceTypeValue.value = type
|
||||
const swiperService = document.querySelector('.swiper-service') as HTMLElement
|
||||
if (type == 1) {
|
||||
swiperService.style.transform = 'translateY(-50%) translateX(0)'
|
||||
} else if (type == 2) {
|
||||
swiperService.style.transform = 'translateY(-50%) translateX(76px)'
|
||||
}
|
||||
},
|
||||
|
||||
handleClick: (item: any) => {
|
||||
// 处理点击事件
|
||||
console.log('Clicked item:', item)
|
||||
},
|
||||
|
||||
handlePay: () => {
|
||||
// 这里需要判断下如果是预约的话,跳转结果通知是reserve的,团购是pay的
|
||||
// uni.navigateTo({ url: '/bundle/reserve-room/result' })
|
||||
},
|
||||
|
||||
|
||||
// 切换预定茶叶选择
|
||||
handleToggleTea: (id: number, name: string, price: number) => {
|
||||
const index = selectedTea.value.indexOf(id)
|
||||
@ -558,7 +526,7 @@
|
||||
}
|
||||
|
||||
totalSelectedTeaPrice.value = toPlus(selectedTeaPrice.value)
|
||||
bill.value.teaService.total = totalSelectedTeaPrice.value
|
||||
bill.value.teaService.total = Number(totalSelectedTeaPrice.value) // 更新茶艺服务费用
|
||||
},
|
||||
|
||||
// 选择门店
|
||||
@ -584,13 +552,22 @@
|
||||
bill.value.service = {
|
||||
total: toTimes(info.price, params[1].length),
|
||||
unitPrice: info.price,
|
||||
num: params[1].length
|
||||
num: params[1].length,
|
||||
startTime: params[2][0],
|
||||
endTime: params[2][params[2].length - 1],
|
||||
},
|
||||
|
||||
reserveTime.value = params
|
||||
console.log("🚀 ~ bill.value:", bill.value)
|
||||
},
|
||||
|
||||
// 跳转优惠券页面
|
||||
handleToCoupon(type) {
|
||||
if (reserveTime.value.length == 0) {
|
||||
toast.info('请选择预定时间')
|
||||
return
|
||||
}
|
||||
|
||||
uni.$on('chooseCoupon', params => {
|
||||
uni.$off('chooseCoupon')
|
||||
console.log("🚀 ~ params:", params)
|
||||
@ -598,13 +575,9 @@
|
||||
bill.value.coupon = params.coupon.coupon_price
|
||||
})
|
||||
|
||||
if (reserveTime.value.length == 0) {
|
||||
toast.info('请选择预定时间')
|
||||
return
|
||||
}
|
||||
// 获取预定了几个小时
|
||||
const count = reserveTime.value[1].length
|
||||
uni.navigateTo({ url: `/bundle/coupon/coupon?id=${teaSpecialistId.value}&time=${count}&type=${type}` })
|
||||
uni.navigateTo({ url: `/bundle/coupon/coupon?id=${teaSpecialistId.value}&numbers=${count}&type=${type}` })
|
||||
},
|
||||
|
||||
// 重置差茶艺服务
|
||||
@ -624,10 +597,76 @@
|
||||
showTeaServicePopup.value = false
|
||||
},
|
||||
|
||||
// 获取支付方式
|
||||
handleGetPayValue: (value: number) => {
|
||||
pay.value = value
|
||||
},
|
||||
|
||||
// 提交表单
|
||||
handleSubmitOrder: () => {
|
||||
showPayPopup.value = true
|
||||
uni.navigateTo({ url: '/pages/notice/reserve?type=teaSpecialist' })
|
||||
handleSubmitOrder: async () => {
|
||||
if (serviceTypeValue.value == 1 && teaHouse.value.id == 0) {
|
||||
toast.info('请选择门店地址')
|
||||
return
|
||||
}
|
||||
|
||||
if (serviceTypeValue.value == 2 && address.value.id == 0) {
|
||||
toast.info('请选择上门服务地址')
|
||||
return
|
||||
}
|
||||
|
||||
if (reserveTime.value.length == 0) {
|
||||
toast.info('请选择预定时间')
|
||||
return
|
||||
}
|
||||
|
||||
if (selectedTea.value.length == 0) {
|
||||
toast.info('请选择茶艺时服务')
|
||||
return
|
||||
}
|
||||
|
||||
const params = {
|
||||
teamaster_id: info.id,
|
||||
address_id: address.value.id,
|
||||
start_time: bill.value.service.startTime,
|
||||
end_time: bill.value.service.endTime,
|
||||
nums: servicePeople.value,
|
||||
tea_id: selectedTea.value.join(','),
|
||||
service_type: serviceTypeValue.value,
|
||||
store_id: teaHouse.value.id,
|
||||
latitude: uni.getStorageSync('latitude') || 0,
|
||||
longitude: uni.getStorageSync('longitude') || 0,
|
||||
remark: orderRemarks.value,
|
||||
coupon_id: selectedCoupon.value.id || 0,
|
||||
hours: bill.value.service.num
|
||||
}
|
||||
|
||||
|
||||
try {
|
||||
const res = await createTeaSpecialistOrder(params)
|
||||
|
||||
uni.$on('payment', params => {
|
||||
console.log("🚀 ~ params:", params)
|
||||
setTimeout(() => {
|
||||
uni.$off("payment")
|
||||
if (params.result) {
|
||||
uni.redirectTo({
|
||||
url: `/pages/notice/reserve?type=teaSpecialist&orderId=${params.orderId}`
|
||||
})
|
||||
} else {
|
||||
uni.redirectTo({
|
||||
url: '/bundle/order/tea-specialist/order-list'
|
||||
})
|
||||
}
|
||||
}, 1000)
|
||||
})
|
||||
|
||||
setTimeout(() => {
|
||||
router.navigateTo(`/pages/cashier/cashier?from=order&orderId=${res.id}&teaSpecialistId=${info.id}`)
|
||||
}, 800)
|
||||
} catch (error) {
|
||||
toast.info('订单提交失败,请稍后重试')
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -638,6 +677,7 @@
|
||||
|
||||
let total = Number(toPlus(s, t, ts))
|
||||
if (bill.value.coupon > 0 ) {
|
||||
total + bill.value.coupon
|
||||
return total - bill.value.coupon
|
||||
}
|
||||
return total
|
||||
@ -674,4 +714,19 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
.swiper-service {
|
||||
content: " ";
|
||||
display: block;
|
||||
background-color: #4C9F44;
|
||||
width: 152rpx;
|
||||
height: 56rpx;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 50%;
|
||||
transform: translateY(-50%);
|
||||
border-radius: 20rpx;
|
||||
transition: all 0.3s ease;
|
||||
z-index: 0;
|
||||
}
|
||||
</style>
|
||||
@ -165,4 +165,58 @@ export const OrderStatusTitle: Record<OrderSource, Record<OrderStatus, string>>
|
||||
[OrderStatus.AfterSaleApply]: '申请售后',
|
||||
[OrderStatus.AfterSaleProcessing]: '申请售后中'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 茶艺师订单状态数字
|
||||
export enum TeaSpecialistOrderStatus {
|
||||
Pending = 0, // 待付款(未支付)
|
||||
Pay = 1, // 预约单、已预约(已支付)
|
||||
Cancelled = 2, // 已取消(订单取消)
|
||||
Confirm = 3, // 待确认(已接单)
|
||||
Serving = 4, // 服务中
|
||||
Finished = 5, // 已完成
|
||||
}
|
||||
|
||||
// 茶艺师订单状态文本
|
||||
export enum TeaSpecialistOrderStatusText {
|
||||
All = 'all', // 待付款
|
||||
Pending = 'pending', // 待付款
|
||||
Pay = 'pay', // 已支付(预约单、已预约)
|
||||
Cancelled = 'cancelled', // 已取消
|
||||
Confirm = 'confirm', // 待确认
|
||||
Serving = 'serving', // 服务中
|
||||
Finished = 'finished', // 已完成
|
||||
}
|
||||
|
||||
// 状态内容映射
|
||||
export const TeaSpecialistOrderStatusTextValue: Record<TeaSpecialistOrderStatus, any> = {
|
||||
[TeaSpecialistOrderStatus.Pending]: {
|
||||
title: '等待付款'
|
||||
},
|
||||
[TeaSpecialistOrderStatus.Pay]: {
|
||||
title: '等待付款'
|
||||
},
|
||||
[TeaSpecialistOrderStatus.Cancelled]: {
|
||||
title: '等待付款'
|
||||
},
|
||||
[TeaSpecialistOrderStatus.Confirm]: {
|
||||
title: '等待付款'
|
||||
},
|
||||
[TeaSpecialistOrderStatus.Serving]: {
|
||||
title: '等待付款'
|
||||
},
|
||||
[TeaSpecialistOrderStatus.Finished]: {
|
||||
title: '等待付款'
|
||||
},
|
||||
}
|
||||
|
||||
export const TeaSpecialistOrderStatusValue: Record<TeaSpecialistOrderStatusText, string | number> = {
|
||||
[TeaSpecialistOrderStatusText.All]: '',
|
||||
[TeaSpecialistOrderStatusText.Pending]: 0,
|
||||
[TeaSpecialistOrderStatusText.Pay]: 1,
|
||||
[TeaSpecialistOrderStatusText.Cancelled]: 2,
|
||||
[TeaSpecialistOrderStatusText.Confirm]: 3,
|
||||
[TeaSpecialistOrderStatusText.Serving]: 4,
|
||||
[TeaSpecialistOrderStatusText.Finished]: 5,
|
||||
}
|
||||
|
||||
@ -20,6 +20,12 @@ export enum PayValue {
|
||||
StoreBalance = 3, // 门店余额
|
||||
}
|
||||
|
||||
export const PayValueText: Record<PayValue, string> = {
|
||||
[PayValue.PlatformBalance]: '平台余额',
|
||||
[PayValue.WeChatPay]: '微信支付',
|
||||
[PayValue.StoreBalance]: '门店余额',
|
||||
}
|
||||
|
||||
// 支付方式列表
|
||||
export const PayList: PayMethod[] = [
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user