This commit is contained in:
2026-08-14 14:27:03 +08:00
parent 724848feb6
commit a81af4a664
64 changed files with 961 additions and 176 deletions
@@ -78,10 +78,45 @@ describe('FinanceCustomerStatementsView', () => {
expect(document.body.textContent).toContain('hash-81')
expect(document.body.textContent).toContain('优惠调整')
expect(document.body.textContent).toContain('创建人A')
expect(document.body.textContent).toContain('2026-08-20 11:00:00')
expect(document.body.textContent).toContain('2026-08-20 11:00')
expect(document.querySelector('.el-drawer')).toBeNull()
})
it('resolves customer names from the active customer list and never exposes internal customer or operator ids', async () => {
const internalCustomerId = '2088123456789'
const internalOperatorId = '1000001'
vi.mocked(listPlatformTenants).mockResolvedValue({ records: [{ id: internalCustomerId, tenantName: '虫虫跨境科技', status: 'ACTIVE' } as never], page: 1, size: 200, total: 1, pages: 1 })
const internalStatement = {
...statement, customerId: internalCustomerId, customerName: `客户${internalCustomerId}`,
createdBy: internalOperatorId, createdAt: '2026-08-14T03:27:34Z', updatedBy: internalOperatorId, updatedAt: '2026-08-14T04:28:35Z',
}
const internalDetail = {
...detail, ...internalStatement,
paymentHistory: [{ ...detail.paymentHistory[0]!, createdBy: internalOperatorId, occurredAt: '2026-08-14T04:28:35Z' }],
}
vi.mocked(listFinanceStatements).mockResolvedValue([internalStatement])
vi.mocked(getReconciliationStatement).mockResolvedValue(internalDetail)
const wrapper = await mountPage(['platform:finance:customer-statement:list', 'platform:customer:list', 'platform:finance:reconciliation:adjust'])
await (wrapper.vm as unknown as { openDetail(row: FinanceStatementReadModel): Promise<void> }).openDetail(internalStatement)
await flushPromises()
const text = document.body.textContent || ''
expect(text).toContain('虫虫跨境科技')
expect(document.querySelector('[aria-label="客户对账单列表"]')?.textContent).toContain('虫虫跨境科技')
expect(document.querySelector('[aria-label="所选对账单联动明细"]')?.textContent).toContain('虫虫跨境科技')
expect(text).not.toContain(`客户${internalCustomerId}`)
expect(text).not.toContain(internalOperatorId)
expect(text).toContain('操作人信息缺失')
expect(text).toContain('2026-08-14 03:27')
expect(text).not.toContain('2026-08-14T03:27:34Z')
await (wrapper.vm as unknown as { openAdjustment(row: FinanceStatementReadModel): Promise<void> }).openAdjustment(internalStatement)
await flushPromises()
expect(document.body.textContent).toContain('调整客户对账单')
expect(document.body.textContent).toContain('运费')
})
it('filters hydrated statements by status, bill number, container, period, settlement and payment date', async () => {
const wrapper = await mountPage()
const vm = wrapper.vm as unknown as { load(model: Record<string, unknown>): Promise<void>; filters: Record<string, unknown>; filteredRows: FinanceStatementReadModel[] }