更新了AI换装,修复了分包导致的页面丢失问题

This commit is contained in:
yuanteng0011 2025-05-07 07:38:37 +08:00
parent d245e7e26d
commit 5e28f0f6c2
23 changed files with 115 additions and 2476 deletions

View File

@ -6,4 +6,6 @@ export const domain = 'https://www.carboner.cn:8888/api'
export const myIp = 'http://8.130.119.119:9092/api'
export const nwct = 'https://winning-mouse-internally.ngrok-free.app/api'
export const suiUrl = ''
export const testEnvironment = 'http://1.94.237.210:7777/api'
export const baseUrl = domain

View File

@ -8,33 +8,6 @@
"navigationBarBackgroundColor": "#ede8e7"
}
},
{
"path": "pages/my-order/myGeneralOrderDetail/myGeneralOrderDetail",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true //
}
},
{
"path": "pages/my-order/myServiceOrderDetail/myServiceOrderDetail",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true //
}
},
{
"path": "pages/my-order/myOrderList/myOrderList",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true //
}
},
{
"path": "pages/my-order/researchOrder/researchOrder",
"style": {
"navigationBarTitleText": ""
}
},
{
"path": "pages/workshop/searchResult/searchResult",
"style": {
@ -257,6 +230,47 @@
"style": {
"navigationBarTitleText": ""
}
},
{
"path" : "changeClothes/changeClothes",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path" : "clothesPop/clothesPop",
"style" :
{
"navigationBarTitleText" : ""
}
},
{
"path": "my-order/myGeneralOrderDetail/myGeneralOrderDetail",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true //
}
},
{
"path": "my-order/myServiceOrderDetail/myServiceOrderDetail",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true //
}
},
{
"path": "my-order/myOrderList/myOrderList",
"style": {
"navigationBarTitleText": "",
"enablePullDownRefresh": true //
}
},
{
"path": "my-order/researchOrder/researchOrder",
"style": {
"navigationBarTitleText": ""
}
}
]
}

View File

@ -152,14 +152,14 @@ const sucRes =(res)=>{ //请求成功执行的方法
}
}
const chooseLocation = () => { //
// uni.chooseLocation({
// success: (res) => {
// // console.log(':' + res.address);
// // console.log(':' + res.name);
// addressParam.value.region = res.address
// addressParam.value.detailAddress = res.name
// }
// })
uni.chooseLocation({
success: (res) => {
// console.log(':' + res.address);
// console.log(':' + res.name);
addressParam.value.region = res.address
addressParam.value.detailAddress = res.name
}
})
}
const bindTimeChange = (e) => { //picker
addressParam.value.region = e.detail.value[0] + e.detail.value[1] + e.detail.value[2]

View File

@ -168,7 +168,7 @@
}
const gotoOrderListPage = (tab) => {
uni.navigateTo({
url: '/pages/my-order/myOrderList/myOrderList?status=' + tab
url: '/pages/subPack/my-order/myOrderList/myOrderList?status=' + tab
})
}

View File

@ -1,37 +0,0 @@
<template>
<view class="flex-row items-center equal-division-item" style="display: flex; align-items: center;">
<image
class="shrink-0 image_3"
:src="myOrderUrl + '/component/nav.png'"
/>
<text class="ml-2 font text_18" style="margin-left: 5rpx;">导航</text>
</view>
</template>
<script setup>
import { onLoad } from "@dcloudio/uni-app";
import { getFonts } from '../../../common/globalFont';
import { myOrderUrl } from "../../../common/globalImagesUrl";
onLoad(() => {
getFonts()
})
</script>
<style scoped lang="scss">
.equal-division-item {
padding: 15rpx 0;
}
.image_3 {
width: 46.88rpx;
height: 46.88rpx;
}
.font {
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 25.84rpx;
color: #e79ea1;
}
.text_18 {
line-height: 24.62rpx;
}
</style>

View File

