feat: 前端全量更新 - 含所有本次需求

- 移除秒合约页面及UI
- 合约页Tab改为Position Held/Transaction Record
- 存款/提款/转账页增加BTC/ETH
- 资产页重构(用户信息+盈亏+多语言)
- 注册页改版(匹配新设计稿)
- 日文全面翻译+首页菜单多语言
- 代理专属注册链接支持(?code=)
- 10个locale文件同步更新
This commit is contained in:
li
2026-03-30 20:14:20 +08:00
commit 5f40e4e1b5
605 changed files with 154871 additions and 0 deletions
+459
View File
@@ -0,0 +1,459 @@
<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>