Files
h5-uniapp/pages/index/orderDetails.vue
T
li 5f40e4e1b5 feat: 前端全量更新 - 含所有本次需求
- 移除秒合约页面及UI
- 合约页Tab改为Position Held/Transaction Record
- 存款/提款/转账页增加BTC/ETH
- 资产页重构(用户信息+盈亏+多语言)
- 注册页改版(匹配新设计稿)
- 日文全面翻译+首页菜单多语言
- 代理专属注册链接支持(?code=)
- 10个locale文件同步更新
2026-03-30 20:14:20 +08:00

460 lines
15 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<template>
<view>
<z-paging ref="paging" refresher-only @onRefresh="onRefresh"
:style="'background-color: '+theme.bg+';color: '+theme.text">
<myNav slot="top" :title="i18n.orderDetails.title"></myNav>
<!-- 身体 -->
<view class="width-750 padding-w-30 padding-t-24 padding-b-100">
<!-- 倒计时 -->
<view v-if="data.status==1||data.status==2"
class="height-112 padding-c-12 flex align-center justify-between">
<view class="height-100b flex direction-column justify-between">
<text v-if="data.status==1"
class="font-28 weight-bold">{{i18n.orderDetails.text1}}</text>
<text v-if="data.status==2"
class="font-28 weight-bold">{{i18n.orderDetails.text2}}</text>
<view class="flex align-center">
<text v-if="data.status==1" class="font-26 color-C3C3C3">{{i18n.orderDetails.text3}}</text>
<text v-if="data.status==2" class="font-26 color-C3C3C3">{{i18n.orderDetails.text4}}</text>
<u-count-down @end="getDetails()" ref="uCountDown" :autoplay="true" :timestamp="timestamp"
color="#0165EE">
</u-count-down>
</view>
</view>
<image class="width-60 height-60" src="/static/imgs/index/daojishi@2x.png" mode=""></image>
</view>
<!-- 订单信息 -->
<view class="box" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="flex align-center justify-between margin-b-25">
<text class="font-28 weight-bold">{{i18n.orderDetails.text5}}</text>
<text class="font-28 color-0165EE weight-bold">{{statusText[data.status]}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text6}}</text>
<text class="font-26 color-C3C3C3 nummedium-font">{{data.order_num}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text7}}</text>
<text class="font-26 color-C3C3C3 nummedium-font">{{data.symbol}} {{data.price}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text8}}({{data.curr_name}})</text>
<text class="font-26 color-C3C3C3 nummedium-font">{{data.num}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text9}}</text>
<text class="font-26 color-C3C3C3 nummedium-font">{{data.symbol}} {{data.count_price}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text10}}</text>
<text class="font-26 color-C3C3C3 nummedium-font">{{data.add_time}}</text>
</view>
</view>
<!-- 用户信息 -->
<view class="box" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="flex align-center justify-between margin-b-25">
<text class="font-28 weight-bold">
{{data.type==1?i18n.orderDetails.text11:i18n.orderDetails.text12}}
</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text13}}</text>
<text class="font-26 color-C3C3C3 nummedium-font">{{data.nickname}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text14}}</text>
<text class="font-26 color-C3C3C3 nummedium-font">{{data.name}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text15}}</text>
<view class="flex align-center">
<text class="font-26 color-C3C3C3 nummedium-font">{{data.mobile}}</text>
<text @click="callup(data.mobile)"
class="font-26 color-0165EE margin-l-22">{{i18n.orderDetails.text16}}</text>
</view>
</view>
</view>
<!-- 银行卡信息 -->
<view v-if="data" class="box" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="flex align-center justify-between margin-b-25">
<text class="font-28 weight-bold">{{i18n.orderDetails.text17}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text18}}</text>
<text class="font-26 color-C3C3C3 nummedium-font">{{data.collection.card_num}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text14}}</text>
<text class="font-26 color-C3C3C3 nummedium-font">{{data.collection.username}}</text>
</view>
<view class="flex align-center justify-between margin-b-10">
<text class="font-26 color-C3C3C3">{{i18n.orderDetails.text19}}</text>
<view class="flex align-center">
<text
class="font-26 color-C3C3C3 nummedium-font">{{data.collection.bank_name+data.collection.bank_deposit}}</text>
</view>
</view>
</view>
<!-- 支付凭证 -->
<view v-if="data.status==1&&data.type==1" class="box" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="flex align-center justify-between margin-b-25">
<text class="font-28 weight-bold">{{i18n.orderDetails.text20}}</text>
</view>
<view @click="chooseImage"
:style="'background-color: '+theme.bg"
class="width-176 height-176 radiu-20 flex align-center justify-center">
<!-- <image v-if="img==''||img==null" class="width-104 height-101"
src="/static/imgs/index/upload@2x.png"></image> -->
<u-icon v-if="img==''||img==null" name="plus-circle" color="#8B99A2" size="80"></u-icon>
<image v-else class="width-176 height-176 radiu-20" :src="img" mode=""></image>
</view>
</view>
<view v-if="data.status!=1&&data.status!=5" class="box" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="flex align-center justify-between margin-b-25">
<text class="font-28 weight-bold">{{i18n.orderDetails.text20}}</text>
</view>
<view class="width-176 height-176 radiu-20 flex align-center justify-center">
<image @click="yulanImg(voimg,1)" class="width-176 height-176 radiu-20" :src="voimg" mode=""></image>
</view>
</view>
<!-- 申诉内容 -->
<view v-if="data.appeal_arr" class="box" :style="'background-color: '+theme.fu_bg+';color: '+theme.text">
<view class="flex align-center justify-between margin-b-25">
<text class="font-28 weight-bold">{{i18n.orderDetails.text21}}</text>
</view>
<view class="font-32 color-FF4040 margin-b-10">{{data.appeal_arr.content}}</view>
<view class="grid col-3">
<view @click="yulanImg(data.appeal_arr.annex_images,2)"
v-for="(item,index) in data.appeal_arr.annex_images" class="text-center margin-top">
<view class="width-200 height-200">
<image :src="item" class="width-200 height-200 radiu-20"></image>
</view>
</view>
</view>
</view>
<!-- 按钮区 -->
<view class=" margin-t-100 flex align-center justify-around">
<!-- <text v-if="data.status==1&&data.type==2" class="font-42 color-00C481">请耐心等待买家付款</text> -->
<view @click="router.push('/pages/index/appeal?id='+data.id)" v-if="data.status==2" class="okbtn">
{{i18n.orderDetails.text22}}
</view>
<view @click="show=true" v-if="data.status==1&&data.type==1" class="nobtn">{{i18n.orderDetails.text23}}
</view>
<view @click="getorder_pay" v-if="data.status==1&&data.type==1" class="okbtn">
{{i18n.orderDetails.text24}}
</view>
<view @click="show1=true" v-if="data.status==2&&data.type==2" class="okbtn">{{i18n.orderDetails.text25}}
</view>
</view>
</view>
<!-- 取消弹窗 -->
<u-popup v-model="show" mode="center" border-radius="20">
<view class="width-600 height-266" style="overflow: hidden;"
:style="'background-color: '+theme.bg+';color: '+theme.text">
<view class="height-170 flex align-center justify-center">
<text class="font-32 color-FF4040 weight-bold">{{i18n.orderDetails.text26}}</text>
</view>
<!-- <input class="input" type="text" v-model="paypwd" placeholder="请输入交易密码" placeholder-class="color-C3C3C3"
password /> -->
<view class="height-98 flex">
<view @click="show=false" class="flex-1 line-height-98 text-center bj-c3c3c3-02">
<text class="font-28 color-C3C3C3 weight-bold">{{i18n.orderDetails.text27}}</text>
</view>
<view @click="getcancel" class="flex-1 line-height-98 text-center bj-0165EE">
<text class="font-28 color-white weight-bold">{{i18n.orderDetails.text28}}</text>
</view>
</view>
</view>
</u-popup>
<!-- 确认收款弹窗 -->
<u-popup v-model="show1" mode="center" border-radius="20">
<view class="width-600 height-266" style="overflow: hidden;"
:style="'background-color: '+theme.bg+';color: '+theme.text">
<view class="height-170 flex align-center justify-center">
<text class="font-32 color-FF4040 weight-bold">{{i18n.orderDetails.text29}}</text>
</view>
<!-- <input class="input" type="text" v-model="paypwd" placeholder="请输入交易密码" placeholder-class="color-C3C3C3"
password /> -->
<view class="height-98 flex">
<view @click="show1=false" class="flex-1 line-height-98 text-center bj-c3c3c3-02">
<text class="font-28 color-C3C3C3 weight-bold">{{i18n.orderDetails.text27}}</text>
</view>
<view @click="getsucc" class="flex-1 line-height-98 text-center bj-0165EE">
<text class="font-28 color-white weight-bold">{{i18n.orderDetails.text28}}</text>
</view>
</view>
</view>
</u-popup>
</z-paging>
</view>
</template>
<script>
export default {
data() {
return {
statusBar: uni.getSystemInfoSync().statusBarHeight,
timestamp: 0,
id: '',
data: '',
img: '',
upimg: '',
voimg: '',
flag: true,
show: false,
show1: false,
statusText: ['', '', '', '', '', ''],
theme: '',
}
},
onLoad(e) {
this.id = e.id
},
computed: {
i18n() {
return this.$t('message');
}
},
// onPullDownRefresh() {
// console.log('下拉刷新');
// this.getDetails()
// this.changekind()
// setTimeout(function() {
// uni.stopPullDownRefresh();
// }, 1500);
// },
onShow() {
if (uni.getStorageSync("theme") == "dark") {
this.theme = this.$store.state.darkTheme
} else {
this.theme = this.$store.state.lightTheme
}
this.getDetails()
this.changekind()
},
methods: {
onRefresh() {
this.getDetails()
this.changekind()
// 以告知z-paging下拉刷新结束,这样才可以开始下一次的下拉刷新
setTimeout(() => {
//1.5秒之后停止刷新动画
this.$refs.paging.complete();
}, 1500)
},
changekind() {
this.statusText[1] = this.i18n.orderRecord.text10
this.statusText[2] = this.i18n.orderRecord.text11
this.statusText[3] = this.i18n.orderRecord.text12
this.statusText[4] = this.i18n.orderRecord.text13
this.statusText[5] = this.i18n.orderRecord.text14
},
// 呼叫
callup(phone) {
uni.makePhoneCall({
phoneNumber: phone, //仅为示例
success: () => {
}
});
},
// 确认收款并放币
getsucc() {
if (!this.flag) {
return
} else {
this.show1 = false
uni.showLoading({
title: '',
mask: true
})
this.flag = false
this.post('/marketotc/order_succ', {
id: this.data.id
}).then(res => {
console.log('确认收款返回', res)
this.flag = true
uni.hideLoading()
if (res.code == 1) {
this.tos(res.msg)
this.getDetails()
}
})
}
},
// 查看支付凭证
yulanImg(img, type) {
if (type == 1) {
// let arr = []
let arr = img.split()
// arr.push(img)
uni.previewImage({
urls: arr
})
} else {
uni.previewImage({
urls: img
})
}
},
// 取消订单
getcancel() {
if (!this.flag) {
return
} else {
this.show = false
uni.showLoading({
title: '',
mask: true
})
this.flag = false
this.post('/marketotc/order_cancel', {
id: this.data.id
}).then(res => {
console.log('上传支付凭证返回', res)
this.flag = true
uni.hideLoading()
if (res.code == 1) {
this.tos(res.msg)
this.getDetails()
}
})
}
},
// 上传支付凭证
getorder_pay() {
if (this.upimg == '') return this.tos(this.i18n.orderDetails.tos1)
if (!this.flag) {
return
} else {
uni.showLoading({
title: '',
mask: true
})
this.flag = false
let obj = {
id: this.data.id,
voucher_image: this.upimg
}
this.post('/marketotc/order_pay', obj).then(res => {
console.log('上传支付凭证返回', res)
this.flag = true
uni.hideLoading()
if (res.code == 1) {
this.tos(res.msg)
this.getDetails()
}
})
}
},
// 选择支付凭证
chooseImage() {
let self = this
uni.chooseImage({
count: 1,
success: (chooseImageRes) => {
const tempFilePaths = chooseImageRes.tempFilePaths;
self.img = tempFilePaths[0]
uni.showLoading()
uni.uploadFile({
url: this.upload + '/publics/image_upload',
filePath: tempFilePaths[0],
name: 'file',
success: (res) => {
let data = JSON.parse(res.data)
uni.hideLoading()
if (data.code == 1) {
// console.log(data)
self.upimg = data.data.url
}
}
})
}
})
},
// 获取订单详情
getDetails() {
uni.showLoading({
title: '',
mask: true
})
this.post('/marketotc/content_order', {
id: this.id
}).then(res => {
console.log('订单详情', res)
if (res.code == 1) {
uni.hideLoading()
this.data = res.data
if (this.data.status != 1 && this.data.voucher_image != null) {
this.voimg = res.data.voucher_image[0]
}
let h = res.data.h
let i = res.data.i
let s = res.data.s
this.timestamp = (h * 60 * 60) + (i * 60) + s
this.$refs.uCountDown.start();
}
})
},
}
}
</script>
<style lang="scss">
.box {
width: 690rpx;
padding: 22rpx 24rpx 20rpx;
// background: #FFFFFF;
box-shadow: 0rpx 4rpx 10rpx rgba(205, 206, 219, 0.3);
border-radius: 20rpx;
margin-bottom: 24rpx;
}
.nobtn {
width: 300rpx;
height: 96rpx;
background: #F6F8FB;
border-radius: 10rpx;
font-size: 30rpx;
color: #8B99A2;
line-height: 96rpx;
text-align: center;
}
.okbtn {
width: 300rpx;
height: 96rpx;
background: #0165EE;
border-radius: 10rpx;
font-size: 30rpx;
color: #FFFFFF;
line-height: 96rpx;
text-align: center;
}
.bj-c3c3c3-02 {
background: rgba(195, 195, 195, 0.2);
}
.input {
width: 540rpx;
height: 76rpx;
margin: 0 auto;
border-radius: 20rpx;
background: #F6F8FC;
font-size: 28rpx;
color: #8B99A2;
padding: 0 24rpx;
}
</style>