@ -1,704 +0,0 @@
<template>
<view class="flex-col justify-start relative page" :style="{ backgroundImage: 'url(' + bkgPubilcPath + ')' }">
<view class="section" :style="{ backgroundImage: 'url(' + bkgPubilcPath + ')' }"></view>
<view class="flex-row section_2 pos">
<image
class="self-center image"
:src="orderStatusObj.img"
/>
<view class="ml-6 flex-col items-start flex-1 self-start group">
<text class="font text" :style="{ marginTop: offset }">{{ orderStatusObj.msg }}</text>
<text class="mt-6 font_2 text_2" v-if="isShowText">{{ orderStatusObj.tips }}</text>
</view>
</view>
<view class="flex-row items-center section_3 pos_2">
<image
class="shrink-0 image_2"
:src="myOrderUrl + '/myGeneralOrderDetail/dw.png'"
/>
<view class="ml-8 flex-col items-start flex-1">
<text class="font text_3">{{ addressObj.name }} {{ addressObj.phone }}</text>
<text class="font_2 text_4 mt-9">{{ addressObj.region }}{{ addressObj.detailAddress}}</text>
</view>
</view>
<view class="flex-col section_4 pos_3">
<view class="flex-col">
<view class="flex-row justify-between mt-8 list-item" v-for="(item, index) in order.orderItemList" :key="index">
<view class="flex-row">
<image
class="image_3" mode="aspectFill"
:src="publicPath + item.goodSnapshot.goodImg.split(';')[0]"
/>
<view class="flex-col items-start ml-11">
<text class="font text_5">{{ item.goodSnapshot.name }}</text>
<text class="mt-58 font_3 text_6">{{ item.goodSnapshot.price.toFixed(2) }}</text>
</view>
</view>
<text class="self-start font_4 text_7">×{{ item.quantity }}</text>
</view>
</view>
<view class="flex-col mt-25">
<view class="flex-row justify-between items-baseline">
<text class="font_5 text_8">商品金额</text>
<text class="font_6"> {{ allAmount.toFixed(2) }}</text>
</view>
<view class="flex-row justify-between items-baseline group_2">
<text class="font_5 text_9">快递费用</text>
<text class="font_6">{{ postage }}</text>
</view>
<view class="flex-row justify-between items-baseline group_2">
<text class="font_5 text_9">优惠券</text>
<text class="font_6">{{ couponAmount.toFixed(2) }}</text>
</view>
<view class="flex-row justify-end items-baseline group_3">
<text class="font text_10">应付款</text>
<view class="group_4">
<text class="font_4 text_11"></text>
<text class="text_12">{{ totalPrice.toFixed(2) }}</text>
</view>
</view>
<view class="flex-col group_5">
<text class="self-start font_7 text_13">买家留言</text>
<view class="mt-2 flex-col justify-start self-stretch text-wrapper">
<text class="font_2 text_14" style="word-break: break-all; word-wrap: break-word;">
{{ order.note }}
</text>
</view>
</view>
<view class="flex-row justify-between items-baseline group_6">
<text class="font_7">创建时间</text>
<text class="font_4 text_15">{{ order.createTime }}</text>
</view>
<view class="flex-row justify-between group_7">
<text class="font_5 text_16">订单编号</text>
<view class="flex-row items-center">
<text class="font_4 text_17">{{ order.orderNumber }}</text>
<view class="ml-4 flex-col justify-start items-center shrink-0 text-wrapper_2" @click="copy(order.orderNumber)">
<text class="font_8">复制</text>
</view>
</view>
</view>
<view class="flex-row justify-between group_8" v-if="order.orderStatus === '待收货'">
<text class="font_5 text_18">物流单号</text>
<view class="flex-row items-center">
<text class="font_4 text_19">{{ order.trackingNumber }}</text>
<view class="ml-4 flex-col justify-start items-center shrink-0 text-wrapper_2" @click="copy(order.orderNumber)">
<text class="font_8">复制</text>
</view>
</view>
</view>
<view class="flex-row justify-center items-center group_9">
<button style="display: flex; align-items: center; height: 60rpx;" open-type="contact" bindcontact="handleContact" session-from="sessionFrom">
<image
class="image_4"
:src="myOrderUrl + '/myGeneralOrderDetail/zxkf.png'"
/>
<text class="font text_20">在线客服</text>
</button>
</view>
</view>
</view>
<view class="flex-row justify-between items-center section_5 pos_4">
<view class="flex-row items-baseline">
<text class="font text_21">应付款</text>
<view class="group_10">
<text class="font_9 text_22"></text>
<text class="font_9 text_23">{{ totalPrice.toFixed(2) }}</text>
</view>
</view>
<view v-if="order.operationList[0]" class="flex-col justify-start items-center text-wrapper_3" @click="wxPayFd(order)">
<text class="font text_24">去支付</text>
</view>
<view v-if="order.operationList[1]" class="flex-col justify-start items-center text-wrapper_3" @click="fd(order.id)">
<text class="font text_24">查看物流</text>
</view>
<view v-if="order.operationList[2]" class="flex-col justify-start items-center text-wrapper_3" @click="gotoDeleteOrder(order.id)">
<text class="font text_24">删除订单</text>
</view>
<view v-if="order.operationList[3]" style="background-color: #fff;" class="flex-col justify-start items-center text-wrapper_3">
<text class="font text_24"></text>
</view>
</view>
</view>
<!-- 遮罩层 -->
<view v-if="isShow" class="overlay"></view>
</template>
<script setup>
import {onMounted, ref} from 'vue'
import { stateList } from '../../../common/global.js'
import { onLoad } from "@dcloudio/uni-app";
import { baseUrl } from '../../../api/request';
import { JudgeIsNullity, showTips } from '../../../common/globalFunction';
import { getFonts } from '../../../common/globalFont';
import emitter from '../../../utils/emitter';
import { myOrderUrl } from '../../../common/globalImagesUrl.js';
import { publicPath,bkgPubilcPath } from '../../../common/globalImagesUrl.js';
import { onPullDownRefresh } from '@dcloudio/uni-app';
const order = ref({})
const cookie = wx.getStorageSync('cookie')
let orderId = ''
const couponAmount = ref(0)
const allAmount = ref(0)
const addressObj = ref({})
const orderStatusObj = ref({})
let debounceTimer = null;
let wxPayTimer = null;
let loading = false;
let isLoading = ref(false)
let isShow = ref(false)
const isShowText = ref(true)
const offset = ref('0')
const postage = ref(0) //
const totalPrice = ref(0) //
onLoad((options) => {
getFonts()
orderId = options.id
})
onMounted(() => {
getOrderById(orderId)
})
onPullDownRefresh( async ()=>{ //
await getOrderById(orderId)
setTimeout(()=>{
uni.stopPullDownRefresh() //
},1000)
})
const getOrderById = async (val) => {
const res = await uni.request({
url: baseUrl + '/order/get/id',
method: 'POST',
header: {
cookie
},
data: {
id: val
}
})
console.log(res.data.data)
order.value = res.data.data
addressObj.value = order.value.addressSnapshot
couponAmount.value = JudgeIsNullity(order.value.couponSnapshot) ? 0 : order.value.couponSnapshot.conditionAmount
allAmount.value = order.value.totalAmount + couponAmount.value
totalPrice.value = order.value.totalAmount + couponAmount.value + order.value.postage
postage.value = order.value.postage;
if (order.value.orderStatus === '待支付') {
order.value.operationList = [true, false, false, false]
orderStatusObj.value = stateList[0]
} else if (order.value.orderStatus === '交易关闭') {
order.value.operationList = [false, false, true, false]
orderStatusObj.value = stateList[5]
} else if (order.value.orderStatus === '待发货') {
order.value.operationList = [false, false, false, true]
orderStatusObj.value = stateList[1]
} else if (order.value.orderStatus === '已退款') {
order.value.operationList = [false, false, false, true]
orderStatusObj.value = stateList[2]
} else if (order.value.orderStatus === '交易成功') {
order.value.operationList = [false, false, false, true]
orderStatusObj.value = stateList[4]
} else if (order.value.orderStatus === '待收货') {
order.value.operationList = [false, true, false, false]
orderStatusObj.value = stateList[3]
}
isShowText.value = order.value.orderStatus !== '已退款' && order.value.orderStatus !== '交易关闭'
offset.value = isShowText.value ? '0' : '18rpx'
}
const copy = ( orderNumber ) => {
console.log('订单编号为--->',orderNumber);
uni.setClipboardData({
data: orderNumber,
success: () => {
uni.showToast({
title: '成功复制到剪贴板'
})
}
})
}
const wxPayFd = (order) => { //
showLoading()
isShow.value = true //
wxPay(order.id)
}
function showLoading() { //
if (!loading) {
wx.showLoading({
title: '加载中...',
});
loading = true;
isLoading.value = true
}
}
function hideLoading() { //
if (loading) {
wx.hideLoading();
loading = false;
isLoading.value = false
}
}
const wxPay = async( oid )=> { //id
try {
const res = await uni.request({
url: baseUrl + '/wechat/payment/create',
method: 'POST',
header: {
'cookie': wx.getStorageSync("cookie")
},
data: { id: oid }
})
const paymentData = res.data.data
wx.requestPayment({
appid: paymentData.appId,
nonceStr: paymentData.nonceStr,
package: paymentData.packageVal,
paySign: paymentData.paySign,
timeStamp: paymentData.timeStamp,
signType: paymentData.signType,
success(res) {
uni.showModal({
title: '提示',
content: '支付成功',
showCancel: false
})
getOrderById(oid)
},
fail(e) {
},
complete () {
hideLoading()
isShow.value = false //
}
})
}catch(error) {
hideLoading()
isShow.value = false //
uni.showModal({
title: '提示',
content: '支付失败,请刷新后重试',
showCancel: false
})
}
}
const gotoDeleteOrder = (val) => {
uni.showModal({
title: '提示',
content: '您确定要删除订单吗?',
success: async (res) => {
if (res.confirm) {
await deleteOrder(val)
await emitter.emit('flushOrderList')
routerJump('pages/my-order/myGeneralOrderDetail/myGeneralOrderDetail')
showTips('删除成功')
}
}
})
}
const deleteOrder = async (val) => {
const res = await uni.request({
url: baseUrl + '/order/delete/id',
method: 'POST',
header: {
cookie
},
data: {
id: val
}
})
console.log(res.data.data)
}
const fd = (val) => { //
clearTimeout(debounceTimer)
showLoading()
debounceTimer = setTimeout(async () => {
await gotoDelieverPage(val)
hideLoading()
}, 1000)
}
let waybillToken = ''
var plugin = requirePlugin('logisticsPlugin')
const gotoDelieverPage = (val) => {
uni.request({
url: baseUrl + '/logistics/get/info',
method: 'POST',
data: {
id: val
},
header: {
cookie
},
success: (res) => {
console.log(res.data.data)
waybillToken = res.data.data.waybill_token
plugin.openWaybillTracking({
waybillToken: waybillToken
})
}
})
}
const routerJump = (val) => {
let pages = getCurrentPages();
var num = pages.length
if (num == 1) return ;
console.log(pages)
//
var backnum = num
for( var i = 0; i < num; i ++ ) {
//
if(pages[i].route == val){
//'pages/mypage/mypage'A
backnum = num - i - 1
//--1
}
}
uni.navigateBack({
delta:backnum
// delta
})
}
</script>
<style scoped lang="scss">
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.4); /* 半透明黑色背景 */
z-index: 999;
}
button {
padding: 0;
margin: 0;
background-color: #fff;
}
button::after{
border: none;
}
.mt-9 {
margin-top: 16.88rpx;
}
.ml-11 {
margin-left: 20.63rpx;
}
.mt-25 {
margin-top: 46.88rpx;
}
.page {
background-color: #fff;
background-size: 100% 100%;
background-repeat: no-repeat;
width: 100%;
overflow-y: auto;
overflow-x: hidden;
height: 100vh;
}
// .section {
// background-image: url('https://ide.code.fun/api/image?token=67cf80c84ae84d001228feb1&name=24453f696e665b4a146abeed1b16ec7c.png');
// background-size: 100% 100%;
// background-repeat: no-repeat;
// width: 750rpx;
// }
.section_2 {
padding: 15rpx 16.88rpx;
background-color: #ffffff;
border-radius: 18.75rpx;
}
.pos {
position: absolute;
left: 16.88rpx;
right: 15rpx;
top: 20.63rpx;
}
.image {
width: 75rpx;
height: 75rpx;
}
.group {
margin-top: 11.25rpx;
}
.font {
font-size: 28.13rpx;
font-family: FangZhengFonts;
line-height: 29.18rpx;
color: #323232;
}
.text {
color: #323233;
line-height: 27.58rpx;
}
.font_2 {
font-size: 24.38rpx;
font-family: FangZhengFonts;
line-height: 29.18rpx;
color: #818181;
}
.text_2 {
color: #6b6e72;
line-height: 24rpx;
}
.section_3 {
padding: 26.25rpx 22.5rpx 22.5rpx;
background-color: #ffffff;
border-radius: 18.75rpx;
}
.pos_2 {
// position: absolute;
// left: 16.88rpx;
// right: 15rpx;
// top: 144.38rpx;
margin: 144.38rpx 15rpx 0 16.88rpx;
}
.image_2 {
width: 43.13rpx;
height: 43.13rpx;
}
.text_3 {
line-height: 24.28rpx;
}
.text_4 {
line-height: 30rpx;
width: 571.88rpx;
}
.section_4 {
padding: 22.5rpx 15rpx 22.5rpx 24.38rpx;
background-color: #ffffff;
border-radius: 18.75rpx;
}
.pos_3 {
// position: absolute;
// left: 15rpx;
// right: 16.88rpx;
// top: 287.5rpx;
margin: 25.5rpx 16.88rpx 150rpx 15rpx;
}
.list-item:first-child {
margin-top: 0;
}
.image_3 {
border-radius: 9.38rpx;
width: 146.25rpx;
height: 165rpx;
}
.text_5 {
font-size: 30rpx;
}
.font_3 {
font-size: 28.13rpx;
font-family: FangZhengFonts;
line-height: 22.18rpx;
color: #323232;
}
.text_6 {
font-size: 30rpx;
}
.font_4 {
font-size: 28.13rpx;
font-family: FangZhengFonts;
line-height: 18.73rpx;
color: #323232;
}
.text_7 {
margin-right: 15rpx;
margin-top: 136.88rpx;
font-size: 26.25rpx;
}
.font_5 {
font-size: 28.13rpx;
font-family: FangZhengFonts;
line-height: 29.18rpx;
color: #818181;
}
.text_8 {
line-height: 26.04rpx;
}
.font_6 {
font-size: 28.13rpx;
font-family: FangZhengFonts;
line-height: 20.79rpx;
color: #323232;
}
.group_2 {
margin-top: 18.75rpx;
}
.text_9 {
line-height: 27.36rpx;
}
.group_3 {
margin-top: 18.75rpx;
}
.text_10 {
line-height: 25.71rpx;
}
.group_4 {
line-height: 20.76rpx;
height: 20.76rpx;
}
.text_11 {
color: #ffaaa5;
line-height: 20.29rpx;
}
.text_12 {
color: #ffaaa5;
font-size: 28.13rpx;
font-family: FangZhengFonts;
font-weight: 700;
line-height: 20.76rpx;
}
.group_5 {
margin-top: 26.25rpx;
padding: 22.5rpx 0 18.75rpx;
border-top: solid 1.88rpx #dfdfdf;
border-bottom: solid 1.88rpx #dfdfdf;
}
.font_7 {
font-size: 28.13rpx;
font-family: FangZhengFonts;
line-height: 26.47rpx;
color: #818181;
}
.text_13 {
margin-left: 3.75rpx;
}
.text-wrapper {
margin-right: 11.25rpx;
padding: 3.75rpx 0;
border-radius: 9.38rpx;
border: solid 1.88rpx #ffffff;
}
.text_14 {
margin-right: 7.5rpx;
line-height: 30rpx;
text-shadow: 0 1.88rpx #ffffff, 0 -1.88rpx #ffffff, 1.88rpx 0 #ffffff, -1.88rpx 0 #ffffff;
}
.group_6 {
margin-top: 26.25rpx;
}
.text_15 {
font-size: 26.25rpx;
line-height: 19.41rpx;
}
.group_7 {
margin-top: 18.75rpx;
}
.text_16 {
line-height: 27.69rpx;
}
.text_17 {
font-size: 26.25rpx;
line-height: 19.29rpx;
}
.text-wrapper_2 {
background-color: #ffffff;
width: 65.63rpx;
height: 30rpx;
border: solid 0.94rpx #d1d1d1;
}
.font_8 {
font-size: 22.5rpx;
font-family: FangZhengFonts;
line-height: 30rpx;
color: #323232;
}
.group_8 {
margin-top: 15rpx;
}
.text_18 {
line-height: 27.69rpx;
}
.text_19 {
font-size: 26.25rpx;
line-height: 19.29rpx;
}
.group_9 {
margin-top: 28.13rpx;
}
.image_4 {
width: 45rpx;
height: 45rpx;
}
.text_20 {
font-size: 30rpx;
line-height: 28.48rpx;
}
.section_5 {
padding: 15rpx 26.25rpx;
background-color: #ffffff;
}
.pos_4 {
position: fixed;
left: 0;
right: 0;
bottom: 0;
}
.text_21 {
color: #323232;
font-size: 30rpx;
line-height: 27.43rpx;
}
.group_10 {
margin-left: -7.5rpx;
line-height: 24.92rpx;
height: 24.92rpx;
}
.font_9 {
font-size: 33.75rpx;
font-family: FangZhengFonts;
color: #ffaaa5;
}
.text_22 {
line-height: 24.34rpx;
}
.text_23 {
font-weight: 700;
line-height: 24.92rpx;
}
.text-wrapper_3 {
padding: 22.5rpx 0;
background-color: #ffaaa5;
border-radius: 75rpx;
width: 204.38rpx;
height: 71.25rpx;
}
.text_24 {
color: #ffffff;
font-size: 30rpx;
line-height: 27.77rpx;
}
@import url(../../../common/css/global.css);
</style>

