From 1a10e696d70ef7efe91dcbf0d0f6550bf6a91059 Mon Sep 17 00:00:00 2001
From: hly <2783385703@qq.com>
Date: Fri, 29 Aug 2025 10:35:09 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E8=B4=A8=E6=A3=80):=20=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?=E5=95=86=E5=93=81=E5=92=8C=E6=AC=BE=E5=BC=8F=E4=BB=B7=E6=A0=BC?=
=?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=B1=95=E7=A4=BA=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 在质检页面和处理结果页面添加商品和款式价格信息的展示
- 修改品牌商品数量增加逻辑,每次加一都重新选择品牌款式
- 优化样式显示,将px单位转换为rpx以适应不同屏幕
---
pages/manager/inspect-result.vue | 281 +++++++++++++++++++++++----------------
pages/manager/inspect.vue | 65 +++++----
2 files changed, 194 insertions(+), 152 deletions(-)
diff --git a/pages/manager/inspect-result.vue b/pages/manager/inspect-result.vue
index f07c7c9..a21fb3c 100644
--- a/pages/manager/inspect-result.vue
+++ b/pages/manager/inspect-result.vue
@@ -19,6 +19,7 @@
{{ getGoodsName(item.shopId) }}
{{ getBrandStyleInfo(item) }}
+ {{ getStylePriceInfo(item) }}
x{{ item.count }}
@@ -264,6 +265,12 @@ export default {
styleId: item.styleId || '',
uniqueKey: uniqueKey,
qualityLevel: item.qualityLevel || '', // 质检级别
+ // 添加款式价格信息
+ styleMinPrice: item.styleMinPrice || 0,
+ styleMaxPrice: item.styleMaxPrice || 0,
+ // 添加商品本身的价格信息
+ productMinPrice: item.productMinPrice || 0,
+ productMaxPrice: item.productMaxPrice || 0,
originalItem: item, // 保存原始数据引用
items: item.commonOrderList ? [...item.commonOrderList] : [{
testingInstructions: '',
@@ -331,19 +338,19 @@ export default {
}
}
// 检查不合格产品金额
- for (const group of this.unqualifiedGroups) {
- if (!group.total || group.total === '' || parseFloat(group.total) <= 0) {
- uni.showToast({ title: '请填写不合格产品金额', icon: 'none' })
- return
- }
- }
- // 检查不可回收产品金额
- for (const item of this.unrecyclableList) {
- if (!item.total || item.total === '' || parseFloat(item.total) <= 0) {
- uni.showToast({ title: '请填写不可回收产品金额', icon: 'none' })
- return
- }
- }
+ // for (const group of this.unqualifiedGroups) {
+ // if (!group.total || group.total === '' || parseFloat(group.total) <= 0) {
+ // uni.showToast({ title: '请填写不合格产品金额', icon: 'none' })
+ // return
+ // }
+ // }
+ // // 检查不可回收产品金额
+ // for (const item of this.unrecyclableList) {
+ // if (!item.total || item.total === '' || parseFloat(item.total) <= 0) {
+ // uni.showToast({ title: '请填写不可回收产品金额', icon: 'none' })
+ // return
+ // }
+ // }
// 校验理由必填性
// 1. 合格产品理由可选填
@@ -687,6 +694,34 @@ export default {
}
},
+ getStylePriceInfo(item) {
+ // 优先显示款式价格信息
+ if (item.styleMinPrice && item.styleMaxPrice) {
+ const minPrice = parseFloat(item.styleMinPrice)
+ const maxPrice = parseFloat(item.styleMaxPrice)
+
+ if (minPrice === maxPrice) {
+ return `款式价格:¥${minPrice}`
+ } else {
+ return `款式价格:¥${minPrice}-${maxPrice}`
+ }
+ }
+
+ // 如果没有款式价格,显示商品本身的价格
+ if (item.productMinPrice && item.productMaxPrice) {
+ const minPrice = parseFloat(item.productMinPrice)
+ const maxPrice = parseFloat(item.productMaxPrice)
+
+ if (minPrice === maxPrice) {
+ return `商品价格:¥${minPrice}`
+ } else {
+ return `商品价格:¥${minPrice}-${maxPrice}`
+ }
+ }
+
+ return ''
+ },
+
selectQualityLevel(level) {
// 设置当前选择的质检级别
this.currentQualityLevel = level
@@ -807,46 +842,46 @@ export default {
display: flex;
flex-direction: column;
background: none;
- padding-bottom: 120px;
+ padding-bottom: 240rpx;
}
.result-card {
background: #fff;
- border-radius: 24px;
- box-shadow: 0 4px 24px rgba(0, 0, 0, 0.06);
- margin: 0 24px 24px 24px;
- padding: 24px 24px 0 24px;
+ border-radius: 48rpx;
+ box-shadow: 0 8rpx 48rpx rgba(0, 0, 0, 0.06);
+ margin: 0 24rpx 24rpx 24rpx;
+ padding: 48rpx 48rpx 0 48rpx;
}
.card-title {
- font-size: 16px;
+ font-size: 32rpx;
font-weight: bold;
color: #222;
- margin-bottom: 18px;
+ margin-bottom: 36rpx;
}
.card-title-row {
display: flex;
align-items: center;
justify-content: space-between;
- margin-bottom: 18px;
+ margin-bottom: 36rpx;
}
.status-tag {
background: #fff7e6;
color: #ffb400;
- font-size: 12px;
- border-radius: 12px;
- padding: 2px 26rpx;
+ font-size: 24rpx;
+ border-radius: 24rpx;
+ padding: 4rpx 26rpx;
font-weight: 400;
- height: 22px;
+ height: 44rpx;
display: flex;
align-items: center;
}
.result-row,
.result-group {
- margin-bottom: 18px;
+ margin-bottom: 36rpx;
}
.row-main {
@@ -859,18 +894,26 @@ export default {
margin-right: 8px;
.goods-name {
- font-size: 26rpx;
+ font-size: 32rpx;
font-weight: bold;
- color: #222;
- line-height: 1.2;
+ color: #333;
+ line-height: 1.3;
}
.goods-brand {
- font-size: 22rpx;
- color: #999;
+ font-size: 26rpx;
+ color: #666;
font-weight: normal;
- line-height: 1.2;
- margin-top: 2px;
+ line-height: 1.3;
+ margin-top: 4rpx;
+ }
+
+ .goods-style-price {
+ font-size: 26rpx;
+ color: #ff6b35;
+ font-weight: 600;
+ line-height: 1.3;
+ margin-top: 4rpx;
}
}
@@ -898,26 +941,26 @@ export default {
.price-input-row {
display: flex;
align-items: center;
- margin-top: 12px;
- margin-bottom: 8px;
+ margin-top: 24rpx;
+ margin-bottom: 16rpx;
.price-label {
font-size: 26rpx;
color: #888;
- min-width: 80px;
+ min-width: 160rpx;
flex-shrink: 0;
}
.price-input {
flex: 1;
- height: 40px;
- border-radius: 12px;
+ height: 80rpx;
+ border-radius: 24rpx;
background: #f6f6f6;
border: none;
- font-size: 16px;
+ font-size: 32rpx;
color: #222;
- padding: 0 16px;
- margin-left: 12px;
+ padding: 0 32rpx;
+ margin-left: 24rpx;
font-weight: bold;
}
}
@@ -927,37 +970,41 @@ export default {
.row-reason {
display: flex;
align-items: center;
- margin-top: 8px;
+ margin-top: 16rpx;
.reason-label {
- font-size: 13px;
+ font-size: 26rpx;
color: #bbb;
- min-width: 80px;
+ min-width: 160rpx;
+ max-width: 240rpx;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
}
.reason-input {
flex: 1;
- height: 36px;
- border-radius: 12px;
+ height: 72rpx;
+ border-radius: 24rpx;
background: #f6f6f6;
border: none;
font-size: 26rpx;
color: #222;
- padding-left: 12px;
- margin-left: 8px;
+ padding-left: 24rpx;
+ margin-left: 16rpx;
}
.reason-select {
flex: 1;
display: flex;
align-items: center;
- height: 36px;
- border-radius: 12px;
+ height: 72rpx;
+ border-radius: 24rpx;
background: #f6f6f6;
font-size: 26rpx;
color: #bbb;
- padding-left: 12px;
- margin-left: 8px;
+ padding-left: 24rpx;
+ margin-left: 16rpx;
justify-content: flex-end;
}
@@ -974,32 +1021,30 @@ export default {
.info-card {
background: #fff;
- border-radius: 24px;
- box-shadow: 0 4px 24px rgba(0, 0, 0, 0.06);
- margin: 0 24px 24px 24px;
- padding: 24px 24px 0 24px;
+ border-radius: 48rpx;
+ box-shadow: 0 8rpx 48rpx rgba(0, 0, 0, 0.06);
}
.info-row {
display: flex;
align-items: center;
- margin-bottom: 16px;
+ margin-bottom: 32rpx;
.info-label {
- font-size: 13px;
+ font-size: 26rpx;
color: #bbb;
- min-width: 80px;
+ min-width: 160rpx;
}
.info-value {
- font-size: 13px;
+ font-size: 26rpx;
color: #222;
- margin-left: 8px;
+ margin-left: 16rpx;
}
.copy-btn {
color: #ffb400;
- margin-left: 8px;
+ margin-left: 16rpx;
}
}
@@ -1010,34 +1055,34 @@ export default {
bottom: 0;
background: #fff;
display: flex;
- gap: 16px;
- padding: 12px 16px 24px 16px;
+ gap: 32rpx;
+ padding: 24rpx 32rpx 48rpx 32rpx;
z-index: 101;
.btn-outline {
flex: 1;
- height: 40px;
- border-radius: 16px;
- border: 1px solid #ffe09a;
+ height: 80rpx;
+ border-radius: 32rpx;
+ border: 2rpx solid #ffe09a;
color: #ffb400;
background: #fff0d2;
- font-size: 15px;
+ font-size: 30rpx;
font-weight: 500;
box-shadow: none;
- padding: 0 18px;
+ padding: 0 36rpx;
}
.btn-main {
flex: 1;
- height: 40px;
- border-radius: 16px;
+ height: 80rpx;
+ border-radius: 32rpx;
background: linear-gradient(90deg, #ffd01e 0%, #ffac04 100%);
color: #fff;
border: none;
- font-size: 15px;
+ font-size: 30rpx;
font-weight: 500;
box-shadow: none;
- padding: 0 18px;
+ padding: 0 36rpx;
}
}
@@ -1051,7 +1096,7 @@ export default {
.reason-popup {
background: #fff;
- border-radius: 24px 24px 0 0;
+ border-radius: 48rpx 48rpx 0 0;
padding: 0;
height: 75vh;
position: relative;
@@ -1061,54 +1106,54 @@ export default {
display: flex;
align-items: center;
justify-content: center;
- height: 60px;
- border-bottom: 1px solid #f0f0f0;
+ height: 120rpx;
+ border-bottom: 2rpx solid #f0f0f0;
position: relative;
.popup-close {
position: absolute;
- left: 20px;
+ left: 40rpx;
color: #666;
- font-size: 16px;
+ font-size: 32rpx;
}
.popup-title {
- font-size: 18px;
+ font-size: 36rpx;
font-weight: 600;
color: #222;
}
}
.popup-content {
- height: calc(75vh - 60px - 82px);
+ height: calc(75vh - 120rpx - 164rpx);
overflow-y: auto;
}
.popup-section {
- padding: 0 20px 24px 20px;
+ padding: 0 40rpx 48rpx 40rpx;
&:first-child {
- padding-top: 24px;
+ padding-top: 48rpx;
}
.section-label {
- font-size: 16px;
+ font-size: 32rpx;
color: #222;
- margin-bottom: 16px;
+ margin-bottom: 32rpx;
display: block;
font-weight: 500;
}
.level-options {
display: flex;
- gap: 12px;
- margin-bottom: 16px;
+ gap: 24rpx;
+ margin-bottom: 32rpx;
.level-option {
- width: 40px;
- height: 40px;
- border-radius: 8px;
- border: 2px solid #ddd;
+ width: 80rpx;
+ height: 80rpx;
+ border-radius: 16rpx;
+ border: 4rpx solid #ddd;
display: flex;
align-items: center;
justify-content: center;
@@ -1127,7 +1172,7 @@ export default {
}
.level-text {
- font-size: 16px;
+ font-size: 32rpx;
color: #666;
font-weight: 500;
}
@@ -1136,11 +1181,11 @@ export default {
.custom-reason-input {
width: 100%;
- min-height: 80px;
- padding: 12px;
- border: 1px solid #e0e0e0;
- border-radius: 8px;
- font-size: 14px;
+ min-height: 160rpx;
+ padding: 24rpx;
+ border: 2rpx solid #e0e0e0;
+ border-radius: 16rpx;
+ font-size: 28rpx;
color: #222;
background: #fff;
resize: none;
@@ -1160,12 +1205,12 @@ export default {
display: flex;
flex-wrap: wrap;
gap: 20rpx;
- margin-bottom: 32px;
+ margin-bottom: 64rpx;
.img-item {
width: 150rpx;
height: 150rpx;
- border-radius: 12px;
+ border-radius: 24rpx;
background: #f8f8f8;
position: relative;
@@ -1178,8 +1223,8 @@ export default {
.img-del {
position: absolute;
- top: -6px;
- right: -6px;
+ top: -12rpx;
+ right: -12rpx;
width: 48rpx;
height: 48rpx;
background: rgba(0, 0, 0, 0.6);
@@ -1187,7 +1232,7 @@ export default {
border-radius: 50%;
text-align: center;
line-height: 48rpx;
- font-size: 16px;
+ font-size: 32rpx;
font-weight: bold;
}
@@ -1196,7 +1241,7 @@ export default {
align-items: center;
justify-content: center;
background: #f8f8f8;
- border: 2px dashed #ddd;
+ border: 4rpx dashed #ddd;
color: #bbb;
}
}
@@ -1205,19 +1250,19 @@ export default {
.reason-row {
display: flex;
align-items: center;
- padding: 16px 0;
- border-bottom: 1px solid #f0f0f0;
+ padding: 32rpx 0;
+ border-bottom: 2rpx solid #f0f0f0;
&:last-child {
border-bottom: none;
}
.checkbox {
- width: 20px;
- height: 20px;
- border-radius: 4px;
- border: 2px solid #ddd;
- margin-right: 12px;
+ width: 40rpx;
+ height: 40rpx;
+ border-radius: 8rpx;
+ border: 4rpx solid #ddd;
+ margin-right: 24rpx;
background: #fff;
position: relative;
@@ -1232,14 +1277,14 @@ export default {
left: 50%;
transform: translate(-50%, -50%);
color: #fff;
- font-size: 12px;
+ font-size: 24rpx;
font-weight: bold;
}
}
}
.reason-text {
- font-size: 16px;
+ font-size: 32rpx;
color: #222;
line-height: 1.4;
}
@@ -1248,20 +1293,20 @@ export default {
.popup-save-btn {
position: fixed;
- bottom: 34px;
- left: 20px;
- right: 20px;
- height: 48px;
- border-radius: 24px;
+ bottom: 68rpx;
+ left: 40rpx;
+ right: 40rpx;
+ height: 96rpx;
+ border-radius: 48rpx;
background: linear-gradient(90deg, #ffd01e 0%, #ffac04 100%);
color: #fff;
- font-size: 18px;
+ font-size: 36rpx;
font-weight: 600;
border: none;
display: flex;
align-items: center;
justify-content: center;
- box-shadow: 0 4px 12px rgba(255, 172, 4, 0.3);
+ box-shadow: 0 8rpx 24rpx rgba(255, 172, 4, 0.3);
}
}
\ No newline at end of file
diff --git a/pages/manager/inspect.vue b/pages/manager/inspect.vue
index 4eaa112..1151789 100644
--- a/pages/manager/inspect.vue
+++ b/pages/manager/inspect.vue
@@ -377,6 +377,9 @@ export default {
brandImage: brandInfo.logo,
styleImage: styleInfo.image,
uniqueKey: uniqueKey,
+ // 添加款式价格信息
+ styleMinPrice: styleInfo.minPrice || 0,
+ styleMaxPrice: styleInfo.maxPrice || styleInfo.minPrice || 0,
commonOrderList: [{
testingInstructions: '',
testingImages: '',
@@ -387,8 +390,16 @@ export default {
}
})
} else {
- // 没有品牌款式数据,保留原始对象
- processedList.push(inspectItem)
+ // 没有品牌款式数据,保留原始对象并添加商品价格信息
+ const productId = this.getProductIdFromShopId(inspectItem.shopId)
+ const productInfo = this.findProductInfoById(productId)
+ const enhancedInspectItem = {
+ ...inspectItem,
+ // 添加商品本身的价格信息
+ productMinPrice: productInfo ? productInfo.price || 0 : 0,
+ productMaxPrice: productInfo ? productInfo.maxPrice || productInfo.price || 0 : 0
+ }
+ processedList.push(enhancedInspectItem)
}
})
@@ -459,6 +470,19 @@ export default {
return shopId
},
+ // 根据商品ID查找商品信息
+ findProductInfoById(productId) {
+ // 从所有分类商品中查找
+ for (const categoryId in this.allProducts) {
+ const categoryProducts = this.allProducts[categoryId]
+ const product = categoryProducts.find(p => p.id == productId)
+ if (product) {
+ return product
+ }
+ }
+ return null
+ },
+
validateInspectData() {
if (!this.inspectResult.list || this.inspectResult.list.length === 0) {
return {
@@ -577,30 +601,13 @@ export default {
}
}
- // 品牌商品且数量为0且加一时,打开品牌选择
- if (item.isPin === 'Y' && (this.getItemTotalQuantity(item) === 0) && delta > 0) {
+ // 品牌商品且加一时,每次都重新选择品牌款式
+ if (item.isPin === 'Y' && delta > 0) {
this.pendingBrandIndex = index
this.$refs.brandSelector.open(item.id)
return
}
- // 品牌商品且已有数量时,继续增加到现有品牌款式
- if (item.isPin === 'Y' && this.getItemTotalQuantity(item) > 0 && delta > 0) {
- // 如果只有一个品牌款式,直接增加
- if (item.brandStyleQuantities && Object.keys(item.brandStyleQuantities).length === 1) {
- const uniqueKey = Object.keys(item.brandStyleQuantities)[0]
- const currentQty = item.brandStyleQuantities[uniqueKey] || 0
- this.$set(item.brandStyleQuantities, uniqueKey, currentQty + delta)
- this.updateInspectResultFromBrandStyle(item)
- return
- } else {
- // 有多个品牌款式,打开品牌选择
- this.pendingBrandIndex = index
- this.$refs.brandSelector.open(item.id)
- return
- }
- }
-
// 无品牌商品,直接加减数量
if (item.isPin !== 'Y') {
let newQuantity = (item.quantity || 0) + delta
@@ -653,22 +660,12 @@ export default {
this.$set(item, 'brandStyleQuantities', {})
}
- // 清理当前品牌的所有款式数据
- const brandPrefix = `${data.brandInfo.id}_`
- Object.keys(item.brandStyleQuantities).forEach(key => {
- if (key.startsWith(brandPrefix)) {
- delete item.brandStyleQuantities[key]
- if (item.styleCache && item.styleCache[key]) {
- delete item.styleCache[key]
- }
- }
- })
-
- // 为每个选中的款式设置数量(只保存有数量的款式)
+ // 为每个选中的款式累加数量(不清理现有数据,而是累加)
data.selectedStyles.forEach(style => {
if (style.quantity > 0) {
const uniqueKey = `${data.brandInfo.id}_${style.id}`
- this.$set(item.brandStyleQuantities, uniqueKey, style.quantity)
+ const existingQty = item.brandStyleQuantities[uniqueKey] || 0
+ this.$set(item.brandStyleQuantities, uniqueKey, existingQty + style.quantity)
// 缓存款式信息用于后续显示
if (!item.styleCache) {