|
|
@@ -22,6 +22,10 @@
|
|
|
<view class="inventory-section">
|
|
|
<view class="section-head">
|
|
|
<text class="section-title">商品库存清单</text>
|
|
|
+ <view class="order-toggle" v-if="orderNo" @click="showOrderOnly = !showOrderOnly">
|
|
|
+ <text class="toggle-label">仅看补货单</text>
|
|
|
+ <view class="toggle-switch" :class="{ on: showOrderOnly }"><view class="toggle-knob"></view></view>
|
|
|
+ </view>
|
|
|
</view>
|
|
|
|
|
|
<view class="empty-state" v-if="inventoryList.length === 0">
|
|
|
@@ -29,7 +33,7 @@
|
|
|
<text class="empty-text">暂无商品库存数据</text>
|
|
|
</view>
|
|
|
|
|
|
- <view class="inventory-card" v-for="(item, index) in inventoryList" :key="index">
|
|
|
+ <view class="inventory-card" v-for="(item, index) in inventoryList" :key="index" v-show="!showOrderOnly || isInOrder(item)">
|
|
|
<view class="item-top">
|
|
|
<image v-if="item.product_image" :src="item.product_image" class="item-img" mode="aspectFill" />
|
|
|
<view v-else class="item-img-placeholder"><text>无图</text></view>
|
|
|
@@ -90,6 +94,13 @@ const loading = ref(true);
|
|
|
const submitting = ref(false);
|
|
|
const orderId = ref('');
|
|
|
const orderNo = ref('');
|
|
|
+const showOrderOnly = ref(false);
|
|
|
+const orderItemCodes = ref<Set<string>>(new Set());
|
|
|
+
|
|
|
+const isInOrder = (item: any) => {
|
|
|
+ const code = item.product_code || item.productCode || '';
|
|
|
+ return orderItemCodes.value.has(code);
|
|
|
+};
|
|
|
|
|
|
const totalReplenishCount = computed(() => replenishItems.value.reduce((s, i) => s + (i.quantity || 0), 0));
|
|
|
|
|
|
@@ -144,7 +155,7 @@ onMounted(async () => {
|
|
|
let orderItems: any[] = [];
|
|
|
const orderStr = uni.getStorageSync('pendingReplenishOrder');
|
|
|
if (orderStr) {
|
|
|
- try { const od = JSON.parse(orderStr); if (od.orderId === orderId.value) { orderNo.value = od.orderNo || ''; orderItems = od.items || []; } } catch { }
|
|
|
+ try { const od = JSON.parse(orderStr); if (od.orderId === orderId.value) { orderNo.value = od.orderNo || ''; orderItems = od.items || []; orderItemCodes.value = new Set(orderItems.map((oi: any) => oi.productCode)); showOrderOnly.value = true; } } catch { }
|
|
|
}
|
|
|
|
|
|
replenishItems.value = list.filter((it: any) => it.product_id || it.productId).map((it: any) => {
|
|
|
@@ -188,8 +199,14 @@ onMounted(async () => {
|
|
|
|
|
|
// ====== Inventory ======
|
|
|
.inventory-section { padding: 0 24rpx; flex: 1; height: 0; overflow-y: auto; }
|
|
|
-.section-head { padding: $spacing-3 0 $spacing-2; }
|
|
|
+.section-head { display: flex; align-items: center; justify-content: space-between; padding: $spacing-3 0 $spacing-2; }
|
|
|
.section-title { font-size: $font-size-md; font-weight: 700; color: $text-color-primary; }
|
|
|
+.order-toggle { display: flex; align-items: center; gap: 8rpx; }
|
|
|
+.toggle-label { font-size: 20rpx; color: $text-color-muted; }
|
|
|
+.toggle-switch { width: 56rpx; height: 32rpx; border-radius: 16rpx; background: $border-color; position: relative; transition: background 0.2s;
|
|
|
+ .toggle-knob { width: 26rpx; height: 26rpx; border-radius: 50%; background: $bg-color-card; position: absolute; top: 3rpx; left: 3rpx; transition: left 0.2s; box-shadow: 0 1rpx 4rpx rgba(0,0,0,0.1); }
|
|
|
+ &.on { background: $primary-color; .toggle-knob { left: 27rpx; } }
|
|
|
+}
|
|
|
|
|
|
.empty-state { display: flex; flex-direction: column; align-items: center; padding: 80rpx 0; }
|
|
|
.empty-icon-box { width: 96rpx; height: 96rpx; background: $bg-color-secondary; border-radius: $radius-lg; display: flex; align-items: center; justify-content: center; margin-bottom: $spacing-2; }
|