fix: preserve reviewer risk notice after standard adjustment

This commit is contained in:
caoxiaozhu
2026-06-03 19:10:29 +08:00
parent cb36d78fa2
commit 0f8bc4071a
3 changed files with 80 additions and 16 deletions

View File

@@ -24,6 +24,9 @@ import {
buildEmployeeProfileAdviceItems,
buildTravelReceiptMaterialPrompts
} from '../src/views/scripts/travelRequestDetailAdviceModel.js'
import {
filterSubmitterResolvedRiskCards
} from '../src/views/scripts/travelRequestDetailStandardAdjustment.js'
const detailViewTemplate = readFileSync(
fileURLToPath(new URL('../src/views/TravelRequestDetailView.vue', import.meta.url)),
@@ -708,7 +711,8 @@ test('expense detail shows standard-adjusted reimbursable amount separately from
assert.match(detailViewTemplate, /submitConfirmAmountDisplay/)
assert.match(detailViewStyle, /\.expense-original-amount[\s\S]*text-decoration-line: line-through/)
assert.match(detailViewScript, /const expenseTotal = computed\(\(\) => \{[\s\S]*item\.reimbursableAmount/)
assert.match(detailViewScript, /filterSubmitterStandardAdjustedRiskCards/)
assert.match(detailViewScript, /filterSubmitterResolvedRiskCards/)
assert.doesNotMatch(detailViewScript, /filterSubmitterStandardAdjustedRiskCards/)
assert.match(detailViewScript, /acceptExpenseClaimStandardAdjustment/)
assert.match(detailExpenseModelScript, /STANDARD_ADJUSTMENT_RISK_SOURCE = 'reimbursement_standard_adjustment'/)
assert.match(requestsComposableScript, /STANDARD_ADJUSTMENT_RISK_SOURCE = 'reimbursement_standard_adjustment'/)
@@ -744,6 +748,66 @@ test('expense detail shows standard-adjusted reimbursable amount separately from
assert.equal(item.hasStandardAdjustment, true)
})
test('standard adjustment resolves submitter risk prompt only after accepted while reviewer still sees notice', () => {
const originalRiskCard = {
id: 'risk-hotel-1',
source: 'attachment_analysis',
itemId: 'expense-item-1',
tone: 'high',
risk: '住宿票据金额超过职级标准。'
}
const reviewerNoticeCard = {
id: 'standard-adjustment-1',
source: 'reimbursement_standard_adjustment',
itemId: 'expense-item-1',
tone: 'medium',
risk: '提交人已选择按职级标准报销,超出部分由员工自担。'
}
const expenseItems = [{ id: 'expense-item-1' }]
const standardAdjustmentMap = buildStandardAdjustmentMap({
riskFlags: [
{
source: 'reimbursement_standard_adjustment',
item_id: 'expense-item-1',
original_amount: '880.00',
reimbursable_amount: '600.00',
employee_absorbed_amount: '280.00'
}
]
})
assert.deepEqual(
filterSubmitterResolvedRiskCards({
cards: [originalRiskCard],
businessStage: 'reimbursement',
isCurrentApplicant: true,
expenseItems,
standardAdjustmentMap: new Map()
}),
[originalRiskCard]
)
assert.deepEqual(
filterSubmitterResolvedRiskCards({
cards: [originalRiskCard],
businessStage: 'reimbursement',
isCurrentApplicant: true,
expenseItems,
standardAdjustmentMap
}),
[]
)
assert.deepEqual(
filterSubmitterResolvedRiskCards({
cards: [originalRiskCard, reviewerNoticeCard],
businessStage: 'reimbursement',
isCurrentApplicant: false,
expenseItems,
standardAdjustmentMap
}),
[originalRiskCard, reviewerNoticeCard]
)
})
test('expense item upload remains limited to one receipt per detail row', () => {
assert.match(detailViewTemplate, /ref="expenseUploadInput"[\s\S]*type="file"/)
assert.doesNotMatch(