feat(cleaner): add configurable row number protection toggle

This commit is contained in:
Misaka_Company
2026-08-04 09:43:31 +08:00
parent 98567d69f0
commit 056bf3908c
10 changed files with 125 additions and 26 deletions

View File

@@ -23,7 +23,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 100,
pendingQty: '',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
expect(result).toBe(true)
@@ -34,7 +35,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 100,
pendingQty: '',
materialCode: 'MAT999',
deleteSet
deleteSet,
enableRowProtection: true
})
expect(result).toBe(false)
@@ -45,7 +47,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 5000,
pendingQty: '',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
expect(result).toBe(false)
@@ -56,7 +59,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 100,
pendingQty: '5',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
expect(result).toBe(false)
@@ -67,7 +71,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 100,
pendingQty: ' ',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
expect(result).toBe(true) // whitespace-only is treated as empty after trim
@@ -80,7 +85,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 1999,
pendingQty: '',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
).toBe(true)
@@ -90,7 +96,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 2000,
pendingQty: '',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
).toBe(false)
@@ -100,7 +107,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 7999,
pendingQty: '',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
).toBe(false)
@@ -110,10 +118,47 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 8000,
pendingQty: '',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
).toBe(true)
})
it('should allow deletion when row protection is disabled (row in 2000-7999)', () => {
const result = cleaner.shouldDeleteMaterial({
rowNumber: 5000,
pendingQty: '',
materialCode: 'MAT001',
deleteSet,
enableRowProtection: false
})
expect(result).toBe(true)
})
it('should still block deletion when row protection is disabled but pendingQty is not empty', () => {
const result = cleaner.shouldDeleteMaterial({
rowNumber: 5000,
pendingQty: '10',
materialCode: 'MAT001',
deleteSet,
enableRowProtection: false
})
expect(result).toBe(false)
})
it('should still block deletion when row protection is disabled but material not in delete set', () => {
const result = cleaner.shouldDeleteMaterial({
rowNumber: 5000,
pendingQty: '',
materialCode: 'MAT999',
deleteSet,
enableRowProtection: false
})
expect(result).toBe(false)
})
})
describe('getSkipReason()', () => {
@@ -125,7 +170,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 3000,
pendingQty: '',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
expect(reason).toBe('行号在 2000-7999 范围内(受保护)')
@@ -136,13 +182,15 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 100,
pendingQty: '',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
const reason = cleaner.getSkipReason({
rowNumber: 100,
pendingQty: '',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
expect(result).toBe(true)
@@ -154,7 +202,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 100,
pendingQty: '',
materialCode: 'MAT999',
deleteSet
deleteSet,
enableRowProtection: true
})
expect(reason).toBe('物料不在删除清单中')
@@ -165,7 +214,8 @@ describe('CleanerService - Helper Methods', () => {
rowNumber: 100,
pendingQty: '10',
materialCode: 'MAT001',
deleteSet
deleteSet,
enableRowProtection: true
})
expect(reason).toBe('累计待发数量不为空')