From 131a28347f2c3ce272f61fce425a6eea4fa5e51c Mon Sep 17 00:00:00 2001
From: shinnosuke <tantao@1hoper.com>
Date: 星期五, 18 九月 2026 15:01:10 +0800
Subject: [PATCH] 更新....
---
rencaika_merchant/pages/product-detail/product-detail.uvue | 34 ++++++++++++++++++++++++----------
1 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/rencaika_merchant/pages/product-detail/product-detail.uvue b/rencaika_merchant/pages/product-detail/product-detail.uvue
index e40e878..1a6f97b 100644
--- a/rencaika_merchant/pages/product-detail/product-detail.uvue
+++ b/rencaika_merchant/pages/product-detail/product-detail.uvue
@@ -55,7 +55,8 @@
</scroll-view>
<view v-if="loadState == 'success'" class="bottom-actions">
- <view class="offline-button" :class="submitting ? 'action-disabled' : ''" @tap="offlineProduct"><text>商品下架</text></view>
+ <!-- 按钮按商品当前状态取反:已下架显示「商品上架」,已上架显示「商品下架」。 -->
+ <view class="offline-button" :class="[productStatus == 'offline' ? 'is-online' : '', submitting ? 'action-disabled' : '']" @tap="toggleProductStatus"><text>{{productStatus == 'offline' ? '商品上架' : '商品下架'}}</text></view>
<view class="save-button" :class="submitting ? 'action-disabled' : ''" @tap="saveProduct"><text>{{submitting ? '保存中' : '保存'}}</text></view>
</view>
</view>
@@ -83,6 +84,8 @@
const amountError = ref('')
const coverError = ref('')
const initialSnapshot = ref('')
+ // 商品当前上下架状态:'online' / 'offline',决定底部按钮显示「商品下架」还是「商品上架」。
+ const productStatus = ref('')
const loadState = ref('loading')
const traceId = ref('')
const submitting = ref(false)
@@ -96,6 +99,7 @@
}
const applyDetail = (detail: MerchantProductDetail) => {
+ productStatus.value = detail.status
productName.value = detail.productName
productAmount.value = detail.salePrice.toFixed(2)
detailText.value = detail.detailText
@@ -254,13 +258,17 @@
})
}
- const offlineProduct = () => {
+ // 底部按钮按当前状态取反:已下架就上架,已上架就下架(后端 PATCH 支持 online/offline,
+ // 上架时后端会校验商品必须已审核通过)。
+ const toggleProductStatus = () => {
if (submitting.value) return
+ const goingOnline = productStatus.value == 'offline'
+ const nextStatus = goingOnline ? 'online' : 'offline'
uni.showModal({
- title: '商品下架',
- content: '确认下架当前商品吗?',
- confirmText: '确认下架',
- confirmColor: '#F25353',
+ title: goingOnline ? '商品上架' : '商品下架',
+ content: goingOnline ? '确认上架当前商品吗?' : '确认下架当前商品吗?',
+ confirmText: goingOnline ? '确认上架' : '确认下架',
+ confirmColor: goingOnline ? '#F07A2E' : '#F25353',
success: (result: any) => {
if (!result.confirm) return
submitting.value = true
@@ -268,16 +276,20 @@
submitting.value = false
initialSnapshot.value = buildSnapshot()
uni.removeStorageSync(getDraftStorageKey())
- uni.showToast({ title: '商品已下架', icon: 'success' })
+ uni.showToast({ title: goingOnline ? '商品已上架' : '商品已下架', icon: 'success' })
}
if (useDemoData) {
- updateDemoMerchantProductStatus(productId.value, 'offline')
+ const updated = updateDemoMerchantProductStatus(productId.value, nextStatus)
+ if (updated != null) productStatus.value = updated.status
finish()
return
}
- updateMerchantProductStatus(productId.value, 'offline', (_product: MerchantProductDetail, _traceId: string) => finish(), (error: any) => {
+ updateMerchantProductStatus(productId.value, nextStatus, (product: MerchantProductDetail, _traceId: string) => {
+ productStatus.value = product.status
+ finish()
+ }, (error: any) => {
submitting.value = false
- uni.showToast({ title: error.message != null ? error.message : '商品下架失败', icon: 'none' })
+ uni.showToast({ title: error.message != null ? error.message : (goingOnline ? '商品上架失败' : '商品下架失败'), icon: 'none' })
})
}
})
@@ -406,6 +418,8 @@
.bottom-actions { display: flex; height: 142rpx; padding: 20rpx 34rpx 28rpx; flex-direction: row; background-color: #FFFFFF; box-shadow: 0 -8rpx 24rpx rgba(41, 51, 67, 0.04); box-sizing: border-box; position: fixed; left: 0; right: 0; bottom: 0; z-index: 20; }
.offline-button, .save-button { display: flex; height: 84rpx; justify-content: center; align-items: center; border-radius: 44rpx; font-size: 29rpx; line-height: 40rpx; font-weight: 700; box-sizing: border-box; }
.offline-button { width: 218rpx; margin-right: 22rpx; border-width: 1rpx; border-style: solid; border-color: #FFB7B4; color: #F25353; background-color: #FFF6F5; }
+ /* 已下架时按钮是「商品上架」,用中性偏正向的橙色,和下架的红色区分开。 */
+ .offline-button.is-online { border-color: #FFC79A; color: #F07A2E; background-color: #FFF7EF; }
.save-button { flex: 1; color: #FFFFFF; background-image: linear-gradient(90deg, #FF8B1F 0%, #FF4A37 100%); box-shadow: 0 12rpx 22rpx rgba(255, 94, 47, 0.18); }
.input-placeholder { color: #B9BEC8; }
.input-invalid { border-color: #F0746D; background-color: #FFF9F8; }
--
Gitblit v1.7.1