290 lines
5.2 KiB
Vue
290 lines
5.2 KiB
Vue
<script setup>
|
||
/**
|
||
* 我的交易
|
||
*/
|
||
import {
|
||
onMounted,
|
||
ref,
|
||
reactive,
|
||
getCurrentInstance,
|
||
watch,
|
||
computed,
|
||
defineExpose,
|
||
} from 'vue';
|
||
import {
|
||
onLoad,
|
||
onReady,
|
||
onHide,
|
||
onPullDownRefresh,
|
||
onReachBottom,
|
||
} from '@dcloudio/uni-app'
|
||
import {
|
||
useStore,
|
||
} from 'vuex'
|
||
import durianlApi from '@/api/durian.js';
|
||
// 顶部导航
|
||
import apex from '@/components/header/apex'
|
||
|
||
const store = useStore()
|
||
const {
|
||
proxy
|
||
} = getCurrentInstance()
|
||
|
||
// 选中的下标
|
||
const tabList = reactive([{
|
||
name: '全部',
|
||
},
|
||
{
|
||
name: '交易中',
|
||
},
|
||
{
|
||
name: '已完成',
|
||
},
|
||
{
|
||
name: '已取消',
|
||
},
|
||
])
|
||
// tab下标
|
||
const tabIndex = ref(0)
|
||
// 订单列表
|
||
const list = reactive({
|
||
data: [],
|
||
pageNum: 1,
|
||
pageSize: 10,
|
||
total: 0,
|
||
})
|
||
|
||
const userinfo = computed(() => {
|
||
let result = store.state.userinfo
|
||
return result
|
||
})
|
||
|
||
onLoad(() => {
|
||
getList()
|
||
})
|
||
|
||
onPullDownRefresh(() => {
|
||
//
|
||
refreshList()
|
||
})
|
||
|
||
onReachBottom(() => {
|
||
//
|
||
getMoreList()
|
||
})
|
||
|
||
// 重载列表
|
||
function refreshList() {
|
||
list.pageNum = 1
|
||
list.total = 0
|
||
getList()
|
||
}
|
||
|
||
// 获取更多列表
|
||
function getMoreList() {
|
||
if (list.data.length >= list.total) return
|
||
list.pageNum++
|
||
getList()
|
||
}
|
||
|
||
// 查看交易大厅
|
||
function getList() {
|
||
durianlApi.getOrderList({
|
||
query: {
|
||
userId: userinfo.value.userId,
|
||
status: tabIndex.value,
|
||
pageSize: list.pageSize,
|
||
pageNum: list.pageNum,
|
||
}
|
||
}).then(rs => {
|
||
if (rs.code == 200) {
|
||
if (list.pageNum == 1) list.data.length = 0
|
||
list.data.push(...rs.rows)
|
||
list.total = rs.total
|
||
return
|
||
}
|
||
util.alert({
|
||
content: rs.msg,
|
||
showCancel: false,
|
||
})
|
||
})
|
||
}
|
||
|
||
// 修改tab下标
|
||
function handleTabIndex(index) {
|
||
if (tabIndex.value === index) return
|
||
tabIndex.value = index
|
||
list.data.length = 0
|
||
refreshList()
|
||
}
|
||
|
||
/**
|
||
* 取消交易
|
||
* @param {Object} item 交易订单对象
|
||
*/
|
||
function cancelSale(item) {
|
||
durianlApi.cancelSale({
|
||
query: {
|
||
orderId: item.id,
|
||
}
|
||
}).then(rs => {
|
||
if (rs.code === 200) {
|
||
util.alert('操作成功')
|
||
util.getUserinfo()
|
||
refreshList()
|
||
return
|
||
}
|
||
util.alert({
|
||
content: rs.msg,
|
||
showCancel: false,
|
||
})
|
||
})
|
||
}
|
||
|
||
/**
|
||
* 复制
|
||
* @param {Object} str 复制的字段
|
||
*/
|
||
function handleCopy(str) {
|
||
util.copyText(str)
|
||
}
|
||
</script>
|
||
|
||
<template>
|
||
<view class="app">
|
||
<!-- 顶部菜单栏 -->
|
||
<apex title="我的交易">
|
||
<template #right>
|
||
<navigator url="/pages/index/trade" hover-class="none" open-type="redirect">
|
||
<view class="w150 tar">交易市场</view>
|
||
</navigator>
|
||
</template>
|
||
</apex>
|
||
|
||
<view class="list plr30">
|
||
<view class="item mtb20 ptb20 plr30 bfff br10" v-for="(item,index) in list.data" :key="index">
|
||
<view class="rows">
|
||
<view class="">数量:{{item.sellNum}}</view>
|
||
<view class="">
|
||
<text v-if="item.type == 1">挂买</text>
|
||
<text v-else>挂卖</text>
|
||
</view>
|
||
</view>
|
||
|
||
<view class="rows mt20">
|
||
<view class="">金额:{{item.totalPrice}}</view>
|
||
<template v-if="item.status == 3">
|
||
<text class="c999 f28">已取消</text>
|
||
</template>
|
||
<template v-if="item.status == 2">
|
||
<text class="c999 f28">已完成</text>
|
||
</template>
|
||
<template v-else-if="item.status == 1">
|
||
<view class="btn sm black w180" @click="cancelSale(item)">取消</view>
|
||
</template>
|
||
</view>
|
||
|
||
<template v-if="item.status == 2">
|
||
<view class="fmid mt10" @click="handleCopy(item.orderNo)">
|
||
<view class="c333 f28">交易哈希:{{item.orderNo}}</view>
|
||
<image class="wh24 ml10" src="/static/copy.png" mode="aspectFit" />
|
||
</view>
|
||
|
||
<!-- 交易申诉 -->
|
||
<!-- <view class="appeal btn ti cfff mt20 mauto mb30">交易申诉</view> -->
|
||
</template>
|
||
</view>
|
||
|
||
<view class="nomore mtb30">暂无更多~</view>
|
||
</view>
|
||
|
||
<view class="fill" style="height: 120rpx;"></view>
|
||
|
||
<!-- 底部菜单 -->
|
||
<view class="footer footerMenu df bfff shadow">
|
||
<view class="option f1 ver" v-for="(item,index) in tabList" :key="index" :class="{'active': index === tabIndex}" @click="handleTabIndex(index)">
|
||
<view class="">{{item.name}}</view>
|
||
<view class="line"></view>
|
||
</view>
|
||
</view>
|
||
</view>
|
||
</template>
|
||
|
||
<style lang="scss">
|
||
// 顶部
|
||
.apex {
|
||
z-index: 1;
|
||
}
|
||
|
||
//
|
||
.list {
|
||
|
||
// 列表项
|
||
.item {
|
||
|
||
.fn {
|
||
.button {
|
||
border-radius: 20rpx 0 0 20rpx;
|
||
}
|
||
}
|
||
|
||
// 标签
|
||
.label {
|
||
position: absolute;
|
||
top: 0;
|
||
right: 0;
|
||
width: 120rpx;
|
||
text-align: center;
|
||
color: #fff;
|
||
font-size: 28rpx;
|
||
border-radius: 0 20rpx 0 20rpx;
|
||
|
||
&.style1 {
|
||
background-image: linear-gradient(180deg, #FFBB35 0%, #FF3C35 100%);
|
||
}
|
||
|
||
&.style2 {
|
||
background-image: linear-gradient(116deg, #27EFE2 0%, #A45EFF 43%, #FF004F 100%);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 底部菜单
|
||
.footerMenu {
|
||
.option {
|
||
color: #c6c6c6;
|
||
transition: .3s;
|
||
|
||
.line {
|
||
width: 36rpx;
|
||
height: 4rpx;
|
||
background-color: #333;
|
||
border-radius: 100rpx;
|
||
opacity: 0;
|
||
transition: .3s;
|
||
}
|
||
|
||
&.active {
|
||
color: #333;
|
||
|
||
.line {
|
||
opacity: 1;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// 挂卖弹窗
|
||
.saleAlt {
|
||
.button {
|
||
width: 300rpx;
|
||
}
|
||
}
|
||
|
||
// 交易申诉
|
||
.appeal {
|
||
width: 450rpx;
|
||
background-color: #717171;
|
||
}
|
||
</style> |