|
|
|
@ -11,105 +11,162 @@ |
|
|
|
<uni-icons type="camera" size="22" color="#222" style="margin-left: 12rpx;" /> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="main-content safe-area-inset-bottom" :style="{ marginTop: navBarTotalHeight + 'px' }"> |
|
|
|
<view v-if="(status === 'problem' || status === 'unrecyclable') && item" class="card card-problem"> |
|
|
|
<view class="card-header"> |
|
|
|
<view class="dot dot-orange"></view> |
|
|
|
<text class="card-title card-title-orange">质检有问题不可回收</text> |
|
|
|
</view> |
|
|
|
<view class="card-desc card-desc-orange"> |
|
|
|
感谢您参与旧衣回收活动,支持环保事业。\n我们已收到您的旧衣,并完成质检。经平台专业质检员严格查验,发现商品存在质量问题。 |
|
|
|
<scroll-view scroll-y class="main-content safe-area-inset-bottom" :style="{ marginTop: navBarTotalHeight + 'px' }"> |
|
|
|
<!-- 质检合格列表 --> |
|
|
|
<view v-if="qualifiedList.length > 0" class="section"> |
|
|
|
<view class="section-title"> |
|
|
|
<view class="dot dot-green"></view> |
|
|
|
<text class="title-text">质检合格</text> |
|
|
|
</view> |
|
|
|
<view class="timeline"> |
|
|
|
<view class="timeline-item"> |
|
|
|
<view class="timeline-dot"></view> |
|
|
|
<view class="timeline-content"> |
|
|
|
<view class="timeline-title-row"> |
|
|
|
<text class="timeline-title">质检说明</text> |
|
|
|
<text class="timeline-time">{{ item.testingTime }}</text> |
|
|
|
</view> |
|
|
|
<view v-for="(desc, idx) in problemDescArr.length ? problemDescArr : [item.problemDesc]" :key="idx" |
|
|
|
class="problem-block"> |
|
|
|
<view class="problem-index">{{ (idx + 1).toString().padStart(2, '0') }} / |
|
|
|
{{ problemDescArr.length.toString().padStart(2, '0') }}</view> |
|
|
|
<view class="problem-title">{{ desc || '质量问题' }}</view> |
|
|
|
<view class="problem-divider"></view> |
|
|
|
<view class="problem-label">质量问题实拍</view> |
|
|
|
<view class="problem-images"> |
|
|
|
<view v-for="(img, i) in imagesArr" :key="i" class="img-lock-wrap" |
|
|
|
@tap="isSelf && previewImage(img, i)"> |
|
|
|
<image :src="img" class="problem-img" mode="aspectFill" /> |
|
|
|
<view v-if="!isSelf" class="img-lock-mask"> |
|
|
|
<image src="/static/lock.png" class="lock-icon" /> |
|
|
|
<view class="lock-tip">为保护用户隐私,衣物照片仅本人可见,您无权限查看</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view v-for="(item, index) in qualifiedList" :key="'qualified-' + index" class="card card-qualified"> |
|
|
|
<view v-if="item.qualityLevel" class="quality-level-badge">{{ item.qualityLevel }}</view> |
|
|
|
<view class="card-header"> |
|
|
|
<view class="goods-info"> |
|
|
|
<image :src="item.img" class="goods-img" mode="aspectFit" /> |
|
|
|
<view class="goods-detail"> |
|
|
|
<text class="goods-name">{{ item.name }}</text> |
|
|
|
<text class="goods-desc">{{ item.desc }}</text> |
|
|
|
<text v-if="item.styleName" class="goods-style">款式:{{ item.styleName }}</text> |
|
|
|
<view class="goods-price-row"> |
|
|
|
<text class="goods-price" v-if="item.price">¥{{ (item.price / item.count).toFixed(2) }}/件</text> |
|
|
|
<text class="goods-count">x{{ item.count }}</text> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="timeline-item"> |
|
|
|
<view class="timeline-dot gray"></view> |
|
|
|
<view class="timeline-content"> |
|
|
|
<view class="timeline-title-row"> |
|
|
|
<text class="timeline-title">开始查验质检</text> |
|
|
|
<text class="timeline-time">{{ item.testingTime }}</text> |
|
|
|
</view> |
|
|
|
<view class="timeline-desc"> |
|
|
|
感谢您参与旧衣回收活动,支持环保事业。\n我们已收到您的旧衣,正在进行逐件查验。 |
|
|
|
<view class="timeline"> |
|
|
|
<view class="timeline-item"> |
|
|
|
<view class="timeline-dot"></view> |
|
|
|
<view class="timeline-content"> |
|
|
|
<view class="timeline-title-row"> |
|
|
|
<text class="timeline-title">质检说明</text> |
|
|
|
<text class="timeline-time">{{ item.testingTime }}</text> |
|
|
|
</view> |
|
|
|
<view class="problem-block"> |
|
|
|
<view class="problem-title">质检图片</view> |
|
|
|
<view class="problem-divider"></view> |
|
|
|
<view class="problem-images" v-if="item.imagesArr && item.imagesArr.length > 0"> |
|
|
|
<view v-for="(img, i) in item.imagesArr" :key="i" class="img-lock-wrap" |
|
|
|
@tap="isSelf && previewImage(img, i)"> |
|
|
|
<image :src="img" class="problem-img" mode="aspectFill" /> |
|
|
|
<view v-if="!isSelf" class="img-lock-mask"> |
|
|
|
<image src="/static/lock.png" class="lock-icon" /> |
|
|
|
<view class="lock-tip">为保护用户隐私,衣物照片仅本人可见,您无权限查看</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view v-else class="no-images">暂无质检图片</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view v-else-if="status === 'qualified' && item" class="card card-qualified"> |
|
|
|
<view class="card-header"> |
|
|
|
<view class="dot dot-green"></view> |
|
|
|
<text class="card-title card-title-green">质检合格</text> |
|
|
|
</view> |
|
|
|
<view class="card-desc card-desc-green"> |
|
|
|
感谢您参与旧衣回收活动,支持环保事业。\n经平台专业质检员严格查验,商品合格。 |
|
|
|
|
|
|
|
<!-- 不可回收列表 --> |
|
|
|
<view v-if="unrecyclableList.length > 0" class="section"> |
|
|
|
<view class="section-title"> |
|
|
|
<view class="dot dot-orange"></view> |
|
|
|
<text class="title-text">不可回收</text> |
|
|
|
</view> |
|
|
|
<view class="timeline"> |
|
|
|
<view class="timeline-item"> |
|
|
|
<view class="timeline-dot"></view> |
|
|
|
<view class="timeline-content"> |
|
|
|
<view class="timeline-title-row"> |
|
|
|
<text class="timeline-title">质检说明</text> |
|
|
|
<text class="timeline-time">{{ item.testingTime }}</text> |
|
|
|
<view v-for="(item, index) in unrecyclableList" :key="'unrecyclable-' + index" class="card card-problem"> |
|
|
|
<view v-if="item.qualityLevel" class="quality-level-badge">{{ item.qualityLevel }}</view> |
|
|
|
<view class="card-header"> |
|
|
|
<view class="goods-info"> |
|
|
|
<image :src="item.img || bkhs_image" class="goods-img" mode="aspectFit" /> |
|
|
|
<view class="goods-detail"> |
|
|
|
<text class="goods-name">{{ item.name }}</text> |
|
|
|
<text class="goods-desc">{{ item.desc }}</text> |
|
|
|
<text v-if="item.styleName" class="goods-style">款式:{{ item.styleName }}</text> |
|
|
|
<view class="goods-price-row"> |
|
|
|
<text class="goods-price" v-if="item.price">¥{{ (item.price / item.count).toFixed(2) }}/件</text> |
|
|
|
<text class="goods-count">x{{ item.count }}</text> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="problem-block"> |
|
|
|
<view class="problem-index">01 / {{ imagesArr.length.toString().padStart(2, '0') }}</view> |
|
|
|
<view class="problem-title">质检图片</view> |
|
|
|
<view class="problem-divider"></view> |
|
|
|
<view class="problem-images"> |
|
|
|
<view v-for="(img, i) in imagesArr" :key="i" class="img-lock-wrap" |
|
|
|
@tap="isSelf && previewImage(img, i)"> |
|
|
|
<image :src="img" class="problem-img" mode="aspectFill" /> |
|
|
|
<view v-if="!isSelf" class="img-lock-mask"> |
|
|
|
<image src="/static/lock.png" class="lock-icon" /> |
|
|
|
<view class="lock-tip">为保护用户隐私,衣物照片仅本人可见,您无权限查看</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="timeline"> |
|
|
|
<view class="timeline-item"> |
|
|
|
<view class="timeline-dot"></view> |
|
|
|
<view class="timeline-content"> |
|
|
|
<view class="timeline-title-row"> |
|
|
|
<text class="timeline-title">质检说明</text> |
|
|
|
<text class="timeline-time">{{ item.testingTime }}</text> |
|
|
|
</view> |
|
|
|
<view class="problem-block"> |
|
|
|
<view class="problem-title">{{ item.problemDesc || '不可回收' }}</view> |
|
|
|
<view class="problem-divider"></view> |
|
|
|
<view class="problem-label">质检实拍</view> |
|
|
|
<view class="problem-images" v-if="item.imagesArr && item.imagesArr.length > 0"> |
|
|
|
<view v-for="(img, i) in item.imagesArr" :key="i" class="img-lock-wrap" |
|
|
|
@tap="isSelf && previewImage(img, i)"> |
|
|
|
<image :src="img" class="problem-img" mode="aspectFill" /> |
|
|
|
<view v-if="!isSelf" class="img-lock-mask"> |
|
|
|
<image src="/static/lock.png" class="lock-icon" /> |
|
|
|
<view class="lock-tip">为保护用户隐私,衣物照片仅本人可见,您无权限查看</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view v-else class="no-images">暂无质检图片</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="timeline-item"> |
|
|
|
<view class="timeline-dot gray"></view> |
|
|
|
<view class="timeline-content"> |
|
|
|
<view class="timeline-title-row"> |
|
|
|
<text class="timeline-title">开始查验质检</text> |
|
|
|
<text class="timeline-time">{{ item.testingTime }}</text> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
|
|
|
|
<!-- 质量问题列表 --> |
|
|
|
<view v-if="problemList.length > 0" class="section"> |
|
|
|
<view class="section-title"> |
|
|
|
<view class="dot dot-orange"></view> |
|
|
|
<text class="title-text">质量问题</text> |
|
|
|
</view> |
|
|
|
<view v-for="(item, index) in problemList" :key="'problem-' + index" class="card card-problem"> |
|
|
|
<view v-if="item.qualityLevel" class="quality-level-badge">{{ item.qualityLevel }}</view> |
|
|
|
<view class="card-header"> |
|
|
|
<view class="goods-info"> |
|
|
|
<image :src="item.img || zlwt_image" class="goods-img" mode="aspectFit" /> |
|
|
|
<view class="goods-detail"> |
|
|
|
<text class="goods-name">{{ item.name }}</text> |
|
|
|
<text class="goods-desc">{{ item.desc }}</text> |
|
|
|
<text v-if="item.styleName" class="goods-style">款式:{{ item.styleName }}</text> |
|
|
|
<view class="goods-price-row"> |
|
|
|
<text class="goods-price" v-if="item.price">¥{{ (item.price / item.count).toFixed(2) }}/件</text> |
|
|
|
<text class="goods-count">x{{ item.count }}</text> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="timeline-desc"> |
|
|
|
感谢您参与旧衣回收活动,支持环保事业。\n我们已收到您的旧衣,正在进行逐件查验。 |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view class="timeline"> |
|
|
|
<view class="timeline-item"> |
|
|
|
<view class="timeline-dot"></view> |
|
|
|
<view class="timeline-content"> |
|
|
|
<view class="timeline-title-row"> |
|
|
|
<text class="timeline-title">质检说明</text> |
|
|
|
<text class="timeline-time">{{ item.testingTime }}</text> |
|
|
|
</view> |
|
|
|
<view class="problem-block"> |
|
|
|
<view class="problem-title">{{ item.problemDesc || '质量问题' }}</view> |
|
|
|
<view class="problem-divider"></view> |
|
|
|
<view class="problem-label">质量问题实拍</view> |
|
|
|
<view class="problem-images" v-if="item.imagesArr && item.imagesArr.length > 0"> |
|
|
|
<view v-for="(img, i) in item.imagesArr" :key="i" class="img-lock-wrap" |
|
|
|
@tap="isSelf && previewImage(img, i)"> |
|
|
|
<image :src="img" class="problem-img" mode="aspectFill" /> |
|
|
|
<view v-if="!isSelf" class="img-lock-mask"> |
|
|
|
<image src="/static/lock.png" class="lock-icon" /> |
|
|
|
<view class="lock-tip">为保护用户隐私,衣物照片仅本人可见,您无权限查看</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
<view v-else class="no-images">暂无质检图片</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</view> |
|
|
|
</scroll-view> |
|
|
|
</view> |
|
|
|
</template> |
|
|
|
|
|
|
|
@ -117,58 +174,143 @@ |
|
|
|
export default { |
|
|
|
data() { |
|
|
|
return { |
|
|
|
status: 'problem', // 'problem' or 'qualified' or 'unrecyclable' |
|
|
|
statusBarHeight: 0, |
|
|
|
navBarHeight: 44, |
|
|
|
navBarTotalHeight: 44, |
|
|
|
item: null, |
|
|
|
problemDescArr: [], |
|
|
|
imagesArr: [], |
|
|
|
orderId: '', |
|
|
|
qualifiedList: [], |
|
|
|
problemList: [], |
|
|
|
unrecyclableList: [], |
|
|
|
isSelf: true, |
|
|
|
} |
|
|
|
}, |
|
|
|
computed: { |
|
|
|
bkhs_image() {//不可回收图片 |
|
|
|
const item = getApp().globalData.configData.find(i => i.keyName === 'bkhs_image') |
|
|
|
return item ? item.keyContent : '' |
|
|
|
}, |
|
|
|
zlwt_image() {//质量问题图片 |
|
|
|
const item = getApp().globalData.configData.find(i => i.keyName === 'zlwt_image') |
|
|
|
return item ? item.keyContent : '' |
|
|
|
}, |
|
|
|
}, |
|
|
|
onLoad(options) { |
|
|
|
// 适配顶部安全区 |
|
|
|
const sysInfo = uni.getSystemInfoSync() |
|
|
|
this.statusBarHeight = sysInfo.statusBarHeight |
|
|
|
this.navBarHeight = 44 |
|
|
|
this.navBarTotalHeight = this.statusBarHeight + this.navBarHeight |
|
|
|
if (options && options.status) { |
|
|
|
this.status = options.status |
|
|
|
|
|
|
|
// 获取订单ID |
|
|
|
if (options && options.orderId) { |
|
|
|
this.orderId = options.orderId |
|
|
|
this.fetchOrderDetail() |
|
|
|
} |
|
|
|
if (options.data) { |
|
|
|
this.item = JSON.parse(decodeURIComponent(options.data)) |
|
|
|
// 获取当前登录用户id |
|
|
|
const myUserId = uni.getStorageSync('userInfo')?.id |
|
|
|
const orderUserId = this.item.userId |
|
|
|
this.isSelf = myUserId && orderUserId && String(myUserId) === String(orderUserId) |
|
|
|
if (options.isSelf) { |
|
|
|
console.log(options.isSelf, 'options.isSelf管理员') |
|
|
|
this.isSelf = true |
|
|
|
} |
|
|
|
// 处理图片数组 |
|
|
|
if (this.item.testingImages) { |
|
|
|
console.log(this.item.testingImages, 'this.item.testingImages') |
|
|
|
this.imagesArr = String(this.item.testingImages).split(',').filter(i => i) |
|
|
|
} else { |
|
|
|
this.imagesArr = [] |
|
|
|
} |
|
|
|
// 处理问题描述数组 |
|
|
|
if (this.item.problemDesc) { |
|
|
|
this.problemDescArr = String(this.item.problemDesc).split(',').filter(i => i) |
|
|
|
} else { |
|
|
|
this.problemDescArr = [] |
|
|
|
} |
|
|
|
|
|
|
|
// 判断是否为本人或管理员 |
|
|
|
if (options.isSelf) { |
|
|
|
this.isSelf = true |
|
|
|
} |
|
|
|
}, |
|
|
|
methods: { |
|
|
|
async fetchOrderDetail() { |
|
|
|
this.$api && this.$api('getOrderDetail', { |
|
|
|
orderId: this.orderId |
|
|
|
}, res => { |
|
|
|
if (res && res.code === 200 && res.result) { |
|
|
|
this.parseOrderData(res.result) |
|
|
|
} |
|
|
|
}) |
|
|
|
}, |
|
|
|
|
|
|
|
parseOrderData(orderData) { |
|
|
|
this.qualifiedList = [] |
|
|
|
this.problemList = [] |
|
|
|
this.unrecyclableList = [] |
|
|
|
|
|
|
|
if (orderData.orderCheckList && orderData.orderCheckList.length > 0) { |
|
|
|
orderData.orderCheckList.forEach(item => { |
|
|
|
// 合格商品 |
|
|
|
if (Number(item.qualifiedNum) > 0) { |
|
|
|
const imagesArr = item.commonOrderList && item.commonOrderList[0] && item.commonOrderList[0].testingImages |
|
|
|
? item.commonOrderList[0].testingImages.split(',').filter(img => img.trim() !== '') |
|
|
|
: [] |
|
|
|
|
|
|
|
this.qualifiedList.push({ |
|
|
|
img: item.image || '/static/default-goods.png', |
|
|
|
name: item.title || '未知品类', |
|
|
|
desc: item.pinName ? `${item.pinName}` : '', |
|
|
|
styleName: item.styleName || '', |
|
|
|
price: item.price || 0, |
|
|
|
count: item.qualifiedNum, |
|
|
|
qualityLevel: item.qualityLevel || '', |
|
|
|
testingTime: item.commonOrderList && item.commonOrderList[0] && item.commonOrderList[0].testingTime || '', |
|
|
|
imagesArr: imagesArr |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
// 质量问题和不可回收 |
|
|
|
if (Array.isArray(item.commonOrderList)) { |
|
|
|
item.commonOrderList.forEach(sub => { |
|
|
|
const imagesArr = sub.testingImages ? sub.testingImages.split(',').filter(img => img.trim() !== '') : [] |
|
|
|
|
|
|
|
// 质量问题 |
|
|
|
if (sub.testingStatus == 1) { |
|
|
|
this.problemList.push({ |
|
|
|
img: item.image, |
|
|
|
name: item.title || '未知品类', |
|
|
|
desc: item.pinName ? `${item.pinName}` : '', |
|
|
|
styleName: item.styleName || '', |
|
|
|
price: (item.price || 0) / (item.noQualifiedNum || 1), |
|
|
|
count: sub.num || 1, |
|
|
|
qualityLevel: sub.qualityLevel || '', |
|
|
|
testingTime: sub.testingTime || '', |
|
|
|
problemDesc: sub.testingInstructions || '', |
|
|
|
imagesArr: imagesArr |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
// 不可回收 |
|
|
|
if (sub.testingStatus == 2) { |
|
|
|
this.unrecyclableList.push({ |
|
|
|
img: item.image, |
|
|
|
name: item.title || '未知品类', |
|
|
|
desc: item.pinName ? `${item.pinName}` : '', |
|
|
|
styleName: item.styleName || '', |
|
|
|
price: (item.price || 0) / (item.unrecyclable || 1), |
|
|
|
count: sub.num || 1, |
|
|
|
qualityLevel: sub.qualityLevel || '', |
|
|
|
testingTime: sub.testingTime || '', |
|
|
|
problemDesc: sub.testingInstructions || '', |
|
|
|
imagesArr: imagesArr |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}) |
|
|
|
} |
|
|
|
}, |
|
|
|
|
|
|
|
navigateBack() { |
|
|
|
uni.navigateBack() |
|
|
|
}, |
|
|
|
|
|
|
|
previewImage(img, i) { |
|
|
|
// 获取当前点击图片所在的列表 |
|
|
|
let allImages = [] |
|
|
|
this.qualifiedList.forEach(item => { |
|
|
|
if (item.imagesArr) allImages = allImages.concat(item.imagesArr) |
|
|
|
}) |
|
|
|
this.problemList.forEach(item => { |
|
|
|
if (item.imagesArr) allImages = allImages.concat(item.imagesArr) |
|
|
|
}) |
|
|
|
this.unrecyclableList.forEach(item => { |
|
|
|
if (item.imagesArr) allImages = allImages.concat(item.imagesArr) |
|
|
|
}) |
|
|
|
|
|
|
|
uni.previewImage({ |
|
|
|
current: img, |
|
|
|
urls: this.imagesArr |
|
|
|
urls: allImages.length > 0 ? allImages : [img] |
|
|
|
}) |
|
|
|
} |
|
|
|
} |
|
|
|
@ -221,15 +363,94 @@ export default { |
|
|
|
} |
|
|
|
|
|
|
|
.main-content { |
|
|
|
padding: 32rpx 0 0 0; |
|
|
|
padding: 32rpx 24rpx 0 24rpx; |
|
|
|
width: 100%; |
|
|
|
max-width: 750rpx; |
|
|
|
margin: 0 auto; |
|
|
|
box-sizing: border-box; |
|
|
|
height: calc(100vh - var(--nav-bar-height)); |
|
|
|
} |
|
|
|
|
|
|
|
.section { |
|
|
|
margin-bottom: 40rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.section-title { |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
align-items: center; |
|
|
|
overflow: hidden; |
|
|
|
margin-bottom: 24rpx; |
|
|
|
padding: 0 16rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.title-text { |
|
|
|
font-size: 32rpx; |
|
|
|
font-weight: bold; |
|
|
|
color: #222; |
|
|
|
} |
|
|
|
|
|
|
|
.goods-info { |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
margin-bottom: 16rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.goods-img { |
|
|
|
width: 80rpx; |
|
|
|
height: 80rpx; |
|
|
|
border-radius: 16rpx; |
|
|
|
margin-right: 20rpx; |
|
|
|
background: #f5f5f5; |
|
|
|
} |
|
|
|
|
|
|
|
.goods-detail { |
|
|
|
flex: 1; |
|
|
|
display: flex; |
|
|
|
flex-direction: column; |
|
|
|
} |
|
|
|
|
|
|
|
.goods-name { |
|
|
|
font-size: 28rpx; |
|
|
|
font-weight: bold; |
|
|
|
color: #222; |
|
|
|
margin-bottom: 4rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.goods-desc { |
|
|
|
font-size: 24rpx; |
|
|
|
color: #999; |
|
|
|
margin-bottom: 4rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.goods-style { |
|
|
|
font-size: 24rpx; |
|
|
|
color: #666; |
|
|
|
margin-bottom: 4rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.goods-price-row { |
|
|
|
display: flex; |
|
|
|
align-items: baseline; |
|
|
|
justify-content: space-between; |
|
|
|
} |
|
|
|
|
|
|
|
.goods-price { |
|
|
|
font-size: 24rpx; |
|
|
|
color: #ff6600; |
|
|
|
font-weight: bold; |
|
|
|
} |
|
|
|
|
|
|
|
.goods-count { |
|
|
|
font-size: 24rpx; |
|
|
|
color: #666; |
|
|
|
} |
|
|
|
|
|
|
|
.no-images { |
|
|
|
color: #999; |
|
|
|
font-size: 24rpx; |
|
|
|
text-align: center; |
|
|
|
padding: 20rpx; |
|
|
|
background: #f8f8f8; |
|
|
|
border-radius: 12rpx; |
|
|
|
} |
|
|
|
|
|
|
|
.safe-area-inset-bottom { |
|
|
|
@ -244,11 +465,29 @@ export default { |
|
|
|
box-shadow: 0 4rpx 24rpx rgba(60, 167, 250, 0.08); |
|
|
|
background: #fff; |
|
|
|
max-width: 700rpx; |
|
|
|
width: 100%; |
|
|
|
width: calc(100% - 30rpx); |
|
|
|
box-sizing: border-box; |
|
|
|
position: relative; |
|
|
|
} |
|
|
|
|
|
|
|
.quality-level-badge { |
|
|
|
position: absolute; |
|
|
|
top: 16rpx; |
|
|
|
right: 16rpx; |
|
|
|
width: 48rpx; |
|
|
|
height: 48rpx; |
|
|
|
border-radius: 50%; |
|
|
|
background: #ffb400; |
|
|
|
color: #fff; |
|
|
|
font-size: 24rpx; |
|
|
|
font-weight: bold; |
|
|
|
display: flex; |
|
|
|
align-items: center; |
|
|
|
justify-content: center; |
|
|
|
z-index: 10; |
|
|
|
box-shadow: 0 2rpx 8rpx rgba(255, 180, 0, 0.3); |
|
|
|
} |
|
|
|
|
|
|
|
.card-problem { |
|
|
|
background: linear-gradient(180deg, #fff7e6 0%, #fff 40%); |
|
|
|
} |
|
|
|
|