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) {