104 lines
3.6 KiB
Vue
104 lines
3.6 KiB
Vue
<template>
|
||
<div class="order-detail-page">
|
||
<h2 class="title">订单详情</h2>
|
||
<div v-if="loading" class="loading">加载中...</div>
|
||
<div v-else>
|
||
<el-card class="section">
|
||
<div class="row"><span class="label">订单ID:</span><span class="value mono">{{ order.id || '—' }}</span></div>
|
||
<div class="row"><span class="label">订单号:</span><span class="value mono">{{ order.orderNumber || '—' }}</span></div>
|
||
<div class="row"><span class="label">状态:</span><span class="value">{{ order.status }}</span></div>
|
||
<div class="row"><span class="label">金额(USDT):</span><span class="value strong">{{ order.totalPrice }}</span></div>
|
||
<div class="row"><span class="label">创建时间:</span><span class="value">{{ formatDateTime(order.createTime) }}</span></div>
|
||
</el-card>
|
||
|
||
<el-card class="section" style="margin-top:12px;">
|
||
<div class="sub-title">机器列表</div>
|
||
<el-table :data="items" border size="small" style="width:100%"
|
||
:header-cell-style="{ textAlign: 'left' }" :cell-style="{ textAlign: 'left' }">
|
||
<el-table-column prop="productMachineId" label="机器ID" min-width="120" />
|
||
<el-table-column prop="name" label="名称" min-width="160" />
|
||
<el-table-column prop="payCoin" label="币种" min-width="100" />
|
||
<el-table-column prop="leaseTime" label="租赁天数" min-width="100" />
|
||
<el-table-column prop="price" label="单价(USDT)" min-width="120" />
|
||
<el-table-column prop="address" label="收款地址" min-width="240" />
|
||
</el-table>
|
||
</el-card>
|
||
|
||
<div class="actions">
|
||
<el-button @click="$router.back()">返回</el-button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</template>
|
||
|
||
<script>
|
||
import { getOrdersByIds } from '../../api/order'
|
||
|
||
export default {
|
||
name: 'AccountOrderDetail',
|
||
data() {
|
||
return {
|
||
loading: false,
|
||
order: {},
|
||
items: []
|
||
}
|
||
},
|
||
created() {
|
||
this.load()
|
||
},
|
||
methods: {
|
||
async load() {
|
||
const id = this.$route.params.id
|
||
if (!id) {
|
||
this.$message({
|
||
message: '订单ID缺失',
|
||
type: 'error',
|
||
showClose: true
|
||
})
|
||
return
|
||
}
|
||
try {
|
||
this.loading = true
|
||
const res = await getOrdersByIds({ orderId: id })
|
||
const payload = (res && res.data) != null ? res.data : res
|
||
let one = {}
|
||
if (Array.isArray(payload) && payload.length) one = payload[0]
|
||
else if (payload && typeof payload === 'object') one = payload
|
||
else if (Array.isArray(res && res.rows) && res.rows.length) one = res.rows[0]
|
||
this.order = one || {}
|
||
this.items = Array.isArray(one && one.orderItemDtoList) ? one.orderItemDtoList : []
|
||
} catch (e) {
|
||
console.log('获取订单详情失败')
|
||
} finally {
|
||
this.loading = false
|
||
}
|
||
}
|
||
,
|
||
formatDateTime(value) {
|
||
if (!value) return '—'
|
||
try {
|
||
const str = String(value)
|
||
return str.includes('T') ? str.replace('T', ' ') : str
|
||
} catch (e) {
|
||
return String(value)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
|
||
<style scoped>
|
||
.order-detail-page { padding: 12px; }
|
||
.title { margin: 0 0 12px 0; font-weight: 600; color: #2c3e50; }
|
||
.sub-title { font-weight: 600; margin-bottom: 8px; }
|
||
.section { margin-bottom: 12px; }
|
||
.row { display: flex; gap: 8px; line-height: 1.8; }
|
||
.label { color: #666; }
|
||
.value { color: #333; }
|
||
.value.mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; word-break: break-all; }
|
||
.value.strong { font-weight: 700; color: #e74c3c; }
|
||
.actions { margin-top: 12px; }
|
||
</style>
|
||
|
||
|