View File

@ -1,869 +0,0 @@
<template>
<view class="flex-col justify-start items-center relative page" :style="{ backgroundImage: 'url(' + bkgPubilcPath + ')' }">
<!-- <image
class="image_3"
src="https://ide.code.fun/api/image?token=67cf80c84ae84d001228feb1&name=666fe70fbe2b3eb6bec964adf12deccc.png"
/> -->
<view class="flex-col section pos">
<view class="flex-col relative section_2">
<view class="flex-row justify-center section_3" style="display: flex; align-items: center;" @click="gotoResearch">
<image
class="image"
:src="myOrderUrl + '/myOrderList/ss.png'"
/>
<text class="font text ml-17" v-if="isHiddenInput">搜索订单</text>
<input class="font text ml-7" v-if="!isHiddenInput" placeholder="搜索订单" :disabled="true" v-model="orderNumber" style="width: 85%; color: #323232;"/>
</view>
<view class="flex-row justify-between group">
<view @click="isSelectedState(0)">
<text class="font_2 text_2" :style="{ color: color[0] }">&ensp;全部&ensp;</text>
<view class="flex-col justify-start items-center" v-if="isShowUnderLine[0]" style="border: 1.88rpx solid #e79ea1; width: 90rpx; margin-top: 10rpx;"></view>
</view>
<view @click="isSelectedState(1)">
<text class="font_2 text_3" :style="{ color: color[1] }">待支付</text>
<view class="flex-col justify-start items-center" v-if="isShowUnderLine[1]" style="border: 1.88rpx solid #e79ea1; width: 90rpx; margin-top: 10rpx;"></view>
</view>
<view @click="isSelectedState(2)">
<text class="font_2 text_4" :style="{ color: color[2] }">待发货</text>
<view class="flex-col justify-start items-center" v-if="isShowUnderLine[2]" style="border: 1.88rpx solid #e79ea1; width: 90rpx; margin-top: 10rpx;"></view>
</view>
<view @click="isSelectedState(3)">
<text class="font_2 text_5" :style="{ color: color[3] }">待收货</text>
<view class="flex-col justify-start items-center" v-if="isShowUnderLine[3]" style="border: 1.88rpx solid #e79ea1; width: 90rpx; margin-top: 10rpx;"></view>
</view>
<view @click="isSelectedState(4)">
<text class="font_2 text_6" :style="{ color: color[4] }">已退款</text>
<view class="flex-col justify-start items-center" v-if="isShowUnderLine[4]" style="border: 1.88rpx solid #e79ea1; width: 90rpx; margin-top: 10rpx;"></view>
</view>
</view>
</view>
<view class="flex-col list mt-14">
<view class="flex-col list-item mt-20" v-for="(item, index) in orderList" :key="index" @click="gotoOrderDetail(item.id, item.orderType)">
<view class="flex-row justify-between group_3">
<text class="font_2 text_7">泠珑水月阁</text>
<view class="flex-row items-center group_1">
<text class="font_3 text_8" v-if="item.orderStatus === '待支付'">{{ item.countdown }}</text>
<text class="font text_9 ml-4">{{ item.orderStatus }}</text>
</view>
</view>
<view class="flex-row items-center group_16">
<text class="font_4">订单编号</text>
<text class="font_5 text_10">{{ item.orderNumber }}</text>
</view>
<view class="flex-col group_4">
<view class="flex-row justify-between list-item_2 group_6" v-for="(subItem, index) in item.orderItemList" :key="index">
<view class="flex-row">
<image
class="image_2" mode="aspectFill"
:src="publicPath + subItem.goodSnapshot.goodImg.split(';')[0]"
/>
<view class="flex-col items-start group_19 ml-11">
<text class="font_2">{{ subItem.goodSnapshot.name }}</text>
<text v-if="item.orderType === 'service'" class="appointmentDate">已选时间{{ subItem.reservationDate }} {{ getWeekday(subItem.reservationDate) }}</text>
<text v-if="item.orderType === 'service'" class="timeSlot">{{ subItem.timeSlot }}</text>
<text v-if="item.orderType === 'product'" class="appointmentDate">&emsp;</text>
<text v-if="item.orderType === 'product'" class="timeSlot">&emsp;</text>
<text class="font_6 text_28 mt-18">{{ subItem.goodSnapshot.price.toFixed(2) }}</text>
</view>
</view>
<text class="self-start font_7 text_29">×{{ subItem.quantity }}</text>
</view>
</view>
<view class="flex-col group_12">
<view class="flex-row justify-end items-baseline group_13">
<text class="font_8 text_14">已优惠</text>
<text class="font_6 text_15 ml-9">{{ item.couponSnapshot === null ? (0).toFixed(2) : item.couponSnapshot.conditionAmount.toFixed(2) }}</text>
</view>
<view class="flex-row justify-end items-baseline mt-12 group_13_2">
<text class="font_8 text_16">应付款</text>
<text class="font_9 text_17 ml-9">{{ (Number(item.totalAmount) + Number(item.postage)).toFixed(2)}}</text>
</view>
</view>
<view class="flex-row justify-end group_14">
<view class="nav" @click.stop="nav" v-if="item.orderType === 'service'">
<navVue></navVue>
</view>
<view class="flex-col justify-start items-center text-wrapper" v-if="item.operationList[0]" @click.stop="gotoCancelOrder(item.id, item.orderType)">
<text class="font_10">取消订单</text>
</view>
<view @click.stop>
<button class="flex-col justify-start items-center text-wrapper" v-if="item.operationList[1]" open-type="contact" bindcontact="handleContact" session-from="sessionFrom">
<text class="font_10">联系客服</text>
</button>
</view>
<view class="flex-col justify-start items-center text-wrapper" v-if="item.operationList[2]" @click.stop="gotoDeleteOrder(item.id)">
<text class="font_10">删除订单</text>
</view>
<view class="flex-col justify-start items-center text-wrapper_2 ml-11" v-if="item.operationList[3]" @click.stop="wxPayFd(item)">
<text class="font_11 text_18">去付款</text>
</view>
<view class="flex-col justify-start items-center text-wrapper_2 ml-11" v-if="item.operationList[4] && item.orderType === 'product'" @click.stop="fd(item.id)">
<text class="font_11 text_18">查看物流</text>
</view>
<view class="flex-col justify-start items-center text-wrapper_2 ml-11" style="background-color: #fff;" v-if="item.operationList[5]">
<text class="font_11 text_18"></text>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 遮罩层 -->
<view v-if="isShow" class="overlay"></view>
</template>
<script setup>
import {onBeforeUnmount, onMounted, onUnmounted, ref} from 'vue'
import { baseUrl } from '../../../api/request';
import { onLoad, onShow } from "@dcloudio/uni-app";
import { JudgeIsNullity } from '../../../common/globalFunction';
import navVue from '../component/nav.vue';
import emitter from '../../../utils/emitter';
import { getFonts } from '../../../common/globalFont';
import { myOrderUrl,bkgPubilcPath } from '../../../common/globalImagesUrl';
import { publicPath } from '../../../common/globalImagesUrl';
import { onPullDownRefresh } from '@dcloudio/uni-app';
import { showTips } from '../../../common/globalFunction';
const color = ref(new Array(5).fill('#323232'))
const point = ref(0)
const isShowUnderLine = ref([true, false, false, false, false])
let orderStatusList = ['全部', '待支付', '待发货', '待收货', '已退款']
const cookie = wx.getStorageSync('cookie')
const orderList = ref([])
const tempOrderList = ref([])
const orderNumber = ref('')
const isHiddenInput = ref(true)
const status = ref(0)
let debounceTimer = null;
let wxPayTimer = null;
let loading = false;
let isLoading = ref(false)
let isShow = ref(false)
const flushOrderListHandler = () => {
getMyOrder()
}
onLoad((options) => {
getFonts()
orderNumber.value = options.orderNumber
if (!JudgeIsNullity(orderNumber.value)) {
isHiddenInput.value = false
}
status.value = options.status
})
onMounted(() => {
color.value[0] = '#e79ea1'
if (!JudgeIsNullity(status.value)) {
getMyStatusOrder(Number(status.value)) //
} else {
getMyOrder()
}
emitter.on('flushOrderList', flushOrderListHandler)
})
onPullDownRefresh( async ()=>{ //
color.value[0] = '#e79ea1'
if (!JudgeIsNullity(status.value)) {
getMyStatusOrder(Number(status.value))
} else {
getMyOrder()
}
emitter.on('flushOrderList', flushOrderListHandler)
setTimeout(()=>{
uni.stopPullDownRefresh() //
},1000)
})
onUnmounted(() => {
emitter.off('flushOrderList', flushOrderListHandler)
})
const getMyStatusOrder = async (val) => {
point.value = val
for (var i = 0; i < 5; i ++ ) {
if (i === val) {
isShowUnderLine.value[i] = true
color.value[i] = '#e79ea1'
} else {
isShowUnderLine.value[i] = false
color.value[i] = '#323232'
}
}
await getMyOrder()
if (point.value !== 0) {
orderList.value = tempOrderList.value.filter(item => item.orderStatus === orderStatusList[point.value])
} else {
orderList.value = tempOrderList.value
}
}
const isSelectedState = (val) => {
if (point.value === val) return
point.value = val
for (var i = 0; i < 5; i ++ ) {
if (i === val) {
isShowUnderLine.value[i] = true
color.value[i] = '#e79ea1'
} else {
isShowUnderLine.value[i] = false
color.value[i] = '#323232'
}
}
if (point.value !== 0) {
orderList.value = tempOrderList.value.filter(item => item.orderStatus === orderStatusList[point.value])
} else {
orderList.value = tempOrderList.value
}
}
const getMyOrder = async () => {
orderList.value.forEach(order => {
if (order.countdownInterval) {
clearInterval(order.countdownInterval); //
}
})
const res = await uni.request({
url: baseUrl + '/order/list',
method: 'POST',
header: {
cookie
}
})
console.log(res.data.data);
orderList.value = res.data.data
tempOrderList.value = res.data.data
dealTimeout()
orderList.value.forEach(order => {
if (order.orderStatus === '待支付') {
startCountdown(order)
}
});
if (!JudgeIsNullity(orderNumber.value)) {
orderList.value = orderList.value.filter(item => item.orderNumber === orderNumber.value)
}
}
const gotoResearch = () => {
uni.navigateTo({
url: '../researchOrder/researchOrder'
})
}
const gotoOrderDetail = (val, type) => {
if (type === 'product') {
uni.navigateTo({
url: '../myGeneralOrderDetail/myGeneralOrderDetail?id=' + val
})
} else {
uni.navigateTo({
url: '../myServiceOrderDetail/myServiceOrderDetail?id=' + val
})
}
}
const wxPayFd = (order) => { //
showLoading()
isShow.value = true //
wxPay(order.id, order.orderType)
}
function showLoading() { //
if (!loading) {
wx.showLoading({
title: '加载中...',
});
loading = true;
isLoading.value = true
}
}
function hideLoading() { //
if (loading) {
wx.hideLoading();
loading = false;
isLoading.value = false
}
}
const wxPay = async( oid , type)=> { //id
try {
const res = await uni.request({
url: baseUrl + '/wechat/payment/create',
method: 'POST',
header: {
'cookie': wx.getStorageSync("cookie")
},
data: { id: oid }
})
const paymentData = res.data.data
wx.requestPayment({
appid: paymentData.appId,
nonceStr: paymentData.nonceStr,
package: paymentData.packageVal,
paySign: paymentData.paySign,
timeStamp: paymentData.timeStamp,
signType: paymentData.signType,
success(res) {
uni.showModal({
title: '提示',
content: '支付成功',
showCancel: false
})
},
fail(e) {
},
complete () {
if (type === 'product') {
uni.redirectTo({
url: '/pages/my-order/myGeneralOrderDetail/myGeneralOrderDetail?id=' + oid
})
} else {
uni.redirectTo({
url: '/pages/my-order/myServiceOrderDetail/myServiceOrderDetail?id=' + oid
})
}
}
})
}catch(error) {
uni.showModal({
title: '提示',
content: '支付失败,请刷新后重试',
showCancel: false
})
}
}
const fd = (val) => { //
clearTimeout(debounceTimer)
showLoading()
debounceTimer = setTimeout(async () => {
await gotoDelieverPage(val)
hideLoading()
}, 1000)
}
let waybillToken = ''
var plugin = requirePlugin('logisticsPlugin')
const gotoDelieverPage = (val) => {
uni.request({
url: baseUrl + '/logistics/get/info',
method: 'POST',
data: {
id: val
},
header: {
cookie
},
success: (res) => {
console.log(res.data.data)
waybillToken = res.data.data.waybill_token
plugin.openWaybillTracking({
waybillToken: waybillToken
})
}
})
}
const gotoCancelOrder = (val, type) => {
uni.showModal({
title: '提示',
content: '您确定要取消订单吗?',
success: async (res) => {
if (res.confirm) {
if (type === 'product'){
await cancelGeneralOrder(val)
}
else {
await cancelServiceOrder(val)
}
showTips('取消成功')
await getMyOrder()
}
}
})
}
const gotoDeleteOrder = (val) => {
uni.showModal({
title: '提示',
content: '您确定要删除订单吗?',
success: async (res) => {
if (res.confirm) {
await deleteOrder(val)
await getMyOrder()
showTips('删除成功')
}
}
})
}
const cancelGeneralOrder = async (val) => {
const res = await uni.request({
url: baseUrl + '/order/cancel/id',
method: 'POST',
header: {
cookie
},
data: {
id: val
}
})
console.log(res.data.data)
}
const cancelServiceOrder = async (val) => {
const res = await uni.request({
url: baseUrl + '/order/cancel/service/id',
method: 'POST',
header: {
cookie
},
data: {
id: val
}
})
console.log(res.data.data)
}
const deleteOrder = async (val) => {
const res = await uni.request({
url: baseUrl + '/order/delete/id',
method: 'POST',
header: {
cookie
},
data: {
id: val
}
})
console.log('=================================>', res.data.data)
}
const dealTimeout = () => {
for (var i = 0; i < orderList.value.length; i ++ ) {
let order = orderList.value[i]
if (order.orderStatus === '待支付') {
orderList.value[i].operationList = [true, false, false, true, false, false]
} else if (order.orderStatus === '待发货') {
orderList.value[i].operationList = [false, true, false, false, false, false]
} else if (order.orderStatus === '待收货') {
orderList.value[i].operationList = [false, true, false, false, true, false]
} else if (order.orderStatus === '已退款') {
orderList.value[i].operationList = [false, true, false, false, false, false]
} else if (order.orderStatus === '交易关闭') {
orderList.value[i].operationList = [false, false, true, false, false, false]
} else if (order.orderStatus === '交易成功') {
orderList.value[i].operationList = [false, false, false, false, false, true]
}else {
orderList.value[i].operationList = [false, false, false, false, false, true]
}
}
}
//
const startCountdown = (order) => {
if (order.orderStatus === '待支付') {
order.endTime = add30Minutes(order.createTime); //
order.countdownInterval = setInterval(() => {
const now = Math.floor(Date.now() / 1000); //
const remainingTime = order.endTime - now;
if (remainingTime <= 0) {
order.countdown = '00:00';
clearInterval(order.countdownInterval); //
order.orderStatus = '交易关闭'
dealTimeout()
uni.showModal({
title: '提示',
content: '订单超时未支付,已取消',
showCancel: false
})
} else {
const minutes = Math.floor(remainingTime / 60); //
const seconds = remainingTime % 60; //
order.countdown = `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;
}
}, 1000);
}
};
//
const parseDate = (dateString) => {
const [date, time] = dateString.split(' ');
const [year, month, day] = date.split('-').map(Number);
const [hour, minute, second] = time.split(':').map(Number);
return new Date(year, month - 1, day, hour, minute, second); // JavaScript Date0
};
// 30
const add30Minutes = (createdTime) => {
const date = parseDate(createdTime);
date.setMinutes(date.getMinutes() + 15); // 30
return Math.floor(date.getTime() / 1000); //
};
//
onBeforeUnmount(() => {
orderList.value.forEach(order => {
if (order.countdownInterval) {
clearInterval(order.countdownInterval); //
}
})
});
const nav = () => {
// wx.openLocation({
// latitude: 45.867741,
// longitude: 126.560037,
// name: '()',
// address: '1',
// success: (res) => {
// console.log(res)
// }
// })
uni.showModal({
title: '该功能开发中!'
})
}
function getWeekday(dateStr) {
const date = new Date(dateStr);
const weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
return weekdays[date.getDay()];
}
</script>
<style scoped lang="scss">
.nav {
position: absolute;
left: 15rpx;
top: 25rpx;
}
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.4); /* 半透明黑色背景 */
z-index: 999;
}
button{padding: 0;margin: 0;}
button::after{ border: none; }
.page {
background-color: #ffffff;
background-size: 100% 100%;
background-repeat: no-repeat;
width: 100%;
overflow-y: auto;
overflow-x: hidden;
height: 100vh;
}
.appointmentDate {
margin-top: 20.63rpx;
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 24.51rpx;
color: #818181;
margin-left: 3.75rpx;
}
.timeSlot {
margin-top: 20.63rpx;
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 17.53rpx;
color: #818181;
margin-left: 3.75rpx;
}
.ml-7 {
margin-left: 13.13rpx;
}
.ml-9 {
margin-left: 16.88rpx;
}
.ml-11 {
margin-left: 20.63rpx;
}
.pos {
position: absolute;
left: 0;
right: 0;
top: 0;
}
.section_2 {
padding: 31.88rpx 35.63rpx 0;
background-color: #ffffff;
box-shadow: 0rpx 3.75rpx 3.75rpx #32323240;
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 99;
}
.section_3 {
padding: 13.13rpx 0 15rpx;
height: 60rpx;
background-color: #f3f3f3;
border-radius: 75rpx;
}
.image {
width: 28.13rpx;
height: 28.13rpx;
margin-right: 10rpx;
}
.font {
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 25.84rpx;
color: #ffaaa5;
}
.text {
color: #bdbdbd;
margin-left: 10rpx;
}
.group {
padding: 24.26rpx 0 0;
}
.font_2 {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 29.18rpx;
color: #323232;
}
.text_2 {
line-height: 28.24rpx;
}
.text_3 {
line-height: 28.24rpx;
}
.text_4 {
line-height: 28.24rpx;
}
.text_5 {
line-height: 28.24rpx;
}
.text_6 {
line-height: 28.24rpx;
}
.list {
padding: 170rpx 15rpx 50rpx;
}
.list-item {
padding: 28.01rpx 22.5rpx 0 24.38rpx;
background-color: #ffffff;
border-radius: 18.75rpx;
}
.list-item:first-child {
margin-top: 0;
}
.group_3 {
padding-left: 9.96rpx;
padding-right: 4.5rpx;
}
.text_7 {
line-height: 28.01rpx;
}
.group_1 {
margin-top: 2.34rpx;
}
.font_3 {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 18.73rpx;
color: #ffaaa5;
}
.text_8 {
font-size: 28.13rpx;
line-height: 18.79rpx;
}
.text_9 {
line-height: 25.74rpx;
}
.group_16 {
margin-top: 19.26rpx;
padding: 0 8.94rpx;
}
.font_4 {
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 25.84rpx;
color: #818181;
}
.font_5 {
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 18.73rpx;
color: #818181;
}
.text_10 {
line-height: 17.53rpx;
}
.group_4 {
margin-top: 30.06rpx;
}
.list-item_2:first-child {
margin-top: 0;
}
.image_2 {
border-radius: 9.38rpx;
width: 146.25rpx;
height: 165rpx;
}
.group_19 {
margin-bottom: 3.32rpx;
}
.font_6 {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 22.18rpx;
color: #323232;
}
.text_28 {
margin-left: 3.36rpx;
}
.font_7 {
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 18.73rpx;
color: #323232;
}
.text_29 {
margin-right: 5.83rpx;
margin-top: 136.88rpx;
}
.group_12 {
margin-top: 66.28rpx;
padding-left: 3.06rpx;
padding-right: 3.04rpx;
}
.group_13 {
padding: 0 10.11rpx;
display: flex;
justify-content: space-between;
}
.group_13_2 {
padding: 0 10.11rpx;
display: flex;
justify-content: space-between;
}
.font_8 {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 25.84rpx;
color: #323232;
}
.text_14 {
font-size: 28.13rpx;
line-height: 26.59rpx;
}
.text_15 {
font-size: 28.13rpx;
line-height: 20.79rpx;
}
.text_16 {
font-size: 28.13rpx;
line-height: 26.04rpx;
}
.font_9 {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 22.18rpx;
font-weight: 600;
color: #ffaaa5;
}
.text_17 {
font-size: 28.13rpx;
line-height: 21.13rpx;
}
.group_14 {
position: relative;
margin-top: 26.92rpx;
padding: 33.75rpx 0 35.63rpx;
border-top: solid 1.88rpx #dfdfdf;
}
.text-wrapper {
padding: 13.35rpx 0 13.31rpx;
background-color: #ffffff;
border-radius: 75rpx;
width: 153.75rpx;
height: 56.25rpx;
border: solid 1.88rpx #e79ea1;
}
.font_10 {
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 25.84rpx;
color: #e79ea1;
}
.text-wrapper_2 {
padding: 16.07rpx 0 16.18rpx;
background-color: #e79ea1;
border-radius: 75rpx;
width: 153.75rpx;
height: 56.25rpx;
}
.font_11 {
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 25.84rpx;
color: #ffffff;
}
.text_18 {
line-height: 24rpx;
}
.group_6 {
margin-top: 28.75rpx;
}
@import url(../../../common/css/global.css);
</style>

View File

@ -1,667 +0,0 @@
<template>
<view class="flex-col justify-start relative page" :style="{ backgroundImage: 'url(' + bkgPubilcPath + ')' }">
<view class="section" :style="{ backgroundImage: 'url(' + bkgPubilcPath + ')' }"></view>
<view class="flex-row items-center section_2 pos">
<image
class="image"
:src="orderStatusObj.img"
/>
<view class="flex-col items-start flex-1 ml-6">
<text class="font text">{{ orderStatusObj.msg }}</text>
<text class="font_2 text_2 mt-3">{{ orderStatusObj.tips }}</text>
</view>
</view>
<view class="flex-row items-center section_3 pos_2">
<image
class="image_2"
:src="myOrderUrl + '/myServiceOrderDetail/lxr.png'"
/>
<text class="font_3 text_3 ml-9">{{ contactObj.name }} {{ contactObj.phone }}</text>
</view>
<view class="flex-col section_4 pos_3">
<view class="flex-col">
<view class="flex-row list-item mt-12" v-for="(item, index) in order.orderItemList" :key="index">
<image
class="shrink-0 image_3" mode="aspectFill"
:src="publicPath + item.goodSnapshot.goodImg"
/>
<view class="flex-col items-start flex-1 group_2 ml-20">
<text class="font"> {{ item.goodSnapshot.name }}</text>
<text class="font_4 text_4">已选时间{{ item.reservationDate }} {{ getWeekday(item.reservationDate) }}</text>
<text class="font_5 text_5">{{ item.timeSlot }}</text>
<text class="font_6 text_6">{{ item.goodSnapshot.price.toFixed(2) }}</text>
</view>
<text class="self-start font_6 text_7 ml-20">× {{ item.quantity }}</text>
</view>
</view>
<view class="flex-row justify-between items-baseline view_2">
<text class="font_3 text_8">商品金额</text>
<text class="font_6 text_1">{{ allAmount.toFixed(2) }}</text>
</view>
<view class="flex-row justify-between items-baseline view_3">
<text class="font_7 text_10">优惠券</text>
<text class="font_6 text_9">{{ couponAmount.toFixed(2) }}</text>
</view>
<view class="flex-row justify-end items-baseline group_3">
<text class="font text_11">应付款</text>
<view class="group_4">
<text class="font_6 text_12"></text>
<text class="text_13">{{ order.totalAmount.toFixed(2) }}</text>
</view>
</view>
<view class="flex-col group_5">
<text class="self-start font_8 text_14">买家留言</text>
<view class="flex-col justify-start self-stretch text-wrapper mt-2">
<text class="font_2 text_15" style="word-break: break-all; word-wrap: break-word;">
{{ order.note }}
</text>
</view>
</view>
<view class="flex-row justify-between items-baseline group_6">
<text class="font_8 text_16">创建时间</text>
<text class="font_9 text_17">{{ order.createTime }}</text>
</view>
<view class="flex-row justify-between group_7">
<text class="font_7 text_18">订单编号</text>
<view class="flex-row items-center group_8">
<text class="font_9 text_19">{{ order.orderNumber }}</text>
<view class="flex-col justify-start items-center shrink-0 text-wrapper_2 ml-4" @click="copy(order.orderNumber)">
<text class="text_20">复制</text>
</view>
</view>
</view>
<view class="flex-row justify-center items-center group_9">
<button style="display: flex; align-items: center; height: 60rpx;" open-type="contact" bindcontact="handleContact" session-from="sessionFrom">
<image
class="image_4"
:src="myOrderUrl + '/myServiceOrderDetail/zxkf.png'"
/>
<text class="font text_21">在线客服</text>
</button>
</view>
</view>
<view class="flex-row justify-between items-center section_5 pos_4">
<view class="flex-row items-baseline">
<text class="font text_22">应付款</text>
<view class="group_10">
<text class="font_10 text_23"></text>
<text class="font_10 text_24">{{ order.totalAmount.toFixed(2) }}</text>
</view>
</view>
<view v-if="order.operationList[0]" class="flex-col justify-start items-center text-wrapper_3" @click="wxPayFd(order)">
<text class="font text_25">去支付</text>
</view>
<view v-if="order.operationList[1]" class="flex-col justify-start items-center text-wrapper_3" @click="gotoDeleteOrder(order.id)">
<text class="font text_25">删除订单</text>
</view>
<view v-if="order.operationList[2]" style="background-color: #fff;" class="flex-col justify-start items-center text-wrapper_3">
<text class="font text_25"></text>
</view>
</view>
</view>
<!-- 遮罩层 -->
<view v-if="isShow" class="overlay"></view>
</template>
<script setup>
import {onMounted, ref} from 'vue'
import { onLoad } from "@dcloudio/uni-app";
import { baseUrl } from '../../../api/request';
import { JudgeIsNullity, showTips } from '../../../common/globalFunction';
import { serviceStateList } from '../../../common/global.js'
import emitter from '../../../utils/emitter';
import { getFonts } from '../../../common/globalFont';
import { myOrderUrl } from '../../../common/globalImagesUrl';
import { publicPath,bkgPubilcPath } from '../../../common/globalImagesUrl';
import { onPullDownRefresh } from '@dcloudio/uni-app';
const cookie = wx.getStorageSync('cookie')
let orderId = ''
const order = ref({})
const couponAmount = ref(0)
const allAmount = ref(0)
const contactObj = ref({})
const orderStatusObj = ref({})
let debounceTimer = null;
let wxPayTimer = null;
let loading = false;
let isLoading = ref(false)
let isShow = ref(false)
onLoad((options) => {
getFonts()
orderId = options.id
})
onMounted(() => {
getOrderById(orderId)
})
onPullDownRefresh( async ()=>{ //
await getOrderById(orderId)
setTimeout(()=>{
uni.stopPullDownRefresh() //
},1000)
})
const getOrderById = async (val) => {
const res = await uni.request({
url: baseUrl + '/order/get/id',
method: 'POST',
header: {
cookie
},
data: {
id: val
}
})
console.log(res.data.data)
order.value = res.data.data
contactObj.value = order.value.contactsSnapshot
couponAmount.value = JudgeIsNullity(order.value.couponSnapshot) ? 0 : order.value.couponSnapshot.conditionAmount
allAmount.value = order.value.totalAmount + couponAmount.value
if (order.value.orderStatus === '待支付') {
order.value.operationList = [true, false, false]
orderStatusObj.value = serviceStateList[0]
} else if (order.value.orderStatus === '交易关闭') {
order.value.operationList = [false, true, false]
orderStatusObj.value = serviceStateList[4]
} else if (order.value.orderStatus === '待发货') {
order.value.operationList = [false, false, true]
orderStatusObj.value = serviceStateList[1]
} else if (order.value.orderStatus === '已退款') {
order.value.operationList = [false, false, true]
orderStatusObj.value = serviceStateList[2]
} else if (order.value.orderStatus === '交易成功') {
order.value.operationList = [false, false, true]
orderStatusObj.value = serviceStateList[3]
}
}
const copy = ( orderNumber ) => {
console.log('订单编号为--->',orderNumber);
uni.setClipboardData({
data: orderNumber,
success: () => {
uni.showToast({
title: '成功复制到剪贴板'
})
}
})
}
const wxPayFd = (order) => { //
showLoading()
isShow.value = true //
wxPay(order.id)
}
function showLoading() { //
if (!loading) {
wx.showLoading({
title: '加载中...',
});
loading = true;
isLoading.value = true
}
}
function hideLoading() { //
if (loading) {
wx.hideLoading();
loading = false;
isLoading.value = false
}
}
const wxPay = async( oid )=> { //id
try {
const res = await uni.request({
url: baseUrl + '/wechat/payment/create',
method: 'POST',
header: {
'cookie': wx.getStorageSync("cookie")
},
data: { id: oid }
})
const paymentData = res.data.data
wx.requestPayment({
appid: paymentData.appId,
nonceStr: paymentData.nonceStr,
package: paymentData.packageVal,
paySign: paymentData.paySign,
timeStamp: paymentData.timeStamp,
signType: paymentData.signType,
success(res) {
uni.showModal({
title: '提示',
content: '支付成功',
showCancel: false
})
getOrderById(oid)
},
fail(e) {
},
complete () {
hideLoading()
isShow.value = false //
}
})
}catch(error) {
hideLoading()
isShow.value = false //
uni.showModal({
title: '提示',
content: '支付失败,请刷新后重试',
showCancel: false
})
}
}
const gotoDeleteOrder = (val) => {
uni.showModal({
title: '提示',
content: '您确定要删除订单吗?',
success: async (res) => {
if (res.confirm) {
await deleteOrder(val)
await emitter.emit('flushOrderList')
routerJump('pages/my-order/myServiceOrderDetail/myServiceOrderDetail')
showTips('删除成功')
}
}
})
}
const deleteOrder = async (val) => {
const res = await uni.request({
url: baseUrl + '/order/delete/id',
method: 'POST',
header: {
cookie
},
data: {
id: val
}
})
console.log(res.data.data)
}
function getWeekday(dateStr) {
const date = new Date(dateStr);
const weekdays = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
return weekdays[date.getDay()];
}
const routerJump = (val) => {
let pages = getCurrentPages();
var num = pages.length
if (num == 1) return ;
console.log(pages)
//
var backnum = num
for( var i = 0; i < num; i ++ ) {
//
if(pages[i].route == val){
//'pages/mypage/mypage'A
backnum = num - i - 1
//--1
}
}
uni.navigateBack({
delta:backnum
// delta
})
}
</script>
<style scoped lang="scss">
.overlay {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0.4); /* 半透明黑色背景 */
z-index: 999;
}
button {
padding: 0;
margin: 0;
background-color: #fff;
}
button::after{
border: none;
}
.mt-3 {
margin-top: 5.63rpx;
}
.ml-9 {
margin-left: 16.88rpx;
}
.page {
background-color: #ffffff;
background-size: 100% 100%;
background-repeat: no-repeat;
width: 100%;
overflow-y: auto;
overflow-x: hidden;
height: 100vh;
}
// .section {
// background-image: url('https://ide.code.fun/api/image?token=67cf80c84ae84d001228feb1&name=9df295c356c1b6849e20b6b4853b4d1c.png');
// background-size: 100% 100%;
// background-repeat: no-repeat;
// width: 750rpx;
// }
.section_2 {
padding: 16.88rpx;
background-color: #ffffff;
border-radius: 18.75rpx;
}
.pos {
position: absolute;
left: 16.88rpx;
right: 15rpx;
top: 26.25rpx;
}
.image {
width: 75rpx;
height: 75rpx;
}
.font {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 29.18rpx;
color: #323232;
}
.text {
color: #323233;
font-size: 28.13rpx;
line-height: 27.58rpx;
}
.font_2 {
font-size: 24.38rpx;
font-family: FangZhengFonts;
}
.text_2 {
color: #6b6e72;
line-height: 24rpx;
}
.section_3 {
padding: 24.38rpx 24.38rpx 26.25rpx;
background-color: #ffffff;
border-radius: 18.75rpx;
}
.pos_2 {
position: absolute;
left: 16.88rpx;
right: 15rpx;
top: 159.38rpx;
}
.image_2 {
width: 46.88rpx;
height: 46.88rpx;
}
.font_3 {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 24.51rpx;
color: #818181;
}
.text_3 {
line-height: 25.89rpx;
}
.section_4 {
padding: 20.63rpx 16.01rpx 24.38rpx 20.85rpx;
background-color: #ffffff;
border-radius: 18.75rpx;
}
.pos_3 {
// position: absolute;
// left: 15rpx;
// right: 16.88rpx;
// top: 281.25rpx;
margin: 281.25rpx 16.88rpx 150rpx 15rpx;
}
.list-item {
padding-left: 12.9rpx;
padding-right: 10.74rpx;
}
.list-item:first-child {
margin-top: 0;
}
.image_3 {
border-radius: 9.38rpx;
width: 142.5rpx;
height: 166.88rpx;
}
.group_2 {
margin-bottom: 3.34rpx;
}
.font_4 {
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 24.51rpx;
color: #818181;
}
.text_4 {
margin-left: 3.92rpx;
margin-top: 17.72rpx;
}
.font_5 {
font-size: 26.25rpx;
font-family: FangZhengFonts;
line-height: 17.53rpx;
color: #818181;
}
.text_5 {
margin-left: 5.14rpx;
margin-top: 20.1rpx;
}
.font_6 {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 21.41rpx;
color: #323232;
}
.text_6 {
margin-left: 3.36rpx;
margin-top: 31.29rpx;
line-height: 22.18rpx;
}
.text_7 {
margin-top: 145.46rpx;
}
.view_2 {
margin-top: 46.52rpx;
padding-left: 4.97rpx;
}
.text_8 {
font-size: 28.13rpx;
line-height: 26.04rpx;
}
.text_1 {
font-size: 28.13rpx;
line-height: 20.79rpx;
}
.view_3 {
margin-top: 18.08rpx;
padding-left: 3.98rpx;
}
.font_7 {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 29.18rpx;
color: #818181;
}
.text_10 {
font-size: 28.13rpx;
line-height: 27.36rpx;
}
.text_9 {
font-size: 28.13rpx;
line-height: 20.79rpx;
}
.group_3 {
margin-top: 18.41rpx;
padding: 0 5.91rpx;
}
.text_11 {
font-size: 28.13rpx;
line-height: 25.71rpx;
}
.group_4 {
line-height: 20.76rpx;
height: 20.76rpx;
}
.text_12 {
color: #ffaaa5;
font-size: 28.13rpx;
line-height: 20.29rpx;
}
.text_13 {
color: #ffaaa5;
font-size: 28.13rpx;
font-family: FangZhengFonts;
font-weight: 700;
line-height: 20.76rpx;
}
.group_5 {
margin-top: 27.88rpx;
padding: 21.41rpx 3.52rpx 14.31rpx;
border-top: solid 1.88rpx #dfdfdf;
border-bottom: solid 1.88rpx #dfdfdf;
}
.font_8 {
font-size: 30rpx;
font-family: FangZhengFonts;
line-height: 26.47rpx;
color: #818181;
}
.text_14 {
margin-left: 2.53rpx;
font-size: 28.13rpx;
}
.text-wrapper {
margin-right: 6.71rpx;
padding: 6.6rpx 0 2.96rpx;
border-radius: 9.38rpx;
border: solid 1.88rpx #ffffff;
}
.text_15 {
margin-right: 8.74rpx;
color: #818181;
line-height: 30rpx;
text-shadow: 0 1.88rpx #ffffff, 0 -1.88rpx #ffffff, 1.88rpx 0 #ffffff, -1.88rpx 0 #ffffff;
}
.group_6 {
margin-top: 28.14rpx;
}
.text_16 {
font-size: 28.13rpx;
}
.font_9 {
font-size: 26.25rpx;
font-family: FangZhengFonts;
color: #323232;
}
.text_17 {
line-height: 19.41rpx;
}
.group_7 {
margin-top: 19.2rpx;
}
.text_18 {
font-size: 28.13rpx;
line-height: 27.69rpx;
}
.group_8 {
margin-right: 4.59rpx;
}
.text_19 {
line-height: 19.29rpx;
}
.text-wrapper_2 {
// padding: 3.43rpx 0 3.86rpx;
background-color: #ffffff;
width: 65.63rpx;
height: 30rpx;
border: solid 0.94rpx #d1d1d1;
}
.text_20 {
color: #323232;
font-size: 22.5rpx;
font-family: FangZhengFonts;
line-height: 30rpx;
}
.group_9 {
margin-top: 24.38rpx;
}
.image_4 {
width: 45rpx;
height: 45rpx;
}
.text_21 {
line-height: 28.48rpx;
}
.section_5 {
padding: 16.88rpx 15rpx 15rpx 21.56rpx;
background-color: #ffffff;
}
.pos_4 {
position: fixed;
left: 0;
right: 0;
bottom: 0;
}
.text_22 {
color: #323232;
line-height: 27.43rpx;
}
.group_10 {
line-height: 24.92rpx;
height: 24.92rpx;
}
.font_10 {
font-size: 33.75rpx;
font-family: FangZhengFonts;
line-height: 24.51rpx;
color: #ffaaa5;
}
.text_23 {
line-height: 24.34rpx;
}
.text_24 {
font-weight: 700;
line-height: 24.92rpx;
}
.text-wrapper_3 {
padding: 20.63rpx 0 22.86rpx;
background-color: #ffaaa5;
border-radius: 75rpx;
width: 204.38rpx;
height: 71.25rpx;
}
.text_25 {
color: #ffffff;
line-height: 27.77rpx;
}
@import url(../../../common/css/global.css);
</style>

View File

@ -1,75 +0,0 @@
<template>
<view class="flex-col justify-start relative page" :style="{ backgroundImage: 'url(' + bkgPubilcPath + ')' }">
<view class="flex-col justify-start section_2 pos">
<view class="flex-row section_3" style="display: flex; align-items: center;">
<image
class="image"
:src="myOrderUrl + '/researchOrder/ss.png'"
/>
<input confirm-type="search" @confirm="search" class="ml-7" placeholder="搜索订单" style="width: 100%;" v-model="orderNumber"/>
</view>
</view>
</view>
</template>
<script setup>
import {ref} from 'vue'
import { onLoad } from "@dcloudio/uni-app";
import { myOrderUrl,bkgPubilcPath } from '../../../common/globalImagesUrl';
import { getFonts } from '../../../common/globalFont';
onLoad(() => {
getFonts()
})
const orderNumber = ref('')
const search = () => {
if (orderNumber.value === null || orderNumber.value === undefined || orderNumber.value === '') {
uni.showToast({
title: '请输入订单号',
icon: 'error'
})
return ;
}
uni.redirectTo({
url: '../myOrderList/myOrderList?orderNumber=' + orderNumber.value
})
}
</script>
<style scoped lang="scss">
.ml-7 {
margin-left: 13.13rpx;
}
.page {
background-size: 100% 100%;
background-repeat: no-repeat;
width: 100%;
overflow-y: auto;
overflow-x: hidden;
height: 100vh;
}
.section_2 {
padding: 33.75rpx 0 35.63rpx;
background-color: #fff;
box-shadow: 0rpx 3.75rpx 3.75rpx #32323240;
}
.pos {
position: fixed;
left: 0;
right: 0;
top: 0;
}
.section_3 {
margin-left: 35.63rpx;
margin-right: 35.63rpx;
padding: 18.75rpx 24.38rpx;
background-color: #f3f3f3;
border-radius: 75rpx;
}
.image {
width: 28.13rpx;
height: 28.13rpx;
}
@import url(../../../common/css/global.css);
</style>

View File

@ -425,7 +425,7 @@ const wxPay = async( oid )=> { //传入订单id
},
complete () {
uni.redirectTo({
url: '/pages/my-order/myGeneralOrderDetail/myGeneralOrderDetail?id=' + oid
url: '/pages/subPack/my-order/myGeneralOrderDetail/myGeneralOrderDetail?id=' + oid
})
}
})

View File

@ -429,7 +429,7 @@
},
complete () {
uni.redirectTo({
url: '/pages/my-order/myServiceOrderDetail/myServiceOrderDetail?id=' + oid
url: '/pages/subPack/my-order/myServiceOrderDetail/myServiceOrderDetail?id=' + oid
})
}
})

View File

@ -536,7 +536,7 @@ const wxPay = async ( oid )=> { //传入订单id
},
complete () {
uni.redirectTo({
url: '/pages/my-order/myGeneralOrderDetail/myGeneralOrderDetail?id=' + oid
url: '/pages/subPack/my-order/myGeneralOrderDetail/myGeneralOrderDetail?id=' + oid
})
}
})

View File

@ -423,7 +423,7 @@
},
complete () {
uni.redirectTo({
url: '/pages/my-order/myServiceOrderDetail/myServiceOrderDetail?id=' + oid
url: '/pages/subPack/my-order/myServiceOrderDetail/myServiceOrderDetail?id=' + oid
})
}
})

View File

@ -1,6 +1,7 @@
<template>
<view class="flex-col justify-start relative page" :style="{ backgroundImage: 'url(' + bkgPubilcPath + ')'}">
<image
<clothesPopVue :clothesImgUrl="clothesImgUrl"></clothesPopVue>
<image
class="image pos" mode="aspectFill"
:src="publicPath + (isShow ? obj.introImg : obj.image)"
/>
@ -45,7 +46,8 @@
import emitter from '../../../../utils/emitter';
import { getFonts } from '../../../../common/globalFont';
import customerServiceVue from '../component/customerService.vue';
import clothesPopVue from '../../clothesPop/clothesPop.vue';
const book = ref(null)
const rent = ref(null)
const cookie = wx.getStorageSync("cookie") //
@ -54,8 +56,11 @@
const id = ref(0)
const obj = ref({})
const bookingDateVOList = ref([])
const clothesImgUrl = ref('')
const closeClothesAttributePopupHandler = () => {
nextTick(() => {
if (rent.value) {
@ -88,6 +93,7 @@
emitter.on('closeClothesAttributePopup', closeClothesAttributePopupHandler)
emitter.on('closeClothesAttributePlusPopup', closeClothesAttributePlusPopupHandler)
})
onUnmounted(() => {
@ -108,6 +114,7 @@
}
})
obj.value = res.data.data
clothesImgUrl.value = obj.value.introImg
bookingDateVOList.value = res.data.data.bookingDateVOList
console.log(obj.value)
}
@ -124,6 +131,7 @@
}
})
obj.value = res.data.data
clothesImgUrl.value = obj.value.image
console.log(obj.value)
}

View File

@ -1,6 +1,6 @@
<template>
<view class="flex-col justify-start relative page" :style="{ backgroundImage: 'url(' + bkgPubilcPath + ')'}">
<view class="flex-row items-center section_2 pos">
<view class="flex-row items-center section_2 pos">
<image
class="image"
:src="orderStatusObj.img"

View File

@ -397,17 +397,14 @@
const nav = () => {
// wx.openLocation({
// latitude: 45.867741,
// longitude: 126.560037,
// name: '()',
// address: '1',
// success: (res) => {
// console.log(res)
// }
// })
uni.showModal({
title: '该功能开发中!'
wx.openLocation({
latitude: 45.867741,
longitude: 126.560037,
name: '哈尔滨师范大学(松北校区)',
address: '黑龙江省哈尔滨市呼兰区利民经济开发区师大路1号',
success: (res) => {
console.log(res)
}
})
}

View File

@ -231,17 +231,14 @@
}
const nav = () => {
// wx.openLocation({
// latitude: 45.867741,
// longitude: 126.560037,
// name: '()',
// address: '1',
// success: (res) => {
// console.log(res)
// }
// })
uni.showModal({
title: '该功能开发中!'
wx.openLocation({
latitude: 45.867741,
longitude: 126.560037,
name: '哈尔滨师范大学(松北校区)',
address: '黑龙江省哈尔滨市呼兰区利民经济开发区师大路1号',
success: (res) => {
console.log(res)
}
})
}

View File

@ -474,17 +474,14 @@
const nav = () => { //
// wx.openLocation({
// latitude: 45.867741,
// longitude: 126.560037,
// name: '()',
// address: '1',
// success: (res) => {
// console.log(res)
// }
// })
uni.showModal({
title: '该功能开发中!'
wx.openLocation({
latitude: 45.867741,
longitude: 126.560037,
name: '哈尔滨师范大学(松北校区)',
address: '黑龙江省哈尔滨市呼兰区利民经济开发区师大路1号',
success: (res) => {
console.log(res)
}
})
}
</script>

View File

@ -170,17 +170,14 @@
const nav = () => {
// wx.openLocation({
// latitude: 45.867741,
// longitude: 126.560037,
// name: '()',
// address: '1',
// success: (res) => {
// console.log(res)
// }
// })
uni.showModal({
title: '该功能开发中!'
wx.openLocation({
latitude: 45.867741,
longitude: 126.560037,
name: '哈尔滨师范大学(松北校区)',
address: '黑龙江省哈尔滨市呼兰区利民经济开发区师大路1号',
success: (res) => {
console.log(res)
}
})
}

View File

@ -1,3 +1,9 @@
## 1.0.122025-04-14
- 修复 支付宝小程序 上传样式问题
## 1.0.102024-07-09
- 优化 vue3兼容性
## 1.0.92024-07-09
- 修复 value 属性不兼容vue3的bug
## 1.0.82024-03-20
- 补充 删除文件时返回文件下标
## 1.0.72024-02-21

View File

@ -8,10 +8,8 @@
:image-styles="imageStyles" :files-list="filesList" :limit="limitLength" :disablePreview="disablePreview"
:delIcon="delIcon" @uploadFiles="uploadFiles" @choose="choose" @delFile="delFile">
<slot>
<view class="is-add">
<view class="icon-add"></view>
<view class="icon-add rotate"></view>
</view>
<view class="icon-add"></view>
<view class="icon-add rotate"></view>
</slot>
</upload-image>
<upload-file v-if="fileMediatype !== 'image' || showType !== 'grid'" :readonly="readonly"
@ -89,24 +87,18 @@
},
emits: ['select', 'success', 'fail', 'progress', 'delete', 'update:modelValue', 'input'],
props: {
// #ifdef VUE3
modelValue: {
type: [Array, Object],
default () {
return []
}
},
// #endif
// #ifndef VUE3
value: {
type: [Array, Object],
default () {
return []
}
},
// #endif
disabled: {
type: Boolean,
default: false
@ -204,22 +196,18 @@
}
},
watch: {
// #ifndef VUE3
value: {
handler(newVal, oldVal) {
this.setValue(newVal, oldVal)
},
immediate: true
},
// #endif
// #ifdef VUE3
modelValue: {
handler(newVal, oldVal) {
this.setValue(newVal, oldVal)
},
immediate: true
},
// #endif
},
computed: {
filesList() {
@ -656,14 +644,6 @@
color: #999;
}
.is-add {
/* #ifndef APP-NVUE */
display: flex;
/* #endif */
align-items: center;
justify-content: center;
}
.icon-add {
width: 50px;
height: 5px;

View File

@ -18,10 +18,7 @@
</view>
<view v-if="filesList.length < limit && !readonly" class="file-picker__box" :style="boxStyle">
<view class="file-picker__box-content is-add" :style="borderStyle" @click="choose">
<slot>
<view class="icon-add"></view>
<view class="icon-add rotate"></view>
</slot>
<slot></slot>
</view>
</view>
</view>
@ -254,13 +251,6 @@
justify-content: center;
}
.icon-add {
width: 50px;
height: 5px;
background-color: #f1f1f1;
border-radius: 2px;
}
.rotate {
position: absolute;
transform: rotate(90deg);

View File

@ -1,7 +1,7 @@
{
"id": "uni-file-picker",
"displayName": "uni-file-picker 文件选择上传",
"version": "1.0.8",
"version": "1.0.12",
"description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间",
"keywords": [
"uni-ui",
@ -42,12 +42,15 @@
"platforms": {
"cloud": {
"tcb": "y",
"aliyun": "y"
"aliyun": "y",
"alipay": "n"
},
"client": {
"App": {
"app-vue": "y",
"app-nvue": "n"
"app-vue": "y",
"app-nvue": "n",
"app-harmony": "u",
"app-uvue": "u"
},
"H5-mobile": {
"Safari": "y",