diff --git a/src/utils/__tests__/writeOffItem.test.ts b/src/utils/__tests__/writeOffItem.test.ts
index 4c3f32c..0bdc678 100644
--- a/src/utils/__tests__/writeOffItem.test.ts
+++ b/src/utils/__tests__/writeOffItem.test.ts
@@ -1,13 +1,15 @@
import assert from 'node:assert/strict'
import { test } from 'node:test'
import {
- findWriteOffItem,
getWriteOffItemAvailability,
getWriteOffItemQuantity,
getWriteOffStatusText,
- resolveWriteOffItemSelection
+ resolveWriteOffItemSelection,
+ shouldShowManualSelectionHint
} from '../writeOffItem.ts'
+const writeOffItemModule = await import('../writeOffItem.ts')
+
const items = [
{
orderWriteOffItemId: 'item-1',
@@ -27,17 +29,6 @@ const items = [
}
]
-test('finds write off item by id before matching duplicated package name', () => {
- assert.equal(
- findWriteOffItem(items, { orderWriteOffItemId: 'item-2', packageName: '双人套餐' })?.orderWriteOffItemId,
- 'item-2'
- )
-})
-
-test('matches legacy package name when item id is absent', () => {
- assert.equal(findWriteOffItem(items, { packageName: '双人套餐' })?.orderWriteOffItemId, 'item-1')
-})
-
test('calculates total, written off and remaining quantity from item fields', () => {
assert.deepEqual(getWriteOffItemQuantity(items[1]), {
total: 2,
@@ -78,6 +69,20 @@ test('does not auto select when legacy package name matches multiple available i
assert.deepEqual(selection.options.map((item) => item.orderWriteOffItemId), ['item-1', 'item-2'])
})
+test('hides manual selection hint after an item is selected', () => {
+ const selection = resolveWriteOffItemSelection(items, {
+ source: 'scan',
+ packageName: '双人套餐'
+ })
+
+ assert.equal(shouldShowManualSelectionHint(selection, ''), true)
+ assert.equal(shouldShowManualSelectionHint(selection, 'item-1'), false)
+})
+
+test('does not export legacy package name finder', () => {
+ assert.equal('findWriteOffItem' in writeOffItemModule, false)
+})
+
test('auto selects the only available item matched by legacy package name', () => {
const selection = resolveWriteOffItemSelection(
[
diff --git a/src/utils/writeOffItem.ts b/src/utils/writeOffItem.ts
index 8ed51cd..2acc3a9 100644
--- a/src/utils/writeOffItem.ts
+++ b/src/utils/writeOffItem.ts
@@ -1,10 +1,5 @@
import type { CommodityPackageConfig } from '@/types/order'
-export interface WriteOffItemMatch {
- orderWriteOffItemId?: string
- packageName?: string
-}
-
export interface WriteOffItemQuantity {
total: number
writtenOff: number
@@ -83,20 +78,6 @@ export const getWriteOffItemAvailability = (item?: CommodityPackageConfig): Writ
return { available: true, reason: '' }
}
-export const findWriteOffItem = (items: CommodityPackageConfig[], match: WriteOffItemMatch) => {
- const itemId = String(match.orderWriteOffItemId || '').trim()
- if (itemId) {
- return items.find((item) => getWriteOffItemId(item) === itemId)
- }
-
- const packageName = String(match.packageName || '').trim()
- if (packageName) {
- return items.find((item) => getWriteOffItemName(item) === packageName || item.packageName === packageName)
- }
-
- return undefined
-}
-
export const getFirstAvailableWriteOffItem = (items: CommodityPackageConfig[]) => {
return items.find((item) => getWriteOffItemAvailability(item).available)
}
@@ -161,6 +142,10 @@ export const resolveWriteOffItemSelection = (
}
}
+export const shouldShowManualSelectionHint = (selection: WriteOffItemSelection, selectedItemId: string) => {
+ return selection.requiresManualSelection && !String(selectedItemId || '').trim()
+}
+
export const getWriteOffStatusText = (item?: CommodityPackageConfig) => {
const status = item?.writeOffStatus ?? item?.packageStatus
const key = String(status)
diff --git a/src/views/verify/VerifyConfirmView.vue b/src/views/verify/VerifyConfirmView.vue
index 0575494..57f203d 100644
--- a/src/views/verify/VerifyConfirmView.vue
+++ b/src/views/verify/VerifyConfirmView.vue
@@ -16,6 +16,7 @@ import {
getWriteOffItemQuantity,
getWriteOffStatusText,
resolveWriteOffItemSelection,
+ shouldShowManualSelectionHint,
toNumber
} from '@/utils/writeOffItem'
import {
@@ -60,7 +61,7 @@ const itemSelection = computed(() => {
const packageOptions = computed(() => itemSelection.value.options)
const isScanItemLocked = computed(() => itemSelection.value.locked)
const packageMismatch = computed(() => itemSelection.value.mismatch)
-const requiresManualSelection = computed(() => itemSelection.value.requiresManualSelection)
+const showManualSelectionHint = computed(() => shouldShowManualSelectionHint(itemSelection.value, selectedItemId.value))
const selectedPackage = computed(() => {
return packageOptions.value.find((item) => getWriteOffItemId(item) === selectedItemId.value)
@@ -271,7 +272,7 @@ onMounted(loadDetail)
该订单当前不可核销,请返回订单详情核对状态。
-