From 8dc5ab2b54fcd64ea8ec19ae4aa3bf53c7d9dec4 Mon Sep 17 00:00:00 2001 From: Timi Date: Mon, 21 Sep 2026 14:23:13 +0800 Subject: [PATCH] better unit selector --- src/pages/product/ProductStockDetail.vue | 61 ++++++++++++------------ 1 file changed, 30 insertions(+), 31 deletions(-) diff --git a/src/pages/product/ProductStockDetail.vue b/src/pages/product/ProductStockDetail.vue index 279c689..655b355 100644 --- a/src/pages/product/ProductStockDetail.vue +++ b/src/pages/product/ProductStockDetail.vue @@ -9,13 +9,24 @@ - + + + @@ -107,7 +109,6 @@ import { Message } from "@/utils/message"; import { permissionCodes } from "@/utils/permission"; type ManualStockOperation = Extract; -type PickerValue = string | number; defineOptions({ name: "ProductStockDetail" }); @@ -122,15 +123,12 @@ const isLoading = ref(false); const operationVisible = ref(false); const operationType = ref("MANUAL_IN"); const selectedUnitId = shallowRef(""); -const unitPickerVisible = shallowRef(false); -const unitPickerDraft = ref([]); const canOperate = computed(() => userStore.hasPermissions(permissionCodes.productStock.create)); const unitList = computed(() => (sku.value?.unitList || []).filter(unit => !!unit.id)); const selectedUnit = computed(() => unitList.value.find(unit => unit.id === selectedUnitId.value) || unitList.value.find(unit => unit.isBase) || unitList.value[0]); const selectedUnitName = computed(() => selectedUnit.value?.name || "基础单位"); -const unitPickerOptions = computed(() => [unitList.value.map(unit => ({ label: unit.name || "未命名单位", value: unit.id || "" }))]); const displayStock = computed(() => ({ onHandQuantity: getStockQuantityText(stock.value?.onHandQuantity), availableQuantity: getStockQuantityText(stock.value?.availableQuantity), @@ -173,20 +171,10 @@ function setDefaultUnit(nextSku: ProductSku): void { selectedUnitId.value = nextUnitList.find(unit => unit.isBase)?.id || nextUnitList[0]?.id || ""; } -function openUnitPicker(): void { - if (1 >= unitList.value.length) { - return; - } - unitPickerDraft.value = [selectedUnit.value?.id || ""]; - unitPickerVisible.value = true; -} - -function confirmUnit(value: PickerValue[]): void { - const unitId = String(value[0] || ""); +function selectUnit(unitId: string): void { if (unitList.value.some(unit => unit.id === unitId)) { selectedUnitId.value = unitId; } - unitPickerVisible.value = false; } async function loadAll(): Promise { @@ -341,6 +329,17 @@ onUnmounted(() => navBarStore.clearRight()); } } + .units { + + .options { + --td-button-border-radius: .5rem; + + gap: .5rem; + display: flex; + flex-wrap: wrap; + } + } + .actions-wrap { :deep(.content) {