ry_app/package_a/back/backDetail.vue

144 lines
3.0 KiB
Vue

<template>
<view class="detail-container">
<block v-if="orderItems && orderItems.length > 0">
<view class="product-item" v-for="item in orderItems" :key="item.id">
<!-- 商品图片,点击放大 -->
<image class="product-img" :src="resolveImage(item.mainImage)" mode="aspectFill" @click="previewImage(item.mainImage)"></image>
<view class="product-info">
<!-- 商品名称 -->
<view class="product-name">{{ item.productName || '--' }}</view>
<!-- 商品条码 -->
<view class="product-code">条码:{{ item.productBarCode || '--' }}</view>
<view class="price-row">
<!-- 商品价格 -->
<text class="price">¥{{ item.subtotal || item.unitPrice || '0.00' }}</text>
<!-- 商品件数 -->
<text class="quantity">x {{ item.quantity || 1 }}</text>
</view>
</view>
</view>
</block>
<view class="empty-status" v-else>
<text>暂无商品信息</text>
</view>
</view>
</template>
<script>
import config from '@/config';
export default {
data() {
return {
orderItems: []
};
},
onLoad(options) {
if (options.items) {
try {
this.orderItems = JSON.parse(decodeURIComponent(options.items));
} catch (e) {
console.error('商品数据解析失败', e);
}
}
},
methods: {
// 补全图片路径,防止后台只返回相对路径
resolveImage(url) {
if (!url) return '/static/images/default.png';
if (url.startsWith('http')) return url;
return config.baseUrl + url;
},
// 点击图片放大查看
previewImage(url) {
if (!url) return;
const fullUrl = this.resolveImage(url);
uni.previewImage({
urls: [fullUrl],
current: fullUrl
});
}
}
};
</script>
<style scoped>
.detail-container {
min-height: 100vh;
background-color: #f5f5f5;
padding: 12px;
box-sizing: border-box;
}
.product-item {
display: flex;
background-color: #fff;
border-radius: 8px;
padding: 12px;
margin-bottom: 12px;
box-shadow: 0 2px 6px rgba(0,0,0,0.04);
}
.product-img {
width: 80px;
height: 80px;
border-radius: 6px;
background-color: #f0f0f0;
margin-right: 12px;
flex-shrink: 0;
}
.product-info {
flex: 1;
display: flex;
flex-direction: column;
justify-content: space-between;
}
.product-name {
font-size: 15px;
color: #333;
font-weight: 500;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
.product-code {
font-size: 12px;
color: #999;
margin-top: 4px;
}
.price-row {
display: flex;
justify-content: space-between;
align-items: flex-end;
margin-top: 8px;
}
.price {
font-size: 16px;
color: #e62318;
font-weight: bold;
}
.quantity {
font-size: 13px;
color: #666;
}
.empty-status {
padding: 60px 0;
text-align: center;
color: #999;
font-size: 15px;
}
</